Merge "ORMRow must not ignore failures on insert by deault."
authorAaron Schulz <aschulz@wikimedia.org>
Tue, 6 Nov 2012 20:57:57 +0000 (20:57 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 6 Nov 2012 20:57:57 +0000 (20:57 +0000)
173 files changed:
.gitignore
RELEASE-NOTES-1.21
docs/export-0.8.xsd
docs/export-demo.xml
docs/hooks.txt
includes/AutoLoader.php
includes/ChangesList.php
includes/DefaultSettings.php
includes/Html.php
includes/Import.php
includes/Message.php
includes/Revision.php
includes/SkinTemplate.php
includes/Title.php
includes/User.php
includes/WikiPage.php
includes/api/ApiEditPage.php
includes/cache/MessageCache.php
includes/content/Content.php
includes/content/ContentHandler.php
includes/db/DatabaseSqlite.php
includes/db/ORMRow.php
includes/filebackend/FileBackendStore.php
includes/filebackend/FileOp.php
includes/installer/Installer.i18n.php
includes/job/JobQueue.php
includes/job/JobQueueDB.php
includes/job/JobQueueGroup.php
includes/job/jobs/NullJob.php [new file with mode: 0644]
includes/logging/LogFormatter.php
includes/logging/LogPage.php
includes/parser/ParserOutput.php
includes/site/SiteObject.php
includes/specials/SpecialCachedPage.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialMergeHistory.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUserrights.php
includes/specials/SpecialVersion.php
languages/messages/MessagesAf.php
languages/messages/MessagesAr.php
languages/messages/MessagesArc.php
languages/messages/MessagesArz.php
languages/messages/MessagesAs.php
languages/messages/MessagesAst.php
languages/messages/MessagesAz.php
languages/messages/MessagesBa.php
languages/messages/MessagesBar.php
languages/messages/MessagesBcc.php
languages/messages/MessagesBcl.php
languages/messages/MessagesBe.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBg.php
languages/messages/MessagesBjn.php
languages/messages/MessagesBn.php
languages/messages/MessagesBpy.php
languages/messages/MessagesBr.php
languages/messages/MessagesBs.php
languages/messages/MessagesBug.php
languages/messages/MessagesCa.php
languages/messages/MessagesCe.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCrh_cyrl.php
languages/messages/MessagesCrh_latn.php
languages/messages/MessagesCs.php
languages/messages/MessagesCu.php
languages/messages/MessagesCv.php
languages/messages/MessagesCy.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/MessagesEu.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFo.php
languages/messages/MessagesFr.php
languages/messages/MessagesFrp.php
languages/messages/MessagesGl.php
languages/messages/MessagesGsw.php
languages/messages/MessagesHe.php
languages/messages/MessagesHr.php
languages/messages/MessagesHsb.php
languages/messages/MessagesHt.php
languages/messages/MessagesHu.php
languages/messages/MessagesHy.php
languages/messages/MessagesIa.php
languages/messages/MessagesId.php
languages/messages/MessagesIe.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesKhw.php
languages/messages/MessagesKiu.php
languages/messages/MessagesKm.php
languages/messages/MessagesKo.php
languages/messages/MessagesKs_arab.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKu_latn.php
languages/messages/MessagesLad.php
languages/messages/MessagesLb.php
languages/messages/MessagesMg.php
languages/messages/MessagesMin.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMr.php
languages/messages/MessagesMs.php
languages/messages/MessagesMzn.php
languages/messages/MessagesNah.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesOc.php
languages/messages/MessagesOr.php
languages/messages/MessagesOs.php
languages/messages/MessagesPa.php
languages/messages/MessagesPl.php
languages/messages/MessagesPms.php
languages/messages/MessagesPt.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQqq.php
languages/messages/MessagesQu.php
languages/messages/MessagesRo.php
languages/messages/MessagesRu.php
languages/messages/MessagesSa.php
languages/messages/MessagesSah.php
languages/messages/MessagesSe.php
languages/messages/MessagesSh.php
languages/messages/MessagesSl.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSr_el.php
languages/messages/MessagesSv.php
languages/messages/MessagesTh.php
languages/messages/MessagesTl.php
languages/messages/MessagesTly.php
languages/messages/MessagesTr.php
languages/messages/MessagesTyv.php
languages/messages/MessagesUk.php
languages/messages/MessagesUr.php
languages/messages/MessagesUz.php
languages/messages/MessagesVec.php
languages/messages/MessagesVi.php
languages/messages/MessagesYi.php
languages/messages/MessagesYue.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
languages/messages/MessagesZh_hk.php
languages/messages/MessagesZh_tw.php
maintenance/language/messages.inc
maintenance/nextJobDB.php
resources/jquery/jquery.badge.css
resources/mediawiki/mediawiki.js
resources/mediawiki/mediawiki.notification.js
skins/CologneBlue.php
skins/cologneblue/screen.css
skins/common/commonContent.css
skins/common/shared.css
skins/common/wikibits.js
skins/modern/main.css
tests/parser/parserTests.txt
tests/phpunit/docs/ExportDemoTest.php
tests/phpunit/includes/CdbTest.php
tests/phpunit/includes/WikiPageTest.php
tests/phpunit/includes/api/ApiTestCase.php
tests/phpunit/includes/db/DatabaseSqliteTest.php
tests/phpunit/includes/filebackend/FileBackendTest.php [new file with mode: 0644]
tests/phpunit/includes/filerepo/FileBackendTest.php [deleted file]
thumb.php

index 319f196..7f1ac5e 100644 (file)
@@ -11,6 +11,7 @@ cscope.out
 ## NetBeans
 nbproject*
 project.index
+sublime-*
 
 # MediaWiki install & usage
 cache
index 7111254..ce6966e 100644 (file)
@@ -57,6 +57,7 @@ production.
 * (bug 41494) Honor $wgLogExceptionBacktrace when logging non-API exceptions
   caught during API execution.
 * (bug 37963) Fixed loading process for user options
+* (bug 26995) Update filename field on Upload page after having sanitized it.
 
 === API changes in 1.21 ===
 * prop=revisions can now report the contentmodel and contentformat, see docs/contenthandler.txt
index a18c608..07b432a 100644 (file)
 
        <simpleType name="ContentModelType">
                <restriction base="string">
-                       <pattern value="[a-zA-Z][-+./a-zA-Z0-9]*"/>
+                       <pattern value="[a-zA-Z][-+./a-zA-Z0-9]*" />
                </restriction>
        </simpleType>
 
        <simpleType name="ContentFormatType">
                <restriction base="string">
-                       <pattern value='[a-zA-Z][-+.a-zA-Z0-9]*\/[a-zA-Z][-+.a-zA-Z0-9]*'/>
+                       <pattern value="[a-zA-Z][-+.a-zA-Z0-9]*/[a-zA-Z][-+.a-zA-Z0-9]*" />
                </restriction>
        </simpleType>
 
index d198b93..591f675 100644 (file)
@@ -1,4 +1,4 @@
-<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.7/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.7/ http://www.mediawiki.org/xml/export-0.7.xsd" version="0.7" xml:lang="en">
+<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.8/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.8/ http://www.mediawiki.org/xml/export-0.8.xsd" version="0.8" xml:lang="en">
   
   <!-- Optional global configuration info -->
   <siteinfo>
       </contributor>
       <minor />
       <comment>I have just one thing to say!</comment>
-      <sha1>5x0ux8iwjrbmfzgv6pkketxgkcnpr7h</sha1>
       <text xml:space="preserve" bytes="25">A bunch of [[text]] here.</text>
+      <sha1>5x0ux8iwjrbmfzgv6pkketxgkcnpr7h</sha1>
+      <model>wikitext</model>
+      <format>text/x-wiki</format>
     </revision>
     
     <revision>
         <ip>10.0.0.2</ip>
       </contributor>
       <comment>new!</comment>
-      <sha1>etaxt3shcge6igz1biwy3d4um2pnle4</sha1>
       <text xml:space="preserve" bytes="24">An earlier [[revision]].</text>
+      <sha1>etaxt3shcge6igz1biwy3d4um2pnle4</sha1>
+      <model>wikitext</model>
+      <format>text/x-wiki</format>
     </revision>
   </page>
   
       <timestamp>2001-01-15T14:03:00Z</timestamp>
       <contributor><ip>10.0.0.2</ip></contributor>
       <comment>hey</comment>
-      <sha1>ml80vmyjlixdstnywwihx003exfzq9j</sha1>
       <text xml:space="preserve" bytes="47">WHYD YOU LOCK PAGE??!!! i was editing that jerk</text>
+      <sha1>ml80vmyjlixdstnywwihx003exfzq9j</sha1>
+      <model>wikitext</model>
+      <format>text/x-wiki</format>
     </revision>
   </page>
   
       <timestamp>2001-01-15T20:34:12Z</timestamp>
       <contributor><username>Foobar</username><id>42</id></contributor>
       <comment>My awesomeest image!</comment>
-      <sha1>mehom37npwkpzhaiwu3wyr0egalumki</sha1>
       <text xml:space="preserve" bytes="52">This is an awesome little imgae. I lurves it. {{PD}}</text>
+      <sha1>mehom37npwkpzhaiwu3wyr0egalumki</sha1>
+      <model>wikitext</model>
+      <format>text/x-wiki</format>
     </revision>
     <upload>
       <timestamp>2001-01-15T20:34:12Z</timestamp>
index 998523f..94cf08e 100644 (file)
@@ -2110,7 +2110,7 @@ $result: Boolean; whether MediaWiki currently thinks this is a CSS/JS page. Hook
 Allows overriding default behaviour for determining if a page exists.
 If $isKnown is kept as null, regular checks happen. If it's a boolean, this value is returned by the isKnown method.
 $title: Title object that is being checked
-$result: Boolean|null; whether MediaWiki currently thinks this page is known
+&$isKnown: Boolean|null; whether MediaWiki currently thinks this page is known
 
 'TitleIsMovable': Called when determining if it is possible to move a page.
 Note that this hook is not called for interwiki pages or pages in immovable namespaces: for these, isMovable() always returns false.
index 0cd81c3..dcaaf5a 100644 (file)
@@ -254,7 +254,6 @@ $wgAutoloadLocalClasses = array(
        'UnlistedSpecialPage' => 'includes/SpecialPage.php',
        'UploadSourceAdapter' => 'includes/Import.php',
        'UppercaseCollation' => 'includes/Collation.php',
-       'Uri' => 'includes/Uri.php',
        'User' => 'includes/User.php',
        'UserArray' => 'includes/UserArray.php',
        'UserArrayFromResult' => 'includes/UserArray.php',
@@ -299,6 +298,7 @@ $wgAutoloadLocalClasses = array(
        'JavaScriptContentHandler' => 'includes/content/JavaScriptContentHandler.php',
        'JavaScriptContent' => 'includes/content/JavaScriptContent.php',
        'MessageContent' => 'includes/content/MessageContent.php',
+       'MWContentSerializationException' => 'includes/content/ContentHandler.php',
        'TextContentHandler' => 'includes/content/TextContentHandler.php',
        'TextContent' => 'includes/content/TextContent.php',
        'WikitextContentHandler' => 'includes/content/WikitextContentHandler.php',
@@ -656,6 +656,7 @@ $wgAutoloadLocalClasses = array(
        'EmaillingJob' => 'includes/job/jobs/EmaillingJob.php',
        'EnotifNotifyJob' => 'includes/job/jobs/EnotifNotifyJob.php',
        'HTMLCacheUpdateJob' => 'includes/job/jobs/HTMLCacheUpdateJob.php',
+       'NullJob' => 'includes/job/jobs/NullJob.php',
        'RefreshLinksJob' => 'includes/job/jobs/RefreshLinksJob.php',
        'RefreshLinksJob2' => 'includes/job/jobs/RefreshLinksJob.php',
        'UploadFromUrlJob' => 'includes/job/jobs/UploadFromUrlJob.php',
@@ -697,6 +698,7 @@ $wgAutoloadLocalClasses = array(
        'PatrolLog' => 'includes/logging/PatrolLog.php',
        'PatrolLogFormatter' => 'includes/logging/LogFormatter.php',
        'RCDatabaseLogEntry' => 'includes/logging/LogEntry.php',
+       'RightsLogFormatter' => 'includes/logging/LogFormatter.php',
 
        # includes/media
        'BitmapHandler' => 'includes/media/Bitmap.php',
index e7395c0..6b7e99c 100644 (file)
@@ -514,12 +514,12 @@ class ChangesList extends ContextSource {
                        if ( $this->getUser()->isAllowed('rollback') && $rc->mAttribs['page_latest'] == $rc->mAttribs['rc_this_oldid'] )
                        {
                                $rev = new Revision( array(
+                                       'title'     => $page,
                                        'id'        => $rc->mAttribs['rc_this_oldid'],
                                        'user'      => $rc->mAttribs['rc_user'],
                                        'user_text' => $rc->mAttribs['rc_user_text'],
                                        'deleted'   => $rc->mAttribs['rc_deleted']
                                ) );
-                               $rev->setTitle( $page );
                                $s .= ' '.Linker::generateRollback( $rev, $this->getContext() );
                        }
                }
index 6cdacc1..16cae7d 100644 (file)
@@ -3735,7 +3735,7 @@ $wgAllowPrefChange = array();
 /**
  * This is to let user authenticate using https when they come from http.
  * Based on an idea by George Herbert on wikitech-l:
- * http://lists.wikimedia.org/pipermail/wikitech-l/2010-October/050065.html
+ * http://lists.wikimedia.org/pipermail/wikitech-l/2010-October/050039.html
  * @since 1.17
  */
 $wgSecureLogin = false;
@@ -5414,14 +5414,15 @@ $wgHooks = array();
  * can add to this to provide custom jobs
  */
 $wgJobClasses = array(
-       'refreshLinks' => 'RefreshLinksJob',
-       'refreshLinks2' => 'RefreshLinksJob2',
-       'htmlCacheUpdate' => 'HTMLCacheUpdateJob',
+       'refreshLinks'      => 'RefreshLinksJob',
+       'refreshLinks2'     => 'RefreshLinksJob2',
+       'htmlCacheUpdate'   => 'HTMLCacheUpdateJob',
        'html_cache_update' => 'HTMLCacheUpdateJob', // backwards-compatible
-       'sendMail' => 'EmaillingJob',
-       'enotifNotify' => 'EnotifNotifyJob',
+       'sendMail'          => 'EmaillingJob',
+       'enotifNotify'      => 'EnotifNotifyJob',
        'fixDoubleRedirect' => 'DoubleRedirectJob',
-       'uploadFromUrl' => 'UploadFromUrlJob',
+       'uploadFromUrl'     => 'UploadFromUrlJob',
+       'null'              => 'NullJob'
 );
 
 /**
@@ -5646,8 +5647,6 @@ $wgLogActions = array(
        'protect/modify'     => 'modifiedarticleprotection',
        'protect/unprotect'  => 'unprotectedarticle',
        'protect/move_prot'  => 'movedarticleprotection',
-       'rights/rights'      => 'rightslogentry',
-       'rights/autopromote' => 'rightslogentry-autopromote',
        'upload/upload'      => 'uploadedimage',
        'upload/overwrite'   => 'overwroteimage',
        'upload/revert'      => 'uploadedimage',
@@ -5665,16 +5664,18 @@ $wgLogActions = array(
  * @see LogFormatter
  */
 $wgLogActionsHandlers = array(
-       'move/move'         => 'MoveLogFormatter',
-       'move/move_redir'  => 'MoveLogFormatter',
-       'delete/delete'     => 'DeleteLogFormatter',
-       'delete/restore'    => 'DeleteLogFormatter',
-       'delete/revision'   => 'DeleteLogFormatter',
-       'delete/event'      => 'DeleteLogFormatter',
-       'suppress/revision' => 'DeleteLogFormatter',
-       'suppress/event'    => 'DeleteLogFormatter',
-       'suppress/delete'   => 'DeleteLogFormatter',
-       'patrol/patrol'     => 'PatrolLogFormatter',
+       'move/move'          => 'MoveLogFormatter',
+       'move/move_redir'    => 'MoveLogFormatter',
+       'delete/delete'      => 'DeleteLogFormatter',
+       'delete/restore'     => 'DeleteLogFormatter',
+       'delete/revision'    => 'DeleteLogFormatter',
+       'delete/event'       => 'DeleteLogFormatter',
+       'suppress/revision'  => 'DeleteLogFormatter',
+       'suppress/event'     => 'DeleteLogFormatter',
+       'suppress/delete'    => 'DeleteLogFormatter',
+       'patrol/patrol'      => 'PatrolLogFormatter',
+       'rights/rights'      => 'RightsLogFormatter',
+       'rights/autopromote' => 'RightsLogFormatter',
 );
 
 /**
index 5be67ab..01dca6f 100644 (file)
@@ -48,7 +48,7 @@
  * @since 1.16
  */
 class Html {
-       # List of void elements from HTML5, section 8.1.2 as of 2011-08-12
+       // List of void elements from HTML5, section 8.1.2 as of 2011-08-12
        private static $voidElements = array(
                'area',
                'base',
@@ -68,8 +68,8 @@ class Html {
                'wbr',
        );
 
-       # Boolean attributes, which may have the value omitted entirely.  Manually
-       # collected from the HTML5 spec as of 2011-08-12.
+       // Boolean attributes, which may have the value omitted entirely.  Manually
+       // collected from the HTML5 spec as of 2011-08-12.
        private static $boolAttribs = array(
                'async',
                'autofocus',
@@ -97,7 +97,7 @@ class Html {
                'selected',
                'truespeed',
                'typemustmatch',
-               # HTML5 Microdata
+               // HTML5 Microdata
                'itemscope',
        );
 
@@ -139,7 +139,7 @@ class Html {
                $start = self::openElement( $element, $attribs );
                if ( in_array( $element, self::$voidElements ) ) {
                        if ( $wgWellFormedXml ) {
-                               # Silly XML.
+                               // Silly XML.
                                return substr( $start, 0, -1 ) . ' />';
                        }
                        return $start;
@@ -160,8 +160,8 @@ class Html {
         */
        public static function element( $element, $attribs = array(), $contents = '' ) {
                return self::rawElement( $element, $attribs, strtr( $contents, array(
-                       # There's no point in escaping quotes, >, etc. in the contents of
-                       # elements.
+                       // There's no point in escaping quotes, >, etc. in the contents of
+                       // elements.
                        '&' => '&amp;',
                        '<' => '&lt;'
                ) ) );
@@ -179,19 +179,19 @@ class Html {
        public static function openElement( $element, $attribs = array() ) {
                global $wgHtml5, $wgWellFormedXml;
                $attribs = (array)$attribs;
-               # This is not required in HTML5, but let's do it anyway, for
-               # consistency and better compression.
+               // This is not required in HTML5, but let's do it anyway, for
+               // consistency and better compression.
                $element = strtolower( $element );
 
-               # In text/html, initial <html> and <head> tags can be omitted under
-               # pretty much any sane circumstances, if they have no attributes.  See:
-               # <http://www.whatwg.org/specs/web-apps/current-work/multipage/syntax.html#optional-tags>
+               // In text/html, initial <html> and <head> tags can be omitted under
+               // pretty much any sane circumstances, if they have no attributes.  See:
+               // <http://www.whatwg.org/specs/web-apps/current-work/multipage/syntax.html#optional-tags>
                if ( !$wgWellFormedXml && !$attribs
                && in_array( $element, array( 'html', 'head' ) ) ) {
                        return '';
                }
 
-               # Remove invalid input types
+               // Remove invalid input types
                if ( $element == 'input' ) {
                        $validTypes = array(
                                'hidden',
@@ -206,7 +206,7 @@ class Html {
                                'button',
                        );
 
-                       # Allow more input types in HTML5 mode
+                       // Allow more input types in HTML5 mode
                        if( $wgHtml5 ) {
                                $validTypes = array_merge( $validTypes, array(
                                        'datetime',
@@ -251,8 +251,8 @@ class Html {
 
                $element = strtolower( $element );
 
-               # Reference:
-               # http://www.whatwg.org/specs/web-apps/current-work/multipage/syntax.html#optional-tags
+               // Reference:
+               // http://www.whatwg.org/specs/web-apps/current-work/multipage/syntax.html#optional-tags
                if ( !$wgWellFormedXml && in_array( $element, array(
                        'html',
                        'head',
@@ -287,15 +287,15 @@ class Html {
         * @return array An array of attributes functionally identical to $attribs
         */
        private static function dropDefaults( $element, $attribs ) {
-               # Don't bother doing anything if we aren't outputting HTML5; it's too
-               # much of a pain to maintain two sets of defaults.
+               // Don't bother doing anything if we aren't outputting HTML5; it's too
+               // much of a pain to maintain two sets of defaults.
                global $wgHtml5;
                if ( !$wgHtml5 ) {
                        return $attribs;
                }
 
-               # Whenever altering this array, please provide a covering test case
-               # in HtmlTest::provideElementsWithAttributesHavingDefaultValues
+               // Whenever altering this array, please provide a covering test case
+               // in HtmlTest::provideElementsWithAttributesHavingDefaultValues
                static $attribDefaults = array(
                        'area' => array( 'shape' => 'rect' ),
                        'button' => array(
@@ -320,8 +320,8 @@ class Html {
                        'keygen' => array( 'keytype' => 'rsa' ),
                        'link' => array( 'media' => 'all' ),
                        'menu' => array( 'type' => 'list' ),
-                       # Note: the use of text/javascript here instead of other JavaScript
-                       # MIME types follows the HTML5 spec.
+                       // Note: the use of text/javascript here instead of other JavaScript
+                       // MIME types follows the HTML5 spec.
                        'script' => array( 'type' => 'text/javascript' ),
                        'style' => array(
                                'media' => 'all',
@@ -340,7 +340,7 @@ class Html {
                                $value = strval( $value );
                        }
 
-                       # Simple checks using $attribDefaults
+                       // Simple checks using $attribDefaults
                        if ( isset( $attribDefaults[$element][$lcattrib] ) &&
                        $attribDefaults[$element][$lcattrib] == $value ) {
                                unset( $attribs[$attrib] );
@@ -351,7 +351,7 @@ class Html {
                        }
                }
 
-               # More subtle checks
+               // More subtle checks
                if ( $element === 'link' && isset( $attribs['type'] )
                && strval( $attribs['type'] ) == 'text/css' ) {
                        unset( $attribs['type'] );
@@ -383,12 +383,12 @@ class Html {
                        if ( in_array( 'multiple', $attribs )
                                || ( isset( $attribs['multiple'] ) && $attribs['multiple'] !== false )
                        ) {
-                               # A multi-select
+                               // A multi-select
                                if ( strval( $attribs['size'] ) == '4' ) {
                                        unset( $attribs['size'] );
                                }
                        } else {
-                               # Single select
+                               // Single select
                                if ( strval( $attribs['size'] ) == '1' ) {
                                        unset( $attribs['size'] );
                                }
@@ -447,29 +447,29 @@ class Html {
                                continue;
                        }
 
-                       # For boolean attributes, support array( 'foo' ) instead of
-                       # requiring array( 'foo' => 'meaningless' ).
+                       // For boolean attributes, support array( 'foo' ) instead of
+                       // requiring array( 'foo' => 'meaningless' ).
                        if ( is_int( $key )
                        && in_array( strtolower( $value ), self::$boolAttribs ) ) {
                                $key = $value;
                        }
 
-                       # Not technically required in HTML5, but required in XHTML 1.0,
-                       # and we'd like consistency and better compression anyway.
+                       // Not technically required in HTML5, but required in XHTML 1.0,
+                       // and we'd like consistency and better compression anyway.
                        $key = strtolower( $key );
 
-                       # Here we're blacklisting some HTML5-only attributes...
+                       // Here we're blacklisting some HTML5-only attributes...
                        if ( !$wgHtml5 && in_array( $key, self::$HTMLFiveOnlyAttribs )
                         ) {
                                continue;
                        }
 
-                       # Bug 23769: Blacklist all form validation attributes for now.  Current
-                       # (June 2010) WebKit has no UI, so the form just refuses to submit
-                       # without telling the user why, which is much worse than failing
-                       # server-side validation.  Opera is the only other implementation at
-                       # this time, and has ugly UI, so just kill the feature entirely until
-                       # we have at least one good implementation.
+                       // Bug 23769: Blacklist all form validation attributes for now.  Current
+                       // (June 2010) WebKit has no UI, so the form just refuses to submit
+                       // without telling the user why, which is much worse than failing
+                       // server-side validation.  Opera is the only other implementation at
+                       // this time, and has ugly UI, so just kill the feature entirely until
+                       // we have at least one good implementation.
                        if ( in_array( $key, array( 'max', 'min', 'pattern', 'required', 'step' ) ) ) {
                                continue;
                        }
@@ -485,7 +485,7 @@ class Html {
                                'rel',
                        );
 
-                       # Specific features for attributes that allow a list of space-separated values
+                       // Specific features for attributes that allow a list of space-separated values
                        if ( in_array( $key, $spaceSeparatedListAttributes ) ) {
                                // Apply some normalization and remove duplicates
 
@@ -522,14 +522,14 @@ class Html {
                                $value = implode( ' ', array_unique( $value ) );
                        }
 
-                       # See the "Attributes" section in the HTML syntax part of HTML5,
-                       # 9.1.2.3 as of 2009-08-10.  Most attributes can have quotation
-                       # marks omitted, but not all.  (Although a literal " is not
-                       # permitted, we don't check for that, since it will be escaped
-                       # anyway.)
+                       // See the "Attributes" section in the HTML syntax part of HTML5,
+                       // 9.1.2.3 as of 2009-08-10.  Most attributes can have quotation
+                       // marks omitted, but not all.  (Although a literal " is not
+                       // permitted, we don't check for that, since it will be escaped
+                       // anyway.)
                        #
-                       # See also research done on further characters that need to be
-                       # escaped: http://code.google.com/p/html5lib/issues/detail?id=93
+                       // See also research done on further characters that need to be
+                       // escaped: http://code.google.com/p/html5lib/issues/detail?id=93
                        $badChars = "\\x00- '=<>`/\x{00a0}\x{1680}\x{180e}\x{180F}\x{2000}\x{2001}"
                                . "\x{2002}\x{2003}\x{2004}\x{2005}\x{2006}\x{2007}\x{2008}\x{2009}"
                                . "\x{200A}\x{2028}\x{2029}\x{202F}\x{205F}\x{3000}";
@@ -541,9 +541,9 @@ class Html {
                        }
 
                        if ( in_array( $key, self::$boolAttribs ) ) {
-                               # In XHTML 1.0 Transitional, the value needs to be equal to the
-                               # key.  In HTML5, we can leave the value empty instead.  If we
-                               # don't need well-formed XML, we can omit the = entirely.
+                               // In XHTML 1.0 Transitional, the value needs to be equal to the
+                               // key.  In HTML5, we can leave the value empty instead.  If we
+                               // don't need well-formed XML, we can omit the = entirely.
                                if ( !$wgWellFormedXml ) {
                                        $ret .= " $key";
                                } elseif ( $wgHtml5 ) {
@@ -552,16 +552,16 @@ class Html {
                                        $ret .= " $key=\"$key\"";
                                }
                        } else {
-                               # Apparently we need to entity-encode \n, \r, \t, although the
-                               # spec doesn't mention that.  Since we're doing strtr() anyway,
-                               # and we don't need <> escaped here, we may as well not call
-                               # htmlspecialchars().
-                               # @todo FIXME: Verify that we actually need to
-                               # escape \n\r\t here, and explain why, exactly.
+                               // Apparently we need to entity-encode \n, \r, \t, although the
+                               // spec doesn't mention that.  Since we're doing strtr() anyway,
+                               // and we don't need <> escaped here, we may as well not call
+                               // htmlspecialchars().
+                               // @todo FIXME: Verify that we actually need to
+                               // escape \n\r\t here, and explain why, exactly.
                                #
-                               # We could call Sanitizer::encodeAttribute() for this, but we
-                               # don't because we're stubborn and like our marginal savings on
-                               # byte size from not having to encode unnecessary quotes.
+                               // We could call Sanitizer::encodeAttribute() for this, but we
+                               // don't because we're stubborn and like our marginal savings on
+                               // byte size from not having to encode unnecessary quotes.
                                $map = array(
                                        '&' => '&amp;',
                                        '"' => '&quot;',
@@ -570,9 +570,9 @@ class Html {
                                        "\t" => '&#9;'
                                );
                                if ( $wgWellFormedXml ) {
-                                       # This is allowed per spec: <http://www.w3.org/TR/xml/#NT-AttValue>
-                                       # But reportedly it breaks some XML tools?
-                                       # @todo FIXME: Is this really true?
+                                       // This is allowed per spec: <http://www.w3.org/TR/xml/#NT-AttValue>
+                                       // But reportedly it breaks some XML tools?
+                                       // @todo FIXME: Is this really true?
                                        $map['<'] = '&lt;';
                                }
                                $ret .= " $key=$quote" . strtr( $value, $map ) . $quote;
index 71498ac..2017466 100644 (file)
@@ -1397,6 +1397,7 @@ class WikiRevision {
                # @todo FIXME: Use original rev_id optionally (better for backups)
                # Insert the row
                $revision = new Revision( array(
+                       'title'      => $this->title,
                        'page'       => $pageId,
                        'content_model'  => $this->getModel(),
                        'content_format' => $this->getFormat(),
index 2feaed2..5a4b810 100644 (file)
@@ -629,7 +629,8 @@ class Message {
         * @return string Wikitext parsed into HTML
         */
        protected function parseText( $string ) {
-               return MessageCache::singleton()->parse( $string, $this->title, /*linestart*/true, $this->interface, $this->language )->getText();
+               $out = MessageCache::singleton()->parse( $string, $this->title, /*linestart*/true, $this->interface, $this->language );
+               return is_object( $out ) ? $out->getText() : $out;
        }
 
        /**
index afba498..d556edc 100644 (file)
@@ -178,6 +178,13 @@ class Revision implements IDBAccessObject {
                        unset( $attribs['content_format'] );
                }
 
+               if ( !isset( $attribs['title'] )
+                       && isset( $row->ar_namespace )
+                       && isset( $row->ar_title ) ) {
+
+                       $attribs['title'] = Title::makeTitle( $row->ar_namespace, $row->ar_title );
+               }
+
                if ( isset( $row->ar_text ) && !$row->ar_text_id ) {
                        // Pre-1.5 ar_text row
                        $attribs['text'] = self::getRevisionText( $row, 'ar_' );
@@ -606,8 +613,9 @@ class Revision implements IDBAccessObject {
                                        // if the page ID wasn't known, set it now
                                        $this->mPage = $this->mTitle->getArticleID();
                                } elseif ( $this->mTitle->getArticleID() !== $this->mPage ) {
-                                       // got different page IDs, something is wrong.
-                                       wfWarn( "Page ID " . $this->mPage . " mismatches the ID "
+                                       // Got different page IDs. This may be legit (e.g. during undeletion),
+                                       // but it seems worth mentioning it in the log.
+                                       wfDebug( "Page ID " . $this->mPage . " mismatches the ID "
                                                        . $this->mTitle->getArticleID() . " provided by the Title object." );
                                }
                        }
index 5a32d47..dcc37d7 100644 (file)
@@ -1177,11 +1177,6 @@ class SkinTemplate extends Skin {
                                );
                        }
 
-                       $nav_urls['info'] = array(
-                               'text' => $this->msg( 'pageinfo-toolboxlink' )->text(),
-                               'href' => $out->getTitle()->getLocalURL( "action=info" )
-                       );
-
                        // Use the copy of revision ID in case this undocumented, shady hook tries to mess with internals
                        wfRunHooks( 'SkinTemplateBuildNavUrlsNav_urlsAfterPermalink',
                                array( &$this, &$nav_urls, &$revid, &$revid ) );
@@ -1191,6 +1186,12 @@ class SkinTemplate extends Skin {
                        $nav_urls['whatlinkshere'] = array(
                                'href' => SpecialPage::getTitleFor( 'Whatlinkshere', $this->thispage )->getLocalUrl()
                        );
+
+                       $nav_urls['info'] = array(
+                               'text' => $this->msg( 'pageinfo-toolboxlink' )->text(),
+                               'href' => $this->getTitle()->getLocalURL( "action=info" )
+                       );
+
                        if ( $this->getTitle()->getArticleID() ) {
                                $nav_urls['recentchangeslinked'] = array(
                                        'href' => SpecialPage::getTitleFor( 'Recentchangeslinked', $this->thispage )->getLocalUrl()
index 00fdc3a..c1e2ccf 100644 (file)
@@ -3816,6 +3816,7 @@ class Title {
                        $newid = $redirectArticle->insertOn( $dbw );
                        if ( $newid ) { // sanity
                                $redirectRevision = new Revision( array(
+                                       'title'   => $this, // for determining the default content model
                                        'page'    => $newid,
                                        'comment' => $comment,
                                        'content'    => $redirectContent ) );
@@ -4701,8 +4702,6 @@ class Title {
                $contentHandler = ContentHandler::getForTitle( $this );
                $pageLang = $contentHandler->getPageLanguage( $this );
 
-               // Hook at the end because we don't want to override the above stuff
-               wfRunHooks( 'PageContentLanguage', array( $this, &$pageLang, $wgLang ) );
                return wfGetLangObj( $pageLang );
        }
 
index 1efdf6b..c0d71e4 100644 (file)
@@ -1169,13 +1169,17 @@ class User {
                                }
                                $newGroups = array_merge( $oldGroups, $toPromote ); // all groups
 
-                               $log = new LogPage( 'rights', $wgAutopromoteOnceLogInRC /* in RC? */ );
-                               $log->addEntry( 'autopromote',
-                                       $this->getUserPage(),
-                                       '', // no comment
-                                       // These group names are "list to texted"-ed in class LogPage.
-                                       array( implode( ', ', $oldGroups ), implode( ', ', $newGroups ) )
-                               );
+                               $logEntry = new ManualLogEntry( 'rights', 'autopromote' );
+                               $logEntry->setPerformer( $this );
+                               $logEntry->setTarget( $this->getUserPage() );
+                               $logEntry->setParameters( array(
+                                       '4::oldgroups' => $oldGroups,
+                                       '5::newgroups' => $newGroups,
+                               ) );
+                               $logid = $logEntry->insert();
+                               if ( $wgAutopromoteOnceLogInRC ) {
+                                       $logEntry->publish( $logid );
+                               }
                        }
                }
                return $toPromote;
index b525ff1..df3086a 100644 (file)
@@ -2163,6 +2163,7 @@ class WikiPage extends Page implements IDBAccessObject {
 
                $dbw = wfGetDB( DB_MASTER );
                $revision = new Revision( array(
+                       'title'      => $this->getTitle(), // for determining the default content model
                        'page'       => $this->getId(),
                        'text'       => $serialized,
                        'length'     => $content->getSize(),
index ec1b06e..4cb91bc 100644 (file)
@@ -246,6 +246,11 @@ class ApiEditPage extends ApiBase {
                        $requestArray['wpSectionTitle'] = $params['sectiontitle'];
                }
 
+               // TODO: Pass along information from 'undoafter' as well
+               if ( $params['undo'] > 0 ) {
+                       $requestArray['wpUndidRevision'] = $params['undo'];
+               }
+
                // Watch out for basetimestamp == ''
                // wfTimestamp() treats it as NOW, almost certainly causing an edit conflict
                if ( !is_null( $params['basetimestamp'] ) && $params['basetimestamp'] != '' ) {
index 148e26b..9bf7436 100644 (file)
@@ -820,7 +820,7 @@ class MessageCache {
         * @param $linestart bool
         * @param $interface bool
         * @param $language
-        * @return ParserOutput
+        * @return ParserOutput|string
         */
        public function parse( $text, $title = null, $linestart = true, $interface = false, $language = null  ) {
                if ( $this->mInParser ) {
index 66d7209..3c77694 100644 (file)
@@ -241,7 +241,6 @@ interface Content {
         */
        public function isCountable( $hasLinks = null );
 
-
        /**
         * Parse the Content object and generate a ParserOutput from the result.
         * $result->getText() can be used to obtain the generated HTML. If no HTML
@@ -262,7 +261,7 @@ interface Content {
        public function getParserOutput( Title $title,
                $revId = null,
                ParserOptions $options = null, $generateHtml = true );
-       # TODO: make RenderOutput and RenderOptions base classes
+       // TODO: make RenderOutput and RenderOptions base classes
 
        /**
         * Returns a list of DataUpdate objects for recording information about this
@@ -381,7 +380,7 @@ interface Content {
         *
         * @since 1.21
         *
-        * @param $section Empty/null/false or a section number (0, 1, 2, T1, T2...), or "new"
+        * @param $section null/false or a section number (0, 1, 2, T1, T2...), or "new"
         * @param $with Content: new content of the section
         * @param $sectionTitle String: new section's subject, only if $section is 'new'
         * @return string Complete article text, or null if error
@@ -396,10 +395,10 @@ interface Content {
         *
         * @param $title Title
         * @param $user User
-        * @param $popts null|ParserOptions
+        * @param $parserOptions null|ParserOptions
         * @return Content
         */
-       public function preSaveTransform( Title $title, User $user, ParserOptions $popts );
+       public function preSaveTransform( Title $title, User $user, ParserOptions $parserOptions );
 
        /**
         * Returns a new WikitextContent object with the given section heading
@@ -420,10 +419,10 @@ interface Content {
         * @since 1.21
         *
         * @param $title Title
-        * @param $popts null|ParserOptions
+        * @param $parserOptions null|ParserOptions
         * @return Content
         */
-       public function preloadTransform( Title $title, ParserOptions $popts );
+       public function preloadTransform( Title $title, ParserOptions $parserOptions );
 
        /**
         * Prepare Content for saving. Called before Content is saved by WikiPage::doEditContent() and in
@@ -482,9 +481,9 @@ interface Content {
         */
        public function matchMagicWord( MagicWord $word );
 
-       # TODO: ImagePage and CategoryPage interfere with per-content action handlers
-       # TODO: nice&sane integration of GeSHi syntax highlighting
-       #   [11:59] <vvv> Hooks are ugly; make CodeHighlighter interface and a
-       #   config to set the class which handles syntax highlighting
-       #   [12:00] <vvv> And default it to a DummyHighlighter
+       // TODO: ImagePage and CategoryPage interfere with per-content action handlers
+       // TODO: nice&sane integration of GeSHi syntax highlighting
+       //   [11:59] <vvv> Hooks are ugly; make CodeHighlighter interface and a
+       //   config to set the class which handles syntax highlighting
+       //   [12:00] <vvv> And default it to a DummyHighlighter
 }
index 8e8de4b..ee2f2ed 100644 (file)
@@ -607,15 +607,17 @@ abstract class ContentHandler {
         * @return Language the page's language
         */
        public function getPageLanguage( Title $title, Content $content = null ) {
-               global $wgContLang;
+               global $wgContLang, $wgLang;
+               $pageLang = $wgContLang;
 
                if ( $title->getNamespace() == NS_MEDIAWIKI ) {
                        // Parse mediawiki messages with correct target language
                        list( /* $unused */, $lang ) = MessageCache::singleton()->figureMessage( $title->getText() );
-                       return wfGetLangObj( $lang );
+                       $pageLang = wfGetLangObj( $lang );
                }
 
-               return $wgContLang;
+               wfRunHooks( 'PageContentLanguage', array( $title, &$pageLang, $wgLang ) );
+               return wfGetLangObj( $pageLang );
        }
 
        /**
index 1125d4f..d30d984 100644 (file)
@@ -705,6 +705,14 @@ class DatabaseSqlite extends DatabaseBase {
        function addQuotes( $s ) {
                if ( $s instanceof Blob ) {
                        return "x'" . bin2hex( $s->fetch() ) . "'";
+               } else if ( strpos( $s, "\0" ) !== false ) {
+                       // SQLite doesn't support \0 in strings, so use the hex representation as a workaround.
+                       // This is a known limitation of SQLite's mprintf function which PDO should work around,
+                       // but doesn't. I have reported this to php.net as bug #63419:
+                       // https://bugs.php.net/bug.php?id=63419
+                       // There was already a similar report for SQLite3::escapeString, bug #62361:
+                       // https://bugs.php.net/bug.php?id=62361
+                       return "x'" . bin2hex( $s ) . "'";
                } else {
                        return $this->mConn->quote( $s );
                }
index eaedb8b..affd65f 100644 (file)
@@ -349,7 +349,7 @@ abstract class ORMRow implements IORMRow {
         * @return boolean Success indicator
         */
        protected function saveExisting( $functionName = null ) {
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->table->getWriteDbConnection();
 
                $success = $dbw->update(
                        $this->table->getName(),
@@ -358,6 +358,8 @@ abstract class ORMRow implements IORMRow {
                        is_null( $functionName ) ? __METHOD__ : $functionName
                );
 
+               $this->table->releaseConnection( $dbw );
+
                // DatabaseBase::update does not always return true for success as documented...
                return $success !== false;
        }
@@ -385,7 +387,7 @@ abstract class ORMRow implements IORMRow {
         * @return boolean Success indicator
         */
        protected function insert( $functionName = null, array $options = null ) {
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->table->getWriteDbConnection();
 
                $success = $dbw->insert(
                        $this->table->getName(),
@@ -401,6 +403,8 @@ abstract class ORMRow implements IORMRow {
                        $this->setField( 'id', $dbw->insertId() );
                }
 
+               $this->table->releaseConnection( $dbw );
+
                return $success;
        }
 
@@ -560,7 +564,7 @@ abstract class ORMRow implements IORMRow {
                $absoluteAmount = abs( $amount );
                $isNegative = $amount < 0;
 
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->table->getWriteDbConnection();
 
                $fullField = $this->table->getPrefixedField( $field );
 
@@ -575,6 +579,8 @@ abstract class ORMRow implements IORMRow {
                        $this->setField( $field, $this->getField( $field ) + $amount );
                }
 
+               $this->table->releaseConnection( $dbw );
+
                return $success;
        }
 
index cb8be0b..7e91949 100644 (file)
@@ -72,8 +72,9 @@ abstract class FileBackendStore extends FileBackend {
        }
 
        /**
-        * Check if a file can be created at a given storage path.
-        * FS backends should check if the parent directory exists and the file is writable.
+        * Check if a file can be created or changed at a given storage path.
+        * FS backends should check if the parent directory exists, files can be
+        * written under it, and that any file already there is writable.
         * Backends using key/value stores should check if the container exists.
         *
         * @param $storagePath string
index 20dfda2..ff1b604 100644 (file)
@@ -488,7 +488,7 @@ class StoreFileOp extends FileOp {
                                $this->params['dst'], $this->backend->maxFileSizeInternal() );
                        $status->fatal( 'backend-fail-store', $this->params['src'], $this->params['dst'] );
                        return $status;
-               // Check if a file can be placed at the destination
+               // Check if a file can be placed/changed at the destination
                } elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
                        $status->fatal( 'backend-fail-usable', $this->params['dst'] );
                        $status->fatal( 'backend-fail-store', $this->params['src'], $this->params['dst'] );
@@ -551,7 +551,7 @@ class CreateFileOp extends FileOp {
                                $this->params['dst'], $this->backend->maxFileSizeInternal() );
                        $status->fatal( 'backend-fail-create', $this->params['dst'] );
                        return $status;
-               // Check if a file can be placed at the destination
+               // Check if a file can be placed/changed at the destination
                } elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
                        $status->fatal( 'backend-fail-usable', $this->params['dst'] );
                        $status->fatal( 'backend-fail-create', $this->params['dst'] );
@@ -624,7 +624,7 @@ class CopyFileOp extends FileOp {
                                $status->fatal( 'backend-fail-notexists', $this->params['src'] );
                                return $status;
                        }
-               // Check if a file can be placed at the destination
+               // Check if a file can be placed/changed at the destination
                } elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
                        $status->fatal( 'backend-fail-usable', $this->params['dst'] );
                        $status->fatal( 'backend-fail-copy', $this->params['src'], $this->params['dst'] );
@@ -700,7 +700,7 @@ class MoveFileOp extends FileOp {
                                $status->fatal( 'backend-fail-notexists', $this->params['src'] );
                                return $status;
                        }
-               // Check if a file can be placed at the destination
+               // Check if a file can be placed/changed at the destination
                } elseif ( !$this->backend->isPathUsableInternal( $this->params['dst'] ) ) {
                        $status->fatal( 'backend-fail-usable', $this->params['dst'] );
                        $status->fatal( 'backend-fail-move', $this->params['src'], $this->params['dst'] );
@@ -781,6 +781,11 @@ class DeleteFileOp extends FileOp {
                                $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-delete', $this->params['src'] );
+                       return $status;
                }
                // Update file existence predicates
                $predicates['exists'][$this->params['src']] = false;
index 4f1c4d0..7d8bda0 100644 (file)
@@ -10467,7 +10467,7 @@ php.ini를 확인하고 <code>session.save_path</code>가 적절한 디렉토리
        'config-page-copying' => '전문',
        'config-page-upgradedoc' => '업그레이드하기',
        'config-page-existingwiki' => '기존 위키',
-       'config-help-restart' => '당신이 입력한 모든 저장된 데이터를 지우고 설치 과정을 다시 시작하겠습니까?',
+       'config-help-restart' => '입력한 모든 저장된 데이터를 지우고 설치 과정을 다시 시작하겠습니까?',
        'config-restart' => '예, 다시 시작합니다',
        'config-welcome' => '=== 사용 환경 검사 ===
 이 환경이 미디어위키 설치에 적합한지 기본 검사를 실행합니다.
@@ -10528,7 +10528,7 @@ PHP를 직접 컴파일할 경우 데이터베이스 클라이언트를 사용
 이 옵션은 미디어위키에 끔찍한 버그를 일으킵니다.
 설치할 수 없습니다. 또는 미디어위키가 사용하지 않는 이 옵션을 비활성화하십시오.",
        'config-safe-mode' => "'''경고:''' [http://www.php.net/features.safe-mode 안전 모드]이 활성합니다!
-이는 특히 파일을 올리거나 <code>math</code>를 지원하는 데 문제가 발생할 수 있습니다.",
+특히 파일을 올리거나 <code>math</code>를 지원하는 데 문제가 발생할 수 있습니다.",
        'config-xml-bad' => 'PHP의 XML 모듈이 없습니다.
 미디어위키는 이 모듈의 기능이 필요하며 이 설정에서는 작동하지 않습니다.
 Mandrake를 실행하고 있다면 php-xml 패키지를 설치하세요.',
@@ -10538,7 +10538,7 @@ Mandrake를 실행하고 있다면 php-xml 패키지를 설치하세요.',
 미디어위키가 제대로 작동하려면 UTF-8 지원이 필요합니다.",
        'config-memory-raised' => 'PHP의 <code>memory_limit</code>는 $1이며 $2(으)로 늘리세요.',
        'config-memory-bad' => "'''경고:''' PHP의 <code>memory_limit</code>는 $1입니다.
\9d´ë\8a\94 ì\95\84ë§\88ë\8f\84 ë\84\88무 ë\82®ì\9d\80 ê²\83 ê°\99ì\8aµë\8b\88ë\8b¤.
+아마도 너무 낮은 것 같습니다.
 설치가 실패할 수 있습니다!",
        'config-ctype' => "'''치명''': PHP는 [http://www.php.net/manual/en/ctype.installation.php Ctype 확장 기능]에 대해 지원하여 컴파일해야 합니다.",
        'config-xcache' => '[http://xcache.lighttpd.net/ XCache]가 설치되었습니다',
@@ -10561,7 +10561,7 @@ Mandrake를 실행하고 있다면 php-xml 패키지를 설치하세요.',
        'config-using-server' => '"<nowiki>$1</nowiki>"(을)를 서버 이름으로 사용합니다.',
        'config-using-uri' => '"<nowiki>$1$2</nowiki>"(을)를 서버 URL로 사용합니다.',
        'config-uploads-not-safe' => "'''경고:''' 올리기에 대한 기본 디렉토리(<code>$1</code>)는 임의의 스크립트 실행에 취약합니다.
-미ë\94\94ì\96´ì\9c\84í\82¤ë\8a\94 ë³´ì\95\88 ì\9c\84í\98\91ì\97\90 ë\8c\80í\95\9c ëª¨ë\93  ì\98¬ë¦° í\8c\8cì\9d¼ì\9d\84 ê²\80ì\82¬í\95\98ì§\80ë§\8c, ì\9d´ë\8a\94 ì\98¬ë¦¬ê¸°ë¥¼ í\99\9cì\84±í\99\94í\95\98기 ì \84ì\97\90 [//www.mediawiki.org/wiki/Manual:Security#Upload_security ì\9d´ ë³´ì\95\88 ì·¨ì\95½ì \90ì\9d\84 í\95´ê²°í\95  ê²\83\9d\84 ë§¤ì\9a° ê¶\8cì\9e¥í\95©ë\8b\88ë\8b¤.",
+미디어위키는 보안 위협에 대한 모든 올린 파일을 검사하지만, 올리기를 활성화하기 전에 [//www.mediawiki.org/wiki/Manual:Security#Upload_security 이 보안 취약점을 해결할 것]을 매우 권장합니다.",
        'config-no-cli-uploads-check' => "'''경고:''' 올리기에 대한 기본 디렉토리(<code>$1</code>)는 CLI를 설치하는 동안 임의의 스크립트 실행에 대한 취약점에 대해 검사되지 않습니다.",
        'config-brokenlibxml' => '시스템에 버그가 있는 PHP와 libxml2의 조합이 있으며 미디어위키나 다른 웹 어플리케이션에 숨겨진 데이터 손상을 일으킬 수 있습니다.
 PHP 5.2.9 이후와 libxml2 2.7.3 이후로 업그레이드하세요 ([//bugs.php.net/bug.php?id=45996 PHP에 제기한 버그]).
@@ -10574,7 +10574,7 @@ PHP 5.2.9 이후와 libxml2 2.7.3 이후로 업그레이드하세요 ([//bugs.ph
        'config-db-host' => '데이터베이스 호스트:',
        'config-db-host-help' => '데이터베이스 서버가 다른 서버에 있을 경우 여기에 호스트 이름이나 IP 주소를 입력하세요.
 
-웹 호스팅을 공유하여 사용하는 경우 호스팅 공급자는 당신에게 이들 설명서의 올바른 호스트 이름을 표기해야 합니다.
+공유된 웹 호스팅을 사용하는 경우 호스팅 공급자는 올바른 호스트 이름을 설명해야 합니다.
 
 윈도 서버에 설치하고 MySQL을 사용할 경우 "localhost"는 서버 이름으로 작동하지 않을 수 있습니다. 그렇지 않으면 로컬 IP 주소로 "127.0.0.1"를 시도하세요.
 
@@ -10584,9 +10584,9 @@ PostgreSQL을 사용할 경우 유닉스 소켓을 통해 연결되도록 입력
        'config-db-wiki-settings' => '이 위키 식별',
        'config-db-name' => '데이터베이스 이름:',
        'config-db-name-help' => '위키를 식별하기 위한 이름을 선택하세요.
-이는 공백이 없어야 합니다.
+공백이 없어야 합니다.
 
-웹 호스팅을 공유해 사용하는 경우 호스팅 제공 업체도 당신에게 제어판을 통해 데이터베이스를 사용하거나 만들 수 있도록 특정 데이터베이스 이름을 제공합니다.',
+공유된 웹 호스팅 사용하는 경우 호스팅 제공 업체가 특정 데이터베이스 이름을 제공하거나 제어판에서 데이터베이스를 만들 수 있도록 합니다.',
        'config-db-name-oracle' => '데이터베이스 스키마:',
        'config-db-account-oracle-warn' => '데이터베이스 백엔드로 오라클을 설치하기 위해 지원하는 세 가지 시나리오가 있습니다:
 
@@ -10597,10 +10597,11 @@ PostgreSQL을 사용할 경우 유닉스 소켓을 통해 연결되도록 입력
        'config-db-username' => '데이터베이스 사용자 이름:',
        'config-db-password' => '데이터베이스 비밀번호:',
        'config-db-password-empty' => '새 데이터베이스 사용자의 비밀번호를 입력하세요: $1.
-ë¹\84ë°\80ë²\88í\98¸ ì\97\86ì\9d´ ì\82¬ì\9a©ì\9e\90를 ë§\8cë\93¤ ì\88\98ë\8f\84 ì\9e\88ì§\80ë§\8c ì\9d´ë\8a\94 ì\95\88ì \84í\95\98ì§\80 ì\95\8aì\8aµë\8b\88ë\8b¤.',
+비밀번호 없이 사용자를 만들 수도 있지만 안전하지 않습니다.',
        'config-db-install-username' => '설치 과정 중에 데이터베이스에 연결할 때 사용할 사용자 이름을 입력하세요.
-이는 미디어위키 계정의 사용자 이름이 아닌 데이터베이스에 대한 사용자 이름입니다.',
-       'config-db-install-password' => '설치 과정 중에 데이터베이스에 연결할 때 사용할 비밀번호을 입력하세요. 이는 미디어위키 계정의 비밀번호가 아닌 데이터베이스에 대한 비밀번호입니다.',
+미디어위키 계정의 사용자 이름이 아닌 데이터베이스에 대한 사용자 이름입니다.',
+       'config-db-install-password' => '설치 과정 중에 데이터베이스에 연결할 때 사용할 비밀번호을 입력하세요.
+미디어위키 계정의 비밀번호가 아닌 데이터베이스에 대한 비밀번호입니다.',
        'config-db-install-help' => '설치 과정 중에 데이터베이스에 연결할 때 사용할 사용자 이름과 비밀번호를 입력하세요.',
        'config-db-account-lock' => '정상적으로 작동하는 동안 같은 사용자 이름과 비밀번호를 사용함',
        'config-db-wiki-account' => '정상적인 작동을 위한 사용자 계정',
@@ -10615,10 +10616,10 @@ PostgreSQL을 사용할 경우 유닉스 소켓을 통해 연결되도록 입력
        'config-charset-mysql5-binary' => 'MySQL 4.1/5.0 바이너리',
        'config-charset-mysql5' => 'MySQL 4.1/5.0 UTF-8',
        'config-charset-mysql4' => 'MySQL 4.0 UTF-8 하위 호환성',
-       'config-charset-help' => "'''경고:''' MySQL 4.1에서 '''UTF-8 하위 호환성'''을 사용하고 나서 <code>mysqldump</code>로 데이터베이스에 백업한다면 이는 모든 ASCII가 아닌 문자를 파괴하고 손상한 백업을 되돌릴 수 없습니다!
+       'config-charset-help' => "'''경고:''' MySQL 4.1에서 '''UTF-8 하위 호환성'''을 사용하고 나서 <code>mysqldump</code>로 데이터베이스에 백업한다면 모든 ASCII가 아닌 문자를 파괴하고 손상한 백업을 되돌릴 수 없습니다!
 
 '''바이너리 모드'''에서는 미디어위키는 바이너리 필드의 데이터베이스에 UTF-8 텍스트를 저장합니다.
-이는 MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전체 범위를 사용할 수 있습니다.
+MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전체 범위를 사용할 수 있습니다.
 '''UTF-8 모드'''에서는 MySQL은 데이터를 설정하는 어떤 문자열인지를 알 것이며, 표현하고 적절하게 그것을 변환할 수 있지만
 [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes 기본 다국어 범위] 상의 문자를 저장하지 못하게 될 수 있습니다.",
        'config-mysql-old' => 'MySQL $1 이상이 필요하나 $2(이)가 있습니다.',
@@ -10635,7 +10636,7 @@ PostgreSQL을 사용할 경우 유닉스 소켓을 통해 연결되도록 입력
 PHP 파일이 있는 곳을 우리가 이를 맡길 수 없는 이유는 웹을 통해 접근할 수 없다는 것입니다.
 
 설치 마법사가 이과 함께 .htaccess 파일을 만들지만 거기서 실패하면 누군가는 원본 데이터베이스에 접근하는 데 실패합니다.
\9d´ë\8a\94 ì\9b\90ì\8b\9c ì\82¬ì\9a©ì\9e\90 ë\8d°ì\9d´í\84°(ì\9d´ë©\94ì\9d¼ ì£¼ì\86\8c, ì\95\94í\98¸ í\95´ì\8b\9c) ë¿\90ë§\8c ì\95\84ë\8b\88ë\9d¼ ì\82­ì \9cë\90\9c ê°\9cì \95í\8c\90ê³¼ ì\9c\84í\82¤ì\9d\98 ë\8b¤ë¥¸ ì \9cí\95\9cë\90\9c ë\8d°ì\9d´í\84°ë¥¼ í\8f¬í\95¨í\95©ë\8b\88ë\8b¤.
+원시 사용자 데이터(이메일 주소, 암호 해시) 뿐만 아니라 삭제된 개정판과 위키의 다른 제한된 데이터를 포함합니다.
 
 <code>/var/lib/mediawiki/yourwiki</code>와 같이 모두 다른 곳에서 데이터베이스를 넣어보도록 하세요.',
        'config-oracle-def-ts' => '기본 테이블공간:',
@@ -10646,7 +10647,7 @@ PHP 파일이 있는 곳을 우리가 이를 맡길 수 없는 이유는 웹을
 
 $1
 
-데이터베이스 시스템이 표시되지 않을 때 아래에 나열된 다음 지원을 활성화하려면 당신은 위의 링크된 지시에 따라 사용해볼 수도 있습니다.',
+데이터베이스 시스템이 표시되지 않을 때 아래에 나열된 다음 지원을 활성화하려면 위의 링크된 지시에 따라 설치해볼 수 있습니다.',
        'config-support-mysql' => '* $1은 미디어위키의 기본 대상으로 가장 잘 지원합니다. ([http://www.php.net/manual/en/mysql.installation.php MySQL을 지원하여 PHP를 컴파일하는 방법])',
        'config-support-postgres' => '* $1은 MySQL의 대안으로 인기있는 오픈 소스 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pgsql.installation.php PostgreSQL을 지원하여 PHP를 컴파일하는 방법]) 몇가지 사소한 해결하지 못한 버그가 있을 수 있으며, 이를 제작 환경에서 사용하지 않는 것이 좋습니다.',
        'config-support-sqlite' => '* $1는 매우 잘 지원하는 가벼운 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pdo.installation.php SQLite를 지원하여 PHP를 컴파일하는 방법], PDO 사용)',
@@ -10677,7 +10678,7 @@ ASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하
        'config-postgres-old' => 'PostgreSQL $1 이상이 필요하나 $2(이)가 있습니다.',
        'config-sqlite-name-help' => '위키를 식별하기 위한 이름을 선택하세요.
 공백이나 하이픈을 사용하지 마십시오.
-이는 SQLite 데이터 파일 이름에 사용됩니다.',
+SQLite 데이터 파일 이름에 사용됩니다.',
        'config-sqlite-parent-unwritable-group' => '<code><nowiki>$1</nowiki></code> 데이터 디렉토리를 만들 수 없으며 <code><nowiki>$2</nowiki></code> 상위 디렉토리에 웹 서버에 의해 쓸 수 없기 때문입니다.
 
 설치 마법사는 웹 서버로 실행중인 사용자를 결정할 수 없습니다.
@@ -10731,8 +10732,8 @@ chmod a+w $3</pre>',
        'config-mysql-innodb' => 'InnoDB',
        'config-mysql-myisam' => 'MyISAM',
        'config-mysql-myisam-dep' => "'''경고''': 미디어위키와 함께 사용하도록 권장하지 않는 MySQL에 대한 스토리지 엔진으로 MyISAM을 선택하였습니다. 이유는:
-* 이는 테이블이 잠겨있어 동시성을 거의 지원하지 않습니다
-* 이는 다른 엔진보다 손상이 더 자주 발생합니다
+* 테이블이 잠겨있어 동시성을 거의 지원하지 않습니다
+* 다른 엔진보다 손상이 더 자주 발생합니다
 * 미디어위키 바탕 코드가 항상 정상적으로 MyISAM을 처리하지 않습니다
 
 MySQL 설치가 InnoDB를 지원한다면 그 선택 대신에 InnoDB를 선택할 것을 매우 권장합니다.
@@ -10745,12 +10746,12 @@ MyISAM 데이터베이스는 InnoDB 데이터베이스보다 더 자주 손실
        'config-mysql-binary' => '바이너리',
        'config-mysql-utf8' => 'UTF-8',
        'config-mysql-charset-help' => "'''바이너리 모드'''에서는 미디어위키는 바이너리 필드의 데이터베이스에 UTF-8 텍스트를 저장합니다.
-이는 MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전체 범위를 사용할 수 있습니다.
+MySQL의 UTF-8 모드를 보다 더 효율적이고 유니코드 문자의 전체 범위를 사용할 수 있습니다.
 '''UTF-8 모드'''에서는 MySQL은 데이터를 설정하는 어떤 문자열인지를 알 것이며, 표현하고 적절하게 그것을 변환할 수 있지만
 [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes 기본 다국어 범위] 상의 문자를 저장하지 못하게 될 수 있습니다.",
-       'config-ibm_db2-low-db-pagesize' => "당신의 DB2 데이터베이스에 부족한 페이지 크기가 기본 테이블 공간에 있습니다. 페이지 크기는 '''32K''' 이상이어야 합니다.",
+       'config-ibm_db2-low-db-pagesize' => "DB2 데이터베이스에 부족한 페이지 크기가 기본 테이블 공간에 있습니다. 페이지 크기는 '''32K''' 이상이어야 합니다.",
        'config-site-name' => '위키 이름:',
-       'config-site-name-help' => '이는 브라우저 제목 표시줄과 다른 여러 곳에 나타날 것입니다.',
+       'config-site-name-help' => '브라우저 제목 표시줄과 다른 여러 곳에 나타납니다.',
        'config-site-name-blank' => '사이트 이름을 입력하세요.',
        'config-project-namespace' => '프로젝트 이름공간:',
        'config-ns-generic' => '프로젝트',
@@ -10759,7 +10760,7 @@ MyISAM 데이터베이스는 InnoDB 데이터베이스보다 더 자주 손실
        'config-ns-other-default' => '내위키',
        'config-project-namespace-help' => '위키백과의 예를 따라서, 많은 위키는 "\'\'\'프로젝트 이름공간\'\'\'"에 그들의 콘텐츠 페이지에서 그들의 정책 페이지는 별도로 보관합니다.
 이 이름공간에 있는 모든 페이지의 제목은 여기서 지정할 수 있는 특정 접두어로 시작합니다.
-보통 이 접두어는 위키의 이름에서 파생되지만, 이는 "#" 또는 ":"와 같은 특수 문자를 포함할 수 없습니다.',
+보통 이 접두어는 위키의 이름에서 파생되지만, "#" 또는 ":"와 같은 특수 문자를 포함할 수 없습니다.',
        'config-ns-invalid' => '특정 "<nowiki>$1</nowiki>" 이름공간이 잘못되었습니다.
 다른 프로젝트 이름공간을 지정하세요.',
        'config-ns-conflict' => '특정 "<nowiki>$1</nowiki>" 이름공간이 기본 미디어위키 이름공간과 충돌합니다.
@@ -10769,7 +10770,7 @@ MyISAM 데이터베이스는 InnoDB 데이터베이스보다 더 자주 손실
        'config-admin-password' => '비밀번호:',
        'config-admin-password-confirm' => '비밀번호 확인:',
        'config-admin-help' => '"홍길동"과 같이 여기에 원하는 사용자 이름을 입력하세요.
\9d´ë\8a\94 ì\9c\84í\82¤ì\97\90 ë¡\9cê·¸ì\9d¸í\95\98ë\8a\94 ë\8d° ì\82¬ì\9a©ë\90\98ë\8a\94 ì\9d´ë¦\84ì\9e\85ë\8b\88ë\8b¤.',
+위키에 로그인하는 데 사용되는 이름입니다.',
        'config-admin-name-blank' => '관리자의 사용자 이름을 입력하세요.',
        'config-admin-name-invalid' => '특정 "<nowiki>$1</nowiki>" 사용자 이름이 잘못되었습니다.
 다른 사용자 이름을 지정하세요.',
@@ -10782,8 +10783,8 @@ MyISAM 데이터베이스는 InnoDB 데이터베이스보다 더 자주 손실
        'config-admin-error-password' => '"<nowiki>$1</nowiki>" 관리자의 비밀번호를 설정하는 중 내부 오류가 발생했습니다: <pre>$2</pre>',
        'config-admin-error-bademail' => '이메일 주소를 잘못 입력하였습니다.',
        'config-subscribe' => '[https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 배포 발표 메일링 리스트]에 가입합니다.',
-       'config-subscribe-help' => 'ì\9d´ë\8a\94 ì¤\91ì\9a\94í\95\9c ë³´ì\95\88 ì\95\8c림ì\9d\84 í\8f¬í\95¨í\95\9c ë°°í\8f¬ ì\95\8c림ì\97\90 ë\8c\80í\95´ ì\82¬ì\9a©ë\90\98ë\8a\94 ë¡\9cì\9a° ë³¼ë¥¨ ë©\94ì\9d¼ë§\81 ë¦¬ì\8a¤í\8a¸ì\9e\85ë\8b\88ë\8b¤.
-ë\8b¹ì\8b ì\9d´ ì\9d´ë¥¼ êµ¬ë\8f\85í\95\98ê³  ë\82\98ì\84\9c ì\83\88 ë²\84ì \84ì\9d´ ë\82\98ì\98¬ ë\95\8c ë¯¸ë\94\94ì\96´ì\9c\84í\82¤ ì\84¤ì¹\98를 ì\97\85ë\8d°ì\9d´í\8a¸í\95´ì\95¼í\95©ë\8b\88ë\8b¤.',
+       'config-subscribe-help' => '중요한 보안 알림을 포함한 배포 알림에 대해 사용되는 로우 볼륨 메일링 리스트입니다.
+ì\9d´ ë¦¬ì\8a¤í\8a¸ë¥¼ êµ¬ë\8f\85í\95\98ê³  ë\82\98ì\84\9c ì\83\88 ë²\84ì \84ì\9d´ ë\82\98ì\98¬ ë\95\8c ë¯¸ë\94\94ì\96´ì\9c\84í\82¤ ì\84¤ì¹\98를 ì\97\85ë\8d°ì\9d´í\8a¸í\95\98ì\8b­ì\8b\9cì\98¤.',
        'config-subscribe-noemail' => '이메일 주소를 제공하지 않고 배포 발표 메일링 리스트에 가입하려 합니다.
 메일링 리스트에 가입하고자 할 경우 이메일 주소를 제공하세요.',
        'config-almost-done' => '거의 다 완료했습니다!
@@ -10795,16 +10796,17 @@ MyISAM 데이터베이스는 InnoDB 데이터베이스보다 더 자주 손실
        'config-profile-no-anon' => '계정 만들기 필요',
        'config-profile-fishbowl' => '승인된 편집자만 이용 가능',
        'config-profile-private' => '비공개 위키',
-       'config-profile-help' => "ì\9c\84í\82¤ë\8a\94 ë\8b¹ì\8b ì\9d´ ê°\80ë\8a¥í\95\9c í\95\9c ë§\8eì\9d\80 ì\82¬ë\9e\8cë\93¤ì\9d´ í\8e¸ì§\91í\95\98ë\8f\84ë¡\9d í\95  ë\95\8c ìµ\9cê³ ë¡\9c ì \81í\95©합니다.
-미ë\94\94ì\96´ì\9c\84í\82¤ì\97\90ì\84\9cë\8a\94 ìµ\9cê·¼ ë°\94ë\80\9cì\9d\84 ê²\80í\86 í\95\98ê³ , ì\84 í\95\98ê±°ë\82\98 ì\95\85ì\9d\98ì \81ì\9d¸ ì\82¬ì\9a©ì\9e\90ì\97\90 ì\9d\98í\95´ ì\88\98í\96\89ë\90\98ë\8a\94 모든 손실을 되돌리는 것이 쉽습니다.
+       'config-profile-help' => "ì\9c\84í\82¤ë\8a\94 ë§\8eì\9d\80 ì\82¬ë\9e\8cë\93¤ì\9d´ ê°\80ë\8a¥í\95\9c í\95\9c í\95´ë\8b¹ ì\9c\84í\82¤ë¥¼ í\8e¸ì§\91í\95  ë\95\8c ê°\80ì\9e¥ ë\9b°ì\96´ë\82\9c ì\97­í\95 ì\9d\84 합니다.
+미ë\94\94ì\96´ì\9c\84í\82¤ì\97\90ì\84\9cë\8a\94 ìµ\9cê·¼ ë°\94ë\80\9cì\9d\84 ê²\80í\86 í\95\98ê³ , ì\84 í\95\98ê±°ë\82\98 ì\95\85ì\9d\98ì \81ì\9d¸ ì\82¬ì\9a©ì\9e\90ì\9d\98 모든 손실을 되돌리는 것이 쉽습니다.
 
-그러나 많은 사람들이 미디어위키가 다양한 역할의 유용하지만, 때로는 그것이 위키 방식의 장점을 모두 설득하기 쉽지 않음을 발견했습니다.
+그러나 많은 사람들이 미디어위키가 다양한 역할로 유용하지만, 때로는 모든 사람에게 위키 방식의 장점을 모두 설득하기 쉽지 않을 지도 모릅니다.
 그래서 선택할 수 있습니다.
 
 '''{{int:config-profile-wiki}}'''는 로그인하지 않고도 누구나 편집할 수 있습니다.
-'''{{int:config-profile-no-anon}}'''는 ì¶\94ê°\80ì \81ì\9c¼ë¡\9c í\95\84ì\9a\94í\95\9c ì±\85ì\9e\84ì\9d\84 ì \9cê³µí\95\98ì§\80ë§\8c, ê¸°ì¡´ì\9d\98 ê¸°ì\97¬ì\9e\90를 ë§\9dì¹  ì\88\98ë\8f\84 ì\9e\88ì\8aµë\8b\88ë\8b¤.
+'''{{int:config-profile-no-anon}}'''는 ê°\81 í\8e¸ì§\91ì\97\90 ì¶\94ê°\80ì \81ì\9c¼ë¡\9c ê°\95í\95\9c ì±\85ì\9e\84ì\84±ì\9d\84 ì \9cê³µí\95\98ì§\80ë§\8c, ë¶\80ë\8b´ ì\97\86ë\8a\94 ê¸°ì\97¬ë¥¼ ì \80í\95´í\95  ì\88\98ë\8f\84 ì\9e\88ì\8aµë\8b\88ë\8b¤.
 
-'''{{int:config-profile-fishbowl}}''' 같은 경우는 승인된 사용자만 편집할 수 있지만, 대중은 역사를 포함하여 페이지를 볼 수 있습니다. '''{{int:config-profile-private}}'''는 승인된 사용자만 같은 그룹에서 편집할 수 있고 볼 수 있습니다.
+'''{{int:config-profile-fishbowl}}''' 같은 경우는 승인된 사용자만 편집할 수 있지만, 대중은 역사를 포함하여 페이지를 볼 수 있습니다.
+'''{{int:config-profile-private}}'''는 승인된 사용자만 같은 그룹에서 편집할 수 있고 볼 수 있습니다.
 
 더 복잡한 사용자 권한을 설정하여 설치한 후 사용할 수 있도록 하려면 [//www.mediawiki.org/wiki/Manual:User_rights 관련 매뉴얼 항목]을 참고하세요.",
        'config-license' => '저작권 및 라이선스:',
@@ -10818,13 +10820,13 @@ MyISAM 데이터베이스는 InnoDB 데이터베이스보다 더 자주 손실
        'config-license-cc-choose' => '다른 크리에이티브 커먼즈 라이선스 선택',
        'config-license-help' => '많은 공개 위키는 모든 기여를 [http://freedomdefined.org/Definition 자유 라이선스] 하에 넣습니다.
 이럴 경우 커뮤니티 소유권의 이해를 할 수 있도록 하고 장기적인 기여를 장려합니다.
\9d´ë\8a\94 ì\9d¼ë°\98ì \81ì\9c¼ë¡\9c ê°\9cì\9d¸ ë\98\90ë\8a\94 í\9a\8cì\82¬ ì\9c\84í\82¤ì\97\90 ë\8c\80í\95´ì\84\9cë\8a\94 í\95\84ì\9a\94í\95\98ì§\80 ì\95\8aì\8aµë\8b\88ë\8b¤.
+일반적으로 개인 또는 회사 위키에 대해서는 필요하지 않습니다.
 
 위키백과의 텍스트를 사용할 수 있도록 하고 위키백과가 위키에서 복사한 텍스트를 사용할 수 있도록 원한다면 크리에이티브 커먼즈 저작자표시-동일조건변경허락으로 선택해야 합니다.
 
 위키백과는 이전에 GNU 자유 문서 사용 허가서를 사용했습니다.
-GFDL은 유효한 라이선스이지만 이는 이해하기 어렵습니다.
-이는 GFDL 하에 라이선스 내용을 재사용하는 것도 어렵습니다.',
+GFDL은 유효한 라이선스이지만 이해하기 어렵습니다.
+GFDL 하에 라이선스 내용을 재사용하는 것도 어렵습니다.',
        'config-email-settings' => '이메일 설정',
        'config-enable-email' => '발신 이메일 활성화',
        'config-enable-email-help' => '이메일을 작동하려면 [http://www.php.net/manual/en/mail.configuration.php PHP의 메일 설정]을 올바르게 설정해야 합니다.
@@ -10841,7 +10843,7 @@ GFDL은 유효한 라이선스이지만 이는 이해하기 어렵습니다.
 이메일 기능의 남용 가능성이 있기 때문에 이 옵션을 설정하는 것은 공개 위키에서 '''권장'''합니다.",
        'config-email-sender' => '반송 이메일 주소',
        'config-email-sender-help' => '발신한 이메일에 대한 반송 주소로 사용할 이메일 주소를 입력하세요.
-이는 반송할 때 보내는 주소입니다.
+반송할 때 보내는 주소입니다.
 대부분의 메일 서버는 적어도 도메인 이름 부분은 유효합니다.',
        'config-upload-settings' => '그림과 파일 올리기',
        'config-upload-enable' => '파일 올리기 활성화',
@@ -10887,8 +10889,8 @@ GFDL은 유효한 라이선스이지만 이는 이해하기 어렵습니다.
        'config-extensions' => '확장 기능',
        'config-extensions-help' => '위에 나열된 확장 기능이 <code>./extensions</code>에서 발견되었습니다.
 
\9d´ë\8a\94 ì\94ê°\80ì \81ì\9d¸ ì\84¤ì \95ì\9d´ í\95\84ì\9a\94í\95  ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤ë§\8c ì§\80ê¸\88 í\99\9cì\84±í\99\94ì\8b\9cí\82¬ ì\88\98 ì\9e\88ì\8aµë\8b\88ë\8b¤.',
-       'config-install-alreadydone' => "'''경고:''' 당신은 이미 미디어위키를 설치하였고 다시 설치하려고 합니다.
+추가적인 설정이 필요할 수 있습니다만 지금 활성화시킬 수 있습니다.',
+       'config-install-alreadydone' => "'''경고:''' 이미 미디어위키를 설치했고 다시 설치하려고 합니다.
 다음 페이지에서 진행하세요.",
        'config-install-begin' => '"{{int:config-continue}}"을 누르면 미디어위키의 설치를 시작합니다.
 그래도 바꾸는 것을 원한다면 뒤로를 누릅니다.',
@@ -10936,9 +10938,9 @@ GFDL은 유효한 라이선스이지만 이는 이해하기 어렵습니다.
 미디어위키가 성공적으로 설치되었습니다.
 
 설치 마법사가 <code>LocalSettings.php</code> 파일을 만들었습니다.
-이는 모든 설정이 포함되어 있습니다.
+모든 설정이 포함되어 있습니다.
 
-이를 다운로드하여 위키 설치의 거점에 넣어야 합니다 (index.php와 같은 디렉토리). 다운로드가 자동으로 시작됩니다.
+파일을 다운로드하여 위키 설치의 거점에 넣어야 합니다. (index.php와 같은 디렉토리) 다운로드가 자동으로 시작됩니다.
 
 다운로드가 제공되지 않을 경우나 그것을 취소한 경우에는 아래의 링크를 클릭하여 다운로드를 다시 시작할 수 있습니다:
 
@@ -18328,6 +18330,7 @@ $messages['zea'] = array(
  * @author Liangent
  * @author PhiLiP
  * @author Xiaomingyan
+ * @author Yfdyh000
  * @author 阿pp
  */
 $messages['zh-hans'] = array(
@@ -18755,6 +18758,7 @@ $3
 当本步骤完成后,您可以 '''[$2 进入您的wiki]'''。",
        'config-download-localsettings' => '下载LocalSettings.php',
        'config-help' => '帮助',
+       'config-nofile' => '找不到文件“$1”。它是否已被删除?',
        'mainpagetext' => "'''已成功安装MediaWiki。'''",
        'mainpagedocfooter' => '请查阅[//meta.wikimedia.org/wiki/Help:Contents 用户指南]以获取使用本wiki软件的信息!
 
index 4637bd2..dc5bdbd 100644 (file)
@@ -26,7 +26,7 @@
  * Class to handle enqueueing and running of background jobs
  *
  * @ingroup JobQueue
- * @since 1.20
+ * @since 1.21
  */
 abstract class JobQueue {
        protected $wiki; // string; wiki ID
@@ -47,7 +47,7 @@ abstract class JobQueue {
        /**
         * Get a job queue object of the specified type.
         * $params includes:
-        *     class : what job class to use (determines job type)
+        *     class : What job class to use (determines job type)
         *     wiki  : wiki ID of the wiki the jobs are for (defaults to current wiki)
         *     type  : The name of the job types this queue handles
         *     order : Order that pop() selects jobs, either "timestamp" or "random".
index d9465fb..a8a2e89 100644 (file)
@@ -25,7 +25,7 @@
  * Class to handle job queues stored in the DB
  *
  * @ingroup JobQueue
- * @since 1.20
+ * @since 1.21
  */
 class JobQueueDB extends JobQueue {
        const CACHE_TTL      = 30; // integer; seconds
@@ -126,30 +126,25 @@ class JobQueueDB extends JobQueue {
                        do { // retry when our row is invalid or deleted as a duplicate
                                // Try to reserve a row in the DB...
                                if ( $this->order === 'timestamp' ) { // oldest first
-                                       $found = $this->claim( $uuid, 0, true );
+                                       $row = $this->claimOldest( $uuid );
                                } else { // random first
-                                       $rand  = mt_rand( 0, self::MAX_JOB_RANDOM ); // encourage concurrent UPDATEs
-                                       $gte   = (bool)mt_rand( 0, 1 ); // find rows with rand before/after $rand
-                                       $found = $this->claim( $uuid, $rand, $gte )
-                                               || $this->claim( $uuid, $rand, !$gte ); // try both directions
+                                       $rand = mt_rand( 0, self::MAX_JOB_RANDOM ); // encourage concurrent UPDATEs
+                                       $gte  = (bool)mt_rand( 0, 1 ); // find rows with rand before/after $rand
+                                       $row  = $this->claimRandom( $uuid, $rand, $gte );
+                                       if ( !$row ) { // need to try the other direction
+                                               $row = $this->claimRandom( $uuid, $rand, !$gte );
+                                       }
                                }
                                // Check if we found a row to reserve...
-                               if ( !$found ) {
+                               if ( !$row ) {
                                        $wgMemc->set( $this->getEmptinessCacheKey(), 'true', self::CACHE_TTL );
                                        break; // nothing to do
                                }
-                               // Fetch any row that we just reserved...
-                               $row = $dbw->selectRow( 'job', '*',
-                                       array( 'job_cmd' => $this->type, 'job_token' => $uuid ), __METHOD__ );
-                               // Check if another process deleted it as a duplicate
-                               if ( !$row ) {
-                                       wfDebugLog( 'JobQueueDB', "Row deleted as duplicate by another process." );
-                                       continue; // try again
-                               }
                                // Get the job object from the row...
                                $title = Title::makeTitleSafe( $row->job_namespace, $row->job_title );
                                if ( !$title ) {
                                        $dbw->delete( 'job', array( 'job_id' => $row->job_id ), __METHOD__ );
+                                       wfIncrStats( 'job-pop' );
                                        wfDebugLog( 'JobQueueDB', "Row has invalid title '{$row->job_title}'." );
                                        continue; // try again
                                }
@@ -162,6 +157,7 @@ class JobQueueDB extends JobQueue {
                                                        "job_id != {$dbw->addQuotes( $row->job_id )}" ),
                                                __METHOD__
                                        );
+                                       wfIncrStats( 'job-pop', $dbw->affectedRows() );
                                }
                                break; // done
                        } while( true );
@@ -176,51 +172,105 @@ class JobQueueDB extends JobQueue {
 
        /**
         * Reserve a row with a single UPDATE without holding row locks over RTTs...
+        *
         * @param $uuid string 32 char hex string
         * @param $rand integer Random unsigned integer (31 bits)
         * @param $gte bool Search for job_random >= $random (otherwise job_random <= $random)
-        * @return integer Number of affected rows
+        * @return Row|false
         */
-       protected function claim( $uuid, $rand, $gte ) {
+       protected function claimRandom( $uuid, $rand, $gte ) {
                $dbw  = $this->getMasterDB();
                $dir  = $gte ? 'ASC' : 'DESC';
                $ineq = $gte ? '>=' : '<=';
-               if ( $dbw->getType() === 'mysql' ) {
-                       // Per http://bugs.mysql.com/bug.php?id=6980, we can't use subqueries on the
-                       // same table being changed in an UPDATE query in MySQL (gives Error: 1093).
-                       // Oracle and Postgre have no such limitation. However, MySQL offers an
-                       // alternative here by supporting ORDER BY + LIMIT for UPDATE queries.
-                       // The DB wrapper functions do not support this, so it's done manually.
-                       $dbw->query( "UPDATE {$dbw->tableName( 'job' )}
-                               SET
-                                       job_token = {$dbw->addQuotes( $uuid ) },
-                                       job_token_timestamp = {$dbw->addQuotes( $dbw->timestamp() )}
-                               WHERE (
-                                       job_cmd = {$dbw->addQuotes( $this->type )}
-                                       AND job_token = {$dbw->addQuotes( '' )}
-                                       AND job_random {$ineq} {$dbw->addQuotes( $rand )}
-                               ) ORDER BY job_random {$dir} LIMIT 1",
-                               __METHOD__
-                       );
-               } else {
-                       // Use a subquery to find the job, within an UPDATE to claim it.
-                       // This uses as much of the DB wrapper functions as possible.
-                       $dbw->update( 'job',
-                               array( 'job_token' => $uuid, 'job_token_timestamp' => $dbw->timestamp() ),
-                               array( 'job_id = (' .
-                                       $dbw->selectSQLText( 'job', 'job_id',
-                                               array(
-                                                       'job_cmd'   => $this->type,
-                                                       'job_token' => '',
-                                                       "job_random {$ineq} {$dbw->addQuotes( $rand )}" ),
-                                               __METHOD__,
-                                               array( 'ORDER BY' => "job_random {$dir}", 'LIMIT' => 1 ) ) .
-                                       ')'
-                               ),
-                               __METHOD__
+
+               $row = false; // the row acquired
+               // This uses a replication safe method for acquiring jobs. One could use UPDATE+LIMIT
+               // instead, but that either uses ORDER BY (in which case it deadlocks in MySQL) or is
+               // not replication safe. Due to http://bugs.mysql.com/bug.php?id=6980, subqueries cannot
+               // be used here with MySQL.
+               do {
+                       $row = $dbw->selectRow( 'job', '*', // find a random job
+                               array(
+                                       'job_cmd'   => $this->type,
+                                       'job_token' => '',
+                                       "job_random {$ineq} {$dbw->addQuotes( $rand )}" ),
+                               __METHOD__,
+                               array( 'ORDER BY' => "job_random {$dir}" )
                        );
-               }
-               return $dbw->affectedRows();
+                       if ( $row ) { // claim the job
+                               $dbw->update( 'job', // update by PK
+                                       array( 'job_token' => $uuid, 'job_token_timestamp' => $dbw->timestamp() ),
+                                       array( 'job_cmd' => $this->type, 'job_id' => $row->job_id, 'job_token' => '' ),
+                                       __METHOD__
+                               );
+                               // This might get raced out by another runner when claiming the previously
+                               // selected row. The use of job_random should minimize this problem, however.
+                               if ( !$dbw->affectedRows() ) {
+                                       $row = false; // raced out
+                               }
+                       } else {
+                               break; // nothing to do
+                       }
+               } while ( !$row );
+
+               return $row;
+       }
+
+       /**
+        * Reserve a row with a single UPDATE without holding row locks over RTTs...
+        *
+        * @param $uuid string 32 char hex string
+        * @return Row|false
+        */
+       protected function claimOldest( $uuid ) {
+               $dbw  = $this->getMasterDB();
+
+               $row = false; // the row acquired
+               do {
+                       if ( $dbw->getType() === 'mysql' ) {
+                               // Per http://bugs.mysql.com/bug.php?id=6980, we can't use subqueries on the
+                               // same table being changed in an UPDATE query in MySQL (gives Error: 1093).
+                               // Oracle and Postgre have no such limitation. However, MySQL offers an
+                               // alternative here by supporting ORDER BY + LIMIT for UPDATE queries.
+                               $dbw->query( "UPDATE {$dbw->tableName( 'job' )}
+                                       SET
+                                               job_token = {$dbw->addQuotes( $uuid ) },
+                                               job_token_timestamp = {$dbw->addQuotes( $dbw->timestamp() )}
+                                       WHERE (
+                                               job_cmd = {$dbw->addQuotes( $this->type )}
+                                               AND job_token = {$dbw->addQuotes( '' )}
+                                       ) ORDER BY job_random ASC LIMIT 1",
+                                       __METHOD__
+                               );
+                       } else {
+                               // Use a subquery to find the job, within an UPDATE to claim it.
+                               // This uses as much of the DB wrapper functions as possible.
+                               $dbw->update( 'job',
+                                       array( 'job_token' => $uuid, 'job_token_timestamp' => $dbw->timestamp() ),
+                                       array( 'job_id = (' .
+                                               $dbw->selectSQLText( 'job', 'job_id',
+                                                       array( 'job_cmd' => $this->type, 'job_token' => '' ),
+                                                       __METHOD__,
+                                                       array( 'ORDER BY' => 'job_random ASC', 'LIMIT' => 1 ) ) .
+                                               ')'
+                                       ),
+                                       __METHOD__
+                               );
+                       }
+                       // Fetch any row that we just reserved...
+                       if ( $dbw->affectedRows() ) {
+                               $row = $dbw->selectRow( 'job', '*',
+                                       array( 'job_cmd' => $this->type, 'job_token' => $uuid ), __METHOD__
+                               );
+                               if ( !$row ) { // raced out by duplicate job removal
+                                       wfDebugLog( 'JobQueueDB', "Row deleted as duplicate by another process." );
+                               }
+                       } else {
+                               break; // nothing to do
+                       }
+               } while ( !$row );
+
+               return $row;
        }
 
        /**
@@ -229,10 +279,7 @@ class JobQueueDB extends JobQueue {
         */
        protected function doAck( Job $job ) {
                $dbw = $this->getMasterDB();
-               if ( $dbw->trxLevel() ) {
-                       wfWarn( "Attempted to ack a job in a transaction; committing first." );
-                       $dbw->commit(); // push existing transaction
-               }
+               $dbw->commit( __METHOD__, 'flush' ); // flush existing transaction
 
                $autoTrx = $dbw->getFlag( DBO_TRX ); // automatic begin() enabled?
                $dbw->clearFlag( DBO_TRX ); // make each query its own transaction
@@ -293,7 +340,7 @@ class JobQueueDB extends JobQueue {
                        'job_id'        => $dbw->nextSequenceValue( 'job_job_id_seq' ),
                        'job_timestamp' => $dbw->timestamp(),
                        'job_sha1'      => wfBaseConvert( sha1( serialize( $descFields ) ), 16, 36, 32 ),
-                       'job_random'    => mt_rand( 0, self::MAX_JOB_RANDOM )
+                       'job_random'    => $random
                );
                return ( $descFields + $metaFields );
        }
index 4ebd531..44db516 100644 (file)
@@ -25,7 +25,7 @@
  * Class to handle enqueueing of background jobs
  *
  * @ingroup JobQueue
- * @since 1.20
+ * @since 1.21
  */
 class JobQueueGroup {
        /** @var Array */
diff --git a/includes/job/jobs/NullJob.php b/includes/job/jobs/NullJob.php
new file mode 100644 (file)
index 0000000..eef3bf7
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Degenerate job that just replaces itself in the queue.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Cache
+ */
+
+/**
+ * Degenerate job that just replace itself in the queue.
+ * Useful for lock contention and performance testing.
+ *
+ * @ingroup JobQueue
+ */
+class NullJob extends Job {
+       /**
+        * @param $title Title (can be anything)
+        * @param $params Array: job parameters (lives, usleep)
+        * @param $id Integer: job id
+        */
+       function __construct( $title, $params, $id = 0 ) {
+               parent::__construct( 'null', $title, $params, $id );
+               if ( !isset( $this->params['lives'] ) ) {
+                       $this->params['lives'] = 1;
+               }
+               if ( !isset( $this->params['usleep'] ) ) {
+                       $this->params['usleep'] = 0;
+               }
+       }
+
+       public function run() {
+               if ( $this->params['usleep'] > 0 ) {
+                       usleep( $this->params['usleep'] );
+               }
+               if ( $this->params['lives'] > 1 ) {
+                       $params = $this->params;
+                       $params['lives']--;
+                       $job = new self( $this->title, $params );
+                       $job->insert();
+               }
+               return true;
+       }
+}
index 7d94a30..8c1e294 100644 (file)
@@ -293,6 +293,28 @@ class LogFormatter {
                                }
                                break;
 
+                       case 'rights':
+                               if ( count( $parameters['4::oldgroups'] ) ) {
+                                       $oldgroups = implode( ', ', $parameters['4::oldgroups'] );
+                               } else {
+                                       $oldgroups = wfMessage( 'rightsnone' )->inContentLanguage()->escaped();
+                               }
+                               if ( count( $parameters['5::newgroups'] ) ) {
+                                       $newgroups = implode( ', ', $parameters['5::newgroups'] );
+                               } else {
+                                       $newgroups = wfMessage( 'rightsnone' )->inContentLanguage()->escaped();
+                               }
+                               switch( $entry->getSubtype() ) {
+                                       case 'rights':
+                                               $text = wfMessage( 'rightslogentry' )
+                                                       ->rawParams( $target, $oldgroups, $newgroups )->inContentLanguage()->escaped();
+                                               break;
+                                       case 'autopromote':
+                                               $text = wfMessage( 'rightslogentry-autopromote' )
+                                                       ->rawParams( $target, $oldgroups, $newgroups )->inContentLanguage()->escaped();
+                                               break;
+                               }
+                               break;
 
                        // case 'suppress' --private log -- aaron  (sign your messages so we know who to blame in a few years :-D)
                        // default:
@@ -1009,3 +1031,88 @@ class NewUsersLogFormatter extends LogFormatter {
                return array();
        }
 }
+
+/**
+ * This class formats rights log entries.
+ * @since 1.21
+ */
+class RightsLogFormatter extends LogFormatter {
+       protected function makePageLink( Title $title = null, $parameters = array() ) {
+               global $wgContLang, $wgUserrightsInterwikiDelimiter;
+
+               if ( !$this->plaintext ) {
+                       $text = $wgContLang->ucfirst( $title->getText() );
+                       $parts = explode( $wgUserrightsInterwikiDelimiter, $text, 2 );
+
+                       if ( count( $parts ) === 2 ) {
+                               $titleLink = WikiMap::foreignUserLink( $parts[1], $parts[0],
+                                       htmlspecialchars( $title->getPrefixedText() ) );
+
+                               if ( $titleLink !== false ) {
+                                       return $titleLink;
+                               }
+                       }
+               }
+
+               return parent::makePageLink( $title, $parameters );
+       }
+
+       protected function getMessageKey() {
+               $key = parent::getMessageKey();
+               $params = $this->getMessageParameters();
+               if ( !isset( $params[3] ) && !isset( $params[4] ) ) {
+                       $key .= '-legacy';
+               }
+               return $key;
+       }
+
+       protected function getMessageParameters() {
+               $params = parent::getMessageParameters();
+
+               // Really old entries
+               if ( !isset( $params[3] ) && !isset( $params[4] ) ) {
+                       return $params;
+               }
+
+               $oldGroups = $params[3];
+               $newGroups = $params[4];
+
+               // Less old entries
+               if ( $oldGroups === '' ) {
+                       $oldGroups = array();
+               } elseif ( is_string( $oldGroups ) ) {
+                       $oldGroups = array_map( 'trim', explode( ',', $oldGroups ) );
+               }
+               if ( $newGroups === '' ) {
+                       $newGroups = array();
+               } elseif ( is_string( $newGroups ) ) {
+                       $newGroups = array_map( 'trim', explode( ',', $newGroups ) );
+               }
+
+               $userName = $this->entry->getTarget()->getText();
+               if ( !$this->plaintext && count( $oldGroups ) ) {
+                       foreach ( $oldGroups as &$group ) {
+                               $group = User::getGroupMember( $group, $userName );
+                       }
+               }
+               if ( !$this->plaintext && count( $newGroups ) ) {
+                       foreach ( $newGroups as &$group ) {
+                               $group = User::getGroupMember( $group, $userName );
+                       }
+               }
+
+               $lang = $this->context->getLanguage();
+               if ( count( $oldGroups ) ) {
+                       $params[3] = $lang->listToText( $oldGroups );
+               } else {
+                       $params[3] = $this->msg( 'rightsnone' )->text();
+               }
+               if ( count( $newGroups ) ) {
+                       $params[4] = $lang->listToText( $newGroups );
+               } else {
+                       $params[4] = $this->msg( 'rightsnone' )->text();
+               }
+
+               return $params;
+       }
+}
index 90393ea..07238a0 100644 (file)
@@ -253,29 +253,6 @@ class LogPage {
                        } else {
                                $titleLink = self::getTitleLink( $type, $langObjOrNull, $title, $params );
 
-                               if( preg_match( '/^rights\/(rights|autopromote)/', $key ) ) {
-                                       $rightsnone = wfMessage( 'rightsnone' )->inLanguage( $langObj )->text();
-
-                                       if( $skin ) {
-                                               $username = $title->getText();
-                                               foreach ( $params as &$param ) {
-                                                       $groupArray = array_map( 'trim', explode( ',', $param ) );
-                                                       foreach( $groupArray as &$group ) {
-                                                               $group = User::getGroupMember( $group, $username );
-                                                       }
-                                                       $param = $wgLang->listToText( $groupArray );
-                                               }
-                                       }
-
-                                       if( !isset( $params[0] ) || trim( $params[0] ) == '' ) {
-                                               $params[0] = $rightsnone;
-                                       }
-
-                                       if( !isset( $params[1] ) || trim( $params[1] ) == '' ) {
-                                               $params[1] = $rightsnone;
-                                       }
-                               }
-
                                if( count( $params ) == 0 ) {
                                        $rv = wfMessage( $wgLogActions[$key] )->rawParams( $titleLink )->inLanguage( $langObj )->escaped();
                                } else {
@@ -350,8 +327,6 @@ class LogPage {
         * @return String
         */
        protected static function getTitleLink( $type, $lang, $title, &$params ) {
-               global $wgContLang, $wgUserrightsInterwikiDelimiter;
-
                if( !$lang ) {
                        return $title->getPrefixedText();
                }
@@ -388,20 +363,6 @@ class LogPage {
                                                . Linker::userToolLinks( $id, $title->getText(), false, Linker::TOOL_LINKS_NOBLOCK );
                                }
                                break;
-                       case 'rights':
-                               $text = $wgContLang->ucfirst( $title->getText() );
-                               $parts = explode( $wgUserrightsInterwikiDelimiter, $text, 2 );
-
-                               if ( count( $parts ) == 2 ) {
-                                       $titleLink = WikiMap::foreignUserLink( $parts[1], $parts[0],
-                                               htmlspecialchars( $title->getPrefixedText() ) );
-
-                                       if ( $titleLink !== false ) {
-                                               break;
-                                       }
-                               }
-                               $titleLink = Linker::link( Title::makeTitle( NS_USER, $text ) );
-                               break;
                        case 'merge':
                                $titleLink = Linker::link(
                                        $title,
index b6bcf63..28d07f1 100644 (file)
@@ -346,7 +346,45 @@ class ParserOutput extends CacheTime {
        }
 
        /**
-        * Set a property to be cached in the DB
+        * Set a property to be stored in the page_props database table.
+        *
+        * page_props is a key value store indexed by the page ID. This allows
+        * the parser to set a property on a page which can then be quickly
+        * retrieved given the page ID or via a DB join when given the page
+        * title.
+        *
+        * setProperty() is thus used to propagate properties from the parsed
+        * page to request contexts other than a page view of the currently parsed
+        * article.
+        *
+        * Some applications examples:
+        *
+        *   * To implement hidden categories, hiding pages from category listings
+        *     by storing a property.
+        *
+        *   * Overriding the displayed article title.
+        *   @see ParserOutput::setDisplayTitle()
+        *
+        *   * To implement image tagging, for example displaying an icon on an
+        *     image thumbnail to indicate that it is listed for deletion on
+        *     Wikimedia Commons.
+        *     This is not actually implemented, yet but would be pretty cool.
+        *
+        * Do not use setProperty() to set a property which is only used in a
+        * context where the ParserOutput object itself is already available, for
+        * example a normal page view. There is no need to save such a property
+        * in the database since it the text is already parsed. You can just hook
+        * OutputPageParserOutput and get your data out of the ParserOutput object.
+        *
+        * If you are writing an extension where you want to set
+        * a property in the parser which is used by an OutputPageParserOutput hook,
+        * just use a custom variable within the ParserOutput object:
+        *
+        * @par Example:
+        * @code
+        *    $parser->getOutput()->my_ext_foo = '...';
+        * @endcode
+        *
         */
        public function setProperty( $name, $value ) {
                $this->mProperties[$name] = $value;
index 6470c86..0c6aeb3 100644 (file)
@@ -157,10 +157,23 @@ class SiteObject extends ORMRow implements Site {
                $path = $this->getLinkPath();
 
                if ( $path === false ) {
-                       return false;
+                       return '';
+               }
+
+               $protocol = parse_url( $path, PHP_URL_SCHEME );
+
+               // Malformed URL
+               if ( $protocol === false ) {
+                       throw new MWException( "failed to parse URL $path" );
+               }
+
+               // No schema
+               if ( $protocol === null ) {
+                       // Used for protocol relative URLs
+                       $protocol = '';
                }
 
-               return parse_url( $path, PHP_URL_SCHEME );
+               return $protocol;
        }
 
        /**
index 949ac35..ddd11ad 100644 (file)
@@ -119,7 +119,7 @@ abstract class SpecialCachedPage extends SpecialPage implements ICacheHelper {
         *
         * @since 1.20
         *
-        * @param function $computeFunction
+        * @param callable $computeFunction
         * @param array|mixed $args
         * @param string|null $key
         *
@@ -137,7 +137,7 @@ abstract class SpecialCachedPage extends SpecialPage implements ICacheHelper {
         *
         * @since 1.20
         *
-        * @param function $computeFunction
+        * @param callable $computeFunction
         * @param array $args
         * @param string|null $key
         */
index 3d39e37..bdeb7fe 100644 (file)
@@ -135,7 +135,10 @@ class DeletedContribsPager extends IndexPager {
        function formatRow( $row ) {
                wfProfileIn( __METHOD__ );
 
+               $page = Title::makeTitle( $row->ar_namespace, $row->ar_title );
+
                $rev = new Revision( array(
+                               'title'      => $page,
                                'id'         => $row->ar_rev_id,
                                'comment'    => $row->ar_comment,
                                'user'       => $row->ar_user,
@@ -145,8 +148,6 @@ class DeletedContribsPager extends IndexPager {
                                'deleted'    => $row->ar_deleted,
                                ) );
 
-               $page = Title::makeTitle( $row->ar_namespace, $row->ar_title );
-
                $undelete = SpecialPage::getTitleFor( 'Undelete' );
 
                $logs = SpecialPage::getTitleFor( 'Log' );
index bc9a3d9..85e1d65 100644 (file)
@@ -380,6 +380,7 @@ class SpecialMergeHistory extends SpecialPage {
                        if ( $redirectContent ) {
                                $redirectPage = WikiPage::factory( $targetTitle );
                                $redirectRevision = new Revision( array(
+                                       'title'   => $targetTitle,
                                        'page'    => $this->mTargetID,
                                        'comment' => $comment,
                                        'content' => $redirectContent ) );
index 4c38a78..c0420e5 100644 (file)
@@ -575,6 +575,9 @@ class PageArchive {
                                        return Status::newFatal( "undeleterevdel" );
                                }
                        }
+
+                       $newid  = false;
+                       $pageId = $article->getId();
                }
 
                $revision = null;
@@ -593,6 +596,7 @@ class PageArchive {
                        // unless we are specifically removing all restrictions...
                        $revision = Revision::newFromArchiveRow( $row,
                                array(
+                                       'page' => $pageId,
                                        'title' => $this->title,
                                        'deleted' => $unsuppress ? 0 : $row->ar_deleted
                                ) );
index fd24af1..73c7e2a 100644 (file)
@@ -312,12 +312,12 @@ class SpecialUpload extends SpecialPage {
                $this->showUploadForm( $form );
        }
        /**
-        * Stashes the upload, shows the main form, but adds an "continue anyway button".
+        * Stashes the upload, shows the main form, but adds a "continue anyway button".
         * Also checks whether there are actually warnings to display.
         *
         * @param $warnings Array
         * @return boolean true if warnings were displayed, false if there are no
-        *      warnings and the should continue processing like there was no warning
+        *         warnings and it should continue processing
         */
        protected function showUploadWarning( $warnings ) {
                # If there are no warnings, or warnings we can ignore, return early.
@@ -336,6 +336,9 @@ class SpecialUpload extends SpecialPage {
                $warningHtml = '<h2>' . $this->msg( 'uploadwarning' )->escaped() . "</h2>\n"
                        . '<ul class="warning">';
                foreach( $warnings as $warning => $args ) {
+                       if( $warning == 'badfilename' ) {
+                               $this->mDesiredDestName = Title::makeTitle( NS_FILE, $args )->getText();
+                       }
                        if( $warning == 'exists' ) {
                                $msg = "\t<li>" . self::getExistsWarning( $args ) . "</li>\n";
                        } elseif( $warning == 'duplicate' ) {
index 88f127e..121cc22 100644 (file)
@@ -245,16 +245,16 @@ class UserrightsPage extends SpecialPage {
         * Add a rights log entry for an action.
         */
        function addLogEntry( $user, $oldGroups, $newGroups, $reason ) {
-               $log = new LogPage( 'rights' );
-
-               $log->addEntry( 'rights',
-                       $user->getUserPage(),
-                       $reason,
-                       array(
-                               $this->makeGroupNameListForLog( $oldGroups ),
-                               $this->makeGroupNameListForLog( $newGroups )
-                       )
-               );
+               $logEntry = new ManualLogEntry( 'rights', 'rights' );
+               $logEntry->setPerformer( $this->getUser() );
+               $logEntry->setTarget( $user->getUserPage() );
+               $logEntry->setComment( $reason );
+               $logEntry->setParameters( array(
+                       '4::oldgroups' => $oldGroups,
+                       '5::newgroups' => $newGroups,
+               ) );
+               $logid = $logEntry->insert();
+               $logEntry->publish( $logid );
        }
 
        /**
@@ -355,7 +355,16 @@ class UserrightsPage extends SpecialPage {
                }
        }
 
+       /**
+        * Make a list of group names to be stored as parameter for log entries
+        *
+        * @deprecated in 1.21; use LogFormatter instead.
+        * @param $ids array
+        * @return string
+        */
        function makeGroupNameListForLog( $ids ) {
+               wfDeprecated( __METHOD__, '1.21' );
+
                if( empty( $ids ) ) {
                        return '';
                } else {
index e0c6d12..7ace5f8 100644 (file)
@@ -122,7 +122,7 @@ class SpecialVersion extends SpecialPage {
                        'Alexandre Emsenhuber', 'Siebrand Mazeland', 'Chad Horohoe',
                        'Roan Kattouw', 'Trevor Parscal', 'Bryan Tong Minh', 'Sam Reed',
                        'Victor Vasiliev', 'Rotem Liss', 'Platonides', 'Antoine Musso',
-                       'Timo Tijhof',
+                       'Timo Tijhof', 'Daniel Kinzler', 'Jeroen De Dauw',
                        '[[Special:Version/Credits|' .
                        wfMessage( 'version-poweredby-others' )->text() .
                        ']]'
@@ -236,7 +236,7 @@ class SpecialVersion extends SpecialPage {
         * @return string wgVersion + a link to subversion revision of svn BASE
         */
        private static function getVersionLinkedSvn() {
-               global $wgVersion, $IP;
+               global $IP;
 
                $info = self::getSvnInfo( $IP );
                if( !isset( $info['checkout-rev'] ) ) {
@@ -250,19 +250,29 @@ class SpecialVersion extends SpecialPage {
                )->text();
 
                if ( isset( $info['viewvc-url'] ) ) {
-                       $version = "$wgVersion [{$info['viewvc-url']} $linkText]";
+                       $version = "[{$info['viewvc-url']} $linkText]";
                } else {
-                       $version = "$wgVersion $linkText";
+                       $version = $linkText;
                }
 
-               return $version;
+               return self::getwgVersionLinked() . " $version";
+       }
+
+       /**
+        * @return string
+        */
+       private static function getwgVersionLinked() {
+               global $wgVersion;
+               $versionParts = array();
+               preg_match( "/^(\d+\.\d+)/", $wgVersion, $versionParts );
+               return "[https://www.mediawiki.org/wiki/MediaWiki_{$versionParts[1]} $wgVersion]";
        }
 
        /**
         * @return bool|string wgVersion + HEAD sha1 stripped to the first 7 chars. False on failure
         */
        private static function getVersionLinkedGit() {
-               global $wgVersion, $IP;
+               global $IP;
 
                $gitInfo = new GitInfo( $IP );
                $headSHA1 = $gitInfo->getHeadSHA1();
@@ -275,7 +285,7 @@ class SpecialVersion extends SpecialPage {
                if ( $viewerUrl !== false ) {
                        $shortSHA1 = "[$viewerUrl $shortSHA1]";
                }
-               return "$wgVersion $shortSHA1";
+               return self::getwgVersionLinked() . " $shortSHA1";
        }
 
        /**
index cd22f49..3347bba 100644 (file)
@@ -54,7 +54,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__DWINGIO__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__IO__', '__TOC__' ),
        'noeditsection'             => array( '0', '__GEENNUWEAFDELING__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__GEENOPSKRIF__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'HUIDIGEMAAND', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'HUIDIGEMAAND1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
index a14fb0e..543c10f 100644 (file)
@@ -194,7 +194,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__لصق_فهرس__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__فهرس__', '__TOC__' ),
        'noeditsection'             => array( '0', '__لاتحريرقسم__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__لاعنوان__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'شهر_حالي', 'شهر_حالي2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'شهر_حالي1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'اسم_الشهر_الحالي', 'CURRENTMONTHNAME' ),
@@ -421,7 +420,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'أحدث_التغييرات' ),
        'Recentchangeslinked'       => array( 'أحدث_التغييرات_الموصولة', 'تغييرات_مرتبطة' ),
        'Revisiondelete'            => array( 'حذف_مراجعة' ),
-       'RevisionMove'              => array( 'نقل_مراجعة' ),
        'Search'                    => array( 'بحث' ),
        'Shortpages'                => array( 'صفحات_قصيرة' ),
        'Specialpages'              => array( 'صفحات_خاصة' ),
@@ -3332,6 +3330,7 @@ $1',
 'pageinfo-default-sort' => 'مفتاح الترتيب الافتراضي',
 'pageinfo-length' => 'حجم الصفحة (بالبايت)',
 'pageinfo-article-id' => 'معرف الصفحة (ID)',
+'pageinfo-language' => 'لغة محتوى الصفحة',
 'pageinfo-robot-policy' => 'الصفة في محرك البحث',
 'pageinfo-robot-index' => 'قابلة للفهرسة',
 'pageinfo-robot-noindex' => 'غير قابلة للفهرسة',
index 786c965..67d38ab 100644 (file)
@@ -46,16 +46,30 @@ $specialPageAliases = array(
        'Activeusers'               => array( 'ܡܦܠܚܢ̈ܐ_ܙܪ̄ܝܙܐ' ),
        'Allmessages'               => array( 'ܟܠ_ܐܓܪ̈ܬܐ' ),
        'Allpages'                  => array( 'ܟܠ_ܦܐܬܬ̈ܐ' ),
+       'Ancientpages'              => array( 'ܦܐܬܬ̈ܐ_ܥܬܝܩܬ̈ܐ' ),
        'Badtitle'                  => array( 'ܟܘܢܝܐ_ܠܐ_ܛܒܐ' ),
        'Blankpage'                 => array( 'ܦܐܬܐ_ܣܦܝܩܬܐ' ),
+       'BrokenRedirects'           => array( 'ܨܘܝܒ̈ܐ_ܬܒܝܪ̈ܐ' ),
        'Categories'                => array( 'ܣܕܪ̈ܐ' ),
+       'ChangeEmail'               => array( 'ܫܚܠܦ_ܒܝܠܕܪܐ_ܐܠܩܛܪܘܢܝܐ' ),
+       'ComparePages'              => array( 'ܦܚܘܡ_ܒܝܢܬ_ܦܐܬܬ̈ܐ' ),
+       'Confirmemail'              => array( 'ܫܪܪ_ܒܝܠܕܪܐ_ܐܠܩܛܪܘܢܝܐ' ),
        'Contributions'             => array( 'ܫܘܬܦܘܝܬ̈ܐ' ),
        'CreateAccount'             => array( 'ܒܪܝ_ܚܘܫܒܢܐ' ),
+       'Deadendpages'              => array( 'ܦܐܬܬ̈ܐ_ܥܡ_ܚܪܬܐ_ܡܝܬܬܐ' ),
        'DeletedContributions'      => array( 'ܫܘܬܦܘܝܬ̈ܐ_ܫܝܦܬ̈ܐ' ),
+       'Disambiguations'           => array( 'ܬܘܚܡ̈ܐ_ܐܚܪ̈ܢܐ' ),
+       'DoubleRedirects'           => array( 'ܨܘܝܒ̈ܐ_ܥܦܝܦ̈ܐ' ),
+       'EditWatchlist'             => array( 'ܫܚܠܦ_ܪ̈ܗܝܬܐ' ),
+       'Emailuser'                 => array( 'ܫܕܪ_ܒܝܠܕܪܐ_ܐܠܩܛܪܘܢܝܐ_ܠܡܦܠܚܢܐ' ),
+       'Fewestrevisions'           => array( 'ܬܢܝܬ̈ܐ_ܒܨܝܪ_ܡܢ_ܟܠ' ),
        'Filepath'                  => array( 'ܫܒܝܠܐ_ܕܦܐܬܐ' ),
        'Log'                       => array( 'ܣܓܠܐ', 'ܣܓܠ̈ܐ' ),
        'Lonelypages'               => array( 'ܦܐܬܬ̈ܐ_ܝܬܡܬ̈ܐ' ),
        'Longpages'                 => array( 'ܦܐܬܬ̈ܐ_ܐܪ̈ܝܟܬܐ' ),
+       'Mostlinkedcategories'      => array( 'ܣܕܪ̈ܐ_ܐܣܝܪ̈ܐ_ܝܬܝܪ_ܡܢ_ܟܠ', 'ܣܕܪ̈ܐ_ܦܠܝܚ̈ܐ_ܝܬܝܪ_ܡܢ_ܟܠ' ),
+       'Mostlinkedtemplates'       => array( 'ܩܠܒ̈ܐ_ܐܣܝܪ̈ܐ_ܝܬܝܪ_ܡܢ_ܟܠ', 'ܩܠܒ̈ܐ_ܦܠܝܚ̈ܐ_ܝܬܝܪ_ܡܢ_ܟܠ' ),
+       'Mostrevisions'             => array( 'ܬܢܝܬ̈ܐ_ܝܬܝܪ_ܡܢ_ܟܠ' ),
        'Movepage'                  => array( 'ܫܢܝ_ܦܐܬܐ' ),
        'Mycontributions'           => array( 'ܫܘܬܦܘܝܬ̈ܝ' ),
        'Mypage'                    => array( 'ܦܐܬܐ_ܕܝܠܝ' ),
@@ -64,6 +78,7 @@ $specialPageAliases = array(
        'Newimages'                 => array( 'ܠܦܦ̈ܐ_ܚܕ̈ܬܐ', 'ܨܘܪ̈ܬܐ_ܚܕ̈ܬܬܐ' ),
        'Newpages'                  => array( 'ܦܐܬܬ̈ܐ_ܚܕ̈ܬܬܐ' ),
        'PermanentLink'             => array( 'ܐܣܘܪܐ_ܦܝܘܫܐ' ),
+       'Popularpages'              => array( 'ܦܐܬܬ̈ܐ_ܡܫܡܗ̈ܐ' ),
        'Preferences'               => array( 'ܨܒܝܢܝܘܬ̈ܐ' ),
        'Protectedpages'            => array( 'ܦܐܬܬ̈ܐ_ܢܛܝܪ̈ܬܐ' ),
        'Protectedtitles'           => array( 'ܟܘܢܝ̈ܐ_ܢܛܝܪ̈ܐ' ),
@@ -71,8 +86,23 @@ $specialPageAliases = array(
        'Search'                    => array( 'ܒܨܝܐ' ),
        'Shortpages'                => array( 'ܦܐܬܬ̈ܐ_ܟܪ̈ܝܬܐ' ),
        'Specialpages'              => array( 'ܦܐܬܬ̈ܐ_ܕ̈ܝܠܢܝܬܐ' ),
+       'Uncategorizedcategories'   => array( 'ܣܕܪ̈ܐ_ܠܐ_ܣܕܝܪ̈ܐ' ),
+       'Uncategorizedimages'       => array( 'ܠܦܦ̈ܐ_ܠܐ_ܣܕܝܪ̈ܐ', 'ܨܘܪ̈ܬܐ_ܠܐ_ܣܕܝܪ̈ܬܐ' ),
+       'Uncategorizedpages'        => array( 'ܦܐܬܬ̈ܐ_ܠܐ_ܣܕܝܪ̈ܬܐ' ),
+       'Uncategorizedtemplates'    => array( 'ܩܠܒ̈ܐ_ܠܐ_ܣܕܝܪ̈ܐ' ),
+       'Unusedcategories'          => array( 'ܣܕܪ̈ܐ_ܠܐ_ܦܠܝܚ̈ܐ' ),
+       'Unusedimages'              => array( 'ܠܦܦ̈ܐ_ܠܐ_ܦܠܝܚ̈ܐ', 'ܨܘܪ̈ܬܐ_ܠܐ_ܦܠܝܚܬ̈ܐ' ),
+       'Unusedtemplates'           => array( 'ܩܠܒ̈ܐ_ܠܐ_ܦܠܝܚ̈ܐ' ),
+       'Unwatchedpages'            => array( 'ܦܐܬܬ̈ܐ_ܠܐ_ܣܢܝܩܬ̈ܐ' ),
        'Upload'                    => array( 'ܐܣܩ' ),
+       'Userlogin'                 => array( 'ܥܠܠܐ_ܕܡܦܠܚܢܐ' ),
+       'Userlogout'                => array( 'ܦܠܛܐ_ܕܡܦܠܚܢܐ' ),
+       'Userrights'                => array( 'ܙܕ̈ܩܐ_ܕܡܦܠܚܢܐ', 'ܥܒܘܕ_ܡܕܒܪܢܐ_ܕܛܟܣܐ', 'ܥܒܘܕ_ܒܘܛ' ),
        'Version'                   => array( 'ܨܚܚܐ' ),
+       'Wantedcategories'          => array( 'ܣܕܪ̈ܐ_ܣܢܝܩ̈ܐ' ),
+       'Wantedfiles'               => array( 'ܠܦܦ̈ܐ_ܣܢܝܩ̈ܐ' ),
+       'Wantedpages'               => array( 'ܦܐܬܬ̈ܐ_ܣܢܝܩܬ̈ܐ', 'ܐܣܘܪ̈ܐ_ܬܒܝܪ̈ܐ' ),
+       'Wantedtemplates'           => array( 'ܩܠܒ̈ܐ_ܣܢܝܩ̈ܐ' ),
        'Watchlist'                 => array( 'ܪ̈ܗܝܬܐ' ),
        'Whatlinkshere'             => array( 'ܡܐ_ܐܣܪ_ܠܗܪܟܐ' ),
 );
@@ -601,7 +631,7 @@ $1',
 'showhideselectedversions' => 'ܚܘܝ/ܛܫܝ ܬܢܝܬ̈ܐ ܓܒܝܬ̈ܐ',
 'editundo' => 'ܠܐ ܬܥܒܕ',
 'diff-multi' => '({{PLURAL:$1|ܚܕܐ ܬܢܝܬܐ ܡܨܥܝܬܐ|$1 ܬܢܝܬ̈ܐ ܡܨܥܝܬ̈ܐ}} ܒܝܕ {{PLURAL:$2|ܚܕ ܡܦܠܚܢܐ ܠܐ ܓܠܝܚܬܐ|$2 ܡܦܠܚܢ̈ܐ ܠܐ ܓܠܝܚܬ̈ܐ}})',
-'diff-multi-manyusers' => '({{PLURAL:$1|One ܚܕܐ ܬܢܝܬܐ ܡܨܥܝܬܐ|$1 ܬܢܝܬ̈ܐ ܡܨܥܝܬ̈ܐ}} ܒܝܕ ܝܬܝܪ ܡܢ $2 {{PLURAL:$2|ܚܕ ܡܦܠܚܢܐ ܠܐ ܓܠܝܚܬܐ|ܡܦܠܚܢ̈ܐ ܠܐ ܓܠܝܚܬ̈ܐ}})',
+'diff-multi-manyusers' => '({{PLURAL:$1|ܚܕܐ ܬܢܝܬܐ ܡܨܥܝܬܐ ܠܐ ܓܠܝܚܬܐ|$1 ܬܢܝܬ̈ܐ ܡܨܥܝܬ̈ܐ ܠܐ ܓܠܝܚܬ̈ܐ}} ܒܝܕ ܝܬܝܪ ܡܢ $2 {{PLURAL:$2|ܚܕ ܡܦܠܚܢܐ|ܡܦܠܚܢ̈ܐ}})',
 
 # Search results
 'searchresults' => 'ܦܠܛ̈ܐ ܕܒܨܝܐ',
@@ -1039,7 +1069,7 @@ $1',
 'ancientpages' => 'ܦܐܬܬ̈ܐ ܥܬܝܩ ܡܢ ܟܠ',
 'move' => 'ܫܢܝ',
 'movethispage' => 'ܫܢܝ ܦܐܬܐ ܗܕܐ',
-'notargettitle' => 'ܠܐ ܢܘܦܐ',
+'notargettitle' => 'Ü\95Ü Ü\90 Ü¢Ü\98ܦÜ\90',
 'nopagetitle' => 'ܠܝܬ ܗܟܘܬ ܦܐܬܐ ܕܢܘܦܐ',
 'pager-newer-n' => '{{PLURAL:$1|1 1 ܚܕܬܐ|$1 ܚܕ̈ܬܐ}}',
 'pager-older-n' => '{{PLURAL:$1|ܥܬܝܩܐ 1|ܥܬܝܩ̈ܐ $1}}',
@@ -1067,7 +1097,7 @@ $1',
 'allpagesto' => 'ܚܘܝ ܦܐܬܬ̈ܐ ܕܫܠܡ ܥܡ:',
 'allarticles' => 'ܟܠ ܡܓܠ̈ܐ',
 'allinnamespace' => 'ܟܠ ܦܐܬܬ̈ܐ (ܚܩܠܐ ܕ $1)',
-'allnotinnamespace' => 'Ü\9fÜ  Ü¦Ü\90ܬܬÌ\88Ü\90 (Ü Ü\90 ܒܚܩܠܐ ܕ $1)',
+'allnotinnamespace' => 'Ü\9fÜ  Ü¦Ü\90ܬܬÌ\88Ü\90 (Ü\95Ü Ü\9dܬ ܒܚܩܠܐ ܕ $1)',
 'allpagesprev' => 'ܕܩܕܡ',
 'allpagesnext' => 'ܕܒܬܪ',
 'allpagessubmit' => 'ܙܠ',
@@ -1099,7 +1129,7 @@ $1',
 # Special:ListUsers
 'listusersfrom' => 'ܚܘܝ ܡܦܠܚܢ̈ܐ ܕܫܪܝܢ ܒ:',
 'listusers-submit' => 'ܚܘܝ',
-'listusers-noresult' => 'Ü Ü\90 Ü¡Ü¦Ü Ü\9aÜ¢Ü\90 Ü\90ܫܬÜ\9fÜ\9a',
+'listusers-noresult' => 'Ü Ü\90 Ü\90ܫܬÜ\9fÜ\9a Ü¡Ü¦Ü Ü\9aÜ¢Ü\90 Ü\9aÜ\95.',
 'listusers-blocked' => '(ܚܪܝܡܐ)',
 
 # Special:ActiveUsers
@@ -1108,7 +1138,7 @@ $1',
 'activeusers-from' => 'ܚܘܝ ܡܦܠܚܢ̈ܐ ܕܫܪܐ ܥܡ:',
 'activeusers-hidebots' => 'ܛܫܝ ܒܘܬ̈ܐ (bots)',
 'activeusers-hidesysops' => 'ܛܫܝ ܡܕܒܪ̈ܢܐ',
-'activeusers-noresult' => 'Ü Ü\90 Ü¡Ü¦Ü Ü\9aÜ¢Ü\90 Ü\90ܫܬÜ\9fÜ\9a.',
+'activeusers-noresult' => 'Ü Ü\90 Ü\90ܫܬÜ\9fÜ\9a Ü¡Ü¦Ü Ü\9aÜ¢Ì\88Ü\90 Ü\90ܢܫÌ\88Ü\9dÜ¢.',
 
 # Special:Log/newusers
 'newuserlogpage' => 'ܣܓܠܐ ܕܒܪܝܬܐ ܕܡܦܠܚܢܐ',
@@ -1175,7 +1205,7 @@ $1',
 
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'ܪܗܝܐ...',
-'unwatching' => 'Ü Ü\90 ܪܗܝܐ...',
+'unwatching' => 'Ü Ü\9aÜ\9d ܪܗܝܐ...',
 
 'enotif_reset' => 'ܫܘܕܥ ܟܠ ܦܐܬܬ̈ܐ ܐܝܟ ܣܥܝܪ̈ܬܐ',
 'enotif_newpagetext' => 'ܗܕܐ ܗܝ ܦܐܬܐ ܚܕܬܐ',
@@ -1360,7 +1390,7 @@ $1',
 'blocklogentry' => 'ܚܪܡ [[$1]] ܠܡܬܚܐ ܕ $2 $3',
 'unblocklogentry' => 'ܫܩܠ ܚܪܡܐ ܡܢ $1',
 'block-log-flags-anononly' => 'ܡܦܠܚܢ̈ܐ ܠܐ ܝܕ̈ܝܥܐ ܒܠܚܘܕ',
-'block-log-flags-nocreate' => 'ܒܪܝܬܐ ܕܚܘܫܒ̈ܢܐ ܠܐ ܗܝ ܡܬܩܒܠܢܬܐ',
+'block-log-flags-nocreate' => 'ܒܪܝܬܐ ܕܚܘ̈ܫܒܢܐ ܠܐ ܐܝܬܝܗ ܡܬܩܒܠܢܐ',
 'block-log-flags-hiddenname' => 'ܫܡܐ ܕܡܦܠܚܢܐ ܛܘܫܝܐ',
 'ipb_already_blocked' => '"$1" ܡܚܪܡܐ ܗܘ ܡܢ ܟܕܘ',
 'ipb-needreblock' => '"$1" ܡܚܪܡܐ ܗܘ ܡܢ ܟܕܘ
@@ -1477,6 +1507,7 @@ Do you want to change the settings?',
 'pageinfo-header-basic' => 'ܝܕ̈ܥܬܐ ܪ̈ܫܝܬܐ',
 'pageinfo-header-edits' => 'ܬܫܥܝܬܐ ܕܫܘܚܠܦ̈ܐ',
 'pageinfo-header-restrictions' => 'ܢܘܛܪܐ ܕܦܐܬܐ',
+'pageinfo-header-properties' => 'ܕ̈ܝܠܝܬܐ ܕܦܐܬܐ',
 'pageinfo-display-title' => 'ܚܘܘܝܐ ܕܟܘܢܝܐ',
 'pageinfo-default-sort' => 'ܩܠܝܕܐ ܕܛܘܟܣܐ ܡܬܚܫܒܢܝܐ',
 'pageinfo-length' => 'ܥܓܪܐ ܕܦܐܬܐ (ܒܒܐܝܛ)',
index e4d8485..022c04a 100644 (file)
 
 $fallback = 'ar';
 
-// (bug 16469) Override Eastern Arabic numberals, use Western
-$digitTransformTable = array(
-       '0' => '0',
-       '1' => '1',
-       '2' => '2',
-       '3' => '3',
-       '4' => '4',
-       '5' => '5',
-       '6' => '6',
-       '7' => '7',
-       '8' => '8',
-       '9' => '9',
-       '.' => '.',
-       ',' => ',',
-);
-
 $namespaceNames = array(
        NS_MEDIA            => 'ميديا',
        NS_SPECIAL          => 'خاص',
@@ -58,6 +42,98 @@ $namespaceAliases = array(
        'نقاش_الصورة' => NS_FILE_TALK,
 );
 
+$specialPageAliases = array(
+       'Activeusers'               => array( 'يوزرات_نشطا' ),
+       'Allmessages'               => array( 'كل_الرسايل' ),
+       'Allpages'                  => array( 'كل_الصفح' ),
+       'Ancientpages'              => array( 'صفح_قديمه' ),
+       'Blankpage'                 => array( 'صفحه_فارضيه' ),
+       'Block'                     => array( 'بلوك', 'بلوك_IP', 'بلوك_يوزر' ),
+       'Blockme'                   => array( 'بلوك_لنفسى' ),
+       'Booksources'               => array( 'مصادر_كتاب' ),
+       'BrokenRedirects'           => array( 'تحويلات_مكسوره' ),
+       'Categories'                => array( 'تصانيف' ),
+       'ChangePassword'            => array( 'تغيير_الپاسوورد', 'ظبط_الپاسوورد' ),
+       'Confirmemail'              => array( 'تأكيد_الايميل' ),
+       'Contributions'             => array( 'مساهمات' ),
+       'CreateAccount'             => array( 'ابتدى_حساب' ),
+       'Deadendpages'              => array( 'صفح_نهايه_مسدوده' ),
+       'DeletedContributions'      => array( 'مساهمات_ممسوحه' ),
+       'Disambiguations'           => array( 'توضيحات' ),
+       'DoubleRedirects'           => array( 'تحويلات_دوبل' ),
+       'Emailuser'                 => array( 'ابعت_ايميل_لليوزر' ),
+       'Export'                    => array( 'تصدير' ),
+       'Fewestrevisions'           => array( 'اقل_مراجعات' ),
+       'FileDuplicateSearch'       => array( 'تدوير_فايل_متكرر' ),
+       'Filepath'                  => array( 'مسار_ملف' ),
+       'Import'                    => array( 'استوراد' ),
+       'Invalidateemail'           => array( 'تعطيل_الايميل' ),
+       'BlockList'                 => array( 'ليستة_البلوك', 'بيّن_البلوك', 'ليستة_بلوك_IP' ),
+       'LinkSearch'                => array( 'تدوير_اللينكات' ),
+       'Listadmins'                => array( 'عرض_الاداريين' ),
+       'Listbots'                  => array( 'عرض_البوتات' ),
+       'Listfiles'                 => array( 'عرض_الفايلات', 'ليستة_الفايلات', 'ليستة_الصور' ),
+       'Listgrouprights'           => array( 'عرض_حقوق_الجروپات' ),
+       'Listredirects'             => array( 'عرض_التحويلات' ),
+       'Listusers'                 => array( 'عرض_اليوزرات', 'ليستة_اليوزرات' ),
+       'Lockdb'                    => array( 'قفل_قب' ),
+       'Log'                       => array( 'سجل', 'سجلات' ),
+       'Lonelypages'               => array( 'صفح_وحدانيه', 'صفح_يتيمه' ),
+       'Longpages'                 => array( 'صفح_طويله' ),
+       'MergeHistory'              => array( 'دمج_التاريخ' ),
+       'MIMEsearch'                => array( 'تدوير_MIME' ),
+       'Mostcategories'            => array( 'اكتر_تصانيف' ),
+       'Mostimages'                => array( 'اكتر_فايلات_معمول_ليها_لينك', 'اكتر_فايلات', 'اكتر_صور' ),
+       'Mostlinked'                => array( 'اكتر_صفح_معمول_ليها_لينك' ),
+       'Mostlinkedcategories'      => array( 'اكتر_تصانيف_معمول_ليها_لينك', 'اكتر_تصانيف_مستعمله' ),
+       'Mostlinkedtemplates'       => array( 'اكتر_قوالب_معمول_ليها_لينك', 'اكتر_قوالب_مستعمله' ),
+       'Mostrevisions'             => array( 'اكتر_مراجعات' ),
+       'Movepage'                  => array( 'نقل_صفحه' ),
+       'Mycontributions'           => array( 'مساهماتى' ),
+       'Mypage'                    => array( 'صفحتى' ),
+       'Mytalk'                    => array( 'مناقشتى' ),
+       'Newimages'                 => array( 'فايلات_جديده', 'صور_جديده' ),
+       'Newpages'                  => array( 'صفح_جديده' ),
+       'Popularpages'              => array( 'صفح_مشهوره' ),
+       'Preferences'               => array( 'تفضيلات' ),
+       'Prefixindex'               => array( 'فهرس_بدايه' ),
+       'Protectedpages'            => array( 'صفح_محميه' ),
+       'Protectedtitles'           => array( 'عناوين_محميه' ),
+       'Randompage'                => array( 'عشوائى', 'صفحه_عشوائيه' ),
+       'Randomredirect'            => array( 'تحويله_عشوائيه' ),
+       'Recentchanges'             => array( 'اخر_تعديلات' ),
+       'Recentchangeslinked'       => array( 'اجدد_التغييرات_اللى_معمول_ليها_لينك', 'تغييرات_مرتبطه' ),
+       'Revisiondelete'            => array( 'مسح_نسخه' ),
+       'Search'                    => array( 'تدوير' ),
+       'Shortpages'                => array( 'صفح_قصيره' ),
+       'Specialpages'              => array( 'صفح_مخصوصه' ),
+       'Statistics'                => array( 'احصائيات' ),
+       'Tags'                      => array( 'وسوم' ),
+       'Unblock'                   => array( 'رفع_منع' ),
+       'Uncategorizedcategories'   => array( 'تصانيف_مش_متصنفه' ),
+       'Uncategorizedimages'       => array( 'فايلات_مش_متصنفه', 'صور_مش_متصنفه' ),
+       'Uncategorizedpages'        => array( 'صفح_مش_متصنفه' ),
+       'Uncategorizedtemplates'    => array( 'قوالب_مش_متصنفه' ),
+       'Undelete'                  => array( 'استرجاع' ),
+       'Unlockdb'                  => array( 'فتح_قب' ),
+       'Unusedcategories'          => array( 'تصانيف_مش_مستعمله' ),
+       'Unusedimages'              => array( 'فايلات_مش_مستعمله', 'صور_مش_مستعمله' ),
+       'Unusedtemplates'           => array( 'قوالب_مش_مستعمله' ),
+       'Unwatchedpages'            => array( 'صفح_مش_متراقبه' ),
+       'Upload'                    => array( 'رفع' ),
+       'Userlogin'                 => array( 'دخول_اليوزر' ),
+       'Userlogout'                => array( 'خروج_اليوزر' ),
+       'Userrights'                => array( 'حقوق_اليوزر', 'ترقية_سيسوپ', 'ترقية_بوت' ),
+       'Version'                   => array( 'نسخه' ),
+       'Wantedcategories'          => array( 'تصانيف_مطلوبه' ),
+       'Wantedfiles'               => array( 'فايلات_مطلوبه' ),
+       'Wantedpages'               => array( 'صفح_مطلوبه', 'لينكات_مكسوره' ),
+       'Wantedtemplates'           => array( 'قوالب_مطلوبه' ),
+       'Watchlist'                 => array( 'ليستة_المراقبه' ),
+       'Whatlinkshere'             => array( 'ايه_بيوصل_هنا' ),
+       'Withoutinterwiki'          => array( 'من-غير_interwiki' ),
+);
+
 $magicWords = array(
        'redirect'                  => array( '0', '#تحويل', '#REDIRECT' ),
        'notoc'                     => array( '0', '__لافهرس__', '__NOTOC__' ),
@@ -65,7 +141,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__لصق_فهرس__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__فهرس__', '__TOC__' ),
        'noeditsection'             => array( '0', '__لاتحريرقسم__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__لاعنوان__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'شهر_حالى', 'شهر_حالي2', 'شهر_حالي', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'شهر_حالي1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'اسم_الشهر_الحالى', 'اسم_الشهر_الحالي', 'CURRENTMONTHNAME' ),
@@ -208,96 +283,20 @@ $magicWords = array(
        'url_query'                 => array( '0', 'استعلام', 'QUERY' ),
 );
 
-$specialPageAliases = array(
-       'Activeusers'               => array( 'يوزرات_نشطا' ),
-       'Allmessages'               => array( 'كل_الرسايل' ),
-       'Allpages'                  => array( 'كل_الصفح' ),
-       'Ancientpages'              => array( 'صفح_قديمه' ),
-       'Blankpage'                 => array( 'صفحه_فارضيه' ),
-       'Block'                     => array( 'بلوك', 'بلوك_IP', 'بلوك_يوزر' ),
-       'Blockme'                   => array( 'بلوك_لنفسى' ),
-       'Booksources'               => array( 'مصادر_كتاب' ),
-       'BrokenRedirects'           => array( 'تحويلات_مكسوره' ),
-       'Categories'                => array( 'تصانيف' ),
-       'ChangePassword'            => array( 'تغيير_الپاسوورد', 'ظبط_الپاسوورد' ),
-       'Confirmemail'              => array( 'تأكيد_الايميل' ),
-       'Contributions'             => array( 'مساهمات' ),
-       'CreateAccount'             => array( 'ابتدى_حساب' ),
-       'Deadendpages'              => array( 'صفح_نهايه_مسدوده' ),
-       'DeletedContributions'      => array( 'مساهمات_ممسوحه' ),
-       'Disambiguations'           => array( 'توضيحات' ),
-       'DoubleRedirects'           => array( 'تحويلات_دوبل' ),
-       'Emailuser'                 => array( 'ابعت_ايميل_لليوزر' ),
-       'Export'                    => array( 'تصدير' ),
-       'Fewestrevisions'           => array( 'اقل_مراجعات' ),
-       'FileDuplicateSearch'       => array( 'تدوير_فايل_متكرر' ),
-       'Filepath'                  => array( 'مسار_ملف' ),
-       'Import'                    => array( 'استوراد' ),
-       'Invalidateemail'           => array( 'تعطيل_الايميل' ),
-       'BlockList'                 => array( 'ليستة_البلوك', 'بيّن_البلوك', 'ليستة_بلوك_IP' ),
-       'LinkSearch'                => array( 'تدوير_اللينكات' ),
-       'Listadmins'                => array( 'عرض_الاداريين' ),
-       'Listbots'                  => array( 'عرض_البوتات' ),
-       'Listfiles'                 => array( 'عرض_الفايلات', 'ليستة_الفايلات', 'ليستة_الصور' ),
-       'Listgrouprights'           => array( 'عرض_حقوق_الجروپات' ),
-       'Listredirects'             => array( 'عرض_التحويلات' ),
-       'Listusers'                 => array( 'عرض_اليوزرات', 'ليستة_اليوزرات' ),
-       'Lockdb'                    => array( 'قفل_قب' ),
-       'Log'                       => array( 'سجل', 'سجلات' ),
-       'Lonelypages'               => array( 'صفح_وحدانيه', 'صفح_يتيمه' ),
-       'Longpages'                 => array( 'صفح_طويله' ),
-       'MergeHistory'              => array( 'دمج_التاريخ' ),
-       'MIMEsearch'                => array( 'تدوير_MIME' ),
-       'Mostcategories'            => array( 'اكتر_تصانيف' ),
-       'Mostimages'                => array( 'اكتر_فايلات_معمول_ليها_لينك', 'اكتر_فايلات', 'اكتر_صور' ),
-       'Mostlinked'                => array( 'اكتر_صفح_معمول_ليها_لينك' ),
-       'Mostlinkedcategories'      => array( 'اكتر_تصانيف_معمول_ليها_لينك', 'اكتر_تصانيف_مستعمله' ),
-       'Mostlinkedtemplates'       => array( 'اكتر_قوالب_معمول_ليها_لينك', 'اكتر_قوالب_مستعمله' ),
-       'Mostrevisions'             => array( 'اكتر_مراجعات' ),
-       'Movepage'                  => array( 'نقل_صفحه' ),
-       'Mycontributions'           => array( 'مساهماتى' ),
-       'Mypage'                    => array( 'صفحتى' ),
-       'Mytalk'                    => array( 'مناقشتى' ),
-       'Newimages'                 => array( 'فايلات_جديده', 'صور_جديده' ),
-       'Newpages'                  => array( 'صفح_جديده' ),
-       'Popularpages'              => array( 'صفح_مشهوره' ),
-       'Preferences'               => array( 'تفضيلات' ),
-       'Prefixindex'               => array( 'فهرس_بدايه' ),
-       'Protectedpages'            => array( 'صفح_محميه' ),
-       'Protectedtitles'           => array( 'عناوين_محميه' ),
-       'Randompage'                => array( 'عشوائى', 'صفحه_عشوائيه' ),
-       'Randomredirect'            => array( 'تحويله_عشوائيه' ),
-       'Recentchanges'             => array( 'اخر_تعديلات' ),
-       'Recentchangeslinked'       => array( 'اجدد_التغييرات_اللى_معمول_ليها_لينك', 'تغييرات_مرتبطه' ),
-       'Revisiondelete'            => array( 'مسح_نسخه' ),
-       'Search'                    => array( 'تدوير' ),
-       'Shortpages'                => array( 'صفح_قصيره' ),
-       'Specialpages'              => array( 'صفح_مخصوصه' ),
-       'Statistics'                => array( 'احصائيات' ),
-       'Tags'                      => array( 'وسوم' ),
-       'Unblock'                   => array( 'رفع_منع' ),
-       'Uncategorizedcategories'   => array( 'تصانيف_مش_متصنفه' ),
-       'Uncategorizedimages'       => array( 'فايلات_مش_متصنفه', 'صور_مش_متصنفه' ),
-       'Uncategorizedpages'        => array( 'صفح_مش_متصنفه' ),
-       'Uncategorizedtemplates'    => array( 'قوالب_مش_متصنفه' ),
-       'Undelete'                  => array( 'استرجاع' ),
-       'Unlockdb'                  => array( 'فتح_قب' ),
-       'Unusedcategories'          => array( 'تصانيف_مش_مستعمله' ),
-       'Unusedimages'              => array( 'فايلات_مش_مستعمله', 'صور_مش_مستعمله' ),
-       'Unusedtemplates'           => array( 'قوالب_مش_مستعمله' ),
-       'Unwatchedpages'            => array( 'صفح_مش_متراقبه' ),
-       'Upload'                    => array( 'رفع' ),
-       'Userlogin'                 => array( 'دخول_اليوزر' ),
-       'Userlogout'                => array( 'خروج_اليوزر' ),
-       'Userrights'                => array( 'حقوق_اليوزر', 'ترقية_سيسوپ', 'ترقية_بوت' ),
-       'Version'                   => array( 'نسخه' ),
-       'Wantedcategories'          => array( 'تصانيف_مطلوبه' ),
-       'Wantedfiles'               => array( 'فايلات_مطلوبه' ),
-       'Wantedpages'               => array( 'صفح_مطلوبه', 'لينكات_مكسوره' ),
-       'Wantedtemplates'           => array( 'قوالب_مطلوبه' ),
-       'Watchlist'                 => array( 'ليستة_المراقبه' ),
-       'Whatlinkshere'             => array( 'ايه_بيوصل_هنا' ),
-       'Withoutinterwiki'          => array( 'من-غير_interwiki' ),
+// (bug 16469) Override Eastern Arabic numberals, use Western
+$digitTransformTable = array(
+       '0' => '0',
+       '1' => '1',
+       '2' => '2',
+       '3' => '3',
+       '4' => '4',
+       '5' => '5',
+       '6' => '6',
+       '7' => '7',
+       '8' => '8',
+       '9' => '9',
+       '.' => '.',
+       ',' => ',',
 );
 
 $messages = array(
index 7c2b31d..8935082 100644 (file)
@@ -86,7 +86,7 @@ $specialPageAliases = array(
        'CreateAccount'             => array( 'সদস্যভুক্তি' ),
        'DeletedContributions'      => array( 'বিলোপ_কৰা_বৰঙনিসমূহ' ),
        'Disambiguations'           => array( 'দ্ব্যৰ্থতা_দূৰীকৰণসমূহ' ),
-       'DoubleRedirects'           => array( 'দà§\8dবি_পà§\81ণà¦\83নিৰ্দেশনাসমূহ' ),
+       'DoubleRedirects'           => array( 'দà§\8dবি_পà§\81নৰà§\8dনিৰ্দেশনাসমূহ' ),
        'EditWatchlist'             => array( 'লক্ষ্যতালিকা_সম্পাদনা_কৰক' ),
        'Emailuser'                 => array( 'সদস্যলৈ_ই-মেইল_পঠিয়াওক' ),
        'Export'                    => array( 'ৰপ্তানি' ),
@@ -102,14 +102,14 @@ $specialPageAliases = array(
        'Listbots'                  => array( 'বটৰ_তালিকা' ),
        'Listfiles'                 => array( 'চিত্ৰ-তালিকা' ),
        'Listgrouprights'           => array( 'গোটৰ_অধিকাৰসমূহ' ),
-       'Listredirects'             => array( 'পà§\81ণà¦\83নিৰ্দেশনাসমূহৰ_তালিকা' ),
+       'Listredirects'             => array( 'পà§\81নৰà§\8dনিৰ্দেশনাসমূহৰ_তালিকা' ),
        'Listusers'                 => array( 'সদস্য-তালিকা' ),
        'Lockdb'                    => array( 'তথ্যকোষ_বন্ধ_কৰক' ),
        'Log'                       => array( 'অভিলেখ', 'অভিলেখসমূহ' ),
        'Lonelypages'               => array( 'অকলশৰীয়া_পৃষ্ঠা' ),
        'Longpages'                 => array( 'দীঘলীয়া_পৃষ্ঠাসমূহ' ),
        'MergeHistory'              => array( 'একত্ৰীকৰণ_ইতিহাস' ),
-       'MIMEsearch'                => array( 'MIME_অনুসন্ধান' ),
+       'MIMEsearch'                => array( 'MIMEMIMEmmmgM_অনুসন্ধান' ),
        'Movepage'                  => array( 'পৃষ্ঠা_স্থানান্তৰ' ),
        'Mycontributions'           => array( 'মোৰ_বৰঙনি' ),
        'Mypage'                    => array( 'মোৰ_পৃষ্ঠা' ),
@@ -124,11 +124,10 @@ $specialPageAliases = array(
        'Protectedpages'            => array( 'সুৰক্ষিত_পৃষ্ঠাসমূহ' ),
        'Protectedtitles'           => array( 'সুৰক্ষিত_শিৰোনামসমূহ' ),
        'Randompage'                => array( 'আকস্মিক' ),
-       'Randomredirect'            => array( 'à¦\86à¦\95সà§\8dমিà¦\95_পà§\81ণà¦\83নিৰ্দেশনা' ),
+       'Randomredirect'            => array( 'à¦\86à¦\95সà§\8dমিà¦\95_পà§\81নৰà§\8dনিৰ্দেশনা' ),
        'Recentchanges'             => array( 'শেহতীয়া_সালসলনি' ),
        'Recentchangeslinked'       => array( 'সম্পৰ্কিত_সালসলনিসমূহ' ),
        'Revisiondelete'            => array( 'সংস্কৰণ_বিলোপ' ),
-       'RevisionMove'              => array( 'সংস্কৰণ_স্থানান্তৰ' ),
        'Search'                    => array( 'সন্ধান' ),
        'Shortpages'                => array( 'চমু_পৃষ্ঠা' ),
        'Specialpages'              => array( 'বিশেষ_পৃষ্ঠাসমূহ' ),
@@ -2039,7 +2038,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization চাওক।",
 'listusers-creationsort' => 'সৃষ্টিৰ তাৰিখমতে সজাওক',
 'usereditcount' => '$1 {{PLURAL:$1|টা সম্পাদনা|টা সম্পাদনা}}',
 'usercreated' => '$1 তাৰিখে $2 সময়ত {{GENDER:$3|য়ে সৃষ্টি কৰিছে}}',
-'newpages' => 'নতুন পৃষ্ঠা',
+'newpages' => 'নতুন পৃষ্ঠাসমূহ',
 'newpages-username' => 'সদস্যনাম:',
 'ancientpages' => 'আটাইতকৈ পুৰণি পৃষ্ঠাসমূহ',
 'move' => 'স্থানান্তৰ কৰক',
@@ -3003,7 +3002,7 @@ $1ৰ অৱৰোধৰ কাৰণ: "$2"',
 'pageinfo-magic-words' => 'যাদুকৰী {{PLURAL:$1|শব্দ|শব্দবোৰ}} ($1)',
 'pageinfo-hidden-categories' => 'অদৃশ্য {{PLURAL:$1|শ্ৰেণী|শ্ৰেণীসমূহ}} ($1)',
 'pageinfo-templates' => 'সংযুক্ত {{PLURAL:$1|সাঁচ|সাঁচসমূহ}} ($1)',
-'pageinfo-toolboxlink' => 'পৃষ্ঠাৰ বিষয়ে তথ্য',
+'pageinfo-toolboxlink' => 'পà§\83ষà§\8dঠাà¦\96নৰ à¦¬à¦¿à¦·à¦¯à¦¼à§\87 à¦¤à¦¥à§\8dয',
 'pageinfo-redirectsto' => 'পুনৰ্নিৰ্দেশ কৰা হৈছে',
 'pageinfo-redirectsto-info' => 'তথ্য',
 'pageinfo-contentpage' => 'সমল পৃষ্ঠাৰূপে গণনা কৰা হৈছে',
index 63121c2..708fcd8 100644 (file)
@@ -107,7 +107,7 @@ $messages = array(
 
 'underline-always' => 'Siempre',
 'underline-never' => 'Nunca',
-'underline-default' => 'Restolador por defeutu',
+'underline-default' => 'Predeterminao del aspeutu o del restolador',
 
 # Font style option in Special:Preferences
 'editfont-style' => "Estilu de fonte de l'área d'edición:",
@@ -778,7 +778,7 @@ Les páxines personalizaes .css y .js usen un títulu en minúscules, p. ex. {{n
 'note' => "'''Nota:'''",
 'previewnote' => "'''Alcuerdate de qu'esto ye sólo una vista previa.'''
 ¡Los cambios entá nun se guardaron!",
-'continue-editing' => 'Siguir editando',
+'continue-editing' => "Dir al área d'edición",
 'previewconflict' => "Esta vista previa amuesa'l testu del área d'edición d'arriba tal como apaecerá si escueyes guardar.",
 'session_fail_preview' => "'''¡Sentímoslo muncho! Nun se pudo procesar la to edición porque hebo una perda de datos de la sesión.
 Inténtalo otra vuelta. Si nun se t'arregla, intenta salir y volver a rexistrate.'''",
@@ -1386,6 +1386,9 @@ Esta información sedrá pública.",
 'rightslogtext' => "Esti ye un rexistru de los cambeos de los perfiles d'usuariu.",
 'rightslogentry' => 'camudó la pertenencia de grupu del usuariu $1 dende $2 a $3',
 'rightslogentry-autopromote' => 'promocionó automáticamente de $2 a $3',
+'logentry-rights-rights' => '$1 camudó la pertenencia a grupos de $3 dende $4 a $5',
+'logentry-rights-rights-legacy' => '$1 camudó la pertenencia a grupos de $3',
+'logentry-rights-autopromote' => '$1 promocionó automáticamente de $4 a $5',
 'rightsnone' => '(nengún)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2072,8 +2075,8 @@ pa poder unviar correos a otros usuarios.',
 'emailuser-title-target' => 'Unviar un corréu electrónicu a {{GENDER:$1|esti usuariu|esta usuaria}}',
 'emailuser-title-notarget' => 'Unviar un corréu electrónicu a un usuariu',
 'emailpage' => 'Envigar un corréu electrónicu a un usuariu',
-'emailpagetext' => "Pues usar el formulariu d'embaxo pa unviar un corréu electrónicu a esti usuariu.
-La direición de corréu electrónicu qu'especificasti nes [[Special:Preferences|tos preferencies d'usuariu]] va apaecer como la direición \"Dende\" del corréu, pa que'l que lo recibe seya quien a respondete direutamente a ti.",
+'emailpagetext' => 'Pues usar el formulariu de más abaxo pa unviar un corréu electrónicu a {{GENDER:$1|esti usuariu|esta usuaria}}.
+La direición de corréu electrónicu qu\'especificasti nes [[Special:Preferences|tos preferencies d\'usuariu]] va apaecer como la direición "Dende" del corréu, pa que\'l que lo recibe seya quien a respondete direutamente a ti.',
 'usermailererror' => "L'operador de corréu devolvió un error:",
 'defemailsubject' => 'Corréu electrónicu del usuariu «$1» de {{SITENAME}}',
 'usermaildisabled' => 'Corréu del usuariu desactiváu',
@@ -2901,7 +2904,7 @@ Probablemente tea causao por un enllaz a un sitiu esternu de la llista prieta.',
 
 # Info page
 'pageinfo-title' => 'Información sobro "$1"',
-'pageinfo-not-current' => 'Namái se pue amosar la información pa la revisión actual.',
+'pageinfo-not-current' => 'Sentimoslo, ye imposible dar esta información de les revisiones antigües.',
 'pageinfo-header-basic' => 'Información básica',
 'pageinfo-header-edits' => "Historial d'ediciones",
 'pageinfo-header-restrictions' => 'Proteición de páxina',
@@ -2910,6 +2913,7 @@ Probablemente tea causao por un enllaz a un sitiu esternu de la llista prieta.',
 'pageinfo-default-sort' => "Clave d'ordenación predeterminada",
 'pageinfo-length' => 'Llonxitú de la páxina (en bytes)',
 'pageinfo-article-id' => 'ID de la páxina',
+'pageinfo-language' => 'Llingua del conteníu de la páxina',
 'pageinfo-robot-policy' => 'Estáu del motor de gueta',
 'pageinfo-robot-index' => 'Pue ser índiz',
 'pageinfo-robot-noindex' => 'Nun pue ser índiz',
@@ -3635,6 +3639,7 @@ Tamién pues [[Special:EditWatchlist|usar l'editor estándar]].",
 'version-license' => 'Llicencia',
 'version-poweredby-credits' => "Esta wiki funciona con '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'otros',
+'version-credits-summary' => 'Nos prestaría dar reconocimientu a les siguientes persones pola so contribución a [[Special:Version|MediaWiki]].',
 'version-license-info' => "MediaWiki ye software llibre; pues redistribuilu y/o camudalu baxo los términos de la Llicencia Pública Xeneral GNU tal como ta asoleyada pola Free Software Foundation; o la versión 2 de la Llicencia, o (como prefieras) cualesquier versión posterior.
 
 MediaWiki se distribúi col envís de que seya afayadiza, pero ENSIN GARANTÍA DALA; ensin siquiera garantía implícita de COMERCIALIDÁ o ADAUTACIÓN A UN DETERMINÁU PROPÓSITU. Llee la Llicencia Pública Xeneral GNU pa más detalles.
index e240157..4c4dff3 100644 (file)
@@ -2552,7 +2552,7 @@ Variants for Chinese language
 'exif-objectname' => 'Qısa başlıq',
 'exif-specialinstructions' => 'Xüsusi instruksiyalar',
 'exif-headline' => 'Başlıq',
-'exif-credit' => 'Credit/Provider',
+'exif-credit' => 'Təmin edici',
 'exif-source' => 'Mənbə',
 'exif-editstatus' => 'Şəklin redaktə statusu',
 'exif-urgency' => 'Zərurilik',
index c8de5db..7c527d6 100644 (file)
@@ -24,7 +24,7 @@ $fallback = 'ru';
 
 $namespaceNames = array(
        NS_MEDIA            => 'Медиа',
-       NS_SPECIAL          => 'ЯÑ\80Ò\99амÑ\81Ñ\8b',
+       NS_SPECIAL          => 'Ð\9cаÑ\85Ñ\81Ñ\83Ñ\81',
        NS_TALK             => 'Фекерләшеү',
        NS_USER             => 'Ҡатнашыусы',
        NS_USER_TALK        => 'Ҡатнашыусы_менән_һөйләшеү',
@@ -42,6 +42,7 @@ $namespaceNames = array(
 );
 
 $namespaceAliases = array(
+       'Ярҙамсы'                     => NS_SPECIAL,
        'Фекер_алышыу'                => NS_TALK,
        'Ҡатнашыусы_м-н_фекер_алышыу' => NS_USER_TALK,
        '$1_б-са_фекер_алышыу'        => NS_PROJECT_TALK,
@@ -56,6 +57,85 @@ $namespaceAliases = array(
 
 $specialPageAliases = array(
        'Activeusers'               => array( 'ӘүҙемҠатнашыусылар', 'АктивҠатнашыусылар' ),
+       'Allmessages'               => array( 'Система_хәбәрҙәре' ),
+       'Allpages'                  => array( 'Барлыҡ_битәр' ),
+       'Blankpage'                 => array( 'Буш_бит' ),
+       'Block'                     => array( 'Блоклау' ),
+       'Blockme'                   => array( 'Мине_блокла' ),
+       'Booksources'               => array( 'Китап_сығанаҡтары' ),
+       'BrokenRedirects'           => array( 'Өҙөлгән_йүнәлтеүҙәр' ),
+       'Categories'                => array( 'Категориялар' ),
+       'ChangeEmail'               => array( 'Email-ды_алыштырыу' ),
+       'ChangePassword'            => array( 'Паролде_алыштырыу' ),
+       'ComparePages'              => array( 'Биттәрҙе_сағыштырыу' ),
+       'Confirmemail'              => array( 'Email-ды_раҫлау' ),
+       'Contributions'             => array( 'Өлөштәр' ),
+       'CreateAccount'             => array( 'Иҫәп_яҙыуы_яһау' ),
+       'Deadendpages'              => array( 'Көрсөк_биттәр' ),
+       'DeletedContributions'      => array( 'Юйылған_өлөш' ),
+       'Disambiguations'           => array( 'Күп_мәғәнәлелек' ),
+       'DoubleRedirects'           => array( 'Икеле_йүнәлтеүҙәр' ),
+       'EditWatchlist'             => array( 'Күҙәтеү_исемлеген_мөхәррирләү' ),
+       'Emailuser'                 => array( 'Ҡатнашыусыға_хат' ),
+       'Export'                    => array( 'Экспорт' ),
+       'FileDuplicateSearch'       => array( 'Файлдың_дубликаттарын_эҙләү' ),
+       'Filepath'                  => array( 'Файл_юлы' ),
+       'Import'                    => array( 'Импорт' ),
+       'BlockList'                 => array( 'Блоклауҙар_исемлеге' ),
+       'LinkSearch'                => array( 'Һылтанмалар_эҙләү' ),
+       'Listadmins'                => array( 'Хакимдар_исемлеге' ),
+       'Listbots'                  => array( 'Боттар_исемлеге' ),
+       'Listfiles'                 => array( 'Файлдар_исемлеге' ),
+       'Listgrouprights'           => array( 'Ҡатнашыусы_төркөмдәре_хоҡуҡтары' ),
+       'Listredirects'             => array( 'Йүнәлтеүҙәр_исемлеге' ),
+       'Listusers'                 => array( 'Ҡатнашыусылар_исемлеге' ),
+       'Log'                       => array( 'Журналдар' ),
+       'Lonelypages'               => array( 'Етем_биттәр' ),
+       'Longpages'                 => array( 'Оҙон_биттәр' ),
+       'MergeHistory'              => array( 'Тарихтарҙы_берләштереү' ),
+       'Mostimages'                => array( 'Йыш_ҡулланылған_файлдар' ),
+       'Movepage'                  => array( 'Бит_исемен_үҙгәртеү' ),
+       'Mycontributions'           => array( 'Өлөшөм' ),
+       'Mypage'                    => array( 'Битем' ),
+       'Mytalk'                    => array( 'Әңгәмә_битем' ),
+       'Myuploads'                 => array( 'Тейәүҙәрем' ),
+       'Newimages'                 => array( 'Яңы_файлдар' ),
+       'Newpages'                  => array( 'Яңы_биттәр' ),
+       'PasswordReset'             => array( 'Паролде_яңыртыу' ),
+       'PermanentLink'             => array( 'Даими_һылтанма' ),
+       'Popularpages'              => array( 'Популяр_биттәр' ),
+       'Preferences'               => array( 'Көйләүҙәр' ),
+       'Protectedpages'            => array( 'Һаҡланған_биттәр' ),
+       'Protectedtitles'           => array( 'Һаҡланған_исемдәр' ),
+       'Randompage'                => array( 'Осраҡлы_мәҡәлә' ),
+       'Recentchanges'             => array( 'Һуңғы_үҙгәртеүҙәр' ),
+       'Recentchangeslinked'       => array( 'Бәйле_үҙгәртеүҙәр' ),
+       'Revisiondelete'            => array( 'Төҙәтеүҙе_юйыу' ),
+       'Search'                    => array( 'Эҙләү' ),
+       'Shortpages'                => array( 'Ҡыҫҡа_биттәр' ),
+       'Specialpages'              => array( 'Махсус_биттәр' ),
+       'Tags'                      => array( 'Билдәләр' ),
+       'Unblock'                   => array( 'Блокты_сисеү' ),
+       'Uncategorizedcategories'   => array( 'Категорияланмаған_категориялар' ),
+       'Uncategorizedimages'       => array( 'Категорияланмаған_файлдар' ),
+       'Uncategorizedpages'        => array( 'Категорияланмаған_биттәр' ),
+       'Uncategorizedtemplates'    => array( 'Категорияланмаған_ҡалыптар' ),
+       'Undelete'                  => array( 'Тергеҙеү' ),
+       'Unusedcategories'          => array( 'Ҡулланылмаған_категориялар' ),
+       'Unusedimages'              => array( 'Ҡулланылмаған_файлдар' ),
+       'Unusedtemplates'           => array( 'Ҡулланылмаған_ҡалыптар' ),
+       'Upload'                    => array( 'Тейәү' ),
+       'UploadStash'               => array( 'Йәшерен_тейәү' ),
+       'Userlogin'                 => array( 'Танылыу' ),
+       'Userlogout'                => array( 'Ултырышты_тамамлау' ),
+       'Userrights'                => array( 'Хоҡуҡтарҙы_идаралау' ),
+       'Wantedcategories'          => array( 'Кәрәкле_категориялар' ),
+       'Wantedfiles'               => array( 'Кәрәкле_файлдар' ),
+       'Wantedpages'               => array( 'Кәрәкле_биттәр' ),
+       'Wantedtemplates'           => array( 'Кәрәкле_ҡалыптар' ),
+       'Watchlist'                 => array( 'Күҙәтеү_исемлеге' ),
+       'Whatlinkshere'             => array( 'Бында_һылтанмалар' ),
+       'Withoutinterwiki'          => array( 'Интервикиһыҙ' ),
 );
 
 // Remove Russian aliases
index f11415c..ac4f2d5 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author Als-Holder
+ * @author Bua333
  * @author Malafaya
  * @author Man77
  * @author Merlissimo
@@ -95,7 +96,7 @@ $messages = array(
 'fri' => 'Fr',
 'sat' => 'Så',
 'january' => 'Jänner',
-'february' => 'Feewer',
+'february' => 'Feba',
 'march' => 'März',
 'april' => 'Aprü',
 'may_long' => 'Mai',
@@ -103,8 +104,8 @@ $messages = array(
 'july' => 'Juli',
 'august' => 'August',
 'september' => 'September',
-'october' => 'Óktówer',
-'november' => 'Nóvember',
+'october' => 'Oktoba',
+'november' => 'Novemba',
 'december' => 'Dezember',
 'january-gen' => 'Jänner',
 'february-gen' => 'Feewer',
@@ -150,13 +151,13 @@ $messages = array(
 'noindex-category' => 'Néd-indizirde Seiten',
 'broken-file-category' => 'Seiten mid kaputte Daateilinks',
 
-'about' => 'Ywer',
+'about' => 'Iba',
 'article' => 'Artike',
 'newwindow' => '(werd in am neichen Fenster aufgmocht)',
 'cancel' => 'Obbrecher',
 'moredotdotdot' => 'Merer',
 'mypage' => 'Eigerne Seiten',
-'mytalk' => 'Eigerne Diskussión',
+'mytalk' => 'Mei Dischkurs',
 'anontalk' => 'Dischkrirseiten voh derer IP-Adress',
 'navigation' => 'Navigazión',
 'and' => '&#32;und',
@@ -175,7 +176,7 @@ $messages = array(
 'vector-action-addsection' => 'Obschnit dazuafyng',
 'vector-action-delete' => 'Leschen',
 'vector-action-move' => 'Vaschiam',
-'vector-action-protect' => 'Schytzen',
+'vector-action-protect' => 'Schitzn',
 'vector-action-undelete' => 'Wiederherstön',
 'vector-action-unprotect' => 'freigeem',
 'vector-simplesearch-preference' => 'Daweiterte Suachvurschläg aktivirn (netter Vector)',
@@ -183,9 +184,9 @@ $messages = array(
 'vector-view-edit' => 'Werkeln',
 'vector-view-history' => 'Versiónsgschicht',
 'vector-view-view' => 'Leesen',
-'vector-view-viewsource' => 'Quötext åzong',
+'vector-view-viewsource' => 'Quejtext ozoagn',
 'actions' => 'Akziónen',
-'namespaces' => 'Nåmensraim',
+'namespaces' => 'Namasramm',
 'variants' => 'Varianten',
 
 'errorpagetitle' => 'Feeler',
@@ -199,7 +200,7 @@ $messages = array(
 'history' => 'Versiónen',
 'history_short' => 'Versionen/Autorn',
 'updatedmarker' => '(gänderd)',
-'printableversion' => 'Versión zum Ausdrucken',
+'printableversion' => 'Druckversion',
 'permalink' => 'Permanenter Link',
 'print' => 'Drucken',
 'view' => 'Leesen',
@@ -218,12 +219,12 @@ $messages = array(
 'unprotectthispage' => 'Seitenschutz ändern',
 'newpage' => 'Neiche Seiten',
 'talkpage' => 'De Seiten bsprecher',
-'talkpagelinktext' => 'Diskussión',
+'talkpagelinktext' => 'Dischkrian',
 'specialpage' => 'Speziaalseiten',
 'personaltools' => 'Persénlichs Werkzeig',
 'postcomment' => 'Neicher Obschnit',
 'articlepage' => 'Seiteninhoid åzoang',
-'talk' => 'Diskussión',
+'talk' => 'Dischkrian',
 'views' => 'Åsichten',
 'toolbox' => 'Werkzeigkisten',
 'userpage' => 'Benutzerseiten',
@@ -253,7 +254,7 @@ $1",
 'pool-errorunknown' => 'Unbekånnter Feeler',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
-'aboutsite' => 'Ywer {{SITENAME}}',
+'aboutsite' => 'Iba {{SITENAME}}',
 'aboutpage' => 'Project:Ywer',
 'copyright' => 'Da Inhoid is unter da $1 vafiagbor.',
 'copyrightpage' => '{{ns:project}}:Urheewerrechte',
@@ -264,7 +265,7 @@ $1",
 'edithelp' => 'Beorweitungshüfm',
 'edithelppage' => 'Help:Beorweitungshüfm',
 'helppage' => 'Help:Inhoidsvazeichnis',
-'mainpage' => 'Hauptseiten',
+'mainpage' => 'Hoamseitn',
 'mainpage-description' => 'Hauptseiten',
 'policy-url' => 'Project:Richtlinien',
 'portal' => 'Autornportal',
@@ -283,13 +284,13 @@ Schaug auf [[Special:Version|Versiónsseiten]]",
 'ok' => 'Passt',
 'retrievedfrom' => 'Voh „$1“',
 'youhavenewmessages' => 'Du host $1 ($2).',
-'newmessageslink' => 'neiche Noochrichten',
-'newmessagesdifflink' => 'neiche Noochrichten',
-'youhavenewmessagesmulti' => 'Du host neiche Noochrichten: $1',
-'editsection' => 'werkeln',
+'newmessageslink' => 'neiche Nochrichtn',
+'newmessagesdifflink' => 'Letzte Endarung',
+'youhavenewmessagesmulti' => 'Du host neiche Nochrichtn: $1',
+'editsection' => 'Werkln',
 'editold' => 'werkeln',
 'viewsourceold' => 'Quötext åzoang',
-'editlink' => 'werkeln',
+'editlink' => 'werkln',
 'viewsourcelink' => 'an Quötext åschauh',
 'editsectionhint' => 'Obschnit beorweiden: $1',
 'toc' => 'Inhoidsvazeichnis',
@@ -307,7 +308,7 @@ Schaug auf [[Special:Version|Versiónsseiten]]",
 'site-atom-feed' => 'Atom-Feed fyr $1',
 'page-rss-feed' => 'RSS-Feed fyr „$1“',
 'page-atom-feed' => 'Atom-Feed fyr „$1“',
-'red-link-title' => '$1 (dé Seiten gibts néd)',
+'red-link-title' => '$1 (de Seitn gibts ned)',
 'sort-descending' => 'Obsteigend sortiern',
 'sort-ascending' => 'Aufsteigend sortiern',
 
@@ -315,7 +316,7 @@ Schaug auf [[Special:Version|Versiónsseiten]]",
 'nstab-main' => 'Seiten',
 'nstab-user' => 'Benutzerseiten',
 'nstab-media' => 'Meedienseiten',
-'nstab-special' => 'Speziaalseiten',
+'nstab-special' => 'Spezialseitn',
 'nstab-project' => 'Projektseiten',
 'nstab-image' => 'Daatei',
 'nstab-mediawiki' => 'Systémnoochricht',
@@ -383,7 +384,7 @@ Méglicherweis iss schoh vohram åndern gléschd worn.',
 'wrong_wfQuery_params' => 'Foische Parameeter fyr wfQuery()<br />
 Funkzión: $1<br />
 Obfrog: $2',
-'viewsource' => 'an Quötext åschauh',
+'viewsource' => 'Quejtext ozoagn',
 'viewsource-title' => 'Quöntext voh da Seiten $1 auhschauh',
 'actionthrottled' => 'Akziónszoi limitird',
 'actionthrottledtext' => 'Im Råmen voh ner Anti-Spam-Moossnåm kå dé Akzión do in am kurzen Zeidobstånd netter begrenzd ausgfyrd wern. Dé Grenzen host ywerschritten.
@@ -431,7 +432,7 @@ Vagiss bittscheh néd, deine [[Special:Preferences|{{SITENAME}}-Eishtellungen]]
 'userlogin' => 'Åmöden / Kontó erstön',
 'userloginnocreate' => 'Åmöden',
 'logout' => 'Obmöden',
-'userlogout' => 'Obmöden',
+'userlogout' => 'Auslogga',
 'notloggedin' => 'Ned ågmödt',
 'nologin' => "Du host koah Benutzerkóntó? '''$1'''.",
 'nologinlink' => 'A neichs Benutzerkontó erstön',
@@ -701,7 +702,7 @@ Details stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}}
 
 # Preferences page
 'preferences' => 'Eihstellungen',
-'mypreferences' => 'Eigerne Eihstellungen',
+'mypreferences' => 'Mei Preferenz',
 'changepassword' => 'Posswort ändern',
 'prefs-editing' => 'Beorweiten',
 'prefs-edit-boxsize' => 'Gress vom Beorweitungsfenster',
@@ -719,7 +720,7 @@ Details stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}}
 'prefs-namespaces' => 'Nåmensraim',
 'youremail' => 'E-Mail-Adress:',
 'username' => 'Benutzernåm:',
-'yourrealname' => 'Da echte Nåm:',
+'yourrealname' => 'Biagalicha Nama:',
 'yourlanguage' => 'Sprooch vo da Benutzerowerflächen',
 'prefs-help-realname' => 'Opzionoi. Dodamid kå dai byrgerlicher Nåm daine Baiträg zuagordnet wern.',
 'prefs-help-email' => "Dé Ågob voh ner E-Mail-Adressen is ópziónoi, daméglicht ower d' Zuasendung vohram Ersotzposswort, sófern du deih Posswort vagessen host.",
@@ -809,7 +810,7 @@ Details stehen im [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}}
 'recentchangeslinked-to' => 'Zoagt Änderrungen auf Seiten, dé do her valinken',
 
 # Upload
-'upload' => 'Aufféloon',
+'upload' => 'Affelodn',
 'uploadbtn' => 'Daatei aufféloon',
 'uploadnologin' => 'Néd ågmödt',
 'uploadnologintext' => 'Du muasst [[Special:UserLogin|ågmödt]] seih, wånn Du Daatein auffeloon wüst.',
@@ -1086,7 +1087,7 @@ Zuasätzlige Informaziónen ywer dé oahzelnen Rechtt kennan [[{{MediaWiki:Listg
 
 # Watchlist
 'watchlist' => 'Beówochtungslisten',
-'mywatchlist' => 'Beówochtungslisten',
+'mywatchlist' => 'Mei Beobochta',
 'watchlistfor2' => 'Voh $1 $2',
 'nowatchlist' => 'Es gibt koane Eihträg auf deiner Beówochtungslisten.',
 'watchlistanontext' => "Du muasst dé $1, um deih Beówchtungslisten z' seeng óder Eihträg borweiten z' kenner.",
@@ -1236,7 +1237,7 @@ Da aktuöje Text voh da gléschden Seiten is netter fyr Administraatorn zuagäng
 'undelete-show-file-submit' => 'Jo',
 
 # Namespace form on various pages
-'namespace' => 'Nåmensraum:',
+'namespace' => 'Namasramm:',
 'invert' => 'Auswoi umdraan',
 'namespace_association' => 'Zuagordnéter Nåmensraum',
 'blanknamespace' => '(Seiten)',
@@ -1244,7 +1245,7 @@ Da aktuöje Text voh da gléschden Seiten is netter fyr Administraatorn zuagäng
 # Contributions
 'contributions' => 'Benutzerbeiträg',
 'contributions-title' => 'Benutzerbeiträg voh „$1“',
-'mycontris' => 'Eigerne Beitrég',
+'mycontris' => 'Meine Beidräg',
 'contribsub2' => 'Fyr $1 ($2)',
 'uctop' => '(aktuö)',
 'month' => 'und Monad',
@@ -1328,14 +1329,14 @@ Zur da Aufheewung vo da Sperrn schau unter da [[Special:BlockList|Listen vo olle
 'ipusubmit' => 'Freigem',
 'unblocked' => '[[User:$1|$1]] is freigem worn',
 'unblocked-id' => 'Sperr-ID $1 is fraigeem worn',
-'ipblocklist' => 'Gsperrde Benutzer',
+'ipblocklist' => 'Gsperrte Nutza',
 'ipblocklist-legend' => 'Suach noch am gsperrden Benytzer',
 'createaccountblock' => "'s erstön voh Benutzerkóntós is gsperrd",
 'emailblock' => 'E-Póst vaschicker is gsperrd',
 'blocklink' => 'sperrn',
 'unblocklink' => 'Freigeem',
 'change-blocklink' => 'Sperr ändern',
-'contribslink' => 'Beitrég',
+'contribslink' => 'Beidräg',
 'emaillink' => 'E-Póst schicker',
 'autoblocker' => 'Autómaatische Sperr, wei du a gmoahsaume IP-Adress mim [[User:$1|$1]] bnutzd. Grund voh da Benutzersperrn: „$2“.',
 'blocklogpage' => 'Benutzersperrlogbiaché',
@@ -1460,7 +1461,7 @@ Bsuach bittschee de Saiten [//www.mediawiki.org/wiki/Localisation MediaWiki-Loka
 'tooltip-feed-atom' => 'Atom-Feed vo derer Saiten',
 'tooltip-t-contributions' => "D' Listen voh d' Beiträg voh dém Benutzer åschauh",
 'tooltip-t-emailuser' => 'Dém Benutzer a E-Post schicken',
-'tooltip-t-upload' => 'Daatein aufféloon',
+'tooltip-t-upload' => 'Datein affelodn',
 'tooltip-t-specialpages' => 'Listen voh olle Speziaalseiten',
 'tooltip-t-print' => 'Druckåsicht voh derer Seiten',
 'tooltip-t-permalink' => 'Dauerhofter Link zua derer Seitenversión',
@@ -1648,7 +1649,7 @@ Bittscheh d' noraale Vurschau bnutzen.",
 'fileduplicatesearch-result-1' => 'Dé Daatei „$1“ hod koane identischen Duplikaate.',
 
 # Special:SpecialPages
-'specialpages' => 'Speziaalseiten',
+'specialpages' => 'Spezialseitn',
 'specialpages-note' => '----
 * Reguläre Speziaalseiten
 * <span class="mw-specialpagerestricted">Zuagrifsbschränkde Speziaalseiten</span>
index f33e04f..94ae3bc 100644 (file)
@@ -16,7 +16,6 @@
 
 $fallback = 'fa';
 
-
 $namespaceNames = array(
        NS_MEDIA            => 'مدیا',
        NS_SPECIAL          => 'حاص',
index a924935..48cb369 100644 (file)
@@ -34,6 +34,11 @@ $namespaceNames = array(
        NS_CATEGORY_TALK    => 'Olay_sa_kategorya',
 );
 
+$specialPageAliases = array(
+       'Search'                    => array( 'Hanapon' ),
+       'Upload'                    => array( 'Ikarga' ),
+);
+
 $magicWords = array(
        'currentmonth'              => array( '1', 'BULANNGONYAN', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonthname'          => array( '1', 'NGARANBULANNGONYAN', 'CURRENTMONTHNAME' ),
@@ -90,11 +95,6 @@ $magicWords = array(
        'pagesize'                  => array( '1', 'PAHINASOKOL', 'PAGESIZE' ),
 );
 
-$specialPageAliases = array(
-       'Search'                    => array( 'Hanapon' ),
-       'Upload'                    => array( 'Ikarga' ),
-);
-
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Linyahan an kilyawan:',
index ad64f05..518bf65 100644 (file)
  * @author לערי ריינהארט
  */
 
-$bookstoreList = array(
-       'OZ.by' => 'http://oz.by/search.phtml?what=books&isbn=$1',
-       'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
-);
-
-$datePreferences = array(
-       'default',
-       'dmy',
-       'ISO 8601',
-);
-
-$defaultDateFormat = 'dmy';
-
-$dateFormats = array(
-       'dmy time' => 'H:i',
-       'dmy date' => 'j xg Y',
-       'dmy both' => 'H:i, j xg Y',
-);
-
 $namespaceNames = array(
        NS_MEDIA            => 'Мультымедыя',
        NS_SPECIAL          => 'Адмысловае',
@@ -78,6 +59,25 @@ $magicWords = array(
        'img_framed'                => array( '1', 'безрамкі', 'framed', 'enframed', 'frame' ),
 );
 
+$bookstoreList = array(
+       'OZ.by' => 'http://oz.by/search.phtml?what=books&isbn=$1',
+       'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+);
+
+$datePreferences = array(
+       'default',
+       'dmy',
+       'ISO 8601',
+);
+
+$defaultDateFormat = 'dmy';
+
+$dateFormats = array(
+       'dmy time' => 'H:i',
+       'dmy date' => 'j xg Y',
+       'dmy both' => 'H:i, j xg Y',
+);
+
 # Per discussion on http://translatewiki.net/wiki/Thread:Support/Customization_of number format
 $separatorTransformTable = array(
        ',' => "\xc2\xa0", # nbsp
index d1d3ad3..15ec73d 100644 (file)
 
 $fallback = 'be';
 
-$bookstoreList = array(
-       'OZ.by' => 'http://oz.by/search.phtml?what=books&isbn=$1',
-       'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+$namespaceNames = array(
+       NS_MEDIA            => 'Мэдыя',
+       NS_SPECIAL          => 'Спэцыяльныя',
+       NS_TALK             => 'Абмеркаваньне',
+       NS_USER             => 'Удзельнік',
+       NS_USER_TALK        => 'Гутаркі_ўдзельніка',
+       NS_PROJECT_TALK     => 'Абмеркаваньне_{{GRAMMAR:родны|$1}}',
+       NS_FILE             => 'Файл',
+       NS_FILE_TALK        => 'Абмеркаваньне_файла',
+       NS_MEDIAWIKI        => 'MediaWiki',
+       NS_MEDIAWIKI_TALK   => 'Абмеркаваньне_MediaWiki',
+       NS_TEMPLATE         => 'Шаблён',
+       NS_TEMPLATE_TALK    => 'Абмеркаваньне_шаблёну',
+       NS_HELP             => 'Дапамога',
+       NS_HELP_TALK        => 'Абмеркаваньне_дапамогі',
+       NS_CATEGORY         => 'Катэгорыя',
+       NS_CATEGORY_TALK    => 'Абмеркаваньне_катэгорыі',
 );
 
-$datePreferences = array(
-       'default',
-       'dmy',
-       'ISO 8601',
+$namespaceAliases = array(
+       'Удзельніца' => NS_USER,
+       'Гутаркі ўдзельніцы' => NS_USER_TALK,
+       'Абмеркаваньне_$1' => NS_PROJECT_TALK,
+       'Выява' => NS_FILE,
+       'Абмеркаваньне выявы' => NS_FILE_TALK,
 );
 
-$defaultDateFormat = 'dmy';
-
-$dateFormats = array(
-       'dmy time' => 'H:i',
-       'dmy date' => 'j xg Y',
-       'dmy both' => 'H:i, j xg Y',
+$specialPageAliases = array(
+       'Allmessages'               => array( 'Сыстэмныя_паведамленьні' ),
+       'Allpages'                  => array( 'Усе_старонкі' ),
+       'Ancientpages'              => array( 'Найстарэйшыя_старонкі' ),
+       'Block'                     => array( 'Блякаваньне' ),
+       'BrokenRedirects'           => array( 'Некарэктныя_перанакіраваньні' ),
+       'Categories'                => array( 'Катэгорыі' ),
+       'ChangePassword'            => array( 'Зьмяніць_пароль', 'Ачысьціць_пароль' ),
+       'Contributions'             => array( 'Унёсак' ),
+       'CreateAccount'             => array( 'Стварыць_рахунак' ),
+       'Deadendpages'              => array( 'Тупіковыя_старонкі' ),
+       'DeletedContributions'      => array( 'Выдалены_ўнёсак' ),
+       'Disambiguations'           => array( 'Неадназначнасьці' ),
+       'DoubleRedirects'           => array( 'Двайныя_перанакіраваньні' ),
+       'Emailuser'                 => array( 'Даслаць_ліст' ),
+       'Export'                    => array( 'Экспарт' ),
+       'Filepath'                  => array( 'Шлях_да_файла' ),
+       'Import'                    => array( 'Імпарт' ),
+       'LinkSearch'                => array( 'Пошук_вонкавых_спасылак' ),
+       'Listadmins'                => array( 'Сьпіс_адміністратараў' ),
+       'Listbots'                  => array( 'Сьпіс_робатаў' ),
+       'Listfiles'                 => array( 'Сьпіс_файлаў' ),
+       'Listredirects'             => array( 'Сьпіс_перанакіраваньняў' ),
+       'Listusers'                 => array( 'Сьпіс_удзельнікаў' ),
+       'Log'                       => array( 'Журналы_падзеяў' ),
+       'Lonelypages'               => array( 'Старонкі-сіраціны' ),
+       'Longpages'                 => array( 'Доўгія_старонкі' ),
+       'MergeHistory'              => array( 'Гісторыя_аб\'яднаньняў' ),
+       'Mycontributions'           => array( 'Мой_унёсак' ),
+       'Mypage'                    => array( 'Мая_старонка' ),
+       'Mytalk'                    => array( 'Мае_размовы' ),
+       'Newimages'                 => array( 'Новыя_файлы' ),
+       'Newpages'                  => array( 'Новыя_старонкі' ),
+       'Popularpages'              => array( 'Папулярныя_старонкі' ),
+       'Protectedpages'            => array( 'Абароненыя_старонкі' ),
+       'Protectedtitles'           => array( 'Забароненыя_старонкі' ),
+       'Randompage'                => array( 'Выпадковая_старонка' ),
+       'Randomredirect'            => array( 'Выпадковае_перанакіраваньне' ),
+       'Recentchanges'             => array( 'Апошнія_зьмены' ),
+       'Search'                    => array( 'Пошук' ),
+       'Shortpages'                => array( 'Кароткія_старонкі' ),
+       'Specialpages'              => array( 'Спэцыяльныя_старонкі' ),
+       'Statistics'                => array( 'Статыстыка' ),
+       'Uncategorizedcategories'   => array( 'Некатэгарызаваныя_катэгорыі' ),
+       'Uncategorizedimages'       => array( 'Некатэгарызаваныя_файлы' ),
+       'Uncategorizedpages'        => array( 'Некатэгарызаваныя_старонкі' ),
+       'Uncategorizedtemplates'    => array( 'Некатэгарызаваныя_шаблёны' ),
+       'Upload'                    => array( 'Загрузка' ),
+       'Version'                   => array( 'Вэрсія' ),
+       'Wantedcategories'          => array( 'Запатрабаваныя_катэгорыі' ),
+       'Wantedfiles'               => array( 'Запатрабаваныя_файлы' ),
+       'Wantedpages'               => array( 'Запатрабаваныя_старонкі', 'Некарэктныя_спасылкі' ),
+       'Wantedtemplates'           => array( 'Запатрабаваныя_шаблёны' ),
+       'Watchlist'                 => array( 'Сьпіс_назіраньня' ),
+       'Whatlinkshere'             => array( 'Спасылкі_на_старонку' ),
 );
 
 $magicWords = array(
@@ -95,14 +160,14 @@ $magicWords = array(
        'msg'                       => array( '0', 'ПАВЕДАМЛЕНЬНЕ:', 'MSG:' ),
        'subst'                     => array( '0', 'ПАДСТАНОЎКА:', 'SUBST:' ),
        'msgnw'                     => array( '0', 'ПАВЕДАМЛЕНЬНЕ_БЯЗЬ_ВІКІ:', 'MSGNW:' ),
-       'img_thumbnail'             => array( '1', 'значак', 'міні', 'thumbnail', 'thumb' ),
-       'img_manualthumb'           => array( '1', 'значак=$1', 'міні=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_thumbnail'             => array( '1', 'значак', 'міні', 'мініяцюра', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'значак=$1', 'міні=$1', 'мініяцюра=$1', 'thumbnail=$1', 'thumb=$1' ),
        'img_right'                 => array( '1', 'справа', 'right' ),
-       'img_left'                  => array( '1', 'зьлева', 'left' ),
+       'img_left'                  => array( '1', 'зьлева', 'злева', 'left' ),
        'img_none'                  => array( '1', 'няма', 'none' ),
        'img_width'                 => array( '1', '$1пкс', '$1px' ),
-       'img_center'                => array( '1', 'цэнтар', 'center', 'centre' ),
-       'img_framed'                => array( '1', 'рамка', 'framed', 'enframed', 'frame' ),
+       'img_center'                => array( '1', 'цэнтар', 'цэнтр', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'рамка', 'безрамкі', 'framed', 'enframed', 'frame' ),
        'img_page'                  => array( '1', 'старонка=$1', 'старонка $1', 'page=$1', 'page $1' ),
        'img_top'                   => array( '1', 'зьверху', 'top' ),
        'img_middle'                => array( '1', 'пасярэдзіне', 'middle' ),
@@ -158,88 +223,23 @@ $magicWords = array(
        'staticredirect'            => array( '1', '__СТАТЫЧНАЕ_ПЕРАНАКІРАВАНЬНЕ__', '__STATICREDIRECT__' ),
 );
 
-$namespaceNames = array(
-       NS_MEDIA            => 'Мэдыя',
-       NS_SPECIAL          => 'Спэцыяльныя',
-       NS_TALK             => 'Абмеркаваньне',
-       NS_USER             => 'Удзельнік',
-       NS_USER_TALK        => 'Гутаркі_ўдзельніка',
-       NS_PROJECT_TALK     => 'Абмеркаваньне_{{GRAMMAR:родны|$1}}',
-       NS_FILE             => 'Файл',
-       NS_FILE_TALK        => 'Абмеркаваньне_файла',
-       NS_MEDIAWIKI        => 'MediaWiki',
-       NS_MEDIAWIKI_TALK   => 'Абмеркаваньне_MediaWiki',
-       NS_TEMPLATE         => 'Шаблён',
-       NS_TEMPLATE_TALK    => 'Абмеркаваньне_шаблёну',
-       NS_HELP             => 'Дапамога',
-       NS_HELP_TALK        => 'Абмеркаваньне_дапамогі',
-       NS_CATEGORY         => 'Катэгорыя',
-       NS_CATEGORY_TALK    => 'Абмеркаваньне_катэгорыі',
+$bookstoreList = array(
+       'OZ.by' => 'http://oz.by/search.phtml?what=books&isbn=$1',
+       'Amazon.com' => 'http://www.amazon.com/exec/obidos/ISBN=$1'
 );
 
-$namespaceAliases = array(
-       'Удзельніца' => NS_USER,
-       'Гутаркі ўдзельніцы' => NS_USER_TALK,
-       'Абмеркаваньне_$1' => NS_PROJECT_TALK,
-       'Выява' => NS_FILE,
-       'Абмеркаваньне выявы' => NS_FILE_TALK,
+$datePreferences = array(
+       'default',
+       'dmy',
+       'ISO 8601',
 );
 
-$specialPageAliases = array(
-       'Allmessages'               => array( 'Сыстэмныя_паведамленьні' ),
-       'Allpages'                  => array( 'Усе_старонкі' ),
-       'Ancientpages'              => array( 'Найстарэйшыя_старонкі' ),
-       'Block'                     => array( 'Блякаваньне' ),
-       'BrokenRedirects'           => array( 'Некарэктныя_перанакіраваньні' ),
-       'Categories'                => array( 'Катэгорыі' ),
-       'ChangePassword'            => array( 'Зьмяніць_пароль', 'Ачысьціць_пароль' ),
-       'Contributions'             => array( 'Унёсак' ),
-       'CreateAccount'             => array( 'Стварыць_рахунак' ),
-       'Deadendpages'              => array( 'Тупіковыя_старонкі' ),
-       'DeletedContributions'      => array( 'Выдалены_ўнёсак' ),
-       'Disambiguations'           => array( 'Неадназначнасьці' ),
-       'DoubleRedirects'           => array( 'Двайныя_перанакіраваньні' ),
-       'Emailuser'                 => array( 'Даслаць_ліст' ),
-       'Export'                    => array( 'Экспарт' ),
-       'Filepath'                  => array( 'Шлях_да_файла' ),
-       'Import'                    => array( 'Імпарт' ),
-       'LinkSearch'                => array( 'Пошук_вонкавых_спасылак' ),
-       'Listadmins'                => array( 'Сьпіс_адміністратараў' ),
-       'Listbots'                  => array( 'Сьпіс_робатаў' ),
-       'Listfiles'                 => array( 'Сьпіс_файлаў' ),
-       'Listredirects'             => array( 'Сьпіс_перанакіраваньняў' ),
-       'Listusers'                 => array( 'Сьпіс_удзельнікаў' ),
-       'Log'                       => array( 'Журналы_падзеяў' ),
-       'Lonelypages'               => array( 'Старонкі-сіраціны' ),
-       'Longpages'                 => array( 'Доўгія_старонкі' ),
-       'MergeHistory'              => array( 'Гісторыя_аб\'яднаньняў' ),
-       'Mycontributions'           => array( 'Мой_унёсак' ),
-       'Mypage'                    => array( 'Мая_старонка' ),
-       'Mytalk'                    => array( 'Мае_размовы' ),
-       'Newimages'                 => array( 'Новыя_файлы' ),
-       'Newpages'                  => array( 'Новыя_старонкі' ),
-       'Popularpages'              => array( 'Папулярныя_старонкі' ),
-       'Protectedpages'            => array( 'Абароненыя_старонкі' ),
-       'Protectedtitles'           => array( 'Забароненыя_старонкі' ),
-       'Randompage'                => array( 'Выпадковая_старонка' ),
-       'Randomredirect'            => array( 'Выпадковае_перанакіраваньне' ),
-       'Recentchanges'             => array( 'Апошнія_зьмены' ),
-       'Search'                    => array( 'Пошук' ),
-       'Shortpages'                => array( 'Кароткія_старонкі' ),
-       'Specialpages'              => array( 'Спэцыяльныя_старонкі' ),
-       'Statistics'                => array( 'Статыстыка' ),
-       'Uncategorizedcategories'   => array( 'Некатэгарызаваныя_катэгорыі' ),
-       'Uncategorizedimages'       => array( 'Некатэгарызаваныя_файлы' ),
-       'Uncategorizedpages'        => array( 'Некатэгарызаваныя_старонкі' ),
-       'Uncategorizedtemplates'    => array( 'Некатэгарызаваныя_шаблёны' ),
-       'Upload'                    => array( 'Загрузка' ),
-       'Version'                   => array( 'Вэрсія' ),
-       'Wantedcategories'          => array( 'Запатрабаваныя_катэгорыі' ),
-       'Wantedfiles'               => array( 'Запатрабаваныя_файлы' ),
-       'Wantedpages'               => array( 'Запатрабаваныя_старонкі', 'Некарэктныя_спасылкі' ),
-       'Wantedtemplates'           => array( 'Запатрабаваныя_шаблёны' ),
-       'Watchlist'                 => array( 'Сьпіс_назіраньня' ),
-       'Whatlinkshere'             => array( 'Спасылкі_на_старонку' ),
+$defaultDateFormat = 'dmy';
+
+$dateFormats = array(
+       'dmy time' => 'H:i',
+       'dmy date' => 'j xg Y',
+       'dmy both' => 'H:i, j xg Y',
 );
 
 $separatorTransformTable = array(
@@ -305,7 +305,7 @@ $messages = array(
 
 'underline-always' => 'Заўсёды',
 'underline-never' => 'Ніколі',
-'underline-default' => 'Паводле браўзэра',
+'underline-default' => 'Паводле браўзэра або афармленьня',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Стыль шрыфту ў полі рэдагаваньня:',
@@ -1554,6 +1554,7 @@ $1",
 'rightslogtext' => 'Гэта журнал зьменаў правоў удзельнікаў.',
 'rightslogentry' => 'зьменена прыналежнасьць $1 з групы $2 да $3',
 'rightslogentry-autopromote' => 'быў аўтаматычна падвышаны з $2 да $3',
+'logentry-rights-autopromote' => '$1 {{GENDER:$1|быў аўтаматычна пераведзены|была аўтаматычна пераведзеная}} з групы $4 ў $5',
 'rightsnone' => '(няма)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2173,7 +2174,7 @@ $1',
 'linksearch-ok' => 'Шукаць',
 'linksearch-text' => 'Можна ўжываць сымбалі падстаноўкі, напрыклад, «*.wikipedia.org».<br />
 Неабходны дамэн першага ўзроўню, напрыклад, «*.org».<br />
\9fÑ\80аÑ\82аколÑ\8b, Ñ\8fкÑ\96Ñ\8f Ð¿Ð°Ð´Ñ\82Ñ\80Ñ\8bмлÑ\96ваÑ\8eÑ\86Ñ\86а: <code>$1</code> (не Ð´Ð°Ð´Ð°Ð²Ð°Ð¹Ñ\86е Ñ\96Ñ\85 Ñ\83 Ð\92аÑ\88 Ð¿Ð¾Ñ\88Ñ\83к).',
\9fÑ\80аÑ\82аколÑ\8b, Ñ\8fкÑ\96Ñ\8f Ð¿Ð°Ð´Ñ\82Ñ\80Ñ\8bмлÑ\96ваÑ\8eÑ\86Ñ\86а: <code>$1</code> (дапомна http://, ÐºÐ°Ð»Ñ\96 Ð¿Ñ\80аÑ\82акол Ð½Ðµ Ð¿Ð°Ð·Ð½Ð°Ñ\87анÑ\8b).',
 'linksearch-line' => 'Спасылка на $1 з $2',
 'linksearch-error' => 'Сымбалі падстаноўкі могуць ужывацца толькі ў пачатку адрасоў.',
 
@@ -2219,7 +2220,7 @@ $1',
 'mailnologin' => 'Няма адрасу атрымальніка',
 'mailnologintext' => 'Вам неабходна [[Special:UserLogin|ўвайсьці ў сыстэму]] і мець пацьверджаны адрас электроннай пошты ў Вашых [[Special:Preferences|наладах]], каб дасылаць лісты іншым удзельнікам.',
 'emailuser' => 'Даслаць ліст',
-'emailuser-title-target' => 'Адправіць гэта па электроннай пошце  {{GENDER:$1|гэтаму ўдзельніку|гэтай удзельніцы}}',
+'emailuser-title-target' => 'Адправіць гэта па электроннай пошце {{GENDER:$1|гэтаму ўдзельніку|гэтай удзельніцы}}',
 'emailuser-title-notarget' => 'Даслаць ліст ўдзельніку ці ўдзельніцы па электроннай пошце',
 'emailpage' => 'Даслаць ліст ўдзельніку ці ўдзельніцы па электроннай пошце',
 'emailpagetext' => 'Вы можаце выкарыстаць форму ніжэй, каб даслаць {{GENDER:$1|гэтаму ўдзельніку|гэтай удзельніцы}} ліст па электроннай пошце.
@@ -3021,7 +3022,7 @@ $1',
 
 # Info page
 'pageinfo-title' => 'Інфармацыя пра «$1»',
-'pageinfo-not-current' => 'Ð\86нÑ\84аÑ\80маÑ\86Ñ\8bÑ\8f Ð¿Ð°ÐºÐ°Ð·Ñ\8bваеÑ\86Ñ\86а Ñ\82олÑ\8cкÑ\96 Ð´Ð»Ñ\8f Ð±Ñ\8fгÑ\83Ñ\87ай Ð²Ñ\8dÑ\80Ñ\81Ñ\96Ñ\96.',
+'pageinfo-not-current' => 'Ð\94аÑ\80Ñ\83йÑ\86е, Ð¼Ñ\8b Ð½Ñ\8f Ð¼Ð¾Ð¶Ð°Ð¼ Ð¿Ð°Ð´Ð°Ñ\86Ñ\8c Ð³Ñ\8dÑ\82Ñ\8bÑ\8f Ð·Ñ\8cвеÑ\81Ñ\82кÑ\96 Ð´Ð»Ñ\8f Ñ\81Ñ\82аÑ\80Ñ\8bÑ\85 Ð²Ñ\8dÑ\80Ñ\81Ñ\96Ñ\8fÑ\9e.',
 'pageinfo-header-basic' => 'Асноўныя зьвесткі',
 'pageinfo-header-edits' => 'Рэдагаваньні',
 'pageinfo-header-restrictions' => 'Абарона старонкі',
index f482ac3..eb69d43 100644 (file)
@@ -48,98 +48,6 @@ $namespaceAliases = array(
        'Картинка беседа' => NS_FILE_TALK,
 );
 
-
-$datePreferences = false;
-
-$bookstoreList = array(
-       'books.bg'   => 'http://www.books.bg/ISBN/$1',
-       'Пингвините' => 'http://www.pe-bg.com/?cid=3&search_q=$1&where=ISBN&x=0&y=0**',
-       'Бард'       => 'http://www.bard.bg/search/?q=$1'
-);
-
-$magicWords = array(
-       'redirect'                  => array( '0', '#пренасочване', '#виж', '#REDIRECT' ),
-       'notoc'                     => array( '0', '__БЕЗСЪДЪРЖАНИЕ__', '__NOTOC__' ),
-       'nogallery'                 => array( '0', '__БЕЗГАЛЕРИЯ__', '__NOGALLERY__' ),
-       'forcetoc'                  => array( '0', '__СЪССЪДЪРЖАНИЕ__', '__FORCETOC__' ),
-       'toc'                       => array( '0', '__СЪДЪРЖАНИЕ__', '__TOC__' ),
-       'noeditsection'             => array( '0', '__БЕЗ_РЕДАКТИРАНЕ_НА_РАЗДЕЛИ__', '__NOEDITSECTION__' ),
-       'currentmonth'              => array( '1', 'ТЕКУЩМЕСЕЦ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
-       'currentmonth1'             => array( '1', 'ТЕКУЩМЕСЕЦ1', 'CURRENTMONTH1' ),
-       'currentmonthname'          => array( '1', 'ТЕКУЩМЕСЕЦИМЕ', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'       => array( '1', 'ТЕКУЩМЕСЕЦИМЕРОД', 'CURRENTMONTHNAMEGEN' ),
-       'currentmonthabbrev'        => array( '1', 'ТЕКУЩМЕСЕЦСЪКР', 'CURRENTMONTHABBREV' ),
-       'currentday'                => array( '1', 'ТЕКУЩДЕН', 'CURRENTDAY' ),
-       'currentday2'               => array( '1', 'ТЕКУЩДЕН2', 'CURRENTDAY2' ),
-       'currentdayname'            => array( '1', 'ТЕКУЩДЕНИМЕ', 'CURRENTDAYNAME' ),
-       'currentyear'               => array( '1', 'ТЕКУЩАГОДИНА', 'CURRENTYEAR' ),
-       'currenttime'               => array( '1', 'ТЕКУЩОВРЕМЕ', 'CURRENTTIME' ),
-       'currenthour'               => array( '1', 'ТЕКУЩЧАС', 'CURRENTHOUR' ),
-       'numberofpages'             => array( '1', 'БРОЙСТРАНИЦИ', 'NUMBEROFPAGES' ),
-       'numberofarticles'          => array( '1', 'БРОЙСТАТИИ', 'NUMBEROFARTICLES' ),
-       'numberoffiles'             => array( '1', 'БРОЙФАЙЛОВЕ', 'NUMBEROFFILES' ),
-       'numberofusers'             => array( '1', 'БРОЙПОТРЕБИТЕЛИ', 'NUMBEROFUSERS' ),
-       'numberofactiveusers'       => array( '1', 'БРОЙАКТИВНИПОТРЕБИТЕЛИ', 'NUMBEROFACTIVEUSERS' ),
-       'numberofedits'             => array( '1', 'БРОЙРЕДАКЦИИ', 'NUMBEROFEDITS' ),
-       'numberofviews'             => array( '1', 'БРОЙПРЕГЛЕДИ', 'NUMBEROFVIEWS' ),
-       'pagename'                  => array( '1', 'СТРАНИЦА', 'PAGENAME' ),
-       'pagenamee'                 => array( '1', 'СТРАНИЦАИ', 'PAGENAMEE' ),
-       'namespace'                 => array( '1', 'ИМЕННОПРОСТРАНСТВО', 'NAMESPACE' ),
-       'namespacee'                => array( '1', 'ИМЕННОПРОСТРАНСТВОИ', 'NAMESPACEE' ),
-       'fullpagename'              => array( '1', 'ПЪЛНОИМЕ_СТРАНИЦА', 'FULLPAGENAME' ),
-       'fullpagenamee'             => array( '1', 'ПЪЛНОИМЕ_СТРАНИЦАИ', 'FULLPAGENAMEE' ),
-       'subpagename'               => array( '1', 'ИМЕ_ПОДСТРАНИЦА', 'SUBPAGENAME' ),
-       'subpagenamee'              => array( '1', 'ИМЕ_ПОДСТРАНИЦАИ', 'SUBPAGENAMEE' ),
-       'talkpagename'              => array( '1', 'ИМЕ_БЕСЕДА', 'TALKPAGENAME' ),
-       'talkpagenamee'             => array( '1', 'ИМЕ_БЕСЕДАИ', 'TALKPAGENAMEE' ),
-       'msg'                       => array( '0', 'СЪОБЩ:', 'MSG:' ),
-       'subst'                     => array( '0', 'ЗАМЕСТ:', 'SUBST:' ),
-       'msgnw'                     => array( '0', 'СЪОБЩБУ:', 'MSGNW:' ),
-       'img_thumbnail'             => array( '1', 'мини', 'thumbnail', 'thumb' ),
-       'img_manualthumb'           => array( '1', 'мини=$1', 'thumbnail=$1', 'thumb=$1' ),
-       'img_right'                 => array( '1', 'вдясно', 'дясно', 'д', 'right' ),
-       'img_left'                  => array( '1', 'вляво', 'ляво', 'л', 'left' ),
-       'img_none'                  => array( '1', 'н', 'none' ),
-       'img_width'                 => array( '1', '$1пкс', '$1п', '$1px' ),
-       'img_center'                => array( '1', 'център', 'центр', 'ц', 'center', 'centre' ),
-       'img_framed'                => array( '1', 'рамка', 'врамка', 'framed', 'enframed', 'frame' ),
-       'img_frameless'             => array( '1', 'безрамка', 'frameless' ),
-       'img_border'                => array( '1', 'ръб', 'контур', 'border' ),
-       'int'                       => array( '0', 'ВЪТР:', 'INT:' ),
-       'sitename'                  => array( '1', 'ИМЕНАСАЙТА', 'SITENAME' ),
-       'ns'                        => array( '0', 'ИП:', 'NS:' ),
-       'localurl'                  => array( '0', 'ЛОКАЛЕНАДРЕС:', 'LOCALURL:' ),
-       'localurle'                 => array( '0', 'ЛОКАЛЕНАДРЕСИ:', 'LOCALURLE:' ),
-       'server'                    => array( '0', 'СЪРВЪР', 'SERVER' ),
-       'servername'                => array( '0', 'ИМЕНАСЪРВЪРА', 'SERVERNAME' ),
-       'scriptpath'                => array( '0', 'ПЪТДОСКРИПТА', 'SCRIPTPATH' ),
-       'grammar'                   => array( '0', 'ГРАМАТИКА:', 'GRAMMAR:' ),
-       'gender'                    => array( '0', 'ПОЛ:', 'GENDER:' ),
-       'currentweek'               => array( '1', 'ТЕКУЩАСЕДМИЦА', 'CURRENTWEEK' ),
-       'currentdow'                => array( '1', 'ТЕКУЩ_ДЕН_ОТ_СЕДМИЦАТА', 'CURRENTDOW' ),
-       'revisionid'                => array( '1', 'ИД_НА_ВЕРСИЯТА', 'REVISIONID' ),
-       'revisionday'               => array( '1', 'ДЕН_НА_ВЕРСИЯТА', 'REVISIONDAY' ),
-       'revisionday2'              => array( '1', 'ДЕН_НА_ВЕРСИЯТА2', 'REVISIONDAY2' ),
-       'revisionmonth'             => array( '1', 'МЕСЕЦ_НА_ВЕРСИЯТА', 'REVISIONMONTH' ),
-       'revisionyear'              => array( '1', 'ГОДИНА_НА_ВЕРСИЯТА', 'REVISIONYEAR' ),
-       'plural'                    => array( '0', 'МН_ЧИСЛО:', 'PLURAL:' ),
-       'fullurl'                   => array( '0', 'ПЪЛЕН_АДРЕС:', 'FULLURL:' ),
-       'fullurle'                  => array( '0', 'ПЪЛЕН_АДРЕСИ:', 'FULLURLE:' ),
-       'lcfirst'                   => array( '0', 'МБПЪРВА:', 'LCFIRST:' ),
-       'ucfirst'                   => array( '0', 'ГБПЪРВА:', 'UCFIRST:' ),
-       'lc'                        => array( '0', 'МБ:', 'LC:' ),
-       'uc'                        => array( '0', 'ГБ:', 'UC:' ),
-       'raw'                       => array( '0', 'НЕОБРАБ:', 'RAW:' ),
-       'displaytitle'              => array( '1', 'ПОКАЗВ_ЗАГЛАВИЕ', 'DISPLAYTITLE' ),
-       'newsectionlink'            => array( '1', '__ВРЪЗКА_ЗА_НОВ_РАЗДЕЛ__', '__NEWSECTIONLINK__' ),
-       'language'                  => array( '0', '#ЕЗИК:', '#LANGUAGE:' ),
-       'numberofadmins'            => array( '1', 'БРОЙАДМИНИСТРАТОРИ', 'NUMBEROFADMINS' ),
-       'defaultsort'               => array( '1', 'СОРТКАТ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'hiddencat'                 => array( '1', '__СКРИТАКАТЕГОРИЯ__', '__HIDDENCAT__' ),
-       'index'                     => array( '1', '__ИНДЕКСИРАНЕ__', '__INDEX__' ),
-       'noindex'                   => array( '1', '__БЕЗИНДЕКСИРАНЕ__', '__NOINDEX__' ),
-);
-
 $specialPageAliases = array(
        'Activeusers'               => array( 'Активни_потребители' ),
        'Allmessages'               => array( 'Системни_съобщения' ),
@@ -232,6 +140,97 @@ $specialPageAliases = array(
        'Withoutinterwiki'          => array( 'Без_междууикита' ),
 );
 
+$magicWords = array(
+       'redirect'                  => array( '0', '#пренасочване', '#виж', '#REDIRECT' ),
+       'notoc'                     => array( '0', '__БЕЗСЪДЪРЖАНИЕ__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__БЕЗГАЛЕРИЯ__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__СЪССЪДЪРЖАНИЕ__', '__FORCETOC__' ),
+       'toc'                       => array( '0', '__СЪДЪРЖАНИЕ__', '__TOC__' ),
+       'noeditsection'             => array( '0', '__БЕЗ_РЕДАКТИРАНЕ_НА_РАЗДЕЛИ__', '__NOEDITSECTION__' ),
+       'currentmonth'              => array( '1', 'ТЕКУЩМЕСЕЦ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
+       'currentmonth1'             => array( '1', 'ТЕКУЩМЕСЕЦ1', 'CURRENTMONTH1' ),
+       'currentmonthname'          => array( '1', 'ТЕКУЩМЕСЕЦИМЕ', 'CURRENTMONTHNAME' ),
+       'currentmonthnamegen'       => array( '1', 'ТЕКУЩМЕСЕЦИМЕРОД', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthabbrev'        => array( '1', 'ТЕКУЩМЕСЕЦСЪКР', 'CURRENTMONTHABBREV' ),
+       'currentday'                => array( '1', 'ТЕКУЩДЕН', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'ТЕКУЩДЕН2', 'CURRENTDAY2' ),
+       'currentdayname'            => array( '1', 'ТЕКУЩДЕНИМЕ', 'CURRENTDAYNAME' ),
+       'currentyear'               => array( '1', 'ТЕКУЩАГОДИНА', 'CURRENTYEAR' ),
+       'currenttime'               => array( '1', 'ТЕКУЩОВРЕМЕ', 'CURRENTTIME' ),
+       'currenthour'               => array( '1', 'ТЕКУЩЧАС', 'CURRENTHOUR' ),
+       'numberofpages'             => array( '1', 'БРОЙСТРАНИЦИ', 'NUMBEROFPAGES' ),
+       'numberofarticles'          => array( '1', 'БРОЙСТАТИИ', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'БРОЙФАЙЛОВЕ', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'БРОЙПОТРЕБИТЕЛИ', 'NUMBEROFUSERS' ),
+       'numberofactiveusers'       => array( '1', 'БРОЙАКТИВНИПОТРЕБИТЕЛИ', 'NUMBEROFACTIVEUSERS' ),
+       'numberofedits'             => array( '1', 'БРОЙРЕДАКЦИИ', 'NUMBEROFEDITS' ),
+       'numberofviews'             => array( '1', 'БРОЙПРЕГЛЕДИ', 'NUMBEROFVIEWS' ),
+       'pagename'                  => array( '1', 'СТРАНИЦА', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', 'СТРАНИЦАИ', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', 'ИМЕННОПРОСТРАНСТВО', 'NAMESPACE' ),
+       'namespacee'                => array( '1', 'ИМЕННОПРОСТРАНСТВОИ', 'NAMESPACEE' ),
+       'fullpagename'              => array( '1', 'ПЪЛНОИМЕ_СТРАНИЦА', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', 'ПЪЛНОИМЕ_СТРАНИЦАИ', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', 'ИМЕ_ПОДСТРАНИЦА', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', 'ИМЕ_ПОДСТРАНИЦАИ', 'SUBPAGENAMEE' ),
+       'talkpagename'              => array( '1', 'ИМЕ_БЕСЕДА', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', 'ИМЕ_БЕСЕДАИ', 'TALKPAGENAMEE' ),
+       'msg'                       => array( '0', 'СЪОБЩ:', 'MSG:' ),
+       'subst'                     => array( '0', 'ЗАМЕСТ:', 'SUBST:' ),
+       'msgnw'                     => array( '0', 'СЪОБЩБУ:', 'MSGNW:' ),
+       'img_thumbnail'             => array( '1', 'мини', 'thumbnail', 'thumb' ),
+       'img_manualthumb'           => array( '1', 'мини=$1', 'thumbnail=$1', 'thumb=$1' ),
+       'img_right'                 => array( '1', 'вдясно', 'дясно', 'д', 'right' ),
+       'img_left'                  => array( '1', 'вляво', 'ляво', 'л', 'left' ),
+       'img_none'                  => array( '1', 'н', 'none' ),
+       'img_width'                 => array( '1', '$1пкс', '$1п', '$1px' ),
+       'img_center'                => array( '1', 'център', 'центр', 'ц', 'center', 'centre' ),
+       'img_framed'                => array( '1', 'рамка', 'врамка', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', 'безрамка', 'frameless' ),
+       'img_border'                => array( '1', 'ръб', 'контур', 'border' ),
+       'int'                       => array( '0', 'ВЪТР:', 'INT:' ),
+       'sitename'                  => array( '1', 'ИМЕНАСАЙТА', 'SITENAME' ),
+       'ns'                        => array( '0', 'ИП:', 'NS:' ),
+       'localurl'                  => array( '0', 'ЛОКАЛЕНАДРЕС:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', 'ЛОКАЛЕНАДРЕСИ:', 'LOCALURLE:' ),
+       'server'                    => array( '0', 'СЪРВЪР', 'SERVER' ),
+       'servername'                => array( '0', 'ИМЕНАСЪРВЪРА', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', 'ПЪТДОСКРИПТА', 'SCRIPTPATH' ),
+       'grammar'                   => array( '0', 'ГРАМАТИКА:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', 'ПОЛ:', 'GENDER:' ),
+       'currentweek'               => array( '1', 'ТЕКУЩАСЕДМИЦА', 'CURRENTWEEK' ),
+       'currentdow'                => array( '1', 'ТЕКУЩ_ДЕН_ОТ_СЕДМИЦАТА', 'CURRENTDOW' ),
+       'revisionid'                => array( '1', 'ИД_НА_ВЕРСИЯТА', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'ДЕН_НА_ВЕРСИЯТА', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'ДЕН_НА_ВЕРСИЯТА2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'МЕСЕЦ_НА_ВЕРСИЯТА', 'REVISIONMONTH' ),
+       'revisionyear'              => array( '1', 'ГОДИНА_НА_ВЕРСИЯТА', 'REVISIONYEAR' ),
+       'plural'                    => array( '0', 'МН_ЧИСЛО:', 'PLURAL:' ),
+       'fullurl'                   => array( '0', 'ПЪЛЕН_АДРЕС:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'ПЪЛЕН_АДРЕСИ:', 'FULLURLE:' ),
+       'lcfirst'                   => array( '0', 'МБПЪРВА:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', 'ГБПЪРВА:', 'UCFIRST:' ),
+       'lc'                        => array( '0', 'МБ:', 'LC:' ),
+       'uc'                        => array( '0', 'ГБ:', 'UC:' ),
+       'raw'                       => array( '0', 'НЕОБРАБ:', 'RAW:' ),
+       'displaytitle'              => array( '1', 'ПОКАЗВ_ЗАГЛАВИЕ', 'DISPLAYTITLE' ),
+       'newsectionlink'            => array( '1', '__ВРЪЗКА_ЗА_НОВ_РАЗДЕЛ__', '__NEWSECTIONLINK__' ),
+       'language'                  => array( '0', '#ЕЗИК:', '#LANGUAGE:' ),
+       'numberofadmins'            => array( '1', 'БРОЙАДМИНИСТРАТОРИ', 'NUMBEROFADMINS' ),
+       'defaultsort'               => array( '1', 'СОРТКАТ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'hiddencat'                 => array( '1', '__СКРИТАКАТЕГОРИЯ__', '__HIDDENCAT__' ),
+       'index'                     => array( '1', '__ИНДЕКСИРАНЕ__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__БЕЗИНДЕКСИРАНЕ__', '__NOINDEX__' ),
+);
+
+$datePreferences = false;
+
+$bookstoreList = array(
+       'books.bg'   => 'http://www.books.bg/ISBN/$1',
+       'Пингвините' => 'http://www.pe-bg.com/?cid=3&search_q=$1&where=ISBN&x=0&y=0**',
+       'Бард'       => 'http://www.bard.bg/search/?q=$1'
+);
+
 $linkTrail = '/^([a-zабвгдежзийклмнопрстуфхцчшщъыьэюя]+)(.*)$/sDu';
 
 $separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
index 6d72aae..c4b7111 100644 (file)
@@ -114,7 +114,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Paubahan_pahanyarnya' ),
        'Recentchangeslinked'       => array( 'Paubahan_tarait' ),
        'Revisiondelete'            => array( 'Hapus_ralatan' ),
-       'RevisionMove'              => array( 'Ralatan_pamindahan' ),
        'Search'                    => array( 'Panggagaian' ),
        'Shortpages'                => array( 'Tungkaran_handap' ),
        'Specialpages'              => array( 'Tungkaran_istimiwa' ),
index ce1ea98..fec007b 100644 (file)
@@ -116,7 +116,7 @@ $messages = array(
 
 'underline-always' => 'সব সময়',
 'underline-never' => 'কখনো নয়',
-'underline-default' => 'ব্রাউজারে যেমনভাবে নির্দিষ্ট করা আছে',
+'underline-default' => 'সà§\8dà¦\95িন à¦\85থবা à¦¬à§\8dরাà¦\89à¦\9cারà§\87 à¦¯à§\87মনভাবà§\87 à¦¨à¦¿à¦°à§\8dদিষà§\8dà¦\9f à¦\95রা à¦\86à¦\9bà§\87',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'সম্পাদনা এলাকার ফন্ট স্টাইল:',
@@ -336,7 +336,7 @@ $1',
 'newmessagesdifflinkplural' => '$1 {{PLURAL:$1|পরিবর্তন|পরিবর্তনসমূহ}}',
 'youhavenewmessagesmulti' => 'আপনার $1টি নতুন বার্তা এসেছে',
 'editsection' => 'সম্পাদনা',
-'editold' => 'সম্পাদনা করুন',
+'editold' => 'সম্পাদনা',
 'viewsourceold' => 'উৎস দেখাও',
 'editlink' => 'সম্পাদনা',
 'viewsourcelink' => 'উৎস দেখুন',
@@ -487,7 +487,7 @@ $2',
 'yourdomainname' => 'আপনার ডোমেইন',
 'password-change-forbidden' => 'আপনি এই উইকিতে পাসওয়ার্ড পরিবর্তন করতে পারবেন না।',
 'externaldberror' => 'হয় কোন বহিঃস্থ যাচাইকরণ ডাটাবেজ ত্রুটি ঘটেছে অথবা আপনার বহিঃস্থ অ্যাকাউন্ট হালনাগাদ করার অনুমতি নেই।',
-'login' => 'প্রবেশ করুন',
+'login' => 'প্রবেশ',
 'nav-login-createaccount' => 'প্রবেশ/নতুন অ্যাকাউন্ট',
 'loginprompt' => '{{SITENAME}}-তে প্রবেশ করতে হলে আপনার ব্রাউজারের কুকি অবশ্যই সক্রিয় করতে হবে।',
 'userlogin' => 'প্রবেশ/নতুন অ্যাকাউন্ট',
@@ -496,7 +496,7 @@ $2',
 'userlogout' => 'প্রস্থান',
 'notloggedin' => 'আপনি সংযুক্ত নন',
 'nologin' => "আপনার কি উইকিপিডিয়াতে অ্যাকাউন্ট নেই? তাহলে '''$1'''।",
-'nologinlink' => 'নতà§\81ন à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦\96à§\81লুন',
+'nologinlink' => 'à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦¤à§\88রি à¦\95রুন',
 'createaccount' => 'নতুন অ্যাকাউন্ট খুলুন',
 'gotaccount' => "আপনার কি ইতিমধ্যে একটি অ্যাকাউন্ট তৈরি করা আছে? '''$1''' করুন।",
 'gotaccountlink' => 'প্রবেশ',
@@ -653,7 +653,7 @@ $2
 'hr_tip' => 'অনুভূমিক রেখা (সংযতভাবে ব্যবহার করুন)',
 
 # Edit pages
-'summary' => 'সমà§\8dপাদনা à¦¸à¦¾à¦°à¦¾à¦\82শ:',
+'summary' => 'সারাংশ:',
 'subject' => 'বিষয়/শিরোনাম:',
 'minoredit' => 'অনুল্লেখ্য',
 'watchthis' => 'এই পাতাটি নজরে রাখুন',
@@ -1884,7 +1884,7 @@ Maybe you want to edit the description on its [$2 file description page] there.'
 'listusers-editsonly' => 'শুধুমাত্র এমন ব্যবহারকারীদের দেখাও যাদের অবদান আছে',
 'listusers-creationsort' => 'তৈরির তারিখ অনুসারে সাজাও',
 'usereditcount' => '$1 {{PLURAL:$1|সম্পাদনা|সম্পাদনা}}',
-'usercreated' => 'লিঙ্গ: $3 তৈরি হয়েছে $1 তারিখে, সময়: $2',
+'usercreated' => '{{GENDER:$3|তৈরি হয়েছে}} $1 তারিখ, সময়: $2',
 'newpages' => 'নতুন পাতাসমূহ',
 'newpages-username' => 'ব্যবহারকারী নাম:',
 'ancientpages' => 'পুরানো নিবন্ধ',
@@ -2329,7 +2329,7 @@ $1',
 তথ্যসূত্র হিসেবে সাম্প্রতিক বাধাদান লগের ভুক্তিটি নিচে দেওয়া হলো:',
 'sp-contributions-search' => 'অবদানসমূহের জন্য অনুসন্ধান',
 'sp-contributions-username' => 'আইপি (IP) ঠিকানা অথবা ব্যবহারকারীর নাম:',
-'sp-contributions-toponly' => 'শà§\81ধà§\81মাতà§\8dর à¦¸à§\87à¦\87 à¦¸à¦®à§\8dপাদনাà¦\97à§\81লি à¦¦à§\87à¦\96à§\87ও যেগুলো সাম্প্রতিক সংস্করণের অন্তর্ভুক্ত।',
+'sp-contributions-toponly' => 'শà§\81ধà§\81মাতà§\8dর à¦¸à§\87à¦\87 à¦¸à¦®à§\8dপাদনাà¦\97à§\81লি à¦¦à§\87à¦\96াও যেগুলো সাম্প্রতিক সংস্করণের অন্তর্ভুক্ত।',
 'sp-contributions-submit' => 'অনুসন্ধান',
 
 # What links here
@@ -2588,7 +2588,7 @@ $1',
 'exportnohistory' => "----
 '''লক্ষ্য করুন:''' কর্মদক্ষতা-সম্পর্কিত কারণের জন্য এই ফর্মের মাধ্যমে কোন পাতার সমগ্র ইতিহাস রপ্তানি করা নিষ্ক্রিয় করা হয়েছে।",
 'exportlistauthors' => 'প্রতি পাতার অবদানকারীর একটি পূর্ণাঙ্গ তালিকা যুক্ত হবে',
-'export-submit' => 'রপ্তানি করা হোক',
+'export-submit' => 'রপ্তানি',
 'export-addcattext' => 'এই বিষয়শ্রেণী থেকে পাতা যোগ করা হোক:',
 'export-addcat' => 'যোগ',
 'export-addnstext' => 'নামস্থান থেকে পাতা যুক্ত করুন:',
@@ -3402,7 +3402,7 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'size-gigabytes' => '$1 গিগাবাইট',
 
 # Live preview
-'livepreview-loading' => 'লোডিং',
+'livepreview-loading' => 'লোডিং...',
 'livepreview-ready' => 'লোডিং… প্রস্তুত!',
 'livepreview-failed' => 'তাৎক্ষণিক প্রাকদর্শন কাজ করছে না! সাধারণ প্রাকদর্শন চেষ্টা করুন।',
 'livepreview-error' => 'সংযোগ প্রদানে সম্ভব নয়: $1 "$2"। সাধারণ প্রাকদর্শন চেষ্টা করুণ।',
index b8c35a7..d09c679 100644 (file)
 
 $fallback = 'bn';
 
-$digitTransformTable = array(
-       '0' => '০',
-       '1' => '১',
-       '2' => '২',
-       '3' => '৩',
-       '4' => '৪',
-       '5' => '৫',
-       '6' => '৬',
-       '7' => '৭',
-       '8' => '৮',
-       '9' => '৯'
-);
-
 $namespaceNames = array(
        NS_MEDIA            => 'মিডিয়া',
        NS_SPECIAL          => 'বিশেষ',
@@ -45,6 +32,19 @@ $namespaceNames = array(
        NS_CATEGORY_TALK    => 'থাকর_য়্যারী',
 );
 
+$digitTransformTable = array(
+       '0' => '০',
+       '1' => '১',
+       '2' => '২',
+       '3' => '৩',
+       '4' => '৪',
+       '5' => '৫',
+       '6' => '৬',
+       '7' => '৭',
+       '8' => '৮',
+       '9' => '৯'
+);
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'লিঙ্কর তলে দুরগ দিক:',
index d0dfafc..ba7f061 100644 (file)
@@ -940,6 +940,12 @@ Diverket eo bet evit doare.',
 Krouet e oa bet c'hoazh.",
 'defaultmessagetext' => 'Testenn dre ziouer',
 
+# Content models
+'content-model-wikitext' => 'wikitestenn',
+'content-model-text' => 'testenn blaen',
+'content-model-javascript' => 'Javascript',
+'content-model-css' => 'CSS',
+
 # Parser/template warnings
 'expensive-parserfunction-warning' => "Diwallit : Re a c'halvoù koustus e-keñver an arc'hwelioù parser zo gant ar bajenn-mañ.
 
@@ -2972,6 +2978,10 @@ Sur a-walc'h abalamour d'ul liamm enni a gas d'ul lec'hienn ziavaez berzet.",
 'pageinfo-magic-words' => '{{PLURAL:$1|Ger hud |Gerioù hud}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Rumm kuzh|Rummoù kuzh}} ($1)',
 'pageinfo-templates' => "{{PLURAL:$1|Patrom endalc'het|Patromoù endalc'het}} ($1)",
+'pageinfo-toolboxlink' => 'Titouroù ar bajenn',
+'pageinfo-redirectsto' => 'Adkas a ra da',
+'pageinfo-contentpage-yes' => 'Ya',
+'pageinfo-protect-cascading-yes' => 'Ya',
 
 # Skin names
 'skinname-standard' => 'Standard',
index ff0a8a4..5c70272 100644 (file)
@@ -115,7 +115,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'NedavneIzmjene' ),
        'Recentchangeslinked'       => array( 'PovezaneNedavneIzmjene' ),
        'Revisiondelete'            => array( 'VratiBrisanje' ),
-       'RevisionMove'              => array( 'PremjestanjeRevizije' ),
        'Search'                    => array( 'Pretraga' ),
        'Shortpages'                => array( 'KratkeStranice' ),
        'Specialpages'              => array( 'SpecijalneStranice' ),
@@ -153,7 +152,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__FORSIRANISADRŽAJ__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__SADRŽAJ__', '__TOC__' ),
        'noeditsection'             => array( '0', '__BEZ_IZMJENA__', '__BEZIZMJENA__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__BEZ_ZAGLAVLJA__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'TRENUTNIMJESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'TRENUTNIMJESEC1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'TRENUTNIMJESECIME', 'CURRENTMONTHNAME' ),
@@ -544,7 +542,9 @@ $1',
 'newmessageslink' => 'novih poruka',
 'newmessagesdifflink' => 'posljednja promjena',
 'youhavenewmessagesfromusers' => 'Imate $1 od {{PLURAL:$3|drugog korisnika|$3 korisnika}} ($2).',
+'youhavenewmessagesmanyusers' => 'Imate $1 od mnogo korisnika ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|novu poruku|nove poruke}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|zadnja izmjena|zadnje izmjene}}',
 'youhavenewmessagesmulti' => 'Imate nove poruke na $1',
 'editsection' => 'uredi',
 'editsection-brackets' => '[$1]',
@@ -657,8 +657,8 @@ Pretraga: $2',
 'protectedinterface' => 'Ova stranica sadrži tekst korisničkog okruženja za softver na ovom wikiju i zaštićena je radi sprečavanja zloupotrebe.
 Da biste dodali ili izmjenili prijevode svih wikija, posjetite [//translatewiki.net/  translatewiki.net], projekat za lokalizaciju Mediawikija.',
 'editinginterface' => "'''Upozorenje:''' Mijenjate stranicu koja sadrži aktivan tekst programa.
-Promjene na ovoj stranici dovode i do promjena za druge korisnike.
-Za prijevode, molimo Vas koristite [//translatewiki.net/wiki/Main_Page?setlang=bs translatewiki.net], projekt prijevoda za MediaWiki.",
+Promjene na ovoj stranici dovode i do promjena za druge korisnike ovog wikija.
+Za dodavanje ili promjene prijevoda svih wikija, molimo Vas koristite [//translatewiki.net/ translatewiki.net], projekt prijevoda za MediaWiki.",
 'sqlhidden' => '(SQL pretraga sakrivena)',
 'cascadeprotected' => 'Uređivanje ove stranice je zabranjeno jer sadrži {{PLURAL:$1|stranicu zaštićenu|stranice zaštićene}} od uređivanja iz razloga:
 $2',
@@ -2362,6 +2362,8 @@ nastavite s oprezom.',
 'rollback' => 'Vrati izmjene',
 'rollback_short' => 'Vrati',
 'rollbacklink' => 'vrati',
+'rollbacklinkcount' => 'vrati $1 {{PLURAL:$1|izmjenu|izmjene|izmjena}}',
+'rollbacklinkcount-morethan' => 'vrati više od $1 {{PLURAL:$1|izmjene|izmjene|izmjena}}',
 'rollbackfailed' => 'Vraćanje nije uspjelo',
 'cantrollback' => 'Ne može se vratiti izmjena; posljednji autor je ujedno i jedini.',
 'alreadyrolled' => 'Ne može se vratiti posljednja izmjena [[:$1]] od korisnika [[User:$2|$2]] ([[User talk:$2|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); neko drugi je već izmjenio ili vratio članak.
@@ -3030,13 +3032,17 @@ Ovo je vjerovatno izazvao vezom ka vanjskoj nepoželjnoj stranici.',
 
 # Info page
 'pageinfo-title' => 'Informacije za "$1"',
+'pageinfo-header-basic' => 'Osnovne informacije',
 'pageinfo-header-edits' => 'Izmjene',
 'pageinfo-header-restrictions' => 'Zaštita stranice',
 'pageinfo-article-id' => 'ID stranice',
 'pageinfo-views' => 'Broj pogleda',
 'pageinfo-watchers' => 'Broj onih koji pregledaju',
-'pageinfo-edits' => 'Broj izmjena',
-'pageinfo-authors' => 'Broj različitih autora',
+'pageinfo-edits' => 'Ukupan broj izmjena',
+'pageinfo-authors' => 'Ukupan broj različitih autora',
+'pageinfo-redirectsto-info' => 'Informacije',
+'pageinfo-contentpage-yes' => 'Da',
+'pageinfo-protect-cascading-yes' => 'Da',
 
 # Skin names
 'skinname-standard' => 'Klasično',
index c4003b0..8a797d3 100644 (file)
@@ -12,7 +12,7 @@
  * @author Zaidpjd (on bug.wikipedia.org)
  */
 
-$fallback = "id";
+$fallback = 'id';
 
 $messages = array(
 # Dates
index 9b0b2e7..e2a8d68 100644 (file)
  * @author לערי ריינהארט
  */
 
-$bookstoreList = array(
-       'Catàleg Col·lectiu de les Universitats de Catalunya' => 'http://ccuc.cbuc.es/cgi-bin/vtls.web.gateway?searchtype=control+numcard&searcharg=$1',
-       'Totselsllibres.com' => 'http://www.totselsllibres.com/tel/publi/busquedaAvanzadaLibros.do?ISBN=$1',
-       'inherit' => true,
-);
-
 $namespaceNames = array(
        NS_MEDIA            => 'Media',
        NS_SPECIAL          => 'Especial',
@@ -67,39 +61,6 @@ $namespaceAliases = array(
        'Imatge_Discussió' => NS_FILE_TALK,
 );
 
-$separatorTransformTable = array( ',' => '.', '.' => ',' );
-
-$dateFormats = array(
-       'mdy time' => 'H:i',
-       'mdy date' => 'M j, Y',
-       'mdy both' => 'H:i, M j, Y',
-
-       'dmy time' => 'H:i',
-       'dmy date' => 'j M Y',
-       'dmy both' => 'H:i, j M Y',
-
-       'ymd time' => 'H:i',
-       'ymd date' => 'Y M j',
-       'ymd both' => 'H:i, Y M j',
-);
-
-$magicWords = array(
-       'numberofarticles'          => array( '1', 'NOMBRED\'ARTICLES', 'NUMBEROFARTICLES' ),
-       'numberoffiles'             => array( '1', 'NOMBRED\'ARXIUS', 'NUMBEROFFILES' ),
-       'numberofusers'             => array( '1', 'NOMBRED\'USUARIS', 'NUMBEROFUSERS' ),
-       'numberofedits'             => array( '1', 'NOMBRED\'EDICIONS', 'NUMBEROFEDITS' ),
-       'pagename'                  => array( '1', 'NOMDELAPLANA', 'PAGENAME' ),
-       'img_right'                 => array( '1', 'dreta', 'right' ),
-       'img_left'                  => array( '1', 'esquerra', 'left' ),
-       'img_border'                => array( '1', 'vora', 'border' ),
-       'img_link'                  => array( '1', 'enllaç=$1', 'link=$1' ),
-       'displaytitle'              => array( '1', 'TÍTOL', 'DISPLAYTITLE' ),
-       'language'                  => array( '0', '#IDIOMA:', '#LANGUAGE:' ),
-       'special'                   => array( '0', 'especial', 'special' ),
-       'defaultsort'               => array( '1', 'ORDENA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'pagesize'                  => array( '1', 'MIDADELAPLANA', 'PAGESIZE' ),
-);
-
 $specialPageAliases = array(
        'Activeusers'               => array( 'Usuaris_actius' ),
        'Allmessages'               => array( 'Missatges', 'MediaWiki' ),
@@ -161,7 +122,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Canvis_recents' ),
        'Recentchangeslinked'       => array( 'Seguiment' ),
        'Revisiondelete'            => array( 'Esborra_versió' ),
-       'RevisionMove'              => array( 'Mou_versió' ),
        'Search'                    => array( 'Cerca' ),
        'Shortpages'                => array( 'Pàgines_curtes' ),
        'Specialpages'              => array( 'Pàgines_especials' ),
@@ -191,6 +151,45 @@ $specialPageAliases = array(
        'Withoutinterwiki'          => array( 'Sense_interwiki' ),
 );
 
+$magicWords = array(
+       'numberofarticles'          => array( '1', 'NOMBRED\'ARTICLES', 'NUMBEROFARTICLES' ),
+       'numberoffiles'             => array( '1', 'NOMBRED\'ARXIUS', 'NUMBEROFFILES' ),
+       'numberofusers'             => array( '1', 'NOMBRED\'USUARIS', 'NUMBEROFUSERS' ),
+       'numberofedits'             => array( '1', 'NOMBRED\'EDICIONS', 'NUMBEROFEDITS' ),
+       'pagename'                  => array( '1', 'NOMDELAPLANA', 'PAGENAME' ),
+       'img_right'                 => array( '1', 'dreta', 'right' ),
+       'img_left'                  => array( '1', 'esquerra', 'left' ),
+       'img_border'                => array( '1', 'vora', 'border' ),
+       'img_link'                  => array( '1', 'enllaç=$1', 'link=$1' ),
+       'displaytitle'              => array( '1', 'TÍTOL', 'DISPLAYTITLE' ),
+       'language'                  => array( '0', '#IDIOMA:', '#LANGUAGE:' ),
+       'special'                   => array( '0', 'especial', 'special' ),
+       'defaultsort'               => array( '1', 'ORDENA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'pagesize'                  => array( '1', 'MIDADELAPLANA', 'PAGESIZE' ),
+);
+
+$separatorTransformTable = array( ',' => '.', '.' => ',' );
+
+$dateFormats = array(
+       'mdy time' => 'H:i',
+       'mdy date' => 'M j, Y',
+       'mdy both' => 'H:i, M j, Y',
+
+       'dmy time' => 'H:i',
+       'dmy date' => 'j M Y',
+       'dmy both' => 'H:i, j M Y',
+
+       'ymd time' => 'H:i',
+       'ymd date' => 'Y M j',
+       'ymd both' => 'H:i, Y M j',
+);
+
+$bookstoreList = array(
+       'Catàleg Col·lectiu de les Universitats de Catalunya' => 'http://ccuc.cbuc.es/cgi-bin/vtls.web.gateway?searchtype=control+numcard&searcharg=$1',
+       'Totselsllibres.com' => 'http://www.totselsllibres.com/tel/publi/busquedaAvanzadaLibros.do?ISBN=$1',
+       'inherit' => true,
+);
+
 $linkTrail = "/^((?:[a-zàèéíòóúç·ïü]|'(?!'))+)(.*)$/sDu";
 
 $messages = array(
@@ -243,7 +242,7 @@ $messages = array(
 
 'underline-always' => 'Sempre',
 'underline-never' => 'Mai',
-'underline-default' => 'Configuració per defecte del navegador',
+'underline-default' => 'Per defecte del navegador',
 
 # Font style option in Special:Preferences
 'editfont-style' => "Editeu l'estil de la lletra:",
@@ -2936,7 +2935,7 @@ Això deu ser degut per un enllaç a un lloc extern inclòs a la llista negra.',
 
 # Info page
 'pageinfo-title' => 'Informació de «$1»',
-'pageinfo-not-current' => 'Només es pot visualitzar la informació per a la revisió actual.',
+'pageinfo-not-current' => 'Només es pot visualitzar la informació de la revisió actual.',
 'pageinfo-header-basic' => 'Informació bàsica',
 'pageinfo-header-edits' => "Historial d'edicions",
 'pageinfo-header-restrictions' => 'Protecció de pàgina',
index 31f0fe2..239094d 100644 (file)
@@ -68,7 +68,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__ТlЕДУЬЛЛУ_ЧУЛАЦАМБАР__', '__ТlЕДУЬЛ_ЧУЛ__', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__ОБЯЗ_ОГЛ__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__ЧУЛАЦАМ__', '__ЧУЛ__', '__ОГЛАВЛЕНИЕ__', '__ОГЛ__', '__TOC__' ),
        'noeditsection'             => array( '0', '__ЦАМЕГ_РЕДАККХА_АГlОН__', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__КОЬРТА_ЙОЦАШ__', '__БЕЗ_ЗАГОЛОВКА__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'КАРАРА_БУТТ', 'КАРАРА_БУТТ_2', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'КАРАРА_БУТТ_1', 'ТЕКУЩИЙ_МЕСЯЦ_1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'КАРАРАЧУ_БЕТТА_ЦlЕ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ),
@@ -165,7 +164,7 @@ $magicWords = array(
        'revisionmonth'             => array( '1', 'БЕТТА_БАШХО', 'МЕСЯЦ_ВЕРСИИ', 'REVISIONMONTH' ),
        'revisionyear'              => array( '1', 'ШО_БАШХО', 'ГОД_ВЕРСИИ', 'REVISIONYEAR' ),
        'revisiontimestamp'         => array( '1', 'КЪАСТАМ_ХЕНА_БАШХО', 'ОТМЕТКА_ВРЕМЕНИ_ВЕРСИИ', 'REVISIONTIMESTAMP' ),
-       'revisionuser'              => array( '1', 'ДЕКЪАШХОН_БАШХО', 'ВЕРСИЯ_УЧАСНИКА', 'REVISIONUSER' ),
+       'revisionuser'              => array( '1', 'ДЕКЪАШХОН_БАШХО', 'ВЕРСИЯ_УЧАСНИКА', 'ВЕРСИЯ_УЧАСТНИКА', 'REVISIONUSER' ),
        'plural'                    => array( '0', 'ДУКХАЛЛИН_ТЕРАХЬ:', 'МНОЖЕСТВЕННОЕ_ЧИСЛО:', 'PLURAL:' ),
        'fullurl'                   => array( '0', 'МАЙАРРА_МЕТТИГ:', 'ПОЛНЫЙ_АДРЕС:', 'FULLURL:' ),
        'fullurle'                  => array( '0', 'МАЙАРРА_МЕТТИГ_2:', 'ПОЛНЫЙ_АДРЕС_2:', 'FULLURLE:' ),
index 32531fe..2b54aba 100644 (file)
@@ -24,21 +24,6 @@ $fallback8bitEncoding = 'windows-1256';
 
 $rtl = true;
 
-$digitTransformTable = array(
-       '0' => '٠', # &#x0660;
-       '1' => '١', # &#x0661;
-       '2' => '٢', # &#x0662;
-       '3' => '٣', # &#x0663;
-       '4' => '٤', # &#x0664;
-       '5' => '٥', # &#x0665;
-       '6' => '٦', # &#x0666;
-       '7' => '٧', # &#x0667;
-       '8' => '٨', # &#x0668;
-       '9' => '٩', # &#x0669;
-       '.' => '٫', # &#x066b; wrong table ?
-       ',' => '٬', # &#x066c;
-);
-
 $namespaceNames = array(
        NS_MEDIA            => 'میدیا',
        NS_SPECIAL          => 'تایبەت',
@@ -145,6 +130,21 @@ $magicWords = array(
        'img_border'                => array( '1', 'سنوور', 'border' ),
 );
 
+$digitTransformTable = array(
+       '0' => '٠', # &#x0660;
+       '1' => '١', # &#x0661;
+       '2' => '٢', # &#x0662;
+       '3' => '٣', # &#x0663;
+       '4' => '٤', # &#x0664;
+       '5' => '٥', # &#x0665;
+       '6' => '٦', # &#x0666;
+       '7' => '٧', # &#x0667;
+       '8' => '٨', # &#x0668;
+       '9' => '٩', # &#x0669;
+       '.' => '٫', # &#x066b; wrong table ?
+       ',' => '٬', # &#x066c;
+);
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'ھێڵ ھێنان بەژێر بەستەرەکان:',
@@ -1716,7 +1716,7 @@ $1',
 'unwatchedpages' => 'لاپەڕە چاودێری‌نەکراوەکان',
 
 # List redirects
-'listredirects' => 'Ù\84Û\8cستÛ\8c Ø¦Ø§Ú\95استÛ\95کراÙ\88ەکان',
+'listredirects' => 'Ù¾Û\8eرستÛ\8c Ú\95Û\95Ù\88اÙ\86Û\95Ú©Û\95رەکان',
 
 # Unused templates
 'unusedtemplates' => 'داڕێژە بەکارنەھێنراوەکان',
index d407c4b..dc2eb5b 100644 (file)
@@ -17,10 +17,6 @@ $fallback = 'ru';
 
 $fallback8bitEncoding = 'windows-1251';
 
-$separatorTransformTable = array( ','     => '.', '.'     => ',' );
-
-$linkTrail = '/^([a-zâçğıñöşüа-яё“»]+)(.*)$/sDu';
-
 $namespaceNames = array(
        NS_MEDIA            => 'Медиа',
        NS_SPECIAL          => 'Махсус',
@@ -40,8 +36,8 @@ $namespaceNames = array(
        NS_CATEGORY_TALK    => 'Категория_музакереси',
 );
 
-# Aliases to latin namespaces
 $namespaceAliases = array(
+       # Aliases of Latin (crh-latn) namespaces
        "Media"                 => NS_MEDIA,
        "Mahsus"                => NS_SPECIAL,
        "Muzakere"              => NS_TALK,
@@ -105,6 +101,9 @@ $dateFormats = array(
     'ISO 8601 both' => 'xnY.xnm.xnd"T"xnH:xni:xns',
 );
 
+$separatorTransformTable = array( ','  => '.', '.' => ',' );
+$linkTrail = '/^([a-zâçğıñöşüа-яё“»]+)(.*)$/sDu';
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Багълантыларнынъ тюбюни сызув:',
index ac6da44..766e0ba 100644 (file)
@@ -14,8 +14,6 @@
 
 $fallback8bitEncoding = 'windows-1254';
 
-$separatorTransformTable = array( ','     => '.', '.'     => ',' );
-
 $namespaceNames = array(
        NS_MEDIA            => 'Media',
        NS_SPECIAL          => 'Mahsus',
@@ -35,8 +33,8 @@ $namespaceNames = array(
        NS_CATEGORY_TALK    => 'Kategoriya_muzakeresi',
 );
 
-# Aliases to cyril namespaces
 $namespaceAliases = array(
+       # Aliases to Cyrillic (crh-cyrl) namespaces
        "Медиа"                  => NS_MEDIA,
        "Махсус"                 => NS_SPECIAL,
        "Музакере"               => NS_TALK,
@@ -57,7 +55,6 @@ $namespaceAliases = array(
        'Категория_музакереси'   => NS_CATEGORY_TALK
 );
 
-
 $datePreferences = array(
     'default',
     'mdy',
@@ -98,6 +95,7 @@ $dateFormats = array(
     'ISO 8601 both' => 'xnY.xnm.xnd"T"xnH:xni:xns',
 );
 
+$separatorTransformTable = array( ',' => '.', '.' => ',' );
 $linkTrail = '/^([a-zâçğıñöşüа-яё“»]+)(.*)$/sDu';
 
 $messages = array(
index 5f078c5..5e9a1a0 100644 (file)
@@ -70,72 +70,96 @@ $namespaceGenderAliases = array(
     NS_USER_TALK => array( 'male' => 'Diskuse_s_uživatelem', 'female' => 'Diskuse_s_uživatelkou' ),
 );
 
-/**
- * Date formats list for Special:Preferences
- * see $dateFormats for definitions
- */
-$datePreferences =  array(
-       'ČSN basic dt',
-       'ČSN padded dt',
-       'ČSN basic td',
-       'ČSN padded td',
-       'PČP dt',
-       'PČP td',
-       'ISO dt',
-);
-
-/**
- * Default date format to be used
- */
-$defaultDateFormat = 'ČSN basic dt';
-
-/**
- * Date formats definitions
- *
- * ČSN - Česká státní norma 01 6910 / Czech state norm 01 6910; numeral representation, basic = 1-12(31), padded = 01-12(31)
- * PČP - Pravidla českého pravopisu / The rules of Czech ortography (ISBN 80-200-0475-0); verbal representation
- * ISO - ISO 8601:2004 - Data elements and interchange formats -- Information interchange -- Representation of dates and times
- * dt - date, time order
- * td - time, date order
- */
-$dateFormats = array(
-       'ČSN basic dt time' => 'H:i',
-       'ČSN basic dt date' => 'j. n. Y',
-       'ČSN basic dt both' => 'j. n. Y, H:i',
-
-       'ČSN padded dt time' => 'H:i',
-       'ČSN padded dt date' => 'd.m.Y',
-       'ČSN padded dt both' => 'd.m.Y, H:i',
-
-       'ČSN basic td time' => 'H:i',
-       'ČSN basic td date' => 'j. n. Y',
-       'ČSN basic td both' => 'H:i, j. n. Y',
-
-       'ČSN padded td time' => 'H:i',
-       'ČSN padded td date' => 'd.m.Y',
-       'ČSN padded td both' => 'H:i, d.m.Y',
-
-       'PČP dt time' => 'H.i',
-       'PČP dt date' => 'j. xg Y',
-       'PČP dt both' => 'j. xg Y, H.i',
-
-       'PČP td time' => 'H.i',
-       'PČP td date' => 'j. xg Y',
-       'PČP td both' => 'H.i, j. xg Y',
-
-       'ISO dt time' => 'xnH:xni:xns',
-       'ISO dt date' => 'xnY-xnm-xnd',
-       'ISO dt both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
-);
-
-/**
- * Default list of book sources
- * Hledání knihy podle ISBN
- */
-$bookstoreList = array(
-       'Národní knihovna'          => 'http://aleph.nkp.cz/F/?func=find-a&find_code=ISN&request=$1',
-       'Státní technická knihovna' => 'http://www.stk.cz/cgi-bin/dflex/CZE/STK/BROWSE?A=01&V=$1',
-       'inherit' => true,
+$specialPageAliases = array(
+       'Activeusers'               => array( 'Aktivní_uživatelé', 'Aktivni_uzivatele' ),
+       'Allmessages'               => array( 'Všechna_hlášení', 'Všechny_zprávy', 'Vsechna_hlaseni', 'Vsechny_zpravy' ),
+       'Allpages'                  => array( 'Všechny_stránky', 'Vsechny_stranky' ),
+       'Ancientpages'              => array( 'Nejstarší_stránky', 'Staré_stránky', 'Stare_stranky' ),
+       'Blankpage'                 => array( 'Prázdná_stránka' ),
+       'Block'                     => array( 'Blokování', 'Blokovani', 'Blokovat_uživatele', 'Blokovat_IP', 'Blokovat_uzivatele' ),
+       'Blockme'                   => array( 'Zablokuj_mě', 'Zablokuj_me' ),
+       'Booksources'               => array( 'Zdroje_knih' ),
+       'BrokenRedirects'           => array( 'Přerušená_přesměrování', 'Prerusena_presmerovani' ),
+       'Categories'                => array( 'Kategorie' ),
+       'ChangeEmail'               => array( 'Změna_emailu', 'Zmena_emailu' ),
+       'ChangePassword'            => array( 'Změna_hesla', 'Zmena_hesla', 'Resetovat_heslo' ),
+       'Confirmemail'              => array( 'Potvrdit_e-mail' ),
+       'Contributions'             => array( 'Příspěvky', 'Prispevky' ),
+       'CreateAccount'             => array( 'Vytvořit_účet', 'Vytvorit_ucet' ),
+       'Deadendpages'              => array( 'Slepé_stránky', 'Slepe_stranky' ),
+       'DeletedContributions'      => array( 'Smazané_příspěvky', 'Smazane_prispevky' ),
+       'Disambiguations'           => array( 'Rozcestníky', 'Rozcestniky' ),
+       'DoubleRedirects'           => array( 'Dvojitá_přesměrování', 'Dvojita_presmerovani' ),
+       'Emailuser'                 => array( 'E-mail' ),
+       'Export'                    => array( 'Exportovat_stránky' ),
+       'Fewestrevisions'           => array( 'Stránky_s_nejméně_editacemi', 'Stranky_s_nejmene_editacemi', 'Stránky_s_nejmenším_počtem_editací' ),
+       'FileDuplicateSearch'       => array( 'Hledání_duplicitních_souborů', 'Hledani_duplicitnich_souboru' ),
+       'Filepath'                  => array( 'Cesta_k_souboru' ),
+       'Import'                    => array( 'Importovat_stránky' ),
+       'Invalidateemail'           => array( 'Zneplatnit_e-mail', 'Zrušit_potvrzení_e-mailu' ),
+       'BlockList'                 => array( 'Blokovaní_uživatelé', 'Blokovani_uzivatele' ),
+       'LinkSearch'                => array( 'Hledání_odkazů', 'Hledani_odkazu' ),
+       'Listadmins'                => array( 'Seznam_správců', 'Seznam_spravcu' ),
+       'Listbots'                  => array( 'Seznam_botů', 'Seznam_botu' ),
+       'Listfiles'                 => array( 'Seznam_souborů', 'Seznam_souboru' ),
+       'Listgrouprights'           => array( 'Seznam_uživatelských_práv', 'Seznam_uzivatelskych_prav' ),
+       'Listredirects'             => array( 'Seznam_přesměrování', 'Seznam_presmerovani' ),
+       'Listusers'                 => array( 'Uživatelé', 'Uzivatele', 'Seznam_uživatelů', 'Seznam_uzivatelu' ),
+       'Lockdb'                    => array( 'Zamknout_databázi', 'Zamknout_databazi' ),
+       'Log'                       => array( 'Protokolovací_záznamy', 'Protokoly', 'Protokol', 'Protokolovaci_zaznamy' ),
+       'Lonelypages'               => array( 'Sirotčí_stránky', 'Sirotci_stranky' ),
+       'Longpages'                 => array( 'Nejdelší_stránky', 'Nejdelsi_stranky' ),
+       'MergeHistory'              => array( 'Sloučení_historie', 'Slouceni_historie', 'Sloučit_historii' ),
+       'MIMEsearch'                => array( 'Hledání_podle_MIME', 'Hledani_podle_MIME', 'Hledat_podle_MIME_typu' ),
+       'Mostcategories'            => array( 'Stránky_s_nejvíce_kategoriemi', 'Stranky_s_nejvice_kategoriemi', 'Stránky_s_nejvyšším_počtem_kategorií' ),
+       'Mostimages'                => array( 'Nejpoužívanější_soubory', 'Nejpouzivanejsi_soubory' ),
+       'Mostlinked'                => array( 'Nejodkazovanější_stránky', 'Nejodkazovanejsi_stranky' ),
+       'Mostlinkedcategories'      => array( 'Nejpoužívanější_kategorie', 'Nejpouzivanejsi_kategorie' ),
+       'Mostlinkedtemplates'       => array( 'Nejpoužívanější_šablony', 'Nejpouzivanejsi_sablony' ),
+       'Mostrevisions'             => array( 'Stránky_s_nejvíce_editacemi', 'Stranky_s_nejvice_editacemi', 'Stránky_s_nejvyšším_počtem_editací' ),
+       'Movepage'                  => array( 'Přesunout_stránku' ),
+       'Mycontributions'           => array( 'Mé_příspěvky', 'Me_prispevky' ),
+       'Mypage'                    => array( 'Moje_stránka', 'Moje_stranka' ),
+       'Mytalk'                    => array( 'Moje_diskuse' ),
+       'Newimages'                 => array( 'Nové_obrázky', 'Galerie_nových_obrázků', 'Nove_obrazky' ),
+       'Newpages'                  => array( 'Nové_stránky', 'Nove_stranky', 'Nejnovější_stránky', 'Nejnovejsi_stranky' ),
+       'Popularpages'              => array( 'Nejnavštěvovanější_stránky', 'Nejnavstevovanejsi_stranky' ),
+       'Preferences'               => array( 'Nastavení', 'Nastaveni' ),
+       'Protectedpages'            => array( 'Zamčené_stránky', 'Zamcene_stranky' ),
+       'Protectedtitles'           => array( 'Zamčené_názvy', 'Zamcene_nazvy', 'Stránky_které_nelze_vytvořit' ),
+       'Randompage'                => array( 'Náhodná_stránka', 'Nahodna_stranka' ),
+       'Randomredirect'            => array( 'Náhodné_přesměrování', 'Nahodne_presmerovani' ),
+       'Recentchanges'             => array( 'Poslední_změny', 'Posledni_zmeny' ),
+       'Recentchangeslinked'       => array( 'Související_změny', 'Souvisejici_zmeny' ),
+       'Revisiondelete'            => array( 'Smazat_revizi' ),
+       'Search'                    => array( 'Hledání', 'Hledani' ),
+       'Shortpages'                => array( 'Nejkratší_stránky', 'Nejkratsi_stranky' ),
+       'Specialpages'              => array( 'Speciální_stránky', 'Specialni_stranky' ),
+       'Statistics'                => array( 'Statistika', 'Statistiky' ),
+       'Tags'                      => array( 'Značky', 'Znacky' ),
+       'Unblock'                   => array( 'Odblokování', 'Odblokovani' ),
+       'Uncategorizedcategories'   => array( 'Nekategorizované_kategorie', 'Nekategorizovane_kategorie' ),
+       'Uncategorizedimages'       => array( 'Nekategorizované_soubory', 'Nekategorizovane_soubory' ),
+       'Uncategorizedpages'        => array( 'Nekategorizované_stránky', 'Nekategorizovane_stranky' ),
+       'Uncategorizedtemplates'    => array( 'Nekategorizované_šablony', 'Nekategorizovane_sablony' ),
+       'Undelete'                  => array( 'Smazané_stránky', 'Smazane_stranky' ),
+       'Unlockdb'                  => array( 'Odemknout_databázi', 'Odemknout_databazi' ),
+       'Unusedcategories'          => array( 'Nepoužívané_kategorie', 'Nepouzivane_kategorie' ),
+       'Unusedimages'              => array( 'Nepoužívané_soubory', 'Nepouzivane_soubory' ),
+       'Unusedtemplates'           => array( 'Nepoužívané_šablony', 'Nepouzivane_sablony' ),
+       'Unwatchedpages'            => array( 'Nesledované_stránky' ),
+       'Upload'                    => array( 'Načíst_soubor', 'Nacist_soubor', 'Načíst_obrázek' ),
+       'Userlogin'                 => array( 'Přihlásit', 'Prihlasit' ),
+       'Userlogout'                => array( 'Odhlásit', 'Odhlasit' ),
+       'Userrights'                => array( 'Uživatelská_práva', 'Správa_uživatelů', 'Uzivatelska_prava' ),
+       'Version'                   => array( 'Verze' ),
+       'Wantedcategories'          => array( 'Chybějící_kategorie', 'Požadované_kategorie', 'Pozadovane_kategorie' ),
+       'Wantedfiles'               => array( 'Chybějící_soubory', 'Požadované_soubory', 'Pozadovane_soubory' ),
+       'Wantedpages'               => array( 'Chybějící_stránky', 'Požadované_stránky', 'Pozadovane_stranky' ),
+       'Wantedtemplates'           => array( 'Chybějící_šablony', 'Požadované_šablony', 'Pozadovane_sablony' ),
+       'Watchlist'                 => array( 'Sledované_stránky', 'Sledovane_stranky' ),
+       'Whatlinkshere'             => array( 'Co_odkazuje_na', 'Odkazuje_sem' ),
+       'Withoutinterwiki'          => array( 'Bez_interwiki', 'Stránky_bez_interwiki_odkazů' ),
 );
 
 $magicWords = array(
@@ -256,6 +280,74 @@ $magicWords = array(
        'protectionlevel'           => array( '1', 'ÚROVEŇZAMČENÍ', 'PROTECTIONLEVEL' ),
 );
 
+/**
+ * Date formats list for Special:Preferences
+ * see $dateFormats for definitions
+ */
+$datePreferences =  array(
+       'ČSN basic dt',
+       'ČSN padded dt',
+       'ČSN basic td',
+       'ČSN padded td',
+       'PČP dt',
+       'PČP td',
+       'ISO dt',
+);
+
+/**
+ * Default date format to be used
+ */
+$defaultDateFormat = 'ČSN basic dt';
+
+/**
+ * Date formats definitions
+ *
+ * ČSN - Česká státní norma 01 6910 / Czech state norm 01 6910; numeral representation, basic = 1-12(31), padded = 01-12(31)
+ * PČP - Pravidla českého pravopisu / The rules of Czech ortography (ISBN 80-200-0475-0); verbal representation
+ * ISO - ISO 8601:2004 - Data elements and interchange formats -- Information interchange -- Representation of dates and times
+ * dt - date, time order
+ * td - time, date order
+ */
+$dateFormats = array(
+       'ČSN basic dt time' => 'H:i',
+       'ČSN basic dt date' => 'j. n. Y',
+       'ČSN basic dt both' => 'j. n. Y, H:i',
+
+       'ČSN padded dt time' => 'H:i',
+       'ČSN padded dt date' => 'd.m.Y',
+       'ČSN padded dt both' => 'd.m.Y, H:i',
+
+       'ČSN basic td time' => 'H:i',
+       'ČSN basic td date' => 'j. n. Y',
+       'ČSN basic td both' => 'H:i, j. n. Y',
+
+       'ČSN padded td time' => 'H:i',
+       'ČSN padded td date' => 'd.m.Y',
+       'ČSN padded td both' => 'H:i, d.m.Y',
+
+       'PČP dt time' => 'H.i',
+       'PČP dt date' => 'j. xg Y',
+       'PČP dt both' => 'j. xg Y, H.i',
+
+       'PČP td time' => 'H.i',
+       'PČP td date' => 'j. xg Y',
+       'PČP td both' => 'H.i, j. xg Y',
+
+       'ISO dt time' => 'xnH:xni:xns',
+       'ISO dt date' => 'xnY-xnm-xnd',
+       'ISO dt both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+);
+
+/**
+ * Default list of book sources
+ * Hledání knihy podle ISBN
+ */
+$bookstoreList = array(
+       'Národní knihovna'          => 'http://aleph.nkp.cz/F/?func=find-a&find_code=ISN&request=$1',
+       'Státní technická knihovna' => 'http://www.stk.cz/cgi-bin/dflex/CZE/STK/BROWSE?A=01&V=$1',
+       'inherit' => true,
+);
+
 /**
  * Regular expression matching the "link trail", e.g. "ed" in [[Toast]]ed, as
  * the first group, and the remainder of the string as the second group.
@@ -265,98 +357,6 @@ $linkTrail = '/^([a-záčďéěíňóřšťúůýž]+)(.*)$/sDu';
 
 $separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
 
-$specialPageAliases = array(
-       'Activeusers'               => array( 'Aktivní_uživatelé', 'Aktivni_uzivatele' ),
-       'Allmessages'               => array( 'Všechna_hlášení', 'Všechny_zprávy', 'Vsechna_hlaseni', 'Vsechny_zpravy' ),
-       'Allpages'                  => array( 'Všechny_stránky', 'Vsechny_stranky' ),
-       'Ancientpages'              => array( 'Nejstarší_stránky', 'Staré_stránky', 'Stare_stranky' ),
-       'Blankpage'                 => array( 'Prázdná_stránka' ),
-       'Block'                     => array( 'Blokování', 'Blokovani', 'Blokovat_uživatele', 'Blokovat_IP', 'Blokovat_uzivatele' ),
-       'Blockme'                   => array( 'Zablokuj_mě', 'Zablokuj_me' ),
-       'Booksources'               => array( 'Zdroje_knih' ),
-       'BrokenRedirects'           => array( 'Přerušená_přesměrování', 'Prerusena_presmerovani' ),
-       'Categories'                => array( 'Kategorie' ),
-       'ChangeEmail'               => array( 'Změna_emailu', 'Zmena_emailu' ),
-       'ChangePassword'            => array( 'Změna_hesla', 'Zmena_hesla', 'Resetovat_heslo' ),
-       'Confirmemail'              => array( 'Potvrdit_e-mail' ),
-       'Contributions'             => array( 'Příspěvky', 'Prispevky' ),
-       'CreateAccount'             => array( 'Vytvořit_účet', 'Vytvorit_ucet' ),
-       'Deadendpages'              => array( 'Slepé_stránky', 'Slepe_stranky' ),
-       'DeletedContributions'      => array( 'Smazané_příspěvky', 'Smazane_prispevky' ),
-       'Disambiguations'           => array( 'Rozcestníky', 'Rozcestniky' ),
-       'DoubleRedirects'           => array( 'Dvojitá_přesměrování', 'Dvojita_presmerovani' ),
-       'Emailuser'                 => array( 'E-mail' ),
-       'Export'                    => array( 'Exportovat_stránky' ),
-       'Fewestrevisions'           => array( 'Stránky_s_nejméně_editacemi', 'Stranky_s_nejmene_editacemi', 'Stránky_s_nejmenším_počtem_editací' ),
-       'FileDuplicateSearch'       => array( 'Hledání_duplicitních_souborů', 'Hledani_duplicitnich_souboru' ),
-       'Filepath'                  => array( 'Cesta_k_souboru' ),
-       'Import'                    => array( 'Importovat_stránky' ),
-       'Invalidateemail'           => array( 'Zneplatnit_e-mail', 'Zrušit_potvrzení_e-mailu' ),
-       'BlockList'                 => array( 'Blokovaní_uživatelé', 'Blokovani_uzivatele' ),
-       'LinkSearch'                => array( 'Hledání_odkazů', 'Hledani_odkazu' ),
-       'Listadmins'                => array( 'Seznam_správců', 'Seznam_spravcu' ),
-       'Listbots'                  => array( 'Seznam_botů', 'Seznam_botu' ),
-       'Listfiles'                 => array( 'Seznam_souborů', 'Seznam_souboru' ),
-       'Listgrouprights'           => array( 'Seznam_uživatelských_práv', 'Seznam_uzivatelskych_prav' ),
-       'Listredirects'             => array( 'Seznam_přesměrování', 'Seznam_presmerovani' ),
-       'Listusers'                 => array( 'Uživatelé', 'Uzivatele', 'Seznam_uživatelů', 'Seznam_uzivatelu' ),
-       'Lockdb'                    => array( 'Zamknout_databázi', 'Zamknout_databazi' ),
-       'Log'                       => array( 'Protokolovací_záznamy', 'Protokoly', 'Protokol', 'Protokolovaci_zaznamy' ),
-       'Lonelypages'               => array( 'Sirotčí_stránky', 'Sirotci_stranky' ),
-       'Longpages'                 => array( 'Nejdelší_stránky', 'Nejdelsi_stranky' ),
-       'MergeHistory'              => array( 'Sloučení_historie', 'Slouceni_historie', 'Sloučit_historii' ),
-       'MIMEsearch'                => array( 'Hledání_podle_MIME', 'Hledani_podle_MIME', 'Hledat_podle_MIME_typu' ),
-       'Mostcategories'            => array( 'Stránky_s_nejvíce_kategoriemi', 'Stranky_s_nejvice_kategoriemi', 'Stránky_s_nejvyšším_počtem_kategorií' ),
-       'Mostimages'                => array( 'Nejpoužívanější_soubory', 'Nejpouzivanejsi_soubory' ),
-       'Mostlinked'                => array( 'Nejodkazovanější_stránky', 'Nejodkazovanejsi_stranky' ),
-       'Mostlinkedcategories'      => array( 'Nejpoužívanější_kategorie', 'Nejpouzivanejsi_kategorie' ),
-       'Mostlinkedtemplates'       => array( 'Nejpoužívanější_šablony', 'Nejpouzivanejsi_sablony' ),
-       'Mostrevisions'             => array( 'Stránky_s_nejvíce_editacemi', 'Stranky_s_nejvice_editacemi', 'Stránky_s_nejvyšším_počtem_editací' ),
-       'Movepage'                  => array( 'Přesunout_stránku' ),
-       'Mycontributions'           => array( 'Mé_příspěvky', 'Me_prispevky' ),
-       'Mypage'                    => array( 'Moje_stránka', 'Moje_stranka' ),
-       'Mytalk'                    => array( 'Moje_diskuse' ),
-       'Newimages'                 => array( 'Nové_obrázky', 'Galerie_nových_obrázků', 'Nove_obrazky' ),
-       'Newpages'                  => array( 'Nové_stránky', 'Nove_stranky', 'Nejnovější_stránky', 'Nejnovejsi_stranky' ),
-       'Popularpages'              => array( 'Nejnavštěvovanější_stránky', 'Nejnavstevovanejsi_stranky' ),
-       'Preferences'               => array( 'Nastavení', 'Nastaveni' ),
-       'Protectedpages'            => array( 'Zamčené_stránky', 'Zamcene_stranky' ),
-       'Protectedtitles'           => array( 'Zamčené_názvy', 'Zamcene_nazvy', 'Stránky_které_nelze_vytvořit' ),
-       'Randompage'                => array( 'Náhodná_stránka', 'Nahodna_stranka' ),
-       'Randomredirect'            => array( 'Náhodné_přesměrování', 'Nahodne_presmerovani' ),
-       'Recentchanges'             => array( 'Poslední_změny', 'Posledni_zmeny' ),
-       'Recentchangeslinked'       => array( 'Související_změny', 'Souvisejici_zmeny' ),
-       'Revisiondelete'            => array( 'Smazat_revizi' ),
-       'Search'                    => array( 'Hledání', 'Hledani' ),
-       'Shortpages'                => array( 'Nejkratší_stránky', 'Nejkratsi_stranky' ),
-       'Specialpages'              => array( 'Speciální_stránky', 'Specialni_stranky' ),
-       'Statistics'                => array( 'Statistika', 'Statistiky' ),
-       'Tags'                      => array( 'Značky', 'Znacky' ),
-       'Unblock'                   => array( 'Odblokování', 'Odblokovani' ),
-       'Uncategorizedcategories'   => array( 'Nekategorizované_kategorie', 'Nekategorizovane_kategorie' ),
-       'Uncategorizedimages'       => array( 'Nekategorizované_soubory', 'Nekategorizovane_soubory' ),
-       'Uncategorizedpages'        => array( 'Nekategorizované_stránky', 'Nekategorizovane_stranky' ),
-       'Uncategorizedtemplates'    => array( 'Nekategorizované_šablony', 'Nekategorizovane_sablony' ),
-       'Undelete'                  => array( 'Smazané_stránky', 'Smazane_stranky' ),
-       'Unlockdb'                  => array( 'Odemknout_databázi', 'Odemknout_databazi' ),
-       'Unusedcategories'          => array( 'Nepoužívané_kategorie', 'Nepouzivane_kategorie' ),
-       'Unusedimages'              => array( 'Nepoužívané_soubory', 'Nepouzivane_soubory' ),
-       'Unusedtemplates'           => array( 'Nepoužívané_šablony', 'Nepouzivane_sablony' ),
-       'Unwatchedpages'            => array( 'Nesledované_stránky' ),
-       'Upload'                    => array( 'Načíst_soubor', 'Nacist_soubor', 'Načíst_obrázek' ),
-       'Userlogin'                 => array( 'Přihlásit', 'Prihlasit' ),
-       'Userlogout'                => array( 'Odhlásit', 'Odhlasit' ),
-       'Userrights'                => array( 'Uživatelská_práva', 'Správa_uživatelů', 'Uzivatelska_prava' ),
-       'Version'                   => array( 'Verze' ),
-       'Wantedcategories'          => array( 'Chybějící_kategorie', 'Požadované_kategorie', 'Pozadovane_kategorie' ),
-       'Wantedfiles'               => array( 'Chybějící_soubory', 'Požadované_soubory', 'Pozadovane_soubory' ),
-       'Wantedpages'               => array( 'Chybějící_stránky', 'Požadované_stránky', 'Pozadovane_stranky' ),
-       'Wantedtemplates'           => array( 'Chybějící_šablony', 'Požadované_šablony', 'Pozadovane_sablony' ),
-       'Watchlist'                 => array( 'Sledované_stránky', 'Sledovane_stranky' ),
-       'Whatlinkshere'             => array( 'Co_odkazuje_na', 'Odkazuje_sem' ),
-       'Withoutinterwiki'          => array( 'Bez_interwiki', 'Stránky_bez_interwiki_odkazů' ),
-);
-
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Podtrhávat odkazy:',
@@ -407,7 +407,7 @@ $messages = array(
 
 'underline-always' => 'Vždy',
 'underline-never' => 'Nikdy',
-'underline-default' => 'Podle nastavení prohlížeče',
+'underline-default' => 'Podle nastavení prohlížeče nebo vzhledu',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Druh písma v editačním poli:',
@@ -1645,6 +1645,9 @@ Tuto operaci nelze vrátit zpět.',
 'rightslogtext' => 'Toto je záznam změn uživatelských práv.',
 'rightslogentry' => 'změnil pro $1 zařazení ve skupinách z $2 na $3',
 'rightslogentry-autopromote' => 'byl automaticky povýšen z $2 na $3',
+'logentry-rights-rights' => '$1 {{GENDER:$2|změnil|změnila}} členství $3 ve skupinách z $4 na $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$2|změnil|změnila}} členství $3 ve skupinách',
+'logentry-rights-autopromote' => '$1 {{GENDER:$2|byl automaticky povýšen|byla automaticky povýšena}} z $4 na $5',
 'rightsnone' => '(žádné)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2265,7 +2268,7 @@ Podívejte se také na [[Special:WantedCategories|žádané kategorie]].',
 'linksearch-ok' => 'Hledat',
 'linksearch-text' => 'Lze používat zástupné znaky, např. „*.wikipedia.org“.
 Povinná je přinejmenším doména nejvyššího řádu, např. „*.org“.<br />
-Podporované protokoly: <code>$1</code> (nepřidávejte je do hledání).',
+Podporované protokoly: <code>$1</code> (pokud není protokol uveden, použije se http://).',
 'linksearch-line' => '$2 odkazuje na $1',
 'linksearch-error' => 'Zástupné znaky lze použít jen na začátku doménového jména.',
 
@@ -3119,7 +3122,7 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 
 # Info page
 'pageinfo-title' => 'Informace o stránce „$1“',
-'pageinfo-not-current' => 'Informace lze zobrazit jen pro aktuální verzi.',
+'pageinfo-not-current' => 'Informace bohužel nelze zobrazit pro starší verze.',
 'pageinfo-header-basic' => 'Základní údaje',
 'pageinfo-header-edits' => 'Historie editací',
 'pageinfo-header-restrictions' => 'Zámek stránky',
index e8848c1..dc29b25 100644 (file)
  * @author ОйЛ
  */
 
-$separatorTransformTable = array(
-       ',' => ".",
-       '.' => ','
-);
-
-$linkPrefixExtension = true;
-
 $namespaceNames = array(
        NS_MEDIA            => 'Срѣдьства',
        NS_SPECIAL          => 'Нарочьна',
@@ -65,6 +58,13 @@ $magicWords = array(
        'language'                  => array( '0', '#ѨꙀꙐКЪ:', '#LANGUAGE:' ),
 );
 
+$separatorTransformTable = array(
+       ',' => ".",
+       '.' => ','
+);
+
+$linkPrefixExtension = true;
+
 $defaultDateFormat = 'mdy';
 
 $dateFormats = array(
index a08779d..69ddcde 100644 (file)
@@ -16,8 +16,6 @@
 
 $fallback = 'ru';
 
-$linkPrefixExtension = true;
-
 $namespaceNames = array(
        NS_MEDIA            => 'Медиа',
        NS_SPECIAL          => 'Ятарлă',
@@ -40,6 +38,7 @@ $namespaceNames = array(
 // Remove Russian aliases
 $namespaceGenderAliases = array();
 
+$linkPrefixExtension = true;
 $linkTrail = '/^([a-zа-яĕçăӳ"»]+)(.*)$/sDu';
 
 $messages = array(
index 93ab38b..4c3bd4d 100644 (file)
@@ -37,17 +37,6 @@ $namespaceNames = array(
        NS_CATEGORY_TALK    => 'Sgwrs_Categori',
 );
 
-
-$defaultDateFormat = 'dmy';
-
-$bookstoreList = array(
-       "AddALL" => "http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN",
-       "PriceSCAN" => "http://www.pricescan.com/books/bookDetail.asp?isbn=$1",
-       "Barnes & Noble" => "http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1",
-       "Amazon.com" => "http://www.amazon.com/exec/obidos/ISBN=$1",
-       "Amazon.co.uk" => "http://www.amazon.co.uk/exec/obidos/ISBN=$1"
-);
-
 $magicWords = array(
        'redirect'                  => array( '0', '#ail-cyfeirio', '#ailgyfeirio', '#REDIRECT' ),
        'notoc'                     => array( '0', '__DIMTAFLENCYNNWYS__', '__DIMRHESTRGYNNWYS__', '__DIMRHG__', '__NOTOC__' ),
@@ -114,6 +103,16 @@ $magicWords = array(
        'pagesize'                  => array( '1', 'MAINTTUD', 'PAGESIZE' ),
 );
 
+$defaultDateFormat = 'dmy';
+
+$bookstoreList = array(
+       "AddALL" => "http://www.addall.com/New/Partner.cgi?query=$1&type=ISBN",
+       "PriceSCAN" => "http://www.pricescan.com/books/bookDetail.asp?isbn=$1",
+       "Barnes & Noble" => "http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1",
+       "Amazon.com" => "http://www.amazon.com/exec/obidos/ISBN=$1",
+       "Amazon.co.uk" => "http://www.amazon.co.uk/exec/obidos/ISBN=$1"
+);
+
 $linkTrail = "/^([àáâèéêìíîïòóôûŵŷa-z]+)(.*)$/sDu";
 
 $messages = array(
index 0400a6e..727d017 100644 (file)
@@ -73,15 +73,6 @@ $namespaceAliases = array(
        'Hjælp-diskussion'     => NS_HELP_TALK,
 );
 
-$bookstoreList = array(
-       "Bibliotek.dk" => "http://bibliotek.dk/vis.php?base=dfa&origin=kommando&field1=ccl&term1=is=$1&element=L&start=1&step=10",
-       "Bogguide.dk" => "http://www.bogguide.dk/find_boeger_bog.asp?ISBN=$1",
-       'inherit' => true,
-);
-
-$separatorTransformTable = array( ',' => '.', '.' => ',' );
-$linkTrail = '/^([a-zæøå]+)(.*)$/sDu';
-
 $specialPageAliases = array(
        'Activeusers'               => array( 'Aktive_Brugere' ),
        'Allmessages'               => array( 'MediaWiki-systemmeddelelser' ),
@@ -125,6 +116,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'MIME-type-søgning' ),
        'Mostcategories'            => array( 'Sider_med_flest_kategorier' ),
        'Mostimages'                => array( 'Mest_brugte_filer' ),
+       'Mostinterwikis'            => array( 'Flest_interwikilinks' ),
        'Mostlinked'                => array( 'Sider_med_flest_henvisninger' ),
        'Mostlinkedcategories'      => array( 'Kategorier_med_flest_sider' ),
        'Mostlinkedtemplates'       => array( 'Hyppigst_brugte_skabeloner' ),
@@ -145,7 +137,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Seneste_ændringer' ),
        'Recentchangeslinked'       => array( 'Relaterede_ændringer' ),
        'Revisiondelete'            => array( 'Versionssletning' ),
-       'RevisionMove'              => array( 'Versionsflytning' ),
        'Search'                    => array( 'Søgning' ),
        'Shortpages'                => array( 'Korteste_sider' ),
        'Specialpages'              => array( 'Specialsider' ),
@@ -186,6 +177,15 @@ $dateFormats = array(
        'ymd both' => 'Y M j, H:i'
 );
 
+$bookstoreList = array(
+       "Bibliotek.dk" => "http://bibliotek.dk/vis.php?base=dfa&origin=kommando&field1=ccl&term1=is=$1&element=L&start=1&step=10",
+       "Bogguide.dk" => "http://www.bogguide.dk/find_boeger_bog.asp?ISBN=$1",
+       'inherit' => true,
+);
+
+$separatorTransformTable = array( ',' => '.', '.' => ',' );
+$linkTrail = '/^([a-zæøå]+)(.*)$/sDu';
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Understreg henvisninger:',
@@ -2913,7 +2913,7 @@ Dette skyldes sandsynligvis en henvisning til et sortlistet eksternt websted.',
 
 # Info page
 'pageinfo-title' => 'Information om "$1"',
-'pageinfo-not-current' => 'Oplysninger vises kun for den aktuelle version.',
+'pageinfo-not-current' => 'Beklager, det er umuligt at give denne information for gamle udgaver.',
 'pageinfo-header-basic' => 'Grundlæggende oplysninger',
 'pageinfo-header-edits' => 'Redigeringshistorik',
 'pageinfo-header-restrictions' => 'Sidebeskyttelse',
index b25e13c..50e7b28 100644 (file)
@@ -71,8 +71,6 @@
  * @author ✓
  */
 
-$capitalizeAllNouns = true;
-
 $namespaceNames = array(
        NS_MEDIA            => 'Medium',
        NS_SPECIAL          => 'Spezial',
@@ -96,22 +94,12 @@ $namespaceAliases = array(
        'Bild' => NS_FILE,
        'Bild_Diskussion' => NS_FILE_TALK,
 );
+
 $namespaceGenderAliases = array(
        NS_USER => array( 'male' => 'Benutzer', 'female' => 'Benutzerin' ),
        NS_USER_TALK => array( 'male' => 'Benutzer_Diskussion', 'female' => 'Benutzerin_Diskussion' ),
 );
 
-$bookstoreList = array(
-       'abebooks.de' => 'http://www.abebooks.de/servlet/BookSearchPL?ph=2&isbn=$1',
-       'amazon.de' => 'http://www.amazon.de/gp/search/field-isbn=$1',
-       'buch.de' => 'http://www.buch.de/shop/home/suche/?sswg=BUCH&sq=$1',
-       'Karlsruher Virtueller Katalog (KVK)' => 'http://www.ubka.uni-karlsruhe.de/kvk.html?SB=$1',
-       'Lehmanns Fachbuchhandlung' => 'http://www.lob.de/cgi-bin/work/suche?flag=new&stich1=$1'
-);
-
-$separatorTransformTable = array( ',' => '.', '.' => ',' );
-$linkTrail = '/^([äöüßa-z]+)(.*)$/sDu';
-
 $specialPageAliases = array(
        'Activeusers'               => array( 'Aktive_Benutzer' ),
        'Allmessages'               => array( 'MediaWiki-Systemnachrichten', 'Systemnachrichten' ),
@@ -183,7 +171,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Letzte_Änderungen' ),
        'Recentchangeslinked'       => array( 'Änderungen_an_verlinkten_Seiten' ),
        'Revisiondelete'            => array( 'Versionslöschung' ),
-       'RevisionMove'              => array( 'Version_verschieben' ),
        'Search'                    => array( 'Suche' ),
        'Shortpages'                => array( 'Kürzeste_Seiten' ),
        'Specialpages'              => array( 'Spezialseiten' ),
@@ -214,39 +201,6 @@ $specialPageAliases = array(
        'Withoutinterwiki'          => array( 'Fehlende_Interwikis' ),
 );
 
-$datePreferences = array(
-       'default',
-       'dmyt',
-       'dmyts',
-       'dmy',
-       'ymd',
-       'ISO 8601'
-);
-
-$defaultDateFormat = 'dmy';
-
-$dateFormats = array(
-       'dmyt time' => 'H:i',
-       'dmyt date' => 'j. F Y',
-       'dmyt both' => 'j. M Y, H:i',
-
-       'dmyts time' => 'H:i:s',
-       'dmyts date' => 'j. F Y',
-       'dmyts both' => 'j. M Y, H:i:s',
-
-       'dmy time' => 'H:i',
-       'dmy date' => 'j. F Y',
-       'dmy both' => 'H:i, j. M Y',
-
-       'ymd time' => 'H:i',
-       'ymd date' => 'Y M j',
-       'ymd both' => 'H:i, Y M j',
-
-       'ISO 8601 time' => 'xnH:xni:xns',
-       'ISO 8601 date' => 'xnY-xnm-xnd',
-       'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns'
-);
-
 $magicWords = array(
        'redirect'                  => array( '0', '#WEITERLEITUNG', '#REDIRECT' ),
        'notoc'                     => array( '0', '__KEIN_INHALTSVERZEICHNIS__', '__KEININHALTSVERZEICHNIS__', '__NOTOC__' ),
@@ -254,14 +208,13 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__INHALTSVERZEICHNIS_ERZWINGEN__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__INHALTSVERZEICHNIS__', '__TOC__' ),
        'noeditsection'             => array( '0', '__ABSCHNITTE_NICHT_BEARBEITEN__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__KEINKOPF__', '__KEIN_HEADER__', '__KEIN_KOPF__', '__KEINHEADER__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'JETZIGER_MONAT', 'JETZIGER_MONAT_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'JETZIGER_MONAT_1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'JETZIGER_MONATSNAME', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'       => array( '1', 'JETZIGER_MONATSNAME_GENITIV', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthnamegen'       => array( '1', 'JETZIGER_MONATSNAME_GENITIV', 'JETZIGER_MONATSNAME_GEN', 'CURRENTMONTHNAMEGEN' ),
        'currentmonthabbrev'        => array( '1', 'JETZIGER_MONATSNAME_KURZ', 'CURRENTMONTHABBREV' ),
-       'currentday'                => array( '1', 'JETZIGER_KALENDERTAG', 'CURRENTDAY' ),
-       'currentday2'               => array( '1', 'JETZIGER_KALENDERTAG_2', 'CURRENTDAY2' ),
+       'currentday'                => array( '1', 'JETZIGER_KALENDERTAG', 'JETZIGER_TAG', 'CURRENTDAY' ),
+       'currentday2'               => array( '1', 'JETZIGER_KALENDERTAG_2', 'JETZIGER_TAG_2', 'CURRENTDAY2' ),
        'currentdayname'            => array( '1', 'JETZIGER_WOCHENTAG', 'CURRENTDAYNAME' ),
        'currentyear'               => array( '1', 'JETZIGES_JAHR', 'CURRENTYEAR' ),
        'currenttime'               => array( '1', 'JETZIGE_UHRZEIT', 'CURRENTTIME' ),
@@ -269,10 +222,10 @@ $magicWords = array(
        'localmonth'                => array( '1', 'LOKALER_MONAT', 'LOKALER_MONAT_2', 'LOCALMONTH', 'LOCALMONTH2' ),
        'localmonth1'               => array( '1', 'LOKALER_MONAT_1', 'LOCALMONTH1' ),
        'localmonthname'            => array( '1', 'LOKALER_MONATSNAME', 'LOCALMONTHNAME' ),
-       'localmonthnamegen'         => array( '1', 'LOKALER_MONATSNAME_GENITIV', 'LOCALMONTHNAMEGEN' ),
+       'localmonthnamegen'         => array( '1', 'LOKALER_MONATSNAME_GENITIV', 'LOKALER_MONATSNAME_GEN', 'LOCALMONTHNAMEGEN' ),
        'localmonthabbrev'          => array( '1', 'LOKALER_MONATSNAME_KURZ', 'LOCALMONTHABBREV' ),
-       'localday'                  => array( '1', 'LOKALER_KALENDERTAG', 'LOCALDAY' ),
-       'localday2'                 => array( '1', 'LOKALER_KALENDERTAG_2', 'LOCALDAY2' ),
+       'localday'                  => array( '1', 'LOKALER_KALENDERTAG', 'LOKALER_TAG', 'LOCALDAY' ),
+       'localday2'                 => array( '1', 'LOKALER_KALENDERTAG_2', 'LOKALER_TAG_2', 'LOCALDAY2' ),
        'localdayname'              => array( '1', 'LOKALER_WOCHENTAG', 'LOCALDAYNAME' ),
        'localyear'                 => array( '1', 'LOKALES_JAHR', 'LOCALYEAR' ),
        'localtime'                 => array( '1', 'LOKALE_UHRZEIT', 'LOCALTIME' ),
@@ -301,8 +254,8 @@ $magicWords = array(
        'basepagenamee'             => array( '1', 'OBERSEITE_URL', 'BASEPAGENAMEE' ),
        'talkpagename'              => array( '1', 'DISKUSSIONSSEITE', 'DISK', 'TALKPAGENAME' ),
        'talkpagenamee'             => array( '1', 'DISKUSSIONSSEITE_URL', 'DISK_URL', 'TALKPAGENAMEE' ),
-       'subjectpagename'           => array( '1', 'HAUPTSEITE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
-       'subjectpagenamee'          => array( '1', 'HAUPTSEITE_URL', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
+       'subjectpagename'           => array( '1', 'HAUPTSEITENNAME', 'VORDERSEITE', 'HAUPTSEITE', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'subjectpagenamee'          => array( '1', 'HAUPTSEITENNAME_URL', 'VORDERSEITE_URL', 'HAUPTSEITE_URL', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
        'subst'                     => array( '0', 'ERS:', 'SUBST:' ),
        'safesubst'                 => array( '0', 'SICHER_ERS:', 'SICHERERS:', 'SAFESUBST:' ),
        'img_thumbnail'             => array( '1', 'miniatur', 'mini', 'thumbnail', 'thumb' ),
@@ -314,7 +267,7 @@ $magicWords = array(
        'img_framed'                => array( '1', 'gerahmt', 'framed', 'enframed', 'frame' ),
        'img_frameless'             => array( '1', 'rahmenlos', 'frameless' ),
        'img_page'                  => array( '1', 'seite=$1', 'seite_$1', 'page=$1', 'page $1' ),
-       'img_upright'               => array( '1', 'hochkant', 'hochkant=$1', 'hochkant $1', 'upright', 'upright=$1', 'upright $1' ),
+       'img_upright'               => array( '1', 'hochkant', 'hochkant=$1', 'hochkant_$1', 'upright', 'upright=$1', 'upright $1' ),
        'img_border'                => array( '1', 'rand', 'border' ),
        'img_baseline'              => array( '1', 'grundlinie', 'baseline' ),
        'img_sub'                   => array( '1', 'tiefgestellt', 'tief', 'sub' ),
@@ -326,6 +279,7 @@ $magicWords = array(
        'img_text_bottom'           => array( '1', 'text-unten', 'text-bottom' ),
        'img_link'                  => array( '1', 'verweis=$1', 'link=$1' ),
        'img_alt'                   => array( '1', 'alternativtext=$1', 'alt=$1' ),
+       'img_class'                 => array( '1', 'klasse=$1', 'class=$1' ),
        'int'                       => array( '0', 'NACHRICHT:', 'INT:' ),
        'sitename'                  => array( '1', 'PROJEKTNAME', 'SITENAME' ),
        'ns'                        => array( '0', 'NR:', 'NS:' ),
@@ -340,18 +294,18 @@ $magicWords = array(
        'gender'                    => array( '0', 'GESCHLECHT:', 'GENDER:' ),
        'notitleconvert'            => array( '0', '__KEINE_TITELKONVERTIERUNG__', '__NOTITLECONVERT__', '__NOTC__' ),
        'nocontentconvert'          => array( '0', '__KEINE_INHALTSKONVERTIERUNG__', '__NOCONTENTCONVERT__', '__NOCC__' ),
-       'currentweek'               => array( '1', 'JETZIGE_KALENDERWOCHE', 'CURRENTWEEK' ),
+       'currentweek'               => array( '1', 'JETZIGE_KALENDERWOCHE', 'JETZIGE_WOCHE', 'CURRENTWEEK' ),
        'currentdow'                => array( '1', 'JETZIGER_WOCHENTAG_ZAHL', 'CURRENTDOW' ),
-       'localweek'                 => array( '1', 'LOKALE_KALENDERWOCHE', 'LOCALWEEK' ),
+       'localweek'                 => array( '1', 'LOKALE_KALENDERWOCHE', 'LOKALE_WOCHE', 'LOCALWEEK' ),
        'localdow'                  => array( '1', 'LOKALER_WOCHENTAG_ZAHL', 'LOCALDOW' ),
-       'revisionid'                => array( '1', 'REVISIONSID', 'REVISIONID' ),
-       'revisionday'               => array( '1', 'REVISIONSTAG', 'REVISIONDAY' ),
-       'revisionday2'              => array( '1', 'REVISIONSTAG2', 'REVISIONDAY2' ),
-       'revisionmonth'             => array( '1', 'REVISIONSMONAT', 'REVISIONMONTH' ),
-       'revisionmonth1'            => array( '1', 'REVISIONSMONAT1', 'REVISIONMONTH1' ),
-       'revisionyear'              => array( '1', 'REVISIONSJAHR', 'REVISIONYEAR' ),
-       'revisiontimestamp'         => array( '1', 'REVISIONSZEITSTEMPEL', 'REVISIONTIMESTAMP' ),
-       'revisionuser'              => array( '1', 'REVISIONSBENUTZER', 'REVISIONUSER' ),
+       'revisionid'                => array( '1', 'REVISIONSID', 'VERSIONSID', 'REVISIONID' ),
+       'revisionday'               => array( '1', 'REVISIONSTAG', 'VERSIONSTAG', 'REVISIONDAY' ),
+       'revisionday2'              => array( '1', 'REVISIONSTAG2', 'VERSIONSTAG2', 'REVISIONDAY2' ),
+       'revisionmonth'             => array( '1', 'REVISIONSMONAT', 'VERSIONSMONAT', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'REVISIONSMONAT1', 'VERSIONSMONAT1', 'REVISIONMONTH1' ),
+       'revisionyear'              => array( '1', 'REVISIONSJAHR', 'VERSIONSJAHR', 'REVISIONYEAR' ),
+       'revisiontimestamp'         => array( '1', 'REVISIONSZEITSTEMPEL', 'VERSIONSZEITSTEMPEL', 'REVISIONTIMESTAMP' ),
+       'revisionuser'              => array( '1', 'REVISIONSBENUTZER', 'VERSIONSBENUTZER', 'REVISIONUSER' ),
        'fullurl'                   => array( '0', 'VOLLSTÄNDIGE_URL:', 'FULLURL:' ),
        'fullurle'                  => array( '0', 'VOLLSTÄNDIGE_URL_C:', 'FULLURLE:' ),
        'canonicalurl'              => array( '0', 'KANONISCHE_URL:', 'CANONICALURL:' ),
@@ -383,10 +337,10 @@ $magicWords = array(
        'filepath'                  => array( '0', 'DATEIPFAD:', 'FILEPATH:' ),
        'tag'                       => array( '0', 'erweiterung', 'tag' ),
        'hiddencat'                 => array( '1', '__VERSTECKTE_KATEGORIE__', '__WARTUNGSKATEGORIE__', '__HIDDENCAT__' ),
-       'pagesincategory'           => array( '1', 'SEITEN_IN_KATEGORIE', 'SEITEN_KAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
+       'pagesincategory'           => array( '1', 'SEITEN_IN_KATEGORIE', 'SEITEN_KAT', 'SEITENINKAT', 'PAGESINCATEGORY', 'PAGESINCAT' ),
        'pagesize'                  => array( '1', 'SEITENGRÖSSE', 'PAGESIZE' ),
-       'index'                     => array( '1', '__INDIZIEREN__', '__INDEX__' ),
-       'noindex'                   => array( '1', '__NICHT_INDIZIEREN__', '__NOINDEX__' ),
+       'index'                     => array( '1', '__INDEXIEREN__', '__INDIZIEREN__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__NICHT_INDEXIEREN__', '__KEIN_INDEX__', '__NICHT_INDIZIEREN__', '__NOINDEX__' ),
        'numberingroup'             => array( '1', 'BENUTZER_IN_GRUPPE', 'NUMBERINGROUP', 'NUMINGROUP' ),
        'staticredirect'            => array( '1', '__PERMANENTE_WEITERLEITUNG__', '__STATICREDIRECT__' ),
        'protectionlevel'           => array( '1', 'SCHUTZSTATUS', 'PROTECTIONLEVEL' ),
@@ -395,8 +349,57 @@ $magicWords = array(
        'url_query'                 => array( '0', 'ABFRAGE', 'QUERY' ),
        'defaultsort_noerror'       => array( '0', 'keinfehler', 'noerror' ),
        'defaultsort_noreplace'     => array( '0', 'keineersetzung', 'noreplace' ),
+       'pagesincategory_all'       => array( '0', 'alle', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'seiten', 'pages' ),
+       'pagesincategory_subcats'   => array( '0', 'unterkategorien', 'unterkats', 'subcats' ),
+       'pagesincategory_files'     => array( '0', 'dateien', 'files' ),
+);
+
+$datePreferences = array(
+       'default',
+       'dmyt',
+       'dmyts',
+       'dmy',
+       'ymd',
+       'ISO 8601'
+);
+
+$defaultDateFormat = 'dmy';
+
+$dateFormats = array(
+       'dmyt time' => 'H:i',
+       'dmyt date' => 'j. F Y',
+       'dmyt both' => 'j. M Y, H:i',
+
+       'dmyts time' => 'H:i:s',
+       'dmyts date' => 'j. F Y',
+       'dmyts both' => 'j. M Y, H:i:s',
+
+       'dmy time' => 'H:i',
+       'dmy date' => 'j. F Y',
+       'dmy both' => 'H:i, j. M Y',
+
+       'ymd time' => 'H:i',
+       'ymd date' => 'Y M j',
+       'ymd both' => 'H:i, Y M j',
+
+       'ISO 8601 time' => 'xnH:xni:xns',
+       'ISO 8601 date' => 'xnY-xnm-xnd',
+       'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns'
 );
 
+$capitalizeAllNouns = true;
+$bookstoreList = array(
+       'abebooks.de' => 'http://www.abebooks.de/servlet/BookSearchPL?ph=2&isbn=$1',
+       'amazon.de' => 'http://www.amazon.de/gp/search/field-isbn=$1',
+       'buch.de' => 'http://www.buch.de/shop/home/suche/?sswg=BUCH&sq=$1',
+       'Karlsruher Virtueller Katalog (KVK)' => 'http://www.ubka.uni-karlsruhe.de/kvk.html?SB=$1',
+       'Lehmanns Fachbuchhandlung' => 'http://www.lob.de/cgi-bin/work/suche?flag=new&stich1=$1'
+);
+
+$separatorTransformTable = array( ',' => '.', '.' => ',' );
+$linkTrail = '/^([äöüßa-z]+)(.*)$/sDu';
+
 $imageFiles = array(
        'button-bold'     => 'de/button_bold.png',
        'button-italic'   => 'de/button_italic.png',
@@ -452,7 +455,7 @@ $messages = array(
 
 'underline-always' => 'immer',
 'underline-never' => 'nie',
-'underline-default' => 'abhängig von der Browsereinstellung',
+'underline-default' => 'abhängig von der Benutzeroberfläche oder Browsereinstellung',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Schriftart für den Text im Bearbeitungsfenster:',
@@ -1587,7 +1590,7 @@ Dies kann nicht mehr rückgängig gemacht werden.',
 'saveusergroups' => 'Gruppenzugehörigkeit ändern',
 'userrights-groupsmember' => 'Mitglied von:',
 'userrights-groupsmember-auto' => 'Automatisch Mitglied von:',
-'userrights-groupsmember-type' => '$1',
+'userrights-groupsmember-type' => '$2',
 'userrights-groups-help' => 'Du kannst die Gruppenzugehörigkeit {{GENDER:$1|dieses Benutzers|dieser Benutzerin}} ändern:
 * Ein markiertes Kästchen bedeutet, dass {{GENDER:$1|der Benutzer|die Benutzerin}} Mitglied dieser Gruppe ist.
 * Ein nichtmarkiertes Kästchen bedeutet, dass {{GENDER:$1|der Benutzer|die Benutzerin}} nicht Mitglied dieser Gruppe ist.
@@ -1691,6 +1694,9 @@ Dies kann nicht mehr rückgängig gemacht werden.',
 'rightslogtext' => 'Dies ist das Logbuch der Änderungen der Benutzerrechte.',
 'rightslogentry' => 'änderte die Benutzerrechte für „$1“ von „$2“ zu „$3“',
 'rightslogentry-autopromote' => 'wurde automatisch von „$2“ zu „$3“ zugeordnet',
+'logentry-rights-rights' => '$1 änderte die Gruppenzugehörigkeit für $3 von $4 zu $5',
+'logentry-rights-rights-legacy' => '$1 änderte die Gruppenzugehörigkeit für $3',
+'logentry-rights-autopromote' => '$1 wurde automatisch von $4 zu $5 zugeordnet',
 'rightsnone' => '(–)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2314,7 +2320,7 @@ Siehe auch die Liste der [[Special:WantedCategories|gewünschten Kategorien]].',
 'linksearch-pat' => 'Suchmuster:',
 'linksearch-ns' => 'Namensraum:',
 'linksearch-ok' => 'Suchen',
-'linksearch-text' => 'Diese Spezialseite ermöglicht die Suche nach Seiten, in denen bestimmte Weblinks enthalten sind. Dabei können Platzhalter wie beispielsweise <code>*.beispiel.de</code> benutzt werden. Es muss mindestens eine Top-Level-Domain, z. B. „*.org“. angegeben werden. <br />Unterstützte Protokolle: <code>$1</code> (Diese bitte nicht bei der Suchanfrage angeben.)',
+'linksearch-text' => 'Diese Spezialseite ermöglicht die Suche nach Seiten, in denen bestimmte Weblinks enthalten sind. Dabei können Platzhalter wie beispielsweise <code>*.beispiel.de</code> benutzt werden. Es muss mindestens eine Top-Level-Domain, z. B. „*.org“. angegeben werden. <br />Unterstützte Protokolle: <code>$1</code> (Standard ist http, falls kein Protokoll angegeben ist.)',
 'linksearch-line' => '$1 ist verlinkt von $2',
 'linksearch-error' => 'Wildcards können nur am Anfang der URL verwendet werden.',
 
@@ -3176,7 +3182,7 @@ Das liegt wahrscheinlich an einem Link auf eine externe Seite.',
 
 # Info page
 'pageinfo-title' => 'Informationen zu „$1“',
-'pageinfo-not-current' => 'Diese Informationen können nur für die aktuelle Version angezeigt werden.',
+'pageinfo-not-current' => 'Diese Information kann leider nicht für alte Versionen zur Verfügung gestellt werden.',
 'pageinfo-header-basic' => 'Basisinformationen',
 'pageinfo-header-edits' => 'Bearbeitungsgeschichte',
 'pageinfo-header-restrictions' => 'Seitenschutz',
index 21e8271..bbc7bf7 100644 (file)
@@ -63,21 +63,21 @@ $specialPageAliases = array(
        'ChangePassword'            => array( 'ParolaBıvurnê', 'ParolaResetke' ),
        'ComparePages'              => array( 'PelaPêverke' ),
        'Confirmemail'              => array( 'EpostayAraştke' ),
-       'Contributions'             => array( 'İştiraxi' ),
+       'Contributions'             => array( 'İştiraqi' ),
        'CreateAccount'             => array( 'HesabVırazê' ),
-       'Deadendpages'              => array( 'PelaBêgıre' ),
-       'DeletedContributions'      => array( 'İştıraxêkeBesterneyayê' ),
+       'Deadendpages'              => array( 'PelaBıgirê' ),
+       'DeletedContributions'      => array( 'İştıraqêkeBesterneyayê' ),
        'Disambiguations'           => array( 'ManeoBin' ),
        'DoubleRedirects'           => array( 'DıletHeteneayış' ),
-       'EditWatchlist'             => array( 'ListeyaSeyriVurnayış' ),
+       'EditWatchlist'             => array( 'ListeyaTemaşiVurnayış' ),
        'Emailuser'                 => array( 'EpostayaKarberi' ),
        'Export'                    => array( 'Ateberde' ),
        'Fewestrevisions'           => array( 'TewrtaynRevizyon' ),
        'FileDuplicateSearch'       => array( 'KopyaydosyaCıgeyrayış', 'DıletdosyaCıgeyrayış' ),
        'Filepath'                  => array( 'RayaDosya', 'HerunaDosya', 'CayêDosya' ),
        'Import'                    => array( 'Azeredê', 'Atewrke' ),
-       'Invalidateemail'           => array( 'TesdiqêepostaBıterknê' ),
-       'BlockList'                 => array( 'ListeyêBLoki', 'IPBloki', 'Blokeyê_IP' ),
+       'Invalidateemail'           => array( 'EpostaAraştkerdışiBıterknê' ),
+       'BlockList'                 => array( 'ListeyêBloki', 'IPBloki', 'Blokeyê_IP' ),
        'LinkSearch'                => array( 'GreCıgeyrayış' ),
        'Listadmins'                => array( 'ListeyêXizmetkaran' ),
        'Listbots'                  => array( 'ListeyêBotan' ),
@@ -97,15 +97,15 @@ $specialPageAliases = array(
        'Mostlinkedcategories'      => array( 'KategoriyêkeCırêvêşiGreDeyayo' ),
        'Mostlinkedtemplates'       => array( 'ŞablonêkeCırêvêşiGreDeyayo' ),
        'Mostrevisions'             => array( 'TewrvêşiRevizyon' ),
-       'Movepage'                  => array( 'PelaAhuln' ),
-       'Mycontributions'           => array( 'İştırakeMe' ),
+       'Movepage'                  => array( 'PelaAhulne' ),
+       'Mycontributions'           => array( 'İştıraqeMe' ),
        'Mypage'                    => array( 'PelaMe' ),
-       'Mytalk'                    => array( 'PersiyeME' ),
+       'Mytalk'                    => array( 'PersiyeMe' ),
        'Myuploads'                 => array( 'BarkerdışeMe' ),
        'Newimages'                 => array( 'DosyeyêNewey', 'ResimêNewey' ),
        'Newpages'                  => array( 'PeleyeNewey' ),
-       'PasswordReset'             => array( 'ParolaReset' ),
-       'PermanentLink'             => array( 'DaimiGre' ),
+       'PasswordReset'             => array( 'ParolaResetkerdış' ),
+       'PermanentLink'             => array( 'GreyoDaimi' ),
        'Popularpages'              => array( 'PeleyêPopuleri' ),
        'Preferences'               => array( 'Tercihi' ),
        'Prefixindex'               => array( 'SerVerole' ),
@@ -116,13 +116,12 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'VurnayışêPeyêni' ),
        'Recentchangeslinked'       => array( 'GreyêVurnayışêPeyêni' ),
        'Revisiondelete'            => array( 'RevizyoniBesterne' ),
-       'RevisionMove'              => array( 'RewizyoniAhulne' ),
        'Search'                    => array( 'Cıgeyre' ),
        'Shortpages'                => array( 'PeleyêKılmi' ),
        'Specialpages'              => array( 'PeleyXısusi' ),
        'Statistics'                => array( 'İstatistiki' ),
        'Tags'                      => array( 'Etiketi' ),
-       'Unblock'                   => array( 'Bloqiwedarne' ),
+       'Unblock'                   => array( 'BloqiWedarne' ),
        'Uncategorizedcategories'   => array( 'KategoriyêkeKategorinêbiyê' ),
        'Uncategorizedimages'       => array( 'DosyeyêkeKategorinêbiyê' ),
        'Uncategorizedpages'        => array( 'PeleyêkeKategorinêbiyê' ),
@@ -155,7 +154,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__ESTENZARURET__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__ESTEN__', '__TOC__' ),
        'noeditsection'             => array( '0', '__TİMARKERDIŞÇINO__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__SERNAMEÇINO__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'AŞMİYANEWKİ', 'MEWCUDAŞMİ2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'AŞMİYANEWKİ1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'NAMEYAŞMDANEWKİ', 'CURRENTMONTHNAME' ),
@@ -355,11 +353,11 @@ $messages = array(
 
 'underline-always' => 'Tım',
 'underline-never' => 'Qet',
-'underline-default' => 'Qerar cıgeyrayoği dest dero',
+'underline-default' => 'Cild ya zi cıgeyrayoğo hesıbyaye',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Cayê vurnayışi de terzê nuştışi:',
-'editfont-default' => 'Qerar cıgeyrayoği dest dero',
+'editfont-default' => 'Cıgeyrayoğo hesıbyaye',
 'editfont-monospace' => 'Terzê nusteyê sabıtcagırewtoği',
 'editfont-sansserif' => 'Babetê Sans-serifi',
 'editfont-serif' => 'Babetê serifi',
@@ -441,7 +439,7 @@ $messages = array(
 
 'about' => 'Heqa',
 'article' => 'Wesiqe',
-'newwindow' => '(Window da newi de abena)',
+'newwindow' => '<br />(teqa da newi de abena/pençereyê newey de beno a)',
 'cancel' => 'Bıtexelne',
 'moredotdotdot' => 'Vêşi...',
 'mypage' => 'Pela mı',
@@ -509,7 +507,7 @@ $messages = array(
 'talkpage' => 'Ena pele sero werêne',
 'talkpagelinktext' => 'Mesac',
 'specialpage' => 'Pela xısusiye',
-'personaltools' => 'Haletê bexsi',
+'personaltools' => 'Hacetê şexsiy',
 'postcomment' => 'Qısımo newe',
 'articlepage' => 'Pela zerreki bıvêne',
 'talk' => 'Werênayış',
@@ -1011,7 +1009,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' => 'Pela "$1"\'i bıvurnê',
+'editing' => 'Şımayê kenê <font style="color:red">$1</font> bıvurnê',
 'creating' => "Pela $1'i vıraze",
 'editingsection' => 'Per da $1 de şımaye kenê ke leti bıvurnê',
 'editingcomment' => '$1 vuryeno (qısmo newe)',
@@ -1407,7 +1405,7 @@ Pe verbendi ''all:'', vaceyê xo bıvurni ki contenti hemi cıgeyro (pelanê mı
 'searchresultshead' => 'Cı geyre',
 'resultsperpage' => 'Serê pele  amarê cıkewtoğan:',
 'stub-threshold' => 'Baraj ke <a href="#" class="stub">stub link</a> ho şekil dano (bîtî):',
-'stub-threshold-disabled' => 'Deaktivya',
+'stub-threshold-disabled' => 'Astengın',
 'recentchangesdays' => 'Rocê ke vurnayışanê peyênan de bıasê:',
 'recentchangesdays-max' => 'Tewr zaf $1 {{PLURAL:$1|roc|roci}}',
 'recentchangescount' => 'Amarê vurnayışê ke hesıbyaye deye bımocneyê:',
@@ -1466,7 +1464,7 @@ $1 gani bınê no {{PLURAL:$1|karakter|karakter}} de bıbo.',
 'yourgender' => 'Cınsiyet:',
 'gender-unknown' => 'Cınsiyet nêvato',
 'gender-male' => 'Camêrd',
-'gender-female' => 'Cıni',
+'gender-female' => 'Cıniye',
 'prefs-help-gender' => 'keyfiyo: sofware qey adersê cinsiyet şuxulneno, no malumat umumiyo.',
 'email' => 'E-posta',
 'prefs-help-realname' => 'Nameyo raşt waştena şıma rê mendo.
@@ -1608,6 +1606,9 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'rightslogtext' => 'Ena listeyê loganê ke heqqa karbaranî mucneno.',
 'rightslogentry' => 'eza biyayişê grupî $1 ra $2 rê $3î bivurne',
 'rightslogentry-autopromote' => '$2 otomatikmen gırdkerdışi ra kerd $3.',
+'logentry-rights-rights' => '$1 qandê $3 rê ezayina grube $4 ra $5 vuriye',
+'logentry-rights-rights-legacy' => '$1 qandê $3 rê ezayina grube vuriye',
+'logentry-rights-autopromote' => '$1 otomatikmen $4 ra terfi bi ra $5',
 'rightsnone' => '(çino)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2153,7 +2154,7 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 'newpages' => 'Pelê newey',
 'newpages-username' => 'Nameyê karberi:',
 'ancientpages' => 'Wesiqeyê ke vurnayışê ciyê peyeni tewr kehani',
-'move' => 'Bere',
+'move' => 'Berden',
 'movethispage' => 'Ena pele bere',
 'unusedimagestext' => 'Enê dosyey estê, feqet zerrey yew pele de wedardey niyê.
 Xo vira mekerê ke, sıteyê webiê bini şenê direkt ebe URLi yew dosya ra gırê bê, u wına şenê verba gurênayışo feal de tiya hewna lista bê.',
@@ -2228,8 +2229,9 @@ hem zi bıewnê [[Special:WantedCategories|kategori yê ke waziyeni]].',
 'linksearch-pat' => 'bıgêr motif:',
 'linksearch-ns' => 'Cayênameyî:',
 'linksearch-ok' => 'Cı geyre',
-'linksearch-text' => 'joker ê zey "*.wikipedia.org"i karneno.<br />
-qaydeyê destek biyayeyi: <code>$1</code>',
+'linksearch-text' => 'Joker ê zey "*.wikipedia.org"i karneno.<br />
+Tewr tayn en cêra "*.org" wazêno. <br />
+qaydeyê destek biyayeyi: <code>$1</code> (Cı geyrayış de xo miyan enina ra yeweri de mefiye).',
 'linksearch-line' => '$1, $2 ra link biya',
 'linksearch-error' => 'jokeri têna nameyê makina ya serekini de aseni/eseni.',
 
@@ -2280,8 +2282,8 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed
 'emailuser-title-target' => 'Na E-postaya {{GENDER:$1|karberi}}ya',
 'emailuser-title-notarget' => 'E-postaya karberi',
 'emailpage' => 'karberi re e-posta bırışê',
-'emailpagetext' => 'No/na {{GENDER:$1|karber}}i re e-posta rıştış de şıma pê forma cêrıni şeni kar bıkerî.
-[[Special:Preferences|tercihanê şıma ye karberi]] de adresa e-posta ya ke şıma dayo, na adres qısmê adresa e-postayi de "kami ra" asena, no sebebi ra gırewtox/e eşkeno/a direk cewab bıdo şıma.',
+'emailpagetext' => 'Şıma şenê nê formê cêrêni nê {{GENDER:$1|karber}}i rê e-poste rıştış de bıgurenê.
+[[Special:Preferences|Tercihanê şımayê karberi]] de adresa e-posteya ke şıma daya, na adrese qısmê adresa e-postey de "kami ra" asena, no sebeb ra gırewtoğ şeno direkt cewab bıdero şıma.',
 'usermailererror' => 'xizmetê e-postayi xeta da:',
 'defemailsubject' => '"$1" ra e-postay {{SITENAME}} amê',
 'usermaildisabled' => 'E-mailê karberani kafiliyeya',
@@ -2612,7 +2614,7 @@ Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:',
 'whatlinkshere-hideredirs' => 'Hetenayışê $1',
 'whatlinkshere-hidetrans' => 'Açarnayışê $1',
 'whatlinkshere-hidelinks' => 'Greyê $1',
-'whatlinkshere-hideimages' => 'Gireyê resımi $1',
+'whatlinkshere-hideimages' => 'Linkanê resımi $1',
 'whatlinkshere-filters' => 'Avrêci',
 
 # Block/unblock
@@ -3590,16 +3592,16 @@ mw.loader.using( 'jquery.cookie', function() {
 
 # Info page
 'pageinfo-title' => 'Heq tê "$1"\'i',
-'pageinfo-not-current' => 'Melumat tenya qandê çımraviyarnayışê rocaney mocniyeno.',
+'pageinfo-not-current' => 'Qısur de mevêne, rewizyonanê verênan rê nê melumatan dayış mumkın niyo',
 'pageinfo-header-basic' => 'Seron zanayış',
-'pageinfo-header-edits' => 'Vurnayışi verêni',
-'pageinfo-header-restrictions' => 'Xısusiyetê pela',
-'pageinfo-header-properties' => 'Xısusiyetê pela',
-'pageinfo-display-title' => 'Asenge sernuşte',
+'pageinfo-header-edits' => 'Vurnayışê verêni',
+'pageinfo-header-restrictions' => 'Sıtarkerdışê pele',
+'pageinfo-header-properties' => 'Xısusiyetê pele',
+'pageinfo-display-title' => 'Sernuştey bımocne',
 'pageinfo-default-sort' => 'Hesıbyaye mırfeyo kılm',
 'pageinfo-length' => 'Derdeya pela (bayti heta)',
 'pageinfo-article-id' => 'Nımrey pela',
-'pageinfo-language' => 'Zerrey pera zıwani',
+'pageinfo-language' => 'Zıwanê zerreyê pele',
 'pageinfo-robot-policy' => 'Weziyetê motor de cıgeyrayışi',
 'pageinfo-robot-index' => 'İIndeksbiyayen',
 'pageinfo-robot-noindex' => 'İndeksnêbiyayen',
@@ -3624,9 +3626,9 @@ mw.loader.using( 'jquery.cookie', function() {
 'pageinfo-redirectsto' => 'Beno hetê',
 'pageinfo-redirectsto-info' => 'melumat',
 'pageinfo-contentpage' => 'Zey jû pela zerreki hesebiyena',
-'pageinfo-contentpage-yes' => 'E',
+'pageinfo-contentpage-yes' => 'Heya',
 'pageinfo-protect-cascading' => 'Sıtarkerdey tiya cı ra yenê war',
-'pageinfo-protect-cascading-yes' => 'E',
+'pageinfo-protect-cascading-yes' => 'Heya',
 'pageinfo-protect-cascading-from' => 'Sıtarkerdey cı ra yenê war',
 
 # Skin names
index 066df05..e3e50c2 100644 (file)
@@ -23,7 +23,6 @@
 
 $fallback = 'de';
 
-
 $namespaceNames = array(
        NS_MEDIA            => 'Medija',
        NS_SPECIAL          => 'Specialne',
@@ -53,20 +52,6 @@ $namespaceGenderAliases = array(
         NS_USER_TALK => array( 'male' => 'Diskusija_wužywarja', 'female' => 'Diskusija_wužywarki' ),
 );
 
-$datePreferences = array(
-       'default',
-       'dmy',
-       'ISO 8601',
-);
-
-$defaultDateFormat = 'dmy';
-
-$dateFormats = array(
-       'dmy time' => 'H:i',
-       'dmy date' => 'j. xg Y',
-       'dmy both' => 'j. xg Y, H:i',
-);
-
 $specialPageAliases = array(
        'Activeusers'               => array( 'Aktiwne_wužywarje' ),
        'Allmessages'               => array( 'Systemowe_powěsći' ),
@@ -158,6 +143,20 @@ $specialPageAliases = array(
        'Withoutinterwiki'          => array( 'Interwikije_feluju' ),
 );
 
+$datePreferences = array(
+       'default',
+       'dmy',
+       'ISO 8601',
+);
+
+$defaultDateFormat = 'dmy';
+
+$dateFormats = array(
+       'dmy time' => 'H:i',
+       'dmy date' => 'j. xg Y',
+       'dmy both' => 'j. xg Y, H:i',
+);
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Wótkaze pódšmarnuś:',
@@ -207,7 +206,7 @@ $messages = array(
 
 'underline-always' => 'pśecej',
 'underline-never' => 'žednje',
-'underline-default' => 'pó standarźe browsera',
+'underline-default' => 'Standard drastwy abo wobglědowaka',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Pismowy stil wobźěłowańskego póla:',
@@ -1421,6 +1420,9 @@ Móžoš toś ten bok wužywaś, aby slědk stajił swóje nastajenja na standar
 'rightslogtext' => 'To jo protokol wužywarskich pšawow.',
 'rightslogentry' => 'Pśisłušnosć ku kupce jo se za „$1“ změniła wót „$2“ na „$3“.',
 'rightslogentry-autopromote' => 'jo se awtomatiski wót $2 do $3 změnił',
+'logentry-rights-rights' => '$1 jo kupkowe cłonkojstwo za $3 z $4 do $5 změnił',
+'logentry-rights-rights-legacy' => '$1 jo kupkowe cłonkojstwo za $3 změnił',
+'logentry-rights-autopromote' => '$1 jo se awtomatiski wót $4 do $5 pówušył',
 'rightsnone' => '(nic)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2860,7 +2862,7 @@ W zespominanju dajo se pśicyna pódaś.',
 
 # Info page
 'pageinfo-title' => 'Informacije za bok "$1"',
-'pageinfo-not-current' => 'Informacije daju se jano za aktualnu wersiju zwobrazniś.',
+'pageinfo-not-current' => 'Bóžko njedaju se toś te informacije za stare wersije pódaś.',
 'pageinfo-header-basic' => 'Zakładne informacije',
 'pageinfo-header-edits' => 'Historiju wobźěłaś',
 'pageinfo-header-restrictions' => 'Šćit boka',
@@ -3588,6 +3590,7 @@ Móžoš teke [[Special:EditWatchlist|standardny wobźěłowański bok wužywaś
 'version-license' => 'Licenca',
 'version-poweredby-credits' => "Toś ten wiki spěchujo se wót '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'druge',
+'version-credits-summary' => 'Źěkujomy se slědujucym wósobam za jich pśinoski k [[Special:Version|MediaWiki]]',
 'version-license-info' => 'MediaWiki jo licha softwara: móžoš ju pód wuměnjenjami licence GNU General Public License, wózjawjeneje wót załožby Free Software Foundation, rozdźěliś a/abo změniś: pak pód wersiju 2 licence pak pód někakeju pózdźejšeju wersiju.
 
 MediaWiki rozdźěla se w naźeji, až buźo wužitny, ale BŹEZ GARANTIJE: samo bźez wopśimjoneje garantije PŚEDAWAJOBNOSĆI abo PŚIGÓDNOSĆI ZA WĚSTY ZAMĚR. Glědaj GNU general Public License za dalšne drobnostki.
index 3c31517..3525193 100644 (file)
@@ -8,6 +8,7 @@
  * @file
  *
  * @author AK
+ * @author Aitolos
  * @author Assassingr
  * @author Azimout
  * @author Badseed
@@ -41,7 +42,7 @@
  */
 
 /**
-  * Translation by Pasok Internet Volunteers
+  * Initial translation by Pasok Internet Volunteers
   * http://forum.pasok.gr
   * version 1.0 (initial release)
   *
@@ -180,37 +181,6 @@ $specialPageAliases = array(
        'Withoutinterwiki'          => array( 'ΧωρίςInterwiki' ),
 );
 
-$fallback8bitEncoding = 'iso-8859-7';
-$separatorTransformTable = array( ',' => '.', '.' => ',' );
-$linkTrail = '/^([a-zαβγδεζηθικλμνξοπρστυφχψωςΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩάέήίόύώϊϋΐΰΆΈΉΊΌΎΏΪΫ]+)(.*)$/sDu';
-
-
-$datePreferences = array(
-       'default',
-       'dmy',
-       'ISO 8601',
-);
-
-$defaultDateFormat = 'dmy';
-
-$datePreferenceMigrationMap = array(
-       'default',
-       'dmy',
-       'dmy',
-       'dmy'
-);
-
-$dateFormats = array(
-       'dmy time' => 'H:i',
-       'dmy date' => 'j xg Y',
-       'dmy both' => 'H:i, j xg Y',
-
-       'ISO 8601 time' => 'xnH:xni:xns',
-       'ISO 8601 date' => 'xnY-xnm-xnd',
-       'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
-);
-
-
 $magicWords = array(
        'redirect'                  => array( '0', '#ΑΝΑΚΑΤΕΥΘΥΝΣΗ', '#REDIRECT' ),
        'notoc'                     => array( '0', '__ΧΩΡΙΣΠΠ__', '__NOTOC__' ),
@@ -218,7 +188,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__ΜΕΠΠ__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__ΠΠ__', '__TOC__' ),
        'noeditsection'             => array( '0', '__ΧΩΡΙΣΕΠΕΞΕΝΟΤ__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__ΧΩΡΙΣΚΕΦΑΛΙΔΑ__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'ΤΡΕΧΩΝΜΗΝΑΣ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'ΤΡΕΧΩΝΜΗΝΑΣ1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'ΤΡΕΧΩΝΜΗΝΑΣΟΝΟΜΑ', 'CURRENTMONTHNAME' ),
@@ -351,6 +320,35 @@ $magicWords = array(
        'protectionlevel'           => array( '1', 'ΕΠΙΠΕΔΟΠΡΟΣΤΑΣΙΑΣ', 'PROTECTIONLEVEL' ),
 );
 
+$fallback8bitEncoding = 'iso-8859-7';
+$separatorTransformTable = array( ',' => '.', '.' => ',' );
+$linkTrail = '/^([a-zαβγδεζηθικλμνξοπρστυφχψωςΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩάέήίόύώϊϋΐΰΆΈΉΊΌΎΏΪΫ]+)(.*)$/sDu';
+
+$datePreferences = array(
+       'default',
+       'dmy',
+       'ISO 8601',
+);
+
+$defaultDateFormat = 'dmy';
+
+$datePreferenceMigrationMap = array(
+       'default',
+       'dmy',
+       'dmy',
+       'dmy'
+);
+
+$dateFormats = array(
+       'dmy time' => 'H:i',
+       'dmy date' => 'j xg Y',
+       'dmy both' => 'H:i, j xg Y',
+
+       'ISO 8601 time' => 'xnH:xni:xns',
+       'ISO 8601 date' => 'xnY-xnm-xnd',
+       'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+);
+
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Υπογράμμιση συνδέσμων:',
@@ -531,7 +529,7 @@ $messages = array(
 'history_short' => 'Ιστορικό',
 'updatedmarker' => 'Ενημερωμένα από την τελευταία επίσκεψή μου',
 'printableversion' => 'Εκτυπώσιμη έκδοση',
-'permalink' => 'Î\9cÏ\8cνιμος σύνδεσμος',
+'permalink' => 'ΣÏ\84αθεÏ\81Ï\8cς σύνδεσμος',
 'print' => 'Εκτύπωση',
 'view' => 'Προβολή',
 'edit' => 'Επεξεργασία',
@@ -556,7 +554,7 @@ $messages = array(
 'articlepage' => 'Εμφάνιση σελίδας κειμένου',
 'talk' => 'Συζήτηση',
 'views' => 'Εμφανίσεις',
-'toolbox' => 'Î\95Ï\81γαλεία',
+'toolbox' => 'Î\95Ï\81γαλειοθήκη',
 'userpage' => 'Εμφάνιση σελίδας χρήστη',
 'projectpage' => 'Εμφάνιση σελίδας βοήθειας',
 'imagepage' => 'Εμφάνιση σελίδας αρχείου',
@@ -1167,7 +1165,7 @@ $2
 Μπορεί να υπάρχουν λεπτομέρειες στο [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} αρχείο απόκρυψης].
 Μπορείτε ακόμα [$1 να δείτε την έκδοση] αν επιθυμείτε να συνεχίσετε.",
 'rev-deleted-text-view' => "Αυτή η αναθεώρηση της σελίδας έχει '''διαγραφεί'''.
-Μπορείτε να την δείτε, λεπτομέρειες μπορούν να βρεθούν στο [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} αρχείο καταγραφής διαγραφών].",
+Μπορείτε να την δείτε. Λεπτομέρειες μπορούν να βρεθούν στο [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} αρχείο καταγραφής διαγραφών].",
 'rev-suppressed-text-view' => "Αυτή η έκδοση της σελίδας έχει '''κατασταλλεί'''.
 Μπορείτε να τη δείτε. Λεπτομέρειες μπορούν να βρεθούν στο [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} αρχείο καταστολής].",
 'rev-deleted-no-diff' => "Δεν μπορείτε να δείτε αυτή τη διαφορά επειδή μια από τις αναθεωρήσεις έχει '''διαγραφεί'''.
@@ -2245,7 +2243,7 @@ $1',
 'emailuser-title-target' => 'Αποστολή e-mail {{GENDER:$1|στο|στη}} χρήστη',
 'emailuser-title-notarget' => 'Αποστολή e-mail σε χρήστη',
 'emailpage' => 'Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείο στο χρήστη',
-'emailpagetext' => 'Συπληρώνοντας την παρακάτω φόρμα θα στείλετε ένα μήνυμα εφόσον έχετε δηλώσει μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου στις [[Special:Preferences|προτιμήσεις χρήστη]]. Αυτή θα εμφανιστεί ως διεύθυνση αποστολέα του μηνύματος, ούτως ώστε ο παραλήπτης να μπορέσει να σας απαντήσει.',
+'emailpagetext' => 'Συμπληρώνοντας την παρακάτω φόρμα θα στείλετε ένα μήνυμα εφόσον έχετε δηλώσει μια έγκυρη διεύθυνση ηλεκτρονικού ταχυδρομείου στις [[Special:Preferences|προτιμήσεις χρήστη]]. Αυτή θα εμφανιστεί ως διεύθυνση αποστολέα του μηνύματος, ούτως ώστε ο παραλήπτης να μπορέσει να σας απαντήσει.',
 'usermailererror' => 'Σφάλμα ηλεκτρονικού ταχυδρομείου:',
 'defemailsubject' => '{{SITENAME}} e-mail από τον χρήστη "$1"',
 'usermaildisabled' => 'To e-mail χρήστη είναι απενεργοποιημένο',
@@ -2956,7 +2954,7 @@ $1',
 'tooltip-search-go' => 'Πήγαινε σε μια σελίδα με το ακριβές όνομα εάν υπάρχει',
 'tooltip-search-fulltext' => 'Αναζήτηση για αυτό το κείμενο',
 'tooltip-p-logo' => 'Αρχική σελίδα',
-'tooltip-n-mainpage' => 'Î\94είÏ\84ε Ï\84ην Î\91ρχική σελίδα',
+'tooltip-n-mainpage' => 'Î\94είÏ\84ε Ï\84ην Î±ρχική σελίδα',
 'tooltip-n-mainpage-description' => 'Επισκεφθείτε την κύρια σελίδα',
 'tooltip-n-portal' => 'Σχετικά με το Wiκi - πώς μπορείτε να βοηθήσετε, πού μπορείτε να απευθυνθείτε',
 'tooltip-n-currentevents' => 'Πληροφορίες για πρόσφατα γεγονότα',
@@ -3050,6 +3048,7 @@ $1',
 
 # Info page
 'pageinfo-title' => 'Πληροφορίες για "$1"',
+'pageinfo-not-current' => 'Μας συγχωρείτε, είναι αδύνατο να παράσχουμε αυτή την πληροφορία για παλιές αναθεωρήσεις.',
 'pageinfo-header-basic' => 'Βασικές πληροφορίες',
 'pageinfo-header-edits' => 'Ιστορικό επεξεργασίας',
 'pageinfo-header-restrictions' => 'Προστασία σελίδας',
@@ -3058,10 +3057,30 @@ $1',
 'pageinfo-default-sort' => 'Προεπιλεγμένο κλειδί ταξινόμησης',
 'pageinfo-length' => 'Μήκος σελίδας (σε bytes)',
 'pageinfo-article-id' => 'Αναγνωριστικό σελίδας',
+'pageinfo-language' => 'Γλώσσα σελίδας περιεχομένου',
+'pageinfo-robot-policy' => 'Στάτους μηχανής αναζήτησης',
 'pageinfo-views' => 'Αριθμός προβολών',
-'pageinfo-watchers' => 'Αριθμός παρατηρητών',
-'pageinfo-edits' => 'Αριθμός επεξεργασιών',
-'pageinfo-authors' => 'Αριθμός ξεχωριστών συγγραφέων',
+'pageinfo-watchers' => 'Αριθμός παρατηρητών σελίδας',
+'pageinfo-redirects-name' => 'Ανακατευθύνσεις σε αυτή τη σελίδα',
+'pageinfo-redirects-value' => '$1',
+'pageinfo-subpages-name' => 'Υποσελίδες αυτής της σελίδας',
+'pageinfo-firstuser' => 'Δημιουργός της σελίδας',
+'pageinfo-firsttime' => 'Ημερομηνία δημιουργίας της σελίδας',
+'pageinfo-lastuser' => 'Τελευταίος συντάκτης',
+'pageinfo-lasttime' => 'Ημερομηνία τελευταίας επεξεργασίας',
+'pageinfo-edits' => 'Συνολικός αριθμός επεξεργασιών',
+'pageinfo-authors' => 'Συνολικός αριθμός διαφορετικών συντακτών',
+'pageinfo-recent-edits' => 'Πρόσφατος αριθμός επεξεργασιών (σε διάστημα &1)',
+'pageinfo-recent-authors' => 'Πρόσφατος αριθμός μοναδικών συντακτών',
+'pageinfo-magic-words' => '{{PLURAL:$1|Μαγική λέξη|Μαγικές λέξεις}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Κρυφή κατηγορία|Κρυφές κατηγορίες}} ($1)',
+'pageinfo-templates' => 'Ενσωματωμένα {{PLURAL:$1|πρότυπο|πρότυπα}} ($1)',
+'pageinfo-toolboxlink' => 'Πληροφορίες σελίδας',
+'pageinfo-redirectsto' => 'Ανακατευθύνσεις σε',
+'pageinfo-redirectsto-info' => 'πληροφορίες',
+'pageinfo-contentpage' => 'Υπολογίζονται ως σελίδες περιεχομένου',
+'pageinfo-contentpage-yes' => 'Ναι',
+'pageinfo-protect-cascading-yes' => 'Ναι',
 
 # Skin names
 'skinname-standard' => 'Κλασσικό',
index 832f2c6..ab5e6a3 100644 (file)
@@ -683,7 +683,7 @@ XHTML id names.
 
 'underline-always'  => 'Always',
 'underline-never'   => 'Never',
-'underline-default' => 'Browser default',
+'underline-default' => 'Skin or browser default',
 
 # Font style option in Special:Preferences
 'editfont-style'     => 'Edit area font style:',
@@ -772,8 +772,8 @@ XHTML id names.
 'newwindow'     => '(opens in new window)',
 'cancel'        => 'Cancel',
 'moredotdotdot' => 'More...',
-'mypage'        => 'My page',
-'mytalk'        => 'My talk',
+'mypage'        => 'Page',
+'mytalk'        => 'Talk',
 'anontalk'      => 'Talk for this IP address',
 'navigation'    => 'Navigation',
 'and'           => '&#32;and',
@@ -1811,7 +1811,7 @@ Note that their indexes of {{SITENAME}} content may be out of date.',
 # Preferences page
 'preferences'                   => 'Preferences',
 'preferences-summary'           => '', # do not translate or duplicate this message to other languages
-'mypreferences'                 => 'My preferences',
+'mypreferences'                 => 'Preferences',
 'prefs-edits'                   => 'Number of edits:',
 'prefsnologin'                  => 'Not logged in',
 'prefsnologintext'              => 'You must be <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} logged in]</span> to set user preferences.',
@@ -2048,11 +2048,14 @@ Your e-mail address is not revealed when other users contact you.',
 'right-passwordreset'         => 'View password reset e-mails',
 
 # User rights log
-'rightslog'                  => 'User rights log',
-'rightslogtext'              => 'This is a log of changes to user rights.',
-'rightslogentry'             => 'changed group membership for $1 from $2 to $3',
-'rightslogentry-autopromote' => 'was automatically promoted from $2 to $3',
-'rightsnone'                 => '(none)',
+'rightslog'                     => 'User rights log',
+'rightslogtext'                 => 'This is a log of changes to user rights.',
+'rightslogentry'                => 'changed group membership for $1 from $2 to $3',
+'rightslogentry-autopromote'    => 'was automatically promoted from $2 to $3',
+'logentry-rights-rights'        => '$1 changed group membership for $3 from $4 to $5',
+'logentry-rights-rights-legacy' => '$1 changed group membership for $3',
+'logentry-rights-autopromote'   => '$1 was automatically promoted from $4 to $5',
+'rightsnone'                    => '(none)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read'                 => 'read this page',
@@ -2754,7 +2757,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'linksearch-ok'      => 'Search',
 'linksearch-text'    => 'Wildcards such as "*.wikipedia.org" may be used.
 Needs at least a top-level domain, for example "*.org".<br />
-Supported protocols: <code>$1</code> (do not add any of these in your search).',
+Supported protocols: <code>$1</code> (defaults to http:// if no protocol is specified).',
 'linksearch-line'    => '$1 is linked from $2',
 'linksearch-error'   => 'Wildcards may appear only at the start of the hostname.',
 
@@ -2842,7 +2845,7 @@ The e-mail address you entered in [[Special:Preferences|your user preferences]]
 # Watchlist
 'watchlist'            => 'My watchlist',
 'watchlist-summary'    => '', # do not translate or duplicate this message to other languages
-'mywatchlist'          => 'My watchlist',
+'mywatchlist'          => 'Watchlist',
 'watchlistfor2'        => 'For $1 $2',
 'nowatchlist'          => 'You have no items on your watchlist.',
 'watchlistanontext'    => 'Please $1 to view or edit items on your watchlist.',
@@ -3112,7 +3115,7 @@ $1',
 'contributions'         => 'User contributions',
 'contributions-summary' => '', # do not translate or duplicate this message to other languages
 'contributions-title'   => 'User contributions for $1',
-'mycontris'             => 'My contributions',
+'mycontris'             => 'Contributions',
 'contribsub2'           => 'For $1 ($2)',
 'nocontribs'            => 'No changes were found matching these criteria.',
 'uctop'                 => '(top)',
@@ -3158,7 +3161,7 @@ The latest block log entry is provided below for reference:',
 'whatlinkshere-hideredirs' => '$1 redirects',
 'whatlinkshere-hidetrans'  => '$1 transclusions',
 'whatlinkshere-hidelinks'  => '$1 links',
-'whatlinkshere-hideimages' => '$1 image links',
+'whatlinkshere-hideimages' => '$1 file links',
 'whatlinkshere-filters'    => 'Filters',
 
 # Block/unblock
@@ -3744,7 +3747,7 @@ This is probably caused by a link to a blacklisted external site.',
 # Info page
 'pageinfo-header'              => '-', # do not translate or duplicate this message to other languages
 'pageinfo-title'               => 'Information for "$1"',
-'pageinfo-not-current'         => 'Information may only be displayed for the current revision.',
+'pageinfo-not-current'         => 'Sorry, it\'s impossible to provide this information for old revisions.',
 'pageinfo-header-basic'        => 'Basic information',
 'pageinfo-header-edits'        => 'Edit history',
 'pageinfo-header-restrictions' => 'Page protection',
index 894f8d5..7121523 100644 (file)
@@ -143,7 +143,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Lastaj_ŝanĝoj' ),
        'Recentchangeslinked'       => array( 'Rilataj_ŝanĝoj' ),
        'Revisiondelete'            => array( 'Forigi_revizion' ),
-       'RevisionMove'              => array( 'Movi_revizion' ),
        'Search'                    => array( 'Serĉi' ),
        'Shortpages'                => array( 'Mallongaj_paĝoj' ),
        'Specialpages'              => array( 'Specialaj_paĝoj' ),
@@ -181,7 +180,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__FI__', '__FORTUINDEKSON__', '__FT__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__I__', '__T__', '__INDEKSO__', '__TOC__' ),
        'noeditsection'             => array( '0', '__SRS__', '__NES__', '__SENREDAKTISEKCIOJN__', '__SENREDAKTISEKCION__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__SENTITOLO__', '__NH__', '__ST__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'NUNAMONATO', 'NUNAMONATO2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'NUNAMONATO1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'NUNAMONATNOMO', 'NUNAMONATONOMO', 'NUNAMONATANOMO', 'CURRENTMONTHNAME' ),
@@ -360,7 +358,7 @@ $messages = array(
 
 'underline-always' => 'Ĉiam',
 'underline-never' => 'Neniam',
-'underline-default' => 'Defaŭlte laŭ foliumilo',
+'underline-default' => 'Pravaloro laŭ foliumilo',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Tipara stilo de redakta tekstujo',
@@ -468,7 +466,7 @@ $messages = array(
 'vector-action-protect' => 'Protekti',
 'vector-action-undelete' => 'Malforigi',
 'vector-action-unprotect' => 'Ŝanĝi protekadon',
-'vector-simplesearch-preference' => 'Ebligi plibonigitajn serĉajn sugestojn (nur Vektora etoso)',
+'vector-simplesearch-preference' => 'Ebligi simpligitan serĉan strion (nur Vektora etoso)',
 'vector-view-create' => 'Krei',
 'vector-view-edit' => 'Redakti',
 'vector-view-history' => 'Vidi historion',
@@ -694,8 +692,9 @@ Peto: $2',
 'protectedpagetext' => 'Tiu ĉi paĝo estas ŝlosita por malebligi redaktadon.',
 'viewsourcetext' => 'Vi povas rigardi kaj kopii la fonton de la paĝo:',
 'viewyourtext' => "Vi povas vidi kaj kopii la fonton de '''viaj redaktoj''' al ĉi tiu paĝo:",
-'protectedinterface' => 'Ĉi tiu paĝo provizas interfacan tekston por la softvaro, kaj estas ŝlosita por malabeligi misuzon.',
-'editinginterface' => "'''Atentu:''' Vi redaktas paĝon, kiu estas uzata kiel interfaca teksto por la rogramaro. Ŝanĝoj de ĉi tiu teksto povas ŝanĝi aspekton de la interfaco por aliaj uzantoj. Por tradukojn, bonvolu uzi [//translatewiki.net/wiki/Main_Page?setlang=eo translatewiki.net], la MediaWiki-projekton por lingvigaj versioj.",
+'protectedinterface' => 'Ĉi tiu paĝo provizas interfacan tekston por la softvaro, kaj estas ŝlosita por malebligi misuzon.
+Por aldoni aŭ ŝanĝi tradukojn por ĉiuj vikioj, bonvolu uzi [//translatewiki.net/ translatewiki.net], la projekto por provizi tradukojn por MediaWiki.',
+'editinginterface' => "'''Atentu:''' Vi redaktas paĝon, kiu estas uzata kiel interfaca teksto por la programaro. Ŝanĝoj de ĉi tiu teksto povas ŝanĝi aspekton de la interfaco por aliaj uzantoj sur ĉi tiu vikio. Por aldoni aŭ ŝanĝi tradukojn, bonvolu uzi [//translatewiki.net/ translatewiki.net], la MediaWiki-projekton por lingvigaj versioj.",
 'sqlhidden' => '(SQL serĉomendo kaŝita)',
 'cascadeprotected' => 'Ĉi tiu paĝo estas protektita kontraŭ redaktado, ĉar ĝi estas inkludita en la {{PLURAL:$1|sekvan paĝon, kiu|sekvajn paĝojn, kiuj}} estas {{PLURAL:$1|protektata|protektataj}} kun la "kaskada" opcio turnita sur:
 $2',
@@ -979,7 +978,7 @@ Vi povas [[Special:Search/{{PAGENAME}}|serĉi ĉi tiun paĝtitolon]] en aliaj pa
 aŭ [{{fullurl:{{FULLPAGENAME}}|action=edit}} redakti ĉi tiun paĝon]</span>.',
 'noarticletext-nopermission' => 'Estas neniom da teksto en ĉi tiu paĝo.
 Vi povas [[Special:Search/{{PAGENAME}}|serĉi ĉi tiun paĝan titolon]] en aliaj paĝoj,
-aŭ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} serĉi la rilatajn protokolojn]</span>.',
+aŭ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} serĉi la rilatajn protokolojn]</span>, sed vi ne rajtas krei ĉi tiun paĝon.',
 'missing-revision' => 'La revizio n-ro $1 de la paĝo nomata "{{PAGENAME}}" ne ekzistas.
 
 La kutima kaŭzo estas sekvi malaktualan historio-ligilon al paĝo forviŝita.
@@ -994,7 +993,7 @@ La lasta protokolero estas jene montrata por via referenco:',
 * '''Interreta Esplorilo''': Premu ''Stir'' klakante ''Refreŝu'', aŭ premu ''Stir-F5'' 
 * '''Opera:''' Nuligi la kaŝmemoro en ''Iloj → Preferoj''",
 'usercssyoucanpreview' => "'''Konsileto:''' Uzu la butonon \"Antaŭrigardi\" por provi vian novan CSS-kodon antaŭ konservado.",
-'userjsyoucanpreview' => "'''Konsileto:''' Uzu la butonon \"Antaŭrigard\" por provi vian novan JS-kodon antaŭ konservado.",
+'userjsyoucanpreview' => "'''Konsileto:''' Uzu la butonon \"{{int:showpreview}}\" por provi vian novan JS-kodon antaŭ konservado.",
 'usercsspreview' => "'''Notu ke vi nur antaŭvidas vian uzanto-CSS.
 Ĝi ne jam estis konservita!'''",
 'userjspreview' => "'''Memoru ke vi nun nur provas kaj antaŭrigardas vian uzantan javaskripton, ĝi ne estas jam konservita'''",
@@ -1007,7 +1006,7 @@ Rememoru ke individuaj .css-aj kaj .js-aj paĝoj uzas minusklan titolon, ekz. {{
 'note' => "'''Noto:'''",
 'previewnote' => "'''Memoru, ke ĉi tio estas nur antaŭrigardo.''' 
 Viaj ŝanĝoj ne ankoraŭ estas konservitaj!",
-'continue-editing' => 'Redaktu plu',
+'continue-editing' => 'Iru al redakta spaco',
 'previewconflict' => 'La jena antaŭrigardo montras la tekston el la supra tekstujo,
 kiel ĝi aperos se vi elektos konservi la paĝon.',
 'session_fail_preview' => "'''Ni ne povas procezi vian redakton pro perdo de seancaj datenoj.
@@ -1441,7 +1440,7 @@ Jen hazarde generita valoro por via uzo: $1',
 'timezoneregion-indian' => 'Hinda Oceano',
 'timezoneregion-pacific' => 'Pacifiko',
 'allowemail' => 'Rajtigi retmesaĝojn de aliaj uzantoj',
-'prefs-searchoptions' => 'Serĉaj opcioj',
+'prefs-searchoptions' => 'Serĉu',
 'prefs-namespaces' => 'Nomspacoj',
 'defaultns' => 'Alimaniere, traserĉi la jenajn nomspacojn:',
 'default' => 'defaŭlte',
@@ -1852,7 +1851,7 @@ Se la problemo kontinuas, kontaku [[Special:ListUsers/sysop|sisteman administran
 'backend-fail-internal' => 'Nekonata eraro okazis en interna konservujo "$1".',
 'backend-fail-contenttype' => 'Ne eblis determini la enhavo-tipo de la dosiero por konservi ĉe "$1".',
 'backend-fail-batchsize' => 'Interna konservujo estis donita komandaron de $1 {{PLURAL:$1|dosiera operacio|dosieraj operacioj}}; la limo estas $2 {{PLURAL:$2|operacio|operacioj}}.',
-'backend-fail-usable' => 'Ne eblis skribi dosieron "$1" pro malsufiĉaj permesoj aŭ mankantaj dosierujoj.',
+'backend-fail-usable' => 'Ne eblis legi aŭ skribi dosieron "$1" pro malsufiĉaj permesoj aŭ mankantaj dosierujoj.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Ne eblis konekti la protokolan datumbazon por la ekstera konservujo "$1".',
@@ -3094,6 +3093,7 @@ Datoj de versioj kaj nomoj de redaktantoj estos preservitaj.
 
 # Info page
 'pageinfo-title' => 'Informoj por "$1"',
+'pageinfo-not-current' => 'Informoj povas esti montritaj nur por la nuna versio',
 'pageinfo-header-basic' => 'Baza informo',
 'pageinfo-header-edits' => 'Historio de redaktoj',
 'pageinfo-header-restrictions' => 'Protektado de la paĝo',
index c863262..a52f812 100644 (file)
@@ -118,7 +118,6 @@ $namespaceGenderAliases = array(
        NS_USER_TALK => array( 'male' => 'Usuario_Discusión', 'female' => 'Usuaria_Discusión' ),
 );
 
-
 $specialPageAliases = array(
        'Activeusers'               => array( 'UsuariosActivos' ),
        'Allmessages'               => array( 'TodosLosMensajes' ),
@@ -188,7 +187,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'CambiosRecientes', 'Cambios_recientes' ),
        'Recentchangeslinked'       => array( 'CambiosEnEnlazadas', 'Cambios_en_enlazadas' ),
        'Revisiondelete'            => array( 'BorrarRevisión', 'Borrar_revisión' ),
-       'RevisionMove'              => array( 'MoverRevision' ),
        'Search'                    => array( 'Buscar' ),
        'Shortpages'                => array( 'PáginasCortas', 'Páginas_cortas' ),
        'Specialpages'              => array( 'PáginasEspeciales', 'Páginas_especiales' ),
@@ -226,7 +224,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__FORZAR_TDC__', '__FORZARTDC__', '__FORZARTOC__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__TDC__', '__TOC__' ),
        'noeditsection'             => array( '0', '__NO_EDITAR_SECCIÓN__', '__NOEDITARSECCIÓN__', '__NOEDITARSECCION__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__SIN_TÍTULO__', '__SINTÍTULO__', '__NOTÍTULO__', '__NOTITULO__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'MESACTUAL', 'MESACTUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'MESACTUAL1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'MESACTUALCOMPLETO', 'NOMBREMESACTUAL', 'CURRENTMONTHNAME' ),
@@ -322,8 +319,8 @@ $magicWords = array(
        'raw'                       => array( '0', 'SINFORMATO', 'SINPUNTOS', 'RAW:' ),
        'displaytitle'              => array( '1', 'MOSTRARTÍTULO', 'MOSTRARTITULO', 'DISPLAYTITLE' ),
        'rawsuffix'                 => array( '1', 'SF', 'R' ),
-       'newsectionlink'            => array( '1', '__VINCULARANUEVASECCION__', 'VÍNCULARANUEVASECCIÓN__', '__NEWSECTIONLINK__' ),
-       'nonewsectionlink'          => array( '1', '__NOVINCULARANUEVASECCION__', 'NOVÍNCULARANUEVASECCIÓN__', '__NONEWSECTIONLINK__' ),
+       'newsectionlink'            => array( '1', '__VINCULARANUEVASECCION__', '__ENLACECREARSECCIÓN__', '__NEWSECTIONLINK__' ),
+       'nonewsectionlink'          => array( '1', '__NOVINCULARANUEVASECCION__', '__SINENLACECREARSECCIÓN__', '__NONEWSECTIONLINK__' ),
        'currentversion'            => array( '1', 'VERSIONACTUAL', 'VERSIÓNACTUAL', 'CURRENTVERSION' ),
        'urlencode'                 => array( '0', 'CODIFICARURL:', 'URLENCODE:' ),
        'currenttimestamp'          => array( '1', 'MARCADEHORAACTUAL', 'CURRENTTIMESTAMP' ),
@@ -409,7 +406,7 @@ $messages = array(
 
 'underline-always' => 'Siempre',
 'underline-never' => 'Nunca',
-'underline-default' => 'Valor predeterminado del navegador',
+'underline-default' => 'Aspecto (skin) o navegador predeterminado',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Estilo de tipografía del área de edición:',
@@ -1055,8 +1052,8 @@ La última entrada del registro de bloqueos se proporciona debajo para mayor ref
 'userinvalidcssjstitle' => "'''Aviso:''' No existe la skin «$1». Recuerda que las páginas personalizadas ''.css'' y ''.js'' tienen un título en minúsculas. Por ejemplo, {{ns:user}}:Ejemplo/vector.css en vez de {{ns:user}}:Ejemplo/Vector.css.",
 'updated' => '(Actualizado)',
 'note' => "'''Nota:'''",
-'previewnote' => "'''¡Recuerda que esto es solo una previsualización.'''
-¡Tus cambios aún no se ha guardado!",
+'previewnote' => "'''Recuerda que esto es solo una previsualización.'''
+¡Tus cambios aún no se han guardado!",
 'continue-editing' => 'Ir al área de edición',
 'previewconflict' => 'Esta previsualización refleja el texto en el área de edición superior como aparecerá una vez guardados los cambios.',
 'session_fail_preview' => "'''Lo sentimos, no pudimos procesar la edición debido a una pérdida de los datos de sesión.'''
@@ -1666,6 +1663,9 @@ 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-legacy' => '$1 ha cambiado la pertenencia a grupos de $3',
+'logentry-rights-autopromote' => '$1 fue promocionado automáticamente de $4 a $5',
 'rightsnone' => '(ninguno)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2291,8 +2291,8 @@ Véase también las [[Special:WantedCategories|categorías requeridas]].',
 'linksearch-ns' => 'Espacio de nombre:',
 'linksearch-ok' => 'Buscar',
 'linksearch-text' => 'Se pueden usar caracteres comodín como "*.wikipedia.org".
-Es necesario, por lo menos, un dominio de nivel, por ejemplo "*.org".<br />
-Protocolos soportados: <code>$1</code> (no añada ninguno de estos en su búsqueda).',
+Es necesario, por lo menos, un dominio de alto nivel, por ejemplo "*.org".<br />
+Protocolos soportados: <code>$1</code> (si no se especidica ninguno, el protocolo por defecto es http://).',
 'linksearch-line' => '$1 enlazado desde $2',
 'linksearch-error' => 'Los comodines sólo pueden aparecer al principio del nombre de sitio.',
 
@@ -2625,9 +2625,9 @@ $1',
 'blanknamespace' => '(Principal)',
 
 # Contributions
-'contributions' => 'Contribuciones del usuario',
+'contributions' => 'Contribuciones {{GENDER:{{BASEPAGENAME}}|del usuario|de la usuaria}}',
 'contributions-title' => 'Contribuciones {{GENDER:$1|del usuario|de la usuaria}} $1',
-'mycontris' => 'Contribuciones',
+'mycontris' => 'Mis contribuciones',
 'contribsub2' => '$1 ($2)',
 'nocontribs' => 'No se encontraron cambios que cumplieran estos criterios.',
 'uctop' => '(última edición)',
@@ -2667,7 +2667,7 @@ A continuación se muestra la última entrada del registro de bloqueos para mayo
 'whatlinkshere-hideredirs' => '$1 redirecciones',
 'whatlinkshere-hidetrans' => '$1 inclusiones',
 'whatlinkshere-hidelinks' => '$1 enlaces',
-'whatlinkshere-hideimages' => '$1 enlaces a imágenes',
+'whatlinkshere-hideimages' => '$1 enlaces a archivos',
 'whatlinkshere-filters' => 'Filtros',
 
 # Block/unblock
@@ -3162,7 +3162,7 @@ Esto podría estar causado por un enlace a un sitio externo incluido en la lista
 
 # Info page
 'pageinfo-title' => 'Información para «$1»',
-'pageinfo-not-current' => 'Únicamente se puede mostrar la información para la revisión actual.',
+'pageinfo-not-current' => 'Lo sentimos, no es posible mostrar esta información para las revisiones antiguas.',
 'pageinfo-header-basic' => 'Información básica',
 'pageinfo-header-edits' => 'Historial de ediciones',
 'pageinfo-header-restrictions' => 'Protección de página',
index 3c03893..a490b8c 100644 (file)
@@ -275,7 +275,7 @@ $messages = array(
 'faqpage' => 'Project:Maiz egindako galderak',
 
 # Vector skin
-'vector-action-addsection' => 'Mintzagaia gehitu',
+'vector-action-addsection' => 'Gehitu atala',
 'vector-action-delete' => 'Ezabatu',
 'vector-action-move' => 'Mugitu',
 'vector-action-protect' => 'Babestu',
index 078b34f..3b321b4 100644 (file)
@@ -39,6 +39,9 @@
  * @author محک
  */
 
+$rtl = true;
+$fallback8bitEncoding = 'windows-1256';
+
 $namespaceNames = array(
        NS_MEDIA            => 'مدیا',
        NS_SPECIAL          => 'ویژه',
@@ -88,7 +91,7 @@ $specialPageAliases = array(
        'DeletedContributions'      => array( 'مشارکت‌های_حذف_شده' ),
        'Disambiguations'           => array( 'ابهام‌زدایی' ),
        'DoubleRedirects'           => array( 'تغییرمسیرهای_دوتایی' ),
-       'EditWatchlist'             => array( 'ویرایش_پی‌گیری‌ها' ),
+       'EditWatchlist'             => array( 'Ù\88Û\8cراÛ\8cØ´_Ù\81Ù\87رست_Ù¾Û\8câ\80\8cÚ¯Û\8cرÛ\8câ\80\8cÙ\87ا' ),
        'Emailuser'                 => array( 'نامه_به_کاربر' ),
        'Export'                    => array( 'برون_بری_صفحه' ),
        'Fewestrevisions'           => array( 'کمترین_نسخه' ),
@@ -135,7 +138,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'تغییرات_اخیر' ),
        'Recentchangeslinked'       => array( 'تغییرات_مرتبط' ),
        'Revisiondelete'            => array( 'حذف_نسخه' ),
-       'RevisionMove'              => array( 'انتقال_نسخه' ),
        'Search'                    => array( 'جستجو' ),
        'Shortpages'                => array( 'صفحه‌های_کوتاه' ),
        'Specialpages'              => array( 'صفحه‌های_ویژه' ),
@@ -167,102 +169,6 @@ $specialPageAliases = array(
        'Withoutinterwiki'          => array( 'بدون_میان‌ویکی' ),
 );
 
-
-
-$digitTransformTable = array(
-       '0' => '۰', # &#x06f0;
-       '1' => '۱', # &#x06f1;
-       '2' => '۲', # &#x06f2;
-       '3' => '۳', # &#x06f3;
-       '4' => '۴', # &#x06f4;
-       '5' => '۵', # &#x06f5;
-       '6' => '۶', # &#x06f6;
-       '7' => '۷', # &#x06f7;
-       '8' => '۸', # &#x06f8;
-       '9' => '۹', # &#x06f9;
-       '%' => '٪', # &#x066a;
-       '.' => '٫', # &#x066b; wrong table?
-       ',' => '٬', # &#x066c;
-);
-
-$fallback8bitEncoding = 'windows-1256';
-
-$rtl = true;
-
-
-/**
- * A list of date format preference keys which can be selected in user
- * preferences. New preference keys can be added, provided they are supported
- * by the language class's timeanddate(). Only the 5 keys listed below are
- * supported by the wikitext converter (DateFormatter.php).
- *
- * The special key "default" is an alias for either dmy or mdy depending on
- * $wgAmericanDates
- */
-$datePreferences = array(
-       'default',
-       'mdy',
-       'dmy',
-       'ymd',
-       'persian',
-       'hebrew',
-       'ISO 8601',
-);
-
-/**
- * The date format to use for generated dates in the user interface.
- * This may be one of the above date preferences, or the special value
- * "dmy or mdy", which uses mdy if $wgAmericanDates is true, and dmy
- * if $wgAmericanDates is false.
- */
-$defaultDateFormat = 'dmy or mdy';
-
-/**
- * Associative array mapping old numeric date formats, which may still be
- * stored in user preferences, to the new string formats.
- */
-$datePreferenceMigrationMap = array(
-       'default',
-       'mdy',
-       'dmy',
-       'ymd'
-);
-
-/**
- * These are formats for dates generated by MediaWiki (as opposed to the wikitext
- * DateFormatter). Documentation for the format string can be found in
- * Language.php, search for sprintfDate.
- *
- * This array is automatically inherited by all subclasses. Individual keys can be
- * overridden.
- */
-$dateFormats = array(
-    # Please be cautious not to delete the invisible RLM from the beginning of the strings.
-       'mdy time' => '‏H:i',
-       'mdy date' => '‏n/j/Y میلادی',
-       'mdy both' => '‏n/j/Y میلادی، ساعت H:i',
-
-       'dmy time' => '‏H:i',
-       'dmy date' => '‏j xg Y',
-       'dmy both' => '‏j xg Y، ساعت H:i',
-
-       'ymd time' => '‏H:i',
-       'ymd date' => '‏Y/n/j میلادی',
-       'ymd both' => '‏Y/n/j میلادی، ساعت H:i',
-
-       'persian time' => '‏H:i',
-       'persian date' => '‏xij xiF xiY',
-       'persian both' => '‏xij xiF xiY، ساعت H:i',
-
-       'hebrew time' => '‏H:i',
-       'hebrew date' => '‏xij xjF xjY',
-       'hebrew both' => '‏H:i, xij xjF xjY',
-
-       'ISO 8601 time' => 'xnH:xni:xns',
-       'ISO 8601 date' => 'xnY-xnm-xnd',
-       'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
-);
-
 $magicWords = array(
        'redirect'                  => array( '0', '#تغییر_مسیر', '#تغییرمسیر', '#REDIRECT' ),
        'notoc'                     => array( '0', '__بی‌فهرست__', '__NOTOC__' ),
@@ -270,7 +176,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__بافهرست__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__فهرست__', '__TOC__' ),
        'noeditsection'             => array( '0', '__بی‌بخش__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__بی‌عنوان__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'ماه', 'ماه‌کنونی', 'ماه_کنونی', 'ماه‌کنونی۲', 'ماه_کنونی۲', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'ماه۱', 'ماه‌کنونی۱', 'ماه_کنونی۱', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'نام‌ماه', 'نام_ماه', 'نام‌ماه‌کنونی', 'نام_ماه_کنونی', 'CURRENTMONTHNAME' ),
@@ -418,6 +323,95 @@ $magicWords = array(
        'defaultsort_noreplace'     => array( '0', 'جایگزین‌نکن', 'جایگزین_نکن', 'noreplace' ),
 );
 
+$digitTransformTable = array(
+       '0' => '۰', # &#x06f0;
+       '1' => '۱', # &#x06f1;
+       '2' => '۲', # &#x06f2;
+       '3' => '۳', # &#x06f3;
+       '4' => '۴', # &#x06f4;
+       '5' => '۵', # &#x06f5;
+       '6' => '۶', # &#x06f6;
+       '7' => '۷', # &#x06f7;
+       '8' => '۸', # &#x06f8;
+       '9' => '۹', # &#x06f9;
+       '%' => '٪', # &#x066a;
+       '.' => '٫', # &#x066b; wrong table?
+       ',' => '٬', # &#x066c;
+);
+
+/**
+ * A list of date format preference keys which can be selected in user
+ * preferences. New preference keys can be added, provided they are supported
+ * by the language class's timeanddate(). Only the 5 keys listed below are
+ * supported by the wikitext converter (DateFormatter.php).
+ *
+ * The special key "default" is an alias for either dmy or mdy depending on
+ * $wgAmericanDates
+ */
+$datePreferences = array(
+       'default',
+       'mdy',
+       'dmy',
+       'ymd',
+       'persian',
+       'hebrew',
+       'ISO 8601',
+);
+
+/**
+ * The date format to use for generated dates in the user interface.
+ * This may be one of the above date preferences, or the special value
+ * "dmy or mdy", which uses mdy if $wgAmericanDates is true, and dmy
+ * if $wgAmericanDates is false.
+ */
+$defaultDateFormat = 'dmy or mdy';
+
+/**
+ * Associative array mapping old numeric date formats, which may still be
+ * stored in user preferences, to the new string formats.
+ */
+$datePreferenceMigrationMap = array(
+       'default',
+       'mdy',
+       'dmy',
+       'ymd'
+);
+
+/**
+ * These are formats for dates generated by MediaWiki (as opposed to the wikitext
+ * DateFormatter). Documentation for the format string can be found in
+ * Language.php, search for sprintfDate.
+ *
+ * This array is automatically inherited by all subclasses. Individual keys can be
+ * overridden.
+ */
+$dateFormats = array(
+    # Please be cautious not to delete the invisible RLM from the beginning of the strings.
+       'mdy time' => '‏H:i',
+       'mdy date' => '‏n/j/Y میلادی',
+       'mdy both' => '‏n/j/Y میلادی، ساعت H:i',
+
+       'dmy time' => '‏H:i',
+       'dmy date' => '‏j xg Y',
+       'dmy both' => '‏j xg Y، ساعت H:i',
+
+       'ymd time' => '‏H:i',
+       'ymd date' => '‏Y/n/j میلادی',
+       'ymd both' => '‏Y/n/j میلادی، ساعت H:i',
+
+       'persian time' => '‏H:i',
+       'persian date' => '‏xij xiF xiY',
+       'persian both' => '‏xij xiF xiY، ساعت H:i',
+
+       'hebrew time' => '‏H:i',
+       'hebrew date' => '‏xij xjF xjY',
+       'hebrew both' => '‏H:i, xij xjF xjY',
+
+       'ISO 8601 time' => 'xnH:xni:xns',
+       'ISO 8601 date' => 'xnY-xnm-xnd',
+       'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+);
+
 # Harakat are intentionally not included in the linkTrail. Their addition should
 # take place after enough tests.
 $linkTrail = "/^([ابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهیآأئؤة‌]+)(.*)$/sDu";
@@ -1126,7 +1120,7 @@ $2
 *'''اینترنت اکسپلورر:''' کلید ''Ctrl'' را نگه‌دارید و روی دکمهٔ ''Refresh'' کلیک کنید، یا کلید‌های ''Ctrl-F5'' را با هم فشار دهید
 *'''اپرا:''' حافظهٔ نهانی مرورگر را از طریق منوی ''Tools &rarr; Preferences'' پاک کنید",
 'usercssyoucanpreview' => "'''نکته:''' پیش از ذخیره‌کردن فایل سی‌اس‌اس خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
-'userjsyoucanpreview' => "''نکته:''' پیش از ذخیره‌کردن فایل جاوااسکریپت خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
+'userjsyoucanpreview' => "'''نکته:''' پیش از ذخیره‌کردن فایل جاوااسکریپت خود، با دکمهٔ '''{{int:showpreview}}''' آن را آزمایش کنید.",
 'usercsspreview' => "'''فراموش مکنید که شما فقط دارید پیش‌نمایش سی‌اس‌اس کاربری‌تان را می‌بینید.'''
 '''این سی‌اس‌اس هنوز ذخیره نشده‌است!'''",
 'userjspreview' => "'''به یاد داشته باشید که شما فقط دارید جاوااسکریپت کاربری‌تان را امتحان می‌کنید/پیش‌نمایش آن را می‌بینید.'''
@@ -2438,7 +2432,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization را ببینید.',
 'emailuser-title-target' => 'ایمیل این {{GENDER:$1| کاربر}}',
 'emailuser-title-notarget' => 'رایانامه به کاربر',
 'emailpage' => 'رایانامه به کاربر',
-'emailpagetext' => 'شما می‌توانید از فرم زیر برای ارسال یک رایانامه به این کاربر استفاده کنید.
+'emailpagetext' => 'شما می‌توانید از فرم زیر برای ارسال یک رایانامه به این {{GENDER:$1|کاربر}} استفاده کنید.
 نشانی رایانامه‌ای که در [[Special:Preferences|ترجیحات کاربریتان]] وارد کرده‌اید در نشانی فرستنده (From) نامه خواهد آمد، تا گیرنده بتواند پاسخ دهد.',
 'usermailererror' => 'رایانامه دچار خطا شد:',
 'defemailsubject' => 'رایانامه {{SITENAME}} از طرف کاربر «$1»',
@@ -3257,6 +3251,7 @@ $1',
 'pageinfo-default-sort' => 'کلید مرتب‌سازی پیش‌فرض',
 'pageinfo-length' => 'حجم صفحه  (بایت)',
 'pageinfo-article-id' => 'شناسهٔ صفحه',
+'pageinfo-language' => 'زبان محتوای صفحه',
 'pageinfo-robot-policy' => 'وضعیت موتور جستجو',
 'pageinfo-robot-index' => 'فهرست‌پذیر',
 'pageinfo-robot-noindex' => 'عدم فهرست‌پذیری',
index ddf8440..35f02ec 100644 (file)
@@ -38,8 +38,6 @@
  * @author לערי ריינהארט
  */
 
-$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
-
 $namespaceNames = array(
        NS_MEDIA            => 'Media',
        NS_SPECIAL          => 'Toiminnot',
@@ -64,43 +62,103 @@ $namespaceAliases = array(
        'Keskustelu_kuvasta' => NS_FILE_TALK,
 );
 
-
-$datePreferences = array(
-       'default',
-       'fi normal',
-       'fi seconds',
-       'fi numeric',
-       'ISO 8601',
-);
-
-$defaultDateFormat = 'fi normal';
-
-$dateFormats = array(
-       'fi normal time' => 'H.i',
-       'fi normal date' => 'j. F"ta" Y',
-       'fi normal both' => 'j. F"ta" Y "kello" H.i',
-
-       'fi seconds time' => 'H:i:s',
-       'fi seconds date' => 'j. F"ta" Y',
-       'fi seconds both' => 'j. F"ta" Y "kello" H:i:s',
-
-       'fi numeric time' => 'H.i',
-       'fi numeric date' => 'j.n.Y',
-       'fi numeric both' => 'j.n.Y "kello" H.i',
-);
-
-$datePreferenceMigrationMap = array(
-       'default',
-       'fi normal',
-       'fi seconds',
-       'fi numeric',
-);
-
-$bookstoreList = array(
-       'Bookplus'                      => 'http://www.bookplus.fi/product.php?isbn=$1',
-       'Helsingin yliopiston kirjasto' => 'http://pandora.lib.hel.fi/cgi-bin/mhask/monihask.py?volname=&author=&keyword=&ident=$1&submit=Hae&engine_helka=ON',
-       'Pääkaupunkiseudun kirjastot'   => 'http://www.helmet.fi/search*fin/i?SEARCH=$1',
-       'Tampereen seudun kirjastot'    => 'http://kirjasto.tampere.fi/Piki?formid=fullt&typ0=6&dat0=$1'
+$specialPageAliases = array(
+       'Activeusers'               => array( 'Aktiiviset_käyttäjät' ),
+       'Allmessages'               => array( 'Järjestelmäviestit' ),
+       'Allpages'                  => array( 'Kaikki_sivut' ),
+       'Ancientpages'              => array( 'Kuolleet_sivut' ),
+       'Badtitle'                  => array( 'Kelpaamaton_otsikko' ),
+       'Blankpage'                 => array( 'Tyhjä_sivu' ),
+       'Block'                     => array( 'Estä' ),
+       'Blockme'                   => array( 'Estä_minut' ),
+       'Booksources'               => array( 'Kirjalähteet' ),
+       'BrokenRedirects'           => array( 'Virheelliset_ohjaukset', 'Virheelliset_uudelleenohjaukset' ),
+       'Categories'                => array( 'Luokat' ),
+       'ChangeEmail'               => array( 'Muuta_sähköpostiosoite' ),
+       'ChangePassword'            => array( 'Muuta_salasana', 'Alusta_salasana' ),
+       'ComparePages'              => array( 'Vertaa_sivuja' ),
+       'Confirmemail'              => array( 'Varmista_sähköpostiosoite' ),
+       'Contributions'             => array( 'Muokkaukset' ),
+       'CreateAccount'             => array( 'Luo_tunnus' ),
+       'Deadendpages'              => array( 'Linkittömät_sivut' ),
+       'DeletedContributions'      => array( 'Poistetut_muokkaukset' ),
+       'Disambiguations'           => array( 'Täsmennyssivut' ),
+       'DoubleRedirects'           => array( 'Kaksinkertaiset_ohjaukset', 'Kaksinkertaiset_uudelleenohjaukset' ),
+       'EditWatchlist'             => array( 'Muokkaa_tarkkailulistaa' ),
+       'Emailuser'                 => array( 'Lähetä_sähköpostia' ),
+       'Export'                    => array( 'Vie_sivuja' ),
+       'Fewestrevisions'           => array( 'Vähiten_muokatut_sivut' ),
+       'FileDuplicateSearch'       => array( 'Kaksoiskappaleiden_haku' ),
+       'Filepath'                  => array( 'Tiedostopolku' ),
+       'Import'                    => array( 'Tuo_sivuja' ),
+       'Invalidateemail'           => array( 'Hylkää_sähköpostiosoite' ),
+       'BlockList'                 => array( 'Muokkausestot' ),
+       'LinkSearch'                => array( 'Linkkihaku' ),
+       'Listadmins'                => array( 'Ylläpitäjät' ),
+       'Listbots'                  => array( 'Botit' ),
+       'Listfiles'                 => array( 'Tiedostoluettelo' ),
+       'Listgrouprights'           => array( 'Käyttäjäryhmien_oikeudet' ),
+       'Listredirects'             => array( 'Ohjaukset', 'Ohjaussivut', 'Uudelleenohjaukset' ),
+       'Listusers'                 => array( 'Käyttäjät' ),
+       'Lockdb'                    => array( 'Lukitse_tietokanta' ),
+       'Log'                       => array( 'Loki', 'Lokit' ),
+       'Lonelypages'               => array( 'Yksinäiset_sivut' ),
+       'Longpages'                 => array( 'Pitkät_sivut' ),
+       'MergeHistory'              => array( 'Liitä_muutoshistoria' ),
+       'MIMEsearch'                => array( 'MIME-haku' ),
+       'Mostcategories'            => array( 'Luokitelluimmat_sivut' ),
+       'Mostimages'                => array( 'Viitatuimmat_tiedostot' ),
+       'Mostlinked'                => array( 'Viitatuimmat_sivut' ),
+       'Mostlinkedcategories'      => array( 'Viitatuimmat_luokat' ),
+       'Mostlinkedtemplates'       => array( 'Viitatuimmat_mallineet' ),
+       'Mostrevisions'             => array( 'Muokatuimmat_sivut' ),
+       'Movepage'                  => array( 'Siirrä_sivu' ),
+       'Mycontributions'           => array( 'Omat_muokkaukset' ),
+       'Mypage'                    => array( 'Oma_sivu' ),
+       'Mytalk'                    => array( 'Oma_keskustelu' ),
+       'Myuploads'                 => array( 'Omat_tiedostot' ),
+       'Newimages'                 => array( 'Uudet_tiedostot', 'Uudet_kuvat' ),
+       'Newpages'                  => array( 'Uudet_sivut' ),
+       'PasswordReset'             => array( 'Unohtuneen_salasanan_vaihto' ),
+       'PermanentLink'             => array( 'Ikilinkki' ),
+       'Popularpages'              => array( 'Suositut_sivut' ),
+       'Preferences'               => array( 'Asetukset' ),
+       'Prefixindex'               => array( 'Etuliiteluettelo' ),
+       'Protectedpages'            => array( 'Suojatut_sivut' ),
+       'Protectedtitles'           => array( 'Suojatut_sivunimet' ),
+       'Randompage'                => array( 'Satunnainen_sivu' ),
+       'Randomredirect'            => array( 'Satunnainen_ohjaus', 'Satunnainen_uudelleenohjaus' ),
+       'Recentchanges'             => array( 'Tuoreet_muutokset' ),
+       'Recentchangeslinked'       => array( 'Linkitetyt_muutokset' ),
+       'Revisiondelete'            => array( 'Poista_muokkaus' ),
+       'Search'                    => array( 'Haku' ),
+       'Shortpages'                => array( 'Lyhyet_sivut' ),
+       'Specialpages'              => array( 'Toimintosivut' ),
+       'Statistics'                => array( 'Tilastot' ),
+       'Tags'                      => array( 'Merkinnät' ),
+       'Unblock'                   => array( 'Poista_esto' ),
+       'Uncategorizedcategories'   => array( 'Luokittelemattomat_luokat' ),
+       'Uncategorizedimages'       => array( 'Luokittelemattomat_tiedostot' ),
+       'Uncategorizedpages'        => array( 'Luokittelemattomat_sivut' ),
+       'Uncategorizedtemplates'    => array( 'Luokittelemattomat_mallineet' ),
+       'Undelete'                  => array( 'Palauta' ),
+       'Unlockdb'                  => array( 'Avaa_tietokanta' ),
+       'Unusedcategories'          => array( 'Käyttämättömät_luokat' ),
+       'Unusedimages'              => array( 'Käyttämättömät_tiedostot' ),
+       'Unusedtemplates'           => array( 'Käyttämättömät_mallineet' ),
+       'Unwatchedpages'            => array( 'Tarkkailemattomat_sivut' ),
+       'Upload'                    => array( 'Tallenna', 'Lisää_tiedosto' ),
+       'Userlogin'                 => array( 'Kirjaudu_sisään' ),
+       'Userlogout'                => array( 'Kirjaudu_ulos' ),
+       'Userrights'                => array( 'Käyttöoikeudet' ),
+       'Version'                   => array( 'Versio' ),
+       'Wantedcategories'          => array( 'Halutuimmat_luokat' ),
+       'Wantedfiles'               => array( 'Halutuimmat_tiedostot' ),
+       'Wantedpages'               => array( 'Halutuimmat_sivut' ),
+       'Wantedtemplates'           => array( 'Halutuimmat_mallineet' ),
+       'Watchlist'                 => array( 'Tarkkailulista' ),
+       'Whatlinkshere'             => array( 'Tänne_viittaavat_sivut' ),
+       'Withoutinterwiki'          => array( 'Kielilinkittömät_sivut' ),
 );
 
 $magicWords = array(
@@ -109,7 +167,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__SISLUETTPAKOTUS__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__SISÄLLYSLUETTELO__', '__TOC__' ),
        'noeditsection'             => array( '0', '__EIOSIOMUOKKAUSTA__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__EIOTSIKKOA__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'KULUVAKUU', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonthname'          => array( '1', 'KULUVAKUUNIMI', 'CURRENTMONTHNAME' ),
        'currentmonthnamegen'       => array( '1', 'KULUVAKUUNIMIGEN', 'CURRENTMONTHNAMEGEN' ),
@@ -210,104 +267,44 @@ $magicWords = array(
        'protectionlevel'           => array( '1', 'SUOJAUSTASO', 'PROTECTIONLEVEL' ),
 );
 
-$specialPageAliases = array(
-       'Activeusers'               => array( 'Aktiiviset_käyttäjät' ),
-       'Allmessages'               => array( 'Järjestelmäviestit' ),
-       'Allpages'                  => array( 'Kaikki_sivut' ),
-       'Ancientpages'              => array( 'Kuolleet_sivut' ),
-       'Badtitle'                  => array( 'Kelpaamaton_otsikko' ),
-       'Blankpage'                 => array( 'Tyhjä_sivu' ),
-       'Block'                     => array( 'Estä' ),
-       'Blockme'                   => array( 'Estä_minut' ),
-       'Booksources'               => array( 'Kirjalähteet' ),
-       'BrokenRedirects'           => array( 'Virheelliset_ohjaukset', 'Virheelliset_uudelleenohjaukset' ),
-       'Categories'                => array( 'Luokat' ),
-       'ChangeEmail'               => array( 'Muuta_sähköpostiosoite' ),
-       'ChangePassword'            => array( 'Muuta_salasana', 'Alusta_salasana' ),
-       'ComparePages'              => array( 'Vertaa_sivuja' ),
-       'Confirmemail'              => array( 'Varmista_sähköpostiosoite' ),
-       'Contributions'             => array( 'Muokkaukset' ),
-       'CreateAccount'             => array( 'Luo_tunnus' ),
-       'Deadendpages'              => array( 'Linkittömät_sivut' ),
-       'DeletedContributions'      => array( 'Poistetut_muokkaukset' ),
-       'Disambiguations'           => array( 'Täsmennyssivut' ),
-       'DoubleRedirects'           => array( 'Kaksinkertaiset_ohjaukset', 'Kaksinkertaiset_uudelleenohjaukset' ),
-       'EditWatchlist'             => array( 'Muokkaa_tarkkailulistaa' ),
-       'Emailuser'                 => array( 'Lähetä_sähköpostia' ),
-       'Export'                    => array( 'Vie_sivuja' ),
-       'Fewestrevisions'           => array( 'Vähiten_muokatut_sivut' ),
-       'FileDuplicateSearch'       => array( 'Kaksoiskappaleiden_haku' ),
-       'Filepath'                  => array( 'Tiedostopolku' ),
-       'Import'                    => array( 'Tuo_sivuja' ),
-       'Invalidateemail'           => array( 'Hylkää_sähköpostiosoite' ),
-       'BlockList'                 => array( 'Muokkausestot' ),
-       'LinkSearch'                => array( 'Linkkihaku' ),
-       'Listadmins'                => array( 'Ylläpitäjät' ),
-       'Listbots'                  => array( 'Botit' ),
-       'Listfiles'                 => array( 'Tiedostoluettelo' ),
-       'Listgrouprights'           => array( 'Käyttäjäryhmien_oikeudet' ),
-       'Listredirects'             => array( 'Ohjaukset', 'Ohjaussivut', 'Uudelleenohjaukset' ),
-       'Listusers'                 => array( 'Käyttäjät' ),
-       'Lockdb'                    => array( 'Lukitse_tietokanta' ),
-       'Log'                       => array( 'Loki', 'Lokit' ),
-       'Lonelypages'               => array( 'Yksinäiset_sivut' ),
-       'Longpages'                 => array( 'Pitkät_sivut' ),
-       'MergeHistory'              => array( 'Liitä_muutoshistoria' ),
-       'MIMEsearch'                => array( 'MIME-haku' ),
-       'Mostcategories'            => array( 'Luokitelluimmat_sivut' ),
-       'Mostimages'                => array( 'Viitatuimmat_tiedostot' ),
-       'Mostlinked'                => array( 'Viitatuimmat_sivut' ),
-       'Mostlinkedcategories'      => array( 'Viitatuimmat_luokat' ),
-       'Mostlinkedtemplates'       => array( 'Viitatuimmat_mallineet' ),
-       'Mostrevisions'             => array( 'Muokatuimmat_sivut' ),
-       'Movepage'                  => array( 'Siirrä_sivu' ),
-       'Mycontributions'           => array( 'Omat_muokkaukset' ),
-       'Mypage'                    => array( 'Oma_sivu' ),
-       'Mytalk'                    => array( 'Oma_keskustelu' ),
-       'Myuploads'                 => array( 'Omat_tiedostot' ),
-       'Newimages'                 => array( 'Uudet_tiedostot', 'Uudet_kuvat' ),
-       'Newpages'                  => array( 'Uudet_sivut' ),
-       'PasswordReset'             => array( 'Unohtuneen_salasanan_vaihto' ),
-       'PermanentLink'             => array( 'Ikilinkki' ),
-       'Popularpages'              => array( 'Suositut_sivut' ),
-       'Preferences'               => array( 'Asetukset' ),
-       'Prefixindex'               => array( 'Etuliiteluettelo' ),
-       'Protectedpages'            => array( 'Suojatut_sivut' ),
-       'Protectedtitles'           => array( 'Suojatut_sivunimet' ),
-       'Randompage'                => array( 'Satunnainen_sivu' ),
-       'Randomredirect'            => array( 'Satunnainen_ohjaus', 'Satunnainen_uudelleenohjaus' ),
-       'Recentchanges'             => array( 'Tuoreet_muutokset' ),
-       'Recentchangeslinked'       => array( 'Linkitetyt_muutokset' ),
-       'Revisiondelete'            => array( 'Poista_muokkaus' ),
-       'RevisionMove'              => array( 'Versioiden_siirto' ),
-       'Search'                    => array( 'Haku' ),
-       'Shortpages'                => array( 'Lyhyet_sivut' ),
-       'Specialpages'              => array( 'Toimintosivut' ),
-       'Statistics'                => array( 'Tilastot' ),
-       'Tags'                      => array( 'Merkinnät' ),
-       'Unblock'                   => array( 'Poista_esto' ),
-       'Uncategorizedcategories'   => array( 'Luokittelemattomat_luokat' ),
-       'Uncategorizedimages'       => array( 'Luokittelemattomat_tiedostot' ),
-       'Uncategorizedpages'        => array( 'Luokittelemattomat_sivut' ),
-       'Uncategorizedtemplates'    => array( 'Luokittelemattomat_mallineet' ),
-       'Undelete'                  => array( 'Palauta' ),
-       'Unlockdb'                  => array( 'Avaa_tietokanta' ),
-       'Unusedcategories'          => array( 'Käyttämättömät_luokat' ),
-       'Unusedimages'              => array( 'Käyttämättömät_tiedostot' ),
-       'Unusedtemplates'           => array( 'Käyttämättömät_mallineet' ),
-       'Unwatchedpages'            => array( 'Tarkkailemattomat_sivut' ),
-       'Upload'                    => array( 'Tallenna', 'Lisää_tiedosto' ),
-       'Userlogin'                 => array( 'Kirjaudu_sisään' ),
-       'Userlogout'                => array( 'Kirjaudu_ulos' ),
-       'Userrights'                => array( 'Käyttöoikeudet' ),
-       'Version'                   => array( 'Versio' ),
-       'Wantedcategories'          => array( 'Halutuimmat_luokat' ),
-       'Wantedfiles'               => array( 'Halutuimmat_tiedostot' ),
-       'Wantedpages'               => array( 'Halutuimmat_sivut' ),
-       'Wantedtemplates'           => array( 'Halutuimmat_mallineet' ),
-       'Watchlist'                 => array( 'Tarkkailulista' ),
-       'Whatlinkshere'             => array( 'Tänne_viittaavat_sivut' ),
-       'Withoutinterwiki'          => array( 'Kielilinkittömät_sivut' ),
+$separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
+
+$datePreferences = array(
+       'default',
+       'fi normal',
+       'fi seconds',
+       'fi numeric',
+       'ISO 8601',
+);
+
+$defaultDateFormat = 'fi normal';
+
+$dateFormats = array(
+       'fi normal time' => 'H.i',
+       'fi normal date' => 'j. F"ta" Y',
+       'fi normal both' => 'j. F"ta" Y "kello" H.i',
+
+       'fi seconds time' => 'H:i:s',
+       'fi seconds date' => 'j. F"ta" Y',
+       'fi seconds both' => 'j. F"ta" Y "kello" H:i:s',
+
+       'fi numeric time' => 'H.i',
+       'fi numeric date' => 'j.n.Y',
+       'fi numeric both' => 'j.n.Y "kello" H.i',
+);
+
+$datePreferenceMigrationMap = array(
+       'default',
+       'fi normal',
+       'fi seconds',
+       'fi numeric',
+);
+
+$bookstoreList = array(
+       'Bookplus'                      => 'http://www.bookplus.fi/product.php?isbn=$1',
+       'Helsingin yliopiston kirjasto' => 'http://pandora.lib.hel.fi/cgi-bin/mhask/monihask.py?volname=&author=&keyword=&ident=$1&submit=Hae&engine_helka=ON',
+       'Pääkaupunkiseudun kirjastot'   => 'http://www.helmet.fi/search*fin/i?SEARCH=$1',
+       'Tampereen seudun kirjastot'    => 'http://kirjasto.tampere.fi/Piki?formid=fullt&typ0=6&dat0=$1'
 );
 
 $linkTrail = '/^([a-zäö]+)(.*)$/sDu';
@@ -362,7 +359,7 @@ $messages = array(
 
 'underline-always' => 'Aina',
 'underline-never' => 'Ei koskaan',
-'underline-default' => 'Selaimen oletustapa',
+'underline-default' => 'Ulkoasun tai selaimen oletustapa',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Muokkauskentän kirjasintyyppi',
@@ -957,9 +954,9 @@ Voit [[Special:Search/{{PAGENAME}}|etsiä sivun nimellä]] muilta sivuilta,
 tai [{{fullurl:{{FULLPAGENAME}}|action=edit}} muokata tätä sivua]</span>.',
 'noarticletext-nopermission' => 'Tällä hetkellä tällä sivulla ei ole tekstiä.
 Voit [[Special:Search/{{PAGENAME}}|etsiä sivun nimellä]] muilta sivuilta tai <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hakea aiheeseen liittyviä lokeja]</span>, mutta sinulla ei ole oikeutta luoda tätä sivua.',
-'missing-revision' => 'Muutosta #$1 sivulla "{{PAGENAME}}" ei ole olemassa.
+'missing-revision' => 'Sivusta {{PAGENAME}} ei ole olemassa versiota $1.
 
-Tämä yleensä johtuu vanhentuneesta historialinkistä sivulle, joka on poistettu.
+Useimmiten tämä johtuu vanhentuneesta historialinkistä poistettuun sivuun.
 Lisätietoja löytyy [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} poistolokista].',
 'userpage-userdoesnotexist' => 'Käyttäjätunnusta <nowiki>$1</nowiki> ei ole rekisteröity. Varmista haluatko muokata tätä sivua.',
 'userpage-userdoesnotexist-view' => 'Käyttäjätunnusta ”$1” ei ole rekisteröity.',
@@ -1571,6 +1568,7 @@ Tässä satunnaisesti tuotettu arvo, jota voit käyttää: $1',
 'rightslogtext' => 'Tämä on loki käyttäjien käyttöoikeuksien muutoksista.',
 'rightslogentry' => 'muutti käyttäjän $1 oikeudet ryhmistä $2 ryhmiin $3',
 'rightslogentry-autopromote' => 'muutettiin automaattisesti ryhmistä $2 ryhmiin $3',
+'logentry-rights-rights' => '$1 muutti käyttäjän $3 oikeudet ryhmistä $4 ryhmiin $5',
 'rightsnone' => '(ei oikeuksia)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2288,7 +2286,7 @@ Lisätietoa yksittäisistä käyttäjäoikeuksista saattaa löytyä [[{{MediaWik
 'watchlistcontains' => 'Tarkkailulistallasi on {{PLURAL:$1|yksi sivu|$1 sivua}}.',
 'iteminvalidname' => 'Sivun $1 kanssa oli ongelmia! Sivun nimessä on vikaa.',
 'wlnote' => "Alla on {{PLURAL:$1|yksi muutos|'''$1''' muutosta}} viimeisen {{PLURAL:$2|tunnin|'''$2''' tunnin}} ajalta $3 kello $4 asti.",
-'wlshowlast' => 'Näytä viimeiset $1 tuntia tai $2 päivää$3',
+'wlshowlast' => 'Näytä viimeiset $1 tuntia tai $2 päivää$3',
 'watchlist-options' => 'Tarkkailulistan asetukset',
 
 # Displayed when you click the "watch" button and it is in the process of watching
@@ -3566,7 +3564,7 @@ Kaikki muut linkit ovat poikkeuksia eli toisin sanoen sivuja, joissa tiedostoa s
 'edit-externally-help' => '(Katso [//www.mediawiki.org/wiki/Manual:External_editors ohjeet], jos haluat lisätietoja.)',
 
 # 'all' in various places, this might be different for inflected languages
-'watchlistall2' => 'koko historia',
+'watchlistall2' => 'koko historia',
 'namespacesall' => 'kaikki',
 'monthsall' => 'kaikki',
 'limitall' => 'kaikki',
index 861873b..81a4c15 100644 (file)
  * @author לערי ריינהארט
  */
 
-$bookstoreList = array(
-       'Bokasolan.fo' => 'http://www.bokasolan.fo/vleitari.asp?haattur=bok.alfa&Heiti=&Hovindur=&Forlag=&innbinding=Oell&bolkur=Allir&prisur=Allir&Aarstal=Oell&mal=Oell&status=Oell&ISBN=$1',
-       'inherit' => true,
-);
-
 $namespaceNames = array(
        NS_MEDIA            => 'Miðil',
        NS_SPECIAL          => 'Serstakt',
@@ -53,15 +48,6 @@ $namespaceAliases = array(
        'Bólkur_kjak' => NS_CATEGORY_TALK,
 );
 
-
-$datePreferences = false;
-$defaultDateFormat = 'dmy';
-$dateFormats = array(
-       'dmy time' => 'H:i',
-       'dmy date' => 'j. M Y',
-       'dmy both' => 'j. M Y "kl." H:i',
-);
-
 $specialPageAliases = array(
        'Allmessages'               => array( 'Øll kervisboð' ),
        'Allpages'                  => array( 'Allar síður' ),
@@ -109,6 +95,19 @@ $specialPageAliases = array(
        'Watchlist'                 => array( 'Mítt eftirlit' ),
 );
 
+$datePreferences = false;
+$defaultDateFormat = 'dmy';
+$dateFormats = array(
+       'dmy time' => 'H:i',
+       'dmy date' => 'j. M Y',
+       'dmy both' => 'j. M Y "kl." H:i',
+);
+
+$bookstoreList = array(
+       'Bokasolan.fo' => 'http://www.bokasolan.fo/vleitari.asp?haattur=bok.alfa&Heiti=&Hovindur=&Forlag=&innbinding=Oell&bolkur=Allir&prisur=Allir&Aarstal=Oell&mal=Oell&status=Oell&ISBN=$1',
+       'inherit' => true,
+);
+
 $linkTrail = '/^([áðíóúýæøa-z]+)(.*)$/sDu';
 
 $messages = array(
index c80b017..be8f141 100644 (file)
  * @author לערי ריינהארט
  */
 
-$bookstoreList = array(
-       'Amazon.fr'    => 'http://www.amazon.fr/exec/obidos/ISBN=$1',
-       'alapage.fr'   => 'http://www.alapage.com/mx/?tp=F&type=101&l_isbn=$1&donnee_appel=ALASQ&devise=&',
-       'fnac.com'     => 'http://www3.fnac.com/advanced/book.do?isbn=$1',
-       'chapitre.com' => 'http://www.chapitre.com/frame_rec.asp?isbn=$1',
-);
-
 $namespaceNames = array(
        NS_MEDIA            => 'Média',
        NS_SPECIAL          => 'Spécial',
@@ -121,20 +114,97 @@ $namespaceAliases = array(
        'Discussion_Catégorie' => NS_CATEGORY_TALK
 );
 
-$linkTrail = '/^([a-zàâçéèêîôûäëïöüùÇÉÂÊÎÔÛÄËÏÖÜÀÈÙ]+)(.*)$/sDu';
-
-$dateFormats = array(
-       'mdy time' => 'H:i',
-       'mdy date' => 'F j, Y',
-       'mdy both' => 'F j, Y à H:i',
-
-       'dmy time' => 'H:i',
-       'dmy date' => 'j F Y',
-       'dmy both' => 'j F Y à H:i',
-
-       'ymd time' => 'H:i',
-       'ymd date' => 'Y F j',
-       'ymd both' => 'Y F j à H:i',
+$specialPageAliases = array(
+       'Activeusers'               => array( 'Utilisateurs_actifs', 'UtilisateursActifs' ),
+       'Allmessages'               => array( 'Messages_système', 'Messages_systeme', 'Messagessystème', 'Messagessysteme' ),
+       'Allpages'                  => array( 'Toutes_les_pages', 'ToutesLesPages' ),
+       'Ancientpages'              => array( 'Pages_anciennes', 'PagesAnciennes', 'Anciennes_pages', 'AnciennesPages' ),
+       'Badtitle'                  => array( 'MauvaisTitre', 'Mauvais_titre' ),
+       'Blankpage'                 => array( 'Page_blanche', 'PageBlanche' ),
+       'Block'                     => array( 'Bloquer', 'Blocage' ),
+       'Blockme'                   => array( 'Bloquez-moi', 'Bloquezmoi' ),
+       'Booksources'               => array( 'Ouvrages_de_référence', 'Ouvrages_de_reference', 'Ouvragesderéférence', 'Ouvragesdereference', 'Recherche_ISBN', 'Recherche_isbn', 'RechercheISBN', 'Rechercheisbn' ),
+       'BrokenRedirects'           => array( 'Redirections_cassées', 'RedirectionCassées', 'Redirections_cassees', 'RedirectionsCassees' ),
+       'Categories'                => array( 'Catégories' ),
+       'ChangePassword'            => array( 'Changement_du_mot_de_passe', 'ChangementDuMotDePasse' ),
+       'Confirmemail'              => array( 'Confirmer_l\'adresse_de_contact', 'Confirmer_le_courriel', 'ConfirmerLeCourriel' ),
+       'CreateAccount'             => array( 'Créer_un_compte', 'CréerUnCompte', 'CréerCompte' ),
+       'Deadendpages'              => array( 'Pages_en_impasse', 'PagesEnImpasse' ),
+       'DeletedContributions'      => array( 'Contributions_supprimées', 'ContributionsSupprimées', 'ContributionSupprimees' ),
+       'Disambiguations'           => array( 'Homonymies', 'Homonymie', 'Pages_d\'homonymie' ),
+       'DoubleRedirects'           => array( 'Doubles_redirections', 'DoublesRedirections', 'Redirections_doubles', 'RedirectionsDoubles' ),
+       'Emailuser'                 => array( 'Envoyer_un_courriel', 'EnvoyerUnCourriel', 'Courriel', 'Envoyer_un_e-mail', 'EnvoyerUnEMail', 'E-mail', 'EMail' ),
+       'Export'                    => array( 'Exporter', 'Exportation' ),
+       'Fewestrevisions'           => array( 'Pages_les_moins_modifiées', 'PagesLesMoinsModifiées', 'Pages_les_moins_modifiees', 'PagesLesMoinsModifiees', 'Les_moins_modifiés', 'LesMoinsModifiés', 'Les_moins_modifies', 'LesMoinsModifies' ),
+       'FileDuplicateSearch'       => array( 'Recherche_fichier_en_double', 'RechercheFichierEnDouble' ),
+       'Filepath'                  => array( 'Chemin_du_fichier', 'CheminDuFichier', 'CheminFichier' ),
+       'Import'                    => array( 'Importer', 'Importation' ),
+       'Invalidateemail'           => array( 'Invalider_le_courriel', 'Invalider_courriel', 'InvaliderCourriel' ),
+       'BlockList'                 => array( 'Liste_des_blocages', 'ListeDesBlocages', 'Blocages', 'Utilisateurs_bloqués', 'UtilisateursBloqués', 'Utilisateurs_bloques', 'UtilisateursBloques', 'IP_bloquées', 'IPBloquees', 'IPBloquées' ),
+       'LinkSearch'                => array( 'Recherche_de_lien', 'Recherche_de_liens' ),
+       'Listadmins'                => array( 'Liste_des_administrateurs', 'Listedesadministrateurs', 'Liste_des_admins', 'Listedesadmins', 'Liste_admins', 'Listeadmins' ),
+       'Listbots'                  => array( 'Liste_des_bots', 'ListedesBots' ),
+       'Listfiles'                 => array( 'Liste_des_fichiers', 'ListeDesFichiers', 'Liste_des_images', 'ListeDesImages' ),
+       'Listgrouprights'           => array( 'Liste_des_droits_de_groupe', 'ListeDesDroitsDeGroupes' ),
+       'Listredirects'             => array( 'Liste_des_redirections', 'Listedesredirections', 'Liste_des_redirects', 'Listedesredirects', 'Liste_redirections', 'Listeredirections', 'Liste_redirects', 'Listeredirects' ),
+       'Listusers'                 => array( 'Liste_des_utilisateurs', 'ListeDesUtilisateurs', 'Utilisateurs' ),
+       'Lockdb'                    => array( 'Verrouiller_la_base', 'Verrouillerlabase', 'Verrouiller_base', 'Verrouillerbase', 'Verrouiller_BD', 'VerrouillerBD', 'Verrouiller_bd', 'Verrouillerbd' ),
+       'Log'                       => array( 'Journal', 'Journaux' ),
+       'Lonelypages'               => array( 'Pages_orphelines', 'PagesOrphelines' ),
+       'Longpages'                 => array( 'Pages_longues', 'PagesLongues' ),
+       'MergeHistory'              => array( 'Fusionner_les_historiques', 'FusionnerHistoriques', 'Fusionner_l\'historique', 'Fusionnerlhistorique' ),
+       'MIMEsearch'                => array( 'Recherche_MIME', 'RechercheMIME', 'Recherche_mime', 'Recherchemime' ),
+       'Mostcategories'            => array( 'Pages_les_plus_catégorisées', 'PagesLesPlusCatégorisées', 'Pages_les_plus_categorisees', 'PagesLesPlusCategorisees', 'Les_plus_catégorisés', 'LesPlusCatégorisés', 'Les_plus_categorises', 'LesPlusCategorises' ),
+       'Mostimages'                => array( 'Fichiers_les_plus_liés', 'FichiersLesPlusLiés', 'Fichiers_les_plus_lies', 'FichiersLesPlusLies', 'Fichiers_les_plus_utilisés', 'FichiersLesPlusUtilisés', 'Fichiers_les_plus_utilises', 'FichiersLesPlusUtilises', 'Images_les_plus_liées', 'ImagesLesPlusLiées', 'Images_les_plus_liees', 'ImagesLesPlusLiees', 'Images_les_plus_utilisées', 'ImagesLesPlusUtilisées', 'Images_les_plus_utilisees', 'ImagesLesPlusUtilisees' ),
+       'Mostlinked'                => array( 'Pages_les_plus_liées', 'PagesLesPlusLiées', 'Pages_les_plus_liees', 'PagesLesPlusLiees', 'Les_plus_liées', 'LesPlusLiées', 'Les_plus_liees', 'LesPlusLiees' ),
+       'Mostlinkedcategories'      => array( 'Catégories_les_plus_liées', 'CatégoriesLesPlusLiées', 'Categories_les_plus_liees', 'CategoriesLesPlusLiees', 'Catégories_les_plus_utilisées', 'CatégoriesLesPlusUtilisées', 'Categories_les_plus_utilisees', 'CategoriesLesPlusUtilisees' ),
+       'Mostlinkedtemplates'       => array( 'Modèles_les_plus_liés', 'ModèlesLesPlusLiés', 'Modeles_les_plus_lies', 'ModelesLesPlusLies', 'Modèles_les_plus_utilisés', 'ModèlesLesPlusUtilisés', 'Modeles_les_plus_utilises', 'ModelesLesPlusUtilises' ),
+       'Mostrevisions'             => array( 'Pages_les_plus_modifiées', 'PagesLesPlusModifiées', 'Pages_les_plus_modifiees', 'PagesLesPlusModifiees', 'Les_plus_modifiés', 'LesPlusModifiés', 'Les_plus_modifies', 'LesPlusModifies' ),
+       'Movepage'                  => array( 'Renommer_une_page', 'Renommer', 'Renommage' ),
+       'Mycontributions'           => array( 'Mes_contributions', 'Mescontributions' ),
+       'Mypage'                    => array( 'Ma_page', 'Mapage' ),
+       'Mytalk'                    => array( 'Mes_discussions', 'Mesdiscussions' ),
+       'Newimages'                 => array( 'Nouveaux_fichiers', 'NouveauxFichiers', 'Nouvelles_images', 'NouvellesImages' ),
+       'Newpages'                  => array( 'Nouvelles_pages', 'NouvellesPages', 'Pages_récentes', 'PagesRécentes', 'Pages_recentes', 'PagesRecentes' ),
+       'PasswordReset'             => array( 'Réinitialisation_du_mot_de_passe', 'RéinitialisationDuMotDePasse' ),
+       'PermanentLink'             => array( 'LienPermanent', 'Lien_permanent' ),
+       'Popularpages'              => array( 'Pages_les_plus_visitées', 'Pages_les_plus_visitees', 'Pageslesplusvisitées', 'Pageslesplusvisitees' ),
+       'Preferences'               => array( 'Préférences' ),
+       'Prefixindex'               => array( 'Index', 'Préfixes', 'Prefixes' ),
+       'Protectedpages'            => array( 'Pages_protégées', 'PagesProtégées', 'Pages_protegees', 'PagesProtegees' ),
+       'Protectedtitles'           => array( 'Titres_protégés', 'TitresProtégés', 'Titres_proteges', 'TitresProteges' ),
+       'Randompage'                => array( 'Page_au_hasard', 'PageAuHasard', 'Au_hasard', 'AuHasard', 'Aléatoire', 'Aleatoire' ),
+       'Randomredirect'            => array( 'Redirection_au_hasard', 'Redirect_au_hasard', 'Redirectionauhasard', 'Redirectauhasard', 'Redirection_aléatoire', 'Redirect_aléatoire', 'Redirectionaléatoire', 'Redirectaléatoire', 'Redirection_aleatoire', 'Redirect_aleatoire', 'Redirectionaleatoire', 'Redirectaleatoire' ),
+       'Recentchanges'             => array( 'Modifications_récentes', 'Modifications_recentes', 'ModificationsRécentes', 'ModificationsRecentes' ),
+       'Recentchangeslinked'       => array( 'Suivi_des_liens', 'SuiviDesLiens' ),
+       'Revisiondelete'            => array( 'Versions_supprimées', 'Versions_supprimees', 'Versionsupprimées', 'Versionsupprimees' ),
+       'Search'                    => array( 'Recherche', 'Rechercher', 'Chercher' ),
+       'Shortpages'                => array( 'Pages_courtes', 'PagesCourtes' ),
+       'Specialpages'              => array( 'Pages_spéciales', 'PagesSpéciales', 'Pages_speciales', 'PagesSpeciales' ),
+       'Statistics'                => array( 'Statistiques', 'Stats' ),
+       'Tags'                      => array( 'Balises' ),
+       'Unblock'                   => array( 'Débloquer', 'Déblocage' ),
+       'Uncategorizedcategories'   => array( 'Catégories_non_catégorisées', 'CatégoriesNonCatégorisées', 'Categories_non_categorisees', 'CategoriesNonCategorisees', 'Catégories_sans_catégorie', 'CatégoriesSansCatégorie', 'Categories_sans_categorie', 'CategoriesSansCategorie' ),
+       'Uncategorizedimages'       => array( 'Fichiers_non_catégorisés', 'FichiersNonCatégorisés', 'Fichiers_non_categorises', 'FichiersNonCategorises', 'Fichiers_sans_catégorie', 'FichiersSansCatégorie', 'Fichiers_sans_categorie', 'FichiersSansCategorie', 'Images_non_catégorisées', 'ImagesNonCatégorisées', 'Images_non_categorisees', 'ImagesNonCategorisees', 'Images_sans_catégorie', 'ImagesSansCatégorie', 'Images_sans_categorie', 'ImagesSansCategorie' ),
+       'Uncategorizedpages'        => array( 'Pages_non_catégorisées', 'PagesNonCatégorisées', 'Pages_non_categorisees', 'PagesNonCategorisees', 'Pages_sans_catégorie', 'PagesSansCatégorie', 'Pages_sans_categorie', 'PagesSansCategorie' ),
+       'Uncategorizedtemplates'    => array( 'Modèles_non_catégorisés', 'ModèlesNonCatégorisés', 'Modeles_non_categorises', 'ModelesNonCategorises', 'Modèles_sans_catégorie', 'ModèlesSansCatégorie', 'Modeles_sans_catégorie', 'ModelesSansCatégorie' ),
+       'Undelete'                  => array( 'Restaurer', 'Restauration' ),
+       'Unlockdb'                  => array( 'Déverrouiller_la_base', 'Déverrouillerlabase', 'Deverrouiller_la_base', 'Deverrouillerlabase', 'Déverrouiller_base', 'Déverrouillerbase', 'Deverrouiller_base', 'Deverrouillerbase', 'Déverrouiller_BD', 'DéverrouillerBD', 'Deverrouiller_BD', 'DeverrouillerBD', 'Déverrouiller_bd', 'Déverrouillerbd', 'Deverrouiller_bd', 'Deverrouillerbd' ),
+       'Unusedcategories'          => array( 'Catégories_inutilisées', 'CatégoriesInutilisées', 'Categories_inutilisees', 'CategoriesInutilisees', 'Catégories_non_utilisées', 'CatégoriesNonUtilisées', 'Categories_non_utilisees', 'CategoriesNonUtilisees' ),
+       'Unusedimages'              => array( 'Fichiers_inutilisés', 'FichiersInutilisés', 'Fichiers_inutilises', 'FichiersInutilises', 'Fichiers_non_utilisés', 'FichiersNon_utilisés', 'Fichiers_non_utilises', 'FichiersNon_utilises', 'Images_inutilisées', 'ImagesInutilisées', 'Images_inutilisees', 'ImagesInutilisees', 'Images_non_utilisées', 'ImagesNonUtilisées', 'Images_non_utilisees', 'ImagesNonUtilisees' ),
+       'Unusedtemplates'           => array( 'Modèles_inutilisés', 'Modèlesinutilisés', 'Modeles_inutilises', 'Modelesinutilises', 'Modèles_non_utilisés', 'Modèlesnonutilisés', 'Modeles_non_utilises', 'Modelesnonutilises' ),
+       'Unwatchedpages'            => array( 'Pages_non_suivies', 'Pagesnonsuivies' ),
+       'Upload'                    => array( 'Téléverser', 'Televerser', 'Téléversement', 'Televersement', 'Téléchargement', 'Telechargement' ),
+       'Userlogin'                 => array( 'Connexion', 'Identification' ),
+       'Userlogout'                => array( 'Déconnexion', 'Deconnexion' ),
+       'Userrights'                => array( 'Permissions', 'Droits', 'Droits_des_utilisateurs' ),
+       'Wantedcategories'          => array( 'Catégories_demandées', 'CatégoriesDemandées', 'Categories_demandees', 'CategoriesDemandees' ),
+       'Wantedfiles'               => array( 'Fichiers_demandés', 'FichiersDemandés', 'Fichiers_demandes', 'FichiersDemandes' ),
+       'Wantedpages'               => array( 'Pages_demandées', 'PagesDemandées', 'Pages_demandees', 'PagesDemandees', 'Liens_brisés', 'LiensBrisés', 'Liens_brises', 'LiensBrises' ),
+       'Wantedtemplates'           => array( 'Modèles_demandés', 'ModèlesDemandés', 'Modeles_demandes', 'ModelesDemandes' ),
+       'Watchlist'                 => array( 'Liste_de_suivi', 'ListeDeSuivi', 'Suivi' ),
+       'Whatlinkshere'             => array( 'Pages_liées', 'PagesLiées', 'Pages_liees', 'PagesLiees' ),
+       'Withoutinterwiki'          => array( 'Sans_interwiki', 'Sansinterwiki', 'Sans_interwikis', 'Sansinterwikis' ),
 );
 
 $magicWords = array(
@@ -144,7 +214,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__FORCERSOMMAIRE__', '__FORCERTDM__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__SOMMAIRE__', '__TDM__', '__TOC__' ),
        'noeditsection'             => array( '0', '__SECTIONNONEDITABLE__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__AUCUNENTETE__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'MOISACTUEL', 'MOIS2ACTUEL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'MOIS1ACTUEL', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'NOMMOISACTUEL', 'CURRENTMONTHNAME' ),
@@ -277,97 +346,27 @@ $magicWords = array(
        'url_query'                 => array( '0', 'QUESTION', 'QUERY' ),
 );
 
-$specialPageAliases = array(
-       'Activeusers'               => array( 'Utilisateurs_actifs', 'UtilisateursActifs' ),
-       'Allmessages'               => array( 'Messages_système', 'Messages_systeme', 'Messagessystème', 'Messagessysteme' ),
-       'Allpages'                  => array( 'Toutes_les_pages', 'ToutesLesPages' ),
-       'Ancientpages'              => array( 'Pages_anciennes', 'PagesAnciennes', 'Anciennes_pages', 'AnciennesPages' ),
-       'Badtitle'                  => array( 'MauvaisTitre', 'Mauvais_titre' ),
-       'Blankpage'                 => array( 'Page_blanche', 'PageBlanche' ),
-       'Block'                     => array( 'Bloquer', 'Blocage' ),
-       'Blockme'                   => array( 'Bloquez-moi', 'Bloquezmoi' ),
-       'Booksources'               => array( 'Ouvrages_de_référence', 'Ouvrages_de_reference', 'Ouvragesderéférence', 'Ouvragesdereference', 'Recherche_ISBN', 'Recherche_isbn', 'RechercheISBN', 'Rechercheisbn' ),
-       'BrokenRedirects'           => array( 'Redirections_cassées', 'RedirectionCassées', 'Redirections_cassees', 'RedirectionsCassees' ),
-       'Categories'                => array( 'Catégories' ),
-       'ChangePassword'            => array( 'Changement_du_mot_de_passe', 'ChangementDuMotDePasse' ),
-       'Confirmemail'              => array( 'Confirmer_l\'adresse_de_contact', 'Confirmer_le_courriel', 'ConfirmerLeCourriel' ),
-       'CreateAccount'             => array( 'Créer_un_compte', 'CréerUnCompte', 'CréerCompte' ),
-       'Deadendpages'              => array( 'Pages_en_impasse', 'PagesEnImpasse' ),
-       'DeletedContributions'      => array( 'Contributions_supprimées', 'ContributionsSupprimées', 'ContributionSupprimees' ),
-       'Disambiguations'           => array( 'Homonymies', 'Homonymie', 'Pages_d\'homonymie' ),
-       'DoubleRedirects'           => array( 'Doubles_redirections', 'DoublesRedirections', 'Redirections_doubles', 'RedirectionsDoubles' ),
-       'Emailuser'                 => array( 'Envoyer_un_courriel', 'EnvoyerUnCourriel', 'Courriel', 'Envoyer_un_e-mail', 'EnvoyerUnEMail', 'E-mail', 'EMail' ),
-       'Export'                    => array( 'Exporter', 'Exportation' ),
-       'Fewestrevisions'           => array( 'Pages_les_moins_modifiées', 'PagesLesMoinsModifiées', 'Pages_les_moins_modifiees', 'PagesLesMoinsModifiees', 'Les_moins_modifiés', 'LesMoinsModifiés', 'Les_moins_modifies', 'LesMoinsModifies' ),
-       'FileDuplicateSearch'       => array( 'Recherche_fichier_en_double', 'RechercheFichierEnDouble' ),
-       'Filepath'                  => array( 'Chemin_du_fichier', 'CheminDuFichier', 'CheminFichier' ),
-       'Import'                    => array( 'Importer', 'Importation' ),
-       'Invalidateemail'           => array( 'Invalider_le_courriel', 'Invalider_courriel', 'InvaliderCourriel' ),
-       'BlockList'                 => array( 'Liste_des_blocages', 'ListeDesBlocages', 'Blocages', 'Utilisateurs_bloqués', 'UtilisateursBloqués', 'Utilisateurs_bloques', 'UtilisateursBloques', 'IP_bloquées', 'IPBloquees', 'IPBloquées' ),
-       'LinkSearch'                => array( 'Recherche_de_lien', 'Recherche_de_liens' ),
-       'Listadmins'                => array( 'Liste_des_administrateurs', 'Listedesadministrateurs', 'Liste_des_admins', 'Listedesadmins', 'Liste_admins', 'Listeadmins' ),
-       'Listbots'                  => array( 'Liste_des_bots', 'ListedesBots' ),
-       'Listfiles'                 => array( 'Liste_des_fichiers', 'ListeDesFichiers', 'Liste_des_images', 'ListeDesImages' ),
-       'Listgrouprights'           => array( 'Liste_des_droits_de_groupe', 'ListeDesDroitsDeGroupes' ),
-       'Listredirects'             => array( 'Liste_des_redirections', 'Listedesredirections', 'Liste_des_redirects', 'Listedesredirects', 'Liste_redirections', 'Listeredirections', 'Liste_redirects', 'Listeredirects' ),
-       'Listusers'                 => array( 'Liste_des_utilisateurs', 'ListeDesUtilisateurs', 'Utilisateurs' ),
-       'Lockdb'                    => array( 'Verrouiller_la_base', 'Verrouillerlabase', 'Verrouiller_base', 'Verrouillerbase', 'Verrouiller_BD', 'VerrouillerBD', 'Verrouiller_bd', 'Verrouillerbd' ),
-       'Log'                       => array( 'Journal', 'Journaux' ),
-       'Lonelypages'               => array( 'Pages_orphelines', 'PagesOrphelines' ),
-       'Longpages'                 => array( 'Pages_longues', 'PagesLongues' ),
-       'MergeHistory'              => array( 'Fusionner_les_historiques', 'FusionnerHistoriques', 'Fusionner_l\'historique', 'Fusionnerlhistorique' ),
-       'MIMEsearch'                => array( 'Recherche_MIME', 'RechercheMIME', 'Recherche_mime', 'Recherchemime' ),
-       'Mostcategories'            => array( 'Pages_les_plus_catégorisées', 'PagesLesPlusCatégorisées', 'Pages_les_plus_categorisees', 'PagesLesPlusCategorisees', 'Les_plus_catégorisés', 'LesPlusCatégorisés', 'Les_plus_categorises', 'LesPlusCategorises' ),
-       'Mostimages'                => array( 'Fichiers_les_plus_liés', 'FichiersLesPlusLiés', 'Fichiers_les_plus_lies', 'FichiersLesPlusLies', 'Fichiers_les_plus_utilisés', 'FichiersLesPlusUtilisés', 'Fichiers_les_plus_utilises', 'FichiersLesPlusUtilises', 'Images_les_plus_liées', 'ImagesLesPlusLiées', 'Images_les_plus_liees', 'ImagesLesPlusLiees', 'Images_les_plus_utilisées', 'ImagesLesPlusUtilisées', 'Images_les_plus_utilisees', 'ImagesLesPlusUtilisees' ),
-       'Mostlinked'                => array( 'Pages_les_plus_liées', 'PagesLesPlusLiées', 'Pages_les_plus_liees', 'PagesLesPlusLiees', 'Les_plus_liées', 'LesPlusLiées', 'Les_plus_liees', 'LesPlusLiees' ),
-       'Mostlinkedcategories'      => array( 'Catégories_les_plus_liées', 'CatégoriesLesPlusLiées', 'Categories_les_plus_liees', 'CategoriesLesPlusLiees', 'Catégories_les_plus_utilisées', 'CatégoriesLesPlusUtilisées', 'Categories_les_plus_utilisees', 'CategoriesLesPlusUtilisees' ),
-       'Mostlinkedtemplates'       => array( 'Modèles_les_plus_liés', 'ModèlesLesPlusLiés', 'Modeles_les_plus_lies', 'ModelesLesPlusLies', 'Modèles_les_plus_utilisés', 'ModèlesLesPlusUtilisés', 'Modeles_les_plus_utilises', 'ModelesLesPlusUtilises' ),
-       'Mostrevisions'             => array( 'Pages_les_plus_modifiées', 'PagesLesPlusModifiées', 'Pages_les_plus_modifiees', 'PagesLesPlusModifiees', 'Les_plus_modifiés', 'LesPlusModifiés', 'Les_plus_modifies', 'LesPlusModifies' ),
-       'Movepage'                  => array( 'Renommer_une_page', 'Renommer', 'Renommage' ),
-       'Mycontributions'           => array( 'Mes_contributions', 'Mescontributions' ),
-       'Mypage'                    => array( 'Ma_page', 'Mapage' ),
-       'Mytalk'                    => array( 'Mes_discussions', 'Mesdiscussions' ),
-       'Newimages'                 => array( 'Nouveaux_fichiers', 'NouveauxFichiers', 'Nouvelles_images', 'NouvellesImages' ),
-       'Newpages'                  => array( 'Nouvelles_pages', 'NouvellesPages', 'Pages_récentes', 'PagesRécentes', 'Pages_recentes', 'PagesRecentes' ),
-       'PasswordReset'             => array( 'Réinitialisation_du_mot_de_passe', 'RéinitialisationDuMotDePasse' ),
-       'PermanentLink'             => array( 'LienPermanent', 'Lien_permanent' ),
-       'Popularpages'              => array( 'Pages_les_plus_visitées', 'Pages_les_plus_visitees', 'Pageslesplusvisitées', 'Pageslesplusvisitees' ),
-       'Preferences'               => array( 'Préférences' ),
-       'Prefixindex'               => array( 'Index', 'Préfixes', 'Prefixes' ),
-       'Protectedpages'            => array( 'Pages_protégées', 'PagesProtégées', 'Pages_protegees', 'PagesProtegees' ),
-       'Protectedtitles'           => array( 'Titres_protégés', 'TitresProtégés', 'Titres_proteges', 'TitresProteges' ),
-       'Randompage'                => array( 'Page_au_hasard', 'PageAuHasard', 'Au_hasard', 'AuHasard', 'Aléatoire', 'Aleatoire' ),
-       'Randomredirect'            => array( 'Redirection_au_hasard', 'Redirect_au_hasard', 'Redirectionauhasard', 'Redirectauhasard', 'Redirection_aléatoire', 'Redirect_aléatoire', 'Redirectionaléatoire', 'Redirectaléatoire', 'Redirection_aleatoire', 'Redirect_aleatoire', 'Redirectionaleatoire', 'Redirectaleatoire' ),
-       'Recentchanges'             => array( 'Modifications_récentes', 'Modifications_recentes', 'ModificationsRécentes', 'ModificationsRecentes' ),
-       'Recentchangeslinked'       => array( 'Suivi_des_liens', 'SuiviDesLiens' ),
-       'Revisiondelete'            => array( 'Versions_supprimées', 'Versions_supprimees', 'Versionsupprimées', 'Versionsupprimees' ),
-       'Search'                    => array( 'Recherche', 'Rechercher', 'Chercher' ),
-       'Shortpages'                => array( 'Pages_courtes', 'PagesCourtes' ),
-       'Specialpages'              => array( 'Pages_spéciales', 'PagesSpéciales', 'Pages_speciales', 'PagesSpeciales' ),
-       'Statistics'                => array( 'Statistiques', 'Stats' ),
-       'Tags'                      => array( 'Balises' ),
-       'Unblock'                   => array( 'Débloquer', 'Déblocage' ),
-       'Uncategorizedcategories'   => array( 'Catégories_non_catégorisées', 'CatégoriesNonCatégorisées', 'Categories_non_categorisees', 'CategoriesNonCategorisees', 'Catégories_sans_catégorie', 'CatégoriesSansCatégorie', 'Categories_sans_categorie', 'CategoriesSansCategorie' ),
-       'Uncategorizedimages'       => array( 'Fichiers_non_catégorisés', 'FichiersNonCatégorisés', 'Fichiers_non_categorises', 'FichiersNonCategorises', 'Fichiers_sans_catégorie', 'FichiersSansCatégorie', 'Fichiers_sans_categorie', 'FichiersSansCategorie', 'Images_non_catégorisées', 'ImagesNonCatégorisées', 'Images_non_categorisees', 'ImagesNonCategorisees', 'Images_sans_catégorie', 'ImagesSansCatégorie', 'Images_sans_categorie', 'ImagesSansCategorie' ),
-       'Uncategorizedpages'        => array( 'Pages_non_catégorisées', 'PagesNonCatégorisées', 'Pages_non_categorisees', 'PagesNonCategorisees', 'Pages_sans_catégorie', 'PagesSansCatégorie', 'Pages_sans_categorie', 'PagesSansCategorie' ),
-       'Uncategorizedtemplates'    => array( 'Modèles_non_catégorisés', 'ModèlesNonCatégorisés', 'Modeles_non_categorises', 'ModelesNonCategorises', 'Modèles_sans_catégorie', 'ModèlesSansCatégorie', 'Modeles_sans_catégorie', 'ModelesSansCatégorie' ),
-       'Undelete'                  => array( 'Restaurer', 'Restauration' ),
-       'Unlockdb'                  => array( 'Déverrouiller_la_base', 'Déverrouillerlabase', 'Deverrouiller_la_base', 'Deverrouillerlabase', 'Déverrouiller_base', 'Déverrouillerbase', 'Deverrouiller_base', 'Deverrouillerbase', 'Déverrouiller_BD', 'DéverrouillerBD', 'Deverrouiller_BD', 'DeverrouillerBD', 'Déverrouiller_bd', 'Déverrouillerbd', 'Deverrouiller_bd', 'Deverrouillerbd' ),
-       'Unusedcategories'          => array( 'Catégories_inutilisées', 'CatégoriesInutilisées', 'Categories_inutilisees', 'CategoriesInutilisees', 'Catégories_non_utilisées', 'CatégoriesNonUtilisées', 'Categories_non_utilisees', 'CategoriesNonUtilisees' ),
-       'Unusedimages'              => array( 'Fichiers_inutilisés', 'FichiersInutilisés', 'Fichiers_inutilises', 'FichiersInutilises', 'Fichiers_non_utilisés', 'FichiersNon_utilisés', 'Fichiers_non_utilises', 'FichiersNon_utilises', 'Images_inutilisées', 'ImagesInutilisées', 'Images_inutilisees', 'ImagesInutilisees', 'Images_non_utilisées', 'ImagesNonUtilisées', 'Images_non_utilisees', 'ImagesNonUtilisees' ),
-       'Unusedtemplates'           => array( 'Modèles_inutilisés', 'Modèlesinutilisés', 'Modeles_inutilises', 'Modelesinutilises', 'Modèles_non_utilisés', 'Modèlesnonutilisés', 'Modeles_non_utilises', 'Modelesnonutilises' ),
-       'Unwatchedpages'            => array( 'Pages_non_suivies', 'Pagesnonsuivies' ),
-       'Upload'                    => array( 'Téléverser', 'Televerser', 'Téléversement', 'Televersement', 'Téléchargement', 'Telechargement' ),
-       'Userlogin'                 => array( 'Connexion', 'Identification' ),
-       'Userlogout'                => array( 'Déconnexion', 'Deconnexion' ),
-       'Userrights'                => array( 'Permissions', 'Droits', 'Droits_des_utilisateurs' ),
-       'Wantedcategories'          => array( 'Catégories_demandées', 'CatégoriesDemandées', 'Categories_demandees', 'CategoriesDemandees' ),
-       'Wantedfiles'               => array( 'Fichiers_demandés', 'FichiersDemandés', 'Fichiers_demandes', 'FichiersDemandes' ),
-       'Wantedpages'               => array( 'Pages_demandées', 'PagesDemandées', 'Pages_demandees', 'PagesDemandees', 'Liens_brisés', 'LiensBrisés', 'Liens_brises', 'LiensBrises' ),
-       'Wantedtemplates'           => array( 'Modèles_demandés', 'ModèlesDemandés', 'Modeles_demandes', 'ModelesDemandes' ),
-       'Watchlist'                 => array( 'Liste_de_suivi', 'ListeDeSuivi', 'Suivi' ),
-       'Whatlinkshere'             => array( 'Pages_liées', 'PagesLiées', 'Pages_liees', 'PagesLiees' ),
-       'Withoutinterwiki'          => array( 'Sans_interwiki', 'Sansinterwiki', 'Sans_interwikis', 'Sansinterwikis' ),
+$bookstoreList = array(
+       'Amazon.fr'    => 'http://www.amazon.fr/exec/obidos/ISBN=$1',
+       'alapage.fr'   => 'http://www.alapage.com/mx/?tp=F&type=101&l_isbn=$1&donnee_appel=ALASQ&devise=&',
+       'fnac.com'     => 'http://www3.fnac.com/advanced/book.do?isbn=$1',
+       'chapitre.com' => 'http://www.chapitre.com/frame_rec.asp?isbn=$1',
+);
+
+$linkTrail = '/^([a-zàâçéèêîôûäëïöüùÇÉÂÊÎÔÛÄËÏÖÜÀÈÙ]+)(.*)$/sDu';
+
+$dateFormats = array(
+       'mdy time' => 'H:i',
+       'mdy date' => 'F j, Y',
+       'mdy both' => 'F j, Y à H:i',
+
+       'dmy time' => 'H:i',
+       'dmy date' => 'j F Y',
+       'dmy both' => 'j F Y à H:i',
+
+       'ymd time' => 'H:i',
+       'ymd date' => 'Y F j',
+       'ymd both' => 'Y F j à H:i',
 );
 
 $separatorTransformTable = array( ',' => "\xc2\xa0", '.' => ',' );
@@ -388,7 +387,7 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Activer la modification de sections par clic droit sur leurs titres (nécessite JavaScript)',
 'tog-showtoc' => 'Afficher la table des matières (pour les pages ayant plus de 3 sections)',
 'tog-rememberpassword' => 'Se souvenir de mon identification avec ce navigateur (au maximum $1 {{PLURAL:$1|jour|jours}})',
-'tog-watchcreations' => 'Ajouter les pages que je crée et les fichiers que j’importe à ma liste de suivi',
+'tog-watchcreations' => "Ajouter les pages que je crée et les fichiers que j'importe à ma liste de suivi",
 'tog-watchdefault' => 'Ajouter les pages et les fichiers que je modifie à ma liste de suivi',
 'tog-watchmoves' => 'Ajouter les pages et les fichiers que je renomme à ma liste de suivi',
 'tog-watchdeletion' => 'Ajouter les pages et les fichiers que je supprime à ma liste de suivi',
@@ -396,33 +395,33 @@ $messages = array(
 'tog-previewontop' => 'Afficher la prévisualisation au-dessus de la zone de modification',
 'tog-previewonfirst' => 'Afficher la prévisualisation lors de la première modification',
 'tog-nocache' => 'Désactiver le cache des pages par le navigateur',
-'tog-enotifwatchlistpages' => 'M’avertir par courriel lorsqu’une page ou un fichier de ma liste de suivi est modifiée',
-'tog-enotifusertalkpages' => 'M’avertir par courriel si ma page de discussion est modifiée',
+'tog-enotifwatchlistpages' => "M'avertir par courriel lorsqu'une page ou un fichier de ma liste de suivi est modifiée",
+'tog-enotifusertalkpages' => "M'avertir par courriel si ma page de discussion est modifiée",
 'tog-enotifminoredits' => "M'avertir par courriel même en cas de modifications mineures des pages ou des fichiers",
 'tog-enotifrevealaddr' => 'Afficher mon adresse de courriel dans les courriels de notification',
-'tog-shownumberswatching' => 'Afficher le nombre d’utilisateurs qui suivent cette page',
+'tog-shownumberswatching' => "Afficher le nombre d'utilisateurs qui suivent cette page",
 'tog-oldsig' => 'Signature existante :',
 'tog-fancysig' => 'Traiter la signature comme du wikitexte (sans lien automatique)',
-'tog-externaleditor' => 'Utiliser par défaut un éditeur de texte externe (pour les utilisateurs avancés, nécessite des réglages spécifiques sur votre ordinateur, [//www.mediawiki.org/wiki/Manual:External_editors/fr plus d’informations]).',
-'tog-externaldiff' => 'Utiliser un comparateur externe par défaut (pour les utilisateurs avancés, nécessite des réglages sur votre ordinateur, [//www.mediawiki.org/wiki/Manual:External_editors/fr plus d’informations]).',
+'tog-externaleditor' => "Utiliser par défaut un éditeur de texte externe (pour les utilisateurs avancés, nécessite des réglages spécifiques sur votre ordinateur, [//www.mediawiki.org/wiki/Manual:External_editors/fr plus d'informations]).",
+'tog-externaldiff' => "Utiliser un comparateur externe par défaut (pour les utilisateurs avancés, nécessite des réglages sur votre ordinateur, [//www.mediawiki.org/wiki/Manual:External_editors/fr plus d'informations]).",
 'tog-showjumplinks' => 'Activer les liens « navigation » et « recherche » en haut de page',
-'tog-uselivepreview' => 'Utiliser l’aperçu rapide (nécessite JavaScript) (expérimental)',
-'tog-forceeditsummary' => 'M’avertir lorsque je n’ai pas spécifié de résumé de modification',
+'tog-uselivepreview' => "Utiliser l'aperçu rapide (nécessite JavaScript) (expérimental)",
+'tog-forceeditsummary' => "M'avertir lorsque je n'ai pas spécifié de résumé de modification",
 'tog-watchlisthideown' => 'Masquer mes propres modifications dans la liste de suivi',
 'tog-watchlisthidebots' => 'Masquer les modifications faites par des robots dans la liste de suivi',
 'tog-watchlisthideminor' => 'Masquer les modifications mineures dans la liste de suivi',
 'tog-watchlisthideliu' => 'Masquer les modifications faites par des utilisateurs inscrits dans la liste de suivi',
 'tog-watchlisthideanons' => 'Masquer les modifications anonymes dans la liste de suivi',
 'tog-watchlisthidepatrolled' => 'Masquer les modifications surveillées dans la liste de suivi',
-'tog-ccmeonemails' => 'M’envoyer une copie des courriels que j’envoie aux autres utilisateurs',
+'tog-ccmeonemails' => "M'envoyer une copie des courriels que j'envoie aux autres utilisateurs",
 'tog-diffonly' => 'Ne pas afficher le contenu des pages sous les diffs',
 'tog-showhiddencats' => 'Afficher les catégories cachées',
 'tog-noconvertlink' => 'Désactiver la conversion des titres',
-'tog-norollbackdiff' => 'Ne pas afficher le diff lors d’une révocation',
+'tog-norollbackdiff' => "Ne pas afficher le diff lors d'une révocation",
 
 'underline-always' => 'Toujours',
 'underline-never' => 'Jamais',
-'underline-default' => 'Valeur par défaut du navigateur',
+'underline-default' => 'Valeur par défaut du navigateur ou du thème',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Style de police de la zone de modification :',
@@ -583,7 +582,7 @@ $messages = array(
 'imagepage' => 'Voir la page du fichier',
 'mediawikipage' => 'Voir la page du message',
 'templatepage' => 'Voir la page du modèle',
-'viewhelppage' => 'Voir la page d’aide',
+'viewhelppage' => "Voir la page d'aide",
 'categorypage' => 'Voir la page de catégorie',
 'viewtalkpage' => 'Page de discussion',
 'otherlanguages' => 'Autres langues',
@@ -595,12 +594,12 @@ $messages = array(
 'jumpto' => 'Aller à :',
 'jumptonavigation' => 'Navigation',
 'jumptosearch' => 'rechercher',
-'view-pool-error' => 'Désolé, les serveurs sont surchargés en ce moment.
-Trop dutilisateurs cherchent à consulter cette page.
-Veuillez attendre un moment avant de retenter laccès à cette page.
+'view-pool-error' => "Désolé, les serveurs sont surchargés en ce moment.
+Trop d'utilisateurs cherchent à consulter cette page.
+Veuillez attendre un moment avant de retenter l'accès à cette page.
 
-$1',
-'pool-timeout' => 'Délai dépassé durant l’attente du verrou',
+$1",
+'pool-timeout' => "Délai dépassé durant l'attente du verrou",
 'pool-queuefull' => 'La file de travail est pleine',
 'pool-errorunknown' => 'Erreur inconnue',
 
@@ -625,8 +624,8 @@ $1',
 'privacypage' => 'Project:Confidentialité',
 
 'badaccess' => 'Erreur de permission',
-'badaccess-group0' => 'Vous n’avez pas les droits suffisants pour réaliser l’action demandée.',
-'badaccess-groups' => 'L’action que vous essayez de réaliser n’est accessible qu’aux utilisateurs {{PLURAL:$2|du groupe|des groupes}} : $1.',
+'badaccess-group0' => "Vous n'avez pas les droits suffisants pour réaliser l'action demandée.",
+'badaccess-groups' => "L'action que vous essayez de réaliser n'est accessible qu'aux utilisateurs {{PLURAL:$2|du groupe|des groupes}} : $1.",
 
 'versionrequired' => 'Version $1 de MediaWiki nécessaire',
 'versionrequiredtext' => 'La version $1 de MediaWiki est nécessaire pour utiliser cette page. Consultez [[Special:Version|la page des versions]]',
@@ -680,63 +679,63 @@ $1',
 
 # Main script and global functions
 'nosuchaction' => 'Action inconnue',
-'nosuchactiontext' => 'L’action spécifiée dans l’URL est invalide.
-Vous avez peut-être mal entré lURL ou suivi un lien erroné.
-Il peut également s’agir d’un bogue dans le logiciel utilisé par {{SITENAME}}.',
+'nosuchactiontext' => "L'action spécifiée dans l'URL est invalide.
+Vous avez peut-être mal entré l'URL ou suivi un lien erroné.
+Il peut également s'agir d'un bug dans le logiciel utilisé par {{SITENAME}}.",
 'nosuchspecialpage' => 'Page spéciale inexistante',
-'nospecialpagetext' => '<strong>Vous avez demandé une page spéciale qui n’existe pas.</strong>
+'nospecialpagetext' => "<strong>Vous avez demandé une page spéciale qui n'existe pas.</strong>
 
-Une liste des pages spéciales valides se trouve sur [[Special:SpecialPages|{{int:specialpages}}]].',
+Une liste des pages spéciales valides se trouve sur [[Special:SpecialPages|{{int:specialpages}}]].",
 
 # General errors
 'error' => 'Erreur',
 'databaseerror' => 'Erreur de la base de données',
-'dberrortext' => 'Une erreur de syntaxe de la requête dans la base de données est survenue.
+'dberrortext' => "Une erreur de syntaxe de la requête dans la base de données est survenue.
 Ceci peut indiquer un bogue dans le logiciel.
 La dernière requête traitée par la base de données était :
 <blockquote><code>$1</code></blockquote>
 depuis la fonction « <code>$2</code> ».
-La base de données a renvoyé l’erreur « <samp>$3 : $4</samp> ».',
-'dberrortextcl' => 'Une requête dans la base de données comporte une erreur de syntaxe.
+La base de données a renvoyé l'erreur « <samp>$3 : $4</samp> ».",
+'dberrortextcl' => "Une requête dans la base de données comporte une erreur de syntaxe.
 La dernière requête émise était :
 « $1 »
 dans la fonction « $2 ».
-La base de données a renvoyé l’erreur « $3 : $4 ».',
+La base de données a renvoyé l'erreur « $3 : $4 ».",
 'laggedslavemode' => 'Attention, cette page peut ne pas contenir les toutes dernières modifications effectuées',
 'readonly' => 'Base de données verrouillée',
-'enterlockreason' => 'Indiquez la raison du verrouillage ainsi qu’une estimation de sa durée',
-'readonlytext' => 'Les ajouts et mises à jour de la base de données sont actuellement bloqués, probablement pour permettre la maintenance de la base, après quoi, tout rentrera dans l’ordre.
+'enterlockreason' => "Indiquez la raison du verrouillage ainsi qu'une estimation de sa durée",
+'readonlytext' => "Les ajouts et mises à jour de la base de données sont actuellement bloqués, probablement pour permettre la maintenance de la base, après quoi, tout rentrera dans l'ordre.
 
-L’administrateur ayant verrouillé la base de données a fourni l’explication suivante :<br />$1',
-'missing-article' => "La base de données n’a pas trouvé le texte d'une page qu’elle aurait dû trouver, intitulée « $1 » $2.
+L'administrateur ayant verrouillé la base de données a fourni l'explication suivante :<br />$1",
+'missing-article' => "La base de données n'a pas trouvé le texte d'une page qu'elle aurait dû trouver, intitulée « $1 » $2.
 
-Généralement, cela survient en suivant un lien vers un diff périmé ou vers lhistorique d'une page supprimée.
+Généralement, cela survient en suivant un lien vers un diff périmé ou vers l'historique d'une page supprimée.
 
-Si ce n’est pas le cas, il peut s’agir d'un bogue dans le programme.
-Veuillez le signaler à un [[Special:ListUsers/sysop|administrateur]] sans oublier de lui indiquer lURL du lien.",
+Si ce n'est pas le cas, il peut s'agir d'un bogue dans le programme.
+Veuillez le signaler à un [[Special:ListUsers/sysop|administrateur]] sans oublier de lui indiquer l'URL du lien.",
 'missingarticle-rev' => '(numéro de version : $1)',
 'missingarticle-diff' => '(diff : $1, $2)',
 'readonly_lag' => 'La base de données a été automatiquement verrouillée pendant que les serveurs secondaires rattrapent leur retard sur le serveur principal.',
 'internalerror' => 'Erreur interne',
 'internalerror_info' => 'Erreur interne : $1',
-'fileappenderrorread' => 'Impossible de lire « $1 » lors de l’insertion',
-'fileappenderror' => 'Impossible d’ajouter « $1 » à « $2 ».',
+'fileappenderrorread' => "Impossible de lire « $1 » lors de l'insertion",
+'fileappenderror' => "Impossible d'ajouter « $1 » à « $2 ».",
 'filecopyerror' => 'Impossible de copier le fichier « $1 » vers « $2 ».',
 'filerenameerror' => 'Impossible de renommer le fichier « $1 » en « $2 ».',
 'filedeleteerror' => 'Impossible de supprimer le fichier « $1 ».',
 'directorycreateerror' => 'Impossible de créer le dossier « $1 ».',
 'filenotfound' => 'Impossible de trouver le fichier « $1 ».',
-'fileexistserror' => 'Impossible d’écrire le fichier « $1 » : le fichier existe.',
+'fileexistserror' => "Impossible d'écrire le fichier « $1 » : le fichier existe.",
 'unexpected' => 'Valeur inattendue : « $1 » = « $2 ».',
 'formerror' => 'Erreur : Impossible de soumettre le formulaire.',
 'badarticleerror' => 'Cette action ne peut pas être effectuée sur cette page.',
-'cannotdelete' => 'Impossible de supprimer la page ou le fichier « $1 ».
-La suppression a peut-être déjà été effectuée par quelqu’un d’autre.',
+'cannotdelete' => "Impossible de supprimer la page ou le fichier « $1 ».
+La suppression a peut-être déjà été effectuée par quelqu'un d'autre.",
 'cannotdelete-title' => 'Impossible de supprimer la page « $1 »',
 'delete-hook-aborted' => "Suppression annulée par une extension.
 Aucune explication n'a été fournie.",
 'badtitle' => 'Mauvais titre',
-'badtitletext' => 'Le titre de la page demandée est invalide, vide, ou il s’agit d’un titre inter-langue ou inter-projet mal lié. Il contient peut-être un ou plusieurs caractères qui ne peuvent pas être utilisés dans les titres.',
+'badtitletext' => "Le titre de la page demandée est invalide, vide, ou il s'agit d'un titre inter-langue ou inter-projet mal lié. Il contient peut-être un ou plusieurs caractères qui ne peuvent pas être utilisés dans les titres.",
 'perfcached' => 'Les données suivantes sont en cache et peuvent ne pas être à jour. Un maximum de {{PLURAL:$1|un résultat|$1 résultats}} est disponible dans le cache.',
 'perfcachedts' => 'Les données suivantes sont en cache et ont été mises à jour pour la dernière fois à $1. Un maximum de {{PLURAL:$4|un résultat|$4 résultats}} est disponible dans le cache.',
 'querypage-no-updates' => 'Les mises à jour pour cette page sont actuellement désactivées. Les données ci-dessous ne sont pas mises à jour.',
@@ -746,29 +745,29 @@ Requête : $2',
 'viewsource' => 'Voir le texte source',
 'viewsource-title' => 'Voir la source de $1',
 'actionthrottled' => 'Action limitée',
-'actionthrottledtext' => 'Pour lutter contre les pourriels, l’utilisation de cette action est limitée à un certain nombre de fois dans un laps de temps assez court. Il s’avère que vous avez dépassé cette limite.
-Essayez à nouveau dans quelques minutes.',
+'actionthrottledtext' => "Pour lutter contre le spam, l'utilisation de cette action est limitée à un certain nombre de fois dans un laps de temps assez court. Il s'avère que vous avez dépassé cette limite.
+Essayez à nouveau dans quelques minutes.",
 'protectedpagetext' => 'Cette page a été protégée pour empêcher sa modification.',
 'viewsourcetext' => 'Vous pouvez voir et copier le contenu de la page :',
 'viewyourtext' => "Vous pouvez voir et copier le contenu de '''vos modifications''' à cette page :",
-'protectedinterface' => 'Cette page fournit du texte d’interface pour le logiciel sur ce wiki, et est protégée pour éviter les abus.
-Pour ajouter ou modifier des traductions sur tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet de localisation de MediaWiki.',
-'editinginterface' => "'''Attention''': Vous êtes en train de modifier une page utilisée pour créer le texte de linterface du logiciel. Les changements sur cette page se répercuteront dur l'apparence de l'interface utilisateur pour les autres utilisateurs de ce wiki.
-Pour ajouter ou modifier des traductions pour tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet dinternationalisation de MediaWiki.",
+'protectedinterface' => "Cette page fournit du texte d'interface pour le logiciel sur ce wiki, et est protégée pour éviter les abus.
+Pour ajouter ou modifier des traductions sur tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet de localisation de MediaWiki.",
+'editinginterface' => "'''Attention''': Vous êtes en train de modifier une page utilisée pour créer le texte de l'interface du logiciel. Les changements sur cette page se répercuteront dur l'apparence de l'interface utilisateur pour les autres utilisateurs de ce wiki.
+Pour ajouter ou modifier des traductions pour tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet d'internationalisation de MediaWiki.",
 'sqlhidden' => '(Requête SQL cachée)',
-'cascadeprotected' => 'Cette page est protégée car elle est incluse par {{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 :
-$2',
-'namespaceprotected' => "Vous n’avez pas la permission de modifier les pages de l’espace de noms « '''$1''' ».",
-'customcssprotected' => 'Vous n’avez pas la permission de modifier cette page de CSS, car elle contient les paramètres personnels d’un autre utilisateur.',
-'customjsprotected' => 'Vous n’avez pas la permission de modifier cette page de JavaScript, car elle contient les paramètres personnels d’un autre utilisateur.',
-'ns-specialprotected' => 'Les pages dans l’espace de noms « {{ns:special}} » ne peuvent pas être modifiées.',
+'cascadeprotected' => "Cette page est protégée car elle est incluse par {{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 :
+$2",
+'namespaceprotected' => "Vous n'avez pas la permission de modifier les pages de l'espace de noms « '''$1''' ».",
+'customcssprotected' => "Vous n'avez pas la permission de modifier cette page de CSS, car elle contient les paramètres personnels d'un autre utilisateur.",
+'customjsprotected' => "Vous n'avez pas la permission de modifier cette page de JavaScript, car elle contient les paramètres personnels d'un autre utilisateur.",
+'ns-specialprotected' => "Les pages dans l'espace de noms « {{ns:special}} » ne peuvent pas être modifiées.",
 'titleprotected' => "Ce titre a été protégé à la création par [[User:$1|$1]].
 Le motif avancé est « ''$2'' ».",
-'filereadonlyerror' => 'Impossible de modifier le fichier « $1 » parce que le répertoire de fichiers « $2 » est en lecture seule.
+'filereadonlyerror' => "Impossible de modifier le fichier « $1 » parce que le répertoire de fichiers « $2 » est en lecture seule.
 
-L’administrateur qui l’a verrouillé a fourni ce motif: « $3 ».',
-'invalidtitle-knownnamespace' => 'Titre invalide avec l’espace de noms « $2 » et l’intitulé « $3 »',
-'invalidtitle-unknownnamespace' => 'Titre invalide avec le numéro d’espace de noms $1 et l’intitulé « $2 » inconnus',
+L'administrateur qui l'a verrouillé a fourni ce motif: « $3 ».",
+'invalidtitle-knownnamespace' => "Titre invalide avec l'espace de noms « $2 » et l'intitulé « $3 »",
+'invalidtitle-unknownnamespace' => "Titre invalide avec le numéro d'espace de noms $1 et l'intitulé « $2 » inconnus",
 'exception-nologin' => 'Non connecté',
 'exception-nologin-text' => "Cette page ou cette action nécessite d'être connecté sur ce wiki.",
 
@@ -781,7 +780,7 @@ L’administrateur qui l’a verrouillé a fourni ce motif: « $3 ».',
 'logouttext' => "'''Vous êtes à présent déconnecté(e).'''
 
 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.",
+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.",
 'welcomecreation' => '== Bienvenue, $1 ! ==
 
 Votre compte a été créé.
@@ -976,7 +975,7 @@ Si vous cliquez de nouveau sur le bouton « {{int:savearticle}} », la publicati
 Si vous cliquez de nouveau sur « {{int:Savearticle}} », votre modification sera enregistrée sans titre.",
 'summary-preview' => 'Aperçu du résumé :',
 'subject-preview' => 'Prévisualisation du sujet/titre :',
-'blockedtitle' => "L'utilisateur est bloqué.",
+'blockedtitle' => 'L’utilisateur est bloqué.',
 'blockedtext' => "'''Votre compte utilisateur ou votre adresse IP a été bloqué.'''
 
 Le blocage a été effectué par $1.
@@ -1193,7 +1192,7 @@ La raison donnée était ''$2''.",
 'page_first' => 'première',
 'page_last' => 'dernière',
 'histlegend' => 'Légende : ({{int:cur}}) = différence avec la version actuelle, ({{int:last}}) = différence avec la version précédente, <b>{{int:minoreditletter}}</b> = modification mineure',
-'history-fieldset-title' => "Naviguer dans l'historique",
+'history-fieldset-title' => 'Naviguer dans l’historique',
 'history-show-deleted' => 'Masqués seulement',
 'histfirst' => 'première page',
 'histlast' => 'dernière page',
@@ -1658,6 +1657,9 @@ Elle ne doit pas dépasser $1 caractère{{PLURAL:$1||s}}.',
 'rightslogtext' => 'Voici l’historique des modifications des droits des utilisateurs.',
 'rightslogentry' => "a modifié les droits de l'utilisateur « $1 » de $2 à $3",
 'rightslogentry-autopromote' => 'a été automatiquement promu de $2 à $3',
+'logentry-rights-rights' => "$1 a modifié l'appartenance au groupe pour $3 de $4 à $5",
+'logentry-rights-rights-legacy' => "$1 a modifié l'appartenance au groupe pour $3",
+'logentry-rights-autopromote' => '$1 a été promu automatiquement de $4 à $5',
 'rightsnone' => '(aucun)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2287,9 +2289,9 @@ Voyez aussi [[Special:WantedCategories|les catégories demandées]].',
 'linksearch-pat' => 'Expression recherchée :',
 'linksearch-ns' => 'Espace de noms :',
 'linksearch-ok' => 'Rechercher',
-'linksearch-text' => 'Des caractères jokers comme « *.wikipedia.org » peuvent être utilisés.
+'linksearch-text' => "Des caractères jokers comme « *.wikipedia.org » peuvent être utilisés.
 Ils nécessitent au moins un domaine de niveau supérieur, par exemple « *.org ».<br />
-Protocoles reconnus : <code>$1</code> (n’ajoutez aucun de ceux-ci dans votre recherche).',
+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.',
 
@@ -2678,11 +2680,11 @@ 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",
+'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).',
@@ -3147,7 +3149,7 @@ 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',
@@ -3167,7 +3169,7 @@ Permet de rétablir la version précédente et d’ajouter un motif dans la boî
 
 # Info page
 'pageinfo-title' => 'Informations pour « $1 »',
-'pageinfo-not-current' => 'Les informations peuvent uniquement être affichées pour la révision en cours.',
+'pageinfo-not-current' => 'Désolé, impossible de fournir cette information pour les anciennes révisions.',
 'pageinfo-header-basic' => 'Informations de base',
 'pageinfo-header-edits' => 'Historique des modifications',
 'pageinfo-header-restrictions' => 'Protection de la page',
@@ -3970,18 +3972,18 @@ Vous pouvez aussi [[Special:EditWatchlist|utiliser l’éditeur normal]].',
 'version-poweredby-credits' => "Ce wiki fonctionne grâce à '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'autres',
 'version-credits-summary' => 'Nous tenons à remercier les personnes suivantes pour leur contribution à  [[Special:Version|MediaWiki]].',
-'version-license-info' => "MediaWiki est un logiciel libre, vous pouvez le redistribuer et / ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation ; soit la version 2 de la Licence, ou (à votre choix) toute version ultérieure.
+'version-license-info' => 'MediaWiki est un logiciel libre, vous pouvez le redistribuer ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation ; soit la version 2 de la Licence, ou (à votre choix) toute version ultérieure.
 
-MediaWiki est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION A UN USAGE PARTICULIER. Voir la Licence Publique Générale GNU pour plus de détails.
+MediaWiki est distribué dans l’espoir qu’il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D’ADAPTATION À UN USAGE PARTICULIER. Voir la Licence Publique Générale GNU pour plus de détails.
 
-Vous devriez avoir reçu [{{SERVER}}{{SCRIPTPATH}}/COPYING une copie de la Licence Publique Générale GNU] avec ce programme, sinon, écrivez à la Free Software Foundation, Inc, 51, rue Franklin, cinquième étage, Boston, MA 02110-1301, États-Unis ou [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lisez-la en ligne].",
+Vous devriez avoir reçu [{{SERVER}}{{SCRIPTPATH}}/COPYING une copie de la Licence Publique Générale GNU] avec ce programme, sinon, écrivez à la Free Software Foundation, Inc., 51, rue Franklin, cinquième étage, Boston, MA 02110-1301, États-Unis ou [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lisez-la en ligne].',
 'version-software' => 'Logiciels installés',
 'version-software-product' => 'Produit',
 'version-software-version' => 'Version',
 'version-entrypoints' => 'URL des points d’entrée',
-'version-entrypoints-header-entrypoint' => "Point d'entrée",
+'version-entrypoints-header-entrypoint' => 'Point d’entrée',
 'version-entrypoints-header-url' => 'URL',
-'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Chemin d\'article]',
+'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Chemin darticle]',
 'version-entrypoints-scriptpath' => '[https://www.mediawiki.org/wiki/Manual:$wgScriptPath Chemin de script]',
 
 # Special:FilePath
index e58b27a..b3e439b 100644 (file)
@@ -151,7 +151,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__FORCIÉR_LO_SOMÈRO__', '__FORCIÉR_LA_TRÂBLA__', '__FORCERSOMMAIRE__', '__FORCERTDM__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__SOMÈRO__', '__TRÂBLA__', '__SOMMAIRE__', '__TDM__', '__TOC__' ),
        'noeditsection'             => array( '0', '__SÈCCION_QUE_PÔT_PAS_ÉTRE_CHANGIÊ__', '__SECTIONNONEDITABLE__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__NION_EN_TÉTA__', '__AUCUNENTETE__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'MÊS_D_ORA', 'MÊS_D_ORA_2', 'MOISACTUEL', 'MOIS2ACTUEL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'MÊS_D_ORA_1', 'MOIS1ACTUEL', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'NOM_DU_MÊS_D_ORA', 'NOMMOISACTUEL', 'CURRENTMONTHNAME' ),
index 36b28d2..855fd8f 100644 (file)
@@ -61,7 +61,7 @@ $defaultDateFormat = 'dmy';
 $dateFormats = array(
        'dmy time' => 'H:i',
        'dmy date' => 'j \d\e F \d\e Y',
-       'dmy both' => 'H:i\,\ j \d\e F \d\e Y',
+       'dmy both' => 'j \d\e F \d\e Y "ás" H:i',
 );
 
 $specialPageAliases = array(
@@ -133,7 +133,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Cambios_recentes' ),
        'Recentchangeslinked'       => array( 'Cambios_relacionados' ),
        'Revisiondelete'            => array( 'Revisións_borradas' ),
-       'RevisionMove'              => array( 'Traslado_de_revisión' ),
        'Search'                    => array( 'Procurar' ),
        'Shortpages'                => array( 'Páxinas_curtas' ),
        'Specialpages'              => array( 'Páxinas_especiais' ),
@@ -171,7 +170,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__FORZAROÍNDICE__', '__FORCARTDC__', '__FORCARSUMARIO__', '__FORÇARTDC__', '__FORÇARSUMÁRIO__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__ÍNDICE__', '__TDC__', '__SUMÁRIO__', '__SUMARIO__', '__TOC__' ),
        'noeditsection'             => array( '0', '__SECCIÓNSNONEDITABLES__', '__NÃOEDITARSEÇÃO__', '__SEMEDITARSEÇÃO__', '__NAOEDITARSECAO__', '__SEMEDITARSECAO__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '___SENCABECEIRA__', '__SEMCABECALHO__', '__SEMCABEÇALHO__', '__SEMTITULO__', '__SEMTÍTULO__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'MESACTUAL', 'MESATUAL', 'MESATUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'MESACTUAL1', 'MESATUAL1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'NOMEDOMESACTUAL', 'NOMEDOMESATUAL', 'CURRENTMONTHNAME' ),
@@ -273,7 +271,7 @@ $messages = array(
 
 'underline-always' => 'Sempre',
 'underline-never' => 'Nunca',
-'underline-default' => 'Opción do propio navegador',
+'underline-default' => 'Opción predeterminada da aparencia ou do navegador',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Tipo de letra da caixa de edición:',
@@ -1542,8 +1540,11 @@ Ha de ter menos {{PLURAL:$1|dun carácter|de $1 caracteres}}.',
 # User rights log
 'rightslog' => 'Rexistro de dereitos de usuario',
 'rightslogtext' => 'Este é un rexistro dos cambios nos permisos de usuario.',
-'rightslogentry' => 'cambiou o grupo ao que pertence "$1" de $2 a $3',
+'rightslogentry' => 'cambiou o grupo ao que pertence $1 de $2 a $3',
 'rightslogentry-autopromote' => 'foi promovido automaticamente de $2 a $3',
+'logentry-rights-rights' => '$1 cambiou o grupo ao que pertence $3 de $4 a $5',
+'logentry-rights-rights-legacy' => '$1 cambiou o grupo ao que pertence $3',
+'logentry-rights-autopromote' => '$1 foi promovido automaticamente de $4 a $5',
 'rightsnone' => '(ningún)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -1595,7 +1596,7 @@ Ha de ter menos {{PLURAL:$1|dun carácter|de $1 caracteres}}.',
 'recentchanges-label-unpatrolled' => 'Esta edición aínda non foi comprobada',
 'rcnote' => "A continuación {{PLURAL:$1|móstrase '''1''' cambio|móstranse os últimos '''$1''' cambios}} {{PLURAL:$2|no último día|nos últimos '''$2''' días}} ata o $4 ás $5.",
 'rcnotefrom' => "A continuación móstranse os cambios feitos desde o '''$3''' ás '''$4''' (móstranse '''$1''' como máximo).",
-'rclistfrom' => 'Mostrar os cambios novos desde as $1',
+'rclistfrom' => 'Mostrar os cambios novos desde o $1',
 'rcshowhideminor' => '$1 as edicións pequenas',
 'rcshowhidebots' => '$1 os bots',
 'rcshowhideliu' => '$1 os usuarios rexistrados',
@@ -2181,7 +2182,7 @@ Olle tamén as [[Special:WantedCategories|categorías requiridas]].',
 'linksearch-ok' => 'Procurar',
 'linksearch-text' => 'Pódense usar caracteres comodín como "*.wikipedia.org".
 Cómpre, polo menos, un dominio de nivel superior, por exemplo "*.org".<br />
-Protocolos soportados: <code>$1</code> (non engada ningún destes na súa procura).',
+Protocolos soportados: <code>$1</code> (úsase http:// como predeterminado se non se especifica ningún protocolo).',
 'linksearch-line' => '$1 está ligado desde a páxina "$2"',
 'linksearch-error' => 'Os caracteres comodín só poden aparecer ao principio do nome do servidor.',
 
@@ -2230,8 +2231,8 @@ Se quere máis información acerca dos dereitos individuais, pode atopala [[{{Me
 'emailuser-title-target' => 'Enviar un correo electrónico a {{GENDER:$1|este usuario|esta usuaria}}',
 'emailuser-title-notarget' => 'Enviar un correo electrónico a un usuario',
 'emailpage' => 'Enviar un correo electrónico a un usuario',
-'emailpagetext' => 'Pode usar o formulario de embaixo para enviar unha mensaxe de correo electrónico a este usuario.
-O correo electrónico que inseriu [[Special:Preferences|nas súas preferencias]] aparecerá no campo "De:" do correo, polo que o receptor da mensaxe poderalle responder.',
+'emailpagetext' => 'Pode usar o seguinte formulario para enviar unha mensaxe de correo electrónico a {{GENDER:$1|este usuario|esta usuaria}}.
+O enderezo de correo electrónico que inseriu [[Special:Preferences|nas súas preferencias]] aparecerá no campo "De:" do correo, polo que {{GENDER:$1|o receptor|a receptora}} da mensaxe poderá responderlle directamente.',
 'usermailererror' => 'O obxecto enviado deu unha mensaxe de erro:',
 'defemailsubject' => 'Correo electrónico do usuario $1 de {{SITENAME}}',
 'usermaildisabled' => 'O correo electrónico do usuario está desactivado',
@@ -3061,7 +3062,7 @@ Isto, probabelmente, se debe a unha ligazón cara a un sitio externo que está n
 
 # Info page
 'pageinfo-title' => 'Información sobre "$1"',
-'pageinfo-not-current' => 'Unicamente se pode mostrar a información sobre a revisión actual.',
+'pageinfo-not-current' => 'Sentímolo, non é posible achegar esa información sobre as revisións vellas.',
 'pageinfo-header-basic' => 'Información básica',
 'pageinfo-header-edits' => 'Historial de edicións',
 'pageinfo-header-restrictions' => 'Protección da páxina',
@@ -3070,6 +3071,7 @@ Isto, probabelmente, se debe a unha ligazón cara a un sitio externo que está n
 'pageinfo-default-sort' => 'Clave de ordenación por defecto',
 'pageinfo-length' => 'Lonxitude da páxina (en bytes)',
 'pageinfo-article-id' => 'ID da páxina',
+'pageinfo-language' => 'Lingua do contido da páxina',
 'pageinfo-robot-policy' => 'Estado do motor de procuras',
 'pageinfo-robot-index' => 'Indexable',
 'pageinfo-robot-noindex' => 'Non indexable',
@@ -3176,7 +3178,7 @@ O seu sistema pode quedar comprometido se o executa.",
 'sp-newimages-showfrom' => 'Mostrar os novos ficheiros comezando polo $1 ás $2',
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
-'minutes-abbrev' => '$1min',
+'minutes-abbrev' => '$1 min',
 'seconds' => '{{PLURAL:$1|$1 segundo|$1 segundos}}',
 'minutes' => '{{PLURAL:$1|$1 minuto|$1 minutos}}',
 'hours' => '{{PLURAL:$1|$1 hora|$1 horas}}',
index 4dd850e..41fddb3 100644 (file)
@@ -96,7 +96,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Letschti_Änderige' ),
        'Recentchangeslinked'       => array( 'Änderige_an_verlinkte_Syte' ),
        'Revisiondelete'            => array( 'Versionsleschig' ),
-       'RevisionMove'              => array( 'Version_verschiebe' ),
        'Search'                    => array( 'Suech' ),
        'Shortpages'                => array( 'Churzi_Syte' ),
        'Specialpages'              => array( 'Spezialsyte' ),
index 24397ba..c74f3d6 100644 (file)
@@ -28,43 +28,133 @@ $rtl = true;
 $linkTrail = '/^([a-zא-ת]+)(.*)$/sDu';
 $fallback8bitEncoding = 'windows-1255';
 
-
-$datePreferences = array(
-       'default',
-       'mdy',
-       'dmy',
-       'ymd',
-       'hebrew',
-       'ISO 8601',
+$namespaceNames = array(
+       NS_MEDIA            => 'מדיה',
+       NS_SPECIAL          => 'מיוחד',
+       NS_MAIN             => '',
+       NS_TALK             => 'שיחה',
+       NS_USER             => 'משתמש',
+       NS_USER_TALK        => 'שיחת_משתמש',
+       NS_PROJECT_TALK     => 'שיחת_$1',
+       NS_FILE             => 'קובץ',
+       NS_FILE_TALK        => 'שיחת_קובץ',
+       NS_MEDIAWIKI        => 'מדיה_ויקי',
+       NS_MEDIAWIKI_TALK   => 'שיחת_מדיה_ויקי',
+       NS_TEMPLATE         => 'תבנית',
+       NS_TEMPLATE_TALK    => 'שיחת_תבנית',
+       NS_HELP             => 'עזרה',
+       NS_HELP_TALK        => 'שיחת_עזרה',
+       NS_CATEGORY         => 'קטגוריה',
+       NS_CATEGORY_TALK    => 'שיחת_קטגוריה',
 );
-
-$dateFormats = array(
-       'mdy time' => 'H:i',
-       'mdy date' => 'xg j, Y',
-       'mdy both' => 'H:i, xg j, Y',
-
-       'dmy time' => 'H:i',
-       'dmy date' => 'j xg Y',
-       'dmy both' => 'H:i, j xg Y',
-
-       'ymd time' => 'H:i',
-       'ymd date' => 'Y xg j',
-       'ymd both' => 'H:i, Y xg j',
-
-       'hebrew time' => 'H:i',
-       'hebrew date' => 'xhxjj xjx xhxjY',
-       'hebrew both' => 'H:i, xhxjj xjx xhxjY',
-
-       'ISO 8601 time' => 'xnH:xni:xns',
-       'ISO 8601 date' => 'xnY-xnm-xnd',
-       'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
+$namespaceAliases = array(
+       'תמונה'      => NS_FILE,
+       'שיחת_תמונה' => NS_FILE_TALK,
+);
+$namespaceGenderAliases = array(
+       NS_USER      => array( 'male' => 'משתמש', 'female' => 'משתמשת' ),
+       NS_USER_TALK => array( 'male' => 'שיחת_משתמש', 'female' => 'שיחת_משתמשת' ),
 );
 
-$bookstoreList = array(
-       'מיתוס'          => 'http://www.mitos.co.il/',
-       'iBooks'         => 'http://www.ibooks.co.il/',
-       'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
-       'Amazon.com'     => 'http://www.amazon.com/exec/obidos/ISBN=$1'
+$specialPageAliases = array(
+       'Activeusers'               => array( 'משתמשים_פעילים' ),
+       'Allmessages'               => array( 'הודעות_המערכת' ),
+       'Allpages'                  => array( 'כל_הדפים' ),
+       'Ancientpages'              => array( 'דפים_מוזנחים' ),
+       'Badtitle'                  => array( 'כותרת_שגויה' ),
+       'Blankpage'                 => array( 'דף_ריק' ),
+       'Block'                     => array( 'חסימה', 'חסימת_כתובת', 'חסימת_משתמש' ),
+       'Blockme'                   => array( 'חסום_אותי' ),
+       'Booksources'               => array( 'משאבי_ספרות', 'משאבי_ספרות_חיצוניים' ),
+       'BrokenRedirects'           => array( 'הפניות_לא_תקינות', 'הפניות_שבורות' ),
+       'Categories'                => array( 'קטגוריות', 'רשימת_קטגוריות' ),
+       'ChangeEmail'               => array( 'שינוי_דואר_אלקטרוני', 'שינוי_דואל' ),
+       'ChangePassword'            => array( 'שינוי_סיסמה' ),
+       'ComparePages'              => array( 'השוואת_דפים' ),
+       'Confirmemail'              => array( 'אימות_כתובת_דואר' ),
+       'Contributions'             => array( 'תרומות', 'תרומות_המשתמש' ),
+       'CreateAccount'             => array( 'הרשמה_לחשבון' ),
+       'Deadendpages'              => array( 'דפים_ללא_קישורים' ),
+       'DeletedContributions'      => array( 'תרומות_מחוקות' ),
+       'Disambiguations'           => array( 'פירושונים', 'דפי_פירושונים' ),
+       'DoubleRedirects'           => array( 'הפניות_כפולות' ),
+       'EditWatchlist'             => array( 'עריכת_רשימת_המעקב' ),
+       'Emailuser'                 => array( 'שליחת_דואר_למשתמש' ),
+       'Export'                    => array( 'ייצוא', 'ייצוא_דפים' ),
+       'Fewestrevisions'           => array( 'הגרסאות_המעטות_ביותר', 'הדפים_בעלי_מספר_העריכות_הנמוך_ביותר' ),
+       'FileDuplicateSearch'       => array( 'חיפוש_קבצים_כפולים' ),
+       'Filepath'                  => array( 'נתיב_לקובץ' ),
+       'Import'                    => array( 'ייבוא', 'ייבוא_דפים' ),
+       'Invalidateemail'           => array( 'ביטול_דואר' ),
+       'JavaScriptTest'            => array( 'בדיקת_JavaScript' ),
+       'BlockList'                 => array( 'רשימת_חסומים', 'רשימת_משתמשים_חסומים', 'משתמשים_חסומים' ),
+       'LinkSearch'                => array( 'חיפוש_קישורים_חיצוניים' ),
+       'Listadmins'                => array( 'רשימת_מפעילים' ),
+       'Listbots'                  => array( 'רשימת_בוטים' ),
+       'Listfiles'                 => array( 'רשימת_קבצים', 'רשימת_תמונות', 'קבצים', 'תמונות' ),
+       'Listgrouprights'           => array( 'רשימת_הרשאות_לקבוצה' ),
+       'Listredirects'             => array( 'רשימת_הפניות', 'הפניות' ),
+       'Listusers'                 => array( 'רשימת_משתמשים', 'משתמשים' ),
+       'Lockdb'                    => array( 'נעילת_בסיס_הנתונים' ),
+       'Log'                       => array( 'יומנים' ),
+       'Lonelypages'               => array( 'דפים_יתומים' ),
+       'Longpages'                 => array( 'דפים_ארוכים' ),
+       'MergeHistory'              => array( 'מיזוג_גרסאות' ),
+       'MIMEsearch'                => array( 'חיפוש_MIME' ),
+       'Mostcategories'            => array( 'הקטגוריות_הרבות_ביותר', 'הדפים_מרובי-הקטגוריות_ביותר' ),
+       'Mostimages'                => array( 'הקבצים_המקושרים_ביותר', 'התמונות_המקושרות_ביותר' ),
+       'Mostlinked'                => array( 'הדפים_המקושרים_ביותר', 'המקושרים_ביותר' ),
+       'Mostlinkedcategories'      => array( 'הקטגוריות_המקושרות_ביותר' ),
+       'Mostlinkedtemplates'       => array( 'התבניות_המקושרות_ביותר' ),
+       'Mostrevisions'             => array( 'הגרסאות_הרבות_ביותר', 'הדפים_בעלי_מספר_העריכות_הגבוה_ביותר' ),
+       'Movepage'                  => array( 'העברת_דף', 'העברה' ),
+       'Mycontributions'           => array( 'התרומות_שלי' ),
+       'Mypage'                    => array( 'הדף_שלי', 'דף_המשתמש_שלי' ),
+       'Mytalk'                    => array( 'השיחה_שלי', 'דף_השיחה_שלי' ),
+       'Myuploads'                 => array( 'ההעלאות_שלי' ),
+       'Newimages'                 => array( 'קבצים_חדשים', 'תמונות_חדשות', 'גלריית_קבצים_חדשים', 'גלריית_תמונות_חדשות' ),
+       'Newpages'                  => array( 'דפים_חדשים' ),
+       'PasswordReset'             => array( 'איפוס_סיסמה' ),
+       'PermanentLink'             => array( 'קישור_קבוע' ),
+       'Popularpages'              => array( 'הדפים_הנצפים_ביותר', 'דפים_פופולריים' ),
+       'Preferences'               => array( 'העדפות', 'ההעדפות_שלי' ),
+       'Prefixindex'               => array( 'דפים_המתחילים_ב' ),
+       'Protectedpages'            => array( 'דפים_מוגנים' ),
+       'Protectedtitles'           => array( 'כותרות_מוגנות' ),
+       'Randompage'                => array( 'אקראי', 'דף_אקראי' ),
+       'Randomredirect'            => array( 'הפניה_אקראית' ),
+       'Recentchanges'             => array( 'שינויים_אחרונים' ),
+       'Recentchangeslinked'       => array( 'שינויים_בדפים_המקושרים' ),
+       'Revisiondelete'            => array( 'מחיקת_ושחזור_גרסאות' ),
+       'Search'                    => array( 'חיפוש' ),
+       'Shortpages'                => array( 'דפים_קצרים' ),
+       'Specialpages'              => array( 'דפים_מיוחדים' ),
+       'Statistics'                => array( 'סטטיסטיקות' ),
+       'Tags'                      => array( 'תגיות' ),
+       'Unblock'                   => array( 'שחרור_חסימה' ),
+       'Uncategorizedcategories'   => array( 'קטגוריות_חסרות_קטגוריה' ),
+       'Uncategorizedimages'       => array( 'קבצים_חסרי_קטגוריה', 'תמונות_חסרות_קטגוריה' ),
+       'Uncategorizedpages'        => array( 'דפים_חסרי_קטגוריה' ),
+       'Uncategorizedtemplates'    => array( 'תבניות_חסרות_קטגוריות' ),
+       'Undelete'                  => array( 'צפייה_בדפים_מחוקים' ),
+       'Unlockdb'                  => array( 'שחרור_בסיס_הנתונים' ),
+       'Unusedcategories'          => array( 'קטגוריות_שאינן_בשימוש' ),
+       'Unusedimages'              => array( 'קבצים_שאינם_בשימוש', 'תמונות_שאינן_בשימוש' ),
+       'Unusedtemplates'           => array( 'תבניות_שאינן_בשימוש' ),
+       'Unwatchedpages'            => array( 'דפים_שאינם_במעקב' ),
+       'Upload'                    => array( 'העלאה', 'העלאת_קובץ_לשרת' ),
+       'UploadStash'               => array( 'מאגר_העלאות' ),
+       'Userlogin'                 => array( 'כניסה_לחשבון', 'כניסה', 'כניסה_/_הרשמה_לחשבון' ),
+       'Userlogout'                => array( 'יציאה_מהחשבון', 'יציאה' ),
+       'Userrights'                => array( 'ניהול_הרשאות_משתמש', 'הפיכת_משתמש_למפעיל_מערכת', 'הענקת_או_ביטול_הרשאת_בוט' ),
+       'Version'                   => array( 'גרסה', 'גרסת_התוכנה' ),
+       'Wantedcategories'          => array( 'קטגוריות_מבוקשות' ),
+       'Wantedfiles'               => array( 'קבצים_מבוקשים' ),
+       'Wantedpages'               => array( 'דפים_מבוקשים' ),
+       'Wantedtemplates'           => array( 'תבניות_מבוקשות' ),
+       'Watchlist'                 => array( 'רשימת_המעקב', 'רשימת_מעקב', 'רשימת_המעקב_שלי' ),
+       'Whatlinkshere'             => array( 'דפים_המקושרים_לכאן' ),
+       'Withoutinterwiki'          => array( 'דפים_ללא_קישורי_שפה' ),
 );
 
 $magicWords = array(
@@ -74,7 +164,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__חייב_תוכן_עניינים__', '__חייב_תוכן__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__תוכן_עניינים__', '__תוכן__', '__TOC__' ),
        'noeditsection'             => array( '0', '__ללא_עריכה__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__ללא_כותרת__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'חודש נוכחי', 'חודש נוכחי 2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'חודש נוכחי 1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'שם חודש נוכחי', 'CURRENTMONTHNAME' ),
@@ -222,134 +311,42 @@ $magicWords = array(
        'defaultsort_noreplace'     => array( '0', 'ללא החלפה', 'noreplace' ),
 );
 
-$specialPageAliases = array(
-       'Activeusers'               => array( 'משתמשים_פעילים' ),
-       'Allmessages'               => array( 'הודעות_המערכת' ),
-       'Allpages'                  => array( 'כל_הדפים' ),
-       'Ancientpages'              => array( 'דפים_מוזנחים' ),
-       'Badtitle'                  => array( 'כותרת_שגויה' ),
-       'Blankpage'                 => array( 'דף_ריק' ),
-       'Block'                     => array( 'חסימה', 'חסימת_כתובת', 'חסימת_משתמש' ),
-       'Blockme'                   => array( 'חסום_אותי' ),
-       'Booksources'               => array( 'משאבי_ספרות', 'משאבי_ספרות_חיצוניים' ),
-       'BrokenRedirects'           => array( 'הפניות_לא_תקינות', 'הפניות_שבורות' ),
-       'Categories'                => array( 'קטגוריות', 'רשימת_קטגוריות' ),
-       'ChangeEmail'               => array( 'שינוי_דואר_אלקטרוני', 'שינוי_דואל' ),
-       'ChangePassword'            => array( 'שינוי_סיסמה' ),
-       'ComparePages'              => array( 'השוואת_דפים' ),
-       'Confirmemail'              => array( 'אימות_כתובת_דואר' ),
-       'Contributions'             => array( 'תרומות', 'תרומות_המשתמש' ),
-       'CreateAccount'             => array( 'הרשמה_לחשבון' ),
-       'Deadendpages'              => array( 'דפים_ללא_קישורים' ),
-       'DeletedContributions'      => array( 'תרומות_מחוקות' ),
-       'Disambiguations'           => array( 'פירושונים', 'דפי_פירושונים' ),
-       'DoubleRedirects'           => array( 'הפניות_כפולות' ),
-       'EditWatchlist'             => array( 'עריכת_רשימת_המעקב' ),
-       'Emailuser'                 => array( 'שליחת_דואר_למשתמש' ),
-       'Export'                    => array( 'ייצוא', 'ייצוא_דפים' ),
-       'Fewestrevisions'           => array( 'הגרסאות_המעטות_ביותר', 'הדפים_בעלי_מספר_העריכות_הנמוך_ביותר' ),
-       'FileDuplicateSearch'       => array( 'חיפוש_קבצים_כפולים' ),
-       'Filepath'                  => array( 'נתיב_לקובץ' ),
-       'Import'                    => array( 'ייבוא', 'ייבוא_דפים' ),
-       'Invalidateemail'           => array( 'ביטול_דואר' ),
-       'JavaScriptTest'            => array( 'בדיקת_JavaScript' ),
-       'BlockList'                 => array( 'רשימת_חסומים', 'רשימת_משתמשים_חסומים', 'משתמשים_חסומים' ),
-       'LinkSearch'                => array( 'חיפוש_קישורים_חיצוניים' ),
-       'Listadmins'                => array( 'רשימת_מפעילים' ),
-       'Listbots'                  => array( 'רשימת_בוטים' ),
-       'Listfiles'                 => array( 'רשימת_קבצים', 'רשימת_תמונות', 'קבצים', 'תמונות' ),
-       'Listgrouprights'           => array( 'רשימת_הרשאות_לקבוצה' ),
-       'Listredirects'             => array( 'רשימת_הפניות', 'הפניות' ),
-       'Listusers'                 => array( 'רשימת_משתמשים', 'משתמשים' ),
-       'Lockdb'                    => array( 'נעילת_בסיס_הנתונים' ),
-       'Log'                       => array( 'יומנים' ),
-       'Lonelypages'               => array( 'דפים_יתומים' ),
-       'Longpages'                 => array( 'דפים_ארוכים' ),
-       'MergeHistory'              => array( 'מיזוג_גרסאות' ),
-       'MIMEsearch'                => array( 'חיפוש_MIME' ),
-       'Mostcategories'            => array( 'הקטגוריות_הרבות_ביותר', 'הדפים_מרובי-הקטגוריות_ביותר' ),
-       'Mostimages'                => array( 'הקבצים_המקושרים_ביותר', 'התמונות_המקושרות_ביותר' ),
-       'Mostlinked'                => array( 'הדפים_המקושרים_ביותר', 'המקושרים_ביותר' ),
-       'Mostlinkedcategories'      => array( 'הקטגוריות_המקושרות_ביותר' ),
-       'Mostlinkedtemplates'       => array( 'התבניות_המקושרות_ביותר' ),
-       'Mostrevisions'             => array( 'הגרסאות_הרבות_ביותר', 'הדפים_בעלי_מספר_העריכות_הגבוה_ביותר' ),
-       'Movepage'                  => array( 'העברת_דף', 'העברה' ),
-       'Mycontributions'           => array( 'התרומות_שלי' ),
-       'Mypage'                    => array( 'הדף_שלי', 'דף_המשתמש_שלי' ),
-       'Mytalk'                    => array( 'השיחה_שלי', 'דף_השיחה_שלי' ),
-       'Myuploads'                 => array( 'ההעלאות_שלי' ),
-       'Newimages'                 => array( 'קבצים_חדשים', 'תמונות_חדשות', 'גלריית_קבצים_חדשים', 'גלריית_תמונות_חדשות' ),
-       'Newpages'                  => array( 'דפים_חדשים' ),
-       'PasswordReset'             => array( 'איפוס_סיסמה' ),
-       'PermanentLink'             => array( 'קישור_קבוע' ),
-       'Popularpages'              => array( 'הדפים_הנצפים_ביותר', 'דפים_פופולריים' ),
-       'Preferences'               => array( 'העדפות', 'ההעדפות_שלי' ),
-       'Prefixindex'               => array( 'דפים_המתחילים_ב' ),
-       'Protectedpages'            => array( 'דפים_מוגנים' ),
-       'Protectedtitles'           => array( 'כותרות_מוגנות' ),
-       'Randompage'                => array( 'אקראי', 'דף_אקראי' ),
-       'Randomredirect'            => array( 'הפניה_אקראית' ),
-       'Recentchanges'             => array( 'שינויים_אחרונים' ),
-       'Recentchangeslinked'       => array( 'שינויים_בדפים_המקושרים' ),
-       'Revisiondelete'            => array( 'מחיקת_ושחזור_גרסאות' ),
-       'RevisionMove'              => array( 'העברת_גרסאות' ),
-       'Search'                    => array( 'חיפוש' ),
-       'Shortpages'                => array( 'דפים_קצרים' ),
-       'Specialpages'              => array( 'דפים_מיוחדים' ),
-       'Statistics'                => array( 'סטטיסטיקות' ),
-       'Tags'                      => array( 'תגיות' ),
-       'Unblock'                   => array( 'שחרור_חסימה' ),
-       'Uncategorizedcategories'   => array( 'קטגוריות_חסרות_קטגוריה' ),
-       'Uncategorizedimages'       => array( 'קבצים_חסרי_קטגוריה', 'תמונות_חסרות_קטגוריה' ),
-       'Uncategorizedpages'        => array( 'דפים_חסרי_קטגוריה' ),
-       'Uncategorizedtemplates'    => array( 'תבניות_חסרות_קטגוריות' ),
-       'Undelete'                  => array( 'צפייה_בדפים_מחוקים' ),
-       'Unlockdb'                  => array( 'שחרור_בסיס_הנתונים' ),
-       'Unusedcategories'          => array( 'קטגוריות_שאינן_בשימוש' ),
-       'Unusedimages'              => array( 'קבצים_שאינם_בשימוש', 'תמונות_שאינן_בשימוש' ),
-       'Unusedtemplates'           => array( 'תבניות_שאינן_בשימוש' ),
-       'Unwatchedpages'            => array( 'דפים_שאינם_במעקב' ),
-       'Upload'                    => array( 'העלאה', 'העלאת_קובץ_לשרת' ),
-       'UploadStash'               => array( 'מאגר_העלאות' ),
-       'Userlogin'                 => array( 'כניסה_לחשבון', 'כניסה', 'כניסה_/_הרשמה_לחשבון' ),
-       'Userlogout'                => array( 'יציאה_מהחשבון', 'יציאה' ),
-       'Userrights'                => array( 'ניהול_הרשאות_משתמש', 'הפיכת_משתמש_למפעיל_מערכת', 'הענקת_או_ביטול_הרשאת_בוט' ),
-       'Version'                   => array( 'גרסה', 'גרסת_התוכנה' ),
-       'Wantedcategories'          => array( 'קטגוריות_מבוקשות' ),
-       'Wantedfiles'               => array( 'קבצים_מבוקשים' ),
-       'Wantedpages'               => array( 'דפים_מבוקשים' ),
-       'Wantedtemplates'           => array( 'תבניות_מבוקשות' ),
-       'Watchlist'                 => array( 'רשימת_המעקב', 'רשימת_מעקב', 'רשימת_המעקב_שלי' ),
-       'Whatlinkshere'             => array( 'דפים_המקושרים_לכאן' ),
-       'Withoutinterwiki'          => array( 'דפים_ללא_קישורי_שפה' ),
+$datePreferences = array(
+       'default',
+       'mdy',
+       'dmy',
+       'ymd',
+       'hebrew',
+       'ISO 8601',
 );
 
-$namespaceNames = array(
-       NS_MEDIA            => 'מדיה',
-       NS_SPECIAL          => 'מיוחד',
-       NS_MAIN             => '',
-       NS_TALK             => 'שיחה',
-       NS_USER             => 'משתמש',
-       NS_USER_TALK        => 'שיחת_משתמש',
-       NS_PROJECT_TALK     => 'שיחת_$1',
-       NS_FILE             => 'קובץ',
-       NS_FILE_TALK        => 'שיחת_קובץ',
-       NS_MEDIAWIKI        => 'מדיה_ויקי',
-       NS_MEDIAWIKI_TALK   => 'שיחת_מדיה_ויקי',
-       NS_TEMPLATE         => 'תבנית',
-       NS_TEMPLATE_TALK    => 'שיחת_תבנית',
-       NS_HELP             => 'עזרה',
-       NS_HELP_TALK        => 'שיחת_עזרה',
-       NS_CATEGORY         => 'קטגוריה',
-       NS_CATEGORY_TALK    => 'שיחת_קטגוריה',
-);
-$namespaceAliases = array(
-       'תמונה'      => NS_FILE,
-       'שיחת_תמונה' => NS_FILE_TALK,
+$dateFormats = array(
+       'mdy time' => 'H:i',
+       'mdy date' => 'xg j, Y',
+       'mdy both' => 'H:i, xg j, Y',
+
+       'dmy time' => 'H:i',
+       'dmy date' => 'j xg Y',
+       'dmy both' => 'H:i, j xg Y',
+
+       'ymd time' => 'H:i',
+       'ymd date' => 'Y xg j',
+       'ymd both' => 'H:i, Y xg j',
+
+       'hebrew time' => 'H:i',
+       'hebrew date' => 'xhxjj xjx xhxjY',
+       'hebrew both' => 'H:i, xhxjj xjx xhxjY',
+
+       'ISO 8601 time' => 'xnH:xni:xns',
+       'ISO 8601 date' => 'xnY-xnm-xnd',
+       'ISO 8601 both' => 'xnY-xnm-xnd"T"xnH:xni:xns',
 );
-$namespaceGenderAliases = array(
-       NS_USER      => array( 'male' => 'משתמש', 'female' => 'משתמשת' ),
-       NS_USER_TALK => array( 'male' => 'שיחת_משתמש', 'female' => 'שיחת_משתמשת' ),
+
+$bookstoreList = array(
+       'מיתוס'          => 'http://www.mitos.co.il/',
+       'iBooks'         => 'http://www.ibooks.co.il/',
+       'Barnes & Noble' => 'http://search.barnesandnoble.com/bookSearch/isbnInquiry.asp?isbn=$1',
+       'Amazon.com'     => 'http://www.amazon.com/exec/obidos/ISBN=$1'
 );
 
 $messages = array(
@@ -402,7 +399,7 @@ $messages = array(
 
 'underline-always' => 'תמיד',
 'underline-never' => 'לעולם לא',
-'underline-default' => 'ברירת מחדל של הדפדפן',
+'underline-default' => '×\91ר×\99רת ×\9e×\97×\93×\9c ×©×\9c ×\94×¢×\99צ×\95×\91 ×\90×\95 ×©×\9c ×\94×\93פ×\93פ×\9f',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'הגופן בתיבת העריכה:',
@@ -1667,6 +1664,9 @@ $1",
 '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"
@@ -2300,7 +2300,7 @@ $1',
 'linksearch-ok' => 'חיפוש',
 'linksearch-text' => 'ניתן להשתמש בתווים כלליים, לדוגמה <span dir="ltr">"*.wikipedia.org"</span>.
 נדרשת לפחות סיומת אינטרנט (TLD), למשל <span dir="ltr">"*.org"</span>.<br />
-פר×\95×\98×\95ק×\95×\9c×\99×\9d × ×ª×\9e×\9b×\99×\9d: <code dir="ltr">$1</code> (×\90×\99×\9f ×\9c×\94×\95ס×\99×£ ×\90×\95ת×\9d ×\91×\97×\99פ×\95ש).',
+פר×\95×\98×\95ק×\95×\9c×\99×\9d × ×ª×\9e×\9b×\99×\9d: <code dir="ltr">$1</code> (×\91ר×\99רת ×\94×\9e×\97×\93×\9c ×\94×\99×\90 <span dir="ltr">http://</span> ×\90×\9d ×\9c×\90 ×¦×\95×\99×\9f ×¤×¨×\95×\98×\95ק×\95×\9c).',
 'linksearch-line' => '$1 מקושר מהדף $2',
 'linksearch-error' => 'תווים כלליים יכולים להופיע רק בתחילת שם השרת.',
 
@@ -2349,7 +2349,7 @@ $1',
 'emailuser-title-target' => 'שליחת דוא"ל {{GENDER:$1|למשתמש זה|למשתמשת זו}}',
 'emailuser-title-notarget' => 'שליחת דוא"ל למשתמש',
 'emailpage' => 'שליחת דואר למשתמש',
-'emailpagetext' => '× ×\99ת×\9f ×\9c×\94שת×\9eש ×\91×\98×\95פס ×\9b×\93×\99 ×\9cש×\9c×\95×\97 ×\94×\95×\93עת ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 {{GENDER:$1|×\9c×\9eשת×\9eש ×\94×\96×\94\9c×\9eשת×\9eשת ×\94×\96×\90ת}}.
+'emailpagetext' => '× ×\99ת×\9f ×\9c×\94שת×\9eש ×\91×\98×\95פס ×\9b×\93×\99 ×\9cש×\9c×\95×\97 ×\94×\95×\93עת ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 {{GENDER:$1|×\9c×\9eשת×\9eש ×\96×\94\9c×\9eשת×\9eשת ×\96×\95}}.
 כתובת הדואר האלקטרוני שכתבתם ב[[Special:Preferences|העדפות המשתמש שלכם]] תופיע ככתובת שההודעה נשלחה ממנה, כדי לאפשר תגובה ישירה.',
 'usermailererror' => 'אובייקט הדואר החזיר שגיאה:',
 'defemailsubject' => 'דוא"ל מ{{grammar:תחילית|{{SITENAME}}}} מהמשתמש "$1"',
@@ -3176,7 +3176,7 @@ $1',
 
 # Info page
 'pageinfo-title' => 'מידע על "$1"',
-'pageinfo-not-current' => '×\94×\9e×\99×\93×¢ ×\99×\9b×\95×\9c ×\9c×\94×\99×\95ת ×\9e×\95צ×\92 ×¨×§ ×¢×\91×\95ר ×\94×\92רס×\94 ×\94× ×\95×\9b×\97×\99ת.',
+'pageinfo-not-current' => '×\9eצ×\98ער×\99×\9d, ×\9c×\90 × ×\99ת×\9f ×\9c×\94צ×\99×\92 ×\90ת ×\94×\9e×\99×\93×¢ ×\94×\96×\94 ×\9c×\92רס×\90×\95ת ×\99שנ×\95ת.',
 'pageinfo-header-basic' => 'מידע בסיסי',
 'pageinfo-header-edits' => 'היסטוריית עריכות',
 'pageinfo-header-restrictions' => 'הגנה על הדף',
index 91fe9f8..8b114e4 100644 (file)
@@ -157,7 +157,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__UKLJUČISADRŽAJ__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__SADRŽAJ__', '__TOC__' ),
        'noeditsection'             => array( '0', '__BEZUREĐIVANJAODLOMAKA__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__BEZZAGLAVLJA__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'TRENUTAČNIMJESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'TRENUTAČNIMJESEC1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'TRENUTAČNIMJESECIME', 'CURRENTMONTHNAME' ),
index 89d2dd6..027c6fa 100644 (file)
@@ -201,7 +201,7 @@ $messages = array(
 
 'underline-always' => 'Přeco',
 'underline-never' => 'Ženje',
-'underline-default' => 'Standard wobhladowaka',
+'underline-default' => 'Standard drasty abo wobhladowaka',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Pismowy stil wobdźěłowanskeho pola:',
@@ -1420,6 +1420,9 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d
 'rightslogtext' => 'To je protokol změnow wužiwarskich prawow.',
 'rightslogentry' => 'změni skupinske čłonstwo za $1 z $2 do $3',
 'rightslogentry-autopromote' => 'je so awtomatisce wot $2 do $3 změnił',
+'logentry-rights-rights' => '$1 změni skupinske čłonstwo za $3 z $4 do $5',
+'logentry-rights-rights-legacy' => '$1 změni skupinske čłonstwo za $3',
+'logentry-rights-autopromote' => '$1 powyši so awtomatisce wot $4 do $5',
 'rightsnone' => '(ničo)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2855,7 +2858,7 @@ W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{#Special:Expor
 
 # Info page
 'pageinfo-title' => 'Informacije za stronu "$1"',
-'pageinfo-not-current' => 'Informacije hodźa so jenož za aktualnu wersiju zwobraznić.',
+'pageinfo-not-current' => 'Bohužel njedadźa so tute informacije za stare wersije podać.',
 'pageinfo-header-basic' => 'Zakładne informacije',
 'pageinfo-header-edits' => 'Stawizny wobdźěłać',
 'pageinfo-header-restrictions' => 'Škit strony',
index b7f2e3d..43becc4 100644 (file)
@@ -107,7 +107,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'ChanjmanResan' ),
        'Recentchangeslinked'       => array( 'LyenChanjmanResan', 'ChanjmanAk' ),
        'Revisiondelete'            => array( 'RevizyonSiprime' ),
-       'RevisionMove'              => array( 'DeplaseRevizyon' ),
        'Search'                    => array( 'Chache', 'Fouye' ),
        'Shortpages'                => array( 'PajKout' ),
        'Specialpages'              => array( 'PajEspesyal' ),
index ce471dc..739ca1a 100644 (file)
@@ -136,7 +136,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Friss_változtatások' ),
        'Recentchangeslinked'       => array( 'Kapcsolódó_változtatások' ),
        'Revisiondelete'            => array( 'Változat_törlése' ),
-       'RevisionMove'              => array( 'Változat_áthelyezése' ),
        'Search'                    => array( 'Keresés' ),
        'Shortpages'                => array( 'Rövid_lapok' ),
        'Specialpages'              => array( 'Speciális_lapok' ),
@@ -360,7 +359,7 @@ $messages = array(
 
 'underline-always' => 'mindig',
 'underline-never' => 'soha',
-'underline-default' => 'a böngésző alapértelmezése szerint',
+'underline-default' => 'Felület és böngésző alapértelmezése szerint',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'A szerkesztőterület betűtípusa:',
index ef7ca14..993e0ea 100644 (file)
@@ -853,7 +853,10 @@ $2',
 
 Համակարգ մուտք գործելուն պես կարող եք ''[[Special:ChangePassword|փոխել գաղտնաբառը]]''։",
 'newarticle' => '(Նոր)',
-'newarticletext' => "Դուք հղվել եք դեռևս գոյություն չունեցող էջի։ Էջը ստեղծելու համար սկսեք տեքստի մուտքագրումը ներքևի արկղում (այցելեք [[{{MediaWiki:Helppage}}|օգնության էջը]]՝ մանրամասն տեղեկությունների համար)։ Եթե դուք սխալմամբ եք այստեղ հայտնվել, ապա մատնահարեք ձեր զննարկիչի '''back''' կոճակը։",
+'newarticletext' => "Դուք հղվել եք դեռևս գոյություն չունեցող էջի։ 
+Նոր էջ ստեղծելու համար ներքևում գտնվող խմբագրման դաշտում ավելացրեք ձեր տեքստը, այնուհետև սեղմեք '''Հիշել էջը''' (այցելեք [[{{MediaWiki:Helppage}}|օգնության էջը]]՝ մանրամասն տեղեկությունների համար)։ 
+
+Եթե դուք սխալմամբ եք այստեղ հայտնվել, ապա սեղմեք ձեր զննարկիչի '''հետ''' (back) կոճակը։",
 'anontalkpagetext' => "{| style=\"background-repeat:no-repeat; background-position:800px -20px; margin:0.5em 0 0.5em 0; clear:both;\" width=100% class=toccolours
 |- 
 | <span class=\"plainlinksneverexpand\">''Այս քննարկման էջը պատկանում է չգրանցված կամ համակարգ չմտած մասնակցի, ով խմբագրում կատարելիս օգտվել է {{BASEPAGENAME}} ԱյՓի հասցեից։''
index ba86167..b9f907a 100644 (file)
@@ -110,7 +110,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Modificationes_recente' ),
        'Recentchangeslinked'       => array( 'Modificationes_recente_ligate', 'Modificationes_connexe' ),
        'Revisiondelete'            => array( 'Deletion_de_versiones' ),
-       'RevisionMove'              => array( 'Displaciar_versiones' ),
        'Search'                    => array( 'Recerca' ),
        'Shortpages'                => array( 'Paginas_curte' ),
        'Specialpages'              => array( 'Paginas_special' ),
@@ -191,7 +190,7 @@ $messages = array(
 
 'underline-always' => 'Sempre',
 'underline-never' => 'Nunquam',
-'underline-default' => 'Secundo le configuration del navigator',
+'underline-default' => 'Como definite per tu navigator o apparentia',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Stilo de litteras del area de modification:',
@@ -1476,6 +1475,9 @@ Si tu opta pro dar lo, isto essera usate pro dar te attribution pro tu contribut
 'rightslogtext' => 'Isto es un registro de cambios in derectos de usator.',
 'rightslogentry' => 'cambiava le gruppos del quales $1 es membro de $2 a $3',
 'rightslogentry-autopromote' => 'ha essite automaticamente promovite de $2 a $3',
+'logentry-rights-rights' => '$1 cambiava le appertinentia a gruppos pro $3 de $4 a $5',
+'logentry-rights-rights-legacy' => '$1 cambiava le appertinentia a gruppos pro $3',
+'logentry-rights-autopromote' => '$1 ha essite automaticamente promovite de $4 a $5',
 'rightsnone' => '(nulle)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -3007,7 +3009,7 @@ Le causa es probabilemente un ligamine verso un sito externe que es presente in
 
 # Info page
 'pageinfo-title' => 'Informationes pro "$1"',
-'pageinfo-not-current' => 'Information pote esser monstrate solmente pro le version actual.',
+'pageinfo-not-current' => 'Regrettabilemente, il es impossibile fornir iste information pro versiones ancian.',
 'pageinfo-header-basic' => 'Information de base',
 'pageinfo-header-edits' => 'Historia de modificationes',
 'pageinfo-header-restrictions' => 'Protection del pagina',
index 2766fda..3c46067 100644 (file)
@@ -80,7 +80,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__PAKSADAFTARISI__', '__PAKSADASI__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__DAFTARISI__', '__DASI__', '__TOC__' ),
        'noeditsection'             => array( '0', '__TANPASUNTINGANBAGIAN__', '__NIRSUBA__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__TANPAKEPALA__', '__NIRLA__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'BULANKINI', 'BULANKINI2', 'BUKIN', 'BUKIN2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'BULANKINI1', 'BUKIN1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'NAMABULANKINI', 'NAMBUKIN', 'CURRENTMONTHNAME' ),
@@ -283,7 +282,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Perubahan_terbaru', 'PerubahanTerbaru', 'RC', 'PT' ),
        'Recentchangeslinked'       => array( 'Perubahan_terkait', 'PerubahanTerkait' ),
        'Revisiondelete'            => array( 'Hapus_revisi', 'HapusRevisi' ),
-       'RevisionMove'              => array( 'Revisi_pemindahan', 'RevisiPemindahan' ),
        'Search'                    => array( 'Pencarian', 'Cari' ),
        'Shortpages'                => array( 'Halaman_pendek', 'HalamanPendek' ),
        'Specialpages'              => array( 'Halaman_istimewa', 'HalamanIstimewa' ),
@@ -984,8 +982,8 @@ Alamat IP seperti ini mungkin dipakai bersama oleh beberapa pengguna yang berbed
 Jika Anda adalah seorang pengguna anonim dan merasa mendapatkan komentar-komentar yang tidak relevan yang ditujukan langsung kepada Anda, silakan [[Special:UserLogin/signup|membuat akun]] atau [[Special:UserLogin|masuk log]] untuk menghindari kerancuan dengan pengguna anonim lainnya di lain waktu.''",
 'noarticletext' => 'Saat ini tidak ada teks di halaman ini.
 Anda dapat [[Special:Search/{{PAGENAME}}|melakukan pencarian untuk judul halaman ini]] di halaman-halaman lain, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mencari log terkait], atau [{{fullurl:{{FULLPAGENAME}}|action=edit}} menyunting halaman ini]</span>.',
-'noarticletext-nopermission' => 'Saat ini tidak ada teks di halaman ini.
-Anda dapat [[Special:Search/{{PAGENAME}}|melakukan pencarian untuk judul halaman ini]] di halaman-halaman lain, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mencari log terkait], atau [{{fullurl:{{FULLPAGENAME}}|action=edit}} menyunting halaman ini]</span>.',
+'noarticletext-nopermission' => '!Saat ini tidak ada teks di halaman ini.
+Anda dapat [[Special:Search/{{PAGENAME}}|melakukan pencarian untuk judul halaman ini]] di halaman-halaman lain, atau <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mencari log terkait]</span>, tapi anda tidak memiliki izin untuk membuat halaman ini',
 'missing-revision' => 'Revisi #$1 halaman berjudul "{{PAGENAME}}" tidak eksks.
 
 Hal ini biasanya disebabkan oleh tautan versi terdahulu menuju halaman yang sudah dihapus.
index 0a19d2a..c6b00c1 100644 (file)
@@ -102,7 +102,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Nov_changes' ),
        'Recentchangeslinked'       => array( 'Changes_referet', 'Changes_relatet' ),
        'Revisiondelete'            => array( 'Deleter_revision' ),
-       'RevisionMove'              => array( 'Mover_revision' ),
        'Search'                    => array( 'Serchar' ),
        'Shortpages'                => array( 'Págines_curt' ),
        'Specialpages'              => array( 'Págines_special' ),
index 69a66c8..0aa8d2c 100644 (file)
@@ -316,7 +316,7 @@ $messages = array(
 
 'underline-always' => 'Sempre',
 'underline-never' => 'Mai',
-'underline-default' => 'Mantieni le impostazioni del browser',
+'underline-default' => 'Mantieni le impostazioni del browser o della skin',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Stile del carattere nella casella di modifica:',
@@ -1538,6 +1538,9 @@ Il tuo indirizzo non viene rivelato quando gli altri utenti ti contattano.',
 'rightslogtext' => 'Di seguito sono elencate le modifiche ai diritti assegnati agli utenti.',
 'rightslogentry' => "ha modificato l'appartenenza di $1 dal gruppo $2 al gruppo $3",
 'rightslogentry-autopromote' => 'è stato/a automaticamente promosso/a da $2 a $3',
+'logentry-rights-rights' => "$1 ha modificato l'appartenenza di $3 dal gruppo $4 al gruppo $5",
+'logentry-rights-rights-legacy' => "$1 ha modificato l'appartenenza a gruppi di $3",
+'logentry-rights-autopromote' => '$1 è stato/a automaticamente promosso/a da $4 a $5',
 'rightsnone' => '(nessuno)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2153,7 +2156,7 @@ Vedi anche le [[Special:WantedCategories|categorie richieste]].',
 'linksearch-ok' => 'Cerca',
 'linksearch-text' => 'È possibile fare uso di metacaratteri, ad esempio "*.wikipedia.org".<br />
 È necessario almeno un dominio di primo livello, ad esempio "*.org".<br />
-Protocolli supportati: <code>$1</code> (non aggiungere nessuno di questi nella tua ricerca).',
+Protocolli supportati: <code>$1</code> (predefinito http:// se nessun protocollo è specificato).',
 'linksearch-line' => '$1 presente nella pagina $2',
 'linksearch-error' => "I metacaratteri possono essere usati solo all'inizio dell'indirizzo.",
 
@@ -2523,7 +2526,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 redirect',
 'whatlinkshere-hidetrans' => '$1 inclusioni',
 'whatlinkshere-hidelinks' => '$1 link',
-'whatlinkshere-hideimages' => '$1 link da immagini',
+'whatlinkshere-hideimages' => '$1 link da file',
 'whatlinkshere-filters' => 'Filtri',
 
 # Block/unblock
@@ -3002,7 +3005,7 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 
 # Info page
 'pageinfo-title' => 'Informazioni per "$1"',
-'pageinfo-not-current' => 'Le informazioni possono essere visualizzate solo per la versione corrente.',
+'pageinfo-not-current' => "Spiacente, ma è impossibile fornire quest'informazione per vecchie versioni.",
 'pageinfo-header-basic' => 'Informazioni di base',
 'pageinfo-header-edits' => 'Cronologia delle modifiche',
 'pageinfo-header-restrictions' => 'Protezione della pagina',
index 2312d73..3e7f8c7 100644 (file)
@@ -179,7 +179,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( '最近の更新', '最近更新したページ' ),
        'Recentchangeslinked'       => array( '関連ページの更新状況', 'リンク先の更新状況' ),
        'Revisiondelete'            => array( '版指定削除', '特定版削除' ),
-       'RevisionMove'              => array( '版移動' ),
        'Search'                    => array( '検索' ),
        'Shortpages'                => array( '短いページ' ),
        'Specialpages'              => array( '特別ページ一覧' ),
@@ -218,7 +217,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__目次強制__', '__目次強制__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__目次__', '__目次__', '__TOC__' ),
        'noeditsection'             => array( '0', '__節編集非表示__', '__セクション編集非表示__', '__セクション編集非表示__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__見出し非表示__', '__見出し非表示__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', '現在の月', '協定月', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', '現在の月1', '協定月1', '協定月1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', '現在の月名', '協定月名', 'CURRENTMONTHNAME' ),
@@ -292,7 +290,7 @@ $magicWords = array(
        'img_text_bottom'           => array( '1', '文下端', 'text-bottom' ),
        'img_link'                  => array( '1', 'リンク=$1', 'link=$1' ),
        'img_alt'                   => array( '1', '代替文=$1', 'alt=$1' ),
-       'int'                       => array( '0', 'インターフェース:', 'インタ:', 'インターフェース:', 'インタ:', 'INT:' ),
+       'int'                       => array( '0', 'インターフェース:', 'インタ:', 'インターフェース:', 'インタ:', 'インターフェイス:', 'インターフェイス:', 'INT:' ),
        'sitename'                  => array( '1', 'サイト名', 'サイトネーム', 'SITENAME' ),
        'ns'                        => array( '0', '名前空間:', '名前空間:', '名空:', '名空:', 'NS:' ),
        'nse'                       => array( '0', '名前空間E:', 'NSE:' ),
@@ -359,7 +357,7 @@ $magicWords = array(
        'formatdate'                => array( '0', '日付整形', 'formatdate', 'dateformat' ),
        'url_path'                  => array( '0', 'パス', 'PATH' ),
        'url_wiki'                  => array( '0', 'ウィキ', 'WIKI' ),
-       'url_query'                 => array( '0', 'クエリー', 'QUERY' ),
+       'url_query'                 => array( '0', 'クエリ', 'クエリー', 'QUERY' ),
 );
 
 $messages = array(
@@ -412,7 +410,7 @@ $messages = array(
 
 'underline-always' => '常に付ける',
 'underline-never' => '常に付けない',
-'underline-default' => 'ブラウザーの設定を使用',
+'underline-default' => '外装またはブラウザーの既定値を使用',
 
 # Font style option in Special:Preferences
 'editfont-style' => '編集エリアのフォント:',
@@ -1084,7 +1082,7 @@ IP アドレスは複数の利用者で共有されている場合がありま
 'note' => "'''お知らせ:'''",
 'previewnote' => "'''これはプレビューです。'''
 変更内容はまだ保存されていません!",
-'continue-editing' => 'ç·¨é\9b\86ã\82¨ã\83ªã\82¢ã\81«ç§»å\8b\95',
+'continue-editing' => 'ç·¨é\9b\86ã\82\92ç¶\9aè¡\8c',
 'previewconflict' => 'これは、上の編集エリアの文章を保存した場合にどう表示されるかを示すプレビューです。',
 'session_fail_preview' => "'''申し訳ありません!セッションデータが消失したため編集を処理できませんでした。'''
 もう一度やり直してください。
@@ -1444,7 +1442,7 @@ $1",
 'showingresults' => "'''$2''' 件目以降の最大 {{PLURAL:$1|'''$1''' 件の結果}}を表示しています。",
 'showingresultsnum' => "'''$2''' 件目以降の {{PLURAL:$3|'''$3''' 件の結果}}を表示しています。",
 'showingresultsheader' => "「'''$4'''」の検索結果 {{PLURAL:$5|'''$3''' 件中の '''$1''' 件目|'''$3''' 件中の '''$1''' 件目から '''$2''' 件目}}",
-'nonefound' => "'''注意'''既定では一部の名前空間のみを検索します。
+'nonefound' => "'''注意'''既定では一部の名前空間のみを検索します。
 ''all:''を前に付けると、すべて(トークページやテンプレートなどを含む)を対象にできます。検索する名前空間を前に付けることもできます。",
 'search-nonefound' => '問い合わせに合致する検索結果はありませんでした。',
 'powersearch' => '高度な検索',
@@ -1505,7 +1503,7 @@ $1",
 'rows' => '行数:',
 'columns' => '列数:',
 'searchresultshead' => '検索',
-'resultsperpage' => '1ページあたりの表示件数:',
+'resultsperpage' => '1 ページあたりの表示件数:',
 'stub-threshold' => '<a href="#" class="stub">スタブリンク</a>として表示する閾値 (バイト):',
 'stub-threshold-disabled' => '無効',
 'recentchangesdays' => '最近の更新に表示する日数:',
@@ -1514,7 +1512,7 @@ $1",
 'prefs-help-recentchangescount' => 'この設定は最近の更新、ページの履歴、および記録に適用されます。',
 'prefs-help-watchlist-token' => 'この欄に秘密鍵を入力すると、あなたのウォッチリストのRSSフィードが生成されます。
 この欄に入力されている鍵を知っている人は誰でもこのウォッチリストを閲覧できるようになるため、他人に分からない値を選んでください。
-乱数によって生成された次の値を使うこともできます$1',
+乱数によって生成された次の値を使うこともできます$1',
 'savedprefs' => '個人設定を保存しました。',
 'timezonelegend' => 'タイムゾーン:',
 'localtime' => 'ローカルの時刻:',
@@ -1567,7 +1565,7 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'gender-unknown' => '未指定',
 'gender-male' => '男',
 'gender-female' => '女',
-'prefs-help-gender' => '省略可ソフトウェアによる文法的性の解決に使用されます。
+'prefs-help-gender' => '省略可ソフトウェアによる文法的性の解決に使用されます。
 この情報は公開されます。',
 'email' => 'メール',
 'prefs-help-realname' => '本名は省略できます。
@@ -1598,19 +1596,19 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 # User rights
 'userrights' => '利用者権限を管理',
 'userrights-lookup-user' => '利用者グループを管理',
-'userrights-user-editname' => '利用者名を入力',
+'userrights-user-editname' => '利用者名を入力:',
 'editusergroup' => '利用者グループを編集',
 'editinguser' => "利用者''' [[User:$1|$1]]''' $2 の権限を変更",
 'userrights-editusergroup' => '利用者グループを編集',
 'saveusergroups' => '利用者グループを保存',
-'userrights-groupsmember' => '所属グループ',
-'userrights-groupsmember-auto' => '自動的に付与される権限',
+'userrights-groupsmember' => '所属グループ:',
+'userrights-groupsmember-auto' => '自動的に付与される権限:',
 'userrights-groupsmember-type' => '$1',
 'userrights-groups-help' => 'この利用者が属するグループを変更できます。
 * チェックが入っているボックスは、この利用者がそのグループに属していることを意味します。
 * チェックが入っていないボックスは、この利用者がそのグループに属していないことを意味します。
 * 「*」はグループに一旦追加した場合に除去(あるいはその逆)ができないことを示しています。',
-'userrights-reason' => '理由',
+'userrights-reason' => '理由:',
 'userrights-no-interwiki' => '他ウィキ上における利用者権限の編集権限はありません。',
 'userrights-nodatabase' => 'データベース$1は存在しないか、ローカル上にありません。',
 'userrights-nologin' => '利用者権限を付与するには、管理者アカウントで[[Special:UserLogin|ログイン]]する必要があります。',
@@ -1710,6 +1708,9 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 '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"
@@ -1795,7 +1796,7 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'recentchangeslinked-noresult' => '指定期間中に指定ページのリンク先に変更はありませんでした。',
 'recentchangeslinked-summary' => "これは指定したページからリンクされている(または指定したカテゴリに含まれている)ページの最近の変更の一覧です。
 [[Special:Watchlist|自分のウォッチリスト]]にあるページは'''太字'''で表示されます。",
-'recentchangeslinked-page' => 'ページ名',
+'recentchangeslinked-page' => 'ページ名:',
 'recentchangeslinked-to' => '指定したページの「リンク元」ページの変更を表示',
 
 # Upload
@@ -1808,9 +1809,9 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'upload_directory_missing' => 'アップロード先ディレクトリ ($1) が見つかりませんでした。ウェブ サーバーによる作成もできませんでした。',
 'upload_directory_read_only' => 'アップロード先ディレクトリ($1)には、ウェブサーバーが書き込めません。',
 'uploaderror' => 'アップロードのエラー',
-'upload-recreate-warning' => "'''警告その名前のファイルは、以前に削除または移動されています。'''
+'upload-recreate-warning' => "'''警告その名前のファイルは、以前に削除または移動されています。'''
 
-参考のため、このページの削除と移動の記録を以下に示します",
+参考のため、このページの削除と移動の記録を以下に示します:",
 'uploadtext' => "ファイルをアップロードするには、以下のフォームを使用してください。
 以前にアップロードされたファイルの表示と検索には[[Special:FileList|{{int:listfiles}}]]を使用してください。(再) アップロードは[[Special:Log/upload|アップロード記録]]に、削除は[[Special:Log/delete|削除記録]]にも記録されます。
 
@@ -2353,26 +2354,26 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 
 # Special:LinkSearch
 'linksearch' => '外部リンクの検索',
-'linksearch-pat' => '検索パターン',
+'linksearch-pat' => '検索パターン:',
 'linksearch-ns' => '名前空間:',
 'linksearch-ok' => '検索',
-'linksearch-text' => '"*.wikipedia.org" のようにワイルドカードを使用できます。
-少なくとも "*.org" のようなトップレベルドメインが必要です。<br />
-対å¿\9cã\83\97ã\83­ã\83\88ã\82³ã\83«: <code>$1</code> (ã\81\93ã\82\8cã\82\89ã\82\92æ¤\9cç´¢ã\81«å\90«ã\82\81ã\81ªã\81\84ã\81§ã\81\8fã\81 ã\81\95ã\81\84)。',
+'linksearch-text' => '「*.wikipedia.org」のようにワイルドカードを使用できます。
+少なくとも「*.org」のようなトップレベルドメインが必要です。<br />
+対å¿\9cã\83\97ã\83­ã\83\88ã\82³ã\83«: <code>$1</code> (ã\83\97ã\83­ã\83\88ã\82³ã\83«ã\82\92ç\9c\81ç\95¥ã\81\97ã\81\9få ´å\90\88ã\81®æ\97¢å®\9aå\80¤ã\81¯ http:// )。',
 'linksearch-line' => '$1 が $2 からリンクされています',
 'linksearch-error' => 'ワイルドカードはホスト名の先頭でのみ使用できます。',
 
 # Special:ListUsers
-'listusersfrom' => '最初に表示する利用者',
+'listusersfrom' => '最初に表示する利用者:',
 'listusers-submit' => '表示',
 'listusers-noresult' => '利用者が見つかりませんでした。',
-'listusers-blocked' => '(ブロック中)',
+'listusers-blocked' => '(ブロック中)',
 
 # Special:ActiveUsers
 'activeusers' => '活動中の利用者一覧',
 'activeusers-intro' => 'これは過去 $1 {{PLURAL:$1|日|日間}}に何らかの活動をした利用者の一覧です。',
 'activeusers-count' => '過去 {{PLURAL:$3|1 日|$3 日間}}に $1 {{PLURAL:$1|回の編集}}',
-'activeusers-from' => '最初に表示する利用者',
+'activeusers-from' => '最初に表示する利用者:',
 'activeusers-hidebots' => 'ボットを隠す',
 'activeusers-hidesysops' => '管理者を隠す',
 'activeusers-noresult' => '利用者が見つかりませんでした。',
@@ -2748,7 +2749,7 @@ $1',
 'whatlinkshere-hideredirs' => '転送ページを$1',
 'whatlinkshere-hidetrans' => '参照読み込みを$1',
 'whatlinkshere-hidelinks' => 'リンクを$1',
-'whatlinkshere-hideimages' => '画像リンクを$1',
+'whatlinkshere-hideimages' => 'ファイルへのリンクを$1',
 'whatlinkshere-filters' => '絞り込み',
 
 # Block/unblock
@@ -2802,7 +2803,7 @@ $1',
 'unblockiptext' => '以下のフォームで利用者またはIPアドレスのブロックを解除できます。',
 'ipusubmit' => 'このブロックを解除',
 'unblocked' => '[[User:$1|$1]]のブロックを解除しました',
-'unblocked-range' => '$1ã\81®ã\83\96ã\83­ã\83\83ã\82¯ã\81¯è§£é\99¤ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99',
+'unblocked-range' => '$1ã\81®ã\83\96ã\83­ã\83\83ã\82¯ã\82\92解é\99¤ã\81\97ã\81¾ã\81\97ã\81\9f',
 'unblocked-id' => 'ブロック$1は除去されました',
 'blocklist' => 'ブロックされている利用者',
 'ipblocklist' => 'ブロックされている利用者',
@@ -3253,7 +3254,7 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 
 # Info page
 'pageinfo-title' => '「$1」の情報',
-'pageinfo-not-current' => 'ç\8f¾å\9c¨ã\81®ã\83\90ã\83¼ã\82¸ã\83§ã\83³ã\81®æ\83\85å ±ã\81®ã\81¿ã\81\8c表示ã\81\95ã\82\8cã\82\8bå\8f¯è\83½æ\80§ã\81\8cã\81\82ã\82\8aã\81¾ã\81\99。',
+'pageinfo-not-current' => 'ç\94³ã\81\97訳ã\81\82ã\82\8aã\81¾ã\81\9bã\82\93ã\81\8cã\80\81é\81\8eå\8e»ã\81®ç\89\88ã\81®æ\83\85å ±ã\81¯è¡¨ç¤ºã\81§ã\81\8dã\81¾ã\81\9bã\82\93。',
 'pageinfo-header-basic' => '基本情報',
 'pageinfo-header-edits' => '編集履歴',
 'pageinfo-header-restrictions' => 'ページの保護',
index ff6fdad..a685766 100644 (file)
@@ -556,6 +556,10 @@ MySQL جوابِ خطاء پرائے "$3: $4"',
 'moveddeleted-notice' => 'ھیہ ای حذف شدہ صفحہ شیر.
 صفحو نوشتۂ حذف شدگی و منتقلی ذیلا بطورِ حوالہ دیونو بویان.',
 
+# Parser/template warnings
+'post-expand-template-inclusion-category' => 'ھش صفحات کہ ھتیرا ٹمپلیٹ یعنی سانچو ناپ لوٹ بیتی شیر۔',
+'post-expand-template-argument-category' => 'ھش صفحات کہ ھتیرا بوغینو بیرو سانچان یعنی(ٹمپلیٹان) لو شینی۔',
+
 # History pages
 'viewpagelogs' => 'ھیہ صفحہو بچے نوشتہ جاتن لوڑے',
 'currentrev-asof' => 'حالیہ نظرثانی بمطابق $1',
@@ -747,6 +751,8 @@ HTML tags لوڑے.',",
 # Statistics
 'statistics' => 'اعداد و شمار',
 
+'disambiguationspage' => 'سانچہ: ڈسایمبگ',
+
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|بایٹ|بایٹس}}',
 'nmembers' => '$1 {{PLURAL:$1|ممبار|ممباران}}',
@@ -1071,6 +1077,9 @@ HTML tags لوڑے.',",
 'watchlisttools-edit' => 'لوڑے یا واچ لسٹہ ترمیم کورے',
 'watchlisttools-raw' => 'نوغ واچ لسٹان ایڈیٹ کورے',
 
+# Core parser functions
+'duplicate-defaultsort' => '\'\'\'خبردار:\'\'\' ڈیفالٹ تاڑٰ(نغڑی) "$2" پروشٹیو ڈیفالٹ تاڑا "$1" لیگی شیر۔',
+
 # Special:SpecialPages
 'specialpages' => 'اسپیشل صفحہ',
 
index 7b5d051..cb79b93 100644 (file)
@@ -100,7 +100,7 @@ $messages = array(
 
 'underline-always' => 'Tım',
 'underline-never' => 'Qet',
-'underline-default' => 'Qerar cıfeteliyawoği dest dero',
+'underline-default' => 'Cild ya ki cıfeteliyayoğo hesebiyaye',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Warê vurnayena terzê nustey:',
@@ -590,7 +590,7 @@ Dosyunê ebe namê .css u .js'y de herfa hurdiye bıgurêne, mesela hurêndia {{
 'note' => "'''Not:'''",
 'previewnote' => "Teme! ena teyna verqeyda.'''
 Vurnayışê tu hama qeyd nıbiyo!",
-'editing' => 'Tıya $1 vurnena',
+'editing' => '$1 Vurnayis',
 'editingsection' => 'Vurnaena $1 (qısım)',
 'editingcomment' => '$1 vurnino (qısımo newe)',
 'editconflict' => 'Têverabiyaena vurnaişi: $1',
index 77898c1..fa139c8 100644 (file)
@@ -195,7 +195,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__បង្ខំមាតិកា__', '__បង្ខំបញ្ជីអត្ថបទ__', '__បង្ខំអោយបង្ហាញមាតិកា__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__មាតិកា__', '__បញ្ជីអត្ថបទ__', '__TOC__' ),
        'noeditsection'             => array( '0', '__ផ្នែកមិនត្រូវកែប្រែ__', '__មិនមានផ្នែកកែប្រែ__', '__លាក់ផ្នែកកែប្រែ__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__លាក់បឋមកថា__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'ខែនេះ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonthname'          => array( '1', 'ឈ្មោះខែនេះ', 'CURRENTMONTHNAME' ),
        'currentday'                => array( '1', 'ថ្ងៃនេះ', 'CURRENTDAY' ),
index 1f66e7f..e0c126a 100644 (file)
@@ -134,7 +134,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( '최근바뀜' ),
        'Recentchangeslinked'       => array( '링크최근바뀜' ),
        'Revisiondelete'            => array( '특정판삭제' ),
-       'RevisionMove'              => array( '특정판이동' ),
        'Search'                    => array( '찾기', '검색' ),
        'Shortpages'                => array( '짧은문서' ),
        'Specialpages'              => array( '특수문서', '특수기능' ),
@@ -172,8 +171,7 @@ $magicWords = array(
        'nogallery'                 => array( '0', '__화랑숨김__', '__갤러리숨김__', '__NOGALLERY__' ),
        'forcetoc'                  => array( '0', '__목차보임__', '__목차표시__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__목차__', '__TOC__' ),
-       'noeditsection'             => array( '0', '__단락편집숨김__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__머릿글숨김__', '__헤더숨김__', '__NOHEADER__' ),
+       'noeditsection'             => array( '0', '__부분편집숨김__', '__문단편집숨김__', '__단락편집숨김__', '__NOEDITSECTION__' ),
        'currentmonth'              => array( '1', '현재월', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', '현재월1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', '현재월이름', 'CURRENTMONTHNAME' ),
@@ -248,6 +246,7 @@ $magicWords = array(
        'img_text_bottom'           => array( '1', '글자아래', '텍스트아래', 'text-bottom' ),
        'img_link'                  => array( '1', '링크=$1', 'link=$1' ),
        'img_alt'                   => array( '1', '대체글=$1', 'alt=$1' ),
+       'img_class'                 => array( '1', '클래스=$1', 'class=$1' ),
        'int'                       => array( '0', '정수:', 'INT:' ),
        'sitename'                  => array( '1', '사이트이름', 'SITENAME' ),
        'ns'                        => array( '0', '이름:', '이름공간:', 'NS:' ),
@@ -393,7 +392,7 @@ $messages = array(
 
 'underline-always' => '항상',
 'underline-never' => '치지 않음',
-'underline-default' => '브라우저 설정을 따르기',
+'underline-default' => '스킨 또는 브라우저 설정을 따르기',
 
 # Font style option in Special:Preferences
 'editfont-style' => '편집창의 글꼴:',
@@ -654,7 +653,7 @@ $1',
 'nosuchaction' => '해당하는 동작이 없습니다.',
 'nosuchactiontext' => 'URL로 요청한 동작이 잘못되었습니다.
 URL을 잘못 입력하였거나, 잘못된 링크를 따라갔을 수 있습니다.
-이것은 {{SITENAME}}의 버그일 수도 있습니다.',
+{{SITENAME}}의 버그일 수도 있습니다.',
 'nosuchspecialpage' => '해당하는 특수 문서가 없습니다.',
 'nospecialpagetext' => '<strong>요청한 특수 문서가 존재하지 않습니다.</strong>
 
@@ -819,7 +818,7 @@ $2',
 'passwordremindertext' => '$1 IP 주소에서 누군가가 아마 자신이 {{SITENAME}} ($4)의 새 비밀번호를 요청했습니다.
 "$2" 사용자의 임시 비밀번호는 "$3"로 설정되었습니다. 이것이 자신이 의도한 바라면
 지금 로그인하여 새로운 비밀번호를 만드세요.
-당신의 임시 비밀번호는 $5일 후에 만료됩니다.
+임시 비밀번호는 $5일 후에 만료됩니다.
 
 이 요청을 다른 사람이 했거나 이전 비밀번호를 기억해 내서 바꿀 필요가 없으면
 이 메시지를 무시하고 이전 비밀번호를 계속 사용할 수 있습니다.',
@@ -835,7 +834,7 @@ $2',
 'mailerror' => '메일 보내기 오류: $1',
 'acct_creation_throttle_hit' => '당신의 IP 주소를 이용한 방문자가 이전에 이미 계정을 $1개 만들어, 계정 만들기 한도를 초과하였습니다.
 따라서 지금은 이 IP 주소로는 더 이상 계정을 만들 수 없습니다.',
-'emailauthenticated' => '당신의 이메일 주소는 $2 $3에 인증되었습니다.',
+'emailauthenticated' => '이메일 주소는 $2 $3에 인증되었습니다.',
 'emailnotauthenticated' => '이메일 주소를 인증하지 않았습니다.
 이메일 확인 절차를 거치지 않으면 다음 이메일 기능을 사용할 수 없습니다.',
 'noemailprefs' => '이 기능을 사용하기 위해서는 사용자 환경 설정에서 이메일 주소를 설정해야 합니다.',
@@ -879,7 +878,7 @@ $2',
 'resetpass-submit-loggedin' => '비밀번호 바꾸기',
 'resetpass-submit-cancel' => '취소',
 'resetpass-wrong-oldpass' => '비밀번호가 잘못되었거나 현재의 비밀번호와 같습니다.
-당신은 이미 비밀번호를 성공적으로 바꾸었거나 새 임시 비밀번호를 발급받았을 수 있습니다.',
+이미 비밀번호를 성공적으로 바꾸었거나 새 임시 비밀번호를 요청했을 수 있습니다.',
 'resetpass-temp-password' => '임시 비밀번호:',
 
 # Special:PasswordReset
@@ -919,7 +918,7 @@ $2
 # Special:ChangeEmail
 'changeemail' => '이메일 주소 바꾸기',
 'changeemail-header' => '계정 메일 주소 바꾸기',
-'changeemail-text' => 'ì\9d´ë©\94ì\9d¼ ì£¼ì\86\8c를 ë°\94꾸려면 ì\9d´ ì\96\91ì\8b\9dì\9d\84 ì±\84ì\9a°ì\84¸ì\9a\94. ë°\94ë\80\9c ë\82´ì\9a©ì\9d\84 í\99\95ì\9d¸í\95\98기 ì\9c\84í\95´ ë\8b¹ì\8b ì\9d\98 ë¹\84ë°\80ë²\88í\98¸ë¥¼ ì\9e\85ë ¥í\95´ì\95¼ í\95©ë\8b\88ë\8b¤.',
+'changeemail-text' => '이메일 주소를 바꾸려면 이 양식을 채우세요. 바뀜 내용을 확인하기 위해 비밀번호를 입력해야 합니다.',
 'changeemail-no-info' => '이 특수 문서에 직접 접근하려면 반드시 로그인해야 합니다.',
 'changeemail-oldemail' => '현재 이메일 주소 :',
 'changeemail-newemail' => '새 이메일 주소:',
@@ -957,7 +956,7 @@ $2
 'showdiff' => '차이 보기',
 'anoneditwarning' => "'''경고''': 로그인하고 있지 않습니다.
 당신의 IP 주소가 문서 역사에 남게 됩니다.",
-'anonpreviewwarning' => "'''ë\8b¹ì\8b ì\9d\80 ì§\80ê¸\88 ë¡\9cê·¸ì\9d¸í\95\98ê³  ì\9e\88ì§\80 ì\95\8aì\8aµë\8b\88ë\8b¤. ë¬¸ì\84\9c를 ì \80ì\9e¥í\95\98ë©´ ë\8b¹ì\8b ì\9d\98 IP ì£¼ì\86\8cê°\80 ë¬¸ì\84\9c ì\97­ì\82¬ì\97\90 ë\82¨ê²\8c ë\90©ë\8b\88ë\8b¤.'''",
+'anonpreviewwarning' => "'''로그인하고 있지 않습니다. 문서를 저장하면 당신의 IP 주소가 문서 역사에 남게 됩니다.'''",
 'missingsummary' => "'''알림:''' 편집 요약을 적지 않았습니다.
 이대로 \"{{int:savearticle}}\"을 클릭하면 편집 요약 없이 저장됩니다.",
 'missingcommenttext' => '아래에 내용을 채워 넣어 주세요.',
@@ -966,7 +965,7 @@ $2
 'summary-preview' => '요약 미리 보기:',
 'subject-preview' => '주제/제목 미리 보기:',
 'blockedtitle' => '차단됨',
-'blockedtext' => "'''당신의 계정 혹은 IP 주소가 차단되었습니다.'''
+'blockedtext' => "'''사용자 계정 또는 IP 주소가 차단되었습니다.'''
 
 차단한 사람은 $1입니다.
 차단한 이유는 다음과 같습니다: $2
@@ -1038,20 +1037,20 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 * '''오페라''': ''도구→설정''에서 캐시를 비움",
 'usercssyoucanpreview' => "'''안내''': CSS 문서를 저장하기 전에 \"{{int:showpreview}}\" 기능을 통해 작동을 확인해주세요.",
 'userjsyoucanpreview' => "'''안내''': 자바스크립트 문서를 저장하기 전에 \"{{int:showpreview}}\" 기능을 통해 작동을 확인해주세요.",
-'usercsspreview' => "'''ì\9d´ê²\83ì\9d\80 ì\82¬ì\9a©ì\9e\90 CSSì\9d\98 ë¯¸ë¦¬ ë³´ê¸°ì\9e\85ë\8b\88ë\8b¤.'''
-'''아직 저장하지 않았다는 것을 기억해두세요!'''",
-'userjspreview' => "'''ì\9d´ê²\83ì\9d\80 ì\9e\90ë°\94ì\8a¤í\81¬ë¦½í\8a¸ ë¯¸ë¦¬ ë³´ê¸°ì\9e\85ë\8b\88ë\8b¤'''
-'''아직 저장하지 않았다는 것을 기억해두세요!'''",
-'sitecsspreview' => "'''이것은 이 CSS의 미리 보기일 뿐입니다.'''
-'''아직 저장하지 않았다는 것을 기억해두세요!'''",
-'sitejspreview' => "'''이것은 이 자바스크립트 코드의 미리 보기일 뿐입니다.'''
-'''아직 저장하지 않았다는 것을 기억해두세요!'''",
+'usercsspreview' => "'''사용자 CSS의 미리 보기입니다.'''
+'''아직 저장하지 않았습니다!'''",
+'userjspreview' => "'''ì\82¬ì\9a©ì\9e\90 ì\9e\90ë°\94ì\8a¤í\81¬ë¦½í\8a¸ ë¯¸ë¦¬ ë³´ê¸°ì\9e\85ë\8b\88ë\8b¤.'''
+'''아직 저장하지 않았습니다!'''",
+'sitecsspreview' => "'''이 CSS의 미리 보기일 뿐입니다.'''
+'''아직 저장하지 않았습니다!'''",
+'sitejspreview' => "'''이 자바스크립트 코드의 미리 보기일 뿐입니다.'''
+'''아직 저장하지 않았습니다!'''",
 'userinvalidcssjstitle' => "'''경고''': \"\$1\" 스킨은 없습니다.
 .css와 .js 문서의 제목은 {{ns:user}}:Foo/vector.css 처럼 소문자로 써야 합니다. {{ns:user}}:Foo/Vector.css 와 같이 대문자로 쓸 경우 작동하지 않습니다.",
 'updated' => '(바뀜)',
 'note' => "'''참고:'''",
 'previewnote' => "'''이 화면은 미리 보기입니다.'''
-편집한 내용은 아직 저장ë\90\98ì§\80 ì\95\8aì\95\98ì\8aµë\8b\88ë\8b¤!",
+편집한 내용은 아직 저장í\95\98ì§\80 ì\95\8aì\95\98ì\8aµë\8b\88ë\8b¤!",
 'continue-editing' => '편집 영역으로 가기',
 'previewconflict' => '이 미리 보기는 저장할 때의 모습으로 위쪽 편집창의 문서를 반영합니다.',
 'session_fail_preview' => "'''세션 데이터가 없어져 편집을 저장하지 못했습니다.'''
@@ -1066,7 +1065,7 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 'token_suffix_mismatch' => "'''저장하려는 내용의 문장 부호가 망가져 있습니다.'''
 문서 보호를 위해 해당 내용을 저장하지 않습니다.
 버그가 있는 익명 프록시 서비스 등을 사용할 때 이런 문제가 발생할 수 있습니다.",
-'edit_form_incomplete' => "'''편집의 일부 내용이 서버에 전달되지 않았습니다. 당신의 편집이 손상되지 않았는지 확인하고 다시 시도해 주십시오.'''",
+'edit_form_incomplete' => "'''편집의 일부 내용이 서버에 전달되지 않았습니다. 편집이 손상되지 않았는지 확인하고 다시 시도해 주십시오.'''",
 'editing' => '$1 편집하기',
 'creating' => '$1 만들기',
 'editingsection' => '$1 편집하기 (부분)',
@@ -1078,7 +1077,7 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 \"{{int:savearticle}}\"을 누르면 '''위쪽의 편집 내역만''' 저장됩니다.",
 'yourtext' => '당신의 편집',
 'storedversion' => '현재 문서',
-'nonunicodebrowser' => "'''경고: 당신의 웹 브라우저가 유니코드를 완벽하게 지원하지 않습니다.'''
+'nonunicodebrowser' => "'''경고: 웹 브라우저가 유니코드를 완벽하게 지원하지 않습니다.'''
 아스키가 아닌 문자가 16진수 코드로 나타날 수 있습니다.",
 'editingold' => "'''경고: 지금 이전 버전의 문서를 고치고 있습니다.'''
 이것을 저장하면 최근에 편집된 부분이 사라질 수 있습니다.",
@@ -1118,8 +1117,8 @@ IP 주소는 여러 사용자가 공유할 수 있습니다.
 'sectioneditnotsupported-title' => '부분 편집 지원 안됨',
 'sectioneditnotsupported-text' => '이 문서에서는 문단 편집을 지원하지 않습니다.',
 'permissionserrors' => '권한 오류',
-'permissionserrorstext' => '해당 명령을 수행할 권한이 없습니다. 다음 {{PLURAL:$1|이유}}를 확인해보세요:',
-'permissionserrorstext-withaction' => '$2 권한이 없습니다. 다음 {{PLURAL:$1|이유}}를 확인해주세요:',
+'permissionserrorstext' => '해당 명령을 수행할 권한이 없습니다. 다음 {{PLURAL:$1|이유}}를 확인해보세요:',
+'permissionserrorstext-withaction' => '$2 권한이 없습니다. 다음 {{PLURAL:$1|이유}}를 확인해주세요:',
 'recreate-moveddeleted-warn' => "'''경고: 삭제된 적이 있는 문서를 다시 만들고 있습니다.'''
 
 이 문서를 계속 편집하는 것이 적합한 것인지 확인해주세요.
@@ -1415,7 +1414,7 @@ $1",
 'search-nonefound' => '찾기 결과가 없습니다.',
 'powersearch' => '고급 찾기',
 'powersearch-legend' => '고급 찾기',
-'powersearch-ns' => '다음 이름공간에서 찾기:',
+'powersearch-ns' => '다음 이름공간에서 찾기:',
 'powersearch-redir' => '넘겨주기 목록',
 'powersearch-field' => '찾기',
 'powersearch-togglelabel' => '확인:',
@@ -1537,7 +1536,7 @@ HTML 태그를 확인하세요.',
 'prefs-help-realname' => '실명 기입은 자유입니다.
 실명을 입력할 경우 문서 기여에 자신의 이름이 들어가게 됩니다.',
 'prefs-help-email' => '이메일 주소 입력은 선택 사항입니다. 다만 비밀번호를 잊었을 때 비밀번호 바꾸기를 위해 필요합니다.',
-'prefs-help-email-others' => '당신은 자신의 문서나 토론 문서에 있는 이메일 보내기 링크로 다른 사용자가 연락할 수 있게 할 수도 있습니다.
+'prefs-help-email-others' => '자신의 문서나 토론 문서에 있는 이메일 보내기 링크로 다른 사용자가 연락할 수 있게 할 수도 있습니다.
 이 경우에도 당신의 이메일 주소는 다른 사용자가 연락할 때 공개되지 않습니다.',
 'prefs-help-email-required' => '이메일 주소가 필요합니다.',
 'prefs-info' => '기본 정보',
@@ -1577,7 +1576,7 @@ HTML 태그를 확인하세요.',
 'userrights-no-interwiki' => '다른 위키의 사용자 권한을 바꿀 권한이 없습니다.',
 'userrights-nodatabase' => '데이터베이스 $1이 존재하지 않거나 로컬에 있지 않습니다.',
 'userrights-nologin' => '사용자의 권한을 바꾸기 위해서는 반드시 관리자 계정으로 [[Special:UserLogin|로그인]]해야 합니다.',
-'userrights-notallowed' => 'ë\8b¹ì\8b ì\9d\80 ë\8b¤ë¥¸ ì\82¬ì\9a©ì\9e\90ì\9d\98 ê¶\8cí\95\9cì\9d\84 ì¡°ì \95í\95  ê¶\8cí\95\9cì\9d´ ì\97\86ì\8aµë\8b\88ë\8b¤.',
+'userrights-notallowed' => '다른 사용자의 권한을 조정할 권한이 없습니다.',
 'userrights-changeable-col' => '바꿀 수 있는 권한',
 'userrights-unchangeable-col' => '바꿀 수 없는 권한',
 
@@ -1670,8 +1669,11 @@ HTML 태그를 확인하세요.',
 # User rights log
 'rightslog' => '사용자 권한 기록',
 'rightslogtext' => '사용자 권한 조정 기록입니다.',
-'rightslogentry' => '사용자가 $1의 권한을 $2에서 $3(으)로 바꿈',
+'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"
@@ -1807,12 +1809,12 @@ HTML 태그를 확인하세요.',
 'filetype-banned-type' => '{{PLURAL:$3$4}}\'\'\'".$1"\'\'\' 형식의 파일은 올릴 수 없습니다.
 $2 형식만 사용할 수 있습니다.',
 'filetype-missing' => '파일에 확장자(".jpg" 등)가 없습니다.',
-'empty-file' => '당신이 올린 파일이 비어 있습니다.',
+'empty-file' => '올린 파일이 비어 있습니다.',
 'file-too-large' => '올리려는 파일이 너무 큽니다.',
 'filename-tooshort' => '파일 이름이 너무 짧습니다.',
 'filetype-banned' => '이러한 종류의 파일은 금지되어 있습니다.',
 'verification-error' => '이 파일은 파일 확인 절차를 통과하지 않았습니다.',
-'hookaborted' => '당신이 수정하려고 한 것이 확장 기능 훅에 의해 중지되었습니다.',
+'hookaborted' => '수정하려고 한 것이 확장 기능 훅에 의해 중지되었습니다.',
 'illegal-filename' => '이 파일 이름은 허용되지 않습니다.',
 'overwrite' => '기존 파일을 덮어쓰는 것은 허용되지 않습니다.',
 'unknown-error' => '알 수 없는 오류가 발생했습니다.',
@@ -1857,7 +1859,7 @@ $2 형식만 사용할 수 있습니다.',
 'overwroteimage' => '사용자가 "[[$1]]" 파일의 새 판을 올렸습니다.',
 'uploaddisabled' => '올리기 비활성화됨',
 'copyuploaddisabled' => 'URL로 파일 올리기가 비활성화되어 있습니다.',
-'uploadfromurl-queued' => '당신의 올리기 명령이 기록되었습니다.',
+'uploadfromurl-queued' => '올리기 명령이 기록되었습니다.',
 'uploaddisabledtext' => '파일 올리기 기능이 비활성화되어 있습니다.',
 'php-uploaddisabledtext' => 'PHP 파일 올리기가 비활성화되었습니다. 파일 올리기 설정을 확인하십시오.',
 'uploadscripted' => '이 파일에는 HTML이나 다른 스크립트 코드가 포함되어 있어, 웹 브라우저에서 오류를 일으킬 수 있습니다.',
@@ -1892,7 +1894,7 @@ MGP # 펜탁스
 PICT # 기타
  #</pre> <!-- 이 줄은 그대로 두십시오 -->',
 'upload-success-subj' => '올리기 성공',
-'upload-success-msg' => '파일을 [$2]에서 성공적으로 올렸습니다. 당신이 올린 파일이 여기 있습니다: [[:{{ns:file}}:$1]]',
+'upload-success-msg' => '파일을 [$2]에서 성공적으로 올렸습니다. 올린 파일은 여기 있습니다: [[:{{ns:file}}:$1]]',
 'upload-failure-subj' => '올리기 실패',
 'upload-failure-msg' => '[$2]에서 파일을 올리는 중 문제가 발생했습니다:
 
@@ -1982,7 +1984,7 @@ URL이 올바르고 접근 가능한지를 확인하고 다시 시도해주세
 https://www.mediawiki.org/wiki/Manual:Image_Authorization 을 참고하십시오.',
 'img-auth-notindir' => '요청한 경로가 설정한 올리기 디렉토리에 없습니다.',
 'img-auth-badtitle' => '"$1"에서 올바른 제목을 만들 수 없습니다.',
-'img-auth-nologinnWL' => 'ë\8b¹ì\8b ì\9d\80 ë¡\9cê·¸ì\9d¸í\95\98ì§\80 ì\95\8aì\95\98ì\9c¼ë©° "$1" í\8c\8cì\9d¼ì\9d\80 í\99\94ì\9d´í\8a¸ë¦¬ì\8a¤í\8a¸ì\97\90 ì¡´ì\9e¬í\95\98ì§\80 ì\95\8aì\8aµë\8b\88ë\8b¤.',
+'img-auth-nologinnWL' => '로그인하지 않았으며 "$1" 파일은 화이트리스트에 존재하지 않습니다.',
 'img-auth-nofile' => '"$1" 파일이 없습니다.',
 'img-auth-isdir' => '"$1" 디렉토리에 접근을 시도했습니다.
 파일에만 접근할 수 있습니다.',
@@ -2157,7 +2159,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 
 'disambiguations' => '동음이의 문서를 가리키는 문서 목록',
 'disambiguationspage' => 'Template:disambig',
-'disambiguations-text' => "다음 문서는 적어도 하나 이상 '''동음이의 문서'''를 가리키고 있습니다.
+'disambiguations-text' => "다음 문서는 적어도 하나 이상 '''동음이의 문서'''를 가리키고 있습니다.
 그 링크는 다른 적절한 문서로 연결할 필요가 있습니다.<br />
 [[MediaWiki:Disambiguationspage]]에서 링크된 틀을 사용하는 문서를 동음이의 문서로 간주합니다.",
 
@@ -2225,7 +2227,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'protectedpages' => '보호된 문서 목록',
 'protectedpages-indef' => '오른쪽 조건에 맞는 보호만 보기',
 'protectedpages-cascade' => '연쇄적 보호만 보기',
-'protectedpagestext' => '다음의 문서는 이동/편집이 불가능하도록 보호되어 있습니다.',
+'protectedpagestext' => '다음 문서는 이동이나 편집이 불가능하도록 보호되어 있습니다.',
 'protectedpagesempty' => '보호되어 있는 문서가 없습니다.',
 'protectedtitles' => '만들기 보호된 표제어 목록',
 'protectedtitlestext' => '다음 표제어는 만들기가 금지되어 있습니다.',
@@ -2246,7 +2248,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'notargettitle' => '해당하는 문서 없음',
 'notargettext' => '기능을 수행할 대상 문서나 사용자를 지정하지 않았습니다.',
 'nopagetitle' => '해당 문서 없음',
-'nopagetext' => '당신이 찾는 문서는 존재하지 않습니다.',
+'nopagetext' => '찾는 문서가 존재하지 않습니다.',
 'pager-newer-n' => '이전 $1개',
 'pager-older-n' => '다음 $1개',
 'suppress' => '오버사이트',
@@ -2314,9 +2316,9 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'linksearch-pat' => '찾기 패턴:',
 'linksearch-ns' => '이름공간:',
 'linksearch-ok' => '찾기',
-'linksearch-text' => '"*.wikipedia.org"와 같이 와일드카드를 사용할 수 있습니다.
+'linksearch-text' => '"*.wikipedia.org"와 같이 와일드 카드를 사용할 수 있습니다.
 적어도 "*.org"와 같이 최상위 도메인을 입력해야 합니다.<br />
-지원하는 프로토콜 목록: <code>$1</code> (찾을 때 이것을 추가하지 마세요)',
+지원하는 프로토콜: <code>$1</code> (프로토콜을 지정하지 않을 때 기본값은 http://)',
 'linksearch-line' => '$2에서 $1 을 링크하고 있습니다.',
 'linksearch-error' => '와일드카드는 주소의 처음 부분에만 사용될 수 있습니다.',
 
@@ -2366,11 +2368,11 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'emailuser-title-notarget' => '사용자 이메일',
 'emailpage' => '사용자에게 이메일 보내기',
 'emailpagetext' => '이 {{GENDER:$1|사용자}}가 환경 설정에 올바른 이메일 주소를 적었다면, 아래 양식을 통해 이메일을 보낼 수 있습니다.
-이메일을 받은 사용자가 바로 답장할 수 있도록 하기 위해 당신이 [[Special:Preferences|사용자 환경 설정]]에 적은 이메일 주소가 "발신자" 정보에 들어갑니다. 따라서 수신자가 당신에게 직접 답장을 보낼 수 있습니다.',
-'usermailererror' => 'ë©\94ì\9d¼ ê°\9d체에서 오류 발생:',
+이메일을 받은 사용자가 바로 답장할 수 있도록 하기 위해 [[Special:Preferences|사용자 환경 설정]]에 적은 이메일 주소가 "발신자" 정보에 들어갑니다. 따라서 수신자가 당신에게 직접 답장을 보낼 수 있습니다.',
+'usermailererror' => 'ë©\94ì\9d¼ ê°\9c체에서 오류 발생:',
 'defemailsubject' => '"$1" 사용자가 보낸 {{SITENAME}} 이메일',
 'usermaildisabled' => '사용자 이메일 비활성화됨',
-'usermaildisabledtext' => '당신은 이 위키에서 다른 사용자에게 메일을 보낼 수 없습니다',
+'usermaildisabledtext' => '이 위키에서 다른 사용자에게 메일을 보낼 수 없습니다',
 'noemailtitle' => '이메일 주소 없음',
 'noemailtext' => '이 사용자는 올바른 이메일 주소를 입력하지 않았습니다.',
 'nowikiemailtitle' => '이메일이 허용되지 않음',
@@ -2434,7 +2436,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 
 'enotif_mailer' => '{{SITENAME}} 자동 알림 메일',
 'enotif_reset' => '모든 문서를 방문한 것으로 표시하기',
-'enotif_newpagetext' => '이것은 새 문서입니다.',
+'enotif_newpagetext' => '이 문서는 새 문서입니다.',
 'enotif_impersonal_salutation' => '{{SITENAME}} 사용자',
 'changed' => '바꾸',
 'created' => '만들',
@@ -2693,7 +2695,7 @@ $1',
 'whatlinkshere' => '여기를 가리키는 문서',
 'whatlinkshere-title' => '"$1" 문서를 가리키는 문서 목록',
 'whatlinkshere-page' => '문서:',
-'linkshere' => "다음 문서가 '''[[:$1]]''' 문서를 가리키고 있습니다:",
+'linkshere' => "다음 문서가 '''[[:$1]]''' 문서를 가리키고 있습니다:",
 'nolinkshere' => "'''[[:$1]]''' 문서를 가리키는 문서가 없습니다.",
 'nolinkshere-ns' => "선택한 이름공간에는 '''[[:$1]]''' 문서를 가리키는 문서가 없습니다.",
 'isredirect' => '넘겨주기 문서',
@@ -2705,7 +2707,7 @@ $1',
 'whatlinkshere-hideredirs' => '넘겨주기를 $1',
 'whatlinkshere-hidetrans' => '틀을 $1',
 'whatlinkshere-hidelinks' => '링크를 $1',
-'whatlinkshere-hideimages' => '그림 포함을 $1',
+'whatlinkshere-hideimages' => '파일 링크를 $1',
 'whatlinkshere-filters' => '필터',
 
 # Block/unblock
@@ -2749,7 +2751,7 @@ $1',
 'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] 사용자가 차단되었습니다.<br />
 차단된 사용자 목록은 [[Special:BlockList|여기]]에서 볼 수 있습니다.',
 'ipb-blockingself' => '자기 자신을 차단하려고 합니다! 정말로 실행할까요?',
-'ipb-confirmhideuser' => '당신은 사용자를 차단하면서 "사용자 숨기기" 설정을 선택했습니다. 이로써 모든 기록에서 이 사용자의 사용자 이름을 숨기게 됩니다. 정말로 계정을 숨기시겠습니까?',
+'ipb-confirmhideuser' => '사용자를 차단하면서 "사용자 숨기기" 설정을 선택했습니다. 모든 기록에서 이 사용자의 사용자 이름을 숨기게 됩니다. 정말로 계정을 숨기시겠습니까?',
 'ipb-edit-dropdown' => '차단 이유 목록 편집하기',
 'ipb-unblock-addr' => '$1 차단 해제하기',
 'ipb-unblock' => '사용자 또는 IP 주소 차단 해제하기',
@@ -2785,7 +2787,7 @@ $1',
 'emailblock' => '이메일 차단됨',
 'blocklist-nousertalk' => '자신의 토론 문서 편집 불가',
 'ipblocklist-empty' => '차단된 사용자가 없습니다.',
-'ipblocklist-no-results' => '당신이 입력한 IP 주소나 사용자는 차단되지 않았습니다.',
+'ipblocklist-no-results' => '요청한 IP 주소나 사용자는 차단되지 않았습니다.',
 'blocklink' => '차단',
 'unblocklink' => '차단 해제',
 'change-blocklink' => '차단 설정 바꾸기',
@@ -2833,11 +2835,11 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'sorbsreason' => '당신의 IP 주소는 {{SITENAME}}에서 사용하는 DNSBL 공개 프록시 목록에 들어 있습니다.',
 'sorbs_create_account_reason' => '당신의 IP 주소는 {{SITENAME}}에서 사용하는 DNSBL 공개 프록시 목록에 들어 있습니다.
 계정을 만들 수 없습니다.',
-'cant-block-while-blocked' => '신이 차단되어 있는 동안에는 다른 사용자를 차단할 수 없습니다.',
-'cant-see-hidden-user' => '당신이 차단하려 하는 사용자는 이미 차단되었고 숨김 처리되었습니다.
-당신이 사용자 숨기기 권한을 갖고 있지 않기 때문에, 이 사용자의 차단 기록을 보거나 차단 설정을 바꿀 수 없습니다.',
-'ipbblocked' => '당신은 차단되어 있기 때문에 다른 사용자를 차단하거나 차단을 해제할 수 없습니다.',
-'ipbnounblockself' => '당신은 자기 스스로를 차단 해제할 수 없습니다.',
+'cant-block-while-blocked' => '신이 차단되어 있는 동안에는 다른 사용자를 차단할 수 없습니다.',
+'cant-see-hidden-user' => '차단하려 하는 사용자는 이미 차단되었고 숨김 처리되었습니다.
+사용자 숨기기 권한을 갖고 있지 않기 때문에, 이 사용자의 차단 기록을 보거나 차단 설정을 바꿀 수 없습니다.',
+'ipbblocked' => '자신이 차단되어 있기 때문에 다른 사용자를 차단하거나 차단을 해제할 수 없습니다.',
+'ipbnounblockself' => '자기 스스로를 차단 해제할 수 없습니다.',
 
 # Developer tools
 'lockdb' => '데이터베이스 잠그기',
@@ -2868,10 +2870,10 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 이전의 제목은 새 제목으로 넘겨줄 것입니다.
 원래 이름을 가리키는 넘겨주기를 자동으로 새로 고칠 수 있습니다.
 만약 이 설정을 선택하지 않았다면 [[Special:DoubleRedirects|이중 넘겨주기]]와 [[Special:BrokenRedirects|끊긴 넘겨주기]]가 있는지 확인해주세요.
\8b¹ì\8b ì\9d\80 ë\84\98겨주기 ë§\81í\81¬ê°\80 ì \9cë\8c\80ë¡\9c í\96¥í\95\98ê³  ì\9e\88ë\8a\94ì§\80 í\99\95ì\9d¸í\95\98ì\97¬ì\95¼ í\95©ë\8b\88ë\8b¤.
+넘겨주기 링크가 제대로 향하고 있는지 확인하여야 합니다.
 
-만약 문서의 새 이름으로 된 문서가 존재할 때, 그 문서가 비었거나 넘겨주기 문서이고 문서 역사가 없을 때에만 이동합니다. 그렇지 않을 경우에는 이동하지 '''않습니다'''.
\9d´ê²\83ì\9d\80 ì\8b¤ì\88\98ë¡\9c ì\9d´ë\8f\99í\95\9c ë¬¸ì\84\9c를 ë\90\98ë\8f\8c릴 ì\88\98ë\8a\94 ì\9e\88ì§\80ë§\8c, ì\9d´ë¯¸ ì¡´ì\9e¬í\95\98ë\8a\94 ë¬¸ì\84\9c ì\9c\84ì\97\90 ë\8d®ì\96´ì\94\8cì\9a¸ ì\88\98ë\8a\94 ì\97\86ë\8b¤ë\8a\94 ê²\83을 의미합니다.
+참고로 새 제목으로 된 문서가 이미 있을 때, 비어 있거나 넘겨주기 문서이고 문서 역사가 없을 때에만 이동하며 그렇지 않을 경우에는 이동하지 '''않습니다'''.
\8b¤ì\88\98ë¡\9c ë¬¸ì\84\9c를 ì\98®ê²¼ì\9d\84 ë\95\8c ë\90\98ë\8f\8c릴 ì\88\98ë\8a\94 ì\9e\88ì§\80ë§\8c ì\9d´ë¯¸ ì\9e\88ë\8a\94 ë¬¸ì\84\9c를 ë\8d®ì\96´ì\93¸ ì\88\98 ì\97\86ì\9d\8c을 의미합니다.
 
 '''경고!'''
 인기 있는 문서일 경우 심각하고 예상하지 못한 문제를 초래할 수 있습니다.
@@ -2879,10 +2881,10 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'movepagetext-noredirectfixer' => "아래의 양식을 사용해 문서의 이름을 바꾸고 문서의 모든 역사를 새 이름으로 옮길 수 있습니다.
 이전의 제목은 새 제목으로 넘겨줄 것입니다.
 [[Special:DoubleRedirects|이중 넘겨주기]]나 [[Special:BrokenRedirects|끊긴 넘겨주기]]가 있는지 확인해주세요.
\8b¹ì\8b ì\9d\80 ë\84\98겨주기 ë§\81í\81¬ê°\80 ì \9cë\8c\80ë¡\9c í\96¥í\95\98ê³  ì\9e\88ë\8a\94ì§\80 í\99\95ì\9d¸í\95\98ì\97¬ì\95¼ í\95©ë\8b\88ë\8b¤.
+넘겨주기 링크가 제대로 향하고 있는지 확인하여야 합니다.
 
-참고ë¡\9c ì\83\88 ì \9c목ì\9d\84 ê°\80ì§\84 ë¬¸ì\84\9cê°\80 ì\9d´ë¯¸ ì\9e\88ë\8b¤ë©´ ë¹\84ì\96´ ì\9e\88ê±°ë\82\98 ë\84\98겨주기 ë¬¸ì\84\9cì\9d´ë©°, ê³¼ê±°ì\97\90 í\8e¸ì§\91 ë\82´ì\97­ì\9d´ ì\97\86ì\9c¼ë©´ ì\9d´ ë¬¸ì\84\9cë\8a\94 ì\98®ê²¨ì§\80ì§\80 '''ì\95\8aì\9d\84''' ê²\83ì\9e\85ë\8b\88ë\8b¤.
\9d´ë\8a\94 ë\8b¹ì\8b ì\9d´ ì\8b¤ì\88\98ë¡\9c ë¬¸ì\84\9c를 ì\98®ê²¼ì\9d\84 ë\95\8c ë\90\98ë\8f\8c릴 ì\88\98 ì\9e\88ì\9c¼ë©° 이미 있는 문서를 덮어쓸 수 없음을 의미합니다.
+참고ë¡\9c ì\83\88 ì \9c목ì\9c¼ë¡\9c ë\90\9c ë¬¸ì\84\9cê°\80 ì\9d´ë¯¸ ì\9e\88ì\9d\84 ë\95\8c, ë¹\84ì\96´ ì\9e\88ê±°ë\82\98 ë\84\98겨주기 ë¬¸ì\84\9cì\9d´ê³  ë¬¸ì\84\9c ì\97­ì\82¬ê°\80 ì\97\86ì\9d\84 ë\95\8cì\97\90ë§\8c ì\9d´ë\8f\99í\95\98ë©° ê·¸ë \87ì§\80 ì\95\8aì\9d\84 ê²½ì\9a°ì\97\90ë\8a\94 ì\9d´ë\8f\99í\95\98ì§\80 '''ì\95\8aì\8aµë\8b\88ë\8b¤'''.
\8b¤ì\88\98ë¡\9c ë¬¸ì\84\9c를 ì\98®ê²¼ì\9d\84 ë\95\8c ë\90\98ë\8f\8c릴 ì\88\98ë\8a\94 ì\9e\88ì§\80ë§\8c 이미 있는 문서를 덮어쓸 수 없음을 의미합니다.
 
 '''경고!'''
 인기 있는 문서일 경우 심각하고 예상하지 못한 문제를 초래할 수 있습니다.
@@ -2893,7 +2895,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 
 이 경우에는 문서를 직접 이동하거나 두 문서를 합쳐야 합니다.",
 'movearticle' => '문서 이동하기',
-'moveuserpage-warning' => "'''경고:''' 당신은 사용자 문서를 옮기려 하고 있습니다. 사용자 문서만 이동되며 사용자 이름이 바뀌지 '''않는다'''는 점을 명심해주시기 바랍니다.",
+'moveuserpage-warning' => "'''경고:''' 사용자 문서를 옮기려 하고 있습니다. 사용자 문서만 이동되며 사용자 이름이 바뀌지 '''않는다'''는 점을 참고해주시기 바랍니다.",
 'movenologin' => '로그인하지 않음',
 'movenologintext' => '문서를 이동하려면 [[Special:UserLogin|로그인]]해야 합니다.',
 'movenotallowed' => '문서를 이동할 권한이 없습니다.',
@@ -2952,7 +2954,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 최근 기록 내용을 참고용로 제공합니다:",
 'move-over-sharedrepo' => '== 파일이 존재함 ==
 [[:$1]] 파일이 공용 저장소에 있습니다. 이 이름으로 파일을 옮기면 공용의 파일을 덮어쓰게 될 것입니다.',
-'file-exists-sharedrepo' => '당신이 선택한 파일 이름은 공용 저장소에서 사용 중입니다.
+'file-exists-sharedrepo' => '선택한 파일 이름은 공용 저장소에서 사용 중입니다.
 다른 이름을 선택해주세요.',
 
 # Export
@@ -3125,7 +3127,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'tooltip-ca-nstab-main' => '문서 내용을 봅니다.',
 'tooltip-ca-nstab-user' => '사용자 문서 내용을 봅니다.',
 'tooltip-ca-nstab-media' => '미디어 문서 내용을 봅니다.',
-'tooltip-ca-nstab-special' => '이것은 특수 문서로, 편집할 수 없습니다.',
+'tooltip-ca-nstab-special' => '이 문서는 특수 문서로, 편집할 수 없습니다.',
 'tooltip-ca-nstab-project' => '프로젝트 문서 내용을 봅니다.',
 'tooltip-ca-nstab-image' => '파일 문서 내용을 봅니다.',
 'tooltip-ca-nstab-mediawiki' => '시스템 메시지 내용을 봅니다.',
@@ -3209,7 +3211,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 
 # Info page
 'pageinfo-title' => '"$1" 문서에 대한 정보',
-'pageinfo-not-current' => 'ì \95ë³´ë\8a\94 í\98\84ì\9e¬ í\8c\90ë§\8cì\9d\84 ë³´ì\97¬ì¤\84 ì\88\98 ì\9e\88습니다.',
+'pageinfo-not-current' => 'ì£\84ì\86¡í\95©ë\8b\88ë\8b¤, ì\9d´ì \84 í\8c\90ì\97\90 ë\8c\80í\95\9c ì \95ë³´ë\8a\94 ì \9cê³µí\95\98ì§\80 ì\95\8a습니다.',
 'pageinfo-header-basic' => '기본 정보',
 'pageinfo-header-edits' => '편집 역사',
 'pageinfo-header-restrictions' => '문서 보호',
@@ -3851,7 +3853,7 @@ $5
 'scarytranscludetoolong' => '[URL이 너무 깁니다]',
 
 # Delete conflict
-'deletedwhileediting' => "'''경고''': 당신이 이 문서를 편집하던 중에 이 문서가 삭제되었습니다!",
+'deletedwhileediting' => "'''경고''': 이 문서를 편집하던 중에 이 문서가 삭제되었습니다!",
 'confirmrecreate' => '[[User:$1|$1]] 사용자([[User talk:$1|토론]])가 당신이 편집하는 도중에 문서를 삭제했습니다. 삭제 이유는 다음과 같습니다:
 : $2
 문서를 다시 만들어야 하는지 확인해주세요.',
@@ -4045,9 +4047,9 @@ $5
 'compare-rev1' => '첫 번째 판',
 'compare-rev2' => '두 번째 판',
 'compare-submit' => '비교하기',
-'compare-invalid-title' => '당신이 입력한 제목이 잘못되었습니다.',
-'compare-title-not-exists' => '당신이 입력한 문서가 존재하지 않습니다.',
-'compare-revision-not-exists' => '당신이 지정한 판이 없습니다.',
+'compare-invalid-title' => '입력한 제목이 잘못되었습니다.',
+'compare-title-not-exists' => '입력한 문서가 존재하지 않습니다.',
+'compare-revision-not-exists' => '지정한 판이 없습니다.',
 
 # Database error messages
 'dberr-header' => '이 위키에 문제가 있습니다.',
@@ -4060,12 +4062,12 @@ $5
 'dberr-cachederror' => '다음은 요청한 문서의 캐시된 복사본이며, 최신이 아닐 수도 있습니다.',
 
 # HTML forms
-'htmlform-invalid-input' => '당신이 입력한 값에 문제가 있습니다.',
-'htmlform-select-badoption' => '당신이 입력한 값은 올바른 설정이 아닙니다.',
-'htmlform-int-invalid' => '당신이 입력한 값은 정수가 아닙니다.',
-'htmlform-float-invalid' => 'ì\9e\85ë ¥í\95\9c ê°\92ì\9d´ 수가 아닙니다.',
-'htmlform-int-toolow' => '당신이 입력한 값은 최소값 $1 미만입니다.',
-'htmlform-int-toohigh' => '당신이 입력한 값은 최대값 $1 이상입니다.',
+'htmlform-invalid-input' => '입력한 값에 문제가 있습니다.',
+'htmlform-select-badoption' => '지정한 값은 올바른 설정이 아닙니다.',
+'htmlform-int-invalid' => '지정한 값은 정수가 아닙니다.',
+'htmlform-float-invalid' => 'ì§\80ì \95í\95\9c ê°\92ì\9d\80 수가 아닙니다.',
+'htmlform-int-toolow' => '지정한 값은 최소값 $1 미만입니다.',
+'htmlform-int-toohigh' => '지정한 값은 최대값 $1 이상입니다.',
 'htmlform-required' => '이 값은 필수 항목입니다',
 'htmlform-submit' => '저장',
 'htmlform-reset' => '바꾼 것을 되돌리기',
@@ -4125,30 +4127,30 @@ $5
 
 # Search suggestions
 'searchsuggest-search' => '찾기',
-'searchsuggest-containing' => '다음 어구가 들어간 문서 찾기',
+'searchsuggest-containing' => '다음 어구가 들어간 문서 찾기',
 
 # API errors
-'api-error-badaccess-groups' => '당신은 이 위키에 파일을 올릴 권한이 없습니다.',
+'api-error-badaccess-groups' => '이 위키에 파일을 올릴 권한이 없습니다.',
 'api-error-badtoken' => '내부 오류: 토큰이 잘못되었습니다.',
 'api-error-copyuploaddisabled' => '이 서버에서 URL을 통해 파일 올리기가 비활성화되어 있습니다.',
 'api-error-duplicate' => '이 위키에 내용이 똑같은 {{PLURAL:$1|[$2 다른 파일]}}이 있습니다.',
 'api-error-duplicate-archive' => '같은 내용을 담고 있던 {{PLURAL:$1|[$2 다른 파일]}}이 있었지만 이 {{PLURAL:$1|파일}}은 삭제되었습니다.',
 'api-error-duplicate-archive-popup-title' => '중복된 {{PLURAL:$1|파일}}이 이미 삭제되었습니다.',
 'api-error-duplicate-popup-title' => '중복된 {{PLURAL:$1|파일}}입니다.',
-'api-error-empty-file' => '당신이 올리려는 파일이 비어 있습니다.',
+'api-error-empty-file' => '올리려는 파일이 비어 있습니다.',
 'api-error-emptypage' => '새 문서로 빈 문서를 만들 수 없습니다.',
 'api-error-fetchfileerror' => '내부 오류: 파일을 불러오는 중 문제가 발생했습니다.',
 'api-error-fileexists-forbidden' => '"$1" 이름으로 된 파일은 이미 존재하고 덮어쓸 수 없습니다.',
 'api-error-fileexists-shared-forbidden' => '"$1" 이름으로 된 파일이 이미 공용 저장소에 존재하며 덮어쓸 수 없습니다.',
-'api-error-file-too-large' => '당신이 올리려는 파일이 너무 큽니다.',
+'api-error-file-too-large' => '올리려는 파일이 너무 큽니다.',
 'api-error-filename-tooshort' => '파일 이름이 너무 짧습니다.',
 'api-error-filetype-banned' => '이런 파일 형식은 올릴 수 없습니다.',
 'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|파일 형식은 올릴 수 없습니다}}. $2 {{PLURAL:$3|파일 형식만 사용할 수 있습니다}}.',
 'api-error-filetype-missing' => '파일 이름에 확장자가 없습니다.',
-'api-error-hookaborted' => '당신이 시도한 수정이 확장 기능 훅에 의해 중단되었습니다.',
+'api-error-hookaborted' => '수정하려고 한 것이 확장 기능에 의해 중지되었습니다.',
 'api-error-http' => '내부 오류: 서버에 연결할 수 없습니다.',
 'api-error-illegal-filename' => '이 파일 이름을 사용할 수 없습니다.',
-'api-error-internal-error' => '내부 오류: 당신이 올린 파일을 위키에서 처리하는 중 문제가 발생했습니다.',
+'api-error-internal-error' => '내부 오류: 올린 파일을 위키에서 처리하는 중 어떤 문제가 발생했습니다.',
 'api-error-invalid-file-key' => '내부 오류: 임시 저장소에서 파일을 찾지 못했습니다.',
 'api-error-missingparam' => '내부 오류: 요청 중 매개변수가 누락되었습니다.',
 'api-error-missingresult' => '내부 오류: 파일의 복제가 성공했는지 판단할 수 없습니다.',
index 3640f33..9f9eefa 100644 (file)
 
 $rtl = true;
 
+$namespaceNames = array(
+       NS_MEDIA            => 'میڈیا',
+       NS_SPECIAL          => 'خاص',
+       NS_MAIN             => '',
+       NS_TALK             => 'بَحَژ',
+       NS_USER             => 'رُکُن',
+       NS_USER_TALK        => 'رُکُن_بَحَژ',
+       NS_PROJECT_TALK     => '$1_بَحَژ',
+       NS_FILE             => 'فَیِل',
+       NS_FILE_TALK        => 'فَیِل_بَحَژ',
+       NS_MEDIAWIKI        => 'میڈیاوکی',
+       NS_MEDIAWIKI_TALK   => 'میڈیاوکی_بَحَژ',
+       NS_HELP             => 'پَلزُن',
+       NS_HELP_TALK        => 'پَلزُن_بَحَژ',
+       NS_CATEGORY         => 'زٲژ',
+       NS_CATEGORY_TALK    => 'زٲژ_بَحَژ',
+);
+
 $digitTransformTable = array(
        '0' => '٠', # &#x0660;
        '1' => '١', # &#x0661;
index d38342d..8ee5883 100644 (file)
@@ -165,7 +165,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Neuste_Änderunge', 'Änderunge' ),
        'Recentchangeslinked'       => array( 'Änderungen_an_verlinkte_Sigge' ),
        'Revisiondelete'            => array( 'Version_fottschmieße' ),
-       'RevisionMove'              => array( 'VersioneÖmnänne', 'Versione_Ömnänne', 'VersioneÖmnenne', 'Versione_Ömnenne' ),
        'Search'                    => array( 'Sök', 'Söök', 'Söke', 'Sööke' ),
        'Shortpages'                => array( 'Koote_Atikelle' ),
        'Specialpages'              => array( 'Sondersigge', 'Söndersigge' ),
@@ -3213,7 +3212,7 @@ Esu kam_mer noch en Aanmerkung en „{{int:summary}}“ maache.',
 
 # Info page
 'pageinfo-title' => 'Övver di Sigg: „$1“',
-'pageinfo-not-current' => 'Esu en Aanjaabe künne mer bloß övver de Neuste Version vun dä Sigg maache.',
+'pageinfo-not-current' => 'Esu en Aanjaabe künne mer övver ällder Versione vun Sigge nit maache.',
 'pageinfo-header-basic' => 'Jrundlääje Aanjabe',
 'pageinfo-header-edits' => 'De Änderonge',
 'pageinfo-header-restrictions' => 'Siggeschoz',
index 93f517c..b86c095 100644 (file)
@@ -74,7 +74,6 @@ $magicWords = array(
        'notoc'                     => array( '0', '_NAVEROKTUNE_', '__NOTOC__' ),
        'nogallery'                 => array( '0', '_GALERÎTUNE_', '__NOGALLERY__' ),
        'toc'                       => array( '0', '_NAVEROK_', '__TOC__' ),
-       'noheader'                  => array( '0', '_SERÎTUNE_', '__NOHEADER__' ),
        'currentmonth1'             => array( '1', 'MEHANIHA1', 'CURRENTMONTH1' ),
        'currentday'                => array( '1', 'ROJA_NIHA', 'CURRENTDAY' ),
        'currentday2'               => array( '1', 'ROJA_NIHA2', 'CURRENTDAY2' ),
@@ -88,7 +87,7 @@ $magicWords = array(
        'subpagename'               => array( '1', 'BINRÛPEL', 'SUBPAGENAME' ),
        'img_right'                 => array( '1', 'rast', 'right' ),
        'img_left'                  => array( '1', 'çep', 'left' ),
-       'img_link'                  => array( '1', 'girêdan=$', 'link=$1' ),
+       'img_link'                  => array( '1', 'girêdan=$1', 'link=$1' ),
        'sitename'                  => array( '1', 'NAVÊ_PROJEYÊ', 'SITENAME' ),
        'grammar'                   => array( '0', 'RÊZIMAN.', 'GRAMMAR:' ),
        'gender'                    => array( '0', 'ZAYEND.', 'GENDER:' ),
index 45a2262..819a02f 100644 (file)
@@ -140,7 +140,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'TrocamientosFreskos' ),
        'Recentchangeslinked'       => array( 'TrocamientosÈnterassados' ),
        'Revisiondelete'            => array( 'EfassarRēvizyón' ),
-       'RevisionMove'              => array( 'TaxireaRēvizyón' ),
        'Search'                    => array( 'Buscar' ),
        'Shortpages'                => array( 'HojasKurtas' ),
        'Specialpages'              => array( 'HojasEspesyales' ),
index fb4ea4a..d74b3db 100644 (file)
@@ -92,6 +92,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'No_MIME-Zorte_sichen' ),
        'Mostcategories'            => array( 'Säite_mat_de_meeschte_Kategorien' ),
        'Mostimages'                => array( 'Dacks_benotzte_Biller' ),
+       'Mostinterwikis'            => array( 'Meescht_Interwikien' ),
        'Mostlinked'                => array( 'Dacks_verlinkte_Säiten' ),
        'Mostlinkedcategories'      => array( 'Dacks_benotzte_Kategorien' ),
        'Mostlinkedtemplates'       => array( 'Dacks_benotzte_Schablounen' ),
@@ -115,7 +116,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Rezent_Ännerungen' ),
        'Recentchangeslinked'       => array( 'Ännerungen_op_verlinkte_Säiten' ),
        'Revisiondelete'            => array( 'Versioun_läschen' ),
-       'RevisionMove'              => array( 'Versioun_réckelen' ),
        'Search'                    => array( 'Sichen' ),
        'Shortpages'                => array( 'Kuerz_Säiten' ),
        'Specialpages'              => array( 'Spezialsäiten' ),
@@ -229,7 +229,7 @@ $messages = array(
 
 'underline-always' => 'Ëmmer',
 'underline-never' => 'Ni',
-'underline-default' => 'vun der Browserastellung ofhängeg',
+'underline-default' => 'Skin oder Standard vum Browser',
 
 # Font style option in Special:Preferences
 'editfont-style' => "Schrëftfamill fir d'Ännerungsfënster:",
@@ -937,6 +937,7 @@ Si gouf anscheinend geläscht.",
 'edit-no-change' => 'Är ännerung gouf ignoréiert, well Dir näischt um Text geännert hutt.',
 'edit-already-exists' => 'Déi nei Säit konnt net ugeluecht ginn, well et se scho gëtt.',
 'defaultmessagetext' => 'Standardtext',
+'invalid-content-data' => 'Donnéeë vum Inhalt sinn net valabel',
 'content-not-allowed-here' => '"$1"-Inhalt ass op der Säit [[$2]] net erlaabt',
 
 # Content models
@@ -2056,9 +2057,9 @@ Kuckt och [[Special:WantedCategories|Gewënscht Kategorien]].',
 'linksearch-pat' => 'Sich-Critère:',
 'linksearch-ns' => 'Nummraum:',
 'linksearch-ok' => 'Sichen',
-'linksearch-text' => 'Sougennante "Wildcards" wéi zum Beispill <code>*.example.com</code> kënne benotzt ginn.
+'linksearch-text' => '"Wildcards" wéi zum Beispill "*.example.com" kënne benotzt ginn.
 Et muss mindestens en Top-Level-Domaine ugi ginn, wéi z. Bsp. ".org".<br />
-Ënnerstëtzte Protekoller: <code>$1</code>',
+Ënnerstëtzte Protekoller: <code>$1</code> (http:// gëtt benotzt wann näischt spezifizéiert gëtt).',
 'linksearch-line' => '$1 verlinkt vun $2',
 'linksearch-error' => 'Wildcards (*,?) kënnen nëmmen am Ufank vum Host-Numm benotzt ginn.',
 
@@ -2441,7 +2442,7 @@ $1',
 'whatlinkshere-hideredirs' => 'Viruleedunge $1',
 'whatlinkshere-hidetrans' => 'Agebonne Schabloune $1',
 'whatlinkshere-hidelinks' => 'Linken $1',
-'whatlinkshere-hideimages' => '$1 Linken op de Fichier',
+'whatlinkshere-hideimages' => 'Linken op Fichiere $1',
 'whatlinkshere-filters' => 'Filteren',
 
 # Block/unblock
@@ -2909,7 +2910,7 @@ Dëst warscheinlech duerch en externe Link den op der schwaarzer Lëscht (blackl
 
 # Info page
 'pageinfo-title' => 'Informatioun iwwer "$1"',
-'pageinfo-not-current' => 'Dës Informatioune kënnen nëmme fir dës Versioun gewise ginn.',
+'pageinfo-not-current' => 'Pardon, et ass onméiglech dës Informatioun fir al Versiounen ze weisen.',
 'pageinfo-header-basic' => 'Basisinformatiounen',
 'pageinfo-header-edits' => 'Historique vun den Ännerungen',
 'pageinfo-header-restrictions' => 'Spär vun der Säit',
@@ -2918,11 +2919,13 @@ Dëst warscheinlech duerch en externe Link den op der schwaarzer Lëscht (blackl
 'pageinfo-default-sort' => 'Standard-Zortéierschlëssel',
 'pageinfo-length' => 'Gréisst vun der Säit (a Bytes)',
 'pageinfo-article-id' => 'ID (Nummer) vun der Säit',
+'pageinfo-language' => 'Sprooch vum Inhalt vun der Säit',
 'pageinfo-views' => 'Zuel vun de Kéieren déi dës Säit gekuckt gouf',
 'pageinfo-watchers' => "Zuel vun de Benotzer déi d'Säit iwwerwaachen",
 'pageinfo-redirects-name' => 'Viruleedungen op dës Säit',
 'pageinfo-subpages-name' => 'Ënnersäite vun dëser Säit',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|Viruleedung|Viruleedungen}}; $3 {{PLURAL:$3|Ënnersäit|Ënnersäiten}})',
+'pageinfo-firstuser' => '1. Auteur vun der Säit',
 'pageinfo-firsttime' => 'Datum vum Uleeë vun der Säit',
 'pageinfo-lastuser' => 'Leschte Benotzer deen eppes geännert huet',
 'pageinfo-lasttime' => 'Datum vun der leschter Ännerung',
index 5f6ce93..a92dfec 100644 (file)
@@ -185,7 +185,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Fanovàna_farany' ),
        'Recentchangeslinked'       => array( 'Fanarahana_ny_rohy' ),
        'Revisiondelete'            => array( 'Santiôna_voafafa' ),
-       'RevisionMove'              => array( 'Fanalana_santiôna' ),
        'Search'                    => array( 'Fikarohana' ),
        'Shortpages'                => array( 'Pejy_fohy' ),
        'Specialpages'              => array( 'Pejy_manokana' ),
@@ -481,6 +480,10 @@ Mitaky version $1-n'i MediaWiki",
 'youhavenewmessages' => 'Manana $1 ($2).',
 'newmessageslink' => 'hafatra vaovao',
 'newmessagesdifflink' => 'fanovana farany',
+'youhavenewmessagesfromusers' => "Manana $1 avy amin'ny mpikambana {{PLURAL:$3|hafa|$3}} ($2).",
+'youhavenewmessagesmanyusers' => "Manana $1 avy amin'ny mpikambana maro ($2).",
+'newmessageslinkplural' => '{{PLURAL:$1|hafatra iray|hafatra maro}}',
+'newmessagesdifflinkplural' => 'fanovana farany{{PLURAL:$1}}',
 'youhavenewmessagesmulti' => "Manana hafatra vaovao ianao eo amin'ny $1.",
 'editsection' => 'hanova',
 'editold' => 'hanova',
@@ -623,6 +626,7 @@ Aza hadino ny manova ny [[Special:Preferences|safidinao]]',
 'remembermypassword' => '{{PLURAL:}}Tadidio ny tenimiafiko (mandritry ny $1 andro fara-fahabetsany)',
 'securelogin-stick-https' => "Mijanona tafiditra amin'i HTTPS rehefa tafiditra",
 'yourdomainname' => 'faritra (domaine) misy anao',
+'password-change-forbidden' => "Tsy afaka manova ny tenimiafina ianao eto amin'ity wiki ity.",
 'externaldberror' => "Nisy tsy fetezana angamba teo amin'ny fanamarinana anao tamin'ny sehatra ivelan'ity wiki ity, na tsy manana alalana hanova ny kaontinao ivelany ianao.",
 'login' => 'Midira',
 'nav-login-createaccount' => 'Ampidiro ny solonanarana',
@@ -888,7 +892,7 @@ Tadidio fa mampiasa soramadinika ny lohatenin'ny pejinao manan-tovana *.css sy *
 'note' => "'''Fanamarihana:'''",
 'previewnote' => "'''Fantaro fa topi-maso fotsiny ity.'''
 Mbola tsy voatahiry ny fanovanao !",
-'continue-editing' => 'Tohizana ny fanovana',
+'continue-editing' => 'Hanohy ny fanovàna',
 'previewconflict' => "
 Ity topi-maso ity no mifanaraka amin'ny lahatsoratra ao amin'ny faritra eo ambony,
 ary toy izao no ho fisehon'ny pejy raha misafidy ny hitahiry azy ianao.",
@@ -1482,6 +1486,9 @@ Tsy haseho ny adiresy imailakao rehefa manoratra any aminao ny mpikambana hafa."
 'rightslogtext' => "Ity ny laogy momban'ny fanovana ny zom-pikambana.",
 'rightslogentry' => "nanova ny fahefan'ny mpikambana « $1 », avy amin'ny $2 izy lasa $3",
 'rightslogentry-autopromote' => '$2 navadika $3 ho azy',
+'logentry-rights-rights' => "$1 dia nanova ny sokajim-pikambana isian'i $3 avy amin'ny $4 lasa $5",
+'logentry-rights-rights-legacy' => "$1 nanova ny vonodrom-pikambana isian'i $3",
+'logentry-rights-autopromote' => 'Lasa $5 ho azy i $1 izay $4 taloha',
 'rightsnone' => '(tsy misy)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -3291,6 +3298,7 @@ Aseho amin'ny tena habeny ny sary aseho, ny hafa dia alefa miaraka amin'ny rindr
 'logentry-suppress-delete' => "nofafan'i $1 ny pejy $3",
 'revdelete-restricted' => "nametraka fanerena ho an'ny mpandrindra",
 'revdelete-unrestricted' => "fanerena nesorina tamin'ny mpandrindra",
+'logentry-newusers-create' => 'nanokatra ny kaontiny i $1',
 'newuserlog-byemail' => 'tenimiafina nalefa imailaka',
 
 );
index 79a8da4..ebda528 100644 (file)
@@ -11,6 +11,7 @@
  * @author Luthfi94
  * @author Naval Scene
  * @author Rahmatdenas
+ * @author SpartacksCompatriot
  * @author VoteITP
  */
 
@@ -24,7 +25,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 (perlu JavaScript)',
+'tog-usenewrc' => 'Gunoan parubahan terkini tingkek lanjut (paralu JavaScript)',
 'tog-numberheadings' => 'Agiah nomor judua sacaro otomatis',
 'tog-showtoolbar' => 'Tampilkan bilah suntiang (paralu JavaScript)',
 'tog-editondblclick' => 'Suntiang laman jo klik ganda (JavaScript)',
@@ -32,17 +33,17 @@ $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 denai buek ka senarai pantauan',
-'tog-watchdefault' => 'Tambahkan halaman yang denai sunting ka senarai pantauan',
-'tog-watchmoves' => 'Tambahkan halaman yang denai pindahkan ka senarai pantauan',
-'tog-watchdeletion' => 'Tambahkan halaman yang denai hapuih ka senarai pantauan',
+'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-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' => 'E-mail ambo jiko laman nan denai jago lah barubah',
+'tog-enotifwatchlistpages' => 'Kirim e-mail kalau laman nan den pantau lah barubah',
 'tog-enotifusertalkpages' => 'E-mail ambo jiko laman barundiang denai lah barubah',
-'tog-enotifminoredits' => 'E-mail ambo walau hanyo ado parubahan saketek',
+'tog-enotifminoredits' => 'Kirim e-mail walau hanyo ado parubahan saketek',
 'tog-enotifrevealaddr' => 'Cogokan alamaik e-mail den pado e-mail notifikasi',
 'tog-shownumberswatching' => 'Tujuakkan jumlah pamantau',
 'tog-oldsig' => 'Pratayang tando tangan:',
@@ -279,6 +280,8 @@ $1',
 'youhavenewmessages' => 'Awak punyo $1 ($2).',
 'newmessageslink' => 'pasan baru',
 'newmessagesdifflink' => 'parubahan terakhir',
+'youhavenewmessagesfromusers' => 'Sanak mandapek $1 dari {{PLURAL:$3|another user|$3 users}} ($2)',
+'youhavenewmessagesmanyusers' => 'Sanak mandapek $1 dari banyak pangguno ($2)',
 'youhavenewmessagesmulti' => 'Awak ang mandapek pasan baru pado $1',
 'editsection' => 'suntiang',
 'editold' => 'suntiang',
@@ -367,6 +370,7 @@ Sila laporkan ka [[Special:ListUsers/sysop|Pengurus]], dengan manandokan alamat
 'badarticleerror' => 'Tindakan iko indak dapek dilaksanakan di laman iko.',
 'cannotdelete' => 'Laman atau berkas "$1" indak dapek dihapuih.
 Mungkin alah dihapuih jo urang lain.',
+'cannotdelete-title' => 'Indak bisa mangapuih halaman "$1"',
 '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.',
@@ -374,10 +378,12 @@ Mungkin alah dihapuih jo urang lain.',
 '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' => 'Lihek sumber',
+'viewsource-title' => 'Caliak sumber untuak $1',
 'actionthrottled' => 'Tindakan dibatasi',
 'actionthrottledtext' => 'Anda dibatasi untuak malakuan tindakan iko talalu banyak dalam waktu singkek. Sila mancubo laik satalah bara menit.',
 'protectedpagetext' => 'Laman iko alah dikunci untuak manghindari panyuntiangan.',
 'viewsourcetext' => 'Sanak dapek malihek atau manyalin sumber laman iko:',
+'viewyourtext' => 'Sanak bisa mancaliak dan mangopi sumber untuak "editan sanak" ka halaman iko',
 'protectedinterface' => 'Laman iko barisi teks antarmuko untuak digunoan oleh parangkaik lunak dan alah dikunci untuak manghindari kasalahan.',
 'editinginterface' => "'''Paringatan:''' Sanak manyuntiang suatu laman nan digunoan untuak manyediakan teks antarmuko untuak parangkaik lunak situs iko. Parubahan teks iko akan mampangaruhi tampilan pado antarmuko pangguno untuak pangguno lain.
 Untuak tarjamahan, harap gunokan [//translatewiki.net/wiki/Main_Page?setlang=id translatewiki.net], proyek palokalan MediaWiki.",
@@ -390,6 +396,11 @@ $2',
 'ns-specialprotected' => 'Laman istimewa indak dapek disuntiang.',
 'titleprotected' => "Judul iko alah dilindungi dari pambantuakan oleh [[User:$1|$1]].
 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"',
+'exception-nologin' => 'Indak log masuak',
+'exception-nologin-text' => 'Halaman ko hanyo bisa disuntiang dek pangguno badaftar.',
 
 # Virus scanner
 'virus-badscanner' => "Kasalahan konfigurasi: pamindai virus indak dikenal: ''$1''",
@@ -410,6 +421,7 @@ Akun Sanak alah dibuek. Jan lupo maatur konfigurasi [[Special:Preferences|prefer
 'remembermypassword' => 'Kana log masuak denai di komputer ko (salamo $1 {{PLURAL:$1|hari|hari}})',
 'securelogin-stick-https' => 'Tetap tahubuang ka HTTPS sasudah masuk log',
 'yourdomainname' => 'Domain Sanak:',
+'password-change-forbidden' => 'Sanak indak bisa mengubah kato kunci di wiki ko.',
 'externaldberror' => 'Alah tajadi kasalahan otentikasi basis data eksternal atau Sanak indak diizinan malakuan kamaskini tahadok akun eksternal Sanak.',
 'login' => 'Masuak log',
 'nav-login-createaccount' => 'Masuak log / buek akun',
@@ -479,6 +491,8 @@ Karanonyo, pangunjuang jo alamaik IP iko indak dapek baliak mambuek akun lain un
 'emailconfirmlink' => 'Konfirmasikan alamaik surel Sanak',
 'invalidemailaddress' => 'Alamaik surel iko indak dapek ditarimo karano formatnyo indak sasuai.
 Harap masuakan alamaik surel dalam format nan batua atau kosoangan isian tasabuik.',
+'cannotchangeemail' => 'Alamat e-mail sanak indak bisa diubah di wiki ko.',
+'emaildisabled' => 'Situs iko indak bisa mangirim e-mail.',
 'accountcreated' => 'Akun dibuek',
 'accountcreatedtext' => 'Akun pangguno untuak $1 alah dibuek.',
 'createaccount-title' => 'Pambuekan akun untuak {{SITENAME}}',
@@ -494,6 +508,7 @@ Sila manunggu sabalun mancubo baliak.',
 
 # E-mail sending
 'php-mail-error-unknown' => 'Kasalahan nan indak dikana dalam fungsi mail() PHP',
+'user-mail-no-addy' => 'Mancubo mangirim e-mail tanpa alamat e-mail nan sah.',
 
 # Change password dialog
 'resetpass' => 'Tuka kato sandi',
@@ -520,6 +535,9 @@ Sanak mungkin alah berhasil mangganti kato sandi Sanak atau alah maminto kato sa
 'passwordreset-disabled' => 'Panukaran baliak kato sandi alah dimatian di wiki iko.',
 'passwordreset-pretext' => '{{PLURAL:$1||Masuakan ciek data di bawah iko}}',
 'passwordreset-username' => 'Namo pangguno:',
+'passwordreset-domain' => 'Domain:',
+'passwordreset-capture' => 'Caliak kaputusannyo?',
+'passwordreset-capture-help' => 'Kalau sanak meancek boks iko, e-mail (jo kato kunci samantaro) akan dicaliakkan ka sanak.',
 'passwordreset-email' => 'Alamaik surel:',
 'passwordreset-emailtitle' => 'Detail akun di {{SITENAME}}',
 'passwordreset-emailtext-ip' => 'Sasaurang (mungkin Sanak, dari alamaik IP $1) maminta pangingek
@@ -544,6 +562,18 @@ ingin maubahnyo, Sanak dapek maabaikan pasan iko dan taruih manggunokan sandi la
 'passwordreset-emailelement' => 'Namo pangguno: $1
 Sandi samantaro: $2',
 'passwordreset-emailsent' => 'Surel pangingek alah dikiriman.',
+'passwordreset-emailsent-capture' => 'E-mail paringatan alah dikirim, nan tacaliak di bawah ko.',
+
+# Special:ChangeEmail
+'changeemail' => 'Tuka alamat e-mail.',
+'changeemail-header' => 'Ganti alamat e-mail.',
+'changeemail-text' => 'Panuahan formulir iko untuak mangganti alamat e-mail. Sanak harus mamasuakkan kato kunci untuak mangonfirmasi.',
+'changeemail-no-info' => 'Sanak harus masuak log untuak mangakses halaman ko.',
+'changeemail-oldemail' => 'Alamat e-mail kini:',
+'changeemail-newemail' => 'Alamat e-mail baharu:',
+'changeemail-none' => '(indak ado)',
+'changeemail-submit' => 'Ganti e-mail.',
+'changeemail-cancel' => 'Batalkan',
 
 # Edit page toolbar
 'bold_sample' => 'Teks dicetak taba',
@@ -638,6 +668,10 @@ Awak dapek [[Special:Search/{{PAGENAME}}|mancari judul laman ko]] pado laman lai
 atau [{{fullurl:{{FULLPAGENAME}}|action=edit}} suntiang laman ko]</span>.',
 'noarticletext-nopermission' => 'Kini ko indak ado teks dalam laman iko.
 Sanak dapek [[Special:Search/{{PAGENAME}}|malakukan pancaharian untuak judul laman iko]] di laman-laman lain, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mancahari log takaik], atau [{{fullurl:{{FULLPAGENAME}}|action=edit}} manyuntiang laman iko]</span>.',
+'missing-revision' => 'Revisi $1 di halaman ko nan banamo "{{PAGENAME}}" indak ado.
+
+Hal iko biasonyo disababkan dek pranala sajarah nan alah kadaluarsa ka halaman ko nan alah dihapuih.
+Rinciannyo dapek dicaliak di [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log panghapuihan].',
 'userpage-userdoesnotexist' => 'Akun pangguno "<nowiki>$1</nowiki>" indak tadafta.',
 'userpage-userdoesnotexist-view' => 'Pangguno "$1" indak tadafta.',
 'blocked-notice-logextract' => 'Pangguno iko sadang diblokir.
@@ -660,6 +694,7 @@ Pratayang iko alun disimpan!'''",
 'note' => "'''Catatan:'''",
 'previewnote' => "'''Iko hanyo tampilan pratonton.'''
 Parubahan yang awak lakukan alun disimpan!",
+'continue-editing' => 'Pai ka area mangedit.',
 'previewconflict' => 'Pratayang iko mancaminan teks pado bagian ateh kotak suntiangan teks sabagaimano akan taliek bilo Sanak manyimpannyo.',
 'session_fail_preview' => "'''Maaf, kami ndak dapek mangolah suntiangan Sanak akibat tahapuihnyo data sesi.
 Sila cubo sakali lai.
@@ -675,6 +710,7 @@ Suntiangan tasabuik ditolak untuak mancegah kasalahan pado teks laman.
 Hal iko kadang tajadi jikok Sanak manggunokan layanan proxy anonim babasis web nan bamasalah.",
 'edit_form_incomplete' => "'''Babarapo bagian dari formulir suntiangan indak mancapai server; pariso baliak apokah suntiangan Sanak tatap utuah dan cubo lai.'''",
 'editing' => 'Manyuntiang $1',
+'creating' => 'Mambuek $!',
 'editingsection' => 'Suntiang $1 (bagian)',
 'editingcomment' => 'Manyuntiang $1 (bahagian baharu)',
 'editconflict' => 'Konflik panyuntiangan: $1',
@@ -730,6 +766,11 @@ Barikuik adolah log panghapuihan dan pamindahan dari laman iko:",
 'moveddeleted-notice' => 'Laman iko alah dihapuih.
 Sabagai referensi, barikuik adolah log panghapusan dan pamindahan laman iko.',
 'log-fulllog' => 'Liek saluruah log',
+'edit-conflict' => 'Konflik suntingan.',
+'edit-no-change' => 'Suntiangan sanak ditulak, karano indak ado parubahan nan tajadi ka teks.',
+'edit-already-exists' => 'Indak bisa mambuek halaman baru.
+Alah ado.',
+'defaultmessagetext' => 'Teks pasan default.',
 
 # Parser/template warnings
 'post-expand-template-inclusion-warning' => "'''Peringatan:''' Ukuran templat talalu gadang.
index 344da94..2e4b7a2 100644 (file)
@@ -163,7 +163,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'СкорешниПромени' ),
        'Recentchangeslinked'       => array( 'ПоврзаниПромени' ),
        'Revisiondelete'            => array( 'БришењеРевизија' ),
-       'RevisionMove'              => array( 'ПреместиРевизија' ),
        'Search'                    => array( 'Барај' ),
        'Shortpages'                => array( 'КраткиСтраници' ),
        'Specialpages'              => array( 'СпецијалниСтраници' ),
@@ -202,7 +201,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__СОСОДРЖИНА__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__СОДРЖИНА__', '__TOC__' ),
        'noeditsection'             => array( '0', '__БЕЗ_УРЕДУВАЊЕ_НА_ПОДНАСЛОВИ__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__БЕЗНАСЛОВ__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'ТЕКОВЕНМЕСЕЦ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'ТЕКОВЕНМЕСЕЦ1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'ТЕКОВЕНМЕСЕЦИМЕ', 'CURRENTMONTHNAME' ),
@@ -241,6 +239,7 @@ $magicWords = array(
        'basepagename'              => array( '1', 'ИМЕНАОСНОВНАСТРАНИЦА', 'BASEPAGENAME' ),
        'talkpagename'              => array( '1', 'СТРАНИЦАЗАРАЗГОВОР', 'TALKPAGENAME' ),
        'subjectpagename'           => array( '1', 'ИМЕНАСТАТИЈА', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
+       'msg'                       => array( '0', 'ПОР:', 'MSG:' ),
        'subst'                     => array( '0', 'ЗАМЕНИ:', 'SUBST:' ),
        'safesubst'                 => array( '0', 'БЕЗБЗАМЕНИ', 'SAFESUBST:' ),
        'msgnw'                     => array( '0', 'ИЗВЕШТNW:', 'MSGNW:' ),
@@ -294,6 +293,9 @@ $magicWords = array(
        'revisionuser'              => array( '1', 'КОРИСНИКНАНАРЕВИЗИЈА', 'REVISIONUSER' ),
        'plural'                    => array( '0', 'МНОЖИНА:', 'PLURAL:' ),
        'fullurl'                   => array( '0', 'ПОЛНАURL:', 'FULLURL:' ),
+       'fullurle'                  => array( '0', 'ПОЛНАURLE:', 'FULLURLE:' ),
+       'canonicalurl'              => array( '0', 'КАНОНСКАURL:', 'CANONICALURL:' ),
+       'canonicalurle'             => array( '0', 'КАНОНСКАURLE:', 'CANONICALURLE:' ),
        'lcfirst'                   => array( '0', 'ПРВОМБ', 'LCFIRST:' ),
        'ucfirst'                   => array( '0', 'ПРВОГБ', 'UCFIRST:' ),
        'lc'                        => array( '0', 'МБ', 'LC:' ),
@@ -393,7 +395,7 @@ $messages = array(
 
 'underline-always' => 'Секогаш',
 'underline-never' => 'Никогаш',
-'underline-default' => 'Според нагодувањата на прелистувачот',
+'underline-default' => 'Според рувото или прелистувачот',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Фонт во полето за уредување:',
@@ -1672,6 +1674,9 @@ $1",
 '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"
@@ -2312,8 +2317,8 @@ $1',
 'linksearch-ns' => 'Именски простор:',
 'linksearch-ok' => 'Барај',
 'linksearch-text' => 'Може да се користат џокери, како на „*.wikipedia.org“.
-Бара највисок домен, како на пр. „*.org“.<br />
\9fоддÑ\80жани Ð¿Ñ\80оÑ\82околи: <code>$1</code> (не Ð³Ð¸ Ñ\81Ñ\82аваÑ\98Ñ\82е Ð²Ð¾ Ð¿Ñ\80ебаÑ\80Ñ\83ваÑ\9aеÑ\82о).',
\91аÑ\80а Ð±Ð°Ñ\80ем Ð½Ð°Ñ\98виÑ\81ок Ð´Ð¾Ð¼ÐµÐ½, ÐºÐ°ÐºÐ¾ Ð½Ð° Ð¿Ñ\80. â\80\9e*.orgâ\80\9c.<br />
\9fоддÑ\80жани Ð¿Ñ\80оÑ\82околи: <code>$1</code> (задава http:// Ð°ÐºÐ¾ Ð½Ðµ Ñ\83кажеÑ\82е Ð¿Ñ\80оÑ\82окол).',
 'linksearch-line' => '$1 врска во $2',
 'linksearch-error' => 'Џокер-знаците може да се користат само на почетокот во името на домаќинот.',
 
@@ -2700,7 +2705,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 пренасочувања',
 'whatlinkshere-hidetrans' => '$1 превметнувања',
 'whatlinkshere-hidelinks' => '$1 врски',
-'whatlinkshere-hideimages' => '$1 врски кон слика',
+'whatlinkshere-hideimages' => '$1 врски кон податотека',
 'whatlinkshere-filters' => 'Филтри',
 
 # Block/unblock
index 8e8e66c..997d30b 100644 (file)
@@ -120,12 +120,13 @@ $specialPageAliases = array(
        'Listusers'                 => array( 'ഉപയോക്താക്കളുടെ_പട്ടിക' ),
        'Lockdb'                    => array( 'ഡി.ബി.ബന്ധിക്കുക' ),
        'Log'                       => array( 'രേഖ', 'രേഖകൾ' ),
-       'Lonelypages'               => array( 'അനാഥ_താളുകൾ' ),
-       'Longpages'                 => array( 'വലിയ_താളുകൾ' ),
+       'Lonelypages'               => array( 'അനാഥതാളുകൾ' ),
+       'Longpages'                 => array( 'വലിയതാളുകൾ' ),
        'MergeHistory'              => array( 'നാൾവഴിലയിപ്പിക്കുക' ),
        'MIMEsearch'                => array( 'മൈംതിരയൽ' ),
        'Mostcategories'            => array( 'കൂടുതൽ_വർഗ്ഗങ്ങൾ' ),
        'Mostimages'                => array( 'കൂടുതൽ_കണ്ണികളുള്ള_പ്രമാണങ്ങൾ', 'കൂടുതൽ_പ്രമാണങ്ങൾ', 'കൂടുതൽ_ചിത്രങ്ങൾ' ),
+       'Mostinterwikis'            => array( 'ഏറ്റവുമധികമന്തർവിക്കികൾ' ),
        'Mostlinked'                => array( 'കൂടുതൽ_കണ്ണികളുള്ള_താളുകൾ', 'കൂടുതൽ_കണ്ണികളുള്ളവ' ),
        'Mostlinkedcategories'      => array( 'കൂടുതൽ_കണ്ണികളുള്ള_വർഗ്ഗങ്ങൾ', 'കൂടുതൽ_ഉപയോഗിച്ചിട്ടുള്ള_വർഗ്ഗങ്ങൾ' ),
        'Mostlinkedtemplates'       => array( 'കൂടുതൽ_കണ്ണികളുള്ള_ഫലകങ്ങൾ', 'കൂടുതൽ_ഉപയോഗിച്ചിട്ടുള്ള_ഫലകങ്ങൾ' ),
@@ -149,7 +150,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'സമീപകാലമാറ്റങ്ങൾ' ),
        'Recentchangeslinked'       => array( 'ബന്ധപ്പെട്ട_മാറ്റങ്ങൾ' ),
        'Revisiondelete'            => array( 'നാൾപ്പതിപ്പ്_മായ്ക്കൽ' ),
-       'RevisionMove'              => array( 'നാൾപ്പതിപ്പ്മാറ്റൽ' ),
        'Search'                    => array( 'അന്വേഷണം' ),
        'Shortpages'                => array( 'ചെറിയ_താളുകൾ' ),
        'Specialpages'              => array( 'പ്രത്യേകതാളുകൾ' ),
@@ -188,7 +188,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__ഉള്ളടക്കംഇടുക__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__ഉള്ളടക്കം__', '__TOC__' ),
        'noeditsection'             => array( '0', '__സംശോധിക്കേണ്ട__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__തലക്കെട്ടുവേണ്ട__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'ഈമാസം', 'ഈമാസം2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'ഈമാസം1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'ഈമാസത്തിന്റെപേര്‌', 'CURRENTMONTHNAME' ),
@@ -268,6 +267,7 @@ $magicWords = array(
        'localurl'                  => array( '0', 'ലോക്കൽയുആർഎൽ:', 'LOCALURL:' ),
        'localurle'                 => array( '0', 'ലോക്കൽയുആർഎൽഇ:', 'LOCALURLE:' ),
        'articlepath'               => array( '0', 'ലേഖനപഥം', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', 'താൾഐ‌ഡി', 'PAGEID' ),
        'server'                    => array( '0', 'സെർവർ', 'SERVER' ),
        'servername'                => array( '0', 'സെർവറിന്റെപേര്', 'SERVERNAME' ),
        'scriptpath'                => array( '0', 'സ്ക്രിപ്റ്റ്പഥം', 'SCRIPTPATH' ),
@@ -309,7 +309,7 @@ $magicWords = array(
        'special'                   => array( '0', 'പ്രത്യേകം', 'special' ),
        'defaultsort'               => array( '1', 'സ്വതവേയുള്ളക്രമപ്പെടുത്തൽ:', 'സ്വതവേയുള്ളക്രമപ്പെടുത്തൽചാവി:', 'സ്വതവേയുള്ളവർഗ്ഗക്രമപ്പെടുത്തൽ:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
        'filepath'                  => array( '0', 'പ്രമാണപഥം:', 'FILEPATH:' ),
-       'tag'                       => array( '0', 'റ്റാഗ്', 'tag' ),
+       'tag'                       => array( '0', 'റ്റാഗ്', 'ടാഗ്', 'tag' ),
        'hiddencat'                 => array( '1', '‌‌__മറഞ്ഞിരിക്കുംവർഗ്ഗം__', '__HIDDENCAT__' ),
        'pagesincategory'           => array( '1', 'വർഗ്ഗത്തിലുള്ളതാളുകൾ', 'PAGESINCATEGORY', 'PAGESINCAT' ),
        'pagesize'                  => array( '1', 'താൾവലിപ്പം', 'PAGESIZE' ),
@@ -323,6 +323,10 @@ $magicWords = array(
        'url_query'                 => array( '0', 'ക്വറി', 'QUERY' ),
        'defaultsort_noerror'       => array( '0', 'പിഴവില്ല', 'noerror' ),
        'defaultsort_noreplace'     => array( '0', 'മാറ്റേണ്ടതില്ല', 'noreplace' ),
+       'pagesincategory_all'       => array( '0', 'എല്ലാം', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'താളുകൾ', 'pages' ),
+       'pagesincategory_subcats'   => array( '0', 'ഉപവർഗ്ഗങ്ങൾ', 'subcats' ),
+       'pagesincategory_files'     => array( '0', 'പ്രമാണങ്ങൾ', 'files' ),
 );
 
 $digitGroupingPattern = "##,##,###";
@@ -376,7 +380,7 @@ $messages = array(
 
 'underline-always' => 'എല്ലായ്പ്പോഴും',
 'underline-never' => 'ഒരിക്കലും അരുത്',
-'underline-default' => 'à´¬àµ\8dà´°àµ\97സറിലàµ\87à´¤àµ\81 à´ªàµ\8bà´²àµ\86',
+'underline-default' => 'à´¦àµ\83à´¶àµ\8dയരàµ\82പതàµ\8dതിൽ à´\85ഥവാ à´¬àµ\8dà´°àµ\97സറിൽ à´¸àµ\8dവതàµ\87à´¯àµ\81à´³àµ\8dà´³ à´¸àµ\8dവഭാവà´\82',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'തിരുത്തൽ മേഖലയിലെ ഫോണ്ടിന്റെ ശൈലി:',
@@ -1605,6 +1609,9 @@ $1",
 'rightslogtext' => 'ഈ പ്രവർത്തനരേഖ ഉപയോക്തൃ അവകാശങ്ങൾക്കുണ്ടായ മാറ്റങ്ങളുടേതാണ്.',
 'rightslogentry' => '$1 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $2 എന്നതിൽ നിന്നു $3 എന്നതിലേക്കു മാറ്റിയിരിക്കുന്നു',
 'rightslogentry-autopromote' => '$2 എന്നതിൽ നിന്ന് $3 എന്നതിലേയ്ക്ക് സ്വയം ഉയർത്തിയിരിക്കുന്നു',
+'logentry-rights-rights' => '$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $1, $4 എന്നതിൽ നിന്നു $5 എന്നതിലേക്കു മാറ്റിയിരിക്കുന്നു',
+'logentry-rights-rights-legacy' => '$3 എന്ന ഉപയോക്താവിന്റെ സംഘ അംഗത്വം $1 മാറ്റിയിരിക്കുന്നു',
+'logentry-rights-autopromote' => '$1 എന്ന ഉപയോക്താവ് $4 എന്നതിൽ നിന്നും $5 എന്നതിലേയ്ക്ക് സ്വയം ഉയർത്തിയിരിക്കുന്നു',
 'rightsnone' => '(ഒന്നുമില്ല)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2221,8 +2228,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 'linksearch-ns' => 'നാമമേഖല:',
 'linksearch-ok' => 'തിരയൂ',
 'linksearch-text' => '"*.wikipedia.org" പോലുള്ള വൈൽഡ് കാർഡുകൾ ഉപയോഗിക്കാവുന്നതാണ്‌.
-കുറഞ്ഞത് "*.org" പോലുള്ള ടോപ്-ലെവൽ ഡൊമൈൻ എങ്കിലും ഉണ്ടായിരിക്കണം.<br />
-പിനàµ\8dതാà´\99àµ\8dà´\99àµ\81à´¨àµ\8dà´¨ à´ªàµ\8dà´°àµ\8bà´\9fàµ\8dà´\9fàµ\8bà´\95àµ\8dà´\95àµ\8bà´³àµ\81à´\95ൾ: <code>$1</code> (താà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´¤à´¿à´°à´\9aàµ\8dà´\9aിലിൽ à´\87à´µ à´\9aàµ\87ർà´\95àµ\8dà´\95à´°àµ\81à´¤്).',
+à´\95àµ\81à´±à´\9eàµ\8dà´\9eà´¤àµ\8d "*.org" à´ªàµ\8bà´²àµ\81à´³àµ\8dà´³ à´\92à´°àµ\81 à´\9fàµ\8bà´ªàµ\8d-à´²àµ\86വൽ à´¡àµ\8aà´®àµ\88ൻ à´\8eà´\99àµ\8dà´\95à´¿à´²àµ\81à´\82 à´\89à´£àµ\8dà´\9fായിരിà´\95àµ\8dà´\95à´£à´\82.<br />
+പിനàµ\8dà´¤àµ\81ണയàµ\81à´³àµ\8dà´³ à´ªàµ\8dà´°àµ\8bà´\9fàµ\8dà´\9fàµ\8bà´\95àµ\8dà´\95àµ\8bà´³àµ\81à´\95ൾ: <code>$1</code> (à´\92à´¨àµ\8dà´¨àµ\81à´\82 à´¨àµ½à´\95ിയിലàµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´¸àµ\8dവതàµ\87à´¯àµ\81à´³àµ\8dà´³ http:// à´\89പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dനതാണ്).',
 'linksearch-line' => '$1,  $2ൽ നിന്നു കണ്ണി ചേർക്കപ്പെട്ടിരിക്കുന്നു.',
 'linksearch-error' => 'ഹോസ്റ്റ്നെയിമിന്റെ തുടക്കത്തിൽ മാത്രമേ വൈൽഡ് കാർഡുകൾ വരാവൂ.',
 
@@ -2597,7 +2604,7 @@ $1',
 'whatlinkshere-hideredirs' => 'തിരിച്ചുവിടലുകൾ $1',
 'whatlinkshere-hidetrans' => 'ഉൾപ്പെടുത്തലുകൾ $1',
 'whatlinkshere-hidelinks' => 'കണ്ണികൾ $1',
-'whatlinkshere-hideimages' => 'à´\9aà´¿à´¤àµ\8dà´°à´\99àµ\8dà´\99ളിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\8d $1 à´\95à´£àµ\8dണിà´\95ൾ',
+'whatlinkshere-hideimages' => 'à´ªàµ\8dരമാണà´\99àµ\8dà´\99ളിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\81à´³àµ\8dà´³ à´\95à´£àµ\8dണിà´\95ൾ $1',
 'whatlinkshere-filters' => 'അരിപ്പകൾ',
 
 # Block/unblock
@@ -3087,7 +3094,7 @@ $1',
 
 # Info page
 'pageinfo-title' => '"$1" എന്ന താളിന്റെ വിവരങ്ങൾ',
-'pageinfo-not-current' => 'à´\87à´ªàµ\8dà´ªàµ\8bà´´à´¤àµ\8dà´¤àµ\86 à´¨à´¾àµ¾à´ªàµ\8dപതിപàµ\8dപിൽ à´®à´¾à´¤àµ\8dà´°à´®àµ\87 à´µà´¿à´µà´°à´\99àµ\8dà´\99ൾ à´ªàµ\8dരദർശിപàµ\8dപിà´\95àµ\8dà´\95à´ªàµ\8dà´ªàµ\86à´\9fാനിà´\9fà´¯àµ\81à´³àµ\8dà´³àµ\81.',
+'pageinfo-not-current' => 'à´\95àµ\8dഷമിà´\95àµ\8dà´\95àµ\81à´\95, à´ªà´´à´¯ à´¨à´¾àµ¾à´ªàµ\8dപതിപàµ\8dà´ªàµ\81à´\95ളിൽ à´\88 à´µà´¿à´µà´°à´\82 à´ªàµ\8dരദർശിപàµ\8dപിà´\95àµ\8dà´\95àµ\81à´\95 à´\85സാദàµ\8dà´§àµ\8dയമാണàµ\8d.',
 'pageinfo-header-basic' => 'അടിസ്ഥാനവിവരങ്ങൾ',
 'pageinfo-header-edits' => 'തിരുത്തൽചരിത്രം',
 'pageinfo-header-restrictions' => 'സംരക്ഷണം',
@@ -3324,13 +3331,13 @@ $1',
 'exif-gpslongitude' => 'രേഖാംശം',
 'exif-gpsaltituderef' => 'ഉന്നതിയുടെ അവലംബം',
 'exif-gpsaltitude' => 'ഉന്നതി',
-'exif-gpstimestamp' => 'GPS സമയം (ആറ്റോമിക് ക്ലോക്ക്)',
+'exif-gpstimestamp' => 'ജി.പി.എസ്. സമയം (ആറ്റോമിക് ഘടികാരം)',
 'exif-gpssatellites' => 'അളക്കാൻ ഉപയോഗിച്ച കൃത്രിമോപഗ്രഹങ്ങൾ',
 'exif-gpsstatus' => 'സ്വീകരണിയുടെ സ്ഥിതി',
 'exif-gpsmeasuremode' => 'അളവെടുക്കൽ രീതി',
 'exif-gpsdop' => 'അളവുകളുടെ കൃത്യത',
 'exif-gpsspeedref' => 'വേഗതയുടെ ഏകകം',
-'exif-gpsspeed' => 'GPS പരിഗ്രാഹിയുടെ ഗതിവേഗം (Speed of GPS receiver)',
+'exif-gpsspeed' => 'ജി.പി.എസ്. പരിഗ്രാഹിയുടെ ഗതിവേഗം',
 'exif-gpstrackref' => 'ചലനത്തിന്റെ ദിശയ്ക്കുള്ള അവലംബം',
 'exif-gpstrack' => 'ചലനത്തിന്റെ ദിശ',
 'exif-gpsimgdirectionref' => 'ചിത്രത്തിന്റെ ദിശയ്ക്കുള്ള അവലംബം',
@@ -3436,6 +3443,8 @@ $1',
 'exif-planarconfiguration-1' => 'ചങ്കി ഫോർമാറ്റ്',
 'exif-planarconfiguration-2' => 'പ്ലാനാർ ഫോർമാറ്റ്',
 
+'exif-colorspace-65535' => 'അളവ് നിർണ്ണയിക്കാത്ത',
+
 'exif-componentsconfiguration-0' => 'നിലവിലില്ല',
 
 'exif-exposureprogram-0' => 'നിർവചിക്കപ്പെട്ടിട്ടില്ല',
@@ -3443,10 +3452,10 @@ $1',
 'exif-exposureprogram-2' => 'സാധാരണ പ്രോഗ്രാം',
 'exif-exposureprogram-3' => 'അപ്പെർച്ചർ മുൻഗണന',
 'exif-exposureprogram-4' => 'ഷട്ടർ മുൻഗണന',
-'exif-exposureprogram-5' => 'ക്രിയേറ്റീവ് പ്രോഗ്രാം (biased toward depth of field)',
-'exif-exposureprogram-6' => 'ആക്ഷൻ പ്രോഗ്രാം (biased toward fast shutter speed)',
-'exif-exposureprogram-7' => 'പോർട്ടറൈറ്റ് മോഡ് (for closeup photos with the background out of focus)',
-'exif-exposureprogram-8' => 'ലാൻഡ് സ്കേപ്പ് മോഡ് (for landscape photos with the background in focus)',
+'exif-exposureprogram-5' => 'ക്രിയേറ്റീവ് പ്രോഗ്രാം (മണ്ഡലത്തിന്റെ ആഴം കാണിക്കാൻ അനുയോജ്യം)',
+'exif-exposureprogram-6' => 'ആക്ഷൻ പ്രോഗ്രാം (വേഗത്തിലുള്ള ഷട്ടർ വേഗത്തിന് അനുയോജ്യം)',
+'exif-exposureprogram-7' => 'പോർട്ടറൈറ്റ് മോഡ് (പശ്ചാത്തലം ഫോക്കസിനു വെളിയിലുള്ള സമീപ ഫോട്ടോകൾക്ക്)',
+'exif-exposureprogram-8' => 'ലാൻഡ് സ്കേപ്പ് മോഡ് (പശ്ചാത്തലവും ഫോക്കസിലുള്ള വിശാല ഫോട്ടോകൾക്ക്)',
 
 'exif-subjectdistance-value' => '$1 മീറ്റർ',
 
@@ -3468,9 +3477,9 @@ $1',
 'exif-lightsource-10' => 'മൂടിക്കെട്ടിയ കാലാവസ്ഥ',
 'exif-lightsource-11' => 'തണൽ',
 'exif-lightsource-12' => 'പകൽവെളിച്ച ഫ്ലൂറോസെന്റ് (D 5700 – 7100K)',
-'exif-lightsource-13' => 'à´ªà´\95ൽ à´µàµ\86à´³àµ\8dà´³ ഫ്ലൂറോസെന്റ് (N 4600 – 5400K)',
-'exif-lightsource-14' => 'à´¶àµ\80à´¤ à´µàµ\86à´³àµ\8dà´³ ഫ്ലൂറോസെന്റ് (W 3900 – 4500K)',
-'exif-lightsource-15' => 'à´µàµ\86à´³àµ\8dà´³ ഫ്ലൂറോസെന്റ് (WW 3200 – 3700K)',
+'exif-lightsource-13' => 'à´ªà´\95ൽ à´µàµ\86à´³àµ\81à´ªàµ\8dà´ªàµ\8d ഫ്ലൂറോസെന്റ് (N 4600 – 5400K)',
+'exif-lightsource-14' => 'à´¶àµ\80à´¤ à´µàµ\86à´³àµ\81à´ªàµ\8dà´ªàµ\8d ഫ്ലൂറോസെന്റ് (W 3900 – 4500K)',
+'exif-lightsource-15' => 'à´µàµ\86à´³àµ\81à´ªàµ\8dà´ªàµ\8d ഫ്ലൂറോസെന്റ് (WW 3200 – 3700K)',
 'exif-lightsource-17' => 'മാതൃകാ വെളിച്ചം A',
 'exif-lightsource-18' => 'മാതൃകാ വെളിച്ചം B',
 'exif-lightsource-19' => 'മാതൃകാ വെളിച്ചം C',
index ad74677..df26a3d 100644 (file)
@@ -169,7 +169,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__अनुक्रमणिकाहवीच__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__अनुक्रमणिका__', '__TOC__' ),
        'noeditsection'             => array( '0', '__असंपादनक्षम__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__शीर्षकनाही__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'सद्यमहिना', 'सद्यमहिना२', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'सद्यमहिना१', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'सद्यमहिनानाव', 'CURRENTMONTHNAME' ),
index 9a962b1..b4fde5e 100644 (file)
@@ -160,7 +160,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Perubahan_terkini' ),
        'Recentchangeslinked'       => array( 'Perubahan_berkaitan' ),
        'Revisiondelete'            => array( 'Hapus_semakan' ),
-       'RevisionMove'              => array( 'Pindah_semakan' ),
        'Search'                    => array( 'Gelintar' ),
        'Shortpages'                => array( 'Laman_pendek' ),
        'Specialpages'              => array( 'Laman_khas' ),
@@ -240,7 +239,7 @@ $messages = array(
 
 'underline-always' => 'Sentiasa',
 'underline-never' => 'Jangan',
-'underline-default' => 'Pelayar web utama',
+'underline-default' => 'Tetapan azali kulit/pelayar',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Gaya fon ruang sunting:',
@@ -1484,6 +1483,9 @@ Tindakan ini tidak boleh dibatalkan.',
 'rightslogtext' => 'Ini ialah log perubahan terhadap hak pengguna.',
 'rightslogentry' => 'menukar keahlian kumpulan bagi $1 daripada $2 kepada $3',
 'rightslogentry-autopromote' => 'dinaik pangkat secara automatik dari $2 ke $3',
+'logentry-rights-rights' => '$1 menukar keahlian kumpulan untuk $3 dari $4 ke $5',
+'logentry-rights-rights-legacy' => '$1 menukar keahlian kumpulan untuk $3',
+'logentry-rights-autopromote' => '$1 dinaik pangkat secara automatik dari $4 ke $5',
 'rightsnone' => '(tiada)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2961,7 +2963,7 @@ Simpan dalam komputer anda dan muat naiknya di sini.',
 
 # Info page
 'pageinfo-title' => 'Maklumat untuk "$1"',
-'pageinfo-not-current' => 'Maklumat mungkin hanya dipaparkan untuk versi semasa.',
+'pageinfo-not-current' => 'Maaf, maklumat ini tidak dapat disediakan untuk semakan lama.',
 'pageinfo-header-basic' => 'Maklumat asas',
 'pageinfo-header-edits' => 'Sunting sejarah',
 'pageinfo-header-restrictions' => 'Perlindungan halaman',
index 0c32e0a..c5e80be 100644 (file)
@@ -80,7 +80,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__بافهرست__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__فهرست__', '__TOC__' ),
        'noeditsection'             => array( '0', '__بی‌بخش__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', 'بی‌عنوان__', '__بی‌عنوان__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'ماه', 'ماه‌کنونی', 'ماه_کنونی', 'ماه‌کنونی۲', 'ماه_اسایی۲', 'ماه_کنونی۲', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'ماه۱', 'ماه‌کنونی۱', 'ماه_کنونی۱', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'نام‌ماه', 'نام_ماه', 'نام‌ماه‌کنونی', 'نام_ماه_کنونی', 'CURRENTMONTHNAME' ),
index 7caadce..8de89e8 100644 (file)
@@ -418,7 +418,7 @@ Xiquitta moyēquihcuilōl.',
 Timitztlātlauhtia xicchīhua occeppa.',
 'wrongpasswordempty' => 'Ayāc motlahtōlichtacāyo.
 Timitztlātlauhtia xicchīhua occeppa.',
-'mailmypassword' => 'E-mailīz yancuīc motlahtōlichtacāyo',
+'mailmypassword' => 'Notech moēhualtia maltzinteyōtl netitlaniztica yancuīc ichtacātlahtōlli',
 'noemail' => '"$1" ahmo quipiya īe-mailcān.',
 'passwordsent' => 'Ōmoihuah yancuīc motlahtōlichtacāyo īhuīc mo e-mail ("$1").
 Occeppa xicalaqui niman ticmatīz.',
@@ -671,7 +671,7 @@ Hueliz ōmopolo huiqui nozo ōmozacac.
 'defaultns' => 'Tlatēmōz inīn tōcātzimpan achtopa:',
 'default' => 'ic default',
 'prefs-files' => 'Tlahcuilōlli',
-'youremail' => 'E-mail:',
+'youremail' => 'Maltzinteyōtl netitlanizyeyāntli:',
 'username' => 'Tlatequitiltilīltōcāitl:',
 'uid' => 'Tlatequitiltilīlli ID:',
 'prefs-memberingroups' => 'Tlācatl {{PLURAL:$1|olōlco|olōlco}}:',
@@ -1004,7 +1004,7 @@ Nò mà mỏta in tlèn [[Special:WantedCategories|ìpan kineki tlaìxmatkàtlà
 'listgrouprights-rights' => 'Huelītiliztli',
 
 # E-mail user
-'emailuser' => 'Tique-mailīz inīn tlatequitiltilīlli',
+'emailuser' => 'Tiquēhualtlīz maltzinteyōtl netitlaniztli inīn tlatequitiltilīlli',
 'defemailsubject' => '{{SITENAME}} correo tlatequitiltilīlhuīc $1',
 'emailfrom' => 'Īhuīcpa:',
 'emailto' => 'Īhuīc:',
@@ -1152,7 +1152,7 @@ Xiquitta $2 ic yancuīc tlapololiztli.',
 'whatlinkshere-links' => '← tzòwilistìn',
 'whatlinkshere-hideredirs' => '$1 tlacuepaliztli',
 'whatlinkshere-hidelinks' => '$1 tzòwilistìn',
-'whatlinkshere-hideimages' => '$1 ìxiptzòwilistli',
+'whatlinkshere-hideimages' => '$1 tlahcuilōltzonhuīliztli',
 
 # Block/unblock
 'blockip' => 'Tiquitzacuilīz tlatequitiltilīlli',
@@ -1280,7 +1280,7 @@ Hueliz cah inīn huēyi tlapatlaliztli. Timitztlātlauhtia ticmatīz cuallōtl a
 'tooltip-n-portal' => 'Tlachīhualiztechcopa, inōn tihuelīti titlachīhua, tlatēmoyān',
 'tooltip-n-recentchanges' => 'Yancuīc tlapatlaliztli huiquipan',
 'tooltip-n-randompage' => 'Tiquittāz cē zāzotlein zāzanilli',
-'tooltip-n-help' => 'Tlamachtiyān.',
+'tooltip-n-help' => 'In tēmachtīlōyān',
 'tooltip-t-whatlinkshere' => 'Mochīntīn zāzaniltin huiquipan quitzonhuiliah nicān',
 'tooltip-t-recentchangeslinked' => 'Yancuīc tlapatlaliztli inīn zāzanilhuīcpa moquintzonhuilia',
 'tooltip-feed-rss' => 'RSS tlachicāhualiztli inīn zāzaniltechcopa',
index b213ccf..8974aed 100644 (file)
@@ -162,7 +162,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Siste_endringer' ),
        'Recentchangeslinked'       => array( 'Relaterte_endringer' ),
        'Revisiondelete'            => array( 'Revisjonssletting' ),
-       'RevisionMove'              => array( 'Revisjonsflytting' ),
        'Search'                    => array( 'Søk' ),
        'Shortpages'                => array( 'Korte_sider' ),
        'Specialpages'              => array( 'Spesialsider' ),
@@ -1009,7 +1008,7 @@ Siste blokkeringsloggelement kan sees nedenfor.',
 'note' => "'''Merk:'''",
 'previewnote' => "'''Husk at dette bare er en forhåndsvisning.'''
 Endringene dine har ikke blitt lagret ennå!",
-'continue-editing' => 'Fortsett med redigeringen',
+'continue-editing' => 'Gå til redigeringsfeltet',
 'previewconflict' => 'Slik vil teksten i redigeringsvinduet se ut dersom du lagrer den.',
 'session_fail_preview' => "'''Beklager! Klarte ikke å lagre redigeringen din på grunn av tap av øktdata.'''
 Prøv igjen.
@@ -1616,6 +1615,9 @@ Den kan maks inneholde $1 {{PLURAL:$1|tegn|tegn}}.',
 'rightslogtext' => 'Dette er en logg over endringer av brukerrettigheter.',
 'rightslogentry' => 'endret gruppe for $1 fra $2 til $3',
 'rightslogentry-autopromote' => 'ble automatisk forfremmet fra $2 til $3',
+'logentry-rights-rights' => '$1 endret gruppemedlemskap for $3 fra $4 til $5',
+'logentry-rights-rights-legacy' => '$1 endret gruppemedlemskap for $3',
+'logentry-rights-autopromote' => '$1 ble automatisk forfremmet fra $4 til $5',
 'rightsnone' => '(ingen)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2287,8 +2289,8 @@ Mer informasjon om de enkelte rettighetstypene kan finnes [[{{MediaWiki:Listgrou
 'emailuser-title-target' => 'Send epost til denne {{GENDER:$1|brukeren}}',
 'emailuser-title-notarget' => 'E-post til bruker',
 'emailpage' => 'E-post til bruker',
-'emailpagetext' => 'Du kan bruke skjemaet nedenfor for å sende en e-post til denne brukeren.
-Den e-postadressen du har satt i [[Special:Preferences|innstillingene dine]] vil dukke opp i «fra»-feltet på denne e-posten, så mottakeren er i stand til å svare.',
+'emailpagetext' => 'Du kan bruke skjemaet under for å sende en e-post til denne {{GENDER:$1|brukeren}}.
+E-postadressen du har satt i [[Special:Preferences|innstillingene dine]] vil vises i «Fra»-feltet i e-posten, slik at mottakeren kan svare deg direkte.',
 'usermailererror' => 'E-postobjekt returnerte feilen:',
 'defemailsubject' => 'E-post fra {{SITENAME}}-brukeren «$1»',
 'usermaildisabled' => 'Brukerepost deaktivert',
@@ -3090,7 +3092,7 @@ Dette er sannsynligvis forårsaket av en lenke til et svartelistet eksternt nett
 
 # Info page
 'pageinfo-title' => 'Informasjon om «$1»',
-'pageinfo-not-current' => 'Informasjonen vises kanskje bare for den gjeldende revisjonen.',
+'pageinfo-not-current' => 'Beklager, det er ikke mulig å vise denne informasjonen for gamle revisjoner.',
 'pageinfo-header-basic' => 'Grunnleggende informasjon',
 'pageinfo-header-edits' => 'Redigeringshistorikk',
 'pageinfo-header-restrictions' => 'Sidebeskyttelse',
@@ -3099,6 +3101,7 @@ Dette er sannsynligvis forårsaket av en lenke til et svartelistet eksternt nett
 'pageinfo-default-sort' => 'Standardsorteringsnøkkel',
 'pageinfo-length' => 'Sidelengde (i bytes)',
 'pageinfo-article-id' => 'Side-ID',
+'pageinfo-language' => 'Språk for sideinnholdet',
 'pageinfo-robot-policy' => 'Søkemotorstatus',
 'pageinfo-robot-index' => 'Indekserbar',
 'pageinfo-robot-noindex' => 'Ikke indekserbar',
@@ -3839,6 +3842,7 @@ Du kan også [[Special:EditWatchlist|bruke standardverktøyet]].',
 'version-license' => 'Lisens',
 'version-poweredby-credits' => "Denne wikien er drevet av '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'andre',
+'version-credits-summary' => 'Vi ønsker å takke følgende personer for deres bidrag til [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki er fri programvare; du kan redistribuere det og/eller modifisere det under betingelsene i GNU General Public License som publisert av Free Software Foundation; enten versjon 2 av lisensen, eller (etter eget valg) enhver senere versjon.
 
 MediaWiki er distribuert i håp om at det vil være nyttig, men UTEN NOEN GARANTI; ikke engang implisitt garanti av SALGBARHET eller EGNETHET FOR ET BESTEMT FORMÅL. Se GNU General Public License for flere detaljer.
index 7ed5534..8ec9d62 100644 (file)
@@ -80,7 +80,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__FORSEERONDERWARPEN__', '__INHOUD_DWINGEN__', '__FORCEERINHOUD__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__ONDERWARPEN__', '__INHOUD__', '__TOC__' ),
        'noeditsection'             => array( '0', '__GIENBEWARKSEKSIE__', '__NIETBEWERKBARESECTIE__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__GIENKOPJEN__', '__GEENKOP__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'DISSEMAOND', 'HUIDIGEMAAND', 'HUIDIGEMAAND2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonthname'          => array( '1', 'DISSEMAONDNAAM', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
        'currentmonthnamegen'       => array( '1', 'DISSEMAONDGEN', 'HUIDIGEMAANDGEN', 'CURRENTMONTHNAMEGEN' ),
@@ -147,7 +146,7 @@ $magicWords = array(
        'img_middle'                => array( '1', 'midden', 'middle' ),
        'img_bottom'                => array( '1', 'benejen', 'beneden', 'bottom' ),
        'img_text_bottom'           => array( '1', 'tekste-benejen', 'tekst-beneden', 'text-bottom' ),
-       'img_link'                  => array( '1', 'verwiezing=$', 'verwijzing=$1', 'link=$1' ),
+       'img_link'                  => array( '1', 'verwiezing=$1', 'verwijzing=$1', 'link=$1' ),
        'sitename'                  => array( '1', 'WEBSTEENAAM', 'SITENAAM', 'SITENAME' ),
        'ns'                        => array( '0', 'NR:', 'NS:' ),
        'localurl'                  => array( '0', 'LOKALEURL', 'LOCALURL:' ),
@@ -274,7 +273,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Leste_wiezigingen' ),
        'Recentchangeslinked'       => array( 'Volg_verwiezingen' ),
        'Revisiondelete'            => array( 'Versie_vortdoon' ),
-       'RevisionMove'              => array( 'Versie_verplaotsen' ),
        'Search'                    => array( 'Zeuken' ),
        'Shortpages'                => array( 'Korte_artikels' ),
        'Specialpages'              => array( 'Spesiale_pagina\'s' ),
index 519a35d..72994b6 100644 (file)
@@ -102,7 +102,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__INHOUD_DWINGEN__', '__FORCEERINHOUD__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__INHOUD__', '__TOC__' ),
        'noeditsection'             => array( '0', '__NIETBEWERKBARESECTIE__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__GEENKOP__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'HUIDIGEMAAND', 'HUIDIGEMAAND2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'HUIDIGEMAAND1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'HUIDIGEMAANDNAAM', 'CURRENTMONTHNAME' ),
@@ -243,6 +242,10 @@ $magicWords = array(
        'url_query'                 => array( '0', 'ZOEKOPDRACHT', 'QUERY' ),
        'defaultsort_noerror'       => array( '0', 'geenfout', 'noerror' ),
        'defaultsort_noreplace'     => array( '0', 'nietvervangen', 'noreplace' ),
+       'pagesincategory_all'       => array( '0', 'alle', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'paginas', 'pages' ),
+       'pagesincategory_subcats'   => array( '0', 'ondercategorieen', 'subcats' ),
+       'pagesincategory_files'     => array( '0', 'bestanden', 'files' ),
 );
 
 $specialPageAliases = array(
@@ -315,7 +318,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'RecenteWijzigingen' ),
        'Recentchangeslinked'       => array( 'RecenteWijzigingenGelinkt', 'VerwanteWijzigingen' ),
        'Revisiondelete'            => array( 'VersieVerwijderen', 'HerzieningVerwijderen', 'RevisieVerwijderen' ),
-       'RevisionMove'              => array( 'VersieVerplaatsen' ),
        'Search'                    => array( 'Zoeken' ),
        'Shortpages'                => array( 'KortePaginas', 'KortePagina’s', 'KortePagina\'s' ),
        'Specialpages'              => array( 'SpecialePaginas', 'SpecialePagina’s', 'SpecialePagina\'s' ),
@@ -399,7 +401,7 @@ $messages = array(
 
 'underline-always' => 'Altijd',
 'underline-never' => 'Nooit',
-'underline-default' => 'Webbrowser-standaard',
+'underline-default' => 'Standaard in uw vormgeving of webbrowser',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Lettertypestijl bewerkingsvenster:',
@@ -1691,6 +1693,9 @@ Als u deze opgeeft, kan deze naam gebruikt worden om u erkenning te geven voor u
 'rightslogtext' => 'Hieronder staan de wijzigingen in gebruikersrechten.',
 'rightslogentry' => 'heeft de gebruikersrechten voor $1 gewijzigd van $2 naar $3',
 'rightslogentry-autopromote' => 'is automatisch gepromoveerd van de groepen "$2" naar de groepen "$3"',
+'logentry-rights-rights' => '$1 heeft groepslidmaatschap voor $3 gewijzigd van $4 naar $5',
+'logentry-rights-rights-legacy' => '$1 heeft groepslidmaatschap voor $3 gewijzigd',
+'logentry-rights-autopromote' => '$1 is automatisch gepromoveerd van $4 naar $5',
 'rightsnone' => '(geen)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2339,8 +2344,8 @@ Zie ook [[Special:WantedCategories|niet-bestaande categorieën met verwijzingen]
 'linksearch-ns' => 'Naamruimte:',
 'linksearch-ok' => 'Zoeken',
 'linksearch-text' => 'Wildcards zoals "*.wikipedia.org" of "*.org" zijn toegestaan.
-Heeft tenminste een topleveldomein, zoals bijvoorbeeld "*.org".<br />
-Ondersteunde protocollen: <code>$1</code> (voeg deze niet toe in uw zoekopdracht).',
+Heeft tenminste een topleveldomein nodig, zoals bijvoorbeeld "*.org".<br />
+Ondersteunde protocollen: <code>$1</code> (wordt "http://"als er geen protocol wordt opgegeven).',
 'linksearch-line' => '$1 heeft een verwijzing in $2',
 'linksearch-error' => 'Wildcards zijn alleen toegestaan aan het begin van een hostnaam.',
 
@@ -3231,7 +3236,7 @@ Meestal wordt dit door een externe verwijzing op een zwarte lijst veroorzaakt.',
 
 # Info page
 'pageinfo-title' => 'Informatie over "$1"',
-'pageinfo-not-current' => 'Gegevens worden mogelijk alleen weergegeven voor de huidige versie.',
+'pageinfo-not-current' => 'Deze gegevens zijn alleen beschikbaar voor de huidige versie.',
 'pageinfo-header-basic' => 'Basisgegevens',
 'pageinfo-header-edits' => 'Bewerkingsgeschiedenis',
 'pageinfo-header-restrictions' => 'Paginabeveiliging',
index 238bb33..ec1086b 100644 (file)
@@ -362,7 +362,7 @@ $messages = array(
 
 'underline-always' => 'Alltid',
 'underline-never' => 'Aldri',
-'underline-default' => 'Nettlesarstandard',
+'underline-default' => 'Drakt- eller nettlesarstandard',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Endre stilen for skrifttypen i området:',
@@ -1576,6 +1576,9 @@ Dette kan ikkje tilbakestillast.',
 'rightslogtext' => 'Dette er ein logg over endringar av brukartilgang.',
 'rightslogentry' => 'endra brukartilgangen til $1 frå $2 til $3',
 'rightslogentry-autopromote' => '↓vart automatisk forfremja frå $2 til $3',
+'logentry-rights-rights' => '$1 endra gruppemedlemskap for $3 frå $4 til $5',
+'logentry-rights-rights-legacy' => '$1 endra gruppemedlemskap for $3',
+'logentry-rights-autopromote' => '$1 vart automatisk forfremja frå $4 til $5',
 'rightsnone' => '(ingen)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -1755,6 +1758,8 @@ Om du framleis ønskjer å laste opp fila, gå tilbake og last ho opp med eit an
 'php-uploaddisabledtext' => 'PHP-filopplasting er deaktivert. Sjå innstillinga for file_uploads.',
 'uploadscripted' => 'Fila inneheld HTML- eller skriptkode som feilaktig kan bli tolka og køyrd av nettlesarar.',
 'uploadvirus' => 'Fila innheld virus! Detaljar: $1',
+'uploadjava' => 'Fila er ei ZIP-fil som inneheld ei Java .class-fil.
+Opplasting av Java-filer er ikkje tillate av di dei kan gå utanom tryggingsavgrensingane.',
 'upload-source' => 'Kjeldefil',
 'sourcefilename' => 'Filsti:',
 'sourceurl' => 'Kjelde-URL:',
@@ -1823,6 +1828,7 @@ $1',
 'backend-fail-internal' => 'Ein ukjend feil oppstod i lagringsbaksystemet «$1».',
 'backend-fail-contenttype' => 'Kunne ikkje avgjera innhaldstypen til fila som skulle lagrast på «$1».',
 'backend-fail-batchsize' => 'Baksystemet vart gjeve ei gruppe med $1 {{PLURAL:$1|filoperasjon|filoperasjonar}}; grensa er $2 {{PLURAL:$2|operasjon|operasjonar}}.',
+'backend-fail-usable' => 'Kunne ikkje lesa eller skriva fila «$1» grunna vantande rettar eller mapper/kjerald.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Kunne ikkje kopla til journaldatabasen for lagringsbaksystemet «$1».',
@@ -1841,9 +1847,12 @@ $1',
 'lockmanager-fail-svr-release' => 'Kunne ikkje løysa låsane på tenaren $1.',
 
 # ZipDirectoryReader
+'zip-file-open-error' => 'Det oppstod ein feil under opninga av fila for ZIP-undersøking.',
 'zip-wrong-format' => 'Den oppgjevne fila var ikkje ei ZIP-fil',
 'zip-bad' => 'Fila er ei skadd eller på annan måte uleseleg ZIP-fil.
 Ho kan ikkje tryggingskontrollerast.',
+'zip-unsupported' => 'Fila er ei ZIP-fil son nyttar ZIP-funksjonar som ikkje er stødde av MediaWiki.
+Ho kan ikkje tryggingskontrollerast godt nok.',
 
 # Special:UploadStash
 'uploadstash' => 'Lasta opp løynd samling',
@@ -2184,7 +2193,7 @@ Sjå òg [[Special:WantedCategories|ønska kategoriar]].',
 'linksearch-ok' => 'Søk',
 'linksearch-text' => 'Jokerteikn som «*.wikipedia.org» kan nyttast.
 Det er påkravt med eit toppnivådomene, til dømes «*.org».<br />
-Støtta protokollar: <code>$1</code> (ikkje legg til nokon av desse i søket ditt)',
+Støtta protokollar: <code>$1</code> (nyttar http:// som standard om ingen protokoll er oppgjeven)',
 'linksearch-line' => '$2 lenkjer til $1',
 'linksearch-error' => 'Jokerteikn kan berre nyttast føre tenarnamnet.',
 
@@ -2232,7 +2241,7 @@ Støtta protokollar: <code>$1</code> (ikkje legg til nokon av desse i søket dit
 'emailuser-title-target' => 'Send epost åt {{GENDER:$1|brukaren}}',
 'emailuser-title-notarget' => 'Send e-post åt brukar',
 'emailpage' => 'Send e-post åt brukar',
-'emailpagetext' => 'Du kan nytte skjemaet nedanfor til å sende ein e-post til denne brukaren.
+'emailpagetext' => 'Du kan nytte skjemaet nedanfor til å sende ein e-post til denne {{GENDER:$1|brukaren}}.
 E-postadressa du har sett i [[Special:Preferences|innstillingane dine]] vil dukke opp i «frå»-feltet på denne e-posten, så mottakaren er i stand til å svare.',
 'usermailererror' => 'E-post systemet gav feilmelding:',
 'defemailsubject' => '{{SITENAME}} epost frå brukar "$1"',
@@ -3016,7 +3025,7 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 
 # Info page
 'pageinfo-title' => 'Informasjon om «$1»',
-'pageinfo-not-current' => 'Informasjon vert berre vist for den gjeldande versjonen.',
+'pageinfo-not-current' => 'Orsak, det er umogeleg å gjeva denne informasjonen for gamle versjonar.',
 'pageinfo-header-basic' => 'Grunnleggjande informasjon',
 'pageinfo-header-edits' => 'Endringshistorikk',
 'pageinfo-header-restrictions' => 'Sidevern',
@@ -3025,6 +3034,7 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'pageinfo-default-sort' => 'Standard sorteringsnykel',
 'pageinfo-length' => 'Sidelengd (i byte)',
 'pageinfo-article-id' => 'Side-ID',
+'pageinfo-language' => 'Sideinnhaldsspråk',
 'pageinfo-robot-policy' => 'Søkjemotorstode',
 'pageinfo-robot-index' => 'Kan indekserast',
 'pageinfo-robot-noindex' => 'Kan ikkje indekserast',
@@ -3299,6 +3309,7 @@ Andre er gøymde som standard.
 'exif-source' => 'Kjelde',
 'exif-editstatus' => 'Den redaksjonelle stoda til biletet',
 'exif-urgency' => 'Prioritet',
+'exif-fixtureidentifier' => 'Namn på tidgjengt emne',
 'exif-locationdest' => 'Avbilda stad',
 'exif-locationdestcode' => 'Koden til staden som er avbilda',
 'exif-objectcycle' => 'Tid på dagen mediet er meint for',
@@ -3316,11 +3327,14 @@ Andre er gøymde som standard.
 'exif-serialnumber' => 'Serienummeret på kameraet',
 'exif-cameraownername' => 'Eigar av kameraet',
 'exif-label' => 'Merkelapp',
+'exif-datetimemetadata' => 'Datoen metadata sist vart endra',
 'exif-nickname' => 'Det uformelle namnet på biletet',
 'exif-rating' => 'Vurdering (av 5)',
+'exif-rightscertificate' => 'Retthandsamingssertifikat',
 'exif-copyrighted' => 'Opphavsrettsstode',
 'exif-copyrightowner' => 'Opphavsrettseigar',
 'exif-usageterms' => 'Bruksvilkår',
+'exif-webstatement' => 'Opphavsrettsfråsegn på nett',
 'exif-originaldocumentid' => 'Unik ID til originaldokumentet',
 'exif-licenseurl' => 'URL for opphavsrettsløyve',
 'exif-morepermissionsurl' => 'Alternativ løyveinformasjon',
@@ -3512,8 +3526,10 @@ Andre er gøymde som standard.
 'exif-gpsdirection-m' => 'Magnetisk retning',
 
 'exif-ycbcrpositioning-1' => 'Sentrert',
+'exif-ycbcrpositioning-2' => 'Samanfallande',
 
 'exif-dc-contributor' => 'Bidragsytarar',
+'exif-dc-coverage' => 'Rom- eller tidssutstrekning til medium',
 'exif-dc-date' => 'Dato(ar)',
 'exif-dc-publisher' => 'Utgjevar',
 'exif-dc-relation' => 'Skylde medium',
@@ -3733,6 +3749,7 @@ Du kan òg [[Special:EditWatchlist|nytte standardverktøyet]].',
 'version-license' => 'Lisens',
 'version-poweredby-credits' => "Denne wikien er dreven av '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'andre',
+'version-credits-summary' => 'Me ynskjer godskriva desse personane for tilskotet deira til [[Special:Version|MediaWiki]].',
 'version-software' => 'Installert programvare',
 'version-software-product' => 'Produkt',
 'version-software-version' => 'Versjon',
index d0b3ec7..b29de60 100644 (file)
@@ -153,7 +153,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__FORÇARTAULA__', '__FORÇARSOMARI__', '__FORÇARTDM__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__TAULA__', '__SOMARI__', '__TDM__', '__TOC__' ),
        'noeditsection'             => array( '0', '__SECCIONNONEDITABLA__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__PASCAPDENTÈSTA__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'MESCORRENT', 'MESACTUAL', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonthname'          => array( '1', 'NOMMESCORRENT', 'NOMMESACTUAL', 'CURRENTMONTHNAME' ),
        'currentmonthnamegen'       => array( '1', 'NOMGENMESCORRENT', 'NOMGENMESACTUAL', 'CURRENTMONTHNAMEGEN' ),
index 3b88424..cd36ce1 100644 (file)
@@ -141,7 +141,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'ନଗଦବଦଳ' ),
        'Recentchangeslinked'       => array( 'ଜୋଡ଼ାଥିବାନଗଦବଦଳ', 'ପାଖାପାଖିବଦଳ' ),
        'Revisiondelete'            => array( 'ସଙ୍କଳନଲିଭାଇଦିଅଦେବେ' ),
-       'RevisionMove'              => array( 'ସଙ୍କଳନ' ),
        'Search'                    => array( 'ଖୋଜନ୍ତୁ' ),
        'Shortpages'                => array( 'ଛୋଟପୃଷ୍ଠା' ),
        'Specialpages'              => array( 'ବିଶେଷପୃଷ୍ଠା' ),
@@ -2557,7 +2556,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 କୁ ଲେଉଟାଣି',
 'whatlinkshere-hidetrans' => '$1 ଆଧାର ସହ ଭିତରେ ରଖିବା',
 'whatlinkshere-hidelinks' => '$1 ଟି ଲିଙ୍କ',
-'whatlinkshere-hideimages' => '$1 à¬\9bବିର ଲିଙ୍କସବୁ',
+'whatlinkshere-hideimages' => '$1 à¬«à¬¾à¬\87ଲର ଲିଙ୍କସବୁ',
 'whatlinkshere-filters' => 'ଛଣା',
 
 # Block/unblock
index 81c18a7..d9c6daf 100644 (file)
@@ -27,8 +27,8 @@ $namespaceNames = array(
        NS_FILE_TALK        => 'Файлы_тæрхон',
        NS_MEDIAWIKI        => 'MediaWiki',
        NS_MEDIAWIKI_TALK   => 'MediaWiki-йы_тæрхон',
-       NS_TEMPLATE         => 'Шаблон',
-       NS_TEMPLATE_TALK    => 'Шаблоны_тæрхон',
+       NS_TEMPLATE         => 'Ð¥Ñ\83Ñ\8bзæг',
+       NS_TEMPLATE_TALK    => 'Ð¥Ñ\83Ñ\8bзæджы_тæрхон',
        NS_HELP             => 'Æххуыс',
        NS_HELP_TALK        => 'Æххуысы_тæрхон',
        NS_CATEGORY         => 'Категори',
@@ -44,6 +44,8 @@ $namespaceAliases = array(
        'Нывы_тыххæй_дискусси'        => NS_FILE_TALK,
        'Дискусси_MediaWiki'          => NS_MEDIAWIKI_TALK,
        'Тæрхон_MediaWiki'            => NS_MEDIAWIKI_TALK,
+       'Шаблон'                      => NS_TEMPLATE,
+       'Шаблоны_тæрхон'              => NS_TEMPLATE_TALK,
        'Шаблоны_тыххæй_дискусси'     => NS_TEMPLATE_TALK,
        'Æххуысы_тыххæй_дискусси'     => NS_HELP_TALK,
        'Категорийы_тыххæй_дискусси'  => NS_CATEGORY_TALK,
index 9060ccf..5a022f1 100644 (file)
@@ -57,10 +57,58 @@ $namespaceAliases = array(
 );
 
 $specialPageAliases = array(
-       'Activeusers'               => array( 'ਸਰਗਰਮ_ਵਰਤੌਂਕਾਰ' ),
-       'Blankpage'                 => array( 'ਖਾਲੀ_ਸਫ਼ਾ' ),
-       'Block'                     => array( 'ਪਾਬੰਦੀ_ਲਾਉਣਾ', 'ਪਾਬੰਦੀ_ਸ਼ੁਦਾ_ਆਈ_ਪੀ', 'ਪਾਬੰਦੀ_ਸ਼ੁਦਾ_ਵਰਤੌਂਕਾਰ' ),
-       'Listusers'                 => array( 'ਵਰਤੌਂਕਾਰਾਂ_ਦੀ_ਸੂਚੀ' ),
+       'Activeusers'               => array( 'ਸਰਗਰਮ_ਮੈਂਬਰ' ),
+       'Badtitle'                  => array( 'ਖਰਾਬ_ਸਿਰਲੇਖ' ),
+       'Blankpage'                 => array( 'ਖਾਲੀ_ਪੰਨਾ' ),
+       'Block'                     => array( 'ਪਾਬੰਦੀ_ਲਾਓ', 'IP_’ਤੇ_ਪਾਬੰਦੀ_ਲਾਓ', 'ਮੈਂਬਰ_’ਤੇ_ਪਾਬੰਦੀ_ਲਾਓ' ),
+       'Categories'                => array( 'ਸ਼੍ਰੇਣੀਆਂ' ),
+       'ChangeEmail'               => array( 'ਈ-ਮੇਲ_ਬਦਲੋ' ),
+       'ChangePassword'            => array( 'ਪਾਸਵਰਡ_ਬਦਲੋ', 'ਪਾਸਵਰਡ_ਰੀਸੈੱਟ_ਕਰੋ' ),
+       'Contributions'             => array( 'ਯੋਗਦਾਨ' ),
+       'CreateAccount'             => array( 'ਖਾਤਾ_ਬਣਾਓ' ),
+       'DeletedContributions'      => array( 'ਮਿਟਾਏ_ਯੋਗਦਾਨ' ),
+       'DoubleRedirects'           => array( 'ਦੂਹਰੇ_ਰੀਡਿਰੈਕਟ' ),
+       'EditWatchlist'             => array( 'ਨਿਗਰਾਨੀ-ਲਿਸਟ_ਸੋਧੋ' ),
+       'Emailuser'                 => array( 'ਵਰਤੋਂਕਾਰ_ਨੂੰ_ਈ-ਮੇਲ' ),
+       'JavaScriptTest'            => array( 'ਜਾਵਾਸਕ੍ਰਿਪਟ_ਪਰਖ' ),
+       'Listadmins'                => array( 'ਐਡਮਿਨਾਂ_ਦੀ_ਸੂਚੀ' ),
+       'Listbots'                  => array( 'ਬੋਟਾਂ_ਦੀ_ਲਿਸਟ' ),
+       'Listfiles'                 => array( 'ਫ਼ਾਈਲਾਂ_ਦੀ_ਲਿਸਟ', 'ਤਸਵੀਰਾਂ_ਦੀ_ਲਿਸਟ' ),
+       'Listredirects'             => array( 'ਰੀਡਿਰੈਕਟਾਂ_ਦੀ_ਲਿਸਟ' ),
+       'Listusers'                 => array( 'ਵਰਤੋਂਕਾਰਾਂ_ਦੀ_ਲਿਸਟ' ),
+       'Longpages'                 => array( 'ਲੰਬੇ_ਸਫ਼ੇ' ),
+       'MergeHistory'              => array( 'ਰਲ਼ਾਉਣ_ਦਾ_ਅਤੀਤ' ),
+       'MIMEsearch'                => array( 'MIME_ਖੋਜ' ),
+       'Movepage'                  => array( 'ਸਿਰਲੇਖ_ਬਦਲੋ' ),
+       'Mycontributions'           => array( 'ਮੇਰੇ_ਯੋਗਦਾਨ' ),
+       'Mytalk'                    => array( 'ਮੇਰੀ_ਚਰਚਾ' ),
+       'Myuploads'                 => array( 'ਮੇਰੇ_ਅੱਪਲੋਡ' ),
+       'Newimages'                 => array( 'ਨਵੀਆਂ_ਫ਼ਾਈਲਾਂ', 'ਨਵੀਆਂ_ਤਸਵੀਰਾਂ' ),
+       'Newpages'                  => array( 'ਨਵੇਂ_ਪੰਨੇ' ),
+       'PasswordReset'             => array( 'ਪਾਸਵਰਡ_ਰੀਸੈੱਟ' ),
+       'PermanentLink'             => array( 'ਪੱਕਾ_ਲਿੰਕ' ),
+       'Popularpages'              => array( 'ਮਸ਼ਹੂਰ_ਪੰਨੇ' ),
+       'Preferences'               => array( 'ਪਸੰਦਾਂ' ),
+       'Prefixindex'               => array( 'ਅਗੇਤਰ_ਤਤਕਰਾ' ),
+       'Protectedpages'            => array( 'ਸੁਰੱਖਿਅਤ_ਪੰਨੇ' ),
+       'Protectedtitles'           => array( 'ਸੁਰੱਖਿਅਤ_ਸਿਰਲੇਖ' ),
+       'Randompage'                => array( 'ਰਲ਼ਵਾਂ', 'ਰਲਵਾਂ_ਪੰਨਾ' ),
+       'Randomredirect'            => array( 'ਰਲਵਾਂ_ਰੀਡਿਰੈਕਟ' ),
+       'Recentchanges'             => array( 'ਤਾਜਾ_ਤਬਦੀਲੀਆਂ' ),
+       'Search'                    => array( 'ਖੋਜ' ),
+       'Shortpages'                => array( 'ਛੋਟੇ_ਪੰਨੇ' ),
+       'Specialpages'              => array( 'ਖਾਸ_ਪੰਨੇ' ),
+       'Statistics'                => array( 'ਆਂਕੜੇ' ),
+       'Tags'                      => array( 'ਟੈਗ' ),
+       'Undelete'                  => array( 'ਅਣ-ਮਿਟਾਉਣ' ),
+       'Upload'                    => array( 'ਅੱਪਲੋਡ' ),
+       'Userlogin'                 => array( 'ਮੈਂਬਰ_ਲਾਗਇਨ' ),
+       'Userlogout'                => array( 'ਮੈਂਬਰ_ਲਾਗਆਊਟ' ),
+       'Wantedcategories'          => array( 'ਚਾਹੀਦੀਆਂ_ਸ਼੍ਰੇਣੀਆਂ' ),
+       'Wantedfiles'               => array( 'ਚਾਹੀਦੀਆਂ_ਫ਼ਾਈਲਾਂ' ),
+       'Wantedtemplates'           => array( 'ਚਾਹੀਦੇ_ਫਰਮੇ' ),
+       'Watchlist'                 => array( 'ਨਿਗਰਾਨੀ-ਲਿਸਟ' ),
+       'Withoutinterwiki'          => array( 'ਬਿਨਾਂ_ਇੰਟਰਵਿਕੀਆਂ_ਵਾਲੇ' ),
 );
 
 $digitTransformTable = array(
index 63d6de7..c352658 100644 (file)
@@ -150,6 +150,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'Wyszukiwanie_MIME' ),
        'Mostcategories'            => array( 'Najwięcej_kategorii' ),
        'Mostimages'                => array( 'Najczęściej_linkowane_pliki' ),
+       'Mostinterwikis'            => array( 'Najwięcej_interwiki' ),
        'Mostlinked'                => array( 'Najczęściej_linkowane' ),
        'Mostlinkedcategories'      => array( 'Najczęściej_linkowane_kategorie' ),
        'Mostlinkedtemplates'       => array( 'Najczęściej_linkowane_szablony' ),
@@ -171,9 +172,8 @@ $specialPageAliases = array(
        'Randompage'                => array( 'Losowa_strona', 'Losowa' ),
        'Randomredirect'            => array( 'Losowe_przekierowanie' ),
        'Recentchanges'             => array( 'Ostatnie_zmiany', 'OZ' ),
-       'Recentchangeslinked'       => array( 'Zmiany_w_linkujących' ),
+       'Recentchangeslinked'       => array( 'Zmiany_w_linkowanych', 'Zmiany_w_linkujących' ),
        'Revisiondelete'            => array( 'Usuń_wersję' ),
-       'RevisionMove'              => array( 'Przenoszenie_wersji' ),
        'Search'                    => array( 'Szukaj' ),
        'Shortpages'                => array( 'Najkrótsze_strony' ),
        'Specialpages'              => array( 'Strony_specjalne' ),
@@ -212,7 +212,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__ZESPISEM__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__SPIS__', '__TOC__' ),
        'noeditsection'             => array( '0', '__BEZEDYCJISEKCJI__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__BEZNAGŁÓWKA__', '__NOHEADER__' ),
        'currentday'                => array( '1', 'AKTUALNYDZIEŃ', 'CURRENTDAY' ),
        'currentdayname'            => array( '1', 'NAZWADNIA', 'CURRENTDAYNAME' ),
        'currentyear'               => array( '1', 'AKTUALNYROK', 'CURRENTYEAR' ),
@@ -1432,7 +1431,7 @@ Wygenerowany losowo klucz, którego możesz użyć to $1',
 'timezoneregion-indian' => 'Ocean Indyjski',
 'timezoneregion-pacific' => 'Ocean Spokojny',
 'allowemail' => 'Zgadzam się, by inni użytkownicy mogli przesyłać do mnie e‐maile',
-'prefs-searchoptions' => 'Szukaj',
+'prefs-searchoptions' => 'Wyszukiwanie',
 'prefs-namespaces' => 'Przestrzenie nazw',
 'defaultns' => 'Albo przeszukuj przestrzenie nazw:',
 'default' => 'domyślnie',
index 09ef788..4ccd524 100644 (file)
@@ -90,7 +90,7 @@ $messages = array(
 
 'underline-always' => 'Sempe',
 'underline-never' => 'Mai',
-'underline-default' => 'Deuvra lë stàndard dël programma ëd navigassion (browser)',
+'underline-default' => 'Stàndard dël navigator',
 
 # Font style option in Special:Preferences
 'editfont-style' => "Stil dël font ëd l'àrea ëd modìfica:",
@@ -1337,6 +1337,9 @@ Costa anformassion a sarà pùblica.",
 'rightslogtext' => "Costa a l'é na lista dij cambiament aj drit ëd j'utent.",
 'rightslogentry' => "a l'ha tramudà $1 da 'nt la partìa $2 a la partìa $3",
 'rightslogentry-autopromote' => "a l'é stàit automaticament promovù da $2 a $3",
+'logentry-rights-rights' => "$1 a l'ha tramudà l'apartenesa a la partìa për $3 da $4 a $5",
+'logentry-rights-rights-legacy' => "$1 a l'ha tramudà l'apartenensa a la partìa për $3",
+'logentry-rights-autopromote' => "$1 a l'é stàit automaticament promovù da $4 a $5",
 'rightsnone' => '(gnun)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -1968,7 +1971,7 @@ Ch'a bèica ëdcò [[Special:WantedCategories|le categorìe domandà]].",
 'linksearch-ok' => 'Sërché',
 'linksearch-text' => 'As peulo dovresse dij ciapatut com "*.wikipedia.org".
 A-i é dabzògn almanch d\'un domini a livel pi àut, për esempi "*.org".<br />
-Protocòj ch\'as peulo dovresse: <code>$1</code> (ch\'a gionta gnun ëd costi an soa arserca).',
+Protocòj ch\'as peulo dovresse: <code>$1</code> (predefinì http:// se gnun protocòj a son specificà).',
 'linksearch-line' => "$1 a l'ha n'anliura ch'a-j riva dzora da $2",
 'linksearch-error' => 'Ij ciapatut as peulo butesse mach an prinsipi dël nòm dël sërvent.',
 
@@ -2018,8 +2021,8 @@ e avèj registrà n'adrëssa ëd pòsta eletrònica vàlida ant ij [[Special:Pre
 'emailuser-title-target' => 'Mandé un mëssagi ëd pòsta eletrònica a cost {{GENDER:$1|utent}}',
 'emailuser-title-notarget' => "Mandeje un mëssagi ëd pòsta eletrònica a st'utent-sì",
 'emailpage' => "Mandeje un mëssagi ëd pòsta eletrònica a st'utent-sì",
-'emailpagetext' => "A peule dovré ël formolari sì-sota për mandé un mëssagi ëd pòsta eletrònica a st'utent-sì.
-L'adrëssa ëd pòsta eletrònica ch'a l'ha butà ant ij [[Special:Preferences|Ij sò gust]] a sarà butà ant l'adrëssa «Da» ëd sò mëssagi, parèj chi ch'a l'arsèiv a podrà rësponde diretament a chiel.",
+'emailpagetext' => "A peul dovré ël formolari sì-sota për mandé un mëssagi ëd pòsta eletrònica a st'{{GENDER:$1|utent}}-sì.
+L'adrëssa ëd pòsta eletrònica ch'a l'ha butà ant ij [[Special:Preferences|sò gust]] a sarà butà ant l'adrëssa «Da» ëd sò mëssagi, parèj chi ch'a l'arsèiv a podrà rësponde diretament a chiel.",
 'usermailererror' => "L'oget che a goèrna la pòsta eletrònica a l'ha dàit eror:",
 'defemailsubject' => 'Mëssagi da l\'utent "$1"',
 'usermaildisabled' => "Pòsta eletrònica dl'utent disabilità",
@@ -2833,6 +2836,7 @@ Sòn a l'é motobin belfé che a sia rivà përchè a-i era n'anliura a un sit e
 'pageinfo-default-sort' => "ciav d'ordinament për sòlit",
 'pageinfo-length' => 'Longheur ëd la pàgina (an byte)',
 'pageinfo-article-id' => 'Identificativ ëd la pàgina',
+'pageinfo-language' => 'Lenga dël contnù dla pàgina',
 'pageinfo-robot-policy' => "Stat dël motor d'arserca",
 'pageinfo-robot-index' => 'Indesàbil',
 'pageinfo-robot-noindex' => 'Nen indesàbil',
@@ -3258,10 +3262,10 @@ J'àutri a saran stërmà coma stàndard.
 'exif-gaincontrol-1' => 'Sparé ij contrast bass',
 'exif-gaincontrol-2' => 'Sparé ij contrast fòrt',
 'exif-gaincontrol-3' => 'Sbassé ij contrast bass',
-'exif-gaincontrol-4' => 'Bassé ij contrast fòrt',
+'exif-gaincontrol-4' => 'Sbassé ij contrast fòrt',
 
 'exif-contrast-0' => 'Normal',
-'exif-contrast-1' => 'dosman',
+'exif-contrast-1' => 'Doss',
 'exif-contrast-2' => 'contrastà fòrt',
 
 'exif-saturation-0' => 'Normal',
@@ -3272,8 +3276,8 @@ J'àutri a saran stërmà coma stàndard.
 'exif-sharpness-1' => 'dossa',
 'exif-sharpness-2' => 'contrastà',
 
-'exif-subjectdistancerange-0' => 'Pa conossù',
-'exif-subjectdistancerange-1' => 'Macro',
+'exif-subjectdistancerange-0' => 'Dësconossùa',
+'exif-subjectdistancerange-1' => 'Motobin davzin',
 'exif-subjectdistancerange-2' => 'Prim pian',
 'exif-subjectdistancerange-3' => 'Anquadratura a soget lontan',
 
@@ -3298,7 +3302,7 @@ J'àutri a saran stërmà coma stàndard.
 # Pseudotags used for GPSSpeedRef
 'exif-gpsspeed-k' => 'Km/h',
 'exif-gpsspeed-m' => 'mija/h',
-'exif-gpsspeed-n' => 'Grop (marin)',
+'exif-gpsspeed-n' => 'Grop',
 
 # Pseudotags used for GPSDestDistanceRef
 'exif-gpsdestdistance-k' => 'Chilòmeter',
@@ -3316,7 +3320,7 @@ J'àutri a saran stërmà coma stàndard.
 'exif-objectcycle-b' => 'Sia matin che dòp-mesdì',
 
 # Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
-'exif-gpsdirection-t' => 'Diression vèira',
+'exif-gpsdirection-t' => 'Diression vera',
 'exif-gpsdirection-m' => 'Diression magnética',
 
 'exif-ycbcrpositioning-1' => 'Sentrà',
@@ -3354,13 +3358,13 @@ J'àutri a saran stërmà coma stàndard.
 'exif-iimcategory-wea' => 'Temp',
 
 'exif-urgency-normal' => 'Normal ($1)',
-'exif-urgency-low' => 'Bass ($1)',
+'exif-urgency-low' => 'Bassa ($1)',
 'exif-urgency-high' => 'Àuta ($1)',
 'exif-urgency-other' => "Priorità definìa da l'utent ($1)",
 
 # External editor support
 'edit-externally' => "Modifiché st'archivi con un programa estern",
-'edit-externally-help' => "(Varda [//www.mediawiki.org/wiki/Manual:External_editors setup instructions] për avej pì d'anformassion)",
+'edit-externally-help' => "(Lese [//www.mediawiki.org/wiki/Manual:External_editors setup j'anstrussion d'anstalassion] për avèj pì d'anformassion)",
 
 # 'all' in various places, this might be different for inflected languages
 'watchlistall2' => 'tute',
@@ -3571,6 +3575,7 @@ As peul ëdcò [[Special:EditWatchlist|dovré l'editor sòlit]].",
 'version-license' => 'Licensa',
 'version-poweredby-credits' => "Sta wiki-sì a l'é basà su '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'àutri',
+'version-credits-summary' => 'I tnoma a aringrassié le përson-e sì-dapress për soa contribussion a [[Special:Version|MediaWiki]].',
 'version-license-info' => "MediaWiki a l'é un programa lìber; a peul passelo an gir e/o modifichelo sota le condission dla Licensa Pùblica General GNU coma publicà da la Free Software Foundation; o la version 2 dla licensa o (a soa decision) qualsëssìa version apress.
 
 MediaWiki a l'é distribuì ant la speransa che a sia ùtil, ma SENSA GNUN-A GARANSÌA; sensa gnanca la garansìa implìcita ëd COMERSIABILITA' o d'ADATAMENT A UN BUT PARTICOLAR. Ch'a lesa la Licensa General Pùblica GNU per pi 'd detaj.
index bde138f..4ae5911 100644 (file)
@@ -201,7 +201,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__FORCARTDC__', '__FORCARSUMARIO__', '__FORÇARTDC__', '__FORÇARSUMÁRIO__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__TDC__', '__SUMÁRIO__', '__SUMARIO__', '__TOC__' ),
        'noeditsection'             => array( '0', '__NÃOEDITARSEÇÃO__', '__SEMEDITARSEÇÃO__', '__NAOEDITARSECAO__', '__SEMEDITARSECAO__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__SEMCABECALHO__', '__SEMCABEÇALHO__', '__SEMTITULO__', '__SEMTÍTULO__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'MESATUAL', 'MESATUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'MESATUAL1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'NOMEDOMESATUAL', 'CURRENTMONTHNAME' ),
index f8f6dc5..48c68c1 100644 (file)
@@ -204,7 +204,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__FORCARTDC__', '__FORCARSUMARIO__', '__FORÇARTDC__', '__FORÇARSUMÁRIO__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__TDC__', '__SUMARIO__', '__SUMÁRIO__', '__TOC__' ),
        'noeditsection'             => array( '0', '__NAOEDITARSECAO__', '__NÃOEDITARSEÇÃO__', '__SEMEDITARSEÇÃO__', '__SEMEDITARSECAO__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__SEMCABECALHO__', '__SEMCABEÇALHO__', '__SEMTITULO__', '__SEMTÍTULO__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'MESATUAL', 'MESATUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'MESATUAL1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'NOMEDOMESATUAL', 'CURRENTMONTHNAME' ),
index 59d6aef..e975098 100644 (file)
@@ -197,13 +197,23 @@ Is only shown if {{msg-mw|tog-enotifusertalkpages}} or/and {{msg-mw|tog-enotifwa
 'tog-norollbackdiff' => "Option in [[Special:Preferences]], 'Misc' tab. Only shown for users with the rollback right. By default a diff is shown below the return screen of a rollback. Checking this preference toggle will suppress that. {{Gender}}
 {{Identical|Rollback}}",
 
-'underline-always' => 'Used in [[Special:Preferences]] (under "Misc"). This option means "always underline links", there are also options "never" and "browser default". {{Gender}}
+'underline-always' => 'Used in [[Special:Preferences#mw-prefsection-rendering|Preferences]].
+
+This option means "always underline links", there are also options {{msg-mw|Underline-never}} and {{msg-mw|Underline-default}}.
+
+{{Gender}}
 {{Identical|Always}}',
-'underline-never' => 'Used in [[Special:Preferences]] (under "Misc"). This option means "never underline links", there are also options "always" and "browser default". {{Gender}}
+'underline-never' => 'Used in [[Special:Preferences#mw-prefsection-rendering|Preferences]].
+
+This option means "never underline links", there are also options {{msg-mw|Underline-always}} and {{msg-mw|Underline-default}}.
 
+{{Gender}}
 {{Identical|Never}}',
-'underline-default' => 'Used in [[Special:Preferences]] (under "Misc"). This option means "underline links as in your browser", there are also options "never" and "always". {{Gender}}
+'underline-default' => 'Used in [[Special:Preferences#mw-prefsection-rendering|Preferences]].
 
+This option means "underline links as in your user skin or your browser", there are also options {{msg-mw|Underline-never}} and {{msg-mw|Underline-always}}.
+
+{{Gender}}
 {{Identical|Browser default}}',
 
 # Font style option in Special:Preferences
@@ -465,6 +475,7 @@ Also used as title of [[Special:Search]] page in [[Special:SpecialPages]].
 \'\'\'Note:\'\'\' This is "views" as in "appearances"/"representations", \'\'\'not\'\'\' as in "visits"/"accesses".
 {{Identical|View}}',
 'toolbox' => 'The title of the toolbox below the search menu.',
+'viewtalkpage' => 'Used in Standard (a.k.a. Classic) skin as a link to talk page for all namespaces, in edit or history mode.',
 'otherlanguages' => 'This message is shown under the toolbox. It is used if there are interwiki links added to the page, like <tt><nowiki>[[</nowiki>en:Interwiki article]]</tt>.
 {{Identical|Otherlanguages}}',
 'redirectedfrom' => 'The text displayed when a certain page is redirected to another page.
@@ -1848,6 +1859,21 @@ Similar to {{msg-mw|Gur-rightslog-entry}}',
 Parameters:
 * $2 is a comma separated list of old user groups or {{msg-mw|Rightsnone}}
 * $3 is a comma separated list of new user groups',
+'logentry-rights-rights' => '*$1 - username
+*$3 - username
+*$4 - list of user groups or {{msg-mw|Rightsnone}}
+*$5 - list of user groups or {{msg-mw|Rightsnone}}
+
+{{Logentry}}',
+'logentry-rights-rights-legacy' => '*$1 - username
+*$3 - username
+
+{{Logentry}}',
+'logentry-rights-autopromote' => '*$1 - username
+*$4 - comma separated list of old user groups or {{msg-mw|Rightsnone}}
+*$5 - comma separated list of new user groups
+
+{{Logentry}}',
 'rightsnone' => 'Default rights for registered users.
 
 {{Identical|None}}',
@@ -3063,7 +3089,11 @@ Example line:
 'whatlinkshere-hidelinks' => 'Filter option in [[Special:WhatLinksHere]]. Parameters:
 * $1 is the {{msg-mw|hide}} or {{msg-mw|show}}',
 'whatlinkshere-hideimages' => 'Filter option in [[Special:WhatLinksHere]]. Parameters:
-* $1 is the {{msg-mw|hide}} or {{msg-mw|show}}',
+* $1 is the {{msg-mw|hide}} or {{msg-mw|show}}
+
+See also:
+*{{msg-mw|Isimage}}
+*{{msg-mw|Media_tip}}',
 'whatlinkshere-filters' => '{{Identical|Filter}}',
 
 # Block/unblock
@@ -3549,7 +3579,7 @@ See also {{msg-mw|Anonuser}} and {{msg-mw|Siteusers}}.',
 'pageinfo-header-properties' => 'Table section header in action=info.',
 'pageinfo-display-title' => 'The title that is displayed when the page is viewed.',
 'pageinfo-default-sort' => 'The key by which the page is sorted in categories by default.',
-'pageinfo-length' => 'પૃષ્ઠની લંબાઇ બાઇટમાં',
+'pageinfo-length' => 'The length of the page, in bytes.',
 'pageinfo-article-id' => 'The numeric identifier of the page.',
 'pageinfo-language' => 'Language in which the page content is written.',
 'pageinfo-robot-policy' => 'The search engine status of the page.
@@ -4703,7 +4733,8 @@ There are no such extensions here, so look at [[wikipedia:Special:Version]] for
 'version-parser-function-hooks' => 'Shown in [[Special:Version]]',
 'version-hook-name' => 'Shown in [[Special:Version]]',
 'version-hook-subscribedby' => 'Shown in [[Special:Version]]',
-'version-version' => '{{Identical|Version}}',
+'version-version' => '*$1 - version number
+{{Identical|Version}}',
 'version-svn-revision' => '{{optional}}
 This is being used in [[Special:Version]], preceeding the subversion revision numbers of the extensions loaded inside brackets, like this: "({{int:version-revision}} r012345")
 
index 844b84a..8f151eb 100644 (file)
@@ -131,12 +131,11 @@ $specialPageAliases = array(
 
 $magicWords = array(
        'redirect'                  => array( '0', '#PUSAPUNA', '#REDIRECCIÓN', '#REDIRECCION', '#REDIRECT' ),
-       'notoc'                     => array( '0', '__YUYARINANNAQ__', '__NOTDC__', '__NOTOC__' ),
-       'nogallery'                 => array( '0', '__RIKCHASUYUNNAQ__', '__NOGALERÍA__', '__NOGALERIA__', '__NOGALLERY__' ),
-       'forcetoc'                  => array( '0', '__YUYARINATAATIPACHIY__', '__FORZARTDC__', '__FORZARTOC__', '__FORCETOC__' ),
+       'notoc'                     => array( '0', '__YUYARINANNAQ__', '__NOTDC__', '__SIN_TDC__', '__NOTOC__' ),
+       'nogallery'                 => array( '0', '__RIKCHASUYUNNAQ__', '__NOGALERÍA__', '__NOGALERIA__', '__SIN_GALERÍA__', '__NOGALLERY__' ),
+       'forcetoc'                  => array( '0', '__YUYARINATAATIPACHIY__', '__FORZARTDC__', '__FORZARTOC__', '__FORZAR_TDC__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__YUYARINA__', '__TDC__', '__TOC__' ),
-       'noeditsection'             => array( '0', '__AMARAKITAHUKCHAYCHU__', '__NOEDITARSECCIÓN__', '__NOEDITARSECCION__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__UMANNAQ__', '__NOTÍTULO__', '__NOTITULO__', '__NOHEADER__' ),
+       'noeditsection'             => array( '0', '__AMARAKITAHUKCHAYCHU__', '__NOEDITARSECCIÓN__', '__NOEDITARSECCION__', '__NO_EDITAR_SECCIÓN__', '__NOEDITSECTION__' ),
        'currentmonth'              => array( '1', 'KUNANKILLA', 'MESACTUAL', 'MES_ACTUAL', 'MESACTUAL2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonthname'          => array( '1', 'KUNANKILLASUTI', 'NOMBREMESACTUAL', 'NOMBRE_MES_ACTUAL', 'MESACTUALCOMPLETO', 'CURRENTMONTHNAME' ),
        'currentmonthnamegen'       => array( '1', 'KUNANKILLASUTIP', 'GENERADORNOMBREMESACTUAL', 'MESACTUALGENITIVO', 'CURRENTMONTHNAMEGEN' ),
@@ -183,7 +182,7 @@ $magicWords = array(
        'subjectpagename'           => array( '1', 'QILLQAPANQASUTI', 'NOMBREDEPAGINADETEMA', 'NOMBREDEPÁGINADETEMA', 'NOMBREDEPÁGINADEASUNTO', 'NOMBREDEPAGINADEASUNTO', 'NOMBREDEPAGINADEARTICULO', 'NOMBREDEPÁGINADEARTÍCULO', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
        'subjectpagenamee'          => array( '1', 'QILLQAPANQASUTIE', 'NOMBREDEPAGINADETEMAC', 'NOMBREDEPÁGINADETEMAC', 'NOMBREDEPÁGINADEASUNTOC', 'NOMBREDEPAGINADEASUNTOC', 'NOMBREDEPAGINADEARTICULOC', 'NOMBREDEPÁGINADEARTÍCULOC', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
        'msg'                       => array( '0', 'WILLA:', 'MSJ:', 'MSG:' ),
-       'subst'                     => array( '0', 'WAKCHAY:', 'SUBST:' ),
+       'subst'                     => array( '0', 'WAKCHAY:', 'SUST:', 'FIJAR:', 'SUBST:' ),
        'msgnw'                     => array( '0', 'WILLAMUSUQ:', 'MSGNW:' ),
        'img_thumbnail'             => array( '1', 'rikchacha', 'miniaturadeimagen', 'miniatura', 'mini', 'thumbnail', 'thumb' ),
        'img_manualthumb'           => array( '1', 'rikchacha=$1', 'miniaturadeimagen=$1', 'miniatura=$1', 'thumbnail=$1', 'thumb=$1' ),
@@ -236,7 +235,7 @@ $magicWords = array(
        'ucfirst'                   => array( '0', 'HATUNÑAWPAQ:', 'HATUNNAWPAQ:', 'PRIMEROMAYUS;', 'PRIMEROMAYÚS:', 'UCFIRST:' ),
        'lc'                        => array( '0', 'UCHUY:', 'MINUS:', 'MINÚS:', 'LC:' ),
        'uc'                        => array( '0', 'HATUN:', 'MAYUS:', 'MAYÚS:', 'UC:' ),
-       'raw'                       => array( '0', 'CHAWA:', 'RAW:' ),
+       'raw'                       => array( '0', 'CHAWA:', 'SINFORMATO', 'SINPUNTOS', 'RAW:' ),
        'displaytitle'              => array( '1', 'SUTITARIKUCHIY', 'MOSTRARTÍTULO', 'MOSTRARTITULO', 'DISPLAYTITLE' ),
        'currentversion'            => array( '1', 'KUNANMUSUQCHASQA', 'REVISIÓNACTUAL', 'VERSIONACTUAL', 'VERSIÓNACTUAL', 'CURRENTVERSION' ),
        'urlencode'                 => array( '0', 'URLLLAWICHAY', 'URL-LLAWICHAY', 'CODIFICAR', 'CODIFICARURL:', 'URLENCODE:' ),
@@ -246,7 +245,7 @@ $magicWords = array(
        'directionmark'             => array( '1', 'PURIRIYSANANCHA', 'DIRECTIONMARK', 'DIRMARK' ),
        'language'                  => array( '0', '#RIMAY:', '#IDIOMA:', '#LANGUAGE:' ),
        'contentlanguage'           => array( '1', 'SAMIQRIMAY', 'IDIOMADELCONTENIDO', 'IDIOMADELCONT', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
-       'pagesinnamespace'          => array( '1', 'SUTIKITIPIPANQAKUNA:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'pagesinnamespace'          => array( '1', 'SUTIKITIPIPANQAKUNA:', 'PÁGINASENESPACIO', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
        'numberofadmins'            => array( '1', 'HAYKAKAMACHIQ', 'NÚMEROADMINISITRADORES', 'NÚMEROADMINS', 'NUMEROADMINS', 'NUMEROADMINISTRADORES', 'NUMERODEADMINISTRADORES', 'NUMERODEADMINS', 'NÚMERODEADMINISTRADORES', 'NÚMERODEADMINS', 'NÚMEROADMINIISTRADORES', 'NUMBEROFADMINS' ),
        'formatnum'                 => array( '0', 'YUPAYRIKCHAKUY', 'FORMATONÚMERO', 'FORMATONUMERO', 'FORMATNUM' ),
        'padleft'                   => array( '0', 'PADLLUQI', 'PADICHUQ', 'PADLEFT' ),
index 3c231f9..e85a226 100644 (file)
@@ -37,7 +37,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__FORTEAZACUPRINS__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__CUPRINS__', '__TOC__' ),
        'noeditsection'             => array( '0', '__FARAEDITSECTIUNE__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__FARAANTET__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'NUMARLUNACURENTA', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'LUNACURENTA1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'NUMELUNACURENTA', 'CURRENTMONTHNAME' ),
@@ -348,7 +347,7 @@ pe titlul secțiunii (JavaScript)',
 
 'underline-always' => 'Întotdeauna',
 'underline-never' => 'Niciodată',
-'underline-default' => 'Standardul navigatorului',
+'underline-default' => 'Standardul temei sau al navigatorului',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Stilul fontului din zona de modificare:',
@@ -1605,6 +1604,9 @@ Dacă decideți furnizarea sa, acesta va fi folosit pentru a vă atribui munca.'
 'rightslogtext' => 'Acest jurnal cuprinde modificările permisiunilor utilizatorilor.',
 'rightslogentry' => 'a schimbat permisiunile pentru $1 de la $2 la $3',
 'rightslogentry-autopromote' => 'a fost promovat în mod automat de la $2 la $3',
+'logentry-rights-rights' => '$1 a schimbat apartenența la grup pentru $3 de la $4 la $5',
+'logentry-rights-rights-legacy' => '$1 a schimbat apartenența la grup pentru $3',
+'logentry-rights-autopromote' => '$1 a fost promovat în mod automat de la $4 la $5',
 'rightsnone' => '(niciunul)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2234,7 +2236,7 @@ Vedeți și [[Special:WantedCategories|categoriile dorite]].',
 'linksearch-ok' => 'Caută',
 'linksearch-text' => 'Pot fi folosite metacaractere precum „*.wikipedia.org”.
 Necesită cel puțin un domeniu de nivel superior, cum ar fi „*.org”.<br />
-Protocoale suportate: <code>$1</code> (nu adăugați niciunul dintre acestea în câmpul de căutare).',
+Protocoale suportate: <code>$1</code> (se trece implicit la http:// dacă nu este specificat niciun protocol).',
 'linksearch-line' => '$1 este legat de $2',
 'linksearch-error' => 'Metacaracterele pot să apară doar la începutul hostname-ului.',
 
@@ -2283,7 +2285,7 @@ Pot exista [[{{MediaWiki:Listgrouprights-helppage}}|informații suplimentare]] d
 'emailuser-title-target' => 'E-mail către {{GENDER:$1|acest utilizator|această utilizatoare}}',
 'emailuser-title-notarget' => 'E-mail către utilizator',
 'emailpage' => 'E-mail către utilizator',
-'emailpagetext' => 'Puteți folosi formularul de mai jos pentru a trimite un e-mail acestui utilizator.
+'emailpagetext' => 'Puteți folosi formularul de mai jos pentru a trimite un e-mail {{GENDER:$1|acestui utilizator|acestei utilizatoare}}.
 Adresa de e-mail specificată de dumneavoastră în [[Special:Preferences|preferințele de utilizator]] va apărea ca adresa expeditorului e-mailului; astfel, destinatarul va putea să vă răspundă direct.',
 'usermailererror' => 'Obiectul de mail a dat eroare:',
 'defemailsubject' => 'E-mail {{SITENAME}} de la utilizatorul „$1”',
@@ -2306,7 +2308,7 @@ Adresa de e-mail specificată de dumneavoastră în [[Special:Preferences|prefer
 'emailccme' => 'Trimite-mi pe e-mail o copie a mesajului meu.',
 'emailccsubject' => 'O copie a mesajului la $1: $2',
 'emailsent' => 'E-mail trimis',
-'emailsenttext' => 'E-mailul tău a fost trimis.',
+'emailsenttext' => 'E-mailul dumneavoastră a fost trimis.',
 'emailuserfooter' => 'Acest mesaj a fost trimis de $1 către $2 prin intermediul funcției „Trimite e-mail” de la {{SITENAME}}.',
 
 # User Messenger
@@ -2317,7 +2319,7 @@ Adresa de e-mail specificată de dumneavoastră în [[Special:Preferences|prefer
 'watchlist' => 'Pagini urmărite',
 'mywatchlist' => 'Pagini urmărite',
 'watchlistfor2' => 'Pentru $1 $2',
-'nowatchlist' => 'Nu ați ales să urmăriți nici o pagină.',
+'nowatchlist' => 'Lista dumneavoastră de pagini urmărite nu conține nici o pagină.',
 'watchlistanontext' => 'Vă rugăm să vă $1 pentru a vizualiza sau edita elementele din lista dumneavoastră de pagini urmărite.',
 'watchnologin' => 'Nu sunteți autentificat',
 'watchnologintext' => 'Trebuie să fiți [[Special:UserLogin|autentificat]] pentru a vă modifica lista de pagini urmărite.',
@@ -2352,7 +2354,7 @@ Modificările viitoare efectuate asupra acestei pagini dar și asupra paginii de
 'enotif_mailer' => 'Sistemul de notificare {{SITENAME}}',
 'enotif_reset' => 'Marchează toate paginile vizitate',
 'enotif_newpagetext' => 'Aceasta este o pagină nouă.',
-'enotif_impersonal_salutation' => '{{SITENAME}} utilizator',
+'enotif_impersonal_salutation' => 'Utilizator {{SITENAME}}',
 'changed' => 'modificată',
 'created' => 'creată',
 'enotif_subject' => 'Pagina $PAGETITLE de la {{SITENAME}} a fost $CHANGEDORCREATED de $PAGEEDITOR',
@@ -2613,7 +2615,7 @@ Iată aici ultima înregistrare relevantă din jurnalul blocărilor:',
 'whatlinkshere-hideredirs' => '$1 redirecționările',
 'whatlinkshere-hidetrans' => '$1 transcluderile',
 'whatlinkshere-hidelinks' => '$1 legăturile',
-'whatlinkshere-hideimages' => '$1 legăturile către imagine',
+'whatlinkshere-hideimages' => '$1 legăturile către fișier',
 'whatlinkshere-filters' => 'Filtre',
 
 # Block/unblock
@@ -3094,7 +3096,7 @@ Permite adăugarea unui motiv în descrierea modificărilor',
 
 # Info page
 'pageinfo-title' => 'Informații pentru „$1”',
-'pageinfo-not-current' => 'Informațiile se pot afișa doar pentru versiunea curentă.',
+'pageinfo-not-current' => 'Ne cerem scuze, dar este imposibilă furnizarea acestor informații pentru versiunile mai vechi ale paginii.',
 'pageinfo-header-basic' => 'Informații de bază',
 'pageinfo-header-edits' => 'Istoric modificări',
 'pageinfo-header-restrictions' => 'Protecție pagină',
@@ -3103,6 +3105,7 @@ Permite adăugarea unui motiv în descrierea modificărilor',
 'pageinfo-default-sort' => 'Cheie de sortare implicită',
 'pageinfo-length' => 'Lungimea paginii (în octeți)',
 'pageinfo-article-id' => 'ID pagină',
+'pageinfo-language' => 'Limba conținutului paginii',
 'pageinfo-robot-policy' => 'Statut pentru motorul de căutare',
 'pageinfo-robot-index' => 'Indexabilă',
 'pageinfo-robot-noindex' => 'Neindexabilă',
index 27d1e6f..cc3e1ba 100644 (file)
@@ -69,6 +69,7 @@
  * @author Temuri rajavi
  * @author Vago
  * @author VasilievVV
+ * @author Volkov
  * @author Ytsukeng Fyvaprol
  * @author Александр Сигачёв
  * @author Гусейн
@@ -200,7 +201,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__ОБЯЗ_ОГЛ__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__ОГЛАВЛЕНИЕ__', '__ОГЛ__', '__TOC__' ),
        'noeditsection'             => array( '0', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__БЕЗ_ЗАГОЛОВКА__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'ТЕКУЩИЙ_МЕСЯЦ_1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ),
@@ -420,7 +420,7 @@ $messages = array(
 'tog-minordefault' => 'Помечать по умолчанию правки как малозначимые',
 'tog-previewontop' => 'Помещать предпросмотр перед окном редактирования',
 'tog-previewonfirst' => 'Показывать предпросмотр при переходе к редактированию',
-'tog-nocache' => 'Отключить кеширование страниц в браузере',
+'tog-nocache' => 'Отключить кэширование страниц в браузере',
 'tog-enotifwatchlistpages' => 'Уведомлять по эл. почте об изменениях страниц и файлов из списка наблюдения',
 'tog-enotifusertalkpages' => 'Уведомлять по эл. почте об изменении персональной страницы обсуждения',
 'tog-enotifminoredits' => 'Уведомлять даже при незначительных изменениях страниц и файлов',
@@ -807,7 +807,7 @@ $2',
 'logouttext' => "'''Вы завершили сеанс работы.'''
 
 Вы можете продолжить участие в {{grammar:genitive|{{SITENAME}}}} анонимно или <span class='plainlinks'>[$1 представиться заново]</span> под тем же или другим именем.
-Некоторые страницы могут продолжать отображаться в том виде, как будто вы всё ещё представлены системе. Для борьбы с этим явлением обновите кеш браузера.",
+Некоторые страницы могут продолжать отображаться в том виде, как будто вы всё ещё представлены системе. Для борьбы с этим явлением обновите кэш браузера.",
 'welcomecreation' => '== Добро пожаловать, $1! ==
 Ваша учётная запись создана.
 Не забудьте провести [[Special:Preferences|персональную настройку]] сайта.',
@@ -1068,7 +1068,7 @@ $2
 Если вы анонимный участник и полагаете, что получили сообщения, адресованные не вам, пожалуйста, [[Special:UserLogin/signup|создайте учётную запись]] или [[Special:UserLogin|представьтесь системе]], чтобы впредь избежать возможной путаницы с другими анонимными участниками.''",
 'noarticletext' => "В настоящий момент текст на данной странице отсутствует.
 Вы можете [[Special:Search/{{PAGENAME}}|найти упоминание данного названия]] в других статьях,
-<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов],
+<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов]
 или '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} создать страницу с таким названием]'''</span>.",
 'noarticletext-nopermission' => 'В настоящее время на этой странице нет текста.
 Вы можете [[Special:Search/{{PAGENAME}}|найти упоминание данного названия]] на других страницах,
@@ -1081,11 +1081,11 @@ $2
 'userpage-userdoesnotexist-view' => 'Не зарегистрировано учётной записи «$1».',
 'blocked-notice-logextract' => 'Этот участник в данный момент заблокирован.
 Ниже приведена последняя запись из журнала блокировок:',
-'clearyourcache' => "'''Замечание.''' Возможно, после сохранения вам придётся очистить кеш своего браузера, чтобы увидеть изменения.
-* '''Firefox / Safari:''' Удерживая клавишу ''Shift'', нажмите на панели инструментов ''Обновить'', или нажмите ''Ctrl-F5'' или ''Ctrl-R'' (''⌘-R'' на Mac)
+'clearyourcache' => "'''Замечание.''' Возможно, после сохранения вам придётся очистить кэш своего браузера, чтобы увидеть изменения.
+* '''Firefox / Safari:''' Удерживая клавишу ''Shift'', нажмите на панели инструментов ''Обновить'' либо нажмите ''Ctrl-F5'' или ''Ctrl-R'' (''⌘-R'' на Mac)
 * '''Google Chrome:''' Нажмите ''Ctrl-Shift-R'' (''⌘-Shift-R'' на Mac)
-* '''Internet Explorer:''' Удерживая ''Ctrl'' нажмите ''Обновить'', или нажмите ''Ctrl-F5''
-* '''Opera:''' Выберите очистку кеша в меню ''Инструменты → Настройки''",
+* '''Internet Explorer:''' Удерживая ''Ctrl'', нажмите ''Обновить'' либо нажмите ''Ctrl-F5''
+* '''Opera:''' Выберите очистку кэша в меню ''Инструменты → Настройки''",
 'usercssyoucanpreview' => "'''Подсказка.''' Нажмите кнопку «{{int:showpreview}}», чтобы проверить свой новый CSS-файл перед сохранением.",
 'userjsyoucanpreview' => "'''Подсказка.''' Нажмите кнопку «{{int:showpreview}}», чтобы проверить свой новый JS-файл перед сохранением.",
 'usercsspreview' => "'''Помните, что это только предварительный просмотр вашего CSS-файла, он ещё не сохранён!'''",
@@ -1130,9 +1130,9 @@ $2
 'editingold' => "'''Предупреждение. Вы редактируете устаревшую версию данной страницы.'''
 После сохранения будут потеряны изменения, сделанные в последующих версиях.",
 'yourdiff' => 'Различия',
-'copyrightwarning' => "Обратите внимание, что все добавления и изменения текста статьи рассматриваются, как выпущенные на условиях лицензии $2 (см. $1).
+'copyrightwarning' => "Обратите внимание, что все добавления и изменения текста статьи рассматриваются как выпущенные на условиях лицензии $2 (см. $1).
 Если вы не хотите, чтобы ваши тексты свободно распространялись и редактировались любым желающим, не помещайте их сюда.<br />
-Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из
+Вы также подтверждаете, что являетесь автором вносимых дополнений или скопировали их из
 источника, допускающего свободное распространение и изменение своего содержимого.<br />
 '''НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ МАТЕРИАЛЫ, ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ!'''",
 'copyrightwarning2' => "Пожалуйста, учтите, что любой ваш вклад в проект «{{SITENAME}}» может быть отредактирован или удалён другими участниками.
@@ -1188,7 +1188,7 @@ $2
 'content-not-allowed-here' => 'Содержимое "$1" недопустимо на странице [[$2]]',
 
 # Content models
-'content-model-wikitext' => 'викитекст',
+'content-model-wikitext' => 'вики-текст',
 'content-model-text' => 'обычный текст',
 'content-model-javascript' => 'JavaScript',
 'content-model-css' => 'CSS',
@@ -1196,7 +1196,7 @@ $2
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Внимание. Эта страница содержит слишком много вызовов ресурсоёмких функций.
 
-Ограничение на количество вызовов установлено на уровне $2 {{PLURAL:$2|вызова|вызовов|вызовов}}, в данном случае требуется сделать {{PLURAL:$1|$1 вызов|$1 вызова|$1 вызовов}}.',
+Ограничение на количество вызовов установлено на уровне $2 {{PLURAL:$2|вызова|вызовов|вызовов}}, в данном случае требуется сделать $1 {{PLURAL:$1|вызов|вызова|вызовов}}.',
 'expensive-parserfunction-category' => 'Страницы со слишком большим количеством вызовов ресурсоёмких функций',
 'post-expand-template-inclusion-warning' => 'Предупреждение: суммарный размер включаемых шаблонов слишком велик.
 Некоторые шаблоны не будут включены.',
@@ -1465,7 +1465,7 @@ $1",
 'powersearch-toggleall' => 'Все',
 'powersearch-togglenone' => 'Ничего',
 'search-external' => 'Внешний поиск',
-'searchdisabled' => 'Извините, но встроенный полнотекстовый поиск выключен. Вы можете воспользоваться поиском по сайту через поисковые системы общего назначения, однако имейте в виду, что копия сайта в их кеше может быть несколько устаревшей.',
+'searchdisabled' => 'Извините, но встроенный полнотекстовый поиск выключен. Вы можете воспользоваться поиском по сайту через поисковые системы общего назначения, однако имейте в виду, что копия сайта в их кэше может быть несколько устаревшей.',
 
 # Quickbar
 'qbsettings' => 'Панель навигации',
@@ -1661,7 +1661,7 @@ $1",
 'right-reupload-own' => 'перезапись файлов тем же участником',
 'right-reupload-shared' => 'подмена файлов из общих хранилищ локальными',
 'right-upload_by_url' => 'загрузка файлов с адреса URL',
-'right-purge' => 'очистка кеша страниц без страницы подтверждения',
+'right-purge' => 'очистка кэша страниц без страницы подтверждения',
 'right-autoconfirmed' => 'правка частично защищённых страниц',
 'right-bot' => 'считаться автоматическим процессом',
 'right-nominornewtalk' => 'отсутствие малых правок на страницах обсуждений включает режим новых сообщений',
@@ -1711,6 +1711,9 @@ $1",
 'rightslogtext' => 'Это журнал изменений прав участника.',
 'rightslogentry' => 'изменил членство в группах для $1 с $2 на $3',
 'rightslogentry-autopromote' => 'был автоматически переведён из $2 в $3',
+'logentry-rights-rights' => '$1 {{GENDER:$1|изменил|изменила}} членство в группах для $3 с $4 на $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|изменил|изменила}} членство в группах для $3',
+'logentry-rights-autopromote' => '$1 {{GENDER:$1|был автоматически переведён|была автоматически переведена}} из $4 в $5',
 'rightsnone' => '(нет)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -1910,7 +1913,7 @@ $1",
 'filename-bad-prefix' => "Имя загружаемого файла начинается с «'''$1'''» и, вероятно, является одним из шаблонных имён, которые цифровые фотокамеры дают снимкам. Пожалуйста, выберите имя, лучше описывающее содержание файла.",
 'filename-prefix-blacklist' => ' #<!-- оставьте эту строчку как есть --> <pre>
 # Синтаксис следующий:
-#   * Всё, что начинается с символа «#» считается комментарием (до конца строки)
+#   * Всё, что начинается с символа «#», считается комментарием (до конца строки)
 #   * Каждая непустая строка — префикс стандартного названия файла, которое обычно даёт цифровая камера
 CIMG # Casio
 DSC_ # Nikon
@@ -1988,7 +1991,7 @@ $1',
 # ZipDirectoryReader
 'zip-file-open-error' => 'Произошла ошибка при открытии файла для проверки архива.',
 'zip-wrong-format' => 'Указанный файл не является файлом ZIP.',
-'zip-bad' => 'ZIP-файл повреждён, или не может быть прочитан.
+'zip-bad' => 'ZIP-файл повреждён или не может быть прочитан.
 Он не может быть должным образом проверен.',
 'zip-unsupported' => 'Этот ZIP-файл использует возможности, не поддерживаемые MediaWiki.
 Он не может быть должным образом проверен.',
@@ -2198,7 +2201,7 @@ $1',
 'brokenredirects-edit' => 'править',
 'brokenredirects-delete' => 'удалить',
 
-'withoutinterwiki' => 'СÑ\82Ñ\80аниÑ\86Ñ\8b Ð±ÐµÐ· Ð¼ÐµÐ¶Ñ\8aÑ\8fзÑ\8bковÑ\8bÑ\85 ссылок',
+'withoutinterwiki' => 'СÑ\82Ñ\80аниÑ\86Ñ\8b Ð±ÐµÐ· Ð¸Ð½Ñ\82еÑ\80вики-ссылок',
 'withoutinterwiki-summary' => 'Следующие страницы не имеют интервики-ссылок:',
 'withoutinterwiki-legend' => 'Приставка',
 'withoutinterwiki-submit' => 'Показать',
@@ -2237,7 +2240,7 @@ $1',
 'mostlinkedtemplates' => 'Самые используемые шаблоны',
 'mostcategories' => 'Страницы, включённые в большое количество категорий',
 'mostimages' => 'Самые используемые файлы',
-'mostinterwikis' => 'СÑ\82Ñ\80аниÑ\86Ñ\8b Ñ\81 Ð½Ð°Ð¸Ð±Ð¾Ð»Ñ\8cÑ\88им Ñ\87иÑ\81лом Ð¼ÐµÐ¶Ñ\8aÑ\8fзÑ\8bковÑ\8bÑ\85 ссылок',
+'mostinterwikis' => 'СÑ\82Ñ\80аниÑ\86Ñ\8b Ñ\81 Ð½Ð°Ð¸Ð±Ð¾Ð»Ñ\8cÑ\88им Ñ\87иÑ\81лом Ð¸Ð½Ñ\82еÑ\80вики-ссылок',
 'mostrevisions' => 'Наиболее часто редактировавшиеся страницы',
 'prefixindex' => 'Указатель по началу названий страниц',
 'prefixindex-namespace' => 'Указатель по началу страниц (пространство имён «{{ns:$1}}»)',
@@ -2465,7 +2468,7 @@ $1',
 'enotif_lastvisited' => 'См. $1 для просмотра всех изменений, произошедших с вашего последнего посещения.',
 'enotif_lastdiff' => 'См. $1 для ознакомления с изменением.',
 'enotif_anon_editor' => 'анонимный участник $1',
-'enotif_body' => 'УважаемÑ\8bй(аÑ\8f) $WATCHINGUSERNAME,
+'enotif_body' => 'Ð\97дÑ\80авÑ\81Ñ\82вÑ\83йÑ\82е, $WATCHINGUSERNAME!
 
 $PAGEEDITDATE страница проекта «{{SITENAME}}» $PAGETITLE была $CHANGEDORCREATED участником $PAGEEDITOR, см. $PAGETITLE_URL для просмотра текущей версии.
 
@@ -2593,7 +2596,7 @@ $UNWATCHURL
 'protect-otherreason' => 'Другая причина/дополнение:',
 'protect-otherreason-op' => 'Другая причина',
 'protect-dropdown' => '* Типовые причины защиты
-** заядлый вандализм
+** частый вандализм
 ** чрезмерный спам
 ** непродуктивная война правок
 ** популярная страница',
@@ -2621,7 +2624,7 @@ $UNWATCHURL
 'undeletepage' => 'Просмотр и восстановление удалённых страниц',
 'undeletepagetitle' => "'''Ниже перечислены удалённые версии страницы [[:$1]]'''.",
 'viewdeletedpage' => 'Просмотр удалённых страниц',
-'undeletepagetext' => '{{PLURAL:$1|Следующая $1 страница была удалена|Следующие $1 страницы были удалены|Следующие $1 страниц были удалены}}, однако {{PLURAL:$1|она всё ещё находятся в архиве, и поэтому может быть восстановлена|они всё ещё находятся в архиве, и поэтому могут быть восстановлены}}.
+'undeletepagetext' => '{{PLURAL:$1|Следующая $1 страница была удалена|Следующие $1 страницы были удалены|Следующие $1 страниц были удалены}}, однако {{PLURAL:$1|она всё ещё находится в архиве и поэтому может быть восстановлена|они всё ещё находятся в архиве и поэтому могут быть восстановлены}}.
 Архив может периодически очищаться.',
 'undelete-fieldset-title' => 'Восстановить версии',
 'undeleteextrahelp' => "Для полного восстановления истории страницы оставьте все отметки пустыми и нажмите '''«{{int:undeletebtn}}»'''.
@@ -3015,7 +3018,7 @@ $1',
 'thumbnail_dest_directory' => 'Невозможно создать целевую директорию',
 'thumbnail_image-type' => 'Данный тип изображения не поддерживается',
 'thumbnail_gd-library' => 'Неполная конфигурация библиотеки GD, отсутствует функция $1',
-'thumbnail_image-missing' => 'По видимому, отсутствует файл $1',
+'thumbnail_image-missing' => 'По-видимому, отсутствует файл $1',
 
 # Special:Import
 'import' => 'Импортирование страниц',
@@ -3035,7 +3038,7 @@ $1',
 'importstart' => 'Импортирование страниц…',
 'import-revision-count' => '$1 {{PLURAL:$1|версия|версии|версий}}',
 'importnopages' => 'Нет страниц для импортирования.',
-'imported-log-entries' => '{{PLURAL:$1|Импортирована $1 запись журнала|Импортировано $1 записи журнала|Импортировано $1 записей журнала}}.',
+'imported-log-entries' => '{{PLURAL:$1|Импортирована $1 запись|Импортировано $1 записи|Импортировано $1 записей}} журнала.',
 'importfailed' => 'Не удалось импортировать: $1',
 'importunknownsource' => 'Неизвестный тип импортируемой страницы',
 'importcantopen' => 'Невозможно открыть импортируемый файл',
@@ -3223,6 +3226,7 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-default-sort' => 'Ключ сортировки по умолчанию',
 'pageinfo-length' => 'Длина страницы (в байтах)',
 'pageinfo-article-id' => 'Идентификатор страницы',
+'pageinfo-language' => 'Язык страницы',
 'pageinfo-robot-policy' => 'Индексация поисковыми службами',
 'pageinfo-robot-index' => 'Индексируется',
 'pageinfo-robot-noindex' => 'Не индексируется',
@@ -3244,6 +3248,8 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Скрытая категория|Скрытых категорий}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Шаблон|Шаблонов}} ($1)',
 'pageinfo-toolboxlink' => 'Сведения о странице',
+'pageinfo-redirectsto' => 'Перенаправление',
+'pageinfo-redirectsto-info' => 'сведения',
 'pageinfo-contentpage-yes' => 'Да',
 'pageinfo-protect-cascading-yes' => 'Да',
 
@@ -3310,13 +3316,13 @@ $1',
 'file-info-png-looped' => 'закольцованный',
 'file-info-png-repeat' => 'проигрывается $1 {{PLURAL:$1|раз|раза|раз}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|кадр|кадра|кадров}}',
-'file-no-thumb-animation' => "'''Примечание. По техническим причинам, миниатюры этого файла не будет анимироваться.'''",
-'file-no-thumb-animation-gif' => "'''Примечание. По техническим причинам, миниатюры подобных GIF-изображений высокого разрешения не анимируются.'''",
+'file-no-thumb-animation' => "'''Примечание. По техническим причинам миниатюры этого файла не будет анимироваться.'''",
+'file-no-thumb-animation-gif' => "'''Примечание. По техническим причинам миниатюры подобных GIF-изображений высокого разрешения не анимируются.'''",
 
 # Special:NewFiles
 'newimages' => 'Галерея новых файлов',
 'imagelisttext' => "Ниже представлен список из '''$1''' {{PLURAL:$1|файла|файлов|файлов}}, отсортированных $2.",
-'newimages-summary' => 'ЭÑ\82а Ñ\81лÑ\83жебнаÑ\8f Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¿Ð¾ÐºÐ°Ð·Ñ\8bваеÑ\82 недавно загруженные файлы.',
+'newimages-summary' => 'Ð\9dа Ñ\8dÑ\82ой Ñ\81лÑ\83жебной Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ\8b недавно загруженные файлы.',
 'newimages-legend' => 'Фильтр',
 'newimages-label' => 'Имя файла (или его часть):',
 'showhidebots' => '($1 ботов)',
@@ -3583,7 +3589,7 @@ $1',
 'exif-exposureprogram-7' => 'Портретный режим (для снимков на близком расстоянии, с фоном не в фокусе)',
 'exif-exposureprogram-8' => 'Пейзажный режим (для пейзажных снимков, с фоном в фокусе)',
 
-'exif-subjectdistance-value' => '$1 метров',
+'exif-subjectdistance-value' => '$1 {{PLURAL:$1|метр|метра|метров}}',
 
 'exif-meteringmode-0' => 'Неизвестно',
 'exif-meteringmode-1' => 'Средний',
@@ -3856,7 +3862,7 @@ $5
 # action=purge
 'confirm_purge_button' => 'OK',
 'confirm-purge-top' => 'Очистить кэш этой страницы?',
-'confirm-purge-bottom' => 'После очистки кеша страницы будет показана её последняя версия.',
+'confirm-purge-bottom' => 'После очистки кэша страницы будет показана её последняя версия.',
 
 # action=watch/unwatch
 'confirm-watch-button' => 'ОК',
@@ -4026,6 +4032,7 @@ $5
 'version-license' => 'Лицензия',
 'version-poweredby-credits' => "Эта вики работает на движке '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'другие',
+'version-credits-summary' => 'Хотим поблагодарить следующих участников за их вклад в развитие [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki является свободным программным обеспечением, которое вы можете распространять и/или изменять в соответствии с условиями лицензии GNU General Public License, опубликованной фондом свободного программного обеспечения; второй версии, либо любой более поздней версии.
 
 MediaWiki распространяется в надежде, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, даже без подразумеваемых гарантий КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ. См. лицензию GNU General Public License для более подробной информации.
@@ -4063,7 +4070,7 @@ MediaWiki распространяется в надежде, что она бу
 'specialpages-note' => '----
 * Обычные служебные страницы.
 * <span class="mw-specialpagerestricted">Служебные страницы с ограниченным доступом.</span>
-* <span class="mw-specialpagecached">Закешированные служебные страницы (могут быть устаревшими).</span>',
+* <span class="mw-specialpagecached">Закэшированные служебные страницы (могут быть устаревшими).</span>',
 'specialpages-group-maintenance' => 'Отчёты технического обслуживания',
 'specialpages-group-other' => 'Другие служебные страницы',
 'specialpages-group-login' => 'Представиться / Зарегистрироваться',
@@ -4143,16 +4150,16 @@ MediaWiki распространяется в надежде, что она бу
 
 # New logging system
 'logentry-delete-delete' => '$1 {{GENDER:$1|удалил|удалила}} страницу $3',
-'logentry-delete-restore' => '$1 восстановил страницу $3',
-'logentry-delete-event' => '$1 изменил видимость {{PLURAL:$5|$5 записи журнала|$5 записей журнала|$5 записей журнала}} на $3: $4',
-'logentry-delete-revision' => '$1 изменил видимость {{PLURAL:$5|$5 версии|$5 версий|$5 версий}} на странице $3: $4',
-'logentry-delete-event-legacy' => '$1 изменил видимость записей журнала $3',
-'logentry-delete-revision-legacy' => '$1 изменил видимость версий на странице $3',
-'logentry-suppress-delete' => '$1 подавил страницу $3',
-'logentry-suppress-event' => '$1 скрытно изменил видимость {{PLURAL:$5|$5 записи журнала|$5 записей журнала|$5 записей журнала}} на $3: $4',
-'logentry-suppress-revision' => '$1 скрытно изменил видимость {{PLURAL:$5|$5 версии|$5 версий|$5 версий}} на странице $3: $4',
-'logentry-suppress-event-legacy' => '$1 скрытно изменил видимость записей журнала $3',
-'logentry-suppress-revision-legacy' => '$1 скрытно изменил видимость версий на странице $3',
+'logentry-delete-restore' => '$1 {{GENDER:$1|восстановил|восстановила}} страницу $3',
+'logentry-delete-event' => '$1 {{GENDER:$1|изменил|изменила}} видимость {{PLURAL:$5|$5 записи|$5 записей|$5 записей}} журнала на $3: $4',
+'logentry-delete-revision' => '$1 {{GENDER:$1|изменил|изменила}} видимость {{PLURAL:$5|$5 версии|$5 версий|$5 версий}} на странице $3: $4',
+'logentry-delete-event-legacy' => '$1 {{GENDER:$1|изменил|изменила}} видимость записей журнала $3',
+'logentry-delete-revision-legacy' => '$1 {{GENDER:$1|изменил|изменила}} видимость версий на странице $3',
+'logentry-suppress-delete' => '$1 {{GENDER:$1|подавил|подавила}} страницу $3',
+'logentry-suppress-event' => '$1 скрытно {{GENDER:$1|изменил|изменила}} видимость {{PLURAL:$5|$5 записи|$5 записей|$5 записей}} журнала на $3: $4',
+'logentry-suppress-revision' => '$1 скрытно {{GENDER:$1|изменил|изменила}} видимость {{PLURAL:$5|$5 версии|$5 версий|$5 версий}} на странице $3: $4',
+'logentry-suppress-event-legacy' => '$1 скрытно {{GENDER:$1|изменил|изменила}} видимость записей журнала $3',
+'logentry-suppress-revision-legacy' => '$1 скрытно {{GENDER:$1|изменил|изменила}} видимость версий на странице $3',
 'revdelete-content-hid' => 'содержание скрыто',
 'revdelete-summary-hid' => 'описание правки скрыто',
 'revdelete-uname-hid' => 'имя участника скрыто',
@@ -4161,15 +4168,15 @@ MediaWiki распространяется в надежде, что она бу
 'revdelete-uname-unhid' => 'имя участника раскрыто',
 'revdelete-restricted' => 'ограничения применяются к администраторам',
 'revdelete-unrestricted' => 'ограничения сняты для администраторов',
-'logentry-move-move' => '$1 переименовал страницу $3 в $4',
-'logentry-move-move-noredirect' => '$1 переименовал страницу $3 в $4 без оставления перенаправления',
-'logentry-move-move_redir' => '$1 переименовал страницу $3 в $4 поверх перенаправления',
-'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-move-move' => '$1 {{GENDER:$1|переименовал|переименовала}} страницу $3 в $4',
+'logentry-move-move-noredirect' => '$1 {{GENDER:$1|переименовал|переименовала}} страницу $3 в $4 без оставления перенаправления',
+'logentry-move-move_redir' => '$1 {{GENDER:$1|переименовал|переименовала}} страницу $3 в $4 поверх перенаправления',
+'logentry-move-move_redir-noredirect' => '$1 {{GENDER:$1|переименовал|переименовала}} страницу $3 в $4 поверх перенаправления и без оставления перенаправления',
+'logentry-patrol-patrol' => '$1 {{GENDER:$1|отпатрулировал|отпатрулировала}} версию $4 страницы $3',
+'logentry-patrol-patrol-auto' => '$1 автоматически {{GENDER:$1|отпатрулировал|отпатрулировала}} версию $4 страницы $3',
+'logentry-newusers-newusers' => '$1 {{GENDER:$1|создал|создала}} учётную запись участника',
+'logentry-newusers-create' => '$1 {{GENDER:$1|создал|создала}} учётную запись',
+'logentry-newusers-create2' => '$1 {{GENDER:$1|создал|создала}} учётную запись участника $3',
 'logentry-newusers-autocreate' => 'Автоматически создана учётная запись $1',
 'newuserlog-byemail' => 'пароль отправлен по эл. почте',
 
@@ -4186,7 +4193,7 @@ MediaWiki распространяется в надежде, что она бу
 'feedback-error3' => 'Ошибка. Нет ответа от API',
 'feedback-thanks' => 'Спасибо! Ваш отзыв размещён на странице «[$2 $1]».',
 'feedback-close' => 'Готово',
-'feedback-bugcheck' => 'Ð\9fÑ\80екÑ\80аÑ\81но! Ð¢Ð¾Ð»Ñ\8cко Ð¿Ñ\80овеÑ\80Ñ\8cÑ\82е, Ñ\87Ñ\82о Ð² Ñ\81пиÑ\81ке [$1 Ð¸Ð·Ð²ÐµÑ\81Ñ\82нÑ\8bÑ\85 Ð¾Ñ\88ибок] ÐµÑ\91 Ð½ÐµÑ\82 Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾Ð¹ Ð·Ð°Ð¿Ð¸Ñ\81и.',
+'feedback-bugcheck' => 'Прекрасно! Только проверьте, что в списке [$1 известных ошибок] нет подобной записи.',
 'feedback-bugnew' => 'Я проверил. Сообщить о новой ошибке',
 
 # Search suggestions
@@ -4241,7 +4248,7 @@ MediaWiki распространяется в надежде, что она бу
 'duration-days' => '$1 {{PLURAL:$1|день|дня|дней}}',
 'duration-weeks' => '$1 {{PLURAL:$1|неделя|недели|недель}}',
 'duration-years' => '$1 {{PLURAL:$1|год|года|лет}}',
-'duration-decades' => '$1 {{PLURAL:$1|декада|декады|декад}}',
+'duration-decades' => '$1 {{PLURAL:$1|десятилетие|десятилетия|десятилетий}}',
 'duration-centuries' => '$1 {{PLURAL:$1|век|века|веков}}',
 'duration-millennia' => '$1 {{PLURAL:$1|тысячелетие|тысячелетия|тысячелетий}}',
 
index d83b5df..8348886 100644 (file)
@@ -178,7 +178,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__अनुक्रमणीसचते__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__अनुक्रमणी__', '__TOC__' ),
        'noeditsection'             => array( '0', '__नैवसम्पादनविभाग__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__नैवमुख्यशिर्षक__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'अद्यमासे', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonthname'          => array( '1', 'अद्यमासेनाम', 'CURRENTMONTHNAME' ),
        'currentmonthnamegen'       => array( '1', 'अद्यमासेनामसाधारण', 'CURRENTMONTHNAMEGEN' ),
index f126d89..3c24068 100644 (file)
@@ -199,7 +199,7 @@ $messages = array(
 'vector-action-protect' => 'Уларыйбат гын',
 'vector-action-undelete' => 'Төннөр',
 'vector-action-unprotect' => 'Көмүскэлин уларыт',
-'vector-simplesearch-preference' => 'Ð\9aÓ©Ñ\80дөбүл Ñ\8dÑ\82Ñ\8dн Ð±Ð¸Ñ\8dÑ\80иилÑ\8dÑ\80ин ÐºÑ\8dÒ¥Ñ\8dÑ\82иллибиÑ\82 барылын туруор («Векторга» эрэ)',
+'vector-simplesearch-preference' => 'Ð\9aÓ©Ñ\80дөбүл Ñ\83Ñ\81Ñ\82Ñ\83Ñ\80Ñ\83окаÑ\82Ñ\8bн Ñ\81Ñ\83дÑ\83Ñ\80гÑ\83 барылын туруор («Векторга» эрэ)',
 'vector-view-create' => 'Ай',
 'vector-view-edit' => 'Уларыт',
 'vector-view-history' => 'Устуоруйатын көрүү',
@@ -360,9 +360,9 @@ $1',
 'dberrortext' => 'Билии олоҕор ыйытык синтаксииһа сыыһалаах эбит.
 Ол бырагырааммаҕар баар сыыһаттан буолуон сөп.
 Билии олоҕор бүтэһик ыйытык маннык:
-<blockquote><tt>$1</tt></blockquote>
-(бу пуунсуйаттан тахсыбыт "<tt>$2</tt>").
-Билии олоҕо сыыһаны көрдөрдө "<tt>$3: $4</tt>".',
+: <code>$1</code>
+(бу пуунсуйаттан тахсыбыт «<code>$2</code>»).
+Билии олоҕо сыыһаны көрдөрдө «<code>$3: $4</code>».',
 'dberrortextcl' => 'Билии олоҕор ыйытык синтаксииһын сыыһата таҕыста.
 Билии олоҕор бүтэһик ыйытык:
 "$1"
@@ -415,8 +415,11 @@ $1',
 'protectedpagetext' => 'Бу сирэй уларытыллыбат.',
 'viewsourcetext' => 'Эн бу сирэй төрдүн көрүөххүн уонна төгүллүөххүн сөп:',
 'viewyourtext' => "'''Бэйэҥ көннөрүүлэриҥ''' исходнигын бу сирэйгэ көрүөххүн уонна хатылаан ылыаххын сөп:",
-'protectedinterface' => 'Бу сирэй бырагыраамма холбуурун хааччыйар, онон моһуогурууттан халытан хатанан турар',
-'editinginterface' => "'''Болҕой:''' Быраҕыраамма тас көстүүтүн (интерфейсын) хааччыйар тиэкиһи уларытаары гынан эрэҕин. Бу сирэйи уларыттаххына атын кыттааччылар көрөллөрүгэр бырагыраамма көстүүтэ уларыйыа. Тылбаастыыр буоллаххына Медиавики бырайыактарын сахалыы тылбааһын [//translatewiki.net/wiki/Main_Page?setlang=sah translatewiki.net] туһан.",
+'protectedinterface' => 'Бу сирэй бырагыраамма интерфейсын биллэриитин көрдөрөр, онон моһуогурууттан халытан хатанан турар.
+Тылбааһын уларытыаххын баҕарар буоллаххына онно аналлаах тылбаас ситим-сирин туһан: MediaWiki [//translatewiki.net/ translatewiki.net]',
+'editinginterface' => "'''Болҕой:''' Быраҕыраамма тас көстүүтүн (интерфейсын) хааччыйар тиэкиһи уларытаары гынан эрэҕин.
+Бу сирэйи уларыттаххына атын кыттааччылар көрөллөрүгэр бырагыраамма көстүүтэ уларыйыа. 
+Тылбааһын уларытыаххын эбэтэр эбиэххин баҕарар буоллаххына Медиавики бырайыактарын тылбаастыыр сиргэ киир [//translatewiki.net/ translatewiki.net].",
 'sqlhidden' => '(SQL ыйытык кистэммит)',
 'cascadeprotected' => 'Бу сирэй уларыйар кыаҕа суох, тоҕо диэтэххэ уларыйара бобуллубут (каскаднай көмүскэл холбоммут) {{PLURAL:$1|сирэй бөлөҕөр|сирэйдэр бөлөхтөрүгэр}} киирэр:
 $2',
@@ -454,6 +457,7 @@ $2',
 'remembermypassword' => 'Миигин бу көмпүүтэргэ сигээ ($1 {{PLURAL:$1|күн|күнтэн ордуга суох}})',
 'securelogin-stick-https' => 'Киирэн баран HTTPS нөҥүө холбонууну салгыырга',
 'yourdomainname' => 'Эн дөмүөнүҥ:',
+'password-change-forbidden' => 'Бу биикигэ киирии тылы уоарытар табыллыбат.',
 'externaldberror' => 'Тас киирии билиитин олоҕун сыыһата буолла, эбэтэр тас киирии билииҥ олоҕун саҥардар кыаҕыҥ суох.',
 'login' => 'Киир',
 'nav-login-createaccount' => 'Киир / бэлиэтэн',
index 42e45b4..45e4e9b 100644 (file)
@@ -43,52 +43,81 @@ $namespaceAliases = array(
 
 $specialPageAliases = array(
        'Activeusers'               => array( 'Aktiivvalaš_geavaheaddjit' ),
-       'Allmessages'               => array( 'Buot_systemasánit' ),
+       'Allmessages'               => array( 'Buot_systemadieđáhusat', 'Buot_vuogádatdieđáhusat' ),
        'Allpages'                  => array( 'Buot_siiddut' ),
        'Ancientpages'              => array( 'Dološ_siiddut' ),
-       'Block'                     => array( 'Cagge_geavaheaddji' ),
+       'Badtitle'                  => array( 'Veadjemeahttun_bajilčála' ),
+       'Blankpage'                 => array( 'Guoros_siidu' ),
+       'Block'                     => array( 'Hehtte', 'Hehtte_geavaheaddji', 'Hehtte_IP' ),
+       'Blockme'                   => array( 'Hehtte_mu' ),
        'Booksources'               => array( 'Girjegáldut' ),
+       'BrokenRedirects'           => array( 'Feaillalaš_stivremat', 'Feaillalaš_ođđasitstivremat' ),
        'Categories'                => array( 'Kategoriijat' ),
-       'Contributions'             => array( 'Geavaheaddji_rievdadusat' ),
+       'ComparePages'              => array( 'Veardit_siidduid' ),
+       'Confirmemail'              => array( 'Sihkaraste_e-poastta' ),
+       'Contributions'             => array( 'Rievdadusat' ),
+       'CreateAccount'             => array( 'Ráhkat_dovddaldaga' ),
+       'DeletedContributions'      => array( 'Sihkkojuvvon_rievdadusat' ),
        'Disambiguations'           => array( 'Liŋkkat_dárkonsiidduide' ),
        'DoubleRedirects'           => array( 'Guoktegeardásaš_ođđasitstivremat' ),
-       'Emailuser'                 => array( 'SáddeEpoastta' ),
+       'EditWatchlist'             => array( 'Rievdat_čuovvunlisttu' ),
+       'Emailuser'                 => array( 'Sádde_e-poastta' ),
        'Export'                    => array( 'Olggosfievrrit_siidduid' ),
+       'Import'                    => array( 'Sisafievrrit' ),
+       'BlockList'                 => array( 'Hehttenlistu', 'Listu_hehttemiin' ),
+       'Listadmins'                => array( 'Administráhtorlistu', 'Listu_administráhtoriin' ),
+       'Listbots'                  => array( 'Bohttalistu', 'Listu_bohtain' ),
        'Listfiles'                 => array( 'Fiilalogahallan' ),
-       'Listredirects'             => array( 'Listu_ođđasitstivremiin' ),
-       'Listusers'                 => array( 'Listu_geavaheddjiin' ),
+       'Listgrouprights'           => array( 'Listu_joavkkuid_vuoigavuođain' ),
+       'Listredirects'             => array( 'Stivrenlistu', 'Listu_stivremiin', 'Listu_ođđasitstivremiin' ),
+       'Listusers'                 => array( 'Geavaheaddjelistu', 'Listu_geavaheddjiin' ),
        'Log'                       => array( 'Loggat', 'Logga' ),
        'Lonelypages'               => array( 'Oarbbes_siiddut' ),
        'Longpages'                 => array( 'Guhkes_siiddut' ),
        'MIMEsearch'                => array( 'MIME-ohcan' ),
-       'Newimages'                 => array( 'Ođđa_govat' ),
+       'Movepage'                  => array( 'Sirdde_siiddu' ),
+       'Mycontributions'           => array( 'Mu_rievdadusat' ),
+       'Mypage'                    => array( 'Mu_siidu' ),
+       'Mytalk'                    => array( 'Mu_ságastallan' ),
+       'Newimages'                 => array( 'Ođđa_govat', 'Ođđa_fiillat' ),
        'Newpages'                  => array( 'Ođđa_siiddut' ),
-       'Preferences'               => array( 'Válljemat' ),
+       'Popularpages'              => array( 'Bivnnuhis_siiddut' ),
+       'Preferences'               => array( 'Válljemat', 'Ásahusat' ),
        'Protectedpages'            => array( 'Suodjaluvvon_siiddut' ),
-       'Randompage'                => array( 'Summal_siidu' ),
+       'Protectedtitles'           => array( 'Suodjaluvvon_bajilčállagat', 'Suodjaluvvon_siidonamat' ),
+       'Randompage'                => array( 'Summal', 'Summal_siidu' ),
        'Randomredirect'            => array( 'Summal_ođđasitstivren' ),
        'Recentchanges'             => array( 'Varas_rievdadusat' ),
+       'Revisiondelete'            => array( 'Sihko_veršuvnna' ),
        'Search'                    => array( 'Oza' ),
        'Shortpages'                => array( 'Oanehis_siiddut' ),
-       'Specialpages'              => array( 'Erenoamáš_siiddut' ),
+       'Specialpages'              => array( 'Erenoamáš_siiddut', 'Doaibmasiiddut' ),
        'Statistics'                => array( 'Statistihkat' ),
-       'Uncategorizedcategories'   => array( 'Klassifiserekeahtes_kategoriijat' ),
-       'Uncategorizedimages'       => array( 'Klassifiserekeahtes_govat' ),
-       'Uncategorizedpages'        => array( 'Klassifiserekeahtes_siiddut' ),
-       'Uncategorizedtemplates'    => array( 'Klassifiserekeahtes_mállevuođut' ),
-       'Unusedcategories'          => array( 'Geavatkeahtes_lágit' ),
-       'Unusedimages'              => array( 'Geavatkeahtes_govat' ),
-       'Unusedtemplates'           => array( 'Geavatkeahtes_mállevuođut' ),
-       'Unwatchedpages'            => array( 'Čuovvotkeahtes_siiddut' ),
+       'Unblock'                   => array( 'Sihko_hehttema' ),
+       'Uncategorizedcategories'   => array( 'Kategoriserekeahtes_kategoriijat' ),
+       'Uncategorizedimages'       => array( 'Kategoriserekeahtes_govat', 'Kategoriserekeahtes_fiillat' ),
+       'Uncategorizedpages'        => array( 'Kategoriserekeahtes_siiddut' ),
+       'Uncategorizedtemplates'    => array( 'Kategoriserekeahtes_mállet' ),
+       'Undelete'                  => array( 'Máhccat' ),
+       'Unusedcategories'          => array( 'Geavatkeahtes_kategoriijat' ),
+       'Unusedimages'              => array( 'Geavatkeahtes_govat', 'Geavatkeahtes_fiillat' ),
+       'Unusedtemplates'           => array( 'Geavatkeahtes_mállet' ),
+       'Unwatchedpages'            => array( 'Čuovotkeahtes_siiddut' ),
        'Upload'                    => array( 'Sádde_fiilla' ),
+       'Userlogin'                 => array( 'Logge_sisa' ),
+       'Userlogout'                => array( 'Logge_olggos' ),
+       'Userrights'                => array( 'Geavaheaddjevuoigatvuođat' ),
        'Version'                   => array( 'Veršuvdna' ),
        'Wantedcategories'          => array( 'Kategoriijasávaldagat' ),
-       'Wantedpages'               => array( 'Siidusávaldagat' ),
+       'Wantedfiles'               => array( 'Fiilasávaldagat', 'Govvasávaldagat' ),
+       'Wantedpages'               => array( 'Siidosávaldagat' ),
+       'Wantedtemplates'           => array( 'Mállesávaldagat' ),
        'Watchlist'                 => array( 'Čuovvunlistu' ),
+       'Withoutinterwiki'          => array( 'Interwikihis_siiddut', 'Giellaliŋkkahis_siiddut', 'Giellaleaŋkkahis_siiddut' ),
 );
 
 $magicWords = array(
-       'redirect'                  => array( '0', '#OĐĐASITSTIVREN', '#STIVREN', '#REDIRECT' ),
+       'redirect'                  => array( '0', '#STIVREN', '#OĐĐASITSTIVREN', '#REDIRECT' ),
        'numberofarticles'          => array( '1', 'ARTIHKKALIIDMEARRI', 'NUMBEROFARTICLES' ),
 );
 
index c37b4e4..fe51c7c 100644 (file)
@@ -121,7 +121,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__FORSIRANISADRŽAJ__', '__UKLJUČISADRŽAJ__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__SADRŽAJ__', '__TOC__' ),
        'noeditsection'             => array( '0', '__BEZ_IZMJENA__', '__BEZIZMJENA__', '__BEZ_IZMENA__', '__BEZIZMENA__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__BEZ_ZAGLAVLJA__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'TRENUTNIMJESEC', 'TRENUTNIMESEC', 'TRENUTAČNIMJESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'TRENUTNIMJESEC1', 'TRENUTNIMESEC1', 'TRENUTAČNIMJESEC1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'TRENUTNIMJESECIME', 'TRENUTNIMESECIME', 'TRENUTAČNIMJESECIME', 'CURRENTMONTHNAME' ),
index 6b1efdc..8911498 100644 (file)
@@ -233,7 +233,7 @@ $messages = array(
 
 'underline-always' => 'Vedno',
 'underline-never' => 'Nikoli',
-'underline-default' => 'Privzeto (brskalnik)',
+'underline-default' => 'Koža ali privzeto v brskalniku',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Uredi področni slog pisave:',
@@ -1506,6 +1506,9 @@ Ko vas drugi uporabniki kontaktirajo, jim vašega e-poštnega naslova ne bomo ra
 'rightslogtext' => 'Prikazan je dnevnik sprememb uporabniških pravic.',
 'rightslogentry' => 'je spremenil(-a) pravice uporabnika $1 iz $2 v $3',
 'rightslogentry-autopromote' => 'je bil(-a) samodejno povišan(-a) z $2 na $3',
+'logentry-rights-rights' => '$1 je spremenil(-a) članstvo skupine $3 z $4 na $5',
+'logentry-rights-rights-legacy' => '$1 je spremenil(-a) članstvo skupine $3',
+'logentry-rights-autopromote' => '$1 je bil(-a) samodejno povišan(-a) z $4 na $5',
 'rightsnone' => '(nobeno)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -1567,7 +1570,7 @@ Ko vas drugi uporabniki kontaktirajo, jim vašega e-poštnega naslova ne bomo ra
 'rclinks' => 'Prikaži zadnjih $1 sprememb v zadnjih $2 dneh<br />$3',
 'diff' => 'prim',
 'hist' => 'zgod',
-'hide' => 'skrij',
+'hide' => 'Skrij',
 'show' => 'Prikaži',
 'minoreditletter' => 'm',
 'newpageletter' => 'N',
@@ -2143,9 +2146,9 @@ Glej tudi [[Special:WantedCategories|želene kategorije]].',
 'linksearch-pat' => 'Iskalni vzorec:',
 'linksearch-ns' => 'Imenski prostor:',
 'linksearch-ok' => 'Išči',
-'linksearch-text' => 'Nadomestne znake, kot je »*.wikipedia.org«, lahko uporabljate.
+'linksearch-text' => 'Uporabljate lahko nadomestne znake, kot je »*.wikipedia.org«.
 Zahtevana je vsaj najvišja domena, na primer »*.org«.<br />
-Podprti protokoli: <code>$1</code> (teh ne dodajte v svoje iskanje).',
+Podprti protokoli: <code>$1</code> (če protokol ni določen, se privzame http://).',
 'linksearch-line' => '$1 povezano iz $2',
 'linksearch-error' => 'Jokerji se lahko pojavijo le na začetku gostiteljskega imena.',
 
@@ -2194,8 +2197,8 @@ Morda so na razpolago tudi [[{{MediaWiki:Listgrouprights-helppage}}|dodatne info
 'emailuser-title-target' => 'Pošlji {{GENDER:$1|uporabniku|uporabnici}} e-pošto',
 'emailuser-title-notarget' => 'Pošlji uporabniku e-pismo',
 'emailpage' => 'Pošlji uporabniku e-pismo',
-'emailpagetext' => 'S spodnjim obrazcem lahko uporabniku pošljete e-poštno sporočilo.
-E-poštni naslov, ki ste ga vpisali v [[Special:Preferences|uporabniških nastavitvah]], bo v e-sporočilu naveden kot naslov »Od:«, tako da bo prejemnik lahko odgovoril neposredno vam.',
+'emailpagetext' => 'S spodnjim obrazcem lahko {{GENDER:$1|uporabniku|uporabnici}} pošljete e-poštno sporočilo.
+E-poštni naslov, ki ste ga vpisali v [[Special:Preferences|uporabniških nastavitvah]], bo v e-sporočilu naveden kot naslov »Od:«, tako da bo {{GENDER:$1|prejemnik lahko odgovoril|prejemnica lahko odgovorila}} neposredno vam.',
 'usermailererror' => 'Predmet e-pošte je vrnil napako:',
 'defemailsubject' => 'Elektronska pošta {{GRAMMAR:rodilnik|{{SITENAME}}}} od uporabnika »$1«',
 'usermaildisabled' => 'Uporabniška e-pošta je onemogočena',
@@ -2531,7 +2534,7 @@ Najnovejši vnos v dnevniku blokad je naveden spodaj:',
 'whatlinkshere-hideredirs' => '$1 preusmeritve',
 'whatlinkshere-hidetrans' => '$1 vključitve',
 'whatlinkshere-hidelinks' => '$1 povezave',
-'whatlinkshere-hideimages' => '$1 povezave slik',
+'whatlinkshere-hideimages' => '$1 povezave datotek',
 'whatlinkshere-filters' => 'Filtri',
 
 # Block/unblock
@@ -3000,7 +3003,7 @@ Omogoča vnos pojasnila v povzetku urejanja.',
 
 # Info page
 'pageinfo-title' => 'Informacije o »$1«',
-'pageinfo-not-current' => 'Prikažemo lahko samo podatke trenutne redakcije.',
+'pageinfo-not-current' => 'Oprostite, vendar ne moremo nuditi podatkov starejših redakcij.',
 'pageinfo-header-basic' => 'Osnovni podatki',
 'pageinfo-header-edits' => 'Zgodovina urejanja',
 'pageinfo-header-restrictions' => 'Zaščita strani',
@@ -3009,6 +3012,7 @@ Omogoča vnos pojasnila v povzetku urejanja.',
 'pageinfo-default-sort' => 'Privzeti ključ za razvrščanje',
 'pageinfo-length' => 'Dolžina strani (v bajtih)',
 'pageinfo-article-id' => 'ID strani',
+'pageinfo-language' => 'Jezik vsebine strani',
 'pageinfo-robot-policy' => 'Status iskalnega pogona',
 'pageinfo-robot-index' => 'Na voljo za indeksiranje',
 'pageinfo-robot-noindex' => 'Ni na voljo za indeksiranje',
@@ -3729,6 +3733,7 @@ Uporabite lahko tudi [[Special:EditWatchlist|standardni urejevalnik]].',
 'version-license' => 'Licenca',
 'version-poweredby-credits' => "Ta wiki poganja '''[//www.mediawiki.org/ MediaWiki]''', vse pravice pridržave © 2001-$1 $2.",
 'version-poweredby-others' => 'drugi',
+'version-credits-summary' => 'Radi bi priznali prispevek naslednjih oseb k [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki je prosto programje; lahko ga razširjate in / ali spreminjate pod pogoji GNU General Public License, kot ga je objavila Free Software Foundation; bodisi License različice 2 ali (po vaši izbiri) katere koli poznejše različice.
 
 MediaWiki je razširjan v upanju, da bo uporaben, vendar BREZ KAKRŠNEGA KOLI ZAGOTOVILA; tudi brez posrednega jamstva PRODAJNE VREDNOSTI ali PRIMERNOSTI ZA DOLOČEN NAMEN. Oglejte si GNU General Public License za več podrobnosti.
index 15aaadf..8b3190b 100644 (file)
@@ -141,7 +141,6 @@ $specialPageAliases = array(
        'Protectedtitles'           => array( 'Заштићени_наслови' ),
        'Randompage'                => array( 'СлучајнаСтрана', 'Насумична_страница' ),
        'Recentchanges'             => array( 'СкорашњеИзмене', 'Скорашње_измене' ),
-       'RevisionMove'              => array( 'Премести_измену' ),
        'Search'                    => array( 'Претражи' ),
        'Shortpages'                => array( 'КраткиЧланци' ),
        'Specialpages'              => array( 'СпецијалнеСтране', 'Посебне_странице' ),
@@ -252,7 +251,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__ФОРСИРАНИСАДРЖАЈ__', '__ФОРСИРАНИ_САДРЖАЈ__', '__ПРИМОРАНИСАДРЖАЈ__', '__ПРИМОРАНИ_САДРЖАЈ__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__САДРЖАЈ__', '__TOC__' ),
        'noeditsection'             => array( '0', '__БЕЗИЗМЕНА__', '__БЕЗ_ИЗМЕНА__', '__БЕЗИЗМЈЕНА__', '__БЕЗ_ИЗМЈЕНА__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__БЕЗЗАГЛАВЉА__', '__БЕЗ_ЗАГЛАВЉА__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'ТРЕНУТНИМЕСЕЦ', 'ТРЕНУТНИ_МЕСЕЦ', 'ТЕКУЋИМЕСЕЦ', 'ТЕКУЋИ_МЕСЕЦ', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'ТРЕНУТНИМЕСЕЦ1', 'ТРЕНУТНИ_МЕСЕЦ1', 'ТЕКУЋИМЕСЕЦ1', 'ТЕКУЋИ_МЕСЕЦ1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'ТРЕНУТНИМЕСЕЦИМЕ', 'ИМЕТЕКУЋЕГМЕСЕЦА', 'ИМЕ_ТЕКУЋЕГ_МЕСЕЦА', 'CURRENTMONTHNAME' ),
@@ -443,7 +441,7 @@ $messages = array(
 
 'underline-always' => 'увек подвлачи',
 'underline-never' => 'никад не подвлачи',
-'underline-default' => 'по поставкама прегледача',
+'underline-default' => 'према теми или прегледачу',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Изглед фонта у уређивачком оквиру:',
@@ -1728,6 +1726,9 @@ $1",
 'rightslogtext' => 'Ово је дневник измена корисничких права.',
 'rightslogentry' => '{{GENDER:|је променио|је променила|је променио}} права за члана $1 из $2 у $3',
 'rightslogentry-autopromote' => 'је унапређен из $2 у $3',
+'logentry-rights-rights' => '$1 {{GENDER:$1|је променио|је променила|је променио}} чланство групе за $3 из $4 у $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|је променио|је променила|је променио}} чланство групе за $3',
+'logentry-rights-autopromote' => '$1 је аутоматски {{GENDER:$1|унапређен|унапређена|унапређен}} из $4 у $5',
 'rightsnone' => '(ништа)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2375,7 +2376,7 @@ $1',
 'linksearch-ok' => 'Претражи',
 'linksearch-text' => 'Могу се користити џокери попут „*.wikipedia.org“.<br />
 Потребан је највиши домен, као „*.org“.<br />
\9fодÑ\80жани Ð¿Ñ\80оÑ\82околи: <code>$1</code> (не Ñ\81Ñ\82авÑ\99аÑ\98Ñ\82е Ñ\83 Ð¿Ñ\80еÑ\82Ñ\80агÑ\83)',
\9fодÑ\80жани Ð¿Ñ\80оÑ\82околи: <code>$1</code> (задаÑ\98е http:// Ð°ÐºÐ¾ Ð½Ðµ Ð½Ð°Ð²ÐµÐ´ÐµÑ\82е Ð¿Ñ\80оÑ\82окол).',
 'linksearch-line' => '$1 веза у $2',
 'linksearch-error' => 'Џокери се могу појавити само на почетку адресе.',
 
@@ -2426,8 +2427,8 @@ $1',
 'emailuser-title-target' => 'Слање е-поруке {{GENDER:$1|кориснику|корисници|кориснику}}',
 'emailuser-title-notarget' => 'Слање е-поруке кориснику',
 'emailpage' => 'Слање е-порука',
-'emailpagetext' => 'Ð\9aоÑ\80иÑ\81Ñ\82иÑ\82е Ð¾Ð²Ð°Ñ\98 Ð¾Ð±Ñ\80азаÑ\86 Ð´Ð° Ð¿Ð¾Ñ\88аÑ\99еÑ\82е Ðµ-поÑ\80Ñ\83кÑ\83 Ð¾Ð²Ð¾Ð¼ ÐºÐ¾Ñ\80иÑ\81никÑ\83.
-Е-адреса коју сте унели у [[Special:Preferences|подешавањима]] ће бити приказана као адреса пошиљаоца, тако да ће прималац поруке моћи да вам одговори.',
+'emailpagetext' => 'Ð\9cожеÑ\82е Ð´Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð´Ð¾Ñ\9aи Ð¾Ð±Ñ\80азаÑ\86 Ð´Ð° Ð¿Ð¾Ñ\88аÑ\99еÑ\82е Ðµ-поÑ\80Ñ\83кÑ\83 {{GENDER:$1|овом ÐºÐ¾Ñ\80иÑ\81никÑ\83|овоÑ\98 ÐºÐ¾Ñ\80иÑ\81ниÑ\86и|овом ÐºÐ¾Ñ\80иÑ\81никÑ\83|}}.
+Е-адреса коју сте унели у вашим [[Special:Preferences|подешавањима]] ће се приказати у пољу „Од“, тако да ће прималац моћи да вам одговори директно.',
 'usermailererror' => 'Дошло је до грешке при слању поруке:',
 'defemailsubject' => '{{SITENAME}} е-адреса {{GENDER:$1|корисника|кориснице|корисника}} $1',
 'usermaildisabled' => 'Корисничка е-пошта је онемогућена',
@@ -2759,14 +2760,14 @@ $1',
 'nolinkshere-ns' => "Ниједна страница не води до '''[[:$1]]''' у изабраном именском простору.",
 'isredirect' => 'преусмерење',
 'istemplate' => 'укључивање',
-'isimage' => 'веза ÐºÐ° Ð´Ð°Ñ\82оÑ\82еÑ\86и',
+'isimage' => 'веза Ð´Ð¾ Ð´Ð°Ñ\82оÑ\82еке',
 'whatlinkshere-prev' => '{{PLURAL:$1|претходни|претходних $1}}',
 'whatlinkshere-next' => '{{PLURAL:$1|следећи|следећих $1}}',
 'whatlinkshere-links' => '← везе',
 'whatlinkshere-hideredirs' => '$1 преусмерења',
 'whatlinkshere-hidetrans' => '$1 укључивања',
 'whatlinkshere-hidelinks' => '$1 везе',
-'whatlinkshere-hideimages' => '$1 везе до слика',
+'whatlinkshere-hideimages' => '$1 везе до датотеке',
 'whatlinkshere-filters' => 'Филтери',
 
 # Block/unblock
@@ -3273,7 +3274,7 @@ $1',
 
 # Info page
 'pageinfo-title' => 'Подаци о „$1“',
-'pageinfo-not-current' => 'Ð\9fодаÑ\86и Ð¼Ð¾Ð³Ñ\83 Ð±Ð¸Ñ\82и Ð¿Ñ\80иказани Ñ\81амо Ð·Ð° Ñ\82екÑ\83Ñ\9bÑ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83.',
+'pageinfo-not-current' => 'Ð\9dажалоÑ\81Ñ\82, Ð½ÐµÐ¼Ð¾Ð³Ñ\83Ñ\9bе Ñ\98е Ð¿Ñ\80ибавиÑ\82и Ð¾Ð²Ðµ Ð¿Ð¾Ð´Ð°Ñ\82ке Ð·Ð° Ñ\81Ñ\82аÑ\80иÑ\98е Ð¸Ð·Ð¼ÐµÐ½Ðµ.',
 'pageinfo-header-basic' => 'Основни подаци',
 'pageinfo-header-edits' => 'Историја измена',
 'pageinfo-header-restrictions' => 'Заштита странице',
@@ -3282,6 +3283,7 @@ $1',
 'pageinfo-default-sort' => 'Подразумевани кључ сортирања',
 'pageinfo-length' => 'Дужина странице (у бајтовима)',
 'pageinfo-article-id' => 'ИД странице',
+'pageinfo-language' => 'Језик садржаја странице',
 'pageinfo-robot-policy' => 'Статус претраживача',
 'pageinfo-robot-index' => 'Може да се попише',
 'pageinfo-robot-noindex' => 'Не може да се попише',
@@ -4182,6 +4184,7 @@ $5
 'version-license' => 'Лиценца',
 'version-poweredby-credits' => "Овај вики покреће '''[//www.mediawiki.org/ Медијавики]''', ауторска права © 2001-$1 $2.",
 'version-poweredby-others' => 'остали',
+'version-credits-summary' => 'Желели бисмо да захвалимо следећим људима на њиховом доприносу [[Special:Version|Медијавикији]].',
 'version-license-info' => 'Медијавики је слободан софтвер; можете га расподељивати и мењати под условима ГНУ-ове опште јавне лиценце (ОЈЛ) коју је објавила Задужбина за слободан софтвер, било да је у питању друго или новије издање лиценце.
 
 Медијавики се нуди у нади да ће бити од користи, али БЕЗ ИКАКВЕ ГАРАНЦИЈЕ; чак и без подразумеване гаранције о ПРОДАЈНОЈ ВРЕДНОСТИ или ПОГОДНОСТИ ЗА ОДРЕЂЕНЕ НАМЕНЕ. Погледајте ГНУ-ову општу јавну лиценцу за више информација.
index 9f5c83c..9bd7e25 100644 (file)
@@ -164,7 +164,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__FORSIRANISADRŽAJ__', '__FORSIRANI_SADRŽAJ__', '__PRIMORANISADRŽAJ__', '__PRIMORANI_SADRŽAJ__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__SADRŽAJ__', '__TOC__' ),
        'noeditsection'             => array( '0', '__BEZIZMENA__', '__BEZ_IZMENA__', '__BEZIZMJENA__', '__BEZ_IZMJENA__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__BEZZAGLAVLJA__', '__BEZ_ZAGLAVLJA__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'TRENUTNIMESEC', 'TRENUTNI_MESEC', 'TEKUĆIMESEC', 'TEKUĆI_MESEC', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'TRENUTNIMESEC1', 'TRENUTNI_MESEC1', 'TEKUĆIMESEC1', 'TEKUĆI_MESEC1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'TRENUTNIMESECIME', 'IMETEKUĆEGMESECA', 'IME_TEKUĆEG_MESECA', 'CURRENTMONTHNAME' ),
@@ -352,7 +351,7 @@ $messages = array(
 
 'underline-always' => 'uvek podvlači',
 'underline-never' => 'nikad ne podvlači',
-'underline-default' => 'po postavkama pregledača',
+'underline-default' => 'prema temi ili pregledaču',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Izgled fonta u uređivačkom okviru:',
@@ -1637,6 +1636,9 @@ Ako izaberete da ga unesete, ono će biti korišćeno za pripisivanje vašeg rad
 'rightslogtext' => 'Ovo je dnevnik izmena korisničkih prava.',
 'rightslogentry' => '{{GENDER:|je promenio|je promenila|je promenio}} prava za člana $1 iz $2 u $3',
 'rightslogentry-autopromote' => 'je unapređen iz $2 u $3',
+'logentry-rights-rights' => '$1 {{GENDER:$1|je promenio|je promenila|je promenio}} članstvo grupe za $3 iz $4 u $5',
+'logentry-rights-rights-legacy' => '$1 {{GENDER:$1|je promenio|je promenila|je promenio}} članstvo grupe za $3',
+'logentry-rights-autopromote' => '$1 je automatski {{GENDER:$1|unapređen|unapređena|unapređen}} iz $4 u $5',
 'rightsnone' => '(ništa)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -2284,7 +2286,7 @@ Pogledajte i [[Special:WantedCategories|tražene kategorije]].',
 'linksearch-ok' => 'Pretraži',
 'linksearch-text' => 'Mogu se koristiti džokeri poput „*.wikipedia.org“.<br />
 Potreban je najviši domen, kao „*.org“.<br />
-Podržani protokoli: <code>$1</code> (ne stavljajte u pretragu)',
+Podržani protokoli: <code>$1</code> (zadaje http:// ako ne navedete protokol).',
 'linksearch-line' => '$1 veza u $2',
 'linksearch-error' => 'Džokeri se mogu pojaviti samo na početku adrese.',
 
@@ -2335,8 +2337,8 @@ Pogledajte [[{{MediaWiki:Listgrouprights-helppage}}|više detalja]] o pojedinač
 'emailuser-title-target' => 'Slanje e-poruke {{GENDER:$1|korisniku|korisnici|korisniku}}',
 'emailuser-title-notarget' => 'Slanje e-poruke korisniku',
 'emailpage' => 'Slanje e-poruka',
-'emailpagetext' => 'Koristite ovaj obrazac da pošaljete e-poruku ovom korisniku.
-E-adresa koju ste uneli u [[Special:Preferences|podešavanjima]] će biti prikazana kao adresa pošiljaoca, tako da će primalac poruke moći da vam odgovori.',
+'emailpagetext' => 'Možete da koristite donji obrazac da pošaljete e-poruku {{GENDER:$1|ovom korisniku|ovoj korisnici|ovom korisniku|}}.
+E-adresa koju ste uneli u vašim [[Special:Preferences|podešavanjima]] će se prikazati u polju „Od“, tako da će primalac moći da vam odgovori direktno.',
 'usermailererror' => 'Došlo je do greške pri slanju poruke:',
 'defemailsubject' => '{{SITENAME}} e-adresa {{GENDER:$1|korisnika|korisnice|korisnika}} $1',
 'usermaildisabled' => 'Korisnička e-pošta je onemogućena',
@@ -2675,7 +2677,7 @@ Izveštaj o blokiranim korisnicima se nalazi ispod:',
 'whatlinkshere-hideredirs' => '$1 preusmerenja',
 'whatlinkshere-hidetrans' => '$1 uključivanja',
 'whatlinkshere-hidelinks' => '$1 veze',
-'whatlinkshere-hideimages' => '$1 veze do slika',
+'whatlinkshere-hideimages' => '$1 veze do datoteke',
 'whatlinkshere-filters' => 'Filteri',
 
 # Block/unblock
@@ -3182,7 +3184,7 @@ Ovo je verovatno izazvano vezom do spoljašnjeg sajta koji se nalazi na crnoj li
 
 # Info page
 'pageinfo-title' => 'Podaci o „$1“',
-'pageinfo-not-current' => 'Podaci mogu biti prikazani samo za tekuću izmenu.',
+'pageinfo-not-current' => 'Nažalost, nemoguće je pribaviti ove podatke za starije izmene.',
 'pageinfo-header-basic' => 'Osnovni podaci',
 'pageinfo-header-edits' => 'Istorija izmena',
 'pageinfo-header-restrictions' => 'Zaštita stranice',
@@ -3191,6 +3193,7 @@ Ovo je verovatno izazvano vezom do spoljašnjeg sajta koji se nalazi na crnoj li
 'pageinfo-default-sort' => 'Podrazumevani ključ sortiranja',
 'pageinfo-length' => 'Dužina stranice (u bajtovima)',
 'pageinfo-article-id' => 'ID stranice',
+'pageinfo-language' => 'Jezik sadržaja stranice',
 'pageinfo-robot-policy' => 'Status pretraživača',
 'pageinfo-robot-index' => 'Može da se popiše',
 'pageinfo-robot-noindex' => 'Ne može da se popiše',
@@ -4091,6 +4094,7 @@ Možete da [[Special:EditWatchlist|koristite i običan uređivač]].',
 'version-license' => 'Licenca',
 'version-poweredby-credits' => "Ovaj viki pokreće '''[//www.mediawiki.org/ Medijaviki]''', autorska prava © 2001-$1 $2.",
 'version-poweredby-others' => 'ostali',
+'version-credits-summary' => 'Želeli bismo da zahvalimo sledećim ljudima na njihovom doprinosu [[Special:Version|Medijavikiji]].',
 'version-license-info' => 'Medijaviki je slobodan softver; možete ga raspodeljivati i menjati pod uslovima GNU-ove opšte javne licence (OJL) koju je objavila Zadužbina za slobodan softver, bilo da je u pitanju drugo ili novije izdanje licence.
 
 Medijaviki se nudi u nadi da će biti od koristi, ali BEZ IKAKVE GARANCIJE; čak i bez podrazumevane garancije o PRODAJNOJ VREDNOSTI ili POGODNOSTI ZA ODREĐENE NAMENE. Pogledajte GNU-ovu opštu javnu licencu za više informacija.
index 3bebf45..f330092 100644 (file)
@@ -9,6 +9,7 @@
  *
  * @author Ainali
  * @author Boivie
+ * @author Cybjit
  * @author Dafer45
  * @author Diupwijk
  * @author EPO
@@ -181,7 +182,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__ALLTIDINNEHÅLLSFÖRTECKNING__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__INNEHÅLLSFÖRTECKNING__', '__TOC__' ),
        'noeditsection'             => array( '0', '__INTEREDIGERASEKTION__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__INGENRUBRIK__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'NUVARANDEMÅNAD', 'NUMÅNAD', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'NUVARANDEMÅNAD1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'NUVARANDEMÅNADSNAMN', 'NUMÅNADSNAMN', 'CURRENTMONTHNAME' ),
@@ -2292,7 +2292,7 @@ Det kan finnas [[{{MediaWiki:Listgrouprights-helppage}}|ytterligare information]
 'emailuser-title-target' => 'Skicka e-post till denna {{GENDER:$1|användare}}',
 'emailuser-title-notarget' => 'E-postanvändare',
 'emailpage' => 'Skicka e-post till användare',
-'emailpagetext' => 'Du kan använda det här formuläret för att skicka e-post till den här användaren.
+'emailpagetext' => 'Du kan använda formuläret nedan för att skicka e-post till den här {{GENDER:$1|användaren}}.
 Den e-postadress du har angivit i [[Special:Preferences|dina användarinställningar]] kommer att visas som "Från"-adress i meddelandet, så att mottagaren har möjlighet att svara direkt till dig.',
 'usermailererror' => 'Fel i hanteringen av mail:',
 'defemailsubject' => '{{SITENAME}} e-post från användare "$1"',
@@ -3117,7 +3117,7 @@ Detta orsakades troligen av en länk till en svartlistad webbplats.',
 
 # Info page
 'pageinfo-title' => 'Information om "$1"',
-'pageinfo-not-current' => 'Information kan endast visas för den aktuella versionen.',
+'pageinfo-not-current' => 'Informationen kan endast visas för den aktuella versionen.',
 'pageinfo-header-basic' => 'Grundläggande information',
 'pageinfo-header-edits' => 'Redigeringshistorik',
 'pageinfo-header-restrictions' => 'Sidskydd',
index e9e148b..0314e0d 100644 (file)
@@ -50,16 +50,20 @@ $namespaceAliases = array(
 );
 
 $specialPageAliases = array(
+       'Activeusers'               => array( 'ผู้ใช้ที่มีความเคลื่อนไหว' ),
        'Allmessages'               => array( 'ข้อความทั้งหมด' ),
        'Allpages'                  => array( 'หน้าทั้งหมด' ),
        'Ancientpages'              => array( 'บทความที่ไม่ได้แก้ไขนานที่สุด' ),
+       'Badtitle'                  => array( 'ชื่อเรื่องไม่เหมาะสม' ),
        'Blankpage'                 => array( 'หน้าว่าง' ),
        'Block'                     => array( 'บล็อกไอพี' ),
        'Blockme'                   => array( 'บล็อกฉัน' ),
        'Booksources'               => array( 'แหล่งหนังสือ' ),
        'BrokenRedirects'           => array( 'เปลี่ยนทางเสีย' ),
        'Categories'                => array( 'หมวดหมู่' ),
-       'ChangePassword'            => array( 'ตั้งรหัสผ่านใหม่' ),
+       'ChangeEmail'               => array( 'เปลี่ยนอีเมล' ),
+       'ChangePassword'            => array( 'เปลี่ยนรหัสผ่าน' ),
+       'ComparePages'              => array( 'เปรียบเทียบหน้า' ),
        'Confirmemail'              => array( 'ยืนยันอีเมล' ),
        'Contributions'             => array( 'เรื่องที่เขียน' ),
        'CreateAccount'             => array( 'สร้างบัญชีผู้ใช้ใหม่' ),
@@ -67,6 +71,7 @@ $specialPageAliases = array(
        'DeletedContributions'      => array( 'การแก้ไขที่ถูกลบ' ),
        'Disambiguations'           => array( 'แก้ความกำกวม' ),
        'DoubleRedirects'           => array( 'เปลี่ยนทางซ้ำซ้อน' ),
+       'EditWatchlist'             => array( 'แก้ไขรายการเฝ้าดู' ),
        'Emailuser'                 => array( 'อีเมลผู้ใช้' ),
        'Export'                    => array( 'ส่งออก' ),
        'Fewestrevisions'           => array( 'บทความที่ถูกแก้ไขน้อยที่สุด' ),
@@ -74,6 +79,7 @@ $specialPageAliases = array(
        'Filepath'                  => array( 'พาธของไฟล์', 'ตำแหน่งไฟล์' ),
        'Import'                    => array( 'นำเข้า' ),
        'Invalidateemail'           => array( 'ยกเลิกการยืนยันทางอีเมล' ),
+       'JavaScriptTest'            => array( 'ทดสอบจาวาสคริปต์' ),
        'BlockList'                 => array( 'รายชื่อผู้ใช้ที่ถูกบล็อก', 'รายการบล็อก', 'รายชื่อไอพีที่ถูกบล็อก' ),
        'LinkSearch'                => array( 'ค้นหาเว็บลิงก์' ),
        'Listadmins'                => array( 'รายชื่อผู้ดูแล' ),
@@ -98,8 +104,11 @@ $specialPageAliases = array(
        'Mycontributions'           => array( 'เรื่องที่ฉันเขียน' ),
        'Mypage'                    => array( 'หน้าของฉัน' ),
        'Mytalk'                    => array( 'หน้าพูดคุยของฉัน' ),
+       'Myuploads'                 => array( 'ไฟล์ที่อัปโหลดของฉัน' ),
        'Newimages'                 => array( 'ภาพใหม่' ),
        'Newpages'                  => array( 'หน้าใหม่' ),
+       'PasswordReset'             => array( 'ตั้งรหัสผ่านใหม่' ),
+       'PermanentLink'             => array( 'ลิงก์ถาวร' ),
        'Popularpages'              => array( 'หน้าที่ได้รับความนิยม' ),
        'Preferences'               => array( 'การตั้งค่า', 'ตั้งค่า' ),
        'Prefixindex'               => array( 'ดัชนีตามคำขึ้นต้น' ),
@@ -109,11 +118,13 @@ $specialPageAliases = array(
        'Randomredirect'            => array( 'สุ่มหน้าเปลี่ยนทาง' ),
        'Recentchanges'             => array( 'ปรับปรุงล่าสุด' ),
        'Recentchangeslinked'       => array( 'การปรับปรุงที่โยงมา' ),
+       'Revisiondelete'            => array( 'ลบรุ่นการแก้ไข' ),
        'Search'                    => array( 'ค้นหา' ),
        'Shortpages'                => array( 'หน้าที่สั้นที่สุด' ),
        'Specialpages'              => array( 'หน้าพิเศษ' ),
        'Statistics'                => array( 'สถิติ' ),
        'Tags'                      => array( 'ป้ายกำกับ' ),
+       'Unblock'                   => array( 'เลิกบล็อก' ),
        'Uncategorizedcategories'   => array( 'หมวดหมู่ที่ไม่ได้จัดหมวดหมู่' ),
        'Uncategorizedimages'       => array( 'ภาพที่ไม่ได้จัดหมวดหมู่' ),
        'Uncategorizedpages'        => array( 'หน้าที่ไม่ได้จัดหมวดหมู่' ),
@@ -128,7 +139,7 @@ $specialPageAliases = array(
        'Userlogin'                 => array( 'ล็อกอิน' ),
        'Userlogout'                => array( 'ล็อกเอาต์' ),
        'Userrights'                => array( 'สิทธิผู้ใช้' ),
-       'Version'                   => array( 'เวอร์ชั่น' ),
+       'Version'                   => array( 'à¹\80วอรà¹\8cà¸\8aัà¸\99', 'à¹\80วอรà¹\8cà¸\8aัà¹\88à¸\99' ),
        'Wantedcategories'          => array( 'หมวดหมู่ที่ต้องการ' ),
        'Wantedfiles'               => array( 'ไฟล์ที่ต้องการ' ),
        'Wantedpages'               => array( 'หน้าที่ต้องการ', 'การเชื่อมโยงเสีย' ),
index f4d5e20..45104e7 100644 (file)
@@ -114,7 +114,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Mga_huling_binago', 'HulingBinago' ),
        'Recentchangeslinked'       => array( 'Nakakawing_ng_kamakailang_pagbabago', 'Kaugnay_na_mga_pagbabago' ),
        'Revisiondelete'            => array( 'Pagbura_ng_pagbabago' ),
-       'RevisionMove'              => array( 'Paglipat_ng_Rebisyon' ),
        'Search'                    => array( 'Maghanap' ),
        'Shortpages'                => array( 'Maikling_mga_pahina' ),
        'Specialpages'              => array( 'Natatanging_mga_pahina' ),
index 89c3827..c405f16 100644 (file)
@@ -71,7 +71,6 @@ $magicWords = array(
        'notoc'                     => array( '0', '__БЕМЫНДӘРИҸОТ__', '__NOTOC__' ),
        'forcetoc'                  => array( '0', '__МӘҸБУРИЈӘ_МЫНДӘРИҸОТ__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__МЫНДӘРИҸОТ__', '__TOC__' ),
-       'noheader'                  => array( '0', '__БЕСӘРЛОВҺӘ__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'ЕСӘТНӘ_МАНГ', 'ЕСӘТНӘ_МАНГ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'ЕСӘТНӘ_МАНГ_1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'ЕСӘТНӘ_МАНГИ_НОМ', 'CURRENTMONTHNAME' ),
index 9939136..143affb 100644 (file)
@@ -56,7 +56,7 @@
  */
 
 $namespaceNames = array(
-       NS_MEDIA            => 'Medya',
+       NS_MEDIA            => 'Ortam',
        NS_SPECIAL          => 'Özel',
        NS_TALK             => 'Tartışma',
        NS_USER             => 'Kullanıcı',
@@ -75,9 +75,10 @@ $namespaceNames = array(
 );
 
 $namespaceAliases = array(
-       'Resim' => NS_FILE,
-       'Resim_tartışma' => NS_FILE_TALK,
-       'MedyaViki' => NS_MEDIAWIKI,
+       'Medya'              => NS_MEDIA,
+       'Resim'              => NS_FILE,
+       'Resim_tartışma'     => NS_FILE_TALK,
+       'MedyaViki'          => NS_MEDIAWIKI,
        'MedyaViki_tartışma' => NS_MEDIAWIKI_TALK,
 );
 
@@ -93,7 +94,8 @@ $specialPageAliases = array(
        'Booksources'               => array( 'KitapKaynakları' ),
        'BrokenRedirects'           => array( 'BozukYönlendirmeler' ),
        'Categories'                => array( 'Kategoriler', 'Ulamlar' ),
-       'ChangePassword'            => array( 'ŞifreDeğiştir', 'ParolaDeğiştir', 'ŞifreSıfırla', 'ParolaSıfırla' ),
+       'ChangeEmail'               => array( 'E-postaDeğiştir' ),
+       'ChangePassword'            => array( 'ParolaDeğiştir', 'ParolaSıfırla' ),
        'ComparePages'              => array( 'SayfaKarşılaştır' ),
        'Confirmemail'              => array( 'E-postaDoğrula' ),
        'Contributions'             => array( 'Katkılar' ),
@@ -110,6 +112,7 @@ $specialPageAliases = array(
        'Filepath'                  => array( 'DosyaYolu', 'DosyaKonumu' ),
        'Import'                    => array( 'İçeAktar', 'İçeriAktar' ),
        'Invalidateemail'           => array( 'E-postaDoğrulamaİptal' ),
+       'JavaScriptTest'            => array( 'JavaScriptTesti' ),
        'BlockList'                 => array( 'EngelListesi', 'IPEngelListesi', 'EngelListele' ),
        'LinkSearch'                => array( 'BağArama', 'BağlantıArama' ),
        'Listadmins'                => array( 'HizmetliListele', 'YöneticiListele', 'HizmetliListesi', 'YöneticiListesi' ),
@@ -126,6 +129,7 @@ $specialPageAliases = array(
        'MIMEsearch'                => array( 'MIMEArama' ),
        'Mostcategories'            => array( 'EnFazlaKategorili' ),
        'Mostimages'                => array( 'EnÇokBağlantıVerilenDosyalar' ),
+       'Mostinterwikis'            => array( 'EnFazlaİnterviki' ),
        'Mostlinked'                => array( 'EnÇokBağlantıVerilenSayfalar' ),
        'Mostlinkedcategories'      => array( 'EnÇokBağlantıVerilenKategoriler' ),
        'Mostlinkedtemplates'       => array( 'EnÇokBağlantıVerilenŞablonlar' ),
@@ -149,7 +153,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'SonDeğişiklikler' ),
        'Recentchangeslinked'       => array( 'İlgiliDeğişiklikler' ),
        'Revisiondelete'            => array( 'RevizyonSil' ),
-       'RevisionMove'              => array( 'RevizyonTaşı' ),
        'Search'                    => array( 'Ara', 'Arama' ),
        'Shortpages'                => array( 'KısaSayfalar' ),
        'Specialpages'              => array( 'ÖzelSayfalar' ),
@@ -167,10 +170,11 @@ $specialPageAliases = array(
        'Unusedtemplates'           => array( 'KullanılmayanŞablonlar' ),
        'Unwatchedpages'            => array( 'İzlenmeyenSayfalar' ),
        'Upload'                    => array( 'Yükle' ),
+       'UploadStash'               => array( 'ZulaYükle', 'ZulaYükleme' ),
        'Userlogin'                 => array( 'KullanıcıOturumuAçma', 'KullanıcıGiriş' ),
        'Userlogout'                => array( 'KullanıcıOturumuKapatma', 'KullanıcıÇıkış' ),
        'Userrights'                => array( 'KullanıcıHakları' ),
-       'Version'                   => array( 'Sürüm' ),
+       'Version'                   => array( 'Sürüm', 'Versiyon' ),
        'Wantedcategories'          => array( 'İstenenKategoriler' ),
        'Wantedfiles'               => array( 'İstenenDosyalar' ),
        'Wantedpages'               => array( 'İstenenSayfalar' ),
@@ -187,11 +191,10 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__İÇİNDEKİLERZORUNLU__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__İÇİNDEKİLER__', '__TOC__' ),
        'noeditsection'             => array( '0', '__DEĞİŞTİRYOK__', '__DÜZENLEMEYOK__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__BAŞLIKYOK__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'MEVCUTAY', 'MEVCUTAY2', 'GÜNCELAY', 'GÜNCELAY2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'MEVCUTAY1', 'GÜNCELAY1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'MEVCUTAYADI', 'GÜNCELAYADI', 'CURRENTMONTHNAME' ),
-       'currentmonthnamegen'       => array( '1', 'MEVCUTAYADIİYELİK', 'CURRENTMONTHNAMEGEN' ),
+       'currentmonthnamegen'       => array( '1', 'MEVCUTAYADIİYELİK', 'GÜNCELAYADIİYELİK', 'CURRENTMONTHNAMEGEN' ),
        'currentmonthabbrev'        => array( '1', 'MEVCUTAYKISALTMASI', 'GÜNCELAYKISALTMASI', 'CURRENTMONTHABBREV' ),
        'currentday'                => array( '1', 'MEVCUTGÜN', 'GÜNCELGÜN', 'CURRENTDAY' ),
        'currentday2'               => array( '1', 'MEVCUTGÜN2', 'GÜNCELGÜN2', 'CURRENTDAY2' ),
@@ -221,6 +224,7 @@ $magicWords = array(
        'pagenamee'                 => array( '1', 'SAYFAADIU', 'PAGENAMEE' ),
        'namespace'                 => array( '1', 'ADALANI', 'İSİMALANI', 'NAMESPACE' ),
        'namespacee'                => array( '1', 'ADALANIU', 'İSİMALANIU', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', 'ADALANINUMARASI', 'NAMESPACENUMBER' ),
        'talkspace'                 => array( '1', 'TARTIŞMAALANI', 'TARTIŞMABOŞLUĞU', 'TALKSPACE' ),
        'talkspacee'                => array( '1', 'TARTIŞMAALANIU', 'TARTIŞMABOŞLUĞUU', 'TALKSPACEE' ),
        'subjectspace'              => array( '1', 'KONUALANI', 'MADDEALANI', 'KONUBOŞLUĞU', 'MADDEBOŞLUĞU', 'SUBJECTSPACE', 'ARTICLESPACE' ),
@@ -236,9 +240,9 @@ $magicWords = array(
        'subjectpagename'           => array( '1', 'KONUSAYFASIADI', 'MADDESAYFASIADI', 'SUBJECTPAGENAME', 'ARTICLEPAGENAME' ),
        'subjectpagenamee'          => array( '1', 'KONUSAYFASIADIU', 'MADDESAYFASIADIU', 'SUBJECTPAGENAMEE', 'ARTICLEPAGENAMEE' ),
        'msg'                       => array( '0', 'MSJ:', 'İLT:', 'MSG:' ),
-       'subst'                     => array( '0', 'KOPYALA:', 'AKTAR:', 'SUBST:' ),
-       'safesubst'                 => array( '0', 'GÜVENLİAKTAR:', 'SAFESUBST:' ),
-       'msgnw'                     => array( '0', 'MSJNW:', 'MSGNW:' ),
+       'subst'                     => array( '0', 'YK:', 'YERİNEKOY:', 'KOPYALA:', 'AKTAR:', 'YAPIŞTIR:', 'SUBST:' ),
+       'safesubst'                 => array( '0', 'GÜVENLİYERİNEKOY:', 'GÜVENLİKOPYALA:', 'GÜVENLİAKTAR:', 'GÜVENLİYAPIŞTIR:', 'SAFESUBST:' ),
+       'msgnw'                     => array( '0', 'MSJYN:', 'İLTYN:', 'MSGNW:' ),
        'img_thumbnail'             => array( '1', 'küçükresim', 'küçük', 'thumbnail', 'thumb' ),
        'img_manualthumb'           => array( '1', 'küçükresim=$1', 'küçük=$1', 'thumbnail=$1', 'thumb=$1' ),
        'img_right'                 => array( '1', 'sağ', 'right' ),
@@ -260,18 +264,20 @@ $magicWords = array(
        'img_bottom'                => array( '1', 'taban', 'bottom' ),
        'img_text_bottom'           => array( '1', 'metin-taban', 'text-bottom' ),
        'img_link'                  => array( '1', 'bağlantı=$1', 'link=$1' ),
+       'img_class'                 => array( '1', 'sınıf=$1', 'class=$1' ),
        'int'                       => array( '0', 'İNT:', 'INT:' ),
        'sitename'                  => array( '1', 'SİTEADI', 'SITENAME' ),
        'ns'                        => array( '0', 'AA:', 'AB:', 'NS:' ),
        'nse'                       => array( '0', 'AAU:', 'ABU:', 'NSE:' ),
        'localurl'                  => array( '0', 'YERELURL:', 'LOCALURL:' ),
        'localurle'                 => array( '0', 'YERELURLU:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', 'MADDEYOLU', 'ARTICLEPATH' ),
        'pageid'                    => array( '0', 'SAYFANO', 'PAGEID' ),
        'server'                    => array( '0', 'SUNUCU', 'SERVER' ),
        'servername'                => array( '0', 'SUNUCUADI', 'SERVERNAME' ),
        'scriptpath'                => array( '0', 'BETİKYOLU', 'SCRIPTPATH' ),
        'stylepath'                 => array( '0', 'BİÇEMYOLU', 'STYLEPATH' ),
-       'grammar'                   => array( '0', 'GRAMER:', 'GRAMMAR:' ),
+       'grammar'                   => array( '0', 'DİLBİLGİSİ:', 'GRAMER:', 'GRAMMAR:' ),
        'gender'                    => array( '0', 'CİNSİYET:', 'GENDER:' ),
        'notitleconvert'            => array( '0', '__BAŞLIKDÖNÜŞÜMÜYOK__', '__BDY__', '__NOTITLECONVERT__', '__NOTC__' ),
        'nocontentconvert'          => array( '0', '__İÇERİKDÖNÜŞÜMÜYOK__', '__İDY__', '__NOCONTENTCONVERT__', '__NOCC__' ),
@@ -283,13 +289,15 @@ $magicWords = array(
        'revisionday'               => array( '1', 'SÜRÜMGÜNÜ', 'REVISIONDAY' ),
        'revisionday2'              => array( '1', 'SÜRÜMGÜNÜ2', 'REVISIONDAY2' ),
        'revisionmonth'             => array( '1', 'SÜRÜMAYI', 'REVISIONMONTH' ),
+       'revisionmonth1'            => array( '1', 'SÜRÜMAYI1', 'REVISIONMONTH1' ),
        'revisionyear'              => array( '1', 'SÜRÜMYILI', 'REVISIONYEAR' ),
        'revisiontimestamp'         => array( '1', 'SÜRÜMZAMANBİLGİSİ', 'REVISIONTIMESTAMP' ),
        'revisionuser'              => array( '1', 'SÜRÜMKULLANICI', 'REVISIONUSER' ),
        'plural'                    => array( '0', 'ÇOĞUL:', 'PLURAL:' ),
        'fullurl'                   => array( '0', 'TAMURL:', 'FULLURL:' ),
        'fullurle'                  => array( '0', 'TAMURLU:', 'FULLURLE:' ),
-       'canonicalurl'              => array( '0', 'KANONİKURL', 'CANONICALURL:' ),
+       'canonicalurl'              => array( '0', 'KURALLIURL:', 'CANONICALURL:' ),
+       'canonicalurle'             => array( '0', 'KURALLIURLU:', 'CANONICALURLE:' ),
        'lcfirst'                   => array( '0', 'KHİLK:', 'LCFIRST:' ),
        'ucfirst'                   => array( '0', 'BHİLK:', 'UCFIRST:' ),
        'lc'                        => array( '0', 'KH:', 'LC:' ),
@@ -299,15 +307,22 @@ $magicWords = array(
        'newsectionlink'            => array( '1', '__YENİBAŞLIKBAĞLANTISI__', '__NEWSECTIONLINK__' ),
        'nonewsectionlink'          => array( '1', '__YENİBAŞLIKBAĞLANTISIYOK__', '__NONEWSECTIONLINK__' ),
        'currentversion'            => array( '1', 'MEVCUTSÜRÜM', 'GÜNCELSÜRÜM', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'URLKODLAMA:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', 'ÇENGELKODLAMA:', 'ANCHORENCODE' ),
        'currenttimestamp'          => array( '1', 'MEVCUTZAMANBİLGİSİ', 'GÜNCELZAMANBİLGİSİ', 'CURRENTTIMESTAMP' ),
        'localtimestamp'            => array( '1', 'YERELZAMANBİLGİSİ', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', 'YÖNİŞARETİ:', 'DIRECTIONMARK', 'DIRMARK' ),
        'language'                  => array( '0', '#DİL:', '#LİSAN:', '#LANGUAGE:' ),
        'contentlanguage'           => array( '1', 'İÇERİKDİLİ', 'İÇERİKLİSANI', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
        'pagesinnamespace'          => array( '1', 'İSİMALANINDAKİSAYFALAR', 'İADAKİSAYFALAR', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
        'numberofadmins'            => array( '1', 'HİZMETLİSAYISI', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', 'BİÇİMNUM', 'FORMATNUM' ),
+       'padleft'                   => array( '0', 'DOLSOL', 'PADLEFT' ),
+       'padright'                  => array( '0', 'DOLSAĞ', 'PADRIGHT' ),
        'special'                   => array( '0', 'özel', 'special' ),
+       'speciale'                  => array( '0', 'özelu', 'speciale' ),
        'defaultsort'               => array( '1', 'VARSAYILANSIRALA:', 'VARSAYILANSIRALAMAANAHTARI:', 'VARSAYILANKATEGORİSIRALA:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
-       'filepath'                  => array( '0', 'DOSYA_YOLU:', 'FILEPATH:' ),
+       'filepath'                  => array( '0', 'DOSYAYOLU:', 'DOSYA_YOLU:', 'FILEPATH:' ),
        'tag'                       => array( '0', 'etiket', 'tag' ),
        'hiddencat'                 => array( '1', '__GİZLİKAT__', '__GİZLİKATEGORİ__', '__HIDDENCAT__' ),
        'pagesincategory'           => array( '1', 'KATEGORİDEKİSAYFALAR', 'KATTAKİSAYFALAR', 'PAGESINCATEGORY', 'PAGESINCAT' ),
@@ -317,8 +332,15 @@ $magicWords = array(
        'numberingroup'             => array( '1', 'GRUPTAKİSAYI', 'GRUBUNSAYISI', 'NUMBERINGROUP', 'NUMINGROUP' ),
        'staticredirect'            => array( '1', '__STATİKYÖNLENDİRME__', '__SABİTYÖNLENDİRME__', '__STATICREDIRECT__' ),
        'protectionlevel'           => array( '1', 'KORUMASEVİYESİ', 'PROTECTIONLEVEL' ),
-       'formatdate'                => array( '0', 'formattarihi', 'tarihformatı', 'formatdate', 'dateformat' ),
+       'formatdate'                => array( '0', 'biçimtarih', 'tarihbiçimi', 'formattarihi', 'tarihformatı', 'formatdate', 'dateformat' ),
+       'url_path'                  => array( '0', 'YOL', 'PATH' ),
        'url_wiki'                  => array( '0', 'VİKİ', 'WIKI' ),
+       'url_query'                 => array( '0', 'SORGU', 'QUERY' ),
+       'defaultsort_noerror'       => array( '0', 'hatayok', 'hatasız', 'noerror' ),
+       'pagesincategory_all'       => array( '0', 'tüm', 'all' ),
+       'pagesincategory_pages'     => array( '0', 'sayfalar', 'pages' ),
+       'pagesincategory_subcats'   => array( '0', 'altkategoriler', 'subcats' ),
+       'pagesincategory_files'     => array( '0', 'dosyalar', 'files' ),
 );
 
 $separatorTransformTable = array( ',' => '.', '.' => ',' );
@@ -977,9 +999,8 @@ Buraya yanlışlıkla geldiyseniz tarayıcınızın '''geri''' tuşuna tıklayı
 Bu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]],
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları arayabilir],
 ya da bu sayfayı [{{fullurl:{{FULLPAGENAME}}|action=edit}} değiştirebilirsiniz]</span>.',
-'noarticletext-nopermission' => 'Bu sayfa şu anda boştur.
-Bu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]]
-ya da <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları tarayabilirsiniz].</span>',
+'noarticletext-nopermission' => 'Bu sayfa şu anda boştur. 
+Bu başlığı [[Special:Search/{{PAGENAME}}|diğer sayfalarda arayabilir]] ya da <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ilgili kayıtları tarayabilirsiniz].</span>',
 'userpage-userdoesnotexist' => '"<nowiki>$1</nowiki>" kullanıcı hesabı kayıtlı değil. Bu sayfayı oluşturmak/değiştirmek istiyorsanız lütfen kontrol edin.',
 'userpage-userdoesnotexist-view' => '"$1" kullanıcı hesabı kayıtlı değil.',
 'blocked-notice-logextract' => 'Bu kullanıcı şuanda engellenmiş.
@@ -3277,6 +3298,7 @@ Diğerleri varsayılan olarak gizlenecektir.
 'exif-objectname' => 'Kısa başlık',
 'exif-specialinstructions' => 'Özel talimatlar',
 'exif-headline' => 'Başlık',
+'exif-credit' => 'Sağlayıcı',
 'exif-source' => 'Kaynak',
 'exif-urgency' => 'Aciliyet',
 'exif-fixtureidentifier' => 'Fikstür adı',
index 7d6ce8c..db77b87 100644 (file)
@@ -316,12 +316,13 @@ $messages = array(
 'databaseerror' => 'Медээ шыгжамыры алдаг',
 'laggedslavemode' => "'''Оваарымчалыг:''' Бо арында чаартыышкыннар чок болуп болур.",
 'readonly' => 'шоочалаарынга медээ шыгжамыры',
-'missing-article' => 'Ð\9cедÑ\8dÑ\8d Ñ\87Ñ\8bÑ\8bндÑ\8bзÑ\8b did not find the Ð°Ñ\80Ñ\8bннÑ\8bÒ£ Ñ\81өзүглели that it should have found, named "$1" $2.
+'missing-article' => 'Ð\94аннÑ\8bйлаÑ\80 Ð±Ð°Ð·Ð°Ð·Ñ\8bнда Ñ\82Ñ\8bваÑ\80 Ñ\83жÑ\83Ñ\80лÑ\83г Â«$1» $2 Ð´ÐµÐ¿ Ð°Ñ\80Ñ\8bннÑ\8bÒ£ Ð½ÐµÐ³ÐµÑ\82Ñ\82инип Ñ\82Ñ\83Ñ\80аÑ\80 Ñ\81өзүглели Ñ\82Ñ\8bвÑ\8bлбаан.
 
-This is usually caused by following an outdated diff or history link to a page that has been deleted.
+Нургулайында ындыг байдал эрги шөлүлге-биле казыттынган арынның өскерилге төөгүзүнче дамчып оралдажырга тыптыр.
 
-If this is not the case, you may have found a bug in the software.
-Please report this to an [[Special:ListUsers/sysop|administrator]], making note of the URL.',
+А шынында ындыг эвес болза, Силер программа хандырылгазының алдаанга душканыңар хөңнү.
+
+Ооң дугайында кайы-бир [[Special:ListUsers/sysop|удуртукчуларга]], мүн URL-ин айытпышаан, дамчыдыңарам.',
 'missingarticle-rev' => '(үндүрериниң саны: $1)',
 'missingarticle-diff' => '(Ылгал: $1, $2)',
 'internalerror' => 'Иштики алдаг',
@@ -341,6 +342,7 @@ Do not forget to change your [[Special:Preferences|{{SITENAME}} preferences]].',
 'remembermypassword' => 'Мени бо компьютерде сактып алыры ($1 {{PLURAL:$1|хүн|хүн}}ге чедир)',
 'login' => 'Кирери',
 'nav-login-createaccount' => 'Кирери / бүрүткел бижикти чогаадыры',
+'loginprompt' => '{{SITENAME}} сайтче кирерде, баштай «cookies»-ти чөшпээрээр ужурлуг Силер.',
 'userlogin' => 'Кирери / бүрүткел бижикти чогаадыры',
 'userloginnocreate' => 'Кирери',
 'logout' => 'Үнери',
@@ -457,6 +459,12 @@ Please check if you want to create/edit this page.',
 'moveddeleted-notice' => 'Бо арын ап каавыткан.
 Адаанда ап каавыткан биле өскээр адаан бижиктер шынзылгазын көргүскен.',
 
+# Parser/template warnings
+'post-expand-template-inclusion-warning' => 'Сагындырыг: Кошкан майыктарның ниити хемчээли дендии улуг.
+Чамдык майыктар коштунмаан боор.',
+'post-expand-template-inclusion-category' => 'Кожар майыктарга чөшпээрээн хемчээлин ашкан арыннар',
+'post-expand-template-argument-category' => "Аргументилери салдынмаан майыктарлыг '''арыннар'''",
+
 # History pages
 'viewpagelogs' => 'Бо арынның журналын көргүзери',
 'nohistory' => 'Бо арынның өскерлиишкин төөгүзү чок.',
@@ -514,6 +522,7 @@ Please check if you want to create/edit this page.',
 'lineno' => 'Одуруг $1:',
 'compareselectedversions' => 'Шилип алган хевирлери деңнээри',
 'editundo' => 'чөрчүүрү',
+'diff-multi' => '({{PLURAL:$2|$2 киржикчиниң}} {{PLURAL:$1|$1 түр хевирин көргүспээн}})',
 
 # Search results
 'searchresults' => 'Түңнелдер',
@@ -602,6 +611,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'gender-male' => 'Эр',
 'gender-female' => 'Кыс',
 'email' => 'Э-чагаа',
+'prefs-help-email' => 'Э-шуудаң адрезин айтыры албан эвес, ынчалза-даа, уруңуңар (парольуңар) чиде бээрге, ол херек апаар.',
 'prefs-info' => 'Кол медээлер',
 'prefs-signature' => 'Хол үжүү',
 'prefs-diffs' => 'Ылгалдар',
@@ -670,6 +680,8 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'recentchanges-label-minor' => 'Бо өскерлиишкин бичии-дир',
 'recentchanges-label-bot' => 'Бо эдилгени робот күүсеткен.',
 'recentchanges-label-unpatrolled' => 'Бо өскертилге истетинмээн (патрульдаттынмаан)',
+'rcnote' => "$4 $5 өйде соңгу '''$2''' {{PLURAL:$2|хонуктуң}} {{PLURAL:$1|сөөлгү '''$1''' '''өскерилгелери'''}} .",
+'rcnotefrom' => 'Адаанда <strong>$2</strong> тура (<strong>$1</strong> чедир) өскертилгелерни санаан.',
 'rclistfrom' => '$1 тура чаа өскерилгелерни көргүзер',
 'rcshowhideminor' => 'Бичии өскерлиишкиннерни $1',
 'rcshowhidebots' => 'Роботтарну $1',
@@ -695,6 +707,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'recentchangeslinked-toolbox' => 'Хамааржыр өскерлиишкиннер',
 'recentchangeslinked-title' => '«$1» деп арынга хамаарыштырган өскерлиишкиннер',
 'recentchangeslinked-page' => 'Арынның ады:',
+'recentchangeslinked-to' => 'Айыткан арынче шөлүп турар арыннарга өскерилгелерни көргүзер',
 
 # Upload
 'upload' => 'Файлды салыры',
@@ -745,6 +758,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'filehist-filesize' => 'Файл хемчээли',
 'filehist-comment' => 'Тайылбыр',
 'imagelinks' => 'Файлдың ажыглаашкыны',
+'nolinkstoimage' => 'Бердинген файлче шөлүп турар арыннар чок.',
 
 # File reversion
 'filerevert' => '$1 эгидип тургузары',
@@ -817,6 +831,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'protectedpages' => 'Камгалаган арыннар',
 'listusers' => 'Ажыглакчылар даңзызы',
 'usereditcount' => '$1 {{PLURAL:$1|эдилге}}',
+'usercreated' => '$1 хүнде $2 {{GENDER:$3|бүрүткенип алган}}',
 'newpages' => 'Чаа арыннар',
 'newpages-username' => 'Ажыглакчының ады:',
 'ancientpages' => 'Эң эрги арыннар',
@@ -963,12 +978,14 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'sp-contributions-talk' => 'чугаалажыры',
 'sp-contributions-search' => 'Салыышкыннарын дилээри',
 'sp-contributions-username' => 'ИП-адрес азы ажыглачының ады:',
+'sp-contributions-toponly' => 'Чазалгаларның чүгле сөөлгү хевирлерин көргүзер',
 'sp-contributions-submit' => 'Дилээри',
 
 # What links here
 'whatlinkshere' => 'Шөлүлгелерни бээр',
 'whatlinkshere-title' => '«$1» деп арынга шөлүтген арыннар',
 'whatlinkshere-page' => 'Арын:',
+'linkshere' => "Адаандагы арыннар бээр «'''[[:$1]]'''» шөлүдүп турарлар:",
 'nolinkshere' => "'''[[:$1]]''' деп арынче шөлүтткен арыннар чок.",
 'isredirect' => 'шиглидер арын',
 'istemplate' => 'киирткен арыннар',
@@ -979,7 +996,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'whatlinkshere-hideredirs' => '$1-че шиглиглер',
 'whatlinkshere-hidetrans' => '$1 даңзылааннар',
 'whatlinkshere-hidelinks' => 'холбааларны $1',
-'whatlinkshere-hideimages' => 'ЧÑ\83Ñ\80Ñ\83малдÑ\8bÒ£ Ñ\85олбаалаÑ\80Ñ\8bн $1',
+'whatlinkshere-hideimages' => 'ФайлдÑ\8bÒ£ Ñ\85олбаалаÑ\80Ñ\8b $1',
 'whatlinkshere-filters' => 'Шүүрлер',
 
 # Block/unblock
@@ -1091,6 +1108,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'tooltip-ca-nstab-main' => 'Допчы арынын көөрү',
 'tooltip-ca-nstab-user' => 'Ажыглакчының арынын көөрү',
 'tooltip-ca-nstab-media' => 'Медиа арынын көөрү',
+'tooltip-ca-nstab-special' => 'Бо бөлгээт арын-дыр (служебная страница), ооң эдери болдунмас.',
 'tooltip-ca-nstab-project' => 'Төлевилелдиң арынын көөрү',
 'tooltip-ca-nstab-image' => 'Файлдың арынын көөрү',
 'tooltip-ca-nstab-template' => 'Майыкты көөрү',
@@ -1099,6 +1117,7 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 'tooltip-minoredit' => 'Бо өскертилгени "биче" деп демдеглээр',
 'tooltip-save' => 'Силерниң өскерлиишкиннериңерни шыгжаары',
 'tooltip-preview' => 'Шыгжаар мурнунда силерниң өскерлиишкиннерин чижеглеп көрем!',
+'tooltip-compareselectedversions' => 'Бо арынның шилиттинген ийи хевиринниң ылгалын көөр.',
 'tooltip-watch' => 'Силерниң хайгаарал даңзызынга бо арынны немерелээри',
 'tooltip-rollback' => 'Сөөлгү киржикчиниң өскерилгелерин чаңгыс баскаш, ойталаар',
 'tooltip-summary' => 'Кысказы-биле бижиңер',
@@ -1150,8 +1169,8 @@ It must not be more than $1 {{PLURAL:$1|character|characters}} long.',
 
 # Metadata
 'metadata' => 'Чурумал дугайында медээлер',
-'metadata-fields' => 'ЧÑ\83Ñ\80Ñ\83мал Ð´Ñ\83гайÑ\8bнда Ð¼ÐµÐ´Ñ\8dÑ\8dлеÑ\80 listed in this message will be included on image page display when the metadata table is collapsed.
-Others will be hidden by default.
+'metadata-fields' => 'Ð\91о Ð´Ð°Ò£Ð·Ñ\8bда Ð°Ð¹Ñ\8bÑ\82кан Ñ\87Ñ\83Ñ\80Ñ\83малдаÑ\80 Ð¼ÐµÑ\82аданнÑ\8bйлаÑ\80нÑ\8bÒ£ ÐºÐµÐ·ÐµÐºÑ\82еÑ\80и Ñ\87Ñ\83Ñ\80Ñ\83малдÑ\8bÒ£ Ð°Ñ\80Ñ\8bнÑ\8bнга ÐºÓ©Ñ\81Ñ\82үп ÐºÑ\8dÑ\8dÑ\80, Ð¼ÐµÑ\82аданнÑ\8bйлаÑ\80 Ñ\82аблиÑ\86азÑ\8bн Ð´Ò¯Ñ\80үп ÐºÐ°Ð°Ð½ Ð±Ð¾Ð»Ñ\83Ñ\80
+Арткан кезектер аайлаан ёзугаар чажыт көстүр.
 * make
 * model
 * datetimeoriginal
@@ -1234,6 +1253,9 @@ Others will be hidden by default.
 'watchlisttools-edit' => 'Хайгаарал даңзыны көөрү/эдери',
 'watchlisttools-raw' => 'Чиг хайгаарал даңзыны өскертири',
 
+# Core parser functions
+'duplicate-defaultsort' => 'Кичээнгейлиг! Үндезин сорттаашкын дүлгүүрү «$2» биеэги үндезин сорттаашкын дүлгүүрүн «$1» ажыр тодарадып турар.',
+
 # Special:Version
 'version' => 'Үндүрери',
 'version-specialpages' => 'Тускай арыннар',
index 2c5d34d..e6cf4ff 100644 (file)
@@ -206,7 +206,6 @@ $magicWords = array(
        'forcetoc'                  => array( '0', '__ОБОВ_ЗМІСТ__', '__ОБЯЗАТЕЛЬНОЕ_ОГЛАВЛЕНИЕ__', '__ОБЯЗ_ОГЛ__', '__FORCETOC__' ),
        'toc'                       => array( '0', '__ЗМІСТ__', '__ОГЛАВЛЕНИЕ__', '__ОГЛ__', '__TOC__' ),
        'noeditsection'             => array( '0', '__БЕЗ_РЕДАГУВ_РОЗДІЛУ__', '__БЕЗ_РЕДАКТИРОВАНИЯ_РАЗДЕЛА__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__БЕЗ_ЗАГОЛОВКУ__', '__БЕЗ_ЗАГОЛОВКА__', '__NOHEADER__' ),
        'currentmonth'              => array( '1', 'ПОТОЧНИЙ_МІСЯЦЬ', 'ПОТОЧНИЙ_МІСЯЦЬ_2', 'ТЕКУЩИЙ_МЕСЯЦ', 'ТЕКУЩИЙ_МЕСЯЦ_2', 'CURRENTMONTH', 'CURRENTMONTH2' ),
        'currentmonth1'             => array( '1', 'ПОТОЧНИЙ_МІСЯЦЬ_1', 'ТЕКУЩИЙ_МЕСЯЦ_1', 'CURRENTMONTH1' ),
        'currentmonthname'          => array( '1', 'НАЗВА_ПОТОЧНОГО_МІСЯЦЯ', 'НАЗВАНИЕ_ТЕКУЩЕГО_МЕСЯЦА', 'CURRENTMONTHNAME' ),
@@ -305,7 +304,7 @@ $magicWords = array(
        'revisionmonth1'            => array( '1', 'МІСЯЦЬ_ВЕРСІЇ_1', 'МЕСЯЦ_ВЕРСИИ_1', 'REVISIONMONTH1' ),
        'revisionyear'              => array( '1', 'РІК_ВЕРСІЇ', 'ГОД_ВЕРСИИ', 'REVISIONYEAR' ),
        'revisiontimestamp'         => array( '1', 'МІТКА_ЧАСУ_ВЕРСІЇ', 'ОТМЕТКА_ВРЕМЕНИ_ВЕРСИИ', 'REVISIONTIMESTAMP' ),
-       'revisionuser'              => array( '1', 'ВЕРСІЯ_КОРИСТУВАЧА', 'ВЕРСИЯ_УЧАСНИКА', 'REVISIONUSER' ),
+       'revisionuser'              => array( '1', 'ВЕРСІЯ_КОРИСТУВАЧА', 'ВЕРСИЯ_УЧАСНИКА', 'ВЕРСИЯ_УЧАСТНИКА', 'REVISIONUSER' ),
        'plural'                    => array( '0', 'МНОЖИНА:', 'МНОЖЕСТВЕННОЕ_ЧИСЛО:', 'PLURAL:' ),
        'fullurl'                   => array( '0', 'ПОВНА_АДРЕСА:', 'ПОЛНЫЙ_АДРЕС:', 'FULLURL:' ),
        'fullurle'                  => array( '0', 'ПОВНА_АДРЕСА_2:', 'ПОЛНЫЙ_АДРЕС_2:', 'FULLURLE:' ),
@@ -511,7 +510,7 @@ $messages = array(
 'vector-action-protect' => 'Захистити',
 'vector-action-undelete' => 'Відновити',
 'vector-action-unprotect' => 'Зміна захисту',
-'vector-simplesearch-preference' => 'УвÑ\96мкнÑ\83Ñ\82и Ñ\80озÑ\88иÑ\80енÑ\96 Ð¿Ð¾Ñ\88Ñ\83ковÑ\96 Ð¿Ñ\96дказки (лише для оформлення "Векторне")',
+'vector-simplesearch-preference' => 'УвÑ\96мкнÑ\83Ñ\82и Ñ\81пÑ\80оÑ\89ене Ð¿Ð¾Ð»Ðµ Ð¿Ð¾Ñ\88Ñ\83кÑ\83 (лише для оформлення "Векторне")',
 'vector-view-create' => 'Створити',
 'vector-view-edit' => 'Редагувати',
 'vector-view-history' => 'Переглянути історію',
@@ -680,9 +679,9 @@ $1',
 'dberrortext' => 'Знайдено синтаксичну помилку в запиті до бази даних.
 Це може вказувати на помилку в програмному забезпеченні.
 Останній запит до бази даних:
-<blockquote><tt>$1</tt></blockquote>
-відбувся з функції "<tt>$2</tt>".
-База даних виявила помилку "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+відбувся з функції "<code>$2</code>".
+База даних виявила помилку "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Знайдено синтаксичну помилку в запиті до бази даних.
 Останній запит до бази даних:
 «$1»
@@ -737,7 +736,7 @@ $1',
 'protectedpagetext' => 'Ця сторінка закрита для редагування.',
 'viewsourcetext' => 'Ви можете переглянути та скопіювати початковий текст цієї сторінки:',
 'viewyourtext' => "Ви можете переглянути та скопіювати текст '''ваших редагувань''' на цій сторінці:",
-'protectedinterface' => 'ЦÑ\8f Ñ\81Ñ\82оÑ\80Ñ\96нка Ñ\94 Ñ\87аÑ\81Ñ\82иноÑ\8e Ñ\96нÑ\82еÑ\80Ñ\84ейÑ\81Ñ\83 Ð¿Ñ\80огÑ\80амного Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ\87еннÑ\8f Ñ\96 Ñ\97Ñ\97 Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ñ\80едагÑ\83ваÑ\82и Ð»Ð¸Ñ\88е Ð°Ð´Ð¼Ñ\96нÑ\96Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80и Ð¿Ñ\80оекÑ\82Ñ\83.',
+'protectedinterface' => 'ЦÑ\8f Ñ\81Ñ\82оÑ\80Ñ\96нка Ñ\94 Ñ\87аÑ\81Ñ\82иноÑ\8e Ñ\96нÑ\82еÑ\80Ñ\84ейÑ\81Ñ\83 Ð¿Ñ\80огÑ\80амного Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ\87еннÑ\8f Ñ\86Ñ\96Ñ\94Ñ\97 Ð²Ñ\96кÑ\96 Ñ\96 Ñ\97Ñ\97 Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ñ\80едагÑ\83ваÑ\82и Ð»Ð¸Ñ\88е Ð°Ð´Ð¼Ñ\96нÑ\96Ñ\81Ñ\82Ñ\80аÑ\82оÑ\80и Ð¿Ñ\80оекÑ\82Ñ\83. Ð©Ð¾Ð± Ð´Ð¾Ð´Ð°Ñ\82и Ð°Ð±Ð¾ Ð·Ð¼Ñ\96ниÑ\82и Ð¿ÐµÑ\80еклади Ð´Ð»Ñ\8f Ñ\83Ñ\81Ñ\96Ñ\85 Ð²Ñ\96кÑ\96, Ð²Ñ\96двÑ\96дайÑ\82е [//translatewiki.net/ translatewiki.net], Ð¿Ñ\80оекÑ\82 Ð»Ð¾ÐºÐ°Ð»Ñ\96заÑ\86Ñ\96Ñ\97 MediaWiki.',
 'editinginterface' => "'''Увага:''' Ви редагуєте сторінку, що є частиною текстового інтерфейсу. Зміни цієї сторінки спричинять зміну інтерфейсу для інших користувачів. Для перекладу повідомлення використовуйте [//translatewiki.net/wiki/Main_Page?setlang=uk translatewiki.net] — проект, що займається локалізацією MediaWiki.",
 'sqlhidden' => '(SQL запит приховано)',
 'cascadeprotected' => 'Сторінка захищена від змін, оскільки її включено до {{PLURAL:$1|сторінки, для якої|наступних сторінок, для яких}} установлено каскадний захист: $2',
@@ -1136,6 +1135,15 @@ $2
 'edit-already-exists' => 'Неможливо створити нову сторінку.
 Вона вже існує.',
 'defaultmessagetext' => 'Текст «за замовчування»',
+'content-failed-to-parse' => 'Не вдалось проаналізувати $2 як тип $1: $3',
+'invalid-content-data' => 'Неприпустимі дані',
+'content-not-allowed-here' => 'Вміст «$1» недопустимий на сторінці [[$2]]',
+
+# Content models
+'content-model-wikitext' => 'вікітекст',
+'content-model-text' => 'звичайний текст',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Увага: Ця сторінка містить дуже багато викликів ресурсомістких функцій.
@@ -1292,9 +1300,11 @@ $1",
 'revdelete-concurrent-change' => 'Помилка редагування запису від $2, $1: його стан змінений кимось іншим, поки ви робили свої зміни.
 Будь ласка, перевірте журнал.',
 'revdelete-only-restricted' => 'Помилка приховання запису від $2, $1: ви не можете приховати записи від перегляду адміністраторів без одночасного вибору однієї з інших опцій приховання.',
-'revdelete-reason-dropdown' => '* Типові причини вилучення
+'revdelete-reason-dropdown' => "* Типові причини вилучення
 ** Порушення авторських прав
-** Недоречна особиста інформація',
+** Недоречна особиста інформація
+** Невідповідне ім'я користувача
+** Потенційно наклепна інформація",
 'revdelete-otherreason' => 'Інша/додаткова причина:',
 'revdelete-reasonotherlist' => 'Інша причина',
 'revdelete-edit-reasonlist' => 'Редагувати причини вилучень',
@@ -2141,7 +2151,9 @@ $1',
 
 'disambiguations' => 'Сторінки, що посилаються на сторінки неоднозначності.',
 'disambiguationspage' => 'Template:disambig',
-'disambiguations-text' => "Наступні сторінки посилаються на '''багатозначні сторінки'''. Однак вони, ймовірно, повинні вказувати на відповідну конкретну статтю.<br />Сторінка вважається багатозначною, якщо на ній розміщений шаблон, назва якого є на сторінці [[MediaWiki:Disambiguationspage]].",
+'disambiguations-text' => "Наступні сторінки посилаються на '''багатозначні сторінки'''. 
+Ймовірно, вони повинні вказувати на відповідну конкретну статтю.<br />
+Сторінка вважається багатозначною, якщо на ній розміщений шаблон, назва якого є на сторінці [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects' => 'Подвійні перенаправлення',
 'doubleredirectstext' => 'На цій сторінці наведено список перенаправлень на інші перенаправлення.
@@ -2903,6 +2915,7 @@ $1',
 'immobile-target-namespace-iw' => 'Інтервікі-посилання не підходить для перейменування сторінки.',
 'immobile-source-page' => 'Цю сторінку не можна перейменувати.',
 'immobile-target-page' => 'Не можна присвоїти сторінці цю назву.',
+'bad-target-model' => 'Неможливо перетворити $1 на $2: несумісні моделі даних.',
 'imagenocrossnamespace' => 'Неможливо дати файлові назву з іншого простору назв',
 'nonfile-cannot-move-to-file' => 'Не можна перейменовувати сторінки з інших просторів назв на файли',
 'imagetypemismatch' => 'Нове розширення файлу не співпадає з його типом',
@@ -3188,6 +3201,7 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-default-sort' => 'Ключ сортування за замовчуванням',
 'pageinfo-length' => 'Довжина сторінки (в байтах)',
 'pageinfo-article-id' => 'ID сторінки',
+'pageinfo-language' => 'Мова вмісту сторінки',
 'pageinfo-robot-policy' => 'Індексація пошуковими системами',
 'pageinfo-robot-index' => 'Індексується',
 'pageinfo-robot-noindex' => 'Не індексується',
@@ -3208,6 +3222,13 @@ The wiki server can't provide data in a format your client can read.",
 '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' => 'Стандартне',
@@ -3884,6 +3905,7 @@ $5
 # Scary transclusion
 'scarytranscludedisabled' => '[«Interwiki transcluding» вимкнено]',
 'scarytranscludefailed' => '[Помилка звертання до шаблону $1]',
+'scarytranscludefailed-httpstatus' => '[Не вдалось завантажити шаблон для $1: HTTP $2]',
 'scarytranscludetoolong' => '[URL дуже довгий]',
 
 # Delete conflict
@@ -4071,6 +4093,7 @@ $5
 'version-license' => 'Ліцензія',
 'version-poweredby-credits' => "Ця Вікі працює на системі управління вмістом '''[//www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
 'version-poweredby-others' => 'інші',
+'version-credits-summary' => 'Нам хотілося б відзначити наступних осіб, що зробили внесок у [[Special:Version|MediaWiki]].',
 'version-license-info' => 'MediaWiki є вільним програмним забезпеченням, ви можете розповсюджувати та/або модифікувати його відповідно до умов GNU General Public License, яка опублікованя фондом вільного програмного забезпечення; або версії 2 Ліцензії, або (на Ваш розсуд) будь-якої наступної версії. 
 
 MediaWiki поширюється в надії, що вона буде корисною, але БЕЗ БУДЬ-ЯКИХ ГАРАНТІЙ, навіть без неявної гарантії КОМЕРЦІЙНОЇ ПРИДАТНОСТІ чи ПРИДАТНОСТІ ДЛЯ ПЕВНОЇ МЕТИ. Дивіться GNU General Public License для більш докладної інформації. 
index cc189ae..d6cf1bf 100644 (file)
@@ -14,6 +14,7 @@
  * @author O.bangash
  * @author Rachitrali
  * @author Reedy
+ * @author Tahir mq
  * @author Wisesabre
  * @author ZxxZxxZ
  * @author לערי ריינהארט
@@ -194,6 +195,7 @@ $messages = array(
 'vector-action-delete' => 'حذف کرو',
 'vector-action-move' => 'منتقل کرو',
 'vector-action-protect' => 'محفوظ کرو',
+'vector-action-undelete' => 'بحال',
 'vector-action-unprotect' => 'تحفظ میں تبدیلی',
 'vector-view-create' => 'تخلیق',
 'vector-view-edit' => 'ترمیم',
@@ -214,6 +216,7 @@ $messages = array(
 'searcharticle' => 'چلو',
 'history' => 'تاریخچہ ء صفحہ',
 'history_short' => 'تاریخچہ',
+'updatedmarker' => 'میری آخری آمد تک جدید',
 'printableversion' => 'قابل طبع نسخہ',
 'permalink' => 'مستقل کڑی',
 'print' => 'طباعت',
@@ -262,6 +265,7 @@ $messages = array(
 برائے مہربانی! صفحہ دیکھنے کیلئے دوبارہ کوشش کرنے سے پہلے ذرا انتظار فرمالیجئے.
 
 $1',
+'pool-errorunknown' => 'نامعلوم خطا',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
 'aboutsite' => 'کا تعارف {{SITENAME}}',
@@ -299,6 +303,7 @@ $1',
 'youhavenewmessages' => 'آپکے لیۓ ایک $1 ہے۔ ($2)',
 'newmessageslink' => 'نئے پیغامات',
 'newmessagesdifflink' => 'تـجـدیـد مـاقـبل آخـر سے فـرق',
+'newmessagesdifflinkplural' => 'آخری {{PLURAL:$1|تبدیلی|تبدیلیاں}}',
 'youhavenewmessagesmulti' => 'ء$1 پر آپ کیلئے نئے پیغامات ہیں',
 'editsection' => 'ترمیم',
 'editsection-brackets' => '[$1]',
@@ -310,6 +315,7 @@ $1',
 'toc' => 'فہرست',
 'showtoc' => 'دکھائیں',
 'hidetoc' => 'چھپائیں',
+'collapsible-expand' => 'توسیع',
 'thisisdeleted' => 'دیکھیں یا بحال کریں $1؟',
 'viewdeleted' => 'دیکھیں $1؟',
 'restorelink' => '{{PLURAL:$1|ایک ترمیم حذف ہوچکی|$1 ترامیم حذف ہوچکیں}}',
@@ -323,6 +329,8 @@ $1',
 'feed-atom' => 'اٹوم',
 'feed-rss' => 'آر ایس ایس',
 'red-link-title' => '$1 (صفحہ موجود نہیں)',
+'sort-descending' => 'ترتیب نزولی',
+'sort-ascending' => 'ترتیب صعودی',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'صفحہ',
@@ -388,6 +396,7 @@ Warning: Page may not contain recent updates.',
 'badarticleerror' => 'اس صفحہ پر یہ عمل انجام نہیں دیا جاسکتا۔',
 'cannotdelete' => 'صفحہ یا ملف $1 کو حذف نہیں کیا جاسکتا.
 ہوسکتا ہے کہ اسے پہلے ہی کسی نے حذف کردیا ہو.',
+'cannotdelete-title' => 'صفحہ ھذف نہیں کیا جا سکتا "$1"',
 'badtitle' => 'خراب عنوان',
 'badtitletext' => 'درخواست شدہ صفحہ کا عنوان ناقص، خالی، یا کوئی غلط ربط شدہ بین لسانی یا بین ویکی عنوان ہے.
 شاید اِس میں ایک یا زیادہ ایسے حروف موجود ہوں جو عنوانات میں استعمال نہیں ہوسکتے.',
@@ -408,6 +417,7 @@ Warning: Page may not contain recent updates.',
 'ns-specialprotected' => 'خاص صفحات کی تدوین نہیں کی جاسکتی.',
 'titleprotected' => 'اس عنوان کو [[User:$1|$1]] نے تخلیق سے محفوظ کیا ہے.
 وجہ یہ بتائی گئی ہے: "\'\'$2\'\'"',
+'exception-nologin' => 'غیر داخل نوشتہ',
 
 # Virus scanner
 'virus-badscanner' => "خراب وضعیت: انجان وائرسی مفراس: ''$1''",
@@ -425,6 +435,7 @@ Warning: Page may not contain recent updates.',
 'yourpasswordagain' => 'کلمۂ شناخت دوبارہ لکھیں',
 'remembermypassword' => 'اِس متصفح پر میرے داخلِ نوشتگی معلومات یاد رکھو (زیادہ سے زیادہ $1 {{PLURAL:$1|دِن|ایام}} کیلئے)',
 'yourdomainname' => 'آپکا ڈومین',
+'password-change-forbidden' => 'آپ اس ویکی پر پارلفظ (پاس روڈ) تبدیل نہیں کر سکتے',
 'externaldberror' => 'یا تو توثیقی ڈیٹابیس میں خطا واقع ہوئی اور یا آپ کو بیرونی کھاتہ بتاریخ کرنے کی اِجازت نہیں ہے.',
 'login' => 'داخل ہوں',
 'nav-login-createaccount' => 'کھاتہ کھولیں یا اندراج کریں',
@@ -510,6 +521,9 @@ Warning: Page may not contain recent updates.',
 دوبارہ کوشش کرنے سے پہلے انتظار فرمائیے.',
 'loginlanguagelabel' => 'زبان: $1',
 
+# E-mail sending
+'user-mail-no-addy' => 'برقی ڈاک بھیجنے کی کوشش بغیر برقی ڈاک پتہ',
+
 # Change password dialog
 'resetpass' => 'پارلفظ تبدیل کریں',
 'resetpass_announce' => 'آپ ایک برقی ارسال کردہ عارضی رمز کے ساتھ داخل ہوئے ہیں.
@@ -532,6 +546,15 @@ Warning: Page may not contain recent updates.',
 # Special:PasswordReset
 'passwordreset' => 'پارلفظ کی بازتعینی',
 'passwordreset-username' => 'اسمِ صارف:',
+'passwordreset-domain' => 'ساحہ:',
+'passwordreset-email' => 'برقی ڈاک پتہ:',
+
+# Special:ChangeEmail
+'changeemail-oldemail' => 'حالیہ برقی ڈاک پتہ:',
+'changeemail-newemail' => 'نیا برقی ڈاک پتہ:',
+'changeemail-none' => '(کوئی نہیں)',
+'changeemail-submit' => 'برقی ڈاک تبدیل کریں',
+'changeemail-cancel' => 'منسوخ',
 
 # Edit page toolbar
 'bold_sample' => 'دبیز متن',
@@ -605,7 +628,7 @@ $1 نے پابندی لگائی تھی.
 'noarticletext' => 'اِس صفحہ میں فی الحال کوئی متن موجود نہیں ہے.
 آپ دیگں صفحات میں [[Special:Search/{{PAGENAME}}|اِس صفحہ کے عنوان کیلئے تلاش کرسکتے ہیں]]، <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} متعلقہ نوشتہ جات تلاش کرسکتے ہیں],
 یا [{{fullurl:{{FULLPAGENAME}}|action=edit}} اِس صفحہ میں ترمیم کرسکتے ہیں]</span>',
-'noarticletext-nopermission' => 'اِس صفحہ میں فی الحال کوئی متن موجود نہیں ہے.
+'noarticletext-nopermission' => 'اس صفحہ میں فی الحال کوئی متن موجود نہیں ہے.
 آپ دیگں صفحات میں [[Special:Search/{{PAGENAME}}|اِس صفحہ کے عنوان کیلئے]] یا <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} متعلقہ نوشتہ جات تلاش کرسکتے ہیں]</span>',
 'updated' => '(اپ ڈیٹڈ)',
 'note' => "'''نوٹ:'''",
@@ -624,6 +647,7 @@ $1 نے پابندی لگائی تھی.
 \"محفوظ\" کا بٹن ٹک کرنے سے '''صرف''' بالائی متن محفوظ ہوگا.",
 'yourtext' => 'آپ کی تحریر',
 'storedversion' => 'ذخیرہ شدہ نظرثانی',
+'nonunicodebrowser' => '"انتباہ: آپ کا براؤزر یونی کوڈ کے مطابق نہیں ہے."',
 'editingold' => "'''انتباہ: آپ اس صفحے کا ایک پرانا مسودہ مرتب کررہے ہیں۔ اگر آپ اسے محفوظ کرتے ہیں تو اس صفحے کے اس پرانے مسودے سے اب تک کی جانے والی تمام تدوین ضائع ہو جاۓ گی۔'''",
 'yourdiff' => 'تضادات',
 'copyrightwarning' => "یہ یادآوری کرلیجیۓ کہ {{SITENAME}} میں تمام تحریری شراکت جی این یو آزاد مسوداتی اجازہ ($2)کے تحت تصور کی جاتی ہے (مزید تفصیل کیلیۓ $1 دیکھیۓ)۔ اگر آپ اس بات سے متفق نہیں کہ آپکی تحریر میں ترمیمات کری جائیں اور اسے آزادانہ (جیسے ضرورت ہو) استعمال کیا جاۓ تو براۓ کرم اپنی تصانیف یہاں داخل نہ کیجیۓ۔ اگر آپ یہاں اپنی تحریر جمع کراتے ہیں تو آپ اس بات کا بھی اقرار کر رہے ہیں کہ، اسے آپ نے خود تصنیف کیا ہے یا دائرہ ءعام (پبلک ڈومین) سے حاصل کیا ہے یا اس جیسے کسی اور آذاد وسیلہ سے۔'''بلااجازت ایسا کام داخل نہ کیجیۓ جسکا حق ِطبع و نشر محفوظ ہو!'''",
@@ -654,6 +678,10 @@ $1 نے پابندی لگائی تھی.
 'edit-already-exists' => 'نیا صفحہ تخلیق نہیں کیا جاسکتا.
 یہ پہلے سے موجود ہے.',
 
+# Content models
+'content-model-text' => 'سادہ متن',
+'content-model-javascript' => 'جاوا اسکرپٹ',
+
 # History pages
 'viewpagelogs' => 'اس صفحہ کیلیے نوشتہ جات دیکھیے',
 'nohistory' => 'اِس صفحہ کیلئے کوئی تدوینی تاریخچہ موجود نہیں ہے.',
@@ -748,6 +776,7 @@ $1",
 
 # Diffs
 'history-title' => '"$1" کا نظرثانی تاریخچہ',
+'difference-multipage' => '(فرق مابین صفحات)',
 'lineno' => 'لکیر $1:',
 'compareselectedversions' => 'منتخب متـن کا موازنہ',
 'editundo' => 'استرجع',
@@ -801,6 +830,7 @@ $1",
 'powersearch-ns' => 'جائے نام میں تلاش:',
 'powersearch-redir' => 'فہرستِ رجوع مکرر',
 'powersearch-field' => 'تلاش برائے',
+'powersearch-togglelabel' => 'جانچ',
 'powersearch-toggleall' => 'تمام',
 'powersearch-togglenone' => 'کوئی نہیں',
 'search-external' => 'بیرونی تلاش',
@@ -823,6 +853,7 @@ $1",
 'skin-preview' => 'پیش منظر',
 'datedefault' => 'کوئی ترجیحات نہیں',
 'prefs-datetime' => 'تاریخ و وقت',
+'prefs-user-pages' => 'صارف صفحات',
 'prefs-personal' => 'نمایۂ صارف',
 'prefs-rc' => 'حالیہ تبدیلیاں',
 'prefs-watchlist' => 'زیرِنظر فہرست',
@@ -842,6 +873,7 @@ $1",
 'rows' => 'صفیں:',
 'columns' => 'قطاریں:',
 'searchresultshead' => 'تلاش',
+'stub-threshold-disabled' => 'غیر فعال',
 'recentchangesdays' => 'حالیہ تبدیلیوں میں دکھائی جانے والے ایّام:',
 'recentchangesdays-max' => '(زیادہ سے زیادہ $1 {{PLURAL:$1|دن|ایام}})',
 'recentchangescount' => 'دکھائی جانے والی ترامیم کی تعداد:',
@@ -897,6 +929,11 @@ HTML tags جانچئے.',
 'prefs-i18n' => 'بین الاقوامیت',
 'prefs-signature' => 'دستخط',
 'prefs-dateformat' => 'شکلبندِ تاریخ',
+'prefs-advancedediting' => 'اعلی اختیارات',
+'prefs-advancedrc' => 'اعلی اختیارات',
+'prefs-advancedrendering' => 'اعلی اختیارات',
+'prefs-advancedsearchoptions' => 'اعلی اختیارات',
+'prefs-advancedwatchlist' => 'اعلی اختیارات',
 'prefs-diffs' => 'فروق',
 
 # User rights
@@ -940,6 +977,11 @@ HTML tags جانچئے.',
 'grouppage-bot' => '{{ns:project}}:روبہ جات',
 'grouppage-sysop' => '{{ns:project}}:منتظمین',
 
+# Rights
+'right-upload' => 'ملفات زبراثقال (اپ لوڈ) کریں',
+'right-delete' => 'صفحات حذف کریں',
+'right-sendemail' => 'دیگر صارفین کو برقی ڈاک بھیجیں',
+
 # User rights log
 'rightslog' => 'نوشتہ صارفی اختیارات',
 'rightslogtext' => 'یہ صارفی اختیارات میں تبدیلیوں کا نوشتہ ہے۔',
@@ -1266,7 +1308,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 'whatlinkshere-hideredirs' => 'رجوع مکررات $1',
 'whatlinkshere-hidetrans' => 'تضمینات',
 'whatlinkshere-hidelinks' => 'روابط $1',
-'whatlinkshere-hideimages' => 'روابطِ تصویر $1',
+'whatlinkshere-hideimages' => 'روابطِ تصاویر $1',
 'whatlinkshere-filters' => 'فلٹرذ',
 
 # Block/unblock
index 282f1b6..0e29e0b 100644 (file)
@@ -1229,7 +1229,7 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'whatlinkshere-hideredirs' => "$1 qayta yo'naltirishlar",
 'whatlinkshere-hidetrans' => '$1 kiritmalar',
 'whatlinkshere-hidelinks' => '$1 havolalar',
-'whatlinkshere-hideimages' => '$1 rasmlar uchun havolalar',
+'whatlinkshere-hideimages' => '$1 fayllar uchun havolalar',
 'whatlinkshere-filters' => 'Filtrlar',
 
 # Block/unblock
index 607c442..966eabb 100644 (file)
@@ -119,7 +119,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'ÙltimiCanbiamenti' ),
        'Recentchangeslinked'       => array( 'CanbiamentiLigà' ),
        'Revisiondelete'            => array( 'ScancelaRevision' ),
-       'RevisionMove'              => array( 'SpostaRevision' ),
        'Search'                    => array( 'Serca' ),
        'Shortpages'                => array( 'PaginePiCurte' ),
        'Specialpages'              => array( 'PagineSpeciali' ),
index 5345d61..3e60870 100644 (file)
@@ -124,7 +124,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'Thay_đổi_gần_đây' ),
        'Recentchangeslinked'       => array( 'Thay_đổi_liên_quan' ),
        'Revisiondelete'            => array( 'Xóa_phiên_bản' ),
-       'RevisionMove'              => array( 'Di_chuyển_phiên_bản' ),
        'Search'                    => array( 'Tìm_kiếm' ),
        'Shortpages'                => array( 'Trang_ngắn' ),
        'Specialpages'              => array( 'Trang_đặc_biệt' ),
@@ -345,7 +344,7 @@ $messages = array(
 
 'underline-always' => 'Luôn luôn',
 'underline-never' => 'Không bao giờ',
-'underline-default' => 'Mặc định của trình duyệt',
+'underline-default' => 'Mặc định của hình dạng hoặc trình duyệt',
 
 # Font style option in Special:Preferences
 'editfont-style' => 'Kiểu phông chữ trong khung sửa đổi:',
@@ -977,7 +976,7 @@ Nó chưa được lưu!'''",
 'note' => "'''Ghi chú:'''",
 'previewnote' => "'''Đây chỉ mới là xem thử.'''
 Các thay đổi của bạn vẫn chưa được lưu!",
-'continue-editing' => 'Sửa tiếp',
+'continue-editing' => 'Đi đến hộp sửa đổi',
 'previewconflict' => 'Phần xem thử này là kết quả của văn bản trong vùng soạn thảo phía trên và nó sẽ xuất hiện như vậy nếu bạn chọn lưu trang.',
 'session_fail_preview' => "'''Những sửa đổi của bạn chưa được lưu giữ do mất dữ liệu về phiên làm việc.
 Xin hãy thử lần nữa.
@@ -1585,8 +1584,11 @@ Nếu bạn đồng ý cung cấp, nó sẽ dùng để ghi nhận công lao c
 # User rights log
 'rightslog' => 'Nhật trình cấp quyền thành viên',
 'rightslogtext' => 'Đây là nhật trình lưu những thay đổi đối với các quyền hạn thành viên.',
-'rightslogentry' => 'đã đổi cấp của thành viên $1 từ $2 thành $3',
+'rightslogentry' => 'đã đổi các nhóm liên kết của thành viên $1 từ $2 thành $3',
 'rightslogentry-autopromote' => 'được tự động phong cấp từ $2 đến $3',
+'logentry-rights-rights' => '$1 đã đổi các nhóm liên kết của $3 từ $4 đến $5',
+'logentry-rights-rights-legacy' => '$1 đã đổi các nhóm liên kết của $3',
+'logentry-rights-autopromote' => '$1 đã được tự động phong cấp từ $4 đến $5',
 'rightsnone' => '(không có)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -1977,7 +1979,7 @@ Có lẽ bạn muốn miêu tả nó trên [$2 trang miêu tả tập tin] tại
 'shared-repo-from' => 'tại $1',
 'shared-repo' => 'kho lưu trữ dùng chung',
 'filepage.css' => '/* Mã CSS tại đây sẽ ảnh hướng đến trang miêu tả tập tin, cũng như các wiki khách bên ngoài dựa trên wiki này */',
-'upload-disallowed-here' => 'Rất tiếc, bạn không có thể ghi đè lên hình ảnh này.',
+'upload-disallowed-here' => 'Bạn không có thể ghi đè lên tập tin này.',
 
 # File reversion
 'filerevert' => 'Lùi lại phiên bản của $1',
@@ -2211,7 +2213,7 @@ Xem thêm [[Special:WantedCategories|thể loại cần thiết]].',
 'linksearch-pat' => 'Mẫu liên kết:',
 'linksearch-ns' => 'Không gian tên:',
 'linksearch-ok' => 'Tìm kiếm',
-'linksearch-text' => "Bạn có thể sử dụng ký tự đại diện (''wildcard''), ví dụ “*.wikipedia.org”; ít nhất phải có tên miền cấp cao nhất, thí dụ “*.org”.<br />Các giao thức này được hỗ trợ: <code>$1</code>; vui lòng không đưa giao thức vào truy vấn.",
+'linksearch-text' => "Bạn có thể sử dụng ký tự đại diện (''wildcard''), ví dụ “*.wikipedia.org”; ít nhất phải có tên miền cấp cao nhất, thí dụ “*.org”.<br />Các giao thức này được hỗ trợ: <code>$1</code>; mặc định là <code>http://</code> nếu không định rõ giao thức trong truy vấn.",
 'linksearch-line' => '$1 được liên kết từ $2',
 'linksearch-error' => "Chỉ được sử dụng ký tự đại diện (''wildcard'') vào đầu tên miền (''hostname'').",
 
@@ -2260,7 +2262,7 @@ Có [[{{MediaWiki:Listgrouprights-helppage}}|thông tin thêm]] về từng nhó
 'emailuser-title-target' => '{{GENDER:$1}}Gửi thư cho người dùng này',
 'emailuser-title-notarget' => 'Gửi thư cho người dùng',
 'emailpage' => 'Gửi thư',
-'emailpagetext' => 'Mẫu dưới đây sẽ gửi một bức thư điện tử tới người dùng này.
+'emailpagetext' => '{{GENDER:$1}}Mẫu dưới đây sẽ gửi một bức thư điện tử tới người dùng này.
 Địa chỉ thư điện tử mà bạn đã cung cấp trong [[Special:Preferences|tùy chọn cá nhân của mình]] sẽ xuất hiện trong phần địa chỉ “Người gửi” của bức thư, do đó người nhận sẽ có thể trả lời trực tiếp cho bạn.',
 'usermailererror' => 'Lỗi gửi thư:',
 'defemailsubject' => 'Thư của người dùng "$1" tại {{SITENAME}}',
@@ -2590,7 +2592,7 @@ $1',
 'whatlinkshere-hideredirs' => '$1 trang đổi hướng',
 'whatlinkshere-hidetrans' => '$1 trang nhúng',
 'whatlinkshere-hidelinks' => '$1 liên kết',
-'whatlinkshere-hideimages' => '$1 liên kết hình',
+'whatlinkshere-hideimages' => '$1 liên kết tập tin',
 'whatlinkshere-filters' => 'Bộ lọc',
 
 # Block/unblock
@@ -3084,7 +3086,7 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 
 # Info page
 'pageinfo-title' => 'Thông tin về “$1”',
-'pageinfo-not-current' => 'Thông tin được hiển thị có thể chỉ có liên quan đến phiên bản hiện hành.',
+'pageinfo-not-current' => 'Rất tiếc, không thể cung cấp các chi tiết này đối với các phiên bản cũ.',
 'pageinfo-header-basic' => 'Thông tin cơ bản',
 'pageinfo-header-edits' => 'Lịch sử sửa đổi',
 'pageinfo-header-restrictions' => 'Mức khóa trang',
@@ -3093,6 +3095,7 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'pageinfo-default-sort' => 'Từ khóa sắp xếp mặc định',
 'pageinfo-length' => 'Chiều dài của trang (byte)',
 'pageinfo-article-id' => 'Mã số trang',
+'pageinfo-language' => 'Ngôn ngữ nội dung trang',
 'pageinfo-robot-policy' => 'Trạng thái công cụ tìm kiếm',
 'pageinfo-robot-index' => 'Có thể ghi chỉ mục',
 'pageinfo-robot-noindex' => 'Không thể ghi chỉ mục',
@@ -3114,6 +3117,13 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'pageinfo-hidden-categories' => 'Thể loại ẩn ($1)',
 'pageinfo-templates' => 'Bản mẫu được nhúng ($1)',
 'pageinfo-toolboxlink' => 'Thông tin trang',
+'pageinfo-redirectsto' => 'Đổi hướng đến',
+'pageinfo-redirectsto-info' => 'thông tin',
+'pageinfo-contentpage' => 'Tính là một trang nội dung',
+'pageinfo-contentpage-yes' => 'Có',
+'pageinfo-protect-cascading' => 'Khóa theo tầng từ đây',
+'pageinfo-protect-cascading-yes' => 'Có',
+'pageinfo-protect-cascading-from' => 'Khóa theo tầng từ',
 
 # Skin names
 'skinname-standard' => 'Cổ điển',
@@ -3459,6 +3469,7 @@ Những thông tin khác mặc định sẽ được ẩn đi.
 'exif-compression-3' => 'CCITT Nhóm 3: mã hóa fax',
 'exif-compression-4' => 'CCITT Nhóm 4: mã hóa fax',
 'exif-compression-6' => 'JPEG (cũ)',
+'exif-compression-34712' => 'JPEG 2000',
 
 'exif-copyrighted-true' => 'Dưới bản quyền',
 'exif-copyrighted-false' => 'Phạm vi công cộng',
@@ -3917,6 +3928,7 @@ Bạn cũng có thể [[Special:EditWatchlist|dùng trang sửa đổi bình th
 'version-license' => 'Giấy phép bản quyền',
 'version-poweredby-credits' => "Wiki này chạy trên '''[//www.mediawiki.org/ MediaWiki]''', bản quyền © 2001–$1 $2.",
 'version-poweredby-others' => 'những người khác',
+'version-credits-summary' => 'Chúng tôi muốn công nhận những người sau đã đóng góp vào [[Special:Version|MediaWiki]].',
 'version-license-info' => "MediaWiki là phần mềm tự do; bạn được phép tái phân phối và/hoặc sửa đổi nó theo những điều khoản của Giấy phép Công cộng GNU do Quỹ Phần mềm Tự do xuất bản; phiên bản 2 hay bất kỳ phiên bản nào mới hơn nào của Giấy phép.
 
 MediaWiki được phân phối với hy vọng rằng nó sẽ hữu ích, nhưng '''không có bất kỳ một bảo đảm nào cả''', ngay cả những bảo đảm ngụ ý cho '''các mục đích thương mại''' hoặc cho '''một mục đích đặc biệt nào đó'''. Xem Giấy phép Công cộng GNU để biết thêm chi tiết.
index cedfb0b..09beb54 100644 (file)
@@ -146,7 +146,6 @@ $magicWords = array(
        'nogallery'                 => array( '0', '__קיין_גאלעריע__', '__ללא_גלריה__', '__NOGALLERY__' ),
        'toc'                       => array( '0', '__אינהאלט__', '__תוכן_עניינים__', '__תוכן__', '__TOC__' ),
        'noeditsection'             => array( '0', '__נישט_רעדאקטירן__', '__ללא_עריכה__', '__NOEDITSECTION__' ),
-       'noheader'                  => array( '0', '__קיינקעפל__', '__ללא_כותרת__', '__NOHEADER__' ),
        'currentday'                => array( '1', 'לויפיקער_טאג', 'יום נוכחי', 'CURRENTDAY' ),
        'numberofpages'             => array( '1', 'צאל_בלעטער', 'מספר דפים כולל', 'מספר דפים', 'NUMBEROFPAGES' ),
        'numberofarticles'          => array( '1', 'צאל_ארטיקלען', 'מספר ערכים', 'NUMBEROFARTICLES' ),
@@ -2070,8 +2069,8 @@ $1",
 'emailuser-title-target' => 'שיקן {{GENDER:$1|דעם באניצער|די באניצערין}} ע־פאסט',
 'emailuser-title-notarget' => 'שיקן א באניצער ע־פאסט',
 'emailpage' => 'שיקן ע-פאסט צו באַניצער',
-'emailpagetext' => '×\90×\99ר ×§×¢× ×\98 × ×\99צ×\9f ×\93×¢×\9d ×¤Ö¿×\90רע×\9d ×\90×\95× ×\98×\9f ×¦×\95 ×©×\99ק×\9f ×\90×\9f ×\91×\9c×\99צ×\91ר×\99×\95×\95 ×¦×\95 ×\93×¢×\9d ×\93×\90×\96×\99×\92×\9f ×\91×\90Ö·× ×\99צער.
-דער ע-פאסט אדרעס וואס איר האט אריינגעלייגט אין [[Special:Preferences| אייערע באניצער פרעפערנעצן]] וועט זיך ווייזן כאילו דאס איז געקומען פון דארטן, בכדי צו דערמעגלעכן א תשובה.',
+'emailpagetext' => '×\90×\99ר ×§×¢× ×\98 × ×\99צ×\9f ×\93×\99 ×¤Ö¿×\90רע×\9d ×\90×\95× ×\98×\9f ×¦×\95 ×©×\99ק×\9f ×\90 ×\91×\9c×\99צ×\91ר×\99×\95×\95 ×¦×\95 {{GENDER:$1|×\93×¢×\9d ×\93×\90×\96×\99×\92×\9f ×\91×\90Ö·× ×\99צער|×\93ער ×\93×\90×\96×\99×\92ער ×\91×\90Ö·× ×\99צער×\99×\9f}}.
+דער ע-פאסט אדרעס וואס איר האט אריינגעלייגט אין [[Special:Preferences| אייערע באַניצער פרעפערנעצן]] וועט זיך ווײַזן כאילו דאס איז געקומען פון דארטן, בכדי צו דערמעגלעכן א תשובה.',
 'usermailererror' => 'בליצבריוו האט צוריקגעשיקט א טעות:',
 'defemailsubject' => 'ע-פאסט פון באַניצער "$1" {{SITENAME}}',
 'usermaildisabled' => 'באַניצער ע־פאסט אומאַקטיוויזירט',
index 528bbbe..bbb69e1 100644 (file)
@@ -157,7 +157,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( '最近修改' ),
        'Recentchangeslinked'       => array( '外鏈修改' ),
        'Revisiondelete'            => array( '修訂版本刪除' ),
-       'RevisionMove'              => array( '修訂版本移動' ),
        'Search'                    => array( '搜索' ),
        'Shortpages'                => array( '短版' ),
        'Specialpages'              => array( '特別頁' ),
index ae6d64e..52c289f 100644 (file)
@@ -178,7 +178,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( '最近更改' ),
        'Recentchangeslinked'       => array( '链出更改' ),
        'Revisiondelete'            => array( '删除或恢复修订' ),
-       'RevisionMove'              => array( '修订版本移动' ),
        'Search'                    => array( '搜索' ),
        'Shortpages'                => array( '短页面' ),
        'Specialpages'              => array( '特殊页面' ),
@@ -233,7 +232,20 @@ $magicWords = array(
        'numberofedits'             => array( '1', '编辑数', 'NUMBEROFEDITS' ),
        'numberofviews'             => array( '1', '访问数', 'NUMBEROFVIEWS' ),
        'pagename'                  => array( '1', '页面名', 'PAGENAME' ),
+       'pagenamee'                 => array( '1', '页面名E', 'PAGENAMEE' ),
+       'namespace'                 => array( '1', '名字空间', 'NAMESPACE' ),
+       'namespacee'                => array( '1', '名字空间E', 'NAMESPACEE' ),
+       'namespacenumber'           => array( '1', '名字空间编号', 'NAMESPACENUMBER' ),
+       'talkspace'                 => array( '1', '讨论名字空间', 'TALKSPACE' ),
+       'talkspacee'                => array( '1', '讨论名字空间E', 'TALKSPACEE' ),
        'fullpagename'              => array( '1', '完整页面名', 'FULLPAGENAME' ),
+       'fullpagenamee'             => array( '1', '完整页面名E', 'FULLPAGENAMEE' ),
+       'subpagename'               => array( '1', '子页面名', 'SUBPAGENAME' ),
+       'subpagenamee'              => array( '1', '子页面名E', 'SUBPAGENAMEE' ),
+       'talkpagename'              => array( '1', '讨论页面名', 'TALKPAGENAME' ),
+       'talkpagenamee'             => array( '1', '讨论页面名E', 'TALKPAGENAMEE' ),
+       'subst'                     => array( '0', '替代:', 'SUBST:' ),
+       'safesubst'                 => array( '0', '安全替代:', 'SAFESUBST:' ),
        'img_thumbnail'             => array( '1', '缩略图', 'thumbnail', 'thumb' ),
        'img_manualthumb'           => array( '1', '缩略图=$1', 'thumbnail=$1', 'thumb=$1' ),
        'img_right'                 => array( '1', '右', 'right' ),
@@ -241,14 +253,65 @@ $magicWords = array(
        'img_none'                  => array( '1', '无', 'none' ),
        'img_width'                 => array( '1', '$1像素', '$1px' ),
        'img_center'                => array( '1', '居中', 'center', 'centre' ),
+       'img_framed'                => array( '1', '有框', 'framed', 'enframed', 'frame' ),
+       'img_frameless'             => array( '1', '无框', 'frameless' ),
        'img_page'                  => array( '1', '页数=$1', '$1页', 'page=$1', 'page $1' ),
+       'img_border'                => array( '1', '有边', 'border' ),
        'img_link'                  => array( '1', '链接=$1', 'link=$1' ),
        'img_alt'                   => array( '1', '替代文本=$1', 'alt=$1' ),
+       'img_class'                 => array( '1', '类=$1', 'class=$1' ),
+       'int'                       => array( '0', '界面:', 'INT:' ),
+       'sitename'                  => array( '1', '站点名称', 'SITENAME' ),
+       'ns'                        => array( '0', '名字空间:', 'NS:' ),
+       'nse'                       => array( '0', '名字空间E:', 'NSE:' ),
+       'localurl'                  => array( '0', '本地URL:', 'LOCALURL:' ),
+       'localurle'                 => array( '0', '本地URLE:', 'LOCALURLE:' ),
+       'articlepath'               => array( '0', '条目路径', 'ARTICLEPATH' ),
+       'pageid'                    => array( '0', '页面ID', 'PAGEID' ),
+       'server'                    => array( '0', '服务器', 'SERVER' ),
+       'servername'                => array( '0', '服务器名', 'SERVERNAME' ),
+       'scriptpath'                => array( '0', '脚本路径', 'SCRIPTPATH' ),
+       'stylepath'                 => array( '0', '样式路径', 'STYLEPATH' ),
+       'grammar'                   => array( '0', '语法:', 'GRAMMAR:' ),
+       'gender'                    => array( '0', '性别:', 'GENDER:' ),
+       'notitleconvert'            => array( '0', '__不转换标题__', '__NOTITLECONVERT__', '__NOTC__' ),
+       'nocontentconvert'          => array( '0', '__不转换内容__', '__NOCONTENTCONVERT__', '__NOCC__' ),
+       'lcfirst'                   => array( '0', '小写首字:', 'LCFIRST:' ),
+       'ucfirst'                   => array( '0', '大写首字:', 'UCFIRST:' ),
+       'lc'                        => array( '0', '小写:', 'LC:' ),
+       'uc'                        => array( '0', '大写:', 'UC:' ),
+       'displaytitle'              => array( '1', '显示标题', 'DISPLAYTITLE' ),
        'newsectionlink'            => array( '1', '__新段落链接__', '__NEWSECTIONLINK__' ),
        'nonewsectionlink'          => array( '1', '__无新段落链接__', '__NONEWSECTIONLINK__' ),
+       'currentversion'            => array( '1', '当前版本', 'CURRENTVERSION' ),
+       'urlencode'                 => array( '0', 'URL编码:', 'URLENCODE:' ),
+       'anchorencode'              => array( '0', '锚编码', 'ANCHORENCODE' ),
+       'currenttimestamp'          => array( '1', '当前时间戳', 'CURRENTTIMESTAMP' ),
+       'localtimestamp'            => array( '1', '本地时间戳', 'LOCALTIMESTAMP' ),
+       'directionmark'             => array( '1', '方向标记', 'DIRECTIONMARK', 'DIRMARK' ),
        'language'                  => array( '0', '#语言:', '#LANGUAGE:' ),
+       'contentlanguage'           => array( '1', '内容语言', 'CONTENTLANGUAGE', 'CONTENTLANG' ),
+       'pagesinnamespace'          => array( '1', '名字空间中页面数:', 'PAGESINNAMESPACE:', 'PAGESINNS:' ),
+       'numberofadmins'            => array( '1', '管理员数', 'NUMBEROFADMINS' ),
+       'formatnum'                 => array( '0', '格式化数字', 'FORMATNUM' ),
+       'padleft'                   => array( '0', '左填充', 'PADLEFT' ),
+       'padright'                  => array( '0', '右填充', 'PADRIGHT' ),
+       'special'                   => array( '0', '特殊', 'special' ),
+       'speciale'                  => array( '0', '特殊e', 'speciale' ),
+       'defaultsort'               => array( '1', '默认排序:', '默认排序关键字:', '默认分类排序:', 'DEFAULTSORT:', 'DEFAULTSORTKEY:', 'DEFAULTCATEGORYSORT:' ),
+       'filepath'                  => array( '0', '文件路径:', 'FILEPATH:' ),
        'tag'                       => array( '0', '标记', 'tag' ),
+       'hiddencat'                 => array( '1', '__隐藏分类__', '__HIDDENCAT__' ),
+       'pagesincategory'           => array( '1', '分类中页面数', 'PAGESINCATEGORY', 'PAGESINCAT' ),
        'pagesize'                  => array( '1', '页面大小', 'PAGESIZE' ),
+       'index'                     => array( '1', '__索引__', '__INDEX__' ),
+       'noindex'                   => array( '1', '__不索引__', '__NOINDEX__' ),
+       'numberingroup'             => array( '1', '组中用户数', 'NUMBERINGROUP', 'NUMINGROUP' ),
+       'staticredirect'            => array( '1', '__静态重定向__', '__STATICREDIRECT__' ),
+       'protectionlevel'           => array( '1', '保护级别', 'PROTECTIONLEVEL' ),
+       'formatdate'                => array( '0', '格式化日期', '日期格式化', 'formatdate', 'dateformat' ),
+       'defaultsort_noerror'       => array( '0', '不报错', 'noerror' ),
+       'defaultsort_noreplace'     => array( '0', '不替换', 'noreplace' ),
 );
 
 $linkTrail = '/^()(.*)$/sD';
@@ -1002,6 +1065,12 @@ $2
 'edit-already-exists' => '不可以建立一个新页面。
 它已经存在。',
 'defaultmessagetext' => '默认消息文本',
+'invalid-content-data' => '无效的内容数据',
+
+# Content models
+'content-model-text' => '纯文本',
+'content-model-javascript' => 'JavaScript',
+'content-model-css' => 'CSS',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => '警告:这个页面有太多高昂的语法功能调用。
@@ -2938,6 +3007,7 @@ $1被封禁的理由是:“$2”',
 
 # Info page
 'pageinfo-title' => '“$1”的信息',
+'pageinfo-not-current' => '只能显示当前修订版本的信息。',
 'pageinfo-header-basic' => '基本信息',
 'pageinfo-header-edits' => '编辑历史',
 'pageinfo-header-restrictions' => '页面保护',
@@ -2946,6 +3016,7 @@ $1被封禁的理由是:“$2”',
 'pageinfo-default-sort' => '默认排序键',
 'pageinfo-length' => '页面长度(字节)',
 'pageinfo-article-id' => '页面ID',
+'pageinfo-language' => '页面内容语言',
 'pageinfo-robot-policy' => '搜索引擎状态',
 'pageinfo-robot-index' => '可索引',
 'pageinfo-robot-noindex' => '不可索引',
@@ -2966,6 +3037,12 @@ $1被封禁的理由是:“$2”',
 'pageinfo-hidden-categories' => '隐藏分类($1)',
 'pageinfo-templates' => '使用的模板($1)',
 'pageinfo-toolboxlink' => '页面信息',
+'pageinfo-redirectsto' => '重定向到',
+'pageinfo-redirectsto-info' => '信息',
+'pageinfo-contentpage' => '计算为内容页',
+'pageinfo-contentpage-yes' => '是',
+'pageinfo-protect-cascading' => '从这里开始连锁保护',
+'pageinfo-protect-cascading-yes' => '是',
 
 # Skin names
 'skinname-standard' => '标准',
@@ -3563,6 +3640,7 @@ $5
 # Scary transclusion
 'scarytranscludedisabled' => '[跨网站的编码转换不可用]',
 'scarytranscludefailed' => '[提取$1失败]',
+'scarytranscludefailed-httpstatus' => '[模板$1读取失败:HTTP $2]',
 'scarytranscludetoolong' => '[URL过长]',
 
 # Delete conflict
@@ -3678,6 +3756,7 @@ $5
 'version-license' => '授权协议',
 'version-poweredby-credits' => "本Wiki由'''[//www.mediawiki.org/ MediaWiki]'''驱动,版权所有 © 2001-$1 $2。",
 'version-poweredby-others' => '其他',
+'version-credits-summary' => '我们感谢下列人士为[[Special:Version|MediaWiki]]作出的贡献。',
 'version-license-info' => 'MediaWiki为自由软件;您可依据自由软件基金会所发表的GNU通用公共授权条款规定,就本程序再为发布与/或修改;无论您依据的是本授权的第二版或(您自行选择的)任一日后发行的版本。
 
 MediaWiki是基于使用目的而加以发布,然而不负任何担保责任;亦无对适售性或特定目的适用性所为的默示性担保。详情请参照GNU通用公共授权。
index 15c56c3..df249c1 100644 (file)
@@ -170,7 +170,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( '最近更改' ),
        'Recentchangeslinked'       => array( '鏈出更改' ),
        'Revisiondelete'            => array( '刪除或恢復版本' ),
-       'RevisionMove'              => array( '版本移動' ),
        'Search'                    => array( '搜索' ),
        'Shortpages'                => array( '短頁面' ),
        'Specialpages'              => array( '特殊頁面' ),
@@ -259,7 +258,7 @@ $messages = array(
 
 'underline-always' => '總是使用',
 'underline-never' => '從不使用',
-'underline-default' => '瀏覽器預設',
+'underline-default' => '外觀或瀏覽器預設',
 
 # Font style option in Special:Preferences
 'editfont-style' => '編輯區字型樣式:',
@@ -1474,6 +1473,9 @@ $1",
 '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"
@@ -2081,8 +2083,8 @@ Template:消除歧義',
 'linksearch-pat' => '搜尋網址:',
 'linksearch-ns' => '名字空間:',
 'linksearch-ok' => '搜尋',
-'linksearch-text' => '製作可以使用類似“*.wikipedia.org”的通配符。必須至少是頂級域名,例如“*.org”。<br />
-支持的協議:<code>$1</code>(不要包含在搜索中)。',
+'linksearch-text' => '可使用通配符,如“*.wikipedia.org”。至少需要一個頂級域名,例如“*.org”。<br />
+支持的協議:<code>$1</code>(若沒有指定協議,預設為http://)。',
 'linksearch-line' => '$1 連自 $2',
 'linksearch-error' => '萬用字元僅可在主機名稱的開頭使用。',
 
@@ -2952,7 +2954,7 @@ $1被封禁的理由是“$2”',
 
 # Info page
 'pageinfo-title' => '“$1”的信息',
-'pageinfo-not-current' => '資訊可能只顯示在當前的修訂版本。',
+'pageinfo-not-current' => '抱歉,無法提供之前修訂版本的資訊。',
 'pageinfo-header-basic' => '基本資料',
 'pageinfo-header-edits' => '編輯歷史',
 'pageinfo-header-restrictions' => '保護頁面',
index 91be2ec..dc28646 100644 (file)
@@ -24,7 +24,6 @@ $fallback8bitEncoding = 'Big5-HKSCS';
 
 $specialPageAliases = array(
        'ComparePages'              => array( '頁面比較' ),
-       'RevisionMove'              => array( '移動版本' ),
        'Unblock'                   => array( '解除封禁' ),
 );
 
index 1fbc434..7d98460 100644 (file)
 
 $fallback = 'zh-hant, zh-hans';
 
+$namespaceNames = array(
+       NS_USER             => '使用者',
+       NS_USER_TALK        => '使用者討論',
+       NS_HELP             => '使用說明',
+       NS_HELP_TALK        => '使用說明討論',
+);
+
+$namespaceAliases = array(
+       'Image' => NS_FILE,
+       'Image_talk' => NS_FILE_TALK,
+       "圖片" => NS_FILE,
+       "圖片討論" => NS_FILE_TALK,
+);
+
 $specialPageAliases = array(
        'Ancientpages'              => array( '最舊頁面' ),
        'Block'                     => array( '查封用戶' ),
@@ -46,20 +60,6 @@ $specialPageAliases = array(
        'Withoutinterwiki'          => array( '沒有跨語言鏈接的頁面' ),
 );
 
-$namespaceNames = array(
-       NS_USER             => '使用者',
-       NS_USER_TALK        => '使用者討論',
-       NS_HELP             => '使用說明',
-       NS_HELP_TALK        => '使用說明討論',
-);
-
-$namespaceAliases = array(
-       'Image' => NS_FILE,
-       'Image_talk' => NS_FILE_TALK,
-       "圖片" => NS_FILE,
-       "圖片討論" => NS_FILE_TALK,
-);
-
 $datePreferences = array(
        'default',
        'minguo',
index 56cff94..eee9799 100644 (file)
@@ -1191,6 +1191,9 @@ $wgMessageStructure = array(
                'rightslogtext',
                'rightslogentry',
                'rightslogentry-autopromote',
+               'logentry-rights-rights',
+               'logentry-rights-rights-legacy',
+               'logentry-rights-autopromote',
                'rightsnone',
        ),
        'action' => array(
index e66e981..75018de 100644 (file)
@@ -97,17 +97,23 @@ class nextJobDB extends Maintenance {
         * @return bool
         */
        function checkJob( $type, $dbName ) {
-               $lb = wfGetLB( $dbName );
-               $db = $lb->getConnection( DB_MASTER, array(), $dbName );
+               global $wgJobTypesExcludedFromDefaultQueue;
+
                if ( $type === false ) {
-                       $conds = Job::defaultQueueConditions( );
+                       $lb = wfGetLB( $dbName );
+                       $db = $lb->getConnection( DB_MASTER, array(), $dbName );
+                       $conds = array();
+                       if ( count( $wgJobTypesExcludedFromDefaultQueue ) > 0 ) {
+                               foreach ( $wgJobTypesExcludedFromDefaultQueue as $cmdType ) {
+                                       $conds[] = "job_cmd != " . $db->addQuotes( $cmdType );
+                               }
+                       }
+                       $exists = (bool)$db->selectField( 'job', '1', $conds, __METHOD__ );
+                       $lb->reuseConnection( $db );
                } else {
-                       $conds = array( 'job_cmd' => $type );
+                       $exists = !JobQueueGroup::singleton( $dbName )->get( $type )->isEmpty();
                }
 
-
-               $exists = (bool) $db->selectField( 'job', '1', $conds, __METHOD__ );
-               $lb->reuseConnection( $db );
                return $exists;
        }
 
index 92e7255..b8bec8c 100644 (file)
@@ -1,29 +1,23 @@
 .mw-badge {
-       min-width: 8px;
-       height: 14px;
-       border: 1px solid white;
-       -moz-border-radius: 8px;
-       -webkit-border-radius: 8px;
-       border-radius: 8px;
+       min-width: 7px;
+       -moz-border-radius: 2px;
+       -webkit-border-radius: 2px;
+       border-radius: 2px;
        -moz-box-shadow: 0px 1px 4px #ccc;
        -webkit-box-shadow: 0px 1px 4px #ccc;
        box-shadow: 0px 1px 4px #ccc;
-       background-color: #b60a00;
-       background-image: -o-linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
-       background-image: -moz-linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
-       background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #a70802), color-stop(1, #cf0e00));
-       background-image: -webkit-linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
-       background-image: -ms-linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
-       background-image: linear-gradient(bottom, #a70802 0%, #cf0e00 100%);
+       background-color: #cc0000;
        padding: 0 3px;
        text-align: center;
 }
 
 .mw-badge-content {
        font-size: 12px;
-       line-height: 14px;
+       font-weight: bold;
+       line-height: 12px;
        color: white;
-       vertical-align: top;
+       vertical-align: baseline;
+       text-shadow: 0 1px rgba(0, 0, 0, 0.4);
 }
 
 .mw-badge-inline {
index 1a72ed1..690138c 100644 (file)
@@ -758,16 +758,20 @@ var mw = ( function ( $, undefined ) {
                                // Using isReady directly instead of storing it locally from
                                // a $.fn.ready callback (bug 31895).
                                if ( $.isReady || async ) {
-                                       // jQuery's getScript method is NOT better than doing this the old-fashioned way
-                                       // because jQuery will eval the script's code, and errors will not have sane
-                                       // line numbers.
+                                       // Can't use jQuery.getScript because that only uses <script> for cross-domain,
+                                       // it uses XHR and eval for same-domain scripts, which we don't want because it
+                                       // messes up line numbers.
+                                       // The below is based on jQuery ([jquery@1.8.2]/src/ajax/script.js)
+
+                                       // IE-safe way of getting the <head>. document.head isn't supported
+                                       // in old IE, and doesn't work when in the <head>.
+                                       head = document.getElementsByTagName( 'head' )[0] || document.body;
+
                                        script = document.createElement( 'script' );
-                                       script.setAttribute( 'src', src );
-                                       script.setAttribute( 'type', 'text/javascript' );
+                                       script.async = true;
+                                       script.src = src;
                                        if ( $.isFunction( callback ) ) {
-                                               // Attach handlers for all browsers (based on jQuery.ajax)
                                                script.onload = script.onreadystatechange = function () {
-
                                                        if (
                                                                !done
                                                                && (
@@ -775,24 +779,20 @@ var mw = ( function ( $, undefined ) {
                                                                        || /loaded|complete/.test( script.readyState )
                                                                )
                                                        ) {
-
                                                                done = true;
 
-                                                               callback();
+                                                               // Handle memory leak in IE
+                                                               script.onload = script.onreadystatechange = null;
 
-                                                               // Handle memory leak in IE. This seems to fail in
-                                                               // IE7 sometimes (Permission Denied error when
-                                                               // accessing script.parentNode) so wrap it in
-                                                               // a try catch.
-                                                               try {
-                                                                       script.onload = script.onreadystatechange = null;
-                                                                       if ( script.parentNode ) {
-                                                                               script.parentNode.removeChild( script );
-                                                                       }
-
-                                                                       // Dereference the script
-                                                                       script = undefined;
-                                                               } catch ( e ) { }
+                                                               // Remove the script
+                                                               if ( script.parentNode ) {
+                                                                       script.parentNode.removeChild( script );
+                                                               }
+
+                                                               // Dereference the script
+                                                               script = undefined;
+
+                                                               callback();
                                                        }
                                                };
                                        }
@@ -800,20 +800,17 @@ var mw = ( function ( $, undefined ) {
                                        if ( window.opera ) {
                                                // Appending to the <head> blocks rendering completely in Opera,
                                                // so append to the <body> after document ready. This means the
-                                               // scripts only start loading after  the document has been rendered,
+                                               // scripts only start loading after the document has been rendered,
                                                // but so be it. Opera users don't deserve faster web pages if their
-                                               // browser makes it impossible
-                                               $( function () { document.body.appendChild( script ); } );
+                                               // browser makes it impossible.
+                                               $( function () {
+                                                       document.body.appendChild( script );
+                                               } );
                                        } else {
-                                               // IE-safe way of getting the <head> . document.documentElement.head doesn't
-                                               // work in scripts that run in the <head>
-                                               head = document.getElementsByTagName( 'head' )[0];
-                                               ( document.body || head ).appendChild( script );
+                                               head.appendChild( script );
                                        }
                                } else {
-                                       document.write( mw.html.element(
-                                               'script', { 'type': 'text/javascript', 'src': src }, ''
-                                       ) );
+                                       document.write( mw.html.element( 'script', { 'src': src }, '' ) );
                                        if ( $.isFunction( callback ) ) {
                                                // Document.write is synchronous, so this is called when it's done
                                                // FIXME: that's a lie. doc.write isn't actually synchronous
@@ -1127,7 +1124,7 @@ var mw = ( function ( $, undefined ) {
                                                                }
                                                        }
 
-                                                       currReqBase = $.extend( { 'version': formatVersionNumber( maxVersion ) }, reqBase );
+                                                       currReqBase = $.extend( { version: formatVersionNumber( maxVersion ) }, reqBase );
                                                        // For user modules append a user name to the request.
                                                        if ( group === "user" && mw.config.get( 'wgUserName' ) !== null ) {
                                                                currReqBase.user = mw.config.get( 'wgUserName' );
@@ -1242,15 +1239,15 @@ var mw = ( function ( $, undefined ) {
                                        }
                                        // List the module as registered
                                        registry[module] = {
-                                               'version': version !== undefined ? parseInt( version, 10 ) : 0,
-                                               'dependencies': [],
-                                               'group': typeof group === 'string' ? group : null,
-                                               'source': typeof source === 'string' ? source: 'local',
-                                               'state': 'registered'
+                                               version: version !== undefined ? parseInt( version, 10 ) : 0,
+                                               dependencies: [],
+                                               group: typeof group === 'string' ? group : null,
+                                               source: typeof source === 'string' ? source: 'local',
+                                               state: 'registered'
                                        };
                                        if ( typeof dependencies === 'string' ) {
                                                // Allow dependencies to be given as a single module name
-                                               registry[module].dependencies = [dependencies];
+                                               registry[module].dependencies = [ dependencies ];
                                        } else if ( typeof dependencies === 'object' || $.isFunction( dependencies ) ) {
                                                // Allow dependencies to be given as an array of module names
                                                // or a function which returns an array
@@ -1331,7 +1328,7 @@ var mw = ( function ( $, undefined ) {
                                        }
                                        // Allow calling with a single dependency as a string
                                        if ( tod === 'string' ) {
-                                               dependencies = [dependencies];
+                                               dependencies = [ dependencies ];
                                        }
                                        // Resolve entire dependency map
                                        dependencies = resolve( dependencies );
@@ -1366,7 +1363,7 @@ var mw = ( function ( $, undefined ) {
                                 *  be assumed if loading a URL, and false will be assumed otherwise.
                                 */
                                load: function ( modules, type, async ) {
-                                       var filtered, m, module;
+                                       var filtered, m, module, l;
 
                                        // Validate input
                                        if ( typeof modules !== 'object' && typeof modules !== 'string' ) {
@@ -1381,11 +1378,13 @@ var mw = ( function ( $, undefined ) {
                                                                async = true;
                                                        }
                                                        if ( type === 'text/css' ) {
-                                                               $( 'head' ).append( $( '<link>', {
-                                                                       rel: 'stylesheet',
-                                                                       type: 'text/css',
-                                                                       href: modules
-                                                               } ) );
+                                                               // IE7-8 throws security warnings when inserting a <link> tag
+                                                               // with a protocol-relative URL set though attributes (instead of
+                                                               // properties) - when on HTTPS. See also bug #.
+                                                               l = document.createElement( 'link' );
+                                                               l.rel = 'stylesheet';
+                                                               l.href = modules;
+                                                               $( 'head' ).append( l );
                                                                return;
                                                        }
                                                        if ( type === 'text/javascript' || type === undefined ) {
@@ -1396,7 +1395,7 @@ var mw = ( function ( $, undefined ) {
                                                        throw new Error( 'invalid type for external url, must be text/css or text/javascript. not ' + type );
                                                }
                                                // Called with single module
-                                               modules = [modules];
+                                               modules = [ modules ];
                                        }
 
                                        // Filter out undefined modules, otherwise resolve() will throw
@@ -1448,7 +1447,7 @@ var mw = ( function ( $, undefined ) {
                                        if ( registry[module] === undefined ) {
                                                mw.loader.register( module );
                                        }
-                                       if ( $.inArray(state, ['ready', 'error', 'missing']) !== -1
+                                       if ( $.inArray( state, ['ready', 'error', 'missing'] ) !== -1
                                                && registry[module].state !== state ) {
                                                // Make sure pending modules depending on this one get executed if their
                                                // dependencies are now fulfilled!
index 5bcbfcc..58a3ab6 100644 (file)
                        } )
                        // Fix the top/left position to the current computed position from which we
                        // can animate upwards.
-                       .css( this.$notification.position() )
-                       // Animate opacity and top to create fade upwards animation for notification closing
+                       .css( this.$notification.position() );
+
+               // This needs to be done *after* notification's position has been made absolute.
+               if ( options.placeholder ) {
+                       // Insert a placeholder with a height equal to the height of the
+                       // notification plus it's vertical margins in place of the notification
+                       var $placeholder = $( '<div>' )
+                               .css( 'height', this.$notification.outerHeight( true ) )
+                               .insertBefore( this.$notification );
+               }
+
+               // Animate opacity and top to create fade upwards animation for notification closing
+               this.$notification
                        .animate( {
                                opacity: 0,
                                top: '-=35'
                                        }
                                }
                        } );
-
-               if ( options.placeholder ) {
-                       // Insert a placeholder with a height equal to the height of the
-                       // notification plus it's vertical margins in place of the notification
-                       var $placeholder = $( '<div>' )
-                               .css( 'height', this.$notification.outerHeight( true ) )
-                               .insertBefore( this.$notification );
-               }
        };
 
        /**
index 4a03aa0..84042c3 100644 (file)
@@ -122,223 +122,79 @@ class CologneBlueTemplate extends BaseTemplate {
                return $this->getSkin()->getLanguage()->pipeList( $s );
        }
 
-       function bottomLinks() {
-               $sep = wfMessage( 'pipe-separator' )->escaped() . "\n";
-
-               $s = '';
-               if ( $this->getSkin()->getOutput()->isArticleRelated() ) {
-                       $element[] = '<strong>' . $this->editThisPage() . '</strong>';
-
-                       if ( $this->getSkin()->getUser()->isLoggedIn() ) {
-                               $element[] = $this->watchThisPage();
-                       }
-
-                       $element[] = $this->talkLink();
-                       $element[] = $this->historyLink();
-                       $element[] = $this->whatLinksHere();
-                       $element[] = $this->watchPageLinksLink();
-
-                       $title = $this->getSkin()->getTitle();
-
-                       if (
-                               $title->getNamespace() == NS_USER ||
-                               $title->getNamespace() == NS_USER_TALK
-                       ) {
-                               $id = User::idFromName( $title->getText() );
-                               $ip = User::isIP( $title->getText() );
-
-                               # Both anons and non-anons have contributions list
-                               if ( $id || $ip ) {
-                                       $element[] = $this->userContribsLink();
-                               }
-
-                               if ( $this->getSkin()->showEmailUser( $id ) ) {
-                                       $element[] = $this->emailUserLink();
-                               }
-                       }
-
-                       $s = implode( $element, $sep );
-
-                       if ( $title->getArticleID() ) {
-                               $s .= "\n<br />";
-
-                               // Delete/protect/move links for privileged users
-                               if ( $this->getSkin()->getUser()->isAllowed( 'delete' ) ) {
-                                       $s .= $this->deleteThisPage();
-                               }
-
-                               if ( $this->getSkin()->getUser()->isAllowed( 'protect' ) ) {
-                                       $s .= $sep . $this->protectThisPage();
-                               }
-
-                               if ( $this->getSkin()->getUser()->isAllowed( 'move' ) ) {
-                                       $s .= $sep . $this->moveThisPage();
-                               }
-                       }
-
-                       $s .= "<br />\n" . $this->otherLanguages();
+       /**
+        * Used in bottomLinks() to eliminate repetitive code.
+        *
+        * @param $key string Key to be passed to makeListItem()
+        * @param $navlink array Navlink suitable for processNavlinkForDocument()
+        * @param $message string Key of the message to use in place of standard text
+        *
+        * @return string
+        * @fixed
+        */
+       function processBottomLink( $key, $navlink, $message=null ) {
+               if ( !$navlink ) {
+                       // Empty navlinks might be passed.
+                       return null;
                }
 
-               return $s;
-       }
-
-       function editThisPage() {
-               if ( !$this->getSkin()->getOutput()->isArticleRelated() ) {
-                       $s = wfMessage( 'protectedpage' )->text();
-               } else {
-                       $title = $this->getSkin()->getTitle();
-                       if ( $title->quickUserCan( 'edit' ) && $title->exists() ) {
-                               $t = wfMessage( 'editthispage' )->text();
-                       } elseif ( $title->quickUserCan( 'create' ) && !$title->exists() ) {
-                               $t = wfMessage( 'create-this-page' )->text();
-                       } else {
-                               $t = wfMessage( 'viewsource' )->text();
-                       }
-
-                       $s = Linker::linkKnown(
-                               $title,
-                               $t,
-                               array(),
-                               $this->getSkin()->editUrlOptions()
-                       );
+               if ( $message ) {
+                       $navlink['text'] = wfMessage( $message )->escaped();
                }
 
-               return $s;
+               return $this->makeListItem( $key, $this->processNavlinkForDocument( $navlink ), array( 'tag' => 'span' ) );
        }
 
-       function deleteThisPage() {
-               $diff = $this->getSkin()->getRequest()->getVal( 'diff' );
-               $title = $this->getSkin()->getTitle();
+       // @fixed
+       function bottomLinks() {
+               $toolbox = $this->getToolbox();
+               $content_nav = $this->data['content_navigation'];
 
-               if ( $title->getArticleID() && ( !$diff ) && $this->getSkin()->getUser()->isAllowed( 'delete' ) ) {
-                       $t = wfMessage( 'deletethispage' )->text();
+               $lines = array();
 
-                       $s = Linker::linkKnown(
-                               $title,
-                               $t,
-                               array(),
-                               array( 'action' => 'delete' )
-                       );
-               } else {
-                       $s = '';
-               }
-
-               return $s;
-       }
+               if ( $this->getSkin()->getOutput()->isArticleRelated() ) {
+                       // First row. Regular actions.
+                       $element = array();
 
-       function protectThisPage() {
-               $diff = $this->getSkin()->getRequest()->getVal( 'diff' );
-               $title = $this->getSkin()->getTitle();
+                       $editLinkMessage = $this->getSkin()->getTitle()->exists() ? 'editthispage' : 'create-this-page';
+                       $element[] = $this->processBottomLink( 'edit', $content_nav['views']['edit'], $editLinkMessage );
+                       $element[] = $this->processBottomLink( 'viewsource', $content_nav['views']['viewsource'], 'viewsource' );
 
-               if ( $title->getArticleID() && ( ! $diff ) && $this->getSkin()->getUser()->isAllowed( 'protect' ) ) {
-                       if ( $title->isProtected() ) {
-                               $text = wfMessage( 'unprotectthispage' )->text();
-                               $query = array( 'action' => 'unprotect' );
-                       } else {
-                               $text = wfMessage( 'protectthispage' )->text();
-                               $query = array( 'action' => 'protect' );
-                       }
+                       $element[] = $this->processBottomLink( 'watch', $content_nav['actions']['watch'], 'watchthispage' );
+                       $element[] = $this->processBottomLink( 'unwatch', $content_nav['actions']['unwatch'], 'unwatchthispage' );
 
-                       $s = Linker::linkKnown(
-                               $title,
-                               $text,
-                               array(),
-                               $query
-                       );
-               } else {
-                       $s = '';
-               }
+                       $element[] = $this->talkLink();
 
-               return $s;
-       }
+                       $element[] = $this->processBottomLink( 'history', $content_nav['views']['history'], 'history' );
+                       $element[] = $this->processBottomLink( 'info', $toolbox['info'] );
+                       $element[] = $this->processBottomLink( 'whatlinkshere', $toolbox['whatlinkshere'] );
+                       $element[] = $this->processBottomLink( 'recentchangeslinked', $toolbox['recentchangeslinked'] );
 
-       function watchThisPage() {
-               // Cache
-               $title = $this->getSkin()->getTitle();
+                       $element[] = $this->processBottomLink( 'contributions', $toolbox['contributions'] );
+                       $element[] = $this->processBottomLink( 'emailuser', $toolbox['emailuser'] );
 
-               if ( $this->getSkin()->getOutput()->isArticleRelated() ) {
-                       if ( $this->getSkin()->getUser()->isWatched( $title ) ) {
-                               $text = wfMessage( 'unwatchthispage' )->text();
-                               $query = array(
-                                       'action' => 'unwatch',
-                                       'token' => UnwatchAction::getUnwatchToken( $title, $this->getSkin()->getUser() ),
-                               );
-                               $id = 'mw-unwatch-link';
-                       } else {
-                               $text = wfMessage( 'watchthispage' )->text();
-                               $query = array(
-                                       'action' => 'watch',
-                                       'token' => WatchAction::getWatchToken( $title, $this->getSkin()->getUser() ),
-                               );
-                               $id = 'mw-watch-link';
-                       }
+                       $lines[] = $this->getSkin()->getLanguage()->pipeList( array_filter( $element ) );
 
-                       $s = Linker::linkKnown(
-                               $title,
-                               $text,
-                               array( 'id' => $id ),
-                               $query
-                       );
-               } else {
-                       $s = wfMessage( 'notanarticle' )->text();
-               }
 
-               return $s;
-       }
+                       // Second row. Privileged actions.
+                       $element = array();
 
-       function moveThisPage() {
-               if ( $this->getSkin()->getTitle()->quickUserCan( 'move' ) ) {
-                       return Linker::linkKnown(
-                               SpecialPage::getTitleFor( 'Movepage' ),
-                               wfMessage( 'movethispage' )->text(),
-                               array(),
-                               array( 'target' => $this->getSkin()->getTitle()->getPrefixedDBkey() )
-                       );
-               } else {
-                       // no message if page is protected - would be redundant
-                       return '';
-               }
-       }
+                       $element[] = $this->processBottomLink( 'delete', $content_nav['actions']['delete'], 'deletethispage' );
+                       $element[] = $this->processBottomLink( 'undelete', $content_nav['actions']['undelete'], 'undeletethispage' );
 
-       function historyLink() {
-               return Linker::link(
-                       $this->getSkin()->getTitle(),
-                       wfMessage( 'history' )->escaped(),
-                       array( 'rel' => 'archives' ),
-                       array( 'action' => 'history' )
-               );
-       }
+                       $element[] = $this->processBottomLink( 'protect', $content_nav['actions']['protect'], 'protectthispage' );
+                       $element[] = $this->processBottomLink( 'unprotect', $content_nav['actions']['unprotect'], 'unprotectthispage' );
 
-       function whatLinksHere() {
-               return Linker::linkKnown(
-                       SpecialPage::getTitleFor( 'Whatlinkshere', $this->getSkin()->getTitle()->getPrefixedDBkey() ),
-                       wfMessage( 'whatlinkshere' )->escaped()
-               );
-       }
+                       $element[] = $this->processBottomLink( 'move', $content_nav['actions']['move'], 'movethispage' );
 
-       function userContribsLink() {
-               return Linker::linkKnown(
-                       SpecialPage::getTitleFor( 'Contributions', $this->getSkin()->getTitle()->getDBkey() ),
-                       wfMessage( 'contributions' )->escaped()
-               );
-       }
+                       $lines[] = $this->getSkin()->getLanguage()->pipeList( array_filter( $element ) );
 
-       function emailUserLink() {
-               return Linker::linkKnown(
-                       SpecialPage::getTitleFor( 'Emailuser', $this->getSkin()->getTitle()->getDBkey() ),
-                       wfMessage( 'emailuser' )->escaped()
-               );
-       }
 
-       function watchPageLinksLink() {
-               if ( !$this->getSkin()->getOutput()->isArticleRelated() ) {
-                       return wfMessage( 'parentheses', wfMessage( 'notanarticle' )->text() )->escaped();
-               } else {
-                       return Linker::linkKnown(
-                               SpecialPage::getTitleFor( 'Recentchangeslinked', $this->getSkin()->getTitle()->getPrefixedDBkey() ),
-                               wfMessage( 'recentchangeslinked-toolbox' )->escaped()
-                       );
+                       // Third row. Language links.
+                       $lines[] = $this->otherLanguages();
                }
+
+               return implode( array_filter( $lines ), "<br />\n" ) . "<br />\n";
        }
 
        // @fixed
@@ -385,10 +241,7 @@ class CologneBlueTemplate extends BaseTemplate {
 
                // Use the regular navigational link, but replace its text. Everything else stays unmodified.
                $namespacesLinks = $this->data['content_navigation']['namespaces'];
-               $link = $this->processNavlinkForDocument( $namespacesLinks[ $key ] );
-               $link['text'] = wfMessage( $message )->text();
-
-               return $this->makeListItem( $message, $link, array( 'tag' => 'span' ) );
+               return $this->processBottomLink( $message,  $namespacesLinks[$key], $message );
        }
 
        /**
@@ -540,13 +393,48 @@ class CologneBlueTemplate extends BaseTemplate {
        }
 
        /**
-        * @param $heading string
-        * @return string
+        * Adds CologneBlue-specific items to the sidebar: qbedit, qbpageoptions and qbmyoptions menus.
+        *
+        * @param $bar sidebar data
+        * @return array modified sidebar data
         *
         * @fixed
         */
-       function menuHead( $heading ) {
-               return "\n<h6>" . htmlspecialchars( $heading ) . "</h6>";
+       function sidebarAdditions( $bar ) {
+               // "This page" and "Edit" menus
+               // We need to do some massaging here... we reuse all of the items, except for $...['views']['view'],
+               // as $...['namespaces']['main'] and $...['namespaces']['talk'] together serve the same purpose.
+               // We also don't use $...['variants'], these are displayed in the top menu.
+               $content_navigation = $this->data['content_navigation'];
+               $qbpageoptions = array_merge(
+                       $content_navigation['namespaces'],
+                       array(
+                               'history' => $content_navigation['views']['history'],
+                               'watch' => $content_navigation['actions']['watch'],
+                               'unwatch' => $content_navigation['actions']['unwatch'],
+                       )
+               );
+               $content_navigation['actions']['watch'] = null;
+               $content_navigation['actions']['unwatch'] = null;
+               $qbedit = array_merge(
+                       array(
+                               'edit' => $content_navigation['views']['edit'],
+                               'addsection' => $content_navigation['views']['addsection'],
+                       ),
+                       $content_navigation['actions']
+               );
+
+               // Personal tools ("My pages")
+               $qbmyoptions = $this->getPersonalTools();
+               foreach ( array ( 'logout', 'createaccount', 'login', 'anonlogin' ) as $key ) {
+                       $qbmyoptions[$key] = null;
+               }
+
+               $bar['qbedit'] = $qbedit;
+               $bar['qbpageoptions'] = $qbpageoptions;
+               $bar['qbmyoptions'] = $qbmyoptions;
+
+               return $bar;
        }
 
        /**
@@ -557,117 +445,83 @@ class CologneBlueTemplate extends BaseTemplate {
         *
         * @fixed
         */
-       function quickBar(){
-               $s = "\n<div id='quickbar'>";
-
-               $sep = "<br />\n";
-
-               $plain_bar = $this->data['sidebar'];
+       function quickBar() {
+               // Massage the sidebar. We want to:
+               // * place SEARCH at the beginning
+               // * add new portlets before TOOLBOX (or at the end, if it's missing)
+               // * remove LANGUAGES (langlinks are displayed elsewhere)
+               $orig_bar = $this->data['sidebar'];
                $bar = array();
-
-               // Massage the sidebar
-               // We want to place SEARCH at the beginning and a lot of stuff before TOOLBOX (or at the end, if it's missing)
-               $additions_done = false;
-               while ( !$additions_done ) {
-                       $bar = array(); // Empty it out
-
-                       // Always display search on top
-                       $bar['SEARCH'] = true;
-
-                       foreach ( $plain_bar as $heading => $links ) {
-                               if ( $heading == 'TOOLBOX' ) {
-                                       if( $links !== NULL ) {
-                                               // If this is not a toolbox prosthetic we inserted outselves, fill it out
-                                               $plain_bar['TOOLBOX'] = $this->getToolbox();
-                                       }
-
-                                       // And insert the stuff
-
-                                       // "This page" and "Edit" menus
-                                       // We need to do some massaging here... we reuse all of the items, except for $...['views']['view'],
-                                       // as $...['namespaces']['main'] and $...['namespaces']['talk'] together serve the same purpose.
-                                       // We also don't use $...['variants'], these are displayed in the top menu.
-                                       $content_navigation = $this->data['content_navigation'];
-                                       $qbpageoptions = array_merge(
-                                               $content_navigation['namespaces'],
-                                               array(
-                                                       'history' => $content_navigation['views']['history'],
-                                                       'watch' => $content_navigation['actions']['watch'],
-                                                       'unwatch' => $content_navigation['actions']['unwatch'],
-                                               )
-                                       );
-                                       $content_navigation['actions']['watch'] = null;
-                                       $content_navigation['actions']['unwatch'] = null;
-                                       $qbedit = array_merge(
-                                               array(
-                                                       'edit' => $content_navigation['views']['edit'],
-                                                       'addsection' => $content_navigation['views']['addsection'],
-                                               ),
-                                               $content_navigation['actions']
-                                       );
-                                       $bar['qbedit'] = $qbedit;
-                                       $bar['qbpageoptions'] = $qbpageoptions;
-
-                                       // Personal tools ("My pages")
-                                       $bar['qbmyoptions'] = $this->getPersonalTools();
-                                       foreach ( array ( 'logout', 'createaccount', 'login', 'anonlogin' ) as $key ) {
-                                               $bar['qbmyoptions'][$key] = null;
-                                       }
-
-                                       $additions_done = true;
-                               }
-
-                               // Re-insert current heading, unless it's SEARCH
-                               if ( $heading != 'SEARCH' ) {
-                                       $bar[$heading] = $plain_bar[$heading];
-                               }
+               $hasToolbox = false;
+
+               // Always display search first
+               $bar['SEARCH'] = true;
+               // Copy everything except for langlinks, inserting new items before toolbox
+               foreach ( $orig_bar as $heading => $data ) {
+                       if ( $heading == 'TOOLBOX' ) {
+                               // Insert the stuff
+                               $bar = $this->sidebarAdditions( $bar );
+                               $hasToolbox = true;
                        }
 
-                       // If TOOLBOX is missing, $additions_done is still false
-                       if ( !$additions_done ) {
-                               $plain_bar['TOOLBOX'] = false;
+                       if ( $heading != 'LANGUAGES' ) {
+                               $bar[$heading] = $data;
                        }
                }
+               // If toolbox is missing, add our items at the end
+               if ( !$hasToolbox ) {
+                       $bar = $this->sidebarAdditions( $bar );
+               }
 
-               foreach ( $bar as $heading => $links ) {
+
+               // Fill out special sidebar items with content
+               $orig_bar = $bar;
+               $bar = array();
+               foreach ( $orig_bar as $heading => $data ) {
                        if ( $heading == 'SEARCH' ) {
-                               $s .= $this->menuHead( wfMessage( 'qbfind' )->text() );
-                               $s .= $this->searchForm( 'sidebar' );
-                       } elseif ( $heading == 'LANGUAGES' ) {
-                               // discard these; we display languages below page content
-                       } elseif ( $links ) {
-                               if ( is_array( $links ) ) {
-                                       // Use the navigation heading from standard sidebar as the "browse" section
-                                       if ( $heading == 'navigation' ) {
-                                               $heading = 'qbbrowse';
-                                       }
-                                       if ( $heading == 'TOOLBOX' ) {
-                                               $heading = 'toolbox';
-                                       }
+                               $bar['qbfind'] = $this->searchForm( 'sidebar' );
+                       } elseif ( $heading == 'TOOLBOX' ) {
+                               $bar['toolbox'] = $this->getToolbox();
+                       } elseif ( $heading == 'navigation' ) {
+                               // Use the navigation heading from standard sidebar as the "browse" section
+                               $bar['qbbrowse'] = $data;
+                       } else {
+                               $bar[$heading] = $data;
+                       }
+               }
 
-                                       $headingMsg = wfMessage( $heading );
-                                       $any_link = false;
-                                       $t = $this->menuHead( $headingMsg->exists() ? $headingMsg->escaped() : htmlspecialchars( $heading ) );
 
-                                       foreach ( $links as $key => $link ) {
-                                               // Can be empty due to rampant sidebar massaging we're doing above
-                                               if ( $link ) {
-                                                       $any_link = true;
-                                                       $t .= $this->makeListItem( $key, $link, array( 'tag' => 'span' ) ) . $sep;
-                                               }
-                                       }
+               // Output the sidebar
+               $s = "<div id='quickbar'>\n";
+
+               foreach ( $bar as $heading => $data ) {
+                       $headingMsg = wfMessage( $heading );
+                       $headingHTML = "<h6>" . ( $headingMsg->exists() ? $headingMsg->escaped() : htmlspecialchars( $heading ) ) . "</h6>";
+                       $portletId = Sanitizer::escapeId( "p-$heading" );
+                       $listHTML = "";
 
-                                       if ( $any_link ) {
-                                               $s .= $t;
+                       if ( is_array( $data ) ) {
+                               // $data is an array of links
+                               foreach ( $data as $key => $link ) {
+                                       // Can be empty due to how the sidebar additions are done
+                                       if ( $link ) {
+                                               $listHTML .= $this->makeListItem( $key, $link );
                                        }
-                               } else {
-                                       // $links can be a HTML string
-                                       $s .= $links;
                                }
+                               if ( $listHTML ) {
+                                       $listHTML = "<ul>$listHTML</ul>";
+                               }
+                       } else {
+                               // $data is a HTML <ul>-list string
+                               $listHTML = $data;
+                       }
+
+                       if ( $listHTML ) {
+                               $s .= "<div class=\"portlet\" id=\"$portletId\">\n$headingHTML\n$listHTML\n</div>\n";
                        }
                }
 
-               $s .= $sep . "\n</div>\n";
+               $s .= "</div>\n";
                return $s;
        }
 
index aac786d..0d9615f 100644 (file)
@@ -70,6 +70,10 @@ textarea {
        display: inline;
 }
 
+#cb-ca-edit {
+       font-weight: bold;
+}
+
 #pagestats {
        font-family: Verdana, Arial, sans-serif;
        color: black;
@@ -110,6 +114,14 @@ textarea {
        margin-top: 0;
 }
 
+#quickbar .portlet ul,
+#quickbar .portlet li {
+       list-style-type: none;
+       margin: 0;
+       padding: 0;
+       line-height: inherit;
+}
+
 h1 {
        color: #666666;
        font-family: Verdana, Arial, sans-serif;
@@ -156,7 +168,7 @@ a.stub, #quickbar a.stub {
        text-decoration: none;
 }
 
-a.new, #quickbar a.new {
+a.new, #quickbar span.new a, #footer span.new a {
        color: #CC2200;
 }
 
index 20182b4..a550d97 100644 (file)
@@ -112,6 +112,16 @@ img.thumbborder {
        border: 1px solid #dddddd;
 }
 
+/**
+ * Edit forms
+ */
+#editform textarea {
+       display: block;
+       -moz-box-sizing: border-box;
+       -webkit-box-sizing: border-box;
+       box-sizing: border-box;
+}
+
 /**
  * Basic styles for the user login and create account forms
  */
index 8f771e9..ed4e8c5 100644 (file)
@@ -448,6 +448,11 @@ th.mw-revdel-checkbox {
        text-align: center;
 }
 
+/* red links; see bug 36276 */
+a.new {
+       color: #BA0000;
+}
+
 /* feed links */
 a.feedlink {
        /* @embed */
index cae08af..c2c00db 100644 (file)
@@ -91,10 +91,9 @@ window.importStylesheet = function( page ) {
 
 window.importStylesheetURI = function( url, media ) {
        var l = document.createElement( 'link' );
-       l.type = 'text/css';
        l.rel = 'stylesheet';
        l.href = url;
-       if( media ) {
+       if ( media ) {
                l.media = media;
        }
        document.getElementsByTagName('head')[0].appendChild( l );
index 7149551..80cdcda 100644 (file)
@@ -150,6 +150,11 @@ textarea {
        width: 100%;
        padding: .1em;
 }
+#editform textarea {
+       -moz-box-sizing: border-box;
+       -webkit-box-sizing: border-box;
+       box-sizing: border-box;
+}
 
 #searchBody {
        text-align: center;
index 27843a3..2f20fbc 100644 (file)
@@ -6217,6 +6217,46 @@ pst
 [[Category:{{echo|Foo}}|{{echo|Bar}}]]
 !! end
 
+!! test
+Category / paragraph interactions
+!! input
+Foo [[Category:Baz]] Bar
+
+Foo [[Category:Baz]]
+Bar
+
+Foo
+[[Category:Baz]]
+Bar
+
+Foo
+[[Category:Baz]] Bar
+
+Foo
+[[Category:Baz]]
+ [[Category:Baz]]
+[[Category:Baz]]
+Bar
+
+[[Category:Baz]]
+ [[Category:Baz]]
+[[Category:Baz]]
+
+[[Category:Baz]]
+ {{echo|[[Category:Baz]]}}
+[[Category:Baz]]
+!! result
+<p>Foo Bar
+</p><p>Foo
+Bar
+</p><p>Foo
+Bar
+</p><p>Foo Bar
+</p><p>Foo
+Bar
+</p>
+!! end
+
 ###
 ### Inter-language links
 ###
@@ -11517,6 +11557,740 @@ disabled
 </p>
 !!end
 
+#### The following section of tests are primarily to test
+#### wikitext escaping capabilities of Parsoid.
+#### A lot of the tests are disabled for the PHP parser either
+#### because of minor newline diffs or other reasons.
+#### As Parsoid serializer can handle newlines and other HTML
+#### more robustly, some of these tests might get reenabled
+#### for the PHP parser.
+
+#### --------------- Headings ---------------
+#### 0. Unnested
+#### 1. Nested inside html <h1>=foo=</h1>
+#### 2. Outside heading nest on a single line <h1>foo</h1>*bar
+#### 3. Nested inside html with wikitext split by html tags
+#### 4. No escape needed
+#### 5. Empty headings <h1></h1>
+#### 6. Heading chars in SOL context
+#### ----------------------------------------
+!! test
+Headings: 0. Unnested
+!! input
+<nowiki>=foo=</nowiki>
+
+<nowiki>=foo</nowiki>''a''=
+!! result
+<p>=foo=
+</p><p>=foo<i>a</i>=
+</p>
+!!end
+
+!! test
+Headings: 1. Nested inside html 
+!! options
+disabled
+!! input
+=<nowiki>=foo=</nowiki>=
+==<nowiki>=foo=</nowiki>==
+===<nowiki>=foo=</nowiki>===
+====<nowiki>=foo=</nowiki>====
+=====<nowiki>=foo=</nowiki>=====
+======<nowiki>=foo=</nowiki>======
+!! result
+<h1>=foo=</h1>
+<h2>=foo=</h2>
+<h3>=foo=</h3>
+<h4>=foo=</h4>
+<h5>=foo=</h5>
+<h6>=foo=</h6>
+!!end
+
+!! test
+Headings: 2. Outside heading nest on a single line <h1>foo</h1>*bar
+!! options
+disabled
+!! input
+=foo=
+<nowiki>*bar</nowiki>
+=foo=
+=bar
+=foo=
+<nowiki>=bar=</nowiki>
+!! result
+<h1>foo</h1>*bar
+<h1>foo</h1>=bar
+<h1>foo</h1>=bar=
+!!end
+
+!! test
+Headings: 3. Nested inside html with wikitext split by html tags 
+!! options
+disabled
+!! input
+=<nowiki>=</nowiki>'''bold'''foo==
+!! result
+<h1>=<b>bold</b>foo=</h1>
+!!end
+
+!! test
+Headings: 4. No escaping needed (testing just h1 and h2)
+!! options
+disabled
+!! input
+==foo=
+=foo==
+===foo==
+==foo===
+=''=''foo==
+===
+!! result
+<h1>=foo</h1>
+<h1>foo=</h1>
+<h2>=foo</h2>
+<h2>foo=</h2>
+<h1><i>=</i>foo=</h1>
+<h1>=</h1>
+!!end
+
+!! test
+Headings: 5. Empty headings
+!! options
+disabled
+!! input
+=<nowiki></nowiki>=
+==<nowiki></nowiki>==
+===<nowiki></nowiki>===
+====<nowiki></nowiki>====
+=====<nowiki></nowiki>=====
+======<nowiki></nowiki>======
+!! result
+<h1></h1>
+<h2></h2>
+<h3></h3>
+<h4></h4>
+<h5></h5>
+<h6></h6>
+!!end
+
+!! test
+Headings: 6. Heading chars in SOL context
+!! options
+disabled
+!! input
+<!--cmt--><nowiki>=h1=</nowiki>
+!! result
+<p><!--cmt-->=h1=
+</p>
+!!end
+
+#### --------------- Lists ---------------
+#### 0. Outside nests (*foo, etc.)
+#### 1. Nested inside html <ul><li>*foo</li></ul>
+#### 2. Inside definition lists
+#### 3. Only bullets at start should be escaped
+#### 4. No escapes needed
+#### 5. No unnecessary escapes
+#### 6. Escape bullets in SOL position
+#### 7. Escape bullets in a multi-line context
+#### ----------------------------------------
+
+!! test
+Lists: 0. Outside nests 
+!! input
+<nowiki>*foo</nowiki>
+
+<nowiki>#foo</nowiki>
+!! result
+<p>*foo
+</p><p>#foo
+</p>
+!!end
+
+!! test
+Lists: 1. Nested inside html
+!! input
+*<nowiki>*foo</nowiki>
+
+*<nowiki>#foo</nowiki>
+
+*<nowiki>:foo</nowiki>
+
+*<nowiki>;foo</nowiki>
+
+#<nowiki>*foo</nowiki>
+
+#<nowiki>#foo</nowiki>
+
+#<nowiki>:foo</nowiki>
+
+#<nowiki>;foo</nowiki>
+!! result
+<ul><li>*foo
+</li></ul>
+<ul><li>#foo
+</li></ul>
+<ul><li>:foo
+</li></ul>
+<ul><li>;foo
+</li></ul>
+<ol><li>*foo
+</li></ol>
+<ol><li>#foo
+</li></ol>
+<ol><li>:foo
+</li></ol>
+<ol><li>;foo
+</li></ol>
+
+!!end
+
+!! test
+Lists: 2. Inside definition lists
+!! input
+;<nowiki>;foo</nowiki>
+
+;<nowiki>:foo</nowiki>
+
+;<nowiki>:foo</nowiki>
+:bar
+
+:<nowiki>:foo</nowiki>
+!! result
+<dl><dt>;foo
+</dt></dl>
+<dl><dt>:foo
+</dt></dl>
+<dl><dt>:foo
+</dt><dd>bar
+</dd></dl>
+<dl><dd>:foo
+</dd></dl>
+
+!!end
+
+!! test
+Lists: 3. Only bullets at start of text should be escaped
+!! input
+*<nowiki>*foo*bar</nowiki>
+
+*<nowiki>*foo</nowiki>''it''*bar
+!! result
+<ul><li>*foo*bar
+</li></ul>
+<ul><li>*foo<i>it</i>*bar
+</li></ul>
+
+!!end
+
+!! test
+Lists: 4. No escapes needed
+!! options
+disabled
+!! input
+*foo*bar
+
+*''foo''*bar
+
+*[[Foo]]: bar
+!! result
+<ul><li>foo*bar
+</li></ul>
+<ul><li><i>foo</i>*bar
+</li></ul>
+<ul><li><a href="Foo" rel="mw:WikiLink">Foo</a>: bar
+</li></ul>
+!!end
+
+!! test
+Lists: 5. No unnecessary escapes
+!! input
+* bar <span><nowiki>[[foo]]</nowiki></span>
+
+*=bar <span><nowiki>[[foo]]</nowiki></span>
+
+*[[bar <span><nowiki>[[foo]]</nowiki></span>
+
+*<nowiki>]]bar </nowiki><span><nowiki>[[foo]]</nowiki></span>
+
+*=bar <span>foo]]</span>=
+!! result
+<ul><li> bar <span>[[foo]]</span>
+</li></ul>
+<ul><li>=bar <span>[[foo]]</span>
+</li></ul>
+<ul><li>[[bar <span>[[foo]]</span>
+</li></ul>
+<ul><li>]]bar <span>[[foo]]</span>
+</li></ul>
+<ul><li>=bar <span>foo]]</span>=
+</li></ul>
+
+!!end
+
+!! test
+Lists: 6. Escape bullets in SOL position
+!! options
+disabled
+!! input
+<!--cmt--><nowiki>*foo</nowiki>
+!! result
+<p><!--cmt-->*foo
+</p>
+!!end
+
+!! test
+Lists: 7. Escape bullets in a multi-line context 
+!! input
+<nowiki>a
+*b</nowiki>
+!! result
+<p>a
+*b
+</p>
+!!end
+
+#### --------------- HRs ---------------
+#### 1. Single line
+#### -----------------------------------
+
+!! test
+HRs: 1. Single line 
+!! options
+disabled
+!! input
+----
+<nowiki>----</nowiki>
+----
+<nowiki>=foo=</nowiki>
+----
+<nowiki>*foo</nowiki>
+!! result
+<hr/>----
+<hr/>=foo=
+<hr/>*foo
+!! end
+
+#### --------------- Tables ---------------
+#### 1a. Simple example
+#### 1b. No escaping needed (!foo)
+#### 1c. No escaping needed (|foo)
+#### 1d. No escaping needed (|}foo)
+####
+#### 2a. Nested in td (<td>foo|bar</td>)
+#### 2b. Nested in td (<td>foo||bar</td>)
+#### 2c. Nested in td -- no escaping needed(<td>foo!!bar</td>)
+####
+#### 3a. Nested in th (<th>foo!bar</th>)
+#### 3b. Nested in th (<th>foo!!bar</th>)
+#### 3c. Nested in th -- no escaping needed(<th>foo||bar</th>)
+####
+#### 4a. Escape -
+#### 4b. Escape +
+#### 4c. No escaping needed
+#### --------------------------------------
+
+!! test
+Tables: 1a. Simple example
+!! input
+<nowiki>{|
+|}</nowiki>
+!! result
+<p>{|
+|}
+</p>
+!! end
+
+!! test
+Tables: 1b. No escaping needed
+!! input
+!foo
+!! result
+<p>!foo
+</p>
+!! end
+
+!! test
+Tables: 1c. No escaping needed
+!! input
+|foo
+!! result
+<p>|foo
+</p>
+!! end
+
+!! test
+Tables: 1d. No escaping needed
+!! input
+|}foo
+!! result
+<p>|}foo
+</p>
+!! end
+
+!! test
+Tables: 2a. Nested in td
+!! options
+disabled
+!! input
+{|
+|<nowiki>foo|bar</nowiki>
+|}
+!! result
+<table>
+<tr><td>foo|bar
+</td></tr></table>
+
+!! end
+
+!! test
+Tables: 2b. Nested in td
+!! options
+disabled
+!! input
+{|
+|<nowiki>foo||bar</nowiki>
+|''it''<nowiki>foo||bar</nowiki>
+|}
+!! result
+<table>
+<tr><td>foo||bar
+</td><td><i>it</i>foo||bar
+</td></tr></table>
+
+!! end
+
+!! test
+Tables: 2c. Nested in td -- no escaping needed
+!! options
+disabled
+!! input
+{|
+|foo!!bar
+|}
+!! result
+<table>
+<tr><td>foo!!bar
+</td></tr></table>
+
+!! end
+
+!! test
+Tables: 3a. Nested in th
+!! options
+disabled
+!! input
+{|
+!foo!bar
+|}
+!! result
+<table>
+<tr><th>foo!bar
+</th></tr></table>
+
+!! end
+
+!! test
+Tables: 3b. Nested in th
+!! options
+disabled
+!! input
+{|
+!<nowiki>foo!!bar</nowiki>
+|}
+!! result
+<table>
+<tr><th>foo!!bar
+</th></tr></table>
+
+!! end
+
+!! test
+Tables: 3c. Nested in th -- no escaping needed
+!! options
+disabled
+!! input
+{|
+!foo||bar
+|}
+!! result
+<table>
+<tr><th>foo||bar
+</th></tr></table>
+
+!! end
+
+!! test
+Tables: 4a. Escape -
+!! options
+disabled
+!! input
+{|
+|-
+!-bar
+|-
+|<nowiki>-bar</nowiki>
+|}
+!! result
+<table><tbody>
+<tr><th>-bar</th></tr>
+<tr><td>-bar</td></tr>
+</tbody></table>
+!! end
+
+!! test
+Tables: 4b. Escape +
+!! options
+disabled
+!! input
+{|
+|-
+!+bar
+|-
+|<nowiki>+bar</nowiki>
+|}
+!! result
+<table><tbody>
+<tr><th>+bar</th></tr>
+<tr><td>+bar</td></tr>
+</tbody></table>
+!! end
+
+!! test
+Tables: 4c. No escaping needed
+!! options
+disabled
+!! input
+{|
+|-
+|foo-bar
+|foo+bar
+|-
+|''foo''-bar
+|''foo''+bar
+|}
+!! result
+<table><tbody>
+<tr><td>foo-bar</td><td>foo+bar</td></tr>
+<tr><td><i>foo</i>-bar</td><td><i>foo</i>+bar</td></tr>
+</tbody></table>
+!! end
+
+#### --------------- Links ---------------
+#### 1. Quote marks in link text
+#### 2. Wikilinks: Escapes needed
+#### 3. Wikilinks: No escapes needed
+#### 4. Extlinks: Escapes needed
+#### 5. Extlinks: No escapes needed
+#### --------------------------------------
+!! test
+Links 1. Quote marks in link text
+!! options
+disabled
+!! input
+[[Foo|<nowiki>Foo''boo''</nowiki>]]
+!! result
+<a rel="mw:WikiLink" href="Foo" data-parsoid="{&quot;tsr&quot;:[0,7],&quot;contentPos&quot;:[5,5],&quot;src&quot;:&quot;[[Foo]]&quot;,&quot;bsp&quot;:[0,7],&quot;stx&quot;:&quot;simple&quot;}">Foo''boo''</a>
+!! end
+
+!! test
+Links 2. WikiLinks: Escapes needed
+!! options
+disabled
+!! input
+[[Foo|<nowiki>[Foobar]</nowiki>]]
+[[Foo|<nowiki>Foobar]</nowiki>]]
+[[Foo|<nowiki>x [Foobar] x</nowiki>]]
+[[Foo|<nowiki>x [http://google.com g] x</nowiki>]]
+[[Foo|<nowiki>[[Bar]]</nowiki>]]
+[[Foo|<nowiki>x [[Bar]] x</nowiki>]]
+[[Foo|<nowiki>|Bar</nowiki>]]
+!! result
+<a href="Foo" rel="mw:WikiLink">[Foobar]</a>
+<a href="Foo" rel="mw:WikiLink">Foobar]</a>
+<a href="Foo" rel="mw:WikiLink">x [Foobar] x</a>
+<a href="Foo" rel="mw:WikiLink">x [http://google.com g] x</a>
+<a href="Foo" rel="mw:WikiLink">[[Bar]]</a>
+<a href="Foo" rel="mw:WikiLink">x [[Bar]] x</a>
+<a href="Foo" rel="mw:WikiLink">|Bar</a>
+!! end
+
+!! test
+Links 3. WikiLinks: No escapes needed
+!! options
+disabled
+!! input
+[[Foo|[Foobar]]
+[[Foo|foo|bar]]
+!! result
+<a href="Foo" rel="mw:WikiLink">[Foobar</a>
+<a href="Foo" rel="mw:WikiLink">foo|bar</a>
+!! end
+
+!! test
+Links 4. ExtLinks: Escapes needed
+!! options
+disabled
+!! input
+[http://google.com <nowiki>[google]</nowiki>]
+[http://google.com <nowiki>google]</nowiki>]
+!! result
+<a href="http://google.com" rel="mw:ExtLink">[google]</a>
+<a href="http://google.com" rel="mw:ExtLink">google]</a>
+!! end
+
+!! test
+Links 5. ExtLinks: No escapes needed
+!! options
+disabled
+!! input
+[http://google.com [google]
+!! result
+<a href="http://google.com" rel="mw:ExtLink">[google</a>
+!! end
+
+#### --------------- Quotes ---------------
+#### 1. Quotes inside <b> and <i>
+#### 2. Link fragments separated by <i> and <b> tags
+#### 3. Link fragments inside <i> and <b>
+#### --------------------------------------
+!! test
+1. Quotes inside <b> and <i>
+!! input
+''<nowiki>'foo'</nowiki>''
+''<nowiki>''foo''</nowiki>''
+''<nowiki>'''foo'''</nowiki>''
+'''<nowiki>'foo'</nowiki>'''
+'''<nowiki>''foo''</nowiki>'''
+'''<nowiki>'''foo'''</nowiki>'''
+'''<nowiki>foo'</nowiki>''<nowiki>bar'</nowiki>''baz'''
+!! result
+<p><i>'foo'</i>
+<i>''foo''</i>
+<i>'''foo'''</i>
+<b>'foo'</b>
+<b>''foo''</b>
+<b>'''foo'''</b>
+<b>foo'<i>bar'</i>baz</b>
+</p>
+!! end
+
+!! test
+2. Link fragments separated by <i> and <b> tags
+!! input
+[[''foo''<nowiki>hello]]</nowiki>
+
+[['''foo'''<nowiki>hello]]</nowiki>
+!! result
+<p>[[<i>foo</i>hello]]
+</p><p>[[<b>foo</b>hello]]
+</p>
+!! end
+
+!! test
+2. Link fragments inside <i> and <b>
+(FIXME: Escaping one or both of [[ and ]] is also acceptable -- 
+ this is one of the shortcomings of this format)
+!! input
+''[[foo''<nowiki>]]</nowiki>
+
+'''[[foo'''<nowiki>]]</nowiki>
+!! result
+<p><i>[[foo</i>]]
+</p><p><b>[[foo</b>]]
+</p>
+!! end
+
+#### --------------- Paragraphs ---------------
+#### 1. No unnecessary escapes
+#### --------------------------------------
+
+!! test
+1. No unnecessary escapes
+!! input
+bar <span><nowiki>[[foo]]</nowiki></span>
+
+=bar <span><nowiki>[[foo]]</nowiki></span>
+
+[[bar <span><nowiki>[[foo]]</nowiki></span>
+
+<nowiki>]]bar </nowiki><span><nowiki>[[foo]]</nowiki></span>
+
+<nowiki>=bar </nowiki><span>foo]]</span>=
+!! result
+<p>bar <span>[[foo]]</span>
+</p><p>=bar <span>[[foo]]</span>
+</p><p>[[bar <span>[[foo]]</span>
+</p><p>]]bar <span>[[foo]]</span>
+</p><p>=bar <span>foo]]</span>=
+</p>
+!!end
+
+#### --------------- PRE ------------------
+#### 1. Leading space in SOL context should be escaped
+#### --------------------------------------
+!! test
+1. Leading space in SOL context should be escaped
+!! options
+disabled
+!! input
+<nowiki> foo</nowiki>
+<!--cmt--><nowiki> foo</nowiki>
+!! result
+<p> foo
+<!--cmt--> foo
+</p>
+!! end
+
+#### --------------- HTML tags ---------------
+#### 1. a tags
+#### 2. other tags
+#### 3. multi-line html tag
+#### --------------------------------------
+!! test
+1. a tags
+!! options
+disabled
+!! input
+<a href="http://google.com">google</a>
+!! result
+&lt;a href=&quot;http://google.com&quot;&gt;google&lt;/a&gt;
+!! end
+
+!! test
+2. other tags
+!! input
+<nowiki><div>foo</div>
+<div style="color:red">foo</div></nowiki>
+!! result
+<p>&lt;div&gt;foo&lt;/div&gt;
+&lt;div style=&quot;color:red&quot;&gt;foo&lt;/div&gt;
+</p>
+!! end
+
+!! test
+3. multi-line html tag
+!! input
+<nowiki><div
+>foo</div
+></nowiki>
+!! result
+<p>&lt;div
+&gt;foo&lt;/div
+&gt;
+</p>
+!! end
+
+#### --------------- Others ---------------
+!! test
+Escaping nowikis
+!! input
+&lt;nowiki&gt;foo&lt;/nowiki&gt;
+!! result
+<p>&lt;nowiki&gt;foo&lt;/nowiki&gt;
+</p>
+!! end
+
 TODO:
 more images
 more tables
index ce65d49..211de26 100644 (file)
@@ -26,6 +26,9 @@ class ExportDemoTest extends DumpTestCase {
                $dom = new DomDocument();
                $dom->load( $fname );
 
+               // Ensure, the demo is for the current version
+               $this->assertEquals( $dom->documentElement->getAttribute( 'version' ), $version, 'export-demo.xml should have the current version' );
+
                try {
                        $this->assertTrue( $dom->schemaValidate( "../../docs/export-" . $version . ".xsd" ),
                                "schemaValidate has found an error" );
index 7db8c8c..32c84ef 100644 (file)
@@ -19,8 +19,11 @@ class CdbTest extends MediaWikiTestCase {
                        $this->markTestSkipped( "Temp dir isn't writable" );
                }
 
-               $w1 = new CdbWriter_PHP( "$dir/php.cdb" );
-               $w2 = new CdbWriter_DBA( "$dir/dba.cdb" );
+               $phpcdbfile = $this->getNewTempFile();
+               $dbacdbfile = $this->getNewTempFile();
+
+               $w1 = new CdbWriter_PHP( $phpcdbfile );
+               $w2 = new CdbWriter_DBA( $dbacdbfile );
 
                $data = array();
                for ( $i = 0; $i < 1000; $i++ ) {
@@ -38,13 +41,13 @@ class CdbTest extends MediaWikiTestCase {
                $w2->close();
 
                $this->assertEquals(
-                       md5_file( "$dir/dba.cdb" ),
-                       md5_file( "$dir/php.cdb" ),
+                       md5_file( $phpcdbfile ),
+                       md5_file( $dbacdbfile ),
                        'same hash'
                );
 
-               $r1 = new CdbReader_PHP( "$dir/php.cdb" );
-               $r2 = new CdbReader_DBA( "$dir/dba.cdb" );
+               $r1 = new CdbReader_PHP( $phpcdbfile );
+               $r2 = new CdbReader_DBA( $dbacdbfile );
 
                foreach ( $data as $key => $value ) {
                        if ( $key === '' ) {
@@ -62,8 +65,6 @@ class CdbTest extends MediaWikiTestCase {
                        $this->cdbAssert( "DBA error", $key, $v2, $value );
                }
 
-               unlink( "$dir/dba.cdb" );
-               unlink( "$dir/php.cdb" );
        }
 
        private function randomString() {
index 6dc1568..fb20ce6 100644 (file)
@@ -3,6 +3,7 @@
 * @group ContentHandler
 * @group Database
 * ^--- important, causes temporary tables to be used instead of the real database
+* @group medium
 **/
 
 class WikiPageTest extends MediaWikiLangTestCase {
@@ -60,7 +61,8 @@ class WikiPageTest extends MediaWikiLangTestCase {
         */
        protected function newPage( $title, $model = null ) {
                if ( is_string( $title ) ) {
-                       $title = Title::newFromText( $title );
+                       $ns = $this->getDefaultWikitextNS();
+                       $title = Title::newFromText( $title, $ns );
                }
 
                $p = new WikiPage( $title );
@@ -79,11 +81,7 @@ class WikiPageTest extends MediaWikiLangTestCase {
         * @return WikiPage
         */
        protected function createPage( $page, $text, $model = null ) {
-               if ( is_string( $page ) ) {
-                       $page = Title::newFromText( $page );
-               }
-
-               if ( $page instanceof Title ) {
+               if ( is_string( $page ) || $page instanceof Title ) {
                        $page = $this->newPage( $page, $model );
                }
 
@@ -94,9 +92,8 @@ class WikiPageTest extends MediaWikiLangTestCase {
        }
 
        public function testDoEditContent() {
-               $title = Title::newFromText( "WikiPageTest_testDoEditContent" );
-
-               $page = $this->newPage( $title );
+               $page = $this->newPage( "WikiPageTest_testDoEditContent" );
+               $title = $page->getTitle();
 
                $content = ContentHandler::makeContent( "[[Lorem ipsum]] dolor sit amet, consetetur sadipscing elitr, sed diam "
                                                . " nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.",
@@ -543,10 +540,16 @@ class WikiPageTest extends MediaWikiLangTestCase {
         * @dataProvider provideIsCountable
         */
        public function testIsCountable( $title, $model, $text, $mode, $expected ) {
-               global $wgArticleCountMethod;
+               global $wgContentHandlerUseDB;
 
-               $oldArticleCountMethod = $wgArticleCountMethod;
-               $wgArticleCountMethod = $mode;
+               $this->setMwGlobals( 'wgArticleCountMethod', $mode );
+
+               $title = Title::newFromText( $title );
+
+               if ( !$wgContentHandlerUseDB && ContentHandler::getDefaultModelFor( $title ) != $model ) {
+                       $this->markTestSkipped( "Can not use non-default content model $model for "
+                               . $title->getPrefixedDBkey() . " with \wgArticleCountMethod disabled." );
+               }
 
                $page = $this->createPage( $title, $text, $model );
                $hasLinks = wfGetDB( DB_SLAVE )->selectField( 'pagelinks', 1,
@@ -557,8 +560,6 @@ class WikiPageTest extends MediaWikiLangTestCase {
                $v = $page->isCountable();
                $w = $page->isCountable( $editInfo );
 
-               $wgArticleCountMethod = $oldArticleCountMethod;
-
                $this->assertEquals( $expected, $v, "isCountable( null ) returned unexpected value " . var_export( $v, true )
                                                                                        . " instead of " . var_export( $expected, true ) . " in mode `$mode` for text \"$text\"" );
 
index de52175..7e054a4 100644 (file)
@@ -41,15 +41,31 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
 
        }
 
+       /**
+        * Does the API request and returns the result.
+        *
+        * The returned value is an array containing
+        * - the result data (array)
+        * - the request (WebRequest)
+        * - the session data of the request (array)
+        * - if $appendModule is true, the Api module $module
+        *
+        * @param array $params
+        * @param array|null $session
+        * @param bool $appendModule
+        * @param User|null $user
+        *
+        * @return array
+        */
        protected function doApiRequest( array $params, array $session = null, $appendModule = false, User $user = null ) {
                global $wgRequest, $wgUser;
 
                if ( is_null( $session ) ) {
-                       # re-use existing global session by default
+                       // re-use existing global session by default
                        $session = $wgRequest->getSessionArray();
                }
 
-               # set up global environment
+               // set up global environment
                if ( $user ) {
                        $wgUser = $user;
                }
@@ -57,21 +73,22 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
                $wgRequest = new FauxRequest( $params, true, $session );
                RequestContext::getMain()->setRequest( $wgRequest );
 
-               # set up local environment
+               // set up local environment
                $context = $this->apiContext->newTestContext( $wgRequest, $wgUser );
 
                $module = new ApiMain( $context, true );
 
-               # run it!
+               // run it!
                $module->execute();
 
-               # construct result
+               // construct result
                $results = array(
                        $module->getResultData(),
                        $context->getRequest(),
                        $context->getRequest()->getSessionArray()
                );
-               if( $appendModule ) {
+
+               if ( $appendModule ) {
                        $results[] = $module;
                }
 
index 216de84..faa9abd 100644 (file)
@@ -54,6 +54,52 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
                $this->assertEquals( count( $expected ), $i, 'Unexpected number of rows' );
        }
 
+       public static function provideAddQuotes() {
+               return array(
+                       array( // #0: empty
+                               '', "''"
+                       ),
+                       array( // #1: simple
+                               'foo bar', "'foo bar'"
+                       ),
+                       array( // #2: including quote
+                               'foo\'bar', "'foo''bar'"
+                       ),
+                       array( // #3: including \0 (must be represented as hex, per https://bugs.php.net/bug.php?id=63419)
+                               "x\0y",
+                               "x'780079'",
+                       ),
+                       array( // #4: blob object (must be represented as hex)
+                               new Blob( "hello" ),
+                               "x'68656c6c6f'",
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider provideAddQuotes()
+        */
+       public function testAddQuotes( $value, $expected ) {
+               // check quoting
+               $db = new DatabaseSqliteStandalone( ':memory:' );
+               $this->assertEquals( $expected, $db->addQuotes( $value ), 'string not quoted as expected' );
+
+               // ok, quoting works as expected, now try a round trip.
+               $re = $db->query( 'select ' . $db->addQuotes( $value ) );
+
+               $this->assertTrue( $re !== false, 'query failed' );
+
+               if ( $row = $re->fetchRow() ) {
+                       if ( $value instanceof Blob ) {
+                               $value = $value->fetch();
+                       }
+
+                       $this->assertEquals( $value, $row[0], 'string mangled by the database' );
+               } else {
+                       $this->fail( 'query returned no result' );
+               }
+       }
+
        public function testReplaceVars() {
                $this->assertEquals( 'foo', $this->replaceVars( 'foo' ), "Don't break anything accidentally" );
 
diff --git a/tests/phpunit/includes/filebackend/FileBackendTest.php b/tests/phpunit/includes/filebackend/FileBackendTest.php
new file mode 100644 (file)
index 0000000..da36e90
--- /dev/null
@@ -0,0 +1,1995 @@
+<?php
+
+/**
+ * @group FileRepo
+ * @group FileBackend
+ * @group medium
+ */
+class FileBackendTest extends MediaWikiTestCase {
+       private $backend, $multiBackend;
+       private $filesToPrune = array();
+       private static $backendToUse;
+
+       protected function setUp() {
+               global $wgFileBackends;
+               parent::setUp();
+               $tmpPrefix = wfTempDir() . '/filebackend-unittest-' . time() . '-' . mt_rand();
+               if ( $this->getCliArg( 'use-filebackend=' ) ) {
+                       if ( self::$backendToUse ) {
+                               $this->singleBackend = self::$backendToUse;
+                       } else {
+                               $name = $this->getCliArg( 'use-filebackend=' );
+                               $useConfig = array();
+                               foreach ( $wgFileBackends as $conf ) {
+                                       if ( $conf['name'] == $name ) {
+                                               $useConfig = $conf;
+                                               break;
+                                       }
+                               }
+                               $useConfig['name'] = 'localtesting'; // swap name
+                               $useConfig['shardViaHashLevels'] = array( // test sharding
+                                       'unittest-cont1' => array( 'levels' => 1, 'base' => 16, 'repeat' => 1 )
+                               );
+                               $class = $useConfig['class'];
+                               self::$backendToUse = new $class( $useConfig );
+                               $this->singleBackend = self::$backendToUse;
+                       }
+               } else {
+                       $this->singleBackend = new FSFileBackend( array(
+                               'name'        => 'localtesting',
+                               'lockManager' => 'fsLockManager',
+                               #'parallelize' => 'implicit',
+                               'containerPaths' => array(
+                                       'unittest-cont1' => "{$tmpPrefix}-localtesting-cont1",
+                                       'unittest-cont2' => "{$tmpPrefix}-localtesting-cont2" )
+                       ) );
+               }
+               $this->multiBackend = new FileBackendMultiWrite( array(
+                       'name'        => 'localtesting',
+                       'lockManager' => 'fsLockManager',
+                       'parallelize' => 'implicit',
+                       'backends'    => array(
+                               array(
+                                       'name'          => 'localmultitesting1',
+                                       'class'         => 'FSFileBackend',
+                                       'lockManager'   => 'nullLockManager',
+                                       'containerPaths' => array(
+                                               'unittest-cont1' => "{$tmpPrefix}-localtestingmulti1-cont1",
+                                               'unittest-cont2' => "{$tmpPrefix}-localtestingmulti1-cont2" ),
+                                       'isMultiMaster' => false
+                               ),
+                               array(
+                                       'name'          => 'localmultitesting2',
+                                       'class'         => 'FSFileBackend',
+                                       'lockManager'   => 'nullLockManager',
+                                       'containerPaths' => array(
+                                               'unittest-cont1' => "{$tmpPrefix}-localtestingmulti2-cont1",
+                                               'unittest-cont2' => "{$tmpPrefix}-localtestingmulti2-cont2" ),
+                                       'isMultiMaster' => true
+                               )
+                       )
+               ) );
+               $this->filesToPrune = array();
+       }
+
+       private static function baseStorePath() {
+               return 'mwstore://localtesting';
+       }
+
+       private function backendClass() {
+               return get_class( $this->backend );
+       }
+
+       /**
+        * @dataProvider provider_testIsStoragePath
+        */
+       public function testIsStoragePath( $path, $isStorePath ) {
+               $this->assertEquals( $isStorePath, FileBackend::isStoragePath( $path ),
+                       "FileBackend::isStoragePath on path '$path'" );
+       }
+
+       function provider_testIsStoragePath() {
+               return array(
+                       array( 'mwstore://', true ),
+                       array( 'mwstore://backend', true ),
+                       array( 'mwstore://backend/container', true ),
+                       array( 'mwstore://backend/container/', true ),
+                       array( 'mwstore://backend/container/path', true ),
+                       array( 'mwstore://backend//container/', true ),
+                       array( 'mwstore://backend//container//', true ),
+                       array( 'mwstore://backend//container//path', true ),
+                       array( 'mwstore:///', true ),
+                       array( 'mwstore:/', false ),
+                       array( 'mwstore:', false ),
+               );
+       }
+
+       /**
+        * @dataProvider provider_testSplitStoragePath
+        */
+       public function testSplitStoragePath( $path, $res ) {
+               $this->assertEquals( $res, FileBackend::splitStoragePath( $path ),
+                       "FileBackend::splitStoragePath on path '$path'" );
+       }
+
+       function provider_testSplitStoragePath() {
+               return array(
+                       array( 'mwstore://backend/container', array( 'backend', 'container', '' ) ),
+                       array( 'mwstore://backend/container/', array( 'backend', 'container', '' ) ),
+                       array( 'mwstore://backend/container/path', array( 'backend', 'container', 'path' ) ),
+                       array( 'mwstore://backend/container//path', array( 'backend', 'container', '/path' ) ),
+                       array( 'mwstore://backend//container/path', array( null, null, null ) ),
+                       array( 'mwstore://backend//container//path', array( null, null, null ) ),
+                       array( 'mwstore://', array( null, null, null ) ),
+                       array( 'mwstore://backend', array( null, null, null ) ),
+                       array( 'mwstore:///', array( null, null, null ) ),
+                       array( 'mwstore:/', array( null, null, null ) ),
+                       array( 'mwstore:', array( null, null, null ) )
+               );
+       }
+
+       /**
+        * @dataProvider provider_normalizeStoragePath
+        */
+       public function testNormalizeStoragePath( $path, $res ) {
+               $this->assertEquals( $res, FileBackend::normalizeStoragePath( $path ),
+                       "FileBackend::normalizeStoragePath on path '$path'" );
+       }
+
+       function provider_normalizeStoragePath() {
+               return array(
+                       array( 'mwstore://backend/container', 'mwstore://backend/container' ),
+                       array( 'mwstore://backend/container/', 'mwstore://backend/container' ),
+                       array( 'mwstore://backend/container/path', 'mwstore://backend/container/path' ),
+                       array( 'mwstore://backend/container//path', 'mwstore://backend/container/path' ),
+                       array( 'mwstore://backend/container///path', 'mwstore://backend/container/path' ),
+                       array( 'mwstore://backend/container///path//to///obj', 'mwstore://backend/container/path/to/obj',
+                       array( 'mwstore://', null ),
+                       array( 'mwstore://backend', null ),
+                       array( 'mwstore://backend//container/path', null ),
+                       array( 'mwstore://backend//container//path', null ),
+                       array( 'mwstore:///', null ),
+                       array( 'mwstore:/', null ),
+                       array( 'mwstore:', null ), )
+               );
+       }
+
+       /**
+        * @dataProvider provider_testParentStoragePath
+        */
+       public function testParentStoragePath( $path, $res ) {
+               $this->assertEquals( $res, FileBackend::parentStoragePath( $path ),
+                       "FileBackend::parentStoragePath on path '$path'" );
+       }
+
+       function provider_testParentStoragePath() {
+               return array(
+                       array( 'mwstore://backend/container/path/to/obj', 'mwstore://backend/container/path/to' ),
+                       array( 'mwstore://backend/container/path/to', 'mwstore://backend/container/path' ),
+                       array( 'mwstore://backend/container/path', 'mwstore://backend/container' ),
+                       array( 'mwstore://backend/container', null ),
+                       array( 'mwstore://backend/container/path/to/obj/', 'mwstore://backend/container/path/to' ),
+                       array( 'mwstore://backend/container/path/to/', 'mwstore://backend/container/path' ),
+                       array( 'mwstore://backend/container/path/', 'mwstore://backend/container' ),
+                       array( 'mwstore://backend/container/', null ),
+               );
+       }
+
+       /**
+        * @dataProvider provider_testExtensionFromPath
+        */
+       public function testExtensionFromPath( $path, $res ) {
+               $this->assertEquals( $res, FileBackend::extensionFromPath( $path ),
+                       "FileBackend::extensionFromPath on path '$path'" );
+       }
+
+       public static function provider_testExtensionFromPath() {
+               return array(
+                       array( 'mwstore://backend/container/path.txt', 'txt' ),
+                       array( 'mwstore://backend/container/path.svg.png', 'png' ),
+                       array( 'mwstore://backend/container/path', '' ),
+                       array( 'mwstore://backend/container/path.', '' ),
+               );
+       }
+
+       /**
+        * @dataProvider provider_testStore
+        */
+       public function testStore( $op ) {
+               $this->filesToPrune[] = $op['src'];
+
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestStore( $op );
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestStore( $op );
+               $this->filesToPrune[] = $op['src']; # avoid file leaking
+               $this->tearDownFiles();
+       }
+
+       private function doTestStore( $op ) {
+               $backendName = $this->backendClass();
+
+               $source = $op['src'];
+               $dest = $op['dst'];
+               $this->prepare( array( 'dir' => dirname( $dest ) ) );
+
+               file_put_contents( $source, "Unit test file" );
+
+               if ( isset( $op['overwrite'] ) || isset( $op['overwriteSame'] ) ) {
+                       $this->backend->store( $op );
+               }
+
+               $status = $this->backend->doOperation( $op );
+
+               $this->assertGoodStatus( $status,
+                       "Store from $source to $dest succeeded without warnings ($backendName)." );
+               $this->assertEquals( true, $status->isOK(),
+                       "Store from $source to $dest succeeded ($backendName)." );
+               $this->assertEquals( array( 0 => true ), $status->success,
+                       "Store from $source to $dest has proper 'success' field in Status ($backendName)." );
+               $this->assertEquals( true, file_exists( $source ),
+                       "Source file $source still exists ($backendName)." );
+               $this->assertEquals( true, $this->backend->fileExists( array( 'src' => $dest ) ),
+                       "Destination file $dest exists ($backendName)." );
+
+               $this->assertEquals( filesize( $source ),
+                       $this->backend->getFileSize( array( 'src' => $dest ) ),
+                       "Destination file $dest has correct size ($backendName)." );
+
+               $props1 = FSFile::getPropsFromPath( $source );
+               $props2 = $this->backend->getFileProps( array( 'src' => $dest ) );
+               $this->assertEquals( $props1, $props2,
+                       "Source and destination have the same props ($backendName)." );
+
+               $this->assertBackendPathsConsistent( array( $dest ) );
+       }
+
+       public static function provider_testStore() {
+               $cases = array();
+
+               $tmpName = TempFSFile::factory( "unittests_", 'txt' )->getPath();
+               $toPath = self::baseStorePath() . '/unittest-cont1/e/fun/obj1.txt';
+               $op = array( 'op' => 'store', 'src' => $tmpName, 'dst' => $toPath );
+               $cases[] = array(
+                       $op, // operation
+                       $tmpName, // source
+                       $toPath, // dest
+               );
+
+               $op2 = $op;
+               $op2['overwrite'] = true;
+               $cases[] = array(
+                       $op2, // operation
+                       $tmpName, // source
+                       $toPath, // dest
+               );
+
+               $op2 = $op;
+               $op2['overwriteSame'] = true;
+               $cases[] = array(
+                       $op2, // operation
+                       $tmpName, // source
+                       $toPath, // dest
+               );
+
+               return $cases;
+       }
+
+       /**
+        * @dataProvider provider_testCopy
+        */
+       public function testCopy( $op ) {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestCopy( $op );
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestCopy( $op );
+               $this->tearDownFiles();
+       }
+
+       private function doTestCopy( $op ) {
+               $backendName = $this->backendClass();
+
+               $source = $op['src'];
+               $dest = $op['dst'];
+               $this->prepare( array( 'dir' => dirname( $source ) ) );
+               $this->prepare( array( 'dir' => dirname( $dest ) ) );
+
+               if ( isset( $op['ignoreMissingSource'] ) ) {
+                       $status = $this->backend->doOperation( $op );
+                       $this->assertGoodStatus( $status,
+                               "Move from $source to $dest succeeded without warnings ($backendName)." );
+                       $this->assertEquals( array( 0 => true ), $status->success,
+                               "Move from $source to $dest has proper 'success' field in Status ($backendName)." );
+                       $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $source ) ),
+                               "Source file $source does not exist ($backendName)." );
+                       $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $dest ) ),
+                               "Destination file $dest does not exist ($backendName)." );
+                       return; // done
+               }
+
+               $status = $this->backend->doOperation(
+                       array( 'op' => 'create', 'content' => 'blahblah', 'dst' => $source ) );
+               $this->assertGoodStatus( $status,
+                       "Creation of file at $source succeeded ($backendName)." );
+
+               if ( isset( $op['overwrite'] ) || isset( $op['overwriteSame'] ) ) {
+                       $this->backend->copy( $op );
+               }
+
+               $status = $this->backend->doOperation( $op );
+
+               $this->assertGoodStatus( $status,
+                       "Copy from $source to $dest succeeded without warnings ($backendName)." );
+               $this->assertEquals( true, $status->isOK(),
+                       "Copy from $source to $dest succeeded ($backendName)." );
+               $this->assertEquals( array( 0 => true ), $status->success,
+                       "Copy from $source to $dest has proper 'success' field in Status ($backendName)." );
+               $this->assertEquals( true, $this->backend->fileExists( array( 'src' => $source ) ),
+                       "Source file $source still exists ($backendName)." );
+               $this->assertEquals( true, $this->backend->fileExists( array( 'src' => $dest ) ),
+                       "Destination file $dest exists after copy ($backendName)." );
+
+               $this->assertEquals(
+                       $this->backend->getFileSize( array( 'src' => $source ) ),
+                       $this->backend->getFileSize( array( 'src' => $dest ) ),
+                       "Destination file $dest has correct size ($backendName)." );
+
+               $props1 = $this->backend->getFileProps( array( 'src' => $source ) );
+               $props2 = $this->backend->getFileProps( array( 'src' => $dest ) );
+               $this->assertEquals( $props1, $props2,
+                       "Source and destination have the same props ($backendName)." );
+
+               $this->assertBackendPathsConsistent( array( $source, $dest ) );
+       }
+
+       public static function provider_testCopy() {
+               $cases = array();
+
+               $source = self::baseStorePath() . '/unittest-cont1/e/file.txt';
+               $dest = self::baseStorePath() . '/unittest-cont2/a/fileMoved.txt';
+
+               $op = array( 'op' => 'copy', 'src' => $source, 'dst' => $dest );
+               $cases[] = array(
+                       $op, // operation
+                       $source, // source
+                       $dest, // dest
+               );
+
+               $op2 = $op;
+               $op2['overwrite'] = true;
+               $cases[] = array(
+                       $op2, // operation
+                       $source, // source
+                       $dest, // dest
+               );
+
+               $op2 = $op;
+               $op2['overwriteSame'] = true;
+               $cases[] = array(
+                       $op2, // operation
+                       $source, // source
+                       $dest, // dest
+               );
+
+               $op2 = $op;
+               $op2['ignoreMissingSource'] = true;
+               $cases[] = array(
+                       $op2, // operation
+                       $source, // source
+                       $dest, // dest
+               );
+
+               return $cases;
+       }
+
+       /**
+        * @dataProvider provider_testMove
+        */
+       public function testMove( $op ) {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestMove( $op );
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestMove( $op );
+               $this->tearDownFiles();
+       }
+
+       private function doTestMove( $op ) {
+               $backendName = $this->backendClass();
+
+               $source = $op['src'];
+               $dest = $op['dst'];
+               $this->prepare( array( 'dir' => dirname( $source ) ) );
+               $this->prepare( array( 'dir' => dirname( $dest ) ) );
+
+               if ( isset( $op['ignoreMissingSource'] ) ) {
+                       $status = $this->backend->doOperation( $op );
+                       $this->assertGoodStatus( $status,
+                               "Move from $source to $dest succeeded without warnings ($backendName)." );
+                       $this->assertEquals( array( 0 => true ), $status->success,
+                               "Move from $source to $dest has proper 'success' field in Status ($backendName)." );
+                       $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $source ) ),
+                               "Source file $source does not exist ($backendName)." );
+                       $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $dest ) ),
+                               "Destination file $dest does not exist ($backendName)." );
+                       return; // done
+               }
+
+               $status = $this->backend->doOperation(
+                       array( 'op' => 'create', 'content' => 'blahblah', 'dst' => $source ) );
+               $this->assertGoodStatus( $status,
+                       "Creation of file at $source succeeded ($backendName)." );
+
+               if ( isset( $op['overwrite'] ) || isset( $op['overwriteSame'] ) ) {
+                       $this->backend->copy( $op );
+               }
+
+               $status = $this->backend->doOperation( $op );
+               $this->assertGoodStatus( $status,
+                       "Move from $source to $dest succeeded without warnings ($backendName)." );
+               $this->assertEquals( true, $status->isOK(),
+                       "Move from $source to $dest succeeded ($backendName)." );
+               $this->assertEquals( array( 0 => true ), $status->success,
+                       "Move from $source to $dest has proper 'success' field in Status ($backendName)." );
+               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $source ) ),
+                       "Source file $source does not still exists ($backendName)." );
+               $this->assertEquals( true, $this->backend->fileExists( array( 'src' => $dest ) ),
+                       "Destination file $dest exists after move ($backendName)." );
+
+               $this->assertNotEquals(
+                       $this->backend->getFileSize( array( 'src' => $source ) ),
+                       $this->backend->getFileSize( array( 'src' => $dest ) ),
+                       "Destination file $dest has correct size ($backendName)." );
+
+               $props1 = $this->backend->getFileProps( array( 'src' => $source ) );
+               $props2 = $this->backend->getFileProps( array( 'src' => $dest ) );
+               $this->assertEquals( false, $props1['fileExists'],
+                       "Source file does not exist accourding to props ($backendName)." );
+               $this->assertEquals( true, $props2['fileExists'],
+                       "Destination file exists accourding to props ($backendName)." );
+
+               $this->assertBackendPathsConsistent( array( $source, $dest ) );
+       }
+
+       public static function provider_testMove() {
+               $cases = array();
+
+               $source = self::baseStorePath() . '/unittest-cont1/e/file.txt';
+               $dest = self::baseStorePath() . '/unittest-cont2/a/fileMoved.txt';
+
+               $op = array( 'op' => 'move', 'src' => $source, 'dst' => $dest );
+               $cases[] = array(
+                       $op, // operation
+                       $source, // source
+                       $dest, // dest
+               );
+
+               $op2 = $op;
+               $op2['overwrite'] = true;
+               $cases[] = array(
+                       $op2, // operation
+                       $source, // source
+                       $dest, // dest
+               );
+
+               $op2 = $op;
+               $op2['overwriteSame'] = true;
+               $cases[] = array(
+                       $op2, // operation
+                       $source, // source
+                       $dest, // dest
+               );
+
+               $op2 = $op;
+               $op2['ignoreMissingSource'] = true;
+               $cases[] = array(
+                       $op2, // operation
+                       $source, // source
+                       $dest, // dest
+               );
+
+               return $cases;
+       }
+
+       /**
+        * @dataProvider provider_testDelete
+        */
+       public function testDelete( $op, $withSource, $okStatus ) {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestDelete( $op, $withSource, $okStatus );
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestDelete( $op, $withSource, $okStatus );
+               $this->tearDownFiles();
+       }
+
+       private function doTestDelete( $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,
+                               "Deletion of file at $source succeeded without warnings ($backendName)." );
+                       $this->assertEquals( true, $status->isOK(),
+                               "Deletion of file at $source succeeded ($backendName)." );
+                       $this->assertEquals( array( 0 => true ), $status->success,
+                               "Deletion of file at $source has proper 'success' field in Status ($backendName)." );
+               } else {
+                       $this->assertEquals( false, $status->isOK(),
+                               "Deletion of file at $source failed ($backendName)." );
+               }
+
+               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $source ) ),
+                       "Source file $source does not exist after move ($backendName)." );
+
+               $this->assertFalse(
+                       $this->backend->getFileSize( array( 'src' => $source ) ),
+                       "Source file $source has correct size (false) ($backendName)." );
+
+               $props1 = $this->backend->getFileProps( array( 'src' => $source ) );
+               $this->assertFalse( $props1['fileExists'],
+                       "Source file $source does not exist according to props ($backendName)." );
+
+               $this->assertBackendPathsConsistent( array( $source ) );
+       }
+
+       public static function provider_testDelete() {
+               $cases = array();
+
+               $source = self::baseStorePath() . '/unittest-cont1/e/myfacefile.txt';
+
+               $op = array( 'op' => 'delete', 'src' => $source );
+               $cases[] = array(
+                       $op, // operation
+                       true, // with source
+                       true // succeeds
+               );
+
+               $cases[] = array(
+                       $op, // operation
+                       false, // without source
+                       false // fails
+               );
+
+               $op['ignoreMissingSource'] = true;
+               $cases[] = array(
+                       $op, // operation
+                       false, // without source
+                       true // succeeds
+               );
+
+               return $cases;
+       }
+
+       /**
+        * @dataProvider provider_testCreate
+        */
+       public function testCreate( $op, $alreadyExists, $okStatus, $newSize ) {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestCreate( $op, $alreadyExists, $okStatus, $newSize );
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestCreate( $op, $alreadyExists, $okStatus, $newSize );
+               $this->tearDownFiles();
+       }
+
+       private function doTestCreate( $op, $alreadyExists, $okStatus, $newSize ) {
+               $backendName = $this->backendClass();
+
+               $dest = $op['dst'];
+               $this->prepare( array( 'dir' => dirname( $dest ) ) );
+
+               $oldText = 'blah...blah...waahwaah';
+               if ( $alreadyExists ) {
+                       $status = $this->backend->doOperation(
+                               array( 'op' => 'create', 'content' => $oldText, 'dst' => $dest ) );
+                       $this->assertGoodStatus( $status,
+                               "Creation of file at $dest succeeded ($backendName)." );
+               }
+
+               $status = $this->backend->doOperation( $op );
+               if ( $okStatus ) {
+                       $this->assertGoodStatus( $status,
+                               "Creation of file at $dest succeeded without warnings ($backendName)." );
+                       $this->assertEquals( true, $status->isOK(),
+                               "Creation of file at $dest succeeded ($backendName)." );
+                       $this->assertEquals( array( 0 => true ), $status->success,
+                               "Creation of file at $dest has proper 'success' field in Status ($backendName)." );
+               } else {
+                       $this->assertEquals( false, $status->isOK(),
+                               "Creation of file at $dest failed ($backendName)." );
+               }
+
+               $this->assertEquals( true, $this->backend->fileExists( array( 'src' => $dest ) ),
+                       "Destination file $dest exists after creation ($backendName)." );
+
+               $props1 = $this->backend->getFileProps( array( 'src' => $dest ) );
+               $this->assertEquals( true, $props1['fileExists'],
+                       "Destination file $dest exists according to props ($backendName)." );
+               if ( $okStatus ) { // file content is what we saved
+                       $this->assertEquals( $newSize, $props1['size'],
+                               "Destination file $dest has expected size according to props ($backendName)." );
+                       $this->assertEquals( $newSize,
+                               $this->backend->getFileSize( array( 'src' => $dest ) ),
+                               "Destination file $dest has correct size ($backendName)." );
+               } else { // file content is some other previous text
+                       $this->assertEquals( strlen( $oldText ), $props1['size'],
+                               "Destination file $dest has original size according to props ($backendName)." );
+                       $this->assertEquals( strlen( $oldText ),
+                               $this->backend->getFileSize( array( 'src' => $dest ) ),
+                               "Destination file $dest has original size according to props ($backendName)." );
+               }
+
+               $this->assertBackendPathsConsistent( array( $dest ) );
+       }
+
+       /**
+        * @dataProvider provider_testCreate
+        */
+       public static function provider_testCreate() {
+               $cases = array();
+
+               $dest = self::baseStorePath() . '/unittest-cont2/a/myspacefile.txt';
+
+               $op = array( 'op' => 'create', 'content' => 'test test testing', 'dst' => $dest );
+               $cases[] = array(
+                       $op, // operation
+                       false, // no dest already exists
+                       true, // succeeds
+                       strlen( $op['content'] )
+               );
+
+               $op2 = $op;
+               $op2['content'] = "\n";
+               $cases[] = array(
+                       $op2, // operation
+                       false, // no dest already exists
+                       true, // succeeds
+                       strlen( $op2['content'] )
+               );
+
+               $op2 = $op;
+               $op2['content'] = "fsf\n waf 3kt";
+               $cases[] = array(
+                       $op2, // operation
+                       true, // dest already exists
+                       false, // fails
+                       strlen( $op2['content'] )
+               );
+
+               $op2 = $op;
+               $op2['content'] = "egm'g gkpe gpqg eqwgwqg";
+               $op2['overwrite'] = true;
+               $cases[] = array(
+                       $op2, // operation
+                       true, // dest already exists
+                       true, // succeeds
+                       strlen( $op2['content'] )
+               );
+
+               $op2 = $op;
+               $op2['content'] = "39qjmg3-qg";
+               $op2['overwriteSame'] = true;
+               $cases[] = array(
+                       $op2, // operation
+                       true, // dest already exists
+                       false, // succeeds
+                       strlen( $op2['content'] )
+               );
+
+               return $cases;
+       }
+
+       public function testDoQuickOperations() {
+               $this->backend = $this->singleBackend;
+               $this->doTestDoQuickOperations();
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->doTestDoQuickOperations();
+               $this->tearDownFiles();
+       }
+
+       private function doTestDoQuickOperations() {
+               $backendName = $this->backendClass();
+
+               $base = self::baseStorePath();
+               $files = array(
+                       "$base/unittest-cont1/e/fileA.a",
+                       "$base/unittest-cont1/e/fileB.a",
+                       "$base/unittest-cont1/e/fileC.a"
+               );
+               $ops = array();
+               $purgeOps = array();
+               foreach ( $files as $path ) {
+                       $status = $this->prepare( array( 'dir' => dirname( $path ) ) );
+                       $this->assertGoodStatus( $status,
+                               "Preparing $path succeeded without warnings ($backendName)." );
+                       $ops[] = array( 'op' => 'create', 'dst' => $path, 'content' => mt_rand(0,50000) );
+                       $purgeOps[] = array( 'op' => 'delete', 'src' => $path );
+               }
+               $purgeOps[] = array( 'op' => 'null' );
+               $status = $this->backend->doQuickOperations( $ops );
+               $this->assertGoodStatus( $status,
+                       "Creation of source files succeeded ($backendName)." );
+
+               foreach ( $files as $file ) {
+                       $this->assertTrue( $this->backend->fileExists( array( 'src' => $file ) ),
+                               "File $file exists." );
+               }
+
+               $status = $this->backend->doQuickOperations( $purgeOps );
+               $this->assertGoodStatus( $status,
+                       "Quick deletion of source files succeeded ($backendName)." );
+
+               foreach ( $files as $file ) {
+                       $this->assertFalse( $this->backend->fileExists( array( 'src' => $file ) ),
+                               "File $file purged." );
+               }
+       }
+
+       /**
+        * @dataProvider provider_testConcatenate
+        */
+       public function testConcatenate( $op, $srcs, $srcsContent, $alreadyExists, $okStatus ) {
+               $this->filesToPrune[] = $op['dst'];
+
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestConcatenate( $op, $srcs, $srcsContent, $alreadyExists, $okStatus );
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestConcatenate( $op, $srcs, $srcsContent, $alreadyExists, $okStatus );
+               $this->filesToPrune[] = $op['dst']; # avoid file leaking
+               $this->tearDownFiles();
+       }
+
+       private function doTestConcatenate( $params, $srcs, $srcsContent, $alreadyExists, $okStatus ) {
+               $backendName = $this->backendClass();
+
+               $expContent = '';
+               // Create sources
+               $ops = array();
+               foreach ( $srcs as $i => $source ) {
+                       $this->prepare( array( 'dir' => dirname( $source ) ) );
+                       $ops[] = array(
+                               'op'      => 'create', // operation
+                               'dst'     => $source, // source
+                               'content' => $srcsContent[$i]
+                       );
+                       $expContent .= $srcsContent[$i];
+               }
+               $status = $this->backend->doOperations( $ops );
+
+               $this->assertGoodStatus( $status,
+                       "Creation of source files succeeded ($backendName)." );
+
+               $dest = $params['dst'];
+               if ( $alreadyExists ) {
+                       $ok = file_put_contents( $dest, 'blah...blah...waahwaah' ) !== false;
+                       $this->assertEquals( true, $ok,
+                               "Creation of file at $dest succeeded ($backendName)." );
+               } else {
+                       $ok = file_put_contents( $dest, '' ) !== false;
+                       $this->assertEquals( true, $ok,
+                               "Creation of 0-byte file at $dest succeeded ($backendName)." );
+               }
+
+               // Combine the files into one
+               $status = $this->backend->concatenate( $params );
+               if ( $okStatus ) {
+                       $this->assertGoodStatus( $status,
+                               "Creation of concat file at $dest succeeded without warnings ($backendName)." );
+                       $this->assertEquals( true, $status->isOK(),
+                               "Creation of concat file at $dest succeeded ($backendName)." );
+               } else {
+                       $this->assertEquals( false, $status->isOK(),
+                               "Creation of concat file at $dest failed ($backendName)." );
+               }
+
+               if ( $okStatus ) {
+                       $this->assertEquals( true, is_file( $dest ),
+                               "Dest concat file $dest exists after creation ($backendName)." );
+               } else {
+                       $this->assertEquals( true, is_file( $dest ),
+                               "Dest concat file $dest exists after failed creation ($backendName)." );
+               }
+
+               $contents = file_get_contents( $dest );
+               $this->assertNotEquals( false, $contents, "File at $dest exists ($backendName)." );
+
+               if ( $okStatus ) {
+                       $this->assertEquals( $expContent, $contents,
+                               "Concat file at $dest has correct contents ($backendName)." );
+               } else {
+                       $this->assertNotEquals( $expContent, $contents,
+                               "Concat file at $dest has correct contents ($backendName)." );
+               }
+       }
+
+       function provider_testConcatenate() {
+               $cases = array();
+
+               $rand = mt_rand( 0, 2000000000 ) . time();
+               $dest = wfTempDir() . "/randomfile!$rand.txt";
+               $srcs = array(
+                       self::baseStorePath() . '/unittest-cont1/e/file1.txt',
+                       self::baseStorePath() . '/unittest-cont1/e/file2.txt',
+                       self::baseStorePath() . '/unittest-cont1/e/file3.txt',
+                       self::baseStorePath() . '/unittest-cont1/e/file4.txt',
+                       self::baseStorePath() . '/unittest-cont1/e/file5.txt',
+                       self::baseStorePath() . '/unittest-cont1/e/file6.txt',
+                       self::baseStorePath() . '/unittest-cont1/e/file7.txt',
+                       self::baseStorePath() . '/unittest-cont1/e/file8.txt',
+                       self::baseStorePath() . '/unittest-cont1/e/file9.txt',
+                       self::baseStorePath() . '/unittest-cont1/e/file10.txt'
+               );
+               $content = array(
+                       'egfage',
+                       'ageageag',
+                       'rhokohlr',
+                       'shgmslkg',
+                       'kenga',
+                       'owagmal',
+                       'kgmae',
+                       'g eak;g',
+                       'lkaem;a',
+                       'legma'
+               );
+               $params = array( 'srcs' => $srcs, 'dst' => $dest );
+
+               $cases[] = array(
+                       $params, // operation
+                       $srcs, // sources
+                       $content, // content for each source
+                       false, // no dest already exists
+                       true, // succeeds
+               );
+
+               $cases[] = array(
+                       $params, // operation
+                       $srcs, // sources
+                       $content, // content for each source
+                       true, // dest already exists
+                       false, // succeeds
+               );
+
+               return $cases;
+       }
+
+       /**
+        * @dataProvider provider_testGetFileStat
+        */
+       public function testGetFileStat( $path, $content, $alreadyExists ) {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestGetFileStat( $path, $content, $alreadyExists );
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestGetFileStat( $path, $content, $alreadyExists );
+               $this->tearDownFiles();
+       }
+
+       private function doTestGetFileStat( $path, $content, $alreadyExists ) {
+               $backendName = $this->backendClass();
+
+               if ( $alreadyExists ) {
+                       $this->prepare( array( 'dir' => dirname( $path ) ) );
+                       $status = $this->create( array( 'dst' => $path, 'content' => $content ) );
+                       $this->assertGoodStatus( $status,
+                               "Creation of file at $path succeeded ($backendName)." );
+
+                       $size = $this->backend->getFileSize( array( 'src' => $path ) );
+                       $time = $this->backend->getFileTimestamp( array( 'src' => $path ) );
+                       $stat = $this->backend->getFileStat( array( 'src' => $path ) );
+
+                       $this->assertEquals( strlen( $content ), $size,
+                               "Correct file size of '$path'" );
+                       $this->assertTrue( abs( time() - wfTimestamp( TS_UNIX, $time ) ) < 10,
+                               "Correct file timestamp of '$path'" );
+
+                       $size = $stat['size'];
+                       $time = $stat['mtime'];
+                       $this->assertEquals( strlen( $content ), $size,
+                               "Correct file size of '$path'" );
+                       $this->assertTrue( abs( time() - wfTimestamp( TS_UNIX, $time ) ) < 10,
+                               "Correct file timestamp of '$path'" );
+
+                       $this->backend->clearCache( array( $path ) );
+
+                       $size = $this->backend->getFileSize( array( 'src' => $path ) );
+
+                       $this->assertEquals( strlen( $content ), $size,
+                               "Correct file size of '$path'" );
+
+                       $this->backend->preloadCache( array( $path ) );
+
+                       $size = $this->backend->getFileSize( array( 'src' => $path ) );
+
+                       $this->assertEquals( strlen( $content ), $size,
+                               "Correct file size of '$path'" );
+               } else {
+                       $size = $this->backend->getFileSize( array( 'src' => $path ) );
+                       $time = $this->backend->getFileTimestamp( array( 'src' => $path ) );
+                       $stat = $this->backend->getFileStat( array( 'src' => $path ) );
+
+                       $this->assertFalse( $size, "Correct file size of '$path'" );
+                       $this->assertFalse( $time, "Correct file timestamp of '$path'" );
+                       $this->assertFalse( $stat, "Correct file stat of '$path'" );
+               }
+       }
+
+       function provider_testGetFileStat() {
+               $cases = array();
+
+               $base = self::baseStorePath();
+               $cases[] = array( "$base/unittest-cont1/e/b/z/some_file.txt", "some file contents", true );
+               $cases[] = array( "$base/unittest-cont1/e/b/some-other_file.txt", "", true );
+               $cases[] = array( "$base/unittest-cont1/e/b/some-diff_file.txt", null, false );
+
+               return $cases;
+       }
+
+       /**
+        * @dataProvider provider_testGetFileContents
+        */
+       public function testGetFileContents( $source, $content ) {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestGetFileContents( $source, $content );
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestGetFileContents( $source, $content );
+               $this->tearDownFiles();
+       }
+
+       private function doTestGetFileContents( $source, $content ) {
+               $backendName = $this->backendClass();
+
+               $srcs = (array)$source;
+               $content = (array)$content;
+               foreach ( $srcs as $i => $src ) {
+                       $this->prepare( array( 'dir' => dirname( $src ) ) );
+                       $status = $this->backend->doOperation(
+                               array( 'op' => 'create', 'content' => $content[$i], 'dst' => $src ) );
+                       $this->assertGoodStatus( $status,
+                               "Creation of file at $src succeeded ($backendName)." );
+               }
+
+               if ( is_array( $source ) ) {
+                       $contents = $this->backend->getFileContentsMulti( array( 'srcs' => $source ) );
+                       foreach ( $contents as $path => $data ) {
+                               $this->assertNotEquals( false, $data, "Contents of $path exists ($backendName)." );
+                               $this->assertEquals( current( $content ), $data, "Contents of $path is correct ($backendName)." );
+                               next( $content );
+                       }
+                       $this->assertEquals( $source, array_keys( $contents ), "Contents in right order ($backendName)." );
+                       $this->assertEquals( count( $source ), count( $contents ), "Contents array size correct ($backendName)." );
+               } else {
+                       $data = $this->backend->getFileContents( array( 'src' => $source ) );
+                       $this->assertNotEquals( false, $data, "Contents of $source exists ($backendName)." );
+                       $this->assertEquals( $content[0], $data, "Contents of $source is correct ($backendName)." );
+               }
+       }
+
+       function provider_testGetFileContents() {
+               $cases = array();
+
+               $base = self::baseStorePath();
+               $cases[] = array( "$base/unittest-cont1/e/b/z/some_file.txt", "some file contents" );
+               $cases[] = array( "$base/unittest-cont1/e/b/some-other_file.txt", "more file contents" );
+               $cases[] = array(
+                       array( "$base/unittest-cont1/e/a/x.txt", "$base/unittest-cont1/e/a/y.txt",
+                                "$base/unittest-cont1/e/a/z.txt" ),
+                       array( "contents xx", "contents xy", "contents xz" )
+               );
+
+               return $cases;
+       }
+
+       /**
+        * @dataProvider provider_testGetLocalCopy
+        */
+       public function testGetLocalCopy( $source, $content ) {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestGetLocalCopy( $source, $content );
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestGetLocalCopy( $source, $content );
+               $this->tearDownFiles();
+       }
+
+       private function doTestGetLocalCopy( $source, $content ) {
+               $backendName = $this->backendClass();
+
+               $srcs = (array)$source;
+               $content = (array)$content;
+               foreach ( $srcs as $i => $src ) {
+                       $this->prepare( array( 'dir' => dirname( $src ) ) );
+                       $status = $this->backend->doOperation(
+                               array( 'op' => 'create', 'content' => $content[$i], 'dst' => $src ) );
+                       $this->assertGoodStatus( $status,
+                               "Creation of file at $src succeeded ($backendName)." );
+               }
+
+               if ( is_array( $source ) ) {
+                       $tmpFiles = $this->backend->getLocalCopyMulti( array( 'srcs' => $source ) );
+                       foreach ( $tmpFiles as $path => $tmpFile ) {
+                               $this->assertNotNull( $tmpFile,
+                                       "Creation of local copy of $path succeeded ($backendName)." );
+                               $contents = file_get_contents( $tmpFile->getPath() );
+                               $this->assertNotEquals( false, $contents, "Local copy of $path exists ($backendName)." );
+                               $this->assertEquals( current( $content ), $contents, "Local copy of $path is correct ($backendName)." );
+                               next( $content );
+                       }
+                       $this->assertEquals( $source, array_keys( $tmpFiles ), "Local copies in right order ($backendName)." );
+                       $this->assertEquals( count( $source ), count( $tmpFiles ), "Local copies array size correct ($backendName)." );
+               } else {
+                       $tmpFile = $this->backend->getLocalCopy( array( 'src' => $source ) );
+                       $this->assertNotNull( $tmpFile,
+                               "Creation of local copy of $source succeeded ($backendName)." );
+                       $contents = file_get_contents( $tmpFile->getPath() );
+                       $this->assertNotEquals( false, $contents, "Local copy of $source exists ($backendName)." );
+                       $this->assertEquals( $content[0], $contents, "Local copy of $source is correct ($backendName)." );
+               }
+
+               $obj = new stdClass();
+               $tmpFile->bind( $obj );
+       }
+
+       function provider_testGetLocalCopy() {
+               $cases = array();
+
+               $base = self::baseStorePath();
+               $cases[] = array( "$base/unittest-cont1/e/a/z/some_file.txt", "some file contents" );
+               $cases[] = array( "$base/unittest-cont1/e/a/some-other_file.txt", "more file contents" );
+               $cases[] = array( "$base/unittest-cont1/e/a/\$odd&.txt", "test file contents" );
+               $cases[] = array(
+                       array( "$base/unittest-cont1/e/a/x.txt", "$base/unittest-cont1/e/a/y.txt",
+                                "$base/unittest-cont1/e/a/z.txt" ),
+                       array( "contents xx", "contents xy", "contents xz" )
+               );
+
+               return $cases;
+       }
+
+       /**
+        * @dataProvider provider_testGetLocalReference
+        */
+       public function testGetLocalReference( $source, $content ) {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestGetLocalReference( $source, $content );
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestGetLocalReference( $source, $content );
+               $this->tearDownFiles();
+       }
+
+       private function doTestGetLocalReference( $source, $content ) {
+               $backendName = $this->backendClass();
+
+               $srcs = (array)$source;
+               $content = (array)$content;
+               foreach ( $srcs as $i => $src ) {
+                       $this->prepare( array( 'dir' => dirname( $src ) ) );
+                       $status = $this->backend->doOperation(
+                               array( 'op' => 'create', 'content' => $content[$i], 'dst' => $src ) );
+                       $this->assertGoodStatus( $status,
+                               "Creation of file at $src succeeded ($backendName)." );
+               }
+
+               if ( is_array( $source ) ) {
+                       $tmpFiles = $this->backend->getLocalReferenceMulti( array( 'srcs' => $source ) );
+                       foreach ( $tmpFiles as $path => $tmpFile ) {
+                               $this->assertNotNull( $tmpFile,
+                                       "Creation of local copy of $path succeeded ($backendName)." );
+                               $contents = file_get_contents( $tmpFile->getPath() );
+                               $this->assertNotEquals( false, $contents, "Local ref of $path exists ($backendName)." );
+                               $this->assertEquals( current( $content ), $contents, "Local ref of $path is correct ($backendName)." );
+                               next( $content );
+                       }
+                       $this->assertEquals( $source, array_keys( $tmpFiles ), "Local refs in right order ($backendName)." );
+                       $this->assertEquals( count( $source ), count( $tmpFiles ), "Local refs array size correct ($backendName)." );
+               } else {
+                       $tmpFile = $this->backend->getLocalReference( array( 'src' => $source ) );
+                       $this->assertNotNull( $tmpFile,
+                               "Creation of local copy of $source succeeded ($backendName)." );
+                       $contents = file_get_contents( $tmpFile->getPath() );
+                       $this->assertNotEquals( false, $contents, "Local ref of $source exists ($backendName)." );
+                       $this->assertEquals( $content[0], $contents, "Local ref of $source is correct ($backendName)." );
+               }
+       }
+
+       function provider_testGetLocalReference() {
+               $cases = array();
+
+               $base = self::baseStorePath();
+               $cases[] = array( "$base/unittest-cont1/e/a/z/some_file.txt", "some file contents" );
+               $cases[] = array( "$base/unittest-cont1/e/a/some-other_file.txt", "more file contents" );
+               $cases[] = array( "$base/unittest-cont1/e/a/\$odd&.txt", "test file contents" );
+               $cases[] = array(
+                       array( "$base/unittest-cont1/e/a/x.txt", "$base/unittest-cont1/e/a/y.txt",
+                                "$base/unittest-cont1/e/a/z.txt" ),
+                       array( "contents xx", "contents xy", "contents xz" )
+               );
+
+               return $cases;
+       }
+
+       public function testGetLocalCopyAndReference404() {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestGetLocalCopyAndReference404();
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestGetLocalCopyAndReference404();
+               $this->tearDownFiles();
+       }
+
+       public function doTestGetLocalCopyAndReference404() {
+               $backendName = $this->backendClass();
+
+               $base = self::baseStorePath();
+
+               $tmpFile = $this->backend->getLocalCopy( array(
+                       'src' => "$base/unittest-cont1/not-there" ) );
+               $this->assertEquals( null, $tmpFile, "Local copy of not existing file is null ($backendName)." );
+
+               $tmpFile = $this->backend->getLocalReference( array(
+                       'src' => "$base/unittest-cont1/not-there" ) );
+               $this->assertEquals( null, $tmpFile, "Local ref of not existing file is null ($backendName)." );
+       }
+
+       /**
+        * @dataProvider provider_testPrepareAndClean
+        */
+       public function testPrepareAndClean( $path, $isOK ) {
+               $this->backend = $this->singleBackend;
+               $this->doTestPrepareAndClean( $path, $isOK );
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->doTestPrepareAndClean( $path, $isOK );
+               $this->tearDownFiles();
+       }
+
+       function provider_testPrepareAndClean() {
+               $base = self::baseStorePath();
+               return array(
+                       array( "$base/unittest-cont1/e/a/z/some_file1.txt", true ),
+                       array( "$base/unittest-cont2/a/z/some_file2.txt", true ),
+                       # Specific to FS backend with no basePath field set
+                       #array( "$base/unittest-cont3/a/z/some_file3.txt", false ),
+               );
+       }
+
+       private function doTestPrepareAndClean( $path, $isOK ) {
+               $backendName = $this->backendClass();
+
+               $status = $this->prepare( array( 'dir' => dirname( $path ) ) );
+               if ( $isOK ) {
+                       $this->assertGoodStatus( $status,
+                               "Preparing dir $path succeeded without warnings ($backendName)." );
+                       $this->assertEquals( true, $status->isOK(),
+                               "Preparing dir $path succeeded ($backendName)." );
+               } else {
+                       $this->assertEquals( false, $status->isOK(),
+                               "Preparing dir $path failed ($backendName)." );
+               }
+
+               $status = $this->backend->clean( array( 'dir' => dirname( $path ) ) );
+               if ( $isOK ) {
+                       $this->assertGoodStatus( $status,
+                               "Cleaning dir $path succeeded without warnings ($backendName)." );
+                       $this->assertEquals( true, $status->isOK(),
+                               "Cleaning dir $path succeeded ($backendName)." );
+               } else {
+                       $this->assertEquals( false, $status->isOK(),
+                               "Cleaning dir $path failed ($backendName)." );
+               }
+       }
+
+       public function testRecursiveClean() {
+               $this->backend = $this->singleBackend;
+               $this->doTestRecursiveClean();
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->doTestRecursiveClean();
+               $this->tearDownFiles();
+       }
+
+       private function doTestRecursiveClean() {
+               $backendName = $this->backendClass();
+
+               $base = self::baseStorePath();
+               $dirs = array(
+                       "$base/unittest-cont1/e/a",
+                       "$base/unittest-cont1/e/a/b",
+                       "$base/unittest-cont1/e/a/b/c",
+                       "$base/unittest-cont1/e/a/b/c/d0",
+                       "$base/unittest-cont1/e/a/b/c/d1",
+                       "$base/unittest-cont1/e/a/b/c/d2",
+                       "$base/unittest-cont1/e/a/b/c/d0/1",
+                       "$base/unittest-cont1/e/a/b/c/d0/2",
+                       "$base/unittest-cont1/e/a/b/c/d1/3",
+                       "$base/unittest-cont1/e/a/b/c/d1/4",
+                       "$base/unittest-cont1/e/a/b/c/d2/5",
+                       "$base/unittest-cont1/e/a/b/c/d2/6"
+               );
+               foreach ( $dirs as $dir ) {
+                       $status = $this->prepare( array( 'dir' => $dir ) );
+                       $this->assertGoodStatus( $status,
+                               "Preparing dir $dir succeeded without warnings ($backendName)." );
+               }
+
+               if ( $this->backend instanceof FSFileBackend ) {
+                       foreach ( $dirs as $dir ) {
+                               $this->assertEquals( true, $this->backend->directoryExists( array( 'dir' => $dir ) ),
+                                       "Dir $dir exists ($backendName)." );
+                       }
+               }
+
+               $status = $this->backend->clean(
+                       array( 'dir' => "$base/unittest-cont1", 'recursive' => 1 ) );
+               $this->assertGoodStatus( $status,
+                       "Recursive cleaning of dir $dir succeeded without warnings ($backendName)." );
+
+               foreach ( $dirs as $dir ) {
+                       $this->assertEquals( false, $this->backend->directoryExists( array( 'dir' => $dir ) ),
+                               "Dir $dir no longer exists ($backendName)." );
+               }
+       }
+
+       // @TODO: testSecure
+
+       public function testDoOperations() {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestDoOperations();
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestDoOperations();
+               $this->tearDownFiles();
+       }
+
+       private function doTestDoOperations() {
+               $base = self::baseStorePath();
+
+               $fileA = "$base/unittest-cont1/e/a/b/fileA.txt";
+               $fileAContents = '3tqtmoeatmn4wg4qe-mg3qt3 tq';
+               $fileB = "$base/unittest-cont1/e/a/b/fileB.txt";
+               $fileBContents = 'g-jmq3gpqgt3qtg q3GT ';
+               $fileC = "$base/unittest-cont1/e/a/b/fileC.txt";
+               $fileCContents = 'eigna[ogmewt 3qt g3qg flew[ag';
+               $fileD = "$base/unittest-cont1/e/a/b/fileD.txt";
+
+               $this->prepare( array( 'dir' => dirname( $fileA ) ) );
+               $this->create( array( 'dst' => $fileA, 'content' => $fileAContents ) );
+               $this->prepare( array( 'dir' => dirname( $fileB ) ) );
+               $this->create( array( 'dst' => $fileB, 'content' => $fileBContents ) );
+               $this->prepare( array( 'dir' => dirname( $fileC ) ) );
+               $this->create( array( 'dst' => $fileC, 'content' => $fileCContents ) );
+               $this->prepare( array( 'dir' => dirname( $fileD ) ) );
+
+               $status = $this->backend->doOperations( array(
+                       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 ),
+                       // Now: A:<A>, B:<B>, C:<A>, D:<empty>
+                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileD, 'overwrite' => 1 ),
+                       // Now: A:<A>, B:<B>, C:<empty>, D:<A>
+                       array( 'op' => 'move', 'src' => $fileB, 'dst' => $fileC ),
+                       // Now: A:<A>, B:<empty>, C:<B>, D:<A>
+                       array( 'op' => 'move', 'src' => $fileD, 'dst' => $fileA, 'overwriteSame' => 1 ),
+                       // Now: A:<A>, B:<empty>, C:<B>, D:<empty>
+                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileA, 'overwrite' => 1 ),
+                       // Now: A:<B>, B:<empty>, C:<empty>, D:<empty>
+                       array( 'op' => 'copy', 'src' => $fileA, 'dst' => $fileC ),
+                       // Now: A:<B>, B:<empty>, C:<B>, D:<empty>
+                       array( 'op' => 'move', 'src' => $fileA, 'dst' => $fileC, 'overwriteSame' => 1 ),
+                       // Now: A:<empty>, B:<empty>, C:<B>, D:<empty>
+                       array( 'op' => 'copy', 'src' => $fileC, 'dst' => $fileC, 'overwrite' => 1 ),
+                       // Does nothing
+                       array( 'op' => 'copy', 'src' => $fileC, 'dst' => $fileC, 'overwriteSame' => 1 ),
+                       // Does nothing
+                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileC, 'overwrite' => 1 ),
+                       // Does nothing
+                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileC, 'overwriteSame' => 1 ),
+                       // Does nothing
+                       array( 'op' => 'null' ),
+                       // Does nothing
+               ) );
+
+               $this->assertGoodStatus( $status, "Operation batch succeeded" );
+               $this->assertEquals( true, $status->isOK(), "Operation batch succeeded" );
+               $this->assertEquals( 13, count( $status->success ),
+                       "Operation batch has correct success array" );
+
+               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileA ) ),
+                       "File does not exist at $fileA" );
+               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileB ) ),
+                       "File does not exist at $fileB" );
+               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileD ) ),
+                       "File does not exist at $fileD" );
+
+               $this->assertEquals( true, $this->backend->fileExists( array( 'src' => $fileC ) ),
+                       "File exists at $fileC" );
+               $this->assertEquals( $fileBContents,
+                       $this->backend->getFileContents( array( 'src' => $fileC ) ),
+                       "Correct file contents of $fileC" );
+               $this->assertEquals( strlen( $fileBContents ),
+                       $this->backend->getFileSize( array( 'src' => $fileC ) ),
+                       "Correct file size of $fileC" );
+               $this->assertEquals( wfBaseConvert( sha1( $fileBContents ), 16, 36, 31 ),
+                       $this->backend->getFileSha1Base36( array( 'src' => $fileC ) ),
+                       "Correct file SHA-1 of $fileC" );
+       }
+
+       public function testDoOperationsPipeline() {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestDoOperationsPipeline();
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestDoOperationsPipeline();
+               $this->tearDownFiles();
+       }
+
+       // concurrency orientated
+       private function doTestDoOperationsPipeline() {
+               $base = self::baseStorePath();
+
+               $fileAContents = '3tqtmoeatmn4wg4qe-mg3qt3 tq';
+               $fileBContents = 'g-jmq3gpqgt3qtg q3GT ';
+               $fileCContents = 'eigna[ogmewt 3qt g3qg flew[ag';
+
+               $tmpNameA = TempFSFile::factory( "unittests_", 'txt' )->getPath();
+               file_put_contents( $tmpNameA, $fileAContents );
+               $tmpNameB = TempFSFile::factory( "unittests_", 'txt' )->getPath();
+               file_put_contents( $tmpNameB, $fileBContents );
+               $tmpNameC = TempFSFile::factory( "unittests_", 'txt' )->getPath();
+               file_put_contents( $tmpNameC, $fileCContents );
+
+               $this->filesToPrune[] = $tmpNameA; # avoid file leaking
+               $this->filesToPrune[] = $tmpNameB; # avoid file leaking
+               $this->filesToPrune[] = $tmpNameC; # avoid file leaking
+
+               $fileA = "$base/unittest-cont1/e/a/b/fileA.txt";
+               $fileB = "$base/unittest-cont1/e/a/b/fileB.txt";
+               $fileC = "$base/unittest-cont1/e/a/b/fileC.txt";
+               $fileD = "$base/unittest-cont1/e/a/b/fileD.txt";
+
+               $this->prepare( array( 'dir' => dirname( $fileA ) ) );
+               $this->create( array( 'dst' => $fileA, 'content' => $fileAContents ) );
+               $this->prepare( array( 'dir' => dirname( $fileB ) ) );
+               $this->prepare( array( 'dir' => dirname( $fileC ) ) );
+               $this->prepare( array( 'dir' => dirname( $fileD ) ) );
+
+               $status = $this->backend->doOperations( array(
+                       array( 'op' => 'store', 'src' => $tmpNameA, 'dst' => $fileA, 'overwriteSame' => 1 ),
+                       array( 'op' => 'store', 'src' => $tmpNameB, 'dst' => $fileB, 'overwrite' => 1 ),
+                       array( 'op' => 'store', 'src' => $tmpNameC, 'dst' => $fileC, 'overwrite' => 1 ),
+                       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 ),
+                       // Now: A:<A>, B:<B>, C:<A>, D:<empty>
+                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileD, 'overwrite' => 1 ),
+                       // Now: A:<A>, B:<B>, C:<empty>, D:<A>
+                       array( 'op' => 'move', 'src' => $fileB, 'dst' => $fileC ),
+                       // Now: A:<A>, B:<empty>, C:<B>, D:<A>
+                       array( 'op' => 'move', 'src' => $fileD, 'dst' => $fileA, 'overwriteSame' => 1 ),
+                       // Now: A:<A>, B:<empty>, C:<B>, D:<empty>
+                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileA, 'overwrite' => 1 ),
+                       // Now: A:<B>, B:<empty>, C:<empty>, D:<empty>
+                       array( 'op' => 'copy', 'src' => $fileA, 'dst' => $fileC ),
+                       // Now: A:<B>, B:<empty>, C:<B>, D:<empty>
+                       array( 'op' => 'move', 'src' => $fileA, 'dst' => $fileC, 'overwriteSame' => 1 ),
+                       // Now: A:<empty>, B:<empty>, C:<B>, D:<empty>
+                       array( 'op' => 'copy', 'src' => $fileC, 'dst' => $fileC, 'overwrite' => 1 ),
+                       // Does nothing
+                       array( 'op' => 'copy', 'src' => $fileC, 'dst' => $fileC, 'overwriteSame' => 1 ),
+                       // Does nothing
+                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileC, 'overwrite' => 1 ),
+                       // Does nothing
+                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileC, 'overwriteSame' => 1 ),
+                       // Does nothing
+                       array( 'op' => 'null' ),
+                       // Does nothing
+               ) );
+
+               $this->assertGoodStatus( $status, "Operation batch succeeded" );
+               $this->assertEquals( true, $status->isOK(), "Operation batch succeeded" );
+               $this->assertEquals( 16, count( $status->success ),
+                       "Operation batch has correct success array" );
+
+               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileA ) ),
+                       "File does not exist at $fileA" );
+               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileB ) ),
+                       "File does not exist at $fileB" );
+               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileD ) ),
+                       "File does not exist at $fileD" );
+
+               $this->assertEquals( true, $this->backend->fileExists( array( 'src' => $fileC ) ),
+                       "File exists at $fileC" );
+               $this->assertEquals( $fileBContents,
+                       $this->backend->getFileContents( array( 'src' => $fileC ) ),
+                       "Correct file contents of $fileC" );
+               $this->assertEquals( strlen( $fileBContents ),
+                       $this->backend->getFileSize( array( 'src' => $fileC ) ),
+                       "Correct file size of $fileC" );
+               $this->assertEquals( wfBaseConvert( sha1( $fileBContents ), 16, 36, 31 ),
+                       $this->backend->getFileSha1Base36( array( 'src' => $fileC ) ),
+                       "Correct file SHA-1 of $fileC" );
+       }
+
+       public function testDoOperationsFailing() {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestDoOperationsFailing();
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestDoOperationsFailing();
+               $this->tearDownFiles();
+       }
+
+       private function doTestDoOperationsFailing() {
+               $base = self::baseStorePath();
+
+               $fileA = "$base/unittest-cont2/a/b/fileA.txt";
+               $fileAContents = '3tqtmoeatmn4wg4qe-mg3qt3 tq';
+               $fileB = "$base/unittest-cont2/a/b/fileB.txt";
+               $fileBContents = 'g-jmq3gpqgt3qtg q3GT ';
+               $fileC = "$base/unittest-cont2/a/b/fileC.txt";
+               $fileCContents = 'eigna[ogmewt 3qt g3qg flew[ag';
+               $fileD = "$base/unittest-cont2/a/b/fileD.txt";
+
+               $this->prepare( array( 'dir' => dirname( $fileA ) ) );
+               $this->create( array( 'dst' => $fileA, 'content' => $fileAContents ) );
+               $this->prepare( array( 'dir' => dirname( $fileB ) ) );
+               $this->create( array( 'dst' => $fileB, 'content' => $fileBContents ) );
+               $this->prepare( array( 'dir' => dirname( $fileC ) ) );
+               $this->create( array( 'dst' => $fileC, 'content' => $fileCContents ) );
+
+               $status = $this->backend->doOperations( array(
+                       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 ),
+                       // Now: A:<A>, B:<B>, C:<A>, D:<empty>
+                       array( 'op' => 'copy', 'src' => $fileB, 'dst' => $fileD, 'overwrite' => 1 ),
+                       // Now: A:<A>, B:<B>, C:<A>, D:<B>
+                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileD ),
+                       // Now: A:<A>, B:<B>, C:<A>, D:<empty> (failed)
+                       array( 'op' => 'move', 'src' => $fileB, 'dst' => $fileC, 'overwriteSame' => 1 ),
+                       // Now: A:<A>, B:<B>, C:<A>, D:<empty> (failed)
+                       array( 'op' => 'move', 'src' => $fileB, 'dst' => $fileA, 'overwrite' => 1 ),
+                       // Now: A:<B>, B:<empty>, C:<A>, D:<empty>
+                       array( 'op' => 'delete', 'src' => $fileD ),
+                       // Now: A:<B>, B:<empty>, C:<A>, D:<empty>
+                       array( 'op' => 'null' ),
+                       // Does nothing
+               ), array( 'force' => 1 ) );
+
+               $this->assertNotEquals( array(), $status->errors, "Operation had warnings" );
+               $this->assertEquals( true, $status->isOK(), "Operation batch succeeded" );
+               $this->assertEquals( 8, count( $status->success ),
+                       "Operation batch has correct success array" );
+
+               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileB ) ),
+                       "File does not exist at $fileB" );
+               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileD ) ),
+                       "File does not exist at $fileD" );
+
+               $this->assertEquals( true, $this->backend->fileExists( array( 'src' => $fileA ) ),
+                       "File does not exist at $fileA" );
+               $this->assertEquals( true, $this->backend->fileExists( array( 'src' => $fileC ) ),
+                       "File exists at $fileC" );
+               $this->assertEquals( $fileBContents,
+                       $this->backend->getFileContents( array( 'src' => $fileA ) ),
+                       "Correct file contents of $fileA" );
+               $this->assertEquals( strlen( $fileBContents ),
+                       $this->backend->getFileSize( array( 'src' => $fileA ) ),
+                       "Correct file size of $fileA" );
+               $this->assertEquals( wfBaseConvert( sha1( $fileBContents ), 16, 36, 31 ),
+                       $this->backend->getFileSha1Base36( array( 'src' => $fileA ) ),
+                       "Correct file SHA-1 of $fileA" );
+       }
+
+       public function testGetFileList() {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestGetFileList();
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestGetFileList();
+               $this->tearDownFiles();
+       }
+
+       private function doTestGetFileList() {
+               $backendName = $this->backendClass();
+               $base = self::baseStorePath();
+
+               // Should have no errors
+               $iter = $this->backend->getFileList( array( 'dir' => "$base/unittest-cont-notexists" ) );
+
+               $files = array(
+                       "$base/unittest-cont1/e/test1.txt",
+                       "$base/unittest-cont1/e/test2.txt",
+                       "$base/unittest-cont1/e/test3.txt",
+                       "$base/unittest-cont1/e/subdir1/test1.txt",
+                       "$base/unittest-cont1/e/subdir1/test2.txt",
+                       "$base/unittest-cont1/e/subdir2/test3.txt",
+                       "$base/unittest-cont1/e/subdir2/test4.txt",
+                       "$base/unittest-cont1/e/subdir2/subdir/test1.txt",
+                       "$base/unittest-cont1/e/subdir2/subdir/test2.txt",
+                       "$base/unittest-cont1/e/subdir2/subdir/test3.txt",
+                       "$base/unittest-cont1/e/subdir2/subdir/test4.txt",
+                       "$base/unittest-cont1/e/subdir2/subdir/test5.txt",
+                       "$base/unittest-cont1/e/subdir2/subdir/sub/test0.txt",
+                       "$base/unittest-cont1/e/subdir2/subdir/sub/120-px-file.txt",
+               );
+
+               // Add the files
+               $ops = array();
+               foreach ( $files as $file ) {
+                       $this->prepare( array( 'dir' => dirname( $file ) ) );
+                       $ops[] = array( 'op' => 'create', 'content' => 'xxy', 'dst' => $file );
+               }
+               $status = $this->backend->doQuickOperations( $ops );
+               $this->assertGoodStatus( $status,
+                       "Creation of files succeeded ($backendName)." );
+               $this->assertEquals( true, $status->isOK(),
+                       "Creation of files succeeded with OK status ($backendName)." );
+
+               // Expected listing
+               $expected = array(
+                       "e/test1.txt",
+                       "e/test2.txt",
+                       "e/test3.txt",
+                       "e/subdir1/test1.txt",
+                       "e/subdir1/test2.txt",
+                       "e/subdir2/test3.txt",
+                       "e/subdir2/test4.txt",
+                       "e/subdir2/subdir/test1.txt",
+                       "e/subdir2/subdir/test2.txt",
+                       "e/subdir2/subdir/test3.txt",
+                       "e/subdir2/subdir/test4.txt",
+                       "e/subdir2/subdir/test5.txt",
+                       "e/subdir2/subdir/sub/test0.txt",
+                       "e/subdir2/subdir/sub/120-px-file.txt",
+               );
+               sort( $expected );
+
+               // Actual listing (no trailing slash)
+               $list = array();
+               $iter = $this->backend->getFileList( array( 'dir' => "$base/unittest-cont1" ) );
+               foreach ( $iter as $file ) {
+                       $list[] = $file;
+               }
+               sort( $list );
+
+               $this->assertEquals( $expected, $list, "Correct file listing ($backendName)." );
+
+               // Actual listing (with trailing slash)
+               $list = array();
+               $iter = $this->backend->getFileList( array( 'dir' => "$base/unittest-cont1/" ) );
+               foreach ( $iter as $file ) {
+                       $list[] = $file;
+               }
+               sort( $list );
+
+               $this->assertEquals( $expected, $list, "Correct file listing ($backendName)." );
+
+               // Expected listing
+               $expected = array(
+                       "test1.txt",
+                       "test2.txt",
+                       "test3.txt",
+                       "test4.txt",
+                       "test5.txt",
+                       "sub/test0.txt",
+                       "sub/120-px-file.txt",
+               );
+               sort( $expected );
+
+               // Actual listing (no trailing slash)
+               $list = array();
+               $iter = $this->backend->getFileList( array( 'dir' => "$base/unittest-cont1/e/subdir2/subdir" ) );
+               foreach ( $iter as $file ) {
+                       $list[] = $file;
+               }
+               sort( $list );
+
+               $this->assertEquals( $expected, $list, "Correct file listing ($backendName)." );
+
+               // Actual listing (with trailing slash)
+               $list = array();
+               $iter = $this->backend->getFileList( array( 'dir' => "$base/unittest-cont1/e/subdir2/subdir/" ) );
+               foreach ( $iter as $file ) {
+                       $list[] = $file;
+               }
+               sort( $list );
+
+               $this->assertEquals( $expected, $list, "Correct file listing ($backendName)." );
+
+               // Actual listing (using iterator second time)
+               $list = array();
+               foreach ( $iter as $file ) {
+                       $list[] = $file;
+               }
+               sort( $list );
+
+               $this->assertEquals( $expected, $list, "Correct file listing ($backendName), second iteration." );
+
+               // Expected listing (top files only)
+               $expected = array(
+                       "test1.txt",
+                       "test2.txt",
+                       "test3.txt",
+                       "test4.txt",
+                       "test5.txt"
+               );
+               sort( $expected );
+
+               // Actual listing (top files only)
+               $list = array();
+               $iter = $this->backend->getTopFileList( array( 'dir' => "$base/unittest-cont1/e/subdir2/subdir" ) );
+               foreach ( $iter as $file ) {
+                       $list[] = $file;
+               }
+               sort( $list );
+
+               $this->assertEquals( $expected, $list, "Correct top file listing ($backendName)." );
+
+               foreach ( $files as $file ) { // clean up
+                       $this->backend->doOperation( array( 'op' => 'delete', 'src' => $file ) );
+               }
+
+               $iter = $this->backend->getFileList( array( 'dir' => "$base/unittest-cont1/not/exists" ) );
+               foreach ( $iter as $iter ) {} // no errors
+       }
+
+       public function testGetDirectoryList() {
+               $this->backend = $this->singleBackend;
+               $this->tearDownFiles();
+               $this->doTestGetDirectoryList();
+               $this->tearDownFiles();
+
+               $this->backend = $this->multiBackend;
+               $this->tearDownFiles();
+               $this->doTestGetDirectoryList();
+               $this->tearDownFiles();
+       }
+
+       private function doTestGetDirectoryList() {
+               $backendName = $this->backendClass();
+
+               $base = self::baseStorePath();
+               $files = array(
+                       "$base/unittest-cont1/e/test1.txt",
+                       "$base/unittest-cont1/e/test2.txt",
+                       "$base/unittest-cont1/e/test3.txt",
+                       "$base/unittest-cont1/e/subdir1/test1.txt",
+                       "$base/unittest-cont1/e/subdir1/test2.txt",
+                       "$base/unittest-cont1/e/subdir2/test3.txt",
+                       "$base/unittest-cont1/e/subdir2/test4.txt",
+                       "$base/unittest-cont1/e/subdir2/subdir/test1.txt",
+                       "$base/unittest-cont1/e/subdir3/subdir/test2.txt",
+                       "$base/unittest-cont1/e/subdir4/subdir/test3.txt",
+                       "$base/unittest-cont1/e/subdir4/subdir/test4.txt",
+                       "$base/unittest-cont1/e/subdir4/subdir/test5.txt",
+                       "$base/unittest-cont1/e/subdir4/subdir/sub/test0.txt",
+                       "$base/unittest-cont1/e/subdir4/subdir/sub/120-px-file.txt",
+               );
+
+               // Add the files
+               $ops = array();
+               foreach ( $files as $file ) {
+                       $this->prepare( array( 'dir' => dirname( $file ) ) );
+                       $ops[] = array( 'op' => 'create', 'content' => 'xxy', 'dst' => $file );
+               }
+               $status = $this->backend->doQuickOperations( $ops );
+               $this->assertGoodStatus( $status,
+                       "Creation of files succeeded ($backendName)." );
+               $this->assertEquals( true, $status->isOK(),
+                       "Creation of files succeeded with OK status ($backendName)." );
+
+               $this->assertEquals( true,
+                       $this->backend->directoryExists( array( 'dir' => "$base/unittest-cont1/e/subdir1" ) ),
+                       "Directory exists in ($backendName)." );
+               $this->assertEquals( true,
+                       $this->backend->directoryExists( array( 'dir' => "$base/unittest-cont1/e/subdir2/subdir" ) ),
+                       "Directory exists in ($backendName)." );
+               $this->assertEquals( false,
+                       $this->backend->directoryExists( array( 'dir' => "$base/unittest-cont1/e/subdir2/test1.txt" ) ),
+                       "Directory does not exists in ($backendName)." );
+
+               // Expected listing
+               $expected = array(
+                       "e",
+               );
+               sort( $expected );
+
+               // Actual listing (no trailing slash)
+               $list = array();
+               $iter = $this->backend->getTopDirectoryList( array( 'dir' => "$base/unittest-cont1" ) );
+               foreach ( $iter as $file ) {
+                       $list[] = $file;
+               }
+               sort( $list );
+
+               $this->assertEquals( $expected, $list, "Correct top dir listing ($backendName)." );
+
+               // Expected listing
+               $expected = array(
+                       "subdir1",
+                       "subdir2",
+                       "subdir3",
+                       "subdir4",
+               );
+               sort( $expected );
+
+               // Actual listing (no trailing slash)
+               $list = array();
+               $iter = $this->backend->getTopDirectoryList( array( 'dir' => "$base/unittest-cont1/e" ) );
+               foreach ( $iter as $file ) {
+                       $list[] = $file;
+               }
+               sort( $list );
+
+               $this->assertEquals( $expected, $list, "Correct top dir listing ($backendName)." );
+
+               // Actual listing (with trailing slash)
+               $list = array();
+               $iter = $this->backend->getTopDirectoryList( array( 'dir' => "$base/unittest-cont1/e/" ) );
+               foreach ( $iter as $file ) {
+                       $list[] = $file;
+               }
+               sort( $list );
+
+               $this->assertEquals( $expected, $list, "Correct top dir listing ($backendName)." );
+
+               // Expected listing
+               $expected = array(
+                       "subdir",
+               );
+               sort( $expected );
+
+               // Actual listing (no trailing slash)
+               $list = array();
+               $iter = $this->backend->getTopDirectoryList( array( 'dir' => "$base/unittest-cont1/e/subdir2" ) );
+               foreach ( $iter as $file ) {
+                       $list[] = $file;
+               }
+               sort( $list );
+
+               $this->assertEquals( $expected, $list, "Correct top dir listing ($backendName)." );
+
+               // Actual listing (with trailing slash)
+               $list = array();
+               $iter = $this->backend->getTopDirectoryList( array( 'dir' => "$base/unittest-cont1/e/subdir2/" ) );
+               foreach ( $iter as $file ) {
+                       $list[] = $file;
+               }
+               sort( $list );
+
+               $this->assertEquals( $expected, $list, "Correct top dir listing ($backendName)." );
+
+               // Actual listing (using iterator second time)
+               $list = array();
+               foreach ( $iter as $file ) {
+                       $list[] = $file;
+               }
+               sort( $list );
+
+               $this->assertEquals( $expected, $list, "Correct top dir listing ($backendName), second iteration." );
+
+               // Expected listing (recursive)
+               $expected = array(
+                       "e",
+                       "e/subdir1",
+                       "e/subdir2",
+                       "e/subdir3",
+                       "e/subdir4",
+                       "e/subdir2/subdir",
+                       "e/subdir3/subdir",
+                       "e/subdir4/subdir",
+                       "e/subdir4/subdir/sub",
+               );
+               sort( $expected );
+
+               // Actual listing (recursive)
+               $list = array();
+               $iter = $this->backend->getDirectoryList( array( 'dir' => "$base/unittest-cont1/" ) );
+               foreach ( $iter as $file ) {
+                       $list[] = $file;
+               }
+               sort( $list );
+
+               $this->assertEquals( $expected, $list, "Correct dir listing ($backendName)." );
+
+               // Expected listing (recursive)
+               $expected = array(
+                       "subdir",
+                       "subdir/sub",
+               );
+               sort( $expected );
+
+               // Actual listing (recursive)
+               $list = array();
+               $iter = $this->backend->getDirectoryList( array( 'dir' => "$base/unittest-cont1/e/subdir4" ) );
+               foreach ( $iter as $file ) {
+                       $list[] = $file;
+               }
+               sort( $list );
+
+               $this->assertEquals( $expected, $list, "Correct dir listing ($backendName)." );
+
+               // Actual listing (recursive, second time)
+               $list = array();
+               foreach ( $iter as $file ) {
+                       $list[] = $file;
+               }
+               sort( $list );
+
+               $this->assertEquals( $expected, $list, "Correct dir listing ($backendName)." );
+
+               foreach ( $files as $file ) { // clean up
+                       $this->backend->doOperation( array( 'op' => 'delete', 'src' => $file ) );
+               }
+
+               $iter = $this->backend->getDirectoryList( array( 'dir' => "$base/unittest-cont1/not/exists" ) );
+               foreach ( $iter as $iter ) {} // no errors
+       }
+
+       public function testLockCalls() {
+               $this->backend = $this->singleBackend;
+               $this->doTestLockCalls();
+       }
+
+       private function doTestLockCalls() {
+               $backendName = $this->backendClass();
+
+               for ( $i=0; $i<50; $i++ ) {
+                       $paths = array(
+                               "test1.txt",
+                               "test2.txt",
+                               "test3.txt",
+                               "subdir1",
+                               "subdir1", // duplicate
+                               "subdir1/test1.txt",
+                               "subdir1/test2.txt",
+                               "subdir2",
+                               "subdir2", // duplicate
+                               "subdir2/test3.txt",
+                               "subdir2/test4.txt",
+                               "subdir2/subdir",
+                               "subdir2/subdir/test1.txt",
+                               "subdir2/subdir/test2.txt",
+                               "subdir2/subdir/test3.txt",
+                               "subdir2/subdir/test4.txt",
+                               "subdir2/subdir/test5.txt",
+                               "subdir2/subdir/sub",
+                               "subdir2/subdir/sub/test0.txt",
+                               "subdir2/subdir/sub/120-px-file.txt",
+                       );
+
+                       $status = $this->backend->lockFiles( $paths, LockManager::LOCK_EX );
+                       $this->assertEquals( array(), $status->errors,
+                               "Locking of files succeeded ($backendName)." );
+                       $this->assertEquals( true, $status->isOK(),
+                               "Locking of files succeeded with OK status ($backendName)." );
+
+                       $status = $this->backend->lockFiles( $paths, LockManager::LOCK_SH );
+                       $this->assertEquals( array(), $status->errors,
+                               "Locking of files succeeded ($backendName)." );
+                       $this->assertEquals( true, $status->isOK(),
+                               "Locking of files succeeded with OK status ($backendName)." );
+
+                       $status = $this->backend->unlockFiles( $paths, LockManager::LOCK_SH );
+                       $this->assertEquals( array(), $status->errors,
+                               "Locking of files succeeded ($backendName)." );
+                       $this->assertEquals( true, $status->isOK(),
+                               "Locking of files succeeded with OK status ($backendName)." );
+
+                       $status = $this->backend->unlockFiles( $paths, LockManager::LOCK_EX );
+                       $this->assertEquals( array(), $status->errors,
+                               "Locking of files succeeded ($backendName)." );
+                       $this->assertEquals( true, $status->isOK(),
+                               "Locking of files succeeded with OK status ($backendName)." );
+               }
+       }
+
+       // test helper wrapper for backend prepare() function
+       private function prepare( array $params ) {
+               return $this->backend->prepare( $params );
+       }
+
+       // test helper wrapper for backend prepare() function
+       private function create( array $params ) {
+               $params['op'] = 'create';
+               return $this->backend->doQuickOperations( array( $params ) );
+       }
+
+       function tearDownFiles() {
+               foreach ( $this->filesToPrune as $file ) {
+                       @unlink( $file );
+               }
+               $containers = array( 'unittest-cont1', 'unittest-cont2' );
+               foreach ( $containers as $container ) {
+                       $this->deleteFiles( $container );
+               }
+               $this->filesToPrune = array();
+       }
+
+       private function deleteFiles( $container ) {
+               $base = self::baseStorePath();
+               $iter = $this->backend->getFileList( array( 'dir' => "$base/$container" ) );
+               if ( $iter ) {
+                       foreach ( $iter as $file ) {
+                               $this->backend->quickDelete( array( 'src' => "$base/$container/$file" ) );
+                       }
+               }
+               $this->backend->clean( array( 'dir' => "$base/$container", 'recursive' => 1 ) );
+       }
+
+       function assertBackendPathsConsistent( array $paths ) {
+               if ( $this->backend instanceof FileBackendMultiWrite ) {
+                       $status = $this->backend->consistencyCheck( $paths );
+                       $this->assertGoodStatus( $status, "Files synced: " . implode( ',', $paths ) );
+               }
+       }
+
+       function assertGoodStatus( $status, $msg ) {
+               $this->assertEquals( print_r( array(), 1 ), print_r( $status->errors, 1 ), $msg );
+       }
+}
diff --git a/tests/phpunit/includes/filerepo/FileBackendTest.php b/tests/phpunit/includes/filerepo/FileBackendTest.php
deleted file mode 100644 (file)
index da36e90..0000000
+++ /dev/null
@@ -1,1995 +0,0 @@
-<?php
-
-/**
- * @group FileRepo
- * @group FileBackend
- * @group medium
- */
-class FileBackendTest extends MediaWikiTestCase {
-       private $backend, $multiBackend;
-       private $filesToPrune = array();
-       private static $backendToUse;
-
-       protected function setUp() {
-               global $wgFileBackends;
-               parent::setUp();
-               $tmpPrefix = wfTempDir() . '/filebackend-unittest-' . time() . '-' . mt_rand();
-               if ( $this->getCliArg( 'use-filebackend=' ) ) {
-                       if ( self::$backendToUse ) {
-                               $this->singleBackend = self::$backendToUse;
-                       } else {
-                               $name = $this->getCliArg( 'use-filebackend=' );
-                               $useConfig = array();
-                               foreach ( $wgFileBackends as $conf ) {
-                                       if ( $conf['name'] == $name ) {
-                                               $useConfig = $conf;
-                                               break;
-                                       }
-                               }
-                               $useConfig['name'] = 'localtesting'; // swap name
-                               $useConfig['shardViaHashLevels'] = array( // test sharding
-                                       'unittest-cont1' => array( 'levels' => 1, 'base' => 16, 'repeat' => 1 )
-                               );
-                               $class = $useConfig['class'];
-                               self::$backendToUse = new $class( $useConfig );
-                               $this->singleBackend = self::$backendToUse;
-                       }
-               } else {
-                       $this->singleBackend = new FSFileBackend( array(
-                               'name'        => 'localtesting',
-                               'lockManager' => 'fsLockManager',
-                               #'parallelize' => 'implicit',
-                               'containerPaths' => array(
-                                       'unittest-cont1' => "{$tmpPrefix}-localtesting-cont1",
-                                       'unittest-cont2' => "{$tmpPrefix}-localtesting-cont2" )
-                       ) );
-               }
-               $this->multiBackend = new FileBackendMultiWrite( array(
-                       'name'        => 'localtesting',
-                       'lockManager' => 'fsLockManager',
-                       'parallelize' => 'implicit',
-                       'backends'    => array(
-                               array(
-                                       'name'          => 'localmultitesting1',
-                                       'class'         => 'FSFileBackend',
-                                       'lockManager'   => 'nullLockManager',
-                                       'containerPaths' => array(
-                                               'unittest-cont1' => "{$tmpPrefix}-localtestingmulti1-cont1",
-                                               'unittest-cont2' => "{$tmpPrefix}-localtestingmulti1-cont2" ),
-                                       'isMultiMaster' => false
-                               ),
-                               array(
-                                       'name'          => 'localmultitesting2',
-                                       'class'         => 'FSFileBackend',
-                                       'lockManager'   => 'nullLockManager',
-                                       'containerPaths' => array(
-                                               'unittest-cont1' => "{$tmpPrefix}-localtestingmulti2-cont1",
-                                               'unittest-cont2' => "{$tmpPrefix}-localtestingmulti2-cont2" ),
-                                       'isMultiMaster' => true
-                               )
-                       )
-               ) );
-               $this->filesToPrune = array();
-       }
-
-       private static function baseStorePath() {
-               return 'mwstore://localtesting';
-       }
-
-       private function backendClass() {
-               return get_class( $this->backend );
-       }
-
-       /**
-        * @dataProvider provider_testIsStoragePath
-        */
-       public function testIsStoragePath( $path, $isStorePath ) {
-               $this->assertEquals( $isStorePath, FileBackend::isStoragePath( $path ),
-                       "FileBackend::isStoragePath on path '$path'" );
-       }
-
-       function provider_testIsStoragePath() {
-               return array(
-                       array( 'mwstore://', true ),
-                       array( 'mwstore://backend', true ),
-                       array( 'mwstore://backend/container', true ),
-                       array( 'mwstore://backend/container/', true ),
-                       array( 'mwstore://backend/container/path', true ),
-                       array( 'mwstore://backend//container/', true ),
-                       array( 'mwstore://backend//container//', true ),
-                       array( 'mwstore://backend//container//path', true ),
-                       array( 'mwstore:///', true ),
-                       array( 'mwstore:/', false ),
-                       array( 'mwstore:', false ),
-               );
-       }
-
-       /**
-        * @dataProvider provider_testSplitStoragePath
-        */
-       public function testSplitStoragePath( $path, $res ) {
-               $this->assertEquals( $res, FileBackend::splitStoragePath( $path ),
-                       "FileBackend::splitStoragePath on path '$path'" );
-       }
-
-       function provider_testSplitStoragePath() {
-               return array(
-                       array( 'mwstore://backend/container', array( 'backend', 'container', '' ) ),
-                       array( 'mwstore://backend/container/', array( 'backend', 'container', '' ) ),
-                       array( 'mwstore://backend/container/path', array( 'backend', 'container', 'path' ) ),
-                       array( 'mwstore://backend/container//path', array( 'backend', 'container', '/path' ) ),
-                       array( 'mwstore://backend//container/path', array( null, null, null ) ),
-                       array( 'mwstore://backend//container//path', array( null, null, null ) ),
-                       array( 'mwstore://', array( null, null, null ) ),
-                       array( 'mwstore://backend', array( null, null, null ) ),
-                       array( 'mwstore:///', array( null, null, null ) ),
-                       array( 'mwstore:/', array( null, null, null ) ),
-                       array( 'mwstore:', array( null, null, null ) )
-               );
-       }
-
-       /**
-        * @dataProvider provider_normalizeStoragePath
-        */
-       public function testNormalizeStoragePath( $path, $res ) {
-               $this->assertEquals( $res, FileBackend::normalizeStoragePath( $path ),
-                       "FileBackend::normalizeStoragePath on path '$path'" );
-       }
-
-       function provider_normalizeStoragePath() {
-               return array(
-                       array( 'mwstore://backend/container', 'mwstore://backend/container' ),
-                       array( 'mwstore://backend/container/', 'mwstore://backend/container' ),
-                       array( 'mwstore://backend/container/path', 'mwstore://backend/container/path' ),
-                       array( 'mwstore://backend/container//path', 'mwstore://backend/container/path' ),
-                       array( 'mwstore://backend/container///path', 'mwstore://backend/container/path' ),
-                       array( 'mwstore://backend/container///path//to///obj', 'mwstore://backend/container/path/to/obj',
-                       array( 'mwstore://', null ),
-                       array( 'mwstore://backend', null ),
-                       array( 'mwstore://backend//container/path', null ),
-                       array( 'mwstore://backend//container//path', null ),
-                       array( 'mwstore:///', null ),
-                       array( 'mwstore:/', null ),
-                       array( 'mwstore:', null ), )
-               );
-       }
-
-       /**
-        * @dataProvider provider_testParentStoragePath
-        */
-       public function testParentStoragePath( $path, $res ) {
-               $this->assertEquals( $res, FileBackend::parentStoragePath( $path ),
-                       "FileBackend::parentStoragePath on path '$path'" );
-       }
-
-       function provider_testParentStoragePath() {
-               return array(
-                       array( 'mwstore://backend/container/path/to/obj', 'mwstore://backend/container/path/to' ),
-                       array( 'mwstore://backend/container/path/to', 'mwstore://backend/container/path' ),
-                       array( 'mwstore://backend/container/path', 'mwstore://backend/container' ),
-                       array( 'mwstore://backend/container', null ),
-                       array( 'mwstore://backend/container/path/to/obj/', 'mwstore://backend/container/path/to' ),
-                       array( 'mwstore://backend/container/path/to/', 'mwstore://backend/container/path' ),
-                       array( 'mwstore://backend/container/path/', 'mwstore://backend/container' ),
-                       array( 'mwstore://backend/container/', null ),
-               );
-       }
-
-       /**
-        * @dataProvider provider_testExtensionFromPath
-        */
-       public function testExtensionFromPath( $path, $res ) {
-               $this->assertEquals( $res, FileBackend::extensionFromPath( $path ),
-                       "FileBackend::extensionFromPath on path '$path'" );
-       }
-
-       public static function provider_testExtensionFromPath() {
-               return array(
-                       array( 'mwstore://backend/container/path.txt', 'txt' ),
-                       array( 'mwstore://backend/container/path.svg.png', 'png' ),
-                       array( 'mwstore://backend/container/path', '' ),
-                       array( 'mwstore://backend/container/path.', '' ),
-               );
-       }
-
-       /**
-        * @dataProvider provider_testStore
-        */
-       public function testStore( $op ) {
-               $this->filesToPrune[] = $op['src'];
-
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestStore( $op );
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestStore( $op );
-               $this->filesToPrune[] = $op['src']; # avoid file leaking
-               $this->tearDownFiles();
-       }
-
-       private function doTestStore( $op ) {
-               $backendName = $this->backendClass();
-
-               $source = $op['src'];
-               $dest = $op['dst'];
-               $this->prepare( array( 'dir' => dirname( $dest ) ) );
-
-               file_put_contents( $source, "Unit test file" );
-
-               if ( isset( $op['overwrite'] ) || isset( $op['overwriteSame'] ) ) {
-                       $this->backend->store( $op );
-               }
-
-               $status = $this->backend->doOperation( $op );
-
-               $this->assertGoodStatus( $status,
-                       "Store from $source to $dest succeeded without warnings ($backendName)." );
-               $this->assertEquals( true, $status->isOK(),
-                       "Store from $source to $dest succeeded ($backendName)." );
-               $this->assertEquals( array( 0 => true ), $status->success,
-                       "Store from $source to $dest has proper 'success' field in Status ($backendName)." );
-               $this->assertEquals( true, file_exists( $source ),
-                       "Source file $source still exists ($backendName)." );
-               $this->assertEquals( true, $this->backend->fileExists( array( 'src' => $dest ) ),
-                       "Destination file $dest exists ($backendName)." );
-
-               $this->assertEquals( filesize( $source ),
-                       $this->backend->getFileSize( array( 'src' => $dest ) ),
-                       "Destination file $dest has correct size ($backendName)." );
-
-               $props1 = FSFile::getPropsFromPath( $source );
-               $props2 = $this->backend->getFileProps( array( 'src' => $dest ) );
-               $this->assertEquals( $props1, $props2,
-                       "Source and destination have the same props ($backendName)." );
-
-               $this->assertBackendPathsConsistent( array( $dest ) );
-       }
-
-       public static function provider_testStore() {
-               $cases = array();
-
-               $tmpName = TempFSFile::factory( "unittests_", 'txt' )->getPath();
-               $toPath = self::baseStorePath() . '/unittest-cont1/e/fun/obj1.txt';
-               $op = array( 'op' => 'store', 'src' => $tmpName, 'dst' => $toPath );
-               $cases[] = array(
-                       $op, // operation
-                       $tmpName, // source
-                       $toPath, // dest
-               );
-
-               $op2 = $op;
-               $op2['overwrite'] = true;
-               $cases[] = array(
-                       $op2, // operation
-                       $tmpName, // source
-                       $toPath, // dest
-               );
-
-               $op2 = $op;
-               $op2['overwriteSame'] = true;
-               $cases[] = array(
-                       $op2, // operation
-                       $tmpName, // source
-                       $toPath, // dest
-               );
-
-               return $cases;
-       }
-
-       /**
-        * @dataProvider provider_testCopy
-        */
-       public function testCopy( $op ) {
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestCopy( $op );
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestCopy( $op );
-               $this->tearDownFiles();
-       }
-
-       private function doTestCopy( $op ) {
-               $backendName = $this->backendClass();
-
-               $source = $op['src'];
-               $dest = $op['dst'];
-               $this->prepare( array( 'dir' => dirname( $source ) ) );
-               $this->prepare( array( 'dir' => dirname( $dest ) ) );
-
-               if ( isset( $op['ignoreMissingSource'] ) ) {
-                       $status = $this->backend->doOperation( $op );
-                       $this->assertGoodStatus( $status,
-                               "Move from $source to $dest succeeded without warnings ($backendName)." );
-                       $this->assertEquals( array( 0 => true ), $status->success,
-                               "Move from $source to $dest has proper 'success' field in Status ($backendName)." );
-                       $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $source ) ),
-                               "Source file $source does not exist ($backendName)." );
-                       $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $dest ) ),
-                               "Destination file $dest does not exist ($backendName)." );
-                       return; // done
-               }
-
-               $status = $this->backend->doOperation(
-                       array( 'op' => 'create', 'content' => 'blahblah', 'dst' => $source ) );
-               $this->assertGoodStatus( $status,
-                       "Creation of file at $source succeeded ($backendName)." );
-
-               if ( isset( $op['overwrite'] ) || isset( $op['overwriteSame'] ) ) {
-                       $this->backend->copy( $op );
-               }
-
-               $status = $this->backend->doOperation( $op );
-
-               $this->assertGoodStatus( $status,
-                       "Copy from $source to $dest succeeded without warnings ($backendName)." );
-               $this->assertEquals( true, $status->isOK(),
-                       "Copy from $source to $dest succeeded ($backendName)." );
-               $this->assertEquals( array( 0 => true ), $status->success,
-                       "Copy from $source to $dest has proper 'success' field in Status ($backendName)." );
-               $this->assertEquals( true, $this->backend->fileExists( array( 'src' => $source ) ),
-                       "Source file $source still exists ($backendName)." );
-               $this->assertEquals( true, $this->backend->fileExists( array( 'src' => $dest ) ),
-                       "Destination file $dest exists after copy ($backendName)." );
-
-               $this->assertEquals(
-                       $this->backend->getFileSize( array( 'src' => $source ) ),
-                       $this->backend->getFileSize( array( 'src' => $dest ) ),
-                       "Destination file $dest has correct size ($backendName)." );
-
-               $props1 = $this->backend->getFileProps( array( 'src' => $source ) );
-               $props2 = $this->backend->getFileProps( array( 'src' => $dest ) );
-               $this->assertEquals( $props1, $props2,
-                       "Source and destination have the same props ($backendName)." );
-
-               $this->assertBackendPathsConsistent( array( $source, $dest ) );
-       }
-
-       public static function provider_testCopy() {
-               $cases = array();
-
-               $source = self::baseStorePath() . '/unittest-cont1/e/file.txt';
-               $dest = self::baseStorePath() . '/unittest-cont2/a/fileMoved.txt';
-
-               $op = array( 'op' => 'copy', 'src' => $source, 'dst' => $dest );
-               $cases[] = array(
-                       $op, // operation
-                       $source, // source
-                       $dest, // dest
-               );
-
-               $op2 = $op;
-               $op2['overwrite'] = true;
-               $cases[] = array(
-                       $op2, // operation
-                       $source, // source
-                       $dest, // dest
-               );
-
-               $op2 = $op;
-               $op2['overwriteSame'] = true;
-               $cases[] = array(
-                       $op2, // operation
-                       $source, // source
-                       $dest, // dest
-               );
-
-               $op2 = $op;
-               $op2['ignoreMissingSource'] = true;
-               $cases[] = array(
-                       $op2, // operation
-                       $source, // source
-                       $dest, // dest
-               );
-
-               return $cases;
-       }
-
-       /**
-        * @dataProvider provider_testMove
-        */
-       public function testMove( $op ) {
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestMove( $op );
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestMove( $op );
-               $this->tearDownFiles();
-       }
-
-       private function doTestMove( $op ) {
-               $backendName = $this->backendClass();
-
-               $source = $op['src'];
-               $dest = $op['dst'];
-               $this->prepare( array( 'dir' => dirname( $source ) ) );
-               $this->prepare( array( 'dir' => dirname( $dest ) ) );
-
-               if ( isset( $op['ignoreMissingSource'] ) ) {
-                       $status = $this->backend->doOperation( $op );
-                       $this->assertGoodStatus( $status,
-                               "Move from $source to $dest succeeded without warnings ($backendName)." );
-                       $this->assertEquals( array( 0 => true ), $status->success,
-                               "Move from $source to $dest has proper 'success' field in Status ($backendName)." );
-                       $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $source ) ),
-                               "Source file $source does not exist ($backendName)." );
-                       $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $dest ) ),
-                               "Destination file $dest does not exist ($backendName)." );
-                       return; // done
-               }
-
-               $status = $this->backend->doOperation(
-                       array( 'op' => 'create', 'content' => 'blahblah', 'dst' => $source ) );
-               $this->assertGoodStatus( $status,
-                       "Creation of file at $source succeeded ($backendName)." );
-
-               if ( isset( $op['overwrite'] ) || isset( $op['overwriteSame'] ) ) {
-                       $this->backend->copy( $op );
-               }
-
-               $status = $this->backend->doOperation( $op );
-               $this->assertGoodStatus( $status,
-                       "Move from $source to $dest succeeded without warnings ($backendName)." );
-               $this->assertEquals( true, $status->isOK(),
-                       "Move from $source to $dest succeeded ($backendName)." );
-               $this->assertEquals( array( 0 => true ), $status->success,
-                       "Move from $source to $dest has proper 'success' field in Status ($backendName)." );
-               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $source ) ),
-                       "Source file $source does not still exists ($backendName)." );
-               $this->assertEquals( true, $this->backend->fileExists( array( 'src' => $dest ) ),
-                       "Destination file $dest exists after move ($backendName)." );
-
-               $this->assertNotEquals(
-                       $this->backend->getFileSize( array( 'src' => $source ) ),
-                       $this->backend->getFileSize( array( 'src' => $dest ) ),
-                       "Destination file $dest has correct size ($backendName)." );
-
-               $props1 = $this->backend->getFileProps( array( 'src' => $source ) );
-               $props2 = $this->backend->getFileProps( array( 'src' => $dest ) );
-               $this->assertEquals( false, $props1['fileExists'],
-                       "Source file does not exist accourding to props ($backendName)." );
-               $this->assertEquals( true, $props2['fileExists'],
-                       "Destination file exists accourding to props ($backendName)." );
-
-               $this->assertBackendPathsConsistent( array( $source, $dest ) );
-       }
-
-       public static function provider_testMove() {
-               $cases = array();
-
-               $source = self::baseStorePath() . '/unittest-cont1/e/file.txt';
-               $dest = self::baseStorePath() . '/unittest-cont2/a/fileMoved.txt';
-
-               $op = array( 'op' => 'move', 'src' => $source, 'dst' => $dest );
-               $cases[] = array(
-                       $op, // operation
-                       $source, // source
-                       $dest, // dest
-               );
-
-               $op2 = $op;
-               $op2['overwrite'] = true;
-               $cases[] = array(
-                       $op2, // operation
-                       $source, // source
-                       $dest, // dest
-               );
-
-               $op2 = $op;
-               $op2['overwriteSame'] = true;
-               $cases[] = array(
-                       $op2, // operation
-                       $source, // source
-                       $dest, // dest
-               );
-
-               $op2 = $op;
-               $op2['ignoreMissingSource'] = true;
-               $cases[] = array(
-                       $op2, // operation
-                       $source, // source
-                       $dest, // dest
-               );
-
-               return $cases;
-       }
-
-       /**
-        * @dataProvider provider_testDelete
-        */
-       public function testDelete( $op, $withSource, $okStatus ) {
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestDelete( $op, $withSource, $okStatus );
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestDelete( $op, $withSource, $okStatus );
-               $this->tearDownFiles();
-       }
-
-       private function doTestDelete( $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,
-                               "Deletion of file at $source succeeded without warnings ($backendName)." );
-                       $this->assertEquals( true, $status->isOK(),
-                               "Deletion of file at $source succeeded ($backendName)." );
-                       $this->assertEquals( array( 0 => true ), $status->success,
-                               "Deletion of file at $source has proper 'success' field in Status ($backendName)." );
-               } else {
-                       $this->assertEquals( false, $status->isOK(),
-                               "Deletion of file at $source failed ($backendName)." );
-               }
-
-               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $source ) ),
-                       "Source file $source does not exist after move ($backendName)." );
-
-               $this->assertFalse(
-                       $this->backend->getFileSize( array( 'src' => $source ) ),
-                       "Source file $source has correct size (false) ($backendName)." );
-
-               $props1 = $this->backend->getFileProps( array( 'src' => $source ) );
-               $this->assertFalse( $props1['fileExists'],
-                       "Source file $source does not exist according to props ($backendName)." );
-
-               $this->assertBackendPathsConsistent( array( $source ) );
-       }
-
-       public static function provider_testDelete() {
-               $cases = array();
-
-               $source = self::baseStorePath() . '/unittest-cont1/e/myfacefile.txt';
-
-               $op = array( 'op' => 'delete', 'src' => $source );
-               $cases[] = array(
-                       $op, // operation
-                       true, // with source
-                       true // succeeds
-               );
-
-               $cases[] = array(
-                       $op, // operation
-                       false, // without source
-                       false // fails
-               );
-
-               $op['ignoreMissingSource'] = true;
-               $cases[] = array(
-                       $op, // operation
-                       false, // without source
-                       true // succeeds
-               );
-
-               return $cases;
-       }
-
-       /**
-        * @dataProvider provider_testCreate
-        */
-       public function testCreate( $op, $alreadyExists, $okStatus, $newSize ) {
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestCreate( $op, $alreadyExists, $okStatus, $newSize );
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestCreate( $op, $alreadyExists, $okStatus, $newSize );
-               $this->tearDownFiles();
-       }
-
-       private function doTestCreate( $op, $alreadyExists, $okStatus, $newSize ) {
-               $backendName = $this->backendClass();
-
-               $dest = $op['dst'];
-               $this->prepare( array( 'dir' => dirname( $dest ) ) );
-
-               $oldText = 'blah...blah...waahwaah';
-               if ( $alreadyExists ) {
-                       $status = $this->backend->doOperation(
-                               array( 'op' => 'create', 'content' => $oldText, 'dst' => $dest ) );
-                       $this->assertGoodStatus( $status,
-                               "Creation of file at $dest succeeded ($backendName)." );
-               }
-
-               $status = $this->backend->doOperation( $op );
-               if ( $okStatus ) {
-                       $this->assertGoodStatus( $status,
-                               "Creation of file at $dest succeeded without warnings ($backendName)." );
-                       $this->assertEquals( true, $status->isOK(),
-                               "Creation of file at $dest succeeded ($backendName)." );
-                       $this->assertEquals( array( 0 => true ), $status->success,
-                               "Creation of file at $dest has proper 'success' field in Status ($backendName)." );
-               } else {
-                       $this->assertEquals( false, $status->isOK(),
-                               "Creation of file at $dest failed ($backendName)." );
-               }
-
-               $this->assertEquals( true, $this->backend->fileExists( array( 'src' => $dest ) ),
-                       "Destination file $dest exists after creation ($backendName)." );
-
-               $props1 = $this->backend->getFileProps( array( 'src' => $dest ) );
-               $this->assertEquals( true, $props1['fileExists'],
-                       "Destination file $dest exists according to props ($backendName)." );
-               if ( $okStatus ) { // file content is what we saved
-                       $this->assertEquals( $newSize, $props1['size'],
-                               "Destination file $dest has expected size according to props ($backendName)." );
-                       $this->assertEquals( $newSize,
-                               $this->backend->getFileSize( array( 'src' => $dest ) ),
-                               "Destination file $dest has correct size ($backendName)." );
-               } else { // file content is some other previous text
-                       $this->assertEquals( strlen( $oldText ), $props1['size'],
-                               "Destination file $dest has original size according to props ($backendName)." );
-                       $this->assertEquals( strlen( $oldText ),
-                               $this->backend->getFileSize( array( 'src' => $dest ) ),
-                               "Destination file $dest has original size according to props ($backendName)." );
-               }
-
-               $this->assertBackendPathsConsistent( array( $dest ) );
-       }
-
-       /**
-        * @dataProvider provider_testCreate
-        */
-       public static function provider_testCreate() {
-               $cases = array();
-
-               $dest = self::baseStorePath() . '/unittest-cont2/a/myspacefile.txt';
-
-               $op = array( 'op' => 'create', 'content' => 'test test testing', 'dst' => $dest );
-               $cases[] = array(
-                       $op, // operation
-                       false, // no dest already exists
-                       true, // succeeds
-                       strlen( $op['content'] )
-               );
-
-               $op2 = $op;
-               $op2['content'] = "\n";
-               $cases[] = array(
-                       $op2, // operation
-                       false, // no dest already exists
-                       true, // succeeds
-                       strlen( $op2['content'] )
-               );
-
-               $op2 = $op;
-               $op2['content'] = "fsf\n waf 3kt";
-               $cases[] = array(
-                       $op2, // operation
-                       true, // dest already exists
-                       false, // fails
-                       strlen( $op2['content'] )
-               );
-
-               $op2 = $op;
-               $op2['content'] = "egm'g gkpe gpqg eqwgwqg";
-               $op2['overwrite'] = true;
-               $cases[] = array(
-                       $op2, // operation
-                       true, // dest already exists
-                       true, // succeeds
-                       strlen( $op2['content'] )
-               );
-
-               $op2 = $op;
-               $op2['content'] = "39qjmg3-qg";
-               $op2['overwriteSame'] = true;
-               $cases[] = array(
-                       $op2, // operation
-                       true, // dest already exists
-                       false, // succeeds
-                       strlen( $op2['content'] )
-               );
-
-               return $cases;
-       }
-
-       public function testDoQuickOperations() {
-               $this->backend = $this->singleBackend;
-               $this->doTestDoQuickOperations();
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->doTestDoQuickOperations();
-               $this->tearDownFiles();
-       }
-
-       private function doTestDoQuickOperations() {
-               $backendName = $this->backendClass();
-
-               $base = self::baseStorePath();
-               $files = array(
-                       "$base/unittest-cont1/e/fileA.a",
-                       "$base/unittest-cont1/e/fileB.a",
-                       "$base/unittest-cont1/e/fileC.a"
-               );
-               $ops = array();
-               $purgeOps = array();
-               foreach ( $files as $path ) {
-                       $status = $this->prepare( array( 'dir' => dirname( $path ) ) );
-                       $this->assertGoodStatus( $status,
-                               "Preparing $path succeeded without warnings ($backendName)." );
-                       $ops[] = array( 'op' => 'create', 'dst' => $path, 'content' => mt_rand(0,50000) );
-                       $purgeOps[] = array( 'op' => 'delete', 'src' => $path );
-               }
-               $purgeOps[] = array( 'op' => 'null' );
-               $status = $this->backend->doQuickOperations( $ops );
-               $this->assertGoodStatus( $status,
-                       "Creation of source files succeeded ($backendName)." );
-
-               foreach ( $files as $file ) {
-                       $this->assertTrue( $this->backend->fileExists( array( 'src' => $file ) ),
-                               "File $file exists." );
-               }
-
-               $status = $this->backend->doQuickOperations( $purgeOps );
-               $this->assertGoodStatus( $status,
-                       "Quick deletion of source files succeeded ($backendName)." );
-
-               foreach ( $files as $file ) {
-                       $this->assertFalse( $this->backend->fileExists( array( 'src' => $file ) ),
-                               "File $file purged." );
-               }
-       }
-
-       /**
-        * @dataProvider provider_testConcatenate
-        */
-       public function testConcatenate( $op, $srcs, $srcsContent, $alreadyExists, $okStatus ) {
-               $this->filesToPrune[] = $op['dst'];
-
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestConcatenate( $op, $srcs, $srcsContent, $alreadyExists, $okStatus );
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestConcatenate( $op, $srcs, $srcsContent, $alreadyExists, $okStatus );
-               $this->filesToPrune[] = $op['dst']; # avoid file leaking
-               $this->tearDownFiles();
-       }
-
-       private function doTestConcatenate( $params, $srcs, $srcsContent, $alreadyExists, $okStatus ) {
-               $backendName = $this->backendClass();
-
-               $expContent = '';
-               // Create sources
-               $ops = array();
-               foreach ( $srcs as $i => $source ) {
-                       $this->prepare( array( 'dir' => dirname( $source ) ) );
-                       $ops[] = array(
-                               'op'      => 'create', // operation
-                               'dst'     => $source, // source
-                               'content' => $srcsContent[$i]
-                       );
-                       $expContent .= $srcsContent[$i];
-               }
-               $status = $this->backend->doOperations( $ops );
-
-               $this->assertGoodStatus( $status,
-                       "Creation of source files succeeded ($backendName)." );
-
-               $dest = $params['dst'];
-               if ( $alreadyExists ) {
-                       $ok = file_put_contents( $dest, 'blah...blah...waahwaah' ) !== false;
-                       $this->assertEquals( true, $ok,
-                               "Creation of file at $dest succeeded ($backendName)." );
-               } else {
-                       $ok = file_put_contents( $dest, '' ) !== false;
-                       $this->assertEquals( true, $ok,
-                               "Creation of 0-byte file at $dest succeeded ($backendName)." );
-               }
-
-               // Combine the files into one
-               $status = $this->backend->concatenate( $params );
-               if ( $okStatus ) {
-                       $this->assertGoodStatus( $status,
-                               "Creation of concat file at $dest succeeded without warnings ($backendName)." );
-                       $this->assertEquals( true, $status->isOK(),
-                               "Creation of concat file at $dest succeeded ($backendName)." );
-               } else {
-                       $this->assertEquals( false, $status->isOK(),
-                               "Creation of concat file at $dest failed ($backendName)." );
-               }
-
-               if ( $okStatus ) {
-                       $this->assertEquals( true, is_file( $dest ),
-                               "Dest concat file $dest exists after creation ($backendName)." );
-               } else {
-                       $this->assertEquals( true, is_file( $dest ),
-                               "Dest concat file $dest exists after failed creation ($backendName)." );
-               }
-
-               $contents = file_get_contents( $dest );
-               $this->assertNotEquals( false, $contents, "File at $dest exists ($backendName)." );
-
-               if ( $okStatus ) {
-                       $this->assertEquals( $expContent, $contents,
-                               "Concat file at $dest has correct contents ($backendName)." );
-               } else {
-                       $this->assertNotEquals( $expContent, $contents,
-                               "Concat file at $dest has correct contents ($backendName)." );
-               }
-       }
-
-       function provider_testConcatenate() {
-               $cases = array();
-
-               $rand = mt_rand( 0, 2000000000 ) . time();
-               $dest = wfTempDir() . "/randomfile!$rand.txt";
-               $srcs = array(
-                       self::baseStorePath() . '/unittest-cont1/e/file1.txt',
-                       self::baseStorePath() . '/unittest-cont1/e/file2.txt',
-                       self::baseStorePath() . '/unittest-cont1/e/file3.txt',
-                       self::baseStorePath() . '/unittest-cont1/e/file4.txt',
-                       self::baseStorePath() . '/unittest-cont1/e/file5.txt',
-                       self::baseStorePath() . '/unittest-cont1/e/file6.txt',
-                       self::baseStorePath() . '/unittest-cont1/e/file7.txt',
-                       self::baseStorePath() . '/unittest-cont1/e/file8.txt',
-                       self::baseStorePath() . '/unittest-cont1/e/file9.txt',
-                       self::baseStorePath() . '/unittest-cont1/e/file10.txt'
-               );
-               $content = array(
-                       'egfage',
-                       'ageageag',
-                       'rhokohlr',
-                       'shgmslkg',
-                       'kenga',
-                       'owagmal',
-                       'kgmae',
-                       'g eak;g',
-                       'lkaem;a',
-                       'legma'
-               );
-               $params = array( 'srcs' => $srcs, 'dst' => $dest );
-
-               $cases[] = array(
-                       $params, // operation
-                       $srcs, // sources
-                       $content, // content for each source
-                       false, // no dest already exists
-                       true, // succeeds
-               );
-
-               $cases[] = array(
-                       $params, // operation
-                       $srcs, // sources
-                       $content, // content for each source
-                       true, // dest already exists
-                       false, // succeeds
-               );
-
-               return $cases;
-       }
-
-       /**
-        * @dataProvider provider_testGetFileStat
-        */
-       public function testGetFileStat( $path, $content, $alreadyExists ) {
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestGetFileStat( $path, $content, $alreadyExists );
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestGetFileStat( $path, $content, $alreadyExists );
-               $this->tearDownFiles();
-       }
-
-       private function doTestGetFileStat( $path, $content, $alreadyExists ) {
-               $backendName = $this->backendClass();
-
-               if ( $alreadyExists ) {
-                       $this->prepare( array( 'dir' => dirname( $path ) ) );
-                       $status = $this->create( array( 'dst' => $path, 'content' => $content ) );
-                       $this->assertGoodStatus( $status,
-                               "Creation of file at $path succeeded ($backendName)." );
-
-                       $size = $this->backend->getFileSize( array( 'src' => $path ) );
-                       $time = $this->backend->getFileTimestamp( array( 'src' => $path ) );
-                       $stat = $this->backend->getFileStat( array( 'src' => $path ) );
-
-                       $this->assertEquals( strlen( $content ), $size,
-                               "Correct file size of '$path'" );
-                       $this->assertTrue( abs( time() - wfTimestamp( TS_UNIX, $time ) ) < 10,
-                               "Correct file timestamp of '$path'" );
-
-                       $size = $stat['size'];
-                       $time = $stat['mtime'];
-                       $this->assertEquals( strlen( $content ), $size,
-                               "Correct file size of '$path'" );
-                       $this->assertTrue( abs( time() - wfTimestamp( TS_UNIX, $time ) ) < 10,
-                               "Correct file timestamp of '$path'" );
-
-                       $this->backend->clearCache( array( $path ) );
-
-                       $size = $this->backend->getFileSize( array( 'src' => $path ) );
-
-                       $this->assertEquals( strlen( $content ), $size,
-                               "Correct file size of '$path'" );
-
-                       $this->backend->preloadCache( array( $path ) );
-
-                       $size = $this->backend->getFileSize( array( 'src' => $path ) );
-
-                       $this->assertEquals( strlen( $content ), $size,
-                               "Correct file size of '$path'" );
-               } else {
-                       $size = $this->backend->getFileSize( array( 'src' => $path ) );
-                       $time = $this->backend->getFileTimestamp( array( 'src' => $path ) );
-                       $stat = $this->backend->getFileStat( array( 'src' => $path ) );
-
-                       $this->assertFalse( $size, "Correct file size of '$path'" );
-                       $this->assertFalse( $time, "Correct file timestamp of '$path'" );
-                       $this->assertFalse( $stat, "Correct file stat of '$path'" );
-               }
-       }
-
-       function provider_testGetFileStat() {
-               $cases = array();
-
-               $base = self::baseStorePath();
-               $cases[] = array( "$base/unittest-cont1/e/b/z/some_file.txt", "some file contents", true );
-               $cases[] = array( "$base/unittest-cont1/e/b/some-other_file.txt", "", true );
-               $cases[] = array( "$base/unittest-cont1/e/b/some-diff_file.txt", null, false );
-
-               return $cases;
-       }
-
-       /**
-        * @dataProvider provider_testGetFileContents
-        */
-       public function testGetFileContents( $source, $content ) {
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestGetFileContents( $source, $content );
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestGetFileContents( $source, $content );
-               $this->tearDownFiles();
-       }
-
-       private function doTestGetFileContents( $source, $content ) {
-               $backendName = $this->backendClass();
-
-               $srcs = (array)$source;
-               $content = (array)$content;
-               foreach ( $srcs as $i => $src ) {
-                       $this->prepare( array( 'dir' => dirname( $src ) ) );
-                       $status = $this->backend->doOperation(
-                               array( 'op' => 'create', 'content' => $content[$i], 'dst' => $src ) );
-                       $this->assertGoodStatus( $status,
-                               "Creation of file at $src succeeded ($backendName)." );
-               }
-
-               if ( is_array( $source ) ) {
-                       $contents = $this->backend->getFileContentsMulti( array( 'srcs' => $source ) );
-                       foreach ( $contents as $path => $data ) {
-                               $this->assertNotEquals( false, $data, "Contents of $path exists ($backendName)." );
-                               $this->assertEquals( current( $content ), $data, "Contents of $path is correct ($backendName)." );
-                               next( $content );
-                       }
-                       $this->assertEquals( $source, array_keys( $contents ), "Contents in right order ($backendName)." );
-                       $this->assertEquals( count( $source ), count( $contents ), "Contents array size correct ($backendName)." );
-               } else {
-                       $data = $this->backend->getFileContents( array( 'src' => $source ) );
-                       $this->assertNotEquals( false, $data, "Contents of $source exists ($backendName)." );
-                       $this->assertEquals( $content[0], $data, "Contents of $source is correct ($backendName)." );
-               }
-       }
-
-       function provider_testGetFileContents() {
-               $cases = array();
-
-               $base = self::baseStorePath();
-               $cases[] = array( "$base/unittest-cont1/e/b/z/some_file.txt", "some file contents" );
-               $cases[] = array( "$base/unittest-cont1/e/b/some-other_file.txt", "more file contents" );
-               $cases[] = array(
-                       array( "$base/unittest-cont1/e/a/x.txt", "$base/unittest-cont1/e/a/y.txt",
-                                "$base/unittest-cont1/e/a/z.txt" ),
-                       array( "contents xx", "contents xy", "contents xz" )
-               );
-
-               return $cases;
-       }
-
-       /**
-        * @dataProvider provider_testGetLocalCopy
-        */
-       public function testGetLocalCopy( $source, $content ) {
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestGetLocalCopy( $source, $content );
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestGetLocalCopy( $source, $content );
-               $this->tearDownFiles();
-       }
-
-       private function doTestGetLocalCopy( $source, $content ) {
-               $backendName = $this->backendClass();
-
-               $srcs = (array)$source;
-               $content = (array)$content;
-               foreach ( $srcs as $i => $src ) {
-                       $this->prepare( array( 'dir' => dirname( $src ) ) );
-                       $status = $this->backend->doOperation(
-                               array( 'op' => 'create', 'content' => $content[$i], 'dst' => $src ) );
-                       $this->assertGoodStatus( $status,
-                               "Creation of file at $src succeeded ($backendName)." );
-               }
-
-               if ( is_array( $source ) ) {
-                       $tmpFiles = $this->backend->getLocalCopyMulti( array( 'srcs' => $source ) );
-                       foreach ( $tmpFiles as $path => $tmpFile ) {
-                               $this->assertNotNull( $tmpFile,
-                                       "Creation of local copy of $path succeeded ($backendName)." );
-                               $contents = file_get_contents( $tmpFile->getPath() );
-                               $this->assertNotEquals( false, $contents, "Local copy of $path exists ($backendName)." );
-                               $this->assertEquals( current( $content ), $contents, "Local copy of $path is correct ($backendName)." );
-                               next( $content );
-                       }
-                       $this->assertEquals( $source, array_keys( $tmpFiles ), "Local copies in right order ($backendName)." );
-                       $this->assertEquals( count( $source ), count( $tmpFiles ), "Local copies array size correct ($backendName)." );
-               } else {
-                       $tmpFile = $this->backend->getLocalCopy( array( 'src' => $source ) );
-                       $this->assertNotNull( $tmpFile,
-                               "Creation of local copy of $source succeeded ($backendName)." );
-                       $contents = file_get_contents( $tmpFile->getPath() );
-                       $this->assertNotEquals( false, $contents, "Local copy of $source exists ($backendName)." );
-                       $this->assertEquals( $content[0], $contents, "Local copy of $source is correct ($backendName)." );
-               }
-
-               $obj = new stdClass();
-               $tmpFile->bind( $obj );
-       }
-
-       function provider_testGetLocalCopy() {
-               $cases = array();
-
-               $base = self::baseStorePath();
-               $cases[] = array( "$base/unittest-cont1/e/a/z/some_file.txt", "some file contents" );
-               $cases[] = array( "$base/unittest-cont1/e/a/some-other_file.txt", "more file contents" );
-               $cases[] = array( "$base/unittest-cont1/e/a/\$odd&.txt", "test file contents" );
-               $cases[] = array(
-                       array( "$base/unittest-cont1/e/a/x.txt", "$base/unittest-cont1/e/a/y.txt",
-                                "$base/unittest-cont1/e/a/z.txt" ),
-                       array( "contents xx", "contents xy", "contents xz" )
-               );
-
-               return $cases;
-       }
-
-       /**
-        * @dataProvider provider_testGetLocalReference
-        */
-       public function testGetLocalReference( $source, $content ) {
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestGetLocalReference( $source, $content );
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestGetLocalReference( $source, $content );
-               $this->tearDownFiles();
-       }
-
-       private function doTestGetLocalReference( $source, $content ) {
-               $backendName = $this->backendClass();
-
-               $srcs = (array)$source;
-               $content = (array)$content;
-               foreach ( $srcs as $i => $src ) {
-                       $this->prepare( array( 'dir' => dirname( $src ) ) );
-                       $status = $this->backend->doOperation(
-                               array( 'op' => 'create', 'content' => $content[$i], 'dst' => $src ) );
-                       $this->assertGoodStatus( $status,
-                               "Creation of file at $src succeeded ($backendName)." );
-               }
-
-               if ( is_array( $source ) ) {
-                       $tmpFiles = $this->backend->getLocalReferenceMulti( array( 'srcs' => $source ) );
-                       foreach ( $tmpFiles as $path => $tmpFile ) {
-                               $this->assertNotNull( $tmpFile,
-                                       "Creation of local copy of $path succeeded ($backendName)." );
-                               $contents = file_get_contents( $tmpFile->getPath() );
-                               $this->assertNotEquals( false, $contents, "Local ref of $path exists ($backendName)." );
-                               $this->assertEquals( current( $content ), $contents, "Local ref of $path is correct ($backendName)." );
-                               next( $content );
-                       }
-                       $this->assertEquals( $source, array_keys( $tmpFiles ), "Local refs in right order ($backendName)." );
-                       $this->assertEquals( count( $source ), count( $tmpFiles ), "Local refs array size correct ($backendName)." );
-               } else {
-                       $tmpFile = $this->backend->getLocalReference( array( 'src' => $source ) );
-                       $this->assertNotNull( $tmpFile,
-                               "Creation of local copy of $source succeeded ($backendName)." );
-                       $contents = file_get_contents( $tmpFile->getPath() );
-                       $this->assertNotEquals( false, $contents, "Local ref of $source exists ($backendName)." );
-                       $this->assertEquals( $content[0], $contents, "Local ref of $source is correct ($backendName)." );
-               }
-       }
-
-       function provider_testGetLocalReference() {
-               $cases = array();
-
-               $base = self::baseStorePath();
-               $cases[] = array( "$base/unittest-cont1/e/a/z/some_file.txt", "some file contents" );
-               $cases[] = array( "$base/unittest-cont1/e/a/some-other_file.txt", "more file contents" );
-               $cases[] = array( "$base/unittest-cont1/e/a/\$odd&.txt", "test file contents" );
-               $cases[] = array(
-                       array( "$base/unittest-cont1/e/a/x.txt", "$base/unittest-cont1/e/a/y.txt",
-                                "$base/unittest-cont1/e/a/z.txt" ),
-                       array( "contents xx", "contents xy", "contents xz" )
-               );
-
-               return $cases;
-       }
-
-       public function testGetLocalCopyAndReference404() {
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestGetLocalCopyAndReference404();
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestGetLocalCopyAndReference404();
-               $this->tearDownFiles();
-       }
-
-       public function doTestGetLocalCopyAndReference404() {
-               $backendName = $this->backendClass();
-
-               $base = self::baseStorePath();
-
-               $tmpFile = $this->backend->getLocalCopy( array(
-                       'src' => "$base/unittest-cont1/not-there" ) );
-               $this->assertEquals( null, $tmpFile, "Local copy of not existing file is null ($backendName)." );
-
-               $tmpFile = $this->backend->getLocalReference( array(
-                       'src' => "$base/unittest-cont1/not-there" ) );
-               $this->assertEquals( null, $tmpFile, "Local ref of not existing file is null ($backendName)." );
-       }
-
-       /**
-        * @dataProvider provider_testPrepareAndClean
-        */
-       public function testPrepareAndClean( $path, $isOK ) {
-               $this->backend = $this->singleBackend;
-               $this->doTestPrepareAndClean( $path, $isOK );
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->doTestPrepareAndClean( $path, $isOK );
-               $this->tearDownFiles();
-       }
-
-       function provider_testPrepareAndClean() {
-               $base = self::baseStorePath();
-               return array(
-                       array( "$base/unittest-cont1/e/a/z/some_file1.txt", true ),
-                       array( "$base/unittest-cont2/a/z/some_file2.txt", true ),
-                       # Specific to FS backend with no basePath field set
-                       #array( "$base/unittest-cont3/a/z/some_file3.txt", false ),
-               );
-       }
-
-       private function doTestPrepareAndClean( $path, $isOK ) {
-               $backendName = $this->backendClass();
-
-               $status = $this->prepare( array( 'dir' => dirname( $path ) ) );
-               if ( $isOK ) {
-                       $this->assertGoodStatus( $status,
-                               "Preparing dir $path succeeded without warnings ($backendName)." );
-                       $this->assertEquals( true, $status->isOK(),
-                               "Preparing dir $path succeeded ($backendName)." );
-               } else {
-                       $this->assertEquals( false, $status->isOK(),
-                               "Preparing dir $path failed ($backendName)." );
-               }
-
-               $status = $this->backend->clean( array( 'dir' => dirname( $path ) ) );
-               if ( $isOK ) {
-                       $this->assertGoodStatus( $status,
-                               "Cleaning dir $path succeeded without warnings ($backendName)." );
-                       $this->assertEquals( true, $status->isOK(),
-                               "Cleaning dir $path succeeded ($backendName)." );
-               } else {
-                       $this->assertEquals( false, $status->isOK(),
-                               "Cleaning dir $path failed ($backendName)." );
-               }
-       }
-
-       public function testRecursiveClean() {
-               $this->backend = $this->singleBackend;
-               $this->doTestRecursiveClean();
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->doTestRecursiveClean();
-               $this->tearDownFiles();
-       }
-
-       private function doTestRecursiveClean() {
-               $backendName = $this->backendClass();
-
-               $base = self::baseStorePath();
-               $dirs = array(
-                       "$base/unittest-cont1/e/a",
-                       "$base/unittest-cont1/e/a/b",
-                       "$base/unittest-cont1/e/a/b/c",
-                       "$base/unittest-cont1/e/a/b/c/d0",
-                       "$base/unittest-cont1/e/a/b/c/d1",
-                       "$base/unittest-cont1/e/a/b/c/d2",
-                       "$base/unittest-cont1/e/a/b/c/d0/1",
-                       "$base/unittest-cont1/e/a/b/c/d0/2",
-                       "$base/unittest-cont1/e/a/b/c/d1/3",
-                       "$base/unittest-cont1/e/a/b/c/d1/4",
-                       "$base/unittest-cont1/e/a/b/c/d2/5",
-                       "$base/unittest-cont1/e/a/b/c/d2/6"
-               );
-               foreach ( $dirs as $dir ) {
-                       $status = $this->prepare( array( 'dir' => $dir ) );
-                       $this->assertGoodStatus( $status,
-                               "Preparing dir $dir succeeded without warnings ($backendName)." );
-               }
-
-               if ( $this->backend instanceof FSFileBackend ) {
-                       foreach ( $dirs as $dir ) {
-                               $this->assertEquals( true, $this->backend->directoryExists( array( 'dir' => $dir ) ),
-                                       "Dir $dir exists ($backendName)." );
-                       }
-               }
-
-               $status = $this->backend->clean(
-                       array( 'dir' => "$base/unittest-cont1", 'recursive' => 1 ) );
-               $this->assertGoodStatus( $status,
-                       "Recursive cleaning of dir $dir succeeded without warnings ($backendName)." );
-
-               foreach ( $dirs as $dir ) {
-                       $this->assertEquals( false, $this->backend->directoryExists( array( 'dir' => $dir ) ),
-                               "Dir $dir no longer exists ($backendName)." );
-               }
-       }
-
-       // @TODO: testSecure
-
-       public function testDoOperations() {
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestDoOperations();
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestDoOperations();
-               $this->tearDownFiles();
-       }
-
-       private function doTestDoOperations() {
-               $base = self::baseStorePath();
-
-               $fileA = "$base/unittest-cont1/e/a/b/fileA.txt";
-               $fileAContents = '3tqtmoeatmn4wg4qe-mg3qt3 tq';
-               $fileB = "$base/unittest-cont1/e/a/b/fileB.txt";
-               $fileBContents = 'g-jmq3gpqgt3qtg q3GT ';
-               $fileC = "$base/unittest-cont1/e/a/b/fileC.txt";
-               $fileCContents = 'eigna[ogmewt 3qt g3qg flew[ag';
-               $fileD = "$base/unittest-cont1/e/a/b/fileD.txt";
-
-               $this->prepare( array( 'dir' => dirname( $fileA ) ) );
-               $this->create( array( 'dst' => $fileA, 'content' => $fileAContents ) );
-               $this->prepare( array( 'dir' => dirname( $fileB ) ) );
-               $this->create( array( 'dst' => $fileB, 'content' => $fileBContents ) );
-               $this->prepare( array( 'dir' => dirname( $fileC ) ) );
-               $this->create( array( 'dst' => $fileC, 'content' => $fileCContents ) );
-               $this->prepare( array( 'dir' => dirname( $fileD ) ) );
-
-               $status = $this->backend->doOperations( array(
-                       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 ),
-                       // Now: A:<A>, B:<B>, C:<A>, D:<empty>
-                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileD, 'overwrite' => 1 ),
-                       // Now: A:<A>, B:<B>, C:<empty>, D:<A>
-                       array( 'op' => 'move', 'src' => $fileB, 'dst' => $fileC ),
-                       // Now: A:<A>, B:<empty>, C:<B>, D:<A>
-                       array( 'op' => 'move', 'src' => $fileD, 'dst' => $fileA, 'overwriteSame' => 1 ),
-                       // Now: A:<A>, B:<empty>, C:<B>, D:<empty>
-                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileA, 'overwrite' => 1 ),
-                       // Now: A:<B>, B:<empty>, C:<empty>, D:<empty>
-                       array( 'op' => 'copy', 'src' => $fileA, 'dst' => $fileC ),
-                       // Now: A:<B>, B:<empty>, C:<B>, D:<empty>
-                       array( 'op' => 'move', 'src' => $fileA, 'dst' => $fileC, 'overwriteSame' => 1 ),
-                       // Now: A:<empty>, B:<empty>, C:<B>, D:<empty>
-                       array( 'op' => 'copy', 'src' => $fileC, 'dst' => $fileC, 'overwrite' => 1 ),
-                       // Does nothing
-                       array( 'op' => 'copy', 'src' => $fileC, 'dst' => $fileC, 'overwriteSame' => 1 ),
-                       // Does nothing
-                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileC, 'overwrite' => 1 ),
-                       // Does nothing
-                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileC, 'overwriteSame' => 1 ),
-                       // Does nothing
-                       array( 'op' => 'null' ),
-                       // Does nothing
-               ) );
-
-               $this->assertGoodStatus( $status, "Operation batch succeeded" );
-               $this->assertEquals( true, $status->isOK(), "Operation batch succeeded" );
-               $this->assertEquals( 13, count( $status->success ),
-                       "Operation batch has correct success array" );
-
-               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileA ) ),
-                       "File does not exist at $fileA" );
-               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileB ) ),
-                       "File does not exist at $fileB" );
-               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileD ) ),
-                       "File does not exist at $fileD" );
-
-               $this->assertEquals( true, $this->backend->fileExists( array( 'src' => $fileC ) ),
-                       "File exists at $fileC" );
-               $this->assertEquals( $fileBContents,
-                       $this->backend->getFileContents( array( 'src' => $fileC ) ),
-                       "Correct file contents of $fileC" );
-               $this->assertEquals( strlen( $fileBContents ),
-                       $this->backend->getFileSize( array( 'src' => $fileC ) ),
-                       "Correct file size of $fileC" );
-               $this->assertEquals( wfBaseConvert( sha1( $fileBContents ), 16, 36, 31 ),
-                       $this->backend->getFileSha1Base36( array( 'src' => $fileC ) ),
-                       "Correct file SHA-1 of $fileC" );
-       }
-
-       public function testDoOperationsPipeline() {
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestDoOperationsPipeline();
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestDoOperationsPipeline();
-               $this->tearDownFiles();
-       }
-
-       // concurrency orientated
-       private function doTestDoOperationsPipeline() {
-               $base = self::baseStorePath();
-
-               $fileAContents = '3tqtmoeatmn4wg4qe-mg3qt3 tq';
-               $fileBContents = 'g-jmq3gpqgt3qtg q3GT ';
-               $fileCContents = 'eigna[ogmewt 3qt g3qg flew[ag';
-
-               $tmpNameA = TempFSFile::factory( "unittests_", 'txt' )->getPath();
-               file_put_contents( $tmpNameA, $fileAContents );
-               $tmpNameB = TempFSFile::factory( "unittests_", 'txt' )->getPath();
-               file_put_contents( $tmpNameB, $fileBContents );
-               $tmpNameC = TempFSFile::factory( "unittests_", 'txt' )->getPath();
-               file_put_contents( $tmpNameC, $fileCContents );
-
-               $this->filesToPrune[] = $tmpNameA; # avoid file leaking
-               $this->filesToPrune[] = $tmpNameB; # avoid file leaking
-               $this->filesToPrune[] = $tmpNameC; # avoid file leaking
-
-               $fileA = "$base/unittest-cont1/e/a/b/fileA.txt";
-               $fileB = "$base/unittest-cont1/e/a/b/fileB.txt";
-               $fileC = "$base/unittest-cont1/e/a/b/fileC.txt";
-               $fileD = "$base/unittest-cont1/e/a/b/fileD.txt";
-
-               $this->prepare( array( 'dir' => dirname( $fileA ) ) );
-               $this->create( array( 'dst' => $fileA, 'content' => $fileAContents ) );
-               $this->prepare( array( 'dir' => dirname( $fileB ) ) );
-               $this->prepare( array( 'dir' => dirname( $fileC ) ) );
-               $this->prepare( array( 'dir' => dirname( $fileD ) ) );
-
-               $status = $this->backend->doOperations( array(
-                       array( 'op' => 'store', 'src' => $tmpNameA, 'dst' => $fileA, 'overwriteSame' => 1 ),
-                       array( 'op' => 'store', 'src' => $tmpNameB, 'dst' => $fileB, 'overwrite' => 1 ),
-                       array( 'op' => 'store', 'src' => $tmpNameC, 'dst' => $fileC, 'overwrite' => 1 ),
-                       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 ),
-                       // Now: A:<A>, B:<B>, C:<A>, D:<empty>
-                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileD, 'overwrite' => 1 ),
-                       // Now: A:<A>, B:<B>, C:<empty>, D:<A>
-                       array( 'op' => 'move', 'src' => $fileB, 'dst' => $fileC ),
-                       // Now: A:<A>, B:<empty>, C:<B>, D:<A>
-                       array( 'op' => 'move', 'src' => $fileD, 'dst' => $fileA, 'overwriteSame' => 1 ),
-                       // Now: A:<A>, B:<empty>, C:<B>, D:<empty>
-                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileA, 'overwrite' => 1 ),
-                       // Now: A:<B>, B:<empty>, C:<empty>, D:<empty>
-                       array( 'op' => 'copy', 'src' => $fileA, 'dst' => $fileC ),
-                       // Now: A:<B>, B:<empty>, C:<B>, D:<empty>
-                       array( 'op' => 'move', 'src' => $fileA, 'dst' => $fileC, 'overwriteSame' => 1 ),
-                       // Now: A:<empty>, B:<empty>, C:<B>, D:<empty>
-                       array( 'op' => 'copy', 'src' => $fileC, 'dst' => $fileC, 'overwrite' => 1 ),
-                       // Does nothing
-                       array( 'op' => 'copy', 'src' => $fileC, 'dst' => $fileC, 'overwriteSame' => 1 ),
-                       // Does nothing
-                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileC, 'overwrite' => 1 ),
-                       // Does nothing
-                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileC, 'overwriteSame' => 1 ),
-                       // Does nothing
-                       array( 'op' => 'null' ),
-                       // Does nothing
-               ) );
-
-               $this->assertGoodStatus( $status, "Operation batch succeeded" );
-               $this->assertEquals( true, $status->isOK(), "Operation batch succeeded" );
-               $this->assertEquals( 16, count( $status->success ),
-                       "Operation batch has correct success array" );
-
-               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileA ) ),
-                       "File does not exist at $fileA" );
-               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileB ) ),
-                       "File does not exist at $fileB" );
-               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileD ) ),
-                       "File does not exist at $fileD" );
-
-               $this->assertEquals( true, $this->backend->fileExists( array( 'src' => $fileC ) ),
-                       "File exists at $fileC" );
-               $this->assertEquals( $fileBContents,
-                       $this->backend->getFileContents( array( 'src' => $fileC ) ),
-                       "Correct file contents of $fileC" );
-               $this->assertEquals( strlen( $fileBContents ),
-                       $this->backend->getFileSize( array( 'src' => $fileC ) ),
-                       "Correct file size of $fileC" );
-               $this->assertEquals( wfBaseConvert( sha1( $fileBContents ), 16, 36, 31 ),
-                       $this->backend->getFileSha1Base36( array( 'src' => $fileC ) ),
-                       "Correct file SHA-1 of $fileC" );
-       }
-
-       public function testDoOperationsFailing() {
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestDoOperationsFailing();
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestDoOperationsFailing();
-               $this->tearDownFiles();
-       }
-
-       private function doTestDoOperationsFailing() {
-               $base = self::baseStorePath();
-
-               $fileA = "$base/unittest-cont2/a/b/fileA.txt";
-               $fileAContents = '3tqtmoeatmn4wg4qe-mg3qt3 tq';
-               $fileB = "$base/unittest-cont2/a/b/fileB.txt";
-               $fileBContents = 'g-jmq3gpqgt3qtg q3GT ';
-               $fileC = "$base/unittest-cont2/a/b/fileC.txt";
-               $fileCContents = 'eigna[ogmewt 3qt g3qg flew[ag';
-               $fileD = "$base/unittest-cont2/a/b/fileD.txt";
-
-               $this->prepare( array( 'dir' => dirname( $fileA ) ) );
-               $this->create( array( 'dst' => $fileA, 'content' => $fileAContents ) );
-               $this->prepare( array( 'dir' => dirname( $fileB ) ) );
-               $this->create( array( 'dst' => $fileB, 'content' => $fileBContents ) );
-               $this->prepare( array( 'dir' => dirname( $fileC ) ) );
-               $this->create( array( 'dst' => $fileC, 'content' => $fileCContents ) );
-
-               $status = $this->backend->doOperations( array(
-                       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 ),
-                       // Now: A:<A>, B:<B>, C:<A>, D:<empty>
-                       array( 'op' => 'copy', 'src' => $fileB, 'dst' => $fileD, 'overwrite' => 1 ),
-                       // Now: A:<A>, B:<B>, C:<A>, D:<B>
-                       array( 'op' => 'move', 'src' => $fileC, 'dst' => $fileD ),
-                       // Now: A:<A>, B:<B>, C:<A>, D:<empty> (failed)
-                       array( 'op' => 'move', 'src' => $fileB, 'dst' => $fileC, 'overwriteSame' => 1 ),
-                       // Now: A:<A>, B:<B>, C:<A>, D:<empty> (failed)
-                       array( 'op' => 'move', 'src' => $fileB, 'dst' => $fileA, 'overwrite' => 1 ),
-                       // Now: A:<B>, B:<empty>, C:<A>, D:<empty>
-                       array( 'op' => 'delete', 'src' => $fileD ),
-                       // Now: A:<B>, B:<empty>, C:<A>, D:<empty>
-                       array( 'op' => 'null' ),
-                       // Does nothing
-               ), array( 'force' => 1 ) );
-
-               $this->assertNotEquals( array(), $status->errors, "Operation had warnings" );
-               $this->assertEquals( true, $status->isOK(), "Operation batch succeeded" );
-               $this->assertEquals( 8, count( $status->success ),
-                       "Operation batch has correct success array" );
-
-               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileB ) ),
-                       "File does not exist at $fileB" );
-               $this->assertEquals( false, $this->backend->fileExists( array( 'src' => $fileD ) ),
-                       "File does not exist at $fileD" );
-
-               $this->assertEquals( true, $this->backend->fileExists( array( 'src' => $fileA ) ),
-                       "File does not exist at $fileA" );
-               $this->assertEquals( true, $this->backend->fileExists( array( 'src' => $fileC ) ),
-                       "File exists at $fileC" );
-               $this->assertEquals( $fileBContents,
-                       $this->backend->getFileContents( array( 'src' => $fileA ) ),
-                       "Correct file contents of $fileA" );
-               $this->assertEquals( strlen( $fileBContents ),
-                       $this->backend->getFileSize( array( 'src' => $fileA ) ),
-                       "Correct file size of $fileA" );
-               $this->assertEquals( wfBaseConvert( sha1( $fileBContents ), 16, 36, 31 ),
-                       $this->backend->getFileSha1Base36( array( 'src' => $fileA ) ),
-                       "Correct file SHA-1 of $fileA" );
-       }
-
-       public function testGetFileList() {
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestGetFileList();
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestGetFileList();
-               $this->tearDownFiles();
-       }
-
-       private function doTestGetFileList() {
-               $backendName = $this->backendClass();
-               $base = self::baseStorePath();
-
-               // Should have no errors
-               $iter = $this->backend->getFileList( array( 'dir' => "$base/unittest-cont-notexists" ) );
-
-               $files = array(
-                       "$base/unittest-cont1/e/test1.txt",
-                       "$base/unittest-cont1/e/test2.txt",
-                       "$base/unittest-cont1/e/test3.txt",
-                       "$base/unittest-cont1/e/subdir1/test1.txt",
-                       "$base/unittest-cont1/e/subdir1/test2.txt",
-                       "$base/unittest-cont1/e/subdir2/test3.txt",
-                       "$base/unittest-cont1/e/subdir2/test4.txt",
-                       "$base/unittest-cont1/e/subdir2/subdir/test1.txt",
-                       "$base/unittest-cont1/e/subdir2/subdir/test2.txt",
-                       "$base/unittest-cont1/e/subdir2/subdir/test3.txt",
-                       "$base/unittest-cont1/e/subdir2/subdir/test4.txt",
-                       "$base/unittest-cont1/e/subdir2/subdir/test5.txt",
-                       "$base/unittest-cont1/e/subdir2/subdir/sub/test0.txt",
-                       "$base/unittest-cont1/e/subdir2/subdir/sub/120-px-file.txt",
-               );
-
-               // Add the files
-               $ops = array();
-               foreach ( $files as $file ) {
-                       $this->prepare( array( 'dir' => dirname( $file ) ) );
-                       $ops[] = array( 'op' => 'create', 'content' => 'xxy', 'dst' => $file );
-               }
-               $status = $this->backend->doQuickOperations( $ops );
-               $this->assertGoodStatus( $status,
-                       "Creation of files succeeded ($backendName)." );
-               $this->assertEquals( true, $status->isOK(),
-                       "Creation of files succeeded with OK status ($backendName)." );
-
-               // Expected listing
-               $expected = array(
-                       "e/test1.txt",
-                       "e/test2.txt",
-                       "e/test3.txt",
-                       "e/subdir1/test1.txt",
-                       "e/subdir1/test2.txt",
-                       "e/subdir2/test3.txt",
-                       "e/subdir2/test4.txt",
-                       "e/subdir2/subdir/test1.txt",
-                       "e/subdir2/subdir/test2.txt",
-                       "e/subdir2/subdir/test3.txt",
-                       "e/subdir2/subdir/test4.txt",
-                       "e/subdir2/subdir/test5.txt",
-                       "e/subdir2/subdir/sub/test0.txt",
-                       "e/subdir2/subdir/sub/120-px-file.txt",
-               );
-               sort( $expected );
-
-               // Actual listing (no trailing slash)
-               $list = array();
-               $iter = $this->backend->getFileList( array( 'dir' => "$base/unittest-cont1" ) );
-               foreach ( $iter as $file ) {
-                       $list[] = $file;
-               }
-               sort( $list );
-
-               $this->assertEquals( $expected, $list, "Correct file listing ($backendName)." );
-
-               // Actual listing (with trailing slash)
-               $list = array();
-               $iter = $this->backend->getFileList( array( 'dir' => "$base/unittest-cont1/" ) );
-               foreach ( $iter as $file ) {
-                       $list[] = $file;
-               }
-               sort( $list );
-
-               $this->assertEquals( $expected, $list, "Correct file listing ($backendName)." );
-
-               // Expected listing
-               $expected = array(
-                       "test1.txt",
-                       "test2.txt",
-                       "test3.txt",
-                       "test4.txt",
-                       "test5.txt",
-                       "sub/test0.txt",
-                       "sub/120-px-file.txt",
-               );
-               sort( $expected );
-
-               // Actual listing (no trailing slash)
-               $list = array();
-               $iter = $this->backend->getFileList( array( 'dir' => "$base/unittest-cont1/e/subdir2/subdir" ) );
-               foreach ( $iter as $file ) {
-                       $list[] = $file;
-               }
-               sort( $list );
-
-               $this->assertEquals( $expected, $list, "Correct file listing ($backendName)." );
-
-               // Actual listing (with trailing slash)
-               $list = array();
-               $iter = $this->backend->getFileList( array( 'dir' => "$base/unittest-cont1/e/subdir2/subdir/" ) );
-               foreach ( $iter as $file ) {
-                       $list[] = $file;
-               }
-               sort( $list );
-
-               $this->assertEquals( $expected, $list, "Correct file listing ($backendName)." );
-
-               // Actual listing (using iterator second time)
-               $list = array();
-               foreach ( $iter as $file ) {
-                       $list[] = $file;
-               }
-               sort( $list );
-
-               $this->assertEquals( $expected, $list, "Correct file listing ($backendName), second iteration." );
-
-               // Expected listing (top files only)
-               $expected = array(
-                       "test1.txt",
-                       "test2.txt",
-                       "test3.txt",
-                       "test4.txt",
-                       "test5.txt"
-               );
-               sort( $expected );
-
-               // Actual listing (top files only)
-               $list = array();
-               $iter = $this->backend->getTopFileList( array( 'dir' => "$base/unittest-cont1/e/subdir2/subdir" ) );
-               foreach ( $iter as $file ) {
-                       $list[] = $file;
-               }
-               sort( $list );
-
-               $this->assertEquals( $expected, $list, "Correct top file listing ($backendName)." );
-
-               foreach ( $files as $file ) { // clean up
-                       $this->backend->doOperation( array( 'op' => 'delete', 'src' => $file ) );
-               }
-
-               $iter = $this->backend->getFileList( array( 'dir' => "$base/unittest-cont1/not/exists" ) );
-               foreach ( $iter as $iter ) {} // no errors
-       }
-
-       public function testGetDirectoryList() {
-               $this->backend = $this->singleBackend;
-               $this->tearDownFiles();
-               $this->doTestGetDirectoryList();
-               $this->tearDownFiles();
-
-               $this->backend = $this->multiBackend;
-               $this->tearDownFiles();
-               $this->doTestGetDirectoryList();
-               $this->tearDownFiles();
-       }
-
-       private function doTestGetDirectoryList() {
-               $backendName = $this->backendClass();
-
-               $base = self::baseStorePath();
-               $files = array(
-                       "$base/unittest-cont1/e/test1.txt",
-                       "$base/unittest-cont1/e/test2.txt",
-                       "$base/unittest-cont1/e/test3.txt",
-                       "$base/unittest-cont1/e/subdir1/test1.txt",
-                       "$base/unittest-cont1/e/subdir1/test2.txt",
-                       "$base/unittest-cont1/e/subdir2/test3.txt",
-                       "$base/unittest-cont1/e/subdir2/test4.txt",
-                       "$base/unittest-cont1/e/subdir2/subdir/test1.txt",
-                       "$base/unittest-cont1/e/subdir3/subdir/test2.txt",
-                       "$base/unittest-cont1/e/subdir4/subdir/test3.txt",
-                       "$base/unittest-cont1/e/subdir4/subdir/test4.txt",
-                       "$base/unittest-cont1/e/subdir4/subdir/test5.txt",
-                       "$base/unittest-cont1/e/subdir4/subdir/sub/test0.txt",
-                       "$base/unittest-cont1/e/subdir4/subdir/sub/120-px-file.txt",
-               );
-
-               // Add the files
-               $ops = array();
-               foreach ( $files as $file ) {
-                       $this->prepare( array( 'dir' => dirname( $file ) ) );
-                       $ops[] = array( 'op' => 'create', 'content' => 'xxy', 'dst' => $file );
-               }
-               $status = $this->backend->doQuickOperations( $ops );
-               $this->assertGoodStatus( $status,
-                       "Creation of files succeeded ($backendName)." );
-               $this->assertEquals( true, $status->isOK(),
-                       "Creation of files succeeded with OK status ($backendName)." );
-
-               $this->assertEquals( true,
-                       $this->backend->directoryExists( array( 'dir' => "$base/unittest-cont1/e/subdir1" ) ),
-                       "Directory exists in ($backendName)." );
-               $this->assertEquals( true,
-                       $this->backend->directoryExists( array( 'dir' => "$base/unittest-cont1/e/subdir2/subdir" ) ),
-                       "Directory exists in ($backendName)." );
-               $this->assertEquals( false,
-                       $this->backend->directoryExists( array( 'dir' => "$base/unittest-cont1/e/subdir2/test1.txt" ) ),
-                       "Directory does not exists in ($backendName)." );
-
-               // Expected listing
-               $expected = array(
-                       "e",
-               );
-               sort( $expected );
-
-               // Actual listing (no trailing slash)
-               $list = array();
-               $iter = $this->backend->getTopDirectoryList( array( 'dir' => "$base/unittest-cont1" ) );
-               foreach ( $iter as $file ) {
-                       $list[] = $file;
-               }
-               sort( $list );
-
-               $this->assertEquals( $expected, $list, "Correct top dir listing ($backendName)." );
-
-               // Expected listing
-               $expected = array(
-                       "subdir1",
-                       "subdir2",
-                       "subdir3",
-                       "subdir4",
-               );
-               sort( $expected );
-
-               // Actual listing (no trailing slash)
-               $list = array();
-               $iter = $this->backend->getTopDirectoryList( array( 'dir' => "$base/unittest-cont1/e" ) );
-               foreach ( $iter as $file ) {
-                       $list[] = $file;
-               }
-               sort( $list );
-
-               $this->assertEquals( $expected, $list, "Correct top dir listing ($backendName)." );
-
-               // Actual listing (with trailing slash)
-               $list = array();
-               $iter = $this->backend->getTopDirectoryList( array( 'dir' => "$base/unittest-cont1/e/" ) );
-               foreach ( $iter as $file ) {
-                       $list[] = $file;
-               }
-               sort( $list );
-
-               $this->assertEquals( $expected, $list, "Correct top dir listing ($backendName)." );
-
-               // Expected listing
-               $expected = array(
-                       "subdir",
-               );
-               sort( $expected );
-
-               // Actual listing (no trailing slash)
-               $list = array();
-               $iter = $this->backend->getTopDirectoryList( array( 'dir' => "$base/unittest-cont1/e/subdir2" ) );
-               foreach ( $iter as $file ) {
-                       $list[] = $file;
-               }
-               sort( $list );
-
-               $this->assertEquals( $expected, $list, "Correct top dir listing ($backendName)." );
-
-               // Actual listing (with trailing slash)
-               $list = array();
-               $iter = $this->backend->getTopDirectoryList( array( 'dir' => "$base/unittest-cont1/e/subdir2/" ) );
-               foreach ( $iter as $file ) {
-                       $list[] = $file;
-               }
-               sort( $list );
-
-               $this->assertEquals( $expected, $list, "Correct top dir listing ($backendName)." );
-
-               // Actual listing (using iterator second time)
-               $list = array();
-               foreach ( $iter as $file ) {
-                       $list[] = $file;
-               }
-               sort( $list );
-
-               $this->assertEquals( $expected, $list, "Correct top dir listing ($backendName), second iteration." );
-
-               // Expected listing (recursive)
-               $expected = array(
-                       "e",
-                       "e/subdir1",
-                       "e/subdir2",
-                       "e/subdir3",
-                       "e/subdir4",
-                       "e/subdir2/subdir",
-                       "e/subdir3/subdir",
-                       "e/subdir4/subdir",
-                       "e/subdir4/subdir/sub",
-               );
-               sort( $expected );
-
-               // Actual listing (recursive)
-               $list = array();
-               $iter = $this->backend->getDirectoryList( array( 'dir' => "$base/unittest-cont1/" ) );
-               foreach ( $iter as $file ) {
-                       $list[] = $file;
-               }
-               sort( $list );
-
-               $this->assertEquals( $expected, $list, "Correct dir listing ($backendName)." );
-
-               // Expected listing (recursive)
-               $expected = array(
-                       "subdir",
-                       "subdir/sub",
-               );
-               sort( $expected );
-
-               // Actual listing (recursive)
-               $list = array();
-               $iter = $this->backend->getDirectoryList( array( 'dir' => "$base/unittest-cont1/e/subdir4" ) );
-               foreach ( $iter as $file ) {
-                       $list[] = $file;
-               }
-               sort( $list );
-
-               $this->assertEquals( $expected, $list, "Correct dir listing ($backendName)." );
-
-               // Actual listing (recursive, second time)
-               $list = array();
-               foreach ( $iter as $file ) {
-                       $list[] = $file;
-               }
-               sort( $list );
-
-               $this->assertEquals( $expected, $list, "Correct dir listing ($backendName)." );
-
-               foreach ( $files as $file ) { // clean up
-                       $this->backend->doOperation( array( 'op' => 'delete', 'src' => $file ) );
-               }
-
-               $iter = $this->backend->getDirectoryList( array( 'dir' => "$base/unittest-cont1/not/exists" ) );
-               foreach ( $iter as $iter ) {} // no errors
-       }
-
-       public function testLockCalls() {
-               $this->backend = $this->singleBackend;
-               $this->doTestLockCalls();
-       }
-
-       private function doTestLockCalls() {
-               $backendName = $this->backendClass();
-
-               for ( $i=0; $i<50; $i++ ) {
-                       $paths = array(
-                               "test1.txt",
-                               "test2.txt",
-                               "test3.txt",
-                               "subdir1",
-                               "subdir1", // duplicate
-                               "subdir1/test1.txt",
-                               "subdir1/test2.txt",
-                               "subdir2",
-                               "subdir2", // duplicate
-                               "subdir2/test3.txt",
-                               "subdir2/test4.txt",
-                               "subdir2/subdir",
-                               "subdir2/subdir/test1.txt",
-                               "subdir2/subdir/test2.txt",
-                               "subdir2/subdir/test3.txt",
-                               "subdir2/subdir/test4.txt",
-                               "subdir2/subdir/test5.txt",
-                               "subdir2/subdir/sub",
-                               "subdir2/subdir/sub/test0.txt",
-                               "subdir2/subdir/sub/120-px-file.txt",
-                       );
-
-                       $status = $this->backend->lockFiles( $paths, LockManager::LOCK_EX );
-                       $this->assertEquals( array(), $status->errors,
-                               "Locking of files succeeded ($backendName)." );
-                       $this->assertEquals( true, $status->isOK(),
-                               "Locking of files succeeded with OK status ($backendName)." );
-
-                       $status = $this->backend->lockFiles( $paths, LockManager::LOCK_SH );
-                       $this->assertEquals( array(), $status->errors,
-                               "Locking of files succeeded ($backendName)." );
-                       $this->assertEquals( true, $status->isOK(),
-                               "Locking of files succeeded with OK status ($backendName)." );
-
-                       $status = $this->backend->unlockFiles( $paths, LockManager::LOCK_SH );
-                       $this->assertEquals( array(), $status->errors,
-                               "Locking of files succeeded ($backendName)." );
-                       $this->assertEquals( true, $status->isOK(),
-                               "Locking of files succeeded with OK status ($backendName)." );
-
-                       $status = $this->backend->unlockFiles( $paths, LockManager::LOCK_EX );
-                       $this->assertEquals( array(), $status->errors,
-                               "Locking of files succeeded ($backendName)." );
-                       $this->assertEquals( true, $status->isOK(),
-                               "Locking of files succeeded with OK status ($backendName)." );
-               }
-       }
-
-       // test helper wrapper for backend prepare() function
-       private function prepare( array $params ) {
-               return $this->backend->prepare( $params );
-       }
-
-       // test helper wrapper for backend prepare() function
-       private function create( array $params ) {
-               $params['op'] = 'create';
-               return $this->backend->doQuickOperations( array( $params ) );
-       }
-
-       function tearDownFiles() {
-               foreach ( $this->filesToPrune as $file ) {
-                       @unlink( $file );
-               }
-               $containers = array( 'unittest-cont1', 'unittest-cont2' );
-               foreach ( $containers as $container ) {
-                       $this->deleteFiles( $container );
-               }
-               $this->filesToPrune = array();
-       }
-
-       private function deleteFiles( $container ) {
-               $base = self::baseStorePath();
-               $iter = $this->backend->getFileList( array( 'dir' => "$base/$container" ) );
-               if ( $iter ) {
-                       foreach ( $iter as $file ) {
-                               $this->backend->quickDelete( array( 'src' => "$base/$container/$file" ) );
-                       }
-               }
-               $this->backend->clean( array( 'dir' => "$base/$container", 'recursive' => 1 ) );
-       }
-
-       function assertBackendPathsConsistent( array $paths ) {
-               if ( $this->backend instanceof FileBackendMultiWrite ) {
-                       $status = $this->backend->consistencyCheck( $paths );
-                       $this->assertGoodStatus( $status, "Files synced: " . implode( ',', $paths ) );
-               }
-       }
-
-       function assertGoodStatus( $status, $msg ) {
-               $this->assertEquals( print_r( array(), 1 ), print_r( $status->errors, 1 ), $msg );
-       }
-}
index 362f304..b0d72f3 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -343,17 +343,18 @@ function wfExtractThumbParams( $uriPath ) {
                $params['temp'] = 1;
        }
 
+       // Check hooks if parameters can be extracted
+       // Hooks return false if they manage to *resolve* the parameters
+       if ( !wfRunHooks( 'ExtractThumbParameters', array( $thumbname, &$params ) ) ) {
+               return $params; // valid thumbnail URL (via extension or config)
        // Check if the parameters can be extracted from the thumbnail name...
-       if ( preg_match( '!^(page(\d*)-)*(\d*)px-[^/]*$!', $thumbname, $matches ) ) {
+       } elseif ( preg_match( '!^(page(\d*)-)*(\d*)px-[^/]*$!', $thumbname, $matches ) ) {
                list( /* all */, $pagefull, $pagenum, $size ) = $matches;
                $params['width'] = $size;
                if ( $pagenum ) {
                        $params['page'] = $pagenum;
                }
                return $params; // valid thumbnail URL
-       // Hooks return false if they manage to *resolve* the parameters
-       } elseif ( !wfRunHooks( 'ExtractThumbParameters', array( $thumbname, &$params ) ) ) {
-               return $params; // valid thumbnail URL (via extension or config)
        }
 
        return null; // not a valid thumbnail URL