Merge "Revert "[FileBackend] Added optional callback parameter to concatenate().""
authorAaron Schulz <aschulz@wikimedia.org>
Sun, 25 Nov 2012 01:05:56 +0000 (01:05 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sun, 25 Nov 2012 01:05:56 +0000 (01:05 +0000)
183 files changed:
RELEASE-NOTES-1.20
RELEASE-NOTES-1.21
docs/hooks.txt
includes/AutoLoader.php
includes/Category.php
includes/DefaultSettings.php
includes/EditPage.php
includes/GlobalFunctions.php
includes/OutputPage.php
includes/Preferences.php
includes/Sanitizer.php
includes/SkinTemplate.php
includes/api/ApiMain.php
includes/api/ApiParse.php
includes/api/ApiWatch.php
includes/content/CssContentHandler.php
includes/content/JavaScriptContentHandler.php
includes/content/TextContentHandler.php
includes/content/WikitextContentHandler.php
includes/diff/DairikiDiff.php
includes/filebackend/FSFile.php
includes/filebackend/FileBackend.php
includes/filebackend/FileBackendStore.php
includes/filebackend/FileOp.php
includes/filebackend/SwiftFileBackend.php
includes/filerepo/FileRepo.php
includes/filerepo/file/File.php
includes/filerepo/file/ForeignDBFile.php
includes/filerepo/file/LocalFile.php
includes/filerepo/file/UnregisteredLocalFile.php
includes/installer/Installer.i18n.php
includes/installer/MysqlUpdater.php
includes/installer/SqliteUpdater.php
includes/json/FormatJson.php
includes/media/MediaHandler.php
includes/parser/Parser.php
includes/parser/Tidy.php
includes/resourceloader/ResourceLoaderModule.php
includes/search/SearchEngine.php
includes/site/MediaWikiSite.php
includes/specials/SpecialChangeEmail.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUserlogin.php
includes/tidy.conf
includes/upload/UploadBase.php
includes/upload/UploadFromChunks.php
includes/upload/UploadStash.php
languages/Language.php
languages/Names.php
languages/classes/LanguageGan.php
languages/classes/LanguageIu.php
languages/classes/LanguageKk.php
languages/classes/LanguageKu.php
languages/classes/LanguageShi.php
languages/classes/LanguageSr.php
languages/classes/LanguageZh.php
languages/messages/MessagesArc.php
languages/messages/MessagesArz.php
languages/messages/MessagesAst.php
languages/messages/MessagesBa.php
languages/messages/MessagesBe.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBn.php
languages/messages/MessagesBr.php
languages/messages/MessagesCa.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCs.php
languages/messages/MessagesCu.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/MessagesEu.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFr.php
languages/messages/MessagesGl.php
languages/messages/MessagesHe.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/MessagesKhw.php
languages/messages/MessagesKiu.php
languages/messages/MessagesKm.php
languages/messages/MessagesKn.php
languages/messages/MessagesKo.php
languages/messages/MessagesKrc.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKu_latn.php
languages/messages/MessagesLa.php
languages/messages/MessagesLb.php
languages/messages/MessagesLez.php
languages/messages/MessagesLt.php
languages/messages/MessagesLzh.php
languages/messages/MessagesMin.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMt.php
languages/messages/MessagesNb.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesOr.php
languages/messages/MessagesOs.php
languages/messages/MessagesPcd.php
languages/messages/MessagesPfl.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/MessagesScn.php
languages/messages/MessagesSi.php
languages/messages/MessagesSk.php
languages/messages/MessagesSl.php
languages/messages/MessagesSv.php
languages/messages/MessagesTe.php
languages/messages/MessagesTk.php
languages/messages/MessagesTr.php
languages/messages/MessagesTyv.php
languages/messages/MessagesUk.php
languages/messages/MessagesVep.php
languages/messages/MessagesVi.php
languages/messages/MessagesVot.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
languages/utils/CLDRPluralRuleEvaluator.php
maintenance/language/messages.inc
maintenance/sqlite/archives/patch-profiling.sql [new file with mode: 0644]
profileinfo.php
resources/jquery/jquery.tablesorter.js
resources/mediawiki.api/mediawiki.api.watch.js
resources/mediawiki.language/languages/bs.js
resources/mediawiki.language/languages/dsb.js
resources/mediawiki.language/languages/fi.js
resources/mediawiki.language/languages/ga.js
resources/mediawiki.language/languages/he.js
resources/mediawiki.language/languages/hsb.js
resources/mediawiki.language/languages/hu.js
resources/mediawiki.language/languages/hy.js
resources/mediawiki.language/languages/la.js
resources/mediawiki.language/languages/os.js
resources/mediawiki.language/languages/ru.js
resources/mediawiki.language/languages/sl.js
resources/mediawiki.language/languages/uk.js
resources/mediawiki.special/mediawiki.special.preferences.js
skins/CologneBlue.php
skins/Modern.php
skins/MonoBook.php
skins/Standard.php
skins/Vector.php
skins/cologneblue/screen.css
skins/common/shared.css
skins/modern/main.css
skins/monobook/main.css
skins/simple/main.css
skins/vector/screen.css
skins/vector/vector.js
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/phpunit/MediaWikiPHPUnitCommand.php
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/EditPageTest.php
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/SanitizerTest.php
tests/phpunit/includes/WikiPageTest.php
tests/phpunit/includes/content/WikitextContentHandlerTest.php
tests/phpunit/includes/filebackend/FileBackendTest.php
tests/phpunit/includes/parser/NewParserTest.php
tests/phpunit/languages/LanguageTest.php

index 1a92968..ea8ed6d 100644 (file)
@@ -230,8 +230,6 @@ milestone in Bugzilla.
 * (bug 36812) Special:ActiveUsers "Hide bots" should hide users from any group
   having the "bot" user right, instead of just the default "bot" user group.
 * (bug 35082) mw.util.addPortletLink incorrectly adds link to mutiple <ul> tags.
-* (bug 36495) Sanitizer::fixDeprecatedAttributes should convert "align"
-  attribute to margin or float instead of text-align (for non-table-cells).
 * (bug 36991) jquery.tablesorter should extract date sort format from date
   string instead of global config. Dates like "April 1 2012" and "1 April 2012"
   now sort correctly regardless of the content language's DefaultDateFormat.
@@ -284,6 +282,7 @@ milestone in Bugzilla.
 * (bug 40500) ResourceLoader should not ignore media-type for urls in debug mode.
 * (bug 40660) ResourceLoaderWikiModule should not convert "&nbsp;" to a space
   for pages from the MediaWiki-namespace.
+* (bug 40329) (bug 40632) Removed CleanupPresentationalAttributes feature.
 
 === API changes in 1.20 ===
 * (bug 34316) Add ability to retrieve maximum upload size from MediaWiki API.
index eda9f23..a0035d5 100644 (file)
@@ -37,6 +37,14 @@ production.
 * (bug 40876) Icon for PSD (Adobe Photoshop) file types.
 * (bug 40641) Implemented Special:Version/Credits with a list of contributors.
 * (bug 7851) Implemented one-click AJAX patrolling.
+* The <data>, <time>, <meta>, and <link> elements are allowed within WikiText
+  for use with Microdata.
+* The HTML5 <mark> tag has been whitelisted.
+* Added ParserCloned hook for when the Parser object is cloned.
+* Added AlternateEditPreview hook to allow extensions to replace the page
+  preview from the edit page.
+* Added EditPage::showStandardInputs:options hook to allow extensions to add
+  new fields to the "editOptions" area of the edit form.
 
 === Bug fixes in 1.21 ===
 * (bug 40353) SpecialDoubleRedirect should support interwiki redirects.
@@ -51,14 +59,14 @@ production.
   compatibility. This also works with Squid in reverse-proxy mode. If you wish 
   to support Squid configured in forward-proxy mode, set 
   $wgSquidPurgeUseHostHeader to false.
-* (bug 37020) sql.php with readline eats semicolon
+* (bug 37020) sql.php with readline eats semicolon.
 * (bug 11748) Properly handle optionally-closed HTML tags when Tidy is
   disabled, and don't wrap HTML-syntax definition lists in paragraphs.
 * (bug 41409) Diffs while editing an old revision should again diff against the
   current revision.
 * (bug 41494) Honor $wgLogExceptionBacktrace when logging non-API exceptions
   caught during API execution.
-* (bug 37963) Fixed loading process for user options
+* (bug 37963) Fixed loading process for user options.
 * (bug 26995) Update filename field on Upload page after having sanitized it.
 * (bug 41793) Contribution links to users with 0 edits on Special:ListUsers didn't
   show up red.
@@ -71,15 +79,17 @@ production.
 * (bug 41886) Rowspans are no longer exploded by tablesorter until the table is
   actually sorted.
 * (bug 2865)  User interface HTML elements don't use lang attribute
-  (completed the fix by adding the lang attribute to firstHeading)
+  (completed the fix by adding the lang attribute to firstHeading).
 * (bug 42173) Removed namespace prefixes on Special:UncategorizedCategories.
+* (bug 36053) Log in "returnto" feature forgets query parameters if no
+  title parameter was specified.
 
 === API changes in 1.21 ===
-* prop=revisions can now report the contentmodel and contentformat, see docs/contenthandler.txt
+* prop=revisions can now report the contentmodel and contentformat, see docs/contenthandler.txt.
 * action=edit and action=parse now support contentmodel and contentformat parameters to control the interpretation of
   page content; See docs/contenthandler.txt for details.
 * (bug 35693) ApiQueryImageInfo now suppresses errors when unserializing metadata.
-* (bug 40111) Disable minor edit for page/section creation by API
+* (bug 40111) Disable minor edit for page/section creation by API.
 * (bug 41042) Revert change to action=parse&page=... behavior when the page does not exist.
 
 === Languages updated in 1.21 ===
@@ -87,6 +97,13 @@ production.
 MediaWiki supports over 350 languages. Many localisations are updated
 regularly. Below only new and removed languages are listed, as well as
 changes to languages because of Bugzilla reports.
+
+* (bug 30040) Autonym for nds-nl is now 'Nedersaksies' (was 'Nedersaksisch').
+* (bug 34977) Now formatted numbers in Spanish use space as separator
+  for thousands, as mandated by the Real Academia Española.
+* (bug 35031) Kurdish formatted numbers now use period and comma
+  as separators for thousands and decimals respectively.
+
 === Other changes in 1.21 ===
 
 == Compatibility ==
index 2ec269a..a9a7c10 100644 (file)
@@ -310,6 +310,15 @@ before showing the edit form ( EditPage::edit() ). This is triggered
 on &action=edit.
 $EditPage: the EditPage object
 
+'AlternateEditPreview': before generating the preview of the page when editing
+( EditPage::getPreviewText() ).
+$EditPage: the EditPage object
+&$content: the Content object for the text field from the edit page
+&$previewHTML: Text to be placed into the page for the preview
+&$parserOutput: the ParserOutput object for the preview
+return false and set $previewHTML and $parserOutput to output custom page
+preview HTML.
+
 'AlternateUserMailer': Called before mail is sent so that mail could
 be logged (or something else) instead of using PEAR or PHP's mail().
 Return false to skip the regular method of sending mail.  Return a
@@ -578,6 +587,11 @@ $create: Whether or not the restoration caused the page to be created
 (i.e. it didn't exist before)
 $comment: The comment associated with the undeletion.
 
+'ArticleUndeleteLogEntry': When a log entry is generated but not yet saved.
+$pageArchive: the PageArchive object
+&$logEntry: ManualLogEntry object
+$user: User who is performing the log action
+
 'ArticleUpdateBeforeRedirect': After a page is updated (usually on save),
 before the user is redirected back to the page
 &$article: the article
@@ -881,6 +895,12 @@ yourself. Alternatively, modifying $error and returning true will cause the
 contents of $error to be echoed at the top of the edit form as wikitext.
 Return true without altering $error to allow the edit to proceed.
 
+'EditPage::showStandardInputs:options': allows injection of form fields into
+the editOptions area
+$editor: EditPage instance (object)
+$out: an OutputPage instance to write to
+return value is ignored (should always be true)
+
 'EditPageBeforeConflictDiff': allows modifying the EditPage object and output
 when there's an edit conflict.  Return false to halt normal diff output; in
 this case you're responsible for computing and outputting the entire "conflict"
index a49d901..8e2447d 100644 (file)
@@ -580,6 +580,7 @@ $wgAutoloadLocalClasses = array(
        'MoveFileOp' => 'includes/filebackend/FileOp.php',
        'DeleteFileOp' => 'includes/filebackend/FileOp.php',
        'CreateFileOp' => 'includes/filebackend/FileOp.php',
+       'DescribeFileOp' => 'includes/filebackend/FileOp.php',
        'NullFileOp' => 'includes/filebackend/FileOp.php',
 
        # includes/filerepo
index 6a5eac7..b9c9609 100644 (file)
@@ -333,7 +333,7 @@ class Category {
                        ),
                        array( 'cl_to' => $this->mName, 'page_id = cl_from' ),
                        __METHOD__,
-                       'LOCK IN SHARE MODE'
+                       array( 'LOCK IN SHARE MODE' )
                );
                $ret = $dbw->update(
                        'category',
index 494b2a3..60c3ab8 100644 (file)
@@ -2535,11 +2535,6 @@ $wgAllowRdfaAttributes = false;
  */
 $wgAllowMicrodataAttributes = false;
 
-/**
- * Cleanup as much presentational html like valign -> css vertical-align as we can
- */
-$wgCleanupPresentationalAttributes = true;
-
 /**
  * Should we try to make our HTML output well-formed XML?  If set to false,
  * output will be a few bytes shorter, and the HTML will arguably be more
@@ -4591,7 +4586,9 @@ $wgProfileOnly = false;
  * Log sums from profiling into "profiling" table in db.
  *
  * You have to create a 'profiling' table in your database before using
- * this feature, see maintenance/archives/patch-profiling.sql
+ * this feature.  Run set $wgProfileToDatabase to true in
+ * LocalSettings.php and run maintenance/update.php or otherwise
+ * manually add patch-profiling.sql to your database.
  *
  * To enable profiling, edit StartProfiler.php
  */
index 89daf52..5ab5adc 100644 (file)
@@ -2780,7 +2780,9 @@ HTML
                        wfMessage( 'newwindow' )->parse();
                $wgOut->addHTML( "      <span class='cancelLink'>{$cancel}</span>\n" );
                $wgOut->addHTML( "      <span class='editHelp'>{$edithelp}</span>\n" );
-               $wgOut->addHTML( "</div><!-- editButtons -->\n</div><!-- editOptions -->\n" );
+               $wgOut->addHTML( "</div><!-- editButtons -->\n" );
+               wfRunHooks( 'EditPage::showStandardInputs:options', array( $this, $wgOut, &$tabindex ) );
+               $wgOut->addHTML( "</div><!-- editOptions -->\n" );
        }
 
        /**
@@ -2930,6 +2932,12 @@ HTML
                try {
                        $content = $this->toEditContent( $this->textbox1 );
 
+                       $previewHTML = '';
+                       if ( !wfRunHooks( 'AlternateEditPreview', array( $this, &$content, &$previewHTML, &$this->mParserOutput ) ) ) {
+                               wfProfileOut( __METHOD__ );
+                               return $previewHTML;
+                       }
+
                        if ( $this->mTriedSave && !$this->mTokenOk ) {
                                if ( $this->mTokenOkExceptSuffix ) {
                                        $note = wfMessage( 'token_suffix_mismatch' )->plain() ;
index 7dc9a70..982e965 100644 (file)
@@ -1214,9 +1214,18 @@ function wfLogProfilingData() {
        if ( $wgUser->isItemLoaded( 'id' ) && $wgUser->isAnon() ) {
                $forward .= ' anon';
        }
+
+       // Command line script uses a FauxRequest object which does not have
+       // any knowledge about an URL and throw an exception instead.
+       try {
+               $requestUrl = $wgRequest->getRequestURL();
+       } catch ( MWException $e ) {
+               $requestUrl = 'n/a';
+       }
+
        $log = sprintf( "%s\t%04.3f\t%s\n",
                gmdate( 'YmdHis' ), $elapsed,
-               urldecode( $wgRequest->getRequestURL() . $forward ) );
+               urldecode( $requestUrl . $forward ) );
 
        wfErrorLog( $log . $profiler->getOutput(), $wgDebugLogFile );
 }
index ab7e62f..8399a8c 100644 (file)
@@ -1769,14 +1769,12 @@ class OutputPage extends ContextSource {
                                } else {
                                        $aloption[] = 'string-contains=' . $variant;
 
-                                       // IE and some other browsers use another form of language code
-                                       // in their Accept-Language header, like "zh-CN" or "zh-TW".
+                                       // IE and some other browsers use BCP 47 standards in
+                                       // their Accept-Language header, like "zh-CN" or "zh-Hant".
                                        // We should handle these too.
-                                       $ievariant = explode( '-', $variant );
-                                       if ( count( $ievariant ) == 2 ) {
-                                               $ievariant[1] = strtoupper( $ievariant[1] );
-                                               $ievariant = implode( '-', $ievariant );
-                                               $aloption[] = 'string-contains=' . $ievariant;
+                                       $variantBCP47 = wfBCP47( $variant );
+                                       if ( $variantBCP47 !== $variant ) {
+                                               $aloption[] = 'string-contains=' . $variantBCP47;
                                        }
                                }
                        }
index 65a0d02..a3c684b 100644 (file)
@@ -1373,7 +1373,7 @@ class Preferences {
         * @return bool|Status|string
         */
        static function tryFormSubmit( $formData, $form, $entryPoint = 'internal' ) {
-               global $wgHiddenPrefs;
+               global $wgHiddenPrefs, $wgAuth;
 
                $user = $form->getModifiedUser();
                $result = true;
@@ -1422,6 +1422,8 @@ class Preferences {
 
                $user->saveSettings();
 
+               $wgAuth->updateExternalDB( $user );
+
                return $result;
        }
 
index 5aa0545..0034afe 100644 (file)
@@ -364,14 +364,17 @@ class Sanitizer {
         * @return string
         */
        static function removeHTMLtags( $text, $processCallback = null, $args = array(), $extratags = array(), $removetags = array() ) {
-               global $wgUseTidy;
+               global $wgUseTidy, $wgHtml5, $wgAllowMicrodataAttributes, $wgAllowImageTag;
 
                static $htmlpairsStatic, $htmlsingle, $htmlsingleonly, $htmlnest, $tabletags,
                        $htmllist, $listtags, $htmlsingleallowed, $htmlelementsStatic, $staticInitialised;
 
                wfProfileIn( __METHOD__ );
 
-               if ( !$staticInitialised ) {
+               // Base our staticInitialised variable off of the global config state so that if the globals
+               // are changed (like in the secrewed up test system) we will re-initialise the settings.
+               $globalContext = implode( '-', compact( 'wgHtml5', 'wgAllowMicrodataAttributes', 'wgAllowImageTag' ) );
+               if ( !$staticInitialised || $staticInitialised != $globalContext ) {
 
                        $htmlpairsStatic = array( # Tags that must be closed
                                'b', 'bdi', 'del', 'i', 'ins', 'u', 'font', 'big', 'small', 'sub', 'sup', 'h1',
@@ -381,13 +384,20 @@ class Sanitizer {
                                'ruby', 'rt' , 'rb' , 'rp', 'p', 'span', 'abbr', 'dfn',
                                'kbd', 'samp'
                        );
+                       if ( $wgHtml5 ) {
+                               $htmlpairsStatic = array_merge( $htmlpairsStatic, array( 'data', 'time', 'mark' ) );
+                       }
                        $htmlsingle = array(
                                'br', 'hr', 'li', 'dt', 'dd'
                        );
                        $htmlsingleonly = array( # Elements that cannot have close tags
                                'br', 'hr'
                        );
-                       $htmlnest = array( # Tags that can be nested directly or indirectly
+                       if ( $wgHtml5 && $wgAllowMicrodataAttributes ) {
+                               $htmlsingle[] = $htmlsingleonly[] = 'meta';
+                               $htmlsingle[] = $htmlsingleonly[] = 'link';
+                       }
+                       $htmlnest = array( # Tags that can be nested--??
                                'table', 'tr', 'td', 'th', 'div', 'blockquote', 'ol', 'ul',
                                'li', 'dl', 'dt', 'dd', 'font', 'big', 'small', 'sub', 'sup', 'span'
                        );
@@ -401,7 +411,6 @@ class Sanitizer {
                                'li',
                        );
 
-                       global $wgAllowImageTag;
                        if ( $wgAllowImageTag ) {
                                $htmlsingle[] = 'img';
                                $htmlsingleonly[] = 'img';
@@ -416,7 +425,7 @@ class Sanitizer {
                        foreach ( $vars as $var ) {
                                $$var = array_flip( $$var );
                        }
-                       $staticInitialised = true;
+                       $staticInitialised = $globalContext;
                }
                # Populate $htmlpairs and $htmlelements with the $extratags and $removetags arrays
                $extratags = array_flip( $extratags );
@@ -532,6 +541,10 @@ class Sanitizer {
                                                        call_user_func_array( $processCallback, array( &$params, $args ) );
                                                }
 
+                                               if ( !Sanitizer::validateTag( $params, $t ) ) {
+                                                       $badtag = true;
+                                               }
+
                                                # Strip non-approved attributes from the tag
                                                $newparams = Sanitizer::fixTagAttributes( $params, $t );
                                        }
@@ -555,16 +568,24 @@ class Sanitizer {
                                preg_match( '/^(\\/?)(\\w+)([^>]*?)(\\/{0,1}>)([^<]*)$/',
                                $x, $regs );
                                @list( /* $qbar */, $slash, $t, $params, $brace, $rest ) = $regs;
+                               $badtag = false;
                                if ( isset( $htmlelements[$t = strtolower( $t )] ) ) {
                                        if( is_callable( $processCallback ) ) {
                                                call_user_func_array( $processCallback, array( &$params, $args ) );
                                        }
+
+                                       if ( !Sanitizer::validateTag( $params, $t ) ) {
+                                               $badtag = true;
+                                       }
+
                                        $newparams = Sanitizer::fixTagAttributes( $params, $t );
-                                       $rest = str_replace( '>', '&gt;', $rest );
-                                       $text .= "<$slash$t$newparams$brace$rest";
-                               } else {
-                                       $text .= '&lt;' . str_replace( '>', '&gt;', $x);
+                                       if ( !$badtag ) {
+                                               $rest = str_replace( '>', '&gt;', $rest );
+                                               $text .= "<$slash$t$newparams$brace$rest";
+                                               continue;
+                                       }
                                }
+                               $text .= '&lt;' . str_replace( '>', '&gt;', $x);
                        }
                }
                wfProfileOut( __METHOD__ );
@@ -617,111 +638,35 @@ class Sanitizer {
        }
 
        /**
-        * Take an array of attribute names and values and fix some deprecated values
-        * for the given element type.
-        * This does not validate properties, so you should ensure that you call
-        * validateTagAttributes AFTER this to ensure that the resulting style rule
-        * this may add is safe.
-        *
-        * - Converts most presentational attributes like align into inline css
+        * Takes attribute names and values for a tag and the tag name and
+        * validates that the tag is allowed to be present.
+        * This DOES NOT validate the attributes, nor does it validate the
+        * tags themselves. This method only handles the special circumstances
+        * where we may want to allow a tag within content but ONLY when it has
+        * specific attributes set.
         *
-        * @param $attribs Array
-        * @param $element String
-        * @return Array
+        * @param $params
+        * @param $element
         */
-       static function fixDeprecatedAttributes( $attribs, $element ) {
-               global $wgHtml5, $wgCleanupPresentationalAttributes;
-
-               // presentational attributes were removed from html5, we can leave them
-               // in when html5 is turned off
-               if ( !$wgHtml5 || !$wgCleanupPresentationalAttributes ) {
-                       return $attribs;
-               }
-
-               $table = array( 'table' );
-               $cells = array( 'td', 'th' );
-               $colls = array( 'col', 'colgroup' );
-               $tblocks = array( 'tbody', 'tfoot', 'thead' );
-               $h = array( 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' );
-
-               $presentationalAttribs = array(
-                       'align' => array( 'text-align', array_merge( array( 'caption', 'hr', 'div', 'p', 'tr' ), $table, $cells, $colls, $tblocks, $h ) ),
-                       'clear' => array( 'clear', array( 'br' ) ),
-                       'height' => array( 'height', $cells ),
-                       'nowrap' => array( 'white-space', $cells ),
-                       'size' => array( 'height', array( 'hr' ) ),
-                       'type' => array( 'list-style-type', array( 'li', 'ol', 'ul' ) ),
-                       'valign' => array( 'vertical-align', array_merge( $cells, $colls, $tblocks ) ),
-                       'width' => array( 'width', array_merge( array( 'hr', 'pre' ), $table, $cells, $colls ) ),
-               );
-
-               // Ensure that any upper case or mixed case attributes are converted to lowercase
-               foreach ( $attribs as $attribute => $value ) {
-                       if ( $attribute !== strtolower( $attribute ) && array_key_exists( strtolower( $attribute ), $presentationalAttribs ) ) {
-                               $attribs[strtolower( $attribute )] = $value;
-                               unset( $attribs[$attribute] );
-                       }
-               }
-
-               $style = "";
-               foreach ( $presentationalAttribs as $attribute => $info ) {
-                       list( $property, $elements ) = $info;
+       static function validateTag( $params, $element ) {
+               $params = Sanitizer::decodeTagAttributes( $params );
 
-                       // Skip if this attribute is not relevant to this element
-                       if ( !in_array( $element, $elements ) ) {
-                               continue;
-                       }
-
-                       // Skip if the attribute is not used
-                       if ( !array_key_exists( $attribute, $attribs ) ) {
-                               continue;
+               if ( $element == 'meta' || $element == 'link' ) {
+                       if ( !isset( $params['itemprop'] ) ) {
+                               // <meta> and <link> must have an itemprop="" otherwise they are not valid or safe in content
+                               return false;
                        }
-
-                       $value = $attribs[$attribute];
-
-                       // For nowrap the value should be nowrap instead of whatever text is in the value
-                       if ( $attribute === 'nowrap' ) {
-                               $value = 'nowrap';
+                       if ( $element == 'meta' && !isset( $params['content'] ) ) {
+                               // <meta> must have a content="" for the itemprop
+                               return false;
                        }
-
-                       // clear="all" is clear: both; in css
-                       if ( $attribute === 'clear' && strtolower( $value ) === 'all' ) {
-                               $value = 'both';
+                       if ( $element == 'link' && !isset( $params['href'] ) ) {
+                               // <link> must have an associated href=""
+                               return false;
                        }
-
-                       // Size based properties should have px applied to them if they have no unit
-                       if ( in_array( $attribute, array( 'height', 'width', 'size' ) ) ) {
-                               if ( preg_match( '/^[\d.]+$/', $value ) ) {
-                                       $value = "{$value}px";
-                               }
-                       }
-
-                       // Table align is special, it's about block alignment instead of
-                       // content align (see also bug 40306)
-                       if ( $attribute === 'align' && in_array( $element, $table ) ) {
-                               if ( $value === 'center' ) {
-                                       $style .= ' margin-left: auto;';
-                                       $property = 'margin-right';
-                                       $value = 'auto';
-                               } else {
-                                       $property = 'float';
-                               }
-                       }
-
-                       $style .= " $property: $value;";
-
-                       unset( $attribs[$attribute] );
-               }
-
-               if ( $style ) {
-                       // Prepend our style rules so that they can be overridden by user css
-                       if ( isset($attribs['style']) ) {
-                               $style .= " " . $attribs['style'];
-                       }
-                       $attribs['style'] = trim($style);
                }
 
-               return $attribs;
+               return true;
        }
 
        /**
@@ -825,7 +770,7 @@ class Sanitizer {
                                unset( $out['itemid'] );
                                unset( $out['itemref'] );
                        }
-                       # TODO: Strip itemprop if we aren't descendants of an itemscope.
+                       # TODO: Strip itemprop if we aren't descendants of an itemscope or pointed to by an itemref.
                }
                return $out;
        }
@@ -972,7 +917,6 @@ class Sanitizer {
                }
 
                $decoded = Sanitizer::decodeTagAttributes( $text );
-               $decoded = Sanitizer::fixDeprecatedAttributes( $decoded, $element );
                $stripped = Sanitizer::validateTagAttributes( $decoded, $element );
 
                $attribs = array();
@@ -1451,10 +1395,7 @@ class Sanitizer {
         * @return Array
         */
        static function attributeWhitelist( $element ) {
-               static $list;
-               if( !isset( $list ) ) {
-                       $list = Sanitizer::setupAttributeWhitelist();
-               }
+               $list = Sanitizer::setupAttributeWhitelist();
                return isset( $list[$element] )
                        ? $list[$element]
                        : array();
@@ -1468,6 +1409,13 @@ class Sanitizer {
        static function setupAttributeWhitelist() {
                global $wgAllowRdfaAttributes, $wgHtml5, $wgAllowMicrodataAttributes;
 
+               static $whitelist, $staticInitialised;
+               $globalContext = implode( '-', compact( 'wgAllowRdfaAttributes', 'wgHtml5', 'wgAllowMicrodataAttributes' ) );
+
+               if ( isset( $whitelist ) && $staticInitialised == $globalContext ) {
+                       return $whitelist;
+               }
+
                $common = array( 'id', 'class', 'lang', 'dir', 'title', 'style' );
 
                if ( $wgAllowRdfaAttributes ) {
@@ -1500,7 +1448,7 @@ class Sanitizer {
 
                # Numbers refer to sections in HTML 4.01 standard describing the element.
                # See: http://www.w3.org/TR/html4/
-               $whitelist = array (
+               $whitelist = array(
                        # 7.5.4
                        'div'        => $block,
                        'center'     => $common, # deprecated
@@ -1632,7 +1580,28 @@ class Sanitizer {
                        # HTML 5 section 4.6
                        'bdi' => $common,
 
+               );
+
+               if ( $wgHtml5 ) {
+                       # HTML5 elements, defined by:
+                       # http://www.whatwg.org/specs/web-apps/current-work/multipage/
+                       $whitelist += array(
+                               'data' => array_merge( $common, array( 'value' ) ),
+                               'time' => array_merge( $common, array( 'datetime' ) ),
+                               'mark' => $common,
+
+                               // meta and link are only permitted by removeHTMLtags when Microdata
+                               // is enabled so we don't bother adding a conditional to hide these
+                               // Also meta and link are only valid in WikiText as Microdata elements
+                               // (ie: validateTag rejects tags missing the attributes needed for Microdata)
+                               // So we don't bother including $common attributes that have no purpose.
+                               'meta' => array( 'itemprop', 'content' ),
+                               'link' => array( 'itemprop', 'href' ),
                        );
+               }
+
+               $staticInitialised = $globalContext;
+
                return $whitelist;
        }
 
index 341983d..173d37a 100644 (file)
@@ -555,7 +555,11 @@ class SkinTemplate extends Skin {
                # $this->getTitle() will just give Special:Badtitle, which is
                # not especially useful as a returnto parameter. Use the title
                # from the request instead, if there was one.
-               $page = Title::newFromURL( $request->getVal( 'title', '' ) );
+               if ( $this->getUser()->isAllowed( 'read' ) ) {
+                       $page = $this->getTitle();
+               } else {
+                       $page = Title::newFromText( $request->getVal( 'title', '' ) );
+               }
                $page = $request->getVal( 'returnto', $page );
                $a = array();
                if ( strval( $page ) !== '' ) {
index 91b8cc8..97f5ecd 100644 (file)
@@ -999,7 +999,7 @@ class ApiMain extends ApiBase {
                                'Maximum lag can be used when MediaWiki is installed on a database replicated cluster.',
                                'To save actions causing any more site replication lag, this parameter can make the client',
                                'wait until the replication lag is less than the specified value.',
-                               'In case of a replag error, a HTTP 503 error is returned, with the message like',
+                               'In case of a replag error, error code "maxlag" is returned, with the message like',
                                '"Waiting for $host: $lag seconds lagged\n".',
                                'See https://www.mediawiki.org/wiki/Manual:Maxlag_parameter for more information',
                        ),
index 12c20fb..08764a5 100644 (file)
@@ -72,7 +72,7 @@ class ApiParse extends ApiBase {
                // TODO: Does this still need $wgTitle?
                global $wgParser, $wgTitle;
 
-               // Currently unnecessary, code to act as a safeguard against any change in current behaviour of uselang breaks
+               // Currently unnecessary, code to act as a safeguard against any change in current behaviour of uselang
                $oldLang = null;
                if ( isset( $params['uselang'] ) && $params['uselang'] != $this->getContext()->getLanguage()->getCode() ) {
                        $oldLang = $this->getContext()->getLanguage(); // Backup language
index 0509f1f..275275e 100644 (file)
@@ -50,6 +50,14 @@ class ApiWatch extends ApiBase {
 
                $res = array( 'title' => $title->getPrefixedText() );
 
+               // Currently unnecessary, code to act as a safeguard against any change in current behaviour of uselang
+               // Copy from ApiParse
+               $oldLang = null;
+               if ( isset( $params['uselang'] ) && $params['uselang'] != $this->getContext()->getLanguage()->getCode() ) {
+                       $oldLang = $this->getContext()->getLanguage(); // Backup language
+                       $this->getContext()->setLanguage( Language::factory( $params['uselang'] ) );
+               }
+
                if ( $params['unwatch'] ) {
                        $res['unwatched'] = '';
                        $res['message'] = $this->msg( 'removedwatchtext', $title->getPrefixedText() )->title( $title )->parseAsBlock();
@@ -59,6 +67,11 @@ class ApiWatch extends ApiBase {
                        $res['message'] = $this->msg( 'addedwatchtext', $title->getPrefixedText() )->title( $title )->parseAsBlock();
                        $success = WatchAction::doWatch( $title, $user );
                }
+
+               if ( !is_null( $oldLang ) ) {
+                       $this->getContext()->setLanguage( $oldLang ); // Reset language to $oldLang
+               }
+
                if ( !$success ) {
                        $this->dieUsageMsg( 'hookaborted' );
                }
@@ -88,6 +101,7 @@ class ApiWatch extends ApiBase {
                                ApiBase::PARAM_REQUIRED => true
                        ),
                        'unwatch' => false,
+                       'uselang' => null,
                        'token' => array(
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => true
@@ -99,6 +113,7 @@ class ApiWatch extends ApiBase {
                return array(
                        'title' => 'The page to (un)watch',
                        'unwatch' => 'If set the page will be unwatched rather than watched',
+                       'uselang' => 'Language to show the message in',
                        'token' => 'A token previously acquired via prop=info',
                );
        }
index e2199c4..2c68d2f 100644 (file)
@@ -1,4 +1,22 @@
 <?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
 
 /**
  * @since 1.21
@@ -40,4 +58,4 @@ class CssContentHandler extends TextContentHandler {
        public function getPageViewLanguage( Title $title, Content $content = null ) {
                return wfGetLangObj( 'en' );
        }
-}
\ No newline at end of file
+}
index 8b080bf..b5b4ee2 100644 (file)
@@ -1,4 +1,22 @@
 <?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
 
 # XXX: make ScriptContentHandler base class, do highlighting stuff there?
 
@@ -33,7 +51,7 @@ class JavaScriptContentHandler extends TextContentHandler {
        }
 
        /**
-        * Returns the english language, because CSS is english, and should be handled as such.
+        * Returns the english language, because JS is english, and should be handled as such.
         *
         * @return Language wfGetLangObj( 'en' )
         *
@@ -42,4 +60,4 @@ class JavaScriptContentHandler extends TextContentHandler {
        public function getPageViewLanguage( Title $title, Content $content = null ) {
                return wfGetLangObj( 'en' );
        }
-}
\ No newline at end of file
+}
index 9c2ae35..90802f6 100644 (file)
@@ -1,4 +1,22 @@
 <?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
 
 /**
  * @since 1.21
index c6ac2ba..7e9e5e8 100644 (file)
@@ -1,4 +1,22 @@
 <?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
 
 /**
  * @since 1.21
@@ -60,4 +78,4 @@ class WikitextContentHandler extends TextContentHandler {
        public function isParserCacheSupported() {
                return true;
        }
-}
\ No newline at end of file
+}
index 05e2cd2..6a6f930 100644 (file)
@@ -5,6 +5,21 @@
  * Copyright © 2000, 2001 Geoffrey T. Dairiki <dairiki@dairiki.org>
  * You may copy this code freely under the conditions of the GPL.
  *
+ * 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 DifferenceEngine
  * @defgroup DifferenceEngine DifferenceEngine
index fda356e..5141ec5 100644 (file)
@@ -131,7 +131,7 @@ class FSFile {
                        # Height, width and metadata
                        $handler = MediaHandler::getHandler( $info['mime'] );
                        if ( $handler ) {
-                               $tempImage = (object)array();
+                               $tempImage = (object)array(); // XXX (hack for File object)
                                $info['metadata'] = $handler->getMetadata( $tempImage, $this->path );
                                $gis = $handler->getImageSize( $tempImage, $this->path, $info['metadata'] );
                                if ( is_array( $gis ) ) {
index b5e2315..3108d11 100644 (file)
@@ -172,6 +172,7 @@ abstract class FileBackend {
         *  - copy
         *  - move
         *  - delete
+        *  - describe (since 1.21)
         *  - null
         *
         * a) Create a new file in storage with the contents of a string
@@ -182,7 +183,8 @@ abstract class FileBackend {
         *         'content'             => <string of new file contents>,
         *         'overwrite'           => <boolean>,
         *         'overwriteSame'       => <boolean>,
-        *         'disposition'         => <Content-Disposition header value>
+        *         'disposition'         => <Content-Disposition header value>,
+        *         'headers'             => <HTTP header name/value map> # since 1.21
         *     );
         * @endcode
         *
@@ -194,7 +196,8 @@ abstract class FileBackend {
         *         'dst'                 => <storage path>,
         *         'overwrite'           => <boolean>,
         *         'overwriteSame'       => <boolean>,
-        *         'disposition'         => <Content-Disposition header value>
+        *         'disposition'         => <Content-Disposition header value>,
+        *         'headers'             => <HTTP header name/value map> # since 1.21
         *     )
         * @endcode
         *
@@ -233,7 +236,17 @@ abstract class FileBackend {
         *     )
         * @endcode
         *
-        * f) Do nothing (no-op)
+        * f) Update metadata for a file within storage
+        * @code
+        *     array(
+        *         'op'                  => 'describe',
+        *         'src'                 => <storage path>,
+        *         'disposition'         => <Content-Disposition header value>,
+        *         'headers'             => <HTTP header name/value map>
+        *     )
+        * @endcode
+        *
+        * g) Do nothing (no-op)
         * @code
         *     array(
         *         'op'                  => 'null',
@@ -247,10 +260,17 @@ abstract class FileBackend {
         *   - overwriteSame       : An error will not be given if a file already
         *                           exists at the destination that has the same
         *                           contents as the new contents to be written there.
-        *   - disposition         : When supplied, the backend will add a Content-Disposition
+        *   - disposition         : If supplied, the backend will return a Content-Disposition
         *                           header when GETs/HEADs of the destination file are made.
-        *                           Backends that don't support file metadata will ignore this.
-        *                           See http://tools.ietf.org/html/rfc6266 (since 1.20).
+        *                           Backends that don't support metadata ignore this.
+        *                           See http://tools.ietf.org/html/rfc6266. (since 1.20)
+        *   - headers             : If supplied, the backend will return these headers when
+        *                           GETs/HEADs of the destination file are made. Header values
+        *                           should be smaller than 256 bytes, often options or numbers.
+        *                           Existing headers will remain, but these will replace any
+        *                           conflicting previous headers, and headers will be removed
+        *                           if they are set to an empty string.
+        *                           Backends that don't support metadata ignore this. (since 1.21)
         *
         * $opts is an associative of boolean flags, including:
         *   - force               : Operation precondition errors no longer trigger an abort.
@@ -265,10 +285,10 @@ abstract class FileBackend {
         *   - nonJournaled        : Don't log this operation batch in the file journal.
         *                           This limits the ability of recovery scripts.
         *   - parallelize         : Try to do operations in parallel when possible.
-        *   - bypassReadOnly      : Allow writes in read-only mode (since 1.20).
+        *   - bypassReadOnly      : Allow writes in read-only mode. (since 1.20)
         *   - preserveCache       : Don't clear the process cache before checking files.
         *                           This should only be used if all entries in the process
-        *                           cache were added after the files were already locked (since 1.20).
+        *                           cache were added after the files were already locked. (since 1.20)
         *
         * @remarks Remarks on locking:
         * File system paths given to operations should refer to files that are
@@ -390,6 +410,21 @@ abstract class FileBackend {
                return $this->doOperation( array( 'op' => 'delete' ) + $params, $opts );
        }
 
+       /**
+        * Performs a single describe operation.
+        * This sets $params['op'] to 'describe' and passes it to doOperation().
+        *
+        * @see FileBackend::doOperation()
+        *
+        * @param $params Array Operation parameters
+        * @param $opts Array Operation options
+        * @return Status
+        * @since 1.21
+        */
+       final public function describe( array $params, array $opts = array() ) {
+               return $this->doOperation( array( 'op' => 'describe' ) + $params, $opts );
+       }
+
        /**
         * Perform a set of independent file operations on some files.
         *
@@ -403,6 +438,7 @@ abstract class FileBackend {
         *  - copy
         *  - move
         *  - delete
+        *  - describe (since 1.21)
         *  - null
         *
         * a) Create a new file in storage with the contents of a string
@@ -411,18 +447,22 @@ abstract class FileBackend {
         *         'op'                  => 'create',
         *         'dst'                 => <storage path>,
         *         'content'             => <string of new file contents>,
-        *         'disposition'         => <Content-Disposition header value>
+        *         'disposition'         => <Content-Disposition header value>,
+        *         'headers'             => <HTTP header name/value map> # since 1.21
         *     )
         * @endcode
+        *
         * b) Copy a file system file into storage
         * @code
         *     array(
         *         'op'                  => 'store',
         *         'src'                 => <file system path>,
         *         'dst'                 => <storage path>,
-        *         'disposition'         => <Content-Disposition header value>
+        *         'disposition'         => <Content-Disposition header value>,
+        *         'headers'             => <HTTP header name/value map> # since 1.21
         *     )
         * @endcode
+        *
         * c) Copy a file within storage
         * @code
         *     array(
@@ -433,6 +473,7 @@ abstract class FileBackend {
         *         'disposition'         => <Content-Disposition header value>
         *     )
         * @endcode
+        *
         * d) Move a file within storage
         * @code
         *     array(
@@ -443,6 +484,7 @@ abstract class FileBackend {
         *         'disposition'         => <Content-Disposition header value>
         *     )
         * @endcode
+        *
         * e) Delete a file within storage
         * @code
         *     array(
@@ -451,7 +493,18 @@ abstract class FileBackend {
         *         'ignoreMissingSource' => <boolean>
         *     )
         * @endcode
-        * f) Do nothing (no-op)
+        *
+        * f) Update metadata for a file within storage
+        * @code
+        *     array(
+        *         'op'                  => 'describe',
+        *         'src'                 => <storage path>,
+        *         'disposition'         => <Content-Disposition header value>,
+        *         'headers'             => <HTTP header name/value map>
+        *     )
+        * @endcode
+        *
+        * g) Do nothing (no-op)
         * @code
         *     array(
         *         'op'                  => 'null',
@@ -465,6 +518,13 @@ abstract class FileBackend {
         *                           header when GETs/HEADs of the destination file are made.
         *                           Backends that don't support file metadata will ignore this.
         *                           See http://tools.ietf.org/html/rfc6266 (since 1.20).
+        *   - headers             : If supplied, the backend will return these headers when
+        *                           GETs/HEADs of the destination file are made. Header values
+        *                           should be smaller than 256 bytes, often options or numbers.
+        *                           Existing headers will remain, but these will replace any
+        *                           conflicting previous headers, and headers will be removed
+        *                           if they are set to an empty string.
+        *                           Backends that don't support metadata ignore this. (since 1.21)
         *
         * $opts is an associative of boolean flags, including:
         *   - bypassReadOnly      : Allow writes in read-only mode (since 1.20)
@@ -580,6 +640,20 @@ abstract class FileBackend {
                return $this->doQuickOperation( array( 'op' => 'delete' ) + $params );
        }
 
+       /**
+        * Performs a single quick describe operation.
+        * This sets $params['op'] to 'describe' and passes it to doQuickOperation().
+        *
+        * @see FileBackend::doQuickOperation()
+        *
+        * @param $params Array Operation parameters
+        * @return Status
+        * @since 1.21
+        */
+       final public function quickDescribe( array $params ) {
+               return $this->doQuickOperation( array( 'op' => 'describe' ) + $params );
+       }
+
        /**
         * Concatenate a list of storage files into a single file system file.
         * The target path should refer to a file that is already locked or
@@ -800,13 +874,13 @@ abstract class FileBackend {
 
        /**
         * Get the properties of the file at a storage path in the backend.
-        * Returns FSFile::placeholderProps() on failure.
+        * This gives the result of FSFile::getProps() on a local copy of the file.
         *
         * @param $params Array
         * $params include:
         *   - src    : source storage path
         *   - latest : use the latest available data
-        * @return Array
+        * @return Array Returns FSFile::placeholderProps() on failure
         */
        abstract public function getFileProps( array $params );
 
index 0f435a3..b906af5 100644 (file)
@@ -90,12 +90,15 @@ abstract class FileBackendStore extends FileBackend {
         * Do not call this function from places outside FileBackend and FileOp.
         *
         * $params include:
-        *   - content       : the raw file contents
-        *   - dst           : destination storage path
-        *   - disposition   : Content-Disposition header value for the destination
-        *   - async         : Status will be returned immediately if supported.
-        *                     If the status is OK, then its value field will be
-        *                     set to a FileBackendStoreOpHandle object.
+        *   - content     : the raw file contents
+        *   - dst         : destination storage path
+        *   - disposition : Content-Disposition header value for the destination
+        *   - headers     : HTTP header name/value map
+        *   - async       : Status will be returned immediately if supported.
+        *                   If the status is OK, then its value field will be
+        *                   set to a FileBackendStoreOpHandle object.
+        *   - dstExists   : Whether a file exists at the destination (optimization).
+        *                   Callers can use "false" if no existing file is being changed.
         *
         * @param $params Array
         * @return Status
@@ -109,7 +112,9 @@ abstract class FileBackendStore extends FileBackend {
                } else {
                        $status = $this->doCreateInternal( $params );
                        $this->clearCache( array( $params['dst'] ) );
-                       $this->deleteFileCache( $params['dst'] ); // persistent cache
+                       if ( !isset( $params['dstExists'] ) || $params['dstExists'] ) {
+                               $this->deleteFileCache( $params['dst'] ); // persistent cache
+                       }
                }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
@@ -118,6 +123,7 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::createInternal()
+        * @return Status
         */
        abstract protected function doCreateInternal( array $params );
 
@@ -127,12 +133,15 @@ abstract class FileBackendStore extends FileBackend {
         * Do not call this function from places outside FileBackend and FileOp.
         *
         * $params include:
-        *   - src           : source path on disk
-        *   - dst           : destination storage path
-        *   - disposition   : Content-Disposition header value for the destination
-        *   - async         : Status will be returned immediately if supported.
-        *                     If the status is OK, then its value field will be
-        *                     set to a FileBackendStoreOpHandle object.
+        *   - src         : source path on disk
+        *   - dst         : destination storage path
+        *   - disposition : Content-Disposition header value for the destination
+        *   - headers     : HTTP header name/value map
+        *   - async       : Status will be returned immediately if supported.
+        *                   If the status is OK, then its value field will be
+        *                   set to a FileBackendStoreOpHandle object.
+        *   - dstExists   : Whether a file exists at the destination (optimization).
+        *                   Callers can use "false" if no existing file is being changed.
         *
         * @param $params Array
         * @return Status
@@ -146,7 +155,9 @@ abstract class FileBackendStore extends FileBackend {
                } else {
                        $status = $this->doStoreInternal( $params );
                        $this->clearCache( array( $params['dst'] ) );
-                       $this->deleteFileCache( $params['dst'] ); // persistent cache
+                       if ( !isset( $params['dstExists'] ) || $params['dstExists'] ) {
+                               $this->deleteFileCache( $params['dst'] ); // persistent cache
+                       }
                }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
@@ -155,6 +166,7 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::storeInternal()
+        * @return Status
         */
        abstract protected function doStoreInternal( array $params );
 
@@ -171,6 +183,8 @@ abstract class FileBackendStore extends FileBackend {
         *   - async               : Status will be returned immediately if supported.
         *                           If the status is OK, then its value field will be
         *                           set to a FileBackendStoreOpHandle object.
+        *   - dstExists           : Whether a file exists at the destination (optimization).
+        *                           Callers can use "false" if no existing file is being changed.
         *
         * @param $params Array
         * @return Status
@@ -180,7 +194,9 @@ abstract class FileBackendStore extends FileBackend {
                wfProfileIn( __METHOD__ . '-' . $this->name );
                $status = $this->doCopyInternal( $params );
                $this->clearCache( array( $params['dst'] ) );
-               $this->deleteFileCache( $params['dst'] ); // persistent cache
+               if ( !isset( $params['dstExists'] ) || $params['dstExists'] ) {
+                       $this->deleteFileCache( $params['dst'] ); // persistent cache
+               }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
@@ -188,6 +204,7 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::copyInternal()
+        * @return Status
         */
        abstract protected function doCopyInternal( array $params );
 
@@ -218,6 +235,7 @@ abstract class FileBackendStore extends FileBackend {
 
        /**
         * @see FileBackendStore::deleteInternal()
+        * @return Status
         */
        abstract protected function doDeleteInternal( array $params );
 
@@ -234,6 +252,8 @@ abstract class FileBackendStore extends FileBackend {
         *   - async               : Status will be returned immediately if supported.
         *                           If the status is OK, then its value field will be
         *                           set to a FileBackendStoreOpHandle object.
+        *   - dstExists           : Whether a file exists at the destination (optimization).
+        *                           Callers can use "false" if no existing file is being changed.
         *
         * @param $params Array
         * @return Status
@@ -244,7 +264,9 @@ abstract class FileBackendStore extends FileBackend {
                $status = $this->doMoveInternal( $params );
                $this->clearCache( array( $params['src'], $params['dst'] ) );
                $this->deleteFileCache( $params['src'] ); // persistent cache
-               $this->deleteFileCache( $params['dst'] ); // persistent cache
+               if ( !isset( $params['dstExists'] ) || $params['dstExists'] ) {
+                       $this->deleteFileCache( $params['dst'] ); // persistent cache
+               }
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
                return $status;
@@ -266,6 +288,40 @@ abstract class FileBackendStore extends FileBackend {
                return $status;
        }
 
+       /**
+        * Alter metadata for a file at the storage path.
+        * Do not call this function from places outside FileBackend and FileOp.
+        *
+        * $params include:
+        *   - src           : source storage path
+        *   - disposition   : Content-Disposition header value for the destination
+        *   - headers       : HTTP header name/value map
+        *   - async         : Status will be returned immediately if supported.
+        *                     If the status is OK, then its value field will be
+        *                     set to a FileBackendStoreOpHandle object.
+        *
+        * @param $params Array
+        * @return Status
+        */
+       final public function describeInternal( array $params ) {
+               wfProfileIn( __METHOD__ );
+               wfProfileIn( __METHOD__ . '-' . $this->name );
+               $status = $this->doDescribeInternal( $params );
+               $this->clearCache( array( $params['src'] ) );
+               $this->deleteFileCache( $params['src'] ); // persistent cache
+               wfProfileOut( __METHOD__ . '-' . $this->name );
+               wfProfileOut( __METHOD__ );
+               return $status;
+       }
+
+       /**
+        * @see FileBackendStore::describeInternal()
+        * @return Status
+        */
+       protected function doDescribeInternal( array $params ) {
+               return Status::newGood();
+       }
+
        /**
         * No-op file operation that does nothing.
         * Do not call this function from places outside FileBackend and FileOp.
@@ -610,12 +666,19 @@ abstract class FileBackendStore extends FileBackend {
                if ( $this->cheapCache->has( $path, 'stat', self::CACHE_TTL ) ) {
                        $stat = $this->cheapCache->get( $path, 'stat' );
                        // If we want the latest data, check that this cached
-                       // value was in fact fetched with the latest available data
-                       // (the process cache is ignored if it contains a negative).
-                       if ( !$latest || ( is_array( $stat ) && $stat['latest'] ) ) {
-                               wfProfileOut( __METHOD__ . '-' . $this->name );
-                               wfProfileOut( __METHOD__ );
-                               return $stat;
+                       // value was in fact fetched with the latest available data.
+                       if ( is_array( $stat ) ) {
+                               if ( !$latest || $stat['latest'] ) {
+                                       wfProfileOut( __METHOD__ . '-' . $this->name );
+                                       wfProfileOut( __METHOD__ );
+                                       return $stat;
+                               }
+                       } elseif ( in_array( $stat, array( 'NOT_EXIST', 'NOT_EXIST_LATEST' ) ) ) {
+                               if ( !$latest || $stat === 'NOT_EXIST_LATEST' ) {
+                                       wfProfileOut( __METHOD__ . '-' . $this->name );
+                                       wfProfileOut( __METHOD__ );
+                                       return false;
+                               }
                        }
                }
                wfProfileIn( __METHOD__ . '-miss' );
@@ -632,7 +695,7 @@ abstract class FileBackendStore extends FileBackend {
                                        array( 'hash' => $stat['sha1'], 'latest' => $latest ) );
                        }
                } elseif ( $stat === false ) { // file does not exist
-                       $this->cheapCache->set( $path, 'stat', false );
+                       $this->cheapCache->set( $path, 'stat', $latest ? 'NOT_EXIST_LATEST' : 'NOT_EXIST' );
                        wfDebug( __METHOD__ . ": File $path does not exist.\n" );
                } else { // an error occurred
                        wfDebug( __METHOD__ . ": Could not stat file $path.\n" );
@@ -995,12 +1058,13 @@ abstract class FileBackendStore extends FileBackend {
         */
        final public function getOperationsInternal( array $ops ) {
                $supportedOps = array(
-                       'store'       => 'StoreFileOp',
-                       'copy'        => 'CopyFileOp',
-                       'move'        => 'MoveFileOp',
-                       'delete'      => 'DeleteFileOp',
-                       'create'      => 'CreateFileOp',
-                       'null'        => 'NullFileOp'
+                       'store'    => 'StoreFileOp',
+                       'copy'     => 'CopyFileOp',
+                       'move'     => 'MoveFileOp',
+                       'delete'   => 'DeleteFileOp',
+                       'create'   => 'CreateFileOp',
+                       'describe' => 'DescribeFileOp',
+                       'null'     => 'NullFileOp'
                );
 
                $performOps = array(); // array of FileOp objects
@@ -1066,6 +1130,9 @@ abstract class FileBackendStore extends FileBackend {
                wfProfileIn( __METHOD__ . '-' . $this->name );
                $status = Status::newGood();
 
+               // Fix up custom header name/value pairs...
+               $ops = array_map( array( $this, 'stripInvalidHeadersFromOp' ), $ops );
+
                // Build up a list of FileOps...
                $performOps = $this->getOperationsInternal( $ops );
 
@@ -1115,6 +1182,12 @@ abstract class FileBackendStore extends FileBackend {
                wfProfileIn( __METHOD__ . '-' . $this->name );
                $status = Status::newGood();
 
+               // Fix up custom header name/value pairs...
+               $ops = array_map( array( $this, 'stripInvalidHeadersFromOp' ), $ops );
+
+               // Clear any file cache entries
+               $this->clearCache();
+
                $supportedOps = array( 'create', 'store', 'copy', 'move', 'delete', 'null' );
                $async = ( $this->parallelize === 'implicit' );
                $maxConcurrency = $this->concurrency; // throttle
@@ -1206,6 +1279,26 @@ abstract class FileBackendStore extends FileBackend {
                return array();
        }
 
+       /**
+        * Strip long HTTP headers from a file operation
+        *
+        * @param $op array Same format as doOperation()
+        * @return Array
+        */
+       protected function stripInvalidHeadersFromOp( array $op ) {
+               if ( isset( $op['headers'] ) ) {
+                       foreach ( $op['headers'] as $name => $value ) {
+                               if ( strlen( $name ) > 255 || strlen( $value ) > 255 ) {
+                                       trigger_error( "Header '$name: $value' is too long." );
+                                       unset( $op['headers'][$name] );
+                               } elseif ( !strlen( $value ) ) {
+                                       $op['headers'][$name] = ''; // null/false => ""
+                               }
+                       }
+               }
+               return $op;
+       }
+
        /**
         * @see FileBackend::preloadCache()
         */
@@ -1577,6 +1670,8 @@ abstract class FileBackendStore extends FileBackend {
        /**
         * Delete the cached stat info for a file path.
         * The cache key is salted for a while to prevent race conditions.
+        * Since negatives (404s) are not cached, this does not need to be called when
+        * a file is created at a path were there was none before.
         *
         * @param $path string Storage path
         */
index 49111d9..0d64a44 100644 (file)
@@ -48,6 +48,7 @@ abstract class FileOp {
        protected $doOperation = true; // boolean; operation is not a no-op
        protected $sourceSha1; // string
        protected $destSameAsSource; // boolean
+       protected $destExists; // boolean
 
        /* Object life-cycle */
        const STATE_NEW = 1;
@@ -351,7 +352,7 @@ abstract class FileOp {
 
        /**
         * Check for errors with regards to the destination file already existing.
-        * This also updates the destSameAsSource and sourceSha1 member variables.
+        * Also set the destExists, destSameAsSource and sourceSha1 member variables.
         * A bad status will be returned if there is no chance it can be overwritten.
         *
         * @param $predicates Array
@@ -365,7 +366,8 @@ abstract class FileOp {
                        $this->sourceSha1 = $this->fileSha1( $this->params['src'], $predicates );
                }
                $this->destSameAsSource = false;
-               if ( $this->fileExists( $this->params['dst'], $predicates ) ) {
+               $this->destExists = $this->fileExists( $this->params['dst'], $predicates );
+               if ( $this->destExists ) {
                        if ( $this->getParam( 'overwrite' ) ) {
                                return $status; // OK
                        } elseif ( $this->getParam( 'overwriteSame' ) ) {
@@ -466,7 +468,7 @@ abstract class FileOp {
 class CreateFileOp extends FileOp {
        protected function allowedParams() {
                return array( array( 'content', 'dst' ),
-                       array( 'overwrite', 'overwriteSame', 'disposition' ) );
+                       array( 'overwrite', 'overwriteSame', 'disposition', 'headers' ) );
        }
 
        protected function doPrecheck( array &$predicates ) {
@@ -485,6 +487,7 @@ class CreateFileOp extends FileOp {
                }
                // Check if destination file exists
                $status->merge( $this->precheckDestExistence( $predicates ) );
+               $this->params['dstExists'] = $this->destExists; // see FileBackendStore::setFileCache()
                if ( $status->isOK() ) {
                        // Update file existence predicates
                        $predicates['exists'][$this->params['dst']] = true;
@@ -529,7 +532,7 @@ class StoreFileOp extends FileOp {
         */
        protected function allowedParams() {
                return array( array( 'src', 'dst' ),
-                       array( 'overwrite', 'overwriteSame', 'disposition' ) );
+                       array( 'overwrite', 'overwriteSame', 'disposition', 'headers' ) );
        }
 
        /**
@@ -556,6 +559,7 @@ class StoreFileOp extends FileOp {
                }
                // Check if destination file exists
                $status->merge( $this->precheckDestExistence( $predicates ) );
+               $this->params['dstExists'] = $this->destExists; // see FileBackendStore::setFileCache()
                if ( $status->isOK() ) {
                        // Update file existence predicates
                        $predicates['exists'][$this->params['dst']] = true;
@@ -632,6 +636,7 @@ class CopyFileOp extends FileOp {
                }
                // Check if destination file exists
                $status->merge( $this->precheckDestExistence( $predicates ) );
+               $this->params['dstExists'] = $this->destExists; // see FileBackendStore::setFileCache()
                if ( $status->isOK() ) {
                        // Update file existence predicates
                        $predicates['exists'][$this->params['dst']] = true;
@@ -708,6 +713,7 @@ class MoveFileOp extends FileOp {
                }
                // Check if destination file exists
                $status->merge( $this->precheckDestExistence( $predicates ) );
+               $this->params['dstExists'] = $this->destExists; // see FileBackendStore::setFileCache()
                if ( $status->isOK() ) {
                        // Update file existence predicates
                        $predicates['exists'][$this->params['src']] = false;
@@ -809,6 +815,58 @@ class DeleteFileOp extends FileOp {
        }
 }
 
+/**
+ * Change metadata for a file at the given storage path in the backend.
+ * Parameters for this operation are outlined in FileBackend::doOperations().
+ */
+class DescribeFileOp extends FileOp {
+       /**
+        * @return array
+        */
+       protected function allowedParams() {
+               return array( array( 'src' ), array( 'disposition', 'headers' ) );
+       }
+
+       /**
+        * @param $predicates array
+        * @return Status
+        */
+       protected function doPrecheck( array &$predicates ) {
+               $status = Status::newGood();
+               // Check if the source file exists
+               if ( !$this->fileExists( $this->params['src'], $predicates ) ) {
+                       $status->fatal( 'backend-fail-notexists', $this->params['src'] );
+                       return $status;
+               // Check if a file can be placed/changed at the source
+               } elseif ( !$this->backend->isPathUsableInternal( $this->params['src'] ) ) {
+                       $status->fatal( 'backend-fail-usable', $this->params['src'] );
+                       $status->fatal( 'backend-fail-describe', $this->params['src'] );
+                       return $status;
+               }
+               // Update file existence predicates
+               $predicates['exists'][$this->params['src']] =
+                       $this->fileExists( $this->params['src'], $predicates );
+               $predicates['sha1'][$this->params['src']] =
+                       $this->fileSha1( $this->params['src'], $predicates );
+               return $status; // safe to call attempt()
+       }
+
+       /**
+        * @return Status
+        */
+       protected function doAttempt() {
+               // Update the source file's metadata
+               return $this->backend->describeInternal( $this->setFlags( $this->params ) );
+       }
+
+       /**
+        * @return array
+        */
+       public function storagePathsChanged() {
+               return array( $this->params['src'] );
+       }
+}
+
 /**
  * Placeholder operation that has no params and does nothing
  */
index 48db9d3..5a9b062 100644 (file)
@@ -236,6 +236,10 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( isset( $params['disposition'] ) ) {
                                $obj->headers['Content-Disposition'] = $this->truncDisp( $params['disposition'] );
                        }
+                       // Set any other custom headers if requested
+                       if ( isset( $params['headers'] ) ) {
+                               $obj->headers += $params['headers'];
+                       }
                        if ( !empty( $params['async'] ) ) { // deferred
                                $op = $obj->write_async( $params['content'] );
                                $status->value = new SwiftFileOpHandle( $this, $params, 'Create', $op );
@@ -315,6 +319,10 @@ class SwiftFileBackend extends FileBackendStore {
                        if ( isset( $params['disposition'] ) ) {
                                $obj->headers['Content-Disposition'] = $this->truncDisp( $params['disposition'] );
                        }
+                       // Set any other custom headers if requested
+                       if ( isset( $params['headers'] ) ) {
+                               $obj->headers += $params['headers'];
+                       }
                        if ( !empty( $params['async'] ) ) { // deferred
                                wfSuppressWarnings();
                                $fp = fopen( $params['src'], 'rb' );
@@ -554,6 +562,47 @@ class SwiftFileBackend extends FileBackendStore {
                }
        }
 
+       /**
+        * @see FileBackendStore::doDescribeInternal()
+        * @return Status
+        */
+       protected function doDescribeInternal( array $params ) {
+               $status = Status::newGood();
+
+               list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
+               if ( $srcRel === null ) {
+                       $status->fatal( 'backend-fail-invalidpath', $params['src'] );
+                       return $status;
+               }
+
+               $hdrs = isset( $params['headers'] ) ? $params['headers'] : array();
+               // Set the Content-Disposition header if requested
+               if ( isset( $params['disposition'] ) ) {
+                       $hdrs['Content-Disposition'] = $this->truncDisp( $params['disposition'] );
+               }
+
+               try {
+                       $sContObj = $this->getContainer( $srcCont );
+                       // Get the latest version of the current metadata
+                       $srcObj = $sContObj->get_object( $srcRel,
+                               $this->headersFromParams( array( 'latest' => true ) ) );
+                       // Merge in the metadata updates...
+                       $srcObj->headers = $hdrs + $srcObj->headers;
+                       $srcObj->sync_metadata(); // save to Swift
+                       $this->purgeCDNCache( array( $srcObj ) );
+               } catch ( CDNNotEnabledException $e ) {
+                       // CDN not enabled; nothing to see here
+               } catch ( NoSuchContainerException $e ) {
+                       $status->fatal( 'backend-fail-describe', $params['src'] );
+               } catch ( NoSuchObjectException $e ) {
+                       $status->fatal( 'backend-fail-describe', $params['src'] );
+               } catch ( CloudFilesException $e ) { // some other exception?
+                       $this->handleException( $e, $status, __METHOD__, $params );
+               }
+
+               return $status;
+       }
+
        /**
         * @see FileBackendStore::doPrepareInternal()
         * @return Status
@@ -769,6 +818,7 @@ class SwiftFileBackend extends FileBackendStore {
                                }
                        }
                }
+               trigger_error( "Unable to set SHA-1 metadata for $path", E_USER_WARNING );
                $obj->setMetadataValues( array( 'Sha1base36' => false ) );
                wfProfileOut( __METHOD__ );
                return false; // failed
index 651ee27..cbcc6c8 100644 (file)
@@ -1027,18 +1027,25 @@ class FileRepo {
         * Returns a FileRepoStatus object. On success, the value contains "new" or
         * "archived", to indicate whether the file was new with that name.
         *
+        * Options to $options include:
+        *   - headers : name/value map of HTTP headers to use in response to GET/HEAD requests
+        *
         * @param $srcPath String: the source file system path, storage path, or URL
         * @param $dstRel String: the destination relative path
         * @param $archiveRel String: the relative path where the existing file is to
         *        be archived, if there is one. Relative to the public zone root.
         * @param $flags Integer: bitfield, may be FileRepo::DELETE_SOURCE to indicate
         *        that the source file should be deleted if possible
+        * @param $options Array Optional additional parameters
         * @return FileRepoStatus
         */
-       public function publish( $srcPath, $dstRel, $archiveRel, $flags = 0 ) {
+       public function publish(
+               $srcPath, $dstRel, $archiveRel, $flags = 0, array $options = array()
+       ) {
                $this->assertWritableRepo(); // fail out if read-only
 
-               $status = $this->publishBatch( array( array( $srcPath, $dstRel, $archiveRel ) ), $flags );
+               $status = $this->publishBatch(
+                       array( array( $srcPath, $dstRel, $archiveRel, $options ) ), $flags );
                if ( $status->successCount == 0 ) {
                        $status->ok = false;
                }
@@ -1054,13 +1061,14 @@ class FileRepo {
        /**
         * Publish a batch of files
         *
-        * @param $triplets Array: (source, dest, archive) triplets as per publish()
+        * @param $ntuples Array: (source, dest, archive) triplets or
+        *        (source, dest, archive, options) 4-tuples as per publish().
         * @param $flags Integer: bitfield, may be FileRepo::DELETE_SOURCE to indicate
         *        that the source files should be deleted if possible
         * @throws MWException
         * @return FileRepoStatus
         */
-       public function publishBatch( array $triplets, $flags = 0 ) {
+       public function publishBatch( array $ntuples, $flags = 0 ) {
                $this->assertWritableRepo(); // fail out if read-only
 
                $backend = $this->backend; // convenience
@@ -1075,8 +1083,9 @@ class FileRepo {
                $operations = array();
                $sourceFSFilesToDelete = array(); // cleanup for disk source files
                // Validate each triplet and get the store operation...
-               foreach ( $triplets as $i => $triplet ) {
-                       list( $srcPath, $dstRel, $archiveRel ) = $triplet;
+               foreach ( $ntuples as $i => $ntuple ) {
+                       list( $srcPath, $dstRel, $archiveRel ) = $ntuple;
+                       $options = isset( $ntuple[3] ) ? $ntuple[3] : array();
                        // Resolve source to a storage path if virtual
                        $srcPath = $this->resolveToStoragePath( $srcPath );
                        if ( !$this->validateFilename( $dstRel ) ) {
@@ -1100,6 +1109,9 @@ class FileRepo {
                                return $this->newFatal( 'directorycreateerror', $archiveDir );
                        }
 
+                       // Set any desired headers to be use in GET/HEAD responses
+                       $headers = isset( $options['headers'] ) ? $options['headers'] : array();
+
                        // Archive destination file if it exists.
                        // This will check if the archive file also exists and fail if does.
                        // This is a sanity check to avoid data loss. On Windows and Linux,
@@ -1117,25 +1129,28 @@ class FileRepo {
                        if ( FileBackend::isStoragePath( $srcPath ) ) {
                                if ( $flags & self::DELETE_SOURCE ) {
                                        $operations[] = array(
-                                               'op'           => 'move',
-                                               'src'          => $srcPath,
-                                               'dst'          => $dstPath,
-                                               'overwrite'    => true // replace current
+                                               'op'        => 'move',
+                                               'src'       => $srcPath,
+                                               'dst'       => $dstPath,
+                                               'overwrite' => true, // replace current
+                                               'headers'   => $headers
                                        );
                                } else {
                                        $operations[] = array(
-                                               'op'           => 'copy',
-                                               'src'          => $srcPath,
-                                               'dst'          => $dstPath,
-                                               'overwrite'    => true // replace current
+                                               'op'        => 'copy',
+                                               'src'       => $srcPath,
+                                               'dst'       => $dstPath,
+                                               'overwrite' => true, // replace current
+                                               'headers'   => $headers
                                        );
                                }
                        } else { // FS source path
                                $operations[] = array(
-                                       'op'           => 'store',
-                                       'src'          => $srcPath,
-                                       'dst'          => $dstPath,
-                                       'overwrite'    => true // replace current
+                                       'op'        => 'store',
+                                       'src'       => $srcPath,
+                                       'dst'       => $dstPath,
+                                       'overwrite' => true, // replace current
+                                       'headers'   => $headers
                                );
                                if ( $flags & self::DELETE_SOURCE ) {
                                        $sourceFSFilesToDelete[] = $srcPath;
@@ -1146,8 +1161,8 @@ class FileRepo {
                // Execute the operations for each triplet
                $status->merge( $backend->doOperations( $operations ) );
                // Find out which files were archived...
-               foreach ( $triplets as $i => $triplet ) {
-                       list( $srcPath, $dstRel, $archiveRel ) = $triplet;
+               foreach ( $ntuples as $i => $ntuple ) {
+                       list( $srcPath, $dstRel, $archiveRel ) = $ntuple;
                        $archivePath = $this->getZonePath( 'public' ) . "/$archiveRel";
                        if ( $this->fileExists( $archivePath ) ) {
                                $status->value[$i] = 'archived';
@@ -1405,6 +1420,17 @@ class FileRepo {
                return $this->backend->getFileTimestamp( array( 'src' => $path ) );
        }
 
+       /**
+        * Get the size of a file with a given virtual URL/storage path
+        *
+        * @param $virtualUrl string
+        * @return integer|bool False on failure
+        */
+       public function getFileSize( $virtualUrl ) {
+               $path = $this->resolveToStoragePath( $virtualUrl );
+               return $this->backend->getFileSize( array( 'src' => $path ) );
+       }
+
        /**
         * Get the sha1 (base 36) of a file with a given virtual URL/storage path
         *
index 9a080ae..50bda52 100644 (file)
@@ -1390,17 +1390,21 @@ abstract class File {
         * The archive name should be passed through to recordUpload for database
         * registration.
         *
+        * Options to $options include:
+        *   - headers : name/value map of HTTP headers to use in response to GET/HEAD requests
+        *
         * @param $srcPath String: local filesystem path to the source image
         * @param $flags Integer: a bitwise combination of:
         *     File::DELETE_SOURCE    Delete the source file, i.e. move
         *         rather than copy
+        * @param $options Array Optional additional parameters
         * @return FileRepoStatus object. On success, the value member contains the
         *     archive name, or an empty string if it was a new file.
         *
         * STUB
         * Overridden by LocalFile
         */
-       function publish( $srcPath, $flags = 0 ) {
+       function publish( $srcPath, $flags = 0, array $options = array() ) {
                $this->readOnlyError();
        }
 
index 91f6cb6..a03df85 100644 (file)
@@ -57,9 +57,10 @@ class ForeignDBFile extends LocalFile {
        /**
         * @param $srcPath String
         * @param $flags int
+        * @param $options Array
         * @throws MWException
         */
-       function publish( $srcPath, $flags = 0 ) {
+       function publish( $srcPath, $flags = 0, array $options = array() ) {
                $this->readOnlyError();
        }
 
index f0a3c15..c2c17f5 100644 (file)
@@ -951,7 +951,7 @@ class LocalFile extends File {
 
        /**
         * Upload a file and record it in the DB
-        * @param $srcPath String: source storage path or virtual URL
+        * @param $srcPath String: source storage path, virtual URL, or filesystem path
         * @param $comment String: upload description
         * @param $pageText String: text to use for the new description page,
         *                  if a new description page is created
@@ -972,11 +972,27 @@ class LocalFile extends File {
                        return $this->readOnlyFatalStatus();
                }
 
+               if ( !$props ) {
+                       wfProfileIn( __METHOD__ . '-getProps' );
+                       $props = FileBackend::isStoragePath( $srcPath )
+                               ? $this->repo->getFileProps( $srcPath )
+                               : FSFile::getPropsFromPath( $srcPath );
+                       wfProfileOut( __METHOD__ . '-getProps' );
+               }
+
+               $options = array();
+               $handler = MediaHandler::getHandler( $props['mime'] );
+               if ( $handler ) {
+                       $options['headers'] = $handler->getStreamHeaders( $props['metadata'] );
+               } else {
+                       $options['headers'] = array();
+               }
+
                // truncate nicely or the DB will do it for us
                // non-nicely (dangling multi-byte chars, non-truncated version in cache).
                $comment = $wgContLang->truncate( $comment, 255 );
                $this->lock(); // begin
-               $status = $this->publish( $srcPath, $flags );
+               $status = $this->publish( $srcPath, $flags, $options );
 
                if ( $status->successCount > 0 ) {
                        # Essentially we are displacing any existing current file and saving
@@ -1252,11 +1268,12 @@ class LocalFile extends File {
         * @param $srcPath String: local filesystem path to the source image
         * @param $flags Integer: a bitwise combination of:
         *     File::DELETE_SOURCE      Delete the source file, i.e. move rather than copy
+        * @param $options Array Optional additional parameters
         * @return FileRepoStatus object. On success, the value member contains the
         *     archive name, or an empty string if it was a new file.
         */
-       function publish( $srcPath, $flags = 0 ) {
-               return $this->publishTo( $srcPath, $this->getRel(), $flags );
+       function publish( $srcPath, $flags = 0, array $options = array() ) {
+               return $this->publishTo( $srcPath, $this->getRel(), $flags, $options );
        }
 
        /**
@@ -1270,10 +1287,11 @@ class LocalFile extends File {
         * @param $dstRel String: target relative path
         * @param $flags Integer: a bitwise combination of:
         *     File::DELETE_SOURCE      Delete the source file, i.e. move rather than copy
+        * @param $options Array Optional additional parameters
         * @return FileRepoStatus object. On success, the value member contains the
         *     archive name, or an empty string if it was a new file.
         */
-       function publishTo( $srcPath, $dstRel, $flags = 0 ) {
+       function publishTo( $srcPath, $dstRel, $flags = 0, array $options = array() ) {
                if ( $this->getRepo()->getReadOnlyReason() !== false ) {
                        return $this->readOnlyFatalStatus();
                }
@@ -1283,7 +1301,7 @@ class LocalFile extends File {
                $archiveName = wfTimestamp( TS_MW ) . '!'. $this->getName();
                $archiveRel = 'archive/' . $this->getHashPath() . $archiveName;
                $flags = $flags & File::DELETE_SOURCE ? LocalRepo::DELETE_SOURCE : 0;
-               $status = $this->repo->publish( $srcPath, $dstRel, $archiveRel, $flags );
+               $status = $this->repo->publish( $srcPath, $dstRel, $archiveRel, $flags, $options );
 
                if ( $status->value == 'new' ) {
                        $status->value = '';
index 8d4a3f8..698d1eb 100644 (file)
@@ -179,10 +179,18 @@ class UnregisteredLocalFile extends File {
         */
        function getSize() {
                $this->assertRepoDefined();
-               $props = $this->repo->getFileProps( $this->path );
-               if ( isset( $props['size'] ) ) {
-                       return $props['size'];
-               }
-               return false; // doesn't exist
+               return $this->repo->getFileSize( $this->path );
+       }
+
+       /**
+        * Optimize getLocalRefPath() by using an existing local reference.
+        * The file at the path of $fsFile should not be deleted (or at least
+        * not until the end of the request). This is mostly a performance hack.
+        *
+        * @param $fsFile FSFile
+        * @return void
+        */
+       public function setLocalReference( FSFile $fsFile ) {
+               $this->fsFile = $fsFile;
        }
 }
index a0d2387..f0af322 100644 (file)
@@ -4175,6 +4175,8 @@ $messages['de-formal'] = array(
  * @author Mirzali
  */
 $messages['diq'] = array(
+       'config-title' => 'MediaWiki $1 sazkerdış',
+       'config-information' => 'Melumat',
        'config-your-language' => 'Zıwanê şıma:',
        'config-wiki-language' => 'Wiki zıwan:',
        'config-back' => '← Peyser',
@@ -4185,7 +4187,10 @@ $messages['diq'] = array(
        'config-page-name' => 'Name',
        'config-page-options' => 'Weçinegi',
        'config-page-install' => 'Barine',
+       'config-page-complete' => 'Temamyayo',
        'config-page-readme' => 'Mı bıwane',
+       'config-page-copying' => 'Kopyayeno',
+       'config-page-upgradedoc' => 'Berzkerdış',
        'config-restart' => 'E, fına dest pekê',
        'config-sidebar' => "* [//www.mediawiki.org MediaWiki keye]
 * [//www.mediawiki.org/wiki/Help:Contents User's Şınasiye]
@@ -4214,11 +4219,13 @@ $messages['diq'] = array(
        'config-admin-name' => 'Namey şıma:',
        'config-admin-password' => 'Parola:',
        'config-admin-password-confirm' => 'Fına parola:',
+       'config-profile-private' => 'Bexse wiki',
        'config-license-cc-by-sa' => 'Creative Commons Attribution Share Alike',
        'config-license-cc-by' => 'Creative Commons Attribution',
        'config-license-cc-by-nc-sa' => 'Creative Commons Attribution Non-Commercial Share Alike',
        'config-license-pd' => 'Malê Şari',
        'config-extensions' => 'Olekeni',
+       'config-help' => 'peşti',
        'mainpagetext' => "'''MediaWiki vıst ra ser, vıraziya.'''",
        'mainpagedocfooter' => 'Seba gurenayış u eyarkerdışê Wiki-Softwarey [//meta.wikimedia.org/wiki/Help:Contents İdarê karberi] de mıracaet ke.
 
@@ -9774,8 +9781,8 @@ MediaWikiのインストールはできません。',
 しかし、MediaWikiには PHP $2 以上が必要です。',
        'config-unicode-using-utf8' => 'Unicode正規化に、Brion Vibberのutf8_normalize.soを使用。',
        'config-unicode-using-intl' => 'Unicode正規化に[http://pecl.php.net/intl intl PECL 拡張機能]を使用。',
-       'config-unicode-pure-php-warning' => "'''警告''':Unicode正規化の処理に [http://pecl.php.net/intl intl PECL 拡張機能]が使用可能ではなく、処理の遅いピュア PHP の実装を代わりに用いています。
-高トラフィックのサイトを運営する場合は、[//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode正規化に関するページ]をお読みください。",
+       'config-unicode-pure-php-warning' => "'''警告''': Unicode 正規化の処理に [http://pecl.php.net/intl intl PECL 拡張機能]を利用できないため、処理が遅いピュア PHP の実装を代わりに使用しています。
+高トラフィックのサイトを運営する場合は、[//www.mediawiki.org/wiki/Unicode_normalization_considerations Unicode 正規化]をお読みください。",
        'config-unicode-update-warning' => "'''警告''':インストールされているバージョンのUnicode正規化ラッパーは、[http://site.icu-project.org/ ICUプロジェクト]のライブラリの古いバージョンを使用しています。
 Unicodeを少しでも利用する可能性があるなら、[//www.mediawiki.org/wiki/Unicode_normalization_considerations アップグレード]する必要があります。",
        'config-no-db' => '適切なデータベース ドライバーが見つかりませんでした! PHP にデータベース ドライバーをインストールする必要があります。
index 7cf382b..113c65a 100644 (file)
@@ -226,6 +226,7 @@ class MysqlUpdater extends DatabaseUpdater {
                        array( 'addField', 'filearchive',   'fa_sha1',          'patch-fa_sha1.sql' ),
                        array( 'addField', 'job',           'job_token',         'patch-job_token.sql' ),
                        array( 'addField', 'job',           'job_attempts',       'patch-job_attempts.sql' ),
+                       array( 'doEnableProfiling' ),
                );
        }
 
@@ -772,6 +773,13 @@ class MysqlUpdater extends DatabaseUpdater {
                }
        }
 
+       protected function doEnableProfiling() {
+               global $wgProfileToDatabase;
+               if ( $wgProfileToDatabase === true && ! $this->db->tableExists( 'profiling', __METHOD__ ) ) {
+                       $this->applyPatch( 'patch-profiling.sql', false, 'Add profiling table' );
+               }
+       }
+
        protected function doMaybeProfilingMemoryUpdate() {
                if ( !$this->db->tableExists( 'profiling', __METHOD__ ) ) {
                        // Simply ignore
index 3921def..472283d 100644 (file)
@@ -106,6 +106,7 @@ class SqliteUpdater extends DatabaseUpdater {
                        array( 'addField', 'filearchive',   'fa_sha1',          'patch-fa_sha1.sql' ),
                        array( 'addField', 'job',           'job_token',         'patch-job_token.sql' ),
                        array( 'addField', 'job',           'job_attempts',      'patch-job_attempts.sql' ),
+                       array( 'doEnableProfiling' ),
                );
        }
 
@@ -129,4 +130,11 @@ class SqliteUpdater extends DatabaseUpdater {
                        $this->output( "...fulltext search table appears to be in order.\n" );
                }
        }
+
+       protected function doEnableProfiling() {
+               global $wgProfileToDatabase;
+               if ( $wgProfileToDatabase === true && ! $this->db->tableExists( 'profiling', __METHOD__ ) ) {
+                       $this->applyPatch( 'patch-profiling.sql', false, 'Add profiling table' );
+               }
+       }
 }
index f67700c..75da5c7 100644 (file)
@@ -31,21 +31,16 @@ class FormatJson {
         * Returns the JSON representation of a value.
         *
         * @param $value Mixed: the value being encoded. Can be any type except a resource.
-        * @param $isHtml Boolean
-        *
-        * @todo FIXME: "$isHtml" parameter's purpose is not documented. It appears to
-        *        map to a parameter labeled "pretty-print output with indents and
-        *        newlines" in Services_JSON::encode(), which has no string relation
-        *        to HTML output.
+        * @param $pretty Boolean: If true, adds non-significant whitespace to improve readability.
         *
         * @return string
         */
-       public static function encode( $value, $isHtml = false ) {
-               if ( !function_exists( 'json_encode' ) || ( $isHtml && version_compare( PHP_VERSION, '5.4.0', '<' ) ) ) {
+       public static function encode( $value, $pretty = false ) {
+               if ( !function_exists( 'json_encode' ) || ( $pretty && version_compare( PHP_VERSION, '5.4.0', '<' ) ) ) {
                        $json = new Services_JSON();
-                       return $json->encode( $value, $isHtml );
+                       return $json->encode( $value, $pretty );
                } else {
-                       return json_encode( $value, $isHtml ? JSON_PRETTY_PRINT : 0 );
+                       return json_encode( $value, $pretty ? JSON_PRETTY_PRINT : 0 );
                }
        }
 
index 965099f..dd764e9 100644 (file)
@@ -243,6 +243,15 @@ abstract class MediaHandler {
                return array( $ext, $mime );
        }
 
+       /**
+        * Get useful response headers for GET/HEAD requests for a file with the given metadata
+        * @param $metadata mixed Result of the getMetadata() function of this handler for a file
+        * @return Array
+        */
+       public function getStreamHeaders( $metadata ) {
+               return array();
+       }
+
        /**
         * True if the handled types can be transformed
         * @return bool
index 36b682e..d7422bc 100644 (file)
@@ -549,7 +549,7 @@ class Parser {
         * Also removes comments.
         * @return mixed|string
         */
-       function preprocess( $text, Title $title, ParserOptions $options, $revid = null ) {
+       function preprocess( $text, Title $title = null, ParserOptions $options, $revid = null ) {
                wfProfileIn( __METHOD__ );
                $this->startParse( $title, $options, self::OT_PREPROCESS, true );
                if ( $revid !== null ) {
@@ -1314,7 +1314,8 @@ class Parser {
                if ( $text === false ) {
                        # Not an image, make a link
                        $text = Linker::makeExternalLink( $url,
-                               $this->getConverterLanguage()->markNoConversion($url), true, 'free',
+                               $this->getConverterLanguage()->markNoConversion( $url, true ),
+                               true, 'free',
                                $this->getExternalLinkAttribs( $url ) );
                        # Register it in the output object...
                        # Replace unnecessary URL escape codes with their equivalent characters
@@ -4682,11 +4683,7 @@ class Parser {
                        global $wgTitle;
                        $title = $wgTitle;
                }
-               if ( !$title ) {
-                       # It's not uncommon having a null $wgTitle in scripts. See r80898
-                       # Create a ghost title in such case
-                       $title = Title::newFromText( 'Dwimmerlaik' );
-               }
+
                $text = $this->preprocess( $text, $title, $options );
 
                $executing = false;
index ed2d436..5cc1b0f 100644 (file)
@@ -59,9 +59,15 @@ class MWTidyWrapper {
                        dechex( mt_rand( 0, 0x7fffffff ) ) . dechex( mt_rand( 0, 0x7fffffff ) );
                $this->mMarkerIndex = 0;
 
+               // Replace <mw:editsection> elements with placeholders
                $wrappedtext = preg_replace_callback( ParserOutput::EDITSECTION_REGEX,
                        array( &$this, 'replaceEditSectionLinksCallback' ), $text );
 
+               // Modify inline Microdata <link> and <meta> elements so they say <html-link> and <html-meta> so
+               // we can trick Tidy into not stripping them out by including them in tidy's new-empty-tags config
+               $wrappedtext = preg_replace( '!<(link|meta)([^>]*?)(/{0,1}>)!', '<html-$1$2$3', $wrappedtext );
+
+               // Wrap the whole thing in a doctype and body for Tidy.
                $wrappedtext = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"'.
                        ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>'.
                        '<head><title>test</title></head><body>'.$wrappedtext.'</body></html>';
@@ -86,7 +92,13 @@ class MWTidyWrapper {
         * @return string
         */
        public function postprocess( $text ) {
-               return $this->mTokens->replace( $text );
+               // Revert <html-{link,meta}> back to <{link,meta}>
+               $text = preg_replace( '!<html-(link|meta)([^>]*?)(/{0,1}>)!', '<$1$2$3', $text );
+
+               // Restore the contents of placeholder tokens
+               $text = $this->mTokens->replace( $text );
+
+               return $text;
        }
 
 }
index afb1e31..0e170fb 100644 (file)
@@ -91,7 +91,7 @@ abstract class ResourceLoaderModule {
         * with ResourceLoader::register()
         *
         * @return Int ResourceLoaderModule class constant, the subclass default
-        *     if not set manuall
+        *     if not set manually
         */
        public function getOrigin() {
                return $this->origin;
index ec542a6..fa7b872 100644 (file)
@@ -187,6 +187,11 @@ class SearchEngine {
                                return null;
                        }
 
+                       # Try files if searching in the Media: namespace
+                       if ( $title->getNamespace() == NS_MEDIA ) {
+                               $title = Title::makeTitle( NS_FILE, $title->getText() );
+                       }
+
                        if ( $title->isSpecialPage() || $title->isExternal() || $title->exists() ) {
                                return $title;
                        }
index 0d5db11..b2e2e71 100644 (file)
@@ -1,18 +1,37 @@
 <?php
-
 /**
  * Class representing a MediaWiki site.
  *
- * @since 1.21
+ * 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 Site
- *
  * @license GNU GPL v2+
  * @author John Erling Blad < jeblad@gmail.com >
  * @author Daniel Kinzler
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
+
+/**
+ * Class representing a MediaWiki site.
+ *
+ * @since 1.21
+ *
+ * @ingroup Site
+ */
 class MediaWikiSite extends SiteObject {
 
        const PATH_FILE = 'file_path';
index 0996de3..99d2ebf 100644 (file)
@@ -213,6 +213,8 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
         * @return bool|string true or string on success, false on failure
         */
        protected function attemptChange( User $user, $pass, $newaddr ) {
+               global $wgAuth;
+
                if ( $newaddr != '' && !Sanitizer::validateEmail( $newaddr ) ) {
                        $this->error( 'invalidemailaddress' );
                        return false;
@@ -248,6 +250,8 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
 
                $user->saveSettings();
 
+               $wgAuth->updateExternalDB( $user );
+
                return $status->value;
        }
 }
index f542640..14f9c8d 100644 (file)
@@ -109,8 +109,7 @@ class SpecialRecentChanges extends IncludableSpecialPage {
        public function feedSetup() {
                global $wgFeedLimit;
                $opts = $this->getDefaultOptions();
-               # Feed is cached on limit,hideminor,namespace; other params would randomly not work
-               $opts->fetchValuesFromRequest( $this->getRequest(), array( 'limit', 'hideminor', 'namespace' ) );
+               $opts->fetchValuesFromRequest( $this->getRequest() );
                $opts->validateIntBounds( 'limit', 0, $wgFeedLimit );
                return $opts;
        }
index c0420e5..0d2ac7e 100644 (file)
@@ -417,6 +417,9 @@ class PageArchive {
                $logEntry->setPerformer( $user );
                $logEntry->setTarget( $this->title );
                $logEntry->setComment( $reason );
+
+               wfRunHooks( 'ArticleUndeleteLogEntry', array( $this, &$logEntry, $user ) );
+
                $logid = $logEntry->insert();
                $logEntry->publish( $logid );
 
index c077c4d..dda159c 100644 (file)
@@ -559,7 +559,7 @@ class LoginForm extends SpecialPage {
                }
 
                $isAutoCreated = false;
-               if ( 0 == $u->getID() ) {
+               if ( $u->getID() == 0 ) {
                        $status = $this->attemptAutoCreate( $u );
                        if ( $status !== self::SUCCESS ) {
                                return $status;
@@ -569,8 +569,9 @@ class LoginForm extends SpecialPage {
                } else {
                        global $wgExternalAuthType, $wgAutocreatePolicy;
                        if ( $wgExternalAuthType && $wgAutocreatePolicy != 'never'
-                       && is_object( $this->mExtUser )
-                       && $this->mExtUser->authenticate( $this->mPassword ) ) {
+                               && is_object( $this->mExtUser )
+                               && $this->mExtUser->authenticate( $this->mPassword )
+                       ) {
                                # The external user and local user have the same name and
                                # password, so we assume they're the same.
                                $this->mExtUser->linkToLocal( $u->getID() );
@@ -897,7 +898,8 @@ class LoginForm extends SpecialPage {
                wfRunHooks( 'UserLoginComplete', array( &$currentUser, &$injected_html ) );
 
                if( $injected_html !== '' ) {
-                       $this->displaySuccessfulLogin( 'loginsuccess', $injected_html );
+                       $this->displaySuccessfulAction( $this->msg( 'loginsuccesstitle' ),
+                               'loginsuccess', $injected_html );
                } else {
                        $this->executeReturnTo( 'successredirect' );
                }
@@ -924,18 +926,21 @@ class LoginForm extends SpecialPage {
                 */
                wfRunHooks( 'BeforeWelcomeCreation', array( &$welcome_creation_msg, &$injected_html ) );
 
-               $this->displaySuccessfulLogin( $welcome_creation_msg, $injected_html );
+               $this->displaySuccessfulAction( $this->msg( 'welcomeuser', $this->getUser()->getName() ),
+                       $welcome_creation_msg, $injected_html );
        }
 
        /**
-        * Display a "login successful" page.
+        * Display an "successful action" page.
+        *
+        * @param $title string|Message page's title
         * @param $msgname string
         * @param $injected_html string
         */
-       private function displaySuccessfulLogin( $msgname, $injected_html ) {
+       private function displaySuccessfulAction( $title, $msgname, $injected_html ) {
                $out = $this->getOutput();
-               $out->setPageTitle( $this->msg( 'loginsuccesstitle' ) );
-               if( $msgname ){
+               $out->setPageTitle( $title );
+               if ( $msgname ) {
                        $out->addWikiMsg( $msgname, wfEscapeWikiText( $this->getUser()->getName() ) );
                }
 
index aa333fc..6c94729 100644 (file)
@@ -16,4 +16,7 @@ quiet: yes
 quote-nbsp: yes
 fix-backslash: no
 fix-uri: no
-new-inline-tags: video,audio,source,track,bdi
+# Don't strip html5 elements we support
+# html-{meta,link} is a hack we use to prevent Tidy from stripping <meta> and <link> used in the body for Microdata
+new-empty-tags: html-meta, html-link
+new-inline-tags: video, audio, source, track, bdi, data, time, mark
index d40b53d..fa4931c 100644 (file)
@@ -244,7 +244,7 @@ abstract class UploadBase {
                        // @TODO: just make uploads work with storage paths
                        // UploadFromStash loads files via virtuals URLs
                        $tmpFile = $repo->getLocalCopy( $srcPath );
-                       $tmpFile->bind( $this ); // keep alive with $thumb
+                       $tmpFile->bind( $this ); // keep alive with $this
                        wfProfileOut( __METHOD__ );
                        return $tmpFile->getPath();
                }
index b0e5fb6..e923c20 100644 (file)
@@ -120,17 +120,24 @@ class UploadFromChunks extends UploadFromFile {
                // Get a 0-byte temp file to perform the concatenation at
                $tmpFile = TempFSFile::factory( 'chunkedupload_', $ext );
                $tmpPath = $tmpFile
-                       ? $tmpFile->getPath()
+                       ? $tmpFile->bind( $this )->getPath() // keep alive with $this
                        : false; // fail in concatenate()
                // Concatenate the chunks at the temp file
+               $tStart = microtime( true );
                $status = $this->repo->concatenate( $fileList, $tmpPath, FileRepo::DELETE_SOURCE );
+               $tAmount = microtime( true ) - $tStart;
                if( !$status->isOk() ){
                        return $status;
                }
+               wfDebugLog( 'fileconcatenate', "Combined $i chunks in $tAmount seconds.\n" );
                // Update the mTempPath and mLocalFile
                // ( for FileUpload or normal Stash to take over )
                $this->mTempPath = $tmpPath; // file system path
+               $tStart = microtime( true );
                $this->mLocalFile = parent::stashFile();
+               $tAmount = microtime( true ) - $tStart;
+               $this->mLocalFile->setLocalReference( $tmpFile ); // reuse (e.g. for getImageInfo())
+               wfDebugLog( 'fileconcatenate', "Stashed combined file ($i chunks) in $tAmount seconds.\n" );
 
                return $status;
        }
@@ -203,6 +210,9 @@ class UploadFromChunks extends UploadFromFile {
                                        $this->getOffset() . ' inx:' . $this->getChunkIndex() . "\n" );
 
                $dbw = $this->repo->getMasterDb();
+               // Use a quick transaction since we will upload the full temp file into shared
+               // storage, which takes time for large files. We don't want to hold locks then.
+               $dbw->begin();
                $dbw->update(
                        'uploadstash',
                        array(
@@ -213,6 +223,7 @@ class UploadFromChunks extends UploadFromFile {
                        array( 'us_key' => $this->mFileKey ),
                        __METHOD__
                );
+               $dbw->commit();
        }
 
        /**
index 733c686..09bcaea 100644 (file)
@@ -182,7 +182,7 @@ class UploadStash {
         * @return UploadStashFile: file, or null on failure
         */
        public function stashFile( $path, $sourceType = null ) {
-               if ( ! file_exists( $path ) ) {
+               if ( !is_file( $path ) ) {
                        wfDebug( __METHOD__ . " tried to stash file at '$path', but it doesn't exist\n" );
                        throw new UploadStashBadPathException( "path doesn't exist" );
                }
@@ -192,12 +192,10 @@ class UploadStash {
                // we will be initializing from some tmpnam files that don't have extensions.
                // most of MediaWiki assumes all uploaded files have good extensions. So, we fix this.
                $extension = self::getExtensionForPath( $path );
-               if ( ! preg_match( "/\\.\\Q$extension\\E$/", $path ) ) {
+               if ( !preg_match( "/\\.\\Q$extension\\E$/", $path ) ) {
                        $pathWithGoodExtension = "$path.$extension";
-                       if ( ! rename( $path, $pathWithGoodExtension ) ) {
-                               throw new UploadStashFileException( "couldn't rename $path to have a better extension at $pathWithGoodExtension" );
-                       }
-                       $path = $pathWithGoodExtension;
+               } else {
+                       $pathWithGoodExtension = $path;
                }
 
                // If no key was supplied, make one.  a mysql insertid would be totally reasonable here, except
@@ -221,7 +219,7 @@ class UploadStash {
                wfDebug( __METHOD__ . " key for '$path': $key\n" );
 
                // if not already in a temporary area, put it there
-               $storeStatus = $this->repo->storeTemp( basename( $path ), $path );
+               $storeStatus = $this->repo->storeTemp( basename( $pathWithGoodExtension ), $path );
 
                if ( ! $storeStatus->isOK() ) {
                        // It is a convention in MediaWiki to only return one error per API exception, even if multiple errors
@@ -244,9 +242,6 @@ class UploadStash {
                }
                $stashPath = $storeStatus->value;
 
-               // we have renamed the file so we have to cleanup once done
-               unlink($path);
-
                // fetch the current user ID
                if ( !$this->isLoggedIn ) {
                        throw new UploadStashNotLoggedInException( __METHOD__ . ' No user is logged in, files must belong to users' );
index c4807a6..7475d2f 100644 (file)
@@ -3482,8 +3482,22 @@ class Language {
                                }
                        }
                }
-               // If all else fails, return the original string.
-               return $str;
+
+               // If all else fails, return a standard duration or timestamp description.
+               $time = strtotime( $str, 0 );
+               if ( $time === false ) { // Unknown format. Return it as-is in case.
+                       return $str;
+               } elseif ( $time !== strtotime( $str, 1 ) ) { // It's a relative timestamp.
+                       // $time is relative to 0 so it's a duration length.
+                       return $this->formatDuration( $time );
+               } else { // It's an absolute timestamp.
+                       if ( $time === 0 ) {
+                               // wfTimestamp() handles 0 as current time instead of epoch.
+                               return $this->timeanddate( '19700101000000' );
+                       } else {
+                               return $this->timeanddate( $time );
+                       }
+               }
        }
 
        /**
@@ -3690,15 +3704,24 @@ class Language {
        }
 
        /**
-        * Enclose a string with the "no conversion" tag. This is used by
-        * various functions in the Parser
+        * Prepare external link text for conversion. When the text is
+        * a URL, it shouldn't be converted, and it'll be wrapped in
+        * the "raw" tag (-{R| }-) to prevent conversion.
+        *
+        * This function is called "markNoConversion" for historical
+        * reasons.
         *
-        * @param $text String: text to be tagged for no conversion
-        * @param $noParse bool
+        * @param $text String: text to be used for external link
+        * @param $noParse bool: wrap it without confirming it's a real URL first
         * @return string the tagged text
         */
        public function markNoConversion( $text, $noParse = false ) {
-               return $this->mConverter->markNoConversion( $text, $noParse );
+               // Excluding protocal-relative URLs may avoid many false positives.
+               if ( $noParse || preg_match( '/^(?:' . wfUrlProtocolsWithoutProtRel() . ')/', $text ) ) {
+                       return $this->mConverter->markNoConversion( $text );
+               } else {
+                       return $text;
+               }
        }
 
        /**
index da55c82..5a91dab 100644 (file)
        'nap' => 'Nnapulitano', # Neapolitan
        'nb' => "norsk (bokmål)\xE2\x80\x8E",          # Norwegian (Bokmal)
        'nds' => 'Plattdüütsch',      # Low German ''or'' Low Saxon
-       'nds-nl' => 'Nedersaksisch',    # Dutch Low Saxon
+       'nds-nl' => 'Nedersaksies',     # aka Nedersaksisch: Dutch Low Saxon
        'ne' => 'नेपाली',   # Nepali
        'new' => 'नेपाल भाषा',                # Newar / Nepal Bhasha
        'ng' => 'Oshiwambo',            # Ndonga
index 6482070..0d652d4 100644 (file)
@@ -66,20 +66,6 @@ class GanConverter extends LanguageConverter {
                );
        }
 
-       /**
-        * there shouldn't be any latin text in Chinese conversion, so no need
-        * to mark anything.
-        * $noParse is there for compatibility with LanguageConvert::markNoConversion
-        *
-        * @param $text string
-        * @param $noParse bool
-        *
-        * @return string
-        */
-       function markNoConversion( $text, $noParse = false ) {
-               return $text;
-       }
-
        /**
         * @param $key string
         * @return String
index 79e5582..fe5cdf8 100644 (file)
@@ -157,21 +157,6 @@ class IuConverter extends LanguageConverter {
                        $link = $oldlink;
        }
 
-       /**
-        * We want our external link captions to be converted in variants,
-        * so we return the original text instead -{$text}-, except for URLs
-        *
-        * @param $text string
-        * @param $noParse bool
-        *
-        * @return string
-        */
-       function markNoConversion( $text, $noParse = false ) {
-               if ( $noParse || preg_match( "/^https?:\/\/|ftp:\/\/|irc:\/\//", $text ) )
-                       return parent::markNoConversion( $text );
-               return $text;
-       }
-
        /**
         * An ugly function wrapper for parsing Image titles
         * (to prevent image name conversion)
index bdaf2f4..6dd6959 100644 (file)
@@ -390,21 +390,6 @@ class KkConverter extends LanguageConverter {
                }
        }
 
-       /**
-        * We want our external link captions to be converted in variants,
-        * so we return the original text instead -{$text}-, except for URLs
-        *
-        * @param $text string
-        * @param $noParse string|bool
-        *
-        * @return string
-        */
-       function markNoConversion( $text, $noParse = false ) {
-               if ( $noParse || preg_match( "/^https?:\/\/|ftp:\/\/|irc:\/\//", $text ) )
-                       return parent::markNoConversion( $text );
-               return $text;
-       }
-
        /**
         * @param $key string
         * @return String
index 0eac439..30d98ba 100644 (file)
@@ -177,21 +177,6 @@ class KuConverter extends LanguageConverter {
                        $link = $oldlink;
        }
 
-       /**
-        * We want our external link captions to be converted in variants,
-        * so we return the original text instead -{$text}-, except for URLs
-        *
-        * @param $text string
-        * @param $noParse bool
-        *
-        * @return string
-        */
-       function markNoConversion( $text, $noParse = false ) {
-               if ( $noParse || preg_match( "/^https?:\/\/|ftp:\/\/|irc:\/\//", $text ) )
-                   return parent::markNoConversion( $text );
-               return $text;
-       }
-
        /**
         * An ugly function wrapper for parsing Image titles
         * (to prevent image name conversion)
index 4833d1c..5ddcfde 100644 (file)
@@ -136,21 +136,6 @@ class ShiConverter extends LanguageConverter {
                        $link = $oldlink;
        }
 
-       /**
-        * We want our external link captions to be converted in variants,
-        * so we return the original text instead -{$text}-, except for URLs
-        *
-        * @param $text string
-        * @param $noParse bool
-        *
-        * @return string
-        */
-       function markNoConversion( $text, $noParse = false ) {
-               if ( $noParse || preg_match( "/^https?:\/\/|ftp:\/\/|irc:\/\//", $text ) )
-                       return parent::markNoConversion( $text );
-               return $text;
-       }
-
        /**
         * An ugly function wrapper for parsing Image titles
         * (to prevent image name conversion)
index b472743..3610c1e 100644 (file)
@@ -128,21 +128,6 @@ class SrConverter extends LanguageConverter {
                        $link = $oldlink;
        }
 
-       /**
-        * We want our external link captions to be converted in variants,
-        * so we return the original text instead -{$text}-, except for URLs
-        *
-        * @param $text string
-        * @param $noParse bool
-        *
-        * @return string
-        */
-       function markNoConversion( $text, $noParse = false ) {
-               if ( $noParse || preg_match( "/^https?:\/\/|ftp:\/\/|irc:\/\//", $text ) )
-                       return parent::markNoConversion( $text );
-               return $text;
-       }
-
        /**
         * An ugly function wrapper for parsing Image titles
         * (to prevent image name conversion)
index 8bf66a3..04767f2 100644 (file)
@@ -87,20 +87,6 @@ class ZhConverter extends LanguageConverter {
                $this->mTables['zh-tw']->merge( $this->mTables['zh-hant'] );
        }
 
-       /**
-        * there shouldn't be any latin text in Chinese conversion, so no need
-        * to mark anything.
-        * $noParse is there for compatibility with LanguageConvert::markNoConversion
-        *
-        * @param $text string
-        * @param $noParse bool
-        *
-        * @return string
-        */
-       function markNoConversion( $text, $noParse = false ) {
-               return $text;
-       }
-
        /**
         * @param $key string
         * @return String
index 185fb68..f0183bc 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author 334a
  * @author A2raya07
+ * @author Amire80
  * @author Basharh
  * @author Man2fly2002
  * @author Michaelovic
@@ -230,7 +231,7 @@ $messages = array(
 'article' => 'ܡܓܠܬܐ',
 'newwindow' => '(ܦܬܚ ܒܟܘܬܐ ܚܕܬܐ)',
 'cancel' => 'ܒܛܘܠ',
-'moredotdotdot' => '...ܝܬܝܪ',
+'moredotdotdot' => 'ܝܬܝܪ...',
 'mypage' => 'ܦܐܬܝ',
 'mytalk' => 'ܡܡܠܠܝ',
 'anontalk' => 'ܡܡܠܠܐ ܕܗܢܐ ܐܝ ܦܝ (IP)',
index 5955aff..76bf740 100644 (file)
@@ -317,7 +317,7 @@ $messages = array(
 'tog-editsectiononrightclick' => 'اسمح بـ تعديل الاجزاء لما تعمل right-click بـ الماوس على عناوين الاجزاء (بيحتاج JavaScript)',
 'tog-showtoc' => 'بين جدول المحتويات (بتاع الصفح اللى فيها اكتر من 3 عناوين)',
 'tog-rememberpassword' => ' (لمدة   $1 {{PLURAL:$1|يوم|يوم}})خليك فاكر دخولى على الكمبيوتر دا',
-'tog-watchcreations' => 'زوّد الصفح اللى ابتديتها على ليستة الصفح اللى باراقبها',
+'tog-watchcreations' => 'زوّد الصفح اللى ابتديتها على ليستة الصفح اللى باراقبها.',
 'tog-watchdefault' => 'زوّد الصفح اللى باعدلها على ليستة الصفح اللى باراقبها',
 'tog-watchmoves' => 'زوّد الصفح اللى بانقلها على ليستة الصفح اللى باراقبها',
 'tog-watchdeletion' => 'زوّد الصفح اللى بامسحها على ليستة الصفح اللى باراقبها',
@@ -325,15 +325,16 @@ $messages = array(
 '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' => 'استعÙ\85Ù\84 Ù\85حرر Ø®Ø§Ø±Ø¬Ù\89 Ø§Ù\81تراضÙ\8aا',
-'tog-externaldiff' => 'استعÙ\85Ù\84 Ù\81رÙ\82 Ø®Ø§Ø±Ø¬Ù\89 Ø§Ù\81تراضÙ\8aا',
+'tog-externaleditor' => 'استخدÙ\85 Ù\85حرر Ø®Ø§Ø±Ø¬Ù\89 Ø¨Ø´Ù\83Ù\84 Ø§Ù\81تراضÙ\89 (Ù\84Ù\84خبرا Ø¨Ø³Ø\8c Ù\8aحتاج Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø®Ø§ØµØ© Ø¹Ù\84Ù\89 Ù\83Ù\88Ù\85بÙ\8aÙ\88ترÙ\83) ([//www.mediawiki.org/wiki/Manual:External_editors Ù\84Ù\85زÙ\8aد Ù\85Ù\86 Ø§Ù\84Ù\85عÙ\84Ù\88Ù\85ات].)',
+'tog-externaldiff' => 'استخدÙ\85 Ù\81رÙ\82 Ø®Ø§Ø±Ø¬Ù\89 Ø¨Ø´Ù\83Ù\84 Ø§Ù\81تراضÙ\89 (Ù\84Ù\84خبرا Ø¨Ø³Ø\8c Ù\8aحتاج Ø¥Ø¹Ø¯Ø§Ø¯Ø§Øª Ø®Ø§ØµØ© Ø¹Ù\84Ù\89 Ù\83Ù\88Ù\85بÙ\8aÙ\88ترÙ\83) ([//www.mediawiki.org/wiki/Manual:External_editors Ù\84Ù\85عÙ\84Ù\88Ù\85ات Ø§Ù\83تر].)',
 'tog-showjumplinks' => 'خلى وصلات "روح لـ" تكون شغالة.',
 'tog-uselivepreview' => 'استخدم البروفة السريعة (جافاسكريبت) (تجريبي)',
 'tog-forceeditsummary' => 'نبهنى عند تدخيل ملخص للتعديل  فاضي',
@@ -435,8 +436,8 @@ $messages = array(
 'newwindow' => '(بتفتح ويندو جديده)',
 'cancel' => 'كانسل',
 'moredotdotdot' => 'اكتر...',
-'mypage' => 'صفحتى',
-'mytalk' => 'Ù\85Ù\86اÙ\82شاتÙ\89',
+'mypage' => 'صفحه',
+'mytalk' => 'Ù\83Ù\84اÙ\85',
 'anontalk' => 'المناقشة مع عنوان الأيبى دا',
 'navigation' => 'استكشاف',
 'and' => '&#32;و',
@@ -3488,4 +3489,6 @@ $5
 'searchsuggest-search' => 'تدوير',
 'searchsuggest-containing' => 'جوّاه...',
 
+# Unknown messages
+'mytalk-parenthetical' => 'كلام',
 );
index ef3c8dd..e5d2395 100644 (file)
@@ -470,9 +470,12 @@ L'alministrador que lu bloquió dio esti motivu: «$3».",
 
 Pues siguir usando {{SITENAME}} de forma anónima, o pues <span class='plainlinks'>[$1 volver entrar]</span> como'l mesmu o como otru usuariu.
 Ten en cuenta que dalgunes páxines puen siguir apaeciendo como si tovía tuvieres coneutáu, hasta que llimpies la caché del restolador.",
+'welcomeuser' => '¡Afayati, $1!',
 'welcomecreation' => "== ¡Bienllegáu, $1! ==
 Creóse la to cuenta.
 Nun t'escaezas d'escoyer les tos [[Special:Preferences|preferencies de {{SITENAME}}]].",
+'welcomecreation-agora' => "Creóse la to cuenta.
+Nun t'escaezas d'escoyer les tos [[Special:Preferences|preferencies de {{SITENAME}}]].",
 'yourname' => "Nome d'usuariu:",
 'yourpassword' => 'Clave:',
 'yourpasswordagain' => 'Escribi otra vuelta la clave:',
@@ -1639,6 +1642,7 @@ Si'l problema persiste, contauta con un [[Special:ListUsers/sysop|alministrador]
 'backend-fail-notsame' => 'Yá esiste un ficheru non idénticu en $1.',
 'backend-fail-invalidpath' => "$1 nun ye una ruta d'almacenamientu válida.",
 'backend-fail-delete' => 'Nun se pudo desaniciar el ficheru $1.',
+'backend-fail-describe' => 'Nun se pudieron camudar los metadatos del ficheru "$1".',
 'backend-fail-alreadyexists' => 'El ficheru $1 yá esiste.',
 'backend-fail-store' => 'Nun se pudo guardar el ficheru $1 en $2.',
 'backend-fail-copy' => 'Nun se pudo copiar el ficheru $1 como $2.',
@@ -2959,6 +2963,8 @@ Probablemente tea causao por un enllaz a un sitiu esternu de la llista prieta.',
 'markedaspatrollederror' => 'Nun se pue marcar como supervisada',
 'markedaspatrollederrortext' => 'Necesites conseñar una revisión pa marcala como supervisada.',
 'markedaspatrollederror-noautopatrol' => 'Nun tienes permisu pa marcar los cambios propios como supervisaos.',
+'markedaspatrollednotify' => 'Esti cambiu en $1 marcóse como revisáu.',
+'markedaspatrollederrornotify' => "Falló l'aición de marcar como revisáu.",
 
 # Patrol log
 'patrol-log-page' => 'Rexistru de supervisión',
index c3dda3a..1361abc 100644 (file)
@@ -3802,4 +3802,6 @@ MediaWiki файҙалы булыр, тигән өмөттә, ләкин БЕР
 'duration-centuries' => '$1 {{PLURAL:$1|быуат|быуаттар}}',
 'duration-millennia' => '$1 {{PLURAL:$1|меңйыллыҡ|меңйыллыҡтар}}',
 
+# Unknown messages
+'mytalk-parenthetical' => 'әңг',
 );
index 518bf65..70e6982 100644 (file)
@@ -94,7 +94,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Без паказу ўхваленых правак у нядаўніх змяненнях',
 'tog-newpageshidepatrolled' => 'Без паказу ўхваленых правак у пераліку новых старонак',
 'tog-extendwatchlist' => 'Паказваць усе змяненні, а не толькі апошнія',
-'tog-usenewrc' => 'УдаÑ\81каналенÑ\8b Ð²Ñ\8bглÑ\8fд (паÑ\82Ñ\80абÑ\83е Ð¯Ð²Ð°Ñ\81кÑ\80Ñ\8bпÑ\82)',
+'tog-usenewrc' => 'Ð\93Ñ\80Ñ\83паваÑ\86Ñ\8c Ð·Ð¼ÐµÐ½Ñ\8b Ñ\81Ñ\82аÑ\80онкÑ\96 Ñ\9e Ñ\81пÑ\96Ñ\81аÑ\85 Ð°Ð¿Ð¾Ñ\88нÑ\96Ñ\85 Ð·Ð¼ÐµÐ½Ð°Ñ\9e Ñ\96 Ð½Ð°Ð·Ñ\96Ñ\80аннÑ\8fÑ\9e (паÑ\82Ñ\80абÑ\83е JavaScript)',
 'tog-numberheadings' => 'Аўта-нумараваць падзагалоўкі',
 'tog-showtoolbar' => 'Паказваць рэдактарскую стужку (Яваскрыпт)',
 'tog-editondblclick' => 'Праўка старонак па падвойным пстрыку (Яваскрыпт)',
@@ -102,10 +102,10 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Праўка падраздзелаў па правым пстрыку на загалоўку (Яваскрыпт)',
 'tog-showtoc' => 'Паказваць змест (для старонак, дзе больш за 3 падзагалоўкі)',
 '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' => 'Папярэдні паказ пры першай праўцы',
@@ -717,7 +717,7 @@ $2
 або [{{fullurl:{{FULLPAGENAME}}|action=edit}} папрацаваць з гэтай старонкай]</span>.',
 'noarticletext-nopermission' => 'Старонка не ўтрымлівае тэксту.
 Вы можаце [[Special:Search/{{PAGENAME}}|пашукаць гэткую назву]] ў іншых старонках,
-ці <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ў журналах]</span>.',
+ці <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ў журналах]</span>, але вы не маеце дазволу на стварэнне гэтай старонкі.',
 'userpage-userdoesnotexist' => 'Рахунак удзельніка "<nowiki>$1</nowiki>" не зарэгістраваны. Праверце, ці вы жадаеце стварыць або паправіць гэтую старонку.',
 'userpage-userdoesnotexist-view' => 'Уліковы запіс удзельніка " $1 "не зарэгістраваны.',
 'blocked-notice-logextract' => 'Гэты карыстальнік у дадзены момант заблакаваны. 
@@ -738,7 +738,7 @@ $2
 'userinvalidcssjstitle' => "'''Увага:''' Няма вокладкі з назвай \"\$1\". Памятайце, што свае старонкі .css і .js называюцца толькі малымі літарамі, такім чынам, напр., {{ns:user}}:Foo/vector.css, а не {{ns:user}}:Foo/Vector.css.",
 'updated' => '(абноўлена)',
 'note' => "'''Заўвага:'''",
-'previewnote' => "'''Ð\93эта папярэдні паказ; праўкі яшчэ не замацаваныя!'''",
+'previewnote' => "'''Ð\9fамÑ\8fÑ\82айÑ\86е, Ð³эта папярэдні паказ; праўкі яшчэ не замацаваныя!'''",
 'previewconflict' => 'Гэта папярэдні паказ магчымага выніку замацоўвання актуальнага стану крынічнага тэксту ў верхнім тэкставым полі.',
 'session_fail_preview' => "'''Не ўдалося апрацаваць вашую праўку, таму што сервер згубіў звесткі аб вашым сеансе.
 Паспрабуйце, калі ласка, ізноў. Калі і тады не атрымаецца, паспрабуйце [[Special:UserLogout|выйсці з сістэмы]] і зайсці ізноў.'''",
@@ -1966,7 +1966,7 @@ $1',
 
 # Watchlist
 'watchlist' => 'Мой спіс назіранага',
-'mywatchlist' => 'Ð\9dазÑ\96Ñ\80анае',
+'mywatchlist' => 'СпÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80анага',
 'watchlistfor2' => 'Для $1 $2',
 'nowatchlist' => 'Ваш спіс назіранага зараз пусты.',
 'watchlistanontext' => 'Каб бачыць або правіць складнікі назіранага, трэба $1.',
index b80b1bd..16ffa5c 100644 (file)
@@ -423,6 +423,7 @@ $messages = array(
 'namespaces' => 'Прасторы назваў',
 'variants' => 'Варыянты',
 
+'navigation-heading' => 'Навігацыйнае мэню',
 'errorpagetitle' => 'Памылка',
 'returnto' => 'Вярнуцца да старонкі «$1».',
 'tagline' => 'Зьвесткі з {{GRAMMAR:родны|{{SITENAME}}}}',
@@ -665,9 +666,12 @@ $2',
 
 Вы можаце працягваць працу ў {{GRAMMAR:месны|{{SITENAME}}}} ананімна, альбо можаце <span class='plainlinks'>[$1 ўвайсьці ў сыстэму]</span> як той жа альбо іншы ўдзельнік.
 Некаторыя старонкі могуць паказвацца, быццам Вы ўсё яшчэ ў сыстэме. Каб гэтага пазьбегнуць, трэба ачысьціць кэш браўзэра.",
+'welcomeuser' => 'Вітаем, $1!',
 'welcomecreation' => '== Вітаем, $1! ==
 Ваш рахунак быў створаны.
 Не забудзьцеся зьмяніць Вашыя [[Special:Preferences|налады ў {{GRAMMAR:месны|{{SITENAME}}}}]].',
+'welcomecreation-agora' => 'Ваш рахунак быў створаны.
+Не забудзьцеся зьмяніць Вашыя [[Special:Preferences|налады ў {{GRAMMAR:месны|{{SITENAME}}}}]].',
 'yourname' => 'Імя ўдзельніка:',
 'yourpassword' => 'Пароль:',
 'yourpasswordagain' => 'Паўтарыце пароль:',
@@ -1786,6 +1790,7 @@ $1',
 'backend-fail-notsame' => 'Неідэнтыфікаваны файл ужо існуе $1.',
 'backend-fail-invalidpath' => '$1 не зьяўляецца слушным шляхам да сховішча.',
 'backend-fail-delete' => 'Немагчыма выдаліць файл $1.',
+'backend-fail-describe' => 'Не атрымалася зьмяніць мэтазьвесткі для файла «$1».',
 'backend-fail-alreadyexists' => 'Файл $1 ужо існуе.',
 'backend-fail-store' => 'Немагчыма захаваць файл $1 у $2.',
 'backend-fail-copy' => 'Немагчыма скапіяваць файл $1 у $2.',
index b08cce1..a93b869 100644 (file)
@@ -202,7 +202,7 @@ $messages = array(
 'cancel' => 'বাতিল',
 'moredotdotdot' => 'আরও...',
 'mypage' => 'আমার পাতা',
-'mytalk' => 'à¦\86মার à¦\86লাপ',
+'mytalk' => 'à¦\86লà§\8bà¦\9aনা',
 'anontalk' => 'এই বেনামী ব্যবহারকারীর আলাপের পাতা',
 'navigation' => 'পরিভ্রমণ',
 'and' => '&#32;এবং',
@@ -1123,7 +1123,7 @@ $1",
 
 # Preferences page
 'preferences' => 'আমার পছন্দ',
-'mypreferences' => 'à¦\86মার à¦ªà¦\9bনà§\8dদ',
+'mypreferences' => 'পà¦\9bনà§\8dদসমà§\82হ',
 'prefs-edits' => 'সম্পাদনা সংখ্যা:',
 'prefsnologin' => 'আপনি লগ-ইন করেননি',
 'prefsnologintext' => 'ব্যবহারকারীর পছন্দ ঠিক করতে হলে আপনাকে অবশ্যই <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} লগইন]</span> করা অবস্থায় থাকতে হবে।',
@@ -1964,7 +1964,7 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 'linksearch-ok' => 'অনুসন্ধান',
 'linksearch-text' => '"*.wikipedia.org" এর মত ওয়াইল্ড কার্ড ব্যবহার করা যেতে পারে।
 নূন্যতম একটি টপ লেভেল ডোমেইন প্রয়োজন, যেমন "*.org".<br />
-যà§\87 à¦¸à¦\95ল à¦ªà§\8dরà§\8bà¦\9fà§\8bà¦\95ল à¦¸à¦®à¦°à§\8dথন à¦\95রà§\87: <code>$1</code> (à¦\85নà§\81সনà§\8dধান à¦¬à¦\95à§\8dসà§\87 à¦\8fà¦\97à§\81লà§\8b à¦¬à§\8dযবহার à¦\95রবà§\87ন à¦¨à¦¾)।',
+যà§\87 à¦¸à¦\95ল à¦ªà§\8dরà§\8bà¦\9fà§\8bà¦\95ল à¦¸à¦®à¦°à§\8dথন à¦\95রà§\87: <code>$1</code> (পà§\8dরà§\8bà¦\9fà¦\95ল à¦\89লà§\8dলà§\87à¦\96 à¦\95রা à¦¨à¦¾ à¦¹à¦²à§\87 http:// à¦¡à¦¿à¦«à¦²à§\8dà¦\9f à¦¹à¦¿à¦¸à¦¾à¦¬à§\87 à¦¬à§\8dযবহà§\83ত à¦¹à¦¬à§\87)।',
 'linksearch-line' => '$2 থেকে $1 এ লিংক করা হয়েছে',
 'linksearch-error' => 'হোস্ট নামের শুরুতে কেবলমাত্র ওয়াইল্ডকার্ড ব্যবহার করা যায়।',
 
@@ -2045,7 +2045,7 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 
 # Watchlist
 'watchlist' => 'আমার নজর তালিকা',
-'mywatchlist' => 'à¦\86মার à¦¨à¦\9cর à¦¤à¦¾à¦²à¦¿à¦\95া',
+'mywatchlist' => 'নজর তালিকা',
 'watchlistfor2' => '$1 ($2)-এর জন্য',
 'nowatchlist' => 'আপনার নজরতালিকা খালি।',
 'watchlistanontext' => 'আপনার নজরতালিকার আইটেমগুলি দেখতে বা সম্পাদনা করতে অনুগ্রহ করে $1।',
@@ -2307,7 +2307,7 @@ $1',
 # Contributions
 'contributions' => 'ব্যবহারকারীর অবদান',
 'contributions-title' => '$1 ব্যবহারকারীর অবদানসমূহ',
-'mycontris' => 'à¦\86মার à¦\85বদান',
+'mycontris' => 'অবদান',
 'contribsub2' => '$1 ($2)-এর জন্য',
 'nocontribs' => 'এই শর্তগুলির সাথে মিলে যায়, এমন কোন পরিবর্তন খুঁজে পাওয়া যায়নি।',
 'uctop' => '(শীর্ষ)',
@@ -2348,7 +2348,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 টি পুননির্দেশনা',
 'whatlinkshere-hidetrans' => '$1 ট্রান্সক্লুশন',
 'whatlinkshere-hidelinks' => '$1 টি সংযোগ',
-'whatlinkshere-hideimages' => '$1 à¦\9aিতà§\8dর সংযোগ',
+'whatlinkshere-hideimages' => '$1 à¦«à¦¾à¦\87ল সংযোগ',
 'whatlinkshere-filters' => 'ছাকনী',
 
 # Block/unblock
index b9cb6da..42cea4e 100644 (file)
@@ -2142,7 +2142,7 @@ evit gallout kas ur postel d'un implijer all.",
 'emailuser-title-target' => "Kas ur postel d'an {{PLURAL:$1|an implijer-mañ|an implijerez-mañ}}",
 'emailuser-title-notarget' => "Kas ur postel d'un implijer",
 'emailpage' => 'Postel implijer',
-'emailpagetext' => "Gallout a rit ober gant ar furmskrid a-is a-benn kas ur postel d'an implijer-mañ.
+'emailpagetext' => "Gallout a rit ober gant ar furmskrid a-is a-benn kas ur postel d'an {{GENDER:\$1|implijer|implijerez}}-mañ.
 E maezienn \"Kaser\" ho postel e vo merket ar chomlec'h postel resisaet ganeoc'h-c'hwi en ho [[Special:Preferences|Penndibaboù]], d'ar resever da c'hallout respont deoc'h war-eeun ma kar.",
 'usermailererror' => 'Fazi postel :',
 'defemailsubject' => 'Postel kaset eus {{SITENAME}} gant an implijer "$1"',
@@ -2400,7 +2400,8 @@ Ma'z eus bet krouet ur bajenn nevez dezhi an hevelep anv abaoe an diverkadenn, e
 'undeletedrevisions' => 'Adsavet {{PLURAL:$1|1 stumm|$1 stumm}}',
 'undeletedrevisions-files' => 'Adsavet ez ez eus bet {{PLURAL:$1|1 stumm|$1 stumm}} ha {{PLURAL:$2|1 restr|$2 restr}}',
 'undeletedfiles' => '{{PLURAL:$1|1 restr|$1 restr}} adsavet',
-'cannotundelete' => "Dibosupl eo diziverkañ; moarvat eo bet diziverket gant unan bennak all araozoc'h.",
+'cannotundelete' => 'Dibosupl eo diziverkañ:
+$1',
 'undeletedpage' => "'''Diziverket eo bet $1'''
 
 Sellit ouzh [[Special:Log/delete|marilh an diverkadennoù]] evit teuler ur sell ouzh an diverkadennoù diwezhañ.",
@@ -2962,6 +2963,7 @@ Sur a-walc'h abalamour d'ul liamm enni a gas d'ul lec'hienn ziavaez berzet.",
 'pageinfo-default-sort' => "Alc'hwez rummañ dre ziouer",
 'pageinfo-length' => 'Ment ar bajenn (en oktedoù)',
 'pageinfo-article-id' => 'Niverenn ar bajenn',
+'pageinfo-language' => 'Yezh ar bajenn',
 'pageinfo-robot-policy' => 'Statud al lusker klask',
 'pageinfo-robot-index' => "A c'haller menegeriñ",
 'pageinfo-robot-noindex' => "Ne c'haller ket menegeriñ",
@@ -3912,4 +3914,6 @@ 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
+'mytalk-parenthetical' => 'kaozeal',
 );
index f19cb10..c467039 100644 (file)
@@ -25,6 +25,7 @@
  * @author Pasqual (ca)
  * @author Paucabot
  * @author PerroVerd
+ * @author Pitort
  * @author Pérez
  * @author Qllach
  * @author SMP
@@ -34,6 +35,7 @@
  * @author Ssola
  * @author Toniher
  * @author Vriullop
+ * @author Àlex
  * @author לערי ריינהארט
  */
 
@@ -208,8 +210,8 @@ $messages = array(
 'tog-editsectiononrightclick' => "Habilita l'edició per seccions en clicar amb el botó dret sobre els títols de les seccions (cal JavaScript)",
 'tog-showtoc' => 'Mostra la taula de continguts (per pàgines amb més de 3 seccions)',
 'tog-rememberpassword' => 'Recorda la sessió al navegador (per un màxim de {{PLURAL:$1|dia|dies}})',
-'tog-watchcreations' => 'Afegeix les pàgines que vagi creant a la llista de seguiment',
-'tog-watchdefault' => 'Afegeix les pàgines que vagi creant a la llista de seguiment',
+'tog-watchcreations' => 'Afegeix les pàgines que vagi creant i fitxers que carregui a la llista de seguiment',
+'tog-watchdefault' => 'Afegeix les pàgines que vagi editant a la llista de seguiment',
 'tog-watchmoves' => 'Afegeix les pàgines que reanomeni a la llista de seguiment',
 'tog-watchdeletion' => 'Afegeix les pàgines que elimini a la llista de seguiment',
 'tog-minordefault' => 'Marca totes les contribucions com a edicions menors per defecte',
@@ -328,7 +330,7 @@ $messages = array(
 'newwindow' => '(obre en una nova finestra)',
 'cancel' => 'Anuŀla',
 'moredotdotdot' => 'Més...',
-'mypage' => 'Pàgina personal',
+'mypage' => 'Pàgina',
 'mytalk' => 'Discussió',
 'anontalk' => "Discussió d'aquesta IP",
 'navigation' => 'Navegació',
@@ -361,6 +363,7 @@ $messages = array(
 'namespaces' => 'Espais de noms',
 'variants' => 'Variants',
 
+'navigation-heading' => 'Menú de navegació',
 'errorpagetitle' => 'Error',
 'returnto' => 'Torna cap a $1.',
 'tagline' => 'De {{SITENAME}}',
@@ -476,7 +479,7 @@ $1",
 'thisisdeleted' => 'Voleu mostrar o restaurar $1?',
 'viewdeleted' => 'Voleu mostrar $1?',
 'restorelink' => '{{PLURAL:$1|una versió esborrada|$1 versions esborrades}}',
-'feedlinks' => 'Sindicament:',
+'feedlinks' => 'Sindicació:',
 'feed-invalid' => 'La subscripció no és vàlida pel tipus de sindicament.',
 'feed-unavailable' => 'Els canals de sindicació no estan disponibles',
 'site-rss-feed' => 'Canal RSS $1',
@@ -600,10 +603,13 @@ L\'administrador que l\'ha bloquejat ha donat aquesta explicació: "$3".',
 
 Podeu continuar utilitzant {{SITENAME}} de forma anònima, o podeu <span class='plainlinks'>[$1 iniciar una sessió una altra vegada]</span> amb el mateix o un altre usuari.
 Tingueu en compte que algunes pàgines poden continuar mostrant-se com si encara estiguéssiu en una sessió, fins que buideu la memòria cau del vostre navegador.",
+'welcomeuser' => 'Benvingut,  $1 !',
 'welcomecreation' => "== Us donem la benvinguda, $1! ==
 
 S'ha creat el vostre compte.
 No oblideu de canviar les vostres [[Special:Preferences|preferències de {{SITENAME}}]].",
+'welcomecreation-agora' => 'El vostre compte ha estat creat.
+No oblideu de canviar les vostres [[Special:Preferences|{{SITENAME}} preferències]].',
 'yourname' => "Nom d'usuari",
 'yourpassword' => 'Contrasenya',
 'yourpasswordagain' => 'Escriviu una altra vegada la contrasenya',
@@ -1120,7 +1126,7 @@ Si us plau, verifica els registres.",
 ** Comentari o informació personal inapropiada
 ** Nom d'usuari inapropiat
 ** Informació potencialment calumniosa",
-'revdelete-otherreason' => 'Altre motiu / motiu suplementari:',
+'revdelete-otherreason' => 'Motiu diferent o addicional:',
 'revdelete-reasonotherlist' => 'Altres raons',
 'revdelete-edit-reasonlist' => "Editar el motiu d'esborrament",
 'revdelete-offender' => 'Autor de la revisió:',
@@ -1479,6 +1485,9 @@ Ha de tenir com a molt {{PLURAL:$1|un caràcter|$1 caràcters}}.',
 'rightslogtext' => "Aquest és un registre de canvis dels permisos d'usuari.",
 'rightslogentry' => 'ha modificat els drets de $1 del grup $2 a $3',
 'rightslogentry-autopromote' => 'ha estat promogut automàticament de $2 a $3',
+'logentry-rights-rights' => '$1 ha canviat la pertinença de grups per $3 de $4 a $5',
+'logentry-rights-rights-legacy' => '$1 ha canviat la pertinença de grups per $3',
+'logentry-rights-autopromote' => '$1 ha estat promogut automàticament de $4 a $5',
 'rightsnone' => '(cap)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -1700,6 +1709,7 @@ $1',
 'backend-fail-notsame' => 'Ja existeix un fitxer no idèntic a $1.',
 'backend-fail-invalidpath' => "$1 no és un camí d'emmagatzemament vàlid.",
 'backend-fail-delete' => "No s'ha pogut suprimir el fitxer $1.",
+'backend-fail-describe' => 'La modificació de les metadades del fitxer "$1" no és possible.',
 'backend-fail-alreadyexists' => 'El fitxer $1 ja existeix.',
 'backend-fail-store' => "No s'ha pogut emmagatzemar el fitxer $1 a $2.",
 'backend-fail-copy' => "No s'ha pogut copiar el fitxer $1 a $2.",
@@ -1870,7 +1880,7 @@ Potser voleu modificar-ne la descripció en la seva [$2 pàgina de descripció].
 'filedelete-success-old' => "<span class=\"plainlinks\">La versió de '''[[Media:\$1|\$1]]''' s'ha eliminat el \$2 a les \$3.</span>",
 'filedelete-nofile' => "'''$1''' no existeix.",
 'filedelete-nofile-old' => "No hi ha cap versió arxivada de '''$1''' amb els atributs especificats.",
-'filedelete-otherreason' => 'Motius alternatius/addicionals:',
+'filedelete-otherreason' => 'Motiu diferent o addicional:',
 'filedelete-reason-otherlist' => 'Altres motius',
 'filedelete-reason-dropdown' => "*Motius d'eliminació comuns
 ** Violació dels drets d'autor / copyright
@@ -2081,9 +2091,9 @@ Vegeu també [[Special:WantedCategories|les categories soŀlicitades]].",
 'linksearch-pat' => 'Patró de cerca:',
 'linksearch-ns' => 'Espai de noms:',
 'linksearch-ok' => 'Cerca',
-'linksearch-text' => 'Podeu fer servir caràcters comodí com "*.wikipedia.org".
+'linksearch-text' => 'Es poden utilitzar caràcters comodí com "*.wikipedia.org".
 Necessita com a mínim un domini de primer nivell, per exemple "*.org".<br />
-Protocols admesos: <code> $1 </code> (no els afegiu en la vostra recerca).',
+Protocols admesos: <code>$1</code> (http:// per defecte si no se n\'especifica cap).',
 'linksearch-line' => '$1 enllaçat a $2',
 'linksearch-error' => "Els caràcters comodí només poden aparèixer a l'inici de l'url.",
 
@@ -2134,8 +2144,8 @@ per enviar un correu electrònic a altres usuaris.",
 'emailuser-title-target' => 'Enviar un correu electrònic a {{GENDER:$1|aquest usuari|aquesta usuària}}',
 'emailuser-title-notarget' => "Enviar un correu electrònic a l'usuari",
 'emailpage' => 'Correu electrònic a usuari',
-'emailpagetext' => "Podeu usar el següent formulari per a enviar un missatge de correu electrònic a aquest usuari.
-L'adreça electrònica que heu entrat en [[Special:Preferences|les vostres preferències d'usuari]] apareixerà com a remitent del correu electrònic, de manera que el destinatari us podrà respondre directament.",
+'emailpagetext' => "Podeu usar el següent formulari per a enviar un missatge de correu electrònic a {{GENDER:$1|aquest usuari|aquesta usuària}}.
+L'adreça electrònica que vau indicar a [[Special:Preferences|les vostres preferències d'usuari]] apareixerà com a remitent del correu electrònic, de manera que el destinatari us podrà respondre directament.",
 'usermailererror' => "L'objecte de correu ha retornat un error:",
 'defemailsubject' => 'Correu electrònic de l\'usuari "$1" de {{SITENAME}}',
 'usermaildisabled' => "Correu electrònic d'usuaris deshabilitat",
@@ -2263,7 +2273,7 @@ Vegeu $2 per a un registre dels esborrats més recents.',
 'deletionlog' => "Registre d'esborrats",
 'reverted' => 'Invertit amb una revisió anterior',
 'deletecomment' => 'Motiu:',
-'deleteotherreason' => 'Motius diferents o addicionals:',
+'deleteotherreason' => 'Motiu diferent o addicional:',
 'deletereasonotherlist' => 'Altres motius',
 'deletereason-dropdown' => "*Motius freqüents d'esborrat
 ** Demanada per l'autor
@@ -2334,7 +2344,7 @@ Ací es troben els paràmetres actuals de la pàgina '''$1''':",
 'protect-othertime' => 'Un altre termini:',
 'protect-othertime-op' => 'un altre termini',
 'protect-existing-expiry' => "Data d'expiració existent: $2 a les $3",
-'protect-otherreason' => 'Altres motius:',
+'protect-otherreason' => 'Motiu diferent o addicional:',
 'protect-otherreason-op' => 'Altres motius',
 'protect-dropdown' => "*Motius comuns de protecció
 ** Vandalisme excessiu
@@ -2465,7 +2475,7 @@ Per més detalls, la última entrada del registre es mostra a continuació:',
 'whatlinkshere-hideredirs' => '$1 redireccions',
 'whatlinkshere-hidetrans' => '$1 inclusions',
 'whatlinkshere-hidelinks' => '$1 enllaços',
-'whatlinkshere-hideimages' => '$1 enllaços a imatge',
+'whatlinkshere-hideimages' => '$1 enllaços de fitxers',
 'whatlinkshere-filters' => 'Filtres',
 
 # Block/unblock
@@ -2501,7 +2511,7 @@ quines pàgines en concret estan sent vandalitzades).",
 'ipbother' => 'Un altre termini',
 'ipboptions' => '2 hores:2 hours,1 dia:1 day,3 dies:3 days,1 setmana:1 week,2 setmanes:2 weeks,1 mes:1 month,3 mesos:3 months,6 mesos:6 months,1 any:1 year,infinit:infinite',
 'ipbotheroption' => 'un altre',
-'ipbotherreason' => 'Altres motius o addicionals:',
+'ipbotherreason' => 'Motiu diferent o addicional:',
 'ipbhidename' => "Amaga el nom d'usuari de les edicions i llistes",
 'ipbwatchuser' => "Vigila les pàgines d'usuari i de discussió de l'usuari",
 'ipb-disableusertalk' => 'Impedeix que aquest usuari pugui modificar la seva pàgina de discussió mentre dura el blocatge',
@@ -2715,16 +2725,16 @@ A continuació es mostra la darrera entrada del registre com a referència:",
 'file-exists-sharedrepo' => "El nom de fitxer escollit ja s'utilitza al dipòsit compartit. Escolliu un altre nom.",
 
 # Export
-'export' => 'Exporta les pàgines',
+'export' => 'Exportació de pàgines',
 'exporttext' => "Podeu exportar a XML el text i l'historial d'una pàgina en concret o d'un conjunt de pàgines; aleshores el resultat pot importar-se en un altre lloc web basat en wiki amb programari de MediaWiki mitjançant la [[Special:Import|pàgina d'importació]].
 
 Per a exportar pàgines, escriviu els títols que desitgeu al quadre de text de sota, un títol per línia, i seleccioneu si desitgeu o no la versió actual juntament amb totes les versions antigues, amb la pàgina d'historial, o només la pàgina actual amb la informació de la darrera modificació.
 
 En el darrer cas, podeu fer servir un enllaç com ara [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] per a la pàgina «[[{{MediaWiki:Mainpage}}]]».",
 'exportall' => 'Exporta totes les pàgines',
-'exportcuronly' => "Exporta únicament la versió actual en voltes de l'historial sencer",
+'exportcuronly' => "Inclou només la versió actual, sense l'historial complet",
 'exportnohistory' => "----
-'''Nota:''' s'ha inhabilitat l'exportació sencera d'historial de pàgines mitjançant aquest formulari a causa de problemes de rendiment del servidor.",
+'''Nota:''' s'ha inhabilitat l'exportació sencera d'historial de pàgines mitjançant aquest formulari a causa de problemes de rendiment.",
 'exportlistauthors' => 'Inclouen una llista completa dels contribuents per a cada pàgina',
 'export-submit' => 'Exporta',
 'export-addcattext' => 'Afegeix pàgines de la categoria:',
@@ -2944,6 +2954,7 @@ Això deu ser degut per un enllaç a un lloc extern inclòs a la llista negra.',
 'pageinfo-default-sort' => "Clau d'ordenació predeterminada",
 'pageinfo-length' => 'Mida de la pàgina (en bytes)',
 'pageinfo-article-id' => 'ID de la pàgina',
+'pageinfo-language' => 'Llengua del contingut de la pàgina',
 'pageinfo-robot-policy' => 'Estat del motor de cerca',
 'pageinfo-robot-index' => 'Indexable',
 'pageinfo-robot-noindex' => 'No indexable',
@@ -2987,6 +2998,8 @@ Això deu ser degut per un enllaç a un lloc extern inclòs a la llista negra.',
 'markedaspatrollederror' => 'No es pot marcar com a supervisat',
 'markedaspatrollederrortext' => 'Cal que especifiqueu una versió per a marcar-la com a supervisada.',
 'markedaspatrollederror-noautopatrol' => 'No podeu marcar les vostres pròpies modificacions com a supervisades.',
+'markedaspatrollednotify' => 'Aquesta modificació a $1 ha estat marcada com a patrullada.',
+'markedaspatrollederrornotify' => 'Ha fallat la marca com a patrullat.',
 
 # Patrol log
 'patrol-log-page' => 'Registre de supervisió',
@@ -2995,7 +3008,7 @@ Això deu ser degut per un enllaç a un lloc extern inclòs a la llista negra.',
 
 # Image deletion
 'deletedrevision' => "S'ha eliminat la revisió antiga $1.",
-'filedeleteerror-short' => "S'ha produït un error en suprimir el fitxer: $1",
+'filedeleteerror-short' => 'Error en suprimir el fitxer: $1',
 'filedeleteerror-long' => "S'han produït errors en suprimir el fitxer:
 
 $1",
@@ -3172,7 +3185,7 @@ La resta d'enllaços de la línia són les excepcions, és a dir, les pàgines o
 'exif-gpsstatus' => 'Estat del receptor',
 'exif-gpsmeasuremode' => 'Mode de mesura',
 'exif-gpsdop' => 'Precisió de la mesura',
-'exif-gpsspeedref' => 'Unitats de velocitat',
+'exif-gpsspeedref' => 'Unitat de velocitat',
 'exif-gpsspeed' => 'Velocitat del receptor GPS',
 'exif-gpstrackref' => 'Referència per la direcció del moviment',
 'exif-gpstrack' => 'Direcció del moviment',
@@ -3552,6 +3565,7 @@ Aquest codi de confirmació caducarà el $4.",
 # Scary transclusion
 'scarytranscludedisabled' => "[S'ha inhabilitat la transclusió interwiki]",
 'scarytranscludefailed' => '[Ha fallat la recuperació de la plantilla per a $1]',
+'scarytranscludefailed-httpstatus' => '[Ha fallat la recuperació de la plantilla per a $1: HTTP $2]',
 'scarytranscludetoolong' => "[L'URL és massa llarg]",
 
 # Delete conflict
@@ -3662,6 +3676,7 @@ També podeu [[Special:EditWatchlist|utilitzar l'editor estàndard]].",
 'version-license' => 'Llicència',
 'version-poweredby-credits' => "El wiki funciona gràcies a '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'altres',
+'version-credits-summary' => 'El nostre reconeixement a les següents persones per la seva aportació a [[Special:Version|MediaWiki]]',
 'version-license-info' => "MediaWiki és programari lliure, podeu redistribuir-lo i/o modificar-lo sota els termes de la Llicència Pública General GNU publicada per la Free Software Foundation, ja sigui de la seva versió 2 o (a elecció vostra) qualsevol versió posterior. 
 
 MediaWiki es distribueix en l'esperança de ser d'utilitat, però SENSE CAP GARANTIA; ni tan sols la garantia implícita de COMERCIALITZACIÓ o ADEQUACIÓ A UNA FINALITAT DETERMINADA. En trobareu més detalls a  la Llicència Pública General GNU.
@@ -3879,4 +3894,6 @@ 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
+'mytalk-parenthetical' => 'discussió',
 );
index 5443e4e..4c6b402 100644 (file)
@@ -412,7 +412,7 @@ $1',
 'youhavenewmessages' => '$1ت ھەیە ($2).',
 'newmessageslink' => 'پەیامی نوێ',
 'newmessagesdifflink' => 'دوایین گۆڕانکاری',
-'youhavenewmessagesfromusers' => '$1ت لە {{PLURAL:$3|بەکارھێنەرێکی تر| $3 بەکارھێنەر}} ھەیە ($2).',
+'youhavenewmessagesfromusers' => 'لە {{PLURAL:$3|بەکارھێنەرێک|$3 بەکارھێنەران}} $1ت ھەیە ($2).',
 'youhavenewmessagesmanyusers' => '$1ت  لە ژمارەیەک بەکارھێنەر ھەیە ( $2 ).',
 'newmessageslinkplural' => '{{PLURAL:$1|پەیامێکی نوێ|پەیامی نوێ}}',
 'newmessagesdifflinkplural' => 'دوایین {{PLURAL:$1|گۆڕانکاری|گۆڕانکارییەکان}}',
@@ -2363,8 +2363,9 @@ $1',
 'unblocked' => '[[User:$1|$1]] لە بەربەست دەرهێنرا',
 'unblocked-id' => 'بەربەستی $1 لابرا',
 'blocklist' => 'بەکارھێنەر بەربەستکراوەکان',
-'ipblocklist' => 'بەکارھێنەر بەربەستنکراوەکان',
+'ipblocklist' => 'بەکارھێنەر بەربەستکراوەکان',
 'ipblocklist-legend' => 'دۆزینەوەی بەکارهێنەرێکی بەربەست‌کراو',
+'blocklist-userblocks' => 'ھەژمارە بەربەستکراوەکان بشارەوە',
 'blocklist-target' => 'مەبەست',
 'blocklist-expiry' => 'ھەتا:',
 'blocklist-params' => 'پارامەترەکانی بەربەستن',
index 4f62ad4..518ab0c 100644 (file)
@@ -525,6 +525,7 @@ $messages = array(
 'namespaces' => 'Jmenné prostory',
 'variants' => 'Varianty',
 
+'navigation-heading' => 'Navigační menu',
 'errorpagetitle' => 'Chyba',
 'returnto' => 'Návrat na stránku „$1“.',
 'tagline' => 'Z {{grammar:2sg|{{SITENAME}}}}',
@@ -765,9 +766,12 @@ Správce serveru, který úložiště zamkl, poskytl toto zdůvodnění: „''$3
 
 Můžete pokračovat v anonymním prohlížení a editaci {{grammar:2sg|{{SITENAME}}}}, nebo se můžete <span class='plainlinks'>[$1 znovu přihlásit]</span> jako stejný či jiný uživatel.
 Uvědomte si, že některé stránky se mohou i nadále zobrazovat, jako byste byli dosud přihlášeni, pokud nevymažete cache prohlížeče.",
+'welcomeuser' => 'Vítejte, uživateli $1!',
 'welcomecreation' => '== Vítejte, $1! ==
 Váš účet byl úspěšně vytvořen.
 Nezapomeňte si upravit své [[Special:Preferences|nastavení {{grammar:2sg|{{SITENAME}}}}]].',
+'welcomecreation-agora' => 'Váš účet byl vytvořen.
+Nezapomeňte si upravit své [[Special:Preferences|nastavení {{grammar:2sg|{{SITENAME}}}}]].',
 'yourname' => 'Uživatelské jméno:',
 'yourpassword' => 'Vaše heslo',
 'yourpasswordagain' => 'Zopakujte heslo:',
@@ -965,16 +969,16 @@ Pokud ještě jednou kliknete na „{{int:savearticle}}“, bude vaše editace z
 'summary-preview' => 'Náhled shrnutí:',
 'subject-preview' => 'Náhled předmětu/nadpisu:',
 'blockedtitle' => 'Uživatel zablokován',
-'blockedtext' => "Vaší IP adrese či uživatelskému jménu byla zablokována možnost editace.'''
+'blockedtext' => "'''Vaší IP adrese či uživatelskému jménu byla zablokována možnost editace.'''
 
-Zablokování provedl{{gender:$1||a}} $1.
+Zablokování provedl{{gender:$4||a}} $1.
 Udaným důvodem bylo ''$2''.
 
 * Začátek blokování: $8
 * Zablokování vyprší: $6
 * Blokovaný uživatel: $7
 
-Pokud chcete zablokování prodiskutovat, můžete kontaktovat {{gender:$1|uživatele|uživatelku}} $1 či jiného [[{{MediaWiki:Grouppage-sysop}}|správce]].
+Pokud chcete zablokování prodiskutovat, můžete kontaktovat {{gender:$4|uživatele|uživatelku}} $1 či jiného [[{{MediaWiki:Grouppage-sysop}}|správce]].
 Uvědomte si, že nemůžete použít nabídku „Poslat e-mail“, jestliže nemáte ve svém [[Special:Preferences|nastavení]] uvedenu platnou e-mailovou adresu nebo pokud vám byla tato možnost zakázána.
 Vaše IP adresa je $3 a&nbsp;identifikační číslo bloku je #$5; tyto údaje uvádějte ve všech dotazech na správce.",
 'autoblockedtext' => "Vaše IP adresa byla automaticky zablokována, protože ji používal jiný uživatel, kterého zablokoval $1.
@@ -1882,6 +1886,7 @@ Kontaktuje prosím [[Special:ListUsers/sysop|správce]].',
 'backend-fail-notsame' => 'Odlišný soubor $1 už existuje.',
 'backend-fail-invalidpath' => '$1 je neplatná cesta k místu uložení.',
 'backend-fail-delete' => 'Soubor $1 nelze smazat.',
+'backend-fail-describe' => 'Nepodařilo se změnit metadata souboru „$1“.',
 'backend-fail-alreadyexists' => 'Soubor $1 už existuje.',
 'backend-fail-store' => 'Soubor $1 nelze uložit v $2.',
 'backend-fail-copy' => 'Soubor $1 nelze kopírovat do $2.',
@@ -3947,8 +3952,7 @@ Obrázky se zobrazí v plném rozlišení, jiné typy souborů se otevřenou v p
 'specialpages' => 'Speciální stránky',
 'specialpages-note' => '----
 * Normální speciální stránky
-* <span class="mw-specialpagerestricted">Speciální stránky s&nbsp;vyhrazeným přístupem</span>
-* <span class="mw-specialpagecached">Speciální stránky z&nbsp;cache (mohou být zastaralé)</span>',
+* <span class="mw-specialpagerestricted">Speciální stránky s&nbsp;vyhrazeným přístupem</span>',
 'specialpages-group-maintenance' => 'Údržba',
 'specialpages-group-other' => 'Ostatní',
 'specialpages-group-login' => 'Přihlášení / vytvoření účtu',
index dc29b25..b3641bc 100644 (file)
@@ -154,8 +154,8 @@ $messages = array(
 'article' => 'члѣнъ',
 'newwindow' => '(иномь окънѣ)',
 'moredotdotdot' => 'вѧщє ···',
-'mypage' => 'моꙗ страница',
-'mytalk' => 'моê\99\97 Ð±Ñ\94Ñ\81ѣда',
+'mypage' => 'страница',
+'mytalk' => 'бєсѣда',
 'navigation' => 'плаваниѥ',
 'and' => '&#32;и',
 
@@ -321,7 +321,7 @@ $messages = array(
 или [{{fullurl:{{FULLPAGENAME}}|action=edit}} ѭжє исправити]</span> можєши',
 'noarticletext-nopermission' => 'нꙑнѣ с̑ьдє ничєсожє нє напьсано ѥстъ ⁙
 [[Special:Search/{{PAGENAME}}|си страницѧ имѧ искати]] дроугꙑ страницѧ или
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} съвѧꙁанꙑ їсторїѩ видѣти]</span> можєши',
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} съвѧꙁанꙑ їсторїѩ видѣти]</span> можєши ⁙ сътворити жє си страницѧ нє можєши',
 'userpage-userdoesnotexist' => 'польꙃєватєльска мѣста ⁖ $1 ⁖ нꙑнѣ нѣстъ ⁙
 прѣдъ сътворѥниѥмь или исправлѥниѥмь си страницѧ помꙑсли жє ащє исто тъ дѣиство ноуждьно ли',
 'clearyourcache' => "'''НАРОЧИТО''': По съхранѥнии можєши обити своѥго съмотрила съхранъ да видѣлъ би мѣнꙑ
@@ -393,7 +393,7 @@ $messages = array(
 
 # Preferences page
 'preferences' => 'строи',
-'mypreferences' => 'мои строи',
+'mypreferences' => 'строи',
 'changepassword' => 'таина словєсє иꙁмѣнѥниѥ',
 'prefs-rc' => 'послѣдьнѩ мѣнꙑ',
 'prefs-watchlist' => 'блюдєниꙗ',
@@ -489,6 +489,8 @@ $messages = array(
 'filedesc' => 'опьсаниѥ',
 'fileuploadsummary' => 'опьсаниѥ:',
 'uploadedimage' => '⁖ [[$1]] ⁖ положєнъ ѥстъ',
+'upload-source' => 'источьно дѣло',
+'sourcefilename' => 'источьна дѣла имꙗ :',
 'watchthisupload' => 'си дѣла блюдєниѥ',
 'upload-success-subj' => 'дѣло положєно ѥстъ',
 
@@ -602,7 +604,7 @@ $messages = array(
 
 # Watchlist
 'watchlist' => 'моꙗ блюдєниꙗ',
-'mywatchlist' => 'моê\99\97 Ð±Ð»Ñ\8eдÑ\94ниê\99\97',
+'mywatchlist' => 'блюдєниꙗ',
 'addedwatchtext' => "страница ⁖ [[:$1]] ⁖ нꙑнѣ подъ твоимь [[Special:Watchlist|блюдєниѥмь]] ѥстъ ⁙
 всꙗ ѥѩ и ѥѩжє бєсѣдꙑ мѣнꙑ страницѧ ⁖ [[Special:Watchlist|моꙗ блюдєниꙗ]] ⁖ покаꙁанꙑ сѫтъ и  [[Special:RecentChanges|послѣдьнъ мѣнъ]] каталоꙃѣ '''чрьнꙑимъ''' сѧ авлꙗѭтъ",
 'removedwatchtext' => 'страница ⁖ [[:$1]] ⁖ нꙑнѣ твоѥго [[Special:Watchlist|блюдєниꙗ]] иꙁнєсєна ѥстъ',
@@ -653,7 +655,7 @@ $messages = array(
 # Contributions
 'contributions' => 'польꙃєватєлꙗ добродѣꙗниꙗ',
 'contributions-title' => 'польꙃєватєлꙗ ⁖ $1 ⁖ добродѣꙗниꙗ',
-'mycontris' => 'моê\99\97 Ð´Ð¾Ð±Ñ\80одѣê\99\97ниê\99\97',
+'mycontris' => 'добродѣꙗниꙗ',
 'contribsub2' => 'польꙃєватєлꙗ имѧ ⁖ $1 ⁖ ѥстъ ($2)',
 'uctop' => '(послѣдьнꙗ мѣна)',
 
@@ -688,6 +690,7 @@ $messages = array(
 'blocklink' => 'ꙁагради',
 'contribslink' => 'добродѣꙗниꙗ',
 'blocklogpage' => 'ꙁаграждєниꙗ їсторїꙗ',
+'blocklogentry' => 'ꙁаградихъ [[$1]] на врѣмѧ $2 $3',
 
 # Move page
 'move-page' => 'прѣимєнованиѥ ⁖ $1 ⁖',
@@ -732,6 +735,7 @@ $messages = array(
 'tooltip-t-specialpages' => 'вьсѣѩ нарочьнъ страницѧ каталогъ',
 'tooltip-t-print' => 'сѥѩ страницѧ пєчатьнъ обраꙁъ',
 'tooltip-ca-nstab-special' => 'си нарочьна страница ѥстъ · ѥѩжє иꙁмѣнꙗти нє можєши',
+'tooltip-minoredit' => 'оꙁначи ꙗко малоу мѣноу',
 'tooltip-watch' => 'си страницѧ блюдєниѥ',
 
 # Info page
@@ -796,12 +800,15 @@ $messages = array(
 'logentry-delete-delete' => '$1 поничьжихъ страницѫ ⁖ $3 ⁖',
 'logentry-move-move' => '$1 нарєчє страницѫ ⁖ $3 ⁖ имєньмь ⁖ $4 ⁖',
 'logentry-move-move-noredirect' => '$1 нарєчє страницѫ ⁖ $3 ⁖ имєньмь ⁖ $4 ⁖ бєꙁ прѣнаправлєниꙗ сътворѥниꙗ',
-'logentry-newusers-create' => '$1 сътворихъ польꙃєватєльско мѣсто',
+'logentry-newusers-create' => 'польꙃєватєльско мѣсто ⁖ $1 ⁖ сътворѥно ѥстъ',
 
 # Search suggestions
+'searchsuggest-search' => 'исканиѥ',
 'searchsuggest-containing' => 'сѥ дрьжащи···',
 
 # API errors
 'api-error-unknownerror' => 'нєвѣдома блаꙁна : ⁖ $1 ⁖',
 
+# Unknown messages
+'mytalk-parenthetical' => 'бєсѣда',
 );
index f2eaa19..9053ef1 100644 (file)
@@ -799,7 +799,7 @@ Blokeringen udløber: $6
 Blokeringen er rettet mod: $7
 
 Du kan kontakte $1 eller en af de andre [[{{MediaWiki:Grouppage-sysop}}|administratorer]] for at diskutere blokeringen.
-Du kan ikke bruge funktionen 'e-mail til denne bruger' medmindre der er angivet en gyldig email-adresse i dine
+Du kan ikke bruge funktionen 'e-mail til denne bruger' medmindre der er angivet en gyldig e-mailadresse i dine
 [[Special:Preferences|kontoindstillinger]], og du ikke er blevet blokeret fra at bruge den.
 
 Din nuværende IP-adresse er $3, og blokerings-id er #$5.
@@ -1319,7 +1319,7 @@ Her er en tilfældig genereret værdi som du kan bruge: $1',
 Det kan ikke gøres om.',
 'prefs-emailconfirm-label' => 'Bekræftelse af e-mail:',
 'prefs-textboxsize' => 'Størrelse på redigeringsvindue',
-'youremail' => 'Din e-mail-adresse:',
+'youremail' => 'Din e-mailadresse:',
 'username' => 'Brugernavn:',
 'uid' => 'Brugernummer:',
 'prefs-memberingroups' => 'Medlem af {{PLURAL:$1|gruppen|grupperne}}:',
@@ -2548,7 +2548,7 @@ Se [[Special:BlockList|blokeringslisten]] for alle blokeringer.',
 'unblocklink' => 'ophæv blokering',
 'change-blocklink' => 'ændr blokering',
 'contribslink' => 'bidrag',
-'emaillink' => 'send email',
+'emaillink' => 'send e-mail',
 'autoblocker' => 'Du er automatisk blokeret, fordi du deler IP-adresse med "[[User:$1|$1]]".
 Begrundelse: "$2".',
 'blocklogpage' => 'Blokeringslog',
index ea410ef..41bcde4 100644 (file)
@@ -573,6 +573,7 @@ $messages = array(
 'namespaces' => 'Namensräume',
 'variants' => 'Varianten',
 
+'navigation-heading' => 'Navigationsmenü',
 'errorpagetitle' => 'Fehler',
 'returnto' => 'Zurück zur Seite $1.',
 'tagline' => 'Aus {{SITENAME}}',
@@ -816,10 +817,13 @@ Der Administrator, der den Schreibzugriff sperrte, gab folgenden Grund an: „$3
 
 Du kannst {{SITENAME}} jetzt anonym weiternutzen oder dich erneut unter dem selben oder einem anderen Benutzernamen <span class='plainlinks'>[$1 anmelden]</span>.
 Beachte, dass einige Seiten noch anzeigen können, dass du angemeldet bist, solange du nicht deinen Browsercache geleert hast.",
+'welcomeuser' => 'Willkommen, $1!',
 'welcomecreation' => '== Willkommen, $1! ==
 
 Dein Benutzerkonto wurde soeben eingerichtet.
 Vergiss nicht, deine [[Special:Preferences|Einstellungen]] für dieses Wiki anzupassen.',
+'welcomecreation-agora' => 'Dein Benutzerkonto wurde erstellt.
+Vergiss nicht, deine [[Special:Preferences|{{SITENAME}}-Einstellungen]] zu ändern.',
 'yourname' => 'Benutzername:',
 'yourpassword' => 'Passwort:',
 'yourpasswordagain' => 'Passwort wiederholen:',
@@ -1938,6 +1942,7 @@ Wenn das Problem weiter besteht, informiere einen [[Special:ListUsers/sysop|Syst
 'backend-fail-notsame' => 'Es ist bereits eine Datei $1 vorhanden, die nicht identisch ist.',
 'backend-fail-invalidpath' => '$1 ist kein gültiger Pfad zum Speichern.',
 'backend-fail-delete' => 'Die Datei $1 konnte nicht gelöscht werden.',
+'backend-fail-describe' => 'Die Metadaten für die Datei „$1“ konnten nicht geändert werden.',
 'backend-fail-alreadyexists' => 'Die Seite $1 ist bereits vorhanden',
 'backend-fail-store' => 'Die Datei $1 konnte nicht unter $2 gespeichert werden.',
 'backend-fail-copy' => 'Die Datei $1 konnte nicht nach $2 kopiert werden.',
index 719abcf..2aed17d 100644 (file)
@@ -440,7 +440,7 @@ $messages = array(
 'about' => 'Heqa',
 'article' => 'Wesiqe',
 'newwindow' => '(pençereyê newey de beno a)',
-'cancel' => 'Bıtexelne',
+'cancel' => 'Bıterkne',
 'moredotdotdot' => 'Vêşi...',
 'mypage' => 'Per',
 'mytalk' => 'Werênayış',
@@ -475,6 +475,7 @@ $messages = array(
 'namespaces' => 'Cayê namam',
 'variants' => 'Varyanti',
 
+'navigation-heading' => 'Menuya Navigasyoni',
 'errorpagetitle' => 'Xırab',
 'returnto' => 'Peyser şo $1.',
 'tagline' => '{{SITENAME}} ra',
@@ -488,7 +489,7 @@ $messages = array(
 'updatedmarker' => 'cıkewtena mına peyêne ra dıme biyo rocane',
 'printableversion' => 'Asayışê çapkerdışi',
 'permalink' => 'Gıreyo jûqere',
-'print' => 'Çap ke',
+'print' => 'Nusten ke',
 'view' => 'Bıvin',
 'edit' => 'Bıvurnên',
 'create' => 'Vıraze',
@@ -722,10 +723,13 @@ Xızmetkarê  kılitkerdışi wa bewni ro enay wa çımra ravyarno: "$3".',
 
 Nıka kamiyê xo eşkera mekere u siteyê {{SITENAME}} ra eşkeni devam bıkeri, ya zi <span class='plainlinks'>[$1 newe ra hesabê xo akere]</span> (wazeni pey nameyê xo, wazeni pey yewna name).
 Wexta ke verhafızayê cıgerayoxê şıma pak beno no benate de taye peli de hesabe şıma akerde aseno.",
+'welcomeuser' => 'Xeyr ameyê $1',
 'welcomecreation' => '== Şıma xeyr amey, $1! ==
 
 Hesabê şıma biyo a.
 [[Special:Preferences|{{SITENAME}} vurnayişê tercihanê xo]], xo vir ra mekere.',
+'welcomecreation-agora' => 'Hesabê şıma abiyo.
+[[Special:Preferences|{{SITENAME}} vurnayişê tercihanê xo]], xo vir ra mekere.',
 'yourname' => 'Namey karberi',
 'yourpassword' => 'Parola',
 'yourpasswordagain' => 'Parola reyna bınusne:',
@@ -832,7 +836,7 @@ Bıne vındere u newe ra dest pê bıkere.',
 'resetpass_forbidden' => 'parolayi nêvuryayi',
 'resetpass-no-info' => 'şıma gani hesab akere u hona bıeşke bırese cı',
 'resetpass-submit-loggedin' => 'Parola bıvurne',
-'resetpass-submit-cancel' => 'ibtal ke',
+'resetpass-submit-cancel' => 'Bıterkne',
 'resetpass-wrong-oldpass' => 'parolayo parola maqbul niyo.
 şıma ya parolaye xo vurnayo ya zi parolayo muwaqqat waşto.',
 'resetpass-temp-password' => 'parolayo muweqet:',
@@ -876,7 +880,7 @@ Parola vêrdiye: $2',
 'changeemail-newemail' => 'E-posta adresiyo newe:',
 'changeemail-none' => '(Çıno)',
 'changeemail-submit' => 'E-postay xo bıvurne',
-'changeemail-cancel' => 'Bıtexelne',
+'changeemail-cancel' => 'Bıterkne',
 
 # Edit page toolbar
 'bold_sample' => 'Metno qalın',
@@ -899,10 +903,10 @@ Parola vêrdiye: $2',
 'hr_tip' => 'Çıxiza dimdayi (hend akar mefiye)',
 
 # Edit pages
-'summary' => 'Xulasa:',
+'summary' => "<font style=\"color:Blue\">'''Xulasa:'''</font>",
 'subject' => 'Mewzu/sernuşte:',
-'minoredit' => 'Eno vurnayışo de qıckeko',
-'watchthis' => 'Ena pele seyr ke',
+'minoredit' => "<font style=\"color:Green\">'''Eno vurnayışo de qıckeko'''</font>",
+'watchthis' => "<font style=\"color:Green\">'''Ena pele seyr ke'''</font>",
 'savearticle' => 'Pele qeyd ke',
 'preview' => 'Verqayt',
 'showpreview' => 'Verqayti bımocne',
@@ -1009,7 +1013,7 @@ Vurnayışê şıma hona qeyd nêbiyo!",
 Vurnayişê şıma qey nêxerepyayişê peli tepeya geyra a.
 Eke şıma servisê proksi yo anonim şuxulneni sebebê ey noyo.'''",
 'edit_form_incomplete' => "'''Qandê form dê vurnayışa tay wastera ma nêreşti; Vurnayışê ke şıma kerdê nêalızyayê, çım ra ravyarnê u fına bıcerbnê.'''",
-'editing' => 'Şımayê kenê <font style="color:red">$1</font> bıvurnê',
+'editing' => 'Şımayê <font style="color:red">$1</font> vurnenê',
 'creating' => "Pela $1'i vıraze",
 'editingsection' => 'Per da $1 de şımaye kenê ke leti bıvurnê',
 'editingcomment' => '$1 vuryeno (qısmo newe)',
@@ -1341,7 +1345,7 @@ Detayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'searcheverything-enable' => 'cayê nameyê hemi de bigêre',
 'searchrelated' => 'eleqeyın',
 'searchall' => 'pêro',
-'showingresults' => "Heta {{PLURAL:$1|'''1''' netice|'''$1''' neticeyan}} ke pê #'''$2''' başli beno ey bimocne .",
+'showingresults' => "#$2 netican ra {{PLURAL:$1|'''1''' netica|'''$1''' neticey}} cêr deyê.",
 'showingresultsnum' => "'''$2''' netican ra nata  {{PLURAL:$3|'''1''' netice|'''$3''' neticeyê}} cêrde liste biyê.",
 'showingresultsheader' => "{{PLURAL:$5|Neticeyê '''$1''' of '''$3'''|Neticeyanê '''$1 - $2''' hetê '''$3'''}} qe '''$4'''",
 'nonefound' => "'''Teme''': Teyna tay namecayan cıgeyro beno.
@@ -1383,7 +1387,7 @@ Pe verbendi ''all:'', vaceyê xo bıvurni ki contenti hemi cıgeyro (pelanê mı
 'prefs-user-pages' => 'Pela Karberi',
 'prefs-personal' => 'Pela karberi',
 'prefs-rc' => 'Vurnayışê peyêni',
-'prefs-watchlist' => 'Lista seyr-kerdışi',
+'prefs-watchlist' => 'Lista seyrkerdışi',
 'prefs-watchlist-days' => 'Rocê ke lista seyrkerdışi de bêrê ramocnaene',
 'prefs-watchlist-days-max' => 'tewr vêşi $1 {{PLURAL:$1|roci|roci}}',
 'prefs-watchlist-edits' => 'tewr zêde amarê vurnayışi ke lista seyrkerdışia herakerdiye de bıasê:',
@@ -1847,6 +1851,7 @@ Eke problem dewam kerd [[Special:ListUsers/sysop|serkari]] de irtibat kewe.',
 'backend-fail-notsame' => 'Zey $1 ju dosya xora  esta.',
 'backend-fail-invalidpath' => '$1 rayê da depo kerdışa raştay niya.',
 'backend-fail-delete' => '$1 nê besterneyê',
+'backend-fail-describe' => 'Qande dosya da "$1" metadata nêvurêna.',
 'backend-fail-alreadyexists' => "Dosyay $1'ya nêwanêna",
 'backend-fail-store' => '$1 ra $2 berdışo nê wanêno',
 'backend-fail-copy' => '$1 ra $2 kopya kerdışena dosyayo nêbeno',
@@ -2315,7 +2320,7 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed
 
 # Watchlist
 'watchlist' => 'Lista mına seyrkerdışi',
-'mywatchlist' => 'Lista seyr kerdışi',
+'mywatchlist' => 'Lista 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.',
@@ -2573,7 +2578,7 @@ $1',
 # Contributions
 'contributions' => 'İştiraqê karberi',
 'contributions-title' => 'Dekerdenê karber de $1',
-'mycontris' => 'Cıkerdışi',
+'mycontris' => 'İştıraqi',
 'contribsub2' => 'Qandê $1 ($2)',
 'nocontribs' => 'Ena kriteriya de vurnayîş çini yo.',
 'uctop' => '(top)',
@@ -3004,7 +3009,7 @@ Kerem ke, qeydkerdış ra ver gocega verqayti bıxebetne.',
 'tooltip-ca-delete' => 'Ena perer besternê',
 'tooltip-ca-undelete' => 'peli biyarê halê ver hewnakerdışi',
 'tooltip-ca-move' => 'Ena pele bere',
-'tooltip-ca-watch' => 'Ena pela lista mına seyr-kerdışi ri dek',
+'tooltip-ca-watch' => 'Ena perer lista xoya seyrkerdışi ke',
 'tooltip-ca-unwatch' => 'Ena pele listeya seyir-kerdışi xo ra bıvec',
 'tooltip-search' => 'Zerreyê {{SITENAME}} de cı geyre',
 'tooltip-search-go' => 'Ebe nê namey tami şo yew pela ke esta',
@@ -4429,7 +4434,7 @@ Ti hem zi eşkeno [[Special:EditWatchlist|use the standard editor]].',
 'watchlistedit-raw-submit' => 'Listeyê seyri newen ke',
 'watchlistedit-raw-done' => 'Listeyê tuyê seyrkerdişi rocaniye biyo',
 'watchlistedit-raw-added' => '{{PLURAL:$1|1 seroğ|$1 seroğî}} de kerd:',
-'watchlistedit-raw-removed' => '{{PLURAL:$1|1 seroğ|$1 seroğî}} de wedarno:',
+'watchlistedit-raw-removed' => '{{PLURAL:$1|1 seroğ|$1 seroği}} besteriyaye:',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'vurnayışanê eleqadari bıvin',
@@ -4667,9 +4672,9 @@ Ena sita dı newke xırabiya teknik esta.',
 '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 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",
+'logentry-newusers-newusers' => '$1 deye hesabê karberi vıraziya',
+'logentry-newusers-create' => '$1 deye hesabê karberi vıraziya',
+'logentry-newusers-create2' => "$1'(i) hesabê karber de $3'(i) vıraşt",
 'logentry-newusers-autocreate' => 'Hesabê $1 Otomatikmen vıraziya',
 'newuserlog-byemail' => 'pê e-mail ra paralo şiravt',
 
index 15c2cb0..8620281 100644 (file)
@@ -562,9 +562,11 @@ Administrator, kenž jo jen zastajił, jo toś tu pśicynu pódał: "$3".',
 
 Móžoš {{SITENAME}} anomymnje dalej wužywaś abo móžoš <span class='plainlinks'>[$1 se znowego pśizjawiś]</span> ako samski abo hynakšy wužywaŕ.
 Źiwaj na to, až někotare boki se dalej tak zwobraznjuju ako by hyšći pśizjawjeny był, až njewuproznijoš cache swójego wobglědowaka.",
+'welcomeuser' => 'Witaj $1',
 'welcomecreation' => '== Witaj, $1! ==
 
 Twójo konto jo se załožyło. Njezabydni změniś swóje [[Special:Preferences|nastajenja {{SITENAME}}]].',
+'welcomecreation-agora' => 'Twójo konto jo se załožyło. Njezabydni změniś swóje [[Special:Preferences|nastajenja za {{SITENAME}}]].',
 'yourname' => 'mě wužywarja',
 'yourpassword' => 'šćitne gronidło:',
 'yourpasswordagain' => 'Šćitne gronidło hyšći raz zapódaś:',
@@ -1659,6 +1661,7 @@ $1',
 'backend-fail-notsame' => 'Njeidentiska dataja $1 južo eksistěrujo.',
 'backend-fail-invalidpath' => '$1 njejo płaśiwy puśik za składowanje.',
 'backend-fail-delete' => 'Dataja $1 njedajo se wulašowaś.',
+'backend-fail-describe' => 'Metadaty za dataju "$1" njedaju se změniś.',
 'backend-fail-alreadyexists' => 'Dataja $1 južo eksistěrujo.',
 'backend-fail-store' => 'Dataja $1 njedajo se pód $2 składowaś.',
 'backend-fail-copy' => 'Dataja $1 njedajo se pód $2 kopěrowaś.',
index 49286d1..54dc4f8 100644 (file)
@@ -726,7 +726,7 @@ $1',
 'protectedinterface' => 'Αυτή η σελίδα παρέχει κείμενο διεπαφής για το λογισμικό σε αυτό το wiki, και έχει κλειδωθεί για αποτροπή τυχόν βανδαλισμού.
 
 Για να προσθέσετε ή να αλλάξετε τις μεταφράσεις για όλα τα wikis, παρακαλούμε χρησιμοποιήστε  [//translatewiki.net/ translatewiki.net], το εγχείρημα τοπικοποίησης του  MediaWiki.',
-'editinginterface' => "'''Προσοχή:''' Επεξεργάζεστε μια σελίδα η οποία χρησιμοποιείται για να παρέχει κείμενο διεπαφής για το λογισμικό. Αλλαγές σε αυτή τη σελίδα θα επηρεάσουν την εμφάνιση της διεπαφής χρήστη για τους άλλους χρήστες. Εάν θέλετε να διορθώσετε τη μετάφραση, μπορείτε να χρησιμοποιήσετε το [//translatewiki.net/wiki/Main_Page?setlang=el translatewiki.net], που διεκπεραιώνει με τις μεταφράσεις των μηνυμάτων MediaWiki.",
+'editinginterface' => "'''Προσοχή:''' Επεξεργάζεστε μια σελίδα η οποία χρησιμοποιείται για να παρέχει κείμενο διεπαφής για το λογισμικό. Αλλαγές σε αυτή τη σελίδα θα επηρεάσουν την εμφάνιση της διεπαφής χρήστη για τους άλλους χρήστες. Εάν θέλετε να διορθώσετε τη μετάφραση, μπορείτε να χρησιμοποιήσετε το [//translatewiki.net/ translatewiki.net], το εγχείρημα για με τις μεταφράσεις των μηνυμάτων MediaWiki.",
 'sqlhidden' => '(το αίτημα SQL δεν εμφανίζεται)',
 'cascadeprotected' => 'Αυτή η σελίδα έχει προστατευθεί από επεξεργασία, επειδή περιλαμβάνεται στις ακόλουθες {{PLURAL:$1|σελίδα|σελίδες}}, που είναι προστατευμένες με την ενεργοποιημένη "διαδοχική" προστασία στο:
 $2',
@@ -755,6 +755,8 @@ $2',
 'welcomecreation' => '== Καλώς ήλθατε, $1! ==
 Ο λογαριασμός σας έχει δημιουργηθεί.
 Μην ξεχάσετε να ρυθμίσετε τις [[Special:Preferences|προτιμήσεις]] σας στο {{SITENAME}}.',
+'welcomecreation-agora' => 'Ο λογαριασμός σας έχει δημιουργηθεί.
+Μην ξεχάσετε να αλλάξετε τις [[Special:Preferences|{{SITENAME}} προτιμήσεις]] σας.',
 'yourname' => 'Όνομα χρήστη:',
 'yourpassword' => 'Κωδικός:',
 'yourpasswordagain' => 'Πληκτρολογήστε ξανά τον κωδικό',
@@ -997,7 +999,6 @@ $2
  * '''Firefox / Safari:''' Κρατήστε ''Shift'' κάνοντας κλικ στο κουμπί ''Ανανέωση'' ή πατήστε ''Ctrl-F5'' ή ''Ctrl-R'' ('' ⌘-R'' σε Mac)
  * '''Google Chrome:''' Πιέστε τα πλήκτρα ''Ctrl-Shift-R'' (''⌘-Shift-R'' σε Mac)
  * '''Internet Explorer:''' Κρατήστε ''Ctrl'' κάνοντας κλικ στην επιλογή ''Ανανέωση'', ή πατήστε ''Ctrl-F5'' 
- * '''Konqueror:''' Κάντε κλικ στο κουμπί '' Ανανέωση'' ή  πιέστε το πλήκτρο ''F5''
  * '''Opera:''' Εκκαθαρίστε την προσωρινή μνήμη στο ''Εργαλεία → Προτιμήσεις''",
 'usercssyoucanpreview' => "'''Χρήσιμη συμβουλή:''' Χρησιμοποιήστε το κουμπί \"{{int:showpreview}}\" για να ελέγξτε τα νέα σας CSS πριν τα αποθηκεύσετε.",
 'userjsyoucanpreview' => "'''Χρήσιμη συμβουλή:''' Χρησιμοποιήστε το κουμπί \"{{int:showpreview}}\" για να ελέγξτε τη νέα σας JS πριν την αποθηκεύσετε.",
@@ -1012,7 +1013,7 @@ $2
 'note' => "'''Προσοχή: '''",
 'previewnote' => "'''Να θυμάστε ότι αυτή είναι μόνο μια προεπισκόπηση.'''
 Οι αλλαγές σας δεν έχουν ακόμη αποθηκευτεί!",
-'continue-editing' => 'ΣÏ\85νέÏ\87εια επεξεργασίας',
+'continue-editing' => 'Î\9cεÏ\84αβείÏ\84ε Ï\83Ï\84ην Ï\80εÏ\81ιοÏ\87ή επεξεργασίας',
 'previewconflict' => 'Αυτή η προεπισκόπηση απεικονίζει το κείμενο στην επάνω περιοχή επεξεργασίας κειμένου, όπως θα εμφανιστεί εάν επιλέξετε να το αποθηκεύσετε.',
 'session_fail_preview' => "'''Συγγνώμη! Δεν μπορούσαμε να διεκπεραιώσουμε την επεξεργασία σας λόγω απώλειας των δεδομένων της συνεδρίας.
 Παρακαλώ προσπαθήστε ξανά. Αν δεν δουλεύει ξανά, δοκιμάστε να αποσυνδεθείτε και να συνδεθείτε πάλι.'''",
@@ -1093,6 +1094,11 @@ $2
 Υπάρχει ήδη.',
 'defaultmessagetext' => 'Προεπιλεγμένο κείμενο μηνύματος',
 
+# Content models
+'content-model-wikitext' => 'βικικείμενο',
+'content-model-text' => 'απλό κείμενο',
+'content-model-javascript' => 'JavaScript',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Προειδοποίηση: Αυτή η σελίδα περιέχει πάρα πολύ ακριβό αναλυτή λειτουργικών κλήσεων.
 
@@ -1239,8 +1245,10 @@ $1",
 Παρακαλώ ελέξτε τα αρχεία καταγραφών.',
 'revdelete-only-restricted' => 'Σφάλμα κατα την απόκρυψη του αντικειμένου στις $2, $1: δεν μπορείτε να αποκρύψετε τη προβολή στοιχείων από τους διαχειριστές χωρίς ταυτόχρονα να επιλέξετε και μία από τις άλλες επιλογές απόκρυψης.',
 'revdelete-reason-dropdown' => '*Συνήθεις αιτίες διαγραφής
-** Παραβίαση δικαιωμάτων
-** Ανάρμοστες προσωπικές πληροφορίες',
+** Παραβίαση πνευματικών δικαιωμάτων
+** Ανάρμοστα σχόλια ή προσωπικές πληροφορίες 
+** Ανάρμοστο όνομα χρήστη 
+** Εν δυνάμει δυσφημιστική πληροφορία',
 'revdelete-otherreason' => 'Άλλος/πρόσθετος λόγος:',
 'revdelete-reasonotherlist' => 'Άλλος λόγος',
 'revdelete-edit-reasonlist' => 'Επεξεργασία λόγων διαγραφής',
@@ -1594,6 +1602,7 @@ $1",
 'rightslogtext' => 'Καταγραφές των αλλαγών στα δικαιώματα χρηστών.',
 'rightslogentry' => 'η ιδιότητα μέλους ομάδας για τον/την $1 από $2 σε $3 άλλαξε',
 'rightslogentry-autopromote' => 'προωθήθηκε αυτόματα από $2 σε $3',
+'logentry-rights-autopromote' => '$1 προωθήθηκε αυτόματα από το $4 στο $5',
 'rightsnone' => '(κανένα)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2096,6 +2105,7 @@ $1',
 'mostlinkedtemplates' => 'Περισσότερο χρησιμοποιούμενα πρότυπα',
 'mostcategories' => 'Άρθρα με τις περισσότερες κατηγορίες',
 'mostimages' => 'Περισσότερο χρησιμοποιούμενα αρχεία',
+'mostinterwikis' => 'Σελίδες με τους περισσότερους διαγλωσσικούς συνδέσμους',
 'mostrevisions' => 'Άρθρα με τις περισσότερες αναθεωρήσεις',
 'prefixindex' => 'Όλες οι σελίδες με πρόθεμα',
 'prefixindex-namespace' => 'Όλες οι σελίδες με πρόθεμα (περιοχής  $1)',
@@ -2194,7 +2204,7 @@ $1',
 'linksearch-ok' => 'Αναζήτηση',
 'linksearch-text' => 'Χαρακτήρες όπως "*.wikipedia.org" μπορούν να χρησιμοποιηθούν. 
 Χρειάζεται τουλάχιστον ένα domain ανώτατου επιπέδου, για παράδειγμα "*.org".<br />
-Υποστηριζόμενα πρωτόκολλα: <code> $1 </code> (μην προσθέτετε οποιαδήποτε από αυτές στην αναζήτησή σας).',
+Υποστηριζόμενα πρωτόκολλα: <code>$1</code> (μην προσθέτετε οποιαδήποτε από αυτές στην αναζήτησή σας).',
 'linksearch-line' => 'Η $1 συνδεδεμένη από την $2',
 'linksearch-error' => 'Λέξεις-μπαλαντέρ μπορεί να εμφανιστούν μόνο στην αρχή τού ονόματος ιστοτόπου (hostname).',
 
@@ -3142,6 +3152,7 @@ $1',
 'file-info-png-looped' => 'Σε άπειρο βρόγχο',
 'file-info-png-repeat' => 'έπαιξε $1 {{PLURAL:$1|φορά|φορές}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|πλαίσιο|πλαίσια}}',
+'file-no-thumb-animation' => "'''Σημείωση: λόγω τεχνικών περιορισμών, οι μικρογραφίες αυτού του αρχείου δεν θα είναι κινούμενες.'''",
 
 # Special:NewFiles
 'newimages' => 'Πινακοθήκη νέων εικόνων',
@@ -3928,10 +3939,11 @@ $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' => 'Αυτός ο τύπος αρχείου έχει απαγορευτεί.',
-'api-error-filetype-banned-type' => '$1 δεν είναι {{PLURAL:$4|επιτρεπόμενος τύπος αρχείου|επιτρεπόμενοι τύποι αρχείων}}.  {{PLURAL:$3|Επιτρεπόμενος τύπος αρχείων|Επιτρεπόμενοι τύποι αρχείων}} είναι $2.',
+'api-error-filetype-banned-type' => '$1 δεν είναι {{PLURAL:$4|επιτρεπόμενος τύπος αρχείου|επιτρεπόμενοι τύποι αρχείων}}.  {{PLURAL:$3|Επιτρεπόμενος τύπος αρχείων|Επιτρεπόμενοι τύποι αρχείων}} είναι το $2.',
 'api-error-filetype-missing' => 'Το αρχείο δεν έχει επέκταση.',
 'api-error-hookaborted' => 'Η τροποποίηση που επιχειρήσατε να κάνετε ματαιώθηκε από ένα άγκιστρο της επέκτασης.',
 'api-error-http' => 'Εσωτερικό σφάλμα: δεν είναι δυνατή η σύνδεση με το διακομιστή.',
@@ -3967,4 +3979,6 @@ $5
 'duration-centuries' => '$1 {{PLURAL:$1|Αιώνα|αιώνες}}',
 'duration-millennia' => '$1 {{PLURAL:$1|Χιλιετία|Χιλιετίες}}',
 
+# Unknown messages
+'mytalk-parenthetical' => 'συζήτηση',
 );
index 5e33d62..1822237 100644 (file)
@@ -569,6 +569,7 @@ $preloadedMessages = array(
        'searcharticle',
        'searchbutton',
        'sidebar',
+       'navigation-heading',
        'site-atom-feed',
        'sitenotice',
        'specialpages',
@@ -808,6 +809,7 @@ XHTML id names.
 'namespaces'                     => 'Namespaces',
 'variants'                       => 'Variants',
 
+'navigation-heading'=> 'Navigation menu',
 'errorpagetitle'    => 'Error',
 'returnto'          => 'Return to $1.',
 'tagline'           => 'From {{SITENAME}}',
@@ -1067,9 +1069,12 @@ The administrator who locked it offered this explanation: "$3".',
 
 You can continue to use {{SITENAME}} anonymously, or you can <span class='plainlinks'>[$1 log in again]</span> 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.",
+'welcomeuser'                => 'Welcome, $1!',
 'welcomecreation'            => '== Welcome, $1! ==
 Your account has been created.
 Do not forget to change your [[Special:Preferences|{{SITENAME}} preferences]].',
+'welcomecreation-agora'            => 'Your account has been created.
+Do not forget to change your [[Special:Preferences|{{SITENAME}} preferences]].',
 'yourname'                   => 'Username:',
 'yourpassword'               => 'Password:',
 'yourpasswordagain'          => 'Retype password:',
@@ -2315,6 +2320,7 @@ If the problem persists, contact an [[Special:ListUsers/sysop|administrator]].',
 'backend-fail-notsame'       => 'A non-identical file already exists at "$1".',
 'backend-fail-invalidpath'   => '"$1" is not a valid storage path.',
 'backend-fail-delete'        => 'Could not delete file "$1".',
+'backend-fail-describe'      => 'Could not change metadata for file "$1".',
 'backend-fail-alreadyexists' => 'The file "$1" already exists.',
 'backend-fail-store'         => 'Could not store file "$1" at "$2".',
 'backend-fail-copy'          => 'Could not copy file "$1" to "$2".',
@@ -4869,10 +4875,10 @@ This site is experiencing technical difficulties.',
 'logentry-move-move_redir-noredirect' => '$1 moved page $3 to $4 over a redirect without leaving a redirect',
 'logentry-patrol-patrol'              => '$1 marked revision $4 of page $3 patrolled',
 'logentry-patrol-patrol-auto'         => '$1 automatically marked revision $4 of page $3 patrolled',
-'logentry-newusers-newusers'          => '$1 created a user account',
-'logentry-newusers-create'            => '$1 created a user account',
-'logentry-newusers-create2'           => '$1 created a user account $3',
-'logentry-newusers-autocreate'        => 'Account $1 was created automatically',
+'logentry-newusers-newusers'          => 'User account $1 was created',
+'logentry-newusers-create'            => 'User account $1 was created',
+'logentry-newusers-create2'           => 'User account $3 was created by $1',
+'logentry-newusers-autocreate'        => 'User account $1 was created automatically',
 'newuserlog-byemail'                  => 'password sent by e-mail',
 
 # For IRC, see bug 34508. Do not change
index 7121523..95f8c6d 100644 (file)
@@ -443,8 +443,8 @@ $messages = array(
 'newwindow' => '(en nova fenestro)',
 'cancel' => 'Nuligi',
 'moredotdotdot' => 'Pli...',
-'mypage' => 'Mia paĝo',
-'mytalk' => 'Mia diskuto',
+'mypage' => 'Paĝo',
+'mytalk' => 'Diskuto',
 'anontalk' => 'Diskutpaĝo por tiu ĉi IP',
 'navigation' => 'Navigado',
 'and' => '&#32;kaj',
@@ -476,6 +476,7 @@ $messages = array(
 'namespaces' => 'Nomspacoj',
 'variants' => 'Variantoj',
 
+'navigation-heading' => 'Navigacia menuo',
 'errorpagetitle' => 'Eraro',
 'returnto' => 'Reiri al $1.',
 'tagline' => 'El {{SITENAME}}',
@@ -722,6 +723,7 @@ La administranto kiu ŝlosis ĝin proponis tiun klarigon: "$3".',
 
 Vi rajtas daŭre vikiumi sennome, aŭ vi povas <span class='plainlinks'>[$1 reensaluti]</span> kiel la sama aŭ kiel alia uzanto.
 Notu ke iuj paĝoj daŭre ŝajnos kvazaŭ vi ankoraŭ estas ensalutita, ĝis vi refreŝigu vian retumilan kaŝmemoron.",
+'welcomeuser' => 'Bonvenon, $1!',
 'welcomecreation' => '== Bonvenon, $1! ==
 Via konto estas kreita.
 Ne forgesu fari viajn [[Special:Preferences|{{SITENAME}}-preferojn]].',
@@ -1377,7 +1379,7 @@ indekso pro troŝarĝita servilo. Intertempe, vi povas serĉi per <i>guglo</i> a
 
 # Preferences page
 'preferences' => 'Preferoj',
-'mypreferences' => 'Miaj preferoj',
+'mypreferences' => 'Preferoj',
 'prefs-edits' => 'Nombro de redaktoj:',
 'prefsnologin' => 'Ne jam salutis!',
 'prefsnologintext' => 'Vi devas esti <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ensalutita]</span> por fari viajn preferojn.',
@@ -1608,6 +1610,8 @@ Jen hazarde generita valoro por via uzo: $1',
 'rightslogtext' => 'Ĉi tio estas protokolo pri la ŝanĝoj de uzantorajtoj.',
 'rightslogentry' => 'ŝanĝis grupan membrecon por $1 de $2 al $3',
 'rightslogentry-autopromote' => 'estis aŭtomate altrangigita de $2 al $3',
+'logentry-rights-rights' => 'ŝanĝis grupan membrecon por $1 de $2 al $3',
+'logentry-rights-rights-legacy' => '$1 ŝanĝis grupan membrecon por $3',
 'rightsnone' => '(nenia)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2557,7 +2561,7 @@ $1',
 # Contributions
 'contributions' => 'Kontribuoj de uzanto',
 'contributions-title' => 'Kontribuoj de uzanto $1',
-'mycontris' => 'Miaj kontribuoj',
+'mycontris' => 'Kontribuoj',
 'contribsub2' => 'De $1 ($2)',
 'nocontribs' => 'Trovis neniajn redaktojn laŭ tiu kriterio.',
 'uctop' => ' (lasta)',
@@ -4034,4 +4038,6 @@ Aŭ vi povas uzi la facilan formularon sube. Via komento estos aldonita al la pa
 'duration-centuries' => '$1 {{PLURAL:$1|jarcento|jarcentoj}}',
 'duration-millennia' => '$1 {{PLURAL:$1|jarmilo|jarmiloj}}',
 
+# Unknown messages
+'mytalk-parenthetical' => 'Diskuto',
 );
index dd2d867..93e1c5c 100644 (file)
@@ -354,7 +354,7 @@ $dateFormats = array(
        'dmy both' => 'H:i j M Y',
 );
 
-$separatorTransformTable = array( ',' => '.', '.' => ',' );
+$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
 $linkTrail = '/^([a-záéíóúñ]+)(.*)$/sDu';
 
 $messages = array(
@@ -525,6 +525,7 @@ $messages = array(
 'namespaces' => 'Espacios de nombres',
 'variants' => 'Variantes',
 
+'navigation-heading' => 'Menú de navegación',
 'errorpagetitle' => 'Error',
 'returnto' => 'Volver a $1.',
 'tagline' => 'De {{SITENAME}}',
@@ -766,10 +767,13 @@ El administrador que lo ha bloqueado ofrece esta explicación: "$3".',
 
 Puedes continuar usando {{SITENAME}} de forma anónima, o puedes <span class='plainlinks'>[$1 iniciar sesión otra vez]</span> con el mismo u otro usuario.
 Ten en cuenta que las páginas que tengas abiertas en otras ventanas o pestañas pueden verse como si siguieras identificado hasta que las refresques.",
+'welcomeuser' => '¡Bienvenido, $1!',
 'welcomecreation' => '== ¡Bienvenido(a), $1! ==
 
 Tu cuenta ha sido creada.
 No olvides personalizar [[Special:Preferences|tus preferencias]].',
+'welcomecreation-agora' => 'Tu cuenta ha sido creada.
+No olvides cambiar tus [[Special:Preferences|preferencias de {{SITENAME}} ]].',
 'yourname' => 'Nombre de usuario:',
 'yourpassword' => 'Contraseña:',
 'yourpasswordagain' => 'Confirma la contraseña:',
@@ -1664,7 +1668,7 @@ Tu dirección de correo no se revela cuando otros usuarios te contactan.',
 'rightslogtext' => 'Este es un registro de cambios en los permisos de usuarios.',
 'rightslogentry' => 'modificó los grupos a los que pertenece $1: de $2 a $3',
 'rightslogentry-autopromote' => 'fue promovido automáticamente desde $2 a $3',
-'logentry-rights-rights' => '$1 modificó la pertenencia a grupos para $3, de $4 a $5',
+'logentry-rights-rights' => '$1 modificó los grupos a los que pertenece $3: de $4 a $5',
 'logentry-rights-rights-legacy' => '$1 ha cambiado la pertenencia a grupos de $3',
 'logentry-rights-autopromote' => '$1 fue promocionado automáticamente de $4 a $5',
 'rightsnone' => '(ninguno)',
@@ -1905,6 +1909,7 @@ $1',
 'backend-fail-notsame' => 'Ya existe un fichero distinto en $1.',
 'backend-fail-invalidpath' => '$1 no es una ruta de almacenamiento válida',
 'backend-fail-delete' => 'No se pudo borrar el archivo «$1».',
+'backend-fail-describe' => 'No pudieron cambiar los metadatos del archivo "$1".',
 'backend-fail-alreadyexists' => 'El archivo  $1  ya existe.',
 'backend-fail-store' => 'No se pudo almacenar el archivo $1 en $2.',
 'backend-fail-copy' => 'No se pudo copiar el archivo $1 a $2.',
@@ -2818,7 +2823,7 @@ Sin embargo, está bloqueada como parte del rango $2, que puede ser desbloqueado
 # Move page
 'move-page' => 'Trasladar $1',
 'move-page-legend' => 'Renombrar página',
-'movepagetext' => "Usando el siguiente formulario se renombrará una página, moviendo todo su historial al nuevo nombre.
+'movepagetext' => "Usando el siguiente formulario se renombrará una página, trasladando todo su historial al nuevo nombre.
 El título anterior se convertirá en una redirección al nuevo título.
 Los enlaces al antiguo título de la página no se cambiarán.
 Asegúrate de no dejar [[Special:DoubleRedirects|redirecciones dobles]] o [[Special:BrokenRedirects|rotas]].
@@ -2830,7 +2835,7 @@ Esto significa que podrás renombrar una página a su título original si has co
 '''¡Aviso!'''
 Este puede ser un cambio drástico e inesperado para una página popular;
 por favor, asegúrate de entender las consecuencias del procedimiento antes de seguir adelante.",
-'movepagetext-noredirectfixer' => "Usando el siguiente formulario se renombrará una página, moviendo todo su historial al nuevo nombre.
+'movepagetext-noredirectfixer' => "Usando el siguiente formulario se renombrará una página, trasladando todo su historial al nuevo nombre.
 El título anterior se convertirá en una redirección al nuevo título.
 Asegúrate de no dejar [[Special:DoubleRedirects|redirecciones dobles]] o [[Special:BrokenRedirects|rotas]].
 Tú eres responsable de hacer que los enlaces sigan apuntando adonde se supone que deberían hacerlo.
@@ -2842,9 +2847,9 @@ Esto significa que podrás renombrar una página a su título original si has co
 Este puede ser un cambio drástico e inesperado para una página popular;
 por favor, asegúrate de entender las consecuencias del procedimiento antes de seguir adelante.",
 'movepagetalktext' => "La página de discusión asociada, si existe, será renombrada automáticamente '''a menos que:'''
-*Esté moviendo la página entre espacios de nombres diferentes,
+*Estés trasladando la página entre espacios de nombres diferentes,
 *Una página de discusión no vacía ya exista con el nombre nuevo, o
-*No actives la opción «Renombrar la página de discusión también».
+*No marques el recuadro «Renombrar la página de discusión asociada».
 
 En estos casos, deberás trasladar manualmente el contenido de la página de discusión.",
 'movearticle' => 'Renombrar página',
@@ -3052,7 +3057,7 @@ Puedes ver su código fuente',
 'tooltip-ca-delete' => 'Borrar esta página',
 'tooltip-ca-undelete' => 'Restaurar las ediciones hechas a esta página antes de que fuese borrada',
 'tooltip-ca-move' => 'Trasladar esta página',
-'tooltip-ca-watch' => 'Añadir esta página a su lista de seguimiento',
+'tooltip-ca-watch' => 'Añadir esta página a tu lista de seguimiento',
 'tooltip-ca-unwatch' => 'Borrar esta página de su lista de seguimiento',
 'tooltip-search' => 'Buscar en {{SITENAME}}',
 'tooltip-search-go' => 'Ir al artículo con este nombre exacto si existe',
@@ -3090,7 +3095,7 @@ Puedes ver su código fuente',
 'tooltip-preview' => 'Previsualiza los cambios realizados. ¡Por favor, hazlo antes de grabar!',
 'tooltip-diff' => 'Muestra los cambios que ha introducido en el texto.',
 'tooltip-compareselectedversions' => 'Ver las diferencias entre las dos versiones seleccionadas de esta página.',
-'tooltip-watch' => 'Añadir esta página a su lista de seguimiento',
+'tooltip-watch' => 'Añadir esta página a tu lista de seguimiento',
 'tooltip-watchlistedit-normal-submit' => 'Borrar páginas',
 'tooltip-watchlistedit-raw-submit' => 'Actualizar lista de seguimiento',
 'tooltip-recreate' => 'Recupera una página que ha sido borrada',
index a73374c..da5f36a 100644 (file)
@@ -698,10 +698,13 @@ Administraator lukustas selle järgmisel põhjusel: "$3".',
 
 Võid jätkata {{GRAMMAR:genitive|{{SITENAME}}}} kasutamist anonüümselt, aga ka sama või mõne teise kasutajana uuesti <span class='plainlinks'>[$1 sisse logida]</span>.
 Pane tähele, et seni kuni sa pole oma võrgulehitseja puhvrit tühjendanud, võidakse mõni lehekülg endiselt nii kuvada nagu oleksid ikka sisse logitud.",
+'welcomeuser' => 'Tere tulemast, $1!',
 'welcomecreation' => '== Tere tulemast, $1! ==
 
 Sinu konto on loodud.
 Ära unusta oma {{GRAMMAR:genitive|{{SITENAME}}}} [[Special:Preferences|eelistusi]] seada.',
+'welcomecreation-agora' => 'Sinu konto on loodud.
+Ära unusta seada oma {{GRAMMAR:genitive|{{SITENAME}}}} [[Eri:Eelistused|eelistusi]].',
 'yourname' => 'Kasutajanimi:',
 'yourpassword' => 'Parool:',
 'yourpasswordagain' => 'Sisesta parool uuesti:',
@@ -3925,4 +3928,6 @@ Kui ei, kasuta allolevat lihtsat vormi. Sinu kommentaar lisatakse koos kasutajan
 'duration-centuries' => '$1 {{PLURAL:$1|sajandi}}',
 'duration-millennia' => '$1 {{PLURAL:$1|aastatuhande}}',
 
+# Unknown messages
+'mytalk-parenthetical' => 'arutelu',
 );
index a490b8c..93aed4a 100644 (file)
@@ -173,7 +173,7 @@ $messages = array(
 
 'underline-always' => 'Beti',
 'underline-never' => 'Inoiz ez',
-'underline-default' => 'Nabigatzailearen lehenetsitako balioa',
+'underline-default' => 'Lehenetsitako nabigatzailea',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Aldatu eremuko letra tipoa:',
@@ -258,8 +258,8 @@ $messages = array(
 'newwindow' => '(leiho berrian irekitzen da)',
 'cancel' => 'Utzi',
 'moredotdotdot' => 'Gehiago...',
-'mypage' => 'Nire orrialdea',
-'mytalk' => 'Nire eztabaida',
+'mypage' => 'Orrialdea',
+'mytalk' => 'Eztabaida',
 'anontalk' => 'IP honen eztabaida',
 'navigation' => 'Nabigazioa',
 'and' => '&#32;eta',
@@ -281,7 +281,7 @@ $messages = array(
 'vector-action-protect' => 'Babestu',
 'vector-action-undelete' => 'Berreskuratu',
 'vector-action-unprotect' => 'Babesa aldatu',
-'vector-simplesearch-preference' => 'Baimendu bilaketa gomendio hobetuak (Vector itxurarekin bakarrik)',
+'vector-simplesearch-preference' => 'Bilaketa barra sinplifikatua gaitu (Vector itxurarekin bakarrik)',
 'vector-view-create' => 'Sortu',
 'vector-view-edit' => 'Aldatu',
 'vector-view-history' => 'Historia ikusi',
@@ -493,7 +493,8 @@ Kontsulta: $2',
 Saia zaitez berriro minutu batzuen buruan, mesedez.',
 'protectedpagetext' => 'Orrialde hau aldaketak saihesteko blokeatu egin da.',
 'viewsourcetext' => 'Orrialde honen testua ikusi eta kopiatu dezakezu:',
-'protectedinterface' => 'Orrialde honek softwarearentzako interfaze testua gordetzen du eta blokeatuta dago bandalismoak saihesteko.',
+'protectedinterface' => 'Orrialde honek softwarearentzako interfaze testua gordetzen du eta blokeatuta dago bandalismoak saihesteko.
+Wiki guztientzako aldaketak egin edo gehitzeko, mesedez erabili [//translatewiki.net/ translatewiki.net], MediaWikiren lokalizazio proiektua.',
 'editinginterface' => "'''Oharra:''' Softwarearentzako interfaze testua duen orrialde bat aldatzen ari zara.
 Orrialde honetako aldaketek erabiltzaile guztiei eragingo die.
 Itzulpenetarako, [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net] erabili ezazu, MediaWiki proiektuan.",
@@ -504,6 +505,7 @@ $2",
 'ns-specialprotected' => 'Ezin dira {{ns:special}} izen-tarteko orrialdeak editatu.',
 'titleprotected' => "[[User:$1|$1]]ek izenburu hau sortzea ekidin zuen.
 Emandako arrazoia ''$2'' izan zen.",
+'exception-nologin' => 'Saioa hasi gabe',
 
 # Virus scanner
 'virus-badscanner' => "Ezarpen txarrak: antibirus ezezaguna: ''$1''",
@@ -593,6 +595,7 @@ Ondorioz, ezin duzu kontu gehiago sortu.',
 'invalidemailaddress' => 'Ezin da e-posta helbide hori ontzat eman baliogabeko formatua duela dirudielako.
 
 Mesedez, formatu egokia duen helbide bat zehaztu, edo hutsik utzi.',
+'emaildisabled' => 'Gune honek ezin du e-postarik bidali.',
 'accountcreated' => 'Kontua sortuta',
 'accountcreatedtext' => '$1 erabiltzaile kontua sortu egin da.',
 'createaccount-title' => '{{SITENAME}}-rako kontua sortu',
@@ -734,9 +737,9 @@ Erabiltzaile anonimoa bazara eta zurekin zerikusirik ez duten mezuak jasotzen ba
 Beste orrialde batzuetan [[Special:Search/{{PAGENAME}}|bilatu dezakezu izenburu hau]],
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} bilatu lotutako logak],
 edo [{{fullurl:{{FULLPAGENAME}}|action=edit}} berau aldatu ere egin dezakezu]</span>.',
-'noarticletext-nopermission' => 'Une honetan ez dago texturik orri honetan.
-Beste orrietan [[Special:Search/{{PAGENAME}}|testua bilatu dezakezu]],
-edo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} erlazionatutako erregistroak ikusi]</span>.',
+'noarticletext-nopermission' => 'Une honetan ez dago testurik orrialde honetan.
+Beste orrialdeetan [[Special:Search/{{PAGENAME}}|izenburu hau bilatu dezakezu]],
+edo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} erlazionatutako erregistroak bilatu]</span>, baina ez duzu orrialde hau sortzeko baimenik.',
 'userpage-userdoesnotexist' => '"<nowiki>$1</nowiki>" lankidea ez dago erregistatuta. Mesedez, konprobatu orri hau editatu/sortu nahi duzun.',
 'userpage-userdoesnotexist-view' => '"$1" erabiltzaile-kontua ez dago erregistraturik.',
 'blocked-notice-logextract' => 'Erabiltzaile hau blokeatuta dago une honetan.
@@ -760,7 +763,7 @@ Azken blokeoaren erregistroa ageri da behean, erreferentzia gisa:',
 'note' => "'''Oharra:'''",
 'previewnote' => "'''Gogoratu hau aurrikuspen bat dela.'''
 Zure aldaketak ez dira oraindik gorde!",
-'continue-editing' => 'Aldatzen jarraitu',
+'continue-editing' => 'Edizio-eremura joan',
 'previewconflict' => 'Aurreikuspenak aldaketen koadroan idatzitako testua erakusten du, gorde ondoren agertuko den bezala.',
 'session_fail_preview' => "'''Sentitzen dugu! Ezin izan da zure aldaketa prozesatu, saioko datu batzuen galera dela-eta. Mesedez, saiatu berriz. Arazoak jarraitzen badu, saiatu saioa amaitu eta berriz hasten.'''",
 'session_fail_preview_html' => "'''Sentitzen dugu! Ezin izan dugu zure aldaketa burutu, saio datu galera bat medio.'''
@@ -834,6 +837,12 @@ Ez du azalpenik eman.',
 'edit-already-exists' => 'Ezin izan da orri berria sortu.
 Jada existitzen da.',
 
+# Content models
+'content-model-wikitext' => 'wikitestua',
+'content-model-text' => 'testu laua',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Adi: Orrialde honek parser funtzio deialdi oso garesti gehiegi ditu.
 
@@ -1107,7 +1116,7 @@ Saia zaitez zure eskeraren aurretik ''all:'' jartzen eduki guztien artean bilatz
 
 # Preferences page
 'preferences' => 'Hobespenak',
-'mypreferences' => 'Nire hobespenak',
+'mypreferences' => 'Hobespenak',
 'prefs-edits' => 'Aldaketa kopurua:',
 'prefsnologin' => 'Saioa hasi gabe',
 'prefsnologintext' => '<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} Izena eman]</span> behar duzu zure hobespenak ezartzeko.',
@@ -1118,6 +1127,7 @@ Saia zaitez zure eskeraren aurretik ''all:'' jartzen eduki guztien artean bilatz
 'prefs-beta' => 'Beta ezaugarriak',
 'prefs-datetime' => 'Data eta ordua',
 'prefs-labs' => 'Labs ezaugarriak',
+'prefs-user-pages' => 'Erabiltzaile orrialdeak',
 'prefs-personal' => 'Erabiltzaile profila',
 'prefs-rc' => 'Azken aldaketak',
 'prefs-watchlist' => 'Jarraipen zerrenda',
@@ -1166,7 +1176,7 @@ Saia zaitez zure eskeraren aurretik ''all:'' jartzen eduki guztien artean bilatz
 'timezoneregion-indian' => 'Indiar Ozeanoa',
 'timezoneregion-pacific' => 'Ozeano Barea',
 'allowemail' => 'Beste erabiltzaileengandik e-posta mezuak jasotzea gaitu',
-'prefs-searchoptions' => 'Bilaketa aukerak',
+'prefs-searchoptions' => 'Bilatu',
 'prefs-namespaces' => 'Izen-tarteak',
 'defaultns' => 'Bestela izen-tarte hauetan bilatu:',
 'default' => 'lehenetsia',
@@ -1836,7 +1846,7 @@ Ikus, gainera [[Special:WantedCategories|kategoriarik eskatuenak]].',
 'linksearch-ok' => 'Bilatu',
 'linksearch-text' => '"*.wikipedia.org" bezalako izartxoak erabil daitezke.
 Gutxienez goi mailako domeinua behar du, adibidez "*.org".<br />
-Baimendutako protokoloak: <code>$1</code> (zure bilaketan hauek ez gehitu).',
+Baimendutako protokoloak: <code>$1</code> (protokoloa zehazten ez bada http:// hartzen da lehenetsitzat).',
 'linksearch-line' => '$1, $2(e)tik lotuta',
 'linksearch-error' => 'Komodinak izenaren hasieran bakarrik agertu beharko lirateke.',
 
@@ -2197,10 +2207,11 @@ Blokeo erregistroa azken sarrera ematen da azpian erreferentziarako:',
 'whatlinkshere-hideredirs' => '$1 birzuzenketak',
 'whatlinkshere-hidetrans' => '$1 transklusioak',
 'whatlinkshere-hidelinks' => '$1 loturak',
-'whatlinkshere-hideimages' => '$1 irudiak loturak ditu',
+'whatlinkshere-hideimages' => '$1 irudi loturak',
 'whatlinkshere-filters' => 'Iragazleak',
 
 # Block/unblock
+'autoblockid' => 'Blokeo automatikoa #$1',
 'block' => 'Erabiltzailea blokeatu',
 'unblock' => 'Erabiltzailea desblokeatu',
 'blockip' => 'Erabiltzailea blokeatu',
@@ -2599,6 +2610,9 @@ Baliteke zerrenda beltzean dagoen kanpo lotura batek sortzea arazo hori.',
 'pageinfo-header-edits' => 'Aldaketen historia',
 'pageinfo-views' => 'Bistaratze-kopurua',
 'pageinfo-edits' => 'Aldaketa kopuru totala',
+'pageinfo-redirectsto-info' => 'Info',
+'pageinfo-contentpage-yes' => 'Bai',
+'pageinfo-protect-cascading-yes' => 'Bai',
 
 # Skin names
 'skinname-standard' => 'Lehenetsia',
@@ -3285,7 +3299,11 @@ Irudiak bereizmen handienean daude, bestelako fitxategi motak beraiei esleitutak
 'revdelete-restricted' => 'administratzaileentzako mugak ezarri dira',
 'revdelete-unrestricted' => 'administratzaileentzako mugak kendu dira',
 'logentry-move-move' => '$1 wikilariak «$3» orria «$4» izenera aldatu du',
+'logentry-move-move-noredirect' => '$1 wikilariak «$3» orria «$4» izenera aldatu du, birzuzenketarik utzi gabe',
 'logentry-move-move_redir-noredirect' => '$1 wikilariak «$3» orria «$4» izenera aldatu du, birzuzenketa bat gainidatzita, birzuzenketarik utzi gabe',
+'logentry-newusers-newusers' => '$1 wikilariak erabiltzaile kontu bat sortu du',
+'logentry-newusers-create' => '$1 wikilariak erabiltzaile kontu bat sortu du',
+'logentry-newusers-create2' => '$1 wikilariak $3 erabiltzaile kontu bat sortu du',
 'newuserlog-byemail' => 'pasahitza e-postaz bidali da',
 
 # Feedback
@@ -3298,4 +3316,6 @@ Irudiak bereizmen handienean daude, bestelako fitxategi motak beraiei esleitutak
 'searchsuggest-search' => 'Bilatu',
 'searchsuggest-containing' => 'edukian...',
 
+# Unknown messages
+'mytalk-parenthetical' => 'eztabaida',
 );
index 98f6400..7b84e02 100644 (file)
@@ -592,6 +592,7 @@ $messages = array(
 'namespaces' => 'فضاهای نام',
 'variants' => 'گویش‌ها',
 
+'navigation-heading' => 'منوی ناوبری',
 'errorpagetitle' => 'خطا',
 'returnto' => 'بازگشت به $1.',
 'tagline' => 'از {{SITENAME}}',
@@ -843,9 +844,12 @@ $2',
 
 شما می‌توانید به استفادهٔ گمنام از {{SITENAME}} ادامه دهید، یا با همین حساب کاربری یا حسابی دیگر <span class='plainlinks'>[$1 به سامانه وارد شوید]</span>.
 توجه کنید که تا زمانی که میانگیر مرورگرتان را پاک نکنید، بعضی صفحه‌ها ممکن است به گونه‌ای نمایش یابند که گویی هنوز از سامانه خارج نشده‌اید.",
+'welcomeuser' => 'خوشامدید، $1!',
 'welcomecreation' => '==$1، خوش آمدید!==
 حساب شما ایجاد شد.
 فراموش نکنید که [[Special:Preferences|ترجیحات {{SITENAME}}]] را برای خود تغییر دهید.',
+'welcomecreation-agora' => 'حساب کاربری شما ایجاد شده است.
+فراموش نکنید که [[Special:Preferences|ترجیحات {{SITENAME}}]] خود را تغییر دهید.',
 'yourname' => 'نام کاربری:',
 'yourpassword' => 'گذرواژه:',
 'yourpasswordagain' => 'تکرار گذرواژه:',
@@ -1995,6 +1999,7 @@ $1',
 'backend-fail-notsame' => 'پروندهٔ غیریکسانی در $1 وجود دارد.',
 'backend-fail-invalidpath' => '$1 مسیر ذخیره‌سازی معتبری نیست.',
 'backend-fail-delete' => 'نمی‌توان پروندهٔ $1 را حذف کرد.',
+'backend-fail-describe' => 'نمی‌توان فرادادهٔ پروندهٔ «$1» را تغییر داد.',
 'backend-fail-alreadyexists' => 'پروندهٔ $1 از قبل وجود داشت.',
 'backend-fail-store' => 'نمی‌توان پروندهٔ $1 را در $2 ذخیره کرد.',
 'backend-fail-copy' => 'نمی‌توان پروندهٔ $1 را به $2 کپی کرد.',
@@ -3304,6 +3309,8 @@ $1',
 'markedaspatrollederror' => 'برچسب گشت زده نشد',
 'markedaspatrollederrortext' => 'باید یک نسخه را مشخص کنید تا برچسب گشت بخورد.',
 'markedaspatrollederror-noautopatrol' => 'شما نمی‌توانید به تغییرات انجام شده توسط خودتان برچسب گشت بزنید.',
+'markedaspatrollednotify' => 'این تغییر روی $1 برچسب گشت خورده است.',
+'markedaspatrollederrornotify' => 'زدن برچسب گشت، ناموفق بود.',
 
 # Patrol log
 'patrol-log-page' => 'سیاههٔ گشت',
@@ -4180,9 +4187,9 @@ $5
 'logentry-move-move_redir-noredirect' => '$1 صفحهٔ $3 را بدون برجای‌گذاشتن تغییرمسیر به $4 که تغییرمسیر بود منتقل کرد',
 'logentry-patrol-patrol' => '$1 نسخه $4 صفحه $3 را به عنوان گشت خورده علامت زد',
 'logentry-patrol-patrol-auto' => '$1 نسخه $4 صفحه $3 را به طور خودکار به عنوان گشت خورده علامت زد',
-'logentry-newusers-newusers' => '$1 یک حساب کاربری ایجاد کرد',
-'logentry-newusers-create' => '$1 یک حساب کاربری ایجاد کرد',
-'logentry-newusers-create2' => '$1 یک حساب کاربری ایجاد کرد $3',
+'logentry-newusers-newusers' => 'حساب کاربری $1 ایجاد شد',
+'logentry-newusers-create' => 'حساب کاربری $1 ایجاد شد',
+'logentry-newusers-create2' => 'حساب کاربری $3 توسط $1 ایجاد شد',
 'logentry-newusers-autocreate' => 'حساب $1  به شکل خودکار ساخته شد',
 'newuserlog-byemail' => 'گذرواژه بوسیله رایانامه ارسال شد',
 
index 6cb56d4..2c96bfa 100644 (file)
@@ -349,7 +349,7 @@ $messages = array(
 'tog-watchlisthidebots' => 'Piilota bottien muokkaukset',
 'tog-watchlisthideminor' => 'Piilota pienet muokkaukset',
 'tog-watchlisthideliu' => 'Piilota kirjautuneiden käyttäjien muokkaukset tarkkailulistalta',
-'tog-watchlisthideanons' => 'Piilota anonyymien käyttäjien muokkaukset tarkkailulistalta',
+'tog-watchlisthideanons' => 'Piilota rekisteröitymättömien käyttäjien muokkaukset tarkkailulistalta',
 'tog-watchlisthidepatrolled' => 'Piilota tarkastetut muokkaukset tarkkailulistalta',
 'tog-ccmeonemails' => 'Lähetä minulle kopio MediaWikin kautta lähetetyistä sähköposteista',
 'tog-diffonly' => 'Älä näytä sivun sisältöä versioita vertailtaessa',
@@ -455,7 +455,7 @@ $messages = array(
 'qbbrowse' => 'Selaa',
 'qbedit' => 'Muokkaa',
 'qbpageoptions' => 'Sivuasetukset',
-'qbmyoptions' => 'Asetukset',
+'qbmyoptions' => 'Omat sivut',
 'qbspecialpages' => 'Toimintosivut',
 'faq' => 'Usein kysytyt kysymykset',
 'faqpage' => 'Project:Usein kysytyt kysymykset',
@@ -713,9 +713,12 @@ Lukituksen asettanut ylläpitäjä on antanut seuraavan syyn toimenpiteelle: $3.
 
 Voit jatkaa {{GRAMMAR:genitive|{{SITENAME}}}} käyttöä nimettömänä, tai <span class='plainlinks'>[$1 kirjautua uudelleen sisään]</span>.
 Huomaa, että jotkut sivut saattavat näkyä edelleen kuin olisit kirjautunut sisään, kunnes tyhjennät selaimen välimuistin.",
+'welcomeuser' => 'Tervetuloa $1!',
 'welcomecreation' => '== Tervetuloa $1! ==
 Käyttäjätunnuksesi on luotu.
 Älä unohda virittää {{GRAMMAR:genitive|{{SITENAME}}}} [[Special:Preferences|asetuksiasi]].',
+'welcomecreation-agora' => 'Käyttäjätunnuksesi on luotu.
+Älä unohda virittää {{GRAMMAR:genitive|{{SITENAME}}}} [[Special:Preferences|asetuksiasi]].',
 'yourname' => 'Käyttäjätunnus',
 'yourpassword' => 'Salasana',
 'yourpasswordagain' => 'Salasana uudelleen',
index b7f197d..dcc77f8 100644 (file)
@@ -51,6 +51,7 @@
  * @author Litlok
  * @author Lloffiwr
  * @author Louperivois
+ * @author Ltrlg
  * @author Lucyin
  * @author McDutchie
  * @author Meithal
@@ -539,6 +540,7 @@ $messages = array(
 'namespaces' => 'Espaces de noms',
 'variants' => 'Variantes',
 
+'navigation-heading' => 'Menu de navigation',
 'errorpagetitle' => 'Erreur',
 'returnto' => 'Revenir à la page $1.',
 'tagline' => 'De {{SITENAME}}',
@@ -781,10 +783,13 @@ L'administrateur qui l'a verrouillé a fourni ce motif: « $3 ».",
 
 Vous pouvez continuer à utiliser {{SITENAME}} de façon anonyme, <span class='plainlinks'>[$1 vous reconnecter]</span> sous le même nom ou un autre.
 Notez que certaines pages peuvent être encore affichées comme si vous étiez toujours connecté(e), jusqu'à ce que vous effaciez le cache de votre navigateur.",
+'welcomeuser' => 'Bienvenue, $1!',
 'welcomecreation' => "== Bienvenue, $1 ! ==
 
 Votre compte a été créé.
 N'oubliez pas de personnaliser vos [[Special:Preferences|préférences sur {{SITENAME}}]].",
+'welcomecreation-agora' => "Votre compte a été créé.
+N'oubliez pas de modifier vos [[Special:Preferences|{{SITENAME}} préférences]].",
 'yourname' => "Nom d'utilisateur :",
 'yourpassword' => 'Mot de passe&nbsp;:',
 'yourpasswordagain' => 'Confirmez le mot de passe :',
@@ -1813,25 +1818,25 @@ Veuillez vérifier que vous désirez vraiment importer ce fichier.',
 'fileexists' => "Un fichier existe déjà sous ce nom.
 Merci de vérifier <strong>[[:$1]]</strong> si vous n'êtes pas certain{{GENDER:||e|}} de vouloir le modifier.
 [[$1|thumb]]",
-'filepageexists' => 'La page de description pour ce fichier a déjà été créée ici <strong>[[:$1]]</strong>, mais aucun fichier n’existe actuellement sous ce nom.
-Le résumé que vous allez spécifier napparaîtra pas sur la page de description.
-Pour que ce soit le cas, vous devrez modifier manuellement la page. [[$1|thumb]]',
+'filepageexists' => "La page de description pour ce fichier a déjà été créée ici <strong>[[:$1]]</strong>, mais aucun fichier n'existe actuellement sous ce nom.
+Le résumé que vous allez spécifier n'apparaîtra pas sur la page de description.
+Pour que ce soit le cas, vous devrez modifier manuellement la page. [[$1|thumb]]",
 'fileexists-extension' => 'Un fichier existe avec un nom proche : [[$2|thumb]]
 * Nom du fichier à importer : <strong>[[:$1]]</strong>
 * Nom du fichier existant : <strong>[[:$2]]</strong>
 Veuillez choisir un autre nom.',
 'fileexists-thumbnail-yes' => "Le fichier semble être une image en taille réduite ''(vignette)''. [[$1|thumb]]
 Veuillez vérifier le fichier <strong>[[:$1]]</strong>.
-Si le fichier vérifié est la même image avec la taille initiale, il n’y a pas besoin d’importer une version réduite.",
+Si le fichier vérifié est la même image avec la taille initiale, il n'y a pas besoin d'importer une version réduite.",
 'file-thumbnail-no' => "Le nom du fichier commence par <strong>$1</strong>.
-Il est possible qu’il s’agisse d’une version réduite ''(vignette)''.
+Il est possible qu'il s'agisse d'une version réduite ''(vignette)''.
 Si vous disposez du fichier en haute résolution, importez-le, sinon veuillez modifier son nom.",
-'fileexists-forbidden' => 'Un fichier avec ce nom existe déjà et ne peut pas être écrasé.
-Si vous voulez toujours importer votre fichier, merci de retourner en arrière et d’utiliser un nouveau nom. [[File:$1|thumb|center|$1]]',
+'fileexists-forbidden' => "Un fichier avec ce nom existe déjà et ne peut pas être écrasé.
+Si vous voulez toujours importer votre fichier, merci de retourner en arrière et d'utiliser un nouveau nom. [[File:$1|thumb|center|$1]]",
 'fileexists-shared-forbidden' => 'Un fichier portant ce nom existe déjà dans le dépôt de fichiers partagé.
 Si vous voulez toujours importer votre fichier, veuillez revenir en arrière et utiliser un autre nom. [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'Ce fichier est un doublon {{PLURAL:$1|du fichier suivant|des fichiers suivants}} :',
-'file-deleted-duplicate' => 'Un fichier identique à celui-ci ([[:$1]]) a déjà été supprimé. Vous devriez vérifier le journal des suppressions de ce fichier avant de l’importer à nouveau.',
+'file-deleted-duplicate' => "Un fichier identique à celui-ci ([[:$1]]) a déjà été supprimé. Vous devriez vérifier le journal des suppressions de ce fichier avant de l'importer à nouveau.",
 'uploadwarning' => 'Attention !',
 'uploadwarning-text' => 'Modifiez la description du fichier et essayez de nouveau.',
 'savefile' => 'Sauvegarder le fichier',
@@ -1839,9 +1844,9 @@ Si vous voulez toujours importer votre fichier, veuillez revenir en arrière et
 'overwroteimage' => 'a importé une nouvelle version de « [[$1]] »',
 'uploaddisabled' => "Désolé, l'import de fichiers est désactivé.",
 'copyuploaddisabled' => 'Import de fichier par URL désactivé.',
-'uploadfromurl-queued' => 'Votre fichier a été mis dans la file d’attente.',
+'uploadfromurl-queued' => "Votre fichier a été mis dans la file d'attente.",
 'uploaddisabledtext' => "L'import de fichiers est désactivé sur ce wiki.",
-'php-uploaddisabledtext' => "L'import de fichiers a été désactivé dans PHP. Vérifiez loption de configuration file_uploads.",
+'php-uploaddisabledtext' => "L'import de fichiers a été désactivé dans PHP. Vérifiez l'option de configuration file_uploads.",
 'uploadscripted' => 'Ce fichier contient du code HTML ou un script qui pourrait être interprété de façon incorrecte par un navigateur web.',
 'uploadvirus' => 'Ce fichier contient un virus ! Pour plus de détails, consultez : $1',
 'uploadjava' => "C'est un fichier ZIP qui contient un fichier Java .class.
@@ -1854,8 +1859,8 @@ Le téléchargement de fichiers Java n'est pas autorisé, car ils peuvent contou
 'upload-description' => 'Description du fichier',
 'upload-options' => "Options d'import de fichiers",
 'watchthisupload' => 'Suivre ce fichier',
-'filewasdeleted' => 'Un fichier avec ce nom a déjà été importé, puis supprimé.
-Vous devriez vérifier $1 avant de l’importer à nouveau.',
+'filewasdeleted' => "Un fichier avec ce nom a déjà été importé, puis supprimé.
+Vous devriez vérifier $1 avant de l'importer à nouveau.",
 'filename-bad-prefix' => "Le nom du fichier commence par '''« $1 »''' qui est typiquement un nom attribué automatiquement par les appareils photo numériques.
 Veuillez choisir un nom de fichier descriptif.",
 'filename-prefix-blacklist' => ' #<!-- laisser cette ligne telle quelle --><pre>
@@ -1887,9 +1892,9 @@ $1',
 'upload-file-error-text' => 'Une erreur interne est survenue en voulant créer un fichier temporaire sur le serveur. Veuillez contacter un [[Special:ListUsers/sysop|administrateur]].',
 'upload-misc-error' => "Erreur d'import inconnue",
 'upload-misc-error-text' => "Une erreur inconnue est survenue pendant l'import.
-Veuillez vérifier que lURL est valide et accessible, puis essayer à nouveau.
+Veuillez vérifier que l'URL est valide et accessible, puis essayer à nouveau.
 Si le problème persiste, contactez un [[Special:ListUsers/sysop|administrateur]].",
-'upload-too-many-redirects' => 'L’URL contient trop de redirections.',
+'upload-too-many-redirects' => "L'URL contient trop de redirections.",
 'upload-unknown-size' => 'Taille inconnue',
 'upload-http-error' => 'Une erreur HTTP est survenue : $1',
 'upload-copy-upload-invalid-domain' => "La copie des téléchargements n'est pas disponible depuis ce domaine.",
@@ -1900,8 +1905,9 @@ Si le problème persiste, contactez un [[Special:ListUsers/sysop|administrateur]
 'backend-fail-notexists' => "Le fichier $1 n'existe pas.",
 'backend-fail-hashes' => "Impossible d'obtenir les hachages du fichier pour comparaison.",
 'backend-fail-notsame' => 'Un fichier différent existe déjà pour $1 .',
-'backend-fail-invalidpath' => '$1 n’est pas un chemin de stockage valide.',
+'backend-fail-invalidpath' => "$1 n'est pas un chemin de stockage valide.",
 'backend-fail-delete' => 'Impossible de supprimer le fichier $1.',
+'backend-fail-describe' => 'Impossible de modifier les métadonnées du fichier "$1".',
 'backend-fail-alreadyexists' => 'Le fichier $1 existe déjà.',
 'backend-fail-store' => 'Impossible de stocker le fichier $1 en $2.',
 'backend-fail-copy' => 'Impossible de copier le fichier $1 en $2.',
@@ -1910,26 +1916,26 @@ Si le problème persiste, contactez un [[Special:ListUsers/sysop|administrateur]
 'backend-fail-writetemp' => "Impossible d'écrire dans le fichier temporaire.",
 'backend-fail-closetemp' => 'Impossible de fermer le fichier temporaire.',
 'backend-fail-read' => 'Impossible de lire le fichier $1.',
-'backend-fail-create' => 'Impossible d’écrire le fichier $1.',
-'backend-fail-maxsize' => "Impossible décrire le fichier $1 parce qu'il est plus grand {{PLURAL:$2|qu'un octet|que $2 octets}}.",
+'backend-fail-create' => "Impossible d'écrire le fichier $1.",
+'backend-fail-maxsize' => "Impossible d'écrire le fichier $1 parce qu'il est plus grand {{PLURAL:$2|qu'un octet|que $2 octets}}.",
 'backend-fail-readonly' => 'Le support de stockage "$1" est actuellement en lecture seule. La raison indiquée est: "$2"',
 'backend-fail-synced' => 'Le fichier "$1" est dans un état incohérent dans les supports de stockage internes',
 'backend-fail-connect' => 'Impossible de se connecter au support de stockage "$1".',
 'backend-fail-internal' => 'Une erreur inconnue s\'est produite dans le support de stockage "$1".',
 'backend-fail-contenttype' => 'Impossible de déterminer le type de contenu du fichier à stocker en "$1".',
 'backend-fail-batchsize' => 'Le support de stockage a fourni un lot de $1 {{PLURAL:$1|opération|opérations}} de fichier; la limite est $2 {{PLURAL:$2|opération|opérations}}.',
-'backend-fail-usable' => 'Impossible de lire ou d’écrire le fichier « $1 » en raison de droits insuffisants ou répertoires/conteneurs manquants.',
+'backend-fail-usable' => "Impossible de lire ou d'écrire le fichier « $1 » en raison de droits insuffisants ou répertoires/conteneurs manquants.",
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Impossible de se connecter à la base de données du journal pour le terminal de stockage "$1".',
 'filejournal-fail-dbquery' => 'Impossible de mettre à jour la base de données du journal pour le terminal de stockage "$1".',
 
 # Lock manager
-'lockmanager-notlocked' => 'Impossible de déverrouiller « $1 » ; elle n’est pas verrouillée.',
+'lockmanager-notlocked' => "Impossible de déverrouiller « $1 » ; elle n'est pas verrouillée.",
 'lockmanager-fail-closelock' => 'Impossible de fermer le fichier de verrou pour « $1 ».',
 'lockmanager-fail-deletelock' => 'Impossible de supprimer le fichier de verrou pour « $1 ».',
-'lockmanager-fail-acquirelock' => 'Impossible d’obtenir le verrou pour « $1 ».',
-'lockmanager-fail-openlock' => 'Impossible d’ouvrir le fichier de verrou pour « $1» .',
+'lockmanager-fail-acquirelock' => "Impossible d'obtenir le verrou pour « $1 ».",
+'lockmanager-fail-openlock' => "Impossible d'ouvrir le fichier de verrou pour « $1» .",
 '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.',
@@ -1937,8 +1943,8 @@ Si le problème persiste, contactez un [[Special:ListUsers/sysop|administrateur]
 'lockmanager-fail-svr-release' => 'Impossible de relâcher les verrous sur le serveur $1.',
 
 # ZipDirectoryReader
-'zip-file-open-error' => 'Une erreur s’est produite lors de l’ouverture du fichier ZIP pour contrôle.',
-'zip-wrong-format' => 'Le fichier spécifié n’est pas une archive ZIP.',
+'zip-file-open-error' => "Une erreur s'est produite lors de l'ouverture du fichier ZIP pour contrôle.",
+'zip-wrong-format' => "Le fichier spécifié n'est pas une archive ZIP.",
 'zip-bad' => 'Le fichier est une archive ZIP corrompue ou illisible.
 Il ne peut pas être correctement vérifié pour la sécurité.',
 'zip-unsupported' => 'Le fichier est une archive ZIP qui utilise des caractéristiques non supportées par MediaWiki. 
@@ -1956,36 +1962,36 @@ Sa sécurité ne peut pas être correctement vérifiée.',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'Accès refusé',
-'img-auth-nopathinfo' => 'PATH_INFO manquant.
-Votre serveur nest pas paramétré pour passer cette information.
+'img-auth-nopathinfo' => "PATH_INFO manquant.
+Votre serveur n'est pas paramétré pour passer cette information.
 Il fonctionne peut-être en CGI et ne supporte pas img_auth.
-Voyez https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
-'img-auth-notindir' => "Le chemin demandé nest pas le répertoire d'import configuré.",
+Voyez https://www.mediawiki.org/wiki/Manual:Image_Authorization.",
+'img-auth-notindir' => "Le chemin demandé n'est pas le répertoire d'import configuré.",
 'img-auth-badtitle' => 'Impossible de construire un titre valide à partir de « $1 ».',
-'img-auth-nologinnWL' => 'Vous n’êtes pas connecté et « $1 » n’est pas dans la liste blanche.',
-'img-auth-nofile' => 'Le fichier « $1 » n’existe pas.',
-'img-auth-isdir' => 'Vous essayez d’accéder au répertoire « $1 ».
-Seul l’accès aux fichiers est permis.',
+'img-auth-nologinnWL' => "Vous n'êtes pas connecté et « $1 » n'est pas dans la liste blanche.",
+'img-auth-nofile' => "Le fichier « $1 » n'existe pas.",
+'img-auth-isdir' => "Vous essayez d'accéder au répertoire « $1 ».
+Seul l'accès aux fichiers est permis.",
 'img-auth-streaming' => 'Lecture en continu de « $1 ».',
-'img-auth-public' => 'La fonction de img_auth.php est d’afficher des fichiers d’un wiki privé.
+'img-auth-public' => "La fonction de img_auth.php est d'afficher des fichiers d'un wiki privé.
 Ce wiki est configuré comme un wiki public.
-Pour une sécurité optimale, img_auth.php est désactivé.',
-'img-auth-noread' => 'L’utilisateur n’a pas le droit en lecture sur « $1 ».',
+Pour une sécurité optimale, img_auth.php est désactivé.",
+'img-auth-noread' => "L'utilisateur n'a pas le droit en lecture sur « $1 ».",
 'img-auth-bad-query-string' => "L'URL a une chaîne de requête invalide.",
 
 # HTTP errors
 'http-invalid-url' => 'URL incorrecte : $1',
 'http-invalid-scheme' => 'Les URL avec le schéma « $1 » ne sont pas supportées.',
-'http-request-error' => 'Erreur inconnue lors de l’envoi de la requête.',
+'http-request-error' => "Erreur inconnue lors de l'envoi de la requête.",
 'http-read-error' => 'Erreur de lecture HTTP.',
 'http-timed-out' => 'La requête HTTP a expiré.',
-'http-curl-error' => 'Erreur lors de la récupération de l’URL : $1',
-'http-host-unreachable' => 'Impossible d’atteindre l’URL.',
+'http-curl-error' => "Erreur lors de la récupération de l'URL : $1",
+'http-host-unreachable' => "Impossible d'atteindre l'URL.",
 'http-bad-status' => 'Il y a eu un problème lors de la requête 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 injoignable',
-'upload-curl-error6-text' => 'L’URL fournie ne peut pas être atteinte. Veuillez vérifier que l’URL est correcte et que le site est en ligne.',
+'upload-curl-error6-text' => "L'URL fournie ne peut pas être atteinte. Veuillez vérifier que l'URL est correcte et que le site est en ligne.",
 'upload-curl-error28' => "Dépassement du délai lors de l'import",
 'upload-curl-error28-text' => 'Le site a mis trop longtemps à répondre. Vérifiez que le site est en ligne, attendez un peu et réessayez. Vous pouvez aussi réessayer à une heure de moindre affluence.',
 
@@ -2013,7 +2019,7 @@ Quand elle est filtrée par utilisateur, seuls les fichiers dont la version la p
 # File description page
 'file-anchor-link' => 'Fichier',
 'filehist' => 'Historique du fichier',
-'filehist-help' => 'Cliquer sur une date et heure pour voir le fichier tel qu’il était à ce moment-là.',
+'filehist-help' => "Cliquer sur une date et heure pour voir le fichier tel qu'il était à ce moment-là.",
 'filehist-deleteall' => 'supprimer tout',
 'filehist-deleteone' => 'supprimer',
 'filehist-revert' => 'rétablir',
@@ -2029,24 +2035,24 @@ Quand elle est filtrée par utilisateur, seuls les fichiers dont la version la p
 'filehist-missing' => 'Fichier manquant',
 'imagelinks' => 'Utilisation du fichier',
 'linkstoimage' => '{{PLURAL:$1|La page suivante utilise|Les $1 pages suivantes utilisent}} ce fichier :',
-'linkstoimage-more' => 'Plus {{PLURAL:$1|d’une page utilise|de $1 pages utilisent}} ce fichier.
+'linkstoimage-more' => "Plus {{PLURAL:$1|d'une page utilise|de $1 pages utilisent}} ce fichier.
 La liste suivante affiche seulement {{PLURAL:$1|la première page qui utilise|les $1 premières pages qui utilisent}} ce fichier.
-Une [[Special:WhatLinksHere/$2|liste complète]] est disponible.',
-'nolinkstoimage' => 'Aucune page n’utilise ce fichier.',
+Une [[Special:WhatLinksHere/$2|liste complète]] est disponible.",
+'nolinkstoimage' => "Aucune page n'utilise ce fichier.",
 'morelinkstoimage' => 'Voir [[Special:WhatLinksHere/$1|plus de liens]] vers ce fichier.',
 'linkstoimage-redirect' => '$1 (redirection de fichier) $2',
 'duplicatesoffile' => '{{PLURAL:$1|Le fichier suivant est un duplicata|Les fichiers suivants sont des duplicatas}} de celui-ci ([[Special:FileDuplicateSearch/$2|plus de détails]]) :',
-'sharedupload' => 'Ce fichier provient de : $1. Il peut être utilisé par d’autres projets.',
-'sharedupload-desc-there' => 'Ce fichier provient de : $1. Il peut être utilisé par d’autres projets.
-Veuillez consulter [$2 sa page de description] pour plus d’informations.',
-'sharedupload-desc-here' => 'Ce fichier provient de $1. Il peut être utilisé par d’autres projets.
-Sa description sur sa [$2 page de description] est affichée ci-dessous.',
-'sharedupload-desc-edit' => 'Ce fichier provient de : $1. Il peut être utilisé par d’autres projets.
-Vous voulez peut-être modifier la description sur sa [$2 page de description].',
-'sharedupload-desc-create' => 'Ce fichier provient de : $1. Il peut être utilisé par d’autres projets.
-Vous voulez peut-être modifier la description sur sa [$2 page de description].',
+'sharedupload' => "Ce fichier provient de : $1. Il peut être utilisé par d'autres projets.",
+'sharedupload-desc-there' => "Ce fichier provient de : $1. Il peut être utilisé par d'autres projets.
+Veuillez consulter [$2 sa page de description] pour plus d'informations.",
+'sharedupload-desc-here' => "Ce fichier provient de $1. Il peut être utilisé par d'autres projets.
+Sa description sur sa [$2 page de description] est affichée ci-dessous.",
+'sharedupload-desc-edit' => "Ce fichier provient de : $1. Il peut être utilisé par d'autres projets.
+Vous voulez peut-être modifier la description sur sa [$2 page de description].",
+'sharedupload-desc-create' => "Ce fichier provient de : $1. Il peut être utilisé par d'autres projets.
+Vous voulez peut-être modifier la description sur sa [$2 page de description].",
 'filepage-nofile' => 'Aucun fichier de ce nom existe.',
-'filepage-nofile-link' => 'Aucun fichier de ce nom n’existe, mais vous pouvez [$1 en importer un].',
+'filepage-nofile-link' => "Aucun fichier de ce nom n'existe, mais vous pouvez [$1 en importer un].",
 'uploadnewversion-linktext' => 'Importer une nouvelle version de ce fichier',
 'shared-repo-from' => 'de : $1',
 'shared-repo' => 'un dépôt partagé',
@@ -2062,24 +2068,24 @@ Vous voulez peut-être modifier la description sur sa [$2 page de description].'
 'filerevert-defaultcomment' => 'Version du $1 à $2 rétablie',
 'filerevert-submit' => 'Rétablir',
 'filerevert-success' => "'''[[Media:$1|$1]]''' a été rétabli à [$4 la version du $2 à $3].",
-'filerevert-badversion' => 'Il n’y a pas localement de version antérieure du fichier qui porte la date indiquée.',
+'filerevert-badversion' => "Il n'y a pas localement de version antérieure du fichier qui porte la date indiquée.",
 
 # File deletion
 'filedelete' => 'Supprimer $1',
 'filedelete-legend' => 'Supprimer le fichier',
 'filedelete-intro' => "Vous êtes sur le point de supprimer '''[[Media:$1|$1]]''' ainsi que tout son historique.",
-'filedelete-intro-old' => "Vous êtes en train deffacer la version de '''[[Media:$1|$1]]''' du [$4 $2 à $3].",
+'filedelete-intro-old' => "Vous êtes en train d'effacer la version de '''[[Media:$1|$1]]''' du [$4 $2 à $3].",
 'filedelete-comment' => 'Motif :',
 'filedelete-submit' => 'Supprimer',
 'filedelete-success' => "'''$1''' a été supprimé.",
 'filedelete-success-old' => "La version de '''[[Media:$1|$1]]''' du $2 à $3 a été supprimée.",
-'filedelete-nofile' => "'''$1''' nexiste pas.",
-'filedelete-nofile-old' => "Il nexiste aucune version archivée de '''$1''' avec les attributs indiqués.",
+'filedelete-nofile' => "'''$1''' n'existe pas.",
+'filedelete-nofile-old' => "Il n'existe aucune version archivée de '''$1''' avec les attributs indiqués.",
 'filedelete-otherreason' => 'Motif autre / supplémentaire :',
 'filedelete-reason-otherlist' => 'Autre motif',
-'filedelete-reason-dropdown' => '* Motifs fréquents de suppression de fichiers
-** Violation du droit dauteur
-** Fichier dupliqué',
+'filedelete-reason-dropdown' => "* Motifs fréquents de suppression de fichiers
+** Violation du droit d'auteur
+** Fichier dupliqué",
 'filedelete-edit-reasonlist' => 'Modifier les motifs fréquents de suppression',
 'filedelete-maintenance' => 'La suppression et restauration de fichiers est temporairement désactivée durant la maintenance.',
 'filedelete-maintenance-title' => 'Impossible de supprimer le fichier',
@@ -2092,24 +2098,24 @@ Entrée : ''typedecontenu''/''sous-type'', par exemple <code>image/jpeg</code>."
 'download' => 'télécharger',
 
 # Unwatched pages
-'unwatchedpages' => 'Pages ne faisant partie d’aucune liste de suivi',
+'unwatchedpages' => "Pages ne faisant partie d'aucune liste de suivi",
 
 # List redirects
 'listredirects' => 'Liste des redirections',
 
 # Unused templates
 'unusedtemplates' => 'Modèles inutilisés',
-'unusedtemplatestext' => 'Cette page liste toutes les pages de l’espace de noms « {{ns:template}} » qui ne sont incluses dans aucune autre page.
-N’oubliez pas de vérifier s’il n’y a pas d’autres liens vers les modèles avant de les supprimer.',
+'unusedtemplatestext' => "Cette page liste toutes les pages de l'espace de noms « {{ns:template}} » qui ne sont incluses dans aucune autre page.
+N'oubliez pas de vérifier s'il n'y a pas d'autres liens vers les modèles avant de les supprimer.",
 'unusedtemplateswlh' => 'autres liens',
 
 # Random page
 'randompage' => 'Page au hasard',
-'randompage-nopages' => 'Il n’y a aucune page dans {{PLURAL:$2|l’espace de noms|les espaces de noms}} : $1.',
+'randompage-nopages' => "Il n'y a aucune page dans {{PLURAL:$2|l'espace de noms|les espaces de noms}} : $1.",
 
 # Random redirect
 'randomredirect' => 'Page de redirection au hasard',
-'randomredirect-nopages' => 'Il n’y a aucune page de redirection dans l’espace de noms « $1 ».',
+'randomredirect-nopages' => "Il n'y a aucune page de redirection dans l'espace de noms « $1 ».",
 
 # Statistics
 'statistics' => 'Statistiques',
@@ -2122,7 +2128,7 @@ N’oubliez pas de vérifier s’il n’y a pas d’autres liens vers les modèl
 'statistics-pages' => 'Pages',
 'statistics-pages-desc' => 'Toutes les pages du wiki, y compris les pages de discussion, les redirections, etc.',
 'statistics-files' => 'Fichers importés',
-'statistics-edits' => 'Modifications de pages depuis l’installation de {{SITENAME}}',
+'statistics-edits' => "Modifications de pages depuis l'installation de {{SITENAME}}",
 'statistics-edits-average' => 'Nombre moyen de modifications par page',
 'statistics-views-total' => 'Visites',
 'statistics-views-total-desc' => 'Les vues des pages non existantes et des pages spéciales ne sont pas incluses',
@@ -2132,11 +2138,11 @@ N’oubliez pas de vérifier s’il n’y a pas d’autres liens vers les modèl
 'statistics-users-active-desc' => 'Utilisateurs ayant fait au moins une action durant {{PLURAL:$1|le dernier jours|les $1 derniers jours}}',
 'statistics-mostpopular' => 'Pages les plus consultées',
 
-'disambiguations' => 'Pages ayant des liens vers des pages d’homonymie',
+'disambiguations' => "Pages ayant des liens vers des pages d'homonymie",
 'disambiguationspage' => 'Template:Homonymie',
-'disambiguations-text' => "Les pages suivantes comportent au moins un lien vers une '''page dhomonymie'''.
+'disambiguations-text' => "Les pages suivantes comportent au moins un lien vers une '''page d'homonymie'''.
 Elles devraient plutôt pointer vers le bon article.<br />
-Une page est considérée comme une page dhomonymie si elle utilise un modèle lié à [[MediaWiki:Disambiguationspage]]",
+Une page est considérée comme une page d'homonymie si elle utilise un modèle lié à [[MediaWiki:Disambiguationspage]]",
 
 'doubleredirects' => 'Doubles redirections',
 'doubleredirectstext' => 'Voici une liste des pages qui redirigent vers des pages qui sont elles-mêmes des pages de redirection.
@@ -2152,7 +2158,7 @@ Les entrées <del>barrées</del> ont été résolues.',
 'brokenredirects-delete' => 'supprimer',
 
 'withoutinterwiki' => 'Pages sans liens inter-langues',
-'withoutinterwiki-summary' => 'Les pages suivantes ne possèdent pas de liens vers d’autres langues :',
+'withoutinterwiki-summary' => "Les pages suivantes ne possèdent pas de liens vers d'autres langues :",
 'withoutinterwiki-legend' => 'Préfixe',
 'withoutinterwiki-submit' => 'Afficher',
 
@@ -2168,9 +2174,9 @@ Les entrées <del>barrées</del> ont été résolues.',
 'nviews' => '$1 consultation{{PLURAL:$1||s}}',
 'nimagelinks' => 'Utilisé sur $1 {{PLURAL:$1|page|pages}}',
 'ntransclusions' => 'Utilisé sur $1 {{PLURAL:$1|page|pages}}',
-'specialpage-empty' => 'Il n’y a aucun résultat à afficher.',
+'specialpage-empty' => "Il n'y a aucun résultat à afficher.",
 'lonelypages' => 'Pages orphelines',
-'lonelypagestext' => 'Les pages suivantes ne sont ni pointées, ni incluses par d’autres pages du wiki.',
+'lonelypagestext' => "Les pages suivantes ne sont ni pointées, ni incluses par d'autres pages du wiki.",
 'uncategorizedpages' => 'Pages sans catégories',
 'uncategorizedcategories' => 'Catégories sans catégories',
 'uncategorizedimages' => 'Fichiers sans catégories',
@@ -2182,8 +2188,8 @@ Les entrées <del>barrées</del> ont été résolues.',
 'wantedpages' => 'Pages les plus demandées',
 'wantedpages-badtitle' => 'Titre invalide dans les résultats : $1',
 'wantedfiles' => 'Fichiers les plus demandés',
-'wantedfiletext-cat' => 'Les fichiers suivants sont utilisés, mais n’existent pas. Les fichiers d’autres dépôts peuvent être listés malgré qu’ils existent. Tous ces faux positifs seront <del>barrés</del>. En outre, les pages qui intègrent des fichiers qui n’existent pas sont répertoriées dans [[:$1]].',
-'wantedfiletext-nocat' => 'Les fichiers suivants sont utilisés, mais n’existent pas. Les fichiers d’autres dépôts peuvent être listés malgré qu’ils existent. Tous ces faux positifs seront <del>barrés</del>.',
+'wantedfiletext-cat' => "Les fichiers suivants sont utilisés, mais n'existent pas. Les fichiers d'autres dépôts peuvent être listés malgré qu'ils existent. Tous ces faux positifs seront <del>barrés</del>. En outre, les pages qui intègrent des fichiers qui n'existent pas sont répertoriées dans [[:$1]].",
+'wantedfiletext-nocat' => "Les fichiers suivants sont utilisés, mais n'existent pas. Les fichiers d'autres dépôts peuvent être listés malgré qu'ils existent. Tous ces faux positifs seront <del>barrés</del>.",
 'wantedtemplates' => 'Modèles demandés',
 'mostlinked' => 'Pages les plus liées',
 'mostlinkedcategories' => 'Catégories les plus utilisées',
@@ -2197,32 +2203,32 @@ Les entrées <del>barrées</del> ont été résolues.',
 'shortpages' => 'Pages courtes',
 'longpages' => 'Pages longues',
 'deadendpages' => 'Pages en impasse',
-'deadendpagestext' => 'Les pages suivantes ne contiennent aucun lien vers d’autres pages du wiki.',
+'deadendpagestext' => "Les pages suivantes ne contiennent aucun lien vers d'autres pages du wiki.",
 'protectedpages' => 'Pages protégées',
 'protectedpages-indef' => 'Uniquement les protections permanentes',
 'protectedpages-cascade' => 'Uniquement les protections en cascade',
 'protectedpagestext' => 'Les pages suivantes sont protégées contre les modifications ou le déplacement.',
-'protectedpagesempty' => 'Aucune page n’est protégée de cette façon.',
+'protectedpagesempty' => "Aucune page n'est protégée de cette façon.",
 'protectedtitles' => 'Titres protégés',
 'protectedtitlestext' => 'Les titres suivants sont protégés à la création',
-'protectedtitlesempty' => 'Aucun titre n’est actuellement protégé avec ces paramètres.',
+'protectedtitlesempty' => "Aucun titre n'est actuellement protégé avec ces paramètres.",
 'listusers' => 'Liste des utilisateurs',
 'listusers-editsonly' => 'Ne montrer que les utilisateurs ayant au moins une contribution',
 'listusers-creationsort' => 'Trier par date de création',
 'usereditcount' => '$1 modification{{PLURAL:$1||s}}',
 'usercreated' => '{{GENDER:$3|Créé}} le $1 à $2',
 'newpages' => 'Nouvelles pages',
-'newpages-username' => 'Nom d’utilisateur :',
+'newpages-username' => "Nom d'utilisateur :",
 'ancientpages' => 'Pages les plus anciennement modifiées',
 'move' => 'Renommer',
 'movethispage' => 'Renommer cette page',
-'unusedimagestext' => 'Les fichiers suivants existent, mais ne sont inclus dans aucune page.
-Veuillez noter que d’autres sites peuvent avoir un lien direct vers un fichier, et donc qu’un fichier peut être listé ici alors qu’il est en réalité utilisé sur ces sites.',
+'unusedimagestext' => "Les fichiers suivants existent, mais ne sont inclus dans aucune page.
+Veuillez noter que d'autres sites peuvent avoir un lien direct vers un fichier, et donc qu'un fichier peut être listé ici alors qu'il est en réalité utilisé sur ces sites.",
 'unusedcategoriestext' => 'Les catégories suivantes existent mais aucune page ou catégorie ne les utilise.',
 'notargettitle' => 'Pas de cible',
-'notargettext' => 'Vous n’avez pas indiqué une page ou un utilisateur sur lequel vous souhaitez effectuer cette action.',
+'notargettext' => "Vous n'avez pas indiqué une page ou un utilisateur sur lequel vous souhaitez effectuer cette action.",
 'nopagetitle' => 'Aucune telle page cible',
-'nopagetext' => 'La page cible que vous avez indiquée n’existe pas.',
+'nopagetext' => "La page cible que vous avez indiquée n'existe pas.",
 'pager-newer-n' => '{{PLURAL:$1|plus récente|$1 plus récentes}}',
 'pager-older-n' => '{{PLURAL:$1|plus ancienne|$1 plus anciennes}}',
 'suppress' => 'Superviser',
@@ -2233,16 +2239,16 @@ Veuillez noter que d’autres sites peuvent avoir un lien direct vers un fichier
 'booksources-search-legend' => 'Rechercher parmi des ouvrages de référence',
 'booksources-isbn' => 'ISBN :',
 'booksources-go' => 'Lister',
-'booksources-text' => 'Voici une liste indicative et non exclusive de liens vers d’autres sites vendant des livres neufs et d’occasion et sur lesquels vous trouverez peut-être des informations sur les ouvrages que vous cherchez :',
-'booksources-invalid-isbn' => 'L’ISBN donné ne semble pas être correct ; vérifiez si vous avez fait une erreur en copiant la source originale.',
+'booksources-text' => "Voici une liste indicative et non exclusive de liens vers d'autres sites vendant des livres neufs et d'occasion et sur lesquels vous trouverez peut-être des informations sur les ouvrages que vous cherchez :",
+'booksources-invalid-isbn' => "L'ISBN donné ne semble pas être correct ; vérifiez si vous avez fait une erreur en copiant la source originale.",
 
 # Special:Log
 'specialloguserlabel' => 'Auteur :',
 'speciallogtitlelabel' => 'Cible (titre ou utilisateur):',
-'log' => 'Journaux d’opérations',
+'log' => "Journaux d'opérations",
 'all-logs-page' => 'Tous les journaux publics',
-'alllogstext' => 'Affichage combiné de tous les journaux disponibles sur {{SITENAME}}.<br />
-Vous pouvez personnaliser l’affichage en sélectionnant le type de journal, le nom d’utilisateur ou la page concernée (ces deux derniers étant sensibles à la casse).',
+'alllogstext' => "Affichage combiné de tous les journaux disponibles sur {{SITENAME}}.<br />
+Vous pouvez personnaliser l'affichage en sélectionnant le type de journal, le nom d'utilisateur ou la page concernée (ces deux derniers étant sensibles à la casse).",
 'logempty' => 'Aucune opération correspondante dans les journaux.',
 'log-title-wildcard' => 'Chercher parmi les titres commençant par ce texte',
 'showhideselectedlogentries' => 'Afficher/masquer les entrées de journal sélectionnées',
@@ -2253,16 +2259,16 @@ Vous pouvez personnaliser l’affichage en sélectionnant le type de journal, le
 'nextpage' => 'Page suivante ($1)',
 'prevpage' => 'Page précédente ($1)',
 'allpagesfrom' => 'Afficher les pages à partir de :',
-'allpagesto' => 'Afficher les pages jusqu’à :',
+'allpagesto' => "Afficher les pages jusqu'à :",
 'allarticles' => 'Toutes les pages',
-'allinnamespace' => 'Toutes les pages (dans l’espace de noms $1)',
-'allnotinnamespace' => 'Toutes les pages (hors de l’espace de noms $1)',
+'allinnamespace' => "Toutes les pages (dans l'espace de noms $1)",
+'allnotinnamespace' => "Toutes les pages (hors de l'espace de noms $1)",
 'allpagesprev' => 'Précédent',
 'allpagesnext' => 'Suivant',
 'allpagessubmit' => 'Lister',
 'allpagesprefix' => 'Afficher les pages commençant par :',
 'allpagesbadtitle' => 'Le titre de page indiqué est incorrect : il contient un préfixe inter-langue ou inter-wiki réservé, ou contient un ou plusieurs caractères inutilisables dans les titres.',
-'allpages-bad-ns' => '{{SITENAME}} n’a pas d’espace de noms « $1 ».',
+'allpages-bad-ns' => "{{SITENAME}} n'a pas d'espace de noms « $1 ».",
 'allpages-hide-redirects' => 'Masquer les redirections',
 
 # SpecialCachedPage
@@ -2276,7 +2282,7 @@ Vous pouvez personnaliser l’affichage en sélectionnant le type de journal, le
 [[Special:UnusedCategories|Les catégories inutilisées]] ne sont pas affichées ici.
 Voyez aussi [[Special:WantedCategories|les catégories demandées]].',
 'categoriesfrom' => 'Afficher les catégories à partir de :',
-'special-categories-sort-count' => 'tri par nombre d’éléments',
+'special-categories-sort-count' => "tri par nombre d'éléments",
 'special-categories-sort-abc' => 'tri alphabétique',
 
 # Special:DeletedContributions
@@ -2293,7 +2299,7 @@ Voyez aussi [[Special:WantedCategories|les catégories demandées]].',
 Ils nécessitent au moins un domaine de niveau supérieur, par exemple « *.org ».<br />
 Protocoles reconnus : <code>$1</code> (http:// par défaut si aucun protocole n'est indiqué).",
 'linksearch-line' => '$1 est lié depuis $2',
-'linksearch-error' => 'Les caractères jokers ne peuvent être utilisés qu’au début du nom de domaine de l’hôte.',
+'linksearch-error' => "Les caractères jokers ne peuvent être utilisés qu'au début du nom de domaine de l'hôte.",
 
 # Special:ListUsers
 'listusersfrom' => 'Afficher les utilisateurs à partir de :',
@@ -2312,12 +2318,12 @@ Protocoles reconnus : <code>$1</code> (http:// par défaut si aucun protocole n'
 
 # Special:Log/newusers
 'newuserlogpage' => 'Journal des créations de comptes utilisateur',
-'newuserlogpagetext' => 'Cette page affiche l’historique des créations de comptes utilisateur.',
+'newuserlogpagetext' => "Cette page affiche l'historique des créations de comptes utilisateur.",
 
 # Special:ListGroupRights
-'listgrouprights' => 'Droits des groupes d’utilisateurs',
-'listgrouprights-summary' => 'Cette page contient une liste des groupes définis sur ce wiki ainsi que les droits d’accès qui leur sont associés.
-Des [[{{MediaWiki:Listgrouprights-helppage}}|informations additionnelles]] peuvent exister au sujet des droits individuels.',
+'listgrouprights' => "Droits des groupes d'utilisateurs",
+'listgrouprights-summary' => "Cette page contient une liste des groupes définis sur ce wiki ainsi que les droits d'accès qui leur sont associés.
+Des [[{{MediaWiki:Listgrouprights-helppage}}|informations additionnelles]] peuvent exister au sujet des droits individuels.",
 'listgrouprights-key' => '*<span class="listgrouprights-granted">Droit octroyé</span>
 *<span class="listgrouprights-revoked">Droit révoqué</span>',
 'listgrouprights-group' => 'Groupe',
@@ -2328,31 +2334,31 @@ Des [[{{MediaWiki:Listgrouprights-helppage}}|informations additionnelles]] peuve
 'listgrouprights-removegroup' => 'Retirer des membres {{PLURAL:$2|du groupe|des groupes}} : $1',
 'listgrouprights-addgroup-all' => 'Ajouter des membres à tous les groupes',
 'listgrouprights-removegroup-all' => 'Retirer des membres de tous les groupes',
-'listgrouprights-addgroup-self' => 'Peut s’ajouter {{PLURAL:$2|le groupe|les groupes}} à son propre compte : $1',
+'listgrouprights-addgroup-self' => "Peut s'ajouter {{PLURAL:$2|le groupe|les groupes}} à son propre compte : $1",
 'listgrouprights-removegroup-self' => 'Peut se retirer {{PLURAL:$2|le groupe|les groupes}} de son propre compte : $1',
-'listgrouprights-addgroup-self-all' => 'Peut s’ajouter tous les groupes à son propre compte',
+'listgrouprights-addgroup-self-all' => "Peut s'ajouter tous les groupes à son propre compte",
 'listgrouprights-removegroup-self-all' => 'Peut se retirer tous les groupes de son propre compte',
 
 # E-mail user
-'mailnologin' => 'Pas d’adresse d’expéditeur',
-'mailnologintext' => 'Vous devez être [[Special:UserLogin|identifié]] et avoir indiqué une adresse électronique valide dans vos [[Special:Preferences|préférences]] pour pouvoir envoyer des courriels à d’autres utilisateurs.',
+'mailnologin' => "Pas d'adresse d'expéditeur",
+'mailnologintext' => "Vous devez être [[Special:UserLogin|identifié]] et avoir indiqué une adresse électronique valide dans vos [[Special:Preferences|préférences]] pour pouvoir envoyer des courriels à d'autres utilisateurs.",
 'emailuser' => 'Lui envoyer un courriel',
 'emailuser-title-target' => 'Envoyer un courriel à {{GENDER:$1|cet utilisateur|cette utilisatrice}}',
 'emailuser-title-notarget' => "Envoyer un courriel à l'utilisateur",
 'emailpage' => "Envoyer un courriel à l'utilisateur",
-'emailpagetext' => 'Vous pouvez utiliser le formulaire ci-dessous pour envoyer un courriel à {{GENDER:$1|cet utilisateur|cette utilisatrice}}.
-L’adresse électronique que vous avez indiquée dans [[Special:Preferences|vos préférences]] apparaîtra dans le champ « Expéditeur » de votre message ; ainsi, le destinataire pourra vous répondre directement.',
-'usermailererror' => 'Erreur dans l’objet du courriel :',
+'emailpagetext' => "Vous pouvez utiliser le formulaire ci-dessous pour envoyer un courriel à {{GENDER:$1|cet utilisateur|cette utilisatrice}}.
+L'adresse électronique que vous avez indiquée dans [[Special:Preferences|vos préférences]] apparaîtra dans le champ « Expéditeur » de votre message ; ainsi, le destinataire pourra vous répondre directement.",
+'usermailererror' => "Erreur dans l'objet du courriel :",
 'defemailsubject' => "{{SITENAME}} Courriel de l'utilisateur « $1 »",
-'usermaildisabled' => 'L’envoi de courriels entre utilisateurs est désactivé',
-'usermaildisabledtext' => 'Vous ne pouvez pas envoyer de courriels à d’autres utilisateurs sur ce wiki',
+'usermaildisabled' => "L'envoi de courriels entre utilisateurs est désactivé",
+'usermaildisabledtext' => "Vous ne pouvez pas envoyer de courriels à d'autres utilisateurs sur ce wiki",
 'noemailtitle' => 'Aucune adresse de courriel',
-'noemailtext' => 'Cet utilisateur n’a pas spécifié une adresse de courriel valide.',
+'noemailtext' => "Cet utilisateur n'a pas spécifié une adresse de courriel valide.",
 'nowikiemailtitle' => 'Pas de courriel autorisé',
-'nowikiemailtext' => 'Cet utilisateur a choisi de ne pas recevoir de courriel de la part d’autres utilisateurs.',
+'nowikiemailtext' => "Cet utilisateur a choisi de ne pas recevoir de courriel de la part d'autres utilisateurs.",
 'emailnotarget' => "Nom d'utilisateur du destinataire inexistant ou invalide.",
 'emailtarget' => "Entrez le nom d'utilisateur du destinataire",
-'emailusername' => 'Nom d’utilisateur :',
+'emailusername' => "Nom d'utilisateur :",
 'emailusernamesubmit' => 'Soumettre',
 'email-legend' => 'Envoyer un courriel à un autre utilisateur de {{SITENAME}}',
 'emailfrom' => 'De :',
@@ -2360,7 +2366,7 @@ L’adresse électronique que vous avez indiquée dans [[Special:Preferences|vos
 'emailsubject' => 'Objet :',
 'emailmessage' => 'Message :',
 'emailsend' => 'Envoyer',
-'emailccme' => 'M’envoyer par courriel une copie de mon message.',
+'emailccme' => "M'envoyer par courriel une copie de mon message.",
 'emailccsubject' => 'Copie de votre message à $1 : $2',
 'emailsent' => 'Courriel envoyé',
 'emailsenttext' => 'Votre message a été envoyé par courriel.',
@@ -2386,16 +2392,16 @@ L’adresse électronique que vous avez indiquée dans [[Special:Preferences|vos
 'watchthispage' => 'Suivre cette page',
 'unwatch' => 'Ne plus suivre',
 'unwatchthispage' => 'Ne plus suivre',
-'notanarticle' => 'Ce n’est pas une page de contenu',
+'notanarticle' => "Ce n'est pas une page de contenu",
 'notvisiblerev' => 'La version a été supprimée',
-'watchnochange' => 'Aucun des éléments que vous suivez n’a été modifié durant la période affichée.',
+'watchnochange' => "Aucun des éléments que vous suivez n'a été modifié durant la période affichée.",
 'watchlist-details' => 'Votre liste de suivi référence $1 page{{PLURAL:$1||s}}, sans compter les pages de discussion.',
 'wlheader-enotif' => '* La notification par courriel est activée.',
 'wlheader-showupdated' => "* Les pages qui ont été modifiées depuis votre dernière visite sont affichées en '''gras'''.",
 'watchmethod-recent' => 'vérification des modifications récentes pour y trouver des pages suivies',
 'watchmethod-list' => 'vérification des pages suivies pour y trouver des modifications récentes',
 'watchlistcontains' => 'Votre liste de suivi référence $1 page{{PLURAL:$1||s}}.',
-'iteminvalidname' => 'Problème avec l’élément « $1 » : le nom est invalide.',
+'iteminvalidname' => "Problème avec l'élément « $1 » : le nom est invalide.",
 'wlnote' => "Ci-dessous {{PLURAL:$1|figure la dernière modification effectuée|figurent les '''$1''' dernières modifications effectuées}} durant {{PLURAL:$2|la dernière heure|les '''$2''' dernières heures}}, depuis $3, $4.",
 'wlshowlast' => 'Montrer les dernières $1 heures, les derniers $2 jours ou bien $3',
 'watchlist-options' => 'Options de la liste de suivi',
@@ -2427,7 +2433,7 @@ Contactez ce contributeur :
 courriel : $PAGEEDITOR_EMAIL
 wiki : $PAGEEDITOR_WIKI
 
-Il n’y aura pas d’autres notifications en cas de changements ultérieurs, à moins que vous ne visitiez cette page.
+Il n\'y aura pas d\'autres notifications en cas de changements ultérieurs, à moins que vous ne visitiez cette page.
 Vous pouvez aussi réinitialiser les drapeaux de notification pour toutes les pages de votre liste de suivi.
 
              Votre système de notification de {{SITENAME}}
@@ -2455,9 +2461,9 @@ Retour et assistance :
 'delete-confirm' => 'Supprimer « $1 »',
 'delete-legend' => 'Supprimer',
 'historywarning' => "'''Attention :''' la page que vous êtes sur le point de supprimer a un historique avec environ $1 {{PLURAL:$1|version|versions}} :",
-'confirmdeletetext' => 'Vous êtes sur le point de supprimer une page ou un fichier, ainsi que toutes ses versions antérieures historisées. Veuillez confirmer que c’est bien là ce que vous voulez faire, que vous en comprenez les conséquences et que vous faites ceci en accord avec les [[{{MediaWiki:Policy-url}}|règles internes]].',
+'confirmdeletetext' => "Vous êtes sur le point de supprimer une page ou un fichier, ainsi que toutes ses versions antérieures historisées. Veuillez confirmer que c'est bien là ce que vous voulez faire, que vous en comprenez les conséquences et que vous faites ceci en accord avec les [[{{MediaWiki:Policy-url}}|règles internes]].",
 'actioncomplete' => 'Action effectuée',
-'actionfailed' => 'L’action a échoué',
+'actionfailed' => "L'action a échoué",
 'deletedtext' => '« $1 » a été supprimée.
 Voir $2 pour une liste des suppressions récentes.',
 'dellogpage' => 'Journal des suppressions de page',
@@ -2467,16 +2473,16 @@ Voir $2 pour une liste des suppressions récentes.',
 'deletecomment' => 'Motif :',
 'deleteotherreason' => 'Motif autre ou supplémentaire :',
 'deletereasonotherlist' => 'Autre motif',
-'deletereason-dropdown' => '* Motifs de suppression les plus courants
-** Demande de lauteur
-** Violation des droits dauteur
-** Vandalisme',
+'deletereason-dropdown' => "* Motifs de suppression les plus courants
+** Demande de l'auteur
+** Violation des droits d'auteur
+** Vandalisme",
 'delete-edit-reasonlist' => 'Modifier les motifs de suppression de page',
 'delete-toobig' => 'Cette page possède un historique important de modifications, dépassant $1 version{{PLURAL:$1||s}}.
 La suppression de telles pages a été restreinte pour prévenir des perturbations accidentelles de {{SITENAME}}.',
-'delete-warning-toobig' => 'Cette page possède un historique important de modifications, dépassant $1 version{{PLURAL:$1||s}}.
+'delete-warning-toobig' => "Cette page possède un historique important de modifications, dépassant $1 version{{PLURAL:$1||s}}.
 La supprimer peut perturber le fonctionnement de la base de données de {{SITENAME}} ;
-veuiller ne procéder qu’avec prudence.',
+veuiller ne procéder qu'avec prudence.",
 
 # Rollback
 'rollback' => 'Révoquer les modifications',
@@ -2487,21 +2493,21 @@ veuiller ne procéder qu’avec prudence.',
 'rollbackfailed' => 'La révocation a échoué',
 'cantrollback' => 'Impossible de révoquer la modification ;
 le dernier contributeur est le seul auteur de cette page.',
-'alreadyrolled' => 'Impossible de révoquer la dernière modification de la page « [[:$1]] » effectuée par [[User:$2|$2]] ([[User talk:$2|Discuter]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ;
-quelqu’un d’autre a déjà modifié ou révoqué la page.
+'alreadyrolled' => "Impossible de révoquer la dernière modification de la page « [[:$1]] » effectuée par [[User:$2|$2]] ([[User talk:$2|Discuter]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) ;
+quelqu'un d'autre a déjà modifié ou révoqué la page.
 
-La dernière modification de la page a été effectuée par [[User:$3|$3]] ([[User talk:$3|Discuter]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
+La dernière modification de la page a été effectuée par [[User:$3|$3]] ([[User talk:$3|Discuter]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
 'editcomment' => "Le résumé de la modification était : « ''$1'' ».",
 'revertpage' => 'Révocation des modifications de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussion]]) vers la dernière version de [[User:$1|$1]]',
-'revertpage-nouser' => 'Révocation des modifications par (nom d’utilisateur supprimé) à la dernière version par [[User:$1|$1]]',
+'revertpage-nouser' => "Révocation des modifications par (nom d'utilisateur supprimé) à la dernière version par [[User:$1|$1]]",
 'rollback-success' => 'Révocation des modifications effectuées par $1 ;
 rétablissement de la dernière version par $2.',
 
 # Edit tokens
 'sessionfailure-title' => 'Erreur de session',
-'sessionfailure' => 'Votre session de connexion semble avoir des problèmes ;
-cette action a été annulée en prévention dun piratage de session.
-Veuillez cliquer sur « Précédent », rechargez la page d’où vous venez, puis réessayez.',
+'sessionfailure' => "Votre session de connexion semble avoir des problèmes ;
+cette action a été annulée en prévention d'un piratage de session.
+Veuillez cliquer sur « Précédent », rechargez la page d'où vous venez, puis réessayez.",
 
 # Protect
 'protectlogpage' => 'Journal des protections',
@@ -2518,18 +2524,18 @@ Consultez la [[Special:ProtectedPages|liste des pages protégées]] pour la list
 'protect-badnamespace-text' => 'Les pages dans cet espace de noms ne peuvent pas être protégées.',
 'protect-legend' => 'Confirmer la protection',
 'protectcomment' => 'Motif :',
-'protectexpiry' => 'Date d’expiration :',
-'protect_expiry_invalid' => 'La date d’expiration est invalide.',
-'protect_expiry_old' => 'La date d’expiration est déjà passée.',
-'protect-unchain-permissions' => 'Déverrouiller davantage d’options de protection',
+'protectexpiry' => "Date d'expiration :",
+'protect_expiry_invalid' => "La date d'expiration est invalide.",
+'protect_expiry_old' => "La date d'expiration est déjà passée.",
+'protect-unchain-permissions' => "Déverrouiller davantage d'options de protection",
 'protect-text' => "Vous pouvez consulter et modifier le niveau de protection de la page '''$1'''.",
 'protect-locked-blocked' => "Vous ne pouvez pas modifier les niveaux de protection tant que vous êtes bloqué{{GENDER:||e|(e)}}.
 Voici les réglages actuels de la page '''$1''' :",
 'protect-locked-dblock' => "Le niveau de protection ne peut pas être modifié car la base de données est verrouillée.
 Voici les réglages actuels de la page '''$1''' :",
-'protect-locked-access' => "Vous navez pas les droits nécessaires pour modifier les niveaux de protection de pages.
+'protect-locked-access' => "Vous n'avez pas les droits nécessaires pour modifier les niveaux de protection de pages.
 Voici les réglages actuels de la page '''$1''' :",
-'protect-cascadeon' => 'Cette page est protégée car incluse dans {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l’option « protection en cascade » activée. Vous pouvez changer le niveau de protection de cette page sans que cela n’affecte la protection en cascade.',
+'protect-cascadeon' => "Cette page est protégée car incluse dans {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l'option « protection en cascade » activée. Vous pouvez changer le niveau de protection de cette page sans que cela n'affecte la protection en cascade.",
 'protect-default' => 'Autoriser tous les utilisateurs',
 'protect-fallback' => 'Nécessite la permission « $1 »',
 'protect-level-autoconfirmed' => 'Bloquer les nouveaux utilisateurs et les utilisateurs anonymes',
@@ -2539,10 +2545,10 @@ Voici les réglages actuels de la page '''$1''' :",
 'protect-expiring-local' => 'expire le $1',
 'protect-expiry-indefinite' => 'infini',
 'protect-cascade' => 'Protéger les pages incluses dans celle-ci (protection en cascade)',
-'protect-cantedit' => 'Vous ne pouvez pas changer les niveaux de protection de cette page car vous n’avez pas la permission de la modifier.',
-'protect-othertime' => 'Autre date d’expiration :',
-'protect-othertime-op' => 'autre date d’expiration',
-'protect-existing-expiry' => 'Date d’expiration existante : $2 à $3',
+'protect-cantedit' => "Vous ne pouvez pas changer les niveaux de protection de cette page car vous n'avez pas la permission de la modifier.",
+'protect-othertime' => "Autre date d'expiration :",
+'protect-othertime-op' => "autre date d'expiration",
+'protect-existing-expiry' => "Date d'expiration existante : $2 à $3",
 'protect-otherreason' => 'Motif autre ou supplémentaire :',
 'protect-otherreason-op' => 'Autre motif',
 'protect-dropdown' => '* Motifs de protection courants
@@ -2574,22 +2580,22 @@ Voici les réglages actuels de la page '''$1''' :",
 'undeletepage' => 'Voir et restaurer des pages supprimées',
 'undeletepagetitle' => "'''La liste suivante contient des versions supprimées de [[:$1|$1]]'''.",
 'viewdeletedpage' => 'Voir les pages supprimées',
-'undeletepagetext' => '{{PLURAL:$1|La page suivante a été supprimée et se trouve|Les pages suivantes ont été supprimées et se trouvent}} dans la base de données archive, d’où {{PLURAL:$1|elle peut|elles peuvent}} encore être restaurée{{PLURAL:$1||s}}.
-L’archive peut être nettoyée périodiquement.',
+'undeletepagetext' => "{{PLURAL:$1|La page suivante a été supprimée et se trouve|Les pages suivantes ont été supprimées et se trouvent}} dans la base de données archive, d'où {{PLURAL:$1|elle peut|elles peuvent}} encore être restaurée{{PLURAL:$1||s}}.
+L'archive peut être nettoyée périodiquement.",
 'undelete-fieldset-title' => 'Restaurer les versions',
-'undeleteextrahelp' => "Pour restaurer lhistorique complet de cette page, laissez toutes les cases décochées et cliquez sur '''''Restaurer'''''.
+'undeleteextrahelp' => "Pour restaurer l'historique complet de cette page, laissez toutes les cases décochées et cliquez sur '''''Restaurer'''''.
 Pour effectuer une restauration partielle, cochez les cases correspondant aux versions à rétablir, puis cliquez sur '''''Restaurer'''''.",
 'undeleterevisions' => '$1 {{PLURAL:$1|version archivée|versions archivées}}',
-'undeletehistory' => 'Si vous restaurez la page, toutes les versions seront replacées dans l’historique.
-Si une nouvelle page avec le même nom a été créée depuis la suppression, les versions restaurées apparaîtront dans l’historique antérieur et la version courante ne sera pas automatiquement remplacée.',
+'undeletehistory' => "Si vous restaurez la page, toutes les versions seront replacées dans l'historique.
+Si une nouvelle page avec le même nom a été créée depuis la suppression, les versions restaurées apparaîtront dans l'historique antérieur et la version courante ne sera pas automatiquement remplacée.",
 'undeleterevdel' => 'La restauration ne sera pas effectuée si, au final, la version la plus récente de la page ou du fichier reste partiellement supprimée.
 Dans de tels cas, vous devez décocher ou démasquer les versions effacées les plus récentes (en tête de liste).',
-'undeletehistorynoadmin' => 'Cette page a été supprimée.
-Le motif de la suppression est indiqué dans le résumé ci-dessous, avec les détails des utilisateurs qui lont modifié avant sa suppression.
-Le contenu effectif de ces versions supprimées n’est accessible qu’aux administrateurs.',
+'undeletehistorynoadmin' => "Cette page a été supprimée.
+Le motif de la suppression est indiqué dans le résumé ci-dessous, avec les détails des utilisateurs qui l'ont modifié avant sa suppression.
+Le contenu effectif de ces versions supprimées n'est accessible qu'aux administrateurs.",
 'undelete-revision' => 'Version supprimée de $1 (version du $4 à $5) par $3 :',
-'undeleterevision-missing' => 'Version incorrecte ou manquante.
-Vous avez peut-être un mauvais lien, ou la version a pu être restaurée ou supprimée de l’archive.',
+'undeleterevision-missing' => "Version incorrecte ou manquante.
+Vous avez peut-être un mauvais lien, ou la version a pu être restaurée ou supprimée de l'archive.",
 'undelete-nodiff' => 'Aucune version précédente trouvée.',
 'undeletebtn' => 'Restaurer',
 'undeletelink' => 'visualiser/rétablir',
@@ -2610,12 +2616,12 @@ Consultez le [[Special:Log/delete|journal des suppressions]] pour obtenir la lis
 'undelete-search-box' => 'Rechercher des pages supprimées',
 'undelete-search-prefix' => 'Montrer les pages commençant par :',
 'undelete-search-submit' => 'Rechercher',
-'undelete-no-results' => 'Aucune page correspondante n’a été trouvée dans les archives de suppression.',
+'undelete-no-results' => "Aucune page correspondante n'a été trouvée dans les archives de suppression.",
 'undelete-filename-mismatch' => 'Impossible de restaurer la version du fichier datée du $1 : le nom de fichier ne correspond pas.',
 'undelete-bad-store-key' => 'Impossible de restaurer la version du fichier datée du $1 : le fichier était absent avant la suppression.',
-'undelete-cleanup-error' => 'Erreur lors de la suppression du fichier d’archive inutilisé « $1 ».',
-'undelete-missing-filearchive' => 'Impossible de restaurer le fichier d’archive avec l’identifiant $1 parce qu’il n’est pas dans la base de données.
-Il a peut-être déjà été restauré.',
+'undelete-cleanup-error' => "Erreur lors de la suppression du fichier d'archive inutilisé « $1 ».",
+'undelete-missing-filearchive' => "Impossible de restaurer le fichier d'archive avec l'identifiant $1 parce qu'il n'est pas dans la base de données.
+Il a peut-être déjà été restauré.",
 'undelete-error' => "Page d'erreur d'annulation",
 'undelete-error-short' => 'Erreur lors de la restauration du fichier : $1',
 'undelete-error-long' => 'Des erreurs ont été rencontrées lors de la restauration du fichier :
@@ -2634,28 +2640,28 @@ $1',
 
 # Contributions
 'contributions' => "Contributions de l'utilisateur",
-'contributions-title' => 'Liste des contributions de l’utilisateur $1',
+'contributions-title' => "Liste des contributions de l'utilisateur $1",
 'mycontris' => 'Contributions',
 'contribsub2' => 'Pour $1 ($2)',
-'nocontribs' => 'Aucune modification correspondant à ces critères n’a été trouvée.',
+'nocontribs' => "Aucune modification correspondant à ces critères n'a été trouvée.",
 'uctop' => '(dernière)',
 'month' => 'À partir du mois (et précédents) :',
 'year' => "À partir de l'année (et précédentes) :",
 
 'sp-contributions-newbies' => 'Ne montrer que les contributions des nouveaux utilisateurs',
 'sp-contributions-newbies-sub' => 'Parmi les nouveaux comptes',
-'sp-contributions-newbies-title' => 'Contributions d’utilisateurs parmi les nouveaux comptes',
+'sp-contributions-newbies-title' => "Contributions d'utilisateurs parmi les nouveaux comptes",
 'sp-contributions-blocklog' => 'journal des blocages',
 'sp-contributions-deleted' => 'contributions supprimées',
 'sp-contributions-uploads' => 'imports',
 'sp-contributions-logs' => 'journaux',
 'sp-contributions-talk' => 'discuter',
 'sp-contributions-userrights' => 'gérer les droits',
-'sp-contributions-blocked-notice' => 'Cet utilisateur est actuellement bloqué. La dernière entrée du journal des blocages est indiquée ci-dessous à titre d’information :',
-'sp-contributions-blocked-notice-anon' => 'Cette adresse IP est actuellement bloquée.
-La dernière entrée du journal des blocages est indiquée ci-dessous à titre d’information :',
+'sp-contributions-blocked-notice' => "Cet utilisateur est actuellement bloqué. La dernière entrée du journal des blocages est indiquée ci-dessous à titre d'information :",
+'sp-contributions-blocked-notice-anon' => "Cette adresse IP est actuellement bloquée.
+La dernière entrée du journal des blocages est indiquée ci-dessous à titre d'information :",
 'sp-contributions-search' => 'Rechercher les contributions',
-'sp-contributions-username' => 'Adresse IP ou nom d’utilisateur :',
+'sp-contributions-username' => "Adresse IP ou nom d'utilisateur :",
 'sp-contributions-toponly' => 'Ne montrer que les contributions qui sont les dernières des articles',
 'sp-contributions-submit' => 'Rechercher',
 
@@ -2665,7 +2671,7 @@ La dernière entrée du journal des blocages est indiquée ci-dessous à titre d
 'whatlinkshere-page' => 'Page :',
 'linkshere' => "Les pages ci-dessous contiennent un lien vers '''[[:$1]]''' :",
 'nolinkshere' => "Aucune page ne contient de lien vers '''[[:$1]]'''.",
-'nolinkshere-ns' => "Aucune page ne contient de lien vers '''[[:$1]]''' dans lespace de noms choisi.",
+'nolinkshere-ns' => "Aucune page ne contient de lien vers '''[[:$1]]''' dans l'espace de noms choisi.",
 'isredirect' => 'page de redirection',
 'istemplate' => 'inclusion',
 'isimage' => 'lien vers le fichier',
@@ -2680,36 +2686,36 @@ La dernière entrée du journal des blocages est indiquée ci-dessous à titre d
 
 # Block/unblock
 'autoblockid' => 'Blocage automatique #$1',
-'block' => 'Bloquer l’utilisateur',
+'block' => "Bloquer l'utilisateur",
 'unblock' => "Débloquer l'utilisateur",
-'blockip' => 'Bloquer l’utilisateur',
-'blockip-title' => 'Bloquer l’utilisateur',
-'blockip-legend' => 'Bloquer l’utilisateur',
-'blockiptext' => 'Utilisez le formulaire ci-dessous pour bloquer l’accès aux modifications faites à partir d’une adresse IP spécifique ou d’un nom d’utilisateur.
+'blockip' => "Bloquer l'utilisateur",
+'blockip-title' => "Bloquer l'utilisateur",
+'blockip-legend' => "Bloquer l'utilisateur",
+'blockiptext' => "Utilisez le formulaire ci-dessous pour bloquer l'accès aux modifications faites à partir d'une adresse IP spécifique ou d'un nom d'utilisateur.
 Une telle mesure ne devrait être prise que pour prévenir le vandalisme et en accord avec les [[{{MediaWiki:Policy-url}}|règles internes]].
-Donnez ci-dessous un motif précis (par exemple en citant les pages qui ont été vandalisées).',
+Donnez ci-dessous un motif précis (par exemple en citant les pages qui ont été vandalisées).",
 'ipadressorusername' => "Adresse IP ou nom d'utilisateur :",
 'ipbexpiry' => 'Durée avant expiration :',
 'ipbreason' => 'Motif :',
 'ipbreasonotherlist' => 'Autre motif',
-'ipbreason-dropdown' => '* Motifs de blocage les plus fréquents
+'ipbreason-dropdown' => "* Motifs de blocage les plus fréquents
 ** Insertion de fausses informations
 ** Suppression injustifiée de contenu des pages
 ** Insertion répétée de liens externes publicitaires (pollupostage)
 ** Insertion de contenu sans aucun sens et de déchets dans les pages
-** Tentative dintimidation ou harcèlement
-** Abus dutilisation de comptes multiples
-** Nom d’utilisateur inacceptable, injurieux ou diffamant',
+** Tentative d'intimidation ou harcèlement
+** Abus d'utilisation de comptes multiples
+** Nom d'utilisateur inacceptable, injurieux ou diffamant",
 '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',
+'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",
 'ipbsubmit' => 'Bloquer cet utilisateur',
 'ipbother' => 'Autre durée :',
 'ipboptions' => '2 heures:2 hours,1 jour:1 day,3 jours:3 days,1 semaine:1 week,2 semaines:2 weeks,1 mois:1 month,3 mois:3 months,6 mois:6 months,1 an:1 year,indéfiniment:infinite',
 'ipbotheroption' => 'autre',
 'ipbotherreason' => 'Motif différent ou supplémentaire :',
-'ipbhidename' => 'Masquer le nom d’utilisateur des modifications et des listes',
+'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ê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',
@@ -2719,14 +2725,14 @@ Donnez ci-dessous un motif précis (par exemple en citant les pages qui ont ét
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] a été bloqué{{GENDER:$1||e|}}.<br />
 Consultez la [[Special:BlockList|liste des blocages]] pour revoir les blocages.',
 'ipb-blockingself' => 'Vous êtes sur le point de bloquer votre propre compte ! Êtes-vous certain de vouloir faire cela ?',
-'ipb-confirmhideuser' => 'Vous êtes sur le point de bloquer un utilisateur avec « cacher l’utilisateur » activé. Cela supprime le nom de l’utilisateur dans toutes les listes et les entrées du journal. Êtes-vous sûr de vouloir le faire ?',
+'ipb-confirmhideuser' => "Vous êtes sur le point de bloquer un utilisateur avec « cacher l'utilisateur » activé. Cela supprime le nom de l'utilisateur dans toutes les listes et les entrées du journal. Êtes-vous sûr de vouloir le faire ?",
 'ipb-edit-dropdown' => 'Modifier les motifs de blocage par défaut',
 'ipb-unblock-addr' => 'Débloquer $1',
 'ipb-unblock' => 'Débloquer un compte utilisateur ou une adresse IP',
 'ipb-blocklist' => 'Voir les blocages existants',
 'ipb-blocklist-contribs' => 'Contributions pour $1',
 'unblockip' => 'Débloquer un utilisateur ou une adresse IP',
-'unblockiptext' => 'Utilisez le formulaire ci-dessous pour rétablir l’accès aux modifications depuis une adresse IP ou un nom d’utilisateur.',
+'unblockiptext' => "Utilisez le formulaire ci-dessous pour rétablir l'accès aux modifications depuis une adresse IP ou un nom d'utilisateur.",
 'ipusubmit' => 'Supprimer ce blocage',
 'unblocked' => '[[User:$1|$1]] a été débloqué',
 'unblocked-range' => '$1 a été débloqué',
@@ -2736,11 +2742,11 @@ Consultez la [[Special:BlockList|liste des blocages]] pour revoir les blocages.'
 'ipblocklist-legend' => 'Chercher un utilisateur bloqué',
 'blocklist-userblocks' => 'Masquer les blocages de comptes',
 'blocklist-tempblocks' => 'Masquer les blocages temporaires',
-'blocklist-addressblocks' => 'Masquer les blocages d’adresses IP uniques',
+'blocklist-addressblocks' => "Masquer les blocages d'adresses IP uniques",
 'blocklist-rangeblocks' => 'Masquer les blocs de portée',
 'blocklist-timestamp' => 'Date et heure',
 'blocklist-target' => 'Cible',
-'blocklist-expiry' => 'Date d’expiration',
+'blocklist-expiry' => "Date d'expiration",
 'blocklist-by' => 'Administrateur ayant effectué le blocage',
 'blocklist-params' => 'Paramètres de blocage',
 'blocklist-reason' => 'Motif',
@@ -2768,9 +2774,9 @@ Le motif fourni pour le blocage de $1 est : « $2 ».',
 'blocklog-showsuppresslog' => 'Cet utilisateur a été bloqué et caché précédemment. Le journal des suppressions est disponible ci-dessous :',
 'blocklogentry' => 'a bloqué [[$1]] ; expiration : $2 $3',
 'reblock-logentry' => 'a modifié les paramètres du blocage de [[$1]] avec une expiration au $2 $3',
-'blocklogtext' => 'Ceci est le journal des actions de blocages et déblocages d’utilisateurs.
+'blocklogtext' => "Ceci est le journal des actions de blocages et déblocages d'utilisateurs.
 Les adresses IP automatiquement bloquées ne sont pas listées.
-Consultez la [[Special:BlockList|liste des blocages]] pour voir les bannissements et blocages effectivement en cours.',
+Consultez la [[Special:BlockList|liste des blocages]] pour voir les bannissements et blocages effectivement en cours.",
 'unblocklogentry' => 'a débloqué $1',
 'block-log-flags-anononly' => 'utilisateurs anonymes seulement',
 'block-log-flags-nocreate' => 'création de compte interdite',
@@ -2778,75 +2784,75 @@ Consultez la [[Special:BlockList|liste des blocages]] pour voir les bannissement
 'block-log-flags-noemail' => 'envoi de courriel interdit',
 'block-log-flags-nousertalk' => 'ne peut modifier sa propre page de discussion',
 'block-log-flags-angry-autoblock' => 'autoblocage amélioré activé',
-'block-log-flags-hiddenname' => 'nom d’utilisateur caché',
+'block-log-flags-hiddenname' => "nom d'utilisateur caché",
 'range_block_disabled' => 'Le droit administrateur de créer des blocages de plages IP est désactivé.',
-'ipb_expiry_invalid' => 'Durée d’expiration incorrecte.',
-'ipb_expiry_temp' => 'Les blocages de noms d’utilisateurs cachés doivent être permanents.',
+'ipb_expiry_invalid' => "Durée d'expiration incorrecte.",
+'ipb_expiry_temp' => "Les blocages de noms d'utilisateurs cachés doivent être permanents.",
 'ipb_hide_invalid' => 'Impossible de supprimer ce compte ; il semble avoir trop de modifications.',
 'ipb_already_blocked' => '« $1 » est déjà bloqué',
 'ipb-needreblock' => '$1 est déjà bloqué. Voulez-vous modifier les paramètres ?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|Autre blocage|Autres blocages}}',
 'unblock-hideuser' => "Vous ne pouvez pas débloquer cet utilisateur, car son nom d'utilisateur a été masqué.",
-'ipb_cant_unblock' => 'Erreur : identifiant de blocage $1 non trouvé.
-Il est possible qu’un déblocage ait déjà été effectué.',
-'ipb_blocked_as_range' => 'Erreur : l’adresse IP $1 n’est pas bloquée directement et ne peut donc pas être débloquée.
-Elle fait cependant partie de la plage $2 qui, elle, peut être débloquée.',
+'ipb_cant_unblock' => "Erreur : identifiant de blocage $1 non trouvé.
+Il est possible qu'un déblocage ait déjà été effectué.",
+'ipb_blocked_as_range' => "Erreur : l'adresse IP $1 n'est pas bloquée directement et ne peut donc pas être débloquée.
+Elle fait cependant partie de la plage $2 qui, elle, peut être débloquée.",
 'ip_range_invalid' => 'Plage IP incorrecte.',
 'ip_range_toolarge' => 'Les blocages de plages plus grandes que /$1 ne sont pas autorisées.',
 'blockme' => 'Bloquez-moi',
 'proxyblocker' => 'Bloqueur de mandataires',
 'proxyblocker-disabled' => 'Cette fonction est désactivée.',
-'proxyblockreason' => 'Votre adresse IP a été bloquée car il s’agit d’un mandataire ouvert.
-Veuillez contacter votre fournisseur d’accès Internet ou votre support technique et l’informer de ce sérieux problème de sécurité.',
+'proxyblockreason' => "Votre adresse IP a été bloquée car il s'agit d'un mandataire ouvert.
+Veuillez contacter votre fournisseur d'accès Internet ou votre support technique et l'informer de ce sérieux problème de sécurité.",
 'proxyblocksuccess' => 'Fait.',
 'sorbsreason' => 'Votre adresse IP est listée comme mandataire ouvert dans le DNSBL utilisé par {{SITENAME}}.',
 'sorbs_create_account_reason' => 'Votre adresse IP est listée comme mandataire ouvert dans le DNSBL utilisé par {{SITENAME}}.
 Vous ne pouvez pas créer un compte.',
-'cant-block-while-blocked' => 'Vous ne pouvez pas bloquer d’autres utilisateurs tant que vous êtes bloqué{{GENDER:||e|(e)}}.',
-'cant-see-hidden-user' => "L’utilisateur que vous tentez de bloquer a déjà été bloqué et masqué. N’ayant pas le droit ''hideuser'', vous ne pouvez pas voir ou modifier le blocage de cet utilisateur.",
-'ipbblocked' => 'Vous ne pouvez pas bloquer ou débloquer d’autres utilisateurs, parce que vous êtes vous-même bloqué',
-'ipbnounblockself' => 'Vous n’êtes pas autorisé à vous débloquer vous-même',
+'cant-block-while-blocked' => "Vous ne pouvez pas bloquer d'autres utilisateurs tant que vous êtes bloqué{{GENDER:||e|(e)}}.",
+'cant-see-hidden-user' => "L'utilisateur que vous tentez de bloquer a déjà été bloqué et masqué. N'ayant pas le droit ''hideuser'', vous ne pouvez pas voir ou modifier le blocage de cet utilisateur.",
+'ipbblocked' => "Vous ne pouvez pas bloquer ou débloquer d'autres utilisateurs, parce que vous êtes vous-même bloqué",
+'ipbnounblockself' => "Vous n'êtes pas autorisé à vous débloquer vous-même",
 
 # Developer tools
 'lockdb' => 'Verrouiller la base de données',
 'unlockdb' => 'Déverrouiller la base de données',
-'lockdbtext' => 'Le verrouillage de la base de données empêchera tous les utilisateurs de modifier des pages, d’enregistrer leurs préférences, de modifier leur liste de suivi et d’effectuer toutes les autres opérations nécessitant des changements dans la base de données.
-Veuillez confirmer que c’est bien là ce que vous voulez faire et que vous déverrouillerez la base dès que votre opération de maintenance sera terminée.',
-'unlockdbtext' => 'Le déverrouillage de la base de données permettra à nouveau à tous les utilisateurs de modifier des pages, de changer leurs préférences, de modifier leur liste de suivi et d’effectuer les autres opérations nécessitant des changements dans la base de données.
-Veuillez confirmer que c’est bien là ce que vous voulez faire.',
+'lockdbtext' => "Le verrouillage de la base de données empêchera tous les utilisateurs de modifier des pages, d'enregistrer leurs préférences, de modifier leur liste de suivi et d'effectuer toutes les autres opérations nécessitant des changements dans la base de données.
+Veuillez confirmer que c'est bien là ce que vous voulez faire et que vous déverrouillerez la base dès que votre opération de maintenance sera terminée.",
+'unlockdbtext' => "Le déverrouillage de la base de données permettra à nouveau à tous les utilisateurs de modifier des pages, de changer leurs préférences, de modifier leur liste de suivi et d'effectuer les autres opérations nécessitant des changements dans la base de données.
+Veuillez confirmer que c'est bien là ce que vous voulez faire.",
 'lockconfirm' => 'Oui, je confirme que je souhaite verrouiller la base de données.',
 'unlockconfirm' => 'Oui, je confirme que je souhaite déverrouiller la base de données.',
 'lockbtn' => 'Verrouiller la base de données',
 'unlockbtn' => 'Déverrouiller la base de données',
-'locknoconfirm' => 'Vous n’avez pas coché la case de confirmation.',
+'locknoconfirm' => "Vous n'avez pas coché la case de confirmation.",
 'lockdbsuccesssub' => 'Verrouillage de la base de données réussi',
 'unlockdbsuccesssub' => 'Verrouillage de la base de données supprimé',
-'lockdbsuccesstext' => 'La base de données a été verrouillée.<br />
-N’oubliez pas de la [[Special:UnlockDB|déverrouiller]] lorsque vous aurez terminé votre opération de maintenance.',
+'lockdbsuccesstext' => "La base de données a été verrouillée.<br />
+N'oubliez pas de la [[Special:UnlockDB|déverrouiller]] lorsque vous aurez terminé votre opération de maintenance.",
 'unlockdbsuccesstext' => 'La base de données a été déverrouillée.',
-'lockfilenotwritable' => 'Le fichier de verrouillage de la base de données n’est pas inscriptible.
-Pour bloquer ou débloquer la base de données, il doit être accessible par le serveur web.',
-'databasenotlocked' => 'La base de données n’est pas verrouillée.',
+'lockfilenotwritable' => "Le fichier de verrouillage de la base de données n'est pas inscriptible.
+Pour bloquer ou débloquer la base de données, il doit être accessible par le serveur web.",
+'databasenotlocked' => "La base de données n'est pas verrouillée.",
 'lockedbyandtime' => '(par $1 le $2 à $3)',
 
 # Move page
 'move-page' => 'Renommer $1',
 'move-page-legend' => 'Renommer une page',
-'movepagetext' => "Utilisez le formulaire ci-dessous pour renommer une page, en déplaçant tout son historique vers le nouveau nom. Lancien titre deviendra une page de redirection vers le nouveau titre. Vous pouvez mettre à jour automatiquement les redirections actuelles qui pointent vers le titre original. Si vous choisissez de ne pas le faire, assurez-vous de vérifier toute [[Special:DoubleRedirects|double redirection]] ou [[Special:BrokenRedirects|redirection cassée]]. Vous avez la responsabilité de vous assurer que les liens continuent de pointer vers leur destination supposée.
+'movepagetext' => "Utilisez le formulaire ci-dessous pour renommer une page, en déplaçant tout son historique vers le nouveau nom. L'ancien titre deviendra une page de redirection vers le nouveau titre. Vous pouvez mettre à jour automatiquement les redirections actuelles qui pointent vers le titre original. Si vous choisissez de ne pas le faire, assurez-vous de vérifier toute [[Special:DoubleRedirects|double redirection]] ou [[Special:BrokenRedirects|redirection cassée]]. Vous avez la responsabilité de vous assurer que les liens continuent de pointer vers leur destination supposée.
 
-Notez que la page ne sera '''pas''' renommée s’il existe déjà une page avec le nouveau titre, sauf si cette dernière a un historique de modifications vierge et est soit vide, soit une simple redirection. Ceci permet de renommer une page vers sa position d’origine si le déplacement s’avère erroné.
+Notez que la page ne sera '''pas''' renommée s'il existe déjà une page avec le nouveau titre, sauf si cette dernière a un historique de modifications vierge et est soit vide, soit une simple redirection. Ceci permet de renommer une page vers sa position d'origine si le déplacement s'avère erroné.
 
 '''Attention !'''
-Ceci peut provoquer un changement radical et imprévu pour une page souvent consultée ; assurez-vous den avoir compris les conséquences avant de continuer.",
+Ceci peut provoquer un changement radical et imprévu pour une page souvent consultée ; assurez-vous d'en avoir compris les conséquences avant de continuer.",
 'movepagetext-noredirectfixer' => "Utilisez le formulaire ci-dessous pour renommer une page, en déplaçant tout son historique vers le nouveau nom.
-Lancien titre deviendra une page de redirection vers le nouveau titre.
+L'ancien titre deviendra une page de redirection vers le nouveau titre.
 Vérifiez bien les [[Special:DoubleRedirects|doubles redirections]] ou les [[Special:BrokenRedirects|redirections cassées]].
 Vous avez la responsabilité de vous assurer que les liens continuent de pointer vers leur destination supposée.
 
-Notez que la page ne sera '''pas''' déplacée s’il existe déjà une page avec le nouveau titre, sauf si cette dernière a un historique de modifications vierge et est soit vide, soit une simple redirection. Ceci permet de renommer une page vers sa position d’origine si le déplacement s’avère erroné, et il est impossible d’écraser une page existante.
+Notez que la page ne sera '''pas''' déplacée s'il existe déjà une page avec le nouveau titre, sauf si cette dernière a un historique de modifications vierge et est soit vide, soit une simple redirection. Ceci permet de renommer une page vers sa position d'origine si le déplacement s'avère erroné, et il est impossible d'écraser une page existante.
 
 '''Attention !'''
-Ceci peut provoquer un changement radical et imprévu pour une page souvent consultée ; assurez-vous den avoir compris les conséquences avant de continuer.",
+Ceci peut provoquer un changement radical et imprévu pour une page souvent consultée ; assurez-vous d'en avoir compris les conséquences avant de continuer.",
 'movepagetalktext' => "La page de discussion associée, si présente, sera automatiquement renommée '''sauf si :'''
 * vous déplacez la page vers un autre espace de noms, ou
 * une page de discussion non vide existe déjà sous le nouveau nom, ou
@@ -2854,37 +2860,37 @@ Ceci peut provoquer un changement radical et imprévu pour une page souvent cons
 
 Dans ces cas-là, vous devrez renommer ou fusionner cette page de discussion manuellement si vous le désirez.",
 'movearticle' => 'Renommer la page :',
-'moveuserpage-warning' => "'''Attention :''' Vous êtes sur le point de renommer une page d’utilisateur. Veuillez noter que seul la page sera renommée et que l’utilisateur '''ne''' sera '''pas''' renommé.",
-'movenologin' => 'Vous n’êtes pas identifié{{GENDER:||e|(e)}}.',
-'movenologintext' => 'Pour pouvoir renommer une page, vous devez être [[Special:UserLogin|identifié{{GENDER:||e|(e)}}]] avec un compte utilisateur enregistré et d’ancienneté suffisante.',
-'movenotallowed' => 'Vous n’avez pas la permission de renommer les pages.',
-'movenotallowedfile' => 'Vous n’avez pas la permission de renommer les fichiers.',
-'cant-move-user-page' => 'Vous n’avez pas la permission de renommer les pages principales d’utilisateurs (en dehors de leurs sous-pages).',
-'cant-move-to-user-page' => 'Vous n’avez pas la permission de renommer une page vers une page utilisateur (à l’exception d’une sous-page).',
+'moveuserpage-warning' => "'''Attention :''' Vous êtes sur le point de renommer une page d'utilisateur. Veuillez noter que seul la page sera renommée et que l'utilisateur '''ne''' sera '''pas''' renommé.",
+'movenologin' => "Vous n'êtes pas identifié{{GENDER:||e|(e)}}.",
+'movenologintext' => "Pour pouvoir renommer une page, vous devez être [[Special:UserLogin|identifié{{GENDER:||e|(e)}}]] avec un compte utilisateur enregistré et d'ancienneté suffisante.",
+'movenotallowed' => "Vous n'avez pas la permission de renommer les pages.",
+'movenotallowedfile' => "Vous n'avez pas la permission de renommer les fichiers.",
+'cant-move-user-page' => "Vous n'avez pas la permission de renommer les pages principales d'utilisateurs (en dehors de leurs sous-pages).",
+'cant-move-to-user-page' => "Vous n'avez pas la permission de renommer une page vers une page utilisateur (à l'exception d'une sous-page).",
 'newtitle' => 'Vers le nouveau titre :',
 'move-watch' => 'Suivre les pages originale et nouvelle',
 'movepagebtn' => 'Renommer la page',
 'pagemovedsub' => 'Renommage réussi',
 'movepage-moved' => "'''« $1 »''' a été renommé '''« $2 »'''",
-'movepage-moved-redirect' => 'Une redirection depuis l’ancien nom a été créée.',
-'movepage-moved-noredirect' => 'La création d’une redirection depuis l’ancien nom a été annulée.',
-'articleexists' => 'Il existe déjà une page portant ce titre, ou le titre que vous avez choisi n’est pas correct.
-Veuillez en choisir un autre.',
+'movepage-moved-redirect' => "Une redirection depuis l'ancien nom a été créée.",
+'movepage-moved-noredirect' => "La création d'une redirection depuis l'ancien nom a été annulée.",
+'articleexists' => "Il existe déjà une page portant ce titre, ou le titre que vous avez choisi n'est pas correct.
+Veuillez en choisir un autre.",
 'cantmove-titleprotected' => 'Vous ne pouvez pas déplacer une page vers cet emplacement car la création de page avec ce nouveau titre a été protégée.',
-'talkexists' => "'''La page elle-même a été déplacée avec succès, mais la page de discussion na pas pu être déplacée car il en existait déjà une sous le nouveau nom. Veuillez les fusionner manuellement.'''",
+'talkexists' => "'''La page elle-même a été déplacée avec succès, mais la page de discussion n'a pas pu être déplacée car il en existait déjà une sous le nouveau nom. Veuillez les fusionner manuellement.'''",
 'movedto' => 'renommé en',
 'movetalk' => 'Renommer aussi la page de discussion associée',
-'move-subpages' => 'Renommer les sous-pages (jusqu’à $1 {{PLURAL:$1|page|pages}})',
-'move-talk-subpages' => 'Renommer les sous-pages de la page de discussion (jusqu’à $1 pages)',
+'move-subpages' => "Renommer les sous-pages (jusqu'à $1 {{PLURAL:$1|page|pages}})",
+'move-talk-subpages' => "Renommer les sous-pages de la page de discussion (jusqu'à $1 pages)",
 'movepage-page-exists' => 'La page $1 existe déjà et ne peut pas être écrasée automatiquement.',
 'movepage-page-moved' => 'La page $1 a été renommée en $2.',
-'movepage-page-unmoved' => 'La page $1 n’a pas pu être renommée en $2.',
+'movepage-page-unmoved' => "La page $1 n'a pas pu être renommée en $2.",
 'movepage-max-pages' => 'Le maximum de $1 {{PLURAL:$1|page renommée|pages renommées}} a été atteint et aucune autre page ne sera renommée automatiquement.',
 'movelogpage' => 'Journal des renommages',
 'movelogpagetext' => 'Voici la liste de toutes les pages renommées ou déplacées.',
 'movesubpage' => 'Sous-page{{PLURAL:$1||s}}',
 'movesubpagetext' => 'Cette page a $1 {{PLURAL:$1|sous-page affichée|sous-pages affichées}} ci-dessous.',
-'movenosubpage' => 'Cette page n’a aucune sous-page.',
+'movenosubpage' => "Cette page n'a aucune sous-page.",
 'movereason' => 'Motif :',
 'revertmove' => 'rétablir',
 'delete_and_move' => 'Supprimer et renommer',
@@ -2893,21 +2899,21 @@ La page de destination « [[:$1]] » existe déjà.
 Êtes-vous certain{{GENDER:||e|}} de vouloir la supprimer pour permettre ce renommage ?',
 'delete_and_move_confirm' => 'Oui, supprimer la page de destination',
 'delete_and_move_reason' => 'Page supprimée pour permettre le renommage depuis "[[$1]]"',
-'selfmove' => 'Les titres d’origine et de destination sont les mêmes ;
-impossible de renommer une page sur elle-même.',
-'immobile-source-namespace' => 'Vous ne pouvez pas renommer les pages dans l’espace de noms « $1 »',
-'immobile-target-namespace' => 'Vous ne pouvez pas renommer des pages vers l’espace de noms « $1 »',
+'selfmove' => "Les titres d'origine et de destination sont les mêmes ;
+impossible de renommer une page sur elle-même.",
+'immobile-source-namespace' => "Vous ne pouvez pas renommer les pages dans l'espace de noms « $1 »",
+'immobile-target-namespace' => "Vous ne pouvez pas renommer des pages vers l'espace de noms « $1 »",
 'immobile-target-namespace-iw' => 'Les destinations interwikis ne sont pas une cible valide pour les déplacements.',
-'immobile-source-page' => 'Cette page n’est pas renommable.',
-'immobile-target-page' => 'Il n’est pas possible de renommer la page vers ce titre.',
+'immobile-source-page' => "Cette page n'est pas renommable.",
+'immobile-target-page' => "Il n'est pas possible de renommer la page vers ce titre.",
 'bad-target-model' => 'La destination souhaitée utilise un autre modèle de contenu. Impossible de convertir de $1 vers $2.',
 'imagenocrossnamespace' => 'Impossible de renommer un fichier vers un espace de noms autre que fichier.',
-'nonfile-cannot-move-to-file' => "Impossible de renommer quelque chose d’autre qu'un fichier vers l’espace de noms fichier.",
+'nonfile-cannot-move-to-file' => "Impossible de renommer quelque chose d'autre qu'un fichier vers l'espace de noms fichier.",
 'imagetypemismatch' => 'La nouvelle extension de ce fichier ne correspond pas à son type.',
 'imageinvalidfilename' => 'Le nom du fichier cible est incorrect',
 'fix-double-redirects' => 'Mettre à jour les redirections pointant vers le titre original',
 'move-leave-redirect' => 'Laisser une redirection vers le nouveau titre',
-'protectedpagemovewarning' => "'''Attention :''' Cette page a été protégée afin que seuls les utilisateurs possédant les droits dadministrateur puissent la renommer. La dernière entrée du journal est affichée ci-dessous pour référence :",
+'protectedpagemovewarning' => "'''Attention :''' Cette page a été protégée afin que seuls les utilisateurs possédant les droits d'administrateur puissent la renommer. La dernière entrée du journal est affichée ci-dessous pour référence :",
 'semiprotectedpagemovewarning' => "'''Note :''' Cette page a été protégée afin que seuls les utilisateurs enregistrés puissent la renommer. La dernière entrée du journal est affichée ci-dessous pour référence :",
 'move-over-sharedrepo' => '== Le fichier existe ==
 [[:$1]] existe déjà sur un dépôt partagé. Renommer ce fichier rendra le fichier sur le dépôt partage inaccessible.',
@@ -2916,21 +2922,21 @@ Choisissez un autre nom.',
 
 # Export
 'export' => 'Exporter des pages',
-'exporttext' => 'Vous pouvez exporter en XML le texte et l’historique d’une page ou d’un ensemble de pages ;
-le résultat peut alors être importé dans un autre wiki utilisant le logiciel MediaWiki via la [[Special:Import|page dimportation]].
+'exporttext' => "Vous pouvez exporter en XML le texte et l'historique d'une page ou d'un ensemble de pages ;
+le résultat peut alors être importé dans un autre wiki utilisant le logiciel MediaWiki via la [[Special:Import|page d'importation]].
 
-Pour exporter des pages, entrez leurs titres dans la boîte de texte ci-dessous, à raison d’un titre par ligne. Sélectionnez si vous désirez ou non la version actuelle avec toutes les anciennes versions, avec les lignes de l’historique de la page, ou simplement la page actuelle avec des informations sur la dernière modification.
+Pour exporter des pages, entrez leurs titres dans la boîte de texte ci-dessous, à raison d'un titre par ligne. Sélectionnez si vous désirez ou non la version actuelle avec toutes les anciennes versions, avec les lignes de l'historique de la page, ou simplement la page actuelle avec des informations sur la dernière modification.
 
-Dans ce dernier cas vous pouvez aussi utiliser un lien, tel que [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] pour la page [[{{MediaWiki:Mainpage}}]].',
+Dans ce dernier cas vous pouvez aussi utiliser un lien, tel que [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] pour la page [[{{MediaWiki:Mainpage}}]].",
 'exportall' => 'Exporter toutes les pages',
-'exportcuronly' => 'Exporter uniquement la version courante, sans l’historique complet',
+'exportcuronly' => "Exporter uniquement la version courante, sans l'historique complet",
 'exportnohistory' => "----
-'''Note :''' l’exportation de l’historique complet des pages à l’aide de ce formulaire a été désactivée pour des raisons de performance.",
+'''Note :''' l'exportation de l'historique complet des pages à l'aide de ce formulaire a été désactivée pour des raisons de performance.",
 'exportlistauthors' => 'Inclure une liste complète des contributeurs pour chaque page',
 'export-submit' => 'Exporter',
 'export-addcattext' => 'Ajouter les pages de la catégorie :',
 'export-addcat' => 'Ajouter',
-'export-addnstext' => 'Ajouter des pages dans l’espace de noms :',
+'export-addnstext' => "Ajouter des pages dans l'espace de noms :",
 'export-addns' => 'Ajouter',
 'export-download' => 'Enregistrer dans un fichier',
 'export-templates' => 'Inclure les modèles',
@@ -2941,9 +2947,9 @@ Dans ce dernier cas vous pouvez aussi utiliser un lien, tel que [[{{#Special:Exp
 'allmessagesname' => 'Nom du message',
 'allmessagesdefault' => 'Message par défaut',
 'allmessagescurrent' => 'Message actuel',
-'allmessagestext' => 'Ceci est la liste des messages disponibles dans l’espace MediaWiki.
-Veuillez visiter la [//www.mediawiki.org/wiki/Localisation Localisation de MediaWiki] et [//translatewiki.net/ translatewiki.net] si vous désirez contribuer à la localisation générique de MediaWiki.',
-'allmessagesnotsupportedDB' => "Cette page '''{{ns:special}}:Allmessages''' nest pas utilisable car '''\$wgUseDatabaseMessages''' a été désactivé.",
+'allmessagestext' => "Ceci est la liste des messages disponibles dans l'espace MediaWiki.
+Veuillez visiter la [//www.mediawiki.org/wiki/Localisation Localisation de MediaWiki] et [//translatewiki.net/ translatewiki.net] si vous désirez contribuer à la localisation générique de MediaWiki.",
+'allmessagesnotsupportedDB' => "Cette page '''{{ns:special}}:Allmessages''' n'est pas utilisable car '''\$wgUseDatabaseMessages''' a été désactivé.",
 'allmessages-filter-legend' => 'Filtrer',
 'allmessages-filter' => 'Filtrer par état de modification :',
 'allmessages-filter-unmodified' => 'Non modifié',
@@ -2963,67 +2969,67 @@ Veuillez visiter la [//www.mediawiki.org/wiki/Localisation Localisation de Media
 'thumbnail-dest-create' => "Impossible d'enregistrer la vignette sur la destination",
 'thumbnail_invalid_params' => 'Paramètres de la miniature incorrects',
 'thumbnail_dest_directory' => 'Impossible de créer le répertoire de destination',
-'thumbnail_image-type' => 'Type d’image non supporté',
+'thumbnail_image-type' => "Type d'image non supporté",
 'thumbnail_gd-library' => 'Configuration incomplète de la bibliothèque GD : fonction $1 introuvable',
 'thumbnail_image-missing' => 'Le fichier suivant est introuvable : $1',
 
 # Special:Import
 'import' => 'Importer des pages',
 'importinterwiki' => 'Importation inter-wiki',
-'import-interwiki-text' => 'Sélectionnez un wiki et un titre de page à importer.
+'import-interwiki-text' => "Sélectionnez un wiki et un titre de page à importer.
 Les dates des versions et les noms des contributeurs seront préservés.
-Toutes les actions d’importation inter-wiki sont consignées dans l’[[Special:Log/import|historique des importations]].',
+Toutes les actions d'importation inter-wiki sont consignées dans l'[[Special:Log/import|historique des importations]].",
 'import-interwiki-source' => 'Wiki et page sources :',
-'import-interwiki-history' => 'Copier toutes les versions de l’historique de cette page',
+'import-interwiki-history' => "Copier toutes les versions de l'historique de cette page",
 'import-interwiki-templates' => 'Inclure tous les modèles',
 'import-interwiki-submit' => 'Importer',
 'import-interwiki-namespace' => 'Espace de noms de destination :',
 'import-interwiki-rootpage' => 'Page racine de destination (optionnelle):',
 'import-upload-filename' => 'Nom du fichier :',
 'import-comment' => 'Commentaire :',
-'importtext' => 'Veuillez exporter le fichier depuis le wiki d’origine en utilisant son [[Special:Export|outil d’exportation]].
-Sauvegardez-le sur votre disque dur puis importez-le ici.',
+'importtext' => "Veuillez exporter le fichier depuis le wiki d'origine en utilisant son [[Special:Export|outil d'exportation]].
+Sauvegardez-le sur votre disque dur puis importez-le ici.",
 'importstart' => 'Importation des pages…',
 'import-revision-count' => '$1 version{{PLURAL:$1||s}}',
 'importnopages' => 'Aucune page à importer.',
 'imported-log-entries' => '$1 {{PLURAL:$1|entrée|entrées}} du journal {{PLURAL:$1|importée|importées}}.',
-'importfailed' => 'Échec de l’importation : <nowiki>$1</nowiki>',
+'importfailed' => "Échec de l'importation : <nowiki>$1</nowiki>",
 'importunknownsource' => 'Type inconnu de la source à importer',
-'importcantopen' => 'Impossible d’ouvrir le fichier à importer',
+'importcantopen' => "Impossible d'ouvrir le fichier à importer",
 'importbadinterwiki' => 'Mauvais lien inter-wiki',
 'importnotext' => 'Vide ou sans texte',
-'importsuccess' => 'L’importation a réussi !',
-'importhistoryconflict' => 'Un conflit a été détecté dans l’historique des versions (cette page a pu être importée auparavant).',
-'importnosources' => "Aucune source d’importation inter-wiki n’a été définie et l'import direct d’historiques est désactivé.",
-'importnofile' => 'Aucun fichier d’importation n’a été envoyé.',
+'importsuccess' => "L'importation a réussi !",
+'importhistoryconflict' => "Un conflit a été détecté dans l'historique des versions (cette page a pu être importée auparavant).",
+'importnosources' => "Aucune source d'importation inter-wiki n'a été définie et l'import direct d'historiques est désactivé.",
+'importnofile' => "Aucun fichier d'importation n'a été envoyé.",
 'importuploaderrorsize' => "L'import du fichier a échoué.
 Sa taille est supérieure au maximum autorisé pour l'import de fichier.",
 'importuploaderrorpartial' => "L'import du fichier échoué.
-Son contenu na été transféré que partiellement.",
+Son contenu n'a été transféré que partiellement.",
 'importuploaderrortemp' => "L'import du fichier a échoué.
 Un dossier temporaire est manquant.",
-'import-parse-failure' => 'Échec lors de l’analyse du XML à importer',
+'import-parse-failure' => "Échec lors de l'analyse du XML à importer",
 'import-noarticle' => 'Aucune page à importer !',
 'import-nonewrevisions' => 'Toutes les versions ont été importées auparavant.',
 'xml-error-string' => '$1 à la ligne $2, colonne $3 (octet $4) : $5',
 'import-upload' => 'Import de données XML',
 'import-token-mismatch' => 'Perte des données de session. Veuillez réessayez.',
-'import-invalid-interwiki' => 'Impossible d’importer depuis le wiki spécifié.',
-'import-error-edit' => 'La page « $1 » n’a pas été importée parce que vous n’êtes pas autorisés à la modifier.',
-'import-error-create' => 'La page « $1 » n’a pas été importée parce que vous n’êtes pas autorisés à la créer.',
+'import-invalid-interwiki' => "Impossible d'importer depuis le wiki spécifié.",
+'import-error-edit' => "La page « $1 » n'a pas été importée parce que vous n'êtes pas autorisés à la modifier.",
+'import-error-create' => "La page « $1 » n'a pas été importée parce que vous n'êtes pas autorisés à la créer.",
 'import-error-interwiki' => "La page « $1 » n'est pas importée parce que son nom est réservé pour un lien externe (interwiki).",
-'import-error-special' => 'La page " $1 " n\'est pas importée parce qu\'elle appartient à un espace de noms special qui nen autorise aucune.',
-'import-error-invalid' => 'Page « $1 » n’est pas importée parce que son nom n’est pas valide.',
+'import-error-special' => 'La page " $1 " n\'est pas importée parce qu\'elle appartient à un espace de noms special qui n\'en autorise aucune.',
+'import-error-invalid' => "Page « $1 » n'est pas importée parce que son nom n'est pas valide.",
 'import-options-wrong' => '{{PLURAL:$2|Mauvaise option|Mauvaises options}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'La page racine fournie est un titre non valide.',
 'import-rootpage-nosubpage' => 'L\'espace de noms "$1" de la page racine n\'autorise pas les sous-pages.',
 
 # Import log
 'importlogpage' => 'Journal des importations',
-'importlogpagetext' => 'Importations administratives de pages d’autres wikis, avec leur historique de modification.',
+'importlogpagetext' => "Importations administratives de pages d'autres wikis, avec leur historique de modification.",
 'import-logentry-upload' => 'a importé [[$1]] par envoi de fichier',
 'import-logentry-upload-detail' => '$1 version{{PLURAL:$1||s}}',
-'import-logentry-interwiki' => 'a importé $1 d’un wiki à l’autre',
+'import-logentry-interwiki' => "a importé $1 d'un wiki à l'autre",
 'import-logentry-interwiki-detail' => '$1 version{{PLURAL:$1||s}} depuis $2',
 
 # JavaScriptTest
@@ -3038,18 +3044,18 @@ Un dossier temporaire est manquant.",
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Votre page utilisateur',
-'tooltip-pt-anonuserpage' => 'La page utilisateur de l’IP avec laquelle vous contribuez',
+'tooltip-pt-anonuserpage' => "La page utilisateur de l'IP avec laquelle vous contribuez",
 'tooltip-pt-mytalk' => 'Votre page de discussion',
 'tooltip-pt-anontalk' => 'La page de discussion pour les contributions depuis cette adresse IP',
 'tooltip-pt-preferences' => 'Vos préférences',
 'tooltip-pt-watchlist' => 'La liste des pages dont vous suivez les modifications',
 'tooltip-pt-mycontris' => 'La liste de vos contributions',
-'tooltip-pt-login' => 'Vous êtes encouragé{{GENDER:||e|(e)}} à vous identifier ; ce n’est cependant pas obligatoire.',
-'tooltip-pt-anonlogin' => 'Vous êtes encouragé{{GENDER:||e|(e)}} à vous identifier ; ce n’est cependant pas obligatoire.',
+'tooltip-pt-login' => "Vous êtes encouragé{{GENDER:||e|(e)}} à vous identifier ; ce n'est cependant pas obligatoire.",
+'tooltip-pt-anonlogin' => "Vous êtes encouragé{{GENDER:||e|(e)}} à vous identifier ; ce n'est cependant pas obligatoire.",
 'tooltip-pt-logout' => 'Se déconnecter',
 'tooltip-ca-talk' => 'Discussion au sujet de cette page de contenu',
-'tooltip-ca-edit' => 'Vous pouvez modifier cette page.
-Veuillez utiliser le bouton de prévisualisation avant d’enregistrer.',
+'tooltip-ca-edit' => "Vous pouvez modifier cette page.
+Veuillez utiliser le bouton de prévisualisation avant d'enregistrer.",
 'tooltip-ca-addsection' => 'Commencer une nouvelle section',
 'tooltip-ca-viewsource' => 'Cette page est protégée.
 Vous pouvez toutefois en visualiser la source.',
@@ -3065,10 +3071,10 @@ Vous pouvez toutefois en visualiser la source.',
 'tooltip-search-go' => 'Aller vers une page portant exactement ce nom si elle existe.',
 'tooltip-search-fulltext' => 'Rechercher les pages comportant ce texte.',
 'tooltip-p-logo' => 'Page principale',
-'tooltip-n-mainpage' => 'Visiter la page d’accueil du site',
-'tooltip-n-mainpage-description' => 'Aller à l’accueil',
+'tooltip-n-mainpage' => "Visiter la page d'accueil du site",
+'tooltip-n-mainpage-description' => "Aller à l'accueil",
 'tooltip-n-portal' => 'À propos du projet',
-'tooltip-n-currentevents' => 'Trouver les informations de fond sur l’actualité du moment',
+'tooltip-n-currentevents' => "Trouver les informations de fond sur l'actualité du moment",
 'tooltip-n-recentchanges' => 'Liste des modifications récentes sur le wiki',
 'tooltip-n-randompage' => 'Afficher une page au hasard',
 'tooltip-n-help' => 'Aide',
@@ -3090,7 +3096,7 @@ Vous pouvez toutefois en visualiser la source.',
 'tooltip-ca-nstab-image' => 'Voir la page du fichier',
 'tooltip-ca-nstab-mediawiki' => 'Voir le message système',
 'tooltip-ca-nstab-template' => 'Voir le modèle',
-'tooltip-ca-nstab-help' => 'Voir la page d’aide',
+'tooltip-ca-nstab-help' => "Voir la page d'aide",
 'tooltip-ca-nstab-category' => 'Voir la page de la catégorie',
 'tooltip-minoredit' => 'Marquer mes modifications comme mineures',
 'tooltip-save' => 'Publier vos modifications',
@@ -3103,8 +3109,8 @@ Vous pouvez toutefois en visualiser la source.',
 'tooltip-recreate' => 'Recréer la page même si celle-ci a été effacée',
 'tooltip-upload' => "Démarrer l'import",
 'tooltip-rollback' => '« Révoquer » annule en un clic la ou les modification(s) de cette page par son dernier contributeur.',
-'tooltip-undo' => '« Défaire » révoque cette modification et ouvre la fenêtre de modification en mode prévisualisation.
-Permet de rétablir la version précédente et d’ajouter un motif dans la boîte de résumé.',
+'tooltip-undo' => "« Défaire » révoque cette modification et ouvre la fenêtre de modification en mode prévisualisation.
+Permet de rétablir la version précédente et d'ajouter un motif dans la boîte de résumé.",
 'tooltip-preferences-save' => 'Sauvegarder les préférences',
 'tooltip-summary' => 'Entrez un bref résumé',
 
@@ -3149,20 +3155,20 @@ Permet de rétablir la version précédente et d’ajouter un motif dans la boî
 # Attribution
 'anonymous' => '{{PLURAL:$1|Utilisateur non enregistré|Utilisateurs non enregistrés}} sur {{SITENAME}}',
 'siteuser' => "{{GENDER:$2|l'utilisateur|l'utilisatrice|l'utilisateur}} $1 de {{SITENAME}}",
-'anonuser' => 'l’utilisateur anonyme $1 de {{SITENAME}}',
+'anonuser' => "l'utilisateur anonyme $1 de {{SITENAME}}",
 'lastmodifiedatby' => 'Cette page a été modifiée pour la dernière fois le $1 à $2 par $3.',
 'othercontribs' => 'Basé sur le travail de $1.',
 'others' => 'autres',
-'siteusers' => '{{PLURAL:$2|l’utilisateur|les utilisateurs}} $1 de {{SITENAME}}',
-'anonusers' => '{{PLURAL:$2|l’utilisateur anonyme|les utilisateurs anonymes}} $1 de {{SITENAME}}',
+'siteusers' => "{{PLURAL:$2|l'utilisateur|les utilisateurs}} $1 de {{SITENAME}}",
+'anonusers' => "{{PLURAL:$2|l'utilisateur anonyme|les utilisateurs anonymes}} $1 de {{SITENAME}}",
 'creditspage' => 'Crédits de la page',
-'nocredits' => 'Il n’y a pas d’informations d’attribution disponibles pour cette page.',
+'nocredits' => "Il n'y a pas d'informations d'attribution disponibles pour cette page.",
 
 # Spam protection
 'spamprotectiontitle' => 'Filtre de protection anti-pollution',
-'spamprotectiontext' => 'La page que vous avez voulu sauvegarder a été bloquée par le filtre anti-pollution. Ceci est probablement dû à l’introduction d’un lien vers un site externe apparaissant sur la liste noire. Cette dernière utilise les expressions rationnelles suivantes :',
-'spamprotectionmatch' => "La chaîne de caractères « '''$1''' » a déclenché le détecteur de pourriel.",
-'spambot_username' => 'Nettoyage de pourriels par MediaWiki',
+'spamprotectiontext' => "La page que vous avez voulu sauvegarder a été bloquée par le filtre anti-pollution. Ceci est probablement dû à l'introduction d'un lien vers un site externe apparaissant sur la liste noire. Cette dernière utilise les expressions rationnelles suivantes :",
+'spamprotectionmatch' => "La chaîne de caractères « '''$1''' » a déclenché le détecteur de spam.",
+'spambot_username' => 'Nettoyage de spams par MediaWiki',
 'spam_reverting' => 'Rétablissement de la dernière version ne contenant pas de lien vers $1',
 'spam_blanking' => 'Toutes les versions contenant des liens vers $1 sont blanchies',
 'spam_deleting' => 'Toutes les versions contenaient des liens vers $1, suppression',
@@ -3223,16 +3229,18 @@ Permet de rétablir la version précédente et d’ajouter un motif dans la boî
 'markaspatrolledtext' => 'Marquer cette page comme relue',
 'markedaspatrolled' => 'Marquée comme relue',
 'markedaspatrolledtext' => 'La version sélectionnée de [[:$1]] a été marquée comme relue.',
-'rcpatroldisabled' => 'La fonction de relecture des modifications récentes n’est pas activée.',
+'rcpatroldisabled' => "La fonction de relecture des modifications récentes n'est pas activée.",
 'rcpatroldisabledtext' => 'La fonctionnalité de relecture des modifications récentes est actuellement désactivée.',
 'markedaspatrollederror' => 'Ne peut être marquée comme relue',
 'markedaspatrollederrortext' => 'Vous devez sélectionner une version pour pouvoir la marquer comme relue.',
-'markedaspatrollederror-noautopatrol' => 'Vous n’avez pas le droit de marquer vos propres modifications comme relues.',
+'markedaspatrollederror-noautopatrol' => "Vous n'avez pas le droit de marquer vos propres modifications comme relues.",
+'markedaspatrollednotify' => 'Cette modification de $1 a été marquée comme contrôlée.',
+'markedaspatrollederrornotify' => 'Échec du marquage comme contrôlé.',
 
 # Patrol log
 'patrol-log-page' => 'Journal des relectures',
-'patrol-log-header' => 'Voici l’historique des versions relues.',
-'log-show-hide-patrol' => '$1 l’historique des relectures',
+'patrol-log-header' => "Voici l'historique des versions relues.",
+'log-show-hide-patrol' => "$1 l'historique des relectures",
 
 # Image deletion
 'deletedrevision' => 'Ancienne version $1 supprimée',
@@ -3240,10 +3248,10 @@ Permet de rétablir la version précédente et d’ajouter un motif dans la boî
 'filedeleteerror-long' => 'Des erreurs ont été rencontrées lors de la suppression du fichier :
 
 $1',
-'filedelete-missing' => 'Le fichier « $1 » ne peut pas être supprimé parce qu’il n’existe pas.',
-'filedelete-old-unregistered' => 'La version du fichier spécifiée « $1 » n’est pas dans la base de données.',
-'filedelete-current-unregistered' => 'Le fichier spécifié « $1 » n’est pas dans la base de données.',
-'filedelete-archive-read-only' => 'Le dossier d’archivage « $1 » n’est pas modifiable par le serveur.',
+'filedelete-missing' => "Le fichier « $1 » ne peut pas être supprimé parce qu'il n'existe pas.",
+'filedelete-old-unregistered' => "La version du fichier spécifiée « $1 » n'est pas dans la base de données.",
+'filedelete-current-unregistered' => "Le fichier spécifié « $1 » n'est pas dans la base de données.",
+'filedelete-archive-read-only' => "Le dossier d'archivage « $1 » n'est pas modifiable par le serveur.",
 
 # Browsing diffs
 'previousdiff' => '← Modification précédente',
@@ -3251,7 +3259,7 @@ $1',
 
 # Media information
 'mediawarning' => "'''Attention :''' ce type de fichier peut contenir du code malveillant.
-Si vous lexécutez, votre système peut être compromis.",
+Si vous l'exécutez, votre système peut être compromis.",
 'imagemaxsize' => "Taille maximale des images :<br />''(pour les pages de description de fichier)''",
 'thumbsize' => 'Taille de la miniature :',
 'widthheightpage' => '$1 × $2, $3 page{{PLURAL:$3||s}}',
@@ -3294,17 +3302,17 @@ Si vous l’exécutez, votre système peut être compromis.",
 'ago' => 'Il y a $1',
 
 # Bad image list
-'bad_image_list' => 'Le format est le suivant :
+'bad_image_list' => "Le format est le suivant :
 
-Seules les listes d’énumération (commençant par *) sont prises en compte. Le premier lien d’une ligne doit être celui d’une mauvaise image.
-Les autres liens sur la même ligne sont considérés comme des exceptions, par exemple des pages sur lesquelles l’image peut apparaître.',
+Seules les listes d'énumération (commençant par *) sont prises en compte. Le premier lien d'une ligne doit être celui d'une mauvaise image.
+Les autres liens sur la même ligne sont considérés comme des exceptions, par exemple des pages sur lesquelles l'image peut apparaître.",
 
 # Metadata
 'metadata' => 'Métadonnées',
-'metadata-help' => 'Ce fichier contient des informations supplémentaires, probablement ajoutées par l’appareil photo numérique ou le numériseur utilisé pour le créer. Si le fichier a été modifié depuis son état original, certains détails peuvent ne pas refléter entièrement l’image modifiée.',
+'metadata-help' => "Ce fichier contient des informations supplémentaires, probablement ajoutées par l'appareil photo numérique ou le numériseur utilisé pour le créer. Si le fichier a été modifié depuis son état original, certains détails peuvent ne pas refléter entièrement l'image modifiée.",
 'metadata-expand' => 'Afficher les informations détaillées',
 'metadata-collapse' => 'Masquer les informations détaillées',
-'metadata-fields' => 'Les champs de métadonnées d’image listés dans ce message seront inclus dans la page de description de l’image quand la table de métadonnées sera réduite. Les autres champs seront cachés par défaut.
+'metadata-fields' => "Les champs de métadonnées d'image listés dans ce message seront inclus dans la page de description de l'image quand la table de métadonnées sera réduite. Les autres champs seront cachés par défaut.
 * make
 * model
 * datetimeoriginal
@@ -3317,7 +3325,7 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 * imagedescription
 * gpslatitude
 * gpslongitude
-* gpsaltitude',
+* gpsaltitude",
 
 # EXIF tags
 'exif-imagewidth' => 'Largeur',
@@ -3332,7 +3340,7 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'exif-ycbcrpositioning' => 'Positionnement YCbCr',
 'exif-xresolution' => 'Résolution horizontale',
 'exif-yresolution' => 'Résolution verticale',
-'exif-stripoffsets' => 'Emplacement des données de l’image',
+'exif-stripoffsets' => "Emplacement des données de l'image",
 'exif-rowsperstrip' => 'Nombre de lignes par bande',
 'exif-stripbytecounts' => 'Taille en octets par bande',
 'exif-jpeginterchangeformat' => 'Position du SOI JPEG',
@@ -3342,36 +3350,36 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'exif-ycbcrcoefficients' => 'Coefficients YCbCr',
 'exif-referenceblackwhite' => 'Valeurs de référence noir et blanc',
 'exif-datetime' => 'Date de modification',
-'exif-imagedescription' => 'Description de l’image',
-'exif-make' => 'Fabricant de l’appareil',
-'exif-model' => 'Modèle de l’appareil',
+'exif-imagedescription' => "Description de l'image",
+'exif-make' => "Fabricant de l'appareil",
+'exif-model' => "Modèle de l'appareil",
 'exif-software' => 'Logiciel utilisé',
 'exif-artist' => 'Auteur',
-'exif-copyright' => 'Détenteur du droit d’auteur',
+'exif-copyright' => "Détenteur du droit d'auteur",
 'exif-exifversion' => 'Version EXIF',
 'exif-flashpixversion' => 'Version FlashPix',
 'exif-colorspace' => 'Espace colorimétrique',
 'exif-componentsconfiguration' => 'Signification de chaque composante',
-'exif-compressedbitsperpixel' => 'Mode de compression de l’image',
-'exif-pixelydimension' => 'Largeur de l’image',
-'exif-pixelxdimension' => 'Hauteur de l’image',
-'exif-usercomment' => 'Commentaires de l’utilisateur',
+'exif-compressedbitsperpixel' => "Mode de compression de l'image",
+'exif-pixelydimension' => "Largeur de l'image",
+'exif-pixelxdimension' => "Hauteur de l'image",
+'exif-usercomment' => "Commentaires de l'utilisateur",
 'exif-relatedsoundfile' => 'Fichier audio associé',
 'exif-datetimeoriginal' => 'Date de la prise originelle',
 'exif-datetimedigitized' => 'Date de la numérisation',
 'exif-subsectime' => 'Date de modification',
 'exif-subsectimeoriginal' => 'Date de la prise originelle',
 'exif-subsectimedigitized' => 'Date de la numérisation',
-'exif-exposuretime' => 'Temps d’exposition',
+'exif-exposuretime' => "Temps d'exposition",
 'exif-exposuretime-format' => '$1 s ($2 s)',
 'exif-fnumber' => 'Ouverture',
-'exif-exposureprogram' => 'Programme d’exposition',
+'exif-exposureprogram' => "Programme d'exposition",
 'exif-spectralsensitivity' => 'Sensibilité spectrale',
 'exif-isospeedratings' => 'Sensibilité ISO',
-'exif-shutterspeedvalue' => 'vitesse d’obturation de l’APEX',
-'exif-aperturevalue' => 'Ouverture de l’APEX',
+'exif-shutterspeedvalue' => "vitesse d'obturation de l'APEX",
+'exif-aperturevalue' => "Ouverture de l'APEX",
 'exif-brightnessvalue' => 'Luminance APEX',
-'exif-exposurebiasvalue' => 'Correction d’exposition',
+'exif-exposurebiasvalue' => "Correction d'exposition",
 'exif-maxaperturevalue' => 'Ouverture maximale',
 'exif-subjectdistance' => 'Distance du sujet',
 'exif-meteringmode' => 'Mode de mesure',
@@ -3384,12 +3392,12 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'exif-focalplaneyresolution' => 'Résolution verticale du plan focal',
 'exif-focalplaneresolutionunit' => 'Unité de résolution du plan focal',
 'exif-subjectlocation' => 'Localisation du sujet',
-'exif-exposureindex' => 'Index d’exposition',
+'exif-exposureindex' => "Index d'exposition",
 'exif-sensingmethod' => 'Type de capteur',
 'exif-filesource' => 'Source du fichier',
 'exif-scenetype' => 'Type de scène',
 'exif-customrendered' => 'Rendu personnalisé',
-'exif-exposuremode' => 'Mode d’exposition',
+'exif-exposuremode' => "Mode d'exposition",
 'exif-whitebalance' => 'Balance des blancs',
 'exif-digitalzoomratio' => 'Taux de zoom numérique',
 'exif-focallengthin35mmfilm' => 'Longueur focale pour un film 35 mm',
@@ -3400,13 +3408,13 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'exif-sharpness' => 'Netteté',
 'exif-devicesettingdescription' => 'Description de la configuration du dispositif',
 'exif-subjectdistancerange' => 'Distance du sujet',
-'exif-imageuniqueid' => 'Identifiant unique de l’image',
+'exif-imageuniqueid' => "Identifiant unique de l'image",
 'exif-gpsversionid' => 'Version de la balise GPS',
 'exif-gpslatituderef' => 'Référence pour la latitude',
 'exif-gpslatitude' => 'Latitude',
 'exif-gpslongituderef' => 'Référence pour la longitude',
 'exif-gpslongitude' => 'Longitude',
-'exif-gpsaltituderef' => 'Référence d’altitude (0=altitude, 1=profondeur)',
+'exif-gpsaltituderef' => "Référence d'altitude (0=altitude, 1=profondeur)",
 'exif-gpsaltitude' => 'Altitude',
 'exif-gpstimestamp' => 'Heure GPS (horloge atomique)',
 'exif-gpssatellites' => 'Satellites utilisés pour la mesure',
@@ -3417,8 +3425,8 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'exif-gpsspeed' => 'Vitesse du récepteur GPS',
 'exif-gpstrackref' => 'Référence pour la direction du mouvement',
 'exif-gpstrack' => 'Direction du mouvement',
-'exif-gpsimgdirectionref' => 'Référence pour la direction de l’image',
-'exif-gpsimgdirection' => 'Direction de l’image',
+'exif-gpsimgdirectionref' => "Référence pour la direction de l'image",
+'exif-gpsimgdirection' => "Direction de l'image",
 'exif-gpsmapdatum' => 'Système géodésique utilisé',
 'exif-gpsdestlatituderef' => 'Référence pour la latitude de la destination',
 'exif-gpsdestlatitude' => 'Latitude de la destination',
@@ -3451,7 +3459,7 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'exif-headline' => 'Titre',
 'exif-credit' => 'Crédit / fournisseur',
 'exif-source' => 'Source',
-'exif-editstatus' => 'Statut éditorial de l’image',
+'exif-editstatus' => "Statut éditorial de l'image",
 'exif-urgency' => 'Urgence',
 'exif-fixtureidentifier' => 'Nom élément récurrent',
 'exif-locationdest' => 'Lieu représenté',
@@ -3468,16 +3476,16 @@ Les autres liens sur la même ligne sont considérés comme des exceptions, par
 'exif-originaltransmissionref' => 'Code de localisation de la transmission originale',
 'exif-identifier' => 'Identifiant',
 'exif-lens' => 'Lentille utilisée',
-'exif-serialnumber' => 'Numéro de série de l’appareil photo',
+'exif-serialnumber' => "Numéro de série de l'appareil photo",
 'exif-cameraownername' => "Propriétaire de l'appareil photo",
 'exif-label' => 'Libellé',
 'exif-datetimemetadata' => 'Date de la dernière modification des métadonnées',
-'exif-nickname' => 'Nom informel de l’image',
+'exif-nickname' => "Nom informel de l'image",
 'exif-rating' => 'Note (sur 5)',
 'exif-rightscertificate' => 'Certificat de gestion des droits',
-'exif-copyrighted' => 'Statut du droit d’auteur',
-'exif-copyrightowner' => 'Détenteur du droit d’auteur',
-'exif-usageterms' => 'Conditions d’utilisation',
+'exif-copyrighted' => "Statut du droit d'auteur",
+'exif-copyrightowner' => "Détenteur du droit d'auteur",
+'exif-usageterms' => "Conditions d'utilisation",
 'exif-webstatement' => 'Déclaration de droits d’auteur en ligne',
 'exif-originaldocumentid' => 'Identifiant unique du document original',
 'exif-licenseurl' => 'URL de la licence',
@@ -4166,7 +4174,7 @@ Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentai
 'api-error-missingparam' => 'Erreur interne : Il manque des paramètres dans la requête.',
 'api-error-missingresult' => 'Erreur interne : Nous n’avons pas pu déterminer si la copie avait réussi.',
 'api-error-mustbeloggedin' => 'Vous devez être connecté pour télécharger des fichiers.',
-'api-error-mustbeposted' => 'Il y a un bogue dans ce logiciel ; il n’utilise pas la méthode HTTP adéquate.',
+'api-error-mustbeposted' => 'Erreur interne : cette requête nécessite la méthode HTTP POST.',
 'api-error-noimageinfo' => 'Le téléversement a réussi, mais le serveur n’a pas donné d’informations sur le fichier.',
 'api-error-nomodule' => 'Erreur interne : aucun module de versement défini.',
 'api-error-ok-but-empty' => 'Erreur interne : Le serveur n’a pas répondu.',
@@ -4193,5 +4201,5 @@ Sinon, vous pouvez utiliser le formulaire simplifié ci-dessous. Votre commentai
 'duration-millennia' => '$1 millénaire{{PLURAL:$1||s}}',
 
 # Unknown messages
-'mytalk-parenthetical' => 'discuter',
+'mytalk-parenthetical' => 'discussion',
 );
index 2c94575..bf98be4 100644 (file)
@@ -352,7 +352,7 @@ $messages = array(
 'broken-file-category' => 'Páxinas con ligazóns rotas cara a ficheiros',
 
 'about' => 'Acerca de',
-'article' => 'Artigo',
+'article' => 'Páxina de contido',
 'newwindow' => '(abre unha ventá nova)',
 'cancel' => 'Cancelar',
 'moredotdotdot' => 'Máis...',
@@ -389,6 +389,7 @@ $messages = array(
 'namespaces' => 'Espazos de nomes',
 'variants' => 'Variantes',
 
+'navigation-heading' => 'Menú de navegación',
 'errorpagetitle' => 'Erro',
 'returnto' => 'Volver a "$1".',
 'tagline' => 'De {{SITENAME}}',
@@ -524,7 +525,7 @@ $1',
 'nstab-image' => 'Ficheiro',
 'nstab-mediawiki' => 'Mensaxe',
 'nstab-template' => 'Modelo',
-'nstab-help' => 'Axuda',
+'nstab-help' => 'Páxina de axuda',
 'nstab-category' => 'Categoría',
 
 # Main script and global functions
@@ -612,7 +613,7 @@ $2',
 'namespaceprotected' => "Non dispón de permisos para modificar páxinas no espazo de nomes '''$1'''.",
 'customcssprotected' => 'Non dispón de permisos para modificar esta páxina de CSS, dado que contén a configuración persoal doutro usuario.',
 'customjsprotected' => 'Non dispón de permisos para modificar esta páxina de JavaScript, dado que contén a configuración persoal doutro usuario.',
-'ns-specialprotected' => 'Non se poden editar as páxinas no espazo de nomes {{ns:special}}.',
+'ns-specialprotected' => 'Non se poden editar as páxinas no espazo de nomes "{{ns:special}}".',
 'titleprotected' => "Este título foi protexido da creación por [[User:$1|$1]].
 O motivo achegado é ''$2''.",
 'filereadonlyerror' => 'Non se puido modificar o ficheiro "$1" porque o repositorio "$2" está en modo de só lectura.
@@ -633,9 +634,12 @@ O administrador que bloqueou o repositorio achegou este motivo: "$3".',
 
 Pode continuar usando {{SITENAME}} de xeito anónimo, ou pode <span class='plainlinks'>[$1 acceder de novo]</span> co mesmo nome de usuario ou con outro.
 Teña en conta que mentres non se limpa a memoria caché do seu navegador algunhas páxinas poden continuar aparecendo como se aínda estivese dentro do sistema.",
+'welcomeuser' => 'Reciba a nosa benvida, $1!',
 'welcomecreation' => '== Reciba a nosa benvida, $1! ==
 A súa conta foi creada correctamente.
 Non esqueza personalizar as súas [[Special:Preferences|preferencias de {{SITENAME}}]].',
+'welcomecreation-agora' => 'A súa conta foi creada correctamente.
+Non esqueza personalizar as súas [[Special:Preferences|preferencias de {{SITENAME}}]].',
 'yourname' => 'Nome de usuario:',
 'yourpassword' => 'Contrasinal:',
 'yourpasswordagain' => 'Insira o contrasinal outra vez:',
@@ -1323,7 +1327,7 @@ Note que os seus índices do contido de {{SITENAME}} poden estar desactualizados
 'prefs-datetime' => 'Data e hora',
 'prefs-labs' => 'Características experimentais',
 'prefs-user-pages' => 'Páxinas de usuario',
-'prefs-personal' => 'Información do usuario',
+'prefs-personal' => 'Información de usuario',
 'prefs-rc' => 'Cambios recentes',
 'prefs-watchlist' => 'Lista de vixilancia',
 'prefs-watchlist-days' => 'Número de días que mostrar na lista de vixilancia:',
@@ -1792,6 +1796,7 @@ Se o problema persiste, póñase en contacto cun [[Special:ListUsers/sysop|admin
 'backend-fail-notsame' => 'Xa existe un ficheiro chamado "$1", con contidos diferentes.',
 'backend-fail-invalidpath' => '"$1" non é unha ruta de almacenamento válida.',
 'backend-fail-delete' => 'Non se deu borrado o ficheiro "$1".',
+'backend-fail-describe' => 'Non se puideron cambiar os metadatos do ficheiro "$1".',
 'backend-fail-alreadyexists' => 'O ficheiro "$1" xa existe.',
 'backend-fail-store' => 'Non se deu almacenado o ficheiro "$1" en "$2".',
 'backend-fail-copy' => 'Non se deu copiado o ficheiro "$1" en "$2".',
@@ -2971,7 +2976,7 @@ Pode ver o código fonte.',
 'tooltip-feed-atom' => 'Fonte de novas Atom desta páxina',
 'tooltip-t-contributions' => 'Ver a lista de contribucións {{GENDER:{{BASEPAGENAME}}|deste usuario|desta usuaria}}',
 'tooltip-t-emailuser' => 'Enviarlle unha mensaxe a {{GENDER:{{BASEPAGENAME}}|este usuario|esta usuaria}} por correo electrónico',
-'tooltip-t-upload' => 'Cargar os ficheiros',
+'tooltip-t-upload' => 'Cargar ficheiros',
 'tooltip-t-specialpages' => 'Lista de todas as páxinas especiais',
 'tooltip-t-print' => 'Versión para imprimir da páxina',
 'tooltip-t-permalink' => 'Ligazón permanente a esta versión da páxina',
@@ -3946,7 +3951,7 @@ As imaxes móstranse na súa resolución completa; outros tipos de ficheiros in
 'logentry-newusers-newusers' => '$1 creou unha conta de usuario',
 'logentry-newusers-create' => '$1 creou unha conta de usuario',
 'logentry-newusers-create2' => '$1 creou unha conta de usuario $3',
-'logentry-newusers-autocreate' => 'A conta $1 creouse automaticamente',
+'logentry-newusers-autocreate' => 'A conta de usuario $1 creouse automaticamente',
 'newuserlog-byemail' => 'contrasinal enviado por correo electrónico',
 
 # Feedback
index f7d2d1f..4edb359 100644 (file)
@@ -517,6 +517,7 @@ $messages = array(
 'namespaces' => 'מרחבי שם',
 'variants' => 'גרסאות שפה',
 
+'navigation-heading' => 'תפריט הניווט',
 'errorpagetitle' => 'שגיאה',
 'returnto' => 'חזרה לדף $1.',
 'tagline' => 'מתוך {{SITENAME}}',
@@ -762,9 +763,12 @@ $2',
 
 באפשרותכם להמשיך ולעשות שימוש ב{{grammar:תחילית|{{SITENAME}}}} באופן אנונימי, או <span class='plainlinks'>[$1 לשוב ולהיכנס לאתר]</span> עם שם משתמש זהה או אחר.
 שימו לב כי ייתכן שדפים אחדים ימשיכו להיות מוצגים כאילו אתם עדיין מחוברים לחשבון עד שתנקו את המטמון של הדפדפן שלכם.",
+'welcomeuser' => 'ברוך בואך, $1!',
 'welcomecreation' => '== ברוך בואך, $1! ==
 חשבונך נוצר.
-נא לא לשכוח להתאים את [[Special:Preferences|העדפות המשתמש]] שלך באתר {{SITENAME}}.',
+נא לא לשכוח להתאים את [[Special:Preferences|העדפות המשתמש]] שלך ב{{grammar:תחילית|{{SITENAME}}}}.',
+'welcomecreation-agora' => 'חשבונך נוצר.
+נא לא לשכוח להתאים את [[Special:Preferences|העדפות המשתמש]] שלך ב{{grammar:תחילית|{{SITENAME}}}}.',
 'yourname' => 'שם משתמש:',
 'yourpassword' => 'סיסמה:',
 'yourpasswordagain' => 'הקש סיסמה שנית:',
@@ -1904,23 +1908,24 @@ $1',
 'upload-copy-upload-invalid-domain' => 'העלאת קבצים משרת זה אינה אפשרית.',
 
 # File backend
-'backend-fail-stream' => 'לא הייתה אפשרות להזרים את הקובץ $1.',
-'backend-fail-backup' => 'לא הייתה אפשרות לגבות את הקובץ $1.',
-'backend-fail-notexists' => 'הקובץ $1 אינו קיים.',
+'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-notsame' => 'כבר קיים קובץ לא זהה ב־"$1".',
+'backend-fail-invalidpath' => '"$1" אינו נתיב אחסון תקין.',
+'backend-fail-delete' => 'לא הייתה אפשרות למחוק את הקובץ "$1".',
+'backend-fail-describe' => 'לא הייתה אפשרות לשנות את המידע הנוסף על הקובץ "$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' => 'קר×\99×\90ת ×\94ק×\95×\91×¥ $1 ×\9c×\90 ×\94צ×\9c×\99×\97×\94',
-'backend-fail-create' => '×\9bת×\99×\91ת ×\94ק×\95×\91×¥ $1 ×\9c×\90 ×\94צ×\9c×\99×\97×\94',
-'backend-fail-maxsize' => '×\9bת×\99×\91ת ×\94ק×\95×\91×¥ $1 ×\9c×\90 ×\94צ×\9c×\99×\97×\94 כיוון שהוא גדול יותר {{PLURAL:$2|מבית אחד|מ־$2 בתים}}.',
+'backend-fail-read' => '×\9c×\90 × ×\99ת×\9f ×\94×\99×\94 ×\9cקר×\95×\90 ×\90ת ×\94ק×\95×\91×¥ "$1".',
+'backend-fail-create' => '×\9c×\90 × ×\99ת×\9f ×\94×\99×\94 ×\9c×\9bת×\95×\91 ×\90ת ×\94ק×\95×\91×¥ "$1".',
+'backend-fail-maxsize' => '×\9c×\90 × ×\99ת×\9f ×\94×\99×\94 ×\9c×\9bת×\95×\91 ×\90ת ×\94ק×\95×\91×¥ "$1" כיוון שהוא גדול יותר {{PLURAL:$2|מבית אחד|מ־$2 בתים}}.',
 'backend-fail-readonly' => 'מאגר האחסון לקבצים "$1" הוא כרגע במצב קריאה בלבד. הסיבה שניתנה לכך היא: "\'\'\'$2\'\'\'"',
 'backend-fail-synced' => 'הקובץ "$1" נמצא במצב לא עקבי בתוך מאגרי אחסון הקבצים הפנימיים',
 'backend-fail-connect' => 'לא ניתן היה להתחבר למאגר אחסון הקבצים הפנימי "$1".',
@@ -4110,10 +4115,10 @@ $5
 'logentry-move-move_redir-noredirect' => '$1 העביר את הדף $3 ל{{GRAMMAR:תחילית|$4}} תוך דריסת הפניה ובלי להשאיר הפניה',
 'logentry-patrol-patrol' => '$1 סימן את הגרסה $4 בדף $3 כבדוקה',
 'logentry-patrol-patrol-auto' => '$1 סימן אוטומטית את הגרסה $4 בדף $3 כבדוקה',
-'logentry-newusers-newusers' => '$1 יצר חשבון משתמש',
-'logentry-newusers-create' => '$1 יצר חשבון משתמש',
-'logentry-newusers-create2' => '$1 יצר חשבון משתמש $3',
-'logentry-newusers-autocreate' => '×\94×\97ש×\91×\95×\9f $1 נוצר אוטומטית',
+'logentry-newusers-newusers' => 'חשבון המשתמש $1 נוצר',
+'logentry-newusers-create' => 'חשבון המשתמש $1 נוצר',
+'logentry-newusers-create2' => 'חשבון המשתמש $3 נוצר על ידי $1',
+'logentry-newusers-autocreate' => '×\97ש×\91×\95×\9f ×\94×\9eשת×\9eש $1 נוצר אוטומטית',
 'newuserlog-byemail' => 'הסיסמה נשלחה בדוא"ל',
 
 # Feedback
index 7475fdb..94a4f82 100644 (file)
@@ -558,9 +558,12 @@ Administrator, kiž je jón zawrěł, je tule přičinu podał: "$3".',
 
 Móžeš {{GRAMMAR:akuzatiw|{{SITENAME}}}} nětko anonymnje dale wužiwać abo so ze samsnym abo druhim wužiwarskim mjenom <span class='plainlinks'>[$1 zaso přizjewić]</span>.
 Wobkedźbuj, zo so někotre strony dale jewja, kaž by hišće přizjewjeny był, doniž pufrowak swojeho wobhladowaka njewuprózdnješ.",
+'welcomeuser' => 'Witaj $1',
 'welcomecreation' => '== Witaj, $1! ==
 
 Twoje konto bu wutworjene. Njezabudź swoje nastajenja za [[Special:Preferences|{{GRAMMAR:akuzatiw|{{SITENAME}}}}]] změnić.',
+'welcomecreation-agora' => 'Twoje konto bu wutworjene.
+Njezabudź swoje [[Special:Preferences|nastajenja za {{GRAMMAR:akuzatiw|{{SITENAME}}}}]] změnić.',
 'yourname' => 'Wužiwarske mjeno:',
 'yourpassword' => 'Hesło:',
 'yourpasswordagain' => 'Hesło znowa zapodać:',
@@ -1662,6 +1665,7 @@ $1',
 'backend-fail-notsame' => 'Dataja, kotraž identiska njeje, hižo pola $1 eksistuje.',
 'backend-fail-invalidpath' => '$1 płaćiwy pućik za składowanje njeje.',
 'backend-fail-delete' => 'Dataja $1 njeda so zhašeć.',
+'backend-fail-describe' => 'Metadaty za dataju "$1" njedadźa so změnić.',
 'backend-fail-alreadyexists' => 'Dataja $1 hižo eksistuje.',
 'backend-fail-store' => 'Dataja $1 njeda so pod $2 składować',
 'backend-fail-copy' => 'Dataja $1 njeda so do $2 kopěrować',
index bd9a101..b48e6c2 100644 (file)
@@ -4011,4 +4011,6 @@ A képek teljes méretben jelennek meg, más fájltípusok közvetlenül a hozz
 'duration-centuries' => '{{PLURAL:$1|egy|$1}} évszázad',
 'duration-millennia' => '{{PLURAL:$1|egy|$1}} évezred',
 
+# Unknown messages
+'mytalk-parenthetical' => 'vitalap',
 );
index 4008606..4386518 100644 (file)
@@ -279,7 +279,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Թաքցնել պարեկված խմբագրումները վերջին փոփոխությունների ցանկից',
 'tog-newpageshidepatrolled' => 'Թաքցնել պարեկված էջերը նոր էջերի ցանկից',
 'tog-extendwatchlist' => 'Ընդարձակել հսկացանկը՝ ցույց տալով բոլոր փոփոխությունները, այլ ոչ միայն վերջինները',
-'tog-usenewrc' => 'Օգտագործել վերջին փոփոխությունների լավացված ցանկ (պահանջում է JavaScript)',
+'tog-usenewrc' => 'Խմբավորել փոփոխությունները Վերջին փոփոխություններում և հսկացանկում (պահանջում է JavaScript)',
 'tog-numberheadings' => 'Ինքնաթվագրել վերնագրերը',
 'tog-showtoolbar' => 'Ցույց տալ խմբագրումների գործիքների վահանակը (JavaScript)',
 'tog-editondblclick' => 'Խմբագրել էջերը կրկնակի մատնահարմամբ (JavaScript)',
@@ -287,9 +287,9 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Խմբագրել բաժինները վերնագրի աջ մատնահարմամբ (JavaScript)',
 'tog-showtoc' => 'Ցույց տալ բովանդակությունը (3  կամ ավել վերնագրեր ունեցող էջերի համար)',
 'tog-rememberpassword' => 'Հիշել իմ մուտքագրված տվյալներն այս համակարգչում ($1 {{PLURAL:$1|օրից}} ոչ ավել ժամկետով)',
-'tog-watchcreations' => 'Ավելացնել իմ ստեղծած էջերը հսկացանկին',
-'tog-watchdefault' => 'Ավելացնել իմ խմբագրած էջերը հսկացանկին',
-'tog-watchmoves' => 'Ավելացնել իմ վերնավանած էջերը հսկացանկին',
+'tog-watchcreations' => 'Ավելացնել իմ ստեղծած էջերը և բեռնած նիշքերը հսկացանկին',
+'tog-watchdefault' => 'Ավելացնել իմ խմբագրած էջերը և նիշքերը հսկացանկին',
+'tog-watchmoves' => 'Ավելացնել իմ վերնավանած էջերը և նիշքերը հսկացանկին',
 'tog-watchdeletion' => 'Ավելացնել իմ ջնջած էջերը հսկացանկին',
 'tog-minordefault' => 'Նշել խմբագրումները որպես չնչին ըստ լռության',
 'tog-previewontop' => 'Ցույց տալ նախադիտումը խմբագրման դաշտից առաջ',
@@ -406,7 +406,7 @@ $messages = array(
 'cancel' => 'Բեկանել',
 'moredotdotdot' => 'Ավելին...',
 'mypage' => 'Իմ էջը',
-'mytalk' => 'Իմ քննարկումները',
+'mytalk' => 'Քննարկումներ',
 'anontalk' => 'Քննարկում այս IP-հասցեի համար',
 'navigation' => 'Շրջել կայքում',
 'and' => '&#32;և',
@@ -629,7 +629,7 @@ $1',
 'cannotdelete-title' => 'Հնարավոր չէ ջնջել $1 էջը',
 'badtitle' => 'Անընդունելի անվանում',
 'badtitletext' => 'Հարցված էջի անվանումը անընդունելի է, դատարկ է կամ սխալ միջ-լեզվական կամ ինտերվիքի անվանում է։ Հնարավոր է, որ այն պարունակում է անթույլատրելի սիմվոլներ։',
-'perfcached' => 'Հետևյալ տվյալները վերցված են քեշից և հնարավոր է չարտացոլեն վերջին փոփոխությունները։ A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
+'perfcached' => 'Հետևյալ տվյալները վերցված են քեշից և հնարավոր է չարտացոլեն վերջին փոփոխությունները։ Առավելագույն {{PLURAL:$1|արդյունք|$1 արդյունք}} է հասանելի քեշում։',
 'perfcachedts' => 'Հետևյալ տվյալները վերցված են քեշից և վերջին անգամ թարմացվել են $1։ A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
 'querypage-no-updates' => 'Այս էջի փոփոխությունները ներկայումս արգելված են։ Այստեղի տվյալները այժմ չեն թարմացվի։',
 'wrong_wfQuery_params' => 'Անթույլատրելի պարամետրեր wfQuery() ֆունկցիայի համար<br />
@@ -666,6 +666,7 @@ $2',
 'logouttext' => "'''Դուք դուրս եկաք համակարգից։'''
 
 Դուք կարող եք շարունակել օգտագործել {{SITENAME}} կայքը անանուն, կամ <span class='plainlinks'>[$1 կրկին մուտք գործել համակարգ]</span> նույն կամ մեկ այլ մասնակցի անվամբ։ Ի նկատի ունեցեք, որ որոշ էջեր կարող են ցուցադրվել այնպես՝ ինչպես եթե դեռ համակարգում լինեիք մինչև որ չջնջեք ձեր զննարկիչի հիշապահեստը։",
+'welcomeuser' => 'Բարի գալո՜ւստ, $1',
 'welcomecreation' => '== Բարի՛ գալուստ, $1 ==
 Ձեր հաշիվը ստեղծված է։
 Չմոռանաք անձնավորել ձեր [[Special:Preferences|նախընտրությունները]]։',
@@ -1148,7 +1149,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 
 # Preferences page
 'preferences' => 'Նախընտրություններ',
-'mypreferences' => 'Իմ նախընտրությունները',
+'mypreferences' => 'Նախընտրություններ',
 'prefs-edits' => 'Խմբագրումների քանակը.',
 'prefsnologin' => 'Դուք չեք մտել համակարգ',
 'prefsnologintext' => 'Մասնակցային նախընտրությունները փոփոխելու համար անհրաժեշտ է <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} մտնել համակարգ]</span>։',
@@ -1297,10 +1298,17 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'grouppage-suppress' => '{{ns:project}}:Հսկիչ',
 
 # Rights
-'right-edit' => 'էջերի խմբագրում',
-'right-move' => 'Տեղափոխել էջերը',
-'right-move-subpages' => 'Տեղափոխել էջերն իրենց ենթաէջերով',
+'right-read' => 'Դիտել էջեր',
+'right-edit' => 'Խմբագրել էջեր',
+'right-createtalk' => 'Ստեղծել քննարկման էջեր',
+'right-createaccount' => 'Ստեղծել նոր մասնակցային հաշիվներ',
+'right-minoredit' => 'Նշել խմբագրումը որպես ստուգված',
+'right-move' => 'Վերանվանել էջը',
+'right-move-subpages' => 'Վերանվանել էջն իր ենթաէջերով',
+'right-movefile' => 'Վերանվանել նիշքեր',
+'right-suppressredirect' => 'Էջը վերանավանելիս վերահղում չթողնել',
 'right-upload' => 'Նիշքերի բեռնում',
+'right-upload_by_url' => 'Բեռնել նիշքեր ինտերնետային հասցեից',
 'right-delete' => 'Էջերի ջնջում',
 
 # User rights log
@@ -1599,6 +1607,7 @@ $3 մասնակիցը տվել է հետևյալ պատճառը. ''$2''",
 'mostlinkedtemplates' => 'Կաղապարներ, որոնց շատ են հղվում',
 'mostcategories' => 'Ամենաշատ կատեգորիաներով էջեր',
 'mostimages' => 'Ամենաշատ օգտագործվող նկարներ',
+'mostinterwikis' => 'Ամենաշատ միջլեզվային հղումներով էջեր',
 'mostrevisions' => 'Ամենաշատ վերափոխումներով հոդվածներ',
 'prefixindex' => 'Բոլոր էջերը ըստ սկզբնատառի',
 'shortpages' => 'Կարճ էջեր',
@@ -1716,7 +1725,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 
 # Watchlist
 'watchlist' => 'Իմ հսկողության ցանկը',
-'mywatchlist' => 'Իմ հսկացանկը',
+'mywatchlist' => 'Հսկացանկ',
 'nowatchlist' => 'Ձեր հսկողության ցանկը դատարկ է։',
 'watchlistanontext' => 'Անհրաժեշտ է $1՝ հսկացանկը դիտելու կամ խմբագրելու համար։',
 'watchnologin' => 'Չեք մտել համակարգ',
@@ -1864,6 +1873,7 @@ $NEWPAGE
 'protect-cantedit' => 'Դուք չեք կարող փոխել այս էջի պաշտպանության մակարդակը, քանի որ ձեզ չի թույլատրվում խմբագրել այն։',
 'protect-othertime' => 'Այլ ժամկետ',
 'protect-othertime-op' => 'այլ ժամկետ',
+'protect-otherreason-op' => 'Այլ պատճառ',
 'protect-dropdown' => '* Ամենահաճախ նշվող պատճառներ
 ** Հաճախակի վանդալություններ
 ** Հաճախակի սփամ
@@ -1942,7 +1952,7 @@ $1',
 # Contributions
 'contributions' => 'Մասնակցի ներդրում',
 'contributions-title' => '$1 մասնակցի ներդրումը',
-'mycontris' => 'Իմ ներդրումը',
+'mycontris' => 'Ներդրում',
 'contribsub2' => '$1-ի ներդրումները ($2)',
 'nocontribs' => 'Այս չափանիշներին համապատասխանող փոփոխություններ չեն գտնվել։',
 'uctop' => ' (վերջինը)',
@@ -2550,7 +2560,15 @@ $3
 'filepath-submit' => 'Անցնել',
 
 # Special:FileDuplicateSearch
+'fileduplicatesearch' => 'Փնտրել կրկնօրինակ պատկերներ',
+'fileduplicatesearch-summary' => 'Փնտրել կրկնօրինակ պատկերներ՝ հեշ արժեքների հիման վրա',
+'fileduplicatesearch-legend' => 'Փնտրել կրկնօրինակներ',
+'fileduplicatesearch-filename' => 'Նիշքի անուն․',
 'fileduplicatesearch-submit' => 'Որոնել',
+'fileduplicatesearch-info' => '$1 × $2 փիքսել<br />Նիշքի չափը՝ $3<br />MIME-տիպը՝ $4',
+'fileduplicatesearch-result-1' => '$1 նիշքը կրկնօրինակներ չունի',
+'fileduplicatesearch-result-n' => '$1 նիշքն ունի {{PLURAL:$2|1 նույնական կրկնօրինակ|$2 նույնական կրկնօրինակ}}.',
+'fileduplicatesearch-noresults' => '$1 անունով նիշք չի գտնվել',
 
 # Special:SpecialPages
 'specialpages' => 'Սպասարկող էջեր',
@@ -2579,6 +2597,8 @@ $3
 'tags-edit' => 'խմբագրել',
 
 # Special:ComparePages
+'comparepages' => 'Համեմատել էջեր',
+'compare-selector' => 'Համեմատել էջի տարբերակներ',
 'compare-page1' => 'Էջ 1',
 'compare-page2' => 'Էջ 2',
 'compare-submit' => 'Համեմատել',
@@ -2620,4 +2640,6 @@ $3
 # Search suggestions
 'searchsuggest-search' => 'Որոնել',
 
+# Unknown messages
+'mytalk-parenthetical' => 'քննարկում',
 );
index 089552e..09adbbe 100644 (file)
@@ -553,9 +553,12 @@ Le administrator qui lo blocava offereva iste explication: "$3".',
 
 Tu pote continuar a usar {{SITENAME}} anonymemente, o tu pote <span class='plainlinks'>[$1 aperir un nove session]</span> con le mesme nomine de usator o con un altere.
 Nota que alcun paginas pote continuar a apparer como si tu esserea ancora authenticate. Pro remediar isto, tu pote vacuar le cache de tu navigator.",
+'welcomeuser' => 'Benvenite, $1!',
 'welcomecreation' => '== Benvenite, $1! ==
 Tu conto ha essite create.
 Non oblida personalisar tu [[Special:Preferences|preferentias in {{SITENAME}}]].',
+'welcomecreation-agora' => 'Tu conto ha essite create.
+Non oblida personalisar tu [[Special:Preferences|preferentias in {{SITENAME}}]].',
 'yourname' => 'Nomine de usator:',
 'yourpassword' => 'Contrasigno:',
 'yourpasswordagain' => 'Repete contrasigno:',
@@ -1726,6 +1729,7 @@ Si le problema persiste, contacta un [[Special:ListUsers/sysop|administrator]].'
 'backend-fail-notsame' => 'Un file non identic jam existe a $1.',
 'backend-fail-invalidpath' => '$1 non es un cammino valide de immagazinage.',
 'backend-fail-delete' => 'Impossibile deler file $1.',
+'backend-fail-describe' => 'Impossibile cambiar le metadatos pro le file "$1".',
 'backend-fail-alreadyexists' => 'Le file $1 jam existe.',
 'backend-fail-store' => 'Non poteva immagazinar le file $1 a $2',
 'backend-fail-copy' => 'Impossibile copiar file $1 a $2',
index d56b03e..4060f0c 100644 (file)
@@ -447,9 +447,12 @@ Ti administrador a nagserra ket nagited iti daytoy a panagilawlawag "\'\'$3\'\'"
 
 Mabalinmo nga ituloy ti agusar iti {{SITENAME}} a di am-ammo, wenno <span class='plainlinks'>[\$1 sumrek ka manen]</span> iti sigud wenno sabali nga agar-aramat.
 Laglagipem a sumagmamano a pampanid ti mabalin a nakaparang latta a kasla nakaserrekka pay laeng, aginggana no dalusam ti \"cache\" ti panagbasabasam.",
-'welcomecreation' => '== Kablaaw, $1! ==
+'welcomeuser' => 'Naragsak nga isasangbay, $1!',
+'welcomecreation' => '== Naragsak nga isasangbay, $1! ==
 Naaramiden ti pakabilangam.
-Dimo liplipatan a sukatan dagita kaykayatmo idiay [[Special:Preferences|{{SITENAME}} kaykayat]].',
+Dimo liplipatan a sukatan dagiti kakaykayatam idiay [[Special:Preferences|{{SITENAME}} kakaykayatan]].',
+'welcomecreation-agora' => 'Naaramiden ti pakabilangam.
+Dimo liplipatan a sukatan dagiti kakaykayatam idiay [[Special:Preferences|{{SITENAME}} kakaykayatan]].',
 'yourname' => 'Nagan ti agar-aramat:',
 'yourpassword' => 'Kontrasenias:',
 'yourpasswordagain' => 'Uliten ti kontrasenias:',
@@ -1135,8 +1138,8 @@ Laglagipem laeng a dagiti pagsurotan nagyan ti {{SITENAME}} ket baka baak.',
 'qbsettings-directionality' => 'Nasimpa, gapu laeng ti papanan ti panagsurat ti pagsasaom',
 
 # Preferences page
-'preferences' => 'Kaykayatan',
-'mypreferences' => 'Kaykayatan',
+'preferences' => 'Kakaykayatan',
+'mypreferences' => 'Kakaykayatan',
 'prefs-edits' => 'Bilang dagiti inurnos:',
 'prefsnologin' => 'Saan a nakastrek',
 'prefsnologintext' => 'Masapul a <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} nakastrekka]</span> tapno makapili kadagiti kakaykayatam.',
@@ -1237,7 +1240,7 @@ Daytoy a pakaammo ket makita ti publiko.',
 'prefs-help-realname' => 'Saan a nasken ti pudno a nagan.
 Ngem no kayatmo nga ited, maaramat daytoy a kas pammadayaw ken pangpatalged iti obram.',
 'prefs-help-email' => 'Ti e-surat a pagtaengan ket saan a masapul, ngem masapul no agsukat ka ti kontrasenias, no baka malipatam ti kontrasenias mo.',
-'prefs-help-email-others' => 'Mabalinmo nga agpili tapno dagiti sabsabali nga agar-aramat ket ma e-suratandaka idiay panagsilpo ti panidmo wenno ti panid ti kapatangam.
+'prefs-help-email-others' => 'Mabalinmo nga agpili tapno dagiti sabsabali nga agar-aramat ket ma e-suratandaka idiay panagsilpo ti panidmo wenno ti panid ti tungtungam.
 Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak kenka.',
 'prefs-help-email-required' => 'Masapul ti e-surat a pagtaengan.',
 'prefs-info' => 'Kangrunaan a pakaammuan',
@@ -1612,6 +1615,7 @@ No ti parikut ket agsubli latta, kontaken ti [[Special:ListUsers/sysop|administr
 'backend-fail-notsame' => 'Addaan ti saan a kapada ti papeles idiay $1.',
 'backend-fail-invalidpath' => '$1 ket imbalido a pagnaan ti pagidulinan.',
 'backend-fail-delete' => 'Saan a maikkat ti papeles $1.',
+'backend-fail-describe' => 'Saam a mabaliwan ti metadata para iti papeles ti "$1".',
 'backend-fail-alreadyexists' => 'Ti papeles $1 ket addan.',
 'backend-fail-store' => 'Saan a maidulin ti papeles $1 idiay $2.',
 'backend-fail-copy' => 'Saan a makopia ti papeles $1 idiay $2.',
@@ -2796,7 +2800,7 @@ Mabalinmo a kitaen ti taudanna.',
 'tooltip-n-currentevents' => 'Agsapul iti lugar ti likud a pakaammo kadagiti agdama a paspasamak',
 'tooltip-n-recentchanges' => 'Listaan dagiti naudi a sinukatan iti wiki.',
 'tooltip-n-randompage' => 'Mangiparuar iti pugto a panid',
-'tooltip-n-help' => 'Ti lugar a pakasapulan.',
+'tooltip-n-help' => 'Ti lugar a pagsapulan',
 'tooltip-t-whatlinkshere' => 'Listaan ti am-amin a pampanid ti wiki a nakasilpo ditoy',
 'tooltip-t-recentchangeslinked' => 'Kinaudian a sinukatan  dagiti panid a nakasilpo ditoy a panid',
 'tooltip-feed-rss' => 'RSS a pakan para iti daytoy a panid',
@@ -2907,6 +2911,8 @@ Daytoy ket mabalin a gapuanan babaen ti panilpo a naiparit ti akin ruar a pagsaa
 'markedaspatrollederror' => 'Madi a mamarkaan a kas napatruliaan',
 'markedaspatrollederrortext' => 'Nasken a naganam ti maysa a rebision tapno mamarkaan a kas napatruliaan.',
 'markedaspatrollederror-noautopatrol' => 'Saanmo a mabalin a markaan dagita sinukatam a kas napatruliaan.',
+'markedaspatrollednotify' => 'Daytoy a panagbaliw ti $1 ket namarkaanen a kas napatruliaan.',
+'markedaspatrollederrornotify' => 'Ti panagmarka a kas napatruliaan ket napaay.',
 
 # Patrol log
 'patrol-log-page' => 'Listaan ti napatruliaan',
@@ -3550,7 +3556,7 @@ Mabalinmo pay nga [[Special:EditWatchlist|usaren ti dati a panagurnos]].',
 'watchlisttools-raw' => 'Urnosen ti kilaw a listaan ti bambantayan',
 
 # Signatures
-'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|patang]])',
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|tungtungan]])',
 
 # Core parser functions
 'unknown_extension_tag' => 'Di amammo a pagpaatiddog nga etiketa "$1"',
@@ -3621,7 +3627,7 @@ Dagiti imahen ket agparang iti kadakkelan a resolusion, dagiti sabali a kita ti
 'specialpages-group-users' => 'Dagiti agar-aramat ken karkarbengan',
 'specialpages-group-highuse' => 'Adu ti panaka-usar a pampanid',
 'specialpages-group-pages' => 'Listaan dagiti panid',
-'specialpages-group-pagetools' => 'Dagiti ramramit ti panid',
+'specialpages-group-pagetools' => 'Ramramit ti panid',
 'specialpages-group-wiki' => 'Linaon ti wiki ken ramramit',
 'specialpages-group-redirects' => 'Maibawbaw-ing dagiti espesial a pampanid',
 'specialpages-group-spam' => 'Ramramit kontra spam',
index 40ac42d..ba140f0 100644 (file)
@@ -3722,4 +3722,6 @@ Ef ekki, þá getur þú notað einfalt eyðublað hér fyrir neðan. Athugasemd
 'duration-centuries' => '$1 {{PLURAL:$1|öld|aldir}}',
 'duration-millennia' => '$1 {{PLURAL:$1|árþúsund}}',
 
+# Unknown messages
+'mytalk-parenthetical' => 'spjall',
 );
index 0cadf3c..5bde2aa 100644 (file)
@@ -434,6 +434,7 @@ $messages = array(
 'namespaces' => 'Namespace',
 'variants' => 'Varianti',
 
+'navigation-heading' => 'Menu di navigazione',
 'errorpagetitle' => 'Errore',
 'returnto' => 'Torna a $1.',
 'tagline' => 'Da {{SITENAME}}.',
@@ -675,9 +676,12 @@ L\'amministratore che lo ha bloccato ha fornito questa motivazione: "$3".',
 
 Si può continuare ad usare {{SITENAME}} come utente anonimo oppure <span class='plainlinks'>[$1 eseguire un nuovo accesso]</span>, con lo stesso nome utente o un nome diverso.
 Nota che alcune pagine potrebbero continuare ad apparire come se il logout non fosse avvenuto finché non viene pulita la cache del proprio browser.",
+'welcomeuser' => 'Benvenuto, $1!',
 'welcomecreation' => "== Benvenuto, $1! ==
 
 L'account è stato creato correttamente. Non dimenticare di personalizzare le [[Special:Preferences|preferenze di {{SITENAME}}]].",
+'welcomecreation-agora' => "L'account è stato creato correttamente.
+Non dimenticare di personalizzare le [[Special:Preferences|preferenze di {{SITENAME}}]].",
 'yourname' => 'Nome utente:',
 'yourpassword' => 'Password:',
 'yourpasswordagain' => 'Ripeti la password:',
@@ -1770,6 +1774,7 @@ $1',
 'backend-fail-notsame' => 'Esiste già un file non identico a  $1 .',
 'backend-fail-invalidpath' => '$1 non è un percorso di archiviazione valido.',
 'backend-fail-delete' => 'Impossibile cancellare il file $1.',
+'backend-fail-describe' => 'Impossibile modificare i metadati del file "$1".',
 'backend-fail-alreadyexists' => 'Il file $1 esiste già.',
 'backend-fail-store' => 'Impossibilie memorizzare file  $1  in  $2 .',
 'backend-fail-copy' => 'Impossibile copiare il file  $1  in  $2 .',
@@ -3882,9 +3887,9 @@ Le immagini vengono mostrate alla massima risoluzione disponibile, per gli altri
 'logentry-move-move_redir-noredirect' => '$1 ha spostato la pagina $3 a $4 al posto di un redirect senza lasciare redirect',
 'logentry-patrol-patrol' => '$1 ha segnato la versione $4 della pagina $3 come verificata',
 'logentry-patrol-patrol-auto' => '$1 ha segnato automaticamente la versione $4 della pagina $3 come verificata',
-'logentry-newusers-newusers' => "$1 ha creato un'utenza",
-'logentry-newusers-create' => "$1 ha creato un'utenza",
-'logentry-newusers-create2' => "$1 ha creato un'utenza $3",
+'logentry-newusers-newusers' => "L'account utente $1 è stato creato",
+'logentry-newusers-create' => "L'account utente $1 è stato creato",
+'logentry-newusers-create2' => "L'account utente $3 è stato creato da $1",
 'logentry-newusers-autocreate' => "L'utenza $1 è stata creata automaticamente",
 'newuserlog-byemail' => 'password inviata via mail',
 
index d9d46b6..fa11163 100644 (file)
@@ -528,6 +528,7 @@ $messages = array(
 'namespaces' => '名前空間',
 'variants' => '変種',
 
+'navigation-heading' => '案内メニュー',
 'errorpagetitle' => 'エラー',
 'returnto' => '$1 に戻る。',
 'tagline' => '提供:{{SITENAME}}',
@@ -712,7 +713,7 @@ URL を間違って入力したか、正しくないリンクをたどった可
 'internalerror_info' => '内部エラー:$1',
 'fileappenderrorread' => '追加中に、「$1」を読み取れませんでした。',
 'fileappenderror' => '「$1」を「$2」に追加できませんでした。',
-'filecopyerror' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\80\8c$1ã\80\8dã\82\92ã\80\8c$2ã\80\8dã\81¸複製できませんでした。',
+'filecopyerror' => 'ã\83\95ã\82¡ã\82¤ã\83«ã\80\8c$1ã\80\8dã\82\92ã\80\8c$2ã\80\8dã\81«複製できませんでした。',
 'filerenameerror' => 'ファイル名を「$1」から「$2」へ変更できませんでした。',
 'filedeleteerror' => 'ファイル「$1」を削除できませんでした。',
 'directorycreateerror' => 'ディレクトリ「$1」を作成できませんでした。',
@@ -776,9 +777,12 @@ $2',
 
 このまま匿名で{{SITENAME}}の使用を続行できます。同じまたは別の利用者として<span class='plainlinks'>[$1 もう一度ログイン]</span>することもできます。
 なお、ページによっては、ブラウザーのキャッシュをクリアするまで、ログインしているかのように表示され続ける場合があるためご注意ください。",
+'welcomeuser' => 'ようこそ、$1さん!',
 'welcomecreation' => '== ようこそ、$1 さん! ==
 アカウントが作成されました。
 [[Special:Preferences|{{SITENAME}}の個人設定]]の変更も忘れないようにしてください。',
+'welcomecreation-agora' => 'アカウントが作成されました。
+[[Special:Preferences|{{SITENAME}}の個人設定]]の変更も忘れないようにしてください。',
 'yourname' => '利用者名:',
 'yourpassword' => 'パスワード:',
 'yourpasswordagain' => 'パスワード再入力:',
@@ -1962,19 +1966,20 @@ $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-notsame' => '異なる内容のファイル「$1」が既に存在します。',
+'backend-fail-invalidpath' => '「$1」は有効なストレージパスではありません。',
+'backend-fail-delete' => 'ファイル「$1」を削除できませんでした。',
+'backend-fail-describe' => 'ファイル「$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|$2 バイト}}を超えているため、ファイル $1 に書き込めませんでした。',
+'backend-fail-read' => 'ファイル「$1」から読み取れませんでした。',
+'backend-fail-create' => 'ファイル「$1」に書き込めませんでした。',
+'backend-fail-maxsize' => 'サイズが {{PLURAL:$2|$2 バイト}}を超えているため、ファイル「$1」に書き込めませんでした。',
 'backend-fail-readonly' => "ストレージバックエンド「$1」は現在読み取り専用です。理由:「''$2''」",
 'backend-fail-synced' => 'ファイル「$1」は、ストレージバックエンド内部で不一致の状態にあります',
 'backend-fail-connect' => 'ストレージバックエンド「$1」に接続できませんでした。',
@@ -4274,10 +4279,10 @@ MediaWikiは、有用であることを期待して配布されていますが
 'logentry-move-move_redir-noredirect' => '$1 がページ「$3」をリダイレクトの「$4」に、リダイレクトを残さずに移動しました',
 'logentry-patrol-patrol' => '$1 がページ「$3」の版 $4 を巡回済みとしました',
 '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-newusers' => '利用者アカウント $1 が作成されました',
+'logentry-newusers-create' => '利用者アカウント $1 が作成されました',
+'logentry-newusers-create2' => '利用者アカウント $3 が $1 により作成されました',
+'logentry-newusers-autocreate' => '利用者アカウント $1 が自動的に作成されました',
 'newuserlog-byemail' => 'パスワードをメールでお送りしました',
 
 # Feedback
index 60b295c..e8382f2 100644 (file)
@@ -304,7 +304,7 @@ $messages = array(
 'cancel' => 'გაუქმება',
 'moredotdotdot' => 'ვრცლად...',
 'mypage' => 'გვერდი',
-'mytalk' => 'á\83©á\83\94á\83\9bá\83\98 á\83\92á\83\90á\83\9cá\83®á\83\98á\83\9aá\83\95á\83\90',
+'mytalk' => 'განხილვა',
 'anontalk' => 'ამ IP-ს განხილვა',
 'navigation' => 'ნავიგაცია',
 'and' => '&#32;და',
@@ -336,6 +336,7 @@ $messages = array(
 'namespaces' => 'სახელთა სივრცე',
 'variants' => 'ვარიანტები',
 
+'navigation-heading' => 'სანავიგაციო მენიუ',
 'errorpagetitle' => 'შეცდომა',
 'returnto' => 'დაბრუნდი $1-ზე.',
 'tagline' => '{{SITENAME}} გვერდიდან',
@@ -585,9 +586,12 @@ $2',
 შეგიძლიათ გამოიყენოთ {{SITENAME}} ანონიმურად, ან შეგიძლიათ
 <span class='plainlinks'>[$1 შეხვიდეთ ისევ]</span> როგორც იგივე ან სხვა მომხმარებელი.
 შენიშნეთ, რომ ზოგიერთ გვერდზე შესაძლოა ისევ უჩვენებდეს რომ შესული ხართ სანამ თქვენი ბრაუზერის მეხსიერებას არ გაწმენდთ.",
+'welcomeuser' => 'მოგესალმებით, $1!',
 'welcomecreation' => '== მოგესალმებით, $1! ==
 თქვენი ანგარიში შექმნილია.
 არ დაგავიწყდეთ თქვენი [[Special:Preferences|{{SITENAME}}-ის კონფიგურაციის]] შეცვლა.',
+'welcomecreation-agora' => 'თქვენი ანგარიში შექმნილია.
+არ დაგავიწყდეთ თქვენი [[Special:Preferences|{{SITENAME}}-ის კონფიგურაციის]] შეცვლა.',
 'yourname' => 'მომხმარებელი:',
 'yourpassword' => 'პაროლი:',
 'yourpasswordagain' => 'ხელმეორედ შეიყვანეთ პაროლი',
@@ -1248,7 +1252,7 @@ $1",
 
 # Preferences page
 'preferences' => 'კონფიგურაცია',
-'mypreferences' => 'á\83©á\83\94á\83\9bá\83\98 á\83\99á\83\9dá\83\9cá\83¤á\83\98á\83\92á\83£á\83 á\83\90á\83ªá\83\98á\83\90',
+'mypreferences' => 'კონფიგურაცია',
 'prefs-edits' => 'რედაქციების რაოდენობა:',
 'prefsnologin' => 'შესული არ ხართ',
 'prefsnologintext' => 'თქვენ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} რეგისტრირებული უნდა იყოთ]</span> მომხმარებლის კონფიგურაციის შესაცვლელად.',
@@ -1377,7 +1381,7 @@ $1",
 'userrights-editusergroup' => 'რედაქტირება გაუკეთეთ მომხმარებელთა ჯგუფებს',
 'saveusergroups' => 'მომხმარებელთა ჯგუფების შენახვა',
 'userrights-groupsmember' => 'ჯგუფის წევრი:',
-'userrights-groupsmember-auto' => 'á\83\92á\83\90á\83£á\83\92á\83\94á\83\91á\83\90á\83 ი წევრი:',
+'userrights-groupsmember-auto' => 'á\83\9cá\83\90á\83\92á\83£á\83\9aá\83\98á\83¡á\83®á\83\9bá\83\94á\83\95ი წევრი:',
 'userrights-groups-help' => 'თქვენ შეგიძლიათ შეცვალოთ ჯგუფები, რომელშიც შედის ეს მომხმარებელი.
 * თუ ჯგუფის სახელწოდებასთან გაკეთებულია ნიშნული, ე.ი მომხმარებელი შედის ამ ჯგუფში.
 * თუ ნიშნული არ არის – მომხმარებელი არ განეკუთვნება არსებულ ჯგუფს.
@@ -1653,7 +1657,7 @@ $1",
 თუ თქვენ მაინც გსურთ მისი ატვირთვა დაბრუნდით უკან და ატვირთეთ სხვა სახელით. [[File:$1|thumb|center|$1]]',
 'fileexists-shared-forbidden' => 'ფაილი ამ სახელწოდებით უკვე არსებობს ფაილების საერთო საცავში. თუ შეიძლება, უკან დაბრუნდით და ჩატვირთეთ ფაილი სხვა სახელწოდებით. [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'ეს ფაილი არის შემდეგი {{PLURAL:$1|შემდეგი ფაილის|сშემდეგი ფაილების}} დუბლიკატი:',
-'file-deleted-duplicate' => 'á\83\9bá\83¡á\83\92á\83\90á\83\95á\83¡á\83\98 á\83¤á\83\90á\83\98á\83\9aá\83\98 ([[:$1]]) á\83£á\83\99á\83\95á\83\94 á\83¬á\83\90á\83¨á\83\9aá\83\98á\83\9aá\83\90. á\83\92á\83\97á\83®á\83\9dá\83\95á\83\97, á\83\92á\83\90á\83\94á\83ªá\83\90á\83\9cá\83\98á\83\97 á\83¤á\83\90á\83\98á\83\9aá\83\98á\83¡ á\83¬á\83\90á\83¨á\83\9aá\83\98á\83¡ á\83\98á\83¡á\83¢á\83\9dá\83 á\83\98á\83\90á\83¡, á\83\9bá\83\90á\83\9cá\83\90á\83\9bá\83\93á\83\94 á\83\95á\83\98á\83\93á\83 á\83\94 á\83\9bá\83\90á\83¡ á\83®á\83\94á\83\9aá\83\9bá\83\94á\83\9dá\83 á\83\94á\83\93 á\83\90á\83¢á\83\95á\83\98á\83 á\83¢ავთ.',
+'file-deleted-duplicate' => 'á\83\9bá\83¡á\83\92á\83\90á\83\95á\83¡á\83\98 á\83¤á\83\90á\83\98á\83\9aá\83\98 ([[:$1]]) á\83£á\83\99á\83\95á\83\94 á\83¬á\83\90á\83¨á\83\9aá\83\98á\83\9aá\83\90. á\83\92á\83\97á\83®á\83\9dá\83\95á\83\97, á\83\92á\83\90á\83\94á\83ªá\83\90á\83\9cá\83\98á\83\97 á\83¤á\83\90á\83\98á\83\9aá\83\98á\83¡ á\83¬á\83\90á\83¨á\83\9aá\83\98á\83¡ á\83\98á\83¡á\83¢á\83\9dá\83 á\83\98á\83\90á\83¡, á\83\9bá\83\90á\83\9cá\83\90á\83\9bá\83\93á\83\94 á\83\95á\83\98á\83\93á\83 á\83\94 á\83\9bá\83\90á\83¡ á\83®á\83\94á\83\9aá\83\9bá\83\94á\83\9dá\83 á\83\94á\83\93 á\83\90á\83¢á\83\95á\83\98á\83 á\83\97ავთ.',
 'uploadwarning' => 'გადატვირთვის შეხსენება',
 'uploadwarning-text' => 'გთხოვთ ჩაასწოროთ ფაილის აღწერა ქვევით და ხელმეორედ სცადოთ.',
 'savefile' => 'ფაილის შენახვა',
@@ -1839,8 +1843,8 @@ $1',
 'filehist-missing' => 'ფაილი ვერ მოიძებნა',
 'imagelinks' => 'ფაილის გამოყენება',
 'linkstoimage' => 'მომდევნო {{PLURAL:$1|გვერდი|გვერდები}} ებმის ამ ფაილს:',
-'linkstoimage-more' => '$1-á\83\96á\83\94 á\83\9bá\83\94á\83¢á\83\98 {{PLURAL:$1|á\83\92á\83\95á\83\94á\83 á\83\93á\83\94á\83\91á\83\98\83¤ვერდების|გვერდები}} რომლებსაც აქვთ ბმულები ამ ფაილზე.
-В данном списке {{PLURAL:$1|წარმოდგენილია მხოლოდ $1 ბმული|წარმოდგენილია მხოლოდ $1 ბმულები|წარმოდგენილია მხოლოდ $1 ბმულების}} ამ ფაილზე
+'linkstoimage-more' => '$1-á\83\96á\83\94 á\83\9bá\83\94á\83¢á\83\98 {{PLURAL:$1|á\83\92á\83\95á\83\94á\83 á\83\93á\83\94á\83\91á\83\98\83\92ვერდების|გვერდები}} რომლებსაც აქვთ ბმულები ამ ფაილზე.
+მოცემულ სიაში {{PLURAL:$1|წარმოდგენილია მხოლოდ $1 ბმული|წარმოდგენილია მხოლოდ $1 ბმულები|წარმოდგენილია მხოლოდ $1 ბმულების}} ამ ფაილზე.
 შეგიძლიათ ნახოთ ასევე [[Special:WhatLinksHere/$2|სრული სია]].',
 'nolinkstoimage' => 'არ არსებობს ამ ფაილთან დაკავშირებული გვერდები.',
 'morelinkstoimage' => 'იხილეთ [[Special:WhatLinksHere/$1|სხვა ბმულები]] ამ ფაილზე.',
@@ -1895,7 +1899,7 @@ $1',
 
 # MIME search
 'mimesearch' => 'MIME ძიება',
-'mimesearch-summary' => 'ამ გვერდის მეშვეობით ესაძლებელია ფაილების მოძიება მათი MIME-ტიპის მიხედვით. შეტანის ფორმა: შიგთავსის ტიპი/ქვეტიპი, მაგ <code>image/jpeg</code>.',
+'mimesearch-summary' => 'á\83\90á\83\9b á\83\92á\83\95á\83\94á\83 á\83\93á\83\98á\83¡ á\83\9bá\83\94á\83¨á\83\95á\83\94á\83\9dá\83\91á\83\98á\83\97 á\83¨á\83\94á\83¡á\83\90á\83«á\83\9aá\83\94á\83\91á\83\94á\83\9aá\83\98á\83\90 á\83¤á\83\90á\83\98á\83\9aá\83\94á\83\91á\83\98á\83¡ á\83\9bá\83\9dá\83«á\83\98á\83\94á\83\91á\83\90 á\83\9bá\83\90á\83\97á\83\98 MIME-á\83¢á\83\98á\83\9eá\83\98á\83¡ á\83\9bá\83\98á\83®á\83\94á\83\93á\83\95á\83\98á\83\97. á\83¨á\83\94á\83¢á\83\90á\83\9cá\83\98á\83¡ á\83¤á\83\9dá\83 á\83\9bá\83\90: á\83¨á\83\98á\83\92á\83\97á\83\90á\83\95á\83¡á\83\98á\83¡ á\83¢á\83\98á\83\9eá\83\98\83¥á\83\95á\83\94á\83¢á\83\98á\83\9eá\83\98, á\83\9bá\83\90á\83\92 <code>image/jpeg</code>.',
 'mimetype' => 'MIME ტიპი:',
 'download' => 'გადმოტვირთვა',
 
@@ -1926,7 +1930,7 @@ $1',
 'statistics-header-views' => 'გვერდის მონახულების სტატისტიკა',
 'statistics-header-users' => 'მომხმარებლის სტატისტიკა',
 'statistics-header-hooks' => 'სხვა სტატისტიკა',
-'statistics-articles' => 'á\83¡á\83¢á\83\90á\83¢á\83\98á\83\94á\83\91á\83\98á\83¡',
+'statistics-articles' => 'á\83¡á\83¢á\83\90á\83¢á\83\98á\83\90',
 'statistics-pages' => 'გვერდები',
 'statistics-pages-desc' => 'ვიკის ყველა გვერდი, განხილვის, გადამისამართების და სხვ. ჩათვლით.',
 'statistics-files' => 'ატვირთული ფაილები',
@@ -1937,7 +1941,7 @@ $1',
 'statistics-views-peredit' => 'შესწორებათა ხილვა',
 'statistics-users' => 'დარეგისტრირებული [[Special:ListUsers|მომხმარებლები]]',
 'statistics-users-active' => 'აქტიური მომხმარებლები',
-'statistics-users-active-desc' => 'მომხმარებლები, რომლებმაც განახორციელეს ქმედება  {{PLURAL:$1|ბოლო $1 დღე|ბოლო  $1 დღის|ბოლო $1 დღეების}}',
+'statistics-users-active-desc' => 'მომხმარებლები, რომლებმაც განახორციელეს ქმედება {{PLURAL:$1|ბოლო $1 დღის|ბოლო $1 დღის}} განმავლობაში',
 'statistics-mostpopular' => 'ყველზე ხშირად ხილვადი გვერდები',
 
 'disambiguations' => 'გვერდები, რომელთაც აქვთ ბმული მრავალმნიშვნელოვან გვერდებზე',
@@ -2011,7 +2015,7 @@ $1',
 'protectedpages-indef' => 'მხოლოდ უვადო დაცვები',
 'protectedpages-cascade' => 'მხოლოდ კასკადური დაცვა',
 'protectedpagestext' => 'შემდეგი გვერდები დაცულია გადატანისა თუ ცვლილებებისგან.',
-'protectedpagesempty' => 'ამ დროისთვის არ არსებობს დაცული გვერდები მოთხოვნილი პარამეტრეით.',
+'protectedpagesempty' => 'á\83\90á\83\9b á\83\93á\83 á\83\9dá\83\98á\83¡á\83\97á\83\95á\83\98á\83¡ á\83\90á\83  á\83\90á\83 á\83¡á\83\94á\83\91á\83\9dá\83\91á\83¡ á\83\93á\83\90á\83ªá\83£á\83\9aá\83\98 á\83\92á\83\95á\83\94á\83 á\83\93á\83\94á\83\91á\83\98 á\83\9bá\83\9dá\83\97á\83®á\83\9dá\83\95á\83\9cá\83\98á\83\9aá\83\98 á\83\9eá\83\90á\83 á\83\90á\83\9bá\83\94á\83¢á\83 á\83\94á\83\91á\83\98á\83\97.',
 'protectedtitles' => 'დაცული სათაურები',
 'protectedtitlestext' => 'შემდეგი სახელების გამოყენება არ შეიძლება',
 'protectedtitlesempty' => 'ამ დროისთვის არ არსებობს მოთხოვნილი გვერდები მოცემული პარამეტრებით.',
@@ -2141,7 +2145,7 @@ $1',
 'listgrouprights-addgroup-all' => 'ჩაამატეთ ყველა ჯგუფი',
 'listgrouprights-removegroup-all' => 'ყველა ჯგუფის წაშლა',
 'listgrouprights-addgroup-self' => 'შეუძლია ჩაუმატოს {{PLURAL:$2|ჯგუფი|ჯგუფები}} თავის ანგარიშს: $1',
-'listgrouprights-removegroup-self' => 'á\83¨á\83\94á\83£á\83«á\83\9aá\83\98á\83\90 á\83¬á\83\90á\83¨á\83\90á\83\9aá\83\9dá\83¡ {{PLURAL:$2|á\83¯á\83\92á\83§á\83¤á\83£|ჯგუფები}} თავისი ანგარიშიდან: $1',
+'listgrouprights-removegroup-self' => 'á\83¨á\83\94á\83£á\83«á\83\9aá\83\98á\83\90 á\83¬á\83\90á\83¨á\83\90á\83\9aá\83\9dá\83¡ {{PLURAL:$2|á\83¯á\83\92á\83£á\83¤á\83\98|ჯგუფები}} თავისი ანგარიშიდან: $1',
 'listgrouprights-addgroup-self-all' => 'შეუძლია ყელა ჯგუფია ჩამატება ანგარიშს.',
 'listgrouprights-removegroup-self-all' => 'შეუძლია თავისი ანგარიშის ყველა ჯგუფის წაშლა.',
 
@@ -2184,7 +2188,7 @@ $1',
 
 # Watchlist
 'watchlist' => 'ჩემი კონტროლის სია',
-'mywatchlist' => 'á\83©á\83\94á\83\9bá\83\98 á\83\99á\83\9dá\83\9cá\83¢á\83 á\83\9dá\83\9aá\83\98á\83¡ á\83¡á\83\98á\83\90',
+'mywatchlist' => 'კონტროლის სია',
 'watchlistfor2' => '$1 ($2) თვის',
 'nowatchlist' => 'თქვენი კონტროლის სია ცარიელია.',
 'watchlistanontext' => '$1
@@ -2294,7 +2298,7 @@ $UNWATCHURL
 იმოქმედეთ სიფრთხილით.',
 
 # Rollback
-'rollback' => 'á\83 á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\94á\83\91á\83\98á\83¡ á\83\92á\83\90á\83£á\83¥á\83\9bá\83\94á\83\91á\83\90',
+'rollback' => 'ცვლილებების გაუქმება',
 'rollback_short' => 'სწრაფი გაუქმება',
 'rollbacklink' => 'სწრაფი გაუქმება',
 'rollbacklinkcount' => '$1 {{PLURAL:$1|ცვლილების|ცვლილების}} გაუქმება',
@@ -2398,7 +2402,7 @@ $UNWATCHURL
 'undeleterevdel' => 'აღდგენა არ შესრულდება, თუ ის გამოიწვევს გვერდის ბოლო ვერსიის ან ფაილის ნაწილობრივ წაშლას.
 ასეთ შემთხვევაში თქვენ უნდა მოხსნათ ნიშნული ან აჩვენოთ ბოლო წაშლილი ვერსიები.',
 'undeletehistorynoadmin' => 'ეს სტატია წაშლილია. წაშლის მიზეზი ნაჩვენებია მოკლე ანოტაციაში ქვემოთ, იმ მომხმარებელთა დეტალებთან ერთად ვინც რედაქტირება გაუკეთა ამ გვერდს წაშლის წინ. იმ წაშლილი ტექსტების აქტუალური ვერსიები მიღწევადია მხოლოდ ადმინისტრატორებისათვის.',
-'undelete-revision' => 'წაიშალა ვერსია $1 ($4-დან  $5) მომხმარებლის $3:',
+'undelete-revision' => '$1-ის წაშლილი ვერსია ($5, $4-ის მდგომარეობით), შენახული მომხმარებლის $3 მიერ:',
 'undeleterevision-missing' => 'არასწორი ან არარსებული ვერსია. სავარაუდოდ ქვენ გადახვედით არასწორ ბმულზე, ან იგი წაიშალა არქივიდან.',
 'undelete-nodiff' => 'წინა ცვლილება ვერ ვიპოვეთ.',
 'undeletebtn' => 'აღდგენა',
@@ -2445,7 +2449,7 @@ $1',
 # Contributions
 'contributions' => 'მომხმარებლის წვლილი',
 'contributions-title' => 'მომხმარებლის წვლილი $1',
-'mycontris' => 'á\83©á\83\94á\83\9bá\83\98 á\83¬á\83\95á\83\9aá\83\98á\83\9aá\83\98',
+'mycontris' => 'წვლილი',
 'contribsub2' => '$1 ($2) თვის',
 'nocontribs' => 'ძებნისას მითითებული პარამეტრების შესაბამისი არც ერთი ცვლილება ნაპოვნი არ არის',
 'uctop' => '(თავი)',
@@ -3001,15 +3005,17 @@ $1',
 'skinname-vector' => 'ვექტორული',
 
 # Patrolling
-'markaspatrolleddiff' => 'á\83\9bá\83\9dá\83\9cá\83\98á\83¨á\83\9cá\83\94 á\83 á\83\9dá\83\92á\83\9dá\83 á\83ª á\83\9eá\83\90á\83¢á\83 á\83\9dლირებული',
+'markaspatrolleddiff' => 'á\83\9bá\83\9dá\83\9cá\83\98á\83¨á\83\9cá\83\94 á\83 á\83\9dá\83\92á\83\9dá\83 á\83ª á\83\9eá\83\90á\83¢á\83 á\83£ლირებული',
 'markaspatrolledtext' => 'მონიშნე ეს სტატია როგორც პატრულირებული',
-'markedaspatrolled' => 'á\83\9bá\83\9dá\83\9cá\83\98á\83¨á\83\9cá\83£á\83\9aá\83\98á\83\90 á\83 á\83\9dá\83\92á\83\9dá\83 á\83ª á\83\9eá\83\90á\83¢á\83 á\83\9dლირებული',
-'markedaspatrolledtext' => 'á\83\90á\83 á\83©á\83\94á\83£á\83\9aá\83\98 á\83\95á\83\94á\83 á\83¡á\83\98á\83\90 [[:$1]] á\83\9bá\83\9dá\83\9cá\83\98á\83¨á\83\9cá\83£á\83\9aá\83\98á\83\90 á\83 á\83\9dá\83\92á\83\9dá\83 á\83ª á\83¨á\83\94á\83\9bá\83\9dá\83¬á\83\9bებული',
+'markedaspatrolled' => 'á\83\9bá\83\9dá\83\9cá\83\98á\83¨á\83\9cá\83£á\83\9aá\83\98á\83\90 á\83 á\83\9dá\83\92á\83\9dá\83 á\83ª á\83\9eá\83\90á\83¢á\83 á\83£ლირებული',
+'markedaspatrolledtext' => 'á\83\90á\83 á\83©á\83\94á\83£á\83\9aá\83\98 á\83\95á\83\94á\83 á\83¡á\83\98á\83\90 [[:$1]] á\83\9bá\83\9dá\83\9cá\83\98á\83¨á\83\9cá\83£á\83\9aá\83\98á\83\90 á\83 á\83\9dá\83\92á\83\9dá\83 á\83ª á\83\9eá\83\90á\83¢á\83 á\83£á\83\9aá\83\98á\83 ებული',
 'rcpatroldisabled' => 'ბოლო ცვლილებების პატრულირება აკრძალულია',
 'rcpatroldisabledtext' => 'ბოლო ცვლილებების პატრულირების შესაძლებლობა ამ მომენტისთვის გათიშულია',
 'markedaspatrollederror' => 'შეუძლებელია ამ სტატიის მოhttp://translatewiki.net/w/i.php?title=MediaWiki:Markedaspatrollederror/ka&action=edit&loadgroup=core&loadtask=untranslatedნიშნვნა პატრულირებულად.',
 'markedaspatrollederrortext' => 'თქვენ უნდა მონიშნოთ ვერსია, რომელიც პატრულირებულად ჩაითვლება.',
-'markedaspatrollederror-noautopatrol' => 'თქვენ ვერ მონიშნავთ ამ შესწორებას შემოწმებულად.',
+'markedaspatrollederror-noautopatrol' => 'თქვენ ვერ მონიშნავთ თქვენივე შესწორებებს პატრულირებულად.',
+'markedaspatrollednotify' => 'ეს ცვლილება გვერდზე $1 პატრულირებულად მოინიშნა.',
+'markedaspatrollederrornotify' => 'პატრულირებულად მონიშვნა ვერ მოხერხდა.',
 
 # Patrol log
 'patrol-log-page' => 'პატრულირების ჟურნალი',
@@ -3374,7 +3380,7 @@ $8',
 'exif-lightsource-9' => 'კარგი ამინდი',
 'exif-lightsource-10' => 'მოღრუბლული ამინდი',
 'exif-lightsource-11' => 'ჩრდილი',
-'exif-lightsource-12' => 'ღის სინათლის ნათურა D (5700 − 7100K)',
+'exif-lightsource-12' => 'á\83\93á\83¦á\83\98á\83¡ á\83¡á\83\98á\83\9cá\83\90á\83\97á\83\9aá\83\98á\83¡ á\83\9cá\83\90á\83\97á\83£á\83 á\83\90 D (5700 â\88\92 7100K)',
 'exif-lightsource-13' => 'დღის სინათლის ნათურა N(4600 − 5400K)',
 'exif-lightsource-14' => 'დღის სინათლის ნათურა W (3900 − 4500K)',
 'exif-lightsource-15' => 'დღის სინათლის ნათურა WW (3200 − 3700K)',
@@ -3875,7 +3881,7 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'sqlite-no-fts' => '$1 სრული ტექსტის ძიების მხარდაჭერის გარეშე',
 
 # New logging system
-'logentry-delete-delete' => '$1 წაშალა გვერდი: „$3“',
+'logentry-delete-delete' => '$1 {{GENDER:$2|წაშალა|წაშალა}} გვერდი: „$3“',
 'logentry-delete-restore' => '$1 აღადგინა გვერდი $3',
 'logentry-delete-event' => '$1 შეცვალა {{PLURAL:$5|ჟურნალის ჩანაწერის|$5 ჟურნალის ჩანაწერების}} ხილვადობა $3-ზე: $4',
 'logentry-delete-revision' => '$1 შეცვალა {{PLURAL:$5|$5 ვერსიის|$5 ვერსიის}} ხილვადობა გვერდისათვის $3: $4',
index a685766..72c2960 100644 (file)
@@ -283,6 +283,7 @@ $1',
 'toc' => 'فہرست',
 'showtoc' => 'پشاوے',
 'hidetoc' => 'کھوشتاوے',
+'collapsible-collapse' => 'خاتمہ/Collapse',
 'thisisdeleted' => 'لوڑے  یا بحال کورے $1',
 'viewdeleted' => 'لوڑے $1؟',
 'restorelink' => '{{PLURAL:$1|ای ترمیم حذف ہوی|$1 ترامیم حذف ہونی}}',
@@ -557,6 +558,8 @@ MySQL جوابِ خطاء پرائے "$3: $4"',
 صفحو نوشتۂ حذف شدگی و منتقلی ذیلا بطورِ حوالہ دیونو بویان.',
 
 # Parser/template warnings
+'post-expand-template-inclusion-warning' => "'''خبردار:''' سانچو سایز بو لوٹ شیر.
+بعضی سانچہ شامل نو بونی.",
 'post-expand-template-inclusion-category' => 'ھش صفحات کہ ھتیرا ٹمپلیٹ یعنی سانچو ناپ لوٹ بیتی شیر۔',
 'post-expand-template-argument-category' => 'ھش صفحات کہ ھتیرا بوغینو بیرو سانچان یعنی(ٹمپلیٹان) لو شینی۔',
 
@@ -569,6 +572,7 @@ MySQL جوابِ خطاء پرائے "$3: $4"',
 'nextrevision' => '→پروشٹیو اعادہ',
 'currentrevisionlink' => 'حالیہ نظرثانی',
 'cur' => 'رائج',
+'next' => 'پروشٹیو',
 'last' => 'سابقہ',
 'histlegend' => "انتخاب: مختلف نسخان موازنہ کوریکو بچے ، پیامی خانان نشان زد کوری موڑا دیرو بٹنا کلک کورے۔
 
@@ -713,6 +717,7 @@ HTML tags لوڑے.',",
 'recentchangeslinked' => 'متعلقہ تبدیلی',
 'recentchangeslinked-toolbox' => 'موقعی تبدیلی',
 'recentchangeslinked-title' => 'متعلقہ تبدیلی "$1"',
+'recentchangeslinked-noresult' => 'ھمی صفحا موجودہ وختہ کیہ تبدیلی نیکی۔',
 'recentchangeslinked-summary' => "ھیہ ھتے تبدیلیان لسٹ شیر کہ ھیتان پھوک مدا پروشٹی ساوزینو بیتی شینی وا ھے صفحان سوم جستہ خور کیہ صفحہ چوکی شینی یا کیہ خاص زمرہ جاتو ممبرانن سوم چوکی شینی<br />
 ساوزیرو [[Special:Watchlist|موڑا صفحہ]] '''بولڈ''' شینی",
 'recentchangeslinked-page' => 'کھوار ویکیپیڈیو منصوبو صفحو لوڑے',
@@ -1059,6 +1064,8 @@ HTML tags لوڑے.',",
 * gpslongitude
 * gpsaltitude',
 
+'exif-dc-date' => 'تاریخ',
+
 # External editor support
 'edit-externally' => 'ھیہ مسلو ایڈیٹ کورے',
 'edit-externally-help' => '(See the [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] for more information)
@@ -1069,6 +1076,9 @@ HTML tags لوڑے.',",
 'namespacesall' => 'تھمامو',
 'monthsall' => 'سف',
 
+# action=purge
+'confirm_purge_button' => 'OK/ٹھیک شیر',
+
 # Table pager
 'table_pager_first' => 'آویلو صفحہ',
 
@@ -1080,10 +1090,27 @@ HTML tags لوڑے.',",
 # Core parser functions
 'duplicate-defaultsort' => '\'\'\'خبردار:\'\'\' ڈیفالٹ تاڑٰ(نغڑی) "$2" پروشٹیو ڈیفالٹ تاڑا "$1" لیگی شیر۔',
 
+# Special:FilePath
+'filepath-page' => 'فایل',
+'filepath-submit' => 'Go/بوغے',
+
 # Special:SpecialPages
 'specialpages' => 'اسپیشل صفحہ',
 
 # Special:Tags
 'tag-filter' => '[[Special:Tags|Tag]] filter:',
+'tag-filter-submit' => 'فلٹر',
+'tags-title' => 'Tags/ٹیگز',
+
+# Special:ComparePages
+'compare-page1' => 'صفحہ 1',
+
+# Feedback
+'feedback-message' => 'پیغام',
+
+# Search suggestions
+'searchsuggest-search' => 'Search/تلاش',
 
+# Unknown messages
+'mytalk-parenthetical' => 'مشقولگی',
 );
index 7dd9664..cadbdd2 100644 (file)
@@ -1154,7 +1154,7 @@ Cêr [$2 pela arezekerdena dosya de] arezekerdene asnina.',
 
 # Watchlist
 'watchlist' => 'Pela mına şêrkerdene',
-'mywatchlist' => 'Lista mına şêrkerdışi',
+'mywatchlist' => 'Lista şêrkerdışi',
 'watchlistfor2' => 'Serba $1 ($2)',
 'addedwatchtext' => "Pela \"[[:\$1]]\"i ilawe biye be [[Special:Watchlist|pela şêrkerdişi]].
 Nara dıme, vurnaisê na pele u pela hurênaisê dawa alaqedare ita bena lista, u pele [[Special:RecentChanges|lista vurnaisunê peyênu]] de '''qolınd''' asena ke cı ra asan weçiniyo.",
@@ -1259,7 +1259,7 @@ Tı şikina sewiya sevekiyaena na pele bıvurnê, hema yê nae sevekiyaena qedem
 # Contributions
 'contributions' => 'İştırakê karberi',
 'contributions-title' => '$1 de iştırakê karberi',
-'mycontris' => 'İştıraqê mı',
+'mycontris' => 'İştıraqi',
 'contribsub2' => 'Serba $1 ($2)',
 'uctop' => '(ser)',
 'month' => 'Asme ra (u ravêr):',
index fa139c8..0190a77 100644 (file)
@@ -646,6 +646,7 @@ $2',
 'filereadonlyerror' => 'មិនអាចកែប្រែឯកសារ "$1" បានទេពីព្រោះថតឯកសារ "$2" ស្ថិតក្នុងម៉ូដសំរាប់តែអានប៉ុណ្ណោះ។
 
 អភិបាលដែលបានចាក់សោរវាបានផ្ដល់សេចក្ដីពន្យល់បែបនេះ៖ "$3"។',
+'exception-nologin' => 'មិនទាន់កត់ឈ្មោះចូលទេ',
 'exception-nologin-text' => 'ទំព័រឬសកម្មភាពនេះតំរូវអោយអ្នកធ្វើការកត់ឈ្មោះចូលទៅក្នុងវិគីនេះ។',
 
 # Virus scanner
@@ -977,7 +978,7 @@ $2
 'updated' => '(បានបន្ទាន់សម័យ)',
 'note' => "'''ចំណាំ៖'''",
 'previewnote' => "'''សូមចាំថានេះគ្រាន់តែជា​ការបង្ហាញការមើលជាមុនប៉ុណ្ណោះ។ បំលាស់ប្ដូរ​របស់អ្នកមិនទាន់បាន​រក្សាទុកទេ!'''",
-'continue-editing' => 'á\9e\94á\9e\93á\9f\92á\9e\8fធ្វើការកែប្រែ',
+'continue-editing' => 'á\9e\91á\9f\85á\9e\80á\9e¶á\9e\93á\9f\8bá\9e\80á\9e\93á\9f\92á\9e\9bá\9f\82á\9e\84á\9e\9fá\9f\86á\9e\9aá\9e¶á\9e\94á\9f\8bធ្វើការកែប្រែ',
 'previewconflict' => 'ការមើលមុននេះយោងតាមអត្ថបទក្នុងប្រអប់កែប្រែខាងលើ។ ទំព័រអត្ថបទនឹងបង្ហាញចេញបែបនេះប្រសិនបើអ្នកជ្រើសរើសរក្សាទុក។',
 'session_fail_preview' => "'''សូមអភ័យទោស! យើងមិនអាចរក្សាទុកការកែប្រែរបស់អ្នកបានទេ ដោយសារបាត់ទិន្នន័យវេនការងារ។
 
@@ -1200,7 +1201,8 @@ $1",
 'revdelete-no-change' => "'''ប្រយ័ត្ន​៖''' វត្ថុ​ដែល​មាន​កាល​បរិច្ឆេទ​ $2, $1 ត្រូវ​បាន​ស្នើ​សុំ​ការ​កំណត់​គំហើញ​រួច​ហើយ​។",
 'revdelete-reason-dropdown' => '*មូលហេតុលុបចោលទូទៅ
 ** បំពានលើកម្មសិទ្ធិបញ្ញា
-** ព័ត៌មានផ្ទាល់ខ្លួនមិនសមរម្យ
+** មតិយោបល់ឬព័ត៌មានផ្ទាល់ខ្លួនមិនសមរម្យ
+** ឈ្មោះអ្នកប្រើប្រាស់មិនសមរម្យ
 ** ព័ត៌មានបង្ខូចកេរ្តិ៍ឈ្មោះ',
 'revdelete-otherreason' => 'មូលហេតុផ្សេង​ៗ/ដទៃទៀត​៖',
 'revdelete-reasonotherlist' => 'មូលហេតុផ្សេង​ទៀត​',
@@ -1394,7 +1396,7 @@ $1",
 'timezoneregion-indian' => 'មហាសមុទ្រឥណ្ឌា',
 'timezoneregion-pacific' => 'មហាសមុទ្រប៉ាស៊ីហ្វិក',
 'allowemail' => 'ទទួលអ៊ីមែលពីអ្នកប្រើប្រាស់ដទៃទៀត',
-'prefs-searchoptions' => 'á\9e\87á\9e\98á\9f\92á\9e\9aá\9e¾á\9e\9fá\9e\80á\9f\92á\9e\93á\9e»á\9e\84á\9e\80á\9e¶á\9e\9aá\9e\9fá\9f\92á\9e\9cá\9f\82á\9e\84á\9e\9aá\9e\80',
+'prefs-searchoptions' => 'ស្វែងរក',
 'prefs-namespaces' => 'ប្រភេទ',
 'defaultns' => 'ស្វែងរក​ក្នុង​លំហឈ្មោះ​ទាំងនេះ​តាម​បែប​ផ្សេង៖',
 'default' => 'លំនាំដើម',
@@ -1908,6 +1910,7 @@ $1',
 'uploadnewversion-linktext' => 'ផ្ទុកឡើងមួយកំណែថ្មីនៃឯកសារនេះ',
 'shared-repo-from' => 'ពី $1',
 'shared-repo' => 'ឃ្លាំងរួម​',
+'upload-disallowed-here' => 'អ្នកមិនអាចសរសេរជាន់ពីលើឯកសារនេះទេ។',
 
 # File reversion
 'filerevert' => 'ត្រឡប់ $1',
@@ -1937,6 +1940,7 @@ $1',
 **ឯកសារជាន់គ្នា',
 'filedelete-edit-reasonlist' => 'មូលហេតុនៃការលុបការកែប្រែ',
 'filedelete-maintenance' => 'ការលុបឬស្តារឯកសារឡើងវិញត្រូវបានផ្អាកជាបណ្ដោះអាសន្ន​ក្នុងពេលធ្វើការថែទាំប្រព័ន្ធ។',
+'filedelete-maintenance-title' => 'មិនអាចលុបឯកសារចោល',
 
 # MIME search
 'mimesearch' => 'ស្វែងរក MIME',
@@ -1988,9 +1992,9 @@ $1',
 
 'disambiguations' => 'ទំព័រដែលភ្ជាប់ទៅទំព័រមានចំណងជើងស្រដៀងគ្នា',
 'disambiguationspage' => 'Template:ស្រដៀងគ្នា',
-'disambiguations-text' => "ទំព័រទាំងឡាយខាងក្រោមនេះភ្ជាប់ទៅកាន់'''ទំព័រពាក្យស្រដៀងគ្នា'''។
+'disambiguations-text' => "á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\91á\9e¶á\9f\86á\9e\84á\9e¡á\9e¶á\9e\99á\9e\81á\9e¶á\9e\84á\9e\80á\9f\92á\9e\9aá\9f\84á\9e\98á\9e\93á\9f\81á\9f\87á\9e\98á\9e·á\9e\93á\9e\8fá\9f\86á\9e\8eá\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8bá\9e\99á\9f\89á\9e¶á\9e\84á\9e\8fá\9e·á\9e\85á\9e\98á\9e½á\9e\99á\9e\8aá\9f\82á\9e\9bá\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8bá\9e\91á\9f\85á\9e\80á\9e¶á\9e\93á\9f\8b'''á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\96á\9e¶á\9e\80á\9f\92á\9e\99á\9e\9fá\9f\92á\9e\9aá\9e\8aá\9f\80á\9e\84á\9e\82á\9f\92á\9e\93á\9e¶'''á\9f\94
 
\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\91á\9e¶á\9f\86á\9e\84á\9e\93á\9f\81á\9f\87á\9e\82á\9e½á\9e\9aá\9e\8fá\9f\82á\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8bá\9e\91á\9f\85á\9e\94á\9f\92á\9e\9aá\9e\92á\9e¶á\9e\93á\9e\94á\9e\91á\9e\8fá\9f\92á\9e\9aá\9e¹á\9e\98á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\8fá\9f\82á\9e\98á\9f\92á\9e\8aá\9e\84។<br />
\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\91á\9e¶á\9f\86á\9e\84á\9e\93á\9f\81á\9f\87á\9e\82á\9e½á\9e\9aá\9e\8fá\9f\82á\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8bá\9e\91á\9f\85á\9e\91á\9f\86á\9e\96á\9f\90á\9e\9aá\9e\8fá\9f\92á\9e\9aá\9e¹á\9e\98á\9e\8fá\9f\92á\9e\9aá\9e¼á\9e\9cá\9e\87á\9e¶á\9e\84á\9e\93á\9f\81á\9f\87á\9e\9cá\9e·á\9e\89។<br />
 ទំព័រមួយត្រូវចាត់ទុកជាទំព័រពាក្យស្រដៀងគ្នា ប្រសិនបើវាប្រើទំព័រគំរូដែលភ្ជាប់មកពី[[MediaWiki:Disambiguationspage]]",
 
 'doubleredirects' => 'ទំព័របញ្ជូនបន្តទ្វេដង',
@@ -2018,6 +2022,7 @@ $1',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|បៃ|បៃ}}',
 'ncategories' => '$1 {{PLURAL:$1|ចំណាត់ថ្នាក់ក្រុម|ចំណាត់ថ្នាក់ក្រុម}}',
+'ninterwikis' => '$1 {{PLURAL:$1|អន្តរវិគី|អន្តរវិគី}}',
 'nlinks' => '$1 {{PLURAL:$1|តំណភ្ជាប់|តំណភ្ជាប់}}',
 'nmembers' => '$1{{PLURAL:$1|សមាជិក|សមាជិក}}',
 'nrevisions' => '$1 {{PLURAL:$1|កំណែប្រែ}}',
@@ -2927,14 +2932,19 @@ $1',
 
 # Info page
 'pageinfo-title' => 'ព័ត៌មានសម្រាប់ "$1"',
+'pageinfo-not-current' => 'ព័ត៌មានប្រហែលជាអាចបង្ហាញសំរាប់តែកំណែបច្ចុប្បន្នប៉ុណ្ណោះ។',
 'pageinfo-header-basic' => 'ព័ត៌មាន​មូលដ្ឋាន​',
 'pageinfo-header-edits' => 'ប្រវត្តិកែប្រែ',
 'pageinfo-header-restrictions' => 'ការការពារទំព័រ',
 'pageinfo-header-properties' => 'លក្ខណៈសម្បត្តិទំព័រ',
 'pageinfo-display-title' => 'បង្ហាញចំណងជើង',
+'pageinfo-default-sort' => 'ពាក្យគន្លឺះសំរាប់តំរៀប',
 'pageinfo-length' => 'ប្រវែងទំព័រ (គិតជាបៃ)',
 'pageinfo-article-id' => 'អត្តលេខទំព័រ',
+'pageinfo-language' => 'ភាសារបស់ខ្លឹមសារទំព័រ',
 'pageinfo-robot-policy' => 'ស្ថានភាពម៉ាស៊ីនស្វែងរក',
+'pageinfo-robot-index' => 'អាចដាក់ក្នុងលិបិក្រម',
+'pageinfo-robot-noindex' => 'មិនអាចដាក់ក្នុងលិបិក្រម',
 'pageinfo-views' => 'ចំនួនការបើកមើល',
 'pageinfo-watchers' => 'ចំនួនអ្នកតាមដានទំព័រ',
 'pageinfo-redirects-name' => 'ចំនួនការបញ្ជូនបន្តមកកាន់ទំព័រនេះ',
@@ -2950,6 +2960,15 @@ $1',
 'pageinfo-recent-authors' => 'ចំនួនអ្នកនិពន្ធថ្មីៗនេះ',
 'pageinfo-magic-words' => '{{PLURAL:$1|ពាក្យ|ពាក្យ}} វេទមន្ត ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|ចំណាត់ថ្នាក់ក្រុម|ចំណាត់ថ្នាក់ក្រុម}}ដែលបានលាក់ ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|ទំព័រគំរូ|ទំព័រគំរូ}}ដែលទាញមកបញ្ចូល ($1)',
+'pageinfo-toolboxlink' => 'ព័ត៌មានអំពីទំព័រនេះ',
+'pageinfo-redirectsto' => 'បញ្ជូនបន្តទៅកាន់',
+'pageinfo-redirectsto-info' => 'ព័ត៌មាន​',
+'pageinfo-contentpage' => 'រាប់ជាទំព័រដែលមានខ្លឹមសារនៅខាងក្នុង',
+'pageinfo-contentpage-yes' => 'បាទ/ចាស',
+'pageinfo-protect-cascading' => 'ការការពារត្រូវបានដាក់ជាថ្នាក់ពីទីនេះទៅ',
+'pageinfo-protect-cascading-yes' => 'បាទ/ចាស',
+'pageinfo-protect-cascading-from' => 'ការការពារត្រូវបានដាក់ជាថ្នាក់ពី',
 
 # Skin names
 'skinname-standard' => 'បុរាណ',
index d0edf3a..1203616 100644 (file)
@@ -196,7 +196,7 @@ $messages = array(
 'cancel' => 'ವಜಾ ಮಾಡಿ',
 'moredotdotdot' => 'ಇನ್ನಷ್ಟು...',
 'mypage' => 'ನನ್ನ ಪುಟ',
-'mytalk' => 'ನನà³\8dನ à²\9aರà³\8dà²\9aà³\86',
+'mytalk' => 'ಚರ್ಚೆ',
 'anontalk' => 'ಈ ಐ.ಪಿ ಗೆ ಮಾತನಾಡಿ',
 'navigation' => 'ಸಂಚರಣೆ',
 'and' => '&#32;ಮತ್ತು',
@@ -875,7 +875,7 @@ $2',
 
 # Preferences page
 'preferences' => 'ಪ್ರಾಶಸ್ತ್ಯಗಳು',
-'mypreferences' => 'ನನà³\8dನ à²ªà³\8dರಾಶಸà³\8dತà³\8dಯà²\97ಳà³\81',
+'mypreferences' => 'ಪ್ರಾಶಸ್ತ್ಯಗಳು',
 'prefs-edits' => 'ಸಂಪಾದನೆಗಳ ಸಂಖ್ಯೆ:',
 'prefsnologin' => 'ಲಾಗಿನ್ ಆಗಿಲ್ಲ',
 'prefsnologintext' => 'ಬಳಕೆದಾರ ಪ್ರಾಶಸ್ತ್ಯಗಳನ್ನು ಬದಲಾಯಿಸಲು ನೀವು <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ಲಾಗ್ ಇನ್]</span> ಆಗಿರಬೇಕು.',
@@ -1404,7 +1404,7 @@ $2',
 
 # Watchlist
 'watchlist' => 'ವೀಕ್ಷಣಾ ಪಟ್ಟಿ',
-'mywatchlist' => 'ನನà³\8dನ à²µà³\80à²\95à³\8dಷಣಾಪà²\9fà³\8dà²\9fಿ',
+'mywatchlist' => 'ವೀಕ್ಷಣಾಪಟ್ಟಿ',
 'watchlistfor2' => '$1 ($2) ಗೆ',
 'nowatchlist' => 'ನಿಮ್ಮ ವೀಕ್ಷಣಾಪಟ್ಟಿಯಲ್ಲಿ ಯಾವುದೇ ಪುಟಗಳಿಲ್ಲ',
 'watchlistanontext' => 'ನಿಮ್ಮ ವೀಕ್ಷಣಾಪಟ್ಟಿಯನ್ನು ನೋಡಲು ಅಥವ ಸಂಪಾದಿಸಲು ದಯವಿಟ್ಟು $1 ಮಾಡಿ.',
@@ -1541,7 +1541,7 @@ $2',
 # Contributions
 'contributions' => 'ಸದಸ್ಯರ ಕಾಣಿಕೆಗಳು',
 'contributions-title' => '$1 ಸದಸ್ಯರ ಕಾಣಿಕೆಗಳು',
-'mycontris' => 'ನನà³\8dನ à²\95ಾಣಿà²\95à³\86à²\97ಳà³\81',
+'mycontris' => 'ಕಾಣಿಕೆಗಳು',
 'contribsub2' => '$1 ($2) ಗೆ',
 'uctop' => ' (ಮೇಲಕ್ಕೆ)',
 'month' => 'ಈ ತಿಂಗಳಿಂದ (ಮತ್ತು ಮುಂಚಿನ):',
@@ -1812,6 +1812,10 @@ $2',
 'siteusers' => '{{SITENAME}} {{PLURAL:$2|ಸದಸ್ಯ|ಸದಸ್ಯರು}} $1',
 'creditspage' => 'ಪುಟದ ಗೌರವಗಳು',
 
+# Info page
+'pageinfo-toolboxlink' => 'ಪುಟದ ಮಾಹಿತಿ',
+'pageinfo-redirectsto' => 'ಪುನರ್ನಿರ್ದೇಶನ:',
+
 # Image deletion
 'deletedrevision' => 'ಹಳೆ ಆವೃತ್ತಿ $1 ಅನ್ನು ಅಳಿಸಲಾಗಿದೆ',
 'filedeleteerror-short' => 'ಈ ಫೈಲನ್ನು ಅಳಿಸುವುದರಲ್ಲಿ ದೋಷ: $1',
@@ -2121,4 +2125,15 @@ $5
 'revdelete-restricted' => 'ನಿರ್ವಾಹಕರಿಗೆ ನಿಬಂಧನೆಗಳನ್ನು ಅನ್ವಯಿಸಲಾಯಿತು',
 'revdelete-unrestricted' => 'ನಿರ್ವಾಹಕರ ನಿಬಂಧನೆಗಳನ್ನು ತೆಗೆಯಲಾಯಿತು',
 
+# 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 7babfbc..e245de5 100644 (file)
@@ -510,6 +510,7 @@ $messages = array(
 'namespaces' => '이름공간',
 'variants' => '변수',
 
+'navigation-heading' => '둘러보기 메뉴',
 'errorpagetitle' => '오류',
 'returnto' => '$1(으)로 돌아갑니다.',
 'tagline' => '{{SITENAME}}',
@@ -755,9 +756,12 @@ $2',
 
 이대로 이름 없이 {{SITENAME}}을(를) 이용하거나, 방금 사용했던 계정이나 다른 계정으로 다시 <span class='plainlinks'>[$1 로그인]</span>해서 이용할 수 있습니다.
 웹 브라우저의 캐시를 지우지 않으면 몇몇 문서에서 로그인이 되어 있는 것처럼 보일 수 있다는 점을 유의해 주세요.",
-'welcomecreation' => '== $1 님, 환영합니다! ==
+'welcomeuser' => '$1, 환영합니다!',
+'welcomecreation' => '== $1, 환영합니다! ==
 계정이 만들어졌습니다.
 [[Special:Preferences|{{SITENAME}} 사용자 환경 설정]]을 바꿀 수 있습니다.',
+'welcomecreation-agora' => '계정이 만들어졌습니다.
+[[Special:Preferences|{{SITENAME}} 사용자 환경 설정]]을 바꿀 수 있습니다.',
 'yourname' => '사용자 이름:',
 'yourpassword' => '비밀번호:',
 'yourpasswordagain' => '비밀번호 다시 입력:',
@@ -1924,6 +1928,7 @@ URL이 올바르고 접근 가능한지를 확인하고 다시 시도해주세
 'backend-fail-notsame' => '$1 파일과 같은 이름을 가진 다른 파일이 존재합니다.',
 'backend-fail-invalidpath' => '$1 경로가 유효하지 않습니다.',
 'backend-fail-delete' => '$1 파일을 삭제할 수 없습니다.',
+'backend-fail-describe' => '"$1" 파일에 대한 메타데이터를 바꿀 수 없습니다.',
 'backend-fail-alreadyexists' => '$1 파일이 이미 존재합니다.',
 'backend-fail-store' => '$1 파일을 $2 경로에 저장하지 못했습니다.',
 'backend-fail-copy' => '$1 파일을 $2 경로에 복사하지 못했습니다.',
index 8aaf935..d8c5c7a 100644 (file)
@@ -43,9 +43,9 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Джибериулени черт:',
 'tog-justify' => 'Текстни бетни кенглигине кёре тиз',
-'tog-hideminor' => 'Ð\94жангÑ\8b Ñ\82Ñ\8eÑ\80лениÑ\83лени Ñ\81пиÑ\81огÑ\83нда гитче тюрлениулени кёргюзме',
-'tog-hidepatrolled' => 'Ð\94жангÑ\8b Ñ\82Ñ\8eÑ\80лениÑ\83лени Ñ\81пиÑ\81огÑ\83нда тинтилген тюрлениулени кёргюзме',
-'tog-newpageshidepatrolled' => 'Ð\94жангÑ\8b Ð±ÐµÑ\82лени Ñ\81пиÑ\81огÑ\83нда тинтилген бетлени кёргюзме',
+'tog-hideminor' => 'Ð\94жангÑ\8b Ñ\82Ñ\8eÑ\80лениÑ\83лени Ñ\82измеÑ\81инде гитче тюрлениулени кёргюзме',
+'tog-hidepatrolled' => 'Ð\94жангÑ\8b Ñ\82Ñ\8eÑ\80лениÑ\83лени Ñ\82измеÑ\81инде тинтилген тюрлениулени кёргюзме',
+'tog-newpageshidepatrolled' => 'Ð\94жангÑ\8b Ð±ÐµÑ\82лени Ñ\82измеÑ\81инде тинтилген бетлени кёргюзме',
 'tog-extendwatchlist' => 'Кёзде тургъан тизмени, къуру ахыр тюл, бютеу тюрлениулени кёрюр ючюн кенгерт',
 'tog-usenewrc' => 'Ахыр тюрлениуледе эм кёздеги тизмеде бетлени къауум тюрлениулери (JavaScript керекди)',
 'tog-numberheadings' => 'Башлыкъланы (бёлюмлени атлары) автомат номерленсинле',
@@ -206,6 +206,7 @@ $messages = array(
 'namespaces' => 'Атланы аламы',
 'variants' => 'Вариантла',
 
+'navigation-heading' => 'Навигация меню',
 'errorpagetitle' => 'Халат',
 'returnto' => '«$1» бетге къайт',
 'tagline' => '{{SITENAME}} сайтдан',
@@ -352,7 +353,7 @@ $1',
 'nosuchspecialpage' => 'Быллай къуллукъ бет джокъду',
 'nospecialpagetext' => '<strong>Сиз излеген къуллукъ бет джокъду.</strong>
 
\91олгÑ\8aан ÐºÑ\8aÑ\83ллÑ\83кÑ\8a Ð±ÐµÑ\82лени Ñ\81пиÑ\81огÑ\83: [[Special:SpecialPages|{{int:specialpages}}]].',
\91олгÑ\8aан ÐºÑ\8aÑ\83ллÑ\83кÑ\8a Ð±ÐµÑ\82лени Ñ\82измеÑ\81и: [[Special:SpecialPages|{{int:specialpages}}]].',
 
 # General errors
 'error' => 'Халат',
@@ -398,6 +399,8 @@ $1',
 'cannotdelete' => '«$1» файлны неда бетни кетерирге болмайды.
 Башха къошулуучу кетерген болургъа боллукъду аны.',
 'cannotdelete-title' => '«$1» бетни кетерирге болмайды',
+'delete-hook-aborted' => 'Тюрлениу тохтатыучу процедура бла ызына алынды.
+Ачыкълау берилмегенди.',
 'badtitle' => 'Джарамагъан ат',
 'badtitletext' => 'Сорулгъан бетни аты терсди, бошду, неда интервики аты терс джазылгъанды. Келишмеген (хайырланыргъа болмагъан) символла хайырланыргъада боллукъдула атында.',
 'perfcached' => 'Бу информация кэшден алыннганды, ахыр тюрлениулени кёргюзмезге боллукъду. Кэшде максимум {{PLURAL:$1|джазыу}} сакъланады.',
@@ -413,15 +416,26 @@ $1',
 'actionthrottledtext' => 'Спамгъа къаршчы кюрешиуню себебинден, аз заманны ичинде бу амал бла кёб кере хайырланыу тыйылыбды. Кечирек джангыдан кёрюгюз.',
 'protectedpagetext' => 'Бу бет тюрлендириуге джабылыбды.',
 'viewsourcetext' => 'Сиз бу бетни башланнган текстине къараргъа эм аны копия этерге боллукъсуз:',
-'protectedinterface' => 'Бу бетде программаны интерфейс билдириую барды. Вандализмге къаршчы кюрешиу себебли, бу бетни тюрлендириу джабылыбды.',
+'viewyourtext' => "Бу бетде '''кесигизни тюрлендириулеригизни''' къайнакъ текстине къараргъа эм копия этерге боллукъсуз:",
+'protectedinterface' => 'Бу бетде программаны интерфейс билдириую барды.
+Бютеу викиледе да бу билдириуню кёчюрмесин къошар неда тюрлендирир ючюн MediaWiki-ни локализациясыны сайты [//translatewiki.net/ translatewiki.net]-ни хайырландырыгъыз.',
 'editinginterface' => "'''Эс бёл:''' Сен системаны интерфейс бетин тюрлендире тураса. Бу, викини башха къошулуучуларына да тиерик затды. Кёчюрюр ючюн неда кёчюрмелени тюрлендирир ючюн, MediaWiki-ни локализация этиу проекти [//translatewiki.net/ translatewiki.net]-ни хайырландырыгъыз.",
 'sqlhidden' => '(SQL соруу джашырылыбды)',
 'cascadeprotected' => 'Бу бет тюрлениуледен джакъланыбды, ол каскадлы джакълау къабыл этилиннген  {{PLURAL:$1|бетге|бетлеге}} киргени ючюндю:
 $2',
 'namespaceprotected' => '«$1» ат аламда бетлени тюрлендирирге эркинлигигиз джокъду.',
+'customcssprotected' => 'Бу CSS-бетни тюрлендирирге эркинлигигиз джокъду, бу бетде башха къошулуучуну энчи джарашдырыулары барды.',
+'customjsprotected' => 'Бу JavaScript-бетни тюрлендирирге эркинлигигиз джокъду, бу бетде башха къошулуучуну энчи джарашдырыулары барды.',
 'ns-specialprotected' => '«{{ns:special}}» ат аламны бетлерин тюрлендирирге болмайды.',
 'titleprotected' => "Быллай атлы бет къураргъа [[User:$1|$1]]  къоймайды.
 Белгиленнген чурум: ''$2''.",
+'filereadonlyerror' => "«$2» гезен «къуру окъур ючюн» режимде болгъаны себебли «$1» файл тюрленмейди.
+
+Бу режимни салгъан администратор бу ангылатыуну къойгъанды: «''$3''».",
+'invalidtitle-knownnamespace' => '«$2» ат аламы бла эм «$3» тексти бла джарамагъан башлыкъ.',
+'invalidtitle-unknownnamespace' => '$1 белгили болмагъан алам номери бла эм «$2» тексти бла джарамагъан башлыкъ',
+'exception-nologin' => 'Авторизацияны ётмегенсиз',
+'exception-nologin-text' => 'Бу бетге къарар ючюн неда сорулгъан ишни этер ючюн авторизацияны ётерге керекди.',
 
 # Virus scanner
 'virus-badscanner' => "Джарашдырыуну хатасы. Белгисиз вирус сканер: ''$1''",
@@ -433,15 +447,19 @@ $2',
 
 Сиз {{SITENAME}} сайтда аноним халда къалыргъа боллкъсуз. неда <span class='plainlinks'>[$1 джангыдан кирирге]</span>.
 Талай бетле сиз тергеу джазыу (аккаунт) бла киргенча кёрюнюрге боллукъдула, аны кетерир ючюн кэшни джангыртыгъыз.",
+'welcomeuser' => 'Сау кел, $1!',
 'welcomecreation' => '== Хош келигиз, $1!  ==
 Сизни тергеу джазыуугъуз (аккаунтугъуз) къуралды.
 Сайтны [[Special:Preferences|персонал джарашдырыуларыны]]  къараргъа унутмагъыз.',
+'welcomecreation-agora' => 'Сизни тергеу джазыуугъуз (аккаунтугъуз) къуралды.
+{{SITENAME}} сайтда [[Special:Preferences|джарашдырыуларыгъызны]] тюрлендирирге унутмагъыз.',
 'yourname' => 'Къошулуучуну аты',
 'yourpassword' => 'Паролюгъуз:',
 'yourpasswordagain' => 'Паролну джангыдан джаз:',
 'remembermypassword' => 'Бу компьютерде мени тергеў джазыўуму унутма (эм кёб $1 {{PLURAL:$1|кюн|кюн}})',
 'securelogin-stick-https' => 'Чыкъгъандан сора да HTTPS бла байламлы къой',
 'yourdomainname' => 'Сизни доменигиз:',
+'password-change-forbidden' => 'Бу викиде паролугъузну тюрлендиреллик тюлсюз.',
 'externaldberror' => 'Тыш информация базаны болушлугъу бла аутентификация, халатлы болду, неда тыш аккаунтугъузну тюрлендирирге хакъларагъыз джетмейди.',
 'login' => 'Кириу',
 'nav-login-createaccount' => 'Кириу / регистрация этиу',
@@ -466,6 +484,8 @@ $2',
 'createaccounterror' => 'Быллай тергеу джазыу (аккаунт) къураргъа болмайды: $1',
 'nocookiesnew' => 'Къошлуучу регистрацияны ётгенди, алай кирмегенди. {{SITENAME}} къошулуучуланы таныр ючюн «cookies»-ни хайырландырады. Сиз «cookies»-ни эркин этмегенсиз. «Cookies»-ни эркин этигиза да, андан сора джангы атыгъыз эм паролюгъуз бла киригиз.',
 'nocookieslogin' => '{{SITENAME}} къошулуучуланы таныр ючюн «cookies»-ни хаырландырады. Сиз аны джукълатыб турасыз. «Cookies»-ни эркин этигизда джангыдан кёрюгюз.',
+'nocookiesfornew' => 'Къайнагъын тинтир амал болмагъаны себебли тергеу джазыу къуралмады.
+«Cookies» ачыкъ болгъанына ишексиз болугъуз, бетни джангыртыгъыз эм энтда бир кере кёрюгюз.',
 'noname' => 'Терс атны джазгъансыз.',
 'loginsuccesstitle' => 'Авторизация тыйыншлы ётдю',
 'loginsuccess' => "'''Энди {{SITENAME}} сайтха «$1» ат бла кирдигиз.'''",
@@ -479,6 +499,7 @@ $2',
 'wrongpasswordempty' => 'Пароль джазылмай къалгъанды. Джангыдан кёрюгюз.',
 'passwordtooshort' => '$1 {{PLURAL:$1|символдан}} аз болмазгъа керекди пароль.',
 'password-name-match' => 'Пароль къошулуучу атдан башха тюрлю болургъа керекди.',
+'password-login-forbidden' => 'Бу къошулуучу ат бла паролну хайырландыргъан джарамайды.',
 'mailmypassword' => 'Меннге e-mail бла джангы пароль джибер',
 'passwordremindertitle' => '{{SITENAME}}  къошулуучугъа джангы болджаллы пароль',
 'passwordremindertext' => 'Ким эседа (сиз болургъа боллукъсуз, IP-адрес: $1) {{SITENAME}} ($4) къошулуучугъа джангы пароль къураргъа соргъанды. $2 къошулуучугъа джангы пароль: $3. Сорууну джиберген сиз болгъан эсегиз, системагъа кирирге эм паролну алышдырыргъа тыйычлыды. Джангы паролну $5 {{PLURAL:$5|кюнню}} ичинде амалы боллукъду.
@@ -501,6 +522,7 @@ $2',
 'emailconfirmlink' => 'Электрон почта адресигизни бегитигиз.',
 'invalidemailaddress' => 'Электрон почта адресигизи къабыл этилинирге болмайды, форматха келишмегени ючюн.
 Тюз адрес джазыгъыз неда тизгинни бош къоюгъуз.',
+'cannotchangeemail' => 'Тергеу джазыуну электрон почтасыны адреслерин бу викиде тюрлендирирге болмайды.',
 'emaildisabled' => 'Бу сайт, электрон потча бла билдириуле иймейди.',
 'accountcreated' => 'Тергеу джазыу (аккаунт) къуралды',
 'accountcreatedtext' => '$1 къошулуучугъа тергеу джазыу (аккаунт) къуралды.',
@@ -511,11 +533,13 @@ $2',
 'usernamehasherror' => 'Къошулуучуну атында «#» символ болургъа джарамайда.',
 'login-throttled' => 'Сиз асыры кёб кере кирирге кюрешгенсиз.
 Джангыдан кёргюнчю бираз заман ётдюрюгюз.',
+'login-abort-generic' => 'Системагъа кириу джетишимсиз болду',
 'loginlanguagelabel' => 'Тил: $1',
 'suspicious-userlogout' => 'Терс браузер неда кэш этиучу прокси берген соруугъа ушагъаны ючюн, Сизни чыгъаргъа сорууугъуз алынмагъанды.',
 
 # E-mail sending
 'php-mail-error-unknown' => "PHP's mail() функцияда белгили болмагъан халат",
+'user-mail-no-addy' => 'Бир e-mail адрес болмагъанлай e-mail иерге кюрешди',
 
 # Change password dialog
 'resetpass' => 'Паролну тюрлендириу',
@@ -546,8 +570,16 @@ $2',
 'passwordreset-capture-help' => 'Бу белгини салсагъыз, къошулуучугъа ийилген болджаллы пароль бла билдириу сизге кёргюзюллюкдю.',
 'passwordreset-email' => 'Электрон почтаны адреси:',
 'passwordreset-emailtitle' => '{{SITENAME}} сайтдагъы тергеу джазыуну юсюнден билгиле',
+'passwordreset-emailelement' => 'Къошулуучуну аты: $1
+Болджаллы пароль: $2',
+'passwordreset-emailsent' => 'Эсгертиу e-mail ийилди.',
+'passwordreset-emailsent-capture' => 'Ийилген эсгертиу e-mail тюбюрекде берилибди.',
+'passwordreset-emailerror-capture' => 'Ийилген эсгертиу e-mail тюбюрекде берилибди, аны ашырыуу джетишимсиз болду, чурум: $1',
 
 # Special:ChangeEmail
+'changeemail' => 'Электрон почтаны адресин ауушдур',
+'changeemail-header' => 'Электрон почтаны адресин ауушдуруу',
+'changeemail-text' => 'Сизни e-mail адресигизни тюрлендирир ючюн бу форманы толтуругъуз. Тюрлениуню бегитир ючюн паролну джазаргъа керек боллукъду.',
 'changeemail-no-info' => 'Бу бетни кёрюр ючюн сиз системагъа тергеу джазыуугъуз (аккаунтугъуз) бла кирирге керексиз.',
 'changeemail-oldemail' => 'Почтаны бусагъатдагъы адреси:',
 'changeemail-newemail' => 'Электрон почтаны джангы адреси:',
@@ -643,8 +675,7 @@ $2',
 '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> табаргъа боллукъсуз.',
+Сиз [[Special:Search/{{PAGENAME}}|бу атны таныгъан]] башха статьяланы, неда <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} журналлада джазылгъанланы]</span> табаргъа боллукъсуз, алай а бу бетни къураргъа эркинлигигиз джокъду.',
 'userpage-userdoesnotexist' => '«<nowiki>$1</nowiki>» тергеу джазыу (аккаунт) джокъду. Къураргъа/тюрлендирирге излеймисиз бу бетни?',
 'userpage-userdoesnotexist-view' => '«$1» тергеу джазыу (аккаунт) джокъду.',
 'blocked-notice-logextract' => 'Бу къошулуучу бусагъатда блокланыб турады.
@@ -653,7 +684,6 @@ $2',
 * '''Firefox / Safari''': ''Shift'' тиекни басыб тургъанлай инструментлени панелинде ''Джангырт'' тиекни басыгъыз, неда ''Ctrl-F5'' басыгъыз, неда ''Ctrl-R'' (Mac-да — ''⌘-R'')
 * '''Google Chrome:''' ''Ctrl-Shift-R'' басыгъыз (Mac-да — ''⌘-Shift-R'')
 * '''Internet Explorer:''' ''Ctrl'' тиекни басыб тургъанлай ''Джангырт'' тиекни басыгъыз, неда ''Ctrl-F5'' басыгъыз
-* '''Konqueror:''' ''Джангырт'' тиекни басыгъыз, неда ''F5'' тиекни
 * '''Opera:''' ''Инструментле → Джарашдырыула'' менюда кэшни ариулауну сайлагъыз",
 'usercssyoucanpreview' => "'''Юретиу.''' «{{int:showpreview}}» тиекни басыгъыз, джангы CSS-файлны сакълатырыгъызны аллы бла тинтиб кёрюрча.",
 'userjsyoucanpreview' => "'''Юретиу.''' «{{int:showpreview}}» тиекни басыгъыз, джангы JS-файлны сакълатырыгъызны аллы бла тинтиб кёрюрча.",
@@ -748,6 +778,15 @@ $2',
 'edit-already-exists' => 'Джангы бет къураргъа боллукъ тюлдю.
 Алайсызда барды бу атлы бет.',
 'defaultmessagetext' => 'Тынгылау бла текст',
+'content-failed-to-parse' => '$2 контент $1 типге келишмейди: $3',
+'invalid-content-data' => 'Джаламагъан билгиле',
+'content-not-allowed-here' => '[[$2]] бетни ичинде "$1" контент джарамайды',
+
+# Content models
+'content-model-wikitext' => 'вики-текст',
+'content-model-text' => 'тюз текст',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Эсгериу:''' Бу бетде асыры кёб къайнакълы функция барды.
@@ -762,6 +801,13 @@ $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' => 'Джабылмагъан pre табылды',
+'parser-unstrip-recursion-limit' => 'Рекурсияны чеги ($1) оздурулду',
+'converter-manual-rule-error' => 'Тилни башха тюрлю этиуню къол джоругъунда халат',
 
 # "Undo" feature
 'undo-success' => 'Бу тюрлениу ызына алыныргъа боллукъду. Тилейбиз, версияланы тенглешдириуюн осмакълагъыз, керти да бу тюрлендириулени этерге излегенигизден ишексиз болугъуз, сора, тюрлениуле къабыл этилир ючюн, «Бетни къош» деген тиекден басыгъыз.',
@@ -950,6 +996,11 @@ $1",
 'editundo' => 'ызына алыу',
 'diff-multi' => '({{PLURAL:$2|Бир къошулуучу|$2 къошулуучу}} этген {{PLURAL:$1|$1 аралыкъ тюрлениу|$1 аралыкъ тюрлениу}} кёргюзюлмегенди)',
 'diff-multi-manyusers' => '($2 къошулуучудан кёб {{PLURAL:$2|Бир къошулуучу|къошулуучу}} этген {{PLURAL:$1|бир аралыкъ тюрлениу|$1 аралыкъ тюрлениу}} кёргюзюлмегенди)',
+'difference-missing-revision' => 'Бу тенглешдириу ($1) ючюн {{PLURAL:$2|$2 версия}} {{PLURAL:$2|табылмады}}.
+
+
+Бу, эскирген джибериу бла кетерилген бетни версияларын тенглешдириуге кёчген сагъатда кёбюсюне болады.
+Толуракъ информация [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} кетериулени журналында] болургъа боллукъду.',
 
 # Search results
 'searchresults' => 'Излеуню эсеби',
@@ -1035,16 +1086,19 @@ $1",
 'prefs-beta' => 'Бета-амалла',
 'prefs-datetime' => 'Дата бла сагъат',
 'prefs-labs' => 'Эксперимент амалла',
+'prefs-user-pages' => 'Къошулуучуну бетлери',
 'prefs-personal' => 'Энчи билгиле',
 'prefs-rc' => 'Ахыр тюрлениуле',
-'prefs-watchlist' => 'Ð\9aÑ\8aаÑ\80аÑ\83нÑ\83 Ñ\81пиÑ\81огÑ\83',
-'prefs-watchlist-days' => 'Ð\9aÑ\8aаÑ\80аÑ\83нÑ\83 Ñ\81пиÑ\81огÑ\83нда ÐºÑ\91Ñ\80гÑ\8eзÑ\8eллÑ\8eк ÐºÑ\8eннÑ\8e саны:',
+'prefs-watchlist' => 'Ð\9aÑ\91зде Ñ\82Ñ\83Ñ\80гÑ\8aан Ñ\82изме',
+'prefs-watchlist-days' => 'Ð\9aÑ\91зде Ñ\82Ñ\83Ñ\80гÑ\8aан Ñ\82измеде ÐºÑ\91Ñ\80гÑ\8eзÑ\8eллÑ\8eк ÐºÑ\8eнлени саны:',
 'prefs-watchlist-days-max' => 'Максимум $1 {{PLURAL:$1|кюн|кюн}}',
-'prefs-watchlist-edits' => 'Ð\9aÑ\8aаÑ\80аÑ\83нÑ\83 ÐºÐµÐ½Ð³Ð»ÐµÑ\88диÑ\80илген Ñ\81пиÑ\81огÑ\83нда кёргюзюллюк тюрлениулени саны:',
+'prefs-watchlist-edits' => 'Ð\9aÑ\91зде Ñ\82Ñ\83Ñ\80гÑ\8aан Ñ\82измени ÐºÐµÐ½Ð³Ð»ÐµÑ\88диÑ\80илген Ð²Ð°Ñ\80ианÑ\82Ñ\8bнда кёргюзюллюк тюрлениулени саны:',
 'prefs-watchlist-edits-max' => 'Максимум саны:1000',
-'prefs-watchlist-token' => 'Ð\9aÑ\8aаÑ\80аÑ\83нÑ\83 Ñ\81пиÑ\81огÑ\83нÑ\83 токени:',
+'prefs-watchlist-token' => 'Ð\9aÑ\91зде Ñ\82Ñ\8bÑ\80гÑ\8aан Ñ\82измени токени:',
 'prefs-misc' => 'Башха джарашдыдырыула',
 'prefs-resetpass' => 'Паролну тюрлендир',
+'prefs-changeemail' => 'Электрон почтаны адресин ауушдур',
+'prefs-setemail' => 'Лл. почтаны адресин айырыу',
 'prefs-email' => 'Электрон почтаны параметрлери',
 'prefs-rendering' => 'Кёрюнюую',
 'saveprefs' => 'Сакъла',
@@ -1062,8 +1116,8 @@ $1",
 'recentchangesdays-max' => '(максимум $1 {{PLURAL:$1|кюн|кюн}})',
 'recentchangescount' => 'Тынгылау бла кёргюзюллюк тюрлениулени саны:',
 'prefs-help-recentchangescount' => 'Бу, ахыр тюрлениулени, бетни тарихлерин эмда журналланы ичине къошады.',
-'prefs-help-watchlist-token' => 'Ð\91Ñ\83 Ð°Ð»Ð°Ð½Ð½Ñ\8b Ð´Ð¶Ð°Ñ\88Ñ\8bÑ\80Ñ\82Ñ\8bн Ð°Ñ\87Ñ\85Ñ\8bÑ\87 Ð±Ð»Ð° Ñ\82олÑ\82Ñ\83Ñ\80Ñ\83Ñ\83, ÐºÑ\8aаÑ\80аÑ\83 Ñ\81пиÑ\81огÑ\83гÑ\8aÑ\83з ючюн бир RSS-трансляция къурайды.
\91Ñ\83 Ð°Ð»Ð°Ð½Ð´Ð°Ð³Ñ\8aÑ\8b Ð°Ñ\87Ñ\85Ñ\8bÑ\87нÑ\8b Ð±Ð¸Ð»Ð³ÐµÐ½Ð»Ðµ ÐºÑ\8aаÑ\80аÑ\83 Ñ\81пиÑ\81огÑ\83гÑ\8aÑ\83знÑ\83 окъургъа боллукъду, ол себебден сырлы магъана сайлагъыз.
+'prefs-help-watchlist-token' => 'Ð\91Ñ\83 Ð°Ð»Ð°Ð½Ð½Ñ\8b Ð´Ð¶Ð°Ñ\88Ñ\8bÑ\80Ñ\82Ñ\8bн Ð°Ñ\87Ñ\85Ñ\8bÑ\87 Ð±Ð»Ð° Ñ\82олÑ\82Ñ\83Ñ\80Ñ\83Ñ\83, ÐºÑ\91зде Ñ\82Ñ\83Ñ\80гÑ\8aан Ñ\82измегиз ючюн бир RSS-трансляция къурайды.
\91Ñ\83 Ð°Ð»Ð°Ð½Ð´Ð°Ð³Ñ\8aÑ\8b Ð°Ñ\87Ñ\85Ñ\8bÑ\87нÑ\8b Ð±Ð¸Ð»Ð³ÐµÐ½Ð»Ðµ ÐºÑ\91зде Ñ\82Ñ\83Ñ\80гÑ\8aан Ñ\82измегизни окъургъа боллукъду, ол себебден сырлы магъана сайлагъыз.
 Сакъланмагъанлай генерация этилген магъананы хайырландырыргъа боллукъсуз: $1',
 'savedprefs' => 'Джарашдырыуларыгъыз сакъландыла.',
 'timezonelegend' => 'Заман бел:',
@@ -1106,6 +1160,7 @@ $1",
 'yourrealname' => 'Керти атыгъыз:',
 'yourlanguage' => 'Интерфейсни тили:',
 'yourvariant' => 'Ичиндегисини тилини варианты:',
+'prefs-help-variant' => 'Викини бетлерин кёргюзтюрге сайланнган тилни неда орфографияны варианты',
 'yournick' => 'Псевдонимигиз (къол салыулагъа):',
 'prefs-help-signature' => 'Сюзюу бетледеги комментарийлеге «<nowiki>~~~~</nowiki>» символла къошулуб къол салыныргъа керекди, бу, къолугъузгъа эмда заман тамгъагъа буруллукъду.',
 'badsig' => 'Джараусуз къол салыныу.
@@ -1139,6 +1194,10 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'prefs-displaywatchlist' => 'Кёрюнюуню джарашдырыулары',
 'prefs-diffs' => 'Версияланы башхалыкълары',
 
+# User preference: e-mail validation using jQuery
+'email-address-validity-valid' => 'E-mail адрес тюзге ушайды',
+'email-address-validity-invalid' => 'Тюз e-mail адрес джазыгъыз!',
+
 # User rights
 'userrights' => 'Къошулуучуну хакъларына оноу этиу',
 'userrights-lookup-user' => 'Къошулуучуланы къауумуна оноу эт',
@@ -1211,6 +1270,7 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'right-writeapi' => 'API джазыугъа хайырланыуу',
 'right-delete' => 'белтени кетериу',
 'right-bigdelete' => 'узун тарихли бетлени кетериу',
+'right-deletelogentry' => 'журналны белгили бир джазыуларын кетериу эм ызына салыу.',
 'right-deleterevision' => 'бетлени белгили версияларыны кетериу эмда ызына къайтарыу',
 'right-deletedhistory' => 'Узакъдагъы эркинликсиз кетерилген бетлени тарихине къара',
 'right-deletedtext' => 'Кетерилген текстни эм кетерилген версияланы арасындагъы тюрлениулеге къара',
@@ -1238,18 +1298,23 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'right-patrol' => 'Башхаланы тюрлениулерини осмакъланнганларын белгиле',
 'right-autopatrol' => 'Тюрлениуле автоматик осмакъланнган кибик белгиленедиле',
 'right-patrolmarks' => 'Ахыр тюрлениулени осмакъланыуларыны белгилерине къара',
-'right-unwatchedpages' => 'Ð\9aÑ\8aаÑ\80алмагÑ\8aан Ð±ÐµÑ\82лени Ñ\81пиÑ\81огÑ\83на ÐºÑ\8aаÑ\80а',
+'right-unwatchedpages' => 'Ð\9aÑ\91зде Ñ\82Ñ\83Ñ\80гÑ\8aан Ñ\82измегизде Ð±Ð¾Ð»Ð¼Ð°Ð³Ñ\8aан Ð±ÐµÑ\82лени Ñ\82измеÑ\81ине ÐºÑ\8aаÑ\80аÑ\83',
 'right-mergehistory' => 'Бетлени тарихлерини бирлешдир',
 'right-userrights' => 'Бютеу къошулуучуланы хакъларыны тюрлендириу',
 'right-userrights-interwiki' => 'Башха викиледеги къошулуучуларыны хакъларын тюрлендир',
 'right-siteadmin' => 'Билги базаны киритле эмда киритни ач',
 'right-override-export-depth' => 'Бетлени, теренлиги 5-ге дери байламлы бетле бла бирге экспорт эт',
 'right-sendemail' => 'Башха къошулуучулагъа электрон почта джиберирге',
+'right-passwordreset' => "пароль тюрлениуле бла e-mail'леге къарау",
 
 # User rights log
 'rightslog' => 'Къошулуучуну хакъларыны журналы',
 'rightslogtext' => 'Бу къошулуучуну хакъларыны тюрлениуюню журналыды',
 'rightslogentry' => '$1-ни къауумлада членлиги $2-ден $3-ге тюрленнгенди',
+'rightslogentry-autopromote' => '$2 къауумдан автомат халда $3 къауумгъа кёчюрюлдю',
+'logentry-rights-rights' => '$1 къошулуучу, $3 къошулуучуну членлигин $4 къауумдан $5 къауумгъа кёчюрдю',
+'logentry-rights-rights-legacy' => '$1 къошулуучу, $3 къушулуучуну къауумлада членлигин тюрлендирди',
+'logentry-rights-autopromote' => '$1 къошулуучу, $4 къауумдан автомат халда $5 къауумгъа кёчюрюлдю',
 'rightsnone' => '(джокъ)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -1277,6 +1342,7 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'action-suppressionlog' => 'бу энчи журналгъа къарау',
 'action-block' => 'Къошулуучуну блок этиу, тюрлендириуле этерге къоймау',
 'action-protect' => 'бу бетни джакълау дараджасын тюрлендириу',
+'action-rollback' => 'бетни ахыр тюрлендирген къошулуучуну тюрлендириулерин дженгил ызына алыу',
 'action-import' => 'бу бетни башха викиден импорт этиу',
 'action-importupload' => 'бу бетни джюкленнген файлдан импорт этиу',
 'action-patrol' => 'башхаланы тюрлендириулерин патруль этилиннгенлеча белгилеу',
@@ -1286,6 +1352,7 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'action-userrights' => 'къошулуучуну бютеу хакъларын тюрлендириу',
 'action-userrights-interwiki' => 'къошулуучуланы башха викиледе хакъларын тюрлендириу',
 'action-siteadmin' => 'билгилени базасын блокга салыу эм блокдан алыу',
+'action-sendemail' => 'E-mail джибериу',
 
 # Recent changes
 'nchanges' => '$1 {{PLURAL:$1|тюрлениу|тюрлениу}}',
@@ -1318,9 +1385,11 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'rc_categories' => 'Категориялагъа юлеш («|» бла айыр)',
 'rc_categories_any' => 'Къайсы да',
 'rc-change-size' => '$1',
+'rc-change-size-new' => 'Тюрлениуден сора ёлчеми: $1 {{PLURAL:$1|байт}}',
 'newsectionsummary' => '/* $1 */ Джангы бёлюм',
 'rc-enhanced-expand' => 'Къошакъланы кёргюз (JavaScript хайырланады)',
 'rc-enhanced-hide' => 'Къошакъланы джашыр',
+'rc-old-title' => 'биринчи «$1» деб къуралгъан',
 
 # Recent changes linked
 'recentchangeslinked' => 'Байламлы тюрлениуле',
@@ -1347,7 +1416,7 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 
 Бу бетге кетериуле бла ат тюрлендириулени журналы тюбюрекде бериледи:",
 'uploadtext' => "Файл джюклер ючюн тюбюндеги форманы хайырлан.
\90лландан Ð´Ð¶Ñ\8eкленнген Ñ\84айлланÑ\8b ÐºÑ\91Ñ\80Ñ\8eÑ\80 Ð½ÐµÐ´Ð° Ð¸Ð·Ð»ÐµÑ\80 Ñ\8eÑ\87Ñ\8eн [[Special:FileList|джÑ\8eкленнген Ñ\84айлланÑ\8b Ñ\81пиÑ\81огÑ\83на]] къарагъыз, (джангыдан) джюкленнгенле [[Special:Log/upload|джюклеу журналында]], кетерилгенле [[Special:Log/delete|кетериу журналында]] тутуладыла.
\90лландан Ð´Ð¶Ñ\8eкленнген Ñ\84айлланÑ\8b ÐºÑ\91Ñ\80Ñ\8eÑ\80 Ð½ÐµÐ´Ð° Ð¸Ð·Ð»ÐµÑ\80 Ñ\8eÑ\87Ñ\8eн [[Special:FileList|джÑ\8eкленнген Ñ\84айлланÑ\8b Ñ\82измеÑ\81ине]] къарагъыз, (джангыдан) джюкленнгенле [[Special:Log/upload|джюклеу журналында]], кетерилгенле [[Special:Log/delete|кетериу журналында]] тутуладыла.
 
 Бетге файл салыр ючюн байлмыгъызда тюбюндеги формаларыны бирин хайырланыгъыз;
 * Файлны бютеу ёлчемини салыр ючюн: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>'''
@@ -1358,7 +1427,7 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'upload-prohibited' => 'Джасакъ этилген файлланы типлери: $1.',
 'uploadlog' => 'Джюклеулени журналы',
 'uploadlogpage' => 'Джюклеулени журналы',
-'uploadlogpagetext' => 'ТÑ\8eбÑ\8eнде Ñ\8dм Ð°Ñ\85Ñ\8bÑ\80 ÐºÑ\8aоÑ\88Ñ\83лгÑ\8aан Ñ\84айлланÑ\8b Ñ\81пиÑ\81огÑ\83 барды.
+'uploadlogpagetext' => 'ТÑ\8eбÑ\8eнде Ñ\8dм Ð°Ñ\85Ñ\8bÑ\80 ÐºÑ\8aоÑ\88Ñ\83лгÑ\8aан Ñ\84айлланÑ\8b Ñ\82измеÑ\81и барды.
 Дагъыда [[Special:NewFiles|dosyalджангы файлланы галереясына]] къара, анда джангы джюклеулени юсюнден билгиле толу кёрюгюзюлгендиле.',
 'filename' => 'Файлны аты',
 'filedesc' => 'Къысха ачыкълау',
@@ -1372,6 +1441,7 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'minlength1' => 'Файлны аты эм азы бла бир харифден болургъа керекди.',
 'illegalfilename' => '«$1» файл атда хайырланыугъа къабыл этилмеген символла бардыла.
 Файлны атын тюрлендириб, джангыдан джюклегиз.',
+'filename-toolong' => 'Файлланы атлары 240 байтдан кёб болмазгъа керекдиле.',
 'badfilename' => 'Файлны аты $1 болуб ауушду.',
 'filetype-mime-mismatch' => '«.$1» файл MIME-типге ($2) келишмейди.',
 'filetype-badmime' => '«$1» MIME типли файлланы джюклениуюне эркинлик берлимейди.',
@@ -1395,6 +1465,7 @@ $1 {{PLURAL:$1|символдан|символладан}} кеб болургъ
 'large-file' => 'Файлланы $1 байтдан уллу болмасы изленеди (бу файлны ёлчеми $2)',
 'largefileserver' => 'Бу файл сервер эркинлик бергенден уллуду.',
 'emptyfile' => 'Джюклеген файлыгъыз бош кёрюнеди. Буну чуруму файлны атыны джазыуда халат болургъа болур. Файлны джюклерге излегенигизден ишексиз болугъуз.',
+'windows-nonascii-filename' => 'ASCII таблицада болмагъан символла бла файл атланы бу вики тутмайды',
 'fileexists' => 'Быллай атлы файл барды.
 Аны ауушдурурда аккылы эсегиз, алгъын <strong>[[:$1]]</strong> файлгъа кёз джетдиригиз.
 [[$1|thumb]]',
@@ -1481,12 +1552,14 @@ URL-адрес тюз болгъанын осмакълагъыз эмда дж
 # File backend
 'backend-fail-delete' => '«$1» файл кетерилмеди.',
 'backend-fail-store' => '$1 файл $2 ичинде сакъланылынмады.',
+'backend-fail-read' => '«$1» файлны окъуялмады.',
 
 # Special:UploadStash
 'uploadstash' => 'Джашыртын джюклеу',
 'uploadstash-clear' => 'Джашырылгъан файлланы ариула',
 'uploadstash-nofiles' => 'Сизни джашырылгъан файлларыгъыз джокъду',
 'uploadstash-refresh' => 'Файлланы тизмесин джангырт',
+'invalid-chunk-offset' => 'Фрагментни джарамагъан офсети',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'Эркинлик джасакъланнганды',
@@ -1496,7 +1569,7 @@ CGI тамалында ишлерге эмда <code>img_auth</code> бла иш
 Къарагъыз: https://www.mediawiki.org/wiki/Manual:Image_Authorization.',
 'img-auth-notindir' => 'Изленнген джол джюклениулени папкасы бла байламлы тюлдю.',
 'img-auth-badtitle' => '«$1» бла джараулу башлыкъ этилмейди.',
-'img-auth-nologinnWL' => 'Сиз Ñ\81иÑ\81Ñ\82емагÑ\8aа ÐºÐ¸Ñ\80медигиз, Ñ\8dмда Â«$1» Ð°ÐºÑ\8a Ñ\81пиÑ\81окда тюлдю.',
+'img-auth-nologinnWL' => 'Сиз Ñ\81иÑ\81Ñ\82емагÑ\8aа ÐºÐ¸Ñ\80медигиз, Ñ\8dмда Â«$1» Ð°ÐºÑ\8a Ñ\82измеде тюлдю.',
 'img-auth-nofile' => '«$1» файл джокъду.',
 'img-auth-isdir' => '«$1» каталогга кирирге излейсиз.
 Къуру файллагъа кирирге эркинлик барды.',
@@ -1537,7 +1610,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 Къошулуучугъа кёре айырыуда, ол къошулуучуну джангыз кёб болмай джюклеген файллары кёргюзюледиле.',
 'listfiles_search_for' => 'Медиа ат бла изле:',
 'imgfile' => 'файл',
-'listfiles' => 'ФайлланÑ\8b Ñ\81пиÑ\81огÑ\83',
+'listfiles' => 'ФайлланÑ\8b Ñ\82измеÑ\81и',
 'listfiles_thumb' => 'Миниатюра',
 'listfiles_date' => 'Заман',
 'listfiles_name' => 'Файлны аты',
@@ -1566,8 +1639,8 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'imagelinks' => 'Файлны хайырланыуу',
 'linkstoimage' => 'Бу файлгъа {{PLURAL:$1|бет|$1 бет}} джибередиле:',
 'linkstoimage-more' => '$1-ден артыкъ {{PLURAL:$1|бет|бет}} бу файлгъа джибериу береди.
\9aÑ\91зÑ\8eÑ\83деги Ñ\81пиÑ\81ок къуру бу файлгъа джибериу берген {{PLURAL:$1|биринчи файлны|биринчи $1 файлны}} кёргюзеди.
-[[Special:WhatLinksHere/$2|ТолÑ\83 Ñ\81пиоÑ\81ок]] барды.',
\9aÑ\91зÑ\8eÑ\83деги Ñ\82изме къуру бу файлгъа джибериу берген {{PLURAL:$1|биринчи файлны|биринчи $1 файлны}} кёргюзеди.
+[[Special:WhatLinksHere/$2|ТолÑ\83 Ñ\82изме]] барды.',
 'nolinkstoimage' => 'Бу файлгъа джиберген бет джокъду.',
 'morelinkstoimage' => 'Бу файлгъа [[Special:WhatLinksHere/$1|къалгъан джибериулеге]] къара.',
 'linkstoimage-redirect' => '$1 (файл редирект) $2',
@@ -1627,7 +1700,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 
 # Unused templates
 'unusedtemplates' => 'Хайырландырылмагъан шаблонла',
-'unusedtemplatestext' => 'Ð\91Ñ\83 Ð±ÐµÑ\82 {{ns:template}} Ð°Ð»Ð°Ð½ Ð°Ñ\82Ñ\8bнда Ñ\82Ñ\83Ñ\80гÑ\8aан Ñ\8dмда Ð±Ð°Ñ\88Ñ\85а Ð±ÐµÑ\82леге ÐºÑ\8aоÑ\88Ñ\83лгмаÑ\8aан Ð±ÐµÑ\82лени Ñ\81пиÑ\81огÑ\83 барды. Кетериуню аллы бла, шаблоннга башха джибериулени джокоълагъыз.',
+'unusedtemplatestext' => 'Ð\91Ñ\83 Ð±ÐµÑ\82 {{ns:template}} Ð°Ð»Ð°Ð½ Ð°Ñ\82Ñ\8bнда Ñ\82Ñ\83Ñ\80гÑ\8aан Ñ\8dмда Ð±Ð°Ñ\88Ñ\85а Ð±ÐµÑ\82леге ÐºÑ\8aоÑ\88Ñ\83лгмаÑ\8aан Ð±ÐµÑ\82лени Ñ\82измеÑ\81и барды. Кетериуню аллы бла, шаблоннга башха джибериулени джокоълагъыз.',
 'unusedtemplateswlh' => 'башха джибериуле',
 
 # Random page
@@ -1661,11 +1734,12 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 
 'disambiguations' => 'Ангылам айыргъан бетлеге джибериулери болгъан бетле',
 'disambiguationspage' => 'Template:кёб магъаналылыкъ',
-'disambiguations-text' => "Бу бетле '''кёб магъаналы бетлеге''' джибериу этедиле. Аны орнуна ала белгили бир статьягъа джибериу этерге керек болурла.<br />
-[[MediaWiki:Disambiguationspage]] бетде аты салынган шаблон бетде болса, ол бет кёб магъаналы бетге саналады.",
+'disambiguations-text' => "Келтирилген бетледе '''кёб магъаналы бетлеге''' эм азы бла бир джибериу барды.
+Аны орнуна ала белгили бир статьягъа джибериу этерге керек болурла.<br />
+[[MediaWiki:Disambiguationspage]] бетде аты салыннган шаблон бар эсе, ол бет кёб магъаналы бетге саналады.",
 
 'doubleredirects' => 'Джибериу болгъан джибериуле',
-'doubleredirectstext' => 'Ð\91Ñ\83 Ð±ÐµÑ\82де Ð±Ð°Ñ\88Ñ\85Ñ\8b Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83леге Ñ\8dÑ\82илген Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83лени Ñ\81пиÑ\81огÑ\83 барды.
+'doubleredirectstext' => 'Ð\91Ñ\83 Ð±ÐµÑ\82де Ð±Ð°Ñ\88Ñ\85Ñ\8b Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83леге Ñ\8dÑ\82илген Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83лени Ñ\82измеÑ\81и барды.
 Хар тизгин биринчи неда экинчи джибериуню эмда асламысында бетни аты джазылгъан, биринчи джибериу кёргюзген, экинчи джибериуню нюзюр бети джазылады.
 <del>Юсю сызылгъан</del> джазыула тюзетилген этгендиле.',
 'double-redirect-fixed-move' => '[[$1]] бет атын тюрлендиргенди, энди ол [[$2]] бетге джибериу этеди',
@@ -1737,7 +1811,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'move' => 'Атын тюрлендириу',
 'movethispage' => 'Бу бетни атын тюрлендир',
 'unusedimagestext' => 'Файлла бардыла, алай а бетге джазылмагъандыла.
-УнÑ\83Ñ\82магÑ\8aÑ\8bз, Ð±Ð°Ñ\88Ñ\85а Ð²ÐµÐ± Ñ\81айÑ\82ланÑ\8b Ð±Ñ\83 Ñ\84айлгÑ\8aа Ð°Ñ\87Ñ\8bкÑ\8aдан URL Ð±Ð»Ð° Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83 Ð±ÐµÑ\80иÑ\80ге Ð±Ð¾Ð»Ð»Ñ\83кÑ\8aлаÑ\80Ñ\8bн, Ñ\8dмда Ð°Ð½Ñ\8b Ñ\8eÑ\87Ñ\8eн Ð±Ñ\83 Ñ\81пиÑ\81окга киргенине къарамай актив халда хайырланыргъа боллукъду.',
+УнÑ\83Ñ\82магÑ\8aÑ\8bз, Ð±Ð°Ñ\88Ñ\85а Ð²ÐµÐ± Ñ\81айÑ\82ланÑ\8b Ð±Ñ\83 Ñ\84айлгÑ\8aа Ð°Ñ\87Ñ\8bкÑ\8aдан URL Ð±Ð»Ð° Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83 Ð±ÐµÑ\80иÑ\80ге Ð±Ð¾Ð»Ð»Ñ\83кÑ\8aлаÑ\80Ñ\8bн, Ñ\8dмда Ð°Ð½Ñ\8b Ñ\8eÑ\87Ñ\8eн Ð±Ñ\83 Ñ\82измеге киргенине къарамай актив халда хайырланыргъа боллукъду.',
 'unusedcategoriestext' => 'Бу категорияла болгъанлыкъгъа, чырт бир статья неда категория джанындан хайырланмыайдыла.',
 'notargettitle' => 'Нюзюр белгиленмегенди',
 'notargettext' => 'Бу функцияны ишлетир ючюн нюзюр бетни неда къошулуучуну белгилемегенсиз.',
@@ -1752,7 +1826,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'booksources-search-legend' => 'Китабны юсюнден информация излеу',
 'booksources-isbn' => 'ISBN:',
 'booksources-go' => 'Таб',
-'booksources-text' => 'Ð\91Ñ\83 Ð±ÐµÑ\82де Ð´Ð¶Ð°Ð½Ð³Ñ\8b Ñ\8dмда Ñ\8dÑ\81ки ÐºÐ¸Ñ\82аб Ñ\81аÑ\82Ñ\85ан Ð±Ð°Ñ\88Ñ\85а Ñ\81айÑ\82лагÑ\8aа Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83лени Ñ\81пиÑ\81огÑ\83 барды, эм излеген китабларыгъызны юсюнден кёбюрек билги билирге боллукъсуз.',
+'booksources-text' => 'Ð\91Ñ\83 Ð±ÐµÑ\82де Ð´Ð¶Ð°Ð½Ð³Ñ\8b Ñ\8dмда Ñ\8dÑ\81ки ÐºÐ¸Ñ\82аб Ñ\81аÑ\82Ñ\85ан Ð±Ð°Ñ\88Ñ\85а Ñ\81айÑ\82лагÑ\8aа Ð´Ð¶Ð¸Ð±ÐµÑ\80иÑ\83лени Ñ\82измеÑ\81и барды, эм излеген китабларыгъызны юсюнден кёбюрек билги билирге боллукъсуз.',
 'booksources-invalid-isbn' => 'Берилген ISBN джараусуз кибик кёрюнеди; оригинал къайнакъдан кёчюрюлген заманда халатланы контроль этигиз.',
 
 # Special:Log
@@ -1778,7 +1852,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 'allpagesprev' => 'Аллындагъы',
 'allpagesnext' => 'Эндиги',
 'allpagessubmit' => 'Тындыр',
-'allpagesprefix' => 'Ð\91Ñ\8bлайда Ð´Ð¶Ð°Ð·Ð³Ñ\8aан Ñ\85аÑ\80иÑ\84леден Ð±Ð°Ñ\88ланнган Ð±ÐµÑ\82лени Ñ\81пиÑ\81ок эт:',
+'allpagesprefix' => 'Ð\91Ñ\8bлайда Ð´Ð¶Ð°Ð·Ð³Ñ\8aан Ñ\85аÑ\80иÑ\84леден Ð±Ð°Ñ\88ланнган Ð±ÐµÑ\82лени Ñ\82изме эт:',
 'allpagesbadtitle' => 'Кирилген бет аты тиллени арасы байлм неда викилени арасында байлам болгъаны себебли джараусузду. Башлыкълада хайырланыуу джасакъ болгъан бир неда андан аслам символ тутаргъа болур.',
 'allpages-bad-ns' => '{{SITENAME}} сайтда «$1» ат алам джокъду.',
 'allpages-hide-redirects' => 'Башха бетлеге джиберген бетлени (редиректлени) джашыр',
@@ -1816,7 +1890,7 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 
 # Special:ActiveUsers
 'activeusers' => 'Актив къошулуучуланы тизмеси',
-'activeusers-intro' => 'Ð\91Ñ\83, Ð°Ñ\85Ñ\8bÑ\80 $1 {{PLURAL:$1|кÑ\8eнде|кÑ\8eнде}} ÐºÑ\8aаллайда Ð±Ð¾Ð»Ñ\81Ñ\83н Ð¸Ñ\88леÑ\82ме ÐºÑ\91Ñ\80гÑ\8eзген ÐºÑ\8aоÑ\88лÑ\83Ñ\83Ñ\87Ñ\83ланÑ\8b Ñ\81пиÑ\81огÑ\83дÑ\83.',
+'activeusers-intro' => 'Ð\91Ñ\83, Ð°Ñ\85Ñ\8bÑ\80 $1 {{PLURAL:$1|кÑ\8eнде|кÑ\8eнде}} ÐºÑ\8aаллайда Ð±Ð¾Ð»Ñ\81Ñ\83н Ð¸Ñ\88леÑ\82ме ÐºÑ\91Ñ\80гÑ\8eзген ÐºÑ\8aоÑ\88лÑ\83Ñ\83Ñ\87Ñ\83ланÑ\8b Ñ\82измеÑ\81иди.',
 'activeusers-count' => 'Ахыр {{PLURAL:$3|кюнде|$3 кюнде}} $1 {{PLURAL:$1|тюрлендириу|тюрлендириу}}',
 'activeusers-from' => 'Бу бла башланнган къошлуучуланы кёргюз:',
 'activeusers-hidebots' => 'Ботланы джашыр',
@@ -1825,11 +1899,11 @@ URL-ни тюз , сайтны ачыкъ болгъанына ишексиз б
 
 # Special:Log/newusers
 'newuserlogpage' => 'Къошулуучуланы регистрацияларыны журналы',
-'newuserlogpagetext' => 'Ð\9aÑ\91б Ð±Ð¾Ð»Ð¼Ð°Ð¹ Ñ\80егиÑ\81Ñ\82Ñ\80аÑ\86иÑ\8f Ñ\8dÑ\82ген ÐºÑ\8aоÑ\88Ñ\83лÑ\83Ñ\83Ñ\87Ñ\83ланÑ\8b Ñ\81пиÑ\81огÑ\83.',
+'newuserlogpagetext' => 'Ð\9aÑ\91б Ð±Ð¾Ð»Ð¼Ð°Ð¹ Ñ\80егиÑ\81Ñ\82Ñ\80аÑ\86иÑ\8f Ñ\8dÑ\82ген ÐºÑ\8aоÑ\88Ñ\83лÑ\83Ñ\83Ñ\87Ñ\83ланÑ\8b Ñ\82измеÑ\81и.',
 
 # Special:ListGroupRights
 'listgrouprights' => 'Къошулуучуланы къауумуну хакълары',
-'listgrouprights-summary' => 'ТÑ\8eбÑ\8eндеги Ð±Ñ\83 Ð²Ð¸ÐºÐ¸Ð´Ðµ Ñ\82анÑ\8bлгÑ\8aан ÐºÑ\8aоÑ\88Ñ\83лÑ\83Ñ\83Ñ\87Ñ\83 ÐºÑ\8aаÑ\83Ñ\83мланÑ\8b Ñ\8dмда Ð°Ð»Ð°Ð½Ñ\8b Ñ\85акÑ\8aлаÑ\80Ñ\8bнÑ\8b Ñ\81пиÑ\81огÑ\83.
+'listgrouprights-summary' => 'ТÑ\8eбÑ\8eндеги Ð±Ñ\83 Ð²Ð¸ÐºÐ¸Ð´Ðµ Ñ\82анÑ\8bлгÑ\8aан ÐºÑ\8aоÑ\88Ñ\83лÑ\83Ñ\83Ñ\87Ñ\83 ÐºÑ\8aаÑ\83Ñ\83мланÑ\8b Ñ\8dмда Ð°Ð»Ð°Ð½Ñ\8b Ñ\85акÑ\8aлаÑ\80Ñ\8bнÑ\8b Ñ\82измеÑ\81и.
 Энчи хакъла бла байламлы [[{{MediaWiki:Listgrouprights-helppage}}|асламыракъ билги]] болургъа болур.',
 'listgrouprights-key' => '* <span class="listgrouprights-granted">Берилген хакъла</span>
 * <span class="listgrouprights-revoked">Сыйырылгъан хакъла</span>',
@@ -1939,14 +2013,14 @@ $NEWPAGE
 эл. почта: $PAGEEDITOR_EMAIL
 вики: $PAGEEDITOR_WIKI
 
\91Ñ\83 Ð±ÐµÑ\82ге ÐºÐ¸Ñ\80гинÑ\87игизге Ð´ÐµÑ\80и Ð±Ñ\83 Ð±ÐµÑ\82 Ð±Ð»Ð° Ð±Ð°Ð¹Ð»Ð°Ð¼Ð»Ñ\8b Ð±Ð°Ñ\88Ñ\85а Ñ\82Ñ\8eÑ\80лендиÑ\80иÑ\83лени Ñ\8eÑ\81Ñ\8eнден Ñ\85апаÑ\80 Ð´Ð¶Ð¸Ð±ÐµÑ\80иллик Ñ\82Ñ\8eлдÑ\8e. Ð¡Ð°Ð½Ñ\87Ñ\8bкÑ\8aлаÑ\83 Ñ\81пиÑ\81огÑ\83гÑ\8aÑ\83здагÑ\8aÑ\83 бютеу бетлени билдириу джибериу опцияларын джукълаталлыкъсыз.
\91Ñ\83 Ð±ÐµÑ\82ге ÐºÐ¸Ñ\80гинÑ\87игизге Ð´ÐµÑ\80и Ð±Ñ\83 Ð±ÐµÑ\82 Ð±Ð»Ð° Ð±Ð°Ð¹Ð»Ð°Ð¼Ð»Ñ\8b Ð±Ð°Ñ\88Ñ\85а Ñ\82Ñ\8eÑ\80лендиÑ\80иÑ\83лени Ñ\8eÑ\81Ñ\8eнден Ñ\85апаÑ\80 Ð´Ð¶Ð¸Ð±ÐµÑ\80иллик Ñ\82Ñ\8eлдÑ\8e. Ð\9aÑ\91зде Ñ\82Ñ\83Ñ\80гÑ\8aан Ñ\82измегиздеги бютеу бетлени билдириу джибериу опцияларын джукълаталлыкъсыз.
 
 {{SITENAME}} сайтны билдириу системасы.
 
 --
 
 Джарашдырыуланы тюрлендирир ючюн:
-{{canonicalurl:Special:Watchlist/edit}}
+{{fullurl:{{#special:Watchlist}}/edit}}
 
 Кёзде тургъан тизмеден кетерир ючюн:
 $UNWATCHURL
@@ -1969,9 +2043,9 @@ $UNWATCHURL
 'actioncomplete' => 'Этим толтурулду',
 'actionfailed' => 'Этим джетишимсиз болду',
 'deletedtext' => '«$1» бет кетерилди.
\90Ñ\85Ñ\8bÑ\80 ÐºÐµÑ\82еÑ\80илгенлени Ñ\81пиÑ\81огÑ\83н кёрюр ючюн, $2на къарагъыз.',
\90Ñ\85Ñ\8bÑ\80 ÐºÐµÑ\82еÑ\80илгенлени Ñ\82измеÑ\81ин кёрюр ючюн, $2на къарагъыз.',
 'dellogpage' => 'Кетерилгенлени журналы',
-'dellogpagetext' => 'ТÑ\8eбÑ\8eндеги Ñ\81пиÑ\81ок ахыр кетериулени журналыды.',
+'dellogpagetext' => 'ТÑ\8eбÑ\8eндеги Ñ\82изме ахыр кетериулени журналыды.',
 'deletionlog' => 'кетериулени журналы',
 'reverted' => 'Алгъынгы версиясына къайтарылгъанды',
 'deletecomment' => 'Чурум:',
@@ -1981,7 +2055,7 @@ $UNWATCHURL
 ** Авторну тилеги
 ** Автор хакъланы бузуу
 ** Вандализм',
-'delete-edit-reasonlist' => 'ЧÑ\83Ñ\80Ñ\83мланÑ\8b Ñ\81пиÑ\81огÑ\83Ñ\82 тюрлендир',
+'delete-edit-reasonlist' => 'ЧÑ\83Ñ\80Ñ\83мланÑ\8b Ñ\82измеÑ\81ин тюрлендир',
 'delete-toobig' => 'Бу бетни, $1 {{PLURAL:$1|версияла|версияла}} бла бек узун тарихи барды.
 Быллай бетлени кетерилиую, {{SITENAME}} сайтны бузмаз ючюн чекленгенди.',
 'delete-warning-toobig' => 'Бу бетни уллу тюрлендириу тарихи барды, $1 {{PLURAL:$1|версиядан|версиядан}} артыкъ.
@@ -1994,10 +2068,10 @@ $UNWATCHURL
 'rollbacklink' => 'ызына къайтарыу',
 'rollbackfailed' => 'Ызына алыу джетишимсизди',
 'cantrollback' => 'Бетге ахыр юлюш къошхан къошулуучу, бетге юлюшюн къошхан джангыз адам болгъаны себебли, тюрлендириуле ызына алыналмайдыла.',
-'alreadyrolled' => '[[User:$2|$2]] ([[User talk:$2|Talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) джанындан [[:$1]] бетде этилген ахыр тюрлендириу ызына алыналмайды;
+'alreadyrolled' => '[[User:$2|$2]] ([[User talk:$2|сюзюу]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) джанындан [[:$1]] бетде этилген ахыр тюрлендириу ызына алыналмайды;
 башха бири бетде тюрлендириу этди неда бетни ызына алды.
 
-Ахыр тюрлендириуюню этген: [[User:$3|$3]] ([[User talk:$3|Talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
+Ахыр тюрлендириуюню этген: [[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]] къошулуучуну версиясына къайтарылдыла',
@@ -2052,7 +2126,7 @@ $2 тюрлендирген алгъаракъ версиясына къайты
 ** Тохтаусуз спам
 ** Тюрлендириулени урушу
 ** Мийик трафикли бет',
-'protect-edit-reasonlist' => 'ЧÑ\83Ñ\80Ñ\83мланÑ\8b Ñ\81пиÑ\81огÑ\83н тюрлендир',
+'protect-edit-reasonlist' => 'ЧÑ\83Ñ\80Ñ\83мланÑ\8b Ñ\82измеÑ\81ин тюрлендир',
 'protect-expiry-options' => '1 сагъат:1 hour,1 кюн:1 day,1 ыйыкъ:1 week,2 ыйыкъ:2 weeks,1 ау:1 month,3 ау:3 months,6 ау:6 months,1 джыл:1 year,болжалсыз:infinite',
 'restriction-type' => 'Хакълары:',
 'restriction-level' => 'Ийилген дараджасы:',
@@ -2202,8 +2276,8 @@ $1',
 'badipaddress' => 'Терс IP-адрес',
 'blockipsuccesssub' => 'Тыйыу джетишимли болду',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] тыйылды. <br />
-ТÑ\8bйÑ\8bÑ\83ланÑ\8b ÐºÑ\91Ñ\80Ñ\8eÑ\80 Ñ\8eÑ\87Ñ\8eн [[Special:BlockList|Ñ\82Ñ\8bйÑ\8bлгÑ\8aан IP-адÑ\80еÑ\81лени Ñ\81пиÑ\81огÑ\83на]] къарагъыз.',
-'ipb-edit-dropdown' => 'ЧÑ\83Ñ\80Ñ\83мланÑ\8b Ñ\81пиÑ\81огÑ\83н тюрлендир',
+ТÑ\8bйÑ\8bÑ\83ланÑ\8b ÐºÑ\91Ñ\80Ñ\8eÑ\80 Ñ\8eÑ\87Ñ\8eн [[Special:BlockList|Ñ\82Ñ\8bйÑ\8bлгÑ\8aан IP-адÑ\80еÑ\81лени Ñ\82измеÑ\81ине]] къарагъыз.',
+'ipb-edit-dropdown' => 'ЧÑ\83Ñ\80Ñ\83мланÑ\8b Ñ\82измеÑ\81ин тюрлендир',
 'ipb-unblock-addr' => '$1 блокдан ал',
 'ipb-unblock' => 'Къошулуучуну неда IP-адресни тыйылыуун тохтат',
 'ipb-blocklist' => 'Бусагъатдагъы болгъан тыйгъычланы кёргюз',
@@ -2227,7 +2301,7 @@ $1',
 'createaccountblock' => 'тергеу джазыула къураргъа болмайды',
 'emailblock' => 'e-mail иерге болмайды',
 'blocklist-nousertalk' => 'кесини сюзюу бетин тюрлендирелмейди',
-'ipblocklist-empty' => 'Ð\91локга Ñ\81алÑ\8bÑ\83ланÑ\8b Ñ\81пиÑ\81огÑ\83 бошду.',
+'ipblocklist-empty' => 'Ð\91локга Ñ\81алÑ\8bÑ\83ланÑ\8b Ñ\82измеÑ\81и бошду.',
 'ipblocklist-no-results' => 'Берилген IP-адрес неда къошулуучу ат блокга салынмагъанды.',
 'blocklink' => 'блок эт',
 'unblocklink' => 'блокну ал',
@@ -2244,7 +2318,7 @@ $1',
 'reblock-logentry' => '[[$1]] ючюн бошалыу заманын $2 $3 этиб тыйыу джарашдырыуларын тюрлендирди',
 'blocklogtext' => 'Къошулуучуланы тыйылыу бла тыйылыудан чыгъарыуну журналы.
 Автомат халда тыйылгъан IP-адресле былайда кёргюзюлмейдиле.
-Банла бла блокланы кёрюр ючюн [[Special:BlockList|IP блок списогуна]] къарагъыз.',
+Банла бла блокланы кёрюр ючюн [[Special:BlockList|блок тизмесине]] къарагъыз.',
 'unblocklogentry' => '$1 къошулуучудан блок алынды',
 'block-log-flags-anononly' => 'джангыз аноним къошулуучула',
 'block-log-flags-nocreate' => 'Тергеу джазыуланы (аккаунтланы) регистрациялары тыйылыбды',
@@ -2346,7 +2420,7 @@ $1',
 'movepage-moved-noredirect' => 'Джибериу къуралыу басдырылды.',
 'articleexists' => 'Быллай аты бла бет барды неда сиз джазгъан ат джарамайды.
 Башха ат сайлагъыз.',
-'cantmove-titleprotected' => 'Ð\91Ñ\83 Ð±ÐµÑ\82ни Ð°Ñ\82Ñ\8bн Ñ\82Ñ\8eÑ\80лендиÑ\80еллик Ñ\82Ñ\8eлÑ\81Ñ\8eз, Ð´Ð¶Ð°Ð½Ð³Ñ\8b Ð°Ñ\82 Ð´Ð¶Ð°Ñ\80аÑ\83Ñ\81Ñ\83з Ð°Ñ\82ланÑ\8b Ñ\81пиÑ\81огÑ\83ндадÑ\8b.',
+'cantmove-titleprotected' => 'Ð\91Ñ\83 Ð±ÐµÑ\82ни Ð°Ñ\82Ñ\8bн Ñ\82Ñ\8eÑ\80лендиÑ\80еллик Ñ\82Ñ\8eлÑ\81Ñ\8eз, Ð´Ð¶Ð°Ð½Ð³Ñ\8b Ð°Ñ\82 Ð´Ð¶Ð°Ñ\80аÑ\83Ñ\81Ñ\83з Ð°Ñ\82ланÑ\8b Ñ\82измеÑ\81индеди.',
 'talkexists' => "'''Бетни аты тюрленнгенди, алай а сюзюу бетни кёчюрюрге джарамайды, аллай аты бла бет болгъаны ючюн. Къол бла къошугъуз аланы бири-бирлерине.'''",
 'movedto' => 'аты тюрленнгенди:',
 'movetalk' => 'Байламлы сюзюу бетни атын тюрлендир',
@@ -2357,7 +2431,7 @@ $1',
 'movepage-page-unmoved' => '$1 бет $2 бетге атын ауушдуралмаз.',
 'movepage-max-pages' => 'Эм кёб $1 {{PLURAL:$1|бет|бет}} атын тюрлендирди эм андан асламы автомат халда атын тюрлендирелмез.',
 'movelogpage' => 'Атла тюрлениуню журналы',
-'movelogpagetext' => 'ТÑ\8eбÑ\8eнде Ð±Ð¾Ð»Ð³Ñ\8aан Ñ\81пиÑ\81ок аты тюрлендирилген бетлени кёргюзеди.',
+'movelogpagetext' => 'ТÑ\8eбÑ\8eнде Ð±Ð¾Ð»Ð³Ñ\8aан Ñ\82изме аты тюрлендирилген бетлени кёргюзеди.',
 'movesubpage' => '{{PLURAL:$1|Subpage|Бет тюбле}}',
 'movesubpagetext' => 'Бу бетни тюбюнде кёргюзюлген $1 {{PLURAL:$1|бет тюбю|бет тюбю}} барды.',
 'movenosubpage' => 'Бу бетни тюб бети джокъду.',
@@ -2413,7 +2487,7 @@ $1',
 'allmessagesname' => 'Ат',
 'allmessagesdefault' => 'Оригинал текст',
 'allmessagescurrent' => 'Хайырлана тургъан текст',
-'allmessagestext' => 'Ð\91Ñ\83 Ñ\81пиÑ\81ок MediaWiki Ð°Ñ\82 Ð°Ð»Ð°Ð¼Ñ\8bнда Ð±Ð°Ñ\80 Ð±Ð¾Ð»Ð³Ñ\8aан Ñ\81иÑ\81Ñ\82ема Ð±Ð¸Ð»Ð´Ð¸Ñ\80иÑ\83лени Ñ\81пиÑ\81огÑ\83дÑ\83.
+'allmessagestext' => 'Ð\91Ñ\83 Ñ\82изме MediaWiki Ð°Ñ\82 Ð°Ð»Ð°Ð¼Ñ\8bнда Ð±Ð°Ñ\80 Ð±Ð¾Ð»Ð³Ñ\8aан Ñ\81иÑ\81Ñ\82ема Ð±Ð¸Ð»Ð´Ð¸Ñ\80иÑ\83лени Ñ\82измеÑ\81иди.
 MediaWiki локализациясына юлюш къошаргъа излей эсегиз, [//www.mediawiki.org/wiki/Localisation MediaWiki локализация] бла [//translatewiki.net translatewiki.net] сайтлагъа киригиз.',
 'allmessagesnotsupportedDB' => "'''\$wgUseDatabaseMessages''' джабыкъ болгъаны ючюн '''{{ns:special}}:Allmessages''' хайырланыугъа ачыкъ тюлдю.",
 'allmessages-filter-legend' => 'Фильтр',
@@ -2577,7 +2651,7 @@ MediaWiki локализациясына юлюш къошаргъа излей
 
 # Spam protection
 'spamprotectiontitle' => 'Спамгъа къаршчы фильтр',
-'spamprotectiontext' => 'Ð\9aÑ\8aоÑ\88аÑ\80гÑ\8aа Ð¸Ð·Ð»ÐµÐ³ÐµÐ½ Ð±ÐµÑ\82 Ñ\81пам Ñ\84илÑ\8cÑ\82Ñ\80 Ð±Ð»Ð° Ð±Ð»Ð¾Ðº Ñ\8dÑ\82илгенди. Ð\9aÑ\8aаÑ\80а Ñ\81пиÑ\81окдагÑ\8aÑ\8b тыш джибериуле чурум болургъа боллукъдула.',
+'spamprotectiontext' => 'Ð\9aÑ\8aоÑ\88аÑ\80гÑ\8aа Ð¸Ð·Ð»ÐµÐ³ÐµÐ½ Ð±ÐµÑ\82 Ñ\81пам Ñ\84илÑ\8cÑ\82Ñ\80 Ð±Ð»Ð° Ð±Ð»Ð¾Ðº Ñ\8dÑ\82илгенди. Ð\9aÑ\8aаÑ\80а Ñ\82измедеги тыш джибериуле чурум болургъа боллукъдула.',
 'spamprotectionmatch' => 'Спам фильтр ишлетген текст: $1',
 'spambot_username' => 'Спамны ариулау',
 'spam_reverting' => '$1 бла джибериую болмагъан ахыр версиягъа къайтылады',
@@ -2675,7 +2749,7 @@ $1',
 # Bad image list
 'bad_image_list' => 'Формат былай болургъа керекди:
 
\9aÑ\8aÑ\83Ñ\80Ñ\83 Ñ\81пиÑ\81окнÑ\83 кесеклери (* символдан башланнганла) саналлыкъдыла.
\9aÑ\8aÑ\83Ñ\80Ñ\83 Ñ\82измени кесеклери (* символдан башланнганла) саналлыкъдыла.
 Тизгинни биринчи джибериую салыргъа болмагъан (аман) суратха джибериу болургъа керекди.
 Андан ары баргъан джибериуле ол тизгинде, сурат къошулургъа болгъан статьялагъа джибериулеге саналлыкъдыла.',
 
@@ -3201,8 +3275,8 @@ $5
 Нормал ал къарауну хайырланыгъыз.',
 
 # Friendlier slave lag warnings
-'lag-warn-normal' => '$1 {{PLURAL:$1|Ñ\81екÑ\83ндан|Ñ\81екÑ\83ндан}} Ð´Ð¶Ð°Ð½Ð³Ñ\8b Ñ\82Ñ\8eÑ\80лендиÑ\80иÑ\83ле Ð±Ñ\83 Ñ\81пиÑ\81окда кёрюнмезге боллукъдула.',
-'lag-warn-high' => 'Ð\91илги Ð±Ð°Ð·Ð°Ð½Ñ\8b Ñ\81еÑ\80веÑ\80индеги Ð±ÐµÐº ÐºÐµÑ\87игиÑ\83 Ñ\81ебебли, $1 {{PLURAL:$1|Ñ\81екÑ\83ндан|Ñ\81екÑ\83ндан}} Ð´Ð¶Ð°Ð½Ð³Ñ\8b Ñ\82Ñ\8eÑ\80лендиÑ\80иÑ\83ле Ð±Ñ\83 Ñ\81пиÑ\81окда кёрюнмей къалыргъа болур.',
+'lag-warn-normal' => '$1 {{PLURAL:$1|Ñ\81екÑ\83ндан|Ñ\81екÑ\83ндан}} Ð´Ð¶Ð°Ð½Ð³Ñ\8b Ñ\82Ñ\8eÑ\80лендиÑ\80иÑ\83ле Ð±Ñ\83 Ñ\82измеде кёрюнмезге боллукъдула.',
+'lag-warn-high' => 'Ð\91илги Ð±Ð°Ð·Ð°Ð½Ñ\8b Ñ\81еÑ\80веÑ\80индеги Ð±ÐµÐº ÐºÐµÑ\87игиÑ\83 Ñ\81ебебли, $1 {{PLURAL:$1|Ñ\81екÑ\83ндан|Ñ\81екÑ\83ндан}} Ð´Ð¶Ð°Ð½Ð³Ñ\8b Ñ\82Ñ\8eÑ\80лендиÑ\80иÑ\83ле Ð±Ñ\83 Ñ\82измеде кёрюнмей къалыргъа болур.',
 
 # Watchlist editor
 'watchlistedit-numitems' => 'Кёзде тургъан тизмеде {{PLURAL:$1|1 джазылгъан|$1 джазылгъан}} барды, сюзюу бетлени тышында.',
@@ -3226,8 +3300,8 @@ $5
 'watchlistedit-raw-removed' => '{{PLURAL:$1|1 башлыкъ|$1 башлыкъ}} кетерилди:',
 
 # Watchlist editing tools
-'watchlisttools-view' => 'СпиÑ\81окдан бетледе тюрлениуле',
-'watchlisttools-edit' => 'Ð\9aÑ\8aаÑ\80а/Ñ\82Ñ\8eÑ\80лендиÑ\80 Ñ\81пиÑ\81окну',
+'watchlisttools-view' => 'Тизмеден бетледе тюрлениуле',
+'watchlisttools-edit' => 'Тизмеге ÐºÑ\8aаÑ\80аÑ\83 Ñ\8dм Ñ\82Ñ\8eÑ\80лендиÑ\80иу',
 'watchlisttools-raw' => 'Текстча тюрлендириу',
 
 # Iranian month names
@@ -3350,7 +3424,7 @@ MediaWiki хайырлы боллукъду деген умут бла джай
 'specialpages-group-media' => 'Медиа-материалланы юсюнден отчетла бла джюклеуле',
 'specialpages-group-users' => 'Къошулуучула эм хакълары',
 'specialpages-group-highuse' => 'Бек хайырландырылгъан бетле',
-'specialpages-group-pages' => 'Ð\91еÑ\82лени Ñ\81пиÑ\81оклаÑ\80Ñ\8b',
+'specialpages-group-pages' => 'Ð\91еÑ\82лени Ñ\82измелеÑ\80и',
 'specialpages-group-pagetools' => 'Бетге инструментле',
 'specialpages-group-wiki' => 'Вики-билгиле эм инструментле',
 'specialpages-group-redirects' => 'Джиберген къуллукъчу бетле',
@@ -3375,9 +3449,9 @@ MediaWiki хайырлы боллукъду деген умут бла джай
 'tag-filter' => '[[Special:Tags|Тег]] фильтр:',
 'tag-filter-submit' => 'Фильтрлендир',
 'tags-title' => 'Тегле',
-'tags-intro' => 'Ð\91Ñ\83 Ð±ÐµÑ\82, Ð´Ð¶Ð°Ð·Ñ\8bлÑ\8bÑ\83нÑ\83 Ñ\82Ñ\8eÑ\80лениÑ\83Ñ\8eнÑ\8e ÐºÑ\91Ñ\80гÑ\8eзÑ\8eÑ\80ге Ð±Ð¾Ð»Ð»Ñ\83кÑ\8a Ñ\82еглени Ñ\8dм Ð°Ð»Ð°Ð½Ñ\8b Ð°Ð½Ð³Ñ\8bламлаÑ\80Ñ\8bнÑ\8b Ñ\81пиÑ\81огÑ\83дÑ\83.',
+'tags-intro' => 'Ð\91Ñ\83 Ð±ÐµÑ\82, Ð´Ð¶Ð°Ð·Ñ\8bлÑ\8bÑ\83нÑ\83 Ñ\82Ñ\8eÑ\80лениÑ\83Ñ\8eнÑ\8e ÐºÑ\91Ñ\80гÑ\8eзÑ\8eÑ\80ге Ð±Ð¾Ð»Ð»Ñ\83кÑ\8a Ñ\82еглени Ñ\8dм Ð°Ð»Ð°Ð½Ñ\8b Ð°Ð½Ð³Ñ\8bламлаÑ\80Ñ\8bнÑ\8b Ñ\82измеÑ\81иди.',
 'tags-tag' => 'Тегни аты',
-'tags-display-header' => 'ТÑ\8eÑ\80лендиÑ\80иÑ\83лени Ñ\81пиÑ\81оклаÑ\80Ñ\8bнда кёрюнюу',
+'tags-display-header' => 'ТÑ\8eÑ\80лендиÑ\80иÑ\83лени Ñ\82измелеÑ\80инде кёрюнюу',
 'tags-description-header' => 'Магъананы толу ангылтыуу',
 'tags-hitcount-header' => 'Белгиленнген тюрлендириуле',
 'tags-edit' => 'тюрлендир',
@@ -3478,4 +3552,6 @@ MediaWiki хайырлы боллукъду деген умут бла джай
 'duration-centuries' => '$1 {{PLURAL:$1|ёмюр}}',
 'duration-millennia' => '$1 {{PLURAL:$1|мингджыллыкъ}}',
 
+# Unknown messages
+'mytalk-parenthetical' => 'сюзюу',
 );
index 7e9bd87..060ac4c 100644 (file)
@@ -344,8 +344,8 @@ $messages = array(
 'newwindow' => '(Mäht e neu Finster op, wann Dinge Brauser dat kann)',
 'cancel' => 'Stopp! Avbreche!',
 'moredotdotdot' => 'Mieh&nbsp;…',
-'mypage' => 'ming Metmaacher-Sigg',
-'mytalk' => 'ming Klaafsigg',
+'mypage' => 'Metmaachersigg',
+'mytalk' => 'Klaafsigg',
 'anontalk' => 'Klaaf för de IP-Adress',
 'navigation' => 'Jangk noh de',
 'and' => ', un',
@@ -1397,7 +1397,7 @@ dat dänne ihr Daate topaktuell sin,
 
 # Preferences page
 'preferences' => 'ming Enstellunge',
-'mypreferences' => 'ming Enstellunge',
+'mypreferences' => 'Enstellunge',
 'prefs-edits' => 'Aanzahl Änderunge am Wiki:',
 'prefsnologin' => 'Nit enjelogg',
 'prefsnologintext' => 'Do mööts ald <span class="plainlinks">[{{fullurl:{{#special:UserLogin}}|returnto=$1}} enjelogg]</span> sin, öm Ding Enstellunge ze ändere.',
@@ -2316,7 +2316,7 @@ eins vun all däm op eimol.',
 
 Beim Söke künnd_Er Schtäänsche aanjevve för e Schtöcksche fun ennem Name, wo mer nit jenou weiß, wi et heiß udder wat me nit kenne deit,  zem Beishpöll esu: <code>http://*.example.com</code> un ene bövverschte Name för en Domain moß aanjejovve sin, zem Beishpöll esu: <code>http://*.org</code> 
 
-De Brauserprotokolle, di beim Söke aanjejovve wäde künne, sen: <code>$1</code>es',
+De Brauserprotokolle, di beim Söke aanjejovve wäde künne, sen: <code>$1</code> un der Schtandatt es <code>http://</code> wann nix aanjejovve es.',
 'linksearch-line' => '„$2“ hät ene Link op $1',
 'linksearch-error' => 'Shternshe kam_mer nor aam Aanfang fum Domain-Name bruche.',
 
@@ -2404,7 +2404,7 @@ Alles klor?',
 
 # Watchlist
 'watchlist' => 'ming Oppassliss',
-'mywatchlist' => 'ming Oppassliss',
+'mywatchlist' => 'Oppaßleß',
 'watchlistfor2' => 'För dä $1 $2',
 'nowatchlist' => 'En Ding Oppassliss es nix dren.',
 'watchlistanontext' => 'Do muss $1, domet de en Ding Oppassliss erenluure kanns, oder jet dran ändere.',
@@ -2664,7 +2664,7 @@ $1',
 # Contributions
 'contributions' => 'Däm Metmaacher sing Beidräch',
 'contributions-title' => 'Beidräsch fum  $1',
-'mycontris' => 'ming Beidräch',
+'mycontris' => 'Beidrähch',
 'contribsub2' => 'För dä Metmaacher: $1 ($2)',
 'nocontribs' => 'Mer han kein Änderunge jefonge, en de Logböcher, die do passe däte.',
 'uctop' => ' (Neuste)',
index e0d8ebd..ebd4bb1 100644 (file)
@@ -51,6 +51,8 @@ $namespaceAliases = array(
        'Kategorî_nîqaş'   => NS_CATEGORY_TALK,
 );
 
+$separatorTransformTable = array( ',' => '.', '.' => ',' );
+
 $specialPageAliases = array(
        'Categories'                => array( 'Dara_kategoriyan' ),
        'DoubleRedirects'           => array( 'Redirect\'ên_ducarî' ),
@@ -1037,7 +1039,7 @@ Sedema qedexekirina $3 ev e: ''$2''",
 'rcshowhidebots' => "Bot'an $1",
 'rcshowhideliu' => 'Bikarhênerên qeydkirî $1',
 'rcshowhideanons' => 'Bikarhênerên neqeydkirî (IP) $1',
-'rcshowhidepatr' => '$1 guherandinên kontrolkirî',
+'rcshowhidepatr' => 'Guherandinên kontrolkirî $1',
 'rcshowhidemine' => 'Guherandinên min $1',
 'rclinks' => '$1 guherandinên di $2 rojên dawî de nîşan bide<br />$3',
 'diff' => 'cudahî',
@@ -1904,7 +1906,7 @@ Ji ber ku girêdaneke derve di wê rûpelê de heye ev pirsgirêk pêk hat.',
 'imagelisttext' => "Jêr lîsteyek ji $1 file'an heye, duxrekirin $2.",
 'newimages-summary' => 'Ev rûpela taybet dosyeyên ku herî dawî hatine barkirin, nîşan dide.',
 'newimages-legend' => 'Parzûn',
-'showhidebots' => '($1 bot)',
+'showhidebots' => "(Bot'an $1)",
 'noimages' => 'Ne tiştek tê dîtin.',
 'ilsubmit' => 'Lêgerîn',
 'bydate' => 'li gor dîrokê',
@@ -2152,4 +2154,6 @@ Ji kerema xwe zanibe ku tu bi rastî dixwazî vê rûpelê dîsa çêkî.",
 'searchsuggest-search' => 'Lêgerîn',
 'searchsuggest-containing' => 'dihundirîne...',
 
+# Unknown messages
+'mytalk-parenthetical' => 'gotûbêj',
 );
index abcaeab..c52c660 100644 (file)
@@ -495,9 +495,12 @@ Ratio data est "\'\'$2\'\'".',
 
 Ignote continues {{grammar:ablative|{{SITENAME}}}} uti, aut conventum novum vel sub eodem vel novo nomine <span class='plainlinks'>[$1 aperias]</span>.
 Nota bene paginas fortasse videantur quasi tuum conventum esset apertum, priusquam navigatrum purgaveris.",
+'welcomeuser' => 'Salve, $1!',
 'welcomecreation' => '== Salve, $1! ==
-Ratio tua iam creata est.
-Noli oblivisci [[Special:Preferences|praeferentias tuas]] apud {{grammar:accusative|{{SITENAME}}}} mutare.',
+Ratio tua creata est.
+Noli oblivisci [[Special:Preferences|praeferentias]] tuas apud {{grammar:accusative|{{SITENAME}}}} mutare.',
+'welcomecreation-agora' => 'Ratio tua creata est.
+Noli oblivisci [[Special:Preferences|praeferentias]] tuas apud {{grammar:accusative|{{SITENAME}}}} mutare.',
 'yourname' => 'Nomen usoris:',
 'yourpassword' => 'Tessera:',
 'yourpasswordagain' => 'Tesseram adfirmare:',
@@ -1907,7 +1910,7 @@ Paginae nomen petitum "[[:$1]]" iam existit. Vin tu eam delere ut pagina illic m
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Pagina usoris tua',
 'tooltip-pt-mytalk' => 'Pagina disputationis tua',
-'tooltip-pt-preferences' => 'Praeferentiae meae',
+'tooltip-pt-preferences' => 'Praeferentiae tuae',
 'tooltip-pt-watchlist' => 'Paginae quae custodis ut eorum mutationes facilius vides',
 'tooltip-pt-mycontris' => 'Index conlationum tuarum',
 'tooltip-pt-login' => 'Te conventum aperire hortamur, non autem requisitum',
@@ -2384,4 +2387,6 @@ Quaesumus, adfirma ut iterum hanc paginam crees.",
 # Search suggestions
 'searchsuggest-search' => 'Quaerere',
 
+# Unknown messages
+'mytalk-parenthetical' => 'disputatio',
 );
index f050a41..dcb283e 100644 (file)
@@ -347,6 +347,7 @@ $messages = array(
 'namespaces' => 'Nummraim',
 'variants' => 'Varianten',
 
+'navigation-heading' => 'Navigatiounsmenü',
 'errorpagetitle' => 'Feeler',
 'returnto' => 'Zréck op $1.',
 'tagline' => 'Vu {{SITENAME}}',
@@ -588,9 +589,12 @@ $2',
 Dir kënnt {{SITENAME}} elo anonym benotzen, oder Iech <span class='plainlinks'>[$1 erëm aloggen]</span>.
 
 Opgepasst: Op verschiddene Säite kann et nach esou aus gesinn, wéi wann Dir nach ageloggt wiert, bis Dir Ärem Browser säin Tëschespäicher (cache) eidel maacht.",
+'welcomeuser' => 'Wëllkomm $1!',
 'welcomecreation' => '== Wëllkomm, $1! ==
 Äre Kont gouf kreéiert.
 Denkt drun, Är [[Special:Preferences|{{SITENAME}}-Astellungen]] unzepassen.',
+'welcomecreation-agora' => "Äre Benotzerkont gouf ugeluecht.
+Vergiesst net fir Är [[Special:Preferences|{{SITENAME}} Astellungen]] z'änneren",
 'yourname' => 'Benotzernumm:',
 'yourpassword' => 'Passwuert:',
 'yourpasswordagain' => 'Passwuert nach eemol antippen:',
@@ -721,6 +725,12 @@ Vläicht hutt Dir Äert Passwuert scho geännert oder en neit temporäert Passwu
 'passwordreset-capture-help' => 'Wann Dir dës Këscht ukräizt, gëtt de Mail (mam temporäre Passwuert) Iech gewisen an dem Benotzer geschéckt.',
 'passwordreset-email' => 'E-Mailadress:',
 'passwordreset-emailtitle' => 'Detailer vum Benotzerkont op{{SITENAME}}',
+'passwordreset-emailtext-ip' => "Iergendee mat der IP-Adress $1, wahrscheinlech Dir selwer, huet eng Erënnerung fir Är Benotzerkonteninformatiounen op {{SITENAME}} gefrot ($4). {{PLURAL:$3|De Benotzerkont ass|D'Benutzerkonte si}} mat dëser E-Mail-Adress verbonn:
+
+$2
+
+{{PLURAL:$3|Dëst temporärt Passwuert leeft|Dës temporär Passwierder lafe}} bannent {{PLURAL:$5|engem Dag|$5 Deeg}} of.
+Dir sollt Iech aloggen an een neit Passwuert festleeën. Wann een Aneren déi Ufro gemaach huet oder Dir Iech erëm un Äert Passwuert erënnere kënnt an et net ännere wëllt, kënnt Dir dës Noriicht ignoréieren an Äert aalt Passwuert weider benotzen.",
 'passwordreset-emailelement' => 'Benotzernumm: $1
 Temporärt Passwuert: $2',
 'passwordreset-emailsent' => 'Eng Erënnerungs-Mail gouf geschéckt.',
@@ -3748,9 +3758,9 @@ Den ugefrote Fichier gëtt direkt gewise respektiv mat enger verbonner Applikati
 'logentry-move-move_redir-noredirect' => "$1 huet d'Säit $3 op $4 geréckelt an dobäi gouf eng Viruleedung iwwerschriwwen an et et gouf keng nei Viruleedung ugeluecht",
 'logentry-patrol-patrol' => "$1 huet d'Versioun $4 vun der Säit $3 als nogekuckt markéiert",
 'logentry-patrol-patrol-auto' => "$1 huet d'Versioun $4 vun der Säit $3 automatesch als nogekuckt markéiert",
-'logentry-newusers-newusers' => '$1  huet e Benotzerkont ugeluecht',
-'logentry-newusers-create' => '$1  huet e Benotzerkont ugeluecht',
-'logentry-newusers-create2' => '$1 huet ee Benotzerkont ugeluecht $3',
+'logentry-newusers-newusers' => 'De Benotzerkont $1 gouf ugeluecht',
+'logentry-newusers-create' => 'De Benotzerkont $1 gouf ugeluecht',
+'logentry-newusers-create2' => 'De Benotzerkont $3 gouf vum $1 ugeluecht',
 'logentry-newusers-autocreate' => 'De Benotzerkont $1 gouf automatesch ugeluecht',
 'newuserlog-byemail' => "d'Passwuert gouf per E-Mail geschéckt",
 
index 783d0f8..261d522 100644 (file)
@@ -420,9 +420,9 @@ $messages = array(
 Квевай [[Special:Search/{{PAGENAME}}| и тlвар алай ччин]] муькуь ччинра жугъуриз,
 <span class="plainlinks"> [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} журналрин талукь тир кхьей затIар жугъуриз],
 ва я [{{fullurl:{{FULLPAGENAME}}|action=edit}} и тlвар алай ччин туькIуьриз жеда] </span>.',
-'noarticletext-nopermission' => 'Iseatda china kxhin avach.
-Kwevay [[Special:Search/{{PAGENAME}}| i twar alay chin алай]] mukiu chinra jaghuriz ak\'ni
-<span class="plainlinks"> [{{fullurl: {{# Special:Log}} | page = {{FULLPAGENAMEE}}}} jurnalrin taluq\' tir kxhey zathar jaghuriz] jeda.',
+'noarticletext-nopermission' => 'Исятда и  ччина са текстни авач.
+Квевай [[Special:Search/{{PAGENAME}}| и тӀвар алай ччин]] муькуь ччинра жугъуриз ва я
+<span class="plainlinks"> [{{fullurl: {{# Special:Log}} | page = {{FULLPAGENAMEE}}}} журналрин талукь тир кхьей затӀар жугъуриз] жеда.',
 'blocked-notice-logextract' => 'И уртах алайчIава блокарнава.
 Агъадихъ блокарунин журналдикай эхиримжи кхьинар къалурнава:',
 'previewnote' => "'''Рикlел хуьх хьи, им анжах сифтедин килигун я.'''  
@@ -937,7 +937,7 @@ Kwevay [[Special:Search/{{PAGENAME}}| i twar alay chin алай]] mukiu chinra j
 
 # Watchlist
 'watchlist' => 'Зи вилив хуьнин сиягь',
-'mywatchlist' => 'Зи вилив хюнин сиягь',
+'mywatchlist' => 'Hizetun',
 'watchlistfor2' => '$1 $2 патал',
 'addedwatchtext' => "Чар \"[[:\$1]]\" тун хъувунай куьн [[Special:Watchlist|watchlist]].                                                                                                             Къвезмай дегишунар и чарчел ва галкlанавай чарчихъ ихтилатар жеда инна, ахъатдава \"сакlус яцlу''''' инна [[Special:RecentChanges|list of recent changes]] гьам кьизил авун.",
 'removedwatchtext' => 'Чар "[[:$1]]" Идай чlурнай [[Special:Watchlist|ахтармишунин цlарар]].',
@@ -1024,7 +1024,7 @@ Kwevay [[Special:Search/{{PAGENAME}}| i twar alay chin алай]] mukiu chinra j
 # Contributions
 'contributions' => 'Уртахди кутур крар',
 'contributions-title' => '$1 уртахди кутур крар',
-'mycontris' => 'За кутур кар',
+'mycontris' => 'Ktur paj',
 'contribsub2' => '($1)-ин кутур пай  ($2)',
 'uctop' => '(вини кьил)',
 'month' => ' Вацралай (ва адалай вилик)',
@@ -1055,7 +1055,7 @@ Kwevay [[Special:Search/{{PAGENAME}}| i twar alay chin алай]] mukiu chinra j
 'whatlinkshere-hideredirs' => '$1 рахкъурунар',
 'whatlinkshere-hidetrans' => '$1 кутунар',
 'whatlinkshere-hidelinks' => '$1 элячlунар',
-'whatlinkshere-hideimages' => '$1 шикилриз элячIунар',
+'whatlinkshere-hideimages' => '$1 fajlrin eläçun',
 'whatlinkshere-filters' => 'Куьзунагар',
 
 # Block/unblock
index 4334317..4f80e35 100644 (file)
@@ -315,7 +315,7 @@ $messages = array(
 'newwindow' => '(atsidaro naujame lange)',
 'cancel' => 'Atšaukti',
 'moredotdotdot' => 'Daugiau...',
-'mypage' => 'Mano puslapis',
+'mypage' => 'Naudotojo puslapis',
 'mytalk' => 'Mano aptarimas',
 'anontalk' => 'Šio IP aptarimas',
 'navigation' => 'Naršymas',
@@ -3802,4 +3802,6 @@ Kitu atveju, galite naudotis žemiau esančia paprastesne forma. Jūsų komentar
 'duration-centuries' => '$1 {{PLURAL:$1|amžius|amžiai|amžių}}',
 'duration-millennia' => '$1 {{PLURAL:$1|tūkstantmetis|tūkstantmečiai|tūkstantmečių}}',
 
+# Unknown messages
+'mytalk-parenthetical' => 'aptarimas',
 );
index 8e80197..0ce925a 100644 (file)
@@ -11,6 +11,7 @@
  * @author Justincheng12345
  * @author Omnipaedista
  * @author Shinjiman
+ * @author Simon Shek
  * @author Super Wang
  */
 
@@ -954,7 +955,7 @@ $1",
 'difference-title' => '$1各本之异',
 'difference-title-multipage' => '$1、$2之异',
 'difference-multipage' => '(辨頁)',
-'lineno' => '列$1:',
+'lineno' => '第$1行:',
 'compareselectedversions' => '辨二擇',
 'showhideselectedversions' => '示/藏之擇',
 'editundo' => '悔',
index a986d2a..0a333f5 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Bennylin
+ * @author Iwan Novirion
  * @author Luthfi94
  * @author Naval Scene
  * @author Rahmatdenas
@@ -25,7 +26,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Suruakkan suntingan nan lah dijago di parubahan tabaru',
 'tog-newpageshidepatrolled' => 'Suruakkan halaman nan lah dijago dari senarai halaman baru',
 'tog-extendwatchlist' => 'Kambangkan senarai pantauan untuak malihek sado parubahan, indak nan baru se',
-'tog-usenewrc' => 'Gunoan parubahan terkini tingkek lanjut (paralu JavaScript)',
+'tog-usenewrc' => 'Kalompok parubahan dek laman dalam parubahan tabaru jo daftar pantauan (paralu JavaScript)',
 'tog-numberheadings' => 'Agiah nomor judua sacaro otomatis',
 'tog-showtoolbar' => 'Tampilkan bilah suntiang (paralu JavaScript)',
 'tog-editondblclick' => 'Suntiang laman jo klik ganda (JavaScript)',
@@ -33,20 +34,20 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Hiduikan bagian panyuntiangan jo mangklik kanan pado judul bagian (JavaScript)',
 'tog-showtoc' => 'Caliakkan dafta isi (untuak laman nan mampunyoi labiah dari 3 subbagian)',
 'tog-rememberpassword' => 'Kana log masuak denai di peramban ko (salamo $1 {{PLURAL:$1|hari|hari}})',
-'tog-watchcreations' => 'Tambahkan halaman nan den buek ka daftar pantauan',
-'tog-watchdefault' => 'Tambahkan halaman nan den suntiang ka daftar pantauan',
-'tog-watchmoves' => 'Tambahkan halaman nan den pindahkan ka daftar pantauan',
-'tog-watchdeletion' => 'Tambahkan halaman nan den hapuih ka daftar pantauan',
+'tog-watchcreations' => 'Tambahkan laman nan den buek jo gambar nan den unggah ka daftar pantauan',
+'tog-watchdefault' => 'Tambahkan laman jo gambar nan den suntiang ka daftar pantauan',
+'tog-watchmoves' => 'Tambahkan laman jo gambar nan den pindah ka daftar pantauan',
+'tog-watchdeletion' => 'Tambahkan laman jo gambar nan den hapuih ka daftar pantauan',
 'tog-minordefault' => 'Tandoi sadoalah suntiangan sabagai suntiangan ketek sacaro baku',
 'tog-previewontop' => 'Tampilkan pratonton sabalun kotak suntiang',
 'tog-previewonfirst' => 'Caliakkan pratayang pado suntiangan patamo',
 'tog-nocache' => 'Matikan panyinggahan laman peramban',
-'tog-enotifwatchlistpages' => 'Kirim e-mail kalau laman nan den pantau lah barubah',
+'tog-enotifwatchlistpages' => 'Kirimkan surel kalau laman atau gambar pado daftar pantauan lah barubah',
 'tog-enotifusertalkpages' => 'E-mail ambo jiko laman barundiang denai lah barubah',
-'tog-enotifminoredits' => 'Kirim e-mail walau hanyo ado parubahan saketek',
+'tog-enotifminoredits' => 'Kirimkan surel juo untuk saketek suntingan pado laman jo gambar',
 'tog-enotifrevealaddr' => 'Cogokan alamaik e-mail den pado e-mail notifikasi',
 'tog-shownumberswatching' => 'Tujuakkan jumlah pamantau',
-'tog-oldsig' => 'Pratayang tando tangan:',
+'tog-oldsig' => 'Tando tangan kini:',
 'tog-fancysig' => 'Palakuan tando tangan sabagai teks wiki (tanpa suatu tautan otomatis)',
 'tog-externaleditor' => 'Gunokan editor eksternal sacaro bawaan (untuak nan ahli sajo, kabutuahan pangaturan khusus pado komputer Sanak [//www.mediawiki.org/wiki/Manual:External_editors Informasi labiah lanjuik.].)',
 'tog-externaldiff' => 'Gunokan diff eksternal sacaro bawaan (untuak nan ahli sajo, kabutuahan pangaturan khusus pado komputer Sanak [//www.mediawiki.org/wiki/Manual:External_editors Informasi labiah lanjuik.].)',
@@ -66,7 +67,7 @@ $messages = array(
 
 'underline-always' => 'Taruih',
 'underline-never' => 'Indak pernah',
-'underline-default' => 'Bawaan panjalajah web',
+'underline-default' => 'Kulik atau panjalajah web bawaan',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Gaya tulisan komputer pado kotak panyuntiangan:',
@@ -141,7 +142,7 @@ $messages = array(
 'category-article-count-limited' => 'Kategori iko mamiliki {{PLURAL:$1|ciek laman|$1 laman}} barikuik.',
 'category-file-count' => '{{PLURAL:$2|Kategori iko hanyo mamiliki ciek laman barikuik.|Kategori iko mamiliki {{PLURAL:$1|laman|$1 laman}} barikuik, dari total $2.}}',
 'category-file-count-limited' => 'Kategori iko mamiliki {{PLURAL:$1|laman|$1 laman}} barikuik.',
-'listingcontinuesabbrev' => 'cont.',
+'listingcontinuesabbrev' => 'lanjuik',
 'index-category' => 'Laman nan diindeks',
 'noindex-category' => 'Laman nan indak diindeks',
 'broken-file-category' => 'Laman jo gambar rusak',
@@ -151,7 +152,7 @@ $messages = array(
 'newwindow' => '(buka di jendela baru)',
 'cancel' => 'Batalkan',
 'moredotdotdot' => 'Lainnyo...',
-'mypage' => 'Laman ambo',
+'mypage' => 'Laman',
 'mytalk' => 'Maota',
 'anontalk' => 'Ota IP iko',
 'navigation' => 'Pinteh',
@@ -173,8 +174,8 @@ $messages = array(
 'vector-action-move' => 'Pindahkan',
 'vector-action-protect' => 'Lindungi',
 'vector-action-undelete' => 'Pambatalan panghapusan',
-'vector-action-unprotect' => 'Palinduangan',
-'vector-simplesearch-preference' => 'Aktifkan pancarian saran nan disampurnokan (hanyo kulik Vector)',
+'vector-action-unprotect' => 'Tuka palinduangan',
+'vector-simplesearch-preference' => 'Aktifkan kotak pancarian sadarano (hanyo kulik Vector)',
 'vector-view-create' => 'Buek',
 'vector-view-edit' => 'Suntiang',
 'vector-view-history' => 'Caliak riwayaik nan lalu',
@@ -184,6 +185,7 @@ $messages = array(
 'namespaces' => 'Ruang namo:',
 'variants' => 'Variasi:',
 
+'navigation-heading' => 'Menu navigasi',
 'errorpagetitle' => 'Kesalahan',
 'returnto' => 'Baliak ka $1',
 'tagline' => 'Dari {{SITENAME}}',
@@ -210,8 +212,8 @@ $messages = array(
 'protect' => 'Lindungi',
 'protect_change' => 'ubah',
 'protectthispage' => 'Lindungi laman iko',
-'unprotect' => 'Palinduangan',
-'unprotectthispage' => 'Bukak palindungan laman iko',
+'unprotect' => 'Tuka palinduangan',
+'unprotectthispage' => 'Tuka palindungan laman ko',
 'newpage' => 'Laman baru',
 'talkpage' => 'Musyawarahkan laman ko',
 'talkpagelinktext' => 'Maota',
@@ -283,12 +285,13 @@ $1',
 'youhavenewmessagesfromusers' => 'Sanak mandapek $1 dari {{PLURAL:$3|another user|$3 users}} ($2)',
 'youhavenewmessagesmanyusers' => 'Sanak mandapek $1 dari banyak pangguno ($2)',
 'newmessageslinkplural' => '{{PLURAL:$1|sabuah pasan baru|pasan baru}}',
+'newmessagesdifflinkplural' => 'akhir {{PLURAL:$1|parubahan|parubahan}}',
 'youhavenewmessagesmulti' => 'Awak ang mandapek pasan baru pado $1',
 'editsection' => 'suntiang',
 'editold' => 'suntiang',
-'viewsourceold' => 'Caliak sumber',
+'viewsourceold' => 'caliak sumber',
 'editlink' => 'suntiang',
-'viewsourcelink' => 'Caliak sumber',
+'viewsourcelink' => 'caliak sumber',
 'editsectionhint' => 'Suntiang bagian: $1',
 'toc' => 'Daftar isi',
 'showtoc' => 'tampilkan',
@@ -332,12 +335,12 @@ Dafta laman istimewa nan sah dapek dicaliak di [[Special:SpecialPages|{{int:spec
 # General errors
 'error' => 'Kasalahan',
 'databaseerror' => 'Kasalahan basis data',
-'dberrortext' => 'Ado kasalahan sintaks pado pamintaan basis data.
-Kasalahan ini mungkin manandokan adonyo sabuah \'\'bug\'\' dalam parangkek lunak.
+'dberrortext' => 'Kasalahan sintaks pado pamintaan basis data lah tajadi.
+Iko mungkin manandokan adonyo bug pado parangkek lunak.
 Pamintaan basis data nan tarakhir adalah:
-<blockquote><tt>$1</tt></blockquote>
-dari dalam fungsi "<tt>$2</tt>".
-Basis data manghasilkan kasalahan "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+dari dalam fungsi "<code>$2</code>".
+Basis data manghasilkan kasalahan "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Ado kasalahan sintaks pado pamintaan basis data.
 Pamintaan basis data nan terakhir adalah:
 "$1"
@@ -372,10 +375,12 @@ Silakan laporkan hal iko ka [[Special:ListUsers/sysop|Pangurus]], dangan manyabu
 'cannotdelete' => 'Laman atau berkas "$1" indak dapek dihapuih.
 Mungkin alah dihapuih jo urang lain.',
 'cannotdelete-title' => 'Indak bisa mangapuih halaman "$1"',
+'delete-hook-aborted' => 'Pengapusan batal jo hook.
+Indak ado keterangan.',
 'badtitle' => 'Judul indak sah',
 'badtitletext' => 'Permintaan judul laman indak sah, kosong, atau antarbaso atau antarwiki yang salah sambuang. Mungkin juo ado kandungan karakter yang indak buliah digunoan untuak judul.',
-'perfcached' => 'Data barikuik iko diambiak dari singgahan dan mungkin indak data nan baharu. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'Data barikut iko diambiak dari singgahan dan tarakhir dipabaharui pado $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'Data barikuik ko diambiak dari singgahan dan mungkin indak data nan baru. Nan tabanyak dari {{PLURAL:$1|suatu hasil dari|$1 hasilnyo}} ado di singgahan.',
+'perfcachedts' => 'Data barikuik ko singgahan, dan tarakhir diperbarui $1. Nan tabanyak dari {{PLURAL:$1|suatu hasil dari|$1 hasilnyo}} ado di singgahan.',
 'querypage-no-updates' => 'Pamutakhiran dari laman iko sadang dimatian. Data nan ado di siko saat iko indak akan dimuaik ulang.',
 'wrong_wfQuery_params' => 'Parameter salah ka wfQuery()<br />Fungsi: $1<br />Pamintaan: $2',
 'viewsource' => 'Caliak sumber',
@@ -400,6 +405,7 @@ Alasan nan diberikan adolah ''$2''.",
 'filereadonlyerror' => 'Indak bisa mangubah berkas "$1" karano repositori berkas "$2" dalam moda baco-sajo.
 
 Pangurus nan manguncinyo manawarkan penjelasan: "$3"',
+'invalidtitle-knownnamespace' => '↓Judul nan indak sah jo ruangnamo "$2" dan teks "$3"',
 'exception-nologin' => 'Indak log masuak',
 'exception-nologin-text' => 'Halaman ko hanyo bisa disuntiang dek pangguno badaftar.',
 
@@ -811,7 +817,7 @@ Legend: '''({{int:kini}})''' = perbedaan jo revisi terakhir, '''({{int:dulu}})''
 
 # Revision deletion
 'rev-delundel' => 'tampilkan/suruakkan',
-'revdel-restore' => 'Ganti tampilan',
+'revdel-restore' => 'ganti tampilan',
 'revdel-restore-deleted' => 'suntiangan nan alah dihapuih',
 'revdel-restore-visible' => 'tampilan revisi',
 
@@ -835,9 +841,9 @@ Legend: '''({{int:kini}})''' = perbedaan jo revisi terakhir, '''({{int:dulu}})''
 'notextmatches' => 'Indak ado judul nan pas',
 'prevn' => '{{PLURAL:$1|$1}} sabalunnyo',
 'nextn' => '{{PLURAL:$1|$1}} salanjuknyo',
-'prevn-title' => '$1 {{PLURAL:$1|hasil|hasil}} sabalunnyo',
-'nextn-title' => '$1 {{PLURAL:$1|hasil|hasil}} salanjuknyo',
-'shown-title' => 'Caliakkan $1 {{PLURAL:$1|hasil|hasil}} per laman',
+'prevn-title' => 'Sabalunnyo $1 {{PLURAL:$1|hasil|hasil}}',
+'nextn-title' => 'Barikuiknyo $1 {{PLURAL:$1|hasil|hasil}}',
+'shown-title' => 'Tampilkan $1 {{PLURAL:$1|hasil|hasil}} per laman',
 'viewprevnext' => 'Caliakkan ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''Ado laman nan banamo \"[[:\$1]]\" pado wiki ko.'''",
 'searchmenu-new' => "'''Buek laman \"[[:\$1]]\" di wiki ko!'''",
@@ -1277,7 +1283,7 @@ Nan lainnyo akan tasuruak sacaro default.
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'semua',
 'namespacesall' => 'semua',
-'monthsall' => 'semua',
+'monthsall' => 'sado',
 
 # Watchlist editing tools
 'watchlisttools-view' => 'Tampilkan parubahan takaik',
index 369ad1c..ac97161 100644 (file)
@@ -515,6 +515,7 @@ $messages = array(
 'namespaces' => 'Именски простори',
 'variants' => 'Варијанти',
 
+'navigation-heading' => 'Навигационо мени',
 'errorpagetitle' => 'Грешка',
 'returnto' => 'Назад на $1.',
 'tagline' => 'Од {{SITENAME}}',
@@ -764,9 +765,12 @@ $2',
 
 Можете да продолжите со користење на {{SITENAME}} анонимно или можете <span class='plainlinks'>[$1 повторно да се најавите]</span> под исто или различно корисничко име.
 Да напоменеме дека некои страници може да продолжат да се прикажуваат како да сте најавени, се додека не го исчистите кешот на вашиот прелистувач.",
+'welcomeuser' => 'Добредојдовте, $1!',
 'welcomecreation' => '== Добредојдовте, $1! ==
 Вашата корисничка сметка е создадена.
-Не заборавајте да ги [[Special:Preferences|наместите вашите нагодувања]].',
+Не заборавајте да ги измените вашите [[Special:Preferences|нагодувања]].',
+'welcomecreation-agora' => 'Вашата корисничка сметка е создадена.
+Не заборавајте да ги измените вашите [[Special:Preferences|{{SITENAME}} нагодувања]].',
 'yourname' => 'Корисничко име:',
 'yourpassword' => 'Лозинка:',
 'yourpasswordagain' => 'Повторете ја лозинката:',
@@ -1924,6 +1928,7 @@ $1',
 'backend-fail-notsame' => 'Веќе постои неистоветна податотека - $1.',
 'backend-fail-invalidpath' => '$1 не е важечка патека за складирање.',
 'backend-fail-delete' => 'Не можев да ја избришам податотеката $1.',
+'backend-fail-describe' => 'Не можев да ги изменам метаподатоците за податотеката „$1“.',
 'backend-fail-alreadyexists' => 'Податотеката $1 веќе постои.',
 'backend-fail-store' => 'Не можев да ја складирам податотеката $1 во $2.',
 'backend-fail-copy' => 'Не можев да ја ископирам податотеката $1 во $2.',
@@ -2323,7 +2328,7 @@ $1',
 'linksearch-error' => 'Џокер-знаците може да се користат само на почетокот во името на домаќинот.',
 
 # Special:ListUsers
-'listusersfrom' => 'Ð\9fÑ\80икажни ÐºÐ¾Ñ\80иÑ\81ниÑ\86и Ð¿Ð¾Ñ\87нÑ\83ваÑ\98Ñ\9cи Ð¾Ð´:',
+'listusersfrom' => 'Прикажи корисници почнувајќи од:',
 'listusers-submit' => 'Прикажи',
 'listusers-noresult' => 'Не е пронајден корисник.',
 'listusers-blocked' => '(блокиран)',
@@ -2332,7 +2337,7 @@ $1',
 'activeusers' => 'Список на активни корисници',
 'activeusers-intro' => 'Ова е список на корисници кои биле на некој начин активни во последните $1 {{PLURAL:$1|ден|дена}}.',
 'activeusers-count' => '$1 {{PLURAL:$1|уредување|уредувања}} {{PLURAL:$3|денес|во последните $3 дена}}',
-'activeusers-from' => 'Прикажува корисници кои почнуваат на:',
+'activeusers-from' => 'Прикажи корисници почнувајќи од:',
 'activeusers-hidebots' => 'Скриј ботови',
 'activeusers-hidesysops' => 'Скриј администратори',
 'activeusers-noresult' => 'Нема пронајдено корисници.',
@@ -4242,9 +4247,9 @@ $5
 'logentry-move-move_redir-noredirect' => '$1 ја премести страницата $3 на $4 презапишувајќи врз пренасочување без да остави пренасочување',
 'logentry-patrol-patrol' => '$1 ја означи ревизијата $4 на страницата $3 како испатролирана',
 'logentry-patrol-patrol-auto' => '$1 автоматски ја означи ревизијата $4 на страницата $3 како испатролирана',
-'logentry-newusers-newusers' => '$1 направи корисничка сметка',
-'logentry-newusers-create' => '$1 направи корисничка сметка',
-'logentry-newusers-create2' => '$1 направи корисничка сметка $3',
+'logentry-newusers-newusers' => 'Направена е корисничката сметка $1',
+'logentry-newusers-create' => 'Направена е корисничката сметка $1',
+'logentry-newusers-create2' => 'Направена е корисничката сметка $3; создавач: $1',
 'logentry-newusers-autocreate' => 'Сметката $1 е создадена автоматски',
 'newuserlog-byemail' => 'испратена лозинка по е-пошта',
 
index 413d94c..02f8443 100644 (file)
@@ -498,6 +498,7 @@ $messages = array(
 'namespaces' => 'നാമമേഖല',
 'variants' => 'രൂപഭേദങ്ങൾ',
 
+'navigation-heading' => 'ഗമന വഴികാട്ടി',
 'errorpagetitle' => 'പിഴവ്',
 'returnto' => '$1 എന്ന താളിലേക്ക് തിരിച്ചുപോവുക.',
 'tagline' => '{{SITENAME}} സംരംഭത്തിൽ നിന്ന്',
@@ -741,9 +742,12 @@ $2',
 അജ്ഞാതമായിരുന്നു കൊണ്ട് {{SITENAME}} സം‌രംഭം താങ്കൾക്കു തുടർന്നും ഉപയോഗിക്കാവുന്നതാണ്‌.
 അല്ലെങ്കിൽ  <span class='plainlinks'>[$1 ലോഗിൻ സൗകര്യം ഉപയോഗിച്ച്]</span> വീണ്ടും ലോഗിൻ ചെയ്യാവുന്നതും ആണ്‌.
 താങ്കൾ വെബ് ബ്രൌസറിന്റെ ക്യാഷെ ശൂന്യമാക്കിയിട്ടില്ലെങ്കിൽ ചില താളുകളിൽ താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കുന്നതായി കാണിക്കാൻ സാധ്യതയുണ്ട്.",
+'welcomeuser' => 'സ്വാഗതം, $1!',
 'welcomecreation' => '== സ്വാഗതം, $1! ==
 താങ്കളുടെ അംഗത്വം സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു.
 താങ്കളുടെ [[Special:Preferences|{{SITENAME}} ക്രമീകരണങ്ങളിൽ]] ആവശ്യമായ മാറ്റം വരുത്തുവാൻ മറക്കരുതേ.',
+'welcomecreation-agora' => 'താങ്കളുടെ അംഗത്വം സൃഷ്ടിക്കപ്പെട്ടിരിക്കുന്നു.
+താങ്കളുടെ [[Special:Preferences|{{SITENAME}} ക്രമീകരണങ്ങളിൽ]] മാറ്റം വരുത്താൻ മറക്കരുത്.',
 'yourname' => 'ഉപയോക്തൃനാമം:',
 'yourpassword' => 'രഹസ്യവാക്ക്:',
 'yourpasswordagain' => 'രഹസ്യവാക്ക് ഒരിക്കൽക്കൂടി:',
@@ -1840,6 +1844,7 @@ $1',
 'backend-fail-notsame' => '$1 എന്ന് സമാനമല്ലാത്ത ഒരു പ്രമാണം നിലവിലുണ്ട്.',
 'backend-fail-invalidpath' => '$1 എന്നത് സാധുവായ ഒരു ശേഖരണ പഥം അല്ല.',
 'backend-fail-delete' => '$1 എന്ന പ്രമാണം മായ്ക്കാൻ കഴിഞ്ഞില്ല.',
+'backend-fail-describe' => '"$1" എന്ന പ്രമാണത്തിന്റെ മെറ്റഡേറ്റ മാറ്റാൻ കഴിയില്ല.',
 'backend-fail-alreadyexists' => '$1 എന്ന പ്രമാണം നിലവിലുണ്ട്.',
 'backend-fail-store' => '$1 എന്ന പ്രമാണം $2 എന്നതിൽ ശേഖരിക്കാൻ കഴിഞ്ഞില്ല.',
 'backend-fail-copy' => '$1 എന്ന പ്രമാണം $2 എന്നതിലേയ്ക്ക് പകർത്താൻ കഴിഞ്ഞില്ല.',
index 432c871..2d60246 100644 (file)
@@ -1941,15 +1941,16 @@ Daħħal: tip/sottotip, eż. <code>image/jpeg</code>.",
 'disambiguations-text' => "Il-Paġni li jinsabu f'din lista huma parti minn '''paġna ta' diżambigwazzjoni''' b'hekk għandhom jiġu relatati mas-suġġett preċiż minflok. <br />
 Paġna tiġi stimata paġna ta' diżambigwazzjoni dawk kollha li jagħmlu użu mit-template elenkat f'[[MediaWiki:Disambiguationspage]]",
 
-'doubleredirects' => 'Riindirizzi doppji',
-'doubleredirectstext' => 'Din il-paġna telenka dawk il-paġni li jindirizzaw lejn paġna oħra ta\' riindirizzament.
-Kull filliera għandha ħolqa għall-ewwel u t-tieni riindirizz, kif ukoll fejn tirrindirizza t-tieni paġna, is-soltu magħrufa bħalha l-paġna "reali" fejn se twassal, fejn suppost l-ewwel riindirizz għandu jipponta.',
+'doubleredirects' => 'Rindirizzi doppji',
+'doubleredirectstext' => 'Din il-paġna telenka dawk il-paġni li jindirizzaw lejn paġna oħra ta\' rindirizzament.
+Kull filliera għandha ħolqa għall-ewwel u t-tieni rindirizz, kif ukoll fejn tirrindirizza t-tieni paġna, is-soltu magħrufa bħalha l-paġna "reali" fejn se twassal, fejn suppost l-ewwel rindirizz għandu jipponta.
+Daħliet <del>maqtugħa</del> saritilhom it-tiswija.',
 'double-redirect-fixed-move' => '[[$1]] ġie mmexxi awtomatikament, issa hu rindirizz għal [[$2]]',
 'double-redirect-fixed-maintenance' => "Tiswija ta' rindirizz doppju minn [[$1]] għal [[$2]].",
 'double-redirect-fixer' => "Tiswija ta' rindirizz",
 
-'brokenredirects' => 'Riindirizzi ħżiena',
-'brokenredirectstext' => 'Ir-riindirizzi segwenti għandhom ħoloq għal paġni ineżistenti:',
+'brokenredirects' => 'Rindirizzi ħżiena',
+'brokenredirectstext' => 'Ir-rindirizzi segwenti għandhom ħoloq lejn paġni li ma jeżistux:',
 'brokenredirects-edit' => 'editja',
 'brokenredirects-delete' => 'ħassar',
 
index 453adbb..21158d7 100644 (file)
@@ -3151,6 +3151,8 @@ Dette er sannsynligvis forårsaket av en lenke til et svartelistet eksternt nett
 'markedaspatrollederror' => 'Kan ikke merke som godkjent',
 'markedaspatrollederrortext' => 'Du må spesifisere en versjon å merke som godkjent.',
 'markedaspatrollederror-noautopatrol' => 'Du kan ikke merke dine egne endringer som godkjente.',
+'markedaspatrollednotify' => 'Denne endringen av $1 har blitt patruljert.',
+'markedaspatrollederrornotify' => 'Patruljering feilet.',
 
 # Patrol log
 'patrol-log-page' => 'Godkjenningslogg',
index 3f6da4f..8244658 100644 (file)
@@ -21,6 +21,7 @@
  * @author Hamaryns
  * @author Jens Liebenau
  * @author Kaganer
+ * @author Kippenvlees1
  * @author Krinkle
  * @author MarkvA
  * @author McDutchie
@@ -767,9 +768,12 @@ De opgegeven reden is "\'\'$3\'\'".',
 
 U kunt {{SITENAME}} nu anoniem gebruiken of weer <span class='plainlinks'>[$1 aanmelden]</span> als dezelfde of een andere gebruiker.
 Mogelijk worden nog een aantal pagina's weergegeven alsof u aangemeld bent totdat u de cache van uw browser leegt.",
+'welcomeuser' => 'Welkom, $1!',
 'welcomecreation' => '== Welkom, $1! ==
 Uw gebruiker is geregistreerd.
 Vergeet niet uw [[Special:Preferences|voorkeuren voor {{SITENAME}}]] aan te passen.',
+'welcomecreation-agora' => 'Uw gebruiker is aangemaakt.
+Vergeet niet uw [[Special:Preferences|voorkeuren voor {{SITENAME}}]] aan te passen.',
 'yourname' => 'Gebruikersnaam:',
 'yourpassword' => 'Wachtwoord:',
 'yourpasswordagain' => 'Geef uw wachtwoord opnieuw in:',
@@ -1161,7 +1165,7 @@ Deze bestaat al.',
 
 # Content models
 'content-model-wikitext' => 'wikitekst',
-'content-model-text' => 'platte tekst',
+'content-model-text' => 'tekst zonder opmaak',
 'content-model-javascript' => 'JavaScript',
 'content-model-css' => 'CSS',
 
@@ -1949,6 +1953,7 @@ Als het probleem aanhoudt, neem dan contact op met een [[Special:ListUsers/sysop
 'backend-fail-notsame' => 'Er staat al een niet-identiek bestand op de plaats $1.',
 'backend-fail-invalidpath' => '$1 is geen geldig opslagpad.',
 'backend-fail-delete' => 'Het bestand $1 kon niet verwijderd worden.',
+'backend-fail-describe' => 'Het was niet mogelijk de metadata aan te passen voor het bestand "$1".',
 'backend-fail-alreadyexists' => 'Het bestand $1 bestaat al.',
 'backend-fail-store' => 'Het was niet mogelijk het bestand $1 op te slaan op locatie $2.',
 'backend-fail-copy' => 'Het was niet mogelijk het bestand $1 te kopiëren naar $2.',
@@ -2150,7 +2155,7 @@ Invoer: inhoudstype/subtype, bijvoorbeeld <code>image/jpeg</code>.',
 # Unused templates
 'unusedtemplates' => 'Ongebruikte sjablonen',
 'unusedtemplatestext' => 'Deze pagina geeft alle pagina\'s weer in de naamruimte {{ns:template}} die op geen enkele pagina gebruikt worden.
-Vergeet niet de "Verwijzingen naar deze pagina" te controleren alvorens dit sjabloon te verwijderen.',
+Vergeet niet de "Verwijzingen naar deze pagina" te controleren alvorens deze sjabloon te verwijderen.',
 'unusedtemplateswlh' => 'andere verwijzingen',
 
 # Random page
@@ -3295,6 +3300,8 @@ Meestal wordt dit door een externe verwijzing op een zwarte lijst veroorzaakt.',
 'markedaspatrollederror' => 'Kan niet als gecontroleerd worden aangemerkt',
 'markedaspatrollederrortext' => 'Selecteer een versie om als gecontroleerd aan te merken.',
 'markedaspatrollederror-noautopatrol' => 'U kunt uw eigen wijzigingen niet als gecontroleerd markeren.',
+'markedaspatrollednotify' => 'Deze bewerking op $1 is gemarkeerd als gecontroleerd.',
+'markedaspatrollederrornotify' => 'Markeren als gecontroleerd mislukt.',
 
 # Patrol log
 'patrol-log-page' => 'Markeerlogboek',
@@ -3854,8 +3861,8 @@ De bevestigingscode vervalt op $4.',
 
 # Scary transclusion
 'scarytranscludedisabled' => '[Interwiki-invoeging van sjablonen is uitgeschakeld]',
-'scarytranscludefailed' => '[Het sjabloon $1 kon niet opgehaald worden]',
-'scarytranscludefailed-httpstatus' => '[Het sjabloon $1 kon niet opgehaald worden: HTTP $2]',
+'scarytranscludefailed' => '[De sjabloon $1 kon niet opgehaald worden]',
+'scarytranscludefailed-httpstatus' => '[De sjabloon $1 kon niet opgehaald worden: HTTP $2]',
 'scarytranscludetoolong' => '[De URL is te lang]',
 
 # Delete conflict
@@ -4074,7 +4081,7 @@ Andere bestandstypen worden direct in het met het MIME-type verbonden programma
 'compare-rev1' => 'Versie 1',
 'compare-rev2' => 'Versie 2',
 'compare-submit' => 'Vergelijken',
-'compare-invalid-title' => 'De titel die u hebt opgegeven is ongeldig.',
+'compare-invalid-title' => 'De opgegeven pagina is ongeldig.',
 'compare-title-not-exists' => 'De titel die u hebt opgegeven bestaat niet.',
 'compare-revision-not-exists' => 'De versie die u hebt opgegeven bestaat niet.',
 
index 3e7afc0..54219b0 100644 (file)
@@ -482,6 +482,7 @@ $messages = array(
 'namespaces' => 'Namnerom',
 'variants' => 'Variantar',
 
+'navigation-heading' => 'Navigasjonsmeny',
 'errorpagetitle' => 'Feil',
 'returnto' => 'Attende til $1.',
 'tagline' => 'Frå {{SITENAME}}',
@@ -713,9 +714,12 @@ Administratoren som låste filsamlinga oppgav den fylgjande årsaka: «$3».',
 
 Du kan no halde fram å bruke {{SITENAME}} anonymt, eller du kan <span class='plainlinks'>[$1 logge inn att]</span>  med same kontoen eller ein annan brukar kan logge inn.
 Ver merksam på at nokre sider framleis kan visast fram som om du er innlogga fram til du slettar mellomlageret til nettlesaren din.",
+'welcomeuser' => 'Velkomen, $1!',
 'welcomecreation' => '== Hjarteleg velkommen til {{SITENAME}}, $1! ==
 Brukarkontoen din er oppretta.
 Hugs at du kan endre på [[Special:Preferences|innstillingane]] dine.',
+'welcomecreation-agora' => 'Brukarkontoen din er oppretta.
+Gløym ikkje å endra [[Special:Preferences|innstillingane dine for {{SITENAME}}]].',
 'yourname' => 'Brukarnamn:',
 'yourpassword' => 'Passord:',
 'yourpasswordagain' => 'Skriv opp att passordet',
@@ -1810,6 +1814,7 @@ $1',
 'backend-fail-notsame' => 'Ein ikkje-identisk fil finst alt på «$1».',
 'backend-fail-invalidpath' => '$1 er ikkje ein gyldig lagringsstig.',
 'backend-fail-delete' => 'Kunne ikkje sletta fila «$1».',
+'backend-fail-describe' => 'Kunne ikkje endra metadataa for fila «$1».',
 'backend-fail-alreadyexists' => 'Fila $1 finst frå før.',
 'backend-fail-store' => 'Kunne ikkje lagra fila «$1» på «$2».',
 'backend-fail-copy' => 'Kunne ikkje kopiera fila «$1» til «$2».',
@@ -3081,6 +3086,8 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'markedaspatrollederror' => 'Kan ikkje merke sida som patruljert',
 'markedaspatrollederrortext' => 'Du må markere ein versjon for å kunne godkjenne.',
 'markedaspatrollederror-noautopatrol' => 'Ein har ikkje høve til å merkje sine eigne endringar som godkjende.',
+'markedaspatrollednotify' => 'Denne endringa på $1 har vorten merkt som patruljert.',
+'markedaspatrollederrornotify' => 'Det gjekk ikkje å merkja endringa som patruljert.',
 
 # Patrol log
 'patrol-log-page' => 'Patruljeringslogg',
@@ -3886,9 +3893,9 @@ Bilete vert viste i full oppløysing, andre filtypar vert starta direkte i dei t
 'logentry-move-move_redir-noredirect' => '$1 flytte sida $3 til $4 over ei omdirigering utan å lata etter ei omdirigering',
 'logentry-patrol-patrol' => '$1 merkte versjon $4 av sida $3 som patruljert',
 'logentry-patrol-patrol-auto' => '$1 merkte automatisk versjon $4 av sida $3 som patruljert',
-'logentry-newusers-newusers' => '$1 oppretta ein brukarkonto',
-'logentry-newusers-create' => '$1 oppretta ein brukarkonto',
-'logentry-newusers-create2' => '$1 oppretta brukarkontoen $3',
+'logentry-newusers-newusers' => 'Brukarkontoen $1 vart oppretta',
+'logentry-newusers-create' => 'Brukarkontoen $1 vart oppretta',
+'logentry-newusers-create2' => 'Brukarkontoen $3 vart oppretta av $1',
 'logentry-newusers-autocreate' => 'Kontoen $1 vart oppretta av seg sjølv',
 'newuserlog-byemail' => 'passordet er sendt på e-post',
 
index cd36ce1..59b2131 100644 (file)
@@ -390,7 +390,7 @@ $messages = array(
 'cancel' => 'ନାକଚ',
 'moredotdotdot' => 'ଅଧିକ...',
 'mypage' => 'ମୋ ପୃଷ୍ଠା',
-'mytalk' => 'ମà­\8b à¬\86ଲà­\8bà¬\9aନା',
+'mytalk' => 'ଆଲୋଚନା',
 'anontalk' => 'ଏହି ଆଇ.ପି. ଠିକଣା ଉପରେ ଆଲୋଚନା',
 'navigation' => 'ଦିଗବାରେଣି',
 'and' => '&#32;ଓ',
@@ -664,6 +664,7 @@ $2',
 
 ଆପଣ ଅଜଣା ଭାବରେ {{SITENAME}}କୁ ଯାଇପାରିବେ, କିମ୍ବା <span class='plainlinks'>[$1 ଆଉଥରେ]</span> ଆଗର ଇଉଜର ନାଆଁରେ/ଅଲଗା ନାଆଁରେ ଲଗଇନ କରିପାରିବେ ।
 ଜାଣିରଖନ୍ତୁ, କିଛି ପୃଷ୍ଠା ଲଗାଆଉଟ କଲାପରେ ବି ଆଗପରି ଦେଖାଯାଇପାରେ, ଆପଣ ବ୍ରାଉଜର କାସକୁ ହଟାଇଲା ଯାଏଁ ଏହା ଏମିତି ରହିବ ।",
+'welcomeuser' => 'ସ୍ଵାଗତ, $1!',
 'welcomecreation' => '== $1!, ଆପଣଙ୍କ ଖାତାଟି ତିଆରି ହୋଇଗଲା==
 ତେବେ, ନିଜର [[Special:Preferences|{{SITENAME}} ପସନ୍ଦସବୁକୁ]] ବଦଳାଇବାକୁ ଭୁଲିବେ ନାହିଁ ।',
 'yourname' => 'ବ୍ୟବହାରକାରୀଙ୍କ ନାମ:',
@@ -1336,7 +1337,7 @@ $1",
 
 # Preferences page
 'preferences' => 'ପସନ୍ଦ',
-'mypreferences' => 'ମà­\8b à¬ªà¬¸à¬¨à­\8dଦ',
+'mypreferences' => 'ପସନ୍ଦ',
 'prefs-edits' => 'ସମ୍ପାଦନା ସଂଖ୍ୟା:',
 'prefsnologin' => 'ଲଗ‌‌ ଇନ କରିନାହାନ୍ତି',
 'prefsnologintext' => 'ବ୍ୟବହାରକାରୀଙ୍କ ପସନ୍ଦସବୁ ବଦଳାଇବା ପାଇଁ ଆପଣଙ୍କୁ <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ଲଗ ଇନ]</span> କରିବାକୁ ପଡ଼ିବ ।',
@@ -2250,7 +2251,7 @@ URLଟି ଠିକ ଅଚିକି କି ନାଁ ଓ ସାଇଟଟି ସ
 
 # Watchlist
 'watchlist' => 'ଦେଖାତାଲିକା',
-'mywatchlist' => 'ମà­\8bର à¬¦à­\87à¬\96ାତାଲିକା',
+'mywatchlist' => 'ଦà­\87à¬\96ଣାତାଲିକା',
 'watchlistfor2' => '$1 $2 ପାଇଁ',
 'nowatchlist' => 'ଆପଣଙ୍କ ଦେଖଣା ତାଲିକାରେ କିଛି ବି ଜିନିଷ ନାହିଁ ।',
 'watchlistanontext' => 'ଆପଣା ଦେଖଣାତାଲିକାରେ କିଛି ସମ୍ପାଦନା କରିବା ନିମନ୍ତେ ଦୟାକରି  $1 କରନ୍ତୁ ।',
@@ -2515,7 +2516,7 @@ $1',
 # Contributions
 'contributions' => 'ବ୍ୟବହାରକାରୀଙ୍କ ଦାନ',
 'contributions-title' => '$1 ପାଇଁ ବ୍ୟବହାରକାରୀଙ୍କ ଦାନ',
-'mycontris' => 'ମà­\8b à¬\85ବଦାନ',
+'mycontris' => 'ଅବଦାନ',
 'contribsub2' => '$1 ($2) ପାଇଁ',
 'nocontribs' => 'ଏହି ନିର୍ଣ୍ଣାୟକବଳୀ ନିମନ୍ତେ କିଛି ବି ବଦଳ ମେଳ ଖାଇଲା ନାହିଁ ।',
 'uctop' => '(ଉପର)',
@@ -3909,4 +3910,6 @@ MediaWiki ଉପଯୋଗୀ ହେବା ଲକ୍ଷରେ ବଣ୍ଟାଯ
 'duration-centuries' => '$1 {{PLURAL:$1|century|centuries}}',
 'duration-millennia' => '$1 {{PLURAL:$1|millennium|millennia}}',
 
+# Unknown messages
+'mytalk-parenthetical' => 'କଥା',
 );
index d9c6daf..51f3751 100644 (file)
@@ -100,12 +100,12 @@ $messages = array(
 'tog-newpageshidepatrolled' => 'Басгæрст фæрстæ ног фæрсты номхыгъдæй æмбæхс',
 'tog-extendwatchlist' => 'Стырдæр цæстдард номхыгъд алы ивдимæ дæр, æрмæст фæстагимæ нал.',
 'tog-usenewrc' => 'Фæстаг æмæ цæстдард ивдтытæ фарсмæ гæсгæ иу кæнæт (домы JavaScript)',
-'tog-numberheadings' => 'Сæргæндты автоматикон нумераци',
+'tog-numberheadings' => 'Сæртæн хæдæвзæргæ номыр æвæрын',
 'tog-showtoolbar' => 'Æвдисын ивыны панел (домы JavaScript)',
 'tog-editondblclick' => 'Фæрстæ дыкъæппæй ив (JavaScript)',
 'tog-editsection' => 'Равдис «баив æй» æрвитæн тексты алы хайы дæр',
-'tog-editsectiononrightclick' => 'СæÑ\80гондÑ\8bл Ñ\80аÑ\85из Ã¦Ñ\80кÑ\8aæппæй Ñ\84аÑ\80Ñ\81Ñ\8b Ñ\85æйÑ\82Ñ\82æ Ð¸Ð² (JavaScript)',
-'tog-showtoc' => 'Сæргæндты номхыгъд æвдис (æртæ сæргондæй фылдæр цы фарсы ис, уым)',
+'tog-editsectiononrightclick' => 'ХайÑ\8b Ñ\81æÑ\80Ñ\8bл Ñ\80аÑ\85иÑ\81 Ã¦Ñ\80кÑ\8aæппæй Ð¸Ð²Ñ\8bнÑ\8b Ñ\84адаÑ\82 Ð±Ð°Ð¸Ñ\83 ÐºÃ¦Ð½Ñ\8bн (домÑ\8b JavaScript)',
+'tog-showtoc' => 'Сæрты номхыгъд æвдисын (æртæйæ фылдæрсæр цы фарсы ис, уым)',
 'tog-rememberpassword' => 'Бахъуыды мæ кæнæд ацы браузер ($1 {{PLURAL:$1|бонмæ|бонмæ}})',
 'tog-watchcreations' => 'Æз цы фæрстæ аразын æмæ цы файлтæ бавгæнын, уыдон мæ цæстдард уæт.',
 'tog-watchdefault' => 'Æз цы фæрстæ æмæ цы файлтæ ивын, уыдон мæ цæстдард уæт',
@@ -140,7 +140,7 @@ $messages = array(
 
 'underline-always' => 'Æдзух',
 'underline-never' => 'Никуы',
-'underline-default' => 'Ð\91Ñ\80аÑ\83зеÑ\80Ñ\8b ÐºÑ\83Ñ\8bд Ñ\83',
+'underline-default' => 'ЦÑ\8aаÑ\80 Ã¦Ð²Ð¸ Ñ\81гаÑ\80æнмæ Ð³Ã¦Ñ\81гæ',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Ивæн бынаты шрифты стил:',
@@ -225,8 +225,8 @@ $messages = array(
 'newwindow' => '(кæны ног рудзынджы)',
 'cancel' => 'Ныууадзын',
 'moredotdotdot' => 'Фылдæр…',
-'mypage' => 'Ð\9cæ Ñ\84арс',
-'mytalk' => 'Ð\9cæ Ð½ыхас',
+'mypage' => 'Фарс',
+'mytalk' => 'Ð\9dыхас',
 'anontalk' => 'Ацы IP-адрисы тæрхон',
 'navigation' => 'Навигаци',
 'and' => '&#32;æмæ',
@@ -258,6 +258,7 @@ $messages = array(
 'namespaces' => 'Номдæттæ',
 'variants' => 'Варианттæ',
 
+'navigation-heading' => 'Навигацион меню',
 'errorpagetitle' => 'Рæдыд',
 'returnto' => 'Фæстæмæ $1 фарсмæ.',
 'tagline' => '{{grammar:ablative|{{SITENAME}}}}',
@@ -333,7 +334,7 @@ $1',
 'disclaimerpage' => 'Project:Нæ бæрн исыны тыххæй',
 'edithelp' => 'Ивынæн æххуыс',
 'edithelppage' => 'Help:Ивд',
-'helppage' => 'Help:СæÑ\80гæндÑ\82æ',
+'helppage' => 'Help:Ð\9cидиÑ\81',
 'mainpage' => 'Сæйраг фарс',
 'mainpage-description' => 'Сæйраг фарс',
 'policy-url' => 'Project:Уагæвæрд',
@@ -367,7 +368,7 @@ $1',
 'editlink' => 'ивын',
 'viewsourcelink' => 'Код кæсын',
 'editsectionhint' => 'Ив хай: $1',
-'toc' => 'Сæргæндтæ',
+'toc' => 'Сæртæ',
 'showtoc' => 'равдисын',
 'hidetoc' => 'бамбæхсын',
 'collapsible-collapse' => 'Стухын',
@@ -455,7 +456,7 @@ $1',
 'cannotdelete-title' => 'Нæ уайы схафын фарс "$1"',
 'delete-hook-aborted' => 'Хук æй хафын нæ бауагъта.
 Уæлæмхасæн æмбарынгæнæн нæ радта.',
-'badtitle' => 'Ã\86нæмбæлон Ñ\81æÑ\80гонд',
+'badtitle' => 'Ã\86взæÑ\80 Ð½Ð¾Ð¼',
 'badtitletext' => 'Æрдомд фарсы ном уыд рæдыдимæ кæнæ афтид кæнæ та йæ æхсæн-æвзаг æви йæ интервики æрвитæн раст нæ уыд.
 Гæнæн ис Номы ис ахæм дамгъæтæ, кæдон уым æвæрын нæй гæнæн.',
 'perfcached' => 'Бындæр цы рардтæ ис, уыдон сты кешгонд æмæ гæнæн ис базæронд сты. Кешы гæнæн ис уа æппæты фылдæр {{PLURAL:$1|иу фæстиуæг|$1 фæстиуæджы}}.',
@@ -505,9 +506,12 @@ $2',
 
 Дæ бон у дарддæр архайай {{grammar:genitive|{{SITENAME}}}} æнæномæй, æви та <span class='plainlinks'>[$1 фæстæмæ бахизын]</span> раздæры номæй кæнæ та æндæр номæй.
 Дæ сæры дар æмæ иуæй иу фæрстæ гæнæн ис æвдыст цæуой афтæ, цымæ нырмæ дæр нæ рахызтæ. Уый тыххæй дæ браузеры кеш сафтид кæн.",
+'welcomeuser' => 'Æгас цу, $1!',
 'welcomecreation' => '== Ӕгас цу, $1! ==
 Дæ аккаунт арæзт æрцыдис.
-Ма дæ ферох уæт æркæсын дæ [[Special:Preferences|{{grammar:genitive|{{SITENAME}}}} фадæттæм]].',
+Ма дæ ферох уæт æркæсын дæ [[Special:Preferences|{{grammar:genitive|{{SITENAME}}}} уагæвæрдтæм]].',
+'welcomecreation-agora' => 'Дæ аккаунт арæзт æрцыдис.
+Ма дæ ферох уæт æркæсын дæ [[Special:Preferences|{{grammar:genitive|{{SITENAME}}}} уагæвæрдтæм]].',
 'yourname' => 'Фæсномыг:',
 'yourpassword' => 'Пароль:',
 'yourpasswordagain' => 'Дæ пароль иу хатт ма:',
@@ -583,7 +587,7 @@ $2',
 'emailauthenticated' => 'Дæ e-mail уыд бæлвырдгонд $2 $3 сахатыл.',
 'emailnotauthenticated' => 'Дæ e-mail адрис нырмæ нæу бæлвырдгонд.
 Иу e-mail дæр дæм нæ уыдзæн æрвыст ацы функцитæй.',
-'noemailprefs' => 'Ð\91аÑ\84Ñ\8bÑ\81Ñ\81 e-mail Ð°Ð´Ñ\80иÑ\81 Ð´Ã¦ Ñ\84адæÑ\82ты, цæмæй ацы функцитæ кусой.',
+'noemailprefs' => 'Ð\91аÑ\84Ñ\8bÑ\81Ñ\81 e-mail Ð°Ð´Ñ\80иÑ\81 Ð´Ã¦ Ñ\83агæвæÑ\80дты, цæмæй ацы функцитæ кусой.',
 'emailconfirmlink' => 'Дæ электронон посты адрис сфидар кæн',
 'invalidemailaddress' => 'E-mail нæй гæнæн райсын, уымæн æмæ йæ формат раст нæу.
 Бафысс раст форматы адрис кæнæ та йæ сафтид кæн.',
@@ -683,12 +687,12 @@ $2
 'nowiki_tip' => 'Ницæмæ дарын вики формат',
 'image_tip' => 'Æфтыд файл',
 'media_tip' => 'Файлмæ æрвитæн',
-'sig_tip' => 'Дæ ырфыст рæстæгимæ',
+'sig_tip' => 'Дæ къухæрфыст, рæстæгимæ',
 'hr_tip' => 'Горизонталон хахх (арæх дзы ма пайда кæн)',
 
 # Edit pages
 'summary' => 'Бындур:',
-'subject' => 'Темæ/сæргонд:',
+'subject' => 'Темæ/сæр:',
 'minoredit' => 'Ай чысыл ивд у.',
 'watchthis' => 'Цæст дарын ацы фарсмæ',
 'savearticle' => 'Бавæрын',
@@ -717,7 +721,7 @@ $2
 * Блокы мысан: $7
 
 Дæ бон у бадзурай {{grammar:allative|$1}} кæнæ [[{{MediaWiki:Grouppage-sysop}}|радгæсмæ]], цæмæй блокы тыххæй аныхас кæнай.
\94æ Ð±Ð¾Ð½ Ð½Ã¦Ñ\83 Ñ\8dлекÑ\82Ñ\80онон Ñ\84Ñ\8bÑ\81Ñ\82æг Ã¦Ð¼ Ð°Ñ\80виÑ\82ай, Ñ\86алÑ\8bнмæ Ð´Ã¦ [[Special:Preferences|аккаÑ\83нÑ\82Ñ\8b Ñ\84адæÑ\82ты]] раст e-mail нæ бацамонай æмæ цалынмæ уымæй дæр нæ дæ блокгонд.
\94æ Ð±Ð¾Ð½ Ð½Ã¦Ñ\83 Ñ\8dлекÑ\82Ñ\80онон Ñ\84Ñ\8bÑ\81Ñ\82æг Ã¦Ð¼ Ð°Ñ\80виÑ\82ай, Ñ\86алÑ\8bнмæ Ð´Ã¦ [[Special:Preferences|аккаÑ\83нÑ\82Ñ\8b Ñ\83агæвæÑ\80дты]] раст e-mail нæ бацамонай æмæ цалынмæ уымæй дæр нæ дæ блокгонд.
 Дæ нырыккон IP адрис у $3, æмæ блокы бæрæггæнæн у #$5.
 Дæ хорзæхæй, уæлдæр цы детальтæ ис, уыдон иу дæ домæнмæ бафтау.",
 'autoblockedtext' => "'''Дæ IP адрис йæхæдæг ныблок ис, уымæн æмæ ууылты архайдта æндæр архайæг, кæй ныблок кодта $1.'''
@@ -731,14 +735,14 @@ $2
 
 Дæ бон у бадзурай {{grammar:allative|$1}} кæнæ æндæр [[{{MediaWiki:Grouppage-sysop}}|радгæсмæ]], цæмæй блокы тыххæй аныхас кæнай.
 
\94æ Ð±Ð¾Ð½ Ð½Ã¦Ñ\83 Ñ\8dлекÑ\82Ñ\80онон Ñ\84Ñ\8bÑ\81Ñ\82æг Ã¦Ð¼ Ð°Ñ\80виÑ\82ай, Ñ\86алÑ\8bнмæ Ð´Ã¦ [[Special:Preferences|аккаÑ\83нÑ\82Ñ\8b Ñ\84адæÑ\82ты]] раст e-mail нæ бацамонай æмæ цалынмæ уымæй дæр нæ дæ блокгонд.
\94æ Ð±Ð¾Ð½ Ð½Ã¦Ñ\83 Ñ\8dлекÑ\82Ñ\80онон Ñ\84Ñ\8bÑ\81Ñ\82æг Ã¦Ð¼ Ð°Ñ\80виÑ\82ай, Ñ\86алÑ\8bнмæ Ð´Ã¦ [[Special:Preferences|аккаÑ\83нÑ\82Ñ\8b Ñ\83агæвæÑ\80дты]] раст e-mail нæ бацамонай æмæ цалынмæ уымæй дæр нæ дæ блокгонд.
 
 Дæ нырыккон IP адрис у $3, æмæ блокы бæрæггæнæн у #$5.
 Дæ хорзæхæй, уæлдæр цы детальтæ ис, уыдон иу дæ домæнмæ бафтау.",
 'blockednoreason' => 'аххос амынд не ’рцыд',
 'whitelistedittext' => 'Дæуæн хъæуы $1, цæмæй фæртæ ивай.',
 'confirmedittext' => 'Фæрстæ ивыны размæ ды хъуамæ сбæлвырд кæнай дæ e-mail адрис.
\94æ Ñ\85æÑ\80зæÑ\85æй, Ñ\81æвæÑ\80 Ã¦Ð¼Ã¦ Ñ\81бæлвÑ\8bÑ\80д ÐºÃ¦Ð½ Ð´Ã¦ e-mail Ð°Ð´Ñ\80иÑ\81 Ð´Ã¦ [[Special:Preferences|Ñ\84адæÑ\82ты]].',
\94æ Ñ\85æÑ\80зæÑ\85æй, Ñ\81æвæÑ\80 Ã¦Ð¼Ã¦ Ñ\81бæлвÑ\8bÑ\80д ÐºÃ¦Ð½ Ð´Ã¦ e-mail Ð°Ð´Ñ\80иÑ\81 Ð´Ã¦ [[Special:Preferences|Ñ\83агæвæÑ\80дты]].',
 'nosuchsectiontitle' => 'Хай нæ уард кæны',
 'nosuchsectiontext' => 'Ды фæлвардтай ахæм фарс ивын, кæцы нæй.
 Гæнæн ис, цалынмæ ды фарс кастæ, уый хаст кæнæ хафт æрцыдис.',
@@ -765,7 +769,7 @@ $2
 'note' => "'''Бафиппай:'''",
 'previewnote' => "'''Зон æй, æмæ ай у æрмæстдæр разбакаст.'''
 Дæ ивдтытæ нырмæ æвæрд не рцыдысты!",
-'continue-editing' => 'Ð\94аÑ\80ддæÑ\80 Ð¸Ð²ын',
+'continue-editing' => 'Ð\98вÑ\8bнÑ\8b Ð±Ñ\8bнаÑ\82мæ Ð°Ñ\86æÑ\83ын',
 'editing' => 'Ивд цæуы $1',
 'editingsection' => 'Ивыс $1 (фарсы хай)',
 'editconflict' => 'Ивыны конфликт: $1',
@@ -851,8 +855,8 @@ $2
 # Search results
 'searchresults' => 'Агуырды фæстиуджытæ',
 'searchresults-title' => 'Агуырды фæстиуæг: «$1»',
-'titlematches' => 'УаÑ\86Ñ\82Ñ\8b Ñ\81æÑ\80гæндÑ\82Ñ\8b Ã¦Ð¼Ñ\86аÑ\83Ñ\82æ',
-'notitlematches' => 'ФæÑ\80Ñ\81Ñ\82Ñ\8b Ñ\81æÑ\80гæндÑ\82Ñ\8b Ð½Ã¦Ð¹',
+'titlematches' => 'УаÑ\86Ñ\8b Ð½Ð¾Ð¼ Ã¦Ð¼Ð±Ã¦Ð»Ñ\8b',
+'notitlematches' => 'Ð\9dикæÑ\86Ñ\8b Ñ\84аÑ\80Ñ\81Ñ\8b Ð½Ð¾Ð¼ Ã¦Ð¼Ð±Ã¦Ð»Ñ\8b',
 'textmatches' => 'Уацты æмцаутæ',
 'prevn' => 'рæздæры {{PLURAL:$1|$1}}',
 'nextn' => 'иннæ {{PLURAL:$1|$1}}',
@@ -862,7 +866,7 @@ $2
 'viewprevnext' => 'Кæсын ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-exists' => "'''Ацы викийы ис фарс \"[[:\$1]]\" номимæ.'''",
 'searchmenu-new' => "'''Сараз фарс \"[[:\$1]]\" ацы викийы!'''",
-'searchprofile-articles' => 'СæÑ\80гæндÑ\82ы фæрстæ',
+'searchprofile-articles' => 'Ð\9cидиÑ\81ы фæрстæ',
 'searchprofile-project' => 'Æххуыс æмæ Проекты фæрстæ',
 'searchprofile-images' => 'Мультимеди',
 'searchprofile-everything' => 'Алцыдæр',
@@ -879,6 +883,7 @@ $2
 'search-suggest' => 'Кæд мыййаг агурыс: $1',
 'search-interwiki-caption' => 'Æфсымæрон проекттæ',
 'search-interwiki-more' => '(нодзы)',
+'search-relatedarticle' => 'Хæстæг',
 'searchrelated' => 'хæстæг',
 'searchall' => 'иууылдæр',
 'showingresultsheader' => "{{PLURAL:$5|Фæстиуæг '''$1''' '''$3'''-йæ|Фæстиуджытæ '''$1 - $2''' '''$3'''-йæ}} '''{{grammar:dative|$4}}'''",
@@ -897,15 +902,15 @@ $2
 'qbsettings-floatingleft' => 'Рахизырдыгæй ленккæнгæ',
 
 # Preferences page
-'mypreferences' => 'Ð\9cæ Ñ\84адæÑ\82тæ',
+'mypreferences' => 'УагæвæÑ\80дтæ',
 'prefs-edits' => 'Ивдтыты нымæц:',
 'prefsnologin' => 'Системæйæн дæхи нæ бацамыдтай',
 'changepassword' => 'Пароль ивæн',
 'prefs-skin' => 'Цъар',
 'skin-preview' => 'Разæркаст',
-'prefs-beta' => 'Ð\91еÑ\82а Ñ\84адæÑ\82тæ',
+'prefs-beta' => 'Ð\91еÑ\82а Ñ\83агæвæÑ\80дтæ',
 'prefs-datetime' => 'Датæ æмæ рæстæг',
-'prefs-labs' => 'Ð\9bабоÑ\80аÑ\82оÑ\80он Ñ\84адæÑ\82тæ',
+'prefs-labs' => 'Ð\9bабоÑ\80аÑ\82оÑ\80он Ñ\83агæвæÑ\80дтæ',
 'prefs-personal' => 'Архайæджы профил',
 'prefs-rc' => 'Фæстаг ивдтытæ',
 'prefs-watchlist' => 'Цæстдард',
@@ -934,7 +939,7 @@ $2
 'timezoneregion-europe' => 'Европæ',
 'timezoneregion-indian' => 'Индийы фурд',
 'timezoneregion-pacific' => 'Сабыр Фурд',
-'prefs-searchoptions' => 'Агурыны фадæттæ',
+'prefs-searchoptions' => 'Агурын',
 'prefs-namespaces' => 'Номдæттæ',
 'prefs-files' => 'Файлтæ',
 'prefs-custom-css' => 'Хиæвæрд CSS',
@@ -1207,7 +1212,7 @@ $3',
 
 # Watchlist
 'watchlist' => 'Мæ цæстдард рæгъ',
-'mywatchlist' => 'Ð\9cæ Ñ\86æÑ\81Ñ\82даÑ\80д Ñ\84æÑ\80Ñ\81Ñ\82æ',
+'mywatchlist' => 'ЦæÑ\81Ñ\82даÑ\80д',
 'watchlistfor2' => 'Архайæг: $1 $2',
 'nowatchlist' => 'Иу уацмæ дæр дæ цæст нæ дарыс.',
 'watchnologin' => 'Системæйæн дæхи нæ бацамыдтай',
@@ -1274,7 +1279,7 @@ $3',
 # Contributions
 'contributions' => 'Архайæджы бавæрд',
 'contributions-title' => 'Архайæджы бавæрд: $1',
-'mycontris' => 'Ð\9cæ Ð±авæрд',
+'mycontris' => 'Ð\91авæрд',
 'contribsub2' => 'Архайæг: $1 ($2)',
 'uctop' => '(фæстаг)',
 'month' => 'Ацы мæйы (æмæ раздæр):',
@@ -1305,7 +1310,7 @@ $3',
 'whatlinkshere-hideredirs' => '$1 рарвыстытæ',
 'whatlinkshere-hidetrans' => '$1 æфтыдтытæ',
 'whatlinkshere-hidelinks' => '$1 æрвитæнтæ',
-'whatlinkshere-hideimages' => '$1 нывмæ æрвитæнтæ',
+'whatlinkshere-hideimages' => 'Файлмæ æрвитæнтæ $1',
 'whatlinkshere-filters' => 'Фильтртæ',
 
 # Block/unblock
@@ -1368,7 +1373,7 @@ $3',
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Дæ архайæджы фарс',
 'tooltip-pt-mytalk' => 'Дæ ныхасы фарс',
-'tooltip-pt-preferences' => 'Ð\94æ Ñ\84адæÑ\82тæ',
+'tooltip-pt-preferences' => 'Ð\94æ Ñ\83агæвæÑ\80дтæ',
 'tooltip-pt-watchlist' => 'Фæрстæ кæй ивдтытæм ды дарыс дæ цæст',
 'tooltip-pt-mycontris' => 'Дæ бавæрд',
 'tooltip-pt-login' => 'Хуыздæр у куы бахизай системæмæ; фæлæ нæмæнг нæу',
@@ -1570,6 +1575,7 @@ $3',
 # Special:FilePath
 'filepath' => 'Файлмæ фæт',
 'filepath-page' => 'Файл:',
+'filepath-submit' => 'Бацæуын',
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch-filename' => 'Файлы ном:',
@@ -1623,7 +1629,7 @@ $3',
 'api-error-unknown-error' => 'Мидæггаг рæдыд: Цыдæр раст нæ ацыдис, файл куы æвгæдтай, уæд.',
 'api-error-unknown-warning' => 'Нæзонгæ фæдзæхст: "$1".',
 'api-error-unknownerror' => 'Нæзонгæ рæдыд: "$1".',
-'api-error-uploaddisabled' => 'Ацы викийы бавгæныны фадат хицæн у.',
+'api-error-uploaddisabled' => 'Ацы викийы, бавгæныны фадат хицæн у.',
 'api-error-verification-error' => 'Ацы файл гæнæн ис хæлд у, кæнæ йæ номы фæстаг хай раст нæу.',
 
 # Durations
@@ -1637,4 +1643,6 @@ $3',
 'duration-centuries' => '$1 {{PLURAL:$1|æнус|æнусы}}',
 'duration-millennia' => '$1 {{PLURAL:$1|мин аз|мин азы}}',
 
+# Unknown messages
+'mytalk-parenthetical' => 'ныхас',
 );
index 78c6297..b6710e1 100644 (file)
@@ -362,6 +362,12 @@ j'm'escuse mais i feut prinde un aute nom.",
 'resetpass_forbidden' => "Chés mots d'passe is n'peu'te poin ète cangés",
 'resetpass-submit-loggedin' => "Canger ch'mot d'passe",
 
+# Special:PasswordReset
+'passwordreset' => "Ortreuver ch'mot d'passe",
+
+# Special:ChangeEmail
+'changeemail' => "Canger l'adrèche du imèle",
+
 # Edit page toolbar
 'bold_sample' => 'Cros teske',
 'bold_tip' => 'Cros teske',
@@ -622,6 +628,9 @@ Ale doét mie éte pu longue éq $1 {{PLURAL:$1|caracter|caractéres}}.',
 'license' => 'Licince',
 'license-header' => 'Licince',
 
+# Special:ListFiles
+'listfiles' => 'Lisse des fichiés',
+
 # File description page
 'file-anchor-link' => 'Fichié',
 'filehist' => 'Histoère dech fichié',
@@ -657,6 +666,7 @@ Vir apré ([$2 pache]).",
 'nbytes' => '$1 {{PLURAL:$1|octé|octés}}',
 'nmembers' => '$1 {{PLURAL:$1|mimbe|mimbes}}',
 'prefixindex' => 'Tertous chés paches aveuc préfix',
+'listusers' => 'Lisse des uzeus',
 'usercreated' => '{{GENDER:$3|Créé}} ech $1 à $2',
 'newpages' => 'Novèles paches',
 'move' => 'Déplacher',
@@ -693,6 +703,9 @@ Vir apré ([$2 pache]).",
 'linksearch' => 'Loïens éstérieurs',
 'linksearch-line' => '$1 est loïé édpuis $2',
 
+# Special:ActiveUsers
+'activeusers' => 'Lisse des ouvreus uzeus',
+
 # Special:Log/newusers
 'newuserlogpage' => "Jornal éd chés créachons d'comptes d'uzeu",
 
@@ -821,6 +834,7 @@ I feut l'foaire seleumint pour inréyer ech vindalime et pi i feut ète acordant
 Donner apré ch'motif  (pèr egzimpe chiter chés paches qu'ont té vindalisées).",
 'ipboptions' => '2 heures:2 hours,1 jour:1 day,3 jours:3 days,1 ésminne:1 week,2 ésminnes:2 weeks,1 moés:1 month,3 moés:3 months,6 moés:6 months,1 an:1 year,infini:infinite',
 'ipbotheroption' => 'eute',
+'blocklist' => 'Uzeus blotchés',
 'ipblocklist' => 'Uzeus blotchés',
 'blocklink' => 'blotcher',
 'unblocklink' => 'déblotcher',
@@ -938,6 +952,9 @@ Os pouvez vir l'source",
 'svg-long-desc' => 'Fichié SVG, résoluchon éd $1 × $2 picsels, diminchon: $3',
 'show-big-image' => 'Plinne résoluchon',
 
+# Special:NewFiles
+'newimages' => "Galerie d'chés nouvieus fichiés",
+
 # Bad image list
 'bad_image_list' => "Ch'format ch'est:
 
index 77d4823..810e682 100644 (file)
@@ -39,7 +39,7 @@ $messages = array(
 'may_long' => 'Mai',
 'june' => 'Juni',
 'july' => 'Juli',
-'august' => 'Auguscht',
+'august' => 'Auguschd',
 'september' => 'Sebdember',
 'october' => 'Ogdower',
 'november' => 'November',
@@ -83,7 +83,7 @@ $messages = array(
 'newwindow' => '(werd im e naie Fenschter uffgmacht)',
 'cancel' => 'Abbreche',
 'mytalk' => 'Gebabbel mit dir',
-'navigation' => 'Navigation',
+'navigation' => 'Nawigadzion',
 
 # Cologne Blue skin
 'qbfind' => 'Finne',
@@ -101,7 +101,7 @@ $messages = array(
 'errorpagetitle' => 'Fehler',
 'returnto' => 'Zrick zu $1.',
 'tagline' => 'Vun {{SITENAME}}',
-'help' => 'Hilfe',
+'help' => 'Hilf',
 'search' => 'Suche',
 'searchbutton' => 'Suche',
 'go' => 'Adiggel',
@@ -125,8 +125,8 @@ $messages = array(
 'personaltools' => 'Perseenliche Werkzeische',
 'talk' => 'Dischbediere',
 'views' => 'Wievielmol aageguckt',
-'toolbox' => 'Werkzaich',
-'otherlanguages' => 'In annere Sproche',
+'toolbox' => 'Werkzaisch',
+'otherlanguages' => 'In annere Schbroche',
 'redirectedfrom' => '(Wairrerglaidet vun $1)',
 'redirectpagesub' => 'Wairerlaidungssaid',
 'lastmodifiedat' => 'Die Said isch zum ledschde Mol gänneret worre am $1, am $2.',
@@ -149,7 +149,7 @@ $messages = array(
 'mainpage' => 'Hääptsaid',
 'mainpage-description' => 'Startseid',
 'portal' => '{{SITENAME}}-Pordal',
-'privacy' => 'Dadeschutz',
+'privacy' => 'Dadeschuds',
 'privacypage' => 'Project:Daadeschutz',
 
 'badaccess' => 'Kää ausraichende Recht',
@@ -162,7 +162,7 @@ $messages = array(
 'editold' => 'bearwaide',
 'editlink' => 'bearwaide',
 'viewsourcelink' => 'Quell aagucke',
-'editsectionhint' => 'Abschnitt ännere: $1',
+'editsectionhint' => 'Abschnidd ännere: $1',
 'toc' => 'Inhald',
 'showtoc' => 'zaiche',
 'hidetoc' => 'versteggeln',
@@ -170,7 +170,7 @@ $messages = array(
 'site-atom-feed' => '$1 Atom Feed',
 'page-rss-feed' => '"$1" RSS Feed',
 'page-atom-feed' => '"$1" Atom Feed',
-'red-link-title' => '$1 (Said gebbs nid)',
+'red-link-title' => '$1 (Said gebbds nid)',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Said',
@@ -671,13 +671,13 @@ Du kannscht awwer de Quelltext aagucke',
 'tooltip-ca-unwatch' => 'Die Said aus Dainer Beowachdunschlischde rausnemme',
 'tooltip-search' => 'Durchsuch {{SITENAME}}',
 'tooltip-search-go' => 'Geh zu ere Said mit genää dem Namme, wenn s se gebbt',
-'tooltip-search-fulltext' => 'Such in de Said noch dem Text',
+'tooltip-search-fulltext' => 'Such in de Said nochm Tegschd',
 'tooltip-p-logo' => 'Haubdsaid',
 'tooltip-n-mainpage' => 'Uff d Hääptsaid geh',
 'tooltip-n-mainpage-description' => 'Haubdsaid aagucke',
 'tooltip-n-portal' => 'Iwwers Brojegd, wude duu kannschd, wu ebbes finne duschd',
 'tooltip-n-currentevents' => 'hinnergundsinformatione finne iwwer naie Eraichnis',
-'tooltip-n-recentchanges' => 'D Lischt vun de letschte Ännerunge in dem Wiki',
+'tooltip-n-recentchanges' => 'D Lischd vun de ledschde Ännerunge in dem Wiki',
 'tooltip-n-randompage' => 'E zufälliche Said lade',
 'tooltip-n-help' => 'De Ort zum rausfinne',
 'tooltip-t-whatlinkshere' => 'Lischt vun alle Wikisaide, wu do her verlinkt sinn',
@@ -687,7 +687,7 @@ Du kannscht awwer de Quelltext aagucke',
 'tooltip-t-contributions' => 'Die letschte Baidräch vun däm Benutzer aagucke',
 'tooltip-t-emailuser' => 'Dem Benutzer e E-Mail schicke',
 'tooltip-t-upload' => 'Dateije nufflade',
-'tooltip-t-specialpages' => 'Lischt vun alle Spezialsaide',
+'tooltip-t-specialpages' => 'Lischd vun alle Schbezialsaide',
 'tooltip-t-print' => 'Druckversion vun derre Said',
 'tooltip-t-permalink' => 'E dauerhafte Link zu derre Version vun de Said',
 'tooltip-ca-nstab-main' => 'D Inhaldssaid aagucke',
index 5aff86f..a467ace 100644 (file)
@@ -701,9 +701,12 @@ Administrator blokujący go podał następujący powód "\'\'$3\'\'".',
 
 Możesz kontynuować pracę w {{GRAMMAR:MS.lp|{{SITENAME}}}} jako niezarejestrowany użytkownik albo <span class='plainlinks'>[$1 zalogować się ponownie]</span> jako ten sam lub inny użytkownik.
 Zauważ, że do momentu wyczyszczenia pamięci podręcznej przeglądarki niektóre strony mogą wyglądać tak, jakbyś wciąż był zalogowany.",
+'welcomeuser' => 'Witaj, $1!',
 'welcomecreation' => '== Witaj, $1! ==
 Twoje konto zostało utworzone.
 Nie zapomnij dostosować [[Special:Preferences|preferencji dla {{GRAMMAR:D.lp|{{SITENAME}}}}]].',
+'welcomecreation-agora' => 'Twoje konto zostało utworzone.
+Nie zapomnij dostosować [[Special:Preferences|preferencji]].',
 'yourname' => 'Nazwa {{GENDER:|użytkownika|użytkowniczki}}',
 'yourpassword' => 'Hasło',
 'yourpasswordagain' => 'Powtórz hasło',
@@ -1846,6 +1849,7 @@ Jeśli problem będzie się powtarzał, skontaktuj się z [[Special:ListUsers/sy
 'backend-fail-notsame' => 'Plik o podobnej nazwie już istnieje w $1.',
 'backend-fail-invalidpath' => '$1nie jest poprawną ścieżką zapisu.',
 'backend-fail-delete' => 'Nie można usunąć pliku $1.',
+'backend-fail-describe' => 'Nie udało się zmienić metadanych pliku "$1".',
 'backend-fail-alreadyexists' => 'Plik „$1” już istnieje',
 'backend-fail-store' => 'Nie może zapisać pliku  $1  w  $2 .',
 'backend-fail-copy' => 'Nie może skopiować pliku $1 do $2.',
@@ -2572,7 +2576,7 @@ $1',
 # Contributions
 'contributions' => 'Wkład użytkownika',
 'contributions-title' => 'Wkład {{GENDER:$1|użytkownika|użytkowniczki}} $1',
-'mycontris' => 'Moje edycje',
+'mycontris' => 'Edycje',
 'contribsub2' => 'Dla użytkownika $1 ($2)',
 'nocontribs' => 'Brak zmian odpowiadających tym kryteriom.',
 'uctop' => ' (jako ostatnia)',
@@ -4111,4 +4115,6 @@ 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
+'mytalk-parenthetical' => 'dyskusja',
 );
index 08dc45e..03b5e0c 100644 (file)
@@ -448,9 +448,12 @@ L'aministrator ch'a l'ha blocalo a l'ha lassà sta spiegassion: «$3».",
 
 A peul tiré anans a dovré {{SITENAME}} coma Utent anònim, ò pura a peul <span class='plainlinks'>[$1 rintré torna ant ël sistema]</span> con l'istess stranòm che a dovrava prima, ò con un diferent.
 Ch'a nòta che chèiche pàgine a peulo continué a esse visualisà com s'a fussa ancor ant ël sistema, fin ch'a scancela nen la memòria local ëd sò navigador.",
+'welcomeuser' => 'Bin ëvnù, $1!',
 'welcomecreation' => '==Bin ëvnù, $1!==
 Sò cont a l\'é stàit creà.
 Che as dësmentia pa ëd cambié ij [[Special:Preferences|"sò gust" an {{SITENAME}}]].',
+'welcomecreation-agora' => 'Sò cont a l\'é stàit creà.
+Che as dësmentia pa ëd cambié ij [[Special:Preferences|"sò gust" an {{SITENAME}}]].',
 'yourname' => 'Sò stranòm',
 'yourpassword' => 'Soa ciav',
 'yourpasswordagain' => 'Che a bata torna soa ciav',
@@ -1584,6 +1587,7 @@ Se a-i riva sossì n'àotra vira, ch'as buta an comunicassion con n'[[Special:Li
 'backend-fail-notsame' => "N'archivi nen idéntich a esist già a $1.",
 'backend-fail-invalidpath' => "$1 a l'é pa un përcors ëd memorisassion bon.",
 'backend-fail-delete' => "As peul pa scanselesse l'archivi $1.",
+'backend-fail-describe' => "Impossìbil cangé ij metadat për l'archivi «$1».",
 'backend-fail-alreadyexists' => 'L\'archivi "$1" a esist già.',
 'backend-fail-store' => "As peul pa memorisesse l'archivi $1 a $2.",
 'backend-fail-copy' => "As peul pa copiesse l'archivi $1 su $2.",
@@ -3502,33 +3506,34 @@ Për piasì, che an conferma che da bon a veul torna creélo.",
 # Live preview
 'livepreview-loading' => "Antramentr ch'as caria…",
 'livepreview-ready' => "Antramentr ch'as caria… Carià.",
-'livepreview-failed' => 'La "preuva dal viv" a l\'é falìa!
-Ch\'a preuva an manera sòlita.',
-'livepreview-error' => 'Conession falà: $1 "$2"
-Ch\'a preuva an manera sòlita.',
+'livepreview-failed' => "La preuva dal viv a l'é falìa!
+Ch'a preuva an manera sòlita.",
+'livepreview-error' => "Conession falìa: $1 «$2».
+Ch'a preuva an manera sòlita.",
 
 # Friendlier slave lag warnings
-'lag-warn-normal' => 'Le modìfiche pì neuve ëd $1 {{PLURAL:$1|second|second}} a podrìo nen ess-ie ant sta lista-sì.',
-'lag-warn-high' => "Për via che la màchina serventa a tarda a dene d'arspòsta, le modìfiche pì giovne che $1 {{PLURAL:$1|second|second}} fa
-a podrìo ëdcò nen ess-ie ant sta lista -sì.",
+'lag-warn-normal' => 'Le modìfiche pì neuve ëd $1 {{PLURAL:$1|second}} a podrìo nen ess-ie ant sta lista-sì.',
+'lag-warn-high' => "Për via che la màchina serventa a tarda a dene d'arspòsta, le modìfiche fàite men che $1 {{PLURAL:$1|second}} fa
+a podrìo ëdcò nen ess-ie ant sta lista-sì.",
 
 # Watchlist editor
-'watchlistedit-numitems' => "A l'é antramentr ch'a ten sot ëuj {{PLURAL:$1|1 tìtol|$1 tìtoj}}, nen contand le pàgine ëd discussion.",
-'watchlistedit-noitems' => "A-i é pa gnun tìtol ch'as ten-a sot euj.",
-'watchlistedit-normal-title' => "Modifiché la lista ëd lòn ch'as ten sot euj",
-'watchlistedit-normal-legend' => "Gavé via ij tìtoj da 'nt la lista ëd lòn ch'as ten sot euj",
-'watchlistedit-normal-explain' => "Ij tìtoj ch'a ten sot euj a son ësmonù ambelessì-sota. Për gavene via un ch'a-i fasa la crosëtta ant la casela ch'a l'ha aranda, e peuj ch'ai bata ansima a «{{int:Watchlistedit-normal-submit}}». As peul ëdcò [[Special:EditWatchlist/raw|modifiché la lista ampressa]].",
+'watchlistedit-numitems' => "A l'é antramentr ch'a ten sot-euj {{PLURAL:$1|1 tìtol|$1 tìtoj}}, nen contand le pàgine ëd discussion.",
+'watchlistedit-noitems' => "A-i é pa gnun tìtol ch'as ten-a sot-euj.",
+'watchlistedit-normal-title' => "Modifiché la lista ëd lòn ch'as ten sot-euj",
+'watchlistedit-normal-legend' => "Gavé via ij tìtoj da 'nt la lista ëd lòn ch'as ten sot-euj",
+'watchlistedit-normal-explain' => "Ij tìtoj ch'a ten sot-euj a son ësmonù ambelessì-sota.
+Për gavene via un, ch'a-j fasa la crosëtta ant la casela ch'a l'ha aranda, e peuj ch'ai bata ansima a «{{int:Watchlistedit-normal-submit}}». As peul ëdcò [[Special:EditWatchlist/raw|modifiché la lista ampressa]].",
 'watchlistedit-normal-submit' => 'Gavé via ij tìtoj',
-'watchlistedit-normal-done' => "{{PLURAL:$1|1 tìtol a l'é|$1 tìtoj a son}} stait gavà via da 'nt la lista ëd lòn ch'as ten sot euj:",
-'watchlistedit-raw-title' => "Modifiché ampressa la lista ëd lòn ch'as ten sot euj",
-'watchlistedit-raw-legend' => "Modifiché ampressa la lista ëd lòn ch'as ten sot euj",
-'watchlistedit-raw-explain' => "Ij tìtoj ch'a l'é antramentr ch'as ten sot euj a son ambelessì-sota, e a peulo modifichesse ën giontand-ne e gavand-ne via da 'nt la lista; un tìtol për riga.
-Quand a l'ha finì, ch'a-i bata ansima a \"{{int:Watchlistedit-raw-submit}}\".
+'watchlistedit-normal-done' => "{{PLURAL:$1|Un tìtol a l'é|$1 tìtoj a son}} ëstàit gavà via da 'nt la lista ëd lòn ch'as ten sot-euj:",
+'watchlistedit-raw-title' => "Modifiché ampressa la lista ëd lòn ch'as ten sot-euj",
+'watchlistedit-raw-legend' => "Modìfica lesta ëd la lista ëd lòn ch'as ten sot-euj",
+'watchlistedit-raw-explain' => "Ij tìtoj ch'a l'é antramentr ch'as ten sot-euj a son ambelessì-sota, e a peulo modifichesse ën giontand-ne e gavand-ne via da 'nt la lista; un tìtol për riga.
+Quand a l'ha finì, ch'a-i bata ansima a «{{int:Watchlistedit-raw-submit}}».
 As peul ëdcò [[Special:EditWatchlist|dovré l'editor sòlit]].",
 'watchlistedit-raw-titles' => 'Tìtoj:',
 'watchlistedit-raw-submit' => 'Agiorné la Lista',
-'watchlistedit-raw-done' => "La lista ëd lòn ch'as ten sot euj a l'é staita agiornà.",
-'watchlistedit-raw-added' => "A {{PLURAL:$1|l'é|son}} giontasse {{PLURAL:$1|1 tìtol|$1 tìtoj}}:",
+'watchlistedit-raw-done' => "La lista ëd lòn ch'as ten sot-euj a l'é stàita agiornà.",
+'watchlistedit-raw-added' => "{{PLURAL:$1|A l'é|As son}} giontasse {{PLURAL:$1|1 tìtol|$1 tìtoj}}:",
 'watchlistedit-raw-removed' => "A {{PLURAL:$1|l'é|son}} gavasse via {{PLURAL:$1|1 tìtol|$1 tìtoj}}:",
 
 # Watchlist editing tools
index 395a70d..5d7bebf 100644 (file)
@@ -269,7 +269,7 @@ $messages = array(
 'category_header' => 'د "$1" په وېشنيزه کې شته مخونه',
 'subcategories' => 'څېرمه وېشنيزې',
 'category-media-header' => 'د "$1" په وېشنيزه کې شته رسنۍ',
-'category-empty' => "''تر Ø§Ù\88سÙ\87 Ù¾Ù\88رÛ\90 Ù\87Ù\85دا Ù\88Û\90Ø´Ù\86Ù\8aزÙ\87 Ù\87Û\90Ú\85 Ú©Ù\88Ù\85 Ù\85Ø® Ù\8aا Ú©Ù\88Ù\85Ù\87 رسنيزه دوتنه نلري.''",
+'category-empty' => "''دا Ù\88Û\90Ø´Ù\86Ù\8aزÙ\87 ØªØ± Ø§Ù\88سÙ\87 Ù¾Ù\88رÛ\90 Ú©Ù\88Ù\85 Ù\85Ø® Ù\8aا رسنيزه دوتنه نلري.''",
 'hidden-categories' => '{{PLURAL:$1|پټه وېشنيزه|پټې وېشنيزې}}',
 'hidden-category-category' => 'پټې وېشنيزې',
 'category-subcat-count' => '{{PLURAL:$2|په دې وېشنيزه کې دا لاندې وړه وېشنيزه ده.|په دې وېشنيزه کې له ټولټال $2 نه {{PLURAL:$1|وړه وېشنيزه ده|$1 وړې وېشنيزې دي}}.}}',
@@ -288,9 +288,9 @@ $messages = array(
 'newwindow' => '(په نوې کړکۍ کې پرانيستل کېږي)',
 'cancel' => 'ناګارل',
 'moredotdotdot' => 'نور ...',
-'mypage' => 'زÙ\85ا Ù¾Ø§Ú¼Ù\87',
-'mytalk' => 'زÙ\85ا Ø®Ø¨Ø±Û\90 Ø§ØªØ±Û\90',
-'anontalk' => 'ددې IP لپاره خبرې اترې',
+'mypage' => 'زÙ\85ا Ù\85Ø®',
+'mytalk' => 'خبرې اترې',
+'anontalk' => 'ددې IP خبرې اترې',
 'navigation' => 'ګرځښت',
 'and' => '&#32;او',
 
@@ -331,7 +331,7 @@ $messages = array(
 'history' => 'د مخ پېښليک',
 'history_short' => 'پېښليک',
 'updatedmarker' => 'زما د وروستي راتګ نه راپدېخوا اوسمهاله شوی',
-'printableversion' => 'د چاپ بڼه',
+'printableversion' => 'چاپي بڼه',
 'permalink' => 'تلپاتې تړنه',
 'print' => 'چاپ',
 'view' => 'کتل',
@@ -340,7 +340,7 @@ $messages = array(
 'editthispage' => 'همدا مخ سمول',
 'create-this-page' => 'همدا مخ ليکل',
 'delete' => 'ړنګول',
-'deletethispage' => 'دا مخ ړنګ کړه',
+'deletethispage' => 'دا مخ ړنګول',
 'undelete_short' => '{{PLURAL:$1|يو سمون|$1 سمونې}} ناړنګول',
 'viewdeleted_short' => '{{PLURAL:$1|يو ړنګ شوی سمون|$1 ړنګ شوي سمونونه}} کتل',
 'protect' => 'ژغورل',
@@ -361,7 +361,7 @@ $messages = array(
 'userpage' => 'د کارن پاڼه کتل',
 'projectpage' => 'د پروژې مخ کتل',
 'imagepage' => 'د دوتنې مخ کتل',
-'mediawikipage' => 'د پيغامونو مخ کتل',
+'mediawikipage' => 'پيغام مخ کتل',
 'templatepage' => 'د کينډۍ مخ کتل',
 'viewhelppage' => 'د لارښود مخ کتل',
 'categorypage' => 'د وېشنيزې مخ کتل',
@@ -447,7 +447,7 @@ $1',
 'sort-ascending' => 'مخپورته اوډل',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
-'nstab-main' => 'Ù\84Ù\8aÚ©Ù\86Ù\87',
+'nstab-main' => 'Ù\85Ø®',
 'nstab-user' => 'کارن مخ',
 'nstab-media' => 'د رسنۍ مخ',
 'nstab-special' => 'ځانګړی مخ',
@@ -455,7 +455,7 @@ $1',
 'nstab-image' => 'دوتنه',
 'nstab-mediawiki' => 'پيغام',
 'nstab-template' => 'کينډۍ',
-'nstab-help' => 'لارښود',
+'nstab-help' => 'لارښود مخ',
 'nstab-category' => 'وېشنيزه',
 
 # Main script and global functions
@@ -671,13 +671,13 @@ $1',
 # Edit page toolbar
 'bold_sample' => 'زغرد متن',
 'bold_tip' => 'زغرد متن',
-'italic_sample' => 'کوږ ليک',
-'italic_tip' => 'کوږ ليک',
+'italic_sample' => 'رېوند متن',
+'italic_tip' => 'رېوند متن',
 'link_sample' => 'د تړن سرليک',
 'link_tip' => 'کورنۍ تړنه',
 'extlink_sample' => 'http://www.example.com د تړنې سرليک',
 'extlink_tip' => 'باندنۍ تړنې (د http:// مختاړی مه هېروی)',
-'headline_sample' => 'سرÙ\84Ù\8aÚ©',
+'headline_sample' => 'د Ø³Ø±Ù\84Ù\8aÚ© Ù\85تÙ\86',
 'headline_tip' => 'د ۲ کچې سرليک',
 'nowiki_sample' => 'دلته دې بې بڼې متن ځای پر ځای شي',
 'nowiki_tip' => 'د ويکي بڼه نيونه بابېزه ګڼل',
@@ -762,18 +762,21 @@ $1',
 '''تر اوسه پورې لا ستاسې بدلونونه نه دي خوندي شوي!'''",
 'userjspreview' => "'''هېر مو نشي چې دا يوازې ستاسې د کارن د جاوا سکرېپټ آزمېيل/مخليدنه ده.'''
 '''تر اوسه پورې لا ستاسې بدلونونه نه دي خوندي شوي!'''",
+'sitecsspreview' => "'''په پام کې دې وي چې دا يوازې ستاسې د CSS مخليدنه ده.'''
+'''تر اوسه پورې لا ستاسې بدلونونه نه دي خوندي شوي!'''",
 'sitejspreview' => "'''په پام کې مو اوسه چې تاسې يوازې د دغه جاواسکرېپټ کوډ مخليدنه کوۍ.'''
 '''تر اوسه پورې دا نه دی خوندي شوی!'''",
 'updated' => '(تازه)',
 'note' => "'''يادونه:'''",
 'previewnote' => "'''هېر مو نه شي چې دا يواځې يوه مخليدنه ده.'''
 ستاسې لخوا ترسره شوي بدلونونه لا تر اوسه پورې نه دي خوندي شوي!!",
+'continue-editing' => 'د سمولو سيمې ته ورتلل',
 'editing' => 'د $1 سمونه',
 'creating' => '$1 جوړېدنې کې دی',
 'editingsection' => '$1 (برخه) په سمېدنې کې دی',
 'editingcomment' => 'د $1 سمون (نوې برخه)',
 'editconflict' => 'په سمادولو کې خنډ: $1',
-'yourtext' => 'ستاسو متن',
+'yourtext' => 'ستاسې متن',
 'storedversion' => 'زېرمه شوې مخکتنه',
 'yourdiff' => 'توپيرونه',
 'copyrightwarning' => "لطفاً په پام کې وساتۍ چې ټولې هغه ونډې چې تاسې يې {{SITENAME}} کې ترسره کوی هغه د $2 له مخې د خپرولو لپاره ګڼل کېږي (د لانورو تفصيلاتو لپاره $1 وګورۍ). که تاسې نه غواړۍ چې په ليکنو کې مو په بې رحمۍ سره لاسوهنې (سمونې) وشي او د نورو په غوښتنه پسې لانورې هم خپرې شي، نو دلته يې مه ځای پر ځای کوی..<br />
@@ -815,7 +818,7 @@ $1',
 'edit-no-change' => 'ستاسې سمون بابېزه وګڼل شو، دا ځکه چې تاسې په متن کې کوم بدلون نه دی راوستلی.',
 'edit-already-exists' => 'په دې نوم يو نوی مخ جوړ نه شو.
 پدې نوم د پخوا نه يو مخ شته.',
-'defaultmessagetext' => 'تلوالیزه پيغام متن',
+'defaultmessagetext' => 'تلواليزه پيغام متن',
 
 # Parser/template warnings
 'post-expand-template-inclusion-warning' => "'''ګواښنه:''' دا کينډۍ د خپل ټاکلي بريد نه ډېره لويه ده.
@@ -989,7 +992,7 @@ $1',
 
 # Preferences page
 'preferences' => 'غوره توبونه',
-'mypreferences' => 'زÙ\85ا ØºÙ\88رÙ\87 ØªÙ\88بÙ\88Ù\86Ù\87',
+'mypreferences' => 'غوره توبونه',
 'prefs-edits' => 'د سمونو شمېر:',
 'prefsnologin' => 'غونډال کې نه ياست ننوتي',
 'prefsnologintext' => 'د دې لپاره چې خپل غوره توبونه مو وټاکی، نو پکار ده چې لومړی تاسو غونډال کې <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ننوځی]</span>.',
@@ -1200,7 +1203,7 @@ $1',
 'recentchanges-label-unpatrolled' => 'دغه سمون تر اوسه پورې نه دی څارل شوی',
 'rcnote' => "دلته لاندې {{PLURAL:$1|وروستی '''1''' بدلون دی|وروستي '''$1''' بدلونونه دي}} چې په  {{PLURAL:$2| يوې ورځ|'''$2''' ورځو}} کې تر $4 نېټې او $5 بجو پېښ شوي.",
 'rcnotefrom' => "په همدې ځای کې لاندې هغه بدلونونه دي چې د '''$2''' نه راپدېخوا پېښ شوي (تر '''$1''' پورې ښکاره شوي).",
-'rclistfrom' => 'هغه بدلونونه ښکاره کړی چې له $1 نه پيلېږي',
+'rclistfrom' => 'هغه نوي بدلونونه ښکاره کول چې له $1 نه پيلېږي',
 'rcshowhideminor' => 'وړې سمونې $1',
 'rcshowhidebots' => 'روباټ $1',
 'rcshowhideliu' => 'غونډال کې ننوتي کارنان $1',
@@ -1350,7 +1353,7 @@ $1',
 'filehist' => 'د دوتنې پېښليک',
 'filehist-help' => 'په يوې نېټې/يوه وخت وټوکۍ چې د هماغه وخت او نېټې دوتنه چې په هماغه وخت کې څنګه ښکارېده هماغسې درښکاره شي.',
 'filehist-deleteall' => 'ټول ړنګول',
-'filehist-deleteone' => 'همدا ړنګول',
+'filehist-deleteone' => 'ړنګول',
 'filehist-revert' => 'په څټ ګرځول',
 'filehist-current' => 'اوسنی',
 'filehist-datetime' => 'نېټه/وخت',
@@ -1431,7 +1434,7 @@ $1',
 'statistics-users' => 'ثبت شوي [[Special:ListUsers|کارنان]]',
 'statistics-users-active' => 'فعاله کارنان',
 'statistics-users-active-desc' => 'هغه کارنان چې په {{PLURAL:$1|وروستۍ ورځ|وروستيو $1 ورځو}} کې فعاله ونډه لرلې',
-'statistics-mostpopular' => 'تر ټولو ډېر کتل شوي مخونه',
+'statistics-mostpopular' => 'ډېر کتل شوي مخونه',
 
 'disambiguations' => 'د مبهمو مخونو سره تړلي مخونه',
 'disambiguationspage' => 'Template:ناجوت',
@@ -1460,15 +1463,15 @@ $1',
 'ntransclusions' => 'په $1 {{PLURAL:$1|مخ|مخونو}} کارېدلی',
 'specialpage-empty' => 'د دې راپور لپاره کومې پايلې نشته.',
 'lonelypages' => 'يتيم مخونه',
-'uncategorizedpages' => 'Ù¾Ù\87 Ù\88Û\90Ø´Ù\86Ù\8aزÙ\88 Ù\86اÙ\88Û\90Ø´Ù\84Ù\8a Ù\85Ø®Ù\88Ù\86Ù\87',
-'uncategorizedcategories' => 'Ù¾Ù\87 Ù\88Û\90Ø´Ù\86Ù\8aزÙ\88 Ù\86اÙ\88Û\90Ø´Ù\84Û\90 Ù\88Û\90Ø´Ù\86Ù\8aزÛ\90',
-'uncategorizedimages' => 'Ù¾Ù\87 Ù\88Û\90Ø´Ù\86Ù\8aزÙ\88 Ù\86اÙ\88Û\90Ø´Ù\84Ù\8a Ø§Ù\86Ú\81Ù\88رÙ\86Ù\87',
-'uncategorizedtemplates' => 'Ù¾Ù\87 Ù\88Û\90Ø´Ù\86Ù\8aزÙ\88 Ù\86اÙ\88Û\90Ø´Ù\84Û\90 Ú©Ù\8aÙ\86Ú\89Û\8d',
+'uncategorizedpages' => 'ناوېشلي مخونه',
+'uncategorizedcategories' => 'ناوېشلې وېشنيزې',
+'uncategorizedimages' => 'ناوېشلي انځورنه',
+'uncategorizedtemplates' => 'ناوېشلې کينډۍ',
 'unusedcategories' => 'ناکارېدلې وېشنيزې',
 'unusedimages' => 'ناکارېدلې دوتنې',
 'popularpages' => 'نامتو مخونه',
 'wantedcategories' => 'غوښتلې وېشنيزې',
-'wantedpages' => 'غوښتل شوې پاڼې',
+'wantedpages' => 'غوښتلي مخونه',
 'wantedfiles' => 'غوښتلې دوتنې',
 'wantedtemplates' => 'غوښتلې کينډۍ',
 'mostlinked' => 'د ډېرو تړنو مخونه',
@@ -1506,7 +1509,7 @@ $1',
 
 # Book sources
 'booksources' => 'د کتاب سرچينې',
-'booksources-search-legend' => 'د Ú©ØªØ§Ø¨Ù\8a Ø³Ø±Ú\86Ù\8aÙ\86Ù\88 Ù\84Ù¼Ù\88Ù\86 Ù\88Ú©Ú\93Û\8d',
+'booksources-search-legend' => 'د Ú©ØªØ§Ø¨Ù\8a Ø³Ø±Ú\86Ù\8aÙ\86Ù\88 Ù¾Ù\84Ù¼Ù\86Ù\87',
 'booksources-go' => 'ورځه',
 'booksources-text' => 'دا لاندې د هغه وېبځايونو د تړنو لړليک دی چېرته چې نوي او زاړه کتابونه پلورل کېږي، او يا هم کېدای شي چې د هغه کتاب په هکله مالومات ولري کوم چې تاسو ورپسې لټېږۍ:',
 
@@ -1519,14 +1522,14 @@ $1',
 
 # Special:AllPages
 'allpages' => 'ټول مخونه',
-'alphaindexline' => '$1 نه تر $2 پورې',
+'alphaindexline' => '$1 تر $2',
 'nextpage' => 'بل مخ ($1)',
 'prevpage' => 'تېر مخ ($1)',
 'allpagesfrom' => 'هغه مخونه کتل چې پېلېږي په:',
 'allpagesto' => 'هغه مخونه کتل چې پای يې وي:',
 'allarticles' => 'ټول مخونه',
 'allinnamespace' => 'ټول مخونه ($1 نوم-تشيال)',
-'allnotinnamespace' => 'ټولې پاڼې (د $1 په نوم-تشيال کې نشته)',
+'allnotinnamespace' => 'ټول مخونه (د $1 نوم-تشيال پرته)',
 'allpagesprev' => 'پخواني',
 'allpagesnext' => 'راتلونکي',
 'allpagessubmit' => 'ورځه',
@@ -1623,7 +1626,7 @@ $1',
 
 # Watchlist
 'watchlist' => 'زما کتنلړ',
-'mywatchlist' => 'زما کتنلړ',
+'mywatchlist' => 'کتنلړ',
 'watchlistfor2' => 'د $1 لپاره $2',
 'nowatchlist' => 'ستاسې کتنلړ کې څه نه شته.',
 'watchlistanontext' => 'د خپل کتنلړ د توکو د سمولو او کتلو لپاره $1 ترسره کړۍ.',
@@ -1695,11 +1698,11 @@ $UNWATCHURL  نه ليدنه وکړۍ
 {{canonicalurl:{{MediaWiki:Helppage}}}}',
 
 # Delete
-'deletepage' => 'پاڼÙ\87 ړنګول',
+'deletepage' => 'Ù\85Ø® ړنګول',
 'confirm' => 'تاييد',
 'excontent' => 'د مخ مېنځپانګه دا وه: "$1"',
 'excontentauthor' => 'د مخ مېنځپانګه دا وه: "$1" (او يواځينی ونډه وال "[[Special:Contributions/$2|$2]]" وه)',
-'exblank' => 'دا مخ تش وه',
+'exblank' => 'مخ تش وه',
 'delete-confirm' => '"$1" ړنګوول',
 'delete-legend' => 'ړنګول',
 'historywarning' => "ګواښنه:''' تاسې چې د کوم مخ د ړنګېدو تکل لری، هغه د نژدې $1 {{PLURAL:$1|بڼې|بڼو}} يو پېښليک لري:",
@@ -1726,7 +1729,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 
 # Protect
 'protectlogpage' => 'د ژغورنې يادښت',
-'protectedarticle' => '"[[$1]]" وژغورلی شو',
+'protectedarticle' => '"[[$1]]" وژغورل شو',
 'modifiedarticleprotection' => 'د "[[$1]]" لپاره د ژغورنې کچه بدله شوه',
 'protect-title' => 'د "$1" لپاره د ژغورنې کچه بدلول',
 'prot_1movedto2' => '[[$1]]، [[$2]] ته ولېږدېده',
@@ -1805,7 +1808,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 # Contributions
 'contributions' => 'د کارن ونډې',
 'contributions-title' => 'د $1 کارن ونډې',
-'mycontris' => 'زما ونډې',
+'mycontris' => 'ونډې',
 'contribsub2' => 'د $1 لپاره ($2)',
 'uctop' => '(سرپاڼه)',
 'month' => 'له مياشتې د (او پخواني):',
@@ -1818,7 +1821,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'sp-contributions-uploads' => 'پورته کېدنې',
 'sp-contributions-logs' => 'يادښتونه',
 'sp-contributions-talk' => 'خبرې اترې',
-'sp-contributions-search' => 'د Ù\88Ù\86Ú\89Ù\88 Ù\84Ù¼Ù\88Ù\86',
+'sp-contributions-search' => 'د Ù\88Ù\86Ú\89Ù\88 Ù¾Ù\84Ù¼Ù\86Ù\87',
 'sp-contributions-username' => 'IP پته يا کارن-نوم:',
 'sp-contributions-toponly' => 'يوازې هغه سمونونه چې تر ټولو تازه بڼې لري ښکاره کول',
 'sp-contributions-submit' => 'پلټل',
@@ -1838,7 +1841,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'whatlinkshere-hideredirs' => 'مخ ګرځونې $1',
 'whatlinkshere-hidetrans' => 'پايلې $1',
 'whatlinkshere-hidelinks' => 'تړنې $1',
-'whatlinkshere-hideimages' => '$1 د انځور تړنې',
+'whatlinkshere-hideimages' => 'د دوتنې تړنې $1',
 'whatlinkshere-filters' => 'چاڼګرونه',
 
 # Block/unblock
@@ -1894,7 +1897,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'ipblocklist-submit' => 'پلټل',
 'ipblocklist-localblock' => 'سيمه ايز بنديز',
 'ipblocklist-otherblocks' => '{{PLURAL:$1|بل بنديز|نور بنديزونه}}',
-'infiniteblock' => 'Ù\84امحدوده',
+'infiniteblock' => 'Ù\86امحدوده',
 'expiringblock' => 'په $1 نېټه، $2 بجو پای ته رسېږي',
 'anononlyblock' => 'يواځې ورکنومی',
 'createaccountblock' => 'په ګڼون جوړولو بنديز لګېدلی',
@@ -1925,8 +1928,10 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'lockdb' => 'توکبنسټ تړل',
 'unlockdb' => 'توکبنسټ پرانيستل',
 'lockconfirm' => 'هو، زه د توکبنسټ تړل غواړم.',
+'unlockconfirm' => 'هو، زه د توکبنسټ پرانيستل غواړم.',
 'lockbtn' => 'توکبنسټ تړل',
 'unlockbtn' => 'توکبنسټ پرانيستل',
+'databasenotlocked' => 'توکبنسټ نه دی تړل شوی.',
 
 # Move page
 'move-page' => '$1 لېږدول',
@@ -2003,8 +2008,8 @@ $UNWATCHURL  نه ليدنه وکړۍ
 # Namespace 8 related
 'allmessages' => 'د غونډال پيغامونه',
 'allmessagesname' => 'نوم',
-'allmessagesdefault' => 'ټاکل شوی متن',
-'allmessagescurrent' => 'اوسنی متن',
+'allmessagesdefault' => 'تلواليزه پيغام متن',
+'allmessagescurrent' => 'اÙ\88سÙ\86Û\8c Ù¾Ù\8aغاÙ\85 Ù\85تÙ\86',
 'allmessagestext' => 'دا د مېډياويکي په نوم-تشيال کې د غونډال د پيغامونو لړليک دی.
 که چېرته تاسې د ميډياويکي په ځايتابه کې ونډې ترسره کول غواړۍ نو لطفاً [//www.mediawiki.org/wiki/Localisation د ويډياويکي ځايتابه] او [//translatewiki.net translatewiki.net] نه ليدنه وکړۍ.',
 'allmessagesnotsupportedDB' => "'''Special:Allmessages''' ترېنه کار نه اخيستل کېږي ځکه چې '''\$wgUseDatabaseMessages''' مړ دی.",
@@ -2028,9 +2033,11 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'import-interwiki-namespace' => 'د موخې نوم-تشيال:',
 'import-upload-filename' => 'د دوتنې نوم:',
 'import-comment' => 'تبصره:',
+'import-revision-count' => '$1 {{PLURAL:$1|بڼه|بڼې}}',
 
 # Import log
 'importlogpage' => 'د واردولو يادښت',
+'import-logentry-upload-detail' => '$1 {{PLURAL:$1|بڼه|بڼې}}',
 
 # JavaScriptTest
 'javascripttest' => 'د جاوا سکرېپټ آزمېښت',
@@ -2058,7 +2065,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'tooltip-search' => '{{SITENAME}} پلټل',
 'tooltip-search-go' => 'په دې نوم د کټ مټ ورته مخ شتون په صورت کې، هماغه مخ ته ورځه',
 'tooltip-search-fulltext' => 'په مخونو کې دا متن وپلټه',
-'tooltip-p-logo' => 'لومړی مخ',
+'tooltip-p-logo' => 'لومړي مخ ته ورتلل',
 'tooltip-n-mainpage' => 'لومړي مخ ته ورتلل',
 'tooltip-n-mainpage-description' => 'آرنی مخ کتل',
 'tooltip-n-portal' => 'د پروژې په اړه، تاسې څه شيان او چېرته کولای شی چې وې مومۍ',
@@ -2082,7 +2089,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'tooltip-ca-nstab-special' => 'دا يو ځانګړی مخ دی، تاسې په دې مخ کې سمون نه شی کولای.',
 'tooltip-ca-nstab-project' => 'د پروژې مخ کتل',
 'tooltip-ca-nstab-image' => 'د دوتنې مخ کتل',
-'tooltip-ca-nstab-mediawiki' => 'د ØºÙ\88Ù\86Ú\89اÙ\84 Ù¾Ù\8aغاÙ\85Ù\88Ù\86Ù\87 Ú\9aکارÙ\87 Ú©Ù\88ل',
+'tooltip-ca-nstab-mediawiki' => 'د ØºÙ\88Ù\86Ú\89اÙ\84 Ù¾Ù\8aغاÙ\85Ù\88Ù\86Ù\87 Ú©Øªل',
 'tooltip-ca-nstab-template' => 'کينډۍ کتل',
 'tooltip-ca-nstab-help' => 'د لارښود مخ کتل',
 'tooltip-ca-nstab-category' => 'د وېشنيزې مخ ښکاره کول',
index e85ff8e..4accfb4 100644 (file)
@@ -1004,7 +1004,7 @@ Este ainda não foi gravado!",
 'note' => "'''Nota:'''",
 'previewnote' => "'''Lembre-se que esta é apenas uma antevisão do resultado.'''
 As modificações ainda não foram gravadas!",
-'continue-editing' => 'Continuar a editar',
+'continue-editing' => 'Ir para a área de edição',
 'previewconflict' => 'Esta antevisão do resultado apresenta o texto da caixa de edição acima tal como este aparecerá se escolher gravá-lo.',
 'session_fail_preview' => "'''Não foi possível processar a edição devido à perda dos dados da sua sessão.
 Tente novamente, por favor.
@@ -1090,6 +1090,10 @@ Ela parece ter sido eliminada.',
 Ela já existia.',
 'defaultmessagetext' => 'Texto da mensagem padrão',
 
+# Content models
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Aviso: Esta página contém demasiadas chamadas de funções exigentes do analisador sintáctico.
 
@@ -2300,6 +2304,7 @@ Encontram-se disponíveis [[{{MediaWiki:Listgrouprights-helppage}}|informações
 '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 correio electrónico a este utilizador',
+'emailuser-title-target' => 'Enviar correio eletrónico a {{GENDER:$1|este utilizador|esta utilizadora}}',
 '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.',
@@ -2635,7 +2640,7 @@ Para referência é apresentado abaixo o último registo de bloqueio:',
 'whatlinkshere-hideredirs' => '$1 redireccionamentos',
 'whatlinkshere-hidetrans' => '$1 transclusões',
 'whatlinkshere-hidelinks' => '$1 links',
-'whatlinkshere-hideimages' => '$1 links para imagens',
+'whatlinkshere-hideimages' => '$1 links para ficheiros',
 'whatlinkshere-filters' => 'Filtros',
 
 # Block/unblock
@@ -3147,6 +3152,8 @@ Este bloqueio foi provavelmente causado por um link para um site externo que con
 'pageinfo-magic-words' => '{{PLURAL:$1|Palavra mágica|Palavras mágicas}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria oculta|Categorias ocultas}} ($1)',
 'pageinfo-toolboxlink' => 'Informações da página',
+'pageinfo-contentpage-yes' => 'Sim',
+'pageinfo-protect-cascading-yes' => 'Sim',
 
 # Skin names
 'skinname-standard' => 'Clássico',
@@ -4060,4 +4067,6 @@ Caso contrário, pode facilmente usar o formulário abaixo. O seu comentário se
 'duration-centuries' => '$1 {{PLURAL:$1|século|séculos}}',
 'duration-millennia' => '$1 {{PLURAL:$1|milénio|milénios}}',
 
+# Unknown messages
+'mytalk-parenthetical' => 'discussão',
 );
index fca15be..f80b904 100644 (file)
@@ -365,7 +365,8 @@ This can also appear in the credits page if the credits feature is enabled,for e
 {{Identical|Find}}',
 'qbbrowse' => '{{Identical|Browse}}',
 'qbedit' => '{{Identical|Edit}}',
-'qbmyoptions' => '{{Identical|My pages}}',
+'qbmyoptions' => 'Heading in the Cologne Blue skin user menu containing links to user (talk) page, preferences, watchlist, etc.
+{{Identical|My pages}}',
 'qbspecialpages' => '{{Identical|Special pages}}',
 'faqpage' => "FAQ is short for ''frequently asked questions''. This page is only linked on some of the old skins, not in Monobook or Modern.
 
@@ -401,6 +402,7 @@ This can also appear in the credits page if the credits feature is enabled,for e
 'namespaces' => '{{Identical|Namespace}}',
 'variants' => 'Used by the Vector skin.',
 
+'navigation-heading' => 'Heading shown above the navigation menu (sidebar) for screen-readers (or in non-standard skins).',
 'errorpagetitle' => 'Message shown in browser title bar when encountering error operation.
 
 {{Identical|Error}}',
@@ -744,7 +746,9 @@ See also {{msg-mw|protectedinterface}}.',
 # Login and logout pages
 'logouttext' => 'Log out message
 * $1 is an URL to [[Special:Userlogin]] containing returnto and returntoquery parameters',
+'welcomeuser' => 'Text for a welcome heading that users see after registering a user account. $1 is the username of the new user. See [[bugzilla:42215]].',
 'welcomecreation' => 'The welcome message users see after registering a user account. $1 is the username of the new user.',
+'welcomecreation-agora' => 'A welcome message users see after registering a user account, following a welcomeuser heading. $1 is the username of the new user.',
 'yourname' => "In user preferences
 
 <nowiki>{{</nowiki>[[Gender|GENDER]]<nowiki>}}</nowiki> is '''NOT''' supported.
@@ -2105,6 +2109,8 @@ Extensions making use of it:
 * $1 is a storage path.',
 'backend-fail-delete' => 'Parameters:
 * $1 is a file path.',
+'backend-fail-describe' => 'Parameters:
+* $1 is a file path.',
 'backend-fail-alreadyexists' => 'Parameters:
 * $1 is a filename.',
 'backend-fail-store' => 'Parameters:
@@ -3693,7 +3699,7 @@ Parameters:
 Start with a lowercase letter, unless the first word is “SVG”.',
 'svg-long-desc-animated' => 'Displayed under an SVG image at the image description page if the image is animated. Non-animated images use {{msg-mw|svg-long-desc}}.
 * $1 is the width in pixels
-* $2 is the height in pixels, and 
+* $2 is the height in pixels, and
 * $3 is the file size including a unit (for example "10 KB").
 
 Start with a lowercase letter, unless the first word is “SVG”.',
@@ -4958,6 +4964,9 @@ Parameter $4, the target page, is also not visible to parser functions.',
 $4 is the gender of the target user.',
 'logentry-newusers-create2' => '{{Logentry}}
 
+$4 is the name of the target user.',
+'logentry-newusers-autocreate' => '{{Logentry}}
+
 $4 is the gender of the target user.',
 
 # Feedback
index a14a49d..d78612c 100644 (file)
@@ -467,6 +467,7 @@ pe titlul secțiunii (JavaScript)',
 'namespaces' => 'Spații de nume',
 'variants' => 'Variante',
 
+'navigation-heading' => 'Meniu de navigare',
 'errorpagetitle' => 'Eroare',
 'returnto' => 'Înapoi la $1.',
 'tagline' => 'De la {{SITENAME}}',
@@ -712,9 +713,12 @@ Administratorul care a efectuat blocarea a furnizat explicația: „$3”.',
 
 Sesiunea dumneavoastră la {{SITENAME}} a fost închisă. Puteți continua să folosiți {{SITENAME}} ca utilizator anonim, sau puteți să vă <span class='plainlinks'>[$1 reautentificați]</span> ca același sau ca alt utilizator.
 Țineți minte că anumite pagini pot fi în continuare afișate ca și când ați fi autentificat până când curățați memoria cache a navigatorului.",
+'welcomeuser' => 'Bun venit, $1!',
 'welcomecreation' => '==Bun venit, $1!==
 
-Contul dumneavoatră a fost creat. Nu uitați să vă personalizați [[Special:Preferences|preferințele]] în {{SITENAME}}.',
+Contul dumneavoatră a fost creat. Nu uitați să vă modificați [[Special:Preferences|preferințele]] în {{SITENAME}}.',
+'welcomecreation-agora' => 'Contul dumneavoastră a fost creat.
+Nu uitați să vă modificați [[Special:Preferences|preferințele]] în {{SITENAME}}.',
 'yourname' => 'Nume de utilizator:',
 'yourpassword' => 'Parolă:',
 'yourpasswordagain' => 'Repetați parola:',
@@ -1836,6 +1840,7 @@ Dacă problema persistă, contactați un [[Special:ListUsers/sysop|administrator
 'backend-fail-notsame' => 'Un fișier diferit există deja pentru $1.',
 'backend-fail-invalidpath' => '$1 nu este o cale validă de stocare.',
 'backend-fail-delete' => 'Imposibil de șters fișierul $1.',
+'backend-fail-describe' => 'Imposibil de modificat metadatele pentru fișierul „$1”.',
 'backend-fail-alreadyexists' => 'Fișierul $1 există deja.',
 'backend-fail-store' => 'Imposibil de stocat fișierul $1 în $2.',
 'backend-fail-copy' => 'Imposibil de copiat fișierul $1 în $2.',
@@ -3964,9 +3969,9 @@ Imaginile sunt afișate la rezoluția lor maximă, în timp ce alte tipuri de fi
 'logentry-move-move_redir-noredirect' => '$1 a redenumit pagina $3 în $4 înlocuind redirecționarea și fără a lăsa o redirecționare în loc',
 'logentry-patrol-patrol' => '$1 a marcat versiunea $4 a paginii $3 ca patrulată',
 'logentry-patrol-patrol-auto' => '$1 a marcat automat versiunea $4 a paginii $3 ca patrulată',
-'logentry-newusers-newusers' => '$1 a creat un cont de utilizator',
-'logentry-newusers-create' => '$1 a creat un cont de utilizator',
-'logentry-newusers-create2' => '$1 a creat un cont de utilizator $3',
+'logentry-newusers-newusers' => 'Contul de utilizator $1 a fost creat',
+'logentry-newusers-create' => 'Contul de utilizator $1 a fost creat',
+'logentry-newusers-create2' => 'Contul de utilizator $1 a fost creat de către $1',
 'logentry-newusers-autocreate' => 'Contul $1 a fost creat în mod automat',
 'newuserlog-byemail' => 'parola trimisă prin e-mail',
 
index 0fec1af..33e7a00 100644 (file)
@@ -17,6 +17,7 @@
  * @author Alexandr Efremov
  * @author Amikeco
  * @author Amire80
+ * @author Anonim.one
  * @author Askarmuk
  * @author Assele
  * @author Bouron
@@ -517,11 +518,11 @@ $messages = array(
 'category-empty' => "''Эта категория в данный момент пуста.''",
 'hidden-categories' => '{{PLURAL:$1|Скрытая категория|Скрытые категории}}',
 'hidden-category-category' => 'Скрытые категории',
-'category-subcat-count' => '{{PLURAL:$2|Эта категория содержит только следующие подкатегории. |Эта категория содержит {{PLURAL:$1|subcategory|$1  подкатегорий}}, из $2 имеющихся.}}',
+'category-subcat-count' => '{{PLURAL:$2|Эта категория содержит только следующую подкатегорию.|{{PLURAL:$1|Показана $1 подкатегория|Показано $1 подкатегории|Показано $1 подкатегорий}} из $2 {{PLURAL:$2|имеющейся|имеющихся}}.}}',
 'category-subcat-count-limited' => 'В этой категории {{PLURAL:$1|$1 подкатегория|$1 подкатегории|$1 подкатегорий}}.',
-'category-article-count' => '{{PLURAL:$2|Эта категория содержит только одну страницу.|{{PLURAL:$1|Показана $1 страница|Показано $1 страницы|Показано $1 страниц}} из $2, находящихся в этой категории.}}',
+'category-article-count' => '{{PLURAL:$2|Эта категория содержит только одну страницу.|{{PLURAL:$1|Показана $1 страница|Показано $1 страницы|Показано $1 страниц}} из $2 {{PLURAL:$2|имеющейся|имеющихся}}.}}',
 'category-article-count-limited' => 'В этой категории {{PLURAL:$1|$1 страница|$1 страницы|$1 страниц}}.',
-'category-file-count' => '{{PLURAL:$2|Эта категория содержит только один файл.|{{PLURAL:$1|Показан $1 файл|Показано $1 файла|Показано $1 файлов}} из $2, находящихся в этой категории.}}',
+'category-file-count' => '{{PLURAL:$2|Эта категория содержит только один файл.|В этой категории {{PLURAL:$1|показан $1 файл|показано $1 файла|показано $1 файлов}} из $2 {{PLURAL:$2|имеющейся|имеющихся}}.}}',
 'category-file-count-limited' => 'В этой категории {{PLURAL:$1|$1 файл|$1 файла|$1 файлов}}.',
 'listingcontinuesabbrev' => '(продолжение)',
 'index-category' => 'Индексируемые страницы',
@@ -3109,17 +3110,17 @@ $1',
 'tooltip-ca-move' => 'Переименовать страницу',
 'tooltip-ca-watch' => 'Добавить эту страницу в ваш список наблюдения',
 'tooltip-ca-unwatch' => 'Удалить эту страницу из вашего списка наблюдения',
-'tooltip-search' => 'Искать это слово',
+'tooltip-search' => 'Искать в {{grammar:genitive|{{SITENAME}}}}',
 'tooltip-search-go' => 'Перейти к странице, имеющей в точности такое название',
 'tooltip-search-fulltext' => 'Найти страницы, содержащие указанный текст',
-'tooltip-p-logo' => 'Ð\97аглавнаÑ\8f Ñ\81Ñ\82Ñ\80аниÑ\86а',
+'tooltip-p-logo' => 'Ð\9fеÑ\80ейÑ\82и Ð½Ð° Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ñ\83Ñ\8e Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83',
 'tooltip-n-mainpage' => 'Перейти на заглавную страницу',
 'tooltip-n-mainpage-description' => 'Перейти на заглавную страницу',
-'tooltip-n-portal' => 'О проекте, о том, что вы можете сделать, где что находится',
+'tooltip-n-portal' => 'О проекте, о том, чем здесь можно заниматься, а также — где что находится',
 'tooltip-n-currentevents' => 'Информация о текущих событиях',
 'tooltip-n-recentchanges' => 'Список последних изменений',
-'tooltip-n-randompage' => 'Посмотреть случайную страницу',
-'tooltip-n-help' => 'СпÑ\80авоÑ\87ник Ð¿Ð¾ Ð¿Ñ\80оекÑ\82Ñ\83 Â«{{SITENAME}}»',
+'tooltip-n-randompage' => 'Посмотреть случайно выбранную страницу',
+'tooltip-n-help' => 'Ð\9cеÑ\81Ñ\82о, Ð³Ð´Ðµ Ð¼Ð¾Ð¶Ð½Ð¾ Ð¿Ð¾Ð»Ñ\83Ñ\87иÑ\82Ñ\8c Ñ\81пÑ\80авкÑ\83',
 'tooltip-t-whatlinkshere' => 'Список всех страниц, ссылающихся на данную',
 'tooltip-t-recentchangeslinked' => 'Последние изменения в страницах, на которые ссылается эта страница',
 'tooltip-feed-rss' => 'Трансляция в RSS для этой страницы',
@@ -4253,4 +4254,6 @@ MediaWiki распространяется в надежде, что она бу
 'duration-centuries' => '$1 {{PLURAL:$1|век|века|веков}}',
 'duration-millennia' => '$1 {{PLURAL:$1|тысячелетие|тысячелетия|тысячелетий}}',
 
+# Unknown messages
+'mytalk-parenthetical' => 'обсуждение',
 );
index ee0e3f7..4eda492 100644 (file)
@@ -10,6 +10,7 @@
  * @author Aushulz
  * @author Gmelfi
  * @author Kaganer
+ * @author Markos90
  * @author Melos
  * @author Omnipaedista
  * @author Santu
@@ -306,7 +307,7 @@ $messages = array(
 'returnto' => 'Ritorna a $1.',
 'tagline' => 'Di {{SITENAME}}',
 'help' => 'Aiutu',
-'search' => 'Trova',
+'search' => 'Arriscedi',
 'searchbutton' => "Va' cerca",
 'go' => 'Trova',
 'searcharticle' => 'Vai',
@@ -2322,8 +2323,8 @@ Visita [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] e [//trans
 'tooltip-ca-watch' => 'Agghiunci sta pàggina â tò lista di ossirvati spiciali',
 'tooltip-ca-unwatch' => 'Elìmina sta pàggina dâ tò lista di ossirvati spiciali',
 'tooltip-search' => "Cerca 'n {{SITENAME}}",
-'tooltip-search-go' => 'Vai a na pàggina cu chistu nomu esattu si asisti',
-'tooltip-search-fulltext' => 'Attrova pàggini pi chistu testu',
+'tooltip-search-go' => 'Vai a na pàggina cu chistu nomu esattu siddu asisti',
+'tooltip-search-fulltext' => 'Arriscedi pàggini pi chistu testu',
 'tooltip-p-logo' => 'Pàggina principali',
 'tooltip-n-mainpage' => 'Vìsita la pàggina principali',
 'tooltip-n-mainpage-description' => 'Talìa la pàggina principali',
index 7b5ebc4..17ce510 100644 (file)
@@ -329,7 +329,7 @@ $messages = array(
 'cancel' => 'අත් හරින්න',
 'moredotdotdot' => 'තවත්...',
 'mypage' => 'මගේ පිටුව',
-'mytalk' => 'à·\83à·\8fà¶\9aචà·\8aඡà·\8fà·\80',
+'mytalk' => 'à\9aතà·\8fබà·\84',
 'anontalk' => 'මෙම අයිපී ලිපිනය සඳහා සාකච්ඡාව',
 'navigation' => 'යාත්‍රණය',
 'and' => '&#32;සහ',
@@ -1242,7 +1242,7 @@ $1",
 
 # Preferences page
 'preferences' => 'අභිරුචි',
-'mypreferences' => 'à¶\85භà·\92රà·\94චà·\92',
+'mypreferences' => 'රà·\92à·\83à·\92 à·\83à·\90à¶\9aà·\83à·\94මà·\8a',
 'prefs-edits' => 'සංස්කරණයන් සංඛ්‍යාව:',
 'prefsnologin' => 'පිවිසී නැත (Not logged in)',
 'prefsnologintext' => 'පරිශීලක අභිරුචි සැකසීමට නම්, ඔබ  <span class="plainlinks">[{{fullurl:Special:Userlogin|returnto=$1}} ප්‍රවිෂ්ටවී]</span> සිටිය යුතුය.',
@@ -2429,7 +2429,7 @@ $1',
 # Contributions
 'contributions' => 'මෙම පරිශීලකගේ දායකත්වයන්',
 'contributions-title' => ' $1 සඳහා පරිශීලක දායකත්වයන්',
-'mycontris' => 'දායකත්වයන්',
+'mycontris' => 'දායකත්ව',
 'contribsub2' => '$1 සඳහා ($2)',
 'nocontribs' => 'මෙම උපමානයන් හා ගැලපෙන වෙනස්වීම් හමුනොවිණි.',
 'uctop' => '(ඉහලම)',
@@ -2972,7 +2972,7 @@ $1 ගේ වාරණයට හේතුව මෙය වේ: "$2"',
 'pageinfo-lastuser' => 'අවසන් සංස්කාරක',
 'pageinfo-lasttime' => 'අවසන් සංස්කරණය වූ දිනය',
 'pageinfo-edits' => 'මුළු සංස්කරණ සංඛ්‍යාව',
-'pageinfo-authors' => 'ප්‍රභින්න කර්තෘවරුන් මුළු  සංඛ්‍යාව',
+'pageinfo-authors' => 'ප්‍රභින්න කර්තෘවරු ගණන',
 'pageinfo-recent-edits' => 'මෑත සංස්කරණ සංඛ්‍යාව (අවසන් $1 තුලදී)',
 'pageinfo-recent-authors' => 'මෑත ප්‍රභින්න කර්තෘවරුන් සංඛ්‍යාව',
 'pageinfo-magic-words' => 'මැජික් {{PLURAL:$1|වචනය|වචන}} ($1)',
index 168989c..10e5f64 100644 (file)
@@ -325,7 +325,7 @@ $messages = array(
 'tog-ccmeonemails' => 'Posielať mi kópie mojich emailov, ktoré pošlem ostatným používateľom',
 'tog-diffonly' => 'Nezobrazovať obsah stránky pod rozdielmi',
 'tog-showhiddencats' => 'Zobraziť skryté kategórie',
-'tog-noconvertlink' => 'Vypnúť konverziu názvov',
+'tog-noconvertlink' => 'Vypnúť konverziu názvov odkazov',
 'tog-norollbackdiff' => 'Vynechať rozdiel po vykonaní rollbacku',
 
 'underline-always' => 'Vždy',
@@ -532,7 +532,7 @@ $1',
 'privacy' => 'Ochrana osobných údajov',
 'privacypage' => 'Project:Ochrana osobných údajov',
 
-'badaccess' => 'Chyba povolenia',
+'badaccess' => 'Chyba oprávnenia',
 'badaccess-group0' => 'Nemáte povolenie na vykonanie požadovanej operácie.',
 'badaccess-groups' => 'Činnosť, ktorú požadujete, môže vykonať iba člen {{PLURAL:$2|skupiny|jednej zo skupín}}: $1.',
 
@@ -546,7 +546,7 @@ $1',
 'newmessagesdifflink' => 'posledná zmena',
 'youhavenewmessagesfromusers' => 'Máte $1 od {{PLURAL:$3|iného používateľa|$3 iných používateľov}} ($2).',
 'youhavenewmessagesmanyusers' => 'Máte $1 od viacerých ďalších používateľov ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|novú správu|nové správy|nových správ}}',
+'newmessageslinkplural' => '{{PLURAL:$1|novú správu|nové správy}}',
 'newmessagesdifflinkplural' => '{{PLURAL:$1|posledná zmena|posledné zmeny}}',
 'youhavenewmessagesmulti' => 'Máte nové správy na $1',
 'editsection' => 'upraviť',
@@ -640,7 +640,7 @@ Oznámte to prosím [[Special:ListUsers/sysop|správcovi]] a uveďte URL.',
 'badarticleerror' => 'Na tejto stránke túto činnosť nemožno vykonať.',
 'cannotdelete' => 'Nebolo možné zmazať stránku alebo súbor „$1“.
 Možno ju už zmazal nieto iný.',
-'cannotdelete-title' => 'Nemôžete zmazať stránku "$1"',
+'cannotdelete-title' => 'Nemôžete zmazať stránku „$1“',
 'delete-hook-aborted' => 'Zmazanie zrušila prídavná funkcia (prípojný bod syntaktického analyzátora).
 Neudala vysvetlenie.',
 'badtitle' => 'Neplatný nadpis',
@@ -669,7 +669,7 @@ $2',
 'namespaceprotected' => "Nemáte povolenie upravovať stránky v mennom priestore '''$1'''.",
 'customcssprotected' => 'Nemáte právo upravovať túto CSS stránku, pretože obsahuje osobné nastavenie iného používateľa.',
 'customjsprotected' => 'Nemáte právo upravovať túto JavaScript stránku, pretože obsahuje osobné nastavenie iného používateľa.',
-'ns-specialprotected' => 'Stránky v mennom pristore {{ns:special}} nie je možné upravovať.',
+'ns-specialprotected' => 'Stránky v mennom priestore {{ns:special}} nie je možné upravovať.',
 'titleprotected' => "Používateľ [[User:$1|$1]] zabránil vytváraniu stránky s týmto názvom.
 Udaný dôvod: ''$2''.",
 'filereadonlyerror' => 'Nebolo možné modifikovať súbor „$1“, pretože úložisko „$2“ je momentálne v režime len na čítanie.
@@ -703,9 +703,9 @@ Nezabudnite si nastaviť svoje [[Special:Preferences|používateľské nastaveni
 'password-change-forbidden' => 'Na tejto wiki si nemôžete zmeniť heslo.',
 'externaldberror' => 'Buď nastala chyba externej autentifikačnej databázy alebo vám nie je povolené aktualizovať váš externý účet.',
 'login' => 'Prihlásiť',
-'nav-login-createaccount' => 'Vytvorenie konta / prihlásenie',
+'nav-login-createaccount' => 'Prihlásenie / vytvorenie účtu',
 'loginprompt' => 'Na prihlásenie do {{GRAMMAR:genitív|{{SITENAME}}}} musíte mať zapnuté koláčiky (cookies).',
-'userlogin' => 'Vytvorenie konta / prihlásenie',
+'userlogin' => 'Prihlásenie / vytvorenie účtu',
 'userloginnocreate' => 'Prihlásiť',
 'logout' => 'Odhlásiť',
 'userlogout' => 'Odhlásiť',
@@ -720,7 +720,7 @@ Nezabudnite si nastaviť svoje [[Special:Preferences|používateľské nastaveni
 'createaccountreason' => 'Dôvod:',
 'badretype' => 'Zadané heslá nie sú rovnaké.',
 'userexists' => 'Zadané používateľské meno sa už používa.
-Zvoľte si prosím iné meno.',
+Prosím, zvoľte si iné meno.',
 'loginerror' => 'Chyba pri prihlasovaní',
 'createaccounterror' => 'Nepodarilo sa vytvoriť účet: $1',
 'nocookiesnew' => 'Používateľské konto bolo vytvorené, ale nie ste prihlásený. {{SITENAME}} používa cookies na prihlásenie. Máte cookies vypnuté. Zapnite ich a potom sa prihláste pomocou vášho nového používateľského mena a hesla.',
@@ -736,8 +736,8 @@ Skontrolujte preklepy alebo sa [[Special:UserLogin/signup|zaregistrujte ako nov
 'nosuchusershort' => 'V súčasnosti neexistuje používateľ s menom „$1“. Skontrolujte preklepy.',
 'nouserspecified' => 'Musíte uviesť meno používateľa.',
 'login-userblocked' => 'Tento používateľ je zablokovaný. Nie je mu dovolené prihlásiť sa.',
-'wrongpassword' => 'Zadané heslo je nesprávne. Skúste  znovu.',
-'wrongpasswordempty' => 'Zadané heslo bolo prázdne. Skúste prosím znova.',
+'wrongpassword' => 'Zadané heslo je nesprávne. Prosím, skúste to znova.',
+'wrongpasswordempty' => 'Zadané heslo bolo prázdne. Prosím, skúste to znova.',
 'passwordtooshort' => 'Heslo musí mať dĺžku aspoň $1 {{PLURAL:$1|znak|znaky|znakov}}.',
 'password-name-match' => 'Vaše heslo musí byť iné ako vaše používateľské meno.',
 'password-login-forbidden' => 'Použitie tohto používateľského mena a hesla bolo zakázané.',
@@ -767,9 +767,9 @@ Z tohto dôvodu nemôžu návštevníci z tejto IP adresy momentálne vytvoriť
 'emailauthenticated' => 'Vaša emailová adresa bola overená $2 $3.',
 'emailnotauthenticated' => 'Vaša e-mailová adresa ešte nebola overená. Preto nemôžete prijať emaily pre žiadnu z nasledovných funkcií.',
 'noemailprefs' => 'Tieto nástroje budú prístupné po vyplnení emailovej adresy vo vašich nastaveniach.',
-'emailconfirmlink' => 'Potvrďte vašu e-mailovú adresu',
+'emailconfirmlink' => 'Potvrďte svoju e-mailovú adresu',
 'invalidemailaddress' => 'Emailovú adresu nemožno akceptovať, pretože sa zdá, že má neplatný formát. Zadajte adresu v správnom tvare alebo nechajte príslušné políčko prázdne.',
-'cannotchangeemail' => 'Na tejto wiki nie je možné meniť e-mailové adresy používateľského konta.',
+'cannotchangeemail' => 'Na tejto wiki nie je možné meniť e-mailové adresy používateľského účtu.',
 'emaildisabled' => 'Táto lokalita nedokáže posielať emaily.',
 'accountcreated' => 'Účet vytvorený',
 'accountcreatedtext' => 'Používateľský účet $1 bol vytvorený.',
@@ -846,7 +846,7 @@ Dočasné heslo:$2',
 'passwordreset-emailerror-capture' => 'Bol vytvorený pripomienkový e-mail, ktorý je zobrazený nižšie, ale nepodarilo sa ho odoslať používateľovi: $1',
 
 # Special:ChangeEmail
-'changeemail' => 'Zmena e-mailovej adresy',
+'changeemail' => 'Zmeniť emailovú adresu',
 'changeemail-header' => 'Zmena e-mailovej adresy pre účet',
 'changeemail-text' => 'Vyplňte tento formulár na zmenu e-mailovej adresy. Zmenu budete musieť potvrdiť zadaním svojho hesla.',
 'changeemail-no-info' => 'Na prístup k tejto stránke musíte byť prihlásený.',
@@ -1974,7 +1974,7 @@ Možno chcete upraviť popis na jeho [$2 popisnej stránke súboru] tam.',
 'uploadnewversion-linktext' => 'Nahrať novú verziu tohto súboru',
 'shared-repo-from' => 'z $1',
 'shared-repo' => 'zdieľané úložisko',
-'upload-disallowed-here' => 'Tento súbor nie je možné prepísať.',
+'upload-disallowed-here' => 'Tento súbor nemôžete prepísať.',
 
 # File reversion
 'filerevert' => 'Obnoviť $1',
@@ -3090,6 +3090,7 @@ Pravdepodobne to spôsobil odkaz na externú internetovú lokalitu, ktorá sa na
 
 # Info page
 'pageinfo-title' => 'Informácie o „$1“',
+'pageinfo-not-current' => 'Ospravedlňujeme sa, túto informáciu nie je možné poskytnúť pre staré revízie.',
 'pageinfo-header-basic' => 'Základné údaje',
 'pageinfo-header-edits' => 'História úprav',
 'pageinfo-header-restrictions' => 'Ochrana stránky',
@@ -3098,6 +3099,7 @@ Pravdepodobne to spôsobil odkaz na externú internetovú lokalitu, ktorá sa na
 'pageinfo-default-sort' => 'Predvolený kľúč zoraďovania:',
 'pageinfo-length' => 'Dĺžka stránky (v bajtoch)',
 'pageinfo-article-id' => 'ID stránky',
+'pageinfo-language' => 'Jazyk obsahu stránok',
 'pageinfo-robot-policy' => 'Stav vyhľadávača',
 'pageinfo-robot-index' => 'Indexovať stránku',
 'pageinfo-robot-noindex' => 'Neindexovať stránku',
@@ -3118,6 +3120,10 @@ Pravdepodobne to spôsobil odkaz na externú internetovú lokalitu, ktorá sa na
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Skrytá kategória|Skryté kategórie}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Vložená šablóna|Vložené šablóny}} ($1)',
 'pageinfo-toolboxlink' => 'Informácie o stránke',
+'pageinfo-redirectsto' => 'Presmerovanie na',
+'pageinfo-redirectsto-info' => 'info',
+'pageinfo-contentpage' => 'Počíta sa ako obsah stránky',
+'pageinfo-contentpage-yes' => 'Áno',
 'pageinfo-protect-cascading' => 'Kaskádové zamknutie',
 'pageinfo-protect-cascading-yes' => 'Áno',
 'pageinfo-protect-cascading-from' => 'Zámky pochádzajú z kaskádových zamknutí',
@@ -3143,6 +3149,8 @@ Pravdepodobne to spôsobil odkaz na externú internetovú lokalitu, ktorá sa na
 'markedaspatrollederror' => 'Nie je možné označiť ako strážené',
 'markedaspatrollederrortext' => 'Pre označenie ako strážený je potrebné uviesť revíziu, ktorá sa má označiť ako strážená.',
 'markedaspatrollederror-noautopatrol' => 'Nie je vám umožnené označiť vlastné zmeny za strážené.',
+'markedaspatrollednotify' => 'Táto zmena stránky $1 bola označená ako strážená.',
+'markedaspatrollederrornotify' => 'Označenie ako strážená zlyhalo.',
 
 # Patrol log
 'patrol-log-page' => 'Záznam strážení',
index bfdb046..8fec0da 100644 (file)
@@ -351,6 +351,7 @@ $messages = array(
 'namespaces' => 'Imenski prostori',
 'variants' => 'Različice',
 
+'navigation-heading' => 'Navigacijski meni',
 'errorpagetitle' => 'Napaka',
 'returnto' => 'Vrnite se na $1.',
 'tagline' => 'Iz {{GRAMMAR:rodilnik|{{SITENAME}}}}',
@@ -597,9 +598,12 @@ Administrator, ki ga je zaklenil, je podal naslednje pojasnilo: »$3«.',
 
 {{GRAMMAR:tožilnik|{{SITENAME}}}} lahko zdaj uporabljate neprijavljeni ali pa se <span class='plainlinks'>[$1 ponovno prijavite]</span> kot enak ali drug uporabnik.
 Morda bodo nekatere strani še naprej prikazane, kot da ste prijavljeni, dokler ne boste izpraznili predpomnilnika brskalnika.",
+'welcomeuser' => '$1, dobrodošli!',
 'welcomecreation' => '== Dobrodošli, $1! ==
 Ustvarili ste račun.
 Ne pozabite si prilagoditi vaših [[Special:Preferences|nastavitev {{GRAMMAR:rodilnik|{{SITENAME}}}}]].',
+'welcomecreation-agora' => 'Ustvarili ste račun.
+Ne pozabite si prilagoditi vaših [[Special:Preferences|nastavitev {{GRAMMAR:rodilnik|{{SITENAME}}}}]].',
 'yourname' => 'Uporabniško ime:',
 'yourpassword' => 'Geslo:',
 'yourpasswordagain' => 'Ponovno vpišite geslo',
@@ -1757,6 +1761,7 @@ Prosimo, preverite veljavnost in dostopnost naslova URL ter poskusite ponovno.
 'backend-fail-notsame' => 'Različna datoteka že obstaja na $1.',
 'backend-fail-invalidpath' => '$1 ni veljavna skladiščna pot.',
 'backend-fail-delete' => 'Ne morem izbrisati datoteke $1.',
+'backend-fail-describe' => 'Nisem mogel spremeniti metapodatkov datoteke »$1«.',
 'backend-fail-alreadyexists' => 'Datoteka $1 že obstaja.',
 'backend-fail-store' => 'Ne morem shraniti datoteke $1 na $2.',
 'backend-fail-copy' => 'Ne morem kopirati datoteke $1 na $2.',
index 776fa81..bad013a 100644 (file)
@@ -728,9 +728,12 @@ Den administratören som låste den gav denna anledning: "\'\'$3\'\'".',
 
 Du kan fortsätta att använda {{SITENAME}} anonymt, eller så kan du <span class='plainlinks'>[$1 logga in igen]</span> som samma eller som en annan användare.
 Observera att det, tills du tömmer din webbläsares cache, på vissa sidor kan se ut som att du fortfarande är inloggad.",
+'welcomeuser' => 'Välkommen, $1!',
 'welcomecreation' => '== Välkommen, $1! ==
 Ditt konto har skapats.
 Glöm inte att justera dina [[Special:Preferences|{{SITENAME}}-inställningar]].',
+'welcomecreation-agora' => 'Ditt konto har skapats.
+Glöm inte att justera dina [[Special:Preferences|{{SITENAME}}-inställningar]].',
 'yourname' => 'Användarnamn:',
 'yourpassword' => 'Lösenord:',
 'yourpasswordagain' => 'Upprepa lösenord',
@@ -1861,6 +1864,7 @@ Om problemet kvarstår, kontakta en [[Special:ListUsers/sysop|administratör]].'
 'backend-fail-notsame' => 'En icke-identisk fil redan finns på $1.',
 'backend-fail-invalidpath' => '$1 är inte en giltig sökväg för att spara.',
 'backend-fail-delete' => 'Kunde inte radera filen $1.',
+'backend-fail-describe' => 'Kunde inte att ändra metadata för filen "$1".',
 'backend-fail-alreadyexists' => 'Filen $1 finns redan.',
 'backend-fail-store' => 'Kunde inte spara filen $1 vid $2.',
 'backend-fail-copy' => 'Det gick inte att kopiera filen $1 till $2.',
@@ -2246,7 +2250,7 @@ Se även [[Special:WantedCategories|önskade kategorier]].',
 'linksearch-ok' => 'Sök',
 'linksearch-text' => 'Jokertecken (wildcards) som t.ex. "*.wikipedia.org" kan användas.
 Det krävs åtminstone en toppdomän, t.ex. "*.org".<br />
-Protokoll som stöds: <code>$1</code> (lägg inte till någon av dessa i din sökning).',
+Protokoll som stöds: <code>$1</code> (sätts till http:// om inget protokoll anges).',
 'linksearch-line' => '$1 länkas från $2',
 'linksearch-error' => 'Jokertecken kan bara användas i början av domännamnet.',
 
@@ -3176,6 +3180,7 @@ Detta orsakades troligen av en länk till en svartlistad webbplats.',
 'markedaspatrollederror' => 'Kan inte markera som patrullerad',
 'markedaspatrollederrortext' => 'Det går inte att markera som patrullerad utan att ange version.',
 'markedaspatrollederror-noautopatrol' => 'Du har inte tillåtelse att markera dina egna redigeringar som patrullerade.',
+'markedaspatrollederrornotify' => 'Markering som patrullerad misslyckades.',
 
 # Patrol log
 'patrol-log-page' => 'Patrulleringslogg',
@@ -3991,9 +3996,9 @@ Bilder visas i full upplösning, andra filtyper öppnas direkt i de program som
 'logentry-move-move_redir-noredirect' => '$1 flyttade sidan $3 till $4 över en omdirigering utan att lämna en omdirigering',
 'logentry-patrol-patrol' => '$1 markerade versionen $4 av sidan $3 som patrullerad',
 'logentry-patrol-patrol-auto' => '$1 markerade automatiskt versionen $4 av sidan $3 som patrullerad',
-'logentry-newusers-newusers' => '$1 skapade ett användarkonto',
-'logentry-newusers-create' => '$1 skapade ett användarkonto',
-'logentry-newusers-create2' => '$1 skapade ett användarkonto $3',
+'logentry-newusers-newusers' => 'Användarkonto $1 skapades',
+'logentry-newusers-create' => 'Användarkonto $1 skapades',
+'logentry-newusers-create2' => 'Användarkonto $3 skapades av $1',
 'logentry-newusers-autocreate' => 'Kontot $1 skapades automatiskt',
 'newuserlog-byemail' => 'lösenord skickat med e-post',
 
index 365db41..74951c4 100644 (file)
@@ -1163,7 +1163,7 @@ $1",
 
 # Preferences page
 'preferences' => 'అభిరుచులు',
-'mypreferences' => 'నా à°\85à°­à°¿à°°à±\81à°\9aà±\81à°²à±\81',
+'mypreferences' => 'అభిరుచులు',
 'prefs-edits' => 'దిద్దుబాట్ల సంఖ్య:',
 'prefsnologin' => 'లాగిన్‌ అయిలేరు',
 'prefsnologintext' => 'వాడుకరి అభిరుచులను మార్చుకోడానికి, మీరు <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} లోనికి ప్రవేశించి]</span> ఉండాలి.',
index 62b409d..055359d 100644 (file)
@@ -193,7 +193,7 @@ kiçi kategoriýadan {{PLURAL:$1|sany kiçi kategoriýa|$1 sany kiçi kategoriý
 'vector-action-move' => 'Adyny üýtget',
 'vector-action-protect' => 'Goraga al',
 'vector-action-undelete' => 'Öçürmäni yzyna al',
-'vector-action-unprotect' => 'Goragy aýyr',
+'vector-action-unprotect' => 'Goragy üýtget',
 'vector-simplesearch-preference' => 'Giňeldilen gözleg tekliplerini aç (Diňe Vector bezegi üçin)',
 'vector-view-create' => 'Döret',
 'vector-view-edit' => 'Redaktirle',
@@ -204,6 +204,7 @@ kiçi kategoriýadan {{PLURAL:$1|sany kiçi kategoriýa|$1 sany kiçi kategoriý
 'namespaces' => 'At giňişlikleri',
 'variants' => 'Wariantlar',
 
+'navigation-heading' => 'Nawigasiýa menýusy',
 'errorpagetitle' => 'Säwlik',
 'returnto' => '$1.',
 'tagline' => '{{SITENAME}} saýtyndan',
@@ -229,7 +230,7 @@ kiçi kategoriýadan {{PLURAL:$1|sany kiçi kategoriýa|$1 sany kiçi kategoriý
 'protect' => 'Goraga al',
 'protect_change' => 'üýtget',
 'protectthispage' => 'Sahypany gorag astyna al',
-'unprotect' => 'Goragy aýyr',
+'unprotect' => 'Goragy üýtget',
 'unprotectthispage' => 'Sahypanyň goragyny aýyr',
 'newpage' => 'Täze sahypa',
 'talkpage' => 'Sahypany ara alyp maslahatlaş',
@@ -311,6 +312,8 @@ Bu sahypany ulanmak üçin MediaWikiniň $1 wersiýasy talap edilýär. [[Specia
 'toc' => 'Mazmuny',
 'showtoc' => 'görkez',
 'hidetoc' => 'gizle',
+'collapsible-collapse' => 'Ýygna',
+'collapsible-expand' => 'Giňelt',
 'thisisdeleted' => '$1 görmek ýa-da dikeltmek isleýärsiňizmi?',
 'viewdeleted' => '$1 gör?',
 'restorelink' => '{{PLURAL:$1|bir öçürilen özgerdişi|$1 öçürilen özgerdişi}}',
@@ -423,6 +426,7 @@ Görkezilen sebäp: ''$2''.",
 
 Indi anonim ýagdaýda {{SITENAME}} saýtyny ulanyp bilersiňiz, ýa-da şol bir ýa-da başga bir at bilen <span class='plainlinks'>[$1 sessiýany ýaňadan]</span> açyp bilersiňiz.
 Web brauzeriňiziň keşini arassalaýançaňyz käbir sahypalar sessiýaňyzyň açyk wagtkysy ýaly görünip biler.",
+'welcomeuser' => 'Hoş geldiňiz, $1!',
 'welcomecreation' => '== Hoş geldiňiz, $1! ==
 
 Hasabyňyz açyldy.
@@ -530,10 +534,19 @@ Parolyňyzy eýýäm şowlulyk bilen üýtgeden ýa-da täze wagtlaýyn parol ta
 'resetpass-temp-password' => 'Wagtlaýyn parol:',
 
 # Special:PasswordReset
+'passwordreset' => 'Paroly nol et',
+'passwordreset-legend' => 'Paroly nol et',
 'passwordreset-username' => 'Ulanyjy ady:',
+'passwordreset-domain' => 'Domen:',
+'passwordreset-emailelement' => 'Ulanyjy ady: $1
+Wagtlaýyn parol: $2',
 
 # Special:ChangeEmail
+'changeemail' => 'E-poçta adresini üýtget',
+'changeemail-oldemail' => 'Häzirki e-poçta adresi:',
+'changeemail-newemail' => 'Täze e-poçta adresi:',
 'changeemail-none' => '(hiç biri)',
+'changeemail-submit' => 'E-poçtany üýtget',
 'changeemail-cancel' => 'Goýbolsun et',
 
 # Edit page toolbar
@@ -732,6 +745,11 @@ Düşündiriş berilmedi.',
 'edit-already-exists' => 'Täze sahypa döredip bolanok.
 Ol eýýäm bar.',
 
+# Content models
+'content-model-wikitext' => 'wikitekst',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Duýduryş:''' Bu sahypada resurs talap ediji funksiýalara çakdanaşa köp çagyryş bar.
 
@@ -794,7 +812,7 @@ Wikiden öçürilen ýa-da adynyň üýtgedilen bolmagy ahmal.
 Baglanyşykly täze sahypalar üçin [[Special:Search|wikide gözleg geçirip]] görüň.',
 
 # Revision deletion
-'rev-deleted-comment' => '(teswir aýyryldy)',
+'rev-deleted-comment' => '(özgerdişiň gysgaça düşündirişi aýryldy)',
 'rev-deleted-user' => '(ulanyjy ady aýyryldy)',
 'rev-deleted-event' => '(gündelik işi aýyryldy)',
 'rev-deleted-user-contribs' => '[ulanyjy ady ýa-da IP adresi aýrylypdyr - özgerdiş goşantlardan gizlenildi]',
@@ -1024,12 +1042,13 @@ Emma olaryň {{SITENAME}} indeksleriniň möwriti geçen bolmagy mümkindir.',
 'prefs-rc' => 'Soňky üýtgeşmeler',
 'prefs-watchlist' => 'Gözegçilik sanawy',
 'prefs-watchlist-days' => 'Gözegçilik sanawynda görkeziljek gün sany:',
-'prefs-watchlist-days-max' => 'Maximum $1 {{PLURAL:$1|day|days}}',
+'prefs-watchlist-days-max' => 'Mmaksimum $1 {{PLURAL:$1|gün}}',
 'prefs-watchlist-edits' => 'Giňeldilen gözegçilik sanawynda görkeziljek üýtgeşmeleriň maksimum sany:',
 'prefs-watchlist-edits-max' => 'Maksimum san: 1000',
 'prefs-watchlist-token' => 'Gözegçilik sanawynyň alamaty:',
 'prefs-misc' => 'Başga',
 'prefs-resetpass' => 'Paroly üýtget',
+'prefs-changeemail' => 'E-poçta adresini üýtget',
 'prefs-email' => 'E-poçta opsiýalary',
 'prefs-rendering' => 'Daşky görnüş',
 'saveprefs' => 'Ýazdyr',
@@ -1069,7 +1088,7 @@ Gabat gelşine görä döredilen şu bahany ulanyp bilersiňiz: $1',
 'timezoneregion-indian' => 'Hindi okeany',
 'timezoneregion-pacific' => 'Ýuwaş okean',
 'allowemail' => 'Başga ulanyjylar maňa e-poçta iberip bilsin',
-'prefs-searchoptions' => 'Gözleg opsiýalary',
+'prefs-searchoptions' => 'Gözleg',
 'prefs-namespaces' => 'At giňişlikleri',
 'defaultns' => 'Bolmasa şu at giňişliklerinde gözleg geçiriň:',
 'default' => 'gaýybana',
@@ -1149,9 +1168,9 @@ $1 {{PLURAL:$1|simwoldan|simwoldan}} köp bolmaly däl.',
 'group-suppress' => 'Esewançylar',
 'group-all' => '(ählisi)',
 
-'group-user-member' => 'Ulanyjy',
+'group-user-member' => '{{GENDER:$1|ulanyjy}}',
 'group-autoconfirmed-member' => 'Awtomatik tassyklanan ulanyjy',
-'group-bot-member' => 'Bot',
+'group-bot-member' => '{{GENDER:$1|bot}}',
 'group-sysop-member' => 'Administrator',
 'group-bureaucrat-member' => 'Býurokrat',
 'group-suppress-member' => 'Esewançy',
@@ -3148,4 +3167,6 @@ Faýlyň adyny "{{ns:file}}:" pristawkasyz giriziň.',
 'searchsuggest-search' => 'Gözleg',
 'searchsuggest-containing' => 'öz içine alýar...',
 
+# Unknown messages
+'mytalk-parenthetical' => 'çekişme',
 );
index 69778c2..1b7b2c2 100644 (file)
@@ -396,7 +396,7 @@ $messages = array(
 
 'underline-always' => 'Daima',
 'underline-never' => 'Asla',
-'underline-default' => 'Tarayıcı varsayılanı',
+'underline-default' => 'Tema veya Tarayıcı varsayılanı',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Düzenleme alanının yazı tipi:',
@@ -514,6 +514,7 @@ $messages = array(
 'namespaces' => 'Ad alanları',
 'variants' => 'Türevler',
 
+'navigation-heading' => 'Navigasyon menüsü',
 'errorpagetitle' => 'Hata',
 'returnto' => '$1 sayfasına geri dön.',
 'tagline' => '{{SITENAME}} sitesinden',
@@ -2582,7 +2583,7 @@ Son engelleme günlüğü girdisi kaynak amacıyla aşağıda verilmiştir:',
 'whatlinkshere-hideredirs' => 'Yönlendirmeleri $1',
 'whatlinkshere-hidetrans' => 'Dönüştürmeleri $1',
 'whatlinkshere-hidelinks' => 'Bağlantıları $1',
-'whatlinkshere-hideimages' => 'Resim bağlantılarını $1',
+'whatlinkshere-hideimages' => 'Dosya bağlantılarını $1',
 'whatlinkshere-filters' => 'Süzgeçler',
 
 # Block/unblock
@@ -3959,4 +3960,6 @@ Resimler tam çözünürlükte görüntülenir, diğer dosya tipleri ilgili prog
 'duration-centuries' => '$1 {{PLURAL:$1|yüzyıl|yüzyıl}}',
 'duration-millennia' => '$1 {{PLURAL:$1|bin yıl|bin yıl}}',
 
+# Unknown messages
+'mytalk-parenthetical' => 'mesaj',
 );
index b0da823..6e91612 100644 (file)
@@ -328,6 +328,8 @@ $messages = array(
 'internalerror' => 'Иштики алдаг',
 'internalerror_info' => 'Иштики алдаг: $1',
 'badtitle' => 'Багай ат',
+'badtitletext' => 'Негеттинип турар арын ады меге, куруг, чок болза дылдар аразында азы интервики ады шын эвес.
+Адында таарышпас демдектер бары чадапчок.',
 'viewsource' => 'Дөзүн көөрү',
 'actionthrottled' => 'Шеглээн дүрген',
 'sqlhidden' => '(SQL айтырыгны чажырган)',
@@ -433,6 +435,8 @@ Do not forget to change your [[Special:Preferences|{{SITENAME}} preferences]].',
 'preview' => 'Чижеглей көөрү',
 'showpreview' => 'Чижеглей көөрү',
 'showdiff' => 'Өскерлиишкиннерни көргүзери',
+'anoneditwarning' => "'''Кичээңгейлиг!''' Силер сайтче авторжуттунмаан силер.
+Бо арынның өскертилге төөгүзүнче Силерниң IP-адрезиңер бижитинип каар.",
 'missingcommenttext' => 'Тайылбырни адаанда чогаадыңар.',
 'summary-preview' => 'Түңнелдү чижеглей көөрү:',
 'subject-preview' => 'Кол сөс чижеглей көөрү:',
@@ -458,6 +462,7 @@ Please check if you want to create/edit this page.',
 'templatesused' => 'Бо арында {{PLURAL:$1|Майык|Майыктар}} ажыглаттырган:',
 'template-protected' => '(камгалаан)',
 'template-semiprotected' => '(четпес камгалаан)',
+'hiddencategories' => 'Бо арын $1 {{PLURAL:$1|чажыт категорияга}} хамааржыр:',
 'permissionserrorstext-withaction' => "Мында «'''$2'''» силерниң эргеңер чок, {{PLURAL:$1|чылдагааны|чылдагааннары}}:",
 'moveddeleted-notice' => 'Бо арын ап каавыткан.
 Адаанда ап каавыткан биле өскээр адаан бижиктер шынзылгазын көргүскен.',
@@ -616,6 +621,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'gender-female' => 'Кыс',
 'email' => 'Э-чагаа',
 'prefs-help-email' => 'Э-шуудаң адрезин айтыры албан эвес, ынчалза-даа, уруңуңар (парольуңар) чиде бээрге, ол херек апаар.',
+'prefs-help-email-others' => 'Ол харылзаа медээлели база өске киржикчилерге хуу азы чугаалажылга арныңарга э-шуудаңыңар (e-mail) таварыштыр Силерниң-биле харылзажырынга ажыктыг. Ооң кадында Силерниң э-шуудаң адрезиңер кымга-даа көзүлбес.',
 'prefs-info' => 'Кол медээлер',
 'prefs-signature' => 'Хол үжүү',
 'prefs-diffs' => 'Ылгалдар',
@@ -710,6 +716,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'recentchangeslinked' => 'Хамааржыр өскерлиишкиннер',
 'recentchangeslinked-toolbox' => 'Хамааржыр өскерлиишкиннер',
 'recentchangeslinked-title' => '«$1» деп арынга хамаарыштырган өскерлиишкиннер',
+'recentchangeslinked-noresult' => 'Холбаштырган арыннарда айыткан үе иштинде кандыг-даа өскертилге турбаан.',
 'recentchangeslinked-page' => 'Арынның ады:',
 'recentchangeslinked-to' => 'Айыткан арынче шөлүп турар арыннарга өскерилгелерни көргүзер',
 
@@ -750,6 +757,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 # File description page
 'file-anchor-link' => 'Файл',
 'filehist' => 'Файлдың төөгүзү',
+'filehist-help' => 'Ол үеде файлдың көстүрүн көөрде, дата/үеже базыптыңар.',
 'filehist-deleteall' => 'шуптуну ырадыры',
 'filehist-deleteone' => 'ырадыры',
 'filehist-revert' => 'эгидип тургузары',
@@ -964,6 +972,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 
 # Namespace form on various pages
 'namespace' => 'Аттар делгеми:',
+'invert' => 'Шилээнин аңдарар. (Обратить выбранное)',
 'blanknamespace' => '(Кол)',
 
 # Contributions
@@ -1075,6 +1084,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'tooltip-pt-userpage' => 'Силерниң ажыглакчы арыныңнар',
 'tooltip-pt-mytalk' => 'Силерниң чугаалажыр арыныңар',
 'tooltip-pt-preferences' => 'Силерниң шилилгеңер',
+'tooltip-pt-watchlist' => 'Карактап (хынап) турар өскертилгелерге хамааржыр арыннарның даңзызы',
 'tooltip-pt-mycontris' => 'Силерниң салыышкыннарыңарның даңзызы',
 'tooltip-pt-login' => 'Маңаа системаже киир бүрүткенип болур, ынчалза-даа ол албан эвес.',
 'tooltip-pt-logout' => 'Үнери',
@@ -1090,7 +1100,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'tooltip-ca-watch' => 'Силерниң хайгаарал даңзызынга бо арынны немерелээри',
 'tooltip-ca-unwatch' => 'Силерниң хайгаарал даңзызындан бо арынны ырадыры',
 'tooltip-search' => '{{grammar:locative|{{SITENAME}}}} дилээри',
-'tooltip-search-go' => 'Ð\91иÑ\80 Ñ\8dвеÑ\81 Ð°Ñ\80Ñ\8bн Ñ\8bндÑ\8bг Ð°Ð´Ð°Ð°Ñ\80 Ð±Ð¾Ð»Ð·Ð°, Ð°Ò£Ð°Ð° Ð±Ð°Ð°Ñ\80Ñ\8b',
+'tooltip-search-go' => 'Шак Ñ\8bндÑ\8bг Ð°Ñ\82Ñ\82Ñ\8bг Ð°Ñ\80Ñ\8bнÑ\87е Ñ\89илÑ\87ииÑ\80',
 'tooltip-search-fulltext' => 'Бо бижике арыннардан дилээри',
 'tooltip-p-logo' => 'Кол Арын',
 'tooltip-n-mainpage' => 'Кол Арынны баары',
@@ -1122,6 +1132,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'tooltip-minoredit' => 'Бо өскертилгени "биче" деп демдеглээр',
 'tooltip-save' => 'Силерниң өскерлиишкиннериңерни шыгжаары',
 'tooltip-preview' => 'Шыгжаар мурнунда силерниң өскерлиишкиннерин чижеглеп көрем!',
+'tooltip-diff' => 'Бо сөзүглелге хамаарыштыр кандыг өскертилгелерни кылган Силер - ону көргүзер.',
 'tooltip-compareselectedversions' => 'Бо арынның шилиттинген ийи хевиринниң ылгалын көөр.',
 'tooltip-watch' => 'Силерниң хайгаарал даңзызынга бо арынны немерелээри',
 'tooltip-rollback' => 'Сөөлгү киржикчиниң өскерилгелерин чаңгыс баскаш, ойталаар',
index 974dcc2..0723a63 100644 (file)
@@ -378,7 +378,7 @@ $messages = array(
 'tog-enotifusertalkpages' => 'Повідомляти електронною поштою про зміну моєї сторінки обговорення',
 'tog-enotifminoredits' => 'Надсилати мені електронного листа навіть при незначних редагуваннях сторінок та файлів',
 'tog-enotifrevealaddr' => 'Показувати мою поштову адресу в повідомленнях',
-'tog-shownumberswatching' => 'Показувати кількість користувачів, які додали сторінку до свого списку спостереження',
+'tog-shownumberswatching' => 'Показувати число користувачів, які додали сторінку до свого списку спостереження',
 'tog-oldsig' => 'Існуючий підпис:',
 'tog-fancysig' => 'Власна вікі-розмітка підпису (без автоматичного посилання)',
 'tog-externaleditor' => "Використовувати зовнішній редактор за умовчанням (тільки для досвідчених користувачів, вимагає спеціальних налаштувань вашого комп'ютера [//www.mediawiki.org/wiki/Manual:External_editors Детальніше.])",
@@ -520,6 +520,7 @@ $messages = array(
 'namespaces' => 'Простори назв',
 'variants' => 'Варіанти',
 
+'navigation-heading' => 'Навігаційне меню',
 'errorpagetitle' => 'Помилка',
 'returnto' => 'Повернення до сторінки «$1».',
 'tagline' => 'Матеріал з {{grammar:genitive|{{SITENAME}}}}',
@@ -762,9 +763,12 @@ $1',
 'logouttext' => "'''Тепер ви працюєте в тому ж режимі, який був до вашого входу до системи.'''
 
 Ви можете продовжувати використовувати {{grammar:accusative|{{SITENAME}}}} анонімно або знову <span class='plainlinks'>[$1 ввійти до системи]</span> як той самий або інший користувач. Деякі сторінки можуть відображатися, ніби ви ще представлені системі під іменем, щоб уникнути цього, оновіть кеш браузера.",
+'welcomeuser' => 'Вітаємо, $1!',
 'welcomecreation' => '== Вітаємо вас, $1! ==
 Ваш обліковий запис створено.
 Не забудьте змінити свої [[Special:Preferences|налаштування для сайту]].',
+'welcomecreation-agora' => 'Ваш акаунт було створено.
+Не забудьте змінити свої [[Special:Preferences|налаштування у {{GRAMMAR:genitive|{{SITENAME}}}}]].',
 'yourname' => "Ім'я користувача:",
 'yourpassword' => 'Пароль:',
 'yourpasswordagain' => 'Повторний набір пароля:',
@@ -1921,6 +1925,7 @@ $1',
 'backend-fail-notsame' => 'Неідентичний файл $1 вже існує.',
 'backend-fail-invalidpath' => 'Шлях для збереження $1 є недійсним.',
 'backend-fail-delete' => 'Не вдалося вилучити файл $1.',
+'backend-fail-describe' => 'Не вдалося змінити метадані для файлу «$1».',
 'backend-fail-alreadyexists' => 'Файл $1 вже існує.',
 'backend-fail-store' => 'Не вдалося зберегти файл $1 у $2.',
 'backend-fail-copy' => 'Не вдалося скопіювати файл $1 в $2.',
@@ -2142,8 +2147,8 @@ $1',
 'statistics-pages' => 'Сторінок',
 'statistics-pages-desc' => 'Усі сторінки у вікі, включаючи сторінки обговорень, перенаправлення тощо.',
 'statistics-files' => 'Завантажено файлів',
-'statistics-edits' => 'Ð\9aÑ\96лÑ\8cкÑ\96Ñ\81Ñ\82Ñ\8c редагувань з моменту установки {{grammar:genitive|{{SITENAME}}}}',
-'statistics-edits-average' => 'СеÑ\80еднÑ\8f ÐºÑ\96лÑ\8cкÑ\96Ñ\81Ñ\82Ñ\8c редагувань на сторінку',
+'statistics-edits' => 'ЧиÑ\81ло редагувань з моменту установки {{grammar:genitive|{{SITENAME}}}}',
+'statistics-edits-average' => 'СеÑ\80еднÑ\94 Ñ\87иÑ\81ло редагувань на сторінку',
 'statistics-views-total' => 'Усього переглядів',
 'statistics-views-total-desc' => 'Перегляди неіснуючих та спеціальних сторінок не враховані',
 'statistics-views-peredit' => 'Переглядів на редагування',
index 362f233..ea49819 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Aig mest ei varasta
  * @author Andrijko Z.
  * @author Kaganer
  * @author Sura
@@ -221,7 +222,7 @@ $messages = array(
 'cancel' => 'Heitta pätand',
 'moredotdotdot' => 'Edeleze...',
 'mypage' => "Minun lehtpol'",
-'mytalk' => 'Minun lodud',
+'mytalk' => 'Lodud',
 'anontalk' => 'Lodud neciš IP-adresas',
 'navigation' => 'Navigacii',
 'and' => '&#32;da',
@@ -987,7 +988,7 @@ Otkat sil'mnägubale üks-se, miše {{SITENAME}}-saitan sädäimišt voib olda v
 
 # Preferences page
 'preferences' => 'Järgendused',
-'mypreferences' => 'Minun järgendused',
+'mypreferences' => 'Järgendused',
 'prefs-edits' => 'Redaktiruindoiden lugu:',
 'prefsnologin' => 'Tö et olgoi kirjutanus sistemha.',
 'prefsnologintext' => 'Teile pidab <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} kirjutadas sistemha]</span>, miše toižetada järgendusid.',
@@ -1385,7 +1386,7 @@ Ku problem jäb jäl'ghepäi-ki, säkat pagin [[Special:ListUsers/sysop|sistemad
 'backend-fail-writetemp' => 'Ei voi toižetada pordaigašt failad.',
 'backend-fail-closetemp' => 'Ei voi saubata pordaigašt failad.',
 'backend-fail-read' => 'Ei voi lugeda "$1"-failad.',
-'backend-fail-create' => 'Ei voi säta "$1"-failad.',
+'backend-fail-create' => 'Ei voi kirjutada "$1"-failad.',
 
 # ZipDirectoryReader
 'zip-wrong-format' => 'Valitud fail ei ole ZIP-fail.',
@@ -1739,7 +1740,7 @@ Kc. mugažo [[Special:WantedCategories|ectud kategorijoiden nimikirjutez]].',
 
 # Watchlist
 'watchlist' => 'Kaclendnimikirjutez',
-'mywatchlist' => 'Minun kaclendnimikirjutez',
+'mywatchlist' => 'Kaclendnimikirjutez',
 'watchlistfor2' => 'Kävutajale $1 $2',
 'nowatchlist' => "Teiden kaclendnimikirjutez om pall'az.",
 'watchlistanontext' => 'Olgat hüväd, $1, miše lugeda vai redaktiruida teiden kaclendnimikirjutez.',
@@ -2370,9 +2371,10 @@ Voib olda, necil lehtpolel om kosketuz irdsaitale, kudamb om mustas nimikirjutes
 'spambot_username' => 'MediaWikid puhtastadas spamaspäi',
 
 # Info page
-'pageinfo-header-edits' => 'Redakcijad',
+'pageinfo-header-edits' => 'Redakcijoiden istorii',
+'pageinfo-article-id' => 'Lehtpolen ID',
 'pageinfo-views' => 'Kacundoiden lugu',
-'pageinfo-watchers' => 'Kaclijoiden lugu',
+'pageinfo-watchers' => 'Lehtpolen kaclijoiden lugu',
 'pageinfo-edits' => 'Redakcijoiden lugumär',
 'pageinfo-authors' => 'Erazvuiččiden avtoroiden lugu',
 
@@ -2781,17 +2783,26 @@ Ku fail redaktiruidihe sändan polhe, erased parametrad voidas erineda nügüdl
 'exif-dc-publisher' => 'Pästai',
 'exif-dc-rights' => 'Oiktused',
 
+'exif-iimcategory-clj' => 'Ogerantegend da käskuz',
+'exif-iimcategory-dis' => 'Katastrofad da avarijad',
+'exif-iimcategory-fin' => 'Ekonomik da biznes',
 'exif-iimcategory-edu' => 'Openduzmär',
+'exif-iimcategory-evn' => 'Ümbrišt',
 'exif-iimcategory-hth' => 'Tervhuz',
+'exif-iimcategory-hum' => "Mel'hetartujad istorijad",
 'exif-iimcategory-lab' => 'Tö',
+'exif-iimcategory-lif' => 'Elonmahtuz da joudai aig',
 'exif-iimcategory-pol' => 'Politik',
 'exif-iimcategory-rel' => 'Religii da uskonduz',
 'exif-iimcategory-sci' => 'Tedo da tehnologii',
 'exif-iimcategory-soi' => 'Socialižed küzundad',
 'exif-iimcategory-spo' => 'Sport',
+'exif-iimcategory-war' => 'Voinad, konfliktad da kundanholdundad',
 'exif-iimcategory-wea' => 'Sä',
 
 'exif-urgency-normal' => 'Normaline ($1)',
+'exif-urgency-low' => 'Madal ($1)',
+'exif-urgency-high' => 'Korged ($1)',
 
 # External editor support
 'edit-externally' => 'Redaktiruida nece fail irdprogrammal',
@@ -2934,6 +2945,7 @@ Kävutagat normaline ezikacund.',
 'version-specialpages' => 'Specialižed lehtpoled',
 'version-parserhooks' => 'Sintaksižen analizatoran sabustajad',
 'version-variables' => 'Vajehtujad lugud',
+'version-antispam' => 'Antispam',
 'version-skins' => 'Nägutemad',
 'version-other' => 'Toine',
 'version-mediahandlers' => 'Median radimed',
index 0e7e162..862c18d 100644 (file)
@@ -700,9 +700,12 @@ Bảo quản viên khóa nó đưa lý do là: “$3”.',
 'logouttext' => "'''Bạn đã đăng xuất.'''
 
 Bạn có thể tiếp tục dùng {{SITENAME}} một cách vô danh, hoặc bạn có thể <span class='plainlinks'>[$1 đăng nhập lại]</span> dưới cùng tên người dùng này hoặc một tên người dùng khác. Xin lưu ý rằng một vài trang có thể vẫn hiển thị như khi bạn còn đăng nhập, cho đến khi bạn xóa vùng nhớ đệm (''cache'') của trình duyệt.",
+'welcomeuser' => 'Hoan nghênh, $1!',
 'welcomecreation' => '== Chào mừng, $1! ==
-Tài khoản của bạn đã mở.
-Đừng quên thay đổi [[Special:Preferences|tùy chọn cá nhân của bạn tại {{SITENAME}}]].',
+Tài khoản của bạn đã được mở.
+Hãy nhớ thay đổi [[Special:Preferences|tùy chọn cá nhân {{SITENAME}}]] của bạn.',
+'welcomecreation-agora' => 'Tài khoản của bạn đã được mở.
+Hãy nhớ thay đổi [[Special:Preferences|tùy chọn cá nhân {{SITENAME}}]] của bạn.',
 'yourname' => 'Tên người dùng:',
 'yourpassword' => 'Mật khẩu:',
 'yourpasswordagain' => 'Gõ lại mật khẩu',
@@ -1650,8 +1653,8 @@ Nếu bạn đồng ý cung cấp, nó sẽ dùng để ghi nhận công lao c
 'rclinks' => 'Xem $1 sửa đổi gần đây nhất trong $2 ngày qua; $3.',
 'diff' => 'khác',
 'hist' => 'sử',
-'hide' => 'ẩn',
-'show' => 'hiện',
+'hide' => 'Ẩn',
+'show' => 'Hiện',
 'minoreditletter' => 'n',
 'newpageletter' => 'M',
 'boteditletter' => 'b',
@@ -1830,6 +1833,7 @@ Nếu vẫn còn bị lỗi, xin hãy liên hệ với một [[Special:ListUsers
 'backend-fail-notsame' => 'Một tập tin khác biệt đã tồn tại ở $1.',
 'backend-fail-invalidpath' => '$1 không phải đường dẫn lưu giữ hợp lệ.',
 'backend-fail-delete' => 'Không thể xóa tập tin $1.',
+'backend-fail-describe' => 'Không thể thay đổi siêu dữ liệu của tập tin “$1”.',
 'backend-fail-alreadyexists' => 'Tập tin $1 đã tồn tại.',
 'backend-fail-store' => 'Không thể lưu tập tin $1 tại $2.',
 'backend-fail-copy' => 'Không thể chép tập tin $1 đến $2.',
index 89fda5b..e7512e5 100644 (file)
@@ -87,6 +87,7 @@ $messages = array(
 'category-article-count' => '{{PLURAL:$2|Senez gruppaz on ainult vahtiaava cülci.|{{PLURAL:$1|Vahtiaava alagruppa kuulub|Vahtiaava $1 cülciä kuuluvad}} sihee gruppaa. Cülcije cisla gruppaza on $2.}}',
 'category-file-count' => '{{PLURAL:$2|Senez gruppaz on ainult vahtiaava faili.|{{PLURAL:$1|Vahtiaava alagruppa kuulub|Vahtiaava $1 failid kuuluvad}} sihee gruppaa. Cülcije cisla gruppaza on $2.}}',
 'listingcontinuesabbrev' => 'ladvaub',
+'noindex-category' => 'Ebäindekseeritettäväd lehocülled',
 
 'about' => 'Täätühsed',
 'newwindow' => '(avaub uuvvõza akkunaza)',
@@ -221,9 +222,11 @@ Kui cüsümüssessä ebõõ roocittu cülci, võib õlla õlõttõ löütännü
 # Login and logout pages
 'yourname' => 'Cäüttijänimi:',
 'yourpassword' => 'Salasõna',
+'yourpasswordagain' => 'Tõissaga salain-sõna:',
 'remembermypassword' => 'Mäleht minuu (enintään $1 {{PLURAL:$1|päivä|päivää}})',
 'login' => 'Cirjut süäme',
 'nav-login-createaccount' => 'Cirjut süäme vai registriiroit cäüttijässi',
+'loginprompt' => 'Tüü piättä «cookies» võttamin luvata, štobõ entä sisteema ete esitellä.',
 'userlogin' => 'Cirjut süäme',
 'userloginnocreate' => 'Cirjut süäme',
 'logout' => 'Cirjut uloz',
@@ -231,7 +234,9 @@ Kui cüsümüssessä ebõõ roocittu cülci, võib õlla õlõttõ löütännü
 'nologin' => "Kui Teille veel ebõõ cäüttijänimi, '''$1'''.",
 'nologinlink' => 'võitta loovva luguu',
 'createaccount' => 'Uusi cäüttijää',
+'gotaccount' => 'Tüü õõttõ jo registreerittu? $1.',
 'gotaccountlink' => 'Cirjut süäme',
+'userlogin-resetlink' => 'Vai unõhtittõ õma loginass?',
 'createaccountreason' => 'Süü:',
 'mailmypassword' => 'Lähet uusi salasõna elektropoštiikaa',
 'loginlanguagelabel' => 'Ceeli: $1',
@@ -294,12 +299,16 @@ Tüü võittõ [[Special:Search/{{PAGENAME}}|kaze nime nimettamizõ löütä]] m
 'template-semiprotected' => '(varjõttu anonüümeilt ja uusilt cäüttijilt)',
 'hiddencategories' => 'Kase cülci kuulub {{PLURAL:$1|vahtiaavaa salautõttuu gruppaa|vahtiaavii salautõttuisõõ gruppoisõõ}}:',
 'permissionserrorstext-withaction' => 'Teill ebõõ luppa $2 {{PLURAL:$1|vahtiaavass süüss|vahtiaaviss süiss}} peräss:',
+'recreate-moveddeleted-warn' => "'''Tähele-pano. Tüü loottõ taaz lehocülce, kumpa õli eespäi poisõttu.'''
+
+Tarkassaga, vai tarviz teile sitä tehä. Alapallõ õlla kaze lehocülle poissamizije ja nimije muuttamizije žurnaalad esitettü.",
 'moveddeleted-notice' => "Kase cülci on pühittü. Alla on sene cüľľee pühi'istori.",
 
 # Parser/template warnings
 'post-expand-template-inclusion-warning' => "'''Etetäätämin:''' lizettävije šabloonije summaarin koko on liiga suuri.
 Mõnõd šabloonad eväd lee lizettü.",
 'post-expand-template-inclusion-category' => 'Lehocülled, jõgõit vart lizettävije šabloonije sallittu koko on ületettü',
+'post-expand-template-argument-warning' => "'''Tähele-pano''': kase lehocülci sisältäb vähepält ühs šabloona, kumma argumental on liiga suuri avvamizõ koko. Mokomad argumentad eväd õltu näütettü",
 'post-expand-template-argument-category' => 'Lehocülled, jõgad sisälletä väl’l’ä-jätettü šabloonije argumentad.',
 
 # History pages
@@ -307,6 +316,7 @@ Mõnõd šabloonad eväd lee lizettü.",
 'currentrev' => 'Nücüin verzija',
 'currentrev-asof' => 'Nücüin verzija $1',
 'revisionasof' => 'Verzija $1',
+'revision-info' => '41. Verssija $1-ss; $2',
 'previousrevision' => '← Vanõpi verzija',
 'nextrevision' => 'Uuvvõpi verzija →',
 'currentrevisionlink' => 'Nücüin verzija',
@@ -345,6 +355,7 @@ Mõnõd šabloonad eväd lee lizettü.",
 'lineno' => 'Viiru $1:',
 'compareselectedversions' => 'Võrrõõ valitsõttuit verzijoit',
 'editundo' => 'kummut',
+'diff-multi' => 'Eb õõ näütettü {{PLURAL:$1|õsa-võttaja|õsa-võttajije}} {{PLURAL:$2|$2 väli-verssija $1|väli-verssijad $1}}',
 
 # Search results
 'searchresults' => 'Etsüü tulõmuhsõd',
@@ -373,6 +384,7 @@ Mõnõd šabloonad eväd lee lizettü.",
 'searchprofile-everything-tooltip' => 'Õttsigo kõikill lehocüllill (ceskussõõmizõ lehocülled siällhulgaz)',
 'searchprofile-advanced-tooltip' => 'Annõttu nimije tiloiz õttsia',
 'search-result-size' => '$1 ({{PLURAL:$2|1 sõna|$2 sõna}})',
+'search-result-category-size' => '$1 {{PLURAL:$1|jäse|$1 jäsentä}} ({{PLURAL:$2|1 all-kategoorija|$2 all-kategoorijad}}, {{PLURAL:$3|1 faili|$3 faila}})',
 'search-redirect' => '(mešaituz $1)',
 'search-section' => '(alajako $1)',
 'search-suggest' => 'Tähetidko: $1',
@@ -416,6 +428,8 @@ Proovvi lizät etsün alkuu ''all:'', nii ettsü etsib kõikkõõ sisältoo (taa
 'gender-male' => 'Mehin',
 'gender-female' => 'Naisin',
 'email' => 'E-mail',
+'prefs-help-email' => 'E-mail eb õõ pakollin, ain se leeb vajallin, kui tüü unõhtattõ salain-sõnass.',
+'prefs-help-email-others' => 'Se lupabci muilõ õsa-võttajilõ võtta ühteüttä tejjeka tejje personaaliss lehocülless viittau kautta, ilma tejje e-mail’a tääotusõ vajaussa.',
 
 # User rights
 'userrights-reason' => 'Süü:',
@@ -447,11 +461,13 @@ Proovvi lizät etsün alkuu ''all:'', nii ettsü etsib kõikkõõ sisältoo (taa
 'recentchanges-label-bot' => 'Kase kõrjauz on robotaka lootu',
 'recentchanges-label-unpatrolled' => 'Kasta kõrjaussa eb tarkisõtti veel',
 'rcnote' => 'Alla on {{PLURAL:$1|ühsi muutuz|viimeiziit $1 muutussiit}} viimeize {{PLURAL:$2|ühee päivää|$2 päivää}}, $4 $5.',
+'rcnotefrom' => 'Alapallõ õlla lugõtõltu muuttamizõd $2-lt ($1-lõssaa)',
 'rclistfrom' => 'Näüt uuvvõd muutuhsõd $1 alguss',
 'rcshowhideminor' => '$1 peened muutussõd',
 'rcshowhidebots' => '$1 botid',
 'rcshowhideliu' => '$1 süäme cirjutõnnud cäüttijäd',
 'rcshowhideanons' => '$1 anonüümid cäüttijäd',
+'rcshowhidepatr' => 'Tarkasõttu kõrjausije $1',
 'rcshowhidemine' => '$1 õmad muutussõd',
 'rclinks' => 'Näüt viimõiss $1 muutuhsõiss viimõizõ $2 päivää ajalt.<br />$3',
 'diff' => 'vahõ',
@@ -541,6 +557,7 @@ Seness [$2 kuvauhsõ lehocülless] informaattsija on alapallõ annõttu.',
 'nbytes' => '$1 {{PLURAL:$1|baitti|baittia}}',
 'nmembers' => '$1 {{PLURAL:$1|selttsilain|selttsilaizõd}}',
 'prefixindex' => 'Kõik cüľľed prefiksiikaa',
+'usercreated' => '33. $3 on entä cirjannu $1 $2-na',
 'newpages' => 'Uuvvõd cüľľed',
 'newpages-username' => 'Cäüttijänimi:',
 'move' => 'Liikut',
@@ -683,10 +700,12 @@ Cüľľellä $2 on spiiska viimeiziss pühcimühsiiss.',
 
 'sp-contributions-newbies' => 'Näüt uusijõõ cäüttijee muutuhsõd',
 'sp-contributions-blocklog' => 'piättelemized',
+'sp-contributions-uploads' => 'lassausõd',
 'sp-contributions-logs' => 'logid',
 'sp-contributions-talk' => 'Juttu',
 'sp-contributions-search' => 'Etsi avittamisiit',
 'sp-contributions-username' => 'IP-adressi vai cäüttijänimi',
+'sp-contributions-toponly' => 'Viimeized verssijad näüttä',
 'sp-contributions-submit' => 'Etsi',
 
 # What links here
@@ -694,6 +713,7 @@ Cüľľellä $2 on spiiska viimeiziss pühcimühsiiss.',
 'whatlinkshere-title' => 'Cüľľed, kummad näütellä cüľľelle "$1"',
 'whatlinkshere-page' => 'Cülci:',
 'linkshere' => "Vahtiaavilt cülciilt on linkki cüľľelle '''[[:$1]]''':",
+'nolinkshere' => "Mitäid eb viitata '''[[:$1]]-sõ'''",
 'isredirect' => 'mešaituzcülci',
 'istemplate' => 'sisällütüz šabloonii',
 'isimage' => 'kuvalinkki',
@@ -760,6 +780,7 @@ Neill kõhtoill piättä liikuttaa vai ühissää cüľľee cäzi.",
 
 # Namespace 8 related
 'allmessagesname' => 'Nimi',
+'allmessagesdefault' => 'Standartin teksta',
 'allmessages-language' => 'Ceeli:',
 'allmessages-filter-submit' => 'Mee',
 
@@ -926,6 +947,16 @@ Kui faili on muutõttu, siiz detaaľid võivad õlla kahõllaizõd muutõtull fa
 # Special:SpecialPages
 'specialpages' => 'Osoobenoid cüľľed',
 
+# External image whitelist
+'external_image_whitelist' => '# Jättägä kase rivi mokomassi, minenä-mokomana se on õõmaz.<pre>
+# Sijottaga tänne säännollizije ilmaud’d’e fragmentad (se õsa, kumpa on // väliz)
+# ned leevät võrrõttu ulko-kuvije URL-sõ.
+# Sopivad leeväd näütettü kuvijna, muud leeväd näütettü kuvijsõ viitauina.
+# Rivid, kummad alguta //-ss, pietä kommentaarijina. Rivid eväd õlla tunnuttu registra suhtõsõ.
+# Sijottaga säännollizije ilmaud’d’e fragmentad kaze rivi ülez.
+
+# Jättägä kase rivi mokomassi, minenä-mokomana se on õõmaz.',
+
 # Special:Tags
 'tag-filter' => "[[Special:Tags|Deskriptorije]] fil'tra:",
 'tags-edit' => 'muuttaa',
index 2fd6b2e..6b76fe3 100644 (file)
@@ -2177,7 +2177,7 @@ $1',
 'listusersfrom' => '给定显示用户条件:',
 'listusers-submit' => '显示',
 'listusers-noresult' => '找不到用户。',
-'listusers-blocked' => '(已封é\94\81ï¼\89',
+'listusers-blocked' => '(已封ç¦\81ï¼\89',
 
 # Special:ActiveUsers
 'activeusers' => '活跃用户列表',
@@ -2492,7 +2492,7 @@ $1',
 # Contributions
 'contributions' => '用户贡献',
 'contributions-title' => '$1的用户贡献',
-'mycontris' => '贡献记录',
+'mycontris' => '贡献',
 'contribsub2' => '$1的贡献($2)',
 'nocontribs' => '没有找到符合特征的更改。',
 'uctop' => '(最后更改)',
@@ -3022,7 +3022,7 @@ $1被封禁的理由是:“$2”',
 'pageinfo-header-restrictions' => '页面保护',
 'pageinfo-header-properties' => '页面属性',
 'pageinfo-display-title' => '显示的标题',
-'pageinfo-default-sort' => '默认排序',
+'pageinfo-default-sort' => '默认排序',
 'pageinfo-length' => '页面长度(字节)',
 'pageinfo-article-id' => '页面ID',
 'pageinfo-language' => '页面内容语言',
@@ -3984,5 +3984,5 @@ MediaWiki是基于使用目的而加以发布,然而不负任何担保责任
 'duration-millennia' => '$1千年',
 
 # Unknown messages
-'mytalk-parenthetical' => '讨论',
+'mytalk-parenthetical' => '留言',
 );
index 645bcd5..d64c4c3 100644 (file)
@@ -376,6 +376,7 @@ $messages = array(
 'namespaces' => '名字空間',
 'variants' => '變換',
 
+'navigation-heading' => '導航',
 'errorpagetitle' => '錯誤',
 'returnto' => '返回到$1。',
 'tagline' => '出自{{SITENAME}}',
@@ -617,10 +618,13 @@ $2',
 
 您可以以匿名方式繼續使用{{SITENAME}},或以相同或不同用戶身份<span class='plainlinks'>[$1 登入]</span>。
 請注意,如果你再次登入,此頁或會繼續顯示,直到您清除瀏覽器緩存。",
+'welcomeuser' => '歡迎,$1!',
 'welcomecreation' => '== 歡迎,$1! ==
 您的賬號已經建立。
 不要忘記設置[[Special:Preferences|{{SITENAME}}的個人參數]]。',
-'yourname' => '您的使用者名稱:',
+'welcomecreation-agora' => '您的賬號已經建立。
+不要忘記設置[[Special:Preferences|{{SITENAME}}的個人參數]]。',
+'yourname' => '用戶名:',
 'yourpassword' => '您的密碼:',
 'yourpasswordagain' => '再次輸入密碼:',
 'remembermypassword' => '在這個瀏覽器上記住我的登入資訊(可維持 $1 {{PLURAL:$1|天|天}})',
@@ -734,7 +738,7 @@ $2',
 'passwordreset-legend' => '重設密碼',
 'passwordreset-disabled' => '此維基上已禁止了重設密碼。',
 'passwordreset-pretext' => '{{PLURAL:$1||輸入下列其中一個}}',
-'passwordreset-username' => '使用者名稱:',
+'passwordreset-username' => '用戶名:',
 'passwordreset-domain' => '域名:',
 'passwordreset-capture' => '查看生成的電子郵件嗎?',
 'passwordreset-capture-help' => '如果您選中此框,電子郵件(包括臨時密碼)將顯示,並發送給用戶。',
@@ -1243,7 +1247,7 @@ $1",
 # Preferences page
 'preferences' => '偏好設定',
 'mypreferences' => '偏好設定',
-'prefs-edits' => '編輯æ\95¸é\87\8f:',
+'prefs-edits' => '編輯次æ\95¸:',
 'prefsnologin' => '還未登入',
 'prefsnologintext' => '您必須先<span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} 登入]</span>才能設置個人參數。',
 'changepassword' => '更改密碼',
@@ -1273,13 +1277,13 @@ $1",
 'restoreprefs' => '恢復所有預設設定',
 'prefs-editing' => '編輯',
 'prefs-edit-boxsize' => '編輯框尺寸',
-'rows' => '列:',
-'columns' => '欄:',
+'rows' => '行:',
+'columns' => '列:',
 'searchresultshead' => '搜尋',
-'resultsperpage' => '每頁顯示連結數',
+'resultsperpage' => '每頁顯示連結數',
 'stub-threshold' => '<a href="#" class="stub">短頁面連結</a>格式門檻值 (位元組):',
 'stub-threshold-disabled' => '已停用',
-'recentchangesdays' => '最近更改中的顯示日數:',
+'recentchangesdays' => '最近更改中的顯示日數',
 'recentchangesdays-max' => '最多$1{{PLURAL:$1|天}}',
 'recentchangescount' => '預設顯示的編輯數:',
 'prefs-help-recentchangescount' => '這個包括最近更改、頁面歷史以及日誌。',
@@ -1288,11 +1292,11 @@ $1",
 這裡有一個任意生成的值,供您選擇:$1',
 'savedprefs' => '您的個人偏好設定已經儲存。',
 'timezonelegend' => '時區:',
-'localtime' => '當地時間:',
+'localtime' => '當地時間',
 'timezoneuseserverdefault' => '使用預設($1)',
 'timezoneuseoffset' => '其他 (指定偏移)',
 'timezoneoffset' => '時差¹:',
-'servertime' => '伺服器時間:',
+'servertime' => '伺服器時間',
 'guesstimezone' => '從瀏覽器填寫',
 'timezoneregion-africa' => '非洲',
 'timezoneregion-america' => '美洲',
@@ -1316,16 +1320,16 @@ $1",
 'prefs-reset-intro' => '您可以利用這個頁面去重設您的參數設置到網站預設值。這個動作無法復原。',
 'prefs-emailconfirm-label' => '電子郵件確認:',
 'prefs-textboxsize' => '編輯框大小',
-'youremail' => '電子郵件:',
-'username' => '用戶名:',
-'uid' => '用戶ID:',
-'prefs-memberingroups' => '{{PLURAL:$1|群組}}:',
-'prefs-registration' => '註冊時間:',
+'youremail' => '電子郵件',
+'username' => '用戶名',
+'uid' => '用戶ID',
+'prefs-memberingroups' => '{{PLURAL:$1|群組}}',
+'prefs-registration' => '註冊時間',
 'yourrealname' => '真實姓名:',
 'yourlanguage' => '語言:',
 'yourvariant' => '內容語言變體:',
 'prefs-help-variant' => '您希望用於顯示本站內容的語種或拼寫語系。',
-'yournick' => '新簽名:',
+'yournick' => '新簽名',
 'prefs-help-signature' => '在討論頁面上的評論應該要用「<nowiki>~~~~</nowiki>」簽名,這樣便會轉換成{{GENDER:|你|妳|你}}的簽名以及一個時間截記。',
 'badsig' => '錯誤的原始簽名。請檢查HTML標籤。',
 'badsiglength' => '您的簽名過長。
@@ -1696,6 +1700,7 @@ $1',
 'backend-fail-notsame' => '$1已存在不同的文件。',
 'backend-fail-invalidpath' => '$1不是有效的存儲路徑。',
 'backend-fail-delete' => '無法刪除「$1」檔案。',
+'backend-fail-describe' => '無法修改檔案「$1」的元數據。',
 'backend-fail-alreadyexists' => '“$1”頁面已存在',
 'backend-fail-store' => '無法在$2存儲文件$1。',
 'backend-fail-copy' => '無法複製文件$1到$2。',
@@ -2007,7 +2012,7 @@ Template:消除歧義',
 'usereditcount' => '$1 次編輯',
 'usercreated' => '$1 $2{{GENDER:$3|創建}}',
 'newpages' => '最新頁面',
-'newpages-username' => '用戶名:',
+'newpages-username' => '用戶名',
 'ancientpages' => '最舊頁面',
 'move' => '移動',
 'movethispage' => '移動本頁',
@@ -2092,7 +2097,7 @@ Template:消除歧義',
 'listusersfrom' => '給定顯示用戶條件:',
 'listusers-submit' => '顯示',
 'listusers-noresult' => '找不到用戶。',
-'listusers-blocked' => '(已封)',
+'listusers-blocked' => '(已封)',
 
 # Special:ActiveUsers
 'activeusers' => '活躍用戶列表',
@@ -2421,7 +2426,7 @@ $1',
 # Contributions
 'contributions' => '用戶貢獻',
 'contributions-title' => '$1的用戶貢獻',
-'mycontris' => '貢獻',
+'mycontris' => '我的貢獻',
 'contribsub2' => '$1的貢獻 ($2)',
 'nocontribs' => '沒有找到符合特徵的更改。',
 'uctop' => '(最新修改)',
@@ -3844,9 +3849,9 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'logentry-move-move_redir-noredirect' => '$1通過重定向移動$3頁面至$4,不留重定向',
 'logentry-patrol-patrol' => '$1標記頁面$3的版本$4為已巡查',
 'logentry-patrol-patrol-auto' => '$1自動標記頁面$3的版本$4為已巡查',
-'logentry-newusers-newusers' => '$1建立新帳號',
-'logentry-newusers-create' => '$1創建賬戶',
-'logentry-newusers-create2' => '$1創建賬戶$3',
+'logentry-newusers-newusers' => '已建立用戶「$1」',
+'logentry-newusers-create' => '已建立用戶「$1」',
+'logentry-newusers-create2' => '用戶「$1」建立用戶「$3」',
 'logentry-newusers-autocreate' => '帳戶$1被自動創建',
 'newuserlog-byemail' => '密碼已由電子郵件寄出',
 
@@ -3922,5 +3927,5 @@ MediaWiki是基於使用目的而加以發佈,然而不負任何擔保責任
 'duration-millennia' => '$1千年',
 
 # Unknown messages
-'mytalk-parenthetical' => '對話頁',
+'mytalk-parenthetical' => '留言',
 );
index be2b8c3..56627f7 100644 (file)
@@ -7,7 +7,25 @@
  * @author Niklas Laxstrom, Tim Starling
  *
  * @copyright Copyright © 2010-2012, Niklas Laxström
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0
+ * or later
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ *
  * @file
  * @since 1.20
  */
index d7a396f..14a672e 100644 (file)
@@ -203,6 +203,7 @@ $wgMessageStructure = array(
                'variants',
        ),
        'miscellaneous2' => array(
+               'navigation-heading',
                'errorpagetitle',
                'returnto',
                'tagline',
@@ -425,7 +426,9 @@ $wgMessageStructure = array(
        ),
        'login' => array(
                'logouttext',
+               'welcomeuser',
                'welcomecreation',
+               'welcomecreation-agora',
                'yourname',
                'yourpassword',
                'yourpasswordagain',
@@ -1399,6 +1402,7 @@ $wgMessageStructure = array(
                'backend-fail-notsame',
                'backend-fail-invalidpath',
                'backend-fail-delete',
+               'backend-fail-describe',
                'backend-fail-alreadyexists',
                'backend-fail-store',
                'backend-fail-copy',
diff --git a/maintenance/sqlite/archives/patch-profiling.sql b/maintenance/sqlite/archives/patch-profiling.sql
new file mode 100644 (file)
index 0000000..4a07283
--- /dev/null
@@ -0,0 +1,12 @@
+-- profiling table
+-- This is optional
+
+CREATE TABLE /*_*/profiling (
+  pf_count int NOT NULL default 0,
+  pf_time float NOT NULL default 0,
+  pf_memory float NOT NULL default 0,
+  pf_name varchar(255) NOT NULL default '',
+  pf_server varchar(30) NOT NULL default ''
+);
+
+CREATE UNIQUE INDEX /*i*/pf_name_server ON /*_*/profiling (pf_name, pf_server);
index 068c58b..4787594 100644 (file)
@@ -95,8 +95,7 @@ header( 'Content-Type: text/html; charset=utf-8' );
 
        .table th,
        .table td {
-               padding: 8px;
-               line-height: 20px;
+               padding: 0.1em;
                text-align: left;
                vertical-align: top;
                border-top: 1px solid #ddd;
@@ -156,9 +155,9 @@ $dbr = wfGetDB( DB_SLAVE );
 
 if( !$dbr->tableExists( 'profiling' ) ) {
        echo '<p>No <code>profiling</code> table exists, so we can\'t show you anything.</p>'
-               . '<p>If you want to log profiling data, create the table using '
-               . '<code>maintenance/archives/patch-profiling.sql</code> and enable '
-               . '<code>$wgProfileToDatabase</code>.</p>'
+               . '<p>If you want to log profiling data, enable <code>$wgProfileToDatabase</code>'
+               . ' in your LocalSettings.php and run <code>maintenance/update.php</code> to'
+               . ' create the profiling table.'
                . '</body></html>';
        exit( 1 );
 }
@@ -193,10 +192,12 @@ class profile_point {
 
                $ex = isset( $expand[$this->name()] );
 
+               $anchor = str_replace( '"', '', $this->name() );
+
                if ( !$ex ) {
                        if ( count( $this->children ) ) {
                                $url = getEscapedProfileUrl( false, false, $expand + array( $this->name() => true ) );
-                               $extet = ' <a href="' . $url . '">[+]</a>';
+                               $extet = " <a id=\"{$anchor}\" href=\"{$url}#{$anchor}\">[+]</a>";
                        } else {
                                $extet = '';
                        }
@@ -207,8 +208,8 @@ class profile_point {
                                        $e += array( $name => $ep );
                                }
                        }
-
-                       $extet = ' <a href="' . getEscapedProfileUrl( false, false, $e ) . '">[–]</a>';
+                       $url = getEscapedProfileUrl( false, false, $e );
+                       $extet = " <a id=\"{$anchor}\" href=\"{$url}#{$anchor}\">[–]</a>";
                }
                ?>
                <tr>
index 71bfcab..7a1bd27 100644 (file)
@@ -67,6 +67,7 @@
  */
 
 ( function ( $, mw ) {
+       /*jshint onevar:false */
 
        /* Local scope */
 
                        }
 
                        if ( !this.sortDisabled ) {
-                               var $th = $( this ).addClass( table.config.cssHeader ).attr( 'title', msg[1] );
+                               $( this ).addClass( table.config.cssHeader ).attr( 'title', msg[1] );
                        }
 
                        // add cell to headerList
                $headers.removeClass( css[0] ).removeClass( css[1] ).attr( 'title', msg[1] );
 
                var h = [];
-               $headers.each( function ( offset ) {
+               $headers.each( function () {
                        if ( !this.sortDisabled ) {
                                h[this.column] = $( this );
                        }
                        ts.transformTable = {};
 
                        // Unpack the transform table
-                       var ascii = separatorTransformTable[0].split( "\t" ).concat( digitTransformTable[0].split( "\t" ) );
-                       var localised = separatorTransformTable[1].split( "\t" ).concat( digitTransformTable[1].split( "\t" ) );
+                       var ascii = separatorTransformTable[0].split( '\t' ).concat( digitTransformTable[0].split( '\t' ) );
+                       var localised = separatorTransformTable[1].split( '\t' ).concat( digitTransformTable[1].split( '\t' ) );
 
                        // Construct regex for number identification
                        for ( var i = 0; i < ascii.length; i++ ) {
 
                // We allow a trailing percent sign, which we just strip. This works fine
                // if percents and regular numbers aren't being mixed.
-               ts.numberRegex = new RegExp("^(" + "[-+\u2212]?[0-9][0-9,]*(\\.[0-9,]*)?(E[-+\u2212]?[0-9][0-9,]*)?" + // Fortran-style scientific
-               "|" + "[-+\u2212]?" + digitClass + "+[\\s\\xa0]*%?" + // Generic localised
-               ")$", "i");
+               ts.numberRegex = new RegExp('^(' + '[-+\u2212]?[0-9][0-9,]*(\\.[0-9,]*)?(E[-+\u2212]?[0-9][0-9,]*)?' + // Fortran-style scientific
+               '|' + '[-+\u2212]?' + digitClass + '+[\\s\\xa0]*%?' + // Generic localised
+               ')$', 'i');
        }
 
        function buildDateTable() {
                        construct: function ( $tables, settings ) {
                                return $tables.each( function ( i, table ) {
                                        // Declare and cache.
-                                       var $document, $headers, cache, config, sortOrder,
+                                       var $headers, cache, config,
                                                $table = $( table ),
-                                               shiftDown = 0,
                                                firstTime = true;
 
                                        // Quit if no tbody
                                                        return;
                                                }
                                        }
-                                       $table.addClass( "jquery-tablesorter" );
+                                       $table.addClass( 'jquery-tablesorter' );
 
                                        // FIXME config should probably not be stored in the plain table node
                                        // New config object.
 
                                                // try to auto detect column type, and store in tables config
                                                table.config.parsers = buildParserCache( table, $headers );
-                                       };
+                                       }
 
                                        // Apply event handling to headers
                                        // this is too big, perhaps break it out?
                                                var totalRows = ( $table[0].tBodies[0] && $table[0].tBodies[0].rows.length ) || 0;
                                                if ( !table.sortDisabled && totalRows > 0 ) {
 
-                                                       // Cache jQuery object
-                                                       var $cell = $( this );
-
                                                        // Get current column index
                                                        var i = this.column;
 
                        },
 
                        formatDigit: function ( s ) {
+                               var out, c, p, i;
                                if ( ts.transformTable !== false ) {
-                                       var out = '',
-                                               c;
-                                       for ( var p = 0; p < s.length; p++ ) {
+                                       out = '';
+                                       for ( p = 0; p < s.length; p++ ) {
                                                c = s.charAt(p);
                                                if ( c in ts.transformTable ) {
                                                        out += ts.transformTable[c];
                                        }
                                        s = out;
                                }
-                               var i = parseFloat( s.replace( /[, ]/g, '' ).replace( "\u2212", '-' ) );
-                               return ( isNaN(i)) ? 0 : i;
+                               i = parseFloat( s.replace( /[, ]/g, '' ).replace( '\u2212', '-' ) );
+                               return isNaN( i ) ? 0 : i;
                        },
 
                        formatFloat: function ( s ) {
                                var i = parseFloat(s);
-                               return ( isNaN(i)) ? 0 : i;
+                               return isNaN( i ) ? 0 : i;
                        },
 
                        formatInt: function ( s ) {
                                var i = parseInt( s, 10 );
-                               return ( isNaN(i)) ? 0 : i;
+                               return isNaN( i ) ? 0 : i;
                        },
 
                        clearTableBody: function ( table ) {
-                               if ( $.browser.msie ) {
-                                       var empty = function ( el ) {
-                                               while ( el.firstChild ) {
-                                                       el.removeChild( el.firstChild );
-                                               }
-                                       };
-                                       empty( table.tBodies[0] );
-                               } else {
-                                       table.tBodies[0].innerHTML = '';
-                               }
+                               $( table.tBodies[0] ).empty();
                        }
                };
 
        // Add default parsers
        ts.addParser( {
                id: 'text',
-               is: function ( s ) {
+               is: function () {
                        return true;
                },
                format: function ( s ) {
                is: function ( s ) {
                        return ( ts.dateRegex[0].test(s) || ts.dateRegex[1].test(s) || ts.dateRegex[2].test(s ));
                },
-               format: function ( s, table ) {
+               format: function ( s ) {
                        var match;
                        s = $.trim( s.toLowerCase() );
 
 
        ts.addParser( {
                id: 'number',
-               is: function ( s, table ) {
+               is: function ( s ) {
                        return $.tablesorter.numberRegex.test( $.trim( s ));
                },
                format: function ( s ) {
index d323442..6cbccbf 100644 (file)
@@ -25,7 +25,7 @@
 
        $.extend( mw.Api.prototype, {
                /**
-                * Convinience method for 'action=watch'.
+                * Convenience method for 'action=watch'.
                 *
                 * @param page {String|mw.Title} Full page name or instance of mw.Title
                 * @param success {Function} Callback to which the watch object will be passed.
@@ -38,7 +38,7 @@
                        return doWatchInternal.call( this, page, success, err );
                },
                /**
-                * Convinience method for 'action=watch&unwatch=1'.
+                * Convenience method for 'action=watch&unwatch=1'.
                 *
                 * @param page {String|mw.Title} Full page name or instance of mw.Title
                 * @param success {Function} Callback to which the watch object will be passed.
index c0c77aa..65eb5a6 100644 (file)
@@ -2,10 +2,10 @@
  * Bosnian (bosanski) language functions
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'bs', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       var grammarForms = mediaWiki.language.getData( 'bs', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'instrumental': // instrumental
index a42a8f7..b2c9c08 100644 (file)
@@ -2,10 +2,10 @@
  * Lower Sorbian (Dolnoserbski) language functions
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'dsb', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       var grammarForms = mediaWiki.language.getData( 'dsb', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'instrumental': // instrumental
index 374698d..61c6c10 100644 (file)
@@ -3,21 +3,24 @@
  *  @author Santhosh Thottingal
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'fi', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       var grammarForms, aou, origWord;
+
+       grammarForms = mediaWiki.language.getData( 'fi', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
 
        // vowel harmony flag
-       var aou = word.match( /[aou][^äöy]*$/i );
-       var origWord = word;
+       aou = word.match( /[aou][^äöy]*$/i );
+       origWord = word;
        if ( word.match( /wiki$/i ) ) {
                aou = false;
        }
        //append i after final consonant
-       if ( word.match( /[bcdfghjklmnpqrstvwxz]$/i ) )
+       if ( word.match( /[bcdfghjklmnpqrstvwxz]$/i ) ) {
                word += 'i';
+       }
 
        switch ( form ) {
                case 'genitive':
index a27b489..c13e832 100644 (file)
@@ -2,10 +2,11 @@
  * Irish (Gaeilge) language functions
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'ga', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       /*jshint onecase:true */
+       var grammarForms = mediaWiki.language.getData( 'ga', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'ainmlae':
index d35f77e..13d457b 100644 (file)
@@ -3,26 +3,26 @@
  */
 
 mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'he', 'grammarForms' );
+       var grammarForms = mediaWiki.language.getData( 'he', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'prefixed':
                case 'תחילית': // the same word in Hebrew
                        // Duplicate prefixed "Waw", but only if it's not already double
-                       if ( word.substr( 0, 1 ) === "ו" && word.substr( 0, 2 ) !== "וו" ) {
-                               word = "ו" + word;
+                       if ( word.substr( 0, 1 ) === 'ו' && word.substr( 0, 2 ) !== 'וו' ) {
+                               word = 'ו' + word;
                        }
 
                        // Remove the "He" if prefixed
-                       if ( word.substr( 0, 1 ) === "ה" ) {
+                       if ( word.substr( 0, 1 ) === 'ה' ) {
                                word = word.substr( 1, word.length );
                        }
 
                        // Add a hyphen (maqaf) before numbers and non-Hebrew letters
-                       if (  word.substr( 0, 1 ) < "א" ||  word.substr( 0, 1 ) > "ת" ) {
-                               word = "־" + word;
+                       if (  word.substr( 0, 1 ) < 'א' ||  word.substr( 0, 1 ) > 'ת' ) {
+                               word = '־' + word;
                        }
        }
        return word;
index 211d67b..77dca75 100644 (file)
@@ -2,10 +2,10 @@
  * Upper Sorbian (Hornjoserbsce) language functions
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms =mw.language.getData( 'hsb', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       var grammarForms = mediaWiki.language.getData( 'hsb', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'instrumental': // instrumental
index eb3f1f3..23b0c12 100644 (file)
@@ -3,10 +3,10 @@
  *  @author Santhosh Thottingal
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'hu', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       var grammarForms = mediaWiki.language.getData( 'hu', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'rol':
index 215e750..65081bd 100644 (file)
@@ -2,10 +2,11 @@
  * Armenian (Հայերեն) language functions
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'hy', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       /*jshint onecase:true */
+       var grammarForms = mediaWiki.language.getData( 'hy', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
 
        // These rules are not perfect, but they are currently only used for site names so it doesn't
@@ -13,14 +14,15 @@ mediaWiki.language.convertGrammar = function( word, form ) {
 
        switch ( form ) {
                case 'genitive': // սեռական հոլով
-                       if ( word.substr( -1 ) === 'ա' )
+                       if ( word.substr( -1 ) === 'ա' ) {
                                word = word.substr( 0, word.length -1 )  + 'այի';
-                       else if ( word.substr( -1 ) === 'ո' )
+                       } else if ( word.substr( -1 ) === 'ո' ) {
                                word = word.substr( 0, word.length - 1 ) + 'ոյի';
-                       else if ( word.substr( -4 ) === 'գիրք' )
+                       } else if ( word.substr( -4 ) === 'գիրք' ) {
                                word = word.substr( 0, word.length - 4 ) + 'գրքի';
-                       else
+                       } else {
                                word = word + 'ի';
+                       }
                        break;
                }
        return word;
index 313bb1c..2711024 100644 (file)
@@ -3,10 +3,10 @@
  * @author Santhosh Thottingal
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'la', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       var grammarForms = mediaWiki.language.getData( 'la', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'genitive':
index 431e38c..682b390 100644 (file)
@@ -4,23 +4,24 @@
  */
 
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'os', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       var grammarForms = mediaWiki.language.getData( 'os', 'grammarForms' ),
+               // Ending for allative case
+               endAllative = 'мæ',
+               // Variable for 'j' beetwen vowels
+               jot = '',
+               // Variable for "-" for not Ossetic words
+               hyphen = '',
+               // Variable for ending
+               ending = '';
+
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
-       // Ending for allative case
-       var end_allative = 'мæ';
-       // Variable for 'j' beetwen vowels
-       var jot = '';
-       // Variable for "-" for not Ossetic words
-       var hyphen = '';
-       // Variable for ending
-       var ending = '';
        // Checking if the $word is in plural form
        if ( word.match( /тæ$/i ) ) {
                word = word.substring( 0, word.length - 1 );
-               end_allative = 'æм';
+               endAllative = 'æм';
        }
        // Works if word is in singular form.
        // Checking if word ends on one of the vowels: е, ё, и, о, ы, э, ю, я.
@@ -45,10 +46,10 @@ mediaWiki.language.convertGrammar = function( word, form ) {
                        ending = hyphen + jot + 'æн';
                        break;
                case 'allative':
-                       ending = hyphen + end_allative;
+                       ending = hyphen + endAllative;
                        break;
                case 'ablative':
-                       if ( jot == 'й' ) {
+                       if ( jot === 'й' ) {
                                ending = hyphen + jot + 'æ';
                        }
                        else {
index cfdbfc3..b27dea4 100644 (file)
@@ -2,27 +2,28 @@
  * Russian (Русский) language functions
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'ru', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       /*jshint noempty:false, onecase:true */
+       var grammarForms = mediaWiki.language.getData( 'ru', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'genitive': // родительный падеж
-                       if ( (  word.substr( word.length - 4 )  == 'вики' ) || (  word.substr( word.length - 4 ) == 'Вики' ) ) {
-                       }
-                       else if ( word.substr( word.length - 1 ) == 'ь' )
+                       if ( (  word.substr( word.length - 4 ) === 'вики' ) || (  word.substr( word.length - 4 ) === 'Вики' ) ) {
+                       } else if ( word.substr( word.length - 1 ) === 'ь' ) {
                                word = word.substr(0, word.length - 1 ) + 'я';
-                       else if ( word.substr( word.length - 2 ) == 'ия' )
+                       } else if ( word.substr( word.length - 2 ) === 'ия' ) {
                                word = word.substr(0, word.length - 2 ) + 'ии';
-                       else if ( word.substr( word.length - 2 ) == 'ка' )
+                       } else if ( word.substr( word.length - 2 ) === 'ка' ) {
                                word = word.substr(0, word.length - 2 ) + 'ки';
-                       else if ( word.substr( word.length - 2 )  == 'ти' )
+                       } else if ( word.substr( word.length - 2 )  === 'ти' ) {
                                word = word.substr(0, word.length - 2 ) + 'тей';
-                       else if ( word.substr( word.length - 2 ) == 'ды' )
+                       } else if ( word.substr( word.length - 2 ) === 'ды' ) {
                                word = word.substr(0, word.length - 2 ) + 'дов';
-                       else if ( word.substr( word.length - 3 ) == 'ник' )
+                       } else if ( word.substr( word.length - 3 ) === 'ник' ) {
                                word = word.substr(0, word.length - 3 ) + 'ника';
+                       }
                        break;
        }
        return word;
index acd00bf..fb335b6 100644 (file)
@@ -2,10 +2,10 @@
  * Slovenian (Slovenščina) language functions
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'sl', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       var grammarForms = mediaWiki.language.getData( 'sl', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'mestnik': // locative
index ee110b0..5e56b66 100644 (file)
@@ -2,33 +2,35 @@
  * Ukrainian (Українська) language functions
  */
 
-mediaWiki.language.convertGrammar = function( word, form ) {
-       var grammarForms = mw.language.getData( 'uk', 'grammarForms' );
+mediaWiki.language.convertGrammar = function ( word, form ) {
+       /*jshint noempty:false */
+       var grammarForms = mediaWiki.language.getData( 'uk', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
-               return grammarForms[form][word] ;
+               return grammarForms[form][word];
        }
        switch ( form ) {
                case 'genitive': // родовий відмінок
-                       if ( ( word.substr( word.length - 4 ) == 'вікі' ) || ( word.substr( word.length - 4 ) == 'Вікі' ) ) {
-                       }
-                       else if ( word.substr( word.length - 1 ) == 'ь' )
+                       if ( ( word.substr( word.length - 4 ) === 'вікі' ) || ( word.substr( word.length - 4 ) === 'Вікі' ) ) {
+                       } else if ( word.substr( word.length - 1 ) === 'ь' ) {
                                word = word.substr(0, word.length - 1 ) + 'я';
-                       else if ( word.substr( word.length - 2 ) == 'ія' )
+                       } else if ( word.substr( word.length - 2 ) === 'ія' ) {
                                word = word.substr(0, word.length - 2 ) + 'ії';
-                       else if ( word.substr( word.length - 2 ) == 'ка' )
+                       } else if ( word.substr( word.length - 2 ) === 'ка' ) {
                                word = word.substr(0, word.length - 2 ) + 'ки';
-                       else if ( word.substr( word.length - 2 ) == 'ти' )
+                       } else if ( word.substr( word.length - 2 ) === 'ти' ) {
                                word = word.substr(0, word.length - 2 ) + 'тей';
-                       else if ( word.substr( word.length - 2 ) == 'ды' )
+                       } else if ( word.substr( word.length - 2 ) === 'ды' ) {
                                word = word.substr(0, word.length - 2 ) + 'дов';
-                       else if ( word.substr( word.length - 3 ) == 'ник' )
+                       } else if ( word.substr( word.length - 3 ) === 'ник' ) {
                                word = word.substr(0, word.length - 3 ) + 'ника';
+                       }
                        break;
                case 'accusative': // знахідний відмінок
-                       if ( ( word.substr( word.length - 4 ) == 'вікі' ) || ( word.substr( word.length - 4 ) == 'Вікі' ) ) {
+                       if ( ( word.substr( word.length - 4 ) === 'вікі' ) || ( word.substr( word.length - 4 ) === 'Вікі' ) ) {
                        }
-                       else if ( word.substr( word.length - 2 ) == 'ія' )
+                       else if ( word.substr( word.length - 2 ) === 'ія' ) {
                                word = word.substr(0, word.length - 2 ) + 'ію';
+                       }
                        break;
        }
        return word;
index 989a986..d8d092b 100644 (file)
@@ -79,7 +79,10 @@ jQuery( document ).ready( function ( $ ) {
        // <a href="#.."> will naturally set the hash, handled by onhashchange.
        // But other things that change the hash will also be catched (e.g. using
        // the Back and Forward browser navigation).
-       if ( 'onhashchange' in window ) {
+       // Note the special check for IE "compatibility" mode.
+       if ( 'onhashchange' in window &&
+               ( document.documentMode === undefined || document.documentMode >= 8 )
+       ) {
                $(window).on( 'hashchange' , function () {
                        var hash = window.location.hash;
                        if ( hash.match( /^#mw-prefsection-[\w\-]+/ ) ) {
index 4d18eb5..0423f8e 100644 (file)
@@ -285,10 +285,6 @@ class CologneBlueTemplate extends BaseTemplate {
                        </a>
                </p>
                <p id="sitesub"><?php echo wfMessage( 'sitesubtitle' )->escaped() ?></p>
-               <div id="toplinks" role="navigation">
-                       <p id="syslinks"><?php echo $this->sysLinks() ?></p>
-                       <p id="variantlinks"><?php echo $this->variantLinks() ?></p>
-               </div>
                <div id="linkcollection" role="navigation">
                        <div id="langlinks"><?php echo str_replace( '<br />', '', $this->otherLanguages() ) ?></div>
                        <?php echo $this->getSkin()->getCategories() ?>
@@ -355,7 +351,14 @@ class CologneBlueTemplate extends BaseTemplate {
 ?>
        </div>
 </div>
-<?php echo $this->quickBar() ?>
+<div id="mw-navigation">
+       <h2><?php echo wfMessage( 'navigation-heading' )->escaped() ?></h2>
+       <div id="toplinks" role="navigation">
+               <p id="syslinks"><?php echo $this->sysLinks() ?></p>
+               <p id="variantlinks"><?php echo $this->variantLinks() ?></p>
+       </div>
+       <?php echo $this->quickBar() ?>
+</div>
 <?php
                $s = ob_get_contents();
                ob_end_clean();
@@ -508,7 +511,7 @@ class CologneBlueTemplate extends BaseTemplate {
                foreach ( $bar as $heading => $data ) {
                        $portletId = Sanitizer::escapeId( "p-$heading" );
                        $headingMsg = wfMessage( $idToMessage[$heading] ? $idToMessage[$heading] : $heading );
-                       $headingHTML = "<h6>" . ( $headingMsg->exists() ? $headingMsg->escaped() : htmlspecialchars( $heading ) ) . "</h6>";
+                       $headingHTML = "<h3>" . ( $headingMsg->exists() ? $headingMsg->escaped() : htmlspecialchars( $heading ) ) . "</h3>";
                        $listHTML = "";
 
                        if ( is_array( $data ) ) {
index ce850a0..900bdd8 100644 (file)
@@ -106,6 +106,7 @@ class ModernTemplate extends MonoBookTemplate {
        </div><!-- mw_contentwrapper -->
 
        <div id="mw_portlets"<?php $this->html("userlangattributes") ?>>
+       <h2><?php $this->msg( 'navigation-heading' ) ?></h2>
 
        <!-- portlets -->
        <?php $this->renderPortals( $this->data['sidebar'] ); ?>
@@ -119,7 +120,7 @@ class ModernTemplate extends MonoBookTemplate {
 
        <!-- personal portlet -->
        <div class="portlet" id="p-personal" role="navigation">
-               <h5><?php $this->msg('personaltools') ?></h5>
+               <h3><?php $this->msg('personaltools') ?></h3>
                <div class="pBody">
                        <ul>
 <?php          foreach($this->getPersonalTools() as $key => $item) { ?>
index 955f05b..1b262a6 100644 (file)
@@ -107,9 +107,10 @@ class MonoBookTemplate extends BaseTemplate {
        </div>
 </div></div>
 <div id="column-one"<?php $this->html('userlangattributes')  ?>>
+       <h2><?php $this->msg( 'navigation-heading' ) ?></h2>
 <?php $this->cactions(); ?>
        <div class="portlet" id="p-personal" role="navigation">
-               <h5><?php $this->msg('personaltools') ?></h5>
+               <h3><?php $this->msg('personaltools') ?></h3>
                <div class="pBody">
                        <ul<?php $this->html('userlangattributes') ?>>
 <?php          foreach($this->getPersonalTools() as $key => $item) { ?>
@@ -204,7 +205,7 @@ echo $footerEnd;
                global $wgUseTwoButtonsSearchForm;
 ?>
        <div id="p-search" class="portlet" role="search">
-               <h5><label for="searchInput"><?php $this->msg('search') ?></label></h5>
+               <h3><label for="searchInput"><?php $this->msg('search') ?></label></h3>
                <div id="searchBody" class="pBody">
                        <form action="<?php $this->text('wgScript') ?>" id="searchform">
                                <input type='hidden' name="title" value="<?php $this->text('searchtitle') ?>"/>
@@ -231,7 +232,7 @@ echo $footerEnd;
        function cactions() {
 ?>
        <div id="p-cactions" class="portlet" role="navigation">
-               <h5><?php $this->msg('views') ?></h5>
+               <h3><?php $this->msg('views') ?></h3>
                <div class="pBody">
                        <ul><?php
                                foreach($this->data['content_actions'] as $key => $tab) {
@@ -248,7 +249,7 @@ echo $footerEnd;
        function toolbox() {
 ?>
        <div class="portlet" id="p-tb" role="navigation">
-               <h5><?php $this->msg('toolbox') ?></h5>
+               <h3><?php $this->msg('toolbox') ?></h3>
                <div class="pBody">
                        <ul>
 <?php
@@ -271,7 +272,7 @@ echo $footerEnd;
                if( $this->data['language_urls'] ) {
 ?>
        <div id="p-lang" class="portlet" role="navigation">
-               <h5<?php $this->html('userlangattributes') ?>><?php $this->msg('otherlanguages') ?></h5>
+               <h3<?php $this->html('userlangattributes') ?>><?php $this->msg('otherlanguages') ?></h3>
                <div class="pBody">
                        <ul>
 <?php          foreach($this->data['language_urls'] as $key => $langlink) { ?>
@@ -299,7 +300,7 @@ echo $footerEnd;
                echo '  ' . Html::openElement( 'div', $portletAttribs );
 ?>
 
-               <h5><?php $msg = wfMessage( $bar ); echo htmlspecialchars( $msg->exists() ? $msg->text() : $bar ); ?></h5>
+               <h3><?php $msg = wfMessage( $bar ); echo htmlspecialchars( $msg->exists() ? $msg->text() : $bar ); ?></h3>
                <div class='pBody'>
 <?php   if ( is_array( $cont ) ) { ?>
                        <ul>
index de11639..49a0ad5 100644 (file)
@@ -2,6 +2,22 @@
 /**
  * Standard (a.k.a. Classic) skin: old MediaWiki default skin
  *
+ * 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 Skins
  */
index 097bdde..92eb3ad 100644 (file)
@@ -227,25 +227,28 @@ class VectorTemplate extends BaseTemplate {
                        <!-- /bodyContent -->
                </div>
                <!-- /content -->
-               <!-- header -->
-               <div id="mw-head" class="noprint">
-                       <?php $this->renderNavigation( 'PERSONAL' ); ?>
-                       <div id="left-navigation">
-                               <?php $this->renderNavigation( array( 'NAMESPACES', 'VARIANTS' ) ); ?>
-                       </div>
-                       <div id="right-navigation">
-                               <?php $this->renderNavigation( array( 'VIEWS', 'ACTIONS', 'SEARCH' ) ); ?>
+               <div id="mw-navigation">
+                       <h2><?php $this->msg( 'navigation-heading' ) ?></h2>
+                       <!-- header -->
+                       <div id="mw-head" class="noprint">
+                               <?php $this->renderNavigation( 'PERSONAL' ); ?>
+                               <div id="left-navigation">
+                                       <?php $this->renderNavigation( array( 'NAMESPACES', 'VARIANTS' ) ); ?>
+                               </div>
+                               <div id="right-navigation">
+                                       <?php $this->renderNavigation( array( 'VIEWS', 'ACTIONS', 'SEARCH' ) ); ?>
+                               </div>
                        </div>
-               </div>
-               <!-- /header -->
-               <!-- panel -->
+                       <!-- /header -->
+                       <!-- panel -->
                        <div id="mw-panel" class="noprint">
                                <!-- logo -->
                                        <div id="p-logo" role="banner"><a style="background-image: url(<?php $this->text( 'logopath' ) ?>);" href="<?php echo htmlspecialchars( $this->data['nav_urls']['mainpage']['href'] ) ?>" <?php echo Xml::expandAttributes( Linker::tooltipAndAccesskeyAttribs( 'p-logo' ) ) ?>></a></div>
                                <!-- /logo -->
                                <?php $this->renderPortals( $this->data['sidebar'] ); ?>
                        </div>
-               <!-- /panel -->
+                       <!-- /panel -->
+               </div>
                <!-- footer -->
                <div id="footer" role="contentinfo"<?php $this->html( 'userlangattributes' ) ?>>
                        <?php foreach( $this->getFooterLinks() as $category => $links ): ?>
@@ -331,7 +334,7 @@ class VectorTemplate extends BaseTemplate {
                }
                ?>
 <div class="portal" role="navigation" id='<?php echo Sanitizer::escapeId( "p-$name" ) ?>'<?php echo Linker::tooltip( 'p-' . $name ) ?>>
-       <h5<?php $this->html( 'userlangattributes' ) ?>><?php $msgObj = wfMessage( $msg ); echo htmlspecialchars( $msgObj->exists() ? $msgObj->text() : $msg ); ?></h5>
+       <h3<?php $this->html( 'userlangattributes' ) ?>><?php $msgObj = wfMessage( $msg ); echo htmlspecialchars( $msgObj->exists() ? $msgObj->text() : $msg ); ?></h3>
        <div class="body">
 <?php
                if ( is_array( $content ) ): ?>
@@ -381,7 +384,7 @@ class VectorTemplate extends BaseTemplate {
                                case 'NAMESPACES':
 ?>
 <div id="p-namespaces" role="navigation" class="vectorTabs<?php if ( count( $this->data['namespace_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
-       <h5><?php $this->msg( 'namespaces' ) ?></h5>
+       <h3><?php $this->msg( 'namespaces' ) ?></h3>
        <ul<?php $this->html( 'userlangattributes' ) ?>>
                <?php foreach ( $this->data['namespace_urls'] as $link ): ?>
                        <li <?php echo $link['attributes'] ?>><span><a href="<?php echo htmlspecialchars( $link['href'] ) ?>" <?php echo $link['key'] ?>><?php echo htmlspecialchars( $link['text'] ) ?></a></span></li>
@@ -393,14 +396,14 @@ class VectorTemplate extends BaseTemplate {
                                case 'VARIANTS':
 ?>
 <div id="p-variants" role="navigation" class="vectorMenu<?php if ( count( $this->data['variant_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
-       <h4>
+       <h3 id="mw-vector-current-variant">
        <?php foreach ( $this->data['variant_urls'] as $link ): ?>
                <?php if ( stripos( $link['attributes'], 'selected' ) !== false ): ?>
                        <?php echo htmlspecialchars( $link['text'] ) ?>
                <?php endif; ?>
        <?php endforeach; ?>
-       </h4>
-       <h5><span><?php $this->msg( 'variants' ) ?></span><a href="#"></a></h5>
+       </h3>
+       <h3><span><?php $this->msg( 'variants' ) ?></span><a href="#"></a></h3>
        <div class="menu">
                <ul>
                        <?php foreach ( $this->data['variant_urls'] as $link ): ?>
@@ -414,7 +417,7 @@ class VectorTemplate extends BaseTemplate {
                                case 'VIEWS':
 ?>
 <div id="p-views" role="navigation" class="vectorTabs<?php if ( count( $this->data['view_urls'] ) == 0 ) { echo ' emptyPortlet'; } ?>">
-       <h5><?php $this->msg('views') ?></h5>
+       <h3><?php $this->msg('views') ?></h3>
        <ul<?php $this->html('userlangattributes') ?>>
                <?php foreach ( $this->data['view_urls'] as $link ): ?>
                        <li<?php echo $link['attributes'] ?>><span><a href="<?php echo htmlspecialchars( $link['href'] ) ?>" <?php echo $link['key'] ?>><?php
@@ -431,7 +434,7 @@ class VectorTemplate extends BaseTemplate {
                                case 'ACTIONS':
 ?>
 <div id="p-cactions" role="navigation" class="vectorMenu<?php if ( count( $this->data['action_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
-       <h5><span><?php $this->msg( 'actions' ) ?></span><a href="#"></a></h5>
+       <h3><span><?php $this->msg( 'actions' ) ?></span><a href="#"></a></h3>
        <div class="menu">
                <ul<?php $this->html( 'userlangattributes' ) ?>>
                        <?php foreach ( $this->data['action_urls'] as $link ): ?>
@@ -445,7 +448,7 @@ class VectorTemplate extends BaseTemplate {
                                case 'PERSONAL':
 ?>
 <div id="p-personal" role="navigation" class="<?php if ( count( $this->data['personal_urls'] ) == 0 ) echo ' emptyPortlet'; ?>">
-       <h5><?php $this->msg( 'personaltools' ) ?></h5>
+       <h3><?php $this->msg( 'personaltools' ) ?></h3>
        <ul<?php $this->html( 'userlangattributes' ) ?>>
 <?php
                                        $personalTools = $this->getPersonalTools();
@@ -474,7 +477,7 @@ class VectorTemplate extends BaseTemplate {
                                case 'SEARCH':
 ?>
 <div id="p-search" role="search">
-       <h5<?php $this->html( 'userlangattributes' ) ?>><label for="searchInput"><?php $this->msg( 'search' ) ?></label></h5>
+       <h3<?php $this->html( 'userlangattributes' ) ?>><label for="searchInput"><?php $this->msg( 'search' ) ?></label></h3>
        <form action="<?php $this->text( 'wgScript' ) ?>" id="searchform">
                <?php if ( $wgVectorUseSimpleSearch && $this->getSkin()->getUser()->getOption( 'vector-simplesearch' ) ): ?>
                <div id="simpleSearch">
index 0d9615f..349638a 100644 (file)
@@ -97,7 +97,13 @@ textarea {
        color: #446688;
 }
 
-#quickbar h6 {
+/* Hide, but keep accessible for screen-readers */
+#mw-navigation h2 {
+       position: absolute;
+       top: -9999px;
+}
+
+#quickbar h3 {
        font-family: Verdana, Arial, sans-serif;
        font-size: 10pt;
        font-weight: bold;
index ed4e8c5..34d3357 100644 (file)
        direction: rtl;
 }
 
+/* User-Agent styles for new HTML5 elements */
+mark {
+       background-color: yellow;
+       color: black;
+}
+
 /* Input types that should follow user direction, like buttons */
 /* TODO: What about buttons in wikipage content ? */
 input[type="submit"],
index 80cdcda..eff62ab 100644 (file)
@@ -58,7 +58,7 @@ body {
        font-variant: small-caps;
 }
 
-#p-personal h5 {
+#p-personal h3 {
        display: none;
 }
 
@@ -125,6 +125,12 @@ body {
        background-color: #f0f0f0;
 }
 
+/* Hide, but keep accessible for screen-readers */
+#mw_portlets h2 {
+       position: absolute;
+       top: -9999px;
+}
+
 #mw_main {
        padding: 0 0 0 0;
        margin: 0 0 0 0;
@@ -170,11 +176,12 @@ textarea {
        margin-top: .4em;
 }
 
-.portlet h5 {
+.portlet h3 {
        padding: 0.1em 0 0.3em 1em;
        margin: 0 0 0 0;
        background-color: #dddddd;
        font-weight: bold;
+       font-size: 0.83em;
        border-bottom: solid 1px #3c78b5;
        height: 1.1em;
 }
@@ -243,7 +250,7 @@ ul {
        color: white;
 }
 
-#p-cactions h5 {
+#p-cactions h3 {
        display: none;
 }
 
index 5866d97..4cbc093 100644 (file)
@@ -24,6 +24,11 @@ div#content {
 div#column-one {
        padding-top: 160px;
 }
+/* Hide, but keep accessible for screen-readers */
+#column-one h2 {
+       position: absolute;
+       top: -9999px;
+}
 div#content {
        background: white;
        color: black;
@@ -71,6 +76,7 @@ a.new,
 }
 
 ul {
+       list-style-type: square;
        /* @embed */
        list-style-image: url(bullet.gif);
 }
@@ -224,12 +230,7 @@ table.rimage {
        width: 11.6em;
        overflow: hidden;
 }
-.portlet h4 {
-       font-size: 95%;
-       font-weight: normal;
-       white-space: nowrap;
-}
-.portlet h5 {
+.portlet h3 {
        background: transparent;
        padding: 0 1em 0 .5em;
        display: inline;
@@ -239,18 +240,6 @@ table.rimage {
        font-weight: normal;
        white-space: nowrap;
 }
-.portlet h6 {
-       background: #ffae2e;
-       border: 1px solid #2f6fab;
-       border-style: solid solid none solid;
-       padding: 0 1em 0 1em;
-       text-transform: lowercase;
-       display: block;
-       font-size: 1em;
-       height: 1.2em;
-       font-weight: normal;
-       white-space: nowrap;
-}
 .pBody {
        font-size: 95%;
        background-color: white;
@@ -259,18 +248,8 @@ table.rimage {
        border: 1px solid #aaa;
        padding: 0 .8em .3em .5em;
 }
-.portlet h1,
-.portlet h2,
-.portlet h3,
-.portlet h4 {
-       margin: 0;
-       padding: 0;
-}
 .portlet ul {
        line-height: 1.5em;
-       list-style-type: square;
-       /* @embed */
-       list-style-image: url(bullet.gif);
        font-size: 95%;
 }
 .portlet li {
@@ -291,7 +270,7 @@ table.rimage {
        width: 12em;
        overflow: visible;
 }
-#p-logo h5 {
+#p-logo h3 {
        display: none;
 }
 #p-logo a,
@@ -352,7 +331,7 @@ input.searchButton {
        overflow: visible;
        line-height: 1.2em;
 }
-#p-personal h5 {
+#p-personal h3 {
        display: none;
 }
 #p-personal .portlet,
@@ -372,7 +351,8 @@ input.searchButton {
        padding: 0 2em 0 3em;
        margin: 0;
        text-align: right;
-       list-style: none;
+       list-style-type: none;
+       list-style-image: none;
        z-index: 0;
        background: none;
        cursor: default;
@@ -432,11 +412,11 @@ li#pt-login {
        background: none;
        border-collapse: collapse;
        padding-left: 1em;
-       list-style: none;
        font-size: 95%;
 }
 #p-cactions ul {
-       list-style: none;
+       list-style-type: none;
+       list-style-image: none;
 }
 #p-cactions li {
        display: inline;
@@ -474,7 +454,7 @@ li#pt-login {
        text-decoration: none;
        background-color: white;
 }
-#p-cactions h5 {
+#p-cactions h3 {
        display: none;
 }
 #p-cactions li.istalk {
@@ -515,8 +495,7 @@ li#ca-print {
 }
 
 /* Override text-transform on languages where capitalization is significant */
-.capitalize-all-nouns .portlet h5,
-.capitalize-all-nouns .portlet h6,
+.capitalize-all-nouns .portlet h3,
 .capitalize-all-nouns #p-personal ul,
 .capitalize-all-nouns #p-cactions ul li a {
        text-transform: none;
@@ -824,7 +803,8 @@ div#searchTarget {
 }
 
 div#searchTarget ul li {
-       list-style: none;
+       list-style-type: none;
+       list-style-image: none;
 }
 
 div#searchTarget ul li:before {
index 7b4f2ae..edb1d7d 100644 (file)
@@ -84,6 +84,12 @@ a:hover {
        left: 0;
 }
 
+/* Hide, but keep accessible for screen-readers */
+#column-one h2 {
+       position: absolute;
+       top: -9999px;
+}
+
 body {
        margin: 0;
        padding: 0;
index de5c247..23975e7 100644 (file)
@@ -37,6 +37,11 @@ div#content {
        color: black;
        direction: ltr;
 }
+/* Hide, but keep accessible for screen-readers */
+#mw-navigation h2 {
+       position: absolute;
+       top: -9999px;
+}
 /* Head */
 #mw-page-base {
        height: 5em;
@@ -61,7 +66,7 @@ div#mw-head {
        right: 0;
        width: 100%;
 }
-div#mw-head h5 {
+div#mw-head h3 {
        margin: 0;
        padding: 0;
 }
@@ -77,11 +82,12 @@ div.emptyPortlet {
        /* Display on top of page tabs - bug 37158 */
        z-index: 1;
 }
-#p-personal h5 {
+#p-personal h3 {
        display: none;
 }
 #p-personal ul {
-       list-style: none;
+       list-style-type: none;
+       list-style-image: none;
        margin: 0;
        padding-left: 10em; /* Keep from overlapping logo */
 }
@@ -108,8 +114,8 @@ div.emptyPortlet {
        margin-top: 2.5em;
 }
 /* Navigation Labels */
-div.vectorTabs h5,
-div.vectorMenu h5 span {
+div.vectorTabs h3,
+div.vectorMenu h3 span {
        display: none;
 }
 /* Namespaces and Views */
@@ -131,7 +137,8 @@ div.vectorTabs ul {
 }
 div.vectorTabs ul {
        height: 100%;
-       list-style: none;
+       list-style-type: none;
+       list-style-image: none;
        margin: 0;
        padding: 0;
 }
@@ -228,22 +235,22 @@ body.rtl div.vectorMenu {
 }
 /* OVERRIDDEN BY COMPLIANT BROWSERS */
 /* @noflip */
-div#mw-head div.vectorMenu h5 {
+div#mw-head div.vectorMenu h3 {
        float: left;
        /* @embed */
        background-image: url(images/tab-break.png);
        background-repeat: no-repeat;
 }
 /* This will be flipped - unlike the one above it */
-div#mw-head div.vectorMenu h5 {
+div#mw-head div.vectorMenu h3 {
        background-position: bottom left;
        margin-left: -1px;
 }
 /* IGNORED BY IE6 */
-div#mw-head div.vectorMenu > h5 {
+div#mw-head div.vectorMenu > h3 {
        background-image: none;
 }
-div#mw-head div.vectorMenu h4 {
+div.vectorMenu#p-variants #mw-vector-current-variant {
        display: inline-block;
        float: left;
        font-size: 0.8em;
@@ -254,21 +261,21 @@ div#mw-head div.vectorMenu h4 {
 }
 /* OVERRIDDEN BY COMPLIANT BROWSERS */
 /* @noflip */
-div.vectorMenu h5 a {
+div.vectorMenu h3 a {
        display: inline-block;
        width: 24px;
-       height: 2.5em;
+       height: 1.9em;
        text-decoration: none;
        /* @embed */
        background-image: url(images/tab-break.png);
        background-repeat: no-repeat;
 }
 /* This will be flipped - unlike the one above it */
-div.vectorMenu h5 a {
+div.vectorMenu h3 a {
        background-position: bottom right;
 }
 /* IGNORED BY IE6 */
-div.vectorMenu h5 > a {
+div.vectorMenu h3 > a {
        display: block;
 }
 div.vectorMenu div.menu {
@@ -304,9 +311,8 @@ div.vectorMenu ul {
        background-color: white;
        border: solid 1px silver;
        border-top-width: 0;
-       list-style: none;
-       list-style-image: none;
        list-style-type: none;
+       list-style-image: none;
        padding: 0;
        margin: 0;
        margin-left: -1px;
@@ -348,7 +354,7 @@ div.vectorMenu li.selected a:visited {
        text-decoration: none;
 }
 /* Search */
-#p-search h5 {
+#p-search h3 {
        display: none;
 }
 /* @noflip */
@@ -465,7 +471,7 @@ div#mw-panel div.portal {
        padding-bottom: 1.5em;
        direction: ltr;
 }
-div#mw-panel div.portal h5 {
+div#mw-panel div.portal h3 {
        font-weight: normal;
        color: #444;
        padding: 0.25em;
@@ -485,9 +491,8 @@ div#mw-panel div.portal div.body {
        background-position: top left;
 }
 div#mw-panel div.portal div.body ul {
-       list-style: none;
-       list-style-image: none;
        list-style-type: none;
+       list-style-image: none;
        padding: 0;
        margin: 0;
 }
@@ -517,9 +522,8 @@ div#footer {
        direction: ltr;
 }
 div#footer ul {
-       list-style: none;
-       list-style-image: none;
        list-style-type: none;
+       list-style-image: none;
        margin: 0;
        padding: 0;
 }
@@ -687,6 +691,7 @@ div#content {
 }
 
 ul {
+       list-style-type: disc;
        /* @embed */
        list-style-image: url(images/bullet-icon.png);
 }
index 8b719e5..4427d9a 100644 (file)
@@ -4,7 +4,7 @@
 jQuery( function ( $ ) {
        $( 'div.vectorMenu' ).each( function () {
                var $el = $( this );
-               $el.find( 'h5:first a:first' )
+               $el.find( 'h3:first a:first' )
                        // For accessibility, show the menu when the hidden link in the menu is clicked (bug 24298)
                        .click( function ( e ) {
                                $el.find( '.menu:first' ).toggleClass( 'menuForceShow' );
index b9f1817..ea1b290 100644 (file)
@@ -692,7 +692,6 @@ class ParserTest {
                        'wgExternalLinkTarget' => false,
                        'wgAlwaysUseTidy' => false,
                        'wgHtml5' => true,
-                       'wgCleanupPresentationalAttributes' => true,
                        'wgWellFormedXml' => true,
                        'wgAllowMicrodataAttributes' => true,
                        'wgAdaptiveMessageCache' => true,
index b8de79d..0384434 100644 (file)
@@ -102,6 +102,12 @@ Template:table_attribs
 |</noinclude>style="color: red"| Foo
 !! endarticle
 
+!! article
+A?b
+!! text
+Weirdo titles!
+!! endarticle
+
 ###
 ### Basic tests
 ###
@@ -2572,6 +2578,31 @@ A table with nothing but a caption
 
 !! end
 
+!! test
+Table td-cell syntax variations
+!! input
+{|
+| foo bar foo | baz
+| foo bar foo || baz
+| style='color:red;' | baz
+| style='color:red;' || baz
+|}
+!! result
+<table>
+<tr>
+<td> baz
+</td>
+<td> foo bar foo </td>
+<td> baz
+</td>
+<td style="color:red;"> baz
+</td>
+<td> style='color:red;' </td>
+<td> baz
+</td></tr></table>
+
+!! end
+
 !! test
 Simple table
 !! input
@@ -3149,6 +3180,18 @@ Plain link to protocol-relative URL with link text
 </p>
 !! end
 
+!! test
+Plain link to page with question mark in title
+!! input
+[[A?b]]
+
+[[A?b|Baz]]
+!! result
+<p><a href="/wiki/A%3Fb" title="A?b">A?b</a>
+</p><p><a href="/wiki/A%3Fb" title="A?b">Baz</a>
+</p>
+!! end
+
 
 # I'm fairly sure the expected result here is wrong.
 # We want these to be URL links, not pseudo-pages with URLs for titles....
@@ -3539,6 +3582,15 @@ Horizontal ruler -- <4 dashes render as plain text
 </p>
 !! end
 
+!! test
+Horizontal ruler -- Supports content following dashes on same line
+!! input
+---- Foo
+!! result
+<hr /> Foo
+
+!! end
+
 ###
 ### Block-level elements
 ###
@@ -4734,6 +4786,13 @@ Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
 </p>
 !! end
 
+!! test
+Un-closed <noinclude>
+!! input
+<noinclude>
+!! result
+!! end
+
 !! test
 <onlyinclude> on a page
 !! input
@@ -4743,6 +4802,13 @@ Foo<noinclude>zar</noinclude><includeonly>bar</includeonly>
 </p>
 !! end
 
+!! test
+Un-closed <onlyinclude>
+!! input
+<onlyinclude>
+!! result
+!! end
+
 !! article
 Template:Includeonly section
 !! text
@@ -4801,6 +4867,13 @@ section=1
 ==Section 1==
 !! end
 
+!! test
+Un-closed <includeonly>
+!! input
+<includeonly>
+!! result
+!! end
+
 ###
 ### <includeonly> and <noinclude> in attributes
 ###
@@ -6045,6 +6118,19 @@ Image with multiple captions -- only last one is accepted
 
 !! end
 
+!! test
+Image with width attribute at different positions
+!! input
+[[Image:foobar.jpg|200px|right|Caption]]
+[[Image:foobar.jpg|right|200px|Caption]]
+[[Image:foobar.jpg|right|Caption|200px]]
+!! result
+<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>
+<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>
+<div class="floatright"><a href="/wiki/File:Foobar.jpg" class="image" title="Caption"><img alt="Caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/200px-Foobar.jpg" width="200" height="23" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/300px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/400px-Foobar.jpg 2x" /></a></div>
+
+!! end
+
 !! test
 Image with link parameter, wiki target
 !! input
@@ -7188,6 +7274,23 @@ DIV IN UPPERCASE
 
 !!end
 
+!! test
+Non-ASCII pseudo-tags are rendered as text
+!! input
+<khyô>
+!! result
+<p>&lt;khyô&gt;
+</p>
+!! end
+
+!! test
+Pseudo-tag with URL 'name' renders as url link
+!! input
+<http://example.com/>
+!! result
+<p>&lt;<a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a>&gt;
+</p>
+!! end
 
 !! test
 text with amp in the middle of nowhere
@@ -7974,6 +8077,30 @@ disabled
 Something need to be done. foo-2 ? 
 !! end
 
+!! test
+Sanitizer: Validating that <meta> and <link> work, but only for Microdata
+!! input
+<div itemscope>
+       <meta itemprop="hello" content="world">
+       <meta http-equiv="refresh" content="5">
+       <meta itemprop="hello" http-equiv="refresh" content="5">
+       <link itemprop="hello" href="{{SERVER}}">
+       <link rel="stylesheet" href="{{SERVER}}">
+       <link rel="stylesheet" itemprop="hello" href="{{SERVER}}">
+</div>
+!! result
+<div itemscope="itemscope">
+<p>    <meta itemprop="hello" content="world" />
+       &lt;meta http-equiv="refresh" content="5"&gt;
+       <meta itemprop="hello" content="5" />
+</p>
+       <link itemprop="hello" href="http&#58;//Britney-Spears" />
+       &lt;link rel="stylesheet" href="<a rel="nofollow" class="external free" href="http://Britney-Spears">http://Britney-Spears</a>"&gt;
+       <link itemprop="hello" href="http&#58;//Britney-Spears" />
+</div>
+
+!! end
+
 !! test
 Language converter: output gets cut off unexpectedly (bug 5757)
 !! options
@@ -10496,6 +10623,29 @@ Nested: -{zh-hans:Hi -{zh-cn:China;zh-sg:Singapore;}-;zh-hant:Hello -{zh-tw:Taiw
 </p>
 !! end
 
+!! test
+Proper conversion of text in external links
+!! options
+language=sr variant=sr-ec
+!! input
+http://www.google.com
+gopher://www.google.com
+[http://www.google.com http://www.google.com]
+[gopher://www.google.com gopher://www.google.com]
+[https://www.google.com irc://www.google.com]
+[ftp://www.google.com www.google.com/ftp://dir]
+[//www.google.com www.google.com]
+!! result
+<p><a rel="nofollow" class="external free" href="http://www.google.com">http://www.google.com</a>
+<a rel="nofollow" class="external free" href="gopher://www.google.com">gopher://www.google.com</a>
+<a rel="nofollow" class="external free" href="http://www.google.com">http://www.google.com</a>
+<a rel="nofollow" class="external free" href="gopher://www.google.com">gopher://www.google.com</a>
+<a rel="nofollow" class="external text" href="https://www.google.com">irc://www.google.com</a>
+<a rel="nofollow" class="external text" href="ftp://www.google.com">www.гоогле.цом/фтп://дир</a>
+<a rel="nofollow" class="external text" href="//www.google.com">www.гоогле.цом</a>
+</p>
+!! end
+
 !! test
 Do not convert roman numbers to language variants
 !! options
@@ -11464,22 +11614,6 @@ Bug 31098 Template which includes system messages which includes the template
 </p>
 !! end
 
-!! test
-Deprecated presentational attributes are converted to css
-!! input
-{|
-| valign=top align=left width=100 height=25% | Asdf
-|}
-<ul type="disc"></ul>
-!! result
-<table>
-<tr>
-<td style="text-align: left; height: 25%; vertical-align: top; width: 100px;"> Asdf
-</td></tr></table>
-<ul style="list-style-type: disc;"></ul>
-
-!! end
-
 !! test
 Bug31490 Turkish: ucfirst 'blah'
 !! options
@@ -12684,6 +12818,48 @@ Escaping nowikis
 </p>
 !! end
 
+!! test
+Tag-like HTML structures are passed through as text
+!! input
+<x y>
+
+<x.y>
+
+<x-y>
+
+1>2
+
+x<y
+
+a>b
+
+1<d e>f
+!! result
+<p>&lt;x y&gt;
+</p><p>&lt;x.y&gt;
+</p><p>&lt;x-y&gt;
+</p><p>1&gt;2
+</p><p>x&lt;y
+</p><p>a&gt;b
+</p><p>1&lt;d e&gt;f
+</p>
+!! end
+
+
+# This fails in the PHP parser (see bug 40670,
+# https://bugzilla.wikimedia.org/show_bug.cgi?id=40670), so disabled for it.
+!! test
+Tag names followed by punctuation should not be recognized as tags
+!! options
+disabled
+!! input
+<s.ome> text
+!! result
+<p>&lt;s.ome&gt text
+</p>
+!! end
+
+
 TODO:
 more images
 more tables
index fca3251..2745c6a 100644 (file)
@@ -53,6 +53,26 @@ class MediaWikiPHPUnitCommand extends PHPUnit_TextUI_Command {
                }
        }
 
+       public function run( array $argv, $exit = true ) {
+               wfProfileIn( __METHOD__ );
+
+               $ret = parent::run( $argv, false );
+
+               wfProfileOut( __METHOD__ );
+
+               // Return to real wiki db, so profiling data is preserved
+               MediaWikiTestCase::teardownTestDB();
+
+               // Log profiling data, e.g. in the database or UDP
+               wfLogProfilingData();
+
+               if ( $exit ) {
+                       exit( $ret );
+               } else {
+                       return $ret;
+               }
+       }
+
        public function showHelp() {
                parent::showHelp();
 
index db41a4d..b6a4a94 100644 (file)
@@ -14,12 +14,12 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         * @var DatabaseBase
         */
        protected $db;
-       protected $oldTablePrefix;
-       protected $useTemporaryTables = true;
-       protected $reuseDB = false;
        protected $tablesUsed = array(); // tables with data
 
+       private static $useTemporaryTables = true;
+       private static $reuseDB = false;
        private static $dbSetup = false;
+       private static $oldTablePrefix = false;
 
        /**
         * Holds the paths of temporary files/directories created through getNewTempFile,
@@ -64,31 +64,48 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                 */
                ObjectCache::$instances[CACHE_DB] = new HashBagOStuff;
 
+               $needsResetDB = false;
+               $logName = get_class( $this ) . '::' . $this->getName( false );
+
                if( $this->needsDB() ) {
-                       global $wgDBprefix;
-                       
-                       $this->useTemporaryTables = !$this->getCliArg( 'use-normal-tables' );
-                       $this->reuseDB = $this->getCliArg('reuse-db');
+                       // set up a DB connection for this test to use
+
+                       self::$useTemporaryTables = !$this->getCliArg( 'use-normal-tables' );
+                       self::$reuseDB = $this->getCliArg('reuse-db');
 
                        $this->db = wfGetDB( DB_MASTER );
 
                        $this->checkDbIsSupported();
 
-                       $this->oldTablePrefix = $wgDBprefix;
-
                        if( !self::$dbSetup ) {
-                               $this->initDB();
-                               self::$dbSetup = true;
+                               wfProfileIn( $logName . ' (clone-db)' );
+
+                               // switch to a temporary clone of the database
+                               self::setupTestDB( $this->db, $this->dbPrefix() );
+
+                               if ( ( $this->db->getType() == 'oracle' || !self::$useTemporaryTables ) && self::$reuseDB ) {
+                                       $this->resetDB();
+                               }
+
+                               wfProfileOut( $logName . ' (clone-db)' );
                        }
 
+                       wfProfileIn( $logName . ' (prepare-db)' );
                        $this->addCoreDBData();
                        $this->addDBData();
+                       wfProfileOut( $logName . ' (prepare-db)' );
+
+                       $needsResetDB = true;
+               }
 
-                       parent::run( $result );
+               wfProfileIn( $logName );
+               parent::run( $result );
+               wfProfileOut( $logName );
 
+               if( $needsResetDB ) {
+                       wfProfileIn( $logName . ' (reset-db)' );
                        $this->resetDB();
-               } else {
-                       parent::run( $result );
+                       wfProfileOut( $logName . ' (reset-db)' );
                }
        }
 
@@ -131,6 +148,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         * happen in reverse order.
         */
        protected function setUp() {
+               wfProfileIn( __METHOD__ );
                parent::setUp();
 
                /*
@@ -159,9 +177,13 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                                $this->db->rollback();
                        }
                }
+
+               wfProfileOut( __METHOD__ );
        }
 
        protected function tearDown() {
+               wfProfileIn( __METHOD__ );
+
                // Cleaning up temporary files
                foreach ( $this->tmpfiles as $fname ) {
                        if ( is_file( $fname ) || ( is_link( $fname ) ) ) {
@@ -185,6 +207,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                $this->mwGlobals = array();
 
                parent::tearDown();
+               wfProfileOut( __METHOD__ );
        }
 
        /**
@@ -349,26 +372,67 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                }
        }
 
-       private function initDB() {
+       /**
+        * Restores MediaWiki to using the table set (table prefix) it was using before
+        * setupTestDB() was called. Useful if we need to perform database operations
+        * after the test run has finished (such as saving logs or profiling info).
+        */
+       public static function teardownTestDB() {
+               if ( !self::$dbSetup ) {
+                       return;
+               }
+
+               CloneDatabase::changePrefix( self::$oldTablePrefix );
+
+               self::$oldTablePrefix = false;
+               self::$dbSetup = false;
+       }
+
+       /**
+        * Creates an empty skeleton of the wiki database by cloning its structure
+        * to equivalent tables using the given $prefix. Then sets MediaWiki to
+        * use the new set of tables (aka schema) instead of the original set.
+        *
+        * This is used to generate a dummy table set, typically consisting of temporary
+        * tables, that will be used by tests instead of the original wiki database tables.
+        *
+        * @note: the original table prefix is stored in self::$oldTablePrefix. This is used
+        * by teardownTestDB() to return the wiki to using the original table set.
+        *
+        * @note: this method only works when first called. Subsequent calls have no effect,
+        * even if using different parameters.
+        *
+        * @param DatabaseBase $db The database connection
+        * @param String  $prefix The prefix to use for the new table set (aka schema).
+        *
+        * @throws MWException if the database table prefix is already $prefix
+        */
+       public static function setupTestDB( DatabaseBase $db, $prefix ) {
                global $wgDBprefix;
-               if ( $wgDBprefix === $this->dbPrefix() ) {
-                       throw new MWException( 'Cannot run unit tests, the database prefix is already "unittest_"' );
+               if ( $wgDBprefix === $prefix ) {
+                       throw new MWException( 'Cannot run unit tests, the database prefix is already "' . $prefix . '"' );
                }
 
-               $tablesCloned = $this->listTables();
-               $dbClone = new CloneDatabase( $this->db, $tablesCloned, $this->dbPrefix() );
-               $dbClone->useTemporaryTables( $this->useTemporaryTables );
+               if ( self::$dbSetup ) {
+                       return;
+               }
 
-               if ( ( $this->db->getType() == 'oracle' || !$this->useTemporaryTables ) && $this->reuseDB ) {
-                       CloneDatabase::changePrefix( $this->dbPrefix() );
-                       $this->resetDB();
+               $tablesCloned = self::listTables( $db );
+               $dbClone = new CloneDatabase( $db, $tablesCloned, $prefix );
+               $dbClone->useTemporaryTables( self::$useTemporaryTables );
+
+               self::$dbSetup = true;
+               self::$oldTablePrefix = $wgDBprefix;
+
+               if ( ( $db->getType() == 'oracle' || !self::$useTemporaryTables ) && self::$reuseDB ) {
+                       CloneDatabase::changePrefix( $prefix );
                        return;
                } else {
                        $dbClone->cloneTableStructure();
                }
 
-               if ( $this->db->getType() == 'oracle' ) {
-                       $this->db->query( 'BEGIN FILL_WIKI_INFO; END;' );
+               if ( $db->getType() == 'oracle' ) {
+                       $db->query( 'BEGIN FILL_WIKI_INFO; END;' );
                }
        }
 
@@ -378,7 +442,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        private function resetDB() {
                if( $this->db ) {
                        if ( $this->db->getType() == 'oracle' )  {
-                               if ( $this->useTemporaryTables ) {
+                               if ( self::$useTemporaryTables ) {
                                        wfGetLB()->closeAll();
                                        $this->db = wfGetDB( DB_MASTER );
                                } else {
@@ -427,16 +491,16 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                return strpos( $table, 'unittest_' ) !== 0;
        }
 
-       protected function listTables() {
+       public static function listTables( $db ) {
                global $wgDBprefix;
 
-               $tables = $this->db->listTables( $wgDBprefix, __METHOD__ );
+               $tables = $db->listTables( $wgDBprefix, __METHOD__ );
                $tables = array_map( array( __CLASS__, 'unprefixTable' ), $tables );
 
                // Don't duplicate test tables from the previous fataled run
                $tables = array_filter( $tables, array( __CLASS__, 'isNotUnittest' ) );
 
-               if ( $this->db->getType() == 'sqlite' ) {
+               if ( $db->getType() == 'sqlite' ) {
                        $tables = array_flip( $tables );
                        // these are subtables of searchindex and don't need to be duped/dropped separately
                        unset( $tables['searchindex_content'] );
@@ -746,4 +810,24 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                //        But frequently, this is used in fixture setup.
                throw new MWException( "No namespace defaults to wikitext!" );
        }
+
+       /**
+        * Check, if $wgDiff3 is set and ready to merge
+        * Will mark the calling test as skipped, if not ready
+        *
+        * @since 1.21
+        */
+       protected function checkHasDiff3() {
+               global $wgDiff3;
+
+               # This check may also protect against code injection in
+               # case of broken installations.
+               wfSuppressWarnings();
+               $haveDiff3 = $wgDiff3 && file_exists( $wgDiff3 );
+               wfRestoreWarnings();
+
+               if( !$haveDiff3 ) {
+                       $this->markTestSkipped( "Skip test, since diff3 is not configured" );
+               }
+       }
 }
index b02b08a..36fde85 100644 (file)
@@ -356,25 +356,13 @@ hello
                return array_merge( $tests, $testsWithAdam, $testsWithBerta );
        }
 
-       function testHasValidDiff3() {
-               global $wgDiff3;
-
-               if ( !$wgDiff3 ) {
-                       $this->markTestSkipped( "Can't test conflict resolution because \$wgDiff3 is not configured" );
-               } elseif ( !file_exists( $wgDiff3 ) ) {
-                       #XXX: this sucks, since it uses arcane internal knowledge about TextContentHandler::merge3 and wfMerge.
-                       $this->markTestSkipped( "Can't test conflict resolution because \$wgDiff3 is misconfigured: can't find $wgDiff3" );
-               }
-               $this->assertTrue( true );
-       }
-
        /**
-        * @depend testHasValidDiff3
         * @dataProvider provideAutoMerge
         */
        public function testAutoMerge( $baseUser, $text, $adamsEdit, $bertasEdit,
                                $expectedCode, $expectedText, $message = null
        ) {
+               $this->checkHasDiff3();
 
                //create page
                $ns = $this->getDefaultWikitextNS();
index 7304bd9..0dc18a2 100644 (file)
@@ -498,6 +498,8 @@ class GlobalTest extends MediaWikiTestCase {
         * @dataProvider provideMerge()
         */
        public function testMerge( $old, $mine, $yours, $expectedMergeResult, $expectedText ) {
+               $this->checkHasDiff3();
+
                $mergedText = null;
                $isMerged = wfMerge( $old, $mine, $yours, $mergedText );
 
index dc672ba..b678647 100644 (file)
@@ -5,8 +5,6 @@ class SanitizerTest extends MediaWikiTestCase {
        protected function setUp() {
                parent::setUp();
 
-               $this->setMwGlobals( 'wgCleanupPresentationalAttributes', true );
-
                AutoLoader::loadClass( 'Sanitizer' );
        }
 
@@ -64,6 +62,46 @@ class SanitizerTest extends MediaWikiTestCase {
                $this->assertEquals( UTF8_REPLACEMENT, Sanitizer::decodeCharReferences( "&#88888888888888;" ), 'Invalid numbered entity' );
        }
 
+       /**
+        * @cover Sanitizer::removeHTMLtags
+        * @dataProvider provideHtml5Tags
+        *
+        * @param String $tag Name of an HTML5 element (ie: 'video')
+        * @param Boolean $escaped Wheter sanitizer let the tag in or escape it (ie: '&lt;video&gt;')
+        */
+       function testRemovehtmltagsOnHtml5Tags( $tag, $escaped ) {
+
+               # Enable HTML5 mode
+               global $wgHTML5;
+               $save = $wgHTML5;
+               $wgHTML5 = true;
+
+               if( $escaped ) {
+                       $this->assertEquals( "&lt;$tag&gt;",
+                               Sanitizer::removeHTMLtags( "<$tag>" )
+                       );
+               } else {
+                       $this->assertEquals( "<$tag></$tag>\n",
+                               Sanitizer::removeHTMLtags( "<$tag>" )
+                       );
+               }
+               $wgHTML5 = $save;
+       }
+
+       /**
+        * Provide HTML5 tags
+        */
+       function provideHtml5Tags() {
+               $ESCAPED  = true; # We want tag to be escaped
+               $VERBATIM = false;  # We want to keep the tag
+               return array(
+                       array( 'data', $VERBATIM ),
+                       array( 'mark', $VERBATIM ),
+                       array( 'time', $VERBATIM ),
+                       array( 'video', $ESCAPED ),
+               );
+       }
+
        function testSelfClosingTag() {
                $GLOBALS['wgUseTidy'] = false;
                $this->assertEquals(
@@ -117,51 +155,24 @@ class SanitizerTest extends MediaWikiTestCase {
        /**
         * @dataProvider provideDeprecatedAttributes
         */
-       function testDeprecatedAttributes( $input, $tag, $expected, $message = null ) {
-               $this->assertEquals( $expected, Sanitizer::fixTagAttributes( $input, $tag ), $message );
-       }
-
-       function testDeprecatedAttributesDisabled() {
-               global $wgCleanupPresentationalAttributes;
-
-               $wgCleanupPresentationalAttributes = false;
+       function testDeprecatedAttributesUnaltered( $inputAttr, $inputEl ) {
 
-               $this->assertEquals( ' clear="left"', Sanitizer::fixTagAttributes( 'clear="left"', 'br' ), 'Deprecated attributes are not converted to styles when enabled.' );
+               $this->assertEquals( " $inputAttr", Sanitizer::fixTagAttributes( $inputAttr, $inputEl ) );
        }
 
        public static function provideDeprecatedAttributes() {
                return array(
-                       array( 'clear="left"', 'br', ' style="clear: left;"', 'Deprecated attributes are converted to styles when enabled.' ),
-                       array( 'clear="all"', 'br', ' style="clear: both;"', 'clear=all is converted to clear: both; not clear: all;' ),
-                       array( 'CLEAR="ALL"', 'br', ' style="clear: both;"', 'clear=ALL is not treated differently from clear=all' ),
-                       array( 'width="100"', 'td', ' style="width: 100px;"', 'Numeric sizes use pixels instead of numbers.' ),
-                       array( 'width="100%"', 'td', ' style="width: 100%;"', 'Units are allowed in sizes.' ),
-                       array( 'WIDTH="100%"', 'td', ' style="width: 100%;"', 'Uppercase WIDTH is treated as lowercase width.' ),
-                       array( 'WiDTh="100%"', 'td', ' style="width: 100%;"', 'Mixed case does not break WiDTh.' ),
-                       array( 'nowrap="true"', 'td', ' style="white-space: nowrap;"', 'nowrap attribute is output as white-space: nowrap; not something else.' ),
-                       array( 'nowrap=""', 'td', ' style="white-space: nowrap;"', 'nowrap="" is considered true, not false' ),
-                       array( 'NOWRAP="true"', 'td', ' style="white-space: nowrap;"', 'nowrap attribute works when uppercase.' ),
-                       array( 'NoWrAp="true"', 'td', ' style="white-space: nowrap;"', 'nowrap attribute works when mixed-case.' ),
-                       array( 'align="right"', 'td', ' style="text-align: right;"'   , 'align on table cells gets converted to text-align' ),
-                       array( 'align="center"', 'td', ' style="text-align: center;"' , 'align on table cells gets converted to text-align' ),
-                       array( 'align="left"'  , 'div', ' style="text-align: left;"'  , 'align=(left|right) on div elements gets converted to text-align' ),
-                       array( 'align="center"', 'div', ' style="text-align: center;"', 'align="center" on div elements gets converted to text-align' ),
-                       array( 'align="left"'  , 'p',   ' style="text-align: left;"'  , 'align on p elements gets converted to text-align' ),
-                       array( 'align="left"'  , 'h1',  ' style="text-align: left;"'  , 'align on h1 elements gets converted to text-align' ),
-                       array( 'align="left"'  , 'h1',  ' style="text-align: left;"'  , 'align on h1 elements gets converted to text-align' ),
-                       array( 'align="left"'  , 'caption',' style="text-align: left;"','align on caption elements gets converted to text-align' ),
-                       array( 'align="left"'  , 'tfoot',' style="text-align: left;"' , 'align on tfoot elements gets converted to text-align' ),
-                       array( 'align="left"'  , 'tbody',' style="text-align: left;"' , 'align on tbody elements gets converted to text-align' ),
-
-                       # <tr>
-                       array( 'align="right"' , 'tr', ' style="text-align: right;"' , 'align on table row get converted to text-align' ),
-                       array( 'align="center"', 'tr', ' style="text-align: center;"', 'align on table row get converted to text-align' ),
-                       array( 'align="left"'  , 'tr', ' style="text-align: left;"'  , 'align on table row get converted to text-align' ),
-
-                       #table
-                       array( 'align="left"'  , 'table', ' style="float: left;"'    , 'align on table converted to float' ),
-                       array( 'align="center"', 'table', ' style="margin-left: auto; margin-right: auto;"', 'align center on table converted to margins' ),
-                       array( 'align="right"' , 'table', ' style="float: right;"'   , 'align on table converted to float' ),
+                       array( 'clear="left"', 'br' ),
+                       array( 'clear="all"', 'br' ),
+                       array( 'width="100"', 'td' ),
+                       array( 'nowrap="true"', 'td' ),
+                       array( 'nowrap=""', 'td' ),
+                       array( 'align="right"', 'td' ),
+                       array( 'align="center"', 'table' ),
+                       array( 'align="left"', 'tr' ),
+                       array( 'align="center"', 'div' ),
+                       array( 'align="left"', 'h1' ),
+                       array( 'align="left"', 'span' ),
                );
        }
 
index fb20ce6..cc23d6d 100644 (file)
@@ -704,16 +704,7 @@ more stuff
 
        /* @todo FIXME: fix this!
        public function testGetUndoText() {
-               global $wgDiff3;
-
-               wfSuppressWarnings();
-               $haveDiff3 = $wgDiff3 && file_exists( $wgDiff3 );
-               wfRestoreWarnings();
-
-               if( !$haveDiff3 ) {
-                       $this->markTestSkipped( "diff3 not installed or not found" );
-                       return;
-               }
+               $this->checkHasDiff3();
 
                $text = "one";
                $page = $this->createPage( "WikiPageTest_testGetUndoText", $text );
index d68c3e5..ed4846b 100644 (file)
@@ -103,16 +103,7 @@ class WikitextContentHandlerTest extends MediaWikiLangTestCase {
         * @dataProvider dataMerge3
         */
        public function testMerge3( $old, $mine, $yours, $expected ) {
-               global $wgDiff3;
-
-               if ( !$wgDiff3 ) {
-                       $this->markTestSkipped( "Can't test merge3(), since \$wgDiff3 is not configured" );
-               }
-
-               if ( !file_exists( $wgDiff3 ) ) {
-                       #XXX: this sucks, since it uses arcane internal knowledge about TextContentHandler::merge3 and wfMerge.
-                       $this->markTestSkipped( "Can't test merge3(), since \$wgDiff3 is misconfigured: can't find $wgDiff3" );
-               }
+               $this->checkHasDiff3();
 
                // test merge
                $oldContent = new WikitextContent( $old );
index add7066..7beb4fe 100644 (file)
@@ -585,6 +585,73 @@ class FileBackendTest extends MediaWikiTestCase {
                return $cases;
        }
 
+       /**
+        * @dataProvider provider_testDescribe
+        */
+       public function testDescribe( $op, $withSource, $okStatus ) {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestDescribe( $op, $withSource, $okStatus );
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestDescribe( $op, $withSource, $okStatus );
+               $this->tearDownFiles();
+       }
+
+       private function doTestDescribe( $op, $withSource, $okStatus ) {
+               $backendName = $this->backendClass();
+
+               $source = $op['src'];
+               $this->prepare( array( 'dir' => dirname( $source ) ) );
+
+               if ( $withSource ) {
+                       $status = $this->backend->doOperation(
+                               array( 'op' => 'create', 'content' => 'blahblah', 'dst' => $source ) );
+                       $this->assertGoodStatus( $status,
+                               "Creation of file at $source succeeded ($backendName)." );
+               }
+
+               $status = $this->backend->doOperation( $op );
+               if ( $okStatus ) {
+                       $this->assertGoodStatus( $status,
+                               "Describe of file at $source succeeded without warnings ($backendName)." );
+                       $this->assertEquals( true, $status->isOK(),
+                               "Describe of file at $source succeeded ($backendName)." );
+                       $this->assertEquals( array( 0 => true ), $status->success,
+                               "Describe of file at $source has proper 'success' field in Status ($backendName)." );
+               } else {
+                       $this->assertEquals( false, $status->isOK(),
+                               "Describe of file at $source failed ($backendName)." );
+               }
+
+               $this->assertBackendPathsConsistent( array( $source ) );
+       }
+
+       public static function provider_testDescribe() {
+               $cases = array();
+
+               $source = self::baseStorePath() . '/unittest-cont1/e/myfacefile.txt';
+
+               $op = array( 'op' => 'describe', 'src' => $source,
+                       'headers' => array( 'X-Content-Length' => '91.3', 'Content-Old-Header' => '' ),
+                       'disposition' => 'inline' );
+               $cases[] = array(
+                       $op, // operation
+                       true, // with source
+                       true // succeeds
+               );
+
+               $cases[] = array(
+                       $op, // operation
+                       false, // without source
+                       false // fails
+               );
+
+               return $cases;
+       }
+
        /**
         * @dataProvider provider_testCreate
         */
@@ -1362,6 +1429,8 @@ class FileBackendTest extends MediaWikiTestCase {
                $this->prepare( array( 'dir' => dirname( $fileD ) ) );
 
                $status = $this->backend->doOperations( array(
+                       array( 'op' => 'describe', 'src' => $fileA,
+                               'headers' => array( 'X-Content-Length' => '91.3' ), 'disposition' => 'inline' ),
                        array( 'op' => 'copy', 'src' => $fileA, 'dst' => $fileC, 'overwrite' => 1 ),
                        // Now: A:<A>, B:<B>, C:<A>, D:<empty> (file:<orginal contents>)
                        array( 'op' => 'copy', 'src' => $fileC, 'dst' => $fileA, 'overwriteSame' => 1 ),
@@ -1392,7 +1461,7 @@ class FileBackendTest extends MediaWikiTestCase {
 
                $this->assertGoodStatus( $status, "Operation batch succeeded" );
                $this->assertEquals( true, $status->isOK(), "Operation batch succeeded" );
-               $this->assertEquals( 13, count( $status->success ),
+               $this->assertEquals( 14, count( $status->success ),
                        "Operation batch has correct success array" );
 
                $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileA ) ),
index 401962f..3476ce3 100644 (file)
@@ -329,7 +329,6 @@ class NewParserTest extends MediaWikiTestCase {
                        'wgExternalLinkTarget' => false,
                        'wgAlwaysUseTidy' => false,
                        'wgHtml5' => true,
-                       'wgCleanupPresentationalAttributes' => true,
                        'wgWellFormedXml' => true,
                        'wgAllowMicrodataAttributes' => true,
                        'wgAdaptiveMessageCache' => true,
index c66df69..94ccfd0 100644 (file)
@@ -1078,5 +1078,37 @@ class LanguageTest extends LanguageClassesTestCase {
                        ) ),
                );
        }
+
+       /**
+        * @covers Language::translateBlockExpiry()
+        * @dataProvider provideTranslateBlockExpiry
+        */
+       function testTranslateBlockExpiry( $expectedData, $str, $desc ) {
+               $lang = $this->getLang();
+               if ( is_array( $expectedData ) ) {
+                       list( $func, $arg ) = $expectedData;
+                       $expected = $lang->$func( $arg );
+               } else {
+                       $expected = $expectedData;
+               }
+               $this->assertEquals( $expected, $lang->translateBlockExpiry( $str ), $desc );
+       }
+
+       function provideTranslateBlockExpiry() {
+               return array(
+                       array( '2 hours', '2 hours', 'simple data from ipboptions' ),
+                       array( 'indefinite', 'infinite', 'infinite from ipboptions' ),
+                       array( 'indefinite', 'infinity', 'alternative infinite from ipboptions' ),
+                       array( 'indefinite', 'indefinite', 'another alternative infinite from ipboptions' ),
+                       array( array( 'formatDuration', 1023 * 60 * 60 ), '1023 hours', 'relative' ),
+                       array( array( 'formatDuration', -1023 ), '-1023 seconds', 'negative relative' ),
+                       array( array( 'formatDuration', 0 ), 'now', 'now' ),
+                       array( array( 'timeanddate', '20120102070000' ), '2012-1-1 7:00 +1 day', 'mixed, handled as absolute' ),
+                       array( array( 'timeanddate', '19910203040506' ), '1991-2-3 4:05:06', 'absolute' ),
+                       array( array( 'timeanddate', '19700101000000' ), '1970-1-1 0:00:00', 'absolute at epoch' ),
+                       array( array( 'timeanddate', '19691231235959' ), '1969-12-31 23:59:59', 'time before epoch' ),
+                       array( 'dummy', 'dummy', 'return garbage as is' ),
+               );
+       }
 }