Merge "Append redirect=no to RecentChanges/Watchlist redirect entries"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 30 Apr 2014 20:19:56 +0000 (20:19 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 30 Apr 2014 20:19:56 +0000 (20:19 +0000)
163 files changed:
includes/AutoLoader.php
includes/Revision.php
includes/Skin.php
includes/Title.php
includes/UserMailer.php
includes/Wiki.php
includes/WikiPage.php
includes/api/ApiMain.php
includes/api/ApiParse.php
includes/api/ApiUpload.php
includes/context/ContextSource.php
includes/context/DerivativeContext.php
includes/context/IContextSource.php
includes/context/RequestContext.php
includes/db/DatabaseError.php
includes/db/DatabaseMssql.php
includes/db/DatabasePostgres.php
includes/filerepo/file/File.php
includes/filerepo/file/LocalFile.php
includes/installer/MssqlUpdater.php
includes/installer/i18n/be-tarask.json
includes/installer/i18n/cs.json
includes/installer/i18n/es.json
includes/installer/i18n/fa.json
includes/installer/i18n/fr.json
includes/installer/i18n/ko.json
includes/installer/i18n/mk.json
includes/installer/i18n/pl.json
includes/installer/i18n/pt.json
includes/installer/i18n/sco.json
includes/installer/i18n/zh-hans.json
includes/installer/i18n/zh-hant.json
includes/jobqueue/Job.php
includes/jobqueue/JobQueue.php
includes/jobqueue/JobQueueDB.php
includes/jobqueue/JobQueueFederated.php
includes/jobqueue/JobQueueGroup.php
includes/jobqueue/JobQueueRedis.php
includes/json/FormatJson.php
includes/libs/MultiHttpClient.php
includes/libs/virtualrest/SwiftVirtualRESTService.php [new file with mode: 0644]
includes/libs/virtualrest/VirtualRESTService.php [new file with mode: 0644]
includes/libs/virtualrest/VirtualRESTServiceClient.php [new file with mode: 0644]
includes/objectcache/BagOStuff.php
includes/objectcache/MemcachedPeclBagOStuff.php
includes/objectcache/RedisBagOStuff.php
includes/objectcache/SqlBagOStuff.php
includes/profiler/Profiler.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/revisiondelete/RevisionDelete.php
includes/specials/SpecialImport.php
languages/i18n/as.json
languages/i18n/be-tarask.json
languages/i18n/bo.json
languages/i18n/ce.json
languages/i18n/ckb.json
languages/i18n/cs.json
languages/i18n/cy.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/dtp.json
languages/i18n/egl.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/gd.json
languages/i18n/gl.json
languages/i18n/gu.json
languages/i18n/hr.json
languages/i18n/hsb.json
languages/i18n/kk-cyrl.json
languages/i18n/ko.json
languages/i18n/lb.json
languages/i18n/lmo.json
languages/i18n/lt.json
languages/i18n/mg.json
languages/i18n/mhr.json
languages/i18n/mk.json
languages/i18n/mn.json
languages/i18n/mr.json
languages/i18n/nb.json
languages/i18n/nn.json
languages/i18n/pa.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/sco.json
languages/i18n/sh.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/jsduck/MetaTags.rb [deleted file]
maintenance/jsduck/categories.json
maintenance/jsduck/config.json
maintenance/mssql/archives/patch-user_password_expires.sql [new file with mode: 0644]
maintenance/mssql/tables.sql
maintenance/mwjsduck-gen
maintenance/runJobs.php
resources/Resources.php
resources/lib/oojs-ui/i18n/sco.json
resources/lib/oojs-ui/i18n/yi.json
resources/lib/oojs-ui/i18n/zh-hant.json
resources/lib/oojs-ui/images/icons/info.png [new file with mode: 0644]
resources/lib/oojs-ui/images/icons/info.svg [new file with mode: 0644]
resources/lib/oojs-ui/images/indicators/alert.png [new file with mode: 0644]
resources/lib/oojs-ui/images/indicators/alert.svg [new file with mode: 0644]
resources/lib/oojs-ui/images/indicators/required.png
resources/lib/oojs-ui/images/indicators/required.svg
resources/lib/oojs-ui/oojs-ui-apex.css
resources/lib/oojs-ui/oojs-ui.js
resources/lib/oojs-ui/oojs-ui.svg.css
resources/src/jquery/jquery.accessKeyLabel.js [new file with mode: 0644]
resources/src/jquery/jquery.byteLength.js
resources/src/jquery/jquery.checkboxShiftClick.js
resources/src/jquery/jquery.client.js
resources/src/jquery/jquery.colorUtil.js
resources/src/jquery/jquery.footHovzer.js
resources/src/jquery/jquery.getAttrs.js
resources/src/jquery/jquery.hidpi.js
resources/src/jquery/jquery.makeCollapsible.js
resources/src/jquery/jquery.tabIndex.js
resources/src/jquery/jquery.textSelection.js
resources/src/mediawiki.action/mediawiki.action.edit.preview.js
resources/src/mediawiki.action/mediawiki.action.edit.styles.css
resources/src/mediawiki.action/mediawiki.action.history.js
resources/src/mediawiki.action/mediawiki.action.view.dblClickEdit.js
resources/src/mediawiki.action/mediawiki.action.view.metadata.js
resources/src/mediawiki.action/mediawiki.action.view.redirectToFragment.js
resources/src/mediawiki.action/mediawiki.action.view.rightClickEdit.js
resources/src/mediawiki.language/mediawiki.language.init.js
resources/src/mediawiki.page/mediawiki.page.gallery.js
resources/src/mediawiki.page/mediawiki.page.image.pagination.js
resources/src/mediawiki.page/mediawiki.page.patrol.ajax.js
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.user.js
resources/src/mediawiki/mediawiki.util.js
skins/Modern.php
skins/Vector.php
skins/common/wikibits.js
skins/vector/components/common.less
tests/TestsAutoLoader.php
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/media/DjVuTest.php
tests/phpunit/includes/parser/NewParserTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderStartupModuleTest.php
tests/phpunit/mocks/media/MockDjVuHandler.php [new file with mode: 0644]
tests/qunit/QUnitTestResources.php
tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.parse.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
tests/qunit/suites/resources/mediawiki.api/mediawiki.api.watch.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js
tests/testHelpers.inc
thumb.php

index d3aabfe..73b1577 100644 (file)
@@ -697,6 +697,9 @@ $wgAutoloadLocalClasses = array(
        'RunningStat' => 'includes/libs/RunningStat.php',
        'ScopedCallback' => 'includes/libs/ScopedCallback.php',
        'ScopedPHPTimeout' => 'includes/libs/ScopedPHPTimeout.php',
+       'SwiftVirtualRESTService' => 'includes/libs/virtualrest/SwiftVirtualRESTService.php',
+       'VirtualRESTService' => 'includes/libs/virtualrest/VirtualRESTService.php',
+       'VirtualRESTServiceClient' => 'includes/libs/virtualrest/VirtualRESTServiceClient.php',
        'XmlTypeCheck' => 'includes/libs/XmlTypeCheck.php',
 
        # includes/libs/lessphp
index 7b30540..afbd3ac 100644 (file)
@@ -1566,9 +1566,10 @@ class Revision implements IDBAccessObject {
         * @param int $pageId: ID number of the page to read from
         * @param string $summary Revision's summary
         * @param bool $minor Whether the revision should be considered as minor
+        * @param User|null $user User object to use or null for $wgUser
         * @return Revision|null Revision or null on error
         */
-       public static function newNullRevision( $dbw, $pageId, $summary, $minor ) {
+       public static function newNullRevision( $dbw, $pageId, $summary, $minor, $user = null ) {
                global $wgContentHandlerUseDB;
 
                wfProfileIn( __METHOD__ );
@@ -1591,8 +1592,15 @@ class Revision implements IDBAccessObject {
                        __METHOD__ );
 
                if ( $current ) {
+                       if ( !$user ) {
+                               global $wgUser;
+                               $user = $wgUser;
+                       }
+
                        $row = array(
                                'page'       => $pageId,
+                               'user_text'  => $user->getName(),
+                               'user'       => $user->getId(),
                                'comment'    => $summary,
                                'minor_edit' => $minor,
                                'text_id'    => $current->rev_text_id,
index d3fa607..8300da7 100644 (file)
@@ -683,7 +683,7 @@ abstract class Skin extends ContextSource {
                        // oldid not available for non existing pages
                        $url = htmlspecialchars( wfExpandIRI( $this->getTitle()->getCanonicalURL() ) );
                }
-               return $this->msg( 'retrievedfrom', '<a href="' . $url . '">' . $url . '</a>' )->text();
+               return $this->msg( 'retrievedfrom', '<a dir="ltr" href="' . $url . '">' . $url . '</a>' )->text();
        }
 
        /**
index 4dc0372..70d2baa 100644 (file)
@@ -3859,7 +3859,7 @@ class Title {
                }
 
                # Save a null revision in the page's history notifying of the move
-               $nullRevision = Revision::newNullRevision( $dbw, $oldid, $comment, true );
+               $nullRevision = Revision::newNullRevision( $dbw, $oldid, $comment, true, $wgUser );
                if ( !is_object( $nullRevision ) ) {
                        throw new MWException( 'No valid null revision produced in ' . __METHOD__ );
                }
@@ -3906,6 +3906,8 @@ class Title {
                                $redirectRevision = new Revision( array(
                                        'title' => $this, // for determining the default content model
                                        'page' => $newid,
+                                       'user_text' => $wgUser->getName(),
+                                       'user' => $wgUser->getId(),
                                        'comment' => $comment,
                                        'content' => $redirectContent ) );
                                $redirectRevision->insertOn( $dbw );
index 2094b62..025d704 100644 (file)
@@ -738,13 +738,13 @@ class EmailNotification {
                                        ->inContentLanguage()->text();
                        }
                        $keys['$OLDID'] = $this->oldid;
-                       // @deprecated Remove in MediaWiki 1.23.
+                       // Deprecated since MediaWiki 1.21, not used by default. Kept for backwards-compatibility.
                        $keys['$CHANGEDORCREATED'] = wfMessage( 'changed' )->inContentLanguage()->text();
                } else {
                        # clear $OLDID placeholder in the message template
                        $keys['$OLDID'] = '';
                        $keys['$NEWPAGE'] = '';
-                       // @deprecated Remove in MediaWiki 1.23.
+                       // Deprecated since MediaWiki 1.21, not used by default. Kept for backwards-compatibility.
                        $keys['$CHANGEDORCREATED'] = wfMessage( 'created' )->inContentLanguage()->text();
                }
 
index 2ef1382..aed1f65 100644 (file)
@@ -542,7 +542,7 @@ class MediaWiki {
                        $request->getProtocol() == 'http'
                ) {
                        $oldUrl = $request->getFullRequestURL();
-                       $redirUrl = str_replace( 'http://', 'https://', $oldUrl );
+                       $redirUrl = preg_replace( '#^http://#', 'https://', $oldUrl );
 
                        if ( $request->wasPosted() ) {
                                // This is weird and we'd hope it almost never happens. This
index 8e15ac9..d53acd0 100644 (file)
@@ -2173,19 +2173,17 @@ class WikiPage implements Page, IDBAccessObject {
 
                if ( !$options['changed'] ) {
                        $good = 0;
-                       $total = 0;
                } elseif ( $options['created'] ) {
                        $good = (int)$this->isCountable( $editInfo );
-                       $total = 1;
                } elseif ( $options['oldcountable'] !== null ) {
                        $good = (int)$this->isCountable( $editInfo ) - (int)$options['oldcountable'];
-                       $total = 0;
                } else {
                        $good = 0;
-                       $total = 0;
                }
+               $edits = $options['changed'] ? 1 : 0;
+               $total = $options['created'] ? 1 : 0;
 
-               DeferredUpdates::addUpdate( new SiteStatsUpdate( 0, 1, $good, $total ) );
+               DeferredUpdates::addUpdate( new SiteStatsUpdate( 0, $edits, $good, $total ) );
                DeferredUpdates::addUpdate( new SearchUpdate( $id, $title, $content ) );
 
                // If this is another user's talk page, update newtalk.
@@ -2226,7 +2224,7 @@ class WikiPage implements Page, IDBAccessObject {
 
                if ( $options['created'] ) {
                        self::onArticleCreate( $this->mTitle );
-               } else {
+               } elseif ( $options['changed'] ) { // bug 50785
                        self::onArticleEdit( $this->mTitle );
                }
 
@@ -2274,6 +2272,8 @@ class WikiPage implements Page, IDBAccessObject {
                $revision = new Revision( array(
                        'title'      => $this->getTitle(), // for determining the default content model
                        'page'       => $this->getId(),
+                       'user_text'  => $user->getName(),
+                       'user'       => $user->getId(),
                        'text'       => $serialized,
                        'length'     => $content->getSize(),
                        'comment'    => $comment,
@@ -2407,7 +2407,7 @@ class WikiPage implements Page, IDBAccessObject {
 
                        // insert null revision to identify the page protection change as edit summary
                        $latest = $this->getLatest();
-                       $nullRevision = $this->insertProtectNullRevision( $revCommentMsg, $limit, $expiry, $cascade, $reason );
+                       $nullRevision = $this->insertProtectNullRevision( $revCommentMsg, $limit, $expiry, $cascade, $reason, $user );
                        if ( $nullRevision === null ) {
                                return Status::newFatal( 'no-null-revision', $this->mTitle->getPrefixedText() );
                        }
@@ -2506,9 +2506,10 @@ class WikiPage implements Page, IDBAccessObject {
         * @param array $expiry Per restriction type expiration
         * @param int $cascade Set to false if cascading protection isn't allowed.
         * @param string $reason
+        * @param User|null $user
         * @return Revision|null Null on error
         */
-       public function insertProtectNullRevision( $revCommentMsg, array $limit, array $expiry, $cascade, $reason ) {
+       public function insertProtectNullRevision( $revCommentMsg, array $limit, array $expiry, $cascade, $reason, $user = null ) {
                global $wgContLang;
                $dbw = wfGetDB( DB_MASTER );
 
@@ -2534,7 +2535,7 @@ class WikiPage implements Page, IDBAccessObject {
                        )->inContentLanguage()->text();
                }
 
-               $nullRev = Revision::newNullRevision( $dbw, $this->getId(), $editComment, true );
+               $nullRev = Revision::newNullRevision( $dbw, $this->getId(), $editComment, true, $user );
                if ( $nullRev ) {
                        $nullRev->insertOn( $dbw );
 
index 078e57a..554bfa6 100644 (file)
@@ -989,7 +989,18 @@ class ApiMain extends ApiBase {
        public function getVal( $name, $default = null ) {
                $this->mParamsUsed[$name] = true;
 
-               return $this->getRequest()->getVal( $name, $default );
+               $ret = $this->getRequest()->getVal( $name );
+               if ( $ret === null ) {
+                       if ( $this->getRequest()->getArray( $name ) !== null ) {
+                               // See bug 10262 for why we don't just join( '|', ... ) the
+                               // array.
+                               $this->setWarning(
+                                       "Parameter '$name' uses unsupported PHP array syntax"
+                               );
+                       }
+                       $ret = $default;
+               }
+               return $ret;
        }
 
        /**
@@ -999,9 +1010,7 @@ class ApiMain extends ApiBase {
         * @return bool
         */
        public function getCheck( $name ) {
-               $this->mParamsUsed[$name] = true;
-
-               return $this->getRequest()->getCheck( $name );
+               return $this->getVal( $name, null ) !== null;
        }
 
        /**
index a7cc436..fcba5b5 100644 (file)
@@ -346,6 +346,13 @@ class ApiParse extends ApiBase {
                        }
                }
 
+               if ( isset( $prop['modules'] ) ) {
+                       $result_array['modules'] = array_values( array_unique( $p_result->getModules() ) );
+                       $result_array['modulescripts'] = array_values( array_unique( $p_result->getModuleScripts() ) );
+                       $result_array['modulestyles'] = array_values( array_unique( $p_result->getModuleStyles() ) );
+                       $result_array['modulemessages'] = array_values( array_unique( $p_result->getModuleMessages() ) );
+               }
+
                if ( isset( $prop['iwlinks'] ) ) {
                        $result_array['iwlinks'] = $this->formatIWLinks( $p_result->getInterwikiLinks() );
                }
@@ -399,6 +406,10 @@ class ApiParse extends ApiBase {
                        'iwlinks' => 'iw',
                        'sections' => 's',
                        'headitems' => 'hi',
+                       'modules' => 'm',
+                       'modulescripts' => 'm',
+                       'modulestyles' => 'm',
+                       'modulemessages' => 'm',
                        'properties' => 'pp',
                        'limitreportdata' => 'lr',
                );
@@ -723,6 +734,7 @@ class ApiParse extends ApiBase {
                                        'displaytitle',
                                        'headitems',
                                        'headhtml',
+                                       'modules',
                                        'iwlinks',
                                        'wikitext',
                                        'properties',
@@ -779,6 +791,7 @@ class ApiParse extends ApiBase {
                                ' displaytitle   - Adds the title of the parsed wikitext',
                                ' headitems      - Gives items to put in the <head> of the page',
                                ' headhtml       - Gives parsed <head> of the page',
+                               ' modules        - Gives the ResourceLoader modules used on the page',
                                ' iwlinks        - Gives interwiki links in the parsed wikitext',
                                ' wikitext       - Gives the original wikitext that was parsed',
                                ' properties     - Gives various properties defined in the parsed wikitext',
index 3ef2bbe..49306d7 100644 (file)
@@ -234,7 +234,7 @@ class ApiUpload extends ApiBase {
                                        array( 'result' => 'Poll',
                                                'stage' => 'queued', 'status' => Status::newGood() )
                                );
-                               $ok = JobQueueGroup::singleton()->push( new AssembleUploadChunksJob(
+                               JobQueueGroup::singleton()->push( new AssembleUploadChunksJob(
                                        Title::makeTitle( NS_FILE, $filekey ),
                                        array(
                                                'filename' => $this->mParams['filename'],
@@ -242,13 +242,7 @@ class ApiUpload extends ApiBase {
                                                'session' => $this->getContext()->exportSession()
                                        )
                                ) );
-                               if ( $ok ) {
-                                       $result['result'] = 'Poll';
-                               } else {
-                                       UploadBase::setSessionStatus( $filekey, false );
-                                       $this->dieUsage(
-                                               "Failed to start AssembleUploadChunks.php", 'stashfailed' );
-                               }
+                               $result['result'] = 'Poll';
                        } else {
                                $status = $this->mUpload->concatenateChunks();
                                if ( !$status->isGood() ) {
@@ -625,7 +619,7 @@ class ApiUpload extends ApiBase {
                                $this->mParams['filekey'],
                                array( 'result' => 'Poll', 'stage' => 'queued', 'status' => Status::newGood() )
                        );
-                       $ok = JobQueueGroup::singleton()->push( new PublishStashedFileJob(
+                       JobQueueGroup::singleton()->push( new PublishStashedFileJob(
                                Title::makeTitle( NS_FILE, $this->mParams['filename'] ),
                                array(
                                        'filename' => $this->mParams['filename'],
@@ -636,13 +630,7 @@ class ApiUpload extends ApiBase {
                                        'session' => $this->getContext()->exportSession()
                                )
                        ) );
-                       if ( $ok ) {
-                               $result['result'] = 'Poll';
-                       } else {
-                               UploadBase::setSessionStatus( $this->mParams['filekey'], false );
-                               $this->dieUsage(
-                                       "Failed to start PublishStashedFile.php", 'publishfailed' );
-                       }
+                       $result['result'] = 'Poll';
                } else {
                        /** @var $status Status */
                        $status = $this->mUpload->performUpload( $this->mParams['comment'],
index 9e55059..4a3c2cb 100644 (file)
@@ -83,7 +83,7 @@ abstract class ContextSource implements IContextSource {
         * Get the Title object
         *
         * @since 1.18
-        * @return Title
+        * @return Title|null
         */
        public function getTitle() {
                return $this->getContext()->getTitle();
index f5616e0..32a650f 100644 (file)
@@ -138,7 +138,7 @@ class DerivativeContext extends ContextSource {
        /**
         * Get the Title object
         *
-        * @return Title
+        * @return Title|null
         */
        public function getTitle() {
                if ( !is_null( $this->title ) ) {
index f892b02..5534ee3 100644 (file)
@@ -37,7 +37,7 @@ interface IContextSource {
        /**
         * Get the Title object
         *
-        * @return Title
+        * @return Title|null
         */
        public function getTitle();
 
index 6f27a7a..4291e44 100644 (file)
@@ -131,7 +131,7 @@ class RequestContext implements IContextSource {
        /**
         * Get the Title object
         *
-        * @return Title
+        * @return Title|null
         */
        public function getTitle() {
                if ( $this->title === null ) {
index 3bcf638..4d5c3dc 100644 (file)
@@ -347,14 +347,6 @@ class DBQueryError extends DBExpectedError {
                $this->fname = $fname;
        }
 
-       /**
-        * @return bool
-        */
-       function isLoggable() {
-               // Don't send to the exception log, already in dberror log
-               return false;
-       }
-
        /**
         * @return string
         */
index 0da47d3..1d05bf6 100644 (file)
@@ -215,7 +215,9 @@ class DatabaseMssql extends DatabaseBase {
 
                                foreach ( $errors as $err ) {
                                        if ( $err['SQLSTATE'] == '23000' && $err['code'] == '2601' ) {
-                                               continue; // duplicate key error
+                                               continue; // duplicate key error caused by unique index
+                                       } elseif ( $err['SQLSTATE'] == '23000' && $err['code'] == '2627' ) {
+                                               continue; // duplicate key error caused by primary key
                                        } elseif ( $err['SQLSTATE'] == '01000' && $err['code'] == '3621' ) {
                                                continue; // generic "the statement has been terminated" error
                                        }
@@ -991,18 +993,22 @@ class DatabaseMssql extends DatabaseBase {
        /**
         * @param string $table
         * @param string $fname
-        * @param bool $schema
         * @return bool
         */
-       public function tableExists( $table, $fname = __METHOD__, $schema = false ) {
-               $res = sqlsrv_query( $this->mConn, "SELECT * FROM information_schema.tables
-                       WHERE table_type='BASE TABLE' AND table_name = '$table'" );
-               if ( $res === false ) {
-                       print "Error in tableExists query: " . $this->lastError();
+       public function tableExists( $table, $fname = __METHOD__ ) {
+               list( $db, $schema, $table ) = $this->tableName( $table, 'split' );
 
+               if ( $db !== false ) {
+                       // remote database
+                       wfDebug( "Attempting to call tableExists on a remote table" );
                        return false;
                }
-               if ( sqlsrv_fetch( $res ) ) {
+
+               $res = $this->query( "SELECT 1 FROM INFORMATION_SCHEMA.TABLES
+                       WHERE TABLE_TYPE = 'BASE TABLE'
+                       AND TABLE_SCHEMA = '$schema' AND TABLE_NAME = '$table'" );
+
+               if ( $res->numRows() ) {
                        return true;
                } else {
                        return false;
@@ -1017,15 +1023,18 @@ class DatabaseMssql extends DatabaseBase {
         * @return bool
         */
        public function fieldExists( $table, $field, $fname = __METHOD__ ) {
-               $table = $this->tableName( $table );
-               $res = sqlsrv_query( $this->mConn, "SELECT DATA_TYPE FROM INFORMATION_SCHEMA.Columns
-                       WHERE TABLE_NAME = '$table' AND COLUMN_NAME = '$field'" );
-               if ( $res === false ) {
-                       print "Error in fieldExists query: " . $this->lastError();
+               list( $db, $schema, $table ) = $this->tableName( $table, 'split' );
 
+               if ( $db !== false ) {
+                       // remote database
+                       wfDebug( "Attempting to call fieldExists on a remote table" );
                        return false;
                }
-               if ( sqlsrv_fetch( $res ) ) {
+
+               $res = $this->query( "SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
+                       WHERE TABLE_SCHEMA = '$schema' AND TABLE_NAME = '$table' AND COLUMN_NAME = '$field'" );
+
+               if ( $res->numRows() ) {
                        return true;
                } else {
                        return false;
@@ -1033,15 +1042,18 @@ class DatabaseMssql extends DatabaseBase {
        }
 
        public function fieldInfo( $table, $field ) {
-               $table = $this->tableName( $table );
-               $res = sqlsrv_query( $this->mConn, "SELECT * FROM INFORMATION_SCHEMA.Columns
-                       WHERE TABLE_NAME = '$table' AND COLUMN_NAME = '$field'" );
-               if ( $res === false ) {
-                       print "Error in fieldInfo query: " . $this->lastError();
+               list( $db, $schema, $table ) = $this->tableName( $table, 'split' );
 
+               if ( $db !== false ) {
+                       // remote database
+                       wfDebug( "Attempting to call fieldInfo on a remote table" );
                        return false;
                }
-               $meta = $this->fetchRow( $res );
+
+               $res = $this->query( "SELECT * FROM INFORMATION_SCHEMA.COLUMNS
+                       WHERE TABLE_SCHEMA = '$schema' AND TABLE_NAME = '$table' AND COLUMN_NAME = '$field'" );
+
+               $meta = $res->fetchRow();
                if ( $meta ) {
                        return new MssqlField( $meta );
                }
@@ -1323,11 +1335,20 @@ class DatabaseMssql extends DatabaseBase {
        /**
         * call this instead of tableName() in the updater when renaming tables
         * @param string $name
-        * @param string $format
+        * @param string $format One of quoted, raw, or split
         * @return string
         */
        function realTableName( $name, $format = 'quoted' ) {
-               return parent::tableName( $name, $format );
+               $table = parent::tableName( $name, $format );
+               if ( $format == 'split' ) {
+                       // Used internally, we want the schema split off from the table name and returned
+                       // as a list with 3 elements (database, schema, table)
+                       $table = explode( '.', $table );
+                       if ( count( $table ) == 2 ) {
+                               array_unshift( $table, false );
+                       }
+               }
+               return $table;
        }
 
        /**
index 3433199..131b758 100644 (file)
@@ -831,7 +831,7 @@ __INDEXATTR__;
                $options = array(), $join_conds = array()
        ) {
                if ( is_array( $options ) ) {
-                       $forUpdateKey = array_search( 'FOR UPDATE', $options );
+                       $forUpdateKey = array_search( 'FOR UPDATE', $options, true );
                        if ( $forUpdateKey !== false && $join_conds ) {
                                unset( $options[$forUpdateKey] );
 
index 84daa80..a9af1e8 100644 (file)
@@ -989,8 +989,6 @@ abstract class File {
                                        $thumb = $handler->getTransform( $this, $thumbPath, $thumbUrl, $params );
                                        break;
                                }
-                               // Clean up broken thumbnails as needed
-                               $this->migrateThumbFile( $thumbName );
                                // Check if an up-to-date thumbnail already exists...
                                wfDebug( __METHOD__ . ": Doing stat for $thumbPath\n" );
                                if ( !( $flags & self::RENDER_FORCE ) && $this->repo->fileExists( $thumbPath ) ) {
index e3b73e3..9b9f0a9 100644 (file)
@@ -822,41 +822,6 @@ class LocalFile extends File {
        /** createThumb inherited */
        /** transform inherited */
 
-       /**
-        * Fix thumbnail files from 1.4 or before, with extreme prejudice
-        * @todo Do we still care about this? Perhaps a maintenance script
-        *   can be made instead. Enabling this code results in a serious
-        *   RTT regression for wikis without 404 handling.
-        *
-        * @param string $thumbName
-        */
-       function migrateThumbFile( $thumbName ) {
-               /* Old code for bug 2532
-               $thumbDir = $this->getThumbPath();
-               $thumbPath = "$thumbDir/$thumbName";
-               if ( is_dir( $thumbPath ) ) {
-                       // Directory where file should be
-                       // This happened occasionally due to broken migration code in 1.5
-                       // Rename to broken-*
-                       for ( $i = 0; $i < 100; $i++ ) {
-                               $broken = $this->repo->getZonePath( 'public' ) . "/broken-$i-$thumbName";
-                               if ( !file_exists( $broken ) ) {
-                                       rename( $thumbPath, $broken );
-                                       break;
-                               }
-                       }
-                       // Doesn't exist anymore
-                       clearstatcache();
-               }
-               */
-               /*
-               if ( $this->repo->fileExists( $thumbDir ) ) {
-                       // Delete file where directory should be
-                       $this->repo->cleanupBatch( array( $thumbDir ) );
-               }
-               */
-       }
-
        /** getHandler inherited */
        /** iconThumb inherited */
        /** getLastError inherited */
@@ -1424,7 +1389,8 @@ class LocalFile extends File {
                                $dbw,
                                $descTitle->getArticleID(),
                                $editSummary,
-                               false
+                               false,
+                               $user
                        );
                        if ( !is_null( $nullRevision ) ) {
                                $nullRevision->insertOn( $dbw );
index 7d3833b..49e7b40 100644 (file)
@@ -37,10 +37,8 @@ class MssqlUpdater extends DatabaseUpdater {
 
        protected function getCoreUpdateList() {
                return array(
-                       array( 'disableContentHandlerUseDB' ),
-
                        // 1.23
-
+                       array( 'addField', 'mwuser', 'user_password_expires', 'patch-user_password_expires.sql' ),
                );
        }
 }
index 48dffe4..b3a67f1 100644 (file)
        "config-download-localsettings": "Загрузіць <code>LocalSettings.php</code>",
        "config-help": "дапамога",
        "config-nofile": "Файл «$1» ня знойдзены. Ці быў ён выдалены?",
-       "config-extension-link": "Ці ведаеце вы, што вашая вікі падтрымлівае [//www.mediawiki.org/wiki/Manual:Extensions пашырэньні]?\n\nВы можаце праглядзець [//www.mediawiki.org/wiki/Category:Extensions_by_category пашырэньні паводле катэгорыяў] або [//www.mediawiki.org/wiki/Extension_Matrix матрыцу пашырэньняў] дзеля іх поўнага сьпісу.",
+       "config-extension-link": "Ці ведаеце вы, што вашая вікі падтрымлівае [//www.mediawiki.org/wiki/Manual:Extensions пашырэньні]?\n\nВы можаце праглядзець [//www.mediawiki.org/wiki/Category:Extensions_by_category пашырэньні паводле катэгорыяў].",
        "mainpagetext": "'''MediaWiki пасьпяхова ўсталяваная.'''",
        "mainpagedocfooter": "Глядзіце [//meta.wikimedia.org/wiki/Help:Contents дапаможнік карыстальніка] для атрыманьня інфармацыі па карыстаньні вікі-праграмамі.\n\n== З чаго пачаць ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Сьпіс парамэтраў канфігурацыі]\n* [//www.mediawiki.org/wiki/Manual:FAQ Частыя пытаньні MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка паведамленьняў пра зьяўленьне новых вэрсіяў MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Пераклад MediaWiki на вашую мову]"
 }
index 2307b76..d413933 100644 (file)
@@ -6,7 +6,8 @@
                        "Mormegil",
                        "아라",
                        "Matěj Grabovský",
-                       "Paxt"
+                       "Paxt",
+                       "Matěj Suchánek"
                ]
        },
        "config-desc": "Instalační program pro MediaWiki",
        "config-db-username": "Databázové uživatelské jméno:",
        "config-db-password": "Databázové heslo:",
        "config-db-password-empty": "Zadejte heslo pro nového databázového uživatele: $1.\nPřestože může jít zakládat nové uživatele i bez hesel, není to bezpečné.",
-       "config-db-username-empty": "Musíte zadat hodnotu pro „{{int:config-db-username}}“",
+       "config-db-username-empty": "Musíte zadat hodnotu pro „{{int:config-db-username}}“.",
        "config-db-install-username": "Zadejte uživatelské jméno, které se použije pro připojení k databázi v průběhu instalace.\nToto není jméno uživatelského účtu MediaWiki; toto je uživatelské jméno k vaší databázi.",
        "config-db-install-password": "Zadejte heslo, které se použije pro připojení k databázi v průběhu instalace.\nToto není heslo uživatelského účtu MediaWiki; toto je heslo k vaší databázi.",
        "config-db-install-help": "Zadejte uživatelské jméno a heslo, které se použijí pro připojení k databázi v průběhu instalace.",
        "config-header-oracle": "Nastavení Oracle",
        "config-header-mssql": "Nastavení Microsoft SQL Serveru",
        "config-invalid-db-type": "Chybný typ databáze",
-       "config-missing-db-name": "Musíte zadat hodnotu pro „{{int:config-db-name}}“",
-       "config-missing-db-host": "Musíte zadat hodnotu pro „{{int:config-db-host}}“",
-       "config-missing-db-server-oracle": "Musíte zadat hodnotu pro „{{int:config-db-host-oracle}}“",
+       "config-missing-db-name": "Musíte zadat hodnotu pro „{{int:config-db-name}}“.",
+       "config-missing-db-host": "Musíte zadat hodnotu pro „{{int:config-db-host}}“.",
+       "config-missing-db-server-oracle": "Musíte zadat hodnotu pro „{{int:config-db-host-oracle}}“.",
        "config-invalid-db-server-oracle": "Chybné databázové TNS „$1“.\nPoužívejte buď „TNS Name“ nebo „Easy Connect“ (vizte [http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods]).",
        "config-invalid-db-name": "Chybné jméno databáze „$1“.\nPoužívejte pouze ASCII písmena (a-z, A-Z), čísla (0-9), podtržítko (_) a spojovník (-).",
        "config-invalid-db-prefix": "Chybný databázový prefix „$1“.\nPoužívejte pouze ASCII písmena (a-z, A-Z), čísla (0-9), podtržítko (_) a spojovník (-).",
        "config-download-localsettings": "Stáhnout <code>LocalSettings.php</code>",
        "config-help": "nápověda",
        "config-nofile": "Soubor „$1“ nelze nalézt. Byl smazán?",
-       "config-extension-link": "Věděli jste, že vaše wiki podporuje [//www.mediawiki.org/wiki/Manual:Extensions rozšíření]?\n\nMůžete procházet [//www.mediawiki.org/wiki/Category:Extensions_by_category rozšíření po kategoriích] nebo si prohlédnout [//www.mediawiki.org/wiki/Extension_Matrix Matici rozšíření] obsahující úplný seznam.",
+       "config-extension-link": "Věděli jste, že vaše wiki podporuje [//www.mediawiki.org/wiki/Manual:Extensions rozšíření]?\n\nMůžete si prohlédnout [//www.mediawiki.org/wiki/Category:Extensions_by_category seznam rozšíření po kategoriích].",
        "mainpagetext": "'''MediaWiki byla úspěšně nainstalována.'''",
        "mainpagedocfooter": "[//meta.wikimedia.org/wiki/Help:Contents Uživatelská příručka] vám napoví, jak MediaWiki používat.\n\n== Začínáme ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Nastavení konfigurace]\n* [//www.mediawiki.org/wiki/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Překlad MediaWiki do vašeho jazyka]"
 }
index 3a7b027..e5f3b82 100644 (file)
@@ -18,7 +18,8 @@
                        "Carlitosag",
                        "Chocolate con galleta",
                        "Csbotero",
-                       "Sporeunai"
+                       "Sporeunai",
+                       "Ihojose"
                ]
        },
        "config-desc": "El instalador de MediaWiki",
        "config-download-localsettings": "Descargar archivo <code>LocalSettings.php</code>",
        "config-help": "Ayuda",
        "config-nofile": "El archivo \"$1\" no se pudo encontrar. ¿Se ha eliminado?",
-       "config-extension-link": "¿Sabías que tu wiki soporta [//www.mediawiki.org/wiki/Manual:Extensions extensiones]?\n\nPuedes navegar las [//www.mediawiki.org/wiki/Category:Extensions_by_category extensiones por categoría] o la [//www.mediawiki.org/wiki/Extension_Matrix matriz de extensiones] para ver la lista completa de extensiones.",
+       "config-extension-link": "¿Sabías que tu wiki soporta [//www.mediawiki.org/wiki/Manual:Extensions extensiones]?\n\nPuedes navegar las [//www.mediawiki.org/wiki/Category:Extensions_by_category extensiones por categoría].",
        "mainpagetext": "'''MediaWiki ha sido instalado con éxito.'''",
        "mainpagedocfooter": "Consulta la [//meta.wikimedia.org/wiki/Ayuda:Guía del usuario de contenidos] para obtener información sobre el uso del software wiki.\n\n== Empezando ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de ajustes de configuración]\n* [//www.mediawiki.org/wiki/Manual:FAQ/es FAQ de MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de correo de anuncios de distribución de MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Regionalizar MediaWiki para tu idioma]"
 }
index 0afae85..62c6b7c 100644 (file)
        "config-db-username": "نام کاربری پایگاه اطلاعات:",
        "config-db-password": "گذرواژه پایگاه داده‌ها:",
        "config-db-password-empty": "لطفاً یک رمز عبور برای کاربر جدید پایگاه اطلا‌عاتی وارد کنید: $1\nدر صورتی که ممکن است کاربران بدون رمز عبور به وجود آیند،امن نیست.",
-       "config-db-username-empty": "شما باید یک مقدار برای \"نام کاربری پایگاه اطلاعاتی\" وارد کنید",
+       "config-db-username-empty": "شما باید یک مقدار برای \"نام کاربری {{int:config-db-username}}\" وارد کنید",
        "config-db-install-username": "نام کاربری را وارد کنید که برای اتصال به پایگاه اطلاعاتی در طول روند نصب استفاده خواهد‌شد.\nاین نام کاربری حساب مدیاویکی نیست; نام کاربری برای پایگاه اطلاعاتی شما است.",
        "config-db-install-password": "رمز عبوری را وارد کنید که برای اتصال به پایگاه اطلاعاتی در طول روند نصب استفاده خواهد‌شد.\nاین رمز عبور برای حساب مدیاویکی نیست;رمز عبور برای پایگاه اطلاعاتی شما است.",
        "config-db-install-help": "نام کاربری و رمز عبوری را وارد کنید که برای اتصال به پایگاه اطلاعاتی در طول روند نصب استفاده خواهد‌ٰشد.",
        "config-header-oracle": "تنظیمات اوراکل",
        "config-header-mssql": "تنظیمات سرور مایکرپسافت اس‌کیو‌ال",
        "config-invalid-db-type": "نوع پایگاه اطلاعاتی نامعتبر",
-       "config-missing-db-name": "شما باید یک مقدار برای \"نام پایگاه اطلاعاتی\" وارد کنید",
-       "config-missing-db-host": "شما باید یک مقدار برای \"گروه پایگاه اطلاعاتی\" وارد کنید",
-       "config-missing-db-server-oracle": "شما باید یک مقدار برای \"تی‌ان‌اس پایگاه اطلاعاتی\" وارد کنید",
+       "config-missing-db-name": "شما باید یک مقدار برای \"نام {{int:config-db-name}}\" وارد کنید",
+       "config-missing-db-host": "شما باید یک مقدار برای \"گروه {{int:config-db-host}}\" وارد کنید",
+       "config-missing-db-server-oracle": "شما باید یک مقدار برای \"تی‌ان‌اس {{int:config-db-host-oracle}}\" وارد کنید",
        "config-invalid-db-server-oracle": "تی‌ان‌اس پایگاه اطلاعاتی $1 نامعتبر.\nیا از \"نام تی‌ان‌اس\" یا یک سلسله \"ارتباط آسان\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods]) استفاده کنید.",
        "config-invalid-db-name": "نام پایگاه اطلاعاتی نامعتبر \"$1\".\nفقط حروف اِی‌اس‌سی‌آی‌آی بزرگ (اِی-زدکوچک،اِی-زد بزرگ)،اعداد (۰-۹)،آندرلاین (_) و خط تیره کوتاه (-) استفاده کنید.",
        "config-invalid-db-prefix": "پیشوند پایگاه اطلاعاتی نامعتبر \"$1\".\nفقط حروف اِی‌اس‌سی‌آی‌آی بزرگ (اِی-زدکوچک،اِی-زد بزرگ)،اعداد (۰-۹)،آندرلاین (_) و خط تیره کوتاه (-) استفاده کنید.",
        "config-download-localsettings": "دریافت <code>LocalSettings.php</code>",
        "config-help": "راهنما",
        "config-nofile": "پروندهٔ «$1» یافت نشد. آیا حذف شده‌است؟",
-       "config-extension-link": "آیا می‌دانستید که ویکی شما [//www.mediawiki.org/wiki/Manual:Extensions extensions] را پشتیبانی می‌کند؟\nشما می‌توانید [//www.mediawiki.org/wiki/Category:Extensions_by_category extensions by category] یا [//www.mediawiki.org/wiki/Extension_Matrix Extension Matrix] را برای دیدن همهٔ فهرست وسیع،جسته‌وگریخته بخوانید.",
+       "config-extension-link": "آیا می‌دانستید که ویکی شما [//www.mediawiki.org/wiki/Manual:Extensions extensions] را پشتیبانی می‌کند؟\nشما می‌توانید [//www.mediawiki.org/wiki/Category:Extensions_by_category extensions by category]",
        "mainpagetext": "'''نرم‌افزار ویکی با موفقیت نصب شد.'''",
        "mainpagedocfooter": "از [//meta.wikimedia.org/wiki/Help:Contents راهنمای کاربران]\nبرای استفاده از نرم‌افزار ویکی کمک بگیرید.\n\n== آغاز به کار ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings تنظیم پیکربندی]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki پرسش‌های متداول]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce فهرست ارسال نسخه‌های مدیاویکی]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Localise مدیاویکی برای زبان شما]"
 }
index 986421d..2aa0bca 100644 (file)
        "config-mysql-charset": "Jeu de caractères de la base de données :",
        "config-mysql-binary": "Binaire",
        "config-mysql-utf8": "UTF-8",
-       "config-mysql-charset-help": "En ''mode binaire'', MediaWiki stocke le texte au format UTF-8 dans la base de données. C'est plus efficace que le ''UTF-8 mode'' de MySQL, et vous permet d'utiliser toute la gamme des caractères Unicode.\n\nEn ''mode binaire'', MediaWiki stocke le texte UTF-8 dans des champs binaires de la base de données. C'est plus efficace que le ''mode UTF-8'' de MySQL, et vous permet d'utiliser toute la gamme des caractères Unicode.\nEn ''mode UTF-8'', MySQL connaîtra le jeu de caractères de vos données et pourra présenter et convertir les données de manière appropriée, mais il ne vous laissera pas stocker les caractères au-dessus du [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plan multilingue de base] (en anglais).",
+       "config-mysql-charset-help": "En ''mode binaire'', MediaWiki stocke le texte au format UTF-8 dans la base de données dans des champs binaires.\nC'est plus efficace que le ''UTF-8 mode'' de MySQL, et vous permet d'utiliser toute la gamme des caractères Unicode.\n\nEn ''mode UTF-8'', MySQL reconnaîtra le jeu de caractères dans lequel sont vos données et pourra les présenter et les convertir de manière appropriée, mais il ne vous laissera pas stocker les caractères au-dessus du [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes plan multilingue de base] (en anglais).",
        "config-mssql-auth": "Type d’authentification :",
        "config-mssql-install-auth": "Sélectionner le type d’authentification qui sera utilisé pour se connecter à la base de données pendant le processus d’installation.\nSi vous sélectionnez « {{int:config-mssql-windowsauth}} », les informations d’identification de l’utilisateur faisant tourner le serveur seront utilisées.",
        "config-mssql-web-auth": "Sélectionner le type d’authentification que le serveur web utilisera pour se connecter au serveur de base de données lors des opérations habituelles du wiki.\nSi vous sélectionnez « {{int:config-mssql-windowsauth}} », les informations d’identification de l’utilisateur sous lequel tourne le serveur web seront utilisées.",
        "config-mssql-sqlauth": "Authentification de SQL Server",
        "config-mssql-windowsauth": "Authentification Windows",
        "config-site-name": "Nom du wiki :",
-       "config-site-name-help": "Il apparaîtra dans la barre de titre du navigateur et en divers autres endroits.",
+       "config-site-name-help": "Ceci apparaîtra dans la barre de titre du navigateur et en divers autres endroits.",
        "config-site-name-blank": "Entrez un nom de site.",
        "config-project-namespace": "Espace de noms du projet :",
        "config-ns-generic": "Projet",
        "config-ns-site-name": "Même nom que le wiki : $1",
        "config-ns-other": "Autre (préciser)",
        "config-ns-other-default": "MonWiki",
-       "config-project-namespace-help": "Suivant l'exemple de Wikipédia, plusieurs wikis gardent leurs pages de politique séparées de leurs pages de contenu, dans un ''espace de noms'' propre.\nTous les titres de page de cet espace de noms commence par un préfixe défini, que vous pouvez spécifier ici.\nTraditionnellement, ce préfixe est dérivé du nom du wiki, mais il ne peut contenir des caractères de ponctuation tels que « # » ou « : ».",
-       "config-ns-invalid": "L'espace de noms spécifié « <nowiki>$1</nowiki> » n'est pas valide.\nSpécifiez un espace de noms pour le projet.",
-       "config-ns-conflict": "L'espace de noms spécifié « <nowiki>$1</nowiki> » est en conflit avec un espace de noms par défaut de MediaWiki.\nChoisir un autre espace de noms.",
+       "config-project-namespace-help": "Suivant l'exemple de Wikipédia, plusieurs wikis gardent leurs pages de politique séparées de leurs pages de contenu, dans un ''espace de noms de niveau projet'' propre.\nTous les titres de page de cet espace de noms commence par un préfixe défini, que vous pouvez spécifier ici.\nTraditionnellement, ce préfixe est dérivé du nom du wiki, et ne peut contenir de caractères de ponctuation tels que « # » ou « : ».",
+       "config-ns-invalid": "L'espace de noms spécifié « <nowiki>$1</nowiki> » n'est pas valide.\nSpécifiez un espace de noms différent pour le projet.",
+       "config-ns-conflict": "L'espace de noms spécifié « <nowiki>$1</nowiki> » est en conflit avec un espace de noms par défaut de MediaWiki.\nChoisir un autre espace de noms pour le projet.",
        "config-admin-box": "Compte administrateur",
        "config-admin-name": "Votre nom d’utilisateur :",
        "config-admin-password": "Mot de passe :",
        "config-admin-error-user": "Erreur interne lors de la création d'un administrateur avec le nom « <nowiki>$1</nowiki> ».",
        "config-admin-error-password": "Erreur interne lors de l'inscription d'un mot de passe pour l'administrateur « <nowiki>$1</nowiki> » : <pre>$2</pre>",
        "config-admin-error-bademail": "Vous avez entré une adresse de courriel invalide",
-       "config-subscribe": "Abonnez-vous à la [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce liste d'annonce des nouvelles versions] (la page peut afficher le texte en français).",
+       "config-subscribe": "Abonnez-vous à la [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce liste d'annonce des nouvelles versions]",
        "config-subscribe-help": "Il s'agit d'une liste de diffusion à faible volume utilisée servant à annoncer les nouvelles versions, y compris les versions améliorant la sécurité du logiciel.\nVous devriez y souscrire et mettre à jour votre version de MediaWiki lorsque de nouvelles versions sont publiées.",
        "config-subscribe-noemail": "Vous avez essayé de vous abonner à la liste de diffusion des communiqués, sans fournir une adresse courriel ! S'il vous plaît, fournir une adresse électronique si vous souhaitez vous abonner à la liste de diffusion.",
        "config-almost-done": "Vous avez presque fini !\nVous pouvez passer la configuration restante et installer immédiatement le wiki.",
        "config-profile-no-anon": "Création de compte requise",
        "config-profile-fishbowl": "Éditeurs autorisés seulement",
        "config-profile-private": "Wiki privé",
-       "config-profile-help": "Les wikis fonctionnent mieux lorsque vous laissez le plus de personnes possible le modifier.\nAvec MediaWiki, il est facile de vérifier les modifications récentes et de révoquer tout dommage créé par des utilisateurs débutants ou mal intentionnés.\n\nCependant, de nombreuses autres utilisations ont été trouvées au logiciel et il n’est pas toujours facile de convaincre tout le monde des bénéfices de l’esprit wiki.\nVous avez donc le choix.\n\nLe modèle '''{{int:config-profile-wiki}}''' autorise toute personne à modifier, y compris sans s’identifier.\n'''{{int:config-profile-no-anon}}''' fournit plus de contrôle, par l’identification, mais peut rebuter les contributeurs occasionnels.\n\n'''{{int:config-profile-fishbowl}}''' autorise la modification par les utilisateurs approuvés, mais le public peut toujours lire les pages et leur historique.\n'''{{int:config-profile-private}}''' n’autorise que les utilisateurs approuvés à voir et modifier les pages.\n\nDes configurations de droits d’utilisateurs plus complexes sont disponibles après l'installation, voir la [//www.mediawiki.org/wiki/Manual:User_rights page correspondante du manuel].",
+       "config-profile-help": "Les wikis fonctionnent mieux lorsque vous laissez le plus de personnes possible les modifier.\nAvec MediaWiki, il est facile de vérifier les modifications récentes et de révoquer tout dommage créé par des utilisateurs débutants ou mal intentionnés.\n\nCependant, de nombreuses autres utilisations ont été trouvées au logiciel et il n’est pas toujours facile de convaincre tout le monde des bénéfices de l’esprit wiki.\nVous avez donc le choix.\n\nLe modèle '''{{int:config-profile-wiki}}''' autorise toute personne à modifier, y compris sans s’identifier.\n'''{{int:config-profile-no-anon}}''' fournit plus de contrôle, mais peut rebuter les contributeurs occasionnels.\n\n'''{{int:config-profile-fishbowl}}''' autorise la modification par les utilisateurs approuvés, mais le public peut toujours lire les pages et leur historique.\n'''{{int:config-profile-private}}''' n’autorise que les utilisateurs approuvés à voir les pages dans le même groupe que les utilisateurs autorisés à y écrire.\n\nDes configurations de droits d’utilisateurs plus complexes sont disponibles après l'installation, voir la [//www.mediawiki.org/wiki/Manual:User_rights page correspondante du manuel].",
        "config-license": "Droits d'auteur et licence :",
        "config-license-none": "Aucune licence en bas de page",
        "config-license-cc-by-sa": "Creative Commons attribution partage à l'identique",
        "config-license-gfdl": "GNU Free Documentation License 1.3 ou ultérieure",
        "config-license-pd": "Domaine public",
        "config-license-cc-choose": "Sélectionner une licence Creative Commons personnalisée",
-       "config-license-help": "Beaucoup de wikis publics mettent l'ensemble des contributions sous [http://freedomdefined.org/Definition/Fr licence libre].\nCela contribue à créer un sentiment d'appartenance dans leur communauté et encourage les contributions sur le long terme.\nCe n'est généralement pas nécessaire pour un wiki privé ou d'entreprise.\n\nSi vous souhaitez utiliser des textes de Wikipédia, et souhaitez que Wikipédia réutilise des textes de votre wiki, vous devriez choisir la [http://creativecommons.org/licenses/by-sa/3.0/deed.fr licence ''Creative Commons Attribution Share Alike''] (CC-by-sa).\n\nWikipédia a déjà été publié selon les termes de la [http://fr.wikipedia.org/wiki/Licence_de_documentation_libre_GNU ''GNU Free Documentation License''] (GFDL).\nC'est une licence valide, mais elle est difficile à comprendre. De plus, elle possède des caractéristiques qui rendent difficiles la réutilisation.",
+       "config-license-help": "Beaucoup de wikis publics mettent l'ensemble des contributions sous [http://freedomdefined.org/Definition/Fr licence libre].\nCela contribue à créer un sentiment d'appartenance dans leur communauté et encourage les contributions sur le long terme.\nCe n'est généralement pas nécessaire pour un wiki privé ou d'entreprise.\n\nSi vous souhaitez utiliser des textes de Wikipédia, et souhaitez que Wikipédia réutilise des textes de votre wiki, vous devriez choisir la licence ''Creative Commons Attribution Share Alike''].\n\nWikipédia utilisait auparavent la ''GNU Free Documentation License'' (GFDL).\nC'est une licence valide, mais elle est difficile à comprendre. \nDe plus, elle possède des caractéristiques qui rendent difficile la réutilisation.sour GFDL des contenus.",
        "config-email-settings": "Paramètres de courriel",
        "config-enable-email": "Activer les courriels sortants",
        "config-enable-email-help": "Si vous souhaitez utiliser le courriel, vous devez [http://www.php.net/manual/en/mail.configuration.php configurer des paramètres PHP] (texte en anglais).\nSi vous ne voulez pas du service de courriel, vous pouvez le désactiver ici.",
        "config-email-sender-help": "Entrez l'adresse de courriel à utiliser comme adresse de retour des courriels sortant.\nLes courriels rejetés y seront envoyés.\nDe nombreux serveurs de courriels exigent au moins un [http://fr.wikipedia.org/wiki/Nom_de_domaine nom de domaine] valide.",
        "config-upload-settings": "Téléchargement des images et des fichiers",
        "config-upload-enable": "Activer le téléchargement des fichiers",
-       "config-upload-help": "Le téléchargement des fichiers expose votre serveur à des risques de sécurité.\nPour plus d'informations, lire la section [//www.mediawiki.org/wiki/Manual:Security ''Security''] du manuel d'installation (en anglais).\n\nPour autoriser le téléchargement des fichiers, modifier le mode du sous-répertoire <code>images</code> qui se situe sous le répertoire racine de MediaWiki.\nEnsuite, activez cette option.",
+       "config-upload-help": "Le téléchargement des fichiers expose votre serveur à des risques de sécurité.\nPour plus d'informations, lire la section [//www.mediawiki.org/wiki/Manual:Security ''Security''] du manuel d'installation (en anglais).\n\nPour autoriser le téléchargement des fichiers, modifier le mode du sous-répertoire <code>images</code> qui se situe sous le répertoire racine de MediaWiki de sorte à ce que le serveur web puisse écrire dedans.\nEnsuite, activez cette option.",
        "config-upload-deleted": "Répertoire pour les fichiers supprimés :",
        "config-upload-deleted-help": "Choisissez un répertoire qui servira à archiver les fichiers supprimés.\nIdéalement, il ne devrait pas être accessible depuis le web.",
        "config-logo": "URL du logo :",
        "config-advanced-settings": "Configuration avancée",
        "config-cache-options": "Paramètres pour la mise en cache des objets:",
        "config-cache-help": "La mise en cache des objets améliore la vitesse de MediaWiki en mettant en cache les données fréquemment utilisées.\nLes sites de taille moyenne à grande sont fortement encouragés à l'activer. Les petits sites y verront également des avantages.",
-       "config-cache-none": "Aucune mise en cache (aucune fonctionnalité supprimée, mais la vitesse peut changer sur les wikis importants)",
+       "config-cache-none": "Pas de mise en cache (aucune fonctionnalité n'a été supprimée, mais la vitesse peut changer sur les wikis importants)",
        "config-cache-accel": "Mise en cache des objets PHP (APC, XCache ou WinCache)",
        "config-cache-memcached": "Utiliser Memcached (nécessite une installation et une configuration supplémentaires)",
        "config-memcached-servers": "serveurs pour Memcached :",
-       "config-memcached-help": "Liste des adresses IP à utiliser pour Memcached.\nElles doivent être séparés par des virgules et vous devez spécifier le port à utiliser. Par exemple :\n  127.0.0.1:11211\n  192.168.1.25:1234",
-       "config-memcache-needservers": "Vous avez sélectionné Memcached comme type de cache, mais ne précisez pas de serveur.",
+       "config-memcached-help": "Liste des adresses IP à utiliser pour Memcached.\nUne par ligne, en indiquant le port à utiliser. Par exemple :\n  127.0.0.1:11211\n  192.168.1.25:1234",
+       "config-memcache-needservers": "Vous avez sélectionné Memcached comme type de cache, mais n'avez pas précisé de serveurs.",
        "config-memcache-badip": "Vous avez entré une adresse IP invalide pour Memcached: $1.",
        "config-memcache-noport": "Vous n'avez pas entré un port pour le serveur Memcached : $1.\nSi vous ne le connaissez pas, la valeur par défaut est 11211.",
        "config-memcache-badport": "Les numéros de port de Memcached sont situés entre $1 et $2.",
        "config-extensions": "Extensions",
        "config-extensions-help": "Les extensions énumérées ci-dessus ont été détectées dans votre répertoire <code>./extensions</code>.\n\nElles peuvent nécessiter une configuration supplémentaire, mais vous pouvez les activer maintenant",
        "config-install-alreadydone": "'''Attention''': Vous semblez avoir déjà installé MediaWiki et tentez de l'installer à nouveau.\nS'il vous plaît, allez à la page suivante.",
-       "config-install-begin": "En appuyant sur {{int:config-continue}}, vous commencerez l'installation de MediaWiki.\nSi vous voulez apporter des modifications, appuyez sur \"{{int:config-back}}\".",
+       "config-install-begin": "En appuyant sur {{int:config-continue}}, vous commencerez l'installation de MediaWiki.\nSi vous voulez encore apporter des modifications, appuyez sur \"{{int:config-back}}\".",
        "config-install-step-done": "fait",
        "config-install-step-failed": "échec",
        "config-install-extensions": "Inclusion des extensions",
        "config-install-pg-plpgsql": "Vérification du langage PL/pgSQL",
        "config-pg-no-plpgsql": "Vous devez installer le langage PL/pgSQL dans la base de données $1",
        "config-pg-no-create-privs": "Le compte que vous avez spécifié pour l'installation n'a pas suffisamment de privilèges pour créer un compte.",
-       "config-pg-not-in-role": "Le compte que vous avez spécifié pour l'utilisateur web existe déjà !\nLe compte que vous avez spécifié pour l'installation n'est pas un super-utilisateur et n'est pas membre du rôle de l'internaute, il est donc incapable de créer des objets appartenant à l'utilisateur web.!\n\nMediaWiki exige actuellement que les tableaux soient possédés par un utilisateur web. S'il vous plaît, spécifier un autre nom de compte web, ou cliquez sur \"retour\" et spécifier un utilisateur avec les privilèges suffisants.",
+       "config-pg-not-in-role": "Le compte que vous avez spécifié pour l'utilisateur web existe déjà.\nLe compte que vous avez spécifié pour l'installation n'est pas un super-utilisateur et n'est pas un membre du rôle de l'internaute, il est donc incapable de créer des objets appartenant à l'utilisateur web.\n\nMediaWiki exige actuellement que les tables soient possédés par un utilisateur web. S'il vous plaît, spécifiez un autre nom de compte web, ou cliquez sur \"retour\" et spécifiez un utilisateur ayant les privilèges suffisants pour installer.",
        "config-install-user": "Création d'un utilisateur de la base de données",
        "config-install-user-alreadyexists": "L'utilisateur « $1 » existe déjà.",
        "config-install-user-create-failed": "Échec lors de la création de l'utilisateur « $1 » : $2",
        "config-install-user-grant-failed": "Échec lors de l'ajout de permissions à l'utilisateur « $1 » : $2",
        "config-install-user-missing": "L'utilisateur \"$1\" n'existe pas.",
-       "config-install-user-missing-create": "L'utilisateur \"$1\" n'existe pas !\nS'il vous plaît, cocher \"Compte de créer\" dans la case ci-dessous si vous voulez le créer.",
+       "config-install-user-missing-create": "L'utilisateur \"$1\" n'existe pas.\nS'il vous plaît, cocher \"Compte de créer\" dans la case ci-dessous si vous voulez le créer.",
        "config-install-tables": "Création des tables",
        "config-install-tables-exist": "'''Avertissement:''' Les tables MediaWiki semblent déjà exister.\nCréation omise.",
-       "config-install-tables-failed": "'''Erreur:''' échec lors de la création de la table avec l'erreur suivante: $1",
+       "config-install-tables-failed": "'''Erreur:''' échec lors de la création de table avec l'erreur suivante: $1",
        "config-install-interwiki": "Remplissage par défaut de la table des interwikis",
-       "config-install-interwiki-list": "Impossible de trouver le fichier <code>interwiki.list</code>.",
+       "config-install-interwiki-list": "Impossible de lire le fichier <code>interwiki.list</code>.",
        "config-install-interwiki-exists": "'''Attention:''' La table des interwikis semble déjà contenir des entrées.\nLa liste par défaut ne sera pas inscrite.",
        "config-install-stats": "Initialisation des statistiques",
        "config-install-keys": "Génération de la clé secrète",
        "config-install-mainpage": "Création de la page principale avec un contenu par défaut",
        "config-install-extension-tables": "Création de tables pour les extensions activées",
        "config-install-mainpage-failed": "Impossible d’insérer la page principale : $1",
-       "config-install-done": "'''Félicitations!'''\nVous avez réussi à installer MediaWiki.\n\nLe programme d'installation a généré un fichier <code>LocalSettings.php</code>. Il contient tous les paramètres de votre configuration.\n\nSi le téléchargement n'a pas été offert, ou que vous l'avez annulé, vous pouvez démarrer à nouveau le téléchargement en cliquant ce lien :\n\n$3\n\n'''Note''': Si vous ne le faites pas maintenant, ce fichier de configuration généré ne sera pas disponible plus tard si vous quittez l'installation sans le télécharger.\n\nLorsque c'est fait, vous pouvez '''[$2 accéder à votre wiki]'''.",
+       "config-install-done": "'''Félicitations!'''\nVous avez réussi à installer MediaWiki.\n\nLe programme d'installation a généré un fichier <code>LocalSettings.php</code>. Il contient tous les paramètres de votre configuration.\n\nVous devrez le télécharger et le mettre à la racine de votre installation wiki (dans le même répertoire que index.php). Le téléchargement démarre automatiquement.\n\nSi le téléchargement n'a pas été offert, ou que vous l'avez annulé, vous pouvez démarrer à nouveau le téléchargement en cliquant ce lien :\n\n$3\n\n'''Note''': Si vous ne le faites pas maintenant, ce fichier de configuration généré ne sera pas disponible plus tard si vous quittez l'installation sans le télécharger.\n\nLorsque c'est fait, vous pouvez '''[$2 accéder à votre wiki]'''.",
        "config-download-localsettings": "Télécharger <code>LocalSettings.php</code>",
        "config-help": "aide",
        "config-nofile": "Le fichier « $1 » est introuvable. A-t-il été supprimé ?",
-       "config-extension-link": "Saviez-vous que votre wiki supporte [//www.mediawiki.org/wiki/Manual:Extensions des extensions] ?\n\nVous pouvez consulter les [//www.mediawiki.org/wiki/Category:Extensions_by_category extensions par catégorie] ou la [//www.mediawiki.org/wiki/Extension_Matrix Matrice des extensions] pourvoir la liste complète des extensions.",
+       "config-extension-link": "Saviez-vous que votre wiki supporte [//www.mediawiki.org/wiki/Manual:Extensions des extensions] ?\n\nVous pouvez consulter les [//www.mediawiki.org/wiki/Category:Extensions_by_category extensions par catégorie].",
        "mainpagetext": "<strong>MediaWiki a été installé avec succès.</strong>",
        "mainpagedocfooter": "Consultez le [//meta.wikimedia.org/wiki/Aide:Contenu Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.\n\n== Pour démarrer ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Liste des paramètres de configuration]\n* [//www.mediawiki.org/wiki/Manual:FAQ/fr FAQ sur MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]"
 }
index 4bb0c68..f74df12 100644 (file)
@@ -4,7 +4,8 @@
                        "Kwj2772",
                        "아라",
                        "Hym411",
-                       "Priviet"
+                       "Priviet",
+                       "Namoroka"
                ]
        },
        "config-desc": "미디어위키 설치 프로그램",
        "config-download-localsettings": "<code>LocalSettings.php</code> 다운로드",
        "config-help": "도움말",
        "config-nofile": "\"$1\" 파일을 찾을 수 없습니다. 이미 삭제되었나요?",
-       "config-extension-link": "당신의 위키가 [//www.mediawiki.org/wiki/Manual:Extensions 확장 기능]을 지원한다는 것을 알고 계십니까?\n\n전체 확장 기능의 목록을 확인하려면 [//www.mediawiki.org/wiki/Category:Extensions_by_category 분류별 확장 기능]이나 [//www.mediawiki.org/wiki/Extension_Matrix 확장 기능 표]를 찾아보실 수 있습니다.",
+       "config-extension-link": "당신의 위키가 [//www.mediawiki.org/wiki/Manual:Extensions 확장 기능]을 지원한다는 것을 알고 계십니까?\n\n[//www.mediawiki.org/wiki/Category:Extensions_by_category 분류별 확장 기능]을 찾아보실 수 있습니다.",
        "mainpagetext": "'''미디어위키가 성공적으로 설치되었습니다.'''",
        "mainpagedocfooter": "[//meta.wikimedia.org/wiki/Help:Contents 이곳]에서 위키 소프트웨어에 대한 정보를 얻을 수 있습니다.\n\n== 시작하기 ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings 설정하기 목록]\n* [//www.mediawiki.org/wiki/Manual:FAQ 미디어위키 FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce 미디어위키 릴리스 메일링 리스트]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources 내 언어로 미디어위키 지역화]"
 }
index d8a7752..e2851e2 100644 (file)
        "config-download-localsettings": "Преземи го <code>LocalSettings.php</code>",
        "config-help": "помош",
        "config-nofile": "Податотеката „$1“ не е пронајдена. Да не е избришана?",
-       "config-extension-link": "Дали сте знаеле дека вашето вики поддржува [//www.mediawiki.org/wiki/Manual:Extensions додатоци]?\n\nМожете да ги прелистате [//www.mediawiki.org/wiki/Category:Extensions_by_category по категории] или да ја посетите [//www.mediawiki.org/wiki/Extension_Matrix матрицата], каде ќе најдете полн список на додатоци.",
+       "config-extension-link": "Дали сте знаеле дека вашето вики поддржува [//www.mediawiki.org/wiki/Manual:Extensions додатоци]?\n\nМожете да ги прелистате [//www.mediawiki.org/wiki/Category:Extensions_by_category по категории]",
        "mainpagetext": "'''МедијаВики е успешно воспоставен.'''",
        "mainpagedocfooter": "Погледнете го [//meta.wikimedia.org/wiki/Help:Contents Упатството за корисници] за подетални иформации како се користи вики-програмот.\n\n==Од каде да почнете==\n* [//meta.wikimedia.org/wiki/Manual:Configuration_settings Список на нагодувања]\n* [//meta.wikimedia.org/wiki/Manual:FAQ ЧПП (често поставувани прашања) за МедијаВики].\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Поштенски список на МедијаВики за нови верзии]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Локализирајте го МедијаВики на вашиот јазик]"
 }
index bfc8d53..1886a03 100644 (file)
        "config-header-oracle": "Ustawienia Oracle",
        "config-header-mssql": "Ustawienia Microsoft SQL Server",
        "config-invalid-db-type": "Nieprawidłowy typ bazy danych",
-       "config-missing-db-name": "Należy wpisać wartość w polu „Nazwa bazy danych”",
-       "config-missing-db-host": "Musisz wpisać wartość w polu „Serwer bazy danych”",
-       "config-missing-db-server-oracle": "Należy wpisać wartość w polu „Nazwa instancji bazy danych (TNS)”",
+       "config-missing-db-name": "Należy wpisać wartość w polu „{{int:config-db-name}}”.",
+       "config-missing-db-host": "Należy wpisać wartość w polu „{{int:config-db-host}}”.",
+       "config-missing-db-server-oracle": "Należy wpisać wartość w polu „{{int:config-db-host-oracle}}”.",
        "config-invalid-db-server-oracle": "Nieprawidłowa nazwa instancji bazy danych (TNS) „$1”.\nUżyj \"TNS Name\" lub \"Easy Connect\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods])",
        "config-invalid-db-name": "Nieprawidłowa nazwa bazy danych „$1”.\nUżywaj wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9), podkreślenia (_) lub znaku odejmowania (-).",
        "config-invalid-db-prefix": "Nieprawidłowy prefiks bazy danych „$1”.\nUżywaj wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9), podkreślenia (_) lub znaku odejmowania (-).",
        "config-mysql-utf8": "UTF‐8",
        "config-mysql-charset-help": "W '''trybie binarnym''', MediaWiki zapisuje tekst UTF-8 do bazy danych w polach binarnych.\nJest on bardziej wydajny niż tryb UTF-8 w MySQL i pozwala na używanie znaków pełnego zakresu Unicode.\n\nW '''trybie UTF-8''', MySQL będzie znać zestaw znaków w jakim zakodowano dane, można też przedstawić i przekonwertuj je odpowiednio, ale nie pozwoli Ci przechowywać znaków spoza [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes podstawowej płaszczyzny wielojęzyczności].",
        "config-mssql-auth": "Typ uwierzytelniania:",
+       "config-mssql-install-auth": "Wybierz typ uwierzytelniania, który będzie używany do łączenia się z bazą danych w trakcie procesu instalacji.\nJeśli wybierzesz „{{int:config-mssql-windowsauth}}”, będą wykorzystywane dane konta użytkownika, pod którym działa serwer www.",
        "config-mssql-sqlauth": "Uwierzytelnianie serwera SQL",
        "config-mssql-windowsauth": "Autoryzacja Windows",
        "config-site-name": "Nazwa wiki:",
index 312343e..cfe4b8e 100644 (file)
        "config-download-localsettings": "Download do <code>LocalSettings.php</code>",
        "config-help": "ajuda",
        "config-nofile": "Não foi possível encontrar o ficheiro \"$1\". Terá sido apagado?",
-       "config-extension-link": "Sabia que a sua wiki suporta [//www.mediawiki.org/wiki/Manual:Extensions extensões]?\n\nPode navegar as [//www.mediawiki.org/wiki/Category:Extensions_by_category extensões por categoria] ou a [//www.mediawiki.org/wiki/Extension_Matrix Matriz de Extensões] para ver a lista completa.",
+       "config-extension-link": "Sabia que a sua wiki suporta [//www.mediawiki.org/wiki/Manual:Extensions extensões]?\n\nPode procurar [//www.mediawiki.org/wiki/Category:Extensions_by_category extensões por categoria].",
        "mainpagetext": "'''MediaWiki instalado com sucesso.'''",
        "mainpagedocfooter": "Consulte o [//meta.wikimedia.org/wiki/Help:Contents Guia de Utilizadores] para informações sobre o uso do software wiki.\n\n== Onde começar ==\n\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings Lista de opções de configuração]\n* [//www.mediawiki.org/wiki/Manual:FAQ Perguntas e respostas frequentes sobre o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Subscreva a lista de divulgação de novas versões do MediaWiki]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources Regionalize MediaWiki para seu idioma]"
 }
index 3e86b1e..ccd9c2b 100644 (file)
@@ -79,7 +79,7 @@
        "config-gd": "Foond GD graphics librie biggit-in.\nEemage thummnailin will be enabled gif ye enable uplaids.",
        "config-no-scaling": "Coudna fynd GD librie or ImageMagick.\nEemage thummnailin will be disabled.",
        "config-no-uri": "<strong>Mistak:</strong> Coudna determine the current URI.\nInstallâtion aborted.",
-       "config-no-cli-uri": "<strong>Warnishment:</strong> Naw <code>--scriptpath</code> speceefied, uising defaut: <code>$1</code>.",
+       "config-no-cli-uri": "<strong>Warnishment:</strong> Naw <code>--scriptpath</code> speceefied, uisin defaut: <code>$1</code>.",
        "config-using-server": "Uisin server name \"<nowiki>$1</nowiki>\".",
        "config-using-uri": "Uisin server URL \"<nowiki>$1$2</nowiki>\".",
        "config-uploads-not-safe": "<strong>Warnishment:</strong> Yer defaut directerie fer uplaids <code>$1</code> is vulnerable til arbitrie scripts execution.\nAathough MediaWiki checks aw uplaided files fer securitie threats, it is heily recommended tae [//www.mediawiki.org/wiki/Manual:Security#Upload_security close this security vulnerabeelitie] afore enablin uplaids.",
        "config-insecure-keys": "<strong>Warnishment:</strong> {{PLURAL:$2|Ae secure key|Secure keys}} ($1) generated durin instawation {{PLURAL:$2|is|ar}} naw compleatelie safe. Consider chyngin {{PLURAL:$2|it|theim}} manuallie.",
        "config-install-sysop": "Makin admeenistrâter uiser accoont",
        "config-install-subscribe-fail": "Onable tae subscribe til mediawiki-announce: $1",
-       "config-install-subscribe-notpossible": "cURL isna instawed n <code>allow_url_fopen</code> isna available.",
+       "config-install-subscribe-notpossible": "cURL isna instawed n <code>allow_url_fopen</code> is na available.",
        "config-install-mainpage": "Cræftin main page wi defaut content",
        "config-install-extension-tables": "Makin buirds fer enabled extensions",
        "config-install-mainpage-failed": "Coudna insert main page: $1",
index a94f306..70c226d 100644 (file)
        "config-download-localsettings": "下载<code>LocalSettings.php</code>",
        "config-help": "帮助",
        "config-nofile": "找不到文件“$1”。它是否已被删除?",
-       "config-extension-link": "您是否知道您的wiki支持[//www.mediawiki.org/wiki/Manual:Extensions 拓展]?\n\n您可浏览[//www.mediawiki.org/wiki/Category:Extensions_by_category 拓展分类]或[//www.mediawiki.org/wiki/Extension_Matrix 拓展矩阵]以查找完整的拓展列表。",
+       "config-extension-link": "您是否知道您的wiki支持[//www.mediawiki.org/wiki/Manual:Extensions 拓展]?\n您可浏览[//www.mediawiki.org/wiki/Category:Extensions_by_category 拓展分类]。",
        "mainpagetext": "'''已成功安装MediaWiki。'''",
        "mainpagedocfooter": "请查阅[//meta.wikimedia.org/wiki/Help:Contents 用户指南]以获取使用本wiki软件的信息!\n\n== 入门 ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki配置设置列表]\n* [//www.mediawiki.org/wiki/Manual:FAQ/zh-hans MediaWiki常见问题]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki发布邮件列表]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources 本地化MediaWiki到您的语言]"
 }
index 3b655e2..ae3e9f8 100644 (file)
                        "Simon Shek",
                        "아라",
                        "Liuxinyu970226",
-                       "Xiaomingyan"
+                       "Xiaomingyan",
+                       "Cwlin0416"
                ]
        },
-       "config-desc": "MediaWiki安裝程式",
-       "config-title": "MediaWiki $1配置",
+       "config-desc": "MediaWiki 安裝程式",
+       "config-title": "MediaWiki $1 安裝",
        "config-information": "資訊",
-       "config-localsettings-upgrade": "已檢測到<code>LocalSettings.php</code>文件。要升級該配置,請在下面的框中輸入<code>$wgUpgradeKey</code>的值。您可以在<code>LocalSettings.php</code>中找到它。",
-       "config-localsettings-cli-upgrade": "已檢測到<code>LocalSettings.php</code>文件。要升級該配置,請直接執行<code>update.php</code>。",
-       "config-localsettings-key": "升級鑰:",
-       "config-localsettings-badkey": "您提供的密鑰不正確。",
-       "config-upgrade-key-missing": "檢測到MediaWiki的配置已經存在。若要升級該配置,請將下面一行文本添加到<code>LocalSettings.php</code>的底部:\n\n$1",
-       "config-localsettings-incomplete": "ç\95¶å\89\8dç\9a\84<code>LocalSettings.php</code>å\8f¯è\83½ä¸¦ä¸\8då®\8cæ\95´ï¼\8cå\9b ç\82ºè®\8aé\87\8f$1æ²\92æ\9c\89設置ã\80\82è«\8bå\9c¨<code>LocalSettings.php</code>設置該è®\8aé\87\8fï¼\8c並å\96®æ\93\8aã\80\8c{{int:Config-continue}}ã\80\8d。",
-       "config-localsettings-connection-error": "在使用<code>LocalSettings.php</code>或<code>AdminSettings.php</code>中指定的設置連接數據庫時發生錯誤。請修復相應設置並重試。\n\n$1",
-       "config-session-error": "啟動會話出錯:$1",
-       "config-session-expired": "您的會話數據可能已經過期,當前會話的使用期限被設定為$1。您可以在php.ini中設置<code>session.gc_maxlifetime</code>來延長此期限,並重新啟動本配置程序。",
-       "config-no-session": "您的會話數據丟失了!請檢查php.ini並確保<code>session.save_path</code>被設置為適當的目錄。",
+       "config-localsettings-upgrade": "已偵測到 <code>LocalSettings.php</code> 檔案。\n要升級目前安裝的版本,請在下方輸入框中輸入 <code>$wgUpgradeKey</code> 的值。\n您可以從 <code>LocalSettings.php</code> 檔案中找到。",
+       "config-localsettings-cli-upgrade": "已偵測到 <code>LocalSettings.php</code> 檔案。\n要升級目前安裝的版本,請執行 <code>update.php</code>。",
+       "config-localsettings-key": "升級鑰:",
+       "config-localsettings-badkey": "你提供的金鑰不正確。",
+       "config-upgrade-key-missing": "已偵測到先前安裝的 MediaWiki。\n要升級目前安裝的版本,請將下列文字附加到 <code>LocalSettings.php</code> 的檔案最下方:\n\n$1",
+       "config-localsettings-incomplete": "ç\9b®å\89\8dç\9a\84 <code>LocalSettings.php</code> æª\94æ¡\88ä¸\8då®\8cæ\95´ã\80\82\næ\9cªè¨­å®\9aå\8f\83æ\95¸ $1ã\80\82\nè«\8bå°\87æ­¤å\8f\83æ\95¸è¨­å®\9aè\87³ <code>LocalSettings.php</code> ä¸­ï¼\8c並é»\9eé\81¸ \"{{int:Config-continue}}\"。",
+       "config-localsettings-connection-error": "使用 <code>LocalSettings.php</code> 中所指定的資料庫設定連線發生錯誤。 請修復相關設定並再試一次。\n\n$1",
+       "config-session-error": "開始工作階段錯誤:$1",
+       "config-session-expired": "您的工作階段已過期。\n目前設定的工作階段期限為 $1。\n您可以在 php.ini 設定檔中設定 <code>session.gc_maxlifetime</code> 的參數來延長此期限。\n重新開始安裝程序。",
+       "config-no-session": "您的工作階段資料遺失!\n請檢查 php.ini 設定檔並確認 <code>session.save_path</code> 所設定的目錄是否合適。",
        "config-your-language": "您的語言:",
-       "config-your-language-help": "選擇一個要使用的語言在安裝過程中。",
-       "config-wiki-language": "Wiki語言:",
-       "config-wiki-language-help": "選擇將要安裝的wiki在多數情況下使用的語言。",
-       "config-back": "←返回",
-       "config-continue": "繼續→",
+       "config-your-language-help": "請選擇接下來安裝程序中要使用的語言。",
+       "config-wiki-language": "Wiki 語言:",
+       "config-wiki-language-help": "選擇將要安裝的 Wiki 多數情況主要使用的語言。",
+       "config-back": "← 返回",
+       "config-continue": "繼續 →",
        "config-page-language": "語言",
-       "config-page-welcome": "歡迎您來到MediaWiki!",
-       "config-page-dbconnect": "連接到數據庫",
-       "config-page-upgrade": "å\8d\87ç´\9aç\8f¾æ\9c\89ç\9a\84å®\89è£\9d",
-       "config-page-dbsettings": "數據庫設定",
+       "config-page-welcome": "歡迎您來到 MediaWiki!",
+       "config-page-dbconnect": "連線到資料庫",
+       "config-page-upgrade": "å\8d\87ç´\9aç\9b®å\89\8då®\89è£\9dç\9a\84ç\89\88æ\9c¬",
+       "config-page-dbsettings": "資料庫設定",
        "config-page-name": "名稱",
        "config-page-options": "選項",
        "config-page-install": "安裝",
        "config-page-complete": "完成!",
        "config-page-restart": "重新安裝",
-       "config-page-readme": "讀我",
-       "config-page-releasenotes": "發說明",
+       "config-page-readme": "讀我說明",
+       "config-page-releasenotes": "發說明",
        "config-page-copying": "複製",
        "config-page-upgradedoc": "升級",
-       "config-page-existingwiki": "已有wiki",
-       "config-help-restart": "是否要清除所有已輸入且保存的數據,並重新啟動安裝過程嗎?",
-       "config-restart": "是的,重新啟動",
-       "config-welcome": "=== 環境檢查 ===\n對當前環境是否適合安裝MediaWiki作基本的檢查。如果您在安裝過程中需要幫助,請提供這些檢查的結果。",
-       "config-copyright": "=== 版權和條款 ===\n\n$1\n\n本程序為自由軟件;您可依據自由軟件基金會所發表的GNU通用公共授權條款規定,就本程序再為發布與/或修改;無論您依據的是本授權的第二版或(您自行選擇的)任一日後發行的版本。\n\n本程序是基於使用目的而加以發布,然而'''不負任何擔保責任''';亦無對'''適售性'''或'''特定目的適用性'''所為的默示性擔保。詳情請參照GNU通用公共授權。\n\n您應已收到附隨於本程序的<doclink href=\"Copying\">GNU通用公共授權的副本</doclink>;如果沒有,請寫信至自由軟件基金會:59 Temple Place - Suite 330, Boston, Ma 02111-1307, USA,或[http://www.gnu.org/copyleft/gpl.html 在線閱讀]。",
-       "config-sidebar": "* [www.mediawiki.org/wiki/MediaWiki/zh-hant MediaWiki首頁]\n* [www.mediawiki.org/wiki/Help:Contents/zh 用戶指南]\n* [//www.mediawiki.org/wiki/Manual:Contents/zh 管理員指南]\n* [//www.mediawiki.org/wiki/Manual:FAQ/zh-hant 常見問題解答]\n----\n* <doclink href=Readme>自述文件</doclink>\n* <doclink href=ReleaseNotes>發行說明</doclink>\n* <doclink href=Copying>協議副本</doclink>\n* <doclink href=UpgradeDoc>升級</doclink>",
-       "config-env-good": "環境檢查已經完成。您可以安裝MediaWiki。",
-       "config-env-bad": "環境檢查已經完成。您不能安裝MediaWiki。",
-       "config-env-php": "PHP $1已安裝。",
-       "config-env-php-toolow": "已安裝PHP $1;然而,MediaWiki要求PHP $2或更高版本。",
-       "config-unicode-using-utf8": "將使用 Brion Vibber 的 utf8_normalize.so 以實作 Unicode 正規化。",
-       "config-unicode-using-intl": "將使用 [http://pecl.php.net/intl intl PECL 延伸函式庫]以實作 Unicode 正規化。",
-       "config-unicode-pure-php-warning": "<strong>警告:</strong>因為尚未安裝[http://pecl.php.net/intl intl PECL延伸函式庫]以處理Unicode正規化,故只能退而採用較慢的純PHP實作。如果您運行着一個高流量的網站,您應當閱讀[//www.mediawiki.org/wiki/Unicode_normalization_considerations/zh Unicode正規化]一文。",
-       "config-unicode-update-warning": "'''警告''':Unicode正常化封裝器的已安裝版本使用了舊版本的[http://site.icu-project.org/ ICU項目]庫。如果您需要使用Unicode,請將其[//www.mediawiki.org/wiki/Unicode_normalization_considerations 升級]。",
-       "config-no-db": "找不到合適的數據庫驅動!您需要為PHP安裝數據庫驅動。目前支持以下數據庫:$1。\n\n如果您通過自行編譯安裝的PHP,請對其進行重新配置以啟用數據庫客戶端,例如使用<code>./configure --with-mysqli</code>。如果您通過Debian或Ubuntu包安裝PHP,您仍需安裝諸如<code>php5-mysql</code>等模塊。",
-       "config-outdated-sqlite": "'''警告''':您已安裝SQLite $1,但是它的版本低於最低要求版本$2。因此您無法選擇SQLite。",
-       "config-no-fts3": "'''警告''':已編譯的SQLite不包含[//sqlite.org/fts3.html FTS3模塊],後台搜索功能將不可用。",
-       "config-register-globals": "'''警告:PHP的<code>[http://php.net/register_globals register_globals]</code>選項被啟用。'''\n'''如果可以請將之禁用。'''\nMediaWiki仍將運行,但您的服務器會被暴露給潛在的安全漏洞。",
-       "config-magic-quotes-runtime": "'''致命錯誤:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime]被啟用!'''\n此選項會無法預測地破壞輸入的數據,請將其禁用,否則您將不能安裝或使用MediaWiki。",
-       "config-magic-quotes-sybase": "'''致命錯誤:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase]被啟用!'''\n此選項會無法預測地破壞輸入的數據,請將其禁用,否則您將不能安裝或使用MediaWiki。",
-       "config-mbstring": "'''致命錯誤:[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload]被啟用!'''\n此選項會導致錯誤並不可預測地破壞數據,請將其禁用,否則您將不能安裝或使用MediaWiki。",
-       "config-safe-mode": "'''警告:'''PHP的[http://www.php.net/features.safe-mode 安全模式]已啟用。它可能會導致一些問題,尤其在對文件上傳和數學公式<code>math</code>的支持方面。",
-       "config-xml-bad": "缺少PHP的XML模塊。MediaWiki需要使用該模塊提供的函數,在當前配置下將無法工作。如果您正在使用Mandrake Linux,請安裝php-xml包。",
-       "config-pcre-no-utf8": "'''致命錯誤''':PHP的PCRE模塊在編譯時可能沒有包含PCRE_UTF8支持。MediaWiki需要UTF-8支持才能正常工作。",
-       "config-memory-raised": "PHP的內存使用上限<code>memory_limit</code>為$1,自動提升到$2。",
-       "config-memory-bad": "'''警告:'''PHP的內存使用上限<code>memory_limit</code>為$1。該設定可能過低,並導致安裝失敗!",
-       "config-ctype": "'''毀滅性錯誤''':PHP必須有[http://www.php.net/manual/en/ctype.installation.php Ctype 擴展]來支持編譯。",
-       "config-json": "'''致命錯誤:'''PHP編譯程式並無法支援JSON。於MediaWiki繼續安裝之前您必須安裝PHP JSON拓展或[http://pecl.php.net/package/jsonc PECL jsonc]拓展。\n* PHP拓展包含於紅帽Linux(CentOS)5版至6版,這些用戶必須於<code>/etc/php.ini</code>或<code>/etc/php.d/json.ini</code>啟用之。\n* 部分於2013年5月后發佈Linux缺少PHP拓展,於PECL<code>php5-json</code>或<code>php-pecl-jsonc</code>拓展安裝后即可啟用。",
-       "config-xcache": "[http://xcache.lighttpd.net/ XCache]已安裝",
-       "config-apc": "[http://www.php.net/apc APC]已安裝",
-       "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache]已安裝",
-       "config-no-cache": "'''警告:'''找不到[http://www.php.net/apc APC]、[http://xcache.lighttpd.net/ XCache]或[http://www.iis.net/download/WinCacheForPhp WinCache],無法啟用對象緩存。計劃緩存未啟用。",
-       "config-mod-security": "'''警告''':您的服務器已啟動[http://modsecurity.org/ mod_security]。若其配置錯誤, 會導致MediaWiki和其他軟件的錯誤並允許用戶任意發布內容。如果您遇到任何錯誤,請查閱[http://modsecurity.org/documentation/ mod_security文檔]或聯繫您的客服。",
-       "config-diff3-bad": "找不到GNU diff3。",
-       "config-git": "發現Git版本控制軟件:<code>$1</code>。",
-       "config-git-bad": "無法找到Git版本控制軟件。",
-       "config-imagemagick": "已找到ImageMagick:<code>$1</code>。如果你啟用了上傳功能,縮略圖功能也將被啟用。",
-       "config-gd": "已找到內建的GD圖形庫。如果你啟用了上傳功能,縮略圖功能也將被啟用。",
-       "config-no-scaling": "找不到GD庫或ImageMagick。縮略圖功能將不可用。",
-       "config-no-uri": "'''錯誤:'''無法確定當前的URI。安裝已中斷。",
-       "config-no-cli-uri": "'''警告''':未指定<code>--scriptpath</code>參數,使用默認值:<code>$1</code>。",
-       "config-using-server": "使用伺服器名「<nowiki>$1</nowiki>」。",
-       "config-using-uri": "使用伺服器名「<nowiki>$1$2</nowiki>」。",
-       "config-uploads-not-safe": "'''警告:'''您的默認上傳目錄<code>$1</code>存在允許執行任意腳本的漏洞。儘管MediaWiki會對所有已上傳的文件進行安全檢查,但我們仍然強烈建議您在啟用上傳功能前[//www.mediawiki.org/wiki/Manual:Security#Upload_security 關閉該安全漏洞]。",
-       "config-no-cli-uploads-check": "'''警告''':在CLI安裝過程中,沒有對您的默認上傳目錄(<code>$1</code>)進行執行任意腳本的漏洞檢查。",
-       "config-brokenlibxml": "您的系統安裝的PHP和libxml2版本組合存在故障,並可能在MediaWiki和其他web應用程序中造成隱藏的數據損壞。請將PHP升級到5.2.9或以上,libxml2升級到2.7.3或以上([//bugs.php.net/bug.php?id=45996 PHP的故障報告])。安裝已中斷。",
-       "config-suhosin-max-value-length": "Suhosin已經安裝並將GET請求的參數長度限制在$1字節。MediaWiki的ResourceLoader部件可以在此限制下正常工作,但其性能會被降低。如果可能,請在<code>php.ini</code>中將<code>suhosin.get.max_value_length</code>設為1024或更高值,並在LocalSettings.php中將<code>$wgResourceLoaderMaxQueryLength</code>設為同一值。",
+       "config-page-existingwiki": "現有 Wiki",
+       "config-help-restart": "是否要清除所有已輸入且儲存的資料,並重新開始安裝程序嗎?",
+       "config-restart": "是的,重新開始",
+       "config-welcome": "=== 環境檢查 ===\n現在會做基本的檢查,檢查環境是否符合 MediaWiki 安裝所需。\n若您要尋求如何完成安裝的協助,請記得提供以下訊息。",
+       "config-copyright": "=== 版權聲明與授權條款 ===\n\n$1\n\n本程式為自由軟體;您可依據自由軟體基金會所發表的 GNU 通用公共授權條款規定,將本程式重新發佈與/或修改;無論您依據的是本授權條款的第二版或 (您可自行選擇) 之後的任何版本。\n\n本程式發佈的目的是希望可以提供幫助,但 <strong>不負任何擔保責任</strong>;亦無隱含對 <strong>適售性</strong> 或 <strong>特定用途的適用性</strong> 的情形擔保。詳情請參照GNU 通用公共授權。\n\n您應已隨本程式收到 <doclink href=\"Copying\">GNU 通用公共授權條款</doclink>;如果沒有,請信件通知自由軟體基金會,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA,或 [http://www.gnu.org/copyleft/gpl.html 線上閱讀]。",
+       "config-sidebar": "* [www.mediawiki.org/wiki/MediaWiki/zh-hant MediaWiki 首頁]\n* [www.mediawiki.org/wiki/Help:Contents/zh 使用者指南]\n* [//www.mediawiki.org/wiki/Manual:Contents/zh 管理者指南]\n* [//www.mediawiki.org/wiki/Manual:FAQ/zh-hant 常見問題集]\n----\n* <doclink href=Readme>讀我說明</doclink>\n* <doclink href=ReleaseNotes>發行說明</doclink>\n* <doclink href=Copying>版權聲明</doclink>\n* <doclink href=UpgradeDoc>升級</doclink>",
+       "config-env-good": "環境檢查已完成。\n您可以安裝 MediaWiki。",
+       "config-env-bad": "環境檢查已完成。\n您無法安裝 MediaWiki。",
+       "config-env-php": "PHP $1 已安裝。",
+       "config-env-php-toolow": "已安裝 PHP $1。\n但 MediaWiki 需要 PHP $2 或更新的版本。",
+       "config-unicode-using-utf8": "使用 Brion Vibber 的 utf8_normalize.so 做 Unicode 正規化。",
+       "config-unicode-using-intl": "使用 [http://pecl.php.net/intl intl PECL 擴充套件] 做 Unicode 正規化。",
+       "config-unicode-pure-php-warning": "<strong>警告:</strong> 無法使用 [http://pecl.php.net/intl intl PECL 擴充套件] 處理 Unicode 正規化,故回退使用純 PHP 實作的正規化程式,此方式處理速度較緩慢。\n\n如果您的網站瀏覽人次很高,您應先閱讀 [//www.mediawiki.org/wiki/Unicode_normalization_considerations/zh Unicode 正規化]。",
+       "config-unicode-update-warning": "<strong>警告</strong>:目前安裝的 Unicode 正規化包裝程式使用了舊版 [http://site.icu-project.org/ ICU 計劃] 的程式庫。\n若您需要使用 Unicode,您應先進行 [//www.mediawiki.org/wiki/Unicode_normalization_considerations 升級]。",
+       "config-no-db": "找不到合適的資料庫驅動程式!您需要安裝 PHP 資料庫驅動程式。\n目前支援以下類型的資料庫: $1 。\n\n如果您是自行編譯 PHP,您必須重新設定並開啟資料庫客戶端,例:使用 <code>./configure --with-mysqli</code> 指令參數。\n如果您是使用 Debian 或 Ubuntu 的套件安裝,您則需要額外安裝,例:<code>php5-mysql</code> 套件。",
+       "config-outdated-sqlite": "<strong>警告:</strong>您已安裝 SQLite $1,但是它的版本低於最低需求版本 $2。 因此您無法使用 SQLite。",
+       "config-no-fts3": "<strong>警告:</strong> SQLite 編譯時未包含 [//sqlite.org/fts3.html FTS3 模組],後台搜尋功能將無法使用。",
+       "config-register-globals": "<strong>警告:PHP 的<code>[http://php.net/register_globals register_globals]</code>選項已開啟,如果可以請關閉該選項。</strong>\nMediaWiki 仍可正常執行,但您的伺服器將會有潛藏的安全性問題。",
+       "config-magic-quotes-runtime": "<strong>嚴重:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] 選項被開啟!</strong>\n此選項會導致資料在無法預測的情況下損壞。\n您必須將開選項關閉方可繼續安裝 MediaWiki。",
+       "config-magic-quotes-sybase": "<strong>嚴重:[http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-sybase magic_quotes_sybase] 選項被開啟!</strong>\n此選項會導致資料在無法預測的情況下損壞。\n您必須將開選項關閉方可繼續安裝 MediaWiki。",
+       "config-mbstring": "<strong>嚴重:[http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] 選項被開啟!</strong>\n此選項會導致資料在無法預測的情況下損壞。\n您必須將開選項關閉方可繼續安裝 MediaWiki。",
+       "config-safe-mode": "<strong>警告:</strong>PHP 的 [http://www.php.net/features.safe-mode 安全模式] 選項被開啟。它可能會導致檔案上傳與數學函數 <code>math</code> 的問題。",
+       "config-xml-bad": "PHP 缺少的 XML 模組。\nMediaWiki 需要使用此模組中所提供的函數,且在目前的設定下將無法繼續作業。\n如果您使用的是 Mandrake Linux,請安裝 php-xml 套件。",
+       "config-pcre-old": "<strong>嚴重:</strong> 需要使用 PCRE $1 或更新的版本。\n您的 PHP 執行檔使用的是 PCRE $2。\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE 詳細資訊]。",
+       "config-pcre-no-utf8": "<strong>嚴重:</strong> PHP 的 PCRE 模組在編譯時未包含 PCRE_UTF8 支援。\nMediaWiki 需要支援 UTF-8 才可正常運作。",
+       "config-memory-raised": "PHP 的記憶體使用上限 <code>memory_limit</code> 目前為 $1,自動提高到 $2。",
+       "config-memory-bad": "<strong>警告:</strong>PHP 的記憶體使用上限 <code>memory_limit</code> 為 $1。\n該設定值可能過低。\n這可能導致後續的安裝失敗!",
+       "config-ctype": "<strong>嚴重:</strong> PHP 編譯時必須包含 [http://www.php.net/manual/en/ctype.installation.php Ctype 擴充套件]。",
+       "config-json": "<strong>嚴重:</strong> PHP 編譯時並未包含 JSON 擴充套件。\n在 MediaWiki 繼續安裝之前您必須先安裝 PHP JSON 擴充套件或 [http://pecl.php.net/package/jsonc PECL jsonc] 擴充套件。\n* 此 PHP 擴充套件在 Red Hat Enterprice Linux (CentOS) 5 版與 6 版以有內含,須於 <code>/etc/php.ini</code> 或 <code>/etc/php.d/json.ini</code> 設定檔將該項目開啟。\n* 部分於 2013 年 5 月以後發佈的 Linux 並沒有此 PHP 擴充套件,可透過安裝 PECL 擴充套件 <code>php5-json</code> 或 <code>php-pecl-jsonc</code> 替代。",
+       "config-xcache": "[http://xcache.lighttpd.net/ XCache] 已安裝",
+       "config-apc": "[http://www.php.net/apc APC] 已安裝",
+       "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] 已安裝",
+       "config-no-cache": "<strong>警告:</strong> 找不到 [http://www.php.net/apc APC]、[http://xcache.lighttpd.net/ XCache] 或 [http://www.iis.net/download/WinCacheForPhp WinCache]。\n無法開啟物件快取功能。",
+       "config-mod-security": "<strong>警告:</strong>您的網頁伺服器已開啟 [http://modsecurity.org/ mod_security] 模組,如果設定不恰當會導致使用者可在 MediaWiki 或其他應用程式發佈任意的內容。\n若您遇到任何問題,請參考 [http://modsecurity.org/documentation/ mod_security 文件] 或聯繫您的伺服器技術支援人員。",
+       "config-diff3-bad": "找不到 GNU diff3。",
+       "config-git": "找到 Git 版本控制軟體:<code>$1</code>。",
+       "config-git-bad": "查無 Git 版本控制軟體。",
+       "config-imagemagick": "找到 ImageMagick:<code>$1</code>。\n若您開啟了檔案上傳功能,將可啟用縮圖功能。",
+       "config-gd": "找到內建 GD 圖形程式庫。\n若您開啟了檔案上傳功能,將可啟用縮圖功能。",
+       "config-no-scaling": "找不到 GD 程式庫或 ImageMagick。\n無法使用縮圖功能。",
+       "config-no-uri": "<strong>錯誤:</strong>無法辨識目前的 URI 位置。\n安裝已中止。",
+       "config-no-cli-uri": "<strong>警告:</strong>:未指定 <code>--scriptpath</code> 指令參數,使用預設值:<code>$1</code>。",
+       "config-using-server": "使用伺服器名稱 \"<nowiki>$1</nowiki>\"。",
+       "config-using-uri": "使用伺服器 URL 位置 \"<nowiki>$1$2</nowiki>\"。",
+       "config-uploads-not-safe": "<strong>警告:</strong>您預設的上傳目錄 <code>$1</code> 有可被任意執行 Script 的漏洞。\n雖然 MediaWiki 會對所有上傳的檔案進行安全檢查,但我們仍強烈建議您在開啟上傳功能前了解如何 [//www.mediawiki.org/wiki/Manual:Security#Upload_security 關閉此安全漏洞]。",
+       "config-no-cli-uploads-check": "<strong>警告:</strong>透過指令介面安不會檢查您預設的上傳目錄 (<code>$1</code>) 是否有可任意執行 Script 的安全性漏洞。",
+       "config-brokenlibxml": "您的系統使用了可能造成 MediaWiki 或其他網頁應用程式資料損毀問題的 PHP 與 limbxml2 版本。\n請升級 libxml2 2.7.3 或更新的版本 ([https://bugs.php.net/bug.php?id=45996 PHP 問題報告])。\n安裝已中止。",
+       "config-suhosin-max-value-length": "Suhosin 已安裝並且限制 GET 參數的長度 <code>length</code> 為 $1 位元組。\nMediaWiki 的 ResourceLoader 元件可以在此限制下正常運作,但仍會降低執行的效能。\n如果可能的情況下,您應該設定 <code>php.ini</code> 設定檔中的項目  <code>suhosin.get.max_value_length</code> 為 1024 或者更高的數值,並且將\n<code>LocalSettings.php</code> 中的設定項目  <code>$wgResourceLoaderMaxQueryLength</code> 設為相同的數值。",
        "config-db-type": "資料庫類型:",
        "config-db-host": "資料庫主機:",
-       "config-db-host-help": "如果您的數據庫在別的服務器上,請在這裡輸入它的域名或IP地址。\n\n如果您在使用共享網站套餐,您的網站商應該已在他們的控制面板中給您數據庫信息了。\n\n如果您在Windows中安裝並且使用MySQL,“localhost”可能無效。如果確實無效,請輸入“127.0.0.1”作為IP地址。\n\n如果您在使用PostgreSQL,並且要用Unix socket來連接,請留空。",
+       "config-db-host-help": "如果您的資料庫安裝在其他伺服器上,請在此輸入該主機的名稱或 IP 位址。\n\n如果您使用共用的網頁主機,您的主機提供商應會在說明文件上告訴您正確的主機名稱。\n\n如果您安裝在 Windows 伺服器並且使用 MySQL,伺服器名稱可能無法使用使用 \"localhost\"。若確實無法使用,請改嘗試使用本機的 IP 位址 \"127.0.0.1\"。\n\n如果您使用 PostgreSQL,將此欄位空白以使用 Unix socket 來連線。",
        "config-db-host-oracle": "資料庫的 TNS:",
-       "config-db-host-oracle-help": "請輸入合法的[http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm 本地連接名],並確保tnsnames.ora文件對本安裝程序可見。<br />如果您使用的客戶端庫為10g或更新的版本,您還可以使用[http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 簡單連接名方法](easy connect naming method)。",
-       "config-db-wiki-settings": "識別這個 Wiki",
+       "config-db-host-oracle-help": "請輸入有效的 [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm 本地連線名稱],並確認安裝程式可以讀取 tnsnames.ora 檔案。<br />如果您使用的客戶端程式庫為 10g 或者更新的版本,您也可使用 [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 簡易連線] 的命名方法進行連線。",
+       "config-db-wiki-settings": "此 Wiki 的 ID",
        "config-db-name": "資料庫名稱:",
-       "config-db-name-help": "請輸入一個可以標識您的wiki的名稱。請勿使用空格。\n\n如果您正在使用共享web主機,您的主機提供商或會給您指定一個數據庫名稱,或會讓您通過控制面板創建數據庫。",
-       "config-db-name-oracle": "資料庫架構:",
-       "config-db-account-oracle-warn": "ç\8f¾æ\9c\89ä¸\89種已æ\94¯æ\8c\81æ\96¹æ¡\88å\8f¯ä»¥å°\87Oracle設置ç\82ºå¾\8c端æ\95¸æ\93\9a庫ï¼\9a\n\nå¦\82æ\9e\9cæ\82¨å¸\8cæ\9c\9bå\9c¨å®\89è£\9dé\81\8eç¨\8b中å\89µå»ºæ\95¸æ\93\9a庫帳æ\88¶ï¼\8cè«\8bç\82ºå®\89è£\9dç¨\8båº\8fæ\8f\90ä¾\9bå\85·æ\9c\89SYSDBAè§\92è\89²ç\9a\84æ\95¸æ\93\9a庫帳æ\88¶ï¼\8c並ç\82ºweb訪å\95\8f帳æ\88¶æ\8c\87å®\9aæ\89\80é\9c\80身份è­\89æ\98\8eï¼\9bå\90¦å\89\87æ\82¨å\8f¯ä»¥æ\89\8bå\8b\95å\89µå»ºweb訪å\95\8fç\9a\84賬æ\88¶ä¸¦å\83\85é \88æ\8f\90ä¾\9b該帳æ\88¶ï¼\88確ä¿\9d帳æ\88¶å·²æ\9c\89å\89µå»ºæ\96¹æ¡\88å°\8d象ï¼\88schema objectï¼\89ç\9a\84æ\89\80é\9c\80æ¬\8aé\99\90ï¼\89ï¼\9bæ\88\96æ\8f\90ä¾\9bå\85©å\80\8bä¸\8då\90\8cç\9a\84帳æ\88¶ï¼\8cå\85¶ä¸\80å\85·æ\9c\89å\89µå»ºæ¬\8aé\99\90ï¼\8cå\8f¦ä¸\80å\89\87被é\99\90å\88¶ç\82ºweb訪å\95\8fã\80\82\n\nå\85·æ\9c\89æ\89\80é\9c\80æ¬\8aé\99\90賬æ\88¶ç\9a\84å\89µå»ºè\85³æ\9c¬å­\98æ\94¾æ\96¼æ\9c¬ç¨\8båº\8fç\9a\84â\80\9cmaintenance/oracle/â\80\9dç\9b®é\8c\84ä¸\8bã\80\82è«\8b注æ\84\8fï¼\8c使ç\94¨å\8f\97é\99\90å\88¶ç\9a\84帳æ\88¶å°\87ç¦\81ç\94¨é»\98èª\8d帳æ\88¶ç\9a\84所有維護性功能。",
-       "config-db-install-account": "用於安裝的用戶帳號",
+       "config-db-name-help": "請輸入一個可以辨識您的 Wiki 的名稱,\n請勿包含空格。\n\n如果您使用的是共用的網頁主機,您的主機提供商會給您一個指定的資料庫名稱,或者讓您透過管理介面建立資料庫。",
+       "config-db-name-oracle": "資料庫 Schema:",
+       "config-db-account-oracle-warn": "ç\9b®å\89\8dæ\9c\89ä¸\89種æ\94¯æ\8f´ Oracle å\81\9aç\82ºå¾\8c端è³\87æ\96\99庫ç\9a\84æ\96¹æ¡\88ï¼\9a\n\nå¦\82æ\9e\9cæ\82¨å¸\8cæ\9c\9bå\9c¨å®\89è£\9dç\9a\84é\81\8eç¨\8b中è\87ªå\8b\95建ç«\8bæ\96°ç\9a\84è³\87æ\96\99庫ï¼\8cè«\8bæ\8f\90ä¾\9bå\85·æ\9c\89 SYSDBA æ¬\8aé\99\90ç\9a\84帳è\99\9f並ä¸\94æ\8f\90ä¾\9bæ\9cªä¾\86è¦\81給網é \81å­\98å\8f\96使ç\94¨ç\9a\84è³\87æ\96\99庫帳è\99\9få\8f\8aå¯\86碼ã\80\82æ\88\96è\80\85æ\82¨å\8f¯ä»¥æ\89\8bå\8b\95建ç«\8b給網é \81å­\98å\8f\96使ç\94¨ç\9a\84è³\87æ\96\99庫帳è\99\9f (è«\8b確ä¿\9d該帳è\99\9fæ\9c\89建ç«\8b Schema Object ç\9a\84æ¬\8aé\99\90)ï¼\8cå\86\8dä¸\8dç\84¶æ\82¨å\8f¯ä»¥æ\8f\90ä¾\9bå\85©çµ\84ä¸\8då\90\8cç\9a\84帳è\99\9fï¼\8cä¸\80çµ\84ç\94¨ä¾\86建ç«\8bæ¬\8aé\99\90ï¼\8cè\80\8cå\8f¦ä¸\80çµ\84ç\94¨ä¾\86å\81\9aç\82ºç¶²é \81å­\98å\8f\96使ç\94¨ã\80\82\n\næ\9c¬æ¬¡å®\89è£\9d建ç«\8bç\9a\84帳è\99\9f以å\8f\8aæ¬\8aé\99\90æ\89\80é\9c\80è¦\81ç\9a\84 Scriptï¼\8cå\8f¯ä»¥å\9c¨ \"maintenance/oracle/\" ä¸­æ\89¾å\88°ã\80\82\nè«\8b注æ\84\8fï¼\8cè\8b¥æ\82¨ä½¿ç\94¨æ\9c\89é\99\90å\88¶ç\9a\84帳è\99\9få°\87æ\9c\83é \90設é\97\9cé\96\89所有維護性功能。",
+       "config-db-install-account": "安裝程序使用的使用者帳號",
        "config-db-username": "資料庫使用者名稱:",
        "config-db-password": "資料庫密碼:",
-       "config-db-password-empty": "請為新數據庫用戶$1輸入密碼。儘管您可以創建不使用密碼的用戶,但這樣做並不安全。",
-       "config-db-username-empty": "您必須鍵入用於「{{int:config-db-username}}」值",
-       "config-db-install-username": "請輸入在安裝過程中用於連接數據庫的用戶名。請勿輸入MediaWiki帳號的用戶名,請輸入您數據庫的用戶名。",
-       "config-db-install-password": "請輸入在安裝過程中用於連接數據庫的密碼。請勿輸入MediaWiki帳號的密碼,請輸入您數據庫的密碼。",
-       "config-db-install-help": "請輸入在安裝過程中用於連接數據庫的用戶名和密碼。",
-       "config-db-account-lock": "在普通操作中使用相同的用戶名和密碼",
-       "config-db-wiki-account": "用於普通操作的用戶帳號",
-       "config-db-wiki-help": "輸å\85¥å\9c¨æ\99®é\80\9aç\9a\84wikiæ\93\8dä½\9c中ï¼\88å®\89è£\9då®\8cæ\88\90å¾\8cï¼\89å°\87ç\94¨æ\96¼é\80£æ\8e¥æ\95¸æ\93\9a庫ç\9a\84ç\94¨æ\88¶å\90\8då\92\8cå¯\86碼ã\80\82å¦\82æ\9e\9c該帳è\99\9f並ä¸\8då­\98å\9c¨ï¼\8cè\80\8cå®\89è£\9d帳è\99\9få\85·æ\9c\89足夠ç\9a\84æ¬\8aé\99\90ï¼\8c該ç\94¨æ\88¶å¸³è\99\9fæ\9c\83被è\87ªå\8b\95å\89µå»ºï¼\8c並被賦äº\88足以é\81\8bè¡\8cæ­¤wikiç\9a\84æ\9c\80ä½\8eæ¬\8aé\99\90。",
-       "config-db-prefix": "數據庫表前綴:",
-       "config-db-prefix-help": "如果您需要在多個wiki之間(或在MediaWiki與其他web應用程序之間)共享一個數據庫,您可以通過添加前綴的方式來避免出現表名稱的衝突。請勿使用空格。\n\n此字段通常可留空。",
-       "config-db-charset": "數據庫字符集",
-       "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字符,從而不可逆地破壞您的備份!\n\n在'''二進制模式'''下,MediaWiki會將UTF-8編碼的文本存於數據庫的二進制字段中。相對於MySQL的UTF-8模式,這種方法效率更高,並允許您使用全範圍的Unicode字符。\n\n在'''UTF-8模式'''下,MySQL將知道您數據使用的字符集,並能適當地提供和轉換內容。但這樣做您將無法在數據庫中存儲[//zh.wikipedia.org/wiki/基本多文種平面 基本多文種平面]以外的字符。",
-       "config-mysql-old": "需要MySQL $1或更新的版本,您的版本為$2。",
-       "config-db-port": "數據庫端口:",
-       "config-db-schema": "MediaWiki的數據庫模式",
-       "config-db-schema-help": "此數據庫模式通常是正確的,請在有明確需求時才改動之。",
-       "config-pg-test-error": "無法連接到數據庫'''$1''':$2",
+       "config-db-password-empty": "請輸入新增資料庫使用者 $1 的密碼。\n雖然您可以不設定任何密碼,但這樣做並不安全。",
+       "config-db-username-empty": "您必須輸入 \"{{int:config-db-username}}\" 欄位的內容。",
+       "config-db-install-username": "請輸入在安裝過程中用來連線資料庫的使用者名稱。\n請注意,這不是 MediaWiki 帳號的使用者名稱,這是您資料庫的使用者名稱。",
+       "config-db-install-password": "請輸入在安裝過程中用來連線資料庫的密碼。\n請注意,這不是 MediaWiki 帳號的密碼,這是您資料庫的密碼。",
+       "config-db-install-help": "請輸入在安裝過程中用來連線資料庫的使用者名稱及密碼。",
+       "config-db-account-lock": "在一般操作時使用同樣的使用者名稱及密碼。",
+       "config-db-wiki-account": "用於一般操作的使用者帳號",
+       "config-db-wiki-help": "è«\8b輸å\85¥ä¸\80è\88¬æ\93\8dä½\9cç\94¨ä¾\86é\80£ç·\9aè³\87æ\96\99庫ç\9a\84使ç\94¨è\80\85å\90\8d稱å\8f\8aå¯\86碼ã\80\82\nè\8b¥æ\82¨å®\89è£\9d使ç\94¨ç\9a\84è³\87æ\96\99庫帳è\99\9fæ\9c\89足夠ç\9a\84æ¬\8aé\99\90ï¼\8cæ\82¨å\8f¯ä»¥è¼¸å\85¥æ\96°ç\9a\84帳è\99\9fï¼\8c系統æ\9c\83è\87ªå\8b\95幫æ\82¨ä»¥æ\9c\80ä½\8eæ¬\8aé\99\90建ç«\8bä¸\80çµ\84å°\88é\96\80å\81\9aç\82º Wiki ä¸\80è\88¬æ\93\8dä½\9cç\9a\84帳è\99\9f。",
+       "config-db-prefix": "資料庫資料表名稱的字首:",
+       "config-db-prefix-help": "如果您需要讓多個 Wiki 共用同一個資料庫,或者與其他網頁應用程式共用一個資料庫,您也許會需要在所有資料表的名稱前面加上字首,可以避免資料表名稱的衝突。\n請勿使用空格。\n\n此欄位可不填。",
+       "config-db-charset": "資料庫字元集",
+       "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": "<strong>警告:</strong>如果您在 MySQL 4.1+ 使用了<strong>可向下相容的 UTF-8</strong>,並且透過 <code>mysqldump</code> 指令備份資料庫,可能會破壞所有非 ASCII 字元集的文字,這會導致不可還原的資料破壞!\n\n在 <strong>二進制模式</strong> 下,MediaWiki 將 UTF-8 的文字儲存在二進位型態的欄位。\n這個模式比 MySQL 的 UTF-8 模式還要更有效,並且可以讓您使用完整的 Unicode 字元集。\n在 <storng>UTF-8 模式</strong> 下,MySQL 可以知道您的資料使用何種編碼儲存,您可以正常的取得與轉換內容,但此個模式只支援到 Unicode 中的  [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes 基本多文種平面] 字元。",
+       "config-mysql-old": "需要使用 MySQL $1 或更新的版本,您的版本為 $2。",
+       "config-db-port": "資料庫埠號:",
+       "config-db-schema": "MediaWiki 的 Schema:",
+       "config-db-schema-help": "資料庫 Schema 通常不需更動。\n只在有特殊需求時才需修改。",
+       "config-pg-test-error": "無法連線到資料庫 <strong>$1</strong>:$2",
        "config-sqlite-dir": "SQLite 的資料目錄:",
-       "config-sqlite-dir-help": "SQLite會將所有的數據存儲於單一文件中。\n\n您所提供的目錄必須在安裝過程中對網頁服務器可寫。\n\n該目錄'''不應'''允許通過web訪問,因此我們不會將數據文件和PHP文件放在一起。\n\n安裝程序在創建數據文件時,亦會在相同目錄下創建<code>.htaccess</code>以控制權限。假若此等控制失效,則可能會將您的數據文件暴露於公共空間,讓他人可以獲取用戶數據(電子郵件地址、雜湊後的密碼)、被刪除的版本以及其他在wiki上被限制訪問的數據。\n\n請考慮將數據庫統一放置在某處,如<code>/var/lib/mediawiki/yourwiki</code>下。",
-       "config-oracle-def-ts": "默認表空間:",
-       "config-oracle-temp-ts": "臨時表空間:",
-       "config-type-mysql": "MySQL(或兼容程式)",
-       "config-support-info": "MediaWiki支持以下數據庫系統:\n\n$1\n\n如果您在下面列出的數據庫系統中沒有找到您希望使用的系統,請根據上方鏈向的指引啟用支持。",
-       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL]是用於MediaWiki的主要目標和最佳支援。MediaWiki也可工作於[{{int:version-db-mariadb-url}} MariaDB]和[{{int:version-db-percona-url}} Percona伺服器],當然是兼容MySQL的程式。([http://www.php.net/manual/en/mysqli.installation.php 如何編譯帶MySQL支援之PHP])",
-       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL]是一種流行的開源數據庫系統,可作為MySQL的替代([http://www.php.net/manual/en/pgsql.installation.php 如何將對PostgreSQL的支持編譯進PHP中])。本程序中可能依然存在一些小而明顯的錯誤,因此並不建議在生產環境中使用該數據庫系統。",
-       "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite]是一種輕量級的數據庫系統,能被良好地支持。([http://www.php.net/manual/en/pdo.installation.php 如何將對SQLite的支持編譯進PHP中],須使用PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle]是一種商用企業級的數據庫。([http://www.php.net/manual/en/oci8.installation.php 如何將對OCI8的支持編譯進PHP中])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server]是一種用於商業企業的資料庫。([http://www.php.net/manual/en/sqlsrv.installation.php 如何編譯帶SQLSRV支援之PHP])",
-       "config-header-mysql": "MySQL 的設定",
-       "config-header-postgres": "PostgreSQL設置",
-       "config-header-sqlite": "SQLite 的設定",
-       "config-header-oracle": "甲骨文設定",
-       "config-invalid-db-type": "無效的資料庫類型",
-       "config-missing-db-name": "您必須為“數據庫名稱”輸入內容",
-       "config-missing-db-host": "您必須為“數據庫主機”輸入內容",
-       "config-missing-db-server-oracle": "您必須為“數據庫透明網絡底層(TNS)”輸入內容",
-       "config-invalid-db-server-oracle": "無效的數據庫TNS「$1」。\n請只使用「TNS Name」或「Easy Connect」 字串([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle命名法])",
-       "config-invalid-db-name": "無效的數據庫名稱“$1”。請只使用ASCII字母(a-z、A-Z)、數字(0-9)、下劃線(_)和連字號(-)。",
-       "config-invalid-db-prefix": "無效的數據庫前綴“$1”。請只使用ASCII字母(a-z、A-Z)、數字(0-9)、下劃線(_)和連字號(-)。",
-       "config-connection-error": "$1。\n\n請檢查下列的主機、用戶名和密碼設置後重試。",
-       "config-invalid-schema": "無效的MediaWiki數據庫模式“$1”。請只使用ASCII字母(a-z、A-Z)、數字(0-9)和下劃線(_)。",
-       "config-db-sys-create-oracle": "安裝程序僅支持使用SYSDBA帳戶創建新帳戶。",
-       "config-db-sys-user-exists-oracle": "用戶帳戶“$1”已經存在。SYSDBA僅可用於創建新帳戶!",
-       "config-postgres-old": "需要PostgreSQL $1或更新的版本,您的版本為$2。",
-       "config-sqlite-name-help": "請為您的wiki指定一個用於標識的名稱。請勿使用空格或連字號,該名稱將被用作SQLite的數據文件名。",
-       "config-sqlite-parent-unwritable-group": "由於父目錄<code><nowiki>$2</nowiki></code>對網頁服務器不可寫,無法創建數據目錄<code><nowiki>$1</nowiki></code>。\n\n安裝程序已確定您網頁伺服器所使用的用戶。請將<code><nowiki>$3</nowiki></code>目錄設為對該用戶可寫以繼續安裝過程。在Unix/Linux系統中,您可以逐行輸入下列命令:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
-       "config-sqlite-parent-unwritable-nogroup": "由於父目錄<code><nowiki>$2</nowiki></code>對網頁服務器不可寫,無法創建數據目錄<code><nowiki>$1</nowiki></code>。\n\n安裝程序無法確定您網頁服務器所使用的用戶。請將<code><nowiki>$3</nowiki></code>目錄設為全局可寫(對所有用戶)以繼續安裝過程。在Unix/Linux系統中,您可以逐行輸入下列命令:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
-       "config-sqlite-mkdir-error": "創建數據目錄“$1”時發生錯誤。請檢查路徑後重試。",
-       "config-sqlite-dir-unwritable": "無法寫入目錄“$1”。請修改該目錄的權限,使其對網頁服務器可寫後重試。",
-       "config-sqlite-connection-error": "$1。\n\n請檢查下列的數據目錄和數據庫名稱後重試。",
-       "config-sqlite-readonly": "文件<code>$1</code>不可寫。",
-       "config-sqlite-cant-create-db": "無法創建數據文件<code>$1</code>。",
-       "config-sqlite-fts3-downgrade": "PHP缺少FTS3支持,正在降級數據表",
-       "config-can-upgrade": "在數據庫中發現了MediaWiki的數據表。要將它們升級至MediaWiki $1,請點擊'''繼續'''。",
-       "config-upgrade-done": "升級完成。\n\n現在您可以[$1 開始使用您的wiki]了。\n\n如果您需要重新生成<code>LocalSettings.php</code>文件,請點擊下面的按鈕。除非您的wiki出現了問題,我們'''不推薦'''您執行此操作。",
-       "config-upgrade-done-no-regenerate": "升級完成。\n\n現在您可以[$1 開始使用您的wiki]了。",
-       "config-regenerate": "重新生成LocalSettings.php →",
-       "config-show-table-status": "查詢<code>SHOW TABLE STATUS</code>失敗!",
-       "config-unknown-collation": "'''警告:'''數據庫使用了無法識別的整理。",
-       "config-db-web-account": "供網頁訪問使用的數據庫帳號",
-       "config-db-web-help": "請指定在wiki執行普通操作時,網頁服務器用於連接數據庫服務器的用戶名和密碼。",
-       "config-db-web-account-same": "使用和安裝程序相同的帳號",
-       "config-db-web-create": "建立帳號,如果它不存在",
-       "config-db-web-no-create-privs": "您指定給安裝程序的帳號缺少創建帳號的權限,因此您指定的帳號必須已經存在。",
-       "config-mysql-engine": "存儲引擎:",
+       "config-sqlite-dir-help": "SQLite 會將所有的資料存儲於單一檔案中。\n\n您所提供的目錄在安裝過程中必須開啟給網頁伺服器的寫入權限。\n\n該目錄 <strong>不應</strong> 可以被透過網頁所開啟,這也是為什麼我們不將資料與 PHP 檔案放在一起。\n\n安裝程式在建立資料庫檔案時,會同時在目錄下建立 <code>.htaccess</code> 以控制網頁伺服器權限。若此設定失效,則會導致任何人可以直接存取您的原始資料檔案,而資料庫的內容包含原始的使用者資料 (電子郵件地址、加密後的密碼)、刪除後的修訂及其他在 Wiki 上被限制存取的資料。\n\n請考慮將資料庫統一放置在某處,如 <code>/var/lib/mediawiki/yourwiki</code> 底下。",
+       "config-oracle-def-ts": "預設資料表空間:",
+       "config-oracle-temp-ts": "臨時資料表空間:",
+       "config-type-mysql": "MySQL (或與其相容的程式)",
+       "config-type-mssql": "Microsoft SQL Server",
+       "config-support-info": "MediaWiki 支援以下資料庫系統:\n\n$1\n\n如果您下方沒有看到您要使用的資料庫系統,請根據上方連結指示開啟資料庫的支援。",
+       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] 是 MediaWiki 主要支援的資料庫系統。MediaWiki 也同時可運作與於 [{{int:version-db-mariadb-url}} MariaDB] 和[{{int:version-db-percona-url}} Percona 伺服器],上述這些與 MySQL 相容的資料庫系統。([http://www.php.net/manual/en/mysqli.installation.php 如何編譯支援 MySQL 的 PHP])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] 是一套受歡迎的開源資料庫系統,在開源方案當中,可用來替代 MySQL。目前仍有一些次要的問題需要解決,較不建議使用在上線環境當中。 ([http://www.php.net/manual/en/pgsql.installation.php 如何編譯支援 PostgreSQL 的 PHP])。",
+       "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] 是一套輕量級的資料庫系統,MediaWiki 可在此資料庫系統上良好的運作。([http://www.php.net/manual/en/pdo.installation.php 如何編譯支援 SQLite 的 PHP],須透過 PDO)",
+       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] 是一套商用企業級的資料庫。([http://www.php.net/manual/en/oci8.installation.php 如何編譯支援 OCI8 的 PHP])",
+       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] 是一套 Windows 專用的商用企業級的資料庫。 ([http://www.php.net/manual/en/sqlsrv.installation.php 如何編譯支援 SQLSRV 的 PHP])",
+       "config-header-mysql": "MySQL 設定",
+       "config-header-postgres": "PostgreSQL 設定",
+       "config-header-sqlite": "SQLite 設定",
+       "config-header-oracle": "Oracle 設定",
+       "config-header-mssql": "Microsoft SQL Server 設定",
+       "config-invalid-db-type": "無效的資料庫類型。",
+       "config-missing-db-name": "您必須輸入 \"{{int:config-db-name}}\" 欄位的內容。",
+       "config-missing-db-host": "您必須輸入 \"{{int:config-db-host}}\" 欄位的內容。",
+       "config-missing-db-server-oracle": "您必須輸入 \"{{int:config-db-host-oracle}}\" 欄位的內容。",
+       "config-invalid-db-server-oracle": "無效的資料庫 TNS \"$1\"。\n請使用符合 \"TNS 名稱\" 或 \"簡易連線\" 規則的字串([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle命名規則])",
+       "config-invalid-db-name": "無效的資料庫名稱 \"$1\"。\n僅允許使用 ASCII 字母(a-z、A-Z)、數字(0-9)、底線(_)與連字號(-)。",
+       "config-invalid-db-prefix": "無效的資料庫字首 \"$1\"。\n僅允許使用 ASCII 字母(a-z、A-Z)、數字(0-9)、底線(_)與連字號(-)。",
+       "config-connection-error": "$1。\n\n請檢查主機、使用者名稱和密碼設定,然後重試。",
+       "config-invalid-schema": "無效的資料庫 Schema \"$1\"。\n僅允許使用 ASCII 字母(a-z、A-Z)、數字(0-9)、底線(_)與連字號(-)。",
+       "config-db-sys-create-oracle": "安裝程式只支援使用 SYSDBA 帳號建立新帳號。",
+       "config-db-sys-user-exists-oracle": "使用者帳號 \"$1\" 已存在。 SYSDBA 只可用來建立新的帳號!",
+       "config-postgres-old": "需要使用 PostgreSQL $1 或更新的版本,您的版本為 $2。",
+       "config-mssql-old": "需要使用 Microsoft SQL Server $1 或更新的版本,您的版本為 $2。",
+       "config-sqlite-name-help": "請為您的 Wiki 設定一個用來辨識的名稱。\n請勿使用空格或連字號,\n該名稱會被用來做為 SQLite 資料檔的名稱。",
+       "config-sqlite-parent-unwritable-group": "無法建立資料目錄 <nowiki>$1</nowiki></code>,因網頁伺服器對該目錄所在的上層目錄 <code><nowiki>$2</nowiki></code> 沒有寫入權限。\n\n安裝程序所使用的身份依據您用來執行網頁伺服器的身份而定,\n請開啟網頁伺服器對 <code><nowiki>$3</nowiki></code> 的寫入權以繼續安裝,\n在 Unix/Linux 系統可以執行以下指令:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+       "config-sqlite-parent-unwritable-nogroup": "無法建立資料目錄 <nowiki>$1</nowiki></code>,因網頁伺服器對該目錄所在的上層目錄 <code><nowiki>$2</nowiki></code> 沒有寫入權限。\n\n安裝程序所使用的身份依據您用來執行網頁伺服器的身份而定,\n請開啟全部人對 <code><nowiki>$3</nowiki></code> 的寫入權以繼續安裝,\n在 Unix/Linux 系統可以執行以下指令:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
+       "config-sqlite-mkdir-error": "建立資料目錄 \"$1\" 時發生錯誤。\n請檢查路徑後再試一次。",
+       "config-sqlite-dir-unwritable": "無法寫入目錄 \"$1\"。\n請修改該目錄的權限,請開啟網頁伺服器的寫入權限後,再試一次。",
+       "config-sqlite-connection-error": "$1。\n\n請檢查下方資料目錄與資料庫名稱,再試一次。",
+       "config-sqlite-readonly": "檔案 <code>$1</code> 無寫入權限。",
+       "config-sqlite-cant-create-db": "無法建立資料庫檔案 <code>$1</code>。",
+       "config-sqlite-fts3-downgrade": "PHP 不支援 FTS3,正在降級資料表。",
+       "config-can-upgrade": "在資料庫中找到 MediaWiki 的資料表。\n要升級至 MediaWiki $1,請點選 <strong>繼續</strong>。",
+       "config-upgrade-done": "升級完成。\n\n現在您可以 [$1 開始使用您的 Wiki] 了。\n\n如果您需要重新產生 <code>LocalSettings.php</code> 檔案,請點擊下方按鈕。\n除非您的 Wiki 出現了問題,否則我們 <strong>不建議</strong> 您執行此操作。",
+       "config-upgrade-done-no-regenerate": "升級完成。\n\n現在您可以 [$1 開始使用您的 Wiki] 了。",
+       "config-regenerate": "重新產生 LocalSettings.php →",
+       "config-show-table-status": "<code>SHOW TABLE STATUS</code> 查詢失敗!",
+       "config-unknown-collation": "<strong>警告:</strong>資料庫使用了無法辨識的字元與排序規則。",
+       "config-db-web-account": "供網頁存取使用的資料庫帳號",
+       "config-db-web-help": "請設定網頁伺服器在一般操作時連線到資料庫使用的使用者名稱及密碼。",
+       "config-db-web-account-same": "使用與安裝程序相同的帳號",
+       "config-db-web-create": "如果帳號不存在則建立新帳號",
+       "config-db-web-no-create-privs": "您指定給安裝程序使用的帳號沒有足夠的權限建立新帳號。\n在此處必須指定已經存在的帳號。",
+       "config-mysql-engine": "儲存引擎:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
-       "config-mysql-myisam-dep": "'''警告''':您選擇了MyISAM作為MySQL的存儲引擎,MediaWiki並不推薦您這麼做,因為:\n* 它僅能通過表鎖定來勉強支持並發\n* 與其他引擎相比,它更容易被損壞\n* MediaWiki代碼庫並不總會去處理MyISAM\n\n如果您的MySQL程序支持InnoDB,我們高度推薦您使用該引擎替代MyISAM。\n如果您的MySQL程序不支持InnoDB,請考慮升級。",
-       "config-mysql-only-myisam-dep": "'''警告''':MyISAM貌似於此伺服器為唯一可用存儲程式,MediaWiki並不推薦您這麼做,因為:\n* 它僅能通過表鎖定來勉強支持並發\n* 與其他引擎相比,它更容易被損壞\n* MediaWiki代碼庫並不總會去處理MyISAM\n\n您的MySQL安裝程式無法支援InnoDB,可能您需要升級或更換一台伺服器。",
-       "config-mysql-engine-help": "'''InnoDB'''通常是最佳選項,因為它對並發操作有着良好的支持。\n\n'''MyISAM'''在單用戶或只讀環境下可能會有更快的性能表現。但MyISAM數據庫出錯的概率一般要大於InnoDB數據庫。",
-       "config-mysql-charset": "資料庫字集:",
+       "config-mysql-myisam-dep": "<strong>警告:</strong>您選擇用來做為 MySQL 的儲存引撆 MyISAM 並不建議使用在 MediaWiki,主要原因為:\n* MyISAM 使用的資料表鎖定較無法承受多人同時連線\n* 比起其他儲存引擎相,它較容易損壞\n* MediaWiki 程式碼並沒有針對 MyISAM 做特別的處理\n\n若您安裝的 MySQL 支援 InnoDB,我們強烈建議您改用 InnoDB。\n若您安裝的 MySQL 不支援 InnoDB,則應考慮升級 MySQL。",
+       "config-mysql-only-myisam-dep": "<strong>警告:</strong>您的伺服器上的 MySQL 唯一可用的儲存引擎是 MyISAM,但並不建議使用,主要原因為:\n* MyISAM 使用的資料表鎖定較無法承受多人同時連線\n* 比起其他儲存引擎相,它較容易損壞\n* MediaWiki 程式碼並沒有針對 MyISAM 做特別的處理\n\n若您安裝的 MySQL 不支援 InnoDB,則應考慮升級 MySQL。",
+       "config-mysql-engine-help": "由於對同時連線有較好的處理能力,<strong>InnoDB</strong> 通常是最佳的選項。\n\n<strong>MyISAM</strong> 只在單人使用或者唯讀作業的情況之下才可能有較快的處理能力。\n相較於 InnoDB,MyISAM 也較容易出現資料損毀的情況。",
+       "config-mysql-charset": "資料庫字集:",
        "config-mysql-binary": "二進制",
        "config-mysql-utf8": "UTF-8",
-       "config-mysql-charset-help": "在'''二進制模式'''下,MediaWiki會將UTF-8編碼的文本存於數據庫的二進制字段中。相對於MySQL的UTF-8模式,這種方法效率更高,並允許您使用全範圍的Unicode字符。\n\n在'''UTF-8模式'''下,MySQL將知道您數據使用的字符集,並能適當地提供和轉換內容。但這樣做您將無法在數據庫中存儲[//zh.wikipedia.org/wiki/基本多文種平面 基本多文種平面]以外的字符。",
-       "config-site-name": "Wiki的名稱:",
-       "config-site-name-help": "填入的內容會出現在瀏覽器的標題欄以及其他多處位置中。",
-       "config-site-name-blank": "輸入站點名稱。",
-       "config-project-namespace": "項目名字空間:",
-       "config-ns-generic": "項目",
-       "config-ns-site-name": "與wiki名稱相同:$1",
-       "config-ns-other": "其他(請註明)",
-       "config-ns-other-default": "我的Wiki",
-       "config-project-namespace-help": "依循維基百科形成的慣例,許多wiki將他們的方針頁面存放在與內容頁面不同的“'''項目名字空間'''”中。所有位於該名字空間下的頁面標題都會被冠以固定的前綴,您可以在此處指定這一前綴。傳統上,這一前綴應與wiki的命名保持一致,但請勿在其中使用標點符號,如“#”或“:”。",
-       "config-ns-invalid": "指定的名字空間“<nowiki>$1</nowiki>”無效,請為項目名字空間指定其他名稱。",
-       "config-ns-conflict": "指定的名字空間“<nowiki>$1</nowiki>”與默認的MediaWiki名字空間衝突。請指定一個不同的項目名字空間。",
+       "config-mysql-charset-help": "在 <strong>二進制模式</strong> 下,MediaWiki 將 UTF-8 的文字儲存在二進位型態的欄位。\n這個模式比 MySQL 的 UTF-8 模式還要更有效,並且可以讓您使用完整的 Unicode 字元集。\n\n在 <storng>UTF-8 模式</strong> 下,MySQL 可以知道您的資料使用何種編碼儲存,您可以正常的取得與轉換內容,但此個模式只支援到 Unicode 中的  [//en.wikipedia.org/wiki/Mapping_of_Unicode_character_planes 基本多文種平面] 字元。",
+       "config-mssql-auth": "身份驗證類型:",
+       "config-mssql-install-auth": "請選擇安裝程序中要用來連線資料庫使用的身份驗證類型。\n若您選擇 \"{{int:config-mssql-windowsauth}}\",不論網頁伺服器是使用何種身份執行都會使用這組驗證資料。",
+       "config-mssql-web-auth": "請選擇一般操作中要用來連線資料庫使用的身份驗證類型。\n若您選擇 \"{{int:config-mssql-windowsauth}}\",不論網頁伺服器是使用何種身份執行都會使用這組驗證資料。",
+       "config-mssql-sqlauth": "SQL Server 身份驗證",
+       "config-mssql-windowsauth": "Windows 身份驗證",
+       "config-site-name": "Wiki 的名稱:",
+       "config-site-name-help": "您所填入的內容會出現在瀏覽器的標題列以及各種其他地方。",
+       "config-site-name-blank": "請輸入網站名稱。",
+       "config-project-namespace": "專案命名空間:",
+       "config-ns-generic": "專案",
+       "config-ns-site-name": "同 Wiki 名稱:$1",
+       "config-ns-other": "其他 (請註明)",
+       "config-ns-other-default": "我的 Wiki",
+       "config-project-namespace-help": "許多 Wiki 以維基百科(Wikipedia)做為範例將政策頁面從內容頁面抽離,放置在 \"'''專案命名空間'''\" 中。\n所有在此命名空間裡的頁面都會有特定的字首,您可以在此處設定。\n通常這些字首是由該 Wiki 的名稱所衍伸出來,但無法使用標點符號,如 \"#\" 或 \":\"。",
+       "config-ns-invalid": "您指定的命名空間 \"<nowiki>$1</nowiki>\" 無效,\n請指定另一個專案命名空間。",
+       "config-ns-conflict": "您指定的命名空間 \"<nowiki>$1</nowiki>\" 與 MediaWiki 預設的命名空間衝突。\n請指定另一個專案命名空間。",
        "config-admin-box": "管理員帳號",
-       "config-admin-name": "您的用戶名:",
+       "config-admin-name": "您的使用者名稱:",
        "config-admin-password": "密碼:",
        "config-admin-password-confirm": "再次輸入密碼:",
-       "config-admin-help": "在此輸入您想使用的用戶名,例如“喬幫主”。您將使用該名稱登錄本wiki。",
+       "config-admin-help": "在此輸入您想使用的使用者名稱,例如 \"Joe Bloggs\"。\n此名稱將用來登入 Wiki。",
        "config-admin-name-blank": "輸入管理員的使用者名稱。",
-       "config-admin-name-invalid": "指定的用戶名“<nowiki>$1</nowiki>”無效,請指定其他用戶名。",
+       "config-admin-name-invalid": "指定的使用者名稱 \"<nowiki>$1</nowiki>\" 無效,請改用其他使用者名稱。",
        "config-admin-password-blank": "輸入管理員帳號密碼。",
        "config-admin-password-mismatch": "兩次輸入的密碼並不相同。",
-       "config-admin-email": "電郵地址:",
-       "config-admin-email-help": "輸入電子郵件地址後,您可以收到此wiki上其他用戶發來的電子郵件,並能重置您的密碼,還可在監視列表中頁面被更改時收到郵件通知。您可以將此字段留空。",
-       "config-admin-error-user": "å\9c¨å\89µå»ºç\94¨æ\88¶å\90\8dç\82ºâ\80\9c<nowiki>$1</nowiki>â\80\9dç\9a\84管ç\90\86å\93¡å¸³è\99\9fæ\99\82ç\99¼ç\94\9f內部錯誤。",
-       "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": "此低流量的郵件列表僅用於發行公告,其中包括重要安全公告。請訂閱該列表以便在新的版本推出時升級您的MediaWiki。",
-       "config-subscribe-noemail": "您選擇了訂閱發行公告郵件列表,但沒有提供電子郵件地址。請提供一個電子郵件地址以訂閱郵件列表。",
-       "config-almost-done": "æ\82¨å¹¾ä¹\8eå·²ç¶\93å®\8cæ\88\90äº\86ï¼\81ç\8f¾å\9c¨æ\82¨å\8f¯ä»¥è·³é\81\8eå\89©ä¸\8bç\9a\84é\85\8dç½®æµ\81ç¨\8b並ç«\8bå\8d³å®\89è£\9dwiki。",
+       "config-admin-email": "電子郵件位址:",
+       "config-admin-email-help": "在此輸入的電子郵件信箱可用來接收 Wiki 上其他使用者所發送的訊息、重設您的密碼與通知監視列表中頁面更動。您可將此欄位留空。",
+       "config-admin-error-user": "建ç«\8b管ç\90\86å\93¡å¸³è\99\9f \"<nowiki>$1</nowiki>\" æ\99\82ç\99¼é\80\81內部錯誤。",
+       "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": "這是一個用於發佈公告的低郵件量郵寄清單,內容包括重要的安全公告。\n您應該訂閱它並在 MediaWiki 發佈新版的時候更新系統。",
+       "config-subscribe-noemail": "您正嘗試不填寫電子郵件地址訂閱發佈公告郵寄清單。 \n請如果您希望訂閱郵寄清單,請提供一個有效的電子郵件地址。",
+       "config-almost-done": "æ\82¨å¿«è¦\81å®\8cæ\88\90äº\86!\næ\82¨ç\8f¾å\9c¨å\8f¯ä»¥è·³é\81\8eå\85¶é¤\98ç\9a\84設å®\9aé \85ç\9b®ä¸¦ä¸\94ç«\8bå\8d³å®\89è£\9d Wiki。",
        "config-optional-continue": "多問我一些問題吧。",
-       "config-optional-skip": "æ\88\91å·²ç¶\93ä¸\8dè\80\90ç\85©äº\86ï¼\8cè\95ç·\8aå®\89è£\9dæ\88\91ç\9a\84wiki。",
-       "config-profile": "用戶權限配置:",
-       "config-profile-wiki": "開放的wiki",
+       "config-optional-skip": "æ\88\91å·²ç¶\93ä¸\8dè\80\90ç\85©äº\86ï¼\8cè«\8bè¶\95ç·\8aå®\89è£\9d Wiki。",
+       "config-profile": "使用者權限基本資料:",
+       "config-profile-wiki": "開放式 Wiki",
        "config-profile-no-anon": "需要註冊帳號",
-       "config-profile-fishbowl": "編輯受限",
-       "config-profile-private": "非公開wiki",
-       "config-profile-help": "如果您允許盡量多的人編寫維基,網站上的內容會更加豐富。在MediaWiki中,您可以輕鬆地審查最近更改,並輕易回退掉新手或破壞者造成的損害。\n\n然而,許多人覺得讓MediaWiki存在多種角色將更加好用;同時,要說服所有人都願以維基方式作貢獻並非一件易事。因此,您有以下選擇:\n\n'''{{int:config-profile-wiki}}'''允許包括未登錄用戶在內的所有人編輯。'''{{int:config-profile-no-anon}}'''的維基需要額外的註冊流程,這有可能會阻礙隨意貢獻者。\n\n'''{{int:config-profile-fishbowl}}'''模式只允許獲批准的用戶編輯,但對公眾開放頁面瀏覽(包括歷史記錄)。'''{{int:config-profile-private}}'''則只允許獲批准的用戶瀏覽、編輯頁面。\n\n安裝完成後,您還可以對用戶權限進行更多、更複雜的配置,參見[//www.mediawiki.org/wiki/Manual:User_rights 相關的使用手冊]。",
-       "config-license": "版權和許可證:",
-       "config-license-none": "頁腳無許可證",
-       "config-license-cc-by-sa": "知識共享署名-相同方式分享",
-       "config-license-cc-by": "知識共享署名",
-       "config-license-cc-by-nc-sa": "知識共享署名-非商業性使用-相同方式共享",
-       "config-license-cc-0": "知識共享Zero(公有領域)",
-       "config-license-gfdl": "GNU自由文檔許可證1.3或更高版本",
+       "config-profile-fishbowl": "僅授權的編輯者",
+       "config-profile-private": "封閉式 Wiki",
+       "config-profile-help": "Wiki 最佳的運作方式是盡可能讓大家都可以編輯文件。\n在 MediaWiki,可以很輕易的審查最近做的所有變更動作,並且可以還原由新手或惡意使用者造成的損害。\n\n不論如何,很多人發現 MediaWiki 可以廣泛的運用在各種地方,但並不是很容易可以說服每個人都遵守對 Wiki 有益的方式。\n所以您必須做出以下選擇。\n\n使用 <strong>{{int:config-profile-wiki}}</strong> 模式,允許所有人編輯文章,包含未匿名使用者。\n使用 <strong>{{int:config-profile-no-anon}}</strong> 模式,允許所有人編輯文章,不包含未登入的使用者。此模式較能管理所有使用者的言論,但會扼殺臨時使用者的貢獻機會。\n\n使用 <strong>{{int:config-profile-fishbowl}}</strong> 模式,僅經核准的使用者可以編輯,所有人可以檢視頁面,包含修訂的記錄。\n使用 <strong>{{int:config-profile-private}}</strong> 模式,僅經核准的使用者可以編輯、檢視頁面。\n\n有關更多複雜的使用者權限設定可在安裝程序結束後設定,請參考 [//www.mediawiki.org/wiki/Manual:User_rights 相關文件說明]。",
+       "config-license": "版權聲明與授權條款:",
+       "config-license-none": "無授權條款頁腳",
+       "config-license-cc-by-sa": "創作共用 Attribution-ShareAlike",
+       "config-license-cc-by": "創作共用 Attribution",
+       "config-license-cc-by-nc-sa": "創作共用 Attribution-NonCommercial-ShareAlike",
+       "config-license-cc-0": "創作共用 Zero (公共領域)",
+       "config-license-gfdl": "GNU 自由文件授權條款 1.3 或更高版本",
        "config-license-pd": "公共領域",
-       "config-license-cc-choose": "選擇自定義的知識共享許可證",
-       "config-license-help": "許多公共wiki會以[http://freedomdefined.org/Definition 自由許可證]的方式釋放出編者的所有貢獻。這有助於構建社區的主人翁意識,並能鼓勵長期貢獻。對於非公共wiki或公司wiki,這並非必要條件。\n\n如果您希望使用來自維基百科的內容,並希望維基百科能接受複製自您的wiki的內容,請選擇'''知識共享署名-相同方式共享'''。\n\nGNU自由文檔許可證是維基百科曾經使用過的許可證,並迄今有效。然而,該許可證難以理解,並會增加重用內容的難度。",
+       "config-license-cc-choose": "請選擇一個自訂的創作共用授權條款",
+       "config-license-help": "許多開放式 Wiki 會以 [http://freedomdefined.org/Definition 自由授權條款] 的方式釋放出編者的所有貢獻,這有助於構建社群的所有權,並且能鼓勵長期貢獻。對於封閉式的 Wiki 或公司 Wiki,則是非必要的。\n\n如果您希望使用來自維基百科(Wikipedia)的內容,並希望維基百科能接受您的 Wiki 內容,請應選擇 <strong>創作共用 Attribution Share Alike</strong> 授權條款。\n\n維基百科̽(Wikipedia)先前是使用 GNU 自由文件授權條款,\n但該授權條款的內容較難理解,因此較難再利用在該條款底下的內容。",
        "config-email-settings": "E-mail 設定",
-       "config-enable-email": "啟用出站電子郵件",
-       "config-enable-email-help": "如果您希望使用電子郵件功能,請正確配置[http://www.php.net/manual/en/mail.configuration.php PHP的郵件設定]。如果您不需要任何電子郵件功能,請在此處禁用它。",
-       "config-email-user": "啟用用戶到用戶的電子郵件",
-       "config-email-user-help": "允許所有用戶互發郵件,假若他們啟用了該功能。",
-       "config-email-usertalk": "啟用使用者討論頁面通知",
-       "config-email-usertalk-help": "允許用戶收到用戶討論頁被修改的通知,假若他們啟用了該功能。",
-       "config-email-watchlist": "啟用監視列表通知",
-       "config-email-watchlist-help": "允許用戶收到與其監視列表有關的通知,假若他們啟用了該功能。",
-       "config-email-auth": "啟用電子郵件認證",
-       "config-email-auth-help": "如果啟用此選項,在用戶設置或修改電子郵件地址時,就會收到一封郵件,內含確認電子地址的鏈接。只有經過身份驗證的電子郵件地址,才能收到來自其他用戶的電子郵件,或任何修改通知的郵件。'''建議'''公開wiki啟用本選項,以防對電子郵件功能的濫用。",
-       "config-email-sender": "返回電子郵件地址:",
-       "config-email-sender-help": "輸å\85¥è¦\81ç\94¨ä¾\86ç\99¼é\80\81å\87ºç«\99é\9b»å­\90é\83µä»¶ç\9a\84å\9c°å\9d\80ï¼\8c該å\9c°å\9d\80å°\87æ\9c\83æ\94¶å\88°è¢«æ\8b\92æ\94¶ç\9a\84é\83µä»¶ã\80\82許å¤\9aé\83µä»¶æ\9c\8då\8b\99å\99¨è¦\81æ±\82å\9f\9få\90\8dé\83¨å\88\86å¿\85é \88æ\9c\89æ\95\88。",
+       "config-enable-email": "開啟外寄電子郵件",
+       "config-enable-email-help": "如果您要使用電子郵件功能,請正確設定 [http://www.php.net/manual/en/mail.configuration.php PHP 的郵件設定]。\n如果您不需要使用電子郵件功能,請在此處關閉。",
+       "config-email-user": "開啟使用者對使用者間的電子郵件互通",
+       "config-email-user-help": "若使用者在個人偏好開啟了此功能,則可允許使用者間相互發送郵件。",
+       "config-email-usertalk": "開啟使用者討論頁面通知",
+       "config-email-usertalk-help": "若使用者在個人偏好開啟了此功能,則可收到使用者討論頁面被修改的通知。",
+       "config-email-watchlist": "開啟監視列表通知",
+       "config-email-watchlist-help": "若使用者在個人偏好開啟了此功能,允許使用者收到與其監視列表有關的通知。",
+       "config-email-auth": "開啟電子郵件身份認證",
+       "config-email-auth-help": "若開啟此選項,使用者不論設定或者更改電子郵件地址,都必須透過收信的方式確認沒有問題。\n只有驗證過的電子郵件地址可以收到來自其他使用者或修改通知的信件。\n公開的 Wiki 會 <strong>建議</strong> 設定此選項,以防使用者濫用電子郵件功能。",
+       "config-email-sender": "電子郵件回覆地址:",
+       "config-email-sender-help": "è«\8b輸å\85¥è¦\81ç\94¨ä¾\86å\81\9aç\82ºå¤\96å¯\84é\83µä»¶ç\9a\84é\9b»å­\90é\83µä»¶å\9b\9eè¦\86å\9c°å\9d\80ã\80\82\n該é\83µä»¶å\9c°å\9d\80æ\9c\83æ\94¶å\88°è¢«æ\8b\92æ\94¶ç\9a\84信件ã\80\82\n許å¤\9aé\83µä»¶ä¼ºæ\9c\8då\99¨æ\9c\83è¦\81æ±\82使ç\94¨æ\9c\89æ\95\88ç\9a\84網å\9f\9få\90\8d稱。",
        "config-upload-settings": "圖片和檔案上傳",
-       "config-upload-enable": "啟用檔案上傳",
-       "config-upload-help": "æ\96\87件ä¸\8aå\82³å\8f¯è\83½æ\9c\83å°\87æ\82¨ç\9a\84æ\9c\8då\8b\99å\99¨æ\9a´é\9c²å\9c¨å®\89å\85¨é¢¨é\9aªä¸\8bã\80\82æ\9c\89é\97\9cæ\9b´å¤\9aç\9a\84ä¿¡æ\81¯ï¼\8cè«\8bå\8f\83é\96±æ\89\8bå\86\8aç\9a\84[//www.mediawiki.org/wiki/Manual:Security å®\89å\85¨é\83¨å\88\86\80\82\n\nè¦\81å\95\9fç\94¨æ\96\87件ä¸\8aå\82³ï¼\8cè«\8bå\85\88å°\87MediaWikiæ ¹ç\9b®é\8c\84ä¸\8bç\9a\84<code>images</code>å­\90ç\9b®é\8c\84æ\9b´æ\94¹ç\82ºå°\8dwebæ\9c\8då\8b\99å\99¨å\8f¯å¯«ï¼\8cç\84¶å¾\8cå\86\8då\95\9fç\94¨æ­¤選項。",
-       "config-upload-deleted": "å·²å\88ªé\99¤æ\96\87件的目錄:",
-       "config-upload-deleted-help": "指定用於存放被刪除文件的目錄。理想情況下,該目錄不應能通過web訪問。",
-       "config-logo": "標誌URL:",
-       "config-logo-help": "在MediaWiki的默認外觀中,左側欄菜單之上有一塊135x160像素的標誌區。請上傳一幅相應大小的圖像,並在此輸入URL。\n\n你可以用<code>$wgStylePath</code>或<code>$wgScriptPath</code>來表示相對於這些位置的路徑。\n\n如果您不希望使用標誌,請將本處留空。",
-       "config-instantcommons": "啟用即時共享資源",
-       "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons 即時共享資源]可以讓wiki使用來自[//commons.wikimedia.org/ 維基共享資源]網站的圖像、音頻和其他媒體文件。要啟用該功能,MediaWiki必須能夠訪問互聯網。\n\n有關此功能的詳細信息,包括如何將其他wiki網站設為具有類似共享功能的方法,請參考[//mediawiki.org/wiki/Manual:$wgForeignFileRepos 手冊]。",
-       "config-cc-error": "知識共享許可證挑選器無法找到結果,請手動輸入許可證的名稱。",
-       "config-cc-again": "重新選取......",
-       "config-cc-not-chosen": "選擇您希望使用的知識共享許可證,並點擊“繼續”。",
-       "config-advanced-settings": "進階配置",
-       "config-cache-options": "對象緩存設置:",
-       "config-cache-help": "對象緩存可通過緩存頻繁使用的數據來提高MediaWiki的速度。高度推薦中到大型的網站啟用該功能,小型網站亦能從其中受益。",
-       "config-cache-none": "無緩存(不影響功能,但對較大型的wiki網站會有速度影響)",
-       "config-cache-accel": "PHP對象緩存(APC、XCache或WinCache)",
-       "config-cache-memcached": "使用Memcached(需要另外安裝並配置)",
-       "config-memcached-servers": "Memcached服務器:",
-       "config-memcached-help": "用於Memcached的IP地址列表。請保持每行一條,並指定要使用的端口。例如:\n127.0.0.1:11211\n192.168.1.25:1234",
-       "config-memcache-needservers": "您選擇了Memcached作為您的緩存,但並未指定任何服務器。",
-       "config-memcache-badip": "您為Memcached輸入了無效的IP地址:$1。",
-       "config-memcache-noport": "您沒有指定Memcached服務器的端口:$1。如果您不清楚端口是多少,默認值為11211。",
-       "config-memcache-badport": "Memcached的端口號應該在$1到$2之間。",
+       "config-upload-enable": "開啟檔案上傳",
+       "config-upload-help": "æª\94æ¡\88ä¸\8aå\82³å\8a\9fè\83½æ\9c\83è®\93æ\82¨ç\9a\84伺æ\9c\8då\99¨æ\9a´é\9c²å\9c¨æ½\9bè\97\8fç\9a\84å®\89å\85¨æ\80§é¢¨é\9aªä¹\8bä¸\8bã\80\82\nè¦\81å\8f\96å¾\97æ\9b´å¤\9aç\9b¸é\97\9cç\9a\84è³\87è¨\8aï¼\8cè«\8bå\8f\83è\80\83 [//www.mediawiki.org/wiki/Manual:Security å®\89å\85¨æ\80§ç« ç¯\80\80\82\n\nè¦\81é\96\8bå\95\9fæª\94æ¡\88ä¸\8aå\82³é\9c\80è¦\81å°\87 MediaWiki æ ¹ç\9b®é\8c\84åº\95ä¸\8bç\9a\84 <code>images</code> ç\9b®é\8c\84é\96\8bå\95\9f網é \81伺æ\9c\8då\99¨ç\9a\84寫å\85¥æ¬\8aï¼\8c\nç\84¶å¾\8cå\86\8då\95\9få\8b\95選項。",
+       "config-upload-deleted": "å·²å\88ªé\99¤æª\94æ¡\88的目錄:",
+       "config-upload-deleted-help": "請選擇用來存放已刪除檔案的目錄。\n理想情況下,此目錄不可被網頁直接存取。",
+       "config-logo": "標誌 URL 位置:",
+       "config-logo-help": "在 MediaWiki 的預設介面,側欄選單上方有一塊 135x160 像素用來放置標誌的區域。\n請上傳合適大小的圖片並在此輸入 URL 網址。\n\n您可以透過 <code>$wgStylePath</code> 或者 <code>$wgScriptPath</code> 來表示您的圖片與這些路徑的相對位置。\n\n如果您不想使用標誌,可略過此欄位。",
+       "config-instantcommons": "開啟即時共享資源",
+       "config-instantcommons-help": "[//www.mediawiki.org/wiki/InstantCommons 即時共享資源] 是允許 Wiki 使用來自 [//commons.wikimedia.org/ Wikimedia Commons] 網站上的圖片、聲音以及其他媒體的一項功能。\n若要開啟此功能,您的 MediaWiki 必須能夠連線網際網路。\n更多有關此功能的訊息,包含如何存除了 Wikimedia Commons 之外其他網站的說明,請參考 \n[//mediawiki.org/wiki/Manual:$wgForeignFileRepos 操作手冊]。",
+       "config-cc-error": "查無該創作共用授權條款,\n請手動輸入您的授權條款名稱。",
+       "config-cc-again": "請重新選取...",
+       "config-cc-not-chosen": "請選擇您要使用的創作共享授權條款,然後點選 \"繼續\"。",
+       "config-advanced-settings": "進階設定",
+       "config-cache-options": "物件快取設定:",
+       "config-cache-help": "物件快取是用來增進 MediaWiki 速度的一項功能,透過快取經常使用的資料。\n中型到大型的網站我們會建議開啟這個選項,對小型的網站也有一定程度的效果。",
+       "config-cache-none": "不快取 (不會影響功能,但在大型 Wiki 網站可能會有處理速度的問題)",
+       "config-cache-accel": "使用 PHP 物件快取 (APC、XCache 或 WinCache)",
+       "config-cache-memcached": "使用 Memcached (需要額外安裝與設定)",
+       "config-memcached-servers": "Memcached 伺服器:",
+       "config-memcached-help": "請列出 Memcached 伺服器的 IP 位址。\n每一行只指定一個位置並且要註明使用的埠號,例如:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+       "config-memcache-needservers": "您的快取類型選擇使用 Memcached,但並未設定任何的伺服器。",
+       "config-memcache-badip": "您輸入了一筆無效的 Memcached IP 位置:$1。",
+       "config-memcache-noport": "您沒有輸入 Memcached 伺服器的埠號:$1。\n如果您不曉得埠號為多少,預設為 11211。",
+       "config-memcache-badport": "Memcached 埠號應介於 $1 到 $2 之間。",
        "config-extensions": "擴充套件",
-       "config-extensions-help": "已在您的<code>./extensions</code>目錄中發現下列擴展。\n\n您可能要對它們進行額外的配置,但您現在可以啟用它們。",
-       "config-install-alreadydone": "'''警告:'''您似乎已經安裝了MediaWiki,並試圖重新安裝它。請前往下一個頁面。",
-       "config-install-begin": "點擊「{{int:config-continue}}」後,您將開始安裝MediaWiki。如果您還想對配置作一些修改,請點擊「{{int:config-back}}」。",
+       "config-extensions-help": "已在您的 <code>./extensions</code> 目錄中發現下列擴充套件。\n\n這些擴充套件可能需要做額外的設定,但您可以現在先開啟功能。",
+       "config-install-alreadydone": "<strong>警告:</strong>您已經安裝 MediaWiki,並且試圖重新安裝。\n請點繼續前往下一個頁面。",
+       "config-install-begin": "請點選 \"{{int:config-continue}}\" 開始安裝 MediaWiki。\n若您還想要修改設定,請點選 \"{{int:config-back}}\"。",
        "config-install-step-done": "完成",
        "config-install-step-failed": "失敗",
-       "config-install-extensions": "正在啟用擴展",
-       "config-install-database": "正在配置數據庫",
-       "config-install-schema": "å\89µå»ºæ\9e¶æ§\8b",
-       "config-install-pg-schema-not-exist": "PostgreSQL 架構不存在",
-       "config-install-pg-schema-failed": "創建數據表失敗。請確保用戶“$1”擁有寫入模式“$2”的權限。",
+       "config-install-extensions": "正在開啟擴充套件",
+       "config-install-database": "正在設定資料庫",
+       "config-install-schema": "建ç«\8b Schema",
+       "config-install-pg-schema-not-exist": "PostgreSQL Schema 不存在",
+       "config-install-pg-schema-failed": "資料表建立失敗。\n請確認使用者 \"$1\" 可以寫入 Schema \"$2\"。",
        "config-install-pg-commit": "提交更改",
-       "config-install-pg-plpgsql": "正在檢查PL/pgSQL語言",
-       "config-pg-no-plpgsql": "您需要為數據庫$1安裝PL/pgSQL語言",
-       "config-pg-no-create-privs": "為安裝程序指定的帳號缺少創建帳號的權限。",
-       "config-pg-not-in-role": "æ\82¨æ\8c\87å®\9aç\82ºwebç\94¨æ\88¶ç\9a\84帳æ\88¶å·²ç¶\93å­\98å\9c¨ã\80\82\næ\82¨çµ¦æ\9c¬ç¨\8båº\8fæ\8c\87å®\9aç\9a\84帳æ\88¶ä¸\8dæ\98¯è¶\85ç´\9aç\94¨æ\88¶ï¼\8cä¹\9fä¸\8dæ\98¯webç\94¨æ\88¶è§\92è\89²ç\9a\84æ\88\90å\93¡ï¼\8cæ\89\80以å®\83ä¸\8dè\83½å\89µå»ºwebç\94¨æ\88¶æ\89\80æ\93\81æ\9c\89ç\9a\84å°\8d象ã\80\82\n\nMediaWikiç\95¶å\89\8dé\9c\80è¦\81使ç\94¨ç\94±webç\94¨æ\88¶æ\89\80æ\9c\89ç\9a\84表ã\80\82è«\8bæ\8c\87å®\9aå\8f¦ä¸\80å\80\8bweb帳æ\88¶å\90\8d稱ï¼\8cæ\88\96é»\9eæ\93\8aâ\80\9cå¾\8cé\80\80â\80\9d並æ\8c\87å®\9aå\85·æ\9c\89é\81©ç\95¶æ¬\8aé\99\90ç\9a\84å®\89è£\9dç\94¨æ\88。",
-       "config-install-user": "æ­£å\9c¨å\89µå»ºæ\95¸æ\93\9a庫ç\94¨æ\88",
-       "config-install-user-alreadyexists": "用戶“$1”已存在",
-       "config-install-user-create-failed": "å\89µå»ºç\94¨æ\88¶â\80\9c$1â\80\9d失敗:$2",
-       "config-install-user-grant-failed": "授予用戶“$1”權限失敗:$2",
-       "config-install-user-missing": "指定的用戶“$1”不存在。",
-       "config-install-user-missing-create": "指定的用戶“$1”不存在。如果您想要創建一名,請點選“創建帳戶”下面的複選框。",
-       "config-install-tables": "æ­£å\9c¨å\89µå»ºæ\95¸æ\93\9a表",
-       "config-install-tables-exist": "'''警告''':MediaWiki的數據表似乎已經存在,跳過創建。",
-       "config-install-tables-failed": "'''錯誤''':創建數據表出錯,下為錯誤信息:$1",
-       "config-install-interwiki": "æ­£å\9c¨å¡«å\85\85é»\98èª\8dç\9a\84è·¨wikiæ\95¸æ\93\9a表",
-       "config-install-interwiki-list": "æ\89¾ä¸\8då\88°æ\96\87件<code>interwiki.list</code>。",
-       "config-install-interwiki-exists": "'''警告''':跨wiki數據表似乎已有內容,跳過默認列表。",
-       "config-install-stats": "初始化統計",
-       "config-install-keys": "ç\94\9fæ\88\90å¯\86鑰中",
-       "config-insecure-keys": "'''警告''':在安裝過程中生成的$2個安全密鑰($1)不一定安全。請考慮手動更改之。",
-       "config-install-sysop": "æ­£å\9c¨å\89µå»ºç®¡ç\90\86å\93¡ç\94¨æ\88帳號",
-       "config-install-subscribe-fail": "無法訂閱mediawiki-announce:$1",
-       "config-install-subscribe-notpossible": "æ²\92æ\9c\89å®\89è£\9dcURLï¼\8c<code>allow_url_fopen</code>ä¹\9fä¸\8då\8f¯ç\94¨。",
-       "config-install-mainpage": "正在創建顯示默認內容的首頁",
-       "config-install-extension-tables": "正在為已啟用擴展創建數據表",
-       "config-install-mainpage-failed": "無法插入首頁:$1",
-       "config-install-done": "'''恭喜!'''\n您已經成功地安裝了MediaWiki。\n\n安裝程序已經生成了<code>LocalSettings.php</code>文件,其中包含了您所有的配置。\n\n您需要下載該文件,並將其放在您wiki的根目錄(index.php的同級目錄)中。稍後下載將自動開始。\n\n如果瀏覽器沒有提示您下載,或者您取消了下載,您可以點擊下面的鏈接重新開始下載:\n\n$3\n\n'''注意''':如果您現在不完成本步驟,而是沒有下載便退出了安裝過程,此後您將無法獲得自動生成的配置文件。\n\n當本步驟完成後,您可以 '''[$2 進入您的wiki]'''。",
-       "config-download-localsettings": "下載<code>LocalSettings.php</code>",
+       "config-install-pg-plpgsql": "正在檢查 PL/pgSQL 語言",
+       "config-pg-no-plpgsql": "您需要安裝 PL/pgSQL 到資料庫 $1",
+       "config-pg-no-create-privs": "您所指定用來給安裝程序使用的帳號沒有足夠的權限可以建立新帳號。",
+       "config-pg-not-in-role": "æ\82¨æ\8c\87å®\9aç\94¨ä¾\86給網é \81å­\98å\8f\96ç\9a\84帳è\99\9få·²å­\98å\9c¨ã\80\82\næ\82¨æ\8c\87å®\9aç\94¨ä¾\86給å®\89è£\9dç¨\8båº\8f使ç\94¨ç\9a\84ç\9a\84帳è\99\9fæ\97¢ä¸\8dæ\98¯ç®¡ç\90\86è\80\85ï¼\8cä¹\9fä¸\8dæ\98¯çµ¦ç¶²é \81å­\98å\8f\96使ç\94¨è\80\85ï¼\8cå\9b æ­¤ç\84¡æ³\95使ç\94¨ç¶²é \81å­\98å\8f\96使ç\94¨è\80\85ç\9a\84æ¬\8aé\99\90建ç«\8bç\89©ä»¶ã\80\82\n\nMediaWiki ç\9b®å\89\8dé\9c\80è¦\81使ç\94¨ç\94±ç¶²é \81使ç\94¨è\80\85æ\89\80建ç«\8bç\9a\84è³\87æ\96\99表ã\80\82è«\8bæ\8c\87å®\9aå\8f¦ä¸\80å\80\8b網é \81使ç\94¨è\80\85ç\9a\84帳è\99\9få\90\8d稱ï¼\8cæ\88\96é»\9eé\81¸ \"è¿\94å\9b\9e\" æ\8c\87å®\9aå\85·æ\9c\89é\81©ç\95¶æ¬\8aé\99\90使ç\94¨è\80\85給å®\89è£\9dç¨\8båº\8f使ç\94¨。",
+       "config-install-user": "æ­£å\9c¨å»ºç«\8bè³\87æ\96\99庫使ç\94¨è\80\85",
+       "config-install-user-alreadyexists": "使用者 \"$1\" 已存在",
+       "config-install-user-create-failed": "建ç«\8b使ç\94¨è\80\85 \"$1\" 失敗:$2",
+       "config-install-user-grant-failed": "授序權限給使用者 \"$1\" 失敗:$2",
+       "config-install-user-missing": "指定的使用者 \"$1\" 不存在。",
+       "config-install-user-missing-create": "指定的使用者 \"$1\" 不存在。\n若您想建立帳號,請勾選下方 \"建立帳號\" 核選方塊。",
+       "config-install-tables": "æ­£å\9c¨å»ºç«\8bè³\87æ\96\99表",
+       "config-install-tables-exist": "<strong>警告:</strong> MediaWiki 資料表已存在,略過建立資料表。",
+       "config-install-tables-failed": "<strong>錯誤:</strong>建立資料表失敗,以下為錯誤訊息:$1",
+       "config-install-interwiki": "æ­£å\9c¨å\8c¯å\85¥é \90設ç\9a\84 interwiki è³\87æ\96\99表",
+       "config-install-interwiki-list": "æ\9f¥ç\84¡æª\94æ¡\88 <code>interwiki.list</code>。",
+       "config-install-interwiki-exists": "<strong>警告:</strong> interwiki 資料表內已有資料,略過建立預設資料。",
+       "config-install-stats": "初始化統計資訊",
+       "config-install-keys": "ç\94¢ç\94\9fç§\98å¯\86é\87\91鑰中",
+       "config-insecure-keys": "<strong>警告:</strong>在安裝過程中所產生的 $2 組安全金鑰($1)並不完全安全。請考慮手動更改。",
+       "config-install-sysop": "æ­£å\9c¨å»ºç«\8b管ç\90\86å\93¡ä½¿ç\94¨è\80\85帳號",
+       "config-install-subscribe-fail": "無法訂閱 mediawiki-announce:$1",
+       "config-install-subscribe-notpossible": "æ\9cªå®\89è£\9d cURLï¼\8cå\9b æ­¤ç\84¡æ³\95使ç\94¨ <code>allow_url_fopen</code> è¨­å®\9aé \85ç\9b®。",
+       "config-install-mainpage": "正在使用預設的內容建立首頁",
+       "config-install-extension-tables": "正在建立已啟動的擴充套件的資料表",
+       "config-install-mainpage-failed": "無法插入首頁$1",
+       "config-install-done": "<strong>恭喜!</strong>\n您已經成功地安裝了 MediaWiki。\n\n安裝程式已自動產生 <code>LocalSettings.php</code> 檔案,\n該檔案中包含了您所有的設定項目。\n\n您需要下載該檔案,並將其放置在您的 Wiki 的根目錄 (index.php 所在的目錄) 中,下載稍後會自動開始。\n\n若瀏覽器沒有提示您下載,或者您取消了下載,您可以點選下方連結重新下載:\n\n$3\n\n<strong>注意:</strong>若您現在未下載檔案,稍後結束安裝程式之後將無法下載設定檔。\n\n當您完成本步驟後,您可以 <strong>[$2 進入您的 Wiki]</strong>。",
+       "config-download-localsettings": "下載 <code>LocalSettings.php</code>",
        "config-help": "說明",
-       "config-nofile": "æª\94æ¡\88ã\80\8c$1ã\80\8dç\84¡æ³\95æ\89¾å°\8bã\80\82é\9b£é\81\93å®\83被刪除?",
-       "config-extension-link": "您是否了解您的wiki支援[//www.mediawiki.org/wiki/Manual:Extensions 拓展]?您可瀏覽[//www.mediawiki.org/wiki/Category:Extensions_by_category 包含所有拓展的分類]或[//www.mediawiki.org/wiki/Extension_Matrix 拓展矩陣]以顯示拓展的完整列表。",
-       "mainpagetext": "'''已成功安裝MediaWiki。'''",
-       "mainpagedocfooter": "請參閱[//meta.wikimedia.org/wiki/Help:Contents 用戶手冊]以獲得使用此wiki軟體的訊息!\n\n== 入門 ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki配置設定清單]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki常見問題解答]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki發佈郵件清單]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki界面本地化]"
+       "config-nofile": "æ\9f¥ç\84¡æª\94æ¡\88 \"$1\"ï¼\8cæ\98¯å\90¦å·²被刪除?",
+       "config-extension-link": "您是否了解您的 Wiki 支援 [//www.mediawiki.org/wiki/Manual:Extensions 擴充套件]?\n\n\n您可以瀏覽 [//www.mediawiki.org/wiki/Category:Extensions_by_category 擴充套件分類] 或 [//www.mediawiki.org/wiki/Extension_Matrix 擴充套件資料表] 以取得相關的資訊。",
+       "mainpagetext": "<strong>已成功安裝 MediaWiki。</strong>",
+       "mainpagedocfooter": "請參閱 [//meta.wikimedia.org/wiki/Help:Contents 使用者手冊] 以取得使用 Wiki 的相關訊息!\n\n== 新手入門 ==\n* [//www.mediawiki.org/wiki/Manual:Configuration_settings MediaWiki 系統設定]\n* [//www.mediawiki.org/wiki/Manual:FAQ MediaWiki 常見問答集]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki 發佈郵寄清單]\n* [//www.mediawiki.org/wiki/Localisation#Translation_resources MediaWiki 介面在地化]"
 }
index 3456373..4ee370e 100644 (file)
@@ -92,7 +92,8 @@ abstract class Job implements IJobSpecification {
         * @deprecated since 1.21
         */
        public static function batchInsert( $jobs ) {
-               return JobQueueGroup::singleton()->push( $jobs );
+               JobQueueGroup::singleton()->push( $jobs );
+               return true;
        }
 
        /**
@@ -107,7 +108,8 @@ abstract class Job implements IJobSpecification {
         * @deprecated since 1.21
         */
        public static function safeBatchInsert( $jobs ) {
-               return JobQueueGroup::singleton()->push( $jobs, JobQueue::QOS_ATOMIC );
+               JobQueueGroup::singleton()->push( $jobs, JobQueue::QOS_ATOMIC );
+               return true;
        }
 
        /**
@@ -281,7 +283,8 @@ abstract class Job implements IJobSpecification {
         * @deprecated since 1.21
         */
        public function insert() {
-               return JobQueueGroup::singleton()->push( $this );
+               JobQueueGroup::singleton()->push( $this );
+               return true;
        }
 
        /**
index c858e42..c00d22e 100644 (file)
@@ -323,7 +323,7 @@ abstract class JobQueue {
         */
        final public function batchPush( array $jobs, $flags = 0 ) {
                if ( !count( $jobs ) ) {
-                       return true; // nothing to do
+                       return; // nothing to do
                }
 
                foreach ( $jobs as $job ) {
@@ -344,7 +344,7 @@ abstract class JobQueue {
        /**
         * @see JobQueue::batchPush()
         * @param array $jobs
-        * @param array $flags
+        * @param int $flags
         */
        abstract protected function doBatchPush( array $jobs, $flags );
 
index 1991bb4..08873cc 100644 (file)
@@ -189,9 +189,9 @@ class JobQueueDB extends JobQueue {
        /**
         * @see JobQueue::doBatchPush()
         * @param array $jobs
-        * @param array $flags
+        * @param int $flags
         * @throws DBError|Exception
-        * @return bool
+        * @return void
         */
        protected function doBatchPush( array $jobs, $flags ) {
                $dbw = $this->getMasterDB();
@@ -203,8 +203,6 @@ class JobQueueDB extends JobQueue {
                                $that->doBatchPushInternal( $dbw, $jobs, $flags, $method );
                        }
                );
-
-               return true;
        }
 
        /**
@@ -215,11 +213,11 @@ class JobQueueDB extends JobQueue {
         * @param int $flags
         * @param string $method
         * @throws DBError
-        * @return bool
+        * @return void
         */
        public function doBatchPushInternal( IDatabase $dbw, array $jobs, $flags, $method ) {
                if ( !count( $jobs ) ) {
-                       return true;
+                       return;
                }
 
                $rowSet = array(); // (sha1 => job) map for jobs that are de-duplicated
@@ -277,7 +275,7 @@ class JobQueueDB extends JobQueue {
 
                $this->cache->set( $this->getCacheKey( 'empty' ), 'false', JobQueueDB::CACHE_TTL_LONG );
 
-               return true;
+               return;
        }
 
        /**
index 9b4c315..58d5c67 100644 (file)
@@ -235,8 +235,6 @@ class JobQueueFederated extends JobQueue {
                        throw new JobQueueError(
                                "Could not insert job(s), {$this->maxPartitionsTry} partitions tried." );
                }
-
-               return true;
        }
 
        /**
index 948baa0..16908a7 100644 (file)
@@ -106,13 +106,12 @@ class JobQueueGroup {
         *
         * @param Job|array $jobs A single Job or a list of Jobs
         * @throws MWException
-        * @return bool
-        * @todo Return value here is not useful
+        * @return void
         */
        public function push( $jobs ) {
                $jobs = is_array( $jobs ) ? $jobs : array( $jobs );
                if ( !count( $jobs ) ) {
-                       return true;
+                       return;
                }
 
                $jobsByType = array(); // (job type => list of jobs)
@@ -135,8 +134,6 @@ class JobQueueGroup {
                                $this->cache->clear( 'queues-ready' );
                        }
                }
-
-               return true;
        }
 
        /**
index f5a266e..6739a84 100644 (file)
@@ -71,12 +71,6 @@ class JobQueueRedis extends JobQueue {
        /** @var string Key to prefix the queue keys with (used for testing) */
        protected $key;
 
-       /**
-        * @var null|int maximum seconds between execution of periodic tasks.  Used to speed up
-        * testing but should otherwise be left unset.
-        */
-       protected $maximumPeriodicTaskSeconds;
-
        /**
         * @params include:
         *   - redisConfig : An array of parameters to RedisConnectionPool::__construct().
@@ -85,10 +79,6 @@ class JobQueueRedis extends JobQueue {
         *                   If a hostname is specified but no port, the standard port number
         *                   6379 will be used. Required.
         *   - compression : The type of compression to use; one of (none,gzip).
-        *   - maximumPeriodicTaskSeconds : Maximum seconds between check periodic tasks.  Set to
-        *                   force faster execution of periodic tasks for inegration tests that
-        *                   rely on checkDelay.  Without this the integration tests are very very
-        *                   slow.  This really shouldn't be set in production.
         * @param array $params
         */
        public function __construct( array $params ) {
@@ -97,8 +87,6 @@ class JobQueueRedis extends JobQueue {
                $this->server = $params['redisServer'];
                $this->compression = isset( $params['compression'] ) ? $params['compression'] : 'none';
                $this->redisPool = RedisConnectionPool::singleton( $params['redisConfig'] );
-               $this->maximumPeriodicTaskSeconds = isset( $params['maximumPeriodicTaskSeconds'] ) ?
-                       $params['maximumPeriodicTaskSeconds'] : null;
        }
 
        protected function supportedOrders() {
@@ -194,8 +182,8 @@ class JobQueueRedis extends JobQueue {
        /**
         * @see JobQueue::doBatchPush()
         * @param array $jobs
-        * @param array $flags
-        * @return bool
+        * @param int $flags
+        * @return void
         * @throws JobQueueError
         */
        protected function doBatchPush( array $jobs, $flags ) {
@@ -211,7 +199,7 @@ class JobQueueRedis extends JobQueue {
                }
 
                if ( !count( $items ) ) {
-                       return true; // nothing to do
+                       return; // nothing to do
                }
 
                $conn = $this->getConnection();
@@ -235,7 +223,7 @@ class JobQueueRedis extends JobQueue {
                        if ( $failed > 0 ) {
                                wfDebugLog( 'JobQueueRedis', "Could not insert {$failed} {$this->type} job(s)." );
 
-                               return false;
+                               throw new RedisException( "Could not insert {$failed} {$this->type} job(s)." );
                        }
                        JobQueue::incrStats( 'job-insert', $this->type, count( $items ), $this->wiki );
                        JobQueue::incrStats( 'job-insert-duplicate', $this->type,
@@ -243,8 +231,6 @@ class JobQueueRedis extends JobQueue {
                } catch ( RedisException $e ) {
                        $this->throwRedisException( $conn, $e );
                }
-
-               return true;
        }
 
        /**
@@ -738,10 +724,7 @@ LUA;
                }
                $period = min( $periods );
                $period = max( $period, 30 ); // sanity
-               // Support override for faster testing
-               if ( $this->maximumPeriodicTaskSeconds !== null ) {
-                       $period = min( $period, $this->maximumPeriodicTaskSeconds );
-               }
+
                return array(
                        'recyclePruneAndUndelayJobs' => array(
                                'callback' => array( $this, 'recyclePruneAndUndelayJobs' ),
index eb5e632..e45dd3a 100644 (file)
@@ -155,7 +155,6 @@ class FormatJson {
 
                if ( $pretty !== false ) {
                        // Workaround for <https://bugs.php.net/bug.php?id=66021>
-                       // Can be removed once we require PHP >= 5.4.28, 5.5.12, 5.6.0
                        if ( $bug66021 ) {
                                $json = preg_replace( self::WS_CLEANUP_REGEX, '', $json );
                        }
index 340e7f4..671e812 100644 (file)
@@ -86,7 +86,7 @@ class MultiHttpClient {
         *   - err     : Any cURL error string
         * The map also stores integer-indexed copies of these values. This lets callers do:
         *      <code>
-        *              list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $req;
+        *              list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $http->run( $req );
         *  </code>
         * @param array $req HTTP request array
         * @param array $opts
@@ -110,7 +110,7 @@ class MultiHttpClient {
         *   - err     : Any cURL error string
         * The map also stores integer-indexed copies of these values. This lets callers do:
         *      <code>
-        *              list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $req;
+        *              list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $req['response'];
         *  </code>
         * All headers in the 'headers' field are normalized to use lower case names.
         * This is true for the request headers and the response headers. Integer-indexed
diff --git a/includes/libs/virtualrest/SwiftVirtualRESTService.php b/includes/libs/virtualrest/SwiftVirtualRESTService.php
new file mode 100644 (file)
index 0000000..011dabe
--- /dev/null
@@ -0,0 +1,175 @@
+<?php
+/**
+ * Virtual HTTP service client for Swift
+ *
+ * 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
+ */
+
+/**
+ * Example virtual rest service for OpenStack Swift
+ * @TODO: caching support (APC/memcached)
+ * @since 1.23
+ */
+class SwiftVirtualRESTService extends VirtualRESTService {
+       /** @var array */
+       protected $authCreds;
+       /** @var int UNIX timestamp */
+       protected $authSessionTimestamp = 0;
+       /** @var int UNIX timestamp */
+       protected $authErrorTimestamp = null;
+       /** @var int */
+       protected $authCachedStatus = null;
+       /** @var string */
+       protected $authCachedReason = null;
+
+       /**
+        * @param array $params Key/value map
+        *   - swiftAuthUrl       : Swift authentication server URL
+        *   - swiftUser          : Swift user used by MediaWiki (account:username)
+        *   - swiftKey           : Swift authentication key for the above user
+        *   - swiftAuthTTL       : Swift authentication TTL (seconds)
+        */
+       public function __construct( array $params ) {
+               parent::__construct( $params );
+       }
+
+       /**
+        * @return int|bool HTTP status on cached failure
+        */
+       protected function needsAuthRequest() {
+               if ( !$this->authCreds ) {
+                       return true;
+               }
+               if ( $this->authErrorTimestamp !== null ) {
+                       if ( ( time() - $this->authErrorTimestamp ) < 60 ) {
+                               return $this->authCachedStatus; // failed last attempt; don't bother
+                       } else { // actually retry this time
+                               $this->authErrorTimestamp = null;
+                       }
+               }
+               // Session keys expire after a while, so we renew them periodically
+               return ( ( time() - $this->authSessionTimestamp ) > $this->params['swiftAuthTTL'] );
+       }
+
+       protected function applyAuthResponse( array $req ) {
+               $this->authSessionTimestamp = 0;
+               list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $req['response'];
+               if ( $rcode >= 200 && $rcode <= 299 ) { // OK
+                       $this->authCreds = array(
+                               'auth_token'  => $rhdrs['x-auth-token'],
+                               'storage_url' => $rhdrs['x-storage-url']
+                       );
+                       $this->authSessionTimestamp = time();
+                       return true;
+               } elseif ( $rcode === 403 ) {
+                       $this->authCachedStatus = 401;
+                       $this->authCachedReason = 'Authorization Required';
+                       $this->authErrorTimestamp = time();
+                       return false;
+               } else {
+                       $this->authCachedStatus = $rcode;
+                       $this->authCachedReason = $rdesc;
+                       $this->authErrorTimestamp = time();
+                       return null;
+               }
+       }
+
+       public function onRequests( array $reqs, Closure $idGeneratorFunc ) {
+               $result = array();
+               $firstReq = reset( $reqs );
+               if ( $firstReq && count( $reqs ) == 1 && isset( $firstReq['isAuth'] ) ) {
+                       // This was an authentication request for work requests...
+                       $result = $reqs; // no change
+               } else {
+                       // These are actual work requests...
+                       $needsAuth = $this->needsAuthRequest();
+                       if ( $needsAuth === true ) {
+                               // These are work requests and we don't have any token to use.
+                               // Replace the work requests with an authentication request.
+                               $result = array(
+                                       $idGeneratorFunc() => array(
+                                               'method'  => 'GET',
+                                               'url'     => $this->params['swiftAuthUrl'] . "/v1.0",
+                                               'headers' => array(
+                                                       'x-auth-user' => $this->params['swiftUser'],
+                                                       'x-auth-key'  => $this->params['swiftKey'] ),
+                                               'isAuth'  => true,
+                                               'chain'   => $reqs
+                                       )
+                               );
+                       } elseif ( $needsAuth !== false ) {
+                               // These are work requests and authentication has previously failed.
+                               // It is most efficient to just give failed pseudo responses back for
+                               // the original work requests.
+                               foreach ( $reqs as $key => $req ) {
+                                       $req['response'] = array(
+                                               'code'     => $this->authCachedStatus,
+                                               'reason'   => $this->authCachedReason,
+                                               'headers'  => array(),
+                                               'body'     => '',
+                                               'error'    => ''
+                                       );
+                                       $result[$key] = $req;
+                               }
+                       } else {
+                               // These are work requests and we have a token already.
+                               // Go through and mangle each request to include a token.
+                               foreach ( $reqs as $key => $req ) {
+                                       // The default encoding treats the URL as a REST style path that uses
+                                       // forward slash as a hierarchical delimiter (and never otherwise).
+                                       // Subclasses can override this, and should be documented in any case.
+                                       $parts = array_map( 'rawurlencode', explode( '/', $req['url'] ) );
+                                       $req['url'] = $this->authCreds['storage_url'] . '/' . implode( '/', $parts );
+                                       $req['headers']['x-auth-token'] = $this->authCreds['auth_token'];
+                                       $result[$key] = $req;
+                                       // @TODO: add ETag/Content-Length and such as needed
+                               }
+                       }
+               }
+               return $result;
+       }
+
+       public function onResponses( array $reqs, Closure $idGeneratorFunc ) {
+               $firstReq = reset( $reqs );
+               if ( $firstReq && count( $reqs ) == 1 && isset( $firstReq['isAuth'] ) ) {
+                       $result = array();
+                       // This was an authentication request for work requests...
+                       if ( $this->applyAuthResponse( $firstReq ) ) {
+                               // If it succeeded, we can subsitute the work requests back.
+                               // Call this recursively in order to munge and add headers.
+                               $result = $this->onRequests( $firstReq['chain'], $idGeneratorFunc );
+                       } else {
+                               // If it failed, it is most efficient to just give failing
+                               // pseudo-responses back for the actual work requests.
+                               foreach ( $firstReq['chain'] as $key => $req ) {
+                                       $req['response'] = array(
+                                               'code'     => $this->authCachedStatus,
+                                               'reason'   => $this->authCachedReason,
+                                               'headers'  => array(),
+                                               'body'     => '',
+                                               'error'    => ''
+                                       );
+                                       $result[$key] = $req;
+                               }
+                       }
+               } else {
+                       $result = $reqs; // no change
+               }
+               return $result;
+       }
+}
diff --git a/includes/libs/virtualrest/VirtualRESTService.php b/includes/libs/virtualrest/VirtualRESTService.php
new file mode 100644 (file)
index 0000000..05c2afc
--- /dev/null
@@ -0,0 +1,107 @@
+<?php
+/**
+ * Virtual HTTP service client
+ *
+ * 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
+ */
+
+/**
+ * Virtual HTTP service instance that can be mounted on to a VirtualRESTService
+ *
+ * Sub-classes manage the logic of either:
+ *   - a) Munging virtual HTTP request arrays to have qualified URLs and auth headers
+ *   - b) Emulating the execution of virtual HTTP requests (e.g. brokering)
+ *
+ * Authentication information can be cached in instances of the class for performance.
+ * Such information should also be cached locally on the server and auth requests should
+ * have reasonable timeouts.
+ *
+ * @since 1.23
+ */
+abstract class VirtualRESTService {
+       /** @var array Key/value map */
+       protected $params = array();
+
+       /**
+        * @param array $params Key/value map
+        */
+       public function __construct( array $params ) {
+               $this->params = $params;
+       }
+
+       /**
+        * Prepare virtual HTTP(S) requests (for this service) for execution
+        *
+        * This method should mangle any of the $reqs entry fields as needed:
+        *   - url      : munge the URL to have an absolute URL with a protocol
+        *                and encode path components as needed by the backend [required]
+        *   - query    : include any authentication signatures/parameters [as needed]
+        *   - headers  : include any authentication tokens/headers [as needed]
+        *
+        * The incoming URL parameter will be relative to the service mount point.
+        *
+        * This method can also remove some of the requests as well as add new ones
+        * (using $idGenerator to set each of the entries' array keys). For any existing
+        * or added request, the 'response' array can be filled in, which will prevent the
+        * client from executing it. If an original request is removed, at some point it
+        * must be added back (with the same key) in onRequests() or onResponses();
+        * it's reponse may be filled in as with other requests.
+        *
+        * @param array $reqs Map of Virtual HTTP request arrays
+        * @param Closure $idGeneratorFunc Method to generate unique keys for new requests
+        * @return array Modified HTTP request array map
+        */
+       public function onRequests( array $reqs, Closure $idGeneratorFunc ) {
+               $result = array();
+               foreach ( $reqs as $key => $req ) {
+                       // The default encoding treats the URL as a REST style path that uses
+                       // forward slash as a hierarchical delimiter (and never otherwise).
+                       // Subclasses can override this, and should be documented in any case.
+                       $parts = array_map( 'rawurlencode', explode( '/', $req['url'] ) );
+                       $req['url'] = $this->params['baseUrl'] . '/' . implode( '/', $parts );
+                       $result[$key] = $req;
+               }
+               return $result;
+       }
+
+       /**
+        * Mangle or replace virtual HTTP(S) requests which have been responded to
+        *
+        * This method may mangle any of the $reqs entry 'response' fields as needed:
+        *   - code    : perform any code normalization [as needed]
+        *   - reason  : perform any reason normalization [as needed]
+        *   - headers : perform any header normalization [as needed]
+        *
+        * This method can also remove some of the requests as well as add new ones
+        * (using $idGenerator to set each of the entries' array keys). For any existing
+        * or added request, the 'response' array can be filled in, which will prevent the
+        * client from executing it. If an original request is removed, at some point it
+        * must be added back (with the same key) in onRequests() or onResponses();
+        * it's reponse may be filled in as with other requests. All requests added to $reqs
+        * will be passed through onRequests() to handle any munging required as normal.
+        *
+        * The incoming URL parameter will be relative to the service mount point.
+        *
+        * @param array $reqs Map of Virtual HTTP request arrays with 'response' set
+        * @param Closure $idGeneratorFunc Method to generate unique keys for new requests
+        * @return array Modified HTTP request array map
+        */
+       public function onResponses( array $reqs, Closure $idGeneratorFunc ) {
+               return $reqs;
+       }
+}
diff --git a/includes/libs/virtualrest/VirtualRESTServiceClient.php b/includes/libs/virtualrest/VirtualRESTServiceClient.php
new file mode 100644 (file)
index 0000000..2d21d3c
--- /dev/null
@@ -0,0 +1,289 @@
+<?php
+/**
+ * Virtual HTTP service client
+ *
+ * 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
+ */
+
+/**
+ * Virtual HTTP service client loosely styled after a Virtual File System
+ *
+ * Services can be mounted on path prefixes so that virtual HTTP operations
+ * against sub-paths will map to those services. Operations can actually be
+ * done using HTTP messages over the wire or may simple be emulated locally.
+ *
+ * Virtual HTTP request maps are arrays that use the following format:
+ *   - method   : GET/HEAD/PUT/POST/DELETE
+ *   - url      : HTTP/HTTPS URL or virtual service path with a registered prefix
+ *   - query    : <query parameter field/value associative array> (uses RFC 3986)
+ *   - headers  : <header name/value associative array>
+ *   - body     : source to get the HTTP request body from;
+ *                this can simply be a string (always), a resource for
+ *                PUT requests, and a field/value array for POST request;
+ *                array bodies are encoded as multipart/form-data and strings
+ *                use application/x-www-form-urlencoded (headers sent automatically)
+ *   - stream   : resource to stream the HTTP response body to
+ * Request maps can use integer index 0 instead of 'method' and 1 instead of 'url'.
+ *
+ * @author Aaron Schulz
+ * @since 1.23
+ */
+class VirtualRESTServiceClient {
+       /** @var MultiHttpClient */
+       protected $http;
+       /** @var Array Map of (prefix => VirtualRESTService) */
+       protected $instances = array();
+
+       const VALID_MOUNT_REGEX = '#^/[0-9a-z]+/([0-9a-z]+/)*$#';
+
+       /**
+        * @param MultiHttpClient $http
+        */
+       public function __construct( MultiHttpClient $http ) {
+               $this->http = $http;
+       }
+
+       /**
+        * Map a prefix to service handler
+        *
+        * @param string $prefix Virtual path
+        * @param VirtualRESTService $instance
+        */
+       public function mount( $prefix, VirtualRESTService $instance ) {
+               if ( !preg_match( self::VALID_MOUNT_REGEX, $prefix ) ) {
+                       throw new UnexpectedValueException( "Invalid service mount point '$prefix'." );
+               } elseif ( isset( $this->instances[$prefix] ) ) {
+                       throw new UnexpectedValueException( "A service is already mounted on '$prefix'." );
+               }
+               $this->instances[$prefix] = $instance;
+       }
+
+       /**
+        * Unmap a prefix to service handler
+        *
+        * @param string $prefix Virtual path
+        */
+       public function unmount( $prefix ) {
+               if ( !preg_match( self::VALID_MOUNT_REGEX, $prefix ) ) {
+                       throw new UnexpectedValueException( "Invalid service mount point '$prefix'." );
+               } elseif ( !isset( $this->instances[$prefix] ) ) {
+                       throw new UnexpectedValueException( "No service is mounted on '$prefix'." );
+               }
+               unset( $this->instances[$prefix] );
+       }
+
+       /**
+        * Get the prefix and service that a virtual path is serviced by
+        *
+        * @param string $path
+        * @return array (prefix,VirtualRESTService) or (null,null) if none found
+        */
+       public function getMountAndService( $path ) {
+               $cmpFunc = function( $a, $b ) {
+                       $al = substr_count( $a, '/' );
+                       $bl = substr_count( $b, '/' );
+                       if ( $al === $bl ) {
+                               return 0; // should not actually happen
+                       }
+                       return ( $al < $bl ) ? 1 : -1; // largest prefix first
+               };
+
+               $matches = array(); // matching prefixes (mount points)
+               foreach ( $this->instances as $prefix => $service ) {
+                       if ( strpos( $path, $prefix ) === 0 ) {
+                               $matches[] = $prefix;
+                       }
+               }
+               usort( $matches, $cmpFunc );
+
+               // Return the most specific prefix and corresponding service
+               return isset( $matches[0] )
+                       ? array( $matches[0], $this->instances[$matches[0]] )
+                       : array( null, null );
+       }
+
+       /**
+        * Execute a virtual HTTP(S) request
+        *
+        * This method returns a response map of:
+        *   - code    : HTTP response code or 0 if there was a serious cURL error
+        *   - reason  : HTTP response reason (empty if there was a serious cURL error)
+        *   - headers : <header name/value associative array>
+        *   - body    : HTTP response body or resource (if "stream" was set)
+        *   - err     : Any cURL error string
+        * The map also stores integer-indexed copies of these values. This lets callers do:
+        *      <code>
+        *              list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $client->run( $req );
+        *  </code>
+        * @param array $req Virtual HTTP request array
+        * @return array Response array for request
+        */
+       public function run( array $req ) {
+               $req = $this->runMulti( array( $req ) );
+               return $req[0]['response'];
+       }
+
+       /**
+        * Execute a set of virtual HTTP(S) requests concurrently
+        *
+        * A map of requests keys to response maps is returned. Each response map has:
+        *   - code    : HTTP response code or 0 if there was a serious cURL error
+        *   - reason  : HTTP response reason (empty if there was a serious cURL error)
+        *   - headers : <header name/value associative array>
+        *   - body    : HTTP response body or resource (if "stream" was set)
+        *   - err     : Any cURL error string
+        * The map also stores integer-indexed copies of these values. This lets callers do:
+        *      <code>
+        *              list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $responses[0];
+        *  </code>
+        *
+        * @param array $req Map of Virtual HTTP request arrays
+        * @return array $reqs Map of corresponding response values with the same keys/order
+        */
+       public function runMulti( array $reqs ) {
+               foreach ( $reqs as $index => &$req ) {
+                       if ( isset( $req[0] ) ) {
+                               $req['method'] = $req[0]; // short-form
+                               unset( $req[0] );
+                       }
+                       if ( isset( $req[1] ) ) {
+                               $req['url'] = $req[1]; // short-form
+                               unset( $req[1] );
+                       }
+                       $req['chain'] = array(); // chain or list of replaced requests
+               }
+               unset( $req ); // don't assign over this by accident
+
+               $curUniqueId = 0;
+               $armoredIndexMap = array(); // (original index => new index)
+
+               $doneReqs = array(); // (index => request)
+               $executeReqs = array(); // (index => request)
+               $replaceReqsByService = array(); // (prefix => index => request)
+               $origPending = array(); // (index => 1) for original requests
+
+               foreach ( $reqs as $origIndex => $req ) {
+                       // Re-index keys to consecutive integers (they will be swapped back later)
+                       $index = $curUniqueId++;
+                       $armoredIndexMap[$origIndex] = $index;
+                       $origPending[$index] = 1;
+                       if ( preg_match( '#^(http|ftp)s?://#', $req['url'] ) ) {
+                               // Absolute FTP/HTTP(S) URL, run it as normal
+                               $executeReqs[$index] = $req;
+                       } else {
+                               // Must be a virtual HTTP URL; resolve it
+                               list( $prefix, $service ) = $this->getMountAndService( $req['url'] );
+                               if ( !$service ) {
+                                       throw new UnexpectedValueException( "Path '{$req['url']}' has no service." );
+                               }
+                               // Set the URL to the mount-relative portion
+                               $req['url'] = substr( $req['url'], strlen( $prefix ) );
+                               $replaceReqsByService[$prefix][$index] = $req;
+                       }
+               }
+
+               // Function to get IDs that won't collide with keys in $armoredIndexMap
+               $idFunc = function() use ( &$curUniqueId ) {
+                       return $curUniqueId++;
+               };
+
+               $rounds = 0;
+               do {
+                       if ( ++$rounds > 5 ) { // sanity
+                               throw new Exception( "Too many replacement rounds detected. Aborting." );
+                       }
+                       // Resolve the virtual URLs valid and qualified HTTP(S) URLs
+                       // and add any required authentication headers for the backend.
+                       // Services can also replace requests with new ones, either to
+                       // defer the original or to set a proxy response to the original.
+                       $newReplaceReqsByService = array();
+                       foreach ( $replaceReqsByService as $prefix => $servReqs ) {
+                               $service = $this->instances[$prefix];
+                               foreach ( $service->onRequests( $servReqs, $idFunc ) as $index => $req ) {
+                                       // Services use unique IDs for replacement requests
+                                       if ( isset( $servReqs[$index] ) || isset( $origPending[$index] ) ) {
+                                               // A current or original request which was not modified
+                                       } else {
+                                               // Replacement requests with pre-set responses should not execute
+                                               $newReplaceReqsByService[$prefix][$index] = $req;
+                                       }
+                                       if ( isset( $req['response'] ) ) {
+                                               // Replacement requests with pre-set responses should not execute
+                                               unset( $executeReqs[$index] );
+                                               unset( $origPending[$index] );
+                                               $doneReqs[$index] = $req;
+                                       } else {
+                                               // Original or mangled request included
+                                               $executeReqs[$index] = $req;
+                                       }
+                               }
+                       }
+                       // Update index of requests to inspect for replacement
+                       $replaceReqsByService = $newReplaceReqsByService;
+                       // Run the actual work HTTP requests
+                       foreach ( $this->http->runMulti( $executeReqs ) as $index => $ranReq ) {
+                               $doneReqs[$index] = $ranReq;
+                               unset( $origPending[$index] );
+                       }
+                       $executeReqs = array();
+                       // Services can also replace requests with new ones, either to
+                       // defer the original or to set a proxy response to the original.
+                       // Any replacement requests executed above will need to be replaced
+                       // with new requests (eventually the original). The responses can be
+                       // forced instead of having the request sent over the wire.
+                       $newReplaceReqsByService = array();
+                       foreach ( $replaceReqsByService as $prefix => $servReqs ) {
+                               $service = $this->instances[$prefix];
+                               // Only the request copies stored in $doneReqs actually have the response
+                               $servReqs = array_intersect_key( $doneReqs, $servReqs );
+                               foreach ( $service->onResponses( $servReqs, $idFunc ) as $index => $req ) {
+                                       // Services use unique IDs for replacement requests
+                                       if ( isset( $servReqs[$index] ) || isset( $origPending[$index] ) ) {
+                                               // A current or original request which was not modified
+                                       } else {
+                                               // Replacement requests with pre-set responses should not execute
+                                               $newReplaceReqsByService[$prefix][$index] = $req;
+                                       }
+                                       if ( isset( $req['response'] ) ) {
+                                               // Replacement requests with pre-set responses should not execute
+                                               unset( $origPending[$index] );
+                                               $doneReqs[$index] = $req;
+                                       } else {
+                                               // Update the request in case it was mangled
+                                               $executeReqs[$index] = $req;
+                                       }
+                               }
+                       }
+                       // Update index of requests to inspect for replacement
+                       $replaceReqsByService = $newReplaceReqsByService;
+               } while ( count( $origPending ) );
+
+               $responses = array();
+               // Update $reqs to include 'response' and normalized request 'headers'.
+               // This maintains the original order of $reqs.
+               foreach ( $reqs as $origIndex => $req ) {
+                       $index = $armoredIndexMap[$origIndex];
+                       if ( !isset( $doneReqs[$index] ) ) {
+                               throw new UnexpectedValueException( "Response for request '$index' is NULL." );
+                       }
+                       $responses[$origIndex] = $doneReqs[$index]['response'];
+               }
+
+               return $responses;
+       }
+}
index 74af7a4..56f1be2 100644 (file)
@@ -247,6 +247,23 @@ abstract class BagOStuff {
                return $res;
        }
 
+       /**
+        * Batch insertion
+        * @param array $data $key => $value assoc array
+        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+        * @return bool success
+        * @since 1.24
+        */
+       public function setMulti( array $data, $exptime = 0 ) {
+               $res = true;
+               foreach ( $data as $key => $value ) {
+                       if ( !$this->set( $key, $value, $exptime ) ) {
+                               $res = false;
+                       }
+               }
+               return $res;
+       }
+
        /**
         * @param string $key
         * @param mixed $value
index 5a96f7b..f7dfe46 100644 (file)
@@ -250,6 +250,27 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
                return $this->checkResult( false, $result );
        }
 
+       /**
+        * @param array $data
+        * @param int $exptime
+        * @return bool
+        */
+       public function setMulti( array $data, $exptime = 0 ) {
+               wfProfileIn( __METHOD__ );
+               foreach ( $data as $key => $value ) {
+                       $encKey = $this->encodeKey( $key );
+                       if ( $encKey !== $key ) {
+                               $data[$encKey] = $value;
+                               unset( $data[$key] );
+                       }
+               }
+               $this->debugLog( 'setMulti(' . implode( ', ', array_keys( $data ) ) . ')' );
+               $result = $this->client->setMulti( $data, $this->fixExpiry( $exptime ) );
+               wfProfileOut( __METHOD__ );
+               return $this->checkResult( false, $result );
+       }
+
+
        /* NOTE: there is no cas() method here because it is currently not supported
         * by the BagOStuff interface and other BagOStuff subclasses, such as
         * SqlBagOStuff.
index d6d49ae..e770b73 100644 (file)
@@ -211,6 +211,59 @@ class RedisBagOStuff extends BagOStuff {
                return $result;
        }
 
+       /**
+        * @param array $data
+        * @param int $expiry
+        * @return bool
+        */
+       public function setMulti( array $data, $expiry = 0 ) {
+               $section = new ProfileSection( __METHOD__ );
+
+               $batches = array();
+               $conns = array();
+               foreach ( $data as $key => $value ) {
+                       list( $server, $conn ) = $this->getConnection( $key );
+                       if ( !$conn ) {
+                               continue;
+                       }
+                       $conns[$server] = $conn;
+                       $batches[$server][] = $key;
+               }
+
+               $expiry = $this->convertToRelative( $expiry );
+               $result = true;
+               foreach ( $batches as $server => $batchKeys ) {
+                       $conn = $conns[$server];
+                       try {
+                               $conn->multi( Redis::PIPELINE );
+                               foreach ( $batchKeys as $key ) {
+                                       if ( $expiry ) {
+                                               $conn->setex( $key, $expiry, $this->serialize( $data[$key] ) );
+                                       } else {
+                                               $conn->set( $key, $this->serialize( $data[$key] ) );
+                                       }
+                               }
+                               $batchResult = $conn->exec();
+                               if ( $batchResult === false ) {
+                                       $this->debug( "setMulti request to $server failed" );
+                                       continue;
+                               }
+                               foreach ( $batchResult as $value ) {
+                                       if ( $value === false ) {
+                                               $result = false;
+                                       }
+                               }
+                       } catch ( RedisException $e ) {
+                               $this->handleException( $server, $conn, $e );
+                               $result = false;
+                       }
+               }
+
+               return $result;
+       }
+
+
+
        public function add( $key, $value, $expiry = 0 ) {
                $section = new ProfileSection( __METHOD__ );
 
index 8bf0c81..e6a8c45 100644 (file)
@@ -271,6 +271,76 @@ class SqlBagOStuff extends BagOStuff {
                return $values;
        }
 
+       /**
+        * @param array $data
+        * @param int $expiry
+        * @return bool
+        */
+       public function setMulti( array $data, $expiry = 0 ) {
+               $keysByTable = array();
+               foreach ( $data as $key => $value ) {
+                       list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
+                       $keysByTable[$serverIndex][$tableName][] = $key;
+               }
+
+               $this->garbageCollect(); // expire old entries if any
+
+               $result = true;
+               $exptime = (int)$expiry;
+               foreach ( $keysByTable as $serverIndex => $serverKeys ) {
+                       try {
+                               $db = $this->getDB( $serverIndex );
+                       } catch ( DBError $e ) {
+                               $this->handleWriteError( $e, $serverIndex );
+                               $result = false;
+                               continue;
+                       }
+
+                       if ( $exptime < 0 ) {
+                               $exptime = 0;
+                       }
+
+                       if ( $exptime == 0 ) {
+                               $encExpiry = $this->getMaxDateTime( $db );
+                       } else {
+                               if ( $exptime < 3.16e8 ) { # ~10 years
+                                       $exptime += time();
+                               }
+                               $encExpiry = $db->timestamp( $exptime );
+                       }
+                       foreach ( $serverKeys as $tableName => $tableKeys ) {
+                               $rows = array();
+                               foreach ( $tableKeys as $key ) {
+                                       $rows[] = array(
+                                               'keyname' => $key,
+                                               'value' => $db->encodeBlob( $this->serialize( $data[$key] ) ),
+                                               'exptime' => $encExpiry,
+                                       );
+                               }
+
+                               try {
+                                       $db->commit( __METHOD__, 'flush' );
+                                       $db->replace(
+                                               $tableName,
+                                               array( 'keyname' ),
+                                               $rows,
+                                               __METHOD__
+                                       );
+                                       $db->commit( __METHOD__, 'flush' );
+                               } catch ( DBError $e ) {
+                                       $this->handleWriteError( $e, $serverIndex );
+                                       $result = false;
+                               }
+
+                       }
+
+               }
+
+               return $result;
+       }
+
+
+
        /**
         * @param string $key
         * @param mixed $value
index 7f63bb2..b709498 100644 (file)
@@ -431,7 +431,7 @@ class TransactionProfiler {
                                        list( $method, $realtime ) = $info;
                                        $msg .= sprintf( "%d\t%.6f\t%s\n", $i, $realtime, $method );
                                }
-                               $this->debugGroup( 'DBPerformance', $msg );
+                               wfDebugLog( 'DBPerformance', $msg );
                        }
                        unset( $this->mDBTrxHoldingLocks[$name] );
                        unset( $this->mDBTrxMethodTimes[$name] );
index 8dc5946..d0f0541 100644 (file)
@@ -117,6 +117,75 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                return $this->configVars[$hash];
        }
 
+       /**
+        * Recursively get all explicit and implicit dependencies for to the given module.
+        *
+        * @param array $registryData
+        * @param string $moduleName
+        * @return array
+        */
+       protected static function getImplicitDependencies( Array $registryData, $moduleName ) {
+               static $dependencyCache = array();
+
+               // The list of implicit dependencies won't be altered, so we can
+               // cache them without having to worry.
+               if ( !isset( $dependencyCache[$moduleName] ) ) {
+
+                       if ( !isset( $registryData[$moduleName] ) ) {
+                               // Dependencies may not exist
+                               $dependencyCache[$moduleName] = array();
+                       } else {
+                               $data = $registryData[$moduleName];
+                               $dependencyCache[$moduleName] = $data['dependencies'];
+
+                               foreach ( $data['dependencies'] as $dependency ) {
+                                       // Recursively get the dependencies of the dependencies
+                                       $dependencyCache[$moduleName] = array_merge(
+                                               $dependencyCache[$moduleName],
+                                               self::getImplicitDependencies( $registryData, $dependency )
+                                       );
+                               }
+                       }
+               }
+
+               return $dependencyCache[$moduleName];
+       }
+
+       /**
+        * Optimize the dependency tree in $this->modules and return it.
+        *
+        * The optimization basically works like this:
+        *      Given we have module A with the dependencies B and C
+        *              and module B with the dependency C.
+        *      Now we don't have to tell the client to explicitly fetch module
+        *              C as that's already included in module B.
+        *
+        * This way we can reasonably reduce the amout of module registration
+        * data send to the client.
+        *
+        * @param Array &$registryData Modules keyed by name with properties:
+        *  - string 'version'
+        *  - array 'dependencies'
+        *  - string|null 'group'
+        *  - string 'source'
+        *  - string|false 'loader'
+        */
+       public static function compileUnresolvedDependencies( Array &$registryData ) {
+               foreach ( $registryData as $name => &$data ) {
+                       if ( $data['loader'] !== false ) {
+                               continue;
+                       }
+                       $dependencies = $data['dependencies'];
+                       foreach ( $data['dependencies'] as $dependency ) {
+                               $implicitDependencies = self::getImplicitDependencies( $registryData, $dependency );
+                               $dependencies = array_diff( $dependencies, $implicitDependencies );
+                       }
+                       // Rebuild keys
+                       $data['dependencies'] = array_values( $dependencies );
+               }
+       }
+
+
        /**
         * Get registration code for all modules.
         *
@@ -157,6 +226,8 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        );
                }
 
+               self::compileUnresolvedDependencies( $registryData );
+
                // Register sources
                $out .= ResourceLoader::makeLoaderSourcesScript( $resourceLoader->getSources() );
 
index 0553880..dcec5dd 100644 (file)
@@ -167,7 +167,7 @@ class RevDel_RevisionItem extends RevDel_Item {
        }
 
        public function getAuthorNameField() {
-               return 'user_name'; // see Revision::selectUserFields()
+               return 'rev_user_text';
        }
 
        public function canView() {
index aca8c96..891962b 100644 (file)
@@ -492,7 +492,7 @@ class ImportReporter extends ContextSource {
                        $comment = $detail; // quick
                        $dbw = wfGetDB( DB_MASTER );
                        $latest = $title->getLatestRevID();
-                       $nullRevision = Revision::newNullRevision( $dbw, $title->getArticleID(), $comment, true );
+                       $nullRevision = Revision::newNullRevision( $dbw, $title->getArticleID(), $comment, true, $this->getUser() );
                        if ( !is_null( $nullRevision ) ) {
                                $nullRevision->insertOn( $dbw );
                                $page = WikiPage::factory( $title );
index 7e721ac..a65a93a 100644 (file)
        "ncategories": "$1টা {{PLURAL:$1|শ্ৰেণী|শ্ৰেণী}}",
        "ninterwikis": "$1 {{PLURAL:$1|ইণ্টাৰৱিকি|ইণ্টাৰৱিকিসমূহ}}",
        "nlinks": "$1 {{PLURAL:$1|সংযোগ|সংযোগ}}",
-       "nmembers": "{{PLURAL:$1|সদস্য|$1 সদস্যবৃন্দ}}",
+       "nmembers": "{{PLURAL:|$1 টা প্ৰবন্ধ বা উপশ্ৰেণী|$1 টা প্ৰবন্ধ বা উপশ্ৰেণী}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|জন সদস্য}}",
        "nrevisions": "$1টা {{PLURAL:$1|সংশোধন|সংশোধন}}",
        "nviews": "$1 {{PLURAL:$1|টা দৰ্শন|টা দৰ্শন}}",
        "table_pager_empty": "ফলাফল নাই",
        "autosumm-blank": "পৃষ্ঠাটো খালী কৰা হ'ল",
        "autosumm-replace": "পৄষ্ঠাখনক \"$1\"ৰে সলনি কৰা হ'ল",
-       "autoredircomment": "[[$1]]-à¦\95 পুনৰ্নিৰ্দেশ কৰা হ'ল",
+       "autoredircomment": "[[$1]]-লà§\88 পুনৰ্নিৰ্দেশ কৰা হ'ল",
        "autosumm-new": "\"$1\" দি পৃষ্ঠা সৃষ্টি কৰা হ'ল",
        "lag-warn-normal": "$1 {{PLURAL:$1|ছেকেণ্ড|ছেকেণ্ড}} তকৈ নতুন পৰিৱৰ্তনসমূহ এই তালিকাত দেখুওৱা নহবও পাৰে।",
        "lag-warn-high": "উচ্চ ডাটাবেইচ চাৰ্ভাৰ পলমৰ বাবে, $1 {{PLURAL:$1|ছেকেণ্ড|ছেকেণ্ড}} তকৈ নতুন পৰিৱৰ্তনসমূহ এই তালিকাত দেখুওৱা নহবও পাৰে।",
index 89dcb75..e0a1d6d 100644 (file)
        "listgrouprights-namespaceprotection-restrictedto": "Правы, якія дазваляюць удзельніку рэдагаваць",
        "trackingcategories": "Катэгорыі, якія патрабуюць увагі",
        "trackingcategories-summary": "На гэтай старонцы пералічаныя катэгорыя, які патрабуюць увагі і якія аўтаматычна запаўняюцца праграмным забесьяпчэньнем MediaWiki. Іх назвы могуць быць зьмененыя рэдагаваньнем сыстэмных паведамленьняў у прасторы назваў {{ns:8}}.",
+       "trackingcategories-msg": "Катэгорыя, якая патрабуе ўвагі",
+       "trackingcategories-name": "Назва паведамленьня",
+       "trackingcategories-desc": "Крытэр уключэньня ў катэгорыю",
+       "noindex-category-desc": "Гэтая старонка не індэксуецца пошукавымі робатамі, таму што на ёй маецца магічнае слова <code><nowiki>__NOINDEX__</nowiki></code>, а старонка знаходзіцца ў прасторы назваў, дзе дазволны гэты сьцяг.",
+       "index-category-desc": "На старонцы знаходзіцца магічнае слова <code><nowiki>__INDEX__</nowiki></code> (пры гэтым старонка знаходзіцца ў прасторы назваў, дзе дазволены гэты сьцяг), таму яна індэксуецца пошукавымі робатамі ў тых выпадках, калі звычайна гэтага не адбываецца.",
        "mailnologin": "Няма адрасу атрымальніка",
        "mailnologintext": "Вам неабходна [[Special:UserLogin|ўвайсьці ў сыстэму]] і мець пацьверджаны адрас электроннай пошты ў Вашых [[Special:Preferences|наладах]], каб дасылаць лісты іншым удзельнікам.",
        "emailuser": "Даслаць ліст",
index 7b8fc11..212bd56 100644 (file)
        "permalink": "བརྟན་འཇགས་ཀྱི་སྦྲེལ་མཐུད།",
        "print": "དཔར་བ།",
        "view": "ལྟ་བ།",
+       "view-foreign": "$1 ལ་གཟིགས་རོགས།",
        "edit": "རྩོམ་སྒྲིག",
+       "edit-local": "ས་ཁུལ་གྱི་འགྲེལ་བརྗོད་ལ་རྩོམ་སྒྲིག།",
        "create": "གསར་སྐྲུན།",
+       "create-local": "ས་ཁུལ་འགྲེལ་བརྗོད་གསར་སྐྲུན།",
        "editthispage": "ངོས་འདི་བཟོ་བཅོས་བྱེད་པ།",
        "create-this-page": "ཤོག་ངོས་འདི་སྐྲུན་པ།",
        "delete": "སུབས།",
        "jumptonavigation": "ཕྱོགས་ཁྲིད།",
        "jumptosearch": "འཚོལ།",
        "view-pool-error": "དགོངས་པ་མ་ཚོམས་རོགས། སྤྱོད་མི་མང་དག་ཞིག་གི་ཤོག་ངོས་འདིར་གཟིགས་ཞིང་འདུག་པས། གནས་སྐབས་རིང་ཞབས་ཞུ་འཕྲུལ་ཆས་ཐེག་བརྒལ་བྱས་འདུག། \nཤོག་ངོས་འདིར་བསྐྱར་དུ་མ་གཟིགས་གོང་ཡུད་ཙམ་རིང་སྒུག་རོགས་གནང། $1",
+       "generic-pool-error": "དགོངས་པ་མ་ཚོམས་རོགས། སྤྱོད་མི་མང་དག་ཞིག་གི་ཡོངས་ཁུངས་འདིར་གཟིགས་ཞིང་འདུག་པས། གནས་སྐབས་རིང་ཞབས་ཞུ་འཕྲུལ་ཆས་ཐེག་བརྒལ་བྱས་འདུག། ཡོངས་ཁུངས་འདིར་བསྐྱར་དུ་མ་གཟིགས་གོང་ཡུད་ཙམ་ཞིག་ངང་སྒུག་གནང་རོགས།།",
        "pool-timeout": "ཟྭ་རྒྱག་སྒུག་ཡུན་གྱི་དུས་ཚོད་རྫོགས་སོང།",
        "pool-queuefull": "སྤྱི་པའི་ཐེབས་རྩའི་བསྟར་པ་ཁེངས་འདུག།",
        "pool-errorunknown": "ངོས་མ་ཟིན་པའི་ནོར་འཁྲུལ།",
+       "pool-servererror": "($1) ,ཐུན་མོང་ཡ་ལན་གི་ཞབས་ཞུ་གནས་སྐབས་རིང་མིན་འདུག།",
        "aboutsite": "{{SITENAME}}ཡི་སྐོར།",
        "aboutpage": "Project:སྐོར།",
        "copyright": "དེ་མིན་གྱི་མཆན་འགྲེལ་ཡོད་ན་མ་གཏོགས། དྲ་བའི་ནང་དོན་ $1 སྟེང་དུ་ཡོད།",
        "ok": "འགྲིག",
        "retrievedfrom": "\"$1\"ལས་སླར་རྙེད་སོང།",
        "youhavenewmessages": "ཁྱེད་ལ་འཕྲིན་གསར་$1($2)ཡོད།",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|ཁྱེད་རང་ལ་}}{{PLURAL:$3|སྤྱོད་མི་གཞན་|$3 སྤྱོད་མི་}}($2)ནས་ $1 འདུག།།",
        "youhavenewmessagesmanyusers": "ཁྱེད་ལ་ $1 སྤྱོད་མི་མང་པོ་ཞིག་ནས་ ($2)འདུག།",
        "newmessageslinkplural": "{{PLURAL:$1|འཕྲིན་ཐུང་གསར་པ་ཞིག་|999= འཕྲིན་ཐུང་གསར་པ།}}",
        "newmessagesdifflinkplural": "མཐའ་མའི་ {{PLURAL:$1|འགྱུར་བཅོས།|999=འགྱུར་བཅོས།}}",
        "enterlockreason": "བཀག་སྡོམ་བྱས་དགོས་རྐྱེན་བཀོད་རོགས དེ་མིན་བཀག་སྡོམ་འདི་དུས་ཚོད་ནམ་ཞིག་ལ་བཀྲོལ་རྒྱུ་ཡིན་མིན་སོགས་བཀོད་རོགས།",
        "readonlytext": "རྨང་གཞི་གྲངས་མཛོད་འདི་གནས་སྐབས་བཀག་སྡོམ་བྱས་འདུག། ཕལ་ཆེར་རྨང་གཞི་གྲངས་མཛོད་འདི་ཉར་འཚག་བྱད་བཞིན་འདུག། \n$1 རྒྱུ་རྐྱེན་འདི་འོག་དོ་དམ་པས་བཀག་སྡོམ་བྱས་འདུག།",
        "missing-article": "གཞི་གྲངས་མཛོད་ནང་ཤོག་ངོས་ཀྱི་ཡི་གེ་བཙལ་ཐུབ་ཀྱི་མི་འདུག་པས། \"$1\" $2 \nཕལ་ཆེར་འདི་གཤམ་ཀྱི་འགོག་རྐྱེན་ལོ་རྒྱུས་སུབ་པ་འམ་དུས་ཡོལ་ཀྱི་ཁྱད་པར་སོགས་ཀྱི་རྒྱུ་རྐྱེན་ཡིན།\nགལ་སྲིད་དེ་ལྟར་མིན་ཚེ། ཕལ་ཆེར་ཁྱེད་ཀྱི་ནོར་སྐྱོན་འཙལ་རྙེད་བྱང་བས།  [[Special:ListUsers/sysop|administrator]], དྲ་རྒྱའི་ས་ཚིགས་འདི་ཐོག་ཞུ་ཡིག་འབུལ་གནང་ཡོང་བ་མཁྱེན།",
+       "readonly_lag": "གཞི་གྲངས་མཛོད་རང་འགུལ་གི་སྒོ་ཐེབས་འདུག།",
        "internalerror": "ནང་ལོག་ནོར་སྐྱོན།",
        "internalerror_info": "ནང་ལོགས་ནོར་སྐྱོན། $1",
        "filecopyerror": "\"$1\" \"$2\"ལ་འདྲ་བཤུ་བྱེད་མ་ཐུབ།",
        "cannotdelete": "ཤོག་ངོས་འམ་ཡིག་ཆ་ \"$1\" འདི་སུབས་ཐུབ་མ་ཀྱི་མིན་འདུག། ཕལ་ཆེར་གཞན་ཞིག་གི་སུབས་ཚར་འདུག།",
        "cannotdelete-title": "ཤོག་ངོས་ \"$1\" འདི་སུབས་ཐུབ་མ་སོང།",
        "delete-hook-aborted": "འབྲི་སུབས་འདི་བཀག་འགོག་བྱས་སོང། རྒྱུ་རྐྱེན་བྲིས་མིན་འདུག།",
+       "no-null-revision": "\"$1\" ཤོག་ངོས་འདིར་བསྐྱར་བཅོས་གསར་སྐྲུན་བྱེད་ཐུབ་མ་སོང།",
        "badtitle": "ཁ་བྱང་སྐྱོན་ཅན།",
+       "badtitletext": "རེ་སྐུལ་བྱས་པའི་ཤོག་ངོས་འདི་སྟོང་པའམ་ཡང་ན་ཁ་བྱང་ནོར་འདུག། ཁ་བྱང་འབྲི་སྟངས་ནོར་ཡོད་སྲིད།",
+       "perfcached": "གཤམ་གི་གྲངས་ཐོ་འདི་སྦས་སྐུངས་རེད་འདུག་པས་དུས་ཐོག་གསར་འཇོག་བྱེད་མི་ཐུབ། མང་མཐར་ཡང་ {{PLURAL:$1|གྲུབ་འབྲས་}} ཙམ་སྦས་སྐུངས་ནང་འདུག།",
+       "perfcachedts": "གཤམ་གི་གྲངས་ཐོ་འདི་སྦས་སྐུངས་རེད་འདུག། མཐའ་མའི་དུས་ཐོག་གསར་འཇོག་$1 མང་མཐར་ཡང་ {{PLURAL:$1|གྲུབ་འབྲས་}} ཙམ་སྦས་སྐུངས་ནང་འདུག།",
        "viewsource": "ཁོངས་ལ་ལྟ་བ།",
        "actionthrottled": "བྱ་འགུལ་ཁེགས་སོང་།",
        "namespaceprotected": "ཁྱེད་ལ་'''$1''' མིང་གནས་ནང་གི་ཤོག་ངོས་བཟོ་བཅོས་ཀྱི་ཆོག་མཆན་མེད།",
index d1458cc..4bc60d0 100644 (file)
@@ -13,7 +13,7 @@
        "tog-underline": "КӀел сиз хьакха хьажорган:",
        "tog-hideminor": "Къайладаха кигийра нисдарш оц могӀама керла хийцамехь",
        "tog-hidepatrolled": "Къайладаха гӀаролладина нисдарш оц могӀама керла нисдаршкахь",
-       "tog-newpageshidepatrolled": "Къайлайаха гlароллайина агlонаш оц могlама керла агlонашкахь",
+       "tog-newpageshidepatrolled": "Къайлаяха гӀароллайина агӀонаш оьцу могӀама керла агӀонашкахь",
        "tog-extendwatchlist": "Шорбина тlехьажарна могlам, ша беригге а хийцамаш чубогlуш, тlяхьабина боцурш а",
        "tog-usenewrc": "Лелабе дика могӀам керла чу хийцамашна (оьшу JavaScript)",
        "tog-numberheadings": "Ша шех хlитто терахь корташна",
        "november-date": "Ноябрь $1",
        "december-date": "Декабрь $1",
        "pagecategories": "{{PLURAL:$1|1=Категори|Категореш}}",
-       "category_header": "Агlонаш оц категоречохь «$1»",
+       "category_header": "АгӀонаш категоречохь «$1»",
        "subcategories": "Бухаркатегореш",
        "category-media-header": "Файлаш оцу категори чохь «$1»",
        "category-empty": "''ХӀара категори хӀинца йаьсса ю.''",
        "jumpto": "Дехьа гӀо:",
        "jumptonavigation": "Навигаци",
        "jumptosearch": "лаха",
-       "view-pool-error": "Бехк цабиллар доьха, хӀинц гӀулкхдириг йоьттина ю.\nКаьчна дуккха дехарш хӀокху агӀонтӀе хьажарца.\nДехар до, собардеш а юха хьажа хӀокху агӀонтӀе жим тӀаьхьо.\n\n$1",
+       "view-pool-error": "Бехк цабиллар доьха, хӀинц сервераш йоьттина ю.\nКаьчна дуккха дехарш хӀокху агӀонтӀе хьажарца.\nДехар до, собардеш а юха хьажа хӀокху агӀонтӀе жим тӀаьхьо.\n\n$1",
+       "generic-pool-error": "Бехк цабиллар доьха, хӀинц сервер йоьттина ю.\nКаьчна дуккха дехарш хӀокху агӀонтӀе хьажарца.\nДехар до, собардеш а юха хьажа хӀокху агӀонтӀе жим тӀаьхьо.",
        "pool-timeout": "Блоктоха еза хан тӀех йаьлла",
        "pool-queuefull": "Дехаршан чоь юьззина ю",
        "pool-errorunknown": "Дойзаш доцу гlалат",
        "statistics-header-users": "Декъашхойн жамӀа",
        "statistics-header-hooks": "Кхин статистика",
        "statistics-articles": "Яззамаш",
-       "statistics-pages": "Агlонаш",
+       "statistics-pages": "АгӀонаш",
        "statistics-pages-desc": "Массо вики агlонаш, дийцаре агlонашцани, дlасахьаждарш а кхин дерш.",
        "statistics-files": "Чуйаьхна файлаш",
        "statistics-edits": "Нисдаран дукхалла {{grammar:genitive|{{SITENAME}}}} дlа йолайаларца",
        "listusers-desc": "Харжа къезиг хиларца",
        "usereditcount": "$1 {{PLURAL:$1|нисдар|нисдарш}}",
        "usercreated": "{{GENDER:$3|дӀавазвелла|дӀаязелла}} $1 $2",
-       "newpages": "Керла агlонаш",
+       "newpages": "Керла агӀонаш",
        "newpages-username": "Декъашхо:",
        "ancientpages": "Яззамаш оцу терахьца тӀаьххьара тадар дина долу",
        "move": "ЦӀе хийца",
        "allarticles": "Массо агӀонаш",
        "allinnamespace": "Массо агlонаш оцу цlери анахь «$1»",
        "allpagessubmit": "Кхочушдé",
-       "allpagesprefix": "Лаха агlонаш, дlайуьлалуш йолу:",
+       "allpagesprefix": "Лаха агӀонаш, дӀайолалуш йолу:",
        "allpagesbadtitle": "Цамагош йолу агӀон цӀе. Коьрта могӀан юкъах ю юкъарвики меттанашан юкъе тӀечӀагӀйина йолу хьаьрк йа магийна доцу оцу коьрта моӀанца символаш йа кхин.",
-       "allpages-bad-ns": "{{SITENAME}} кху чохь ана цlераш яц «$1».",
+       "allpages-bad-ns": "{{SITENAME}} кху чохь ана цӀераш яц «$1».",
        "allpages-hide-redirects": "Къайлаяха дӀасахьажийнарш",
        "cachedspecial-refresh-now": "Хьажа тӀехьарчу версега.",
        "categories": "Категореш",
        "move-talk-subpages": "ЦӀе хийца бухара агӀонаши а агӀонашан дийцаре а ($1  кхаччалц)",
        "movepage-page-exists": "Агӏо $1 йолуш ю цундела и ша юху дӏаязъян йиш яц.",
        "movepage-page-moved": "АгӀона $1 цӀе хийцина → $2.",
-       "movelogpage": "Цlераш хийцаран тептар",
+       "movelogpage": "ЦӀераш хийцаран тептар",
        "movelogpagetext": "Лахахьа гойтуш ю цӀе хийцина агӀонаш.",
        "movesubpage": "{{PLURAL:$1|1=Бухара агӀо|Бухара агӀонаш}}",
        "movesubpagetext": "ХӀокху агӀона $1 {{PLURAL:$1|1=бухара агӀо ю|бухара агӀонаш ю}}.",
        "specialpages": "Леррина агlонаш",
        "specialpages-note": "* Гуттарлера белха агlонаш.\n* <strong class=\"mw-specialpagerestricted\">Кlеззиг таронаш йолу леррина агlонаш.</strong>",
        "specialpages-group-maintenance": "Жамlаш гlирса хьашташ кхочушдар",
-       "specialpages-group-other": "Ð\9aÑ\85ин Ð³lÑ\83ллакÑ\85ан Ð°Ð³lонаш",
+       "specialpages-group-other": "Ð\9aÑ\85ин Ð±ÐµÐ»Ñ\85ан Ð°Ð³Ó\80онаш",
        "specialpages-group-login": "Системин чугӀо / дӀаяздар кхолла",
        "specialpages-group-changes": "Керла нисдарш а тéптарш",
        "specialpages-group-media": "Жамlаш оцу медиа-гlирсашан а чуяхарш",
        "specialpages-group-users": "Декъашхой а бакъонаш",
-       "specialpages-group-highuse": "Уггаре дукха лелайо агlонаш",
+       "specialpages-group-highuse": "Уггаре дукха лелайо агӀонаш",
        "specialpages-group-pages": "АгӀонийн могӀанаш",
        "specialpages-group-pagetools": "ГӀирсаш оцу агӀонашан",
        "specialpages-group-wiki": "Хаамаш а гӀирсаш а",
-       "specialpages-group-redirects": "Дlасахьажош йолу гlуллакхан агlонаш",
+       "specialpages-group-redirects": "ДӀасахьажош йолу белхан агӀонаш",
        "specialpages-group-spam": "Спаман дуьхьала гӀирсаш",
        "blankpage": "Йаьсса агlо",
        "tags": "Болш болу хийцаман къастам",
index 2c3bf61..30b1cb3 100644 (file)
        "vector-action-move": "بیگوازەوە",
        "vector-action-protect": "بیپارێزە",
        "vector-action-undelete": "سڕینەوە بگەڕێنەوە",
-       "vector-action-unprotect": "پاراستنی بگۆڕە",
+       "vector-action-unprotect": "پاراستن بگۆڕە",
        "vector-view-create": "دروستکردن",
        "vector-view-edit": "دەستکاریی بکە",
        "vector-view-history": "مێژووەکەی ببینە",
        "views": "بینینەکان",
        "toolbox": "ئامرازەکان",
        "userpage": "بینینی پەڕەی بەکارھێنەر",
-       "projectpage": "په‌ڕه‌ی پرۆژه‌ نیشانبده‌",
+       "projectpage": "پەڕەی پرۆژە نیشان بدە",
        "imagepage": "پەڕەی پەڕگە نیشان بدە",
-       "mediawikipage": "په‌ڕه‌ی په‌یام نیشانبده‌",
+       "mediawikipage": "پەڕەی پەیام نیشان بدە",
        "templatepage": "په‌ڕه‌ی داڕێژە ببینە‌",
        "viewhelppage": "په‌ڕه‌ی یارمه‌تی نیشانبده‌",
        "categorypage": "په‌ڕه‌ی هاوپۆل نیشانبده‌",
        "viewsourceold": "سەرچاوەکەی ببینە",
        "editlink": "دەستکاری",
        "viewsourcelink": "سەرچاوەکەی ببینە",
-       "editsectionhint": "دەستکاری کردنی بەشی: $1",
+       "editsectionhint": "دەستکاریکردنی بەش: $1",
        "toc": "پێرست",
        "showtoc": "نیشانیبدە",
        "hidetoc": "بیشارەوە",
-       "collapsible-collapse": "کۆیبکەوە",
-       "collapsible-expand": "بڵاویبکەوە",
+       "collapsible-collapse": "کۆی بکەوە",
+       "collapsible-expand": "بڵاوی بکەوە",
        "thisisdeleted": "$1 نیشان بدە یا بھێنەوە؟",
        "viewdeleted": "$1 نیشان بده‌؟",
        "restorelink": "{{PLURAL:$1|یەک گۆڕانکاریی سڕاو|$1 گۆڕانکاریی سڕاو}}",
        "nstab-category": "پۆل",
        "nosuchaction": "کردارێک بەم شێوە نییە",
        "nosuchactiontext": "ئەو چالاکییەی لە لایەن بەستەرەوە دیاریکراوە ناتەواوە.\nلەوانەیە بە هەڵە بەستەرەکەت نووسیبێت، یان بەستەرێکی هەڵەی بە دواوە بێت.\nلەوانەیە ئەمە نیشانەی هەڵەیەک بێت لەو نەرمەکاڵایەی کە بەکاردێت لە لایەن {{SITENAME}}.",
-       "nosuchspecialpage": "په‌ڕه‌ی تایبه‌تی له‌و شێوه‌یه‌ نییه‌",
+       "nosuchspecialpage": "پەڕەی تایبەتی ئاوا بوونی نییە",
        "nospecialpagetext": "<strong>پەڕەیەکی تایبەت دەخوازیت کە بوونی نیە.</strong>\n\nلیستێکی پەڕە تایبەتە دروستەکان لە [[Special:SpecialPages|{{int:specialpages}}]] لە بەردەست‌دایە.",
        "error": "هه‌ڵه‌",
        "databaseerror": "ھەڵەی بنکەدراوه",
        "enterlockreason": "هۆیەک بۆ قوفڵ‌کردنەکە بنووسە کە  تێیدا کاتی کردنەوەی قۆفڵەکە باس کرابێت",
        "readonlytext": "بنکەدراوەکە لەم کاتەدا  لەبەر چاکسازی ئاسایی بۆ نوسینی نوێ و دەستکاری قوفڵ کراوه. دوای ئەوە ئەگرێتەوە بۆ ئاستی خۆی.\n\nئەو بەڕێوبەرەی کە قوفڵی کردووه ئەم ڕوون‌کردنەوەی نووسیوە : $1",
        "missing-article": "داتابەیسەکە نەیتوانی دەقی پەڕەیەک بەناوی «$1» $2  بدۆزێتەوە کە دەبوا بیدۆزیبایەتەوە.\n\nئەمە زیاتر لە بەدواچوونی بەستەری جیاوازی یان مێژووی کۆنی پەڕەیەکی سڕدراو ڕوودەدات.\n\nئەگەر وا نەبێت، ئەوا ڕەنگە گرفتێکت لەم نەرمامێرەدا دۆزیبێتەوە.\nتکایە ئەمە بە ئاماژەدان بە ناونیشانی URLـەکەیەوە بە [[Special:ListUsers/sysop|بەڕێوبەرێک]] ڕاپۆرت بدە.",
-       "missingarticle-rev": "(Ù¾Û\8cاچوونەوە#: $1)",
+       "missingarticle-rev": "(Ù¾Û\8eداچوونەوە#: $1)",
        "missingarticle-diff": "(جیاوازی: $1، $2)",
        "readonly_lag": "بنكه‌دراوه‌كه‌ به‌شێوه‌ی خۆكار به‌ندكراوه‌، له‌كاتێكدا بنكه‌دراوه‌ی ڕاژه‌كاره‌كه‌ ڕۆڵی له‌خۆگرتن ده‌گێڕێت",
        "internalerror": "ھەڵەی ناوخۆیی",
        "cannotdelete-title": "ناکرێ پەڕەی «$1» بسڕدرێتەوە",
        "delete-hook-aborted": "سڕینەوە لە لایەن قولاپەوە ھەڵوەشێنرایەوە.\nھۆکارەکەی لەبەر دەست نییە.",
        "no-null-revision": "نەتوانرا پێداچوونەوەی خاڵیی بۆ پەڕەی \"$1\" درووست بکرێت",
-       "badtitle": "ناونیشانی خراپ",
+       "badtitle": "سەردێڕی خراپ",
        "badtitletext": "سەرناوی پەڕەی داواکراو بەتاڵە، واڵایە یان سەرناوێکی نێوان-زمانی یان نێوانی-ویکییە کە بە شێوەیەکی ھەڵە بەستەری بۆ دراوە.\nڕەنگە یەک یان چەند کاراکتەری تێدا بێت کە ناکرێت لە سەرناوەکاندا بەکار بھێنرێت.",
        "perfcached": "داتای خوارەوە پاشەکەوتکراوەیە و لەوانەیە بەڕۆژنەکرابێتەوە. لانی زۆر {{PLURAL:$1|یەک ئەنجام|$1 ئەنجام}} لە cacheدا لەبەردەستدایە.",
        "perfcachedts": "داتای خوارەوە cacheکراوە و دوایین جار لە $1 نوێ کراوەتەوە. لە cacheدا لانی زۆر {{PLURAL:$4|یەک ئەنجام|$4 ئەنجام}} لەبەردەستە.",
        "passwordreset-username": "ناوی بەکارھێنەری:",
        "passwordreset-domain": "پاوان:",
        "passwordreset-capture": "بینینی ئیمەیڵی ئەنجام؟",
-       "passwordreset-email": "ئەدرەسی ئیمەیڵ:",
+       "passwordreset-email": "ناونیشانی ئیمەیل:",
        "passwordreset-emailtitle": "وردەکارییەکانی ھەژمار لە {{SITENAME}}",
        "passwordreset-emailtext-ip": "‫کەسێک (لەوانەیە خۆت، بە ناونیشانی ئایپیی $1) داوای ڕیسێتکردنەوەی تێپەڕوشەکەت لە {{SITENAME}}دا ($4) کردووە. {{PLURAL:$3|ھەژماری بەکارھێنەریی ژێرەوە پەیوەندیی ھەیە|ھەژمارە بەکارھێنەرییەکانی ژێرەوە پەیوەندییان ھەیە}} بەم ناونیشانەی ئیمەیلەوە:\n\n$2\n\n{{PLURAL:$3|ئەم تێپەڕوشە کاتییە|ئەم تێپەڕوشە کاتییانە}} لە {{PLURAL:$5|ڕۆژێک|$5 ڕۆژ}}دا بەسەردەچێت.\nدەبێ بچیتە ژوورەوە و ھەر ئێستا تێپەڕوشەیەکی نوێ ھەڵبژێریت. ئەگەر کەسێکی تر ئەم داواکارییەی کردووە،\nیان ئەگەر تێپەڕوشە سەرەتاییەکەت ھاتووەتەوە بیرت و ئیتر ناتەوێ بیگۆڕی، دەتوانی گوێ بەم پەیامە نەدەیت و ھەر لە تێپەڕوشە کۆنەکەت کەڵک وەربگریت.",
        "passwordreset-emailtext-user": "‫بەکارھێنەر $1 لە {{SITENAME}} ڕیسێتکردنەوەی تێپەڕوشەکەت لە {{SITENAME}}دا ($4) کردووە. {{PLURAL:$3|ھەژماری بەکارھێنەریی ژێرەوە پەیوەندیی ھەیە|ھەژمارە بەکارھێنەرییەکانی ژێرەوە پەیوەندییان ھەیە}} بەم ناونیشانەی ئیمەیلەوە:\n\n$2\n\n{{PLURAL:$3|ئەم تێپەڕوشە کاتییە|ئەم تێپەڕوشە کاتییانە}} لە {{PLURAL:$5|ڕۆژێک|$5 ڕۆژ}}دا بەسەردەچێت.\nدەبێ بچیتە ژوورەوە و ھەر ئێستا تێپەڕوشەیەکی نوێ ھەڵبژێریت. ئەگەر کەسێکی تر ئەم داواکارییەی کردووە، یان ئەگەر تێپەڕوشە سەرەتاییەکەت ھاتووەتەوە بیرت و ئیتر ناتەوێ بیگۆڕی، \nدەتوانی گوێ بەم پەیامە نەدەیت و ھەر لە تێپەڕوشە کۆنەکەت کەڵک وەربگریت.",
        "passwordreset-emailsent": "ئیمەیلێکی ڕیسێتکردنەوەی تێپەڕوشە نێردرا.",
        "passwordreset-emailsent-capture": "ئیمەیلێکی ڕیسێتکردنەوەی تێپەڕوشە نێردرا، کە لە ژێرەوە نیشان دراوە.",
        "passwordreset-emailerror-capture": "ئیمەیلێکی ڕیسێتکردنەوەی تێپەڕوشە نێردرا، کە لە ژێرەوە نیشان دراوە، بەڵام ناردنەکەی بۆ {{GENDER:$2|بەکارھێنەر}} سەرکەوتوو نەبوو: $1",
-       "changeemail": "ئەدرەسی ئیمەیڵ بگۆڕە",
-       "changeemail-header": "ئەدرەسی ئیمەیلی ھەژمار بگۆڕە",
+       "changeemail": "ناونیشانی ئیمەیل بگۆڕە",
+       "changeemail-header": "ناونیشانی ئیمەیلی ھەژمار بگۆڕە",
        "changeemail-no-info": "بۆ گەیشتنی راستەوخۆ بەم پەڕە دەبێت بچیتە ژوورەوە.",
        "changeemail-oldemail": "ئەدرەسی ئیمەیڵی ئێستا:",
-       "changeemail-newemail": "ئەدرەسی ئیمەیڵی نوێ:",
+       "changeemail-newemail": "ناونیشانی ئیمەیلی نوێ:",
        "changeemail-none": "(ھیچ)",
        "changeemail-password": "تێپەڕوشەکەت لە {{SITENAME}}:",
-       "changeemail-submit": "ئەمەیڵ بگۆڕە",
+       "changeemail-submit": "ئەمەیل بگۆڕە",
        "changeemail-cancel": "ھەڵیوەشێنەوە",
        "bold_sample": "دەقی ئەستوور",
        "bold_tip": "دەقی ئەستوور",
        "cantcreateaccount-text": "درووست‌کردنی هەژمارە بۆ ناونیشانی ئای‌پی ('''$1''') لە لایەن [[User:$3|$3]] داخراوە.<br /><br />\n$3 هۆکاری \"$2\" خستوەتەڕوو",
        "viewpagelogs": "لۆگەکانی ئەم پەڕەیە ببینە",
        "nohistory": "هیچ مێژوویەکی دەستکاری نییە بۆ ئەم پەڕەیە.",
-       "currentrev": "دÙ\88اÛ\8cÛ\8cÙ\86 Ù¾Û\8cاچوونەوە",
+       "currentrev": "دÙ\88اÛ\8cÛ\8cÙ\86 Ù¾Û\8eداچوونەوە",
        "currentrev-asof": "دوایین پێداچوونەوەی $1",
-       "revisionasof": "Ù\88Û\95Ú© Ù¾Û\8cاچوونەوەی $1",
+       "revisionasof": "Ù\88Û\95Ú© Ù¾Û\8eداچوونەوەی $1",
        "revision-info": "پێداچوونەوی $1 لە لایەن $2",
        "previousrevision": "→پیاچوونەوەی کۆنتر",
-       "nextrevision": "Ù¾Û\8cاچوونەوەی نوێتر←",
-       "currentrevisionlink": "Ù¾Û\8cاچوونەوەی ئێستا",
+       "nextrevision": "Ù¾Û\8eداچوونەوەی نوێتر←",
+       "currentrevisionlink": "Ù¾Û\8eداچوونەوەی ئێستا",
        "cur": "ئێستا",
        "next": "پاش",
        "last": "پێشوو",
        "mypreferences": "ھەڵبژاردەکان",
        "prefs-edits": "ژمارەی گۆڕانکارییەکان:",
        "prefs-skin": "پێستە",
-       "skin-preview": "پێش بینین",
+       "skin-preview": "پێشبینین",
        "datedefault": "ھەڵنەبژێردراو",
        "prefs-labs": "کەرەسەکانی تاقیگەکان",
        "prefs-user-pages": "پەڕە بەکارھێنەرییەکان",
        "prefs-personal": "پرۆفایلی بەکارھێنەر",
        "prefs-rc": "دوایین گۆڕانکارییەکان",
-       "prefs-watchlist": "Ù\84Û\8cستی چاودێری",
+       "prefs-watchlist": "Ù¾Û\8eرستی چاودێری",
        "prefs-watchlist-days": "ژمارەی ڕۆژەکان بۆ نیشاندان لە لیستی چاودێری:",
        "prefs-watchlist-days-max": "ئەوپەڕی $1 {{PLURAL:$1|ڕۆژە|ڕۆژە}}",
        "prefs-watchlist-edits": "ئەوپەڕی ژمارەی گۆڕانکارییەکان بۆ نیشاندان لە لیستی چاودێریی پەرەپێدراو:",
        "timezoneuseoffset": "دیکە (ناتەواویەکان دیاری بکە)",
        "servertime": "کاتی ڕاژەکار:",
        "guesstimezone": "لە وێبگەڕەکە بیگرە",
-       "timezoneregion-africa": "ئافریقا",
+       "timezoneregion-africa": "ئەفریقا",
        "timezoneregion-america": "ئەمریکا",
        "timezoneregion-antarctica": "ئانتارکتیکا",
        "timezoneregion-arctic": "ئارکتیک",
        "timezoneregion-pacific": "ئۆقیانووسی ئارام",
        "allowemail": "ڕێگە بدە بە بەکارھێنەرانی تر کە ئیمەیلم بۆ بنێرن",
        "prefs-searchoptions": "گەڕان",
-       "prefs-namespaces": "بۆشاییناوەکان",
+       "prefs-namespaces": "بۆشایی ناوەکان",
        "defaultns": "دەنا لەم بۆشاییی ناوانەدا بگەڕێ:",
        "default": "بنچینەیی",
        "prefs-files": "پەڕگەکان",
        "userrights-changeable-col": "ئەو گرووپانەی دەتوانی بیگۆڕی",
        "userrights-unchangeable-col": "ئەو گرووپانەی ناتوانی بیگۆڕی",
        "group": "گرووپ:",
-       "group-user": "بەکارهێنەران",
+       "group-user": "بەکارھێنەران",
        "group-autoconfirmed": "بەکارھێنەرانی پەسندکراوی خۆگەڕ",
        "group-bot": "بۆتەکان",
        "group-sysop": "بەڕێوەبەران",
        "right-siteadmin": "داخستن و کردنەوەی بنکەدراو",
        "right-override-export-depth": "هەناردنی لاپەڕەکان کە لاپەڕەکانی بەستەر پێ‌دراو تا قووڵایی 5 لەخۆ بگرێت",
        "right-sendemail": "ناردنی ئیمەیل بۆ بەکارھێنەرانی تر",
+       "right-passwordreset": "دیتنی ئیمەیلەکانی ڕێکخستنەوەی تێپەڕوشە",
        "newuserlogpage": "لۆگی دروستکردنی بەکارھێنەر",
        "newuserlogpagetext": "ئەمە لۆگێکی دروستکردنی بەکارھێنەرە.",
        "rightslog": "لۆگی مافەکانی بەکارھێنەر",
        "rightslogtext": "ئەمە لۆگی دەستکاری مافەکانی بەکار‌هێنەرە.",
        "action-read": "خوێندنەوەی ئەم پەڕە",
        "action-edit": "دەستکاریی ئەم پەڕەیە",
-       "action-createpage": "درووست‌کردنی لاپەڕە",
-       "action-createtalk": "درووست‌کردنی لەپەڕەکانی وتووێژ",
+       "action-createpage": "دروستکردنی پەڕەکان",
+       "action-createtalk": "دروستکردنی پەڕەکانی وتووێژ",
        "action-createaccount": "درووست‌کردنی هەژمارەی ئەم بەکارهێنەرە",
        "action-minoredit": "نیشان‌کردنی ئەم دەستکاریە وەک بچووک",
-       "action-move": "گواستنەوەی ئەم پەڕە",
+       "action-move": "گواستنەوەی ئەم پەڕەیە",
        "action-move-subpages": "گواستنەوەی ئەم پەڕەیە و ژێرپەڕەکانی",
-       "action-move-rootuserpages": "Ú¯Ù\88استÙ\86Û\95Ù\88Û\95Û\8c Ø¨Ù\86Û\95رÛ\95تÛ\8c Ù\84اپÛ\95Ú\95Û\95کاÙ\86Û\8c Ø¨Û\95کارÙ\87ێنەر",
+       "action-move-rootuserpages": "Ú¯Ù\88استÙ\86Û\95Ù\88Û\95Û\8c Ø¨Ù\86Û\95رÛ\95تÛ\8c Ù¾Û\95Ú\95Û\95کاÙ\86Û\8c Ø¨Û\95کارھێنەر",
        "action-movefile": "ئەم پەڕگەیە بگوازەوە",
        "action-upload": "ئەم پەڕەیە بار بکە",
        "action-reupload": "سەرنووسینی ئەم پەڕگە وا هەیە",
        "action-upload_by_url": "ئەم پەرگەیە لە ناونیشانێکی ئینتەرنێتی بار بکە",
        "action-writeapi": "کەڵک وەر گرتن لە نووسینی API",
        "action-delete": "ئەم پەڕەیە بسڕەوە",
-       "action-deleterevision": "سÚ\95Û\8cÙ\86Û\8c Ø¦Û\95Ù\85 Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88ە",
-       "action-deletedhistory": "دÛ\8cتÙ\86Û\8c Ù\85Û\8eÚ\98Ù\88Ù\88Û\8c Ø³Ú\95اÙ\88Û\95Û\8c Ø¦Û\95Ù\85 Ù\84اپÛ\95Ú\95ە",
+       "action-deleterevision": "سÚ\95Û\8cÙ\86Û\95Ù\88Û\95Û\8c Ø¦Û\95Ù\85 Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95Û\8cە",
+       "action-deletedhistory": "دÛ\8cتÙ\86Û\8c Ù\85Û\8eÚ\98Ù\88Ù\88Û\8c Ø³Ú\95اÙ\88Û\95Û\8c Ø¦Û\95Ù\85 Ù¾Û\95Ú\95Û\95Û\8cە",
        "action-browsearchive": "گەران لە نێو لاپەڕە سڕاوەکان",
        "action-undelete": "گەڕانەوەی ئەم لاپەڕە",
        "action-suppressrevision": "چاوپێداخشان و هاردنوەی ئەم لاپەڕە شاراوە",
        "action-suppressionlog": "دیتنی ئەم لۆگە ئەهلیە",
        "action-block": "بەربەست کردنی ئەم بەکارهێنەرە بۆ دەستکاری‌کردن",
-       "action-protect": "گۆڕانی ئاستی پارێزراوی بۆ ئەم لاپەڕە",
+       "action-protect": "گۆڕینی ئاستی پاراستن بۆ ئەم پەڕەیە",
        "action-rollback": "گەڕاندنەوەی خێرای دەستکاریەکانی دوایین بەکارھێنەر کە پەڕەیەکی دیاریکراوی دەستکاری کردووە",
        "action-import": "ھاوردنی پەڕەکان لە ویکییەکی ترەوە",
        "action-importupload": "ھاوردنی پەڕەکان لە پەڕگەیەکی بارکراو",
        "action-sendemail": "ناردنی ئیمەیلەکان",
        "action-viewmywatchlist": "دیتنی پێرستی چاودێریت",
        "nchanges": "$1 {{PLURAL:$1|گۆڕانکاری}}",
+       "enhancedrc-history": "مێژوو",
        "recentchanges": "دوایین گۆڕانکارییەکان",
        "recentchanges-legend": "ھەڵبژاردەکانی دوایین گۆڕانکارییەکان",
        "recentchanges-summary": "لەم پەڕەیەدا شوێنی دوایین گۆڕانکارییەکانی ویکی بکەوە.",
        "rcshowhideanons-show": "نیشان بدە",
        "rcshowhideanons-hide": "بشارەوە",
        "rcshowhidepatr": "گۆرانکارییە پاس دراوەکان $1",
+       "rcshowhidepatr-show": "نیشان بدە",
        "rcshowhidemine": "دەستکارییەکانم $1",
        "rcshowhidemine-show": "نیشان بدە",
        "rcshowhidemine-hide": "بشارەوە",
        "filedesc": "کورتە",
        "fileuploadsummary": "کورتە:",
        "filereuploadsummary": "گۆرانکارییەکانی پەڕگە:",
-       "filestatus": "بارودۆخی مافی لەبەرگرتنەوە:",
+       "filestatus": "ڕەوشی مافی لەبەرگرتنەوە:",
        "filesource": "سەرچاوە:",
        "ignorewarning": "چاوپۆشان لە ئاگادارییەکان و پاشەکەوت کردن بە هەر شێوەیەک",
        "ignorewarnings": "گوێ مەدە بە ئاگادارییەکان",
        "unusedtemplateswlh": "بەستەرەکانی تر",
        "randompage": "پەڕەیەک بە هەڵکەوت",
        "randompage-nopages": "هیچ لاپەڕەیەک لەم {{PLURAL:$2|ناوبۆشاییەدا|ناوبۆشاییانەدا}} نیە: $1.",
+       "randomincategory-selectcategory-submit": "بڕۆ",
        "randomredirect": "ڕەوانەکەری ھەرمەکی",
        "randomredirect-nopages": "لە ناوبۆشایی \"$1\" هیچ ڕەوانکەرێک نییە.",
        "statistics": "ئامارەکان",
        "mostrevisions": "پەڕەکان بە زۆرترین پێداچوونەوەکان",
        "prefixindex": "ھەموو پەڕەکان بە پێشگرەوە",
        "prefixindex-namespace": "هەموو پەڕەکان بەپێشگری (بۆشایی ناوی $1)",
+       "prefixindex-strip": "پێشگری ناو پێرست بقرتێنە",
        "shortpages": "پەڕە کورتەکان",
        "longpages": "پەڕە درێژەکان",
        "deadendpages": "پەڕە بنبەستەکان",
        "protectedpages-indef": "تەنیا پاراستنە بێسنوورەکان",
        "protectedpages-cascade": "تەنیا پاراستنە زنجیرییەکان",
        "protectedpagesempty": "هیچ لاپەڕەیک ئێستا بەم دیاریکراوانە نەپارێزراوە.",
+       "protectedpages-page": "پەڕە",
        "protectedtitles": "سەرناوە پارێزراوەکان",
        "protectedtitlesempty": "ھیچ سەرناوێک بەم سنوورانەوە ئێستا نەپارێزراوە.",
        "listusers": "پێرستی بەکارھێنەران",
        "listusers-editsonly": "تەنیا ئەو بەکارھێنەرانە نیشان بدە کە دەستکارییان کردووە",
        "listusers-creationsort": "ڕیزکردن بە پێی ڕێکەوتی دروستکردن",
+       "listusers-desc": "ڕیزکردنی بەرەوە ژێر",
        "usereditcount": "$1 {{PLURAL:$1|دەستکاری|دەستکاری}}",
        "usercreated": "لە $1، $2 {{GENDER:$3|دروست کراوە}}",
        "newpages": "پەڕە نوێکان",
        "listgrouprights-removegroup-self": "لابردنی {{PLURAL:$2|گرووپ|گرووپەکان}} لە سەر ھەژماری خۆی: $1",
        "listgrouprights-addgroup-self-all": "زیادکردنی ھەموو گرووپەکان بۆ سەر ھەژماری خۆی",
        "listgrouprights-removegroup-self-all": "لابردنی هەموو گرووپەکان له‌ سه‌ر هه‌ژماری خۆ",
-       "listgrouprights-namespaceprotection-namespace": "بۆشاییی ناو",
+       "listgrouprights-namespaceprotection-header": "سنوورداریی بۆشایی ناو",
+       "listgrouprights-namespaceprotection-namespace": "بۆشایی ناو",
+       "listgrouprights-namespaceprotection-restrictedto": "مافی رێ‌پێدراوی بەکارھێنەر بۆ دەستکاری",
        "trackingcategories-name": "ناوی پەیام",
        "mailnologin": "ناونیشان بۆ ناردن نییه‌",
        "mailnologintext": "ده‌بێ له‌ [[Special:UserLogin|ژووره‌وه‌]] بیت و ناونیشانێکی بڕواپێ‌کراوی ئی‌مه‌یلت له‌ ناو [[Special:Preferences|هه‌ڵبژارده‌کان]] دیاری کردبێت تا بتوانی ئی‌مه‌یل بنێریت بۆ به‌کارهێنه‌رانی دیکه‌.",
index 56422a5..ed5232a 100644 (file)
        "jumptonavigation": "navigace",
        "jumptosearch": "hledání",
        "view-pool-error": "Promiňte, servery jsou momentálně přetíženy.\nTuto stránku si právě prohlíží příliš mnoho uživatelů.\nPřed tím, než ji zkusíte načíst znovu, chvíli počkejte.\n\n$1",
-       "generic-pool-error": "Promiňte, servery jsou momentálně přetíženy.\nTento zdroj si právě prohlíží příliš mnoho uživatelů.\nPřed tím, než se k němu pokusíte přistoupit znovu, chvíli počkejte.",
+       "generic-pool-error": "Promiňte, servery jsou momentálně přetíženy.\nTento zdroj si právě prohlíží příliš mnoho uživatelů.\nProsím, před dalším pokusem o přístup chvíli počkejte.",
        "pool-timeout": "Při čekání na zámek vypršel časový limit",
        "pool-queuefull": "Fronta ve fondu je plná",
        "pool-errorunknown": "Neznámá chyba",
        "rollbacklinkcount-morethan": "vrácení více než $1 {{PLURAL:$1|editace|editací}} zpět",
        "rollbackfailed": "Nešlo vrátit zpět",
        "cantrollback": "Nelze vrátit zpět poslední editaci, neboť poslední přispěvatel je jediným autorem této stránky.",
-       "alreadyrolled": "Nelze vrátit zpět poslední editaci [[:$1]] od uživatele [[User:$2|$2]] ([[User talk:$2|diskuse]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]), protože někdo jiný již stránku editoval nebo vrátil tuto změnu zpět.\n\nPoslední editaci této stránky {{PLURAL:$3|provedl|provedla|provedl uživatel}} [[User:$3|$3]] ([[User talk:$3|diskuse]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+       "alreadyrolled": "Nelze vrátit zpět poslední editaci [[:$1]] od uživatele [[User:$2|$2]] ([[User talk:$2|diskuse]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]), protože někdo jiný již stránku editoval nebo vrátil tuto změnu zpět.\n\nPoslední editaci této stránky {{GENDER:$3|provedl|provedla|provedl uživatel}} [[User:$3|$3]] ([[User talk:$3|diskuse]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Shrnutí editace bylo: ''„$1“''.",
        "revertpage": "Editace uživatele „[[Special:Contributions/$2|$2]]“ ([[User talk:$2|diskuse]]) vráceny do předchozího stavu, jehož autorem je „[[User:$1|$1]]“",
        "revertpage-nouser": "Editace skrytého uživatele vráceny do předchozího stavu, jehož {{GENDER:$1|autorem|autorkou}} je „[[User:$1|$1]]“",
        "unblockiptext": "Tímto formulářem je možno obnovit právo blokované IP adresy či uživatele opět přispívat do {{grammar:2sg|{{SITENAME}}}}.",
        "ipusubmit": "Odblokovat",
        "unblocked": "{{GENDER:$1|||Uživatel}} [[User:$1|$1]] {{GENDER:$1|byl odblokován|byla odblokována|byl odblokován}}.",
-       "unblocked-range": "$1 bylo odblokováno",
-       "unblocked-id": "Blok $1 byl zrušen",
+       "unblocked-range": "Rozsah $1 byl odblokován.",
+       "unblocked-id": "Blok $1 byl zrušen.",
        "blocklist": "Zablokovaní uživatelé",
        "ipblocklist": "Zablokovaní uživatelé",
        "ipblocklist-legend": "Hledat zablokovaného uživatele",
        "change-blocklink": "změnit blok",
        "contribslink": "příspěvky",
        "emaillink": "poslat e-mail",
-       "autoblocker": "{{GENDER:|Byl jste automaticky zablokován|Byla jste automaticky zablokována|Byli jste automaticky zablokováni}}, protože vaši IP adresu nedávno {{GENDER:$1|používal uživatel|používala uživatelka}} „[[User:$1|$1]]“.\nDůvod zablokování {{GENDER:$1|uživatele $1|uživatelky $1}}: „$2“",
+       "autoblocker": "Automatické zablokování kvůli tomu, že vaši IP adresu nedávno {{GENDER:$1|používal uživatel|používala uživatelka}} „[[User:$1|$1]]“.\nDůvod zablokování {{GENDER:$1|uživatele $1|uživatelky $1}}: „$2“",
        "blocklogpage": "Kniha zablokování",
        "blocklog-showlog": "{{GENDER:$1|Tento uživatel byl dříve blokován.|Tato uživatelka byla dříve blokována.|Tento uživatel byl dříve blokován.}}\nZde je pro přehled zobrazen výpis z knihy zablokování:",
        "blocklog-showsuppresslog": "Tento uživatel byl zablokován a skryt. Zde je pro přehled zobrazen výpis záznamu utajení:",
        "ipb_expiry_temp": "Blokování skrytých uživatelských jmen by měla být trvalá.",
        "ipb_hide_invalid": "Tento účet nelze utajit; má více než $1 {{PLURAL:$1|editaci|editace|editací}}.",
        "ipb_already_blocked": "„$1“ již je zablokován.",
-       "ipb-needreblock": "$1 je již zablokován(a). Chcete změnit nastavení bloku?",
+       "ipb-needreblock": "$1 je již {{GENDER:zablokován|zablokována}}. Chcete změnit nastavení bloku?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Jiné zablokování|Jiná zablokování}}",
        "unblock-hideuser": "Tohoto uživatele nemůžete odblokovat, protože jeho uživatelské jméno bylo skryto.",
        "ipb_cant_unblock": "Chyba: Blokování s ID $1 nebylo nalezeno. Uživatel již možná byl odblokován.",
        "sorbs_create_account_reason": "Vaše IP adresa je uvedena na seznamu DNSBL jako otevřený proxy server. Z této adresy si nemůžete založit účet",
        "xffblockreason": "IP adresa uvedená v hlavičce X-Forwarded-For, ať už vaše, nebo patřící proxy serveru, který používáte, byla zablokována. Zdůvodnění tohoto zablokování: $1",
        "cant-see-hidden-user": "Uživatel, kterého se snažíte blokovat, už byl zablokován a skryt. Jelikož nemáte oprávnění hideuser, nemůžete si nastavení bloku tohoto uživatele prohlédnout ani ho změnit.",
-       "ipbblocked": "Nemůžete blokovat nebo odblokovávat jiné uživatele, {{GENDER:|sám|sama|sám}} jste {{GENDER:|zablokován|zablokována|zablokován}}",
-       "ipbnounblockself": "Nemáte dovoleno odblokovat {{GENDER:|sám|sama|sám}} sebe",
+       "ipbblocked": "Nemůžete blokovat nebo odblokovávat jiné uživatele, {{GENDER:|sám|sama|sám}} jste {{GENDER:|zablokován|zablokována|zablokován}}.",
+       "ipbnounblockself": "Nemáte dovoleno odblokovat {{GENDER:|sám|sama|sám}} sebe.",
        "lockdb": "Zamknout databázi",
        "unlockdb": "Odemknout databázi",
        "lockdbtext": "Pokud zamknete databázi, znemožníte ostatním editovat, upravovat nastavení, sledované stránky apod. Potvrďte, že to opravdu chcete udělat a že odemknete databázi hned po opravách.",
        "lockedbyandtime": "({{gender:$1|zamkl|zamkla|zamkl}} $1 $2 v $3)",
        "move-page": "Přesunout „$1“",
        "move-page-legend": "Přesunout stránku",
-       "movepagetext": "Použitím tohoto formuláře změníte název stránky a přesunete i celou její historii na nový název.\nPůvodní název se stane přesměrováním na nový název.\nPřesměrování na původní název můžete nechat aktualizovat automaticky.\nPokud nenecháte, nezapomeňte poté zkontrolovat [[Special:DoubleRedirects|dvojitá]] nebo [[Special:BrokenRedirects|přerušená]] přesměrování.\nJe na vaší zodpovědnosti zajistit, aby odkazy stále vedly tam, kam mají.\n\nStránku '''není možno''' přejmenovat, pokud pod cílovým názvem již nějaká stránka existuje, s výjimkou situace, kdy je cílová stránka přesměrováním na tuto stránku a nemá žádnou historii editací.\nTo znamená, že stránku můžete přesunout zpět na původní název, pokud uděláte chybu, a že nemůžete přepsat existující stránku.\n\n'''Upozornění!'''\nPřejmenování oblíbené stránky může být drastická a nečekaná změna;\nujistěte se, že chápete důsledky svého kroku před tím, než změnu provedete.",
-       "movepagetext-noredirectfixer": "Použitím tohoto formuláře změníte název stránky a přesunete i celou její historii na nový název.\nPůvodní název se stane přesměrováním na nový název.\nNezapomeňte poté zkontrolovat [[Special:DoubleRedirects|dvojitá]] nebo [[Special:BrokenRedirects|přerušená]] přesměrování.\nJe na vaší zodpovědnosti zajistit, aby odkazy stále vedly tam, kam mají.\n\nStránku '''není možno''' přejmenovat, pokud pod cílovým názvem již nějaká stránka existuje, s výjimkou situace, kdy je cílová stránka prázdná nebo je přesměrováním na tuto stránku a nemá žádnou historii editací.\nTo znamená, že stránku můžete přesunout zpět na původní název, pokud uděláte chybu, a že nemůžete přepsat existující stránku.\n\n'''Upozornění!'''\nPřejmenování oblíbené stránky může být drastická a nečekaná změna; ujistěte se, prosím, že chápete důsledky svého kroku před tím, než změnu provedete.",
-       "movepagetalktext": "Přidružená diskusní stránka, pokud existuje, bude automaticky přesunuta společně se stránkou, '''pokud:'''\n* Dosud neexistuje neprázdná diskusní stránka pod novým jménem a\n* nezrušíte křížek ve formuláři.\n\nV těchto případech musíte přesunout nebo sloučit stránky manuálně, jestliže si to přejete.",
+       "movepagetext": "Použitím tohoto formuláře změníte název stránky a přesunete i celou její historii na nový název.\nPůvodní název se stane přesměrováním na nový název.\nPřesměrování na původní název můžete nechat aktualizovat automaticky.\nPokud nenecháte, nezapomeňte poté zkontrolovat [[Special:DoubleRedirects|dvojitá]] nebo [[Special:BrokenRedirects|přerušená]] přesměrování.\nJe vaší zodpovědností zajistit, aby odkazy stále vedly tam, kam mají.\n\nStránku '''není možno''' přejmenovat, pokud pod cílovým názvem již nějaká stránka existuje, s výjimkou situace, kdy je cílová stránka přesměrováním na tuto stránku a nemá žádnou historii editací.\nTo znamená, že stránku můžete přesunout zpět na původní název, pokud uděláte chybu, a že nemůžete přepsat existující stránku.\n\n'''Upozornění!'''\nPřejmenování oblíbené stránky může být drastická a nečekaná změna;\npředtím, než změnu provedete, se ujistěte, že chápete důsledky svého kroku.",
+       "movepagetext-noredirectfixer": "Použitím tohoto formuláře změníte název stránky a přesunete i celou její historii na nový název.\nPůvodní název se stane přesměrováním na nový název.\nNezapomeňte poté zkontrolovat [[Special:DoubleRedirects|dvojitá]] nebo [[Special:BrokenRedirects|přerušená]] přesměrování.\nJe vaší zodpovědností zajistit, aby odkazy stále vedly tam, kam mají.\n\nStránku '''není možno''' přejmenovat, pokud pod cílovým názvem již nějaká stránka existuje, s výjimkou situace, kdy je cílová stránka prázdná nebo je přesměrováním na tuto stránku a nemá žádnou historii editací.\nTo znamená, že stránku můžete přesunout zpět na původní název, pokud uděláte chybu, a že nemůžete přepsat existující stránku.\n\n'''Upozornění!'''\nPřejmenování oblíbené stránky může být drastická a nečekaná změna; předtím, než změnu provedete, se prosím ujistěte, že chápete důsledky svého kroku.",
+       "movepagetalktext": "Přidružená diskusní stránka, existuje-li, bude automaticky přesunuta společně se stránkou, '''pokud:'''\n* dosud neexistuje neprázdná diskusní stránka pod novým jménem a\n* nezrušíte křížek ve formuláři.\n\nV těchto případech musíte přesunout nebo sloučit stránky manuálně, přejete-li si to.",
        "movearticle": "Přesunout stránku:",
        "moveuserpage-warning": "'''Upozornění:''' Chystáte se přesunout uživatelskou stránku. Uvědomte si prosím, že bude přesunuta pouze tato stránka, ale uživatel ''nebude'' přejmenován.",
        "movenologintext": "Pro přesouvání stránek se musíte [[Special:UserLogin|přihlásit]].",
        "movenotallowed": "Nemáte oprávnění k přesunu stránek.",
-       "movenotallowedfile": "Nemáte právo přesouvat soubory",
+       "movenotallowedfile": "Nemáte právo přesouvat soubory.",
        "cant-move-user-page": "Nemáte oprávnění přesouvat uživatelské stránky.",
        "cant-move-to-user-page": "Nemáte oprávnění přesouvat na uživatelskou stránku (pouze na podstránku uživatelské stránky).",
        "newtitle": "Na nový název:",
        "export-submit": "Exportovat",
        "export-addcattext": "Přidat stránky z kategorie:",
        "export-addcat": "Přidat",
-       "export-addnstext": "Přidat stránky z jmenného prostoru:",
+       "export-addnstext": "Přidat stránky ze jmenného prostoru:",
        "export-addns": "Přidat",
        "export-download": "Nabídnout uložení jako soubor",
        "export-templates": "Zahrnout šablony",
        "tooltip-ca-history": "Starší verze této stránky.",
        "tooltip-ca-protect": "Zamknout tuto stránku.",
        "tooltip-ca-unprotect": "Změnit zámek této stránky.",
-       "tooltip-ca-delete": "Smazat tuto stránku.",
-       "tooltip-ca-undelete": "Obnovit editace této stránky provedené před jejím smazáním.",
+       "tooltip-ca-delete": "Smazat tuto stránku",
+       "tooltip-ca-undelete": "Obnovit editace této stránky provedené před jejím smazáním",
        "tooltip-ca-move": "Přesunout tuto stránku",
        "tooltip-ca-watch": "Přidat tuto stránku mezi sledované",
        "tooltip-ca-unwatch": "Vyjmout tuto stránku ze sledovaných",
        "tooltip-ca-nstab-user": "Zobrazit uživatelskou stránku",
        "tooltip-ca-nstab-media": "Zobrazit stránku souboru",
        "tooltip-ca-nstab-special": "Toto je speciální stránka, kterou nelze editovat.",
-       "tooltip-ca-nstab-project": "Zobrazit stránku o wiki.",
-       "tooltip-ca-nstab-image": "Zobrazit stránku obrázku.",
-       "tooltip-ca-nstab-mediawiki": "Zobrazit systémovou zprávu.",
-       "tooltip-ca-nstab-template": "Zobrazit šablonu.",
-       "tooltip-ca-nstab-help": "Zobrazit stránku nápovědy.",
-       "tooltip-ca-nstab-category": "Zobrazit kategorii.",
+       "tooltip-ca-nstab-project": "Zobrazit stránku o wiki",
+       "tooltip-ca-nstab-image": "Zobrazit stránku obrázku",
+       "tooltip-ca-nstab-mediawiki": "Zobrazit systémovou zprávu",
+       "tooltip-ca-nstab-template": "Zobrazit šablonu",
+       "tooltip-ca-nstab-help": "Zobrazit stránku nápovědy",
+       "tooltip-ca-nstab-category": "Zobrazit kategorii",
        "tooltip-minoredit": "Označit změnu jako malou editaci",
        "tooltip-save": "Uložit vaše změny",
        "tooltip-preview": "Zobrazit náhled vašich změn; prosíme, zobrazte si ho před uložením!",
        "metadata-help": "Tento soubor obsahuje dodatečné informace, poskytnuté zřejmě digitálním fotoaparátem nebo scannerem, kterým byl pořízen. Pokud byl soubor od té doby změněn, některé údaje mohou být neplatné.",
        "metadata-expand": "Zobrazit podrobnosti",
        "metadata-collapse": "Skrýt podrobnosti",
-       "metadata-fields": "Položky metadat obrázků uvedené v této zprávě budou na stránce s popisem vypsána vždy. Pro zobrazení ostatních bude třeba kliknout na „zobrazit podrobnosti“.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "Položky metadat obrázků uvedené v této zprávě budou na stránce s popisem vypsány vždy. Pro zobrazení ostatních bude třeba kliknout na „zobrazit podrobnosti“.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagewidth": "Šířka",
        "exif-imagelength": "Výška",
        "exif-bitspersample": "Bitů na složku",
        "exif-saturation": "Sytost",
        "exif-sharpness": "Ostrost",
        "exif-devicesettingdescription": "Popis nastavení zařízení",
-       "exif-subjectdistancerange": "Vzdálenost k předmětu",
+       "exif-subjectdistancerange": "Vzdálenost od předmětu",
        "exif-imageuniqueid": "Unikátní ID obrázku",
        "exif-gpsversionid": "Verze GPS tagu",
        "exif-gpslatituderef": "Severní/jižní zeměpisná šířka",
        "exif-gpsdestlongitude": "Zeměpisná délka předmětu",
        "exif-gpsdestbearingref": "Reference pro směr k předmětu",
        "exif-gpsdestbearing": "Směr k předmětu",
-       "exif-gpsdestdistanceref": "Jednotka vzdálenosti k předmětu",
-       "exif-gpsdestdistance": "Vzdálenost k předmětu",
+       "exif-gpsdestdistanceref": "Jednotka vzdálenosti od předmětu",
+       "exif-gpsdestdistance": "Vzdálenost od předmětu",
        "exif-gpsprocessingmethod": "Označení metody zpracování GPS dat",
        "exif-gpsareainformation": "Označení GPS oblasti",
        "exif-gpsdatestamp": "Datum podle GPS",
        "exif-originalimageheight": "Výška obrázku před oříznutím",
        "exif-originalimagewidth": "Šířka obrázku před oříznutím",
        "exif-compression-1": "Nekomprimovaný",
-       "exif-compression-2": "1-rozměrné modifikované Huffmanovo kódování délky běhu CCITT Group 3",
+       "exif-compression-2": "1rozměrné modifikované Huffmanovo kódování délky běhu CCITT Group 3",
        "exif-compression-3": "Kódování faxů CCITT Group 3",
        "exif-compression-4": "Kódování faxů CCITT Group 4",
        "exif-compression-6": "JPEG (starý)",
index 1223dd8..28620ce 100644 (file)
        "permalink": "Dolen barhaol",
        "print": "Argraffu",
        "view": "Darllen",
+       "view-foreign": "Gweld ar $1",
        "edit": "Golygu",
+       "edit-local": "Golygu'r disgrifiad ar y wici hwn",
        "create": "Dechrau",
+       "create-local": "Ychwanegu disgrifiad ar y wici hwn",
        "editthispage": "Golygwch y dudalen hon",
        "create-this-page": "Creu'r dudalen",
        "delete": "Dileu",
        "search-result-score": "Perthnasedd: $1%",
        "search-redirect": "(ailgyfeiriad $1)",
        "search-section": "(adran $1)",
+       "search-file-match": "(yn cyfateb i gynnwys y ffeil)",
        "search-suggest": "Ai am hyn y chwiliwch: $1",
        "search-interwiki-caption": "Chwaer-brosiectau",
        "search-interwiki-default": "Y canlyniadau o $1:",
        "pageswithprop-prophidden-binary": "gwerth y briodwedd ddeuol, a guddiwyd ($1)",
        "doubleredirects": "Ailgyfeiriadau dwbl",
        "doubleredirectstext": "Mae pob rhes yn cynnwys cysylltiad i'r ddau ail-gyfeiriad cyntaf, ynghyd â chyrchfan yr ail ailgyfeiriad. Fel arfer bydd hyn yn rhoi'r gwir dudalen y dylai'r tudalennau cynt gyfeirio ati.\nGosodwyd <del>llinell</del> drwy'r eitemau sydd eisoes wedi eu datrys.",
-       "double-redirect-fixed-move": "Symudwyd [[$1]], a'i droi'n ailgyfeiriad at [[$2]]",
-       "double-redirect-fixed-maintenance": "Yn ailosod yr ailgyfeiriad dwbl o [[$1]] i [[$2]].",
+       "double-redirect-fixed-move": "Symudwyd [[$1]]. Cafodd ei diweddaru'n awtomatig, a'i droi'n ailgyfeiriad i [[$2]].",
+       "double-redirect-fixed-maintenance": "Yn ailosod yr ailgyfeiriad dwbl o [[$1]] i [[$2]], yn rhan o waith cynnal a chadw awtomatig.",
        "double-redirect-fixer": "Y bot ailgyfeirio",
        "brokenredirects": "Ailgyfeiriadau wedi'u torri",
        "brokenredirectstext": "Mae'r ailgyfeiriadau isod yn cysylltu â thudalennau nad ydynt ar gael:",
        "listgrouprights-removegroup-self": "Yn gallu tynnu {{PLURAL:$2|grŵp}} oddi ar eich cyfrif eich hunan: $1",
        "listgrouprights-addgroup-self-all": "Yn gallu ychwanegu'r holl grwpiau at eich cyfrif eich hunan",
        "listgrouprights-removegroup-self-all": "Yn gallu tynnu'r holl grwpiau oddi ar eich cyfrif eich hunan",
+       "trackingcategories-name": "Enw'r neges",
+       "trackingcategories-nodesc": "Dim disgrifiad ar gael.",
+       "trackingcategories-disabled": "Categorïau yr analluogwyd",
        "mailnologin": "Does dim cyfeiriad i'w anfon iddo",
        "mailnologintext": "Rhaid eich bod wedi [[Special:UserLogin|mewngofnodi]]\na bod cyfeiriad e-bost dilys yn eich [[Special:Preferences|dewisiadau]]\ner mwyn medru anfon e-bost at ddefnyddwyr eraill.",
        "emailuser": "Anfon e-bost at y defnyddiwr hwn",
        "unwatchthispage": "Stopio gwylio",
        "notanarticle": "Ddim yn erthygl/ffeil",
        "notvisiblerev": "Y diwygiad wedi cael ei ddileu",
-       "watchlist-details": "{{PLURAL:$1|Nid oes dim tudalennau|Mae $1 dudalen|Mae $1 dudalen|Mae $1 tudalen|Mae $1 thudalen|Mae $1 o dudalennau}} ar eich rhestr wylio, heb gynnwys tudalennau sgwrs.",
+       "watchlist-details": "{{PLURAL:$1|Nid oes dim tudalennau|Mae $1 dudalen|Mae $1 dudalen|Mae $1 tudalen|Mae $1 thudalen|Mae $1 o dudalennau}} ar eich rhestr wylio, heb gynnwys tudalennau sgwrs ar wahan.",
        "wlheader-enotif": "Galluogwyd hysbysiadau trwy e-bost.",
        "wlheader-showupdated": "Mae tudalennau sydd wedi newid ers i chi eu gweld ddiwethaf wedi'u '''hamlygu'''.",
        "wlnote2": "Isod, fe welwch y newidiadau yn ystod {{PLURAL:$1|yr awr|yr awr|y ddwyawr ddiwethaf|teirawr diwethaf|<strong>$1</strong> awr diwethaf}}, hyd at $2, $3.",
        "contributions-title": "Cyfraniadau'r defnyddiwr $1",
        "mycontris": "Cyfraniadau",
        "contribsub2": "Gan {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Nid oes cyfrif o'r enw \"$1\" wedi ei gofrestru yma.",
        "nocontribs": "Heb ddod o hyd i newidiadau gyda'r meini prawf hyn.",
        "uctop": "(cyfredol)",
        "month": "Cyfraniadau hyd at fis (ac yn gynharach):",
index 4619e65..80187d8 100644 (file)
        "gotaccountlink": "Anmelden",
        "userlogin-resetlink": "Die Anmeldedaten vergessen?",
        "userlogin-resetpassword-link": "Passwort vergessen?",
-       "userlogin-helplink2": "Hilfe bei der Anmeldung",
+       "userlogin-helplink2": "Hilfe beim Anmelden",
        "userlogin-loggedin": "Du bist bereits als {{GENDER:$1|$1}} angemeldet.\nBenutze das unten stehende Formular, um dich unter einem anderen Benutzernamen anzumelden.",
        "userlogin-createanother": "Ein weiteres Benutzerkonto erstellen",
        "createacct-emailrequired": "E-Mail-Adresse",
        "showhideselectedversions": "Gewählte Versionen zeigen/verstecken",
        "editundo": "rückgängig machen",
        "diff-empty": "(kein Unterschied)",
-       "diff-multi-sameuser": "({{PLURAL:$1|Eine dazwischenliegende Version|$1 dazwischenliegende Versionen}} des gleichen Benutzers werden nicht angezeigt)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Eine dazwischenliegende Version des gleichen Benutzers wird|$1 dazwischenliegende Versionen des gleichen Benutzers werden}} nicht angezeigt)",
        "diff-multi-otherusers": "({{PLURAL:$1|Eine dazwischenliegende Version|$1 dazwischenliegende Versionen}} von {{PLURAL:$2|einem anderen Benutzer|$2 Benutzern}} werden nicht angezeigt)",
        "diff-multi-manyusers": "({{PLURAL:$1|$1 dazwischenliegende Versionen}} von mehr als {{PLURAL:$2|$2 Benutzern}}, die nicht angezeigt werden)",
        "difference-missing-revision": "{{PLURAL:$2|Eine Version|$2 Versionen}} dieser Unterschiedsanzeige ($1) {{PLURAL:$2|wurde|wurden}} nicht gefunden.\n\nDieser Fehler wird normalerweise von einem veralteten Link zur Versionsgeschichte einer Seite verursacht, die zwischenzeitlich gelöscht wurde.\nEinzelheiten sind im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch] vorhanden.",
index 12670c0..3e37f2c 100644 (file)
        "databaseerror-textcl": "Zu ğetaya erdamalumati persayışi ameya meydan.",
        "databaseerror-query": "Perskerdış:$1",
        "databaseerror-function": "Fonksiyon: $1",
-       "databaseerror-error": "Xırab: $1",
+       "databaseerror-error": "Xeta: $1",
        "laggedslavemode": "Diqet: Pel de newe vıraşteyi belka çini .",
        "readonly": "database kılit biyo",
        "enterlockreason": "Database kılit biyo",
        "download": "bar ke",
        "unwatchedpages": "Pelanê seyrnibiyeyî",
        "listredirects": "Listeya Hetenayışan",
+       "listduplicatedfiles": "Lista dosyeyanê ke kopyaya cı vêniyena",
        "unusedtemplates": "Şablonê ke nê xebtênê",
        "unusedtemplatestext": "no pel, {{ns:template}} pelê ke pelê binan de nêaseni, ninan keno.",
        "unusedtemplateswlh": "linkanê binî",
        "pageswithprop-prophidden-binary": "Erca dıdıyına ($1) nımneyé",
        "doubleredirects": "Serşıkıtışê dıleti",
        "doubleredirectstext": "no pel pelê ray motışani liste keno.\ngıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.\n<del>serê ey nuşteyi</del> safi biye.",
-       "double-redirect-fixed-move": "[[$1]] kırışiya, hıni ray dana [[$2]] no pel",
-       "double-redirect-fixed-maintenance": "raçarnayışo dıletê [[$1]] ra  pela da [[$2]] timarêno",
+       "double-redirect-fixed-move": "[[$1]] kırışiye.\nNa otomatikmen biye rocaniye û nıka [[$2]] ser şıknena.",
+       "double-redirect-fixed-maintenance": "Serkışışteno dıletê [[$1]] ra  pela da [[$2]] vuriyeno.",
        "double-redirect-fixer": "Fixerî redirek bike",
        "brokenredirects": "Hetenayışê vengi",
        "brokenredirectstext": "Redireksiyonê ey ki pelanê hama çiniyeno ra link dano:",
        "deadendpagestext": "Ena pelan ke {{SITENAME}} de zerrî ey de link çini yo.",
        "protectedpages": "Pelê pawıtiyey",
        "protectedpages-indef": "têna pawıteyê bêmuddeti",
-       "protectedpages-summary": "têna pawıteyê têdimî",
+       "protectedpages-summary": "Listeya ena peler newke pawıtiya.Sername de  ena lista rê pawıte vıraştışi rê [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] bıvinê.",
        "protectedpages-cascade": "Kilit biyaye ke teyna cascadiye",
        "protectedpages-noredirect": "Hetenayışan bınımnê",
        "protectedpagesempty": "pê ney parametreyan pelê pawiteyi çinî",
        "listgrouprights-removegroup-self-all": "şıma hesabê xo ra eşkeni heme gruban bıveci",
        "listgrouprights-namespaceprotection-namespace": "Caynaman",
        "trackingcategories-name": "Namey mesaci",
+       "trackingcategories-desc": "Qritera kategoriya definayış",
        "trackingcategories-disabled": "Kategoriya feal niya",
        "mailnologin": "adresa erşawıtışi/ruşnayişi çina.",
        "mailnologintext": "qey karberanê binan re e-posta erşawıtış de gani şıma [[Special:UserLogin|hesab aker]]ê [[Special:Preferences|pelê tercihani]] de gani yew e-postayo meqbul bıbo.",
        "protect-locked-blocked": "seviyeya qedexe biyayeyan nevuriyeno.\n'''$1''' eyarê peli:",
        "protect-locked-dblock": "semedê kılidê database ya aktifi şıma neeşkeni seviyeya pawıtışi buvurni.\n'''$1''' eyarê no peli:",
        "protect-locked-access": "Karber hesabê şıma nêşeno  staryaye sewiyey ena peler bıvurno.\nHesıbyayê sazê pela da '''$1''' enêyê:",
-       "protect-cascadeon": "Ena pele nıka kılit biya. Çınki ena pele zerre listeyê {{PLURAL:$1|pele, ki|peleyan, which li}} bınê \"cascading protection\"iyo.\nTı eşkeno seviyeye kılit kerdışi bıvurno, feqat tı nıeşken \"cascading protection\"i bıvurno.",
+       "protect-cascadeon": "Ena pele nıka kılit biya. Çınki ena pele zerre listeyê {{PLURAL:$1|pele ke|peleyan ke}} bınê \"cascading protection\"iyo.\nTı şenê seviyeye kılit kerdışi bıvurnê, feqat tı nêşenê \"cascading protection\"i bıvurno.",
        "protect-default": "Destur bıde karberan pêrune",
        "protect-fallback": "Tenya karberanê be izna \"$1\" rê destur bıde",
        "protect-level-autoconfirmed": "Karberanê neweyan u qeyd-nêbiyaoğan kılit ke",
        "contributions-title": "Dekerdenê karber de $1",
        "mycontris": "İştıraqi",
        "contribsub2": "Qandê {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Hesabê karberi \"$1\" qeyd nêbiyo.",
        "nocontribs": "Ena kriteriya de vurnayîş çini yo.",
        "uctop": "(weziyet)",
        "month": "Aşme:",
index 9bb0f14..969741c 100644 (file)
        "virus-badscanner": "Araat kinooturon: Awu otutunan pongkowili giuk: ''$1''",
        "virus-scanfailed": "nolibai pongkowili (code $1)",
        "virus-unknownscanner": "tantobgiuk awu otutunan:",
-       "logouttext": "'''Baino nakalabus log ko noh.'''\n\nMilo ko do monilombus mongoguno {{SITENAME}} poinlisok, toi <span class='plainlinks'>[$1 sumuang log koh kawagu]</span> miagal ngaran di tiinu toi mongoguno ngaran suai.\nBirio do kipipiro bolikon popokito do maso poinsuang log koh poh gisom no do opugas nu dangkob do pogigihumnu.",
+       "logouttext": "'''Baino nakalabus log ko noh.'''\n\nBirio do kipipiro bolikon popokito do maso poinsuang log koh poh gisom noh do opugas nu dangkob do pogigihumnu.",
        "welcomeuser": "Kotobian dongkorikatan, $1!",
        "welcomecreation-msg": "Nowonsoi noh akaunnu.\nSoroho noh do mongolon do [[Special:Preferences|{{SITENAME}} komoisaannu]].",
        "yourname": "Ngarandait:",
+       "userlogin-yourname": "Ngaranmoguno",
+       "userlogin-yourname-ph": "Posurato ngaranmogunonu",
+       "createacct-another-username-ph": "Posuango o ngaranmoguno",
        "yourpassword": "Kaatalib:",
+       "userlogin-yourpassword": "Borospalapus",
+       "userlogin-yourpassword-ph": "Posurato borospanalibnu",
+       "createacct-yourpassword-ph": "Posuango borospanalib",
        "yourpasswordagain": "Mintaipo kaatalib:",
+       "createacct-yourpasswordagain": "Kompomo borospanalib",
+       "createacct-yourpasswordagain-ph": "Posuango kaagu borospanalib",
        "remembermypassword": "Soroho ot loginku id popogihuman diti (gisom solinaid do $1 {{PLURAL:$1|tadau|madau}})",
+       "userlogin-remembermypassword": "Potilombuso oku do poinsuang log",
+       "userlogin-signwithsecure": "Gunoo noputan noumoligan",
        "yourdomainname": "Damin nu:",
        "password-change-forbidden": "Awu koh kopongolon kaatalib id wiki diti.",
        "externaldberror": "Haro nokosilap pongintutunan bingdata toi awu ko pasagaon monginwagu takaun poinsoliwannu.",
        "logout": "Lumabus log",
        "userlogout": "Lumabus log",
        "notloggedin": "Amu nokolog sumuang",
+       "userlogin-noaccount": "Ingaa poh takaun?",
+       "userlogin-joinproject": "Tanud {{SITENAME}}",
        "nologin": "Ingaa akaun? $1",
        "nologinlink": "Pomonsoi do akaun",
        "createaccount": "Pomonsoi do takaun",
        "gotaccount": "Kitakaun? $1",
        "gotaccountlink": "Sumuang log",
        "userlogin-resetlink": "Nolihuan ahal loginnu?",
+       "userlogin-resetpassword-link": "Nolihuan borospanalibnu?",
+       "userlogin-helplink2": "Sokodung do sumuang log",
        "createaccountmail": "Gunoo nunu nopo kaatalib om pootodo id surat-i ii poinsurat id siriba diti",
        "createaccountreason": "Sabab:",
        "badretype": "Kaatalib pinosuang awu kopisangai.",
index fa44243..cad3b0f 100644 (file)
        "jumpto": "Và a:",
        "jumptonavigation": "Navigasiòun",
        "jumptosearch": "Sērca",
-       "view-pool-error": "In cól mumèint ché i terminêl în trôp câregh.\nTrôp utèint în drē serchêr ed vèder cla pàgina ché.\nSpèta soquânt minût préma ed pruvêr incòra a carghêr la pgina.\n\n$1",
+       "view-pool-error": "A s' în deşpiêş mó in cól mumèint ché i terminêl în trôp câregh.\nTrôp utèint în drē serchêr ed vèder cla pàgina ché.\nSpèta soquânt minût préma ed pruvêr incòra a carghêr la pàgina.\n\n$1",
+       "generic-pool-error": "A s' în deşpiêş mó in cól mumèint ché i terminêl în trôp câregh.\nTrôp utèint în drē serchêr ed vèder cla risōrsa ché.\nSpèta soquânt minût préma ed pruvêr incòra a carghêr la risōrsa.",
        "pool-timeout": "Tèimp che gh'é da spetêr préma dal sblôch.",
        "pool-queuefull": "A ghé la fîla, trôpa gînta a vōl vèder la pàgina, prōva tra soquânt minût",
        "pool-errorunknown": "Erōr mìa cgnusû",
index 752e8fe..5c0c9ca 100644 (file)
        "recentchanges-label-minor": "Ĉi tiu estas eta redakto",
        "recentchanges-label-bot": "Ĉi tiu redakto estis farita per roboto.",
        "recentchanges-label-unpatrolled": "Ĉi tiu redakto ne jam estis patrolata.",
-       "recentchanges-label-plusminus": "La paĝa grandeco ŝanĝiĝis je ĉi tiu nombro de batoj",
+       "recentchanges-label-plusminus": "La paĝa grandeco ŝanĝiĝis je ĉi tiu nombro de bajtoj",
        "recentchanges-legend-heading": "'''Klarigo:'''",
        "recentchanges-legend-newpage": "(vidu ankaŭ [[Special:NewPages|liston de novaj paĝoj]])",
-       "rcnotefrom": "Sube estas ŝanĝoj ekde <strong>$2</strong> ({{PLURAL:$1|lasta|lastaj}} <strong>$1</strong>).",
+       "rcnotefrom": "Malsupre estas ŝanĝoj ekde <strong>$2</strong> ({{PLURAL:$1|lasta|lastaj}} <strong>$1</strong>).",
        "rclistfrom": "Montri novajn ŝanĝojn ekde \"$3 $2\"",
        "rcshowhideminor": "$1 redaktetojn",
        "rcshowhideminor-show": "Montri",
index 4afd4d1..e3e7a53 100644 (file)
        "jumptonavigation": "navegación",
        "jumptosearch": "buscar",
        "view-pool-error": "Lo sentimos, los servidores están sobrecargados en este momento.\nHay demasiados usuarios que están tratando de ver esta página.\nEspera un momento antes de tratar de acceder nuevamente a esta página.\n\n$1",
+       "generic-pool-error": "Lo sentimos, los servidores están sobrecargados por el momento.\nHay demasiados usuarios tratando de ver esta página.\nIntentes acceder nuevamente a esta página dentro de un rato.",
        "pool-timeout": "Tiempo limite agotado para el bloqueo",
        "pool-queuefull": "La cola de trabajo está llena",
        "pool-errorunknown": "Error desconocido",
index 0464b4e..516e755 100644 (file)
        "jumptonavigation": "navigeerimiskast",
        "jumptosearch": "otsi",
        "view-pool-error": "Serverid on hetkel üle koormatud.\nLiiga palju kasutajaid üritab seda lehte vaadata.\nPalun oota hetk, enne kui uuesti proovid.\n\n$1",
+       "generic-pool-error": "Kahjuks on serverid praegu üle koormatud.\nLiiga palju kasutajaid proovivad seda ressurssi vaadata.\nPalun oota natuke, enne kui proovid uuesti selle ressursi juurde pääseda.",
        "pool-errorunknown": "Teadmata tõrge",
        "aboutsite": "{{GRAMMAR:genitive|{{SITENAME}}}} tiitelandmed",
        "aboutpage": "Project:Tiitelandmed",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
        "expensive-parserfunction-warning": "'''Hoiatus:''' See lehekülg kasutab liialt palju aeglustavaid laiendusfunktsioone. Neid võiks kasutada vähem kui {{PLURAL:$2|ühel|$2}} korral, praegu on kasutatud {{PLURAL:$1|ühel|$1}} korral.",
-       "expensive-parserfunction-category": "Liiga palju aeglasi laiendusfunktsioone kasutavad leheküljed",
+       "expensive-parserfunction-category": "Leheküljed, kus on liiga palju kulukaid parserifunktsioone",
        "post-expand-template-inclusion-warning": "'''Hoiatus:''' Väljakutsutavate mallide hulk on liiga suur, mõningaid malle ei näidata.",
        "post-expand-template-inclusion-category": "Leheküljed, kus mallide väljakutsumise limiit on ületatud",
        "post-expand-template-argument-warning": "'''Hoiatus:''' See lehekülg sisaldab argumendina vähemalt üht malli, mille määratud maht on liiga suur.\nNeed argumendid on välja jäetud.",
-       "post-expand-template-argument-category": "Malli vahele jäetud argumente sisaldavad leheküljed",
+       "post-expand-template-argument-category": "Leheküljed, kus malli argumendid on välja jäänud",
        "parser-template-loop-warning": "Mallid moodustavad tsükli: [[$1]]",
        "parser-template-recursion-depth-warning": "Malli rekursiivse kasutamise limiit on ületatud ($1)",
        "language-converter-depth-warning": "Keeleteisendaja sügavuspiir ületatud ($1)",
        "pageswithprop-prophidden-binary": "kahendatribuudi väärtus peidetud ($1)",
        "doubleredirects": "Kahekordsed ümbersuunamised",
        "doubleredirectstext": "Käesolev leht esitab loendi lehtedest, mis sisaldavad ümbersuunamisi teistele ümbersuunamislehtedele.\nIgal real on ära toodud esimene ja teine ümbersuunamisleht ning samuti teise ümbersuunamislehe sihtmärk, mis tavaliselt on esialgse ümbersuunamise tegelik siht, millele see otse osutama peakski.\n<del>Läbikriipsutatud</del> kirjed on kohendatud.",
-       "double-redirect-fixed-move": "[[$1]] on teisaldatud, see suunab nüüd leheküljele [[$2]].",
-       "double-redirect-fixed-maintenance": "Parandatakse kahekordne suunamine leheküljelt [[$1]] leheküljele [[$2]].",
+       "double-redirect-fixed-move": "[[$1]] on teisaldatud.\nLehekülg uuendati automaatselt ja see suunab nüüd leheküljele [[$2]].",
+       "double-redirect-fixed-maintenance": "Hooldustöö käigus parandati automaatselt kahekordne suunamine leheküljelt [[$1]] leheküljele [[$2]].",
        "double-redirect-fixer": "Ümbersuunamiste parandaja",
        "brokenredirects": "Vigased ümbersuunamised",
        "brokenredirectstext": "Järgmised leheküljed on ümber suunatud olematutele lehekülgedele:",
        "mailnologin": "Saatja aadress puudub",
        "mailnologintext": "Pead olema [[Special:UserLogin|sisse logitud]] ja sul peab [[Special:Preferences|eelistustes]] olema kehtiv e-posti aadress, et saata teistele kasutajatele e-kirju.",
        "emailuser": "Saada sellele kasutajale e-kiri",
-       "emailuser-title-target": "Sellele {{GENDER:$1|kasutajale}} e-kirja saatmine",
+       "emailuser-title-target": "{{GENDER:$1|Kasutajale}} e-kirja saatmine",
        "emailuser-title-notarget": "Kasutajale e-kirja saatmine",
        "emailpage": "Saada kasutajale e-kiri",
        "emailpagetext": "Alloleva vormi kaudu saad sellele {{GENDER:$1|kasutajale}} e-kirja saata. Et kasutaja saaks vastata, täidetakse kirja saatja väli e-posti aadressiga, mille oled sisestanud [[Special:Preferences|oma eelistuste leheküljel]].",
index c8bdab8..68f8f6c 100644 (file)
        "jumptonavigation": "ناوبری",
        "jumptosearch": "جستجو",
        "view-pool-error": "متأسفانه سرورها در حال حاضر دچار بار اضافی هستند.\nتعداد زیادی از کاربران دارند تلاش می‌کنند که این صفحه را ببینند.\nلطفاً قبل از تلاش دوباره برای دیدن این صفحه مدتی صبر کنید.\n\n$1",
+       "generic-pool-error": "متأسفانه سرورها در حال حاضر دچار بار اضافی هستند.\nتعداد زیادی از کاربران دارند تلاش می‌کنند که این صفحه را ببینند.\nلطفاً قبل از تلاش دوباره برای دیدن این صفحه مدتی صبر کنید.",
        "pool-timeout": "اتمام مهلت انتظار برای قفل",
        "pool-queuefull": "صف مخزن پر است",
        "pool-errorunknown": "خطای ناشناخته",
        "pageswithprop-prophidden-binary": "جزییات مقدار مخفی باینری ($1)",
        "doubleredirects": "تغییرمسیرهای دوتایی",
        "doubleredirectstext": "این صفحه فهرستی از صفحه‌های تغییرمسیری را ارائه می‌کند که به صفحهٔ تغییرمسیر دیگری اشاره می‌کنند.\nهر سطر دربردارندهٔ پیوندهایی به تغییرمسیر اول و دوم و همچنین مقصد تغییرمسیر دوم است، که معمولاً صفحهٔ مقصد واقعی است و نخستین تغییرمسیر باید به آن اشاره کند.\nموارد <del>خط خورده</del> درست شده‌اند.",
-       "double-redirect-fixed-move": "[[$1]] انتقال داده شده‌است، و در حال حاضر تغییرمسیری به [[$2]] است",
-       "double-redirect-fixed-maintenance": "رÙ\81ع ØªØºÛ\8cÛ\8cرÙ\85سÛ\8cر Ø¯Ù\88تاÛ\8cÛ\8c Ø§Ø² [[$1]] Ø¨Ù\87 [[$2]].",
+       "double-redirect-fixed-move": "[[$1]] انتقال داده شده‌است.\n\nبه صورت خودکار به‌روز شده‌است و  تغییرمسیری به [[$2]] داده شد.",
+       "double-redirect-fixed-maintenance": "رÙ\81ع Ø®Ù\88دکار ØªØºÛ\8cÛ\8cرÙ\85سÛ\8cر Ø¯Ù\88تاÛ\8cÛ\8c Ø§Ø² [[$1]] Ø¨Ù\87 [[$2]] Ø¯Ø± Ø±Ù\88Ù\86د Ù\86Ú¯Ù\87دارÛ\8c.",
        "double-redirect-fixer": "تعمیرکار تغییرمسیرها",
        "brokenredirects": "تغییرمسیرهای خراب",
        "brokenredirectstext": "تغییرمسیرهای زیر به یک صفحهٔ ناموجود پیوند دارند:",
index bf91e82..2e78366 100644 (file)
        "filepage-nofile-link": "Tämän nimistä tiedostoa ei ole olemassa, mutta voit [$1 tallentaa sen].",
        "uploadnewversion-linktext": "Tallenna uusi versio tästä tiedostosta",
        "shared-repo-from": "kohteesta $1",
-       "shared-repo": "jaettu mediavarasto",
+       "shared-repo": "yhteinen mediavarasto",
        "upload-disallowed-here": "Et voi tallentaa uutta tiedostoa tämän tilalle.",
        "filerevert": "Tiedoston $1 palautus",
        "filerevert-legend": "Tiedoston palautus",
        "booksources-go": "Siirry",
        "booksources-text": "Alla linkkejä ulkopuolisiin sivustoihin, joilla myydään uusia ja käytettyjä kirjoja. Sivuilla voi myös olla lisätietoa kirjoista.",
        "booksources-invalid-isbn": "Annettu ISBN-numero ei ole kelvollinen. Tarkista alkuperäisestä lähteestä kirjoitusvirheiden varalta.",
-       "specialloguserlabel": "Käyttäjä",
-       "speciallogtitlelabel": "Kohde",
+       "specialloguserlabel": "Suorittaja:",
+       "speciallogtitlelabel": "Kohde (sivu tai käyttäjä):",
        "log": "Lokit",
        "all-logs-page": "Kaikki julkiset lokit",
        "alllogstext": "Tämä on yhdistetty lokien näyttö.\nVoit rajoittaa listaa valitsemalla lokityypin, käyttäjän tai sivun johon muutos on kohdistunut. Jälkimmäiset ovat kirjainkokoherkkiä.",
index 162e666..cb72471 100644 (file)
        "permalink": "Ceangal buan",
        "print": "Clò-bhuail",
        "view": "Seall",
+       "view-foreign": "Seall air $1",
        "edit": "Deasaich",
+       "edit-local": "Deasaich an tuairisgeul ionadail",
        "create": "Cruthaich",
+       "create-local": "Cuir tuairisgeul ionadail ris",
        "editthispage": "Deasaich an duilleag seo",
        "create-this-page": "Cruthaich an duilleag seo",
        "delete": "Sguab às",
        "loginlanguagelabel": "Cànan: $1",
        "suspicious-userlogout": "Chaidh d' iarrtas airson clàradh a-mach a dhiùltadh a chionn 's gu bheil coltas gun deach a chur le brabhsair briste no le progsaidh tasglannaidh.",
        "createacct-another-realname-tip": "Cha leig thu leas innse dè am fìor-ainm a tha ort.\nMa bheir thu seachad e, thèid seo a chleachdadh gus urram a thoirt dha na h-ùghdaran airson an cuid obrach.",
+       "pt-login": "Log a-steach",
+       "pt-login-button": "Log a-steach",
+       "pt-createaccount": "Cruthaich cunntas",
+       "pt-userlogout": "Log a-mach",
        "php-mail-error-unknown": "Mearachd neo-aithichte san fheart mail() aig PHP.",
        "user-mail-no-addy": "Cha do ghabh am post-d a chur leis nach robh seòladh puist-d ann.",
        "user-mail-no-body": "Bha bodhaig na teachdaireachd bàn no air leth goirid.",
        "changepassword": "Atharraich facal-faire",
-       "resetpass_announce": "Chlàraich thu a-steach le còd sealach a fhuair thu air a' phost-d.\nGus an clàradh a-steach a choileadh, tha agad ri facal-faire ùr a shuidheachadh an-seo:",
+       "resetpass_announce": "Gus an clàradh a-steach a choileanadh, tha agad ri facal-faire ùr a shuidheachadh.",
        "resetpass_header": "Atharraich facal-faire a' chunntais",
        "oldpassword": "Seann fhacal-faire",
        "newpassword": "Facal-faire ùr",
        "retypenew": "Ath-sgrìobh am facal-faire ùr",
        "resetpass_submit": "Suidhich am facal-faire 's clàraich a-steach",
        "changepassword-success": "Chaidh am facal-faire agad atharrachadh!",
+       "changepassword-throttled": "Dh'fheuch thu ri clàradh a-steach ro thric o chionn ghoirid.\nFuirich ort $1 mus feuch thu ris a-rithist.",
        "resetpass_forbidden": "Cha ghabh na faclan-faire atharrachadh",
        "resetpass-no-info": "Feumaidh tu clàradh a-steach mus dèan thu inntrigeadh dìreach dhan duilleag seo.",
        "resetpass-submit-loggedin": "Atharraich am facal-faire",
        "recentchanges-label-minor": "Seo mùthadh beag",
        "recentchanges-label-bot": "'S e bot a rinn an deasachadh seo",
        "recentchanges-label-unpatrolled": "Cha deach freiceadan tron deasachadh seo fhathast",
+       "recentchanges-label-plusminus": "Seo meud atharrachadh na duilleige ann am byte",
+       "recentchanges-legend-newpage": "(faic [[Special:NewPages|liosta nan duilleagan ùra]] cuideachd)",
        "rcnotefrom": "Gheibhear na mùthaidhean a-mach o '''$2''' (gu ruige '''$1''') gu h-ìosal.",
        "rclistfrom": "Seall na mùthaidhean ùra a-mach o $3 $2",
        "rcshowhideminor": "$1 mùthaidhean beaga",
        "notanarticle": "Chan e duilleag susbaint a tha ann",
        "watchlist-details": "Tha {{PLURAL:$1|$1 duilleag|$1 dhuilleag|$1 duilleagan|$1 duilleag}} air do chlàr-faire, gun luaidh air na duilleagan deasbaireachd.",
        "wlheader-showupdated": "Tha clò '''trom''' air duilleagan a chaidh atharrachadh on turas mu dheireadh a thadhail thu orra.",
+       "wlnote2": "Chì thu na h-atharraichean {{PLURAL:$1|san uair|san <strong>$1</strong> uair|san <strong>$1</strong> uair|san <strong>$1</strong> uair|sna <strong>$1</strong> uairean|sna <strong>$1</strong> uair}} a thìde seo chaidh aig $3 air $2.",
        "wlshowlast": "Seall na $1 uairean a thìde mu dheireadh $2 làithean mu dheireadh $3",
        "watchlist-options": "Roghainnean mo chlàir-faire",
        "watching": "'Ga chur air a' chlàr-fhaire...",
        "unwatching": "A' toirt far a' chlàir-fhaire...",
+       "enotif_reset": "Comharraich gun do thadhladh air gach duilleag",
        "deletepage": "Sguab às duilleag",
        "confirm": "Daingnich",
        "excontent": "stuth a bh' ann: '$1'",
index 7572b17..93f4260 100644 (file)
        "jumptonavigation": "navegación",
        "jumptosearch": "procura",
        "view-pool-error": "Sentímolo, os servidores están sobrecargados nestes intres.\nHai moitos usuarios intentando ver esta páxina.\nPor favor, agarde un anaco antes de intentar acceder á páxina de novo.\n\n$1",
+       "generic-pool-error": "Sentímolo, os servidores están sobrecargados nestes intres.\nHai moitos usuarios intentando ver este recurso.\nPor favor, agarde un anaco antes de intentar acceder ao recurso de novo.",
        "pool-timeout": "Tempo límite de espera para o peche",
        "pool-queuefull": "A cola está chea",
        "pool-errorunknown": "Erro descoñecido",
index fcf7069..d12a211 100644 (file)
        "enotif_lastvisited": "તમારી પાછલી મુલાકાત પછી થયેલા બધા ફેરફારો માટે $1 જુઓ",
        "enotif_lastdiff": "આ ફેરફાર જોવા $1 જુઓ",
        "enotif_anon_editor": "અનામિ સભ્ય $1",
-       "enotif_body": "પ્રિય $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nફેરફારોનો સારાંશ: $PAGESUMMARY $PAGEMINOREDIT\n\nસંપાદકનો સંપર્ક:\nઇ-મેલ: $PAGEEDITOR_EMAIL\nવિકિ: $PAGEEDITOR_WIKI\n\nજ્યાં સુધી તમે પ્રવેશ કરીને આ પાનાની મુલાકાત નહી લો ત્યાં સુધી તેમાં ભવિષ્યમાં થનાર કોઇ પણ ફેરફારની સૂચના તમને મળશે નહિ. તમે તમારી ધ્યાન સૂચિમાં તમે જોયેલા પાના સંબંધી સૂચનાને લાગતા વિલપોમાં ફેરફાર કરી શકો છો.\n\n\nઆપની વિશ્વાસુ {{SITENAME}} સૂચના પ્રણાલી   \n\n--\nઇમેલ સૂચના પ્રણાલી બદલવા માટે મુલાકાત લો\n{{canonicalurl:{{#special:Preferences}}}}\n\nતમારી ધ્યાનસૂચિની વિક્લ્પ ગોઠવણી માટે મુલાકાત લો\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nધ્યાનસૂચિમાંથી પાનું હટાવવા માટે મુલાકાત લો\n$UNWATCHURL\n\nમંતવ્યો અને વધુ મદદ માટે\n{{canonicalurl:{{MediaWiki:Helppage}}}}",
+       "enotif_body": "પ્રિય $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nફેરફારોનો સારાંશ: $PAGESUMMARY $PAGEMINOREDIT\n\nસંપાદકનો સંપર્ક:\nઇમેલ: $PAGEEDITOR_EMAIL\nવિકિ: $PAGEEDITOR_WIKI\n\nજ્યાં સુધી તમે પ્રવેશ કરીને આ પાનાની મુલાકાત નહી લો ત્યાં સુધી તેમાં ભવિષ્યમાં થનાર કોઇ પણ ફેરફારની સૂચના તમને મળશે નહિ. તમે તમારી ધ્યાન સૂચિમાં તમે જોયેલા પાના સંબંધી સૂચનાને લાગતા વિકલ્પોમાં ફેરફાર કરી શકો છો.\n\n\nઆપની વિશ્વાસુ {{SITENAME}} સૂચના પ્રણાલી   \n\n--\nઇમેલ સૂચના પ્રણાલી બદલવા માટે, મુલાકાત લો\n{{canonicalurl:{{#special:Preferences}}}}\n\nતમારી ધ્યાનસૂચિની વિક્લ્પ ગોઠવણી માટે, મુલાકાત લો\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nધ્યાનસૂચિમાંથી પાનું હટાવવા માટે, મુલાકાત લો\n$UNWATCHURL\n\nમંતવ્યો અને વધુ મદદ માટે:\n{{canonicalurl:{{MediaWiki:Helppage}}}}",
        "created": "બનાવ્યું",
        "changed": "બદલ્યું",
        "deletepage": "પાનું હટાવો",
index 618e312..006655e 100644 (file)
        "rc_categories": "Ograniči na kategorije (odvojene znakom  \"|\")",
        "rc_categories_any": "Sve",
        "rc-change-size-new": "$1 {{PLURAL:$1|bajt|bajta|bajtova}} poslije uređivanja",
-       "newsectionsummary": "/* $1 */ Novi odlomak",
+       "newsectionsummary": "/* $1 */ novi odlomak",
        "rc-enhanced-expand": "Pokaži detalje (potreban JavaScript)",
        "rc-enhanced-hide": "Sakrij detalje",
        "rc-old-title": "izvorno ime bilo je \"$1\"",
index 8b06b6d..c525e14 100644 (file)
        "permalink": "Trajny wotkaz",
        "print": "Ćišćeć",
        "view": "Wobhladać",
+       "view-foreign": "Na $1 sej wobhladać",
        "edit": "wobdźěłać",
        "edit-local": "Lokalny wopis wobdźěłać .",
        "create": "Wutworić",
        "pageswithprop-prophidden-binary": "binarna kajkostna hódnota schowana ($1)",
        "doubleredirects": "Dwójne daleposrědkowanja",
        "doubleredirectstext": "Tuta strona nalistuje strony, kotrež k druhim daleposrědkowanskim stronam dale posrědkuja.\nKóžda rjadka wobsahuje wotkazy k prěnjemu a druhemu daleposrědkowanju kaž tež cil druheho daleposrědkowanja, kotryž je zwjetša  \"woprawdźita\" cilowa strona, na kotruž prěnje daleposrědkowanje měło pokazać. <del>Přešmórnjene</del> zapiski su hižo sčinjene.",
-       "double-redirect-fixed-move": "[[$1]] bu přesunjeny, je nětko daleposrědkowanje do [[$2]]",
-       "double-redirect-fixed-maintenance": "Dwójne dalesposrědkowanje wot [[$1]] do [[$2]] so porjedźuje",
+       "double-redirect-fixed-move": "[[$1]] bu přesunjeny.\nJe so awtomatisce zaktualizował a posrědkuje so nětko do [[$2]].",
+       "double-redirect-fixed-maintenance": "Dwójne dalesposrědkowanje wot [[$1]] do [[$2]] so awtomatisce w wothladowanskim nadawku porjedźuje.",
        "double-redirect-fixer": "Porjedźer daleposrědkowanjow",
        "brokenredirects": "Skóncowane daleposrědkowanja",
        "brokenredirectstext": "Slědowace daleposrědkowanja wotkazuja na njeeksistowace strony:",
        "listgrouprights-removegroup-self": "Móže {{PLURAL:$2|skupinu|skupinje|skupiny|skupinow}} ze swójskeho konta wotstronić: $1",
        "listgrouprights-addgroup-self-all": "Móže wšě skupiny swójskemu kontu přidać",
        "listgrouprights-removegroup-self-all": "Móže wšě skupiny ze swójskeho konta wotstronić",
+       "listgrouprights-namespaceprotection-header": "Wobmjezowanja mjenoweho ruma",
+       "listgrouprights-namespaceprotection-namespace": "Mjenowy rum",
+       "listgrouprights-namespaceprotection-restrictedto": "Prawa, kotrež wužiwarjej wobdźěłowanje dowoleja",
+       "trackingcategories": "Slědowanske kategorije",
+       "trackingcategories-msg": "Slědowanska kategorija",
+       "trackingcategories-name": "Mjeno zdźělenki",
+       "trackingcategories-desc": "Kriterije za zapřijimanje kategorije",
+       "trackingcategories-nodesc": "Žane wopisanje k dispoziciji",
+       "trackingcategories-disabled": "Kategorija je znjemóžnjena",
        "mailnologin": "Njejsy přizjewjeny.",
        "mailnologintext": "Dyrbiš [[Special:UserLogin|přizjewjeny]] być a płaćiwu e-mejlowu adresu w swojich [[Special:Preferences|nastajenjach]] měć, zo by druhim wužiwarjam mejlki pósłać móhł.",
        "emailuser": "Wužiwarjej mejlku pósłać",
        "unwatchthispage": "wobkedźbowanje skónčić",
        "notanarticle": "njeje nastawk",
        "notvisiblerev": "Wersija bu wušmórnjena",
-       "watchlist-details": "{{PLURAL:$1|$1 wobkedźbowana strona|$1 wobkedźbowanej stronje|$1 wobkedźbowane strony|$1 wobkedźbowanych stronow}}, diskusijne strony wuwzate.",
+       "watchlist-details": "{{PLURAL:$1|$1 wobkedźbowana strona|$1 wobkedźbowanej stronje|$1 wobkedźbowane strony|$1 wobkedźbowanych stronow}}, bjeztoho zo so diskusijne strony dźělene liča.",
        "wlheader-enotif": "E-mejlowa zdźělenska słužba je zmóžnjena.",
        "wlheader-showupdated": "Strony, kotrež su so po twojim poslednim wopyće změnili, so '''tučne''' pokazuja.",
        "wlnote2": "Slěduja změny {{PLURAL:$1|zańdźeneje hodźiny|zańdźeneju <strong>$1</strong> hodźinow|zańdźenych <strong>$1</strong> hodźin}} Staw: $2, $3.",
        "contributions-title": "Wužiwarske přinoški wot „$1“",
        "mycontris": "Přinoški",
        "contribsub2": "Za {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Wužiwarske konto \"$1\" njeje zregistrowane.",
        "nocontribs": "Žane změny, kotrež podatym kriterijam wotpowěduja.",
        "uctop": "(aktualny)",
        "month": "wot měsaca (a do toho):",
index 226688e..7ffb74e 100644 (file)
        },
        "tog-underline": "Сілтеменің астын сызу:",
        "tog-hideminor": "Жуықтағы өзгерістерден шағын өңдемелерді жасыру",
-       "tog-hidepatrolled": "Тексерілген өңдеулерді соңғы өзгерістер тізімінде көрсетпеу",
-       "tog-newpageshidepatrolled": "ТекÑ\81еÑ\80Ñ\96лген Ð±ÐµÑ\82Ñ\82еÑ\80дÑ\96 Ð¶Ð°Ò£Ð° Ð±ÐµÑ\82Ñ\82еÑ\80 Ñ\82Ñ\96зÑ\96мÑ\96нде ÐºÓ©Ñ\80Ñ\81еÑ\82пеу",
-       "tog-extendwatchlist": "Ð\91аÒ\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мдÑ\96 Ò±Ð»Ò\93айÑ\82Ñ\83 (баÑ\80лÑ\8bÒ\9b Ð¶Ð°Ñ\80амдÑ\8b Ó©Ð·Ð³ÐµÑ\80Ñ\96Ñ\81Ñ\82еÑ\80дÑ\96 ÐºÓ©Ñ\80Ñ\81еÑ\82Ñ\83)",
+       "tog-hidepatrolled": "Тексерілген өңдеулерді жуықтағы өзгерістер тізімінде көрсетпеу",
+       "tog-newpageshidepatrolled": "ТекÑ\81еÑ\80Ñ\96лген Ð±ÐµÑ\82Ñ\82еÑ\80дÑ\96 Ð¶Ð°Ò£Ð° Ð±ÐµÑ\82Ñ\82еÑ\80 Ñ\82Ñ\96зÑ\96мÑ\96нде Ð¶Ð°Ñ\81Ñ\8bÑ\80у",
+       "tog-extendwatchlist": "Ð\91аÒ\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мдÑ\96 Ò±Ð»Ò\93айÑ\82Ñ\8bп Ð±Ð°Ñ\80лÑ\8bÒ\9b Ó©Ð·Ð³ÐµÑ\80Ñ\96Ñ\81Ñ\82еÑ\80дÑ\96 ÐºÓ©Ñ\80Ñ\81еÑ\82Ñ\83, ÐµÒ£ Ñ\81оңÒ\93Ñ\8bлаÑ\80дÑ\8b Ò\93ана ÐµÐ¼ÐµÑ\81",
        "tog-usenewrc": "Жуықтағы өзгерістер және бақылау тізімінде беті бойынша өзгерістерді топтау",
        "tog-numberheadings": "Мазмұн тақырыптарын автоматты нөмірлеу",
-       "tog-showtoolbar": "Өңдеу құралдарын көрсету",
+       "tog-showtoolbar": "Өңдеу құралдарын үстелін көрсету",
        "tog-editondblclick": "Қос шерту арқылы бетті өңдеу",
        "tog-editsectiononrightclick": "Бөлім тақырыбын оң нұқумен бөлім өңдеуін қосу",
-       "tog-watchcreations": "Ð\9cен Ð±Ð°Ñ\81Ñ\82аÒ\93ан Ð±ÐµÑ\82Ñ\82еÑ\80дÑ\96 Ð±Ð°Ò\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мÑ\96не Ò\9bоÑ\81",
-       "tog-watchdefault": "Ð\9cен Ó©Ò£Ð´ÐµÐ³ÐµÐ½ Ð±ÐµÑ\82Ñ\82еÑ\80дÑ\96 Ð±Ð°Ò\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мÑ\96не Ò\9bоÑ\81",
-       "tog-watchmoves": "Ð\9cен Ð¶Ñ\8bлжÑ\8bÑ\82Ò\9bан Ð±ÐµÑ\82Ñ\82еÑ\80дÑ\96 Ð±Ð°Ò\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мÑ\96не Ò\9bоÑ\81",
-       "tog-watchdeletion": "Ð\9cен Ð¶Ð¾Ð¹Ò\93ан Ð±ÐµÑ\82Ñ\82еÑ\80дÑ\96 Ð±Ð°Ò\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мÑ\96не Ò\9bоÑ\81",
-       "tog-minordefault": "Әдепкіден барлық өңдемелерді шағын деп белгіле",
+       "tog-watchcreations": "Ð\9cен Ð±Ð°Ñ\81Ñ\82аÒ\93ан Ð±ÐµÑ\82Ñ\82еÑ\80дÑ\96 Ð¶Ó\99не Ð¼ÐµÐ½ Ð¶Ò¯ÐºÑ\82еген Ñ\84айлдаÑ\80дÑ\8b Ð±Ð°Ò\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мÑ\96не Ò\9bоÑ\81Ñ\83",
+       "tog-watchdefault": "Ð\9cен Ó©Ò£Ð´ÐµÐ³ÐµÐ½ Ð±ÐµÑ\82Ñ\82еÑ\80дÑ\96 Ð¶Ó\99не Ñ\84айлдаÑ\80дÑ\8b Ð±Ð°Ò\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мÑ\96не Ò\9bоÑ\81Ñ\83",
+       "tog-watchmoves": "Ð\9cен Ð¶Ñ\8bлжÑ\8bÑ\82Ò\9bан Ð±ÐµÑ\82Ñ\82еÑ\80дÑ\96 Ð¶Ó\99не Ñ\84айлдаÑ\80дÑ\8b Ð±Ð°Ò\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мÑ\96не Ò\9bоÑ\81Ñ\83",
+       "tog-watchdeletion": "Ð\9cен Ð¶Ð¾Ð¹Ò\93ан Ð±ÐµÑ\82Ñ\82еÑ\80дÑ\96 Ð¶Ó\99не Ñ\84айлдаÑ\80дÑ\8b Ð±Ð°Ò\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мÑ\96не Ò\9bоÑ\81Ñ\83",
+       "tog-minordefault": "Әдепкі бойынша барлық өңдемелерді шағын деп белгілеу",
        "tog-previewontop": "Қарап шығу аумағын өңдеу терезесінің жоғарғы жағында көрсету",
-       "tog-previewonfirst": "Бірінші өңдегенде қарап шығу",
-       "tog-enotifwatchlistpages": "Бақылауыңыздағы бет өзгергенде е-поштаға хабарлама жіберу",
+       "tog-previewonfirst": "Бірінші өңдегенде алдын-ала қарап шығу",
+       "tog-enotifwatchlistpages": "Бақылауымдағы бет және файл өзгергенде е-поштаға хабарлама жіберу",
        "tog-enotifusertalkpages": "Талқылау бетім өзгергенде маған хат жібер",
        "tog-enotifminoredits": "Шағын өңдеме туралы да маған хат жібер",
        "tog-enotifrevealaddr": "Е-поштамның мекенжайын ескерту хаттарда аш",
        "tog-shownumberswatching": "Бақылап тұрған қатысушылардың санын көрсет",
        "tog-oldsig": "Қазіргі уақыттағы қолтаңбаңыз:",
-       "tog-fancysig": "Қолтаңбаны уикимәтін ретінде қарастыру (автоматты сілтеме қойылмайды)",
+       "tog-fancysig": "Қолтаңбаны уикимәтінге айналдыру (автоматты сілтеме қойылмайды)",
        "tog-uselivepreview": "Тура қарап шығуды қолдану (сынақтық)",
-       "tog-forceeditsummary": "Өңдеменің қысқаша мазмұндамасы бос қалғанда маған ескерт",
+       "tog-forceeditsummary": "Өңдеме түйіндемесі бос қалғанда маған ескерт",
        "tog-watchlisthideown": "Өңдемелерімді бақылау тізімінен жасыру",
        "tog-watchlisthidebots": "Бот өңдемелерін бақылау тізімінен жасыру",
        "tog-watchlisthideminor": "Шағын өңдемелерді бақылау тізімінде көрсетпеу",
-       "tog-watchlisthideliu": "Бақылау тізіміндегі қатысушылардың өңдеулерін көрсетпеу",
-       "tog-watchlisthideanons": "Ð\91аÒ\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мÑ\96ндегÑ\96 Ð¶Ð°Ñ\81Ñ\8bÑ\80Ñ\8bн қатысушылардың өңдеулерін көрсетпеу",
+       "tog-watchlisthideliu": "Бақылау тізіміндегі кірген қатысушылардың өңдеулерін көрсетпеу",
+       "tog-watchlisthideanons": "Ð\91аÒ\9bÑ\8bлаÑ\83 Ñ\82Ñ\96зÑ\96мÑ\96ндегÑ\96 Ð°Ð½Ð¾Ð½Ð¸Ð¼ қатысушылардың өңдеулерін көрсетпеу",
        "tog-watchlisthidepatrolled": "Бақылау тізімінде тексерілген өңдеулерді көрсетпеу",
-       "tog-ccmeonemails": "Ð\91аÑ\81Ò\9bа Ò\9bаÑ\82Ñ\8bÑ\81Ñ\83Ñ\88Ñ\8bÒ\93а Ð¶Ñ\96беÑ\80ген Ñ\85аÑ\82Ñ\8bмнÑ\8bÒ£ ÐºÓ©Ñ\88Ñ\96Ñ\80меÑ\81Ñ\96н Ð¼Ð°Ò\93ан Ð´Ð° Ð¶Ó©Ð½ÐµÐ»Ñ\82",
+       "tog-ccmeonemails": "Ð\91аÑ\81Ò\9bа Ò\9bаÑ\82Ñ\8bÑ\81Ñ\83Ñ\88Ñ\8bÒ\93а Ð¶Ñ\96беÑ\80ген Ñ\85аÑ\82Ñ\8bмнÑ\8bÒ£ ÐµÑ\81еÑ\81Ñ\96н Ó©Ð·Ñ\96ме Ð¶Ó©Ð½ÐµÐ»Ñ\82Ñ\83",
        "tog-diffonly": "Нұсқалар айырмашылықтарының астында бет мағлұматын көрсетпеу",
        "tog-showhiddencats": "Жасырын санаттарды көрсету",
        "tog-norollbackdiff": "Шегіндіруден кейін нұсқалардың айырмашылығын көрсетпеу",
-       "tog-useeditwarning": "Өңдемесі сақталмаған парақшадан шығар кезде ескерту",
+       "tog-useeditwarning": "Өзгерістері сақталмаған өңделудегі беттен шығар кезде ескерту",
        "tog-prefershttps": "Кірген кезде қауіпсіз байланысуды әрқашан қолдану",
        "underline-always": "Әрқашан",
        "underline-never": "Ешқашан",
-       "underline-default": "Шолғыш бойынша",
-       "editfont-style": "ӨңдеÑ\83 Ð¶Ð¾Ð»Ñ\8bндаÒ\93Ñ\8b Ò\9bаÑ\80Ñ\96пÑ\82Ñ\96Ò£ Ñ\82Ò¯рі",
+       "underline-default": "Әдепкі мәнер не броузер",
+       "editfont-style": "ӨңдеÑ\83 Ð°Ñ\83маÒ\93Ñ\8bндаÒ\93Ñ\8b Ò\9bаÑ\80Ñ\96п Ð¼Ó\99нері",
        "editfont-default": "Негізгі браузер",
        "editfont-monospace": "Бірдей енді қаріп",
        "editfont-sansserif": "Ноқатсыз қаріп",
        "november-date": "Қараша $1",
        "december-date": "Желтоқсан $1",
        "pagecategories": "{{PLURAL:$1|Санат|Санат}}",
-       "category_header": "\"$1\" санатындағы беттер",
+       "category_header": "«$1» санатындағы беттер",
        "subcategories": "Санатшалар",
-       "category-media-header": "\"$1\" санатындағы медиа",
-       "category-empty": "''Бұл санатта ағымда еш бет немесе медиа жоқ.''",
-       "hidden-categories": "{{PLURAL:$1|Жасырын санат|Жасырын санаттар}}",
+       "category-media-header": "«$1» санатындағы медиа",
+       "category-empty": "<em>Бұл санатта қазіргі уақытта еш бет немесе медиа жоқ.</em>",
+       "hidden-categories": "{{PLURAL:$1|Жасырын санат|Жасырын санат}}",
        "hidden-category-category": "Жасырын санаттар",
        "category-subcat-count": "{{PLURAL:$2|Бұл санатта тек келесі санатша бар.|Бұл санатта келесі {{PLURAL:$1|санатша|$1 санатша}} бар (не барлығы $2).}}",
-       "category-subcat-count-limited": "Бұл санатта келесі $1 санатша бар.",
+       "category-subcat-count-limited": "Бұл санатта келесі {{PLURAL:$1|санатша|$1 санатша}} бар.",
        "category-article-count": "{{PLURAL:$2|Бұл санатта тек келесі бет бар.|Бұл санатта келесі {{PLURAL:$1|бет|$1 бет}} бар, барлығы $2 сыртында.}}",
        "category-article-count-limited": "Ағымдағы санатта келесі $1 бет бар.",
        "category-file-count": "{{PLURAL:$2|Бұл санатта тек келесі файл бар.|Бұл санатта келесі {{PLURAL:$1|файл|$1 файл}} бар, барлығы $2 сыртында.}}",
        "category-file-count-limited": "Ағымдағы санатта келесі $1 файл бар.",
        "listingcontinuesabbrev": "(жалғ.)",
        "index-category": "Индекстелген беттер",
-       "noindex-category": "Ð\98ндекÑ\81Ñ\82елмейÑ\82Ñ\96н беттер",
+       "noindex-category": "Ð\98ндекÑ\81Ñ\82елмеген беттер",
        "broken-file-category": "Ақаулы файлдық сілтемелері бар беттер",
        "about": "Жоба туралы",
        "article": "Мағлұмат беті",
        "create-this-page": "Осы бетті бастау",
        "delete": "Жою",
        "deletethispage": "Бұл бетті жою",
-       "undeletethispage": "Ð\96ойÑ\8bлÒ\93ан Ð±ÐµÑ\82Ñ\82Ñ\96 Ò\9bайÑ\82ару",
-       "undelete_short": "{{PLURAL:$1|өңдеме|$1 өңдеме}} жоюын болдырмау",
-       "viewdeleted_short": "{{PLURAL:$1|жойылған өңдеуді|$1 жойылған өңдеулерді }} көру",
+       "undeletethispage": "Ð\91ұл Ð±ÐµÑ\82Ñ\82Ñ\96 Ò\9bалпÑ\8bна ÐºÐµÐ»Ñ\82Ñ\96ру",
+       "undelete_short": "{{PLURAL:$1|өңдеме|$1 өңдеме}} жойылуын болдырмау",
+       "viewdeleted_short": "{{PLURAL:$1|жойылған өңдемені|$1 жойылған өңдемені }} көру",
        "protect": "Қорғау",
        "protect_change": "өзгерту",
        "protectthispage": "Бұл бетті қорғау",
        "unprotect": "Қорғалуын өзгерту",
-       "unprotectthispage": "Бұл беттің қорғауын өзгерту",
+       "unprotectthispage": "Бұл беттің қорғалуын өзгерту",
        "newpage": "Жаңа бет",
        "talkpage": "Бұл бетті талқылау",
        "talkpagelinktext": "Талқылауы",
        "jumptonavigation": "шарлау",
        "jumptosearch": "іздеу",
        "view-pool-error": "Кешіріңіз, қазір серверлер шектен тыс жүктелуде.\nОсы бетті қарауға өте көп сұраныс жасалды.\nӨтініш, күте тұрыңыз және осы бетке кіруге қайта әрекет жасаңыз.\n\n$1",
-       "pool-timeout": "Бұғатталу уақытын күту мерзімі өтті",
+       "generic-pool-error": "Кешіріңіз, қазір серверлер шектен тыс жүктелуде.\nОсы бетті қарауға өте көп сұраныс жасалды.\nӨтініш, күте тұрыңыз және осы бетке кіруге қайта әрекет жасаңыз.",
+       "pool-timeout": "Құлыпталу уақытын күту мерзімі өтті",
        "pool-queuefull": "Сұранымдар жинақтауышысы толық",
        "pool-errorunknown": "Белгісіз қате",
        "aboutsite": "{{SITENAME}} туралы",
        "policy-url": "Project:Ережелер",
        "portal": "Қауым порталы",
        "portal-url": "Project:Қауым порталы",
-       "privacy": "Жеке құпиясын сақтау",
-       "privacypage": "Project:Жеке құпиясын сақтау",
+       "privacy": "Құпиялық саясаты",
+       "privacypage": "Project:Құпиялық саясаты",
        "badaccess": "Рұқсат беру қатесі",
        "badaccess-group0": "Сұратылған әрекетіңізді орындауға рұқсат етілмейді.",
-       "badaccess-groups": "Ð\90Ñ\82алÒ\93ан Ó\99Ñ\80екеÑ\82Ñ\82Ñ\96 Ñ\82ек {{PLURAL:$2|Ñ\82опÑ\82аÑ\80дÑ\8bÒ£|Ñ\82опÑ\82Ñ\8bÒ£}} $1 Ò\9bаÑ\82Ñ\8bÑ\81Ñ\83Ñ\88Ñ\8bлаÑ\80Ñ\8b Ò\93ана Ð°Ñ\82Ò\9bаÑ\80а Ð°Ð»Ð°Ð´Ñ\8b.",
-       "versionrequired": "MediaWiki $1 нұсқасы керек",
-       "versionrequiredtext": "Бұл бетті қолдану үшін MediaWiki $1 нұсқасы керек. [[Special:Version|Жүйе нұсқасы бетін]] қараңыз.",
-       "ok": "Жарайды",
+       "badaccess-groups": "СÑ\96з Ñ\81Ò±Ñ\80анÒ\93ан Ó\99Ñ\80екеÑ\82Ñ\82Ñ\96 Ñ\82ек Ñ\88екÑ\82елген {{PLURAL:$2|Ñ\82опÑ\82Ñ\8bÒ£|Ñ\82опÑ\82Ñ\8bÒ£}} Ò\9bаÑ\82Ñ\8bÑ\81Ñ\83Ñ\88Ñ\8bлаÑ\80Ñ\8b Ò\93ана Ð°Ñ\82Ò\9bаÑ\80а Ð°Ð»Ð°Ð´Ñ\8b: $1.",
+       "versionrequired": "MediaWiki $1 нұсқасын қажет етеді",
+       "versionrequiredtext": "Бұл бетті пайдалану үшін MediaWiki $1 нұсқасын қажет етеді. \n[[Special:Version|Жүйе нұсқасы бетін]] қараңыз.",
+       "ok": "OK",
        "pagetitle": "$1 — {{SITENAME}}",
        "retrievedfrom": "«$1» бетінен алынған",
-       "youhavenewmessages": "Сізде $1 бар ($2).",
-       "youhavenewmessagesfromusers": "Сіз {{PLURAL:$3|басқа қатысушыдан|$3 қатысушыдан}} $1 алдыңыз ($2).",
-       "youhavenewmessagesmanyusers": "Сіз бірнеше қатысушыдан $1 алдыңыз ($2).",
+       "youhavenewmessages": "{{PLURAL:$3|Сізге}} $1 келді ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Сізге}} {{PLURAL:$3|басқа қатысушыдан|$3 қатысушыдан}} $1 келді ($2).",
+       "youhavenewmessagesmanyusers": "Сізге бірнеше қатысушыдан $1 келді ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|жаңа хабарлама|999=жаңа хабарламалар}}",
        "newmessagesdifflinkplural": "соңғы {{PLURAL:$1|өзгеріс|999=өзгерістер}}",
        "youhavenewmessagesmulti": "$1 дегенде жаңа хабарламалар бар",
        "viewdeleted": "$1 қарайсыз ба?",
        "restorelink": "{{PLURAL:$1|жойылған өңдемені|$1 жойылған өңдемені}}",
        "feedlinks": "Арна:",
-       "feed-invalid": "Жарамсыз жазылымды арна түрі.",
-       "feed-unavailable": "Синдикация таспалары қолжетімсіз",
+       "feed-invalid": "Жарамсыз жазылым арна түрі.",
+       "feed-unavailable": "Синдикация арналары қолжетімсіз",
        "site-rss-feed": "$1 RSS арнасы",
        "site-atom-feed": "$1 Atom арнасы",
        "page-rss-feed": "«$1» — RSS арнасы",
        "page-atom-feed": "«$1» — Atom арнасы",
        "red-link-title": "$1 (мұндай бет жоқ)",
-       "sort-descending": "Кему бойынша ретке келтіру",
-       "sort-ascending": "Өсу бойынша ретке келтіру",
+       "sort-descending": "Кемуі бойынша ретке келтіру",
+       "sort-ascending": "Артуы бойынша ретке келтіру",
        "nstab-main": "Мақала",
-       "nstab-user": "Жеке бет",
+       "nstab-user": "Қатысушы беті",
        "nstab-media": "Медиа беті",
        "nstab-special": "Арнайы бет",
        "nstab-project": "Жоба беті",
        "nstab-image": "Файл",
        "nstab-mediawiki": "Хабарлама",
        "nstab-template": "Үлгі",
-       "nstab-help": "Анықтама",
+       "nstab-help": "Анықтама беті",
        "nstab-category": "Санат",
        "nosuchaction": "Мұндай әрекет жоқ",
-       "nosuchactiontext": "URL-дегі көрсетілген әрекет қате.\nБәлкім, Сіз URL теру барысында қате жібердіңіз немесе қате сілтеме бойынша өттіңіз.\nБұл сондай-ақ {{SITENAME}} жобасында қателікті көрсетуі мүмкін.",
+       "nosuchactiontext": "URL-дегі көрсетілген әрекет жарамсыз.\nМүмкін сіз URL теру барысында қате жібердіңіз немесе дұрыс емес сілтеме бойынша өттіңіз.\nБұл сондай-ақ {{SITENAME}} жобасында қолданылатын бағдарламалық жасақтама қатесін көрсетуі мүмкін.",
        "nosuchspecialpage": "Мұндай арнайы бет жоқ",
        "nospecialpagetext": "<strong>Сіздің сұраған арнайы бетіңіз жарамсыз.</strong>\n\nЖарамды арнайы беттер тізімін [[Special:SpecialPages|{{int:specialpages}}]] дегеннен таба аласыз.",
        "error": "Қате",
        "databaseerror": "Дерекқор қатесі",
-       "databaseerror-query": "Сұрау:$1",
-       "databaseerror-function": "Әрекет: $1",
-       "databaseerror-error": "Қате:$1",
-       "laggedslavemode": "'''Ескерту:''' Бетте жуықтағы жаңартулар болмауы мүмкін.",
+       "databaseerror-text": "Дерекқор қатесі кездесті.\nБұл бағдарламалық жасақтама қатесін білдіруі мүмкін.",
+       "databaseerror-textcl": "Дерекқор қатесі кездесті.",
+       "databaseerror-query": "Сұрау: $1",
+       "databaseerror-function": "Функция: $1",
+       "databaseerror-error": "Қате: $1",
+       "laggedslavemode": "<strong>Ескерту:</strong> Бетте жуықтағы жаңартулар болмауы мүмкін.",
        "readonly": "Дерекқоры құлыпталған",
        "enterlockreason": "Құлыптау себебін, қай уақытқа дейін құлыпталғанын кірістіріп, енгізіңіз.",
        "readonlytext": "Бұл дерекқор жаңадан жазу және басқа өзгерістер жасаудан ағымда құлыпталынған, мүмкін күнде-күн дерекқорды баптау үшін, бұны бітіргеннен соң қалыпты іске қайтарылады.\n\nҚұлыптаған әкімші бұны былай түсіндіреді: $1",
        "readonly_lag": "Жетек дерекқор серверлер басқасымен қадамланғанда осы дерекқор өздіктік құлыпталынған",
        "internalerror": "Ішкі қате",
        "internalerror_info": "Ішкі қатесі: $1",
-       "filecopyerror": "«$1» Ñ\84айлÑ\8b Â«$2» Ñ\84айлÑ\8bна ÐºÓ©Ñ\88Ñ\96Ñ\80Ñ\96лмеді.",
+       "filecopyerror": "«$1» Ñ\84айлÑ\8b Â«$2» Ñ\84айлÑ\8bна ÐµÑ\81еленбеді.",
        "filerenameerror": "«$1» файл атауы «$2» атауына өзгертілмеді.",
        "filedeleteerror": "«$1» файлы жойылмайды.",
        "directorycreateerror": "«$1» қалтасы құрылмады.",
        "badarticleerror": "Осындай әрекет мына бетте атқарылмайды.",
        "cannotdelete": "«$1» беті немесе файлы жойылмайды. \nМұны әлдебіреу әлдеқашан жойған болуы мүмкін.",
        "cannotdelete-title": "«$1» бетін жою мүмкін емес",
-       "delete-hook-aborted": "ТүзеÑ\82Ñ\83 Ñ\96лмек Ð°Ñ\80Ò\9bÑ\8bлÑ\8b Ñ\82оÒ\9bÑ\82аÑ\82ылды.\nҚосымша түсіндірмелер көрсетілмеген.",
-       "no-null-revision": "\"$1\" беті үшін жаңа бос нұсқасын бастау мүмкін болмады.",
+       "delete-hook-aborted": "Ð\96ойÑ\8bлÑ\83 Ñ\96лмек Ð°Ñ\80Ò\9bÑ\8bлÑ\8b Ð´Ð¾Ò\93аÑ\80ылды.\nҚосымша түсіндірмелер көрсетілмеген.",
+       "no-null-revision": "«$1» беті үшін жаңа бос нұсқасын бастау мүмкін болмады.",
        "badtitle": "Жарамсыз тақырып аты",
-       "badtitletext": "СұÑ\80алÒ\93ан Ð±ÐµÑ\82 Ñ\82аÒ\9bÑ\8bÑ\80Ñ\8bбÑ\8bнÑ\8bÒ£ Ð°Ñ\82Ñ\8b Ð¶Ð°Ñ\80амÑ\81Ñ\8bз, Ð±Ð¾Ñ\81, Ñ\82Ñ\96лаÑ\80алÑ\8bÒ\9b Ñ\81Ñ\96лÑ\82емеÑ\81Ñ\96 Ð½Ðµ Ñ\83ики-аÑ\80алÑ\8bÒ\9b Ñ\82аÒ\9bÑ\8bÑ\80Ñ\8bп Ð°Ñ\82Ñ\8b Ð±Ò±Ñ\80Ñ\8bÑ\81 ÐµÐ½Ð³Ñ\96зÑ\96лген.\nÐ\9cÑ\8bнда Ñ\82аÒ\9bÑ\8bÑ\80Ñ\8bп Ð°Ñ\82Ñ\8bнда Ò\9bолдалмайтын бірқатар таңбалар болуы мүмкін.",
+       "badtitletext": "СұÑ\80алÒ\93ан Ð±ÐµÑ\82 Ñ\82аÒ\9bÑ\8bÑ\80Ñ\8bбÑ\8bнÑ\8bÒ£ Ð°Ñ\82Ñ\8b Ð¶Ð°Ñ\80амÑ\81Ñ\8bз, Ð±Ð¾Ñ\81, Ñ\82Ñ\96лаÑ\80алÑ\8bÒ\9b Ñ\81Ñ\96лÑ\82емеÑ\81Ñ\96 Ð½Ðµ Ñ\83ики-аÑ\80алÑ\8bÒ\9b Ñ\82аÒ\9bÑ\8bÑ\80Ñ\8bп Ð°Ñ\82Ñ\8b Ð±Ò±Ñ\80Ñ\8bÑ\81 ÐµÐ½Ð³Ñ\96зÑ\96лген.\nÐ\9eнда Ñ\82аÒ\9bÑ\8bÑ\80Ñ\8bп Ð°Ñ\82Ñ\8bнда Ò\9bолданÑ\8bлмайтын бірқатар таңбалар болуы мүмкін.",
        "perfcached": "Келесі дерек бүркемеленген, сондықтан толықтай жаңаланбаған болуы мүмкін. Кэште ең көбі {{PLURAL:$1|бір нәтиже|$1 нәтиже}} қолжетімді.",
-       "perfcachedts": "Келесі дерек бүркемеленген, соңғы жаңаланған кезі: $1. Кэште {{PLURAL:$4|жазбалардан}} артық сақталмайды..",
-       "querypage-no-updates": "Бұл беттің жаңартылуы ағымда өшірілген. Деректері қазір өзгертілмейді.",
+       "perfcachedts": "Келесі дерек бүркемеленген, соңғы жаңаланған кезі: $1. Кэште ең көбі {{PLURAL:$4|бір нәтиже|$4 нәтиже}} қолжетімді.",
+       "querypage-no-updates": "Бұл беттің жаңартылуы қазіргі уақытта өшірілген.\nДеректері қазір өзгертілмейді.",
        "viewsource": "Қайнарын қарау",
-       "viewsource-title": "$1 бетінің бастапқы мәтінін қарау",
+       "viewsource-title": "$1 бетінің қайнарын қарау",
        "actionthrottled": "Әрекет бәсеңдетілді",
-       "actionthrottledtext": "Спамға қарсы күрес есебінде, осы әрекетті қысқа уақытта тым көп рет орындауыңыз шектелінді, және бұл шектеу шамасынан асып кеткенсіз.\nБірнеше минуттан қайта байқап көріңіз.",
-       "protectedpagetext": "Ð\91ұл Ð±ÐµÑ\82 Ó©Ò£Ð´ÐµÑ\83 Ð½ÐµÐ¼ÐµÑ\81е Ð±Ð°Ñ\81Ò\9bа Ó©Ð·Ð³ÐµÑ\80Ñ\96Ñ\81Ñ\82еÑ\80 ÐµÐ½Ð³Ñ\96зÑ\96лмеÑ\81 үшін қорғалған.",
+       "actionthrottledtext": "Спамға қарсы күрес есебінде осы әрекетті қысқа уақытта тым көп рет орындауыңыз шектелінді және бұл шектеу шамасынан асып кетіпсіз.\nБірнеше минуттан кейін қайта байқап көріңіз.",
+       "protectedpagetext": "Ð\91ұл Ð±ÐµÑ\82 Ó©Ò£Ð´ÐµÑ\83 Ð½ÐµÐ¼ÐµÑ\81е Ð±Ð°Ñ\81Ò\9bа Ó\99Ñ\80екеÑ\82Ñ\82еÑ\80дÑ\96 Ð±Ð¾Ð»Ð´Ñ\8bÑ\80маÑ\83 үшін қорғалған.",
        "viewsourcetext": "Бұл беттің қайнарын қарауыңызға және көшіріп алуыңызға болады:",
-       "viewyourtext": "Осы бет арқылы \"өзіңіз жасаған өңдеулердің\" бастапқы мәтінін көруге және көшіруге мүмкіндігіңіз болады.",
-       "protectedinterface": "This page provides interface text for the software on this wiki, and is protected to prevent abuse.\nTo add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
-       "editinginterface": "'''Ескерту:''' Бағдарламалық жасақтаманың тілдесу мәтінін жетістіретін бетін өңдеп жатырсыз.\nБұл беттің өзгертуі басқа қатысушыларға пайдаланушылық тілдесуі қалай көрінетіне әсер етеді.\nБарлық уикилер үшін аудармаларды өзгерту немесе қосу үшін [//translatewiki.net/ translatewiki.net] МедиаУики жерлестіру жобасын пайдаланыңыз.",
-       "cascadeprotected": "Бұл бет өңдеуден қорғалған, себебі бұл келесі «баулы қорғауы» қосылған {{PLURAL:$1|беттің|беттердің}} кірікбеті:\n$2",
-       "namespaceprotected": "'''$1''' есім аясындағы беттерді өңдеу үшін рұқсатыңыз жоқ.",
-       "customcssprotected": "Сіздің бұл CSS-бетті өңдеуге рұқсатыңыз жоқ, себебі мұнда өзге қатысушының жеке баптаулары бар.",
-       "customjsprotected": "Сіздің бұл JavaScript бетін өңдеуге рұқсатыңыз жоқ, себебі мұнда өзге қатысушының жеке баптаулары бар.",
+       "viewyourtext": "Осы беттен <strong>өңдемелеріңіздің</strong> қайнарын қарай және көшіре аласыз.",
+       "protectedinterface": "Бұл бет осы уикидің бағдарламалық жасақтамасы үшін интерфейс мәтінін қамтамасыз етеді және қиянаттауды болдырмау үшін қорғалған. Барлық уикилер үшін аудармаларды қосу немесе өзгерту үшін [//translatewiki.net/ translatewiki.net] MediaWiki жерсіндіру жобасын қолданыңыз.",
+       "editinginterface": "<strong>Ескерту:</strong> Бағдарламалық жасақтаманың тілдесу мәтінін жетістіретін бетін өңдеп жатырсыз.\nБұл беттің өзгертілуі басқа қатысушыларға пайдаланушылық интерфейсін қалай көрінетіне әсер етеді.\nБарлық уикилер үшін аудармаларды өзгерту немесе қосу үшін [//translatewiki.net/ translatewiki.net] МедиаУики жерсіндіру жобасын пайдаланыңыз.",
+       "cascadeprotected": "Бұл бет өңдеуден қорғалған, себебі бұл келесі «баулы қорғауы» қосылған {{PLURAL:$1|бетке|беттерге}} кірістірілген:\n$2",
+       "namespaceprotected": "<strong>$1</strong> есім кеңістігіндегі беттерді өңдеу рұқсатыңыз жоқ.",
+       "customcssprotected": "Сіздің бұл CSS бетін өңдеуге рұқсатыңыз жоқ, себебі мұнда өзге қатысушының жеке баптауларынан тұрады.",
+       "customjsprotected": "Сіздің бұл JavaScript бетін өңдеуге рұқсатыңыз жоқ, себебі мұнда өзге қатысушының жеке баптауларынан тұрады.",
        "mycustomcssprotected": "Сізде CSS бетін өңдеуге рұқсатыңыз жоқ.",
        "mycustomjsprotected": "Сізде JavaScript бетін өңдеуге рұқсатыңыз жоқ.",
-       "myprivateinfoprotected": "СÑ\96зде Ð¶ÐµÐºÐµ Ð°Ò\9bпаÑ\80аÑ\82Ñ\82аÑ\80Ñ\8bÒ£Ñ\8bздÑ\8b өңдеу рұқсатыңыз жоқ.",
+       "myprivateinfoprotected": "СÑ\96зде Ð¶ÐµÐºÐµ Ð¼Ó\99лÑ\96меÑ\82Ñ\82еÑ\80Ñ\96Ò£Ñ\96здÑ\96 өңдеу рұқсатыңыз жоқ.",
        "mypreferencesprotected": "Сізде баптауларыңызды өңдеуге рұқсатыңыз жоқ.",
-       "ns-specialprotected": "{{ns:special}} есім аясындағы беттер өңдеуге келмейді.",
-       "titleprotected": "Бұл тақырып аты бастаудан [[User:$1|$1]] қорғады.\nКелтірілген себебі: ''$2''.",
-       "filereadonlyerror": "«$2» Ñ\81аÒ\9bÑ\82амаÑ\81Ñ\8b Â«Ñ\82ек Ò\9bана Ð¾Ò\9bÑ\83» Ñ\82Ó\99Ñ\80Ñ\82Ñ\96пÑ\82емеÑ\81Ñ\96нде Ñ\82Ò±Ñ\80Ò\93аÑ\81Ñ\8bн, Â«$1» Ñ\84айлÑ\8bн Ó©Ð·Ð³ÐµÑ\80Ñ\82Ñ\83 Ð¼Ò¯Ð¼ÐºÑ\96н ÐµÐ¼ÐµÑ\81.\nÐ\91ұл Ñ\82Ó\99Ñ\80Ñ\82Ñ\96пÑ\82еменÑ\96 Ò\9bондÑ\8bÑ\80Ò\93ан Ó\99кÑ\96мÑ\88Ñ\96 ÐºÐµÐ»ÐµÑ\81Ñ\96 Ñ\82Ò¯Ñ\81Ñ\96ндÑ\96Ñ\80менÑ\96 Ò\9bалдÑ\8bÑ\80дÑ\8b: Â«''$3''»",
-       "invalidtitle-knownnamespace": "\"$2\" есім кеңістік түрі және  \"$3\" мәтіні жарамсыз",
-       "invalidtitle-unknownnamespace": "Нөмері $1 белгісіз есім кеңістік түрі және \"$2\" мәтіні жарамсыз",
+       "ns-specialprotected": "Арнайы беттер өңдеуге келмейді.",
+       "titleprotected": "Бұл атауды бастаудан [[User:$1|$1]] қорғаған.\nКелтірілген себебі: «<em>$2</em>».",
+       "filereadonlyerror": "«$2» Ñ\84айл Ò\9bоÑ\80Ñ\8b Ñ\82ек Ò\9bана Ð¾Ò\9bÑ\83 Ñ\82Ó\99Ñ\80Ñ\82Ñ\96пÑ\82емеÑ\81Ñ\96нде Ñ\82Ò±Ñ\80Ò\93аÑ\81Ñ\8bн Â«$1» Ñ\84айлÑ\8bн Ó©Ð·Ð³ÐµÑ\80Ñ\82Ñ\83 Ð¼Ò¯Ð¼ÐºÑ\96н ÐµÐ¼ÐµÑ\81.\nÐ\91ұл Ñ\82Ó\99Ñ\80Ñ\82Ñ\96пÑ\82еменÑ\96 Ò\9bондÑ\8bÑ\80Ò\93ан Ó\99кÑ\96мÑ\88Ñ\96 ÐºÐµÐ»ÐµÑ\81Ñ\96 Ñ\82Ò¯Ñ\81Ñ\96ндÑ\96Ñ\80менÑ\96 Ò\9bалдÑ\8bÑ\80дÑ\8b: Â«$3»",
+       "invalidtitle-knownnamespace": "«$2» есім кеңістік түрі және  «$3» мәтіні жарамсыз",
+       "invalidtitle-unknownnamespace": "Нөмері $1 белгісіз есім кеңістік атауы және «$2» мәтіні жарамсыз",
        "exception-nologin": "Кірмегенсіз",
        "exception-nologin-text": "Бұл әрекетке немесе бетке қатынау үшін [[Special:Userlogin|кіріңіз]].",
        "exception-nologin-text-manual": "Бұл бетке қатынау немесе әрекетті орнындау үшін $1",
-       "virus-badscanner": "Ð\94Ò±Ñ\80Ñ\8bÑ\81 ÐµÐ¼ÐµÑ\81 Ñ\96Ñ\88Ò\9bÒ±Ñ\80Ñ\8bлÑ\8bм. Ð\91елгÑ\96Ñ\81Ñ\96з Ð²Ð¸Ñ\80Ñ\83Ñ\81 Ñ\81канеÑ\80Ñ\96: $1",
-       "virus-scanfailed": "Ñ\81канеÑ\80леÑ\83 Ð¾Ñ\80Ñ\8bндалмадÑ\8b (код $1)",
+       "virus-badscanner": "Ð\94Ò±Ñ\80Ñ\8bÑ\81 ÐµÐ¼ÐµÑ\81 Ñ\96Ñ\88Ò\9bÒ±Ñ\80Ñ\8bлÑ\8bм. Ð\91елгÑ\96Ñ\81Ñ\96з Ð²Ð¸Ñ\80Ñ\83Ñ\81 Ñ\81кайнеÑ\80Ñ\96: <em>$1</em>",
+       "virus-scanfailed": "Ñ\81кайнеÑ\80леÑ\83 Ð¾Ñ\80Ñ\8bндалмадÑ\8b (кодÑ\8b: $1)",
        "virus-unknownscanner": "белгісіз антивирус:",
-       "logouttext": "<strong>Ð\96үйеден Ñ\88Ñ\8bÒ\9bÑ\82Ñ\8bÒ£Ñ\8bз.</strong>\n\nÐ\90Ò£Ò\93аÑ\80Ñ\82па: Ð\9aейбÑ\96Ñ\80 Ð±ÐµÑ\82Ñ\82еÑ\80 Ñ\88олÒ\93Ñ\8bÑ\88Ñ\8bÒ£Ñ\8bздÑ\8bÒ£ ÐºÑ\8dÑ\88Ñ\96н Ñ\82азаÑ\80Ñ\82Ò\9bанÑ\88а Ó\99лÑ\96 Ð´Ðµ Ð¶Ò¯Ð¹ÐµÐ³Ðµ ÐºÑ\96Ñ\80Ñ\96п Ð¾Ñ\82Ñ\8bÑ\80Ò\93анÑ\8bÒ£Ñ\8bздай ÐºÓ©Ñ\80Ñ\96нÑ\83Ñ\96 Ð¼Ò¯Ð¼ÐºÑ\96н.",
+       "logouttext": "<strong>Ð\96үйеден Ñ\88Ñ\8bÒ\9bÑ\82Ñ\8bÒ£Ñ\8bз.</strong>\n\nÐ\9aейбÑ\96Ñ\80 Ð±ÐµÑ\82Ñ\82еÑ\80 Ð±Ñ\80оÑ\83зеÑ\80Ñ\96Ò£Ñ\96здÑ\96Ò£ ÐºÑ\8dÑ\88Ñ\96н Ñ\82азаÑ\80Ñ\82Ò\9bанÑ\88а Ó\99лÑ\96 Ð´Ðµ Ð¶Ò¯Ð¹ÐµÐ³Ðµ ÐºÑ\96Ñ\80Ñ\96п Ð¾Ñ\82Ñ\8bÑ\80Ò\93анÑ\8bÒ£Ñ\8bздай ÐºÓ©Ñ\80Ñ\96нÑ\83Ñ\96 Ð¼Ò¯Ð¼ÐºÑ\96ндÑ\96гÑ\96н ÐµÑ\81кеÑ\80Ñ\96Ò£Ñ\96з.",
        "welcomeuser": "Қош келдіңіз, $1!",
-       "welcomecreation-msg": "Сіздің тіркеліміңіз жасалынды.\n[[Special:Preferences|{{SITENAME}} баптауларыңызды]] өзгертуді ұмытпаңыз.",
+       "welcomecreation-msg": "Сіз тіркелдіңіз.\n{{SITENAME}} [[Special:Preferences|баптауларыңызды]] өзіңіз қалауыңыз бойынша өзгерте аласыз.",
        "yourname": "Қатысушы аты:",
        "userlogin-yourname": "Қатысушы есіміңіз",
        "userlogin-yourname-ph": "Қатысушы есіміңізді енгізіңіз",
-       "createacct-another-username-ph": "Қатысушы есіміңізді енгізіңіз",
+       "createacct-another-username-ph": "Қатысушы есімін енгізіңіз",
        "yourpassword": "Құпия сөз:",
        "userlogin-yourpassword": "Құпия сөз",
        "userlogin-yourpassword-ph": "Құпия сөздіңізді енгізіңіз",
        "createacct-yourpasswordagain-ph": "Құпия сөзіңізді қайтадан енгізіңіз",
        "remembermypassword": "Тіркелгімді осы браузерде ұмытпа (ең көбі $1 {{PLURAL:$1|күн|күн}})",
        "userlogin-remembermypassword": "Мені жүйеде сақтап қою",
-       "userlogin-signwithsecure": "Құпия байланысуды қолдану",
-       "yourdomainname": "Желі үйшігіңіз:",
+       "userlogin-signwithsecure": "Қауіпсіз байланысуды қолдану",
+       "yourdomainname": "Үйшігіңіз:",
        "password-change-forbidden": "Сіз бұл уикиде құпия сөзіңізді өзгерте алмайсыз.",
        "externaldberror": "Осы арада не шеттік растау дерекқорында қате болды, немесе шеттік тіркелгіңізді жаңалау рұқсаты жоқ.",
        "login": "Кіру",
        "nav-login-createaccount": "Кіру / Тіркелу",
-       "loginprompt": "{{SITENAME}} Ñ\82оÑ\80абÑ\8bна ÐºÑ\96Ñ\80Ñ\83Ñ\96Ò£Ñ\96з Ò¯Ñ\88Ñ\96н Â«cookies» Ò\9bоÑ\81Ñ\8bлÑ\83Ñ\8b Ð¶Ó©Ð½.",
+       "loginprompt": "{{SITENAME}} Ñ\82оÑ\80абÑ\8bна ÐºÑ\96Ñ\80Ñ\83Ñ\96Ò£Ñ\96з Ò¯Ñ\88Ñ\96н Â«cookies» Ò\9bоÑ\81Ñ\8bлÑ\83Ñ\8b ÐºÐµÑ\80ек.",
        "userlogin": "Кіру / Тіркелу",
        "userloginnocreate": "Кіру",
        "logout": "Шығу",
        "notloggedin": "Кірмегенсіз",
        "userlogin-noaccount": "Тіркелгіңіз жоқ па?",
        "userlogin-joinproject": "{{SITENAME}} жобасына тіркелу",
-       "nologin": "ТÑ\96Ñ\80келгÑ\96Ò£Ñ\96з Ð±Ð°Ñ\80 Ð¼а? $1.",
+       "nologin": "ТÑ\96Ñ\80келгÑ\96Ò£Ñ\96з Ð¶Ð¾Ò\9b Ð¿а? $1.",
        "nologinlink": "Тіркелгіңізді жасаңыз",
-       "createaccount": "Ð\96аңа Ñ\82Ñ\96Ñ\80келгÑ\96",
+       "createaccount": "ТÑ\96Ñ\80келÑ\83",
        "gotaccount": "Бұған дейін тіркеліп пе едіңіз? '''$1'''.",
        "gotaccountlink": "Кіріңіз",
        "userlogin-resetlink": "Қатысушы атын не құпия сөзді ұмыттыңыз ба?",
        "userlogin-helplink2": "Кіруге көмек",
        "userlogin-loggedin": "{{GENDER:$1|$1}} ретінде әлдеқашан кіргенсіз.\nТөмендегі пішінді басқа қатысушы кіруі ретінде қолданыңыз.",
        "userlogin-createanother": "Басқа тіркелгі жасау",
-       "createacct-emailrequired": "Е-пошта мекен-жайы:",
-       "createacct-emailoptional": "Е-поштаның мекен-жайы (міндетті емес)",
+       "createacct-emailrequired": "Е-пошта мекен-жайы",
+       "createacct-emailoptional": "Е-пошта мекен-жайы (міндетті емес)",
        "createacct-email-ph": "Е-пошта мекен-жайыңызды енгізіңіз",
        "createacct-another-email-ph": "Е-пошта мекен-жайын енгізіңіз",
-       "createaccountmail": "Уақытша берілген кілтсөзді пайдаланыңыз және оны көрсетілген электрондық поштаға жіберіңіз",
+       "createaccountmail": "Уақытша берілген құпия сөзді пайдаланыңыз және оны көрсетілген электрондық поштаға жіберіңіз",
        "createacct-realname": "Нақты атыңыз (ерікті)",
        "createaccountreason": "Себебі:",
        "createacct-reason": "Себебі:",
        "createacct-imgcaptcha-ph": "Жоғарыдағы мәтінді енгізіңіз",
        "createacct-submit": "Тіркелгіңізді жасаңыз",
        "createacct-another-submit": "Басқа тіркелгі жасау",
-       "createacct-benefit-heading": "{{SITENAME}} сіз сияқты қызығатын адамдар арқылы жасалады.",
+       "createacct-benefit-heading": "{{SITENAME}} сіздермен жасалады.",
        "createacct-benefit-body1": "{{PLURAL:$1|өңдеме|өңдеме}}",
        "createacct-benefit-body2": "{{PLURAL:$1|бет|бет}}",
        "createacct-benefit-body3": "жуықтағы {{PLURAL:$1|қатысушы|қатысушы}}",
        "nocookiesnew": "Жаңа қатысушы тіркелгісі жасалды, бірақ кірмегенсіз.\nҚатысушы кіру үшін {{SITENAME}} торабында «cookie» файлдары қолданылады.\nСізде «cookies» өшірілген.\nСоны қосыңыз да жаңа қатысушы атыңызды және құпия сөзіңізді енгізіп кіріңіз.",
        "nocookieslogin": "Қатысушы кіру үшін {{SITENAME}} торабында «cookies» деген қолданылады.\nСізде «cookies» өшірілген.\nСоны қосыңыз да кіруді қайта байқап көріңіз.",
        "nocookiesfornew": "Оның қайнарын растай алмағандықтан қатысушының аккаунты тіркелмеді. «Cookies» қосылып тұрғанына көз жеткізіңіз, бетті қайта жаңартыңыз және тағы байқап көріңіз.",
-       "noname": "Ð\96аÑ\80амдÑ\8b Ò\9bаÑ\82Ñ\8bÑ\81Ñ\83Ñ\88Ñ\8b Ð°Ñ\82Ñ\8bн ÐµÐ½Ð³Ñ\96збедÑ\96Ò£Ñ\96з.",
-       "loginsuccesstitle": "Кіруіңіз сәтті өтті",
-       "loginsuccess": "'''Сіз енді {{SITENAME}} жобасына «$1» ретінде кірдіңіз.'''",
-       "nosuchuser": "«$1» деген қатысушы тіркелмеген.\nҚатысушы аттары кіші әріптерден тұру керек.\nЕмлеңізді тексеріңіз, немесе [[Special:UserLogin/signup|жаңа тіркелгі жасаңыз]].",
-       "nosuchusershort": "Мұнда «$1» деп аталған қатысушы жоқ.\nЕмлеңізді тексеріңіз.",
-       "nouserspecified": "Қатысушы атын келтіруіңіз жөн.",
+       "noname": "СÑ\96зде Ð¶Ð°Ñ\80амдÑ\8b Ò\9bаÑ\82Ñ\8bÑ\81Ñ\83Ñ\88Ñ\8b Ð°Ñ\82Ñ\8b Ð°Ð½Ñ\8bÒ\9bÑ\82алмаÒ\93ан.",
+       "loginsuccesstitle": "Кіруіңіз сәтті болды.",
+       "loginsuccess": "<strong>Сіз енді {{SITENAME}} жобасына «$1» ретінде кірдіңіз.</strong>",
+       "nosuchuser": "Мұнда «$1» деп аталған қатысушы тіркелмеген.\nҚатысушы аттары кіші әріптерден тұру керек.\nЕмлеңізді тексеріңіз немесе [[Special:UserLogin/signup|жаңа тіркелгі жасаңыз]].",
+       "nosuchusershort": "Мұнда «$1» деп аталған қатысушы тіркелмеген.\nЕмлеңізді тексеріңіз.",
+       "nouserspecified": "Қатысушы атын көрсетуіңіз керек.",
        "login-userblocked": "Бұл қатысушы бұғатталған. Жүйеге кiру рұқсат етiлмеген.",
-       "wrongpassword": "Ð\91Ò±Ñ\80Ñ\8bÑ\81 Ò\9bұпиÑ\8f Ñ\81өз ÐµÐ½Ð³Ñ\96зÑ\96лген. Қайта байқап көріңіз.",
-       "wrongpasswordempty": "Құпия сөз бос болған. Қайта байқап көріңіз.",
-       "passwordtooshort": "Құпия сөзіңіз жарамсыз немесе тым қысқа.\nБұнда ең кемінде $1 таңба болуы керек.",
-       "password-name-match": "Енгізген құпия сөзіңіз қатысушы атынан өзгеше болуы қажет.",
+       "wrongpassword": "Ð\94Ò±Ñ\80Ñ\8bÑ\81 ÐµÐ¼ÐµÑ\81 Ò\9bұпиÑ\8f Ñ\81өз ÐµÐ½Ð³Ñ\96зÑ\96лген. \nҚайта байқап көріңіз.",
+       "wrongpasswordempty": "Құпия сөз бос болған.\nҚайта байқап көріңіз.",
+       "passwordtooshort": "Құпиясөзде кем дегенде {{PLURAL:$1|1таңба|таңба}} болуы керек.",
+       "password-name-match": "Құпия сөзіңіз қатысушы атынан өзгеше болуы қажет.",
        "password-login-forbidden": "Бұл қатысушы аты мен құпия сөзін пайдалануға тыйым салынған.",
        "mailmypassword": "Құпия сөзді қалпына кеттіру",
        "passwordremindertitle": "{{SITENAME}} үшін жаңа уақытша құпия сөз",
-       "passwordremindertext": "Біреу (IP мекенжайы: $1, бәлкім өзіңіз боларсыз) {{SITENAME}} үшін жаңа құпия сөз жөнелету сұранымын жасаған ($4).\nҚатысушы «$2» үшін уақытша құпия сөз жасалды: «$3». Егер бұл Сіздің сұранымыңыз болса, жүйеге кіріп құпия сөзді өзгертуіңіз керек. Сіздің уақытша құпия сөзіңіз $5 дейін белсенді болады.\n\nЕгер бұл сұранымды Сіз жасамасыңыз, не құпия сөзді еске түсіріп енді өзгерткіңіз келмесе, ескі құпия сөзді қолдануды жалғастырып осы хатқа аңғармауыңызға да болады.",
-       "noemail": "Осы арада «$1» қатысушының е-пошта мекенжайы жоқ.",
-       "noemailcreate": "СÑ\96зге Ð½Ð°Ò\9bÑ\82Ñ\8b Ð¶Ð°Ñ\80амдÑ\8b Ñ\8dлекÑ\82Ñ\80ондÑ\8bÒ\9b Ð¿Ð¾Ñ\88Ñ\82а Ð¼ÐµÐºÐµÐ½-жайÑ\8bн ÐºÓ©Ñ\80Ñ\81еÑ\82Ñ\83 ÐºÐµÑ\80ек.",
-       "passwordsent": "Жаңа құпия сөз «$1» үшін тіркелген е-пошта мекенжайына жөнелтілді.\nҚабылдағаннан кейін кіргенде соны енгізіңіз.",
+       "passwordremindertext": "Біреу (IP мекенжайы: $1, бәлкім өзіңіз боларсыз) {{SITENAME}} жобасында жаңа құпия сөз жөнелету сұранымын жасаған ($4).\nҚатысушы «$2» үшін уақытша құпия сөз жасалды: «$3». Егер бұл сіздің сұранымыңыз болса қазір жүйеге кіріп жаңа құпия сөз таңдауыңыз керек. \nСіздің уақытша құпия сөзіңіз {{PLURAL:$5|бір күнге|$5 күнге}} дейін белсенді болады.\n\nЕгер бұл сұранымды басқа біреу жасаса, не құпия сөздіңізді еске түсіріп енді өзгерткіңіз келмесе ескі құпия сөзді қолдануды жалғастырып осы хатты елемеуіңізге да болады.",
+       "noemail": "Осы арада жазылып алынған «$1» қатысушының е-пошта мекенжайы жоқ.",
+       "noemailcreate": "Сізге жарамды электрондық пошта мекен-жайын көрсету керек.",
+       "passwordsent": "Жаңа құпия сөз «$1» үшін тіркелген е-пошта мекенжайына жөнелтілді.\nҚабылдағаннан кейін қайта жүйеге кіргенде соны енгізіңіз.",
        "blocked-mailpassword": "IP мекенжайыңыздан өңдеу бұғатталған, сондықтан қиянатты қақпайлау үшін құпия сөзді қалпына келтіру жетесін қолдануына рұқсат етілмейді.",
-       "eauthentsent": "Ò\9aұпÑ\82аÑ\83 Ñ\85аÑ\82Ñ\8b Ð°Ð¹Ñ\82Ñ\8bлмÑ\8bÑ\88 Ðµ-поÑ\88Ñ\82а Ð¼ÐµÐºÐµÐ½Ð¶Ð°Ð¹Ñ\8bна Ð¶Ó©Ð½ÐµÐ»Ñ\82Ñ\96лдÑ\96.\nÐ\91аÑ\81Ò\9bа Ðµ-поÑ\88Ñ\82а Ñ\85аÑ\82Ñ\8bн Ð¶Ó©Ð½ÐµÐ»Ñ\82Ñ\83 Ð°Ð»Ð´Ñ\8bнан, Ñ\82Ñ\96Ñ\80келгÑ\96 Ñ\88Ñ\8bнÑ\8bнан сіздікі екенін құптау үшін хаттағы нұсқамаларға лесіңіз.",
-       "throttled-mailpassword": "Соңғы {{PLURAL:$1|сағатта|$1 сағатта}} құпия сөз ескерту хаты әлдеқашан жөнелтілді.\nҚиянатты қақпайлау үшін {{PLURAL:$1|сағат|$1 сағат}} сайын тек бір ғана құпия сөз ескерту хаты жөнелтіледі.",
+       "eauthentsent": "Ò\9aұпÑ\82аÑ\83 Ñ\85аÑ\82Ñ\8b ÐºÓ©Ñ\80Ñ\81еÑ\82Ñ\96лген Ðµ-поÑ\88Ñ\82а Ð¼ÐµÐºÐµÐ½Ð¶Ð°Ð¹Ñ\8bна Ð¶Ó©Ð½ÐµÐ»Ñ\82Ñ\96лдÑ\96.\nÐ\9aез-келген Ð±Ð°Ñ\81Ò\9bа Ðµ-поÑ\88Ñ\82а Ñ\85аÑ\82Ñ\8bн Ñ\82Ñ\96Ñ\80келгÑ\96ге Ð¶Ó©Ð½ÐµÐ»Ñ\82Ñ\83 Ð°Ð»Ð´Ñ\8bнан, Ñ\82Ñ\96Ñ\80келгÑ\96 Ñ\88Ñ\8bнÑ\8bмен сіздікі екенін құптау үшін хаттағы нұсқамаларға лесіңіз.",
+       "throttled-mailpassword": "Соңғы {{PLURAL:$1|сағатта|$1 сағатта}} құпия сөзді өзгерту хаты әлдеқашан жіберілді.\nҚиянатты қақпайлау үшін {{PLURAL:$1|сағат|$1 сағат}} сайын тек бір ғана құпия сөзді өзгерту хаты жіберіледі.",
        "mailerror": "Хат жөнелту қатесі: $1",
-       "acct_creation_throttle_hit": "Сіздің IP-мекенжайыңызбен осы уикиге кірушілер соңғы күнде {{PLURAL:$1|1 тіркелгі|$1 тіркелгі}} жасапты. Одан артық бұл уақыт аралығында рұқсат етілмейді.\nНәтижесінде осы IP-мекенжайды пайдаланып кірушілер дәл қазіргі уақытта бірнеше тіркелгі жасай алмайды.",
-       "emailauthenticated": "Е-пошта мекен-жайыңыз расталған кезі: $3, $2.",
-       "emailnotauthenticated": "Е-пошта мекен-жайыңыз әлі расталған жоқ.\nКелесі әрбір мүмкіндіктер үшін еш хат жөнелтілмейді.",
+       "acct_creation_throttle_hit": "Сіздің IP мекенжайыңызбен осы уикиге кірушілер соңғы күнде {{PLURAL:$1|1 тіркелгі|$1 тіркелгі}} жасапты. Одан артық бұл уақыт аралығында рұқсат етілмейді.\nНәтижесінде осы IP мекенжайды пайдаланып кірушілер дәл қазіргі уақытта бірнеше тіркелгі жасай алмайды.",
+       "emailauthenticated": "Е-пошта мекенжайыңыз расталған кезі: $3, $2.",
+       "emailnotauthenticated": "Е-пошта мекенжайыңыз әлі расталған жоқ.\nКелесі әрбір мүмкіндіктер үшін еш хат жөнелтілмейді.",
        "noemailprefs": "Осы мүмкіндіктер істеуі үшін е-пошта мекен-жайыңызды енгізіңіз.",
        "emailconfirmlink": "Е-пошта мекен-жайыңызды құптаңыз",
-       "invalidemailaddress": "Ð\91ұл Ðµ-поÑ\88Ñ\82а ÐµÑ\81Ñ\96мÑ\96 Ð¿Ñ\96Ñ\88Ñ\96мге Ñ\81Ó\99йкеÑ\81 ÐºÐµÐ»Ð¼ÐµÐ³ÐµÐ½Ð´Ñ\96кÑ\82ен Ò\9bабÑ\8bлданбайдÑ\8b.\nÐ\94Ò±Ñ\80Ñ\8bÑ\81 Ð¿Ñ\96Ñ\88Ñ\96мделген Ðµ-поÑ\88Ñ\82а ÐµÑ\81Ñ\96мÑ\96н ÐµÐ½Ð³Ñ\96зÑ\96Ò£Ñ\96з, Ð½ÐµÐ¼ÐµÑ\81е Ð°Ñ\83мақты бос қалдырыңыз.",
-       "cannotchangeemail": "Тіркелгінің е-поштасының мекен-жайы бұл уикиде өзгертілмейді.",
-       "emaildisabled": "Бұл сайт е-поштаның хабарламасын жібере алмайды.",
+       "invalidemailaddress": "Ð\91ұл Ðµ-поÑ\88Ñ\82а Ð¼ÐµÐºÐµÐ½Ð¶Ð°Ð¹Ñ\8b Ð¶Ð°Ñ\80амÑ\81Ñ\8bз Ð¿Ñ\96Ñ\88Ñ\96мде Ð±Ð¾Ð»Ò\93анÑ\8b Ð°Ð½Ñ\8bÒ\9bÑ\82алÒ\93андÑ\8bÒ\9bÑ\82ан Ò\9bабÑ\8bлданбайдÑ\8b.\nÐ\94Ò±Ñ\80Ñ\8bÑ\81 Ð¿Ñ\96Ñ\88Ñ\96мделген Ðµ-поÑ\88Ñ\82а Ð¼ÐµÐºÐµÐ½Ð¶Ð°Ð¹Ñ\8bн ÐµÐ½Ð³Ñ\96зÑ\96Ò£Ñ\96з Ð½ÐµÐ¼ÐµÑ\81е Ð¶Ð¾Ð»ақты бос қалдырыңыз.",
+       "cannotchangeemail": "Тіркелгінің е-пошта мекенжайы бұл уикиде өзгертілмейді.",
+       "emaildisabled": "Бұл сайт хаттар жібере алмайды.",
        "accountcreated": "Тіркелгі жасалды",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|талқылауы]]) үшін жаңа қатысушы тіркелгісі жасалды.",
-       "createaccount-title": "{{SITENAME}} үшін тіркелу",
-       "createaccount-text": "Кейбіреу е-пошта мекенжайыңызды пайдаланып {{SITENAME}} жобасында ($4) «$2» атауымен, «$3» құпия сөзімен тіркелгі жасаған.\nЖобаға кіріуіңіз және құпия сөзіңізді өзгертуіңіз тиісті.\n\nЕгер бұл тіркелгі қателікпен жасалса, осы хабарға елемеуіңіз мүмкін.",
-       "login-throttled": "Сіз жүйеге кіру үшін тым көп талпыныс жасадыңыз. Өтінемін, қайта кірмес бұрын $1 күте тұрыңыз.",
-       "login-abort-generic": "Жүйеге кіру үшін сәтсіз талпыныс жасадыңыз.",
+       "createaccount-title": "{{SITENAME}} жобасына тіркелу",
+       "createaccount-text": "Әлдебіреу е-пошта мекенжайыңызды пайдаланып {{SITENAME}} жобасында ($4) «$2» деген атау, «$3» деген құпия сөзбен тіркелгі жасаған.\nҚазір жүйеге кіріуіңіз және құпия сөзіңізді өзгертуіңіз керек.\n\nЕгер бұл тіркелгі қателікпен жасалса осы хабарламаны елемеуіңізге болады.",
+       "login-throttled": "Сіз жүйеге кіру үшін тым көп талпыныс жасадыңыз.\nҚайта байқап көрмес бұрын $1 күте тұрыңыз.",
+       "login-abort-generic": "Жүйеге кіру сәтсіз болды - Доғарылды.",
        "loginlanguagelabel": "Тіл: $1",
-       "suspicious-userlogout": "Сіздің жүйеден шығу сұранымыңыз қабылданбады, өйткені, бұл жарамсыз браузер немесе кэштеуші проксидің сұранымына ұқсайды.",
+       "suspicious-userlogout": "Сіздің жүйеден шығу сұранымыңыз қабылданбады, өйткені бұл бұзылған браузер немесе кэштеуші прокси арқылы жіберілгенге ұқсайды.",
        "pt-login": "Кіру",
        "pt-login-button": "Кіру",
        "pt-createaccount": "Тіркелгі жасау",
        "pt-userlogout": "Шығу",
        "php-mail-error-unknown": "Mail() PHP-функциясындағы белгісіз қате.",
-       "user-mail-no-addy": "Е-пошта есімінсіз хабарлама жіберуге талпынды.",
+       "user-mail-no-addy": "Е-пошта мекенжайынсыз хабарлама жіберуді байқап көрді.",
+       "user-mail-no-body": "Бос немесе қысқа мағынасыз хабарлама жіберуді байқап көрді.",
        "changepassword": "Құпия сөзді өзгерту",
-       "resetpass_announce": "Ð\9aÑ\96Ñ\80Ñ\83Ñ\96Ò£Ñ\96здÑ\96 Ð±Ñ\96Ñ\82Ñ\96Ñ\80Ñ\83 Ò¯Ñ\88Ñ\96н Ð¶Ð°Ò£Ð° Ò\9bұпиÑ\8f Ñ\81өзÑ\96Ò£Ñ\96здÑ\96 Ð¼Ñ\8bнда енгізуіңіз керек:",
+       "resetpass_announce": "Ð\9aÑ\96Ñ\80Ñ\83Ñ\96Ò£Ñ\96здÑ\96 Ð°Ñ\8fÒ\9bÑ\82аÑ\83 Ò¯Ñ\88Ñ\96н Ð¶Ð°Ò£Ð° Ò\9bұпиÑ\8f Ñ\81өзÑ\96Ò£Ñ\96здÑ\96 енгізуіңіз керек:",
        "resetpass_header": "Құпия сөзді өзгерту",
        "oldpassword": "Ескі құпия сөзіңіз:",
        "newpassword": "Жаңа құпия сөзіңіз:",
        "changepassword-success": "Құпия сөзіңіз сәтті өзгертілді!",
        "changepassword-throttled": "Сіз жақында кіруге тым көп әрекет жасадыңыз.\nҚайта байқап көру үшін $1 уақыт күте тұрыңыз.",
        "resetpass_forbidden": "Құпия сөз өзгертілмейді",
-       "resetpass-no-info": "Бұл бетке тікелей ену үшін, жүйеге кіруіңіз керек.",
+       "resetpass-no-info": "Бұл бетке тікелей ену үшін жүйеге кіруіңіз керек.",
        "resetpass-submit-loggedin": "Құпия сөзді өзгерту",
        "resetpass-submit-cancel": "Болдырмау",
-       "resetpass-wrong-oldpass": "Уақытша немесе ағымдағы құпия сөзіңіз дұрыс емес.\nМүмкін Сіз құпия сөзді сәтті өзгерткенсіз, немесе жаңа уақытша құпия сөзге сұраным жасағансыз.",
+       "resetpass-wrong-oldpass": "Уақытша немесе қазіргі құпия сөзіңіз жарамсыз.\nМүмкін сіз құпия сөзді сәтті өзгерткенсіз немесе жаңа уақытша құпия сөзге сұраным жасағансыз.",
        "resetpass-temp-password": "Уақытша құпия сөз:",
-       "resetpass-abort-generic": "Құпия сөзді өзгерту кеңейтпенің әсерінен аяқталмады.",
+       "resetpass-abort-generic": "Құпия сөзді өзгерту кеңейтілім арқылы доғарылды.",
        "passwordreset": "Құпия сөзді қайтару",
-       "passwordreset-text-one": "Құпия сөзіңізді түзеу үшін бұл пішінді толтырыңыз.",
-       "passwordreset-text-many": "{{PLURAL:$1|Ð\95-поÑ\87та арқылы уақытша құпия сөзді қабылдау үшін жолақтардың бірін толтырыңыз.}}",
+       "passwordreset-text-one": "Уақытша құпия сөзіңізді электрон пошта арқылы қабылдау үшін бұл пішінді толтырыңыз.",
+       "passwordreset-text-many": "{{PLURAL:$1|Ð\95-поÑ\88та арқылы уақытша құпия сөзді қабылдау үшін жолақтардың бірін толтырыңыз.}}",
        "passwordreset-legend": "Құпия сөзді қайтару",
        "passwordreset-disabled": "Бұл уикиде құпия сөзді қайтару ажыратылған.",
        "passwordreset-emaildisabled": "E-mail мүмкіндігі бұл уикиде өшірілген.",
        "passwordreset-emailerror-capture": "Жазылған ескертпе-хат төменде көрсетілген, оның жөнелтілмеу себебі: $1",
        "changeemail": "Е-пошта мекен-жайын өзгерту",
        "changeemail-header": "Е-пошта мекен-жайының өзгертілуі",
-       "changeemail-text": "Е-поштаның мекен-жайын өзгерту үшін мына пішінді толтырыңыз. Өзгертулерді растау үшін Сізге құпия сөзді енгізу керек.",
-       "changeemail-no-info": "Бұл бетке тікелей ену үшін, жүйеге кіруіңіз керек.",
-       "changeemail-oldemail": "Е-поштаның ағымдағы мекен-жайы:",
-       "changeemail-newemail": "Ð\95-поÑ\88Ñ\82анÑ\8bÒ£ Ð¶Ð°Ò£Ð° Ð¼ÐµÐºÐµÐ½ жайы:",
+       "changeemail-text": "Е-поштаның мекен-жайын өзгерту үшін мына пішінді толтырыңыз. Өзгертулерді растау үшін құпия сөздіңізді енгізу керек.",
+       "changeemail-no-info": "Бұл бетке тікелей ену үшін жүйеге кіруіңіз керек.",
+       "changeemail-oldemail": "Е-поштаның қазіргі уақыттағы мекен-жайы:",
+       "changeemail-newemail": "Ð\96аңа Ðµ-поÑ\88Ñ\82а Ð¼ÐµÐºÐµÐ½жайы:",
        "changeemail-none": "(ешкім)",
-       "changeemail-password": "Сіздің {{SITENAME}} жобасындағы құпия сөзіңіз:",
+       "changeemail-password": "{{SITENAME}} жобасындағы құпия сөзіңіз:",
        "changeemail-submit": "Е-поштаны өзгерту",
        "changeemail-cancel": "Болдырмау",
        "changeemail-throttled": "Сіз жақында кіруге тым көп әрекет жасадыңыз.\nҚайта байқап көру үшін $1 уақыт күте тұрыңыз.",
        "italic_tip": "Қиғаш мәтін",
        "link_sample": "Сілтеме тақырыбының аты",
        "link_tip": "Ішкі сілтеме",
-       "extlink_sample": "http://www.мысал.com сілтеме тақырыбының аты",
-       "extlink_tip": "ШеÑ\82Ñ\82Ñ\96к сілтеме (алдынан http:// енгізуін ұмытпаңыз)",
+       "extlink_sample": "http://www.example.com сілтеме тақырыбының аты",
+       "extlink_tip": "СÑ\8bÑ\80Ñ\82Ò\9bÑ\8b сілтеме (алдынан http:// енгізуін ұмытпаңыз)",
        "headline_sample": "Бас жол мәтіні",
        "headline_tip": "2-ші деңгейлі бас жол",
-       "nowiki_sample": "Ð\9fÑ\96Ñ\88Ñ\96мделÑ\96нбеген Ð¼Ó\99Ñ\82Ñ\96ндÑ\96 Ð¼Ñ\8bнда ÐµÐ½Ð³Ñ\96зіңіз",
-       "nowiki_tip": "Уики пішімін елемеу",
+       "nowiki_sample": "ФоÑ\80маÑ\82Ñ\82алмаÒ\93ан Ð¼Ó\99Ñ\82Ñ\96ндÑ\96 Ð¼Ñ\8bнда ÐºÑ\96Ñ\80Ñ\96Ñ\81Ñ\82Ñ\96Ñ\80іңіз",
+       "nowiki_tip": "Уики форматтауын елемеу",
        "image_sample": "Мысал.jpg",
        "image_tip": "Ендірілген файл",
        "media_tip": "Файл сілтемесі",
        "preview": "Қарап шығу",
        "showpreview": "Алдын ала қарау",
        "showdiff": "Өзгерістерді көрсет",
-       "anoneditwarning": "'''Ескерту:''' Сіз жүйеге кірмегенсіз.\nIP-мекенжайыңыз бұл беттің түзету тарихында жазылып алынады.",
-       "anonpreviewwarning": "\"Сіз жүйеге кірмегенсіз. IP-мекенжайыңыз бұл беттің өңдеу тарихында жазылып алынады.\"",
-       "missingsummary": "'''Ескерту:''' Өңдеменің қысқаша түйіндемесін енгізбепсіз.\n«Сақтау» түймесін қайта бассаңыз, өңденмеңіз түйіндемесіз сақталады.",
-       "missingcommenttext": "Ð\9cÓ\99ндемеңÑ\96здÑ\96 Ñ\82өменде енгізіңіз.",
-       "missingcommentheader": "'''Ескерту:''' Бұл мәндемеге тақырып/басжол жазбапсыз.\n«{{int:savearticle}}» түймесін тағы бассаңыз, өңдемеңіз түйіндемесіз жазылады.",
+       "anoneditwarning": "<strong> Ескерту:</strong>  Сіз жүйеге кірмегенсіз.\nIP мекенжайыңыз бұл беттің өңделу тарихында жазылып алынады.",
+       "anonpreviewwarning": "<em>Сіз жүйеге кірмегенсіз. IP мекенжайыңыз бұл беттің өңделу тарихында жазылып алынады.</em>",
+       "missingsummary": "<strong>Ескерту:</strong> Өңдеменің қысқаша түйіндемесін енгізбепсіз.\n«{{int:savearticle}}» батырмасын қайта бассаңыз өңденмеңіз түйіндемесіз сақталады.",
+       "missingcommenttext": "Ð\9fÑ\96кÑ\96Ñ\80Ñ\96Ò£Ñ\96здÑ\96 Ñ\82өменге енгізіңіз.",
+       "missingcommentheader": "<strong>Ескерту:</strong> Бұл пікірге тақырыпы/бас жолы жазбапсыз.\n«{{int:savearticle}}» түймесін тағы бассаңыз өңдемеңіз түйіндемесіз сақталады.",
        "summary-preview": "Қысқаша түйіндемесін қарап шығу:",
        "subject-preview": "Тақырыбын/бас жолын қарап шығу:",
        "blockedtitle": "Қатысушы бұғатталған",
-       "blockedtext": "'''Қатысушы атыңыз не IP мекенжайыңыз бұғатталған.'''\n\nОсы бұғаттауды $1 істеген. Келтірілген себебі: ''$2''.\n\n* Бұғаттаудың басталғаны: $8\n* Бұғаттаудың бітетіні: $6\n* Бұғаттау нысанасы: $7\n\nОсы бұғаттауды талқылау үшін $1, не өзге [[{{MediaWiki:Grouppage-sysop}}|әкімшімен]] қатынасуыңызға болады.\n[[Special:Preferences|Тіркелгі бапталымдары]]ңызда жарамды е-пошта мекенжайын ұсынып және де оны пайдаланудан бұғатталмаған жағдайыңызда ғана «Қатысушыға хат жазу» қызметін қолдана аласыз.\nАғымдық IP мекенжайыңыз: $3, және бұғатау нөмірі: $5.\nСұраным жасағанда осының екеуін де кірістіруіңізді сұраймыз.",
-       "autoblockedtext": "'''Қатысушы атыңыз не IP-мекенжайыңыз бұғатталған.'''\n\nОсы бұғаттауды $1 істеген. Келтірілген себебі: ''$2''.\n\n* Бұғаттаудың басталғаны: $8\n* Бұғаттаудың бітетіні: $6\n* Бұғаттау нысанасы: $7\n\nОсы бұғаттауды талқылау үшін $1, не өзге [[{{MediaWiki:Grouppage-sysop}}|әкімшімен]] қатынасуыңызға болады.\n[[Special:Preferences|Тіркелгі бапталымдары]]ңызда жарамды е-пошта мекенжайын ұсынып және де оны пайдаланудан бұғатталмаған жағдайыңызда ғана «Қатысушыға хат жазу» қызметін қолдана аласыз.\nАғымдық IP мекенжайыңыз: $3, және бұғатау нөмірі: $5.\nСұраным жасағанда осының екеуін де кірістіруіңізді сұраймыз.",
+       "blockedtext": "<strong>Қатысушы атыңыз не IP мекенжайыңыз бұғатталған.</strong>\n\n$1 деген әкімші бұғаттаған. \nКелтірілген себебі: <em>$2</em>.\n\n* Бұғаттаудың басталғаны: $8\n* Бұғаттаудың бітетіні: $6\n* Бұғаттау нысанасы: $7\n\nОсы бұғаттауды талқылау үшін $1 не өзге [[{{MediaWiki:Grouppage-sysop}}|әкімшімен]] байланыса аласыз.\n[[Special:Preferences|Тіркелгі бапталымдары]]ңызда жарамды е-пошта мекенжайын көрсетіп және де оны пайдаланудан бұғатталмаған жағдайда ғана «Қатысушыға хат жазу» қызметін қолдана аласыз.\nАғымдық IP мекенжайыңыз: $3, бұғатау нөмірі: #$5.\nСұраным жасағанда осының екеуін де кірістіруіңізді сұраймыз.",
+       "autoblockedtext": "IP мекенжайыңыз автоматты бұғатталған, себебі оны басқа қатысушы пайдаланған. Оны $1 есімді әкімші бұғаттаған\n\nКелтірілген себебі: \n:<em>$2</em>\n\n* Бұғаттаудың басталғаны: $8\n* Бұғаттаудың бітетіні: $6\n* Бұғаттау нысанасы: $7\n\nОсы бұғаттауды талқылау үшін $1 не басқа [[{{MediaWiki:Grouppage-sysop}}|әкімшімен]] байланыса аласыз.\n[[Special:Preferences|Тіркелгі бапталымдары]]ңызда жарамды е-пошта мекенжайын көрсеткен болсаңыз және де оны пайдаланудан бұғатталмаған жағдайда ғана «Қатысушыға хат жазу» қызметін қолдана аласыз.\nАғымдық IP мекенжайыңыз: $3, бұғатау нөмірі: $5.\nСұраным жасағанда осының екеуін де кірістіруіңізді сұраймыз.",
        "blockednoreason": "еш себебі келтірілмеген",
        "whitelistedittext": "Беттерді өңдеу үшін $1.",
-       "confirmedittext": "Беттерді өңдеу үшін алдын ала Е-пошта мекенжайыңызды құптауыңыз жөн.\nЕ-пошта мекенжайыңызды [[Special:Preferences|қатысушы бапталымдарыңыз]] арқылы қойыңыз да жарамдылығын тексеріп шығыңыз.",
-       "nosuchsectiontitle": "Бұл бөлімді табу мүмкін емес",
-       "nosuchsectiontext": "СÑ\96з Ð±Ò±Ñ\80Ñ\8bн Ð±Ð¾Ð»Ð¼Ð°Ò\93ан Ð±Ó©Ð»Ñ\96мдÑ\96 Ó©Ð·Ð³ÐµÑ\80Ñ\82пекÑ\88Ñ\96Ñ\81Ñ\96з.\nÐ\9cүмкÑ\96н Ð±Ò±Ð» Ð±ÐµÑ\82Ñ\82Ñ\96 Ò\9bаÑ\80ап Ð¶Ð°Ñ\82Ò\9bанÑ\8bÒ£Ñ\8bзда Ð¾Ð» Ð±Ó©Ð»Ñ\96м Ð¶Ð¾Ð¹Ñ\8bлÒ\93ан Ð½ÐµÐ¼ÐµÑ\81е Ð±Ð°Ñ\81Ò\9bа Ð¾Ñ\80Ñ\8bнÒ\93а ÐºÓ©Ñ\88Ñ\96Ñ\80Ñ\96лген.",
-       "loginreqtitle": "Ð\9aÑ\96Ñ\80Ñ\83Ñ\96Ò£Ñ\96з ÐºÐµÑ\80ек",
+       "confirmedittext": "Беттерді өңдеу алдында е-пошта мекенжайыңызды құптауыңыз керек.\nЕ-пошта мекенжайыңызды [[Special:Preferences|қатысушы бапталымдарыңыз]] арқылы қойыңыз да жарамдылығын тексеріп шығыңыз.",
+       "nosuchsectiontitle": "Бөлімді табу мүмкін емес",
+       "nosuchsectiontext": "СÑ\96з Ð¶Ð¾Ò\9b Ð±Ó©Ð»Ñ\96мдÑ\96 Ó©Ò£Ð´ÐµÐ¿ ÐºÓ©Ñ\80мекÑ\88Ñ\96Ñ\81Ñ\96з.\nÐ\9cүмкÑ\96н Ð±ÐµÑ\82Ñ\82Ñ\96 Ò\9bаÑ\80ап Ð¶Ð°Ñ\82Ò\9bанÑ\8bÒ£Ñ\8bзда Ð¾Ð½Ñ\8b Ð¶Ð¾Ð¹Ò\93ан Ð½ÐµÐ¼ÐµÑ\81е Ð±Ð°Ñ\81Ò\9bа Ð¾Ñ\80Ñ\8bнÒ\93а ÐºÓ©Ñ\88Ñ\96Ñ\80ген.",
+       "loginreqtitle": "Ð\96үйеге ÐºÑ\96Ñ\80Ñ\83дÑ\96 Ò\9bажеÑ\82 ÐµÑ\82едÑ\96",
        "loginreqlink": "кіріңіз",
        "loginreqpagetext": "Басқа беттерді көру үшін $1.",
-       "accmailtitle": "Құпия сөз жөнелтілді.",
-       "accmailtext": "$2 дегенге [[User talk:$1|$1]] үшін құпия сөзі жөнелтілді.\nБұл жаңа қатысушы үшін құпия сөз <em> [[Special:ChangePassword|құпия сөзді өзгерту]]</em>  бетінде кіру үстінде өзгертілген.",
+       "accmailtitle": "Құпия сөз жіберілді.",
+       "accmailtext": "$2 дегенге [[User talk:$1|$1]] үшін құпия сөзі жөнелтілді. Оны <em>[[Special:ChangePassword|құпия сөзді өзгерту]]</em> бетінде жүйеге кірген кезде өзгеруге болады.",
        "newarticle": "(Жаңа)",
-       "newarticletext": "Сілтемеге еріп әлі басталмаған бетке келіпсіз.\nБетті бастау үшін, төменгі терезеде мәтініңізді теріңіз (көбірек ақпарат үшін [$1 анықтама бетін] қараңыз).\nЕгер жаңылғаннан осында келген болсаңыз, браузердің «артқа» деген батырмасын басыңыз.",
-       "anontalkpagetext": "----''Бұл тіркелгісіз (немесе тіркелгісін қолданбаған) қатысушы талқылау беті. Осы қатысушыны біз тек сандық IP мекенжайымен теңдестіреміз.\nОсындай IP мекенжай бірнеше қатысушыға ортақтастырылған болуы мүмкін.\nЕгер сіз тіркелгісіз қатысушы болсаңыз және сізге қатыссыз мәндемелер жіберілгенін сезсеңіз, басқа тіркелгісіз қатысушылармен араластырмауы үшін [[{{#special:Userlogin}}|тіркеліңіз не кіріңіз]].''",
+       "newarticletext": "Сілтеме бойынша әлі басталмаған бетке келіпсіз.\nБетті бастау үшін төменгі терезеде мәтінді теріңіз (көбірек ақпарат үшін [$1 анықтама бетін] қараңыз).\nЕгер жаңылғаннан осында келген болсаңыз браузеріңіздің <strong>артқа</strong> деген батырмасын басыңыз.",
+       "anontalkpagetext": "----\n<em>Бұл тіркелгісіз анонимді (немесе тіркелгісін қолданбаған) қатысушының талқылау беті.</em> \nСондықтан біз оны сандық IP мекенжайымен қолдануға тиістіміз.\nОсындай IP мекенжайды бірнеше пайдаланушы ортақтаса алады.\nЕгер сіз анонимді қатысушы болсаңыз және сізге қатыссыз хабарлама жіберілгенін сезсеңіз басқа анонимді қатысушылармен алдағы уақыттарда шатастырмау үшін [[Special:UserLogin/signup|тіркеліңіз]] не [[Special:UserLogin|кіріңіз]].",
        "noarticletext": "Қазіргі уақытта бұл бетте еш мәтін жоқ.\n* Басқа беттерден [[Special:Search/{{PAGENAME}}|бұл бет атауын іздеу]],\n* <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Журналдардан бұл бетке қатысты сәйкес жазбаларды табу]</span>,\n* <span class=\"plainlinks\">'''[{{fullurl:{{FULLPAGENAME}}|action=edit}} Бұл бетті жаңадан бастау]'''</span>.",
-       "noarticletext-nopermission": "Ағымда бұл бетте еш мәтін жоқ.\nСіз [[Special:Search/{{PAGENAME}}|бұл бет атауын]] басқа беттерден іздей аласыз, немесе <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} журналдардан бұл бетке қатысты сәйкес жазбаларды таба аласыз]</span>. Ал бұл бетті жаңадан бастауға сізде рұқсат жоқ.",
-       "userpage-userdoesnotexist": "«<nowiki>$1</nowiki>» қатысушы тіркелгісі жазып алынбаған. Бұл бетті бастау/өңдеу талабыңызды тексеріп шығыңыз.",
+       "noarticletext-nopermission": "Қазіргі уақытта бұл бетте мәтін жоқ.\nСіз бұл бет атауын басқа беттерден [[Special:Search/{{PAGENAME}}|іздей аласыз]], немесе <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} қатысты журналдардан іздей аласыз]</span>. Ал бұл бетті жаңадан бастауға сізде рұқсат жоқ.",
+       "missing-revision": "#$1 нұсқалы «{{FULLPAGENAME}}» деп аталатын бет жоқ",
+       "userpage-userdoesnotexist": "«$1» қатысушы тіркелгісі жазылып алынбаған. \nБұл бетті бастау/өңдеу қалауыңызды тексеріп шығыңыз.",
        "userpage-userdoesnotexist-view": "«$1» қатысушы есімі тіркелмеген.",
-       "blocked-notice-logextract": "Бұл қатысушы қазіргі уақытта  бұғатталған.\nТөменде бұғаттау журналындағы соңғы жазбалар көрсетілген.",
+       "blocked-notice-logextract": "Бұл қатысушы қазіргі уақытта  бұғатталған.\nТөменде бұғаттау журналындағы соңғы жазбасы көрсетілген:",
        "clearyourcache": "<strong>Ескерту:</strong> Сақтағаннан кейін өзгерістерді көру үшін броузеріңіздің бүркемесін (кэшін) тазарту керек болуы мүмкін. \n* <strong>Firefox / Safari:</strong> <em>Қайта жүктеуді</em> нұқығанда <em>Shift</em> басып тұрыңыз немесе <em>Ctrl-F5</em> не <em>Ctrl-Shift-R</em> екеуінің біреуін басыңыз (Mac — <em>⌘-R</em>) \n* <strong>Google Chrome:</strong>  <em>Ctrl-Shift-R</em> басыңыз (Mac — <em>⌘-Shift-R</em>)\n* <strong>Internet Explorer:</strong> <em>Жаңарту</em> батырмасын нұқығанда <em>Ctrl</em> басып тұрыңыз немесе <em>Ctrl-F5</em> басыңыз;  не <em>F5</em> басыңыз \n* <strong>Opera:</strong> <em>Құралдар → Бапталымдар</em> дегеннен бүркемесін тазарту керек.",
-       "usercssyoucanpreview": "'''Кеңес:''' Жаңа CSS файлын сақтау алдында «Қарап шығу» батырмасын қолданып сынақтаңыз.",
-       "userjsyoucanpreview": "<strong>Ð\90Ò\9bÑ\8bл-кеңеÑ\81:</strong> Ð\96аңа JavaScript Ñ\84айлÑ\8bÒ£Ñ\8bздÑ\8b Ñ\81аÒ\9bÑ\82аÑ\83 Ð°Ð»Ð´Ñ\8bнда \"{{int:showpreview}}\" батырмасын қолданып сынақтаңыз.",
+       "usercssyoucanpreview": "<strong>Кеңес:</strong> Жаңа CSS файлыңызды сақтау алдында «{{int:showpreview}}» батырмасын қолданып сынақтаңыз.",
+       "userjsyoucanpreview": "<strong>Ð\9aеңеÑ\81:</strong> Ð\96аңа JavaScript Ñ\84айлÑ\8bÒ£Ñ\8bздÑ\8b Ñ\81аÒ\9bÑ\82аÑ\83 Ð°Ð»Ð´Ñ\8bнда Â«{{int:showpreview}}» батырмасын қолданып сынақтаңыз.",
        "usercsspreview": "</strong>Бұл тек қатысушы CSS файлыңызды қарап шығу екенін ұмытпаңыз, ол әлі сақталған жоқ!</strong>",
-       "userjspreview": "'''Мынау JavaScript қатысушы бағдарламасын тексеру/қарап шығу екенін ұмытпаңыз, ол әлі сақталған жоқ!'''",
-       "sitecsspreview": "'''Мынау CSS қатысушы бағдарламасын тексеру/қарап шығу екенін ұмытпаңыз, ол әлі сақталған жоқ!'''",
-       "sitejspreview": "'''Мынау JavaScript кодын тексеру/қарап шығу екенін ұмытпаңыз, ол әлі сақталған жоқ!'''",
-       "userinvalidcssjstitle": "'''Ескерту:''' Осы арада «$1» деген еш мәнер жоқ.\nҚатысушының .css және .js файл атауы кіші әріпппен жазылу тиісті екенін ұмытпаңыз, мысалға {{ns:user}}:Foo/vector.css дегенді {{ns:user}}:Foo/Vector.css дегенмен салыстырып қараңыз.",
+       "userjspreview": "<strong>Мынау JavaScript қатысушы бағдарламасын тынау/қарап шығу екенін ұмытпаңыз, ол әлі сақталған жоқ!</strong>",
+       "sitecsspreview": "<strong>Мынау тек бұл CSS файлын қарап шығуыңыз екенін ұмытпаңыз, ол әлі сақталған жоқ!</strong>",
+       "sitejspreview": "<strong>Мынау тек бұл JavaScript кодын алдын-ала қарап алу екенін ұмытпаңыз, ол әлі сақталған жоқ!</strong>",
+       "userinvalidcssjstitle": "</strong>Ескерту:</strong> Осы арада «$1» деген еш мәнер жоқ.\nҚалыпты .css және .js беттерінің атауына кіші әріп қолданыңыз, мысалы {{ns:user}}:Foo/vector.css дегенді {{ns:user}}:Foo/Vector.css дегенмен салыстырып қараңыз.",
        "updated": "(Жаңартылған)",
-       "note": "'''Ð\90Ò£Ò\93аÑ\80Ñ\82па:'''",
-       "previewnote": "Бұл тек '''қарап шығу''' екенін ұмытпаңыз, сіздің өзгертулеріңіз әлі сақталған жоқ!",
+       "note": "'''Ð\95Ñ\81кеÑ\80Ñ\82Ñ\83:'''",
+       "previewnote": "</strong>Бұл тек қарап шығу екенін ұмытпаңыз.</strong> \nӨзгертулеріңіз әлі сақталған жоқ!",
        "continue-editing": "Өңдеу аумағына өту",
        "previewconflict": "Бұл қарап шығу беті жоғарғы кірістіру орнындағы мәтінді қамтиды да және сақталғандағы өңді көрсетпек.",
-       "session_fail_preview": "'''Ғафу етіңіз! Сессия деректері жоғалуы салдарынан өңдемеңізді бітіре алмаймыз.\nҚайта байқап көріңіз. Егер бұл әлі істелмесе, шығуды және қайта кіруді байқап көріңіз.'''",
-       "session_fail_preview_html": "<strong>Кешіріңіз! Сессия деректері жоғалуы салдарынан өңдемеңізді бітіре алмаймыз.</strong>\n\n<em>{{SITENAME}} жобасында қам HTML қосылған, JavaScript шабуылдардан қорғану үшін алдын ала қарап шығу жасырылған.</em>\n\n<strong>Егер бұл өңдеме адал талап болса, қайта байқап көріңіз.</strong> Егер бұл әлі істемесе, [[Special:UserLogout|шығуды]] және қайта кіруді байқап көріңіз.'''",
-       "token_suffix_mismatch": "'''Өңдемеңіз тайдырылды, себебі тұтынғышыңыз өңдеме деректер бумасындағы тыныс белгілерін бүлдіртті.\nБет мәтіні бүлінбеу үшін өңдемеңіз тайдырылады.\nБұл кей уақытта қатесі толған веб-негізінде тіркелуі жоқ прокси-серверді пайдаланған болуы мүмкін.'''",
+       "session_fail_preview": "<strong>Кешіріңіз! Сессия деректері жоғалуы салдарынан өңдемеңізді бітіре алмаймыз.</strong>\nҚайта байқап көріңіз. \nЕгер бұл әлі істелмесе [[Special:UserLogout|шығуды]] және қайта кіруді байқап көріңіз.",
+       "session_fail_preview_html": "<strong>Кешіріңіз! Сессия деректері жоғалуы салдарынан өңдемеңізді бітіре алмаймыз.</strong>\n\n<em>Сондықтан {{SITENAME}} жобасында қам HTML қосылған, JavaScript шабуылдардан қорғану үшін алдын ала қарап шығу жасырылған.</em>\n\n<strong>Егер бұл өңдеме адал ниетті әрекет болса қайта байқап көріңіз.</strong> \nЕгер бұл әлі істемесе [[Special:UserLogout|шығуды]] және қайта кіруді байқап көріңіз.",
+       "token_suffix_mismatch": "<strong>Өңдемеңіз тайдырылды, себебі тұтынғышыңыз өңдеме деректер бумасындағы тыныс белгілерін бүлдіртті.\nБет мәтіні бүлінбеу үшін өңдемеңіз тайдырылады.</strong>\nБұл кей уақытта қатесі толған веб-негізінде тіркелуі жоқ прокси-серверді пайдаланған болуы мүмкін.",
        "editing": "Өңделуде: $1",
        "creating": "Жаңадан бастау: $1",
        "editingsection": "Өңделуде: $1 (бөлімі)",
        "editingcomment": "Өңделуде: $1 (жаңа бөлім)",
        "editconflict": "Өңдемелер қақтығысы: $1",
-       "explainconflict": "Ð\9eÑ\81Ñ\8b Ð±ÐµÑ\82Ñ\82Ñ\96 Ñ\81Ñ\96з Ó©Ò£Ð´ÐµÐ¹ Ð±Ð°Ñ\81Ñ\82аÒ\93анда Ð±Ð°Ñ\81Ò\9bа Ð±Ñ\96Ñ\80еÑ\83 Ð±ÐµÑ\82Ñ\82Ñ\96 Ó©Ð·Ð³ÐµÑ\80Ñ\82кен.\nÐ\96оÒ\93аÑ\80Ò\93Ñ\8b ÐºÑ\96Ñ\80Ñ\96Ñ\81Ñ\82Ñ\96Ñ\80Ñ\83 Ð¾Ñ\80нÑ\8bнда Ð±ÐµÑ\82Ñ\82Ñ\96Ò£ Ð°Ò\93Ñ\8bмдÑ\8bÒ\9b Ð¼Ó\99Ñ\82Ñ\96нÑ\96 Ð±Ð°Ñ\80.\nТөменгÑ\96 ÐºÑ\96Ñ\80Ñ\96Ñ\81Ñ\82Ñ\96Ñ\80Ñ\83 Ð¾Ñ\80нÑ\8bнда Ñ\81Ñ\96з Ó©Ð·Ð³ÐµÑ\80Ñ\82кен Ð¼Ó\99Ñ\82Ñ\96нÑ\96 ÐºÓ©Ñ\80Ñ\81еÑ\82Ñ\96ледÑ\96.\nӨзгеÑ\80Ñ\82Ñ\83Ñ\96Ò£Ñ\96здÑ\96 Ð°Ò\93Ñ\8bмдÑ\8bÒ\9b Ð¼Ó\99Ñ\82Ñ\96нге Ò¯Ñ\81Ñ\82еÑ\83Ñ\96Ò£Ñ\96з Ð¶Ó©Ð½.\n\"{{int:savearticle}}\" Ð±Ð°Ñ\82Ñ\8bÑ\80маÑ\81Ñ\8bн Ð±Ð°Ñ\81Ò\9bанда '''Ñ\82ек''' Ð¶Ð¾Ò\93аÑ\80Ò\93Ñ\8b ÐºÑ\96Ñ\80Ñ\96Ñ\81Ñ\82Ñ\96Ñ\80Ñ\83 Ð¾Ñ\80нÑ\8bндаÒ\93Ñ\8b Ð¼Ó\99Ñ\82Ñ\96н сақталады.",
+       "explainconflict": "Ð\9eÑ\81Ñ\8b Ð±ÐµÑ\82Ñ\82Ñ\96 Ñ\81Ñ\96з Ó©Ò£Ð´ÐµÐ¹ Ð±Ð°Ñ\81Ñ\82аÒ\93анда Ð±Ð°Ñ\81Ò\9bа Ð±Ñ\96Ñ\80еÑ\83 Ð±ÐµÑ\82Ñ\82Ñ\96 Ó©Ð·Ð³ÐµÑ\80Ñ\82кен.\nÐ\96оÒ\93аÑ\80Ò\93Ñ\8b Ð¼Ó\99Ñ\82Ñ\96н Ð°Ñ\83маÒ\93Ñ\8bнда Ò\9bазÑ\96Ñ\80гÑ\96 Ñ\83аÒ\9bÑ\8bÑ\82Ñ\82а Ð±Ð°Ñ\80 Ð±ÐµÑ\82 Ð¼Ó\99Ñ\82Ñ\96нÑ\96нен Ñ\82Ò±Ñ\80адÑ\8b.\nТөменгÑ\96 Ð¼Ó\99Ñ\82Ñ\96н Ð°Ñ\83маÒ\93Ñ\8bнда Ñ\81Ñ\96здÑ\96Ò£ Ó©Ð·Ð³ÐµÑ\80Ñ\82Ñ\83леÑ\80Ñ\96Ò£Ñ\96з ÐºÓ©Ñ\80Ñ\81еÑ\82Ñ\96ледÑ\96.\nӨзгеÑ\80Ñ\82Ñ\83Ñ\96Ò£Ñ\96здÑ\96 Ð±Ð°Ñ\80 Ð¼Ó\99Ñ\82Ñ\96нге Ð±Ñ\96Ñ\80Ñ\96кÑ\82Ñ\96Ñ\80Ñ\83ге Ñ\82Ñ\83Ñ\80а ÐºÐµÐ»ÐµÐ´Ñ\96.\n«{{int:savearticle}}» Ð±Ð°Ñ\82Ñ\8bÑ\80маÑ\81Ñ\8bн Ð±Ð°Ñ\81Ò\9bанда </strong>Ñ\82ек</strong> Ð¶Ð¾Ò\93аÑ\80Ò\93Ñ\8b Ð¼Ó\99Ñ\82Ñ\96н Ð°Ñ\83маÒ\93Ñ\8b сақталады.",
        "yourtext": "Мәтініңіз",
        "storedversion": "Сақталған нұсқасы",
-       "nonunicodebrowser": "'''ЕСКЕРТУ: Шолғышыңыз Unicode белгілеуіне үйлесімді емес, сондықтан латын емес әріптері бар беттерді өңдеу зіл болу мүмкін.\nЖұмыс істеуге ықтималдық беру үшін, төмендегі кірістіру орнында ASCII емес таңбалар оналтылық кодымен көрсетіледі'''.",
-       "editingold": "'''ЕСКЕТУ: Осы беттің ертерек түзетуін өңдеп жатырсыз.'''\nБұны сақтасаңыз, осы түзетуден кейінгі барлық өзгерістер жойылады.",
-       "yourdiff": "Айырмалар",
+       "nonunicodebrowser": "<strong>Ескерту: Шолғышыңыз Unicode белгілеуіне үйлесімді емес</strong>\nЖұмыс істеуге ықтималдық беру үшін, төмендегі кірістіру орнында ASCII емес таңбалар оналтылық кодымен көрсетіледі.",
+       "editingold": "<strong>Ескерту: Осы беттің ертерек түзетуін өңдеп жатырсыз.</strong>\nБұны сақтасаңыз осы түзетуден кейінгі барлық өзгерістер жоғалады.",
+       "yourdiff": "Айырмашылықтар",
        "copyrightwarning": "Аңғартпа: {{SITENAME}} жобасына берілген барлық үлестер $2 (көбірек ақпарат үшін: $1) құжатына сай деп саналады.\nЕгер жазуыңыздың еркін өңделуін және ақысыз көпшілікке таратуын қаламасаңыз, мында жарияламауыңыз жөн.<br />\nТағы да, бұл мағлұмат өзіңіз жазғаныңызға, не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз.\n'''АВТОРЛЫҚ ҚҰҚЫҚПЕН ҚОРҒАУҒАН МАҒЛҰМАТТЫ РҰҚСАТСЫЗ ЖАРИЯЛАМАҢЫЗ!'''",
        "copyrightwarning2": "Аңғартпа: {{SITENAME}} жобасына берілген барлық үлестерді басқа үлескерлер өңдеуге, өзгертуге, не аластауға мүмкін.\nЕгер жазуыңыздың еркін өңделуін қаламасаңыз, мында жарияламауыңыз жөн.<br />\nТағы да, бұл мағлұмат өзіңіз жазғаныңызға, не қоғам қазынасынан немесе сондай ашық қорлардан көшірілгеніне бізге уәде бересіз (көбірек ақпарат үшін $1 қужатын қараңыз).\n'''АВТОРЛЫҚ ҚҰҚЫҚПЕН ҚОРҒАУҒАН МАҒЛҰМАТТЫ РҰҚСАТСЫЗ ЖАРИЯЛАМАҢЫЗ!'''",
-       "longpageerror": "'''ҚАТЕЛІК: Сақтамақ мәтініңіздін мөлшері {{PLURAL:$1|килобайт|$1 килобайт}}, ең көбі {{PLURAL:$2|килобайт|$2 килобайт}} рұқсат етілген мөлшерінен асқан.\nБұл сақталмайды.'''",
+       "longpageerror": "<strong>ҚАТЕЛІК: Сақтамақшы болған мәтініңіздің көлемі {{PLURAL:$1|килобайт|$1 килобайт}}, ең көбі {{PLURAL:$2|килобайт|$2 килобайт}} рұқсат етілген көлемінен асқан.</strong>\nБұл сақталмайды.",
        "readonlywarning": "'''ЕСКЕТУ: Дерекқор баптау үшін құлыпталған, сондықтан дәл қазір өңдемеңізді сақтай алмайсыз.\nКейін қолдану үшін мәтінді қойып алып және қойып, мәтін файлына сақтауңызға болады.''' \nӘкімшінің құлыптау себебі келесідей: $1",
-       "protectedpagewarning": "'''Ескерту: Бұл бет өңдеуден қорғалған. Тек әкімші құқықтары бар қатысушылар ғана өңдей алады.'''\nТөменде бет журналының соңғы жазбасы көрсетілген:",
-       "semiprotectedpagewarning": "'''Аңғартпа:''' Бет жартылай қорғалған, сондықтан осыны тек тіркелген қатысушылар өңдей алады.\nТөменде бет журналының соңғы жазбасы көрсетілген:",
+       "protectedpagewarning": "<strong>Ескерту: Бұл бет өңдеуден қорғалған. Тек әкімші құқықтары бар қатысушылар ғана өңдей алады.</strong>\nТөменде бет журналының соңғы жазбасы көрсетілген:",
+       "semiprotectedpagewarning": "<strong>Ескерту:</strong> Бет жартылай қорғалған, сондықтан осыны тек тіркелген қатысушылар өңдей алады.\nТөменде бет журналының соңғы жазбасы көрсетілген:",
        "cascadeprotectedwarning": "<strong>Ескерту:</strong>  Бұл бет қорғалған, енді тек әкімші құқықтары бар қатысушылар ғана бұны өңдей алады, себебі бұл келесі «баулы қорғауы» бар {{PLURAL:$1|бетіне|беттеріне}} кірістілген бет:",
        "titleprotectedwarning": "'''Ескерту: Бұл бет атауы бастаудан қорғалған, сондықтан [[Special:ListGroupRights|арнайы құқықтары]] бар қатысушылар бұндай атаумен бетті бастай алады.'''\nТөменде бет журналының соңғы жазбасы көрсетілген:",
        "templatesused": "Бұл бетте қолданылған {{PLURAL:$1|үлгі|үлгілер}}:",
        "expensive-parserfunction-category": "Шығыс алатын құрылым талдатқыш жетелерінің тым көп шақырымы бар беттер",
        "post-expand-template-inclusion-warning": "Ескерту: Үлгі кірістіру өлшемі тым үлкен.\nКейбір үлгілер кірістірілмейді.",
        "post-expand-template-inclusion-category": "Үлгі кірістірілген беттер өлшемі асып кетті",
-       "post-expand-template-argument-warning": "Ескерту: Бұл бетте тым көп ұлғайтылған мөлшері болған ең кемінде бір үлгі дәлелі бар.\nБұның дәлелдерін қалдырып кеткен.",
+       "post-expand-template-argument-warning": "<strong>Ескерту:</strong> Бұл бетте тым көп ұлғайтылған өлшемі болған ең кемінде бір үлгі дәлелі бар.\nБұның дәлелдерін қалдырып кеткен.",
        "post-expand-template-argument-category": "Үлгі дәлелдерін қалдырып кеткен беттер",
        "undo-success": "Бұл өңдеме жоққа шығарылуы мүмкін. Талабыңызды құптап алдын ала төмендегі салыстыруды тексеріп шығыңыз да, өңдемені жоққа шығаруын бітіру үшін төмендегі өзгерістерді сақтаңыз.",
        "undo-failure": "Бұл өңдеме жоққа шығарылмайды, себебі арада қақтығысты өңдемелер бар.",
        "shown-title": "Осы бетте {{PLURAL:$1|жазба}} көрсету.",
        "viewprevnext": "Көрсетілуі: ($1 {{int:pipe-separator}} $2) ($3) жазба",
        "searchmenu-exists": "'''Бұл жобада «[[:$1]]» деген бет бар.'''",
-       "searchmenu-new": "<strong>«[[:$1]]» Ð¾Ñ\81Ñ\8bндай Ð°Ñ\82пен Ð±Ò±Ð» Ñ\83икиде Ð±ÐµÑ\82Ñ\82Ñ\96 Ð±Ð°Ñ\81Ñ\82аÑ\83!</strong> {{PLURAL:$2|0=|ТаÒ\93Ñ\8b Ò\9bаÑ\80аңÑ\8bз: Ñ\96здегенÑ\96Ò£Ñ\96з Ð±Ð¾Ð¹Ñ\8bнÑ\88а Ñ\82абÑ\8bлÒ\93ан Ð±ÐµÑ\82Ñ\82еÑ\80.|ТаÒ\93Ñ\8b Ò\9bаÑ\80аңÑ\8bз: Ñ\82абÑ\8bлÒ\93ан Ñ\96здеÑ\83 Ð½Ó\99Ñ\82ижелеÑ\80Ñ\96.}}",
+       "searchmenu-new": "<strong>«[[:$1]]» Ð¾Ñ\81Ñ\8bндай Ð°Ñ\82пен Ð±Ò±Ð» Ñ\83икиде Ð±ÐµÑ\82Ñ\82Ñ\96 Ð±Ð°Ñ\81Ñ\82аÑ\83!</strong> {{PLURAL:$2|0=|Ð\86здегенÑ\96Ò£Ñ\96з Ð±Ð¾Ð¹Ñ\8bнÑ\88а Ñ\82абÑ\8bлÒ\93ан Ð±ÐµÑ\82Ñ\82еÑ\80:|ТабÑ\8bлÒ\93ан Ñ\96здеÑ\83 Ð½Ó\99Ñ\82ижелеÑ\80Ñ\96:}}",
        "searchprofile-articles": "Негізгі беттер",
        "searchprofile-project": "Анықтама және жоба беттері",
        "searchprofile-images": "Мультимедиа",
        "enhancedrc-history": "Тарихы",
        "recentchanges": "Жуықтағы өзгерістер",
        "recentchanges-legend": "Жуықтағы өзгерістер баптаулары",
-       "recentchanges-summary": "Ð\91ұл Ð±ÐµÑ\82Ñ\82е Ð¾Ñ\81Ñ\8b Ñ\83икидегÑ\96 Ð±Ð¾Ð»Ò\93ан Ð¶Ñ\83Ñ\8bÒ\9bÑ\82аÒ\93Ñ\8b Ó©Ð·Ð³ÐµÑ\80Ñ\96Ñ\81Ñ\82еÑ\80 Ð±Ð°Ð¹Ò\9bаладÑ\8b.",
+       "recentchanges-summary": "Төменде {{SITENAME}} Ð±ÐµÑ\82Ñ\82еÑ\80Ñ\96ндегÑ\96 Ð¶Ñ\83Ñ\8bÒ\9bÑ\82аÒ\93Ñ\8b Ó©Ð·Ð³ÐµÑ\80Ñ\96Ñ\81Ñ\82еÑ\80 Ñ\85Ñ\80онологиÑ\8fлÑ\8bÒ\9b Ñ\80еÑ\82пен ÐºÓ©Ñ\80Ñ\81еÑ\82Ñ\96ледÑ\96.",
        "recentchanges-noresult": "Бұл талап бойынша көрсетілген уақыттан бері өзгерістер болған жоқ.",
        "recentchanges-feed-description": "Бұл арнаменен уикидегі ең соңғы өзгерістер қадағаланады.",
        "recentchanges-label-newpage": "Жаңа беттер",
        "recentchanges-label-minor": "Бұл шағын өңдеме",
        "recentchanges-label-bot": "Бұл өңдемені бот жасады.",
        "recentchanges-label-unpatrolled": "Бұл өңдеме әлі тексеруден өтпеді.",
-       "recentchanges-label-plusminus": "Байт бойынша беттің өзгеріс мөлшері",
+       "recentchanges-label-plusminus": "Байт бойынша беттің өзгеріс өлшемі",
        "recentchanges-legend-heading": "'''Шартты белгілер:'''",
        "recentchanges-legend-newpage": "(қ: [[Special:NewPages|бөлек бетте]])",
-       "recentchanges-legend-plusminus": "(''±123'')",
+       "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "rcnotefrom": "Төменде <strong>$2</strong> кезінен бергі (<strong>$1</strong> өңдемеге дейін) өзгерістер көрсетіледі.",
        "rclistfrom": "$2, $3 кезінен бергі жаңа өзгерістерді көрсет.",
        "rcshowhideminor": "Шағын өңдемелерді $1",
        "illegal-filename": "Файл атауы рұқсат етілген.",
        "overwrite": "Бар файлдың үстінен жазу рұқсат етілмейді",
        "unknown-error": "Белгісіз қателік орын алды.",
-       "large-file": "ФайлдÑ\8bÒ£ $1 Ð¼Ó©Ð»Ñ\88еÑ\80Ñ\96нен Ð°Ñ\81паÑ\83Ñ\8bна ÐºÐµÐ¿Ñ\96лдеме Ð±ÐµÑ\80Ñ\96ледÑ\96;\nбұл Ñ\84айл Ð¼Ó©Ð»Ñ\88еÑ\80і — $2.",
-       "largefileserver": "Осы файлдың мөлшері сервердің қалауынан асып кеткен.",
+       "large-file": "Ð\91ұл Ñ\84айлдÑ\8bÒ£ $1 Ó©Ð»Ñ\88емÑ\96нен Ð°Ñ\81паÑ\83Ñ\8b Ò±Ñ\81Ñ\8bнÑ\8bладÑ\8b;\nбұл Ñ\84айл Ó©Ð»Ñ\88емі — $2.",
+       "largefileserver": "Осы файлдың өлшемі сервердің қалауынан асып кеткен.",
        "emptyfile": "Қотарып берілген файлыңыз бос сияқты. Файл атауы қате жазылған мүмкін.\nБұл файлды қотарып беруі нақты талабыңыз екенін тексеріп шығыңыз.",
        "windows-nonascii-filename": "Бұл уики файл атауларында арнайы таңбаларды қолдамайды.",
        "fileexists": "Осылай аталған файл әлдеқашан бар, егер бұны өзгертуге сеніміңіз жоқ болса <strong>[[:$1]]</strong> дегенді тексеріп шығыңыз.\n[[$1|thumb]]",
        "filepageexists": "Бұл файлдың сипаттама беті әлдеқашан <strong>[[:$1]]</strong> дегенде жасалған, бірақ қазіргі уақытта осылай аталған еш файл жоқ.\nЕнгізген түйіндемеңіз сипаттамасы бетінде көрсетілмейді.\nТүйіндемеңіз осы арада көрсетілу үшін бұны қолмен өңдеуіңіз керек.\n[[$1|thumb]]",
        "fileexists-extension": "Ұқсас атауы бар файл табылды: [[$2|thumb]]\n* Қотарып берілетін файл атауы: <strong>[[:$1]]</strong>\n* Бар болған файл атауы: <strong>[[:$2]]</strong>\nӨзге атауды таңдаңыз.",
-       "fileexists-thumbnail-yes": "Осы файл — мөлшері кішірітілген көшірмесі (нобай) сияқты. [[$1|thumb]]\nӨтініш, <strong>[[:$1]]</strong> деген файлды тексеріңіз.\nЕгер көрсетілген файл дәл сіз жүктейін деп жатқан файл болса, онда оның кішірейтілген көшірмесін қайта жүктеудің қажеті жоқ.",
-       "file-thumbnail-no": "Файл Ð°Ñ\82аÑ\83Ñ\8b <strong>$1</strong> Ð´ÐµÐ³ÐµÐ½Ð¼ÐµÐ½ Ð±Ð°Ñ\81Ñ\82аладÑ\8b.\nÐ\91ұл â\80\94 Ð¼Ó©Ð»Ñ\88еÑ\80Ñ\96 ÐºÑ\96Ñ\88Ñ\96Ñ\80Ñ\96Ñ\82Ñ\96лген Ñ\81Ñ\83Ñ\80еÑ\82 <em>(нобай)</em> Ñ\81иÑ\8fÒ\9bÑ\82Ñ\8b.\nÐ\95геÑ\80 бұл суреттің толық ажыратылымды нұсқасы болса оны жүктеңіз, әйтпесе файл атауын өзгертіңіз.",
+       "fileexists-thumbnail-yes": "Осы файл көлемі кішірейтілген көшірмесі <em>(нобай)</em> сияқты. \n[[$1|thumb]]\nӨтініш, <strong>[[:$1]]</strong> деген файлды тексеріңіз.\nЕгер көрсетілген файл дәл сіз жүктейін деп жатқан файл болса, онда оның кішірейтілген көшірмесін қайта жүктеудің қажеті жоқ.",
+       "file-thumbnail-no": "Файл Ð°Ñ\82аÑ\83Ñ\8b <strong>$1</strong> Ð´ÐµÐ³ÐµÐ½Ð¼ÐµÐ½ Ð±Ð°Ñ\81Ñ\82аладÑ\8b.\nÐ\9eл Ó©Ð»Ñ\88емÑ\96 ÐºÑ\96Ñ\88Ñ\96Ñ\80ейÑ\82Ñ\96лген Ñ\81Ñ\83Ñ\80еÑ\82 <em>(нобай)</em> Ñ\81иÑ\8fÒ\9bÑ\82Ñ\8b.\nÐ\95геÑ\80 Ñ\81Ñ\96зде бұл суреттің толық ажыратылымды нұсқасы болса оны жүктеңіз, әйтпесе файл атауын өзгертіңіз.",
        "fileexists-forbidden": "Осылай аталған файл әлдеқашан бар және үстінен жазылмайды.\nЕгер сіз өзіңіздің файлыңызды жүктегіңіз келсе кері қайтыңыз да жаңа атау қолданыңыз. \n[[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Осылай аталған файл ортаққорда әлдеқашан бар.\nЕгер сіз файлыңызды жүктегіңіз келсе кері қайтыңыз және жаңа атау қолданыңыз. \n[[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "Бұл файл келесі {{PLURAL:$1|файлдың|файлдарының}} телнұсқасы:",
        "changed": "өзгертті",
        "deletepage": "Бетті жою",
        "confirm": "Құптау",
-       "excontent": "болған мағлұматы: '$1'",
-       "excontentauthor": "болған мағлұматы (тек \"[[Special:Contributions/$2|$2]]\" үлесі): \"$1\"",
-       "exbeforeblank": "тазарту алдындағы болған мағлұматы: \"$1\"",
+       "excontent": "болған мағлұматы: $1",
+       "excontentauthor": "болған мағлұматы (тек «[[Special:Contributions/$2|$2]]» үлесі): $1",
+       "exbeforeblank": "тазарту алдындағы болған мағлұматы: $1",
        "delete-confirm": "«$1» дегенді жою",
        "delete-legend": "Жою",
        "historywarning": "'''Ескету:'' Жоюы көзделген бетте бет тарихында шамамен $1 {{PLURAL:$1|түзетілуі|түзетілулері}} бар:",
        "undelete-show-file-submit": "Иә",
        "namespace": "Есім кеңістігі:",
        "invert": "Таңдалғанды жасыру",
-       "tooltip-invert": "Бұл құсбелгі қойсаңыз таңдалған есім кеңістігіндегі беттердегі өзгерістерді жасырады (және қатысты есем кеңістігі тексерліеді)",
+       "tooltip-invert": "Бұл белгіні қойсаңыз таңдалған есім кеңістігіндегі беттердегі өзгерістерді жасырады (және қатысты есем кеңістігі тексеріледі)",
        "namespace_association": "Қатысты есім аясы",
-       "tooltip-namespace_association": "Бұл құсбелгі қойсаңыз кейде таңдалған есім кеңістігіне қатысты талқылау немесе бастауыш есім кеңістігіндегі өзгерістер қосылып көрсетіледі",
+       "tooltip-namespace_association": "Бұл белгіні қойсаңыз кейде таңдалған есім кеңістігіне қатысты талқылау немесе бастауыш есім кеңістігіндегі өзгерістер қосылып көрсетіледі",
        "blanknamespace": "Негізгі беттерден",
        "contributions": "{{GENDER:$1|Қатысушы}} үлестері",
        "contributions-title": "$1 есімді қатысушының үлесі",
        "noautoblockblock": "өзбұғаттау өшірілген",
        "createaccountblock": "тіркелу бұғатталған",
        "emailblock": "е-пошта өшірілді",
-       "blocklist-nousertalk": "талқылау бетіңізді өңдемеңіз",
+       "blocklist-nousertalk": "өз талқылау бетін өңдей алмайтындай ету",
        "ipblocklist-empty": "Бұғаттау тізімі бос.",
        "ipblocklist-no-results": "Сұратылған IP мекенжай не қатысушы аты бұғатталған емес.",
        "blocklink": "бұғаттау",
        "blocklogentry": "[[$1]] дегенді $2 мерзімге бұғаттады $3",
        "blocklogtext": "Бұл қатысушыларды бұғаттау және бұғаттауынан босату әрекеттерінің журналы.\nӨздіктік бұғатталған IP мекенжайлар тізімделмеген.\nҚазіргі уақыттағы белсенді тиымдар мен бұғаттауларды [[Special:BlockList|бұғаттау тізімінен]] қараңыз.",
        "unblocklogentry": "«$1» — бұғаттауын өшірді",
-       "block-log-flags-anononly": "тек тіркелгісіздер",
+       "block-log-flags-anononly": "тек аноним қатысушылар",
        "block-log-flags-nocreate": "тіркелу өшірілген",
-       "block-log-flags-noautoblock": "өзбұғаттау өшірілген",
-       "block-log-flags-noemail": "е-пошта бұғатталған",
-       "block-log-flags-nousertalk": "талқылау бетін өңдемеңіз",
-       "block-log-flags-hiddenname": "қатысушы есімі жасырылды",
+       "block-log-flags-noautoblock": "автобұғаттау өшірілген",
+       "block-log-flags-noemail": "е-пошта өшірілген",
+       "block-log-flags-nousertalk": "өз талқылау бетін өңдей алмайтындай ету",
+       "block-log-flags-angry-autoblock": "күшейтілген өздікті түрде бұғаттау қосылған",
+       "block-log-flags-hiddenname": "қатысушы есімі жасырылған",
        "range_block_disabled": "Ауқым бұғаттауларын жасау әкімшілік мүмкіндігі өшірілген.",
        "ipb_expiry_invalid": "Бітетін уақыты жарамсыз.",
        "ipb_expiry_temp": "Жасырылған қатысушы атын бұғаттауы мәңгі болуы жөн.",
        "importsuccess": "Сырттан алу аяқталды!",
        "importnosources": "Уики-апару үшін сырттан алынатын еш қайнар көзі анықталмаған, және тарихын тікелей қотарып беруі өшірілген.",
        "importnofile": "Сырттан алынған файл жүктелген жоқ.",
-       "importuploaderrorsize": "СÑ\8bÑ\80Ñ\82Ñ\82ан Ð°Ð»Ñ\8bнÒ\93ан Ñ\84айлдÑ\8bÒ£ Ð¶Ò¯ÐºÑ\82елÑ\83Ñ\96 Ñ\81Ó\99Ñ\82Ñ\81Ñ\96з Ó©Ñ\82Ñ\82Ñ\96. Ð¤Ð°Ð¹Ð» Ð¼Ó©Ð»Ñ\88еÑ\80Ñ\96 Ñ\80Ò±Ò\9bÑ\81аÑ\82 ÐµÑ\82Ñ\96лгеннен Ð¼Ó©Ð»Ñ\88еÑ\80ден Ð°Ñ\81адÑ\8b.",
+       "importuploaderrorsize": "Ð\98мпоÑ\80Ñ\82Ñ\82алÒ\93ан Ñ\84айлдÑ\8bÒ£ Ð¶Ò¯ÐºÑ\82елÑ\83Ñ\96 Ñ\81Ó\99Ñ\82Ñ\81Ñ\96з Ð±Ð¾Ð»Ð´Ñ\8b. \nФайл Ñ\80Ò±Ò\9bÑ\81аÑ\82 ÐµÑ\82Ñ\96лгеннен Ð¶Ò¯ÐºÑ\82еÑ\83 Ó©Ð»Ñ\88емÑ\96нен Ò¯Ð»ÐºÐµÐ½Ñ\96Ñ\80ек.",
        "importuploaderrorpartial": "Сырттан алынған файлдың жүктелуі сәтсіз өтті. Осы файлдың тек бөліктері жүктелді.",
        "importuploaderrortemp": "Сырттан алынған файлдың жүктелуі сәтсіз өтті. Уақытша қалта табылмады.",
        "import-parse-failure": "Сырттан алынған XML файл құрылымын талдатқанда сәтсіздік болды",
        "nextdiff": "Келесі өңдеме →",
        "mediawarning": "'''Ескерту''': Бұл файл түрінде қаскүнемді коды бар болуы ықтимал; бұны жегіп жүйеңізге зиян келтіруіңіз мүмкін.",
        "imagemaxsize": "Суреттің өлшем шектеуі:<br />''(файл сипаттама беттері үшін)''",
-       "thumbsize": "Нобай мөлшері:",
+       "thumbsize": "Нобай өлшемі:",
        "widthheight": "$1 × $2",
        "widthheightpage": "$1 × $2, $3 бет",
-       "file-info": "Файл мөлшері: $1, MIME түрі: $2",
+       "file-info": "файл өлшемі: $1, MIME түрі: $2",
        "file-info-size": "$1 × $2 нүкте, файл өлшемі: $3, MIME түрі: $4",
        "file-info-size-pages": "$1 × $2 нүкте (пиксел), Файл өлшемі: $3, MIME түрі: $4, $5 {{PLURAL:$5|бет|бет}}",
        "file-nohires": "Жоғары кеңейтілімдегі нұсқалары жоқ.",
-       "svg-long-desc": "SVG файлы, кесімді $1 × $2 нүкте, файл мөлшері: $3",
+       "svg-long-desc": "SVG файлы, кесімді $1 × $2 (пиксел) нүкте, файл өлшемі: $3",
        "svg-long-desc-animated": "SVG қозғалысты файлы, кесімді $1 × $2 нүкте, файл өлшемі: $3",
        "svg-long-error": "жарамсыз SVG файлы: $1",
        "show-big-image": "Түпнұсқа файл",
        "confirmrecreate": "Бұл бетті өңдеуіңізді бастағанда [[User:$1|$1]] ([[User talk:$1|талқылауы]]) осы бетті жойды, келтірген себебі:\n: ''$2''\nОсы бетті қайта бастауын нақты тілегеніңізді құптаңыз.",
        "recreate": "Қайта бастау",
        "unit-pixel": " нүкте",
-       "confirm_purge_button": "Жарайды",
+       "confirm_purge_button": "OK",
        "confirm-purge-top": "Бұл беттін бүркемесін тазартасыз ба?",
-       "confirm-watch-button": "Жарайды",
+       "confirm-watch-button": "OK",
        "confirm-watch-top": "Бұл бетті бақылау тізіміңізге қосқыңыз келе ме?",
-       "confirm-unwatch-button": "Жарайды",
+       "confirm-unwatch-button": "OK",
        "confirm-unwatch-top": "Бұл бетті бақылау тізіміңізден аластағыңыз келе ме?",
        "semicolon-separator": ";",
        "colon-separator": ":&#32;",
        "expand_templates_input": "Кіріс мәтіні:",
        "expand_templates_output": "Нәтижесі",
        "expand_templates_xml_output": "XML шығаруы",
-       "expand_templates_ok": "Жарайды",
+       "expand_templates_ok": "OK",
        "expand_templates_remove_comments": "Мәндемелерін аластатып?",
        "expand_templates_generate_xml": "XML өңдету бұтақтарын көрсет",
        "expand_templates_preview": "Қарап шығу"
index 79d50be..0c158a6 100644 (file)
        "jumpto": "이동:",
        "jumptonavigation": "둘러보기",
        "jumptosearch": "검색",
-       "view-pool-error": "현재 서버에 과부하가 걸렸습니다.\n너무 많은 사용자가 이 문서를 보려고 하고 있습니다.\n이 문서를 다시 열기 전에 잠시만 기다려주세요.\n\n$1",
+       "view-pool-error": "죄송하지만 서버에 순간 과부하가 걸렸습니다.\n너무 많은 사용자가 이 문서를 보려고 하고 있습니다.\n이 문서를 다시 접근하기 전에 잠시 기다려 주세요.\n\n$1",
+       "generic-pool-error": "죄송하지만 서버에 순간 과부하가 걸렸습니다.\n너무 많은 사용자가 이 자료를 보려고 하고 있습니다.\n이 자료를 다시 접근하기 전에 잠시 기다려 주세요.",
        "pool-timeout": "잠금 대기 중 타임아웃",
        "pool-queuefull": "풀 대기열이 가득 찼습니다",
        "pool-errorunknown": "알 수 없는 오류",
        "trackingcategories-desc": "분류 포함 기준",
        "noindex-category-desc": "문서는 그것과 그 플래그가 허용된 곳에 있는 이름공간에서 <code><nowiki>__NOINDEX__</nowiki></code> 특수 명령이 있기 때문에 로봇이 색인하지 않습니다.",
        "index-category-desc": "문서는 그것(과 플래그가 허용된 곳에 있는 이름공간에 있는 것)에 <code><nowiki>__INDEX__</nowiki></code>가 있어서, 정상적이지 않을 곳에 로봇에 의해 색인됩니다.",
+       "post-expand-template-inclusion-category-desc": "모든 틀을 확장하고 나서, 문서 크기가 <code>$wgMaxArticleSize</code>보다 커지므로, 어떤 틀은 확장하지 않았습니다.",
+       "post-expand-template-argument-category-desc": "틀 변수 (<code>{{{모}}}</code>와 같은, 중괄호가 세 개 있는 것)를 확장하고 나서, 문서는 <code>$wgMaxArticleSize</code>보다 커집니다.",
+       "expensive-parserfunction-category-desc": "(<code>#ifexist</code>와 같은) 너무 많은 느린 파서 함수 호출이 문서에 포함되어 있습니다. [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit]를 보세요.",
+       "broken-file-category-desc": "분류가 깨진 파일 링크가 포함된 문서가 있다면 추가됩니다. (파일이 존재하지 않을 때 포함되는 링크)",
+       "hidden-category-category-desc": "기본적으로 문서에 분류 링크 상자가 보여지는 것에서 막기 위한, <code><nowiki>__HIDDENCAT__</nowiki></code>가 있는 분류입니다.",
        "trackingcategories-nodesc": "사용할 수 있는 설명이 없습니다.",
        "trackingcategories-disabled": "분류가 비활성화되어 있습니다",
        "mailnologin": "보낼 이메일 주소가 없음",
index d6e0016..00ee1fb 100644 (file)
        "jumptonavigation": "Navigatioun",
        "jumptosearch": "sichen",
        "view-pool-error": "Pardon, d'Servere si fir de Moment iwwerlaascht.\nZevill Benotzer versichen dës Säit ze gesinn.\nWaart w.e.g. e bëssen ier Dir versicht dës Säit nach emol opzeruffen.\n\n$1",
+       "generic-pool-error": "Pardon, d'Servere si fir de Moment iwwerlaascht.\nZevill Benotzer versichen dës Ressource ze gesinn.\nWaart w.e.g. e bëssen ier Dir versicht dës Ressource nach emol opzeruffen.",
        "pool-timeout": "Timeout bis d'Spär opgehuewen ass",
        "pool-queuefull": "Pool-Queue ass voll",
        "pool-errorunknown": "Onbekannte Feeler",
        "pageswithprop-prophidden-long": "Wäert vun der laanger Texteegeschaft verstoppt ($1)",
        "doubleredirects": "Duebel Viruleedungen",
        "doubleredirectstext": "Op dëser Säit stinn déi Säiten déi op aner Viruleedungssäite viruleeden.\nAn all Rei sti Linken zur éischter an zweeter Viruleedung, souwéi d'Zil vun der zweeter Viruleedung, déi normalerweis déi \"richteg\" Zilsäit ass, op déi déi éischt Viruleedung hilinke soll.\n<del>Duerchgestrachen</del> Linke goufe scho sou verännert datt déi duebel Viruleedung opgeléist ass.",
-       "double-redirect-fixed-move": "[[$1]] gouf geréckelt, et ass elo eng Viruleedung op [[$2]]",
-       "double-redirect-fixed-maintenance": "Flécke vun der duebeler Viruleedung vu(n) [[$1]] op [[$2]].",
+       "double-redirect-fixed-move": "[[$1]] gouf geréckelt.\nD'Säit gouf automatesch aktualiséiert an et ass elo eng Viruleedung op [[$2]].",
+       "double-redirect-fixed-maintenance": "Duebel Viruleedung vu(n) [[$1]] op [[$2]] gouf automatesch an engem 'maintenance job' gefléckt.",
        "double-redirect-fixer": "Verbesserung vu Viruleedungen",
        "brokenredirects": "Futtis Viruleedungen",
        "brokenredirectstext": "Dës Viruleedunge linken op Säiten déi et net gëtt.",
        "listgrouprights-namespaceprotection-header": "Limitatioune vum Nummraum",
        "listgrouprights-namespaceprotection-namespace": "Nummraum",
        "listgrouprights-namespaceprotection-restrictedto": "Recht(er), déi dem Benotzer d'Änneren erlaben",
+       "trackingcategories": "Tracking-Kategorien",
        "trackingcategories-msg": "Tracking-Kategorie",
        "trackingcategories-name": "Numm vum Message",
        "noindex-category-desc": "D'Säit gëtt net vu Botten indexéiert, well dat magescht Wuert <code><nowiki>__NOINDEX__</nowiki></code> dran ass a well se an engem Nummraum ass, an deem déi Markéierung erlaabt ass.",
index 140fac1..7a6f496 100644 (file)
@@ -16,7 +16,8 @@
                        "SabineCretella",
                        "Snowdog",
                        "Sprüngli",
-                       "아라"
+                       "아라",
+                       "Ninonino"
                ]
        },
        "tog-underline": "Sutulinia i ligam",
@@ -39,7 +40,7 @@
        "tog-enotifusertalkpages": "Mandem un messagg e-mail quand che gh'è di mudifegh a la mè pàgina di ciaciarad",
        "tog-enotifminoredits": "Màndem un messagg e-mail anca per i mudifegh piscinín",
        "tog-enotifrevealaddr": "Lassa vedè 'l mè indirizz e-mail int i messagg d'avis",
-       "tog-oldsig": "Anteprima de la firma esistenta:",
+       "tog-oldsig": "Firma esistenta:",
        "tog-fancysig": "Trata la firma cume test wiki (senza nissön ligam utumatich)",
        "tog-watchlisthideown": "Sconda i me mudifich dai pagin che a ten d'ögg",
        "tog-watchlisthidebots": "Sconda i mudifich di bot da i pagin che a ten d'ögg",
@@ -49,7 +50,7 @@
        "tog-norollbackdiff": "Mustra mía i ''diffs'' dop che i henn staa ripristinaa cun un rollback",
        "underline-always": "Semper",
        "underline-never": "Mai",
-       "underline-default": "Mantegn i impustazión standard del browser",
+       "underline-default": "Mantegn i impustazión standard del browser o de l'interfàcia",
        "editfont-style": "Stil del font de l'area de mudifega:",
        "editfont-default": "Browser de default",
        "editfont-monospace": "Font mono-spaziaa",
        "vector-action-move": "Sposta",
        "vector-action-protect": "Prutegg",
        "vector-action-undelete": "Recüpera",
-       "vector-action-unprotect": "Desbloca",
+       "vector-action-unprotect": "Càmbia la protesiù",
        "vector-view-create": "Crea",
        "vector-view-edit": "Mudifega",
        "vector-view-history": "Varda la storia",
        "actions": "Azión",
        "namespaces": "Namespace",
        "variants": "Variant",
+       "navigation-heading": "Menù de navigasiù",
        "errorpagetitle": "Erur",
        "returnto": "Turna indré a $1.",
        "tagline": "De {{SITENAME}}",
        "searcharticle": "Và",
        "history": "Crunulugia de la pagina",
        "history_short": "Crunulugìa",
+       "updatedmarker": "mudificàda de l'öltema ólta che l'è stàda ésta",
        "printableversion": "Versión stampàbil",
        "permalink": "Culegament permanent",
        "print": "Stampa",
+       "view": "Varda",
+       "view-foreign": "Arda sö",
        "edit": "Mudifega",
+       "edit-local": "Mudìfica descrisiù locàla",
        "create": "Crea",
+       "create-local": "Zóntega 'na descrisiù locàla",
        "editthispage": "Mudifega quela pagina chi",
        "create-this-page": "Crea quela pagina chi",
        "delete": "Scancela",
        "deletethispage": "Scancela quela pagina chì",
+       "undeletethispage": "Recüpera chèsta pàgina",
        "undelete_short": "Rimet a post {{PLURAL:$1|1 mudifica|$1 mudifigh}}",
+       "viewdeleted_short": "Arda {{PLURAL:$1|'na mudìfica scancelàda|$1 mudìfiche scancelàde}}",
        "protect": "Bloca",
        "protect_change": "cambia",
        "protectthispage": "Prutegg quela pagina chì",
-       "unprotect": "Desbloca",
-       "unprotectthispage": "Tö via la pruteziun",
+       "unprotect": "Càmbia la protesiù",
+       "unprotectthispage": "Càmbia la protesiù de chèsta pàgina",
        "newpage": "Pagina növa",
        "talkpage": "Discüssión",
        "talkpagelinktext": "Ciciarada",
        "articlepage": "Varda l'articul",
        "talk": "Discüssión",
        "views": "Visid",
-       "toolbox": "Arnes",
+       "toolbox": "Arnés",
        "userpage": "Vidè la pàgina del dovrat",
        "projectpage": "Varda la pagina de servizzi",
        "imagepage": "Varda la pagina del file",
        "jumptonavigation": "Navigazión",
        "jumptosearch": "cerca",
        "view-pool-error": "Ne rincress, ma i server a hinn bej caregaa al mument.\nTrop drovat a hinn 'dree pruvà a vardà quela pagina chì.\nPer piasè, specia un mument prima de pruà a vardà anmò quela pagina chì.\n\n$1",
+       "pool-timeout": "Tép scadìt per l'operasiù de blocàgio",
+       "pool-queuefull": "La cùa del \"pool\" l'è piéna",
+       "pool-errorunknown": "Erùr mìa cunusìt",
        "aboutsite": "A prupòsit de {{SITENAME}}",
        "aboutpage": "Project:A pruposit",
        "copyright": "El cuntegnüü a l'è dispunibil sota a una licenza $1.",
index aaee5da..0df04e0 100644 (file)
@@ -38,7 +38,7 @@
        "tog-extendwatchlist": "Išplėsti stebimųjų sąrašą, kad rodytų visus tinkamus keitimus, ne tik pačius naujausius.",
        "tog-usenewrc": "Naudoti patobulintąjį paskutinių keitimų sąrašą (reikia JavaScript)",
        "tog-numberheadings": "Automatiškai numeruoti skyrelius",
-       "tog-showtoolbar": "Rodyti redagavimo įrankinę (JavaScript)",
+       "tog-showtoolbar": "Rodyti redagavimo įrankių juosta",
        "tog-editondblclick": "Puslapių redagavimas dvigubu spustelėjimu (JavaScript)",
        "tog-editsectiononrightclick": "Įjungti skyrelių redagavimą paspaudus skyrelio pavadinimą dešiniuoju pelės klavišu (JavaScript)",
        "tog-watchcreations": "Pridėti puslapius, kuriuos aš sukuriu, į stebimų sąrašą",
@@ -68,6 +68,7 @@
        "tog-showhiddencats": "Rodyti paslėptas kategorijas",
        "tog-norollbackdiff": "Nepaisyti skirtumo atlikus atmetimą",
        "tog-useeditwarning": "Perspėti mane, kai palieku redagavimo puslapį, o jame yra neišsaugotų pakeitimų",
+       "tog-prefershttps": "Prisiregistruojant visada naudokite saugų ryšį",
        "underline-always": "Visada",
        "underline-never": "Niekada",
        "underline-default": "Pagal naršyklės nustatymus",
        "newwindow": "(atsidaro naujame lange)",
        "cancel": "Atšaukti",
        "moredotdotdot": "Daugiau...",
-       "morenotlisted": "Daugiau nėra",
+       "morenotlisted": "Šis sąrašas nėra išsamus.",
        "mypage": "Naudotojo puslapis",
        "mytalk": "Mano aptarimas",
        "anontalk": "Šio IP aptarimas",
        "permalink": "Nuolatinė nuoroda",
        "print": "Spausdinti",
        "view": "Žiūrėti",
+       "view-foreign": "Rodyti $1",
        "edit": "Redaguoti",
+       "edit-local": "Redaguoti vietos aprašymą",
        "create": "Sukurti",
+       "create-local": "Pridėti vietos aprašymą",
        "editthispage": "Redaguoti šį puslapį",
        "create-this-page": "Sukurti šį puslapį",
        "delete": "Trinti",
        "pool-errorunknown": "Nežinoma klaida",
        "aboutsite": "Apie {{SITENAME}}",
        "aboutpage": "Project:Apie",
-       "copyright": "Turinys pateikiamas pagal $1 licenciją.",
+       "copyright": "Turinys pateikiamas pagal  $1  jei nenurodyta kitaip.",
        "copyrightpage": "{{ns:project}}:Autorystės teisės",
        "currentevents": "Naujienos",
        "currentevents-url": "Project:Naujienos",
        "youhavenewmessages": "Jūs turite $1 ($2).",
        "youhavenewmessagesfromusers": "Jūs gavote $1 nuo {{PLURAL:$3|kito vartotojo|$3 vartotojų}} ($2).",
        "youhavenewmessagesmanyusers": "Jūs turite $1 iš daugelio vartotojų ( $2 ) .",
-       "newmessageslinkplural": "{{PLURAL:$1|naują žinutę|naujų žinučių}}",
-       "newmessagesdifflinkplural": "paskutinis {{PLURAL:$1|pakeitimas|pakeitimai}}",
+       "newmessageslinkplural": "{{PLURAL:$1|nauja žinutė|999=naujos žinutės}}",
+       "newmessagesdifflinkplural": "paskutinis {{PLURAL:$1|pakeitimas|999=pakeitimai}}",
        "youhavenewmessagesmulti": "Turite naujų žinučių $1",
        "editsection": "redaguoti",
        "editold": "taisyti",
        "nospecialpagetext": "<strong>Toks specialusis puslapis neegzistuoja</strong>\n\nEgzistuojančių specialiųjų puslapių sąrašą galite rasti [[Special:SpecialPages|specialiųjų puslapių sąraše]].",
        "error": "Klaida",
        "databaseerror": "Duomenų bazės klaida",
+       "databaseerror-query": "Užklausa:$1",
+       "databaseerror-error": "Klaida: $1",
        "laggedslavemode": "Dėmesio: Puslapyje gali nesimatyti naujausių pakeitimų.",
        "readonly": "Duomenų bazė užrakinta",
        "enterlockreason": "Įveskite užrakinimo priežastį, taip pat datą, kada bus atrakinta",
        "gotaccount": "Jau turite paskyrą? '''$1'''.",
        "gotaccountlink": "Prisijunkite",
        "userlogin-resetlink": "Pamiršote savo prisijungimo duomenis?",
-       "userlogin-resetpassword-link": "Nustatykite slaptažodį iš naujo",
+       "userlogin-resetpassword-link": "Pamiršote savo slaptažodį?",
+       "userlogin-helplink2": "Padėti prisijungti",
        "userlogin-createanother": "Sukurti kitą paskyrą",
        "createacct-emailrequired": "Elektroninio pašto adresas",
        "createacct-emailoptional": "Elektroninio pašto adresas (neprivaloma)",
        "accountcreatedtext": "Naudotojo paskyra [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) buvo sukurta.",
        "createaccount-title": "{{SITENAME}} paskyros kūrimas",
        "createaccount-text": "Projekte {{SITENAME}} ($4) kažkas sukūrė paskyrą „$2“ su slaptažodžiu „$3“ panaudodamas jūsų el. pašto adresą.\nJūs turėtumėte prisijungti ir pasikeisti savo slaptažodį.\n\nJūs galite nekreipti dėmesio į laišką, jei ši paskyra buvo sukurta per klaidą.",
-       "login-throttled": "Jūs pernelyg daug kartų bandėte prisijungti.\nPalaukite prieš bandant vėl.",
+       "login-throttled": "Jūs pernelyg daug kartų bandėte prisijungti.\nPalaukite $1 prieš bandant vėl.",
        "login-abort-generic": "Jūsų prisijungimas buvo nesėkmingas - Nutraukta",
        "loginlanguagelabel": "Kalba: $1",
        "suspicious-userlogout": "Jūsų prašymas atsijungti buvo atmestas, nes, atrodo, jį klaidingai išsiuntė naršyklė arba spartinantysis tarpinis serveris.",
        "newpassword": "Naujas slaptažodis:",
        "retypenew": "Pakartokite naują slaptažodį:",
        "resetpass_submit": "Nustatyti slaptažodį ir prisijungti",
-       "changepassword-success": "Jūsų slaptažodis pakeistas sėkmingai! Dabar prisijungiama...",
+       "changepassword-success": "Jūsų slaptažodis pakeistas sėkmingai!",
        "resetpass_forbidden": "Slaptažodžiai negali būti pakeisti",
        "resetpass-no-info": "Jūs turite būti prisijungęs, kad pasiektumėte puslapį tiesiogiai.",
        "resetpass-submit-loggedin": "Keisti slaptažodį",
        "invalid-content-data": "Neleistinas turinys.",
        "content-not-allowed-here": "Turinys \"$1\" puslapyje [[$2]] nėra leistinas.",
        "editwarning-warning": "Palikdamas šį puslapį jūs prarasite visus padarytus pakeitimus.",
+       "editpage-notsupportedcontentformat-title": "Turinio formatas nepalaikomas",
+       "editpage-notsupportedcontentformat-text": "Turinio formatas $1 nepalaiko turinio modelio $2.",
        "content-model-wikitext": "wikitekstas",
        "content-model-text": "paprastasis tekstas",
        "content-model-javascript": "JavaScript",
        "badsig": "Neteisingas parašas; patikrinkite HTML žymes.",
        "badsiglength": "Jūsų parašas per ilgas.\nJį turi sudaryti ne daugiau kaip $1 {{PLURAL:$1|simbolis|simboliai|simbolių}}.",
        "yourgender": "Lytis:",
-       "gender-unknown": "Nenurodyta",
-       "gender-male": "Vyras",
-       "gender-female": "Moteris",
+       "gender-unknown": "Aš nenoriu pasakyti",
+       "gender-male": "Jis redaguoja wiki puslapius",
+       "gender-female": "Ji redaguoja wiki puslapius",
        "prefs-help-gender": "Pasirinktinai: naudojama teisingam sistemos kreipimuisi į jus.\nŠi informacija yra vieša.",
        "email": "El. paštas",
        "prefs-help-realname": "Tikrasis vardas yra neprivalomas.\nJei jūs jį įvesite, jis bus naudojamas pažymėti jūsų darbą.",
        "prefs-signature": "Parašas",
        "prefs-dateformat": "Datos formatas",
        "prefs-timeoffset": "Laiko skirtumas",
-       "prefs-advancedediting": "Bendras",
+       "prefs-advancedediting": "Bendrosios parinktys",
        "prefs-editor": "Redaktorius",
        "prefs-preview": "Peržiūra",
        "prefs-advancedrc": "Papildomi nustatymai",
        "userrights-no-interwiki": "Jūs neturite leidimo keisti naudotojų teises kituose projektuose.",
        "userrights-nodatabase": "Duomenų bazė $1 neegzistuoja arba yra ne vietinė.",
        "userrights-nologin": "Jūs privalote [[Special:UserLogin|prisijungti]] kaip administratorius, kad galėtumėte priskirti naudotojų teises.",
-       "userrights-notallowed": "Jūsų paskyra neturi teisių priskirti ar panaikinti naudotojų teises.",
+       "userrights-notallowed": "Jūs neturite leidimo įtraukti arba pašalinti vartotojo teisių.",
        "userrights-changeable-col": "Grupės, kurias galite keisti",
        "userrights-unchangeable-col": "Grupės, kurių negalite keisti",
        "userrights-conflict": "Naudotojo teisių konfliktas! Prašome dar kartą taikyti savo keitimus.",
        "right-reupload-shared": "Perrašyti failus bendrojoje failų saugykloje lokaliai",
        "right-upload_by_url": "Įkelti failą iš URL adreso",
        "right-purge": "Išvalyti svetainės podėlį puslapiui be patvirtinimo",
-       "right-autoconfirmed": "Redaguoti pusiau užrakintus puslapius",
+       "right-autoconfirmed": "Netaikyti greičio apribojimų",
        "right-bot": "Laikyti automatiniu procesu",
        "right-nominornewtalk": "Atlikus smulkių keitimų aptarimų puslapiuose įjungia pranešimą apie naujas žinutes",
        "right-apihighlimits": "Mažesni apribojimai API užklausoms",
        "action-viewmyprivateinfo": "peržiūrėti jūsų privačią informaciją",
        "action-editmyprivateinfo": "redaguoti savo privačią informaciją",
        "nchanges": "$1 {{PLURAL:$1|pakeitimas|pakeitimai|pakeitimų}}",
+       "enhancedrc-history": "istorija",
        "recentchanges": "Naujausi keitimai",
        "recentchanges-legend": "Naujausių keitimų parinktys",
        "recentchanges-summary": "Šiame puslapyje yra patys naujausi pakeitimai šiame projekte.",
        "unusedtemplateswlh": "kitos nuorodos",
        "randompage": "Atsitiktinis puslapis",
        "randompage-nopages": "{{PLURAL:$2|Šioje vardų srityje|Šiose vardų srityse}} nėra jokių puslapių: $1.",
+       "randomincategory-selectcategory-submit": "Pirmyn",
        "randomredirect": "Atsitiktinis peradresavimas",
        "randomredirect-nopages": "Vardų srityje „$1“ nėra jokių peradresavimų.",
        "statistics": "Statistika",
        "protectedpages": "Užrakinti puslapiai",
        "protectedpages-indef": "Tik neapibrėžtos apsaugos",
        "protectedpages-cascade": "Tik pakopinė apsauga",
+       "protectedpages-noredirect": "Slėpti peradresavimus",
        "protectedpagesempty": "Šiuo metu nėra apsaugotas joks failas su šiais parametrais.",
+       "protectedpages-timestamp": "Laiko žyma",
        "protectedpages-page": "Puslapis",
        "protectedpages-expiry": "Galioja iki",
        "protectedpages-reason": "Priežastis",
+       "protectedpages-unknown-timestamp": "Nežinomas",
+       "protectedpages-unknown-performer": "Nežinomas vartotojas",
        "protectedtitles": "Apsaugoti pavadinimai",
        "protectedtitlesempty": "Šiuo metu nėra jokių pavadinimų apsaugotų šiais parametrais.",
        "listusers": "Naudotojų sąrašas",
        "undeletedrevisions": "{{PLURAL:$1|atkurta $1 versija|atkurtos $1 versijos|atkurta $1 versijų}}",
        "undeletedrevisions-files": "{{PLURAL:$1|atkurta $1 versija|atkurtos $1 versijos|atkurta $1 versijų}} ir $2 {{PLURAL:$2|failas|failai|failų}}",
        "undeletedfiles": "{{PLURAL:$1|atkurtas $1 failas|atkurti $1 failai|atkurta $1 failų}}",
-       "cannotundelete": "Atkūrimas nepavyko; kažkas kitas pirmas galėjo atkurti puslapį.",
+       "cannotundelete": "Atkūrimas nepavyko:\n$1",
        "undeletedpage": "'''$1 buvo atkurtas'''\n\nPeržiūrėkite [[Special:Log/delete|trynimų sąrašą]], norėdami rasti paskutinių trynimų ir atkūrimų sąrašą.",
        "undelete-header": "Kad sužinotumėte, kurie puslapiai paskiausiai ištrinti, žiūrėkite [[Special:Log/delete|šalinimų sąrašą]].",
        "undelete-search-title": "Panaikintų puslapių paieška",
index 603a483..e7e3fdf 100644 (file)
        "permalink": "Rohy maharitra",
        "print": "Avoaka an-taratasy",
        "view": "Hamaky",
+       "view-foreign": "Jerena eo amin'i $1",
        "edit": "Ovaina",
+       "edit-local": "Hanova ny famisavisana eo an-toerana",
        "create": "Amboarina",
+       "create-local": "Hanampy famisavisana eo an-toerana",
        "editthispage": "Hanova ity pejy ity",
        "create-this-page": "Forony ity pejy ity",
        "delete": "Hamafa",
        "jumptonavigation": "Fikarohana",
        "jumptosearch": "karohy",
        "view-pool-error": "Azafady, be asa ny lohamilina ankehitriny.\nBetsaka loatra ny mpikambana mitady hijery ity pejy ity.\nMiandrasa kely, dia avereno.\n\n$1",
+       "generic-pool-error": "Azafady fa tototry ny asa ny lohamilina amin'izao fotoana izao.\nBetsaka loatra ny mpampiasa manandrana mijery io loharano io.\nAndraso kely dia andramo fanindroany.",
        "pool-timeout": "Fe-potoana voahoatra ho an'ny hidy.",
        "pool-queuefull": "Feno ny lisitry ny asa hatao",
        "pool-errorunknown": "Tsi-fetezana tsy fantatra",
        "gotaccountlink": "Midira",
        "userlogin-resetlink": "Adinonavo ve ny antsipihan'ny fidiranao ?",
        "userlogin-resetpassword-link": "Hadino ny tenimiafina?",
+       "userlogin-helplink2": "Fanampiana amin'ny fidirana",
        "userlogin-loggedin": "Efa tafiditra amin'ny anaran'i {{GENDER:$1|$1}} ianao. Ampiasao ny fôrmiolera eo ambany raha hiditra amin'ny anaran'ny mpikambana hafa.",
        "userlogin-createanother": "Hamorona kaonty hafa",
        "createacct-emailrequired": "Adiresy mailaka :",
        "suspicious-userlogout": "Ny fangataham-pialanao dia tsy nekena satria ohatry ny nalfan'ny mpizahan-tsehatra simba izy na kasy ny proxy.",
        "createacct-another-realname-tip": "Azo tsy atsofoka ny tena anarana.\nRaha misafidy ny hanome azy ianao, ho ampiasaina amin'ny fanehoana ny anjara asan'ilay mpikambana ilay izy.",
        "pt-login": "Hiditra",
+       "pt-login-button": "Hiditra",
        "pt-createaccount": "Hamorona kaonty",
        "pt-userlogout": "Hivoaka",
        "php-mail-error-unknown": "Hadisoana tsy fantatra tao amin'ny tao mial() an'i PHP.",
        "resetpass-temp-password": "Tenimiafina miserana :",
        "resetpass-abort-generic": "Nosakanan'ny itatra (extension) iray ny fanovana tenimiafina.",
        "resetpass-expired": "Efa nitsahatra ny tenimiafinao. Mampidira tenimiafina vaovao hahafahanao miditra.",
-       "resetpass-expired-soft": "Efa nitsahatra ny tenimiafinao, ary tsy maintsy averina ilay izy. Safidio avy hatrany ny tenimiafina, na tsindrio \"Aoka aloha\" raha tsy hanao izany androany",
+       "resetpass-expired-soft": "Efa nitsahatra ny tenimiafinao, ary tsy maintsy averina ilay izy. Safidio avy hatrany ny tenimiafina, na tsindrio \"{{int:resetpass-submit-cancel}}\" raha tsy hanao izany androany",
+       "resetpass-validity-soft": "Tsy ekena ny tenimiafinao : $1\n\nTenimiafina vaovao fidiana, na tsindrio \"{{int:resetpass-submit-cancel}}\" raha hamerina azy amin'ny fotoana hafa.",
        "passwordreset": "Famafana ary famerenana ny tenimiafina",
        "passwordreset-text-one": "Fenoy ity fôrmiolera ity mba hamerenana ny tenimiafinao",
        "passwordreset-text-many": "{{PLURAL:$1|Fenoy ny saha mba hahazoanao tenimiafina vonjimaika.}}",
        "content-not-allowed-here": "Votoatiny ''$1'' voarara eo amin'ny pejy [[$2]]",
        "editwarning-warning": "Mety hahavery ny fanovana nataonao ny fialanao amin'ity pejy ity.\nRaha tafiditra ianao dia azonao esorina ity fampitandremana ity ao amin'ny fizarana \"{{int:prefs-editing}}\" ao amin'ny safidinao.",
        "editpage-notsupportedcontentformat-title": "Tsy zaka io andrefim-botoatiny io",
+       "editpage-notsupportedcontentformat-text": "Tsy zakan'ny maodelim-botoatiny $1 ny firafi-botoatiny $1",
        "content-model-wikitext": "wiki-soratra",
        "content-model-text": "soratra tsotra",
        "content-model-javascript": "JavaScript",
        "listgrouprights-removegroup-self": "Afaka manala ny tenany amin'ny vondrona{{PLURAL:$2}} : $1",
        "listgrouprights-addgroup-self-all": "Manampy ny vondrom-pikambana rehetra amin'ny kaontiny",
        "listgrouprights-removegroup-self-all": "Manala ny vondrom-pikambana rehetra amin'ny kaontiny",
+       "listgrouprights-namespaceprotection-header": "Fifehezana amin'ny valan'anarana",
+       "listgrouprights-namespaceprotection-namespace": "Valan'anarana",
+       "listgrouprights-namespaceprotection-restrictedto": "Zo ahafahan'ny mpikambana manova",
+       "trackingcategories": "Sokajy fanarahana",
+       "trackingcategories-msg": "Sokajy fanarahana",
+       "trackingcategories-name": "Anaran-kafatra",
+       "trackingcategories-nodesc": "Tsy ahitana famaritana.",
+       "trackingcategories-disabled": "Tsy nalefa ho ampiasaina ilay sokajy",
        "mailnologin": "Tsy misy adiresy handefasana ny tenimiafina",
        "mailnologintext": "Mila [[Special:UserLogin|miditra]] ianao sady manana imailaka mandeha sy voamarina ao amin'ny [[Special:Preferences|mombamomba anao]] vao afaka mandefa imailaka amin'ny mpikambana hafa.",
        "emailuser": "Andefaso imailaka io mpikambana io",
index 082a2c1..e991760 100644 (file)
@@ -9,7 +9,8 @@
                        "Shirayuki",
                        "Сай",
                        "Санюн Вадик",
-                       "아라"
+                       "아라",
+                       "Sergey Ivanov"
                ]
        },
        "tog-underline": "Кузе кылвер-влакым ӱлычын удыралаш?",
        "faq": "ЧӱВаЙо (Чӱчкыдын вашлиялтше йодыш-влак)",
        "vector-action-addsection": "У ӱжашым тӱҥалаш",
        "vector-action-delete": "Шӧраш",
-       "vector-action-move": "Ð\9aÑ\83Ñ\81аÑ\80аш",
+       "vector-action-move": "Ð\9bӱмÑ\8bм Ð²Ð°Ñ\88Ñ\82алÑ\82аш",
        "vector-action-protect": "Тӧрлатымаш деч аралаш",
        "vector-action-undelete": "Шӧрымым пӧртылаш",
        "vector-action-unprotect": "Оролым вашталташ",
        "grouppage-bot": "{{ns:project}}:Бот-влак",
        "grouppage-sysop": "{{ns:project}}:Сайтвиктарыше-влак",
        "newuserlogpage": "У пайдаланыше регистрацийым эртарыме журнал",
-       "rightslog": "Ð\9fайдаланÑ\8bÑ\88Ñ\8bн ÐºÐµÑ\80Ñ\82Ñ\8bж Ð½ÐµÑ\80ген журнал",
+       "rightslog": "УÑ\87аÑ\81Ñ\82никÑ\8bн Ð¿Ñ\80аваже-влакÑ\8bм Ð¾Ð½Ñ\87Ñ\8bкÑ\82Ñ\8bÑ\88о журнал",
        "action-edit": "тиде лаштыкым тӧрлаташ",
        "nchanges": "$1 {{PLURAL:$1|тӧрлатымаш}}",
        "recentchanges": "Пытартыш тӧрлатымаш-влак",
        "usercreated": "$1, $2 шагатлан {{GENDER:$3|регистрацийым эртен|регистрацийым эртен}}",
        "newpages": "У лаштык-влак",
        "newpages-username": "Пайдаланышын лӱмжӧ:",
-       "move": "Ð\9aÑ\83Ñ\81аÑ\80аш",
-       "movethispage": "Тиде Ð»Ð°Ñ\88Ñ\82Ñ\8bкÑ\8bм ÐºÑ\83Ñ\81аÑ\80аш",
+       "move": "Ð\9bӱмÑ\8bм Ð²Ð°Ñ\88Ñ\82алÑ\82аш",
+       "movethispage": "Тиде Ð»Ð°Ñ\88Ñ\82Ñ\8bкÑ\8bн Ð»Ó±Ð¼Ð¶Ñ\8bм Ð²Ð°Ñ\88Ñ\82алÑ\82аш",
        "pager-newer-n": "{{PLURAL:$1|1=вес|вес}}",
        "pager-older-n": "{{PLURAL:$1|1=ончычсо|ончычсо}}",
        "booksources": "Негызым пыштыше кнага-влак",
        "blocklogentry": "[[$1]] лан йӧным петрен $2 $3 мучашлалтеш",
        "unblocklogentry": "$1лан йӧным почмо",
        "block-log-flags-nocreate": "у пайдаланыше-влаклан регистрацийым чактарыме",
-       "move-page-legend": "Ð\9bаÑ\88Ñ\82Ñ\8bкÑ\8bм ÐºÑ\83Ñ\81аÑ\80аш",
+       "move-page-legend": "Ð\9bаÑ\88Ñ\82Ñ\8bкÑ\8bн Ð»Ó±Ð¼Ð¶Ñ\8bм Ð²Ð°Ñ\88Ñ\82алÑ\82Ñ\8bмаш",
        "movepagetext": "Ӱлыл формо дене пайдаланен, тый лаштыкын лӱмым вашталтен кертат, тудын вашталтыме эртымгорныже у верыш кусарыме.\nТошто лӱмыштӧ у лӱмыш колтымо лаштык кодеш.\nТый тошто лӱмыш колтымо лаштык-влакым шке семын вашталтке кертат.\nТый тидым ынет ыште гын, [[Special:DoubleRedirects|кокытан]] да [[Special:BrokenRedirects|пудыргышо вес вере колтымашым]] терге.\nТый палемдыме верыш кылвер-влаклан шуйнымылан да тушко ончыктымылан вуйын шогет.\n\nШотыш нал: кунам у лӱман лаштык уло, тудо '''ок''' кусаралт. Тыге огыл, кунам лаштык вес вере кусаралтеш але тудо яра да вашталтымаш эртымгорныже уке.\nТый лаштыкым йонгылыш кусаренат гын менгешла тудым тошто лӱмыш кусарен кертат, но тый уже улшо лаштыкым ӱштын от керт, манын ончыкта.\n\n'''Тӱтко лий!'''\nЧӱчкыдын кучылтмо лаштыклан тиде кугу вашталтышым ыштен кертеш;\nУмбаке кайыме деч ончыч шоналте, тый тидын деч вара лиймым умылет.",
        "movepagetalktext": "Тиде лаштыкын каҥашымаш лаштык шке семын огеш кусно, '''тидлан амалже:'''\n*Тыгай лӱман яра огыл каҥашымаш лаштык уло ала\n*Ӱлыч кайыкым от корангде.\n\nТыгай годым тылат лаштыкым шке кидет дене кусараш але иктеш ушнаш кӱлеш.",
-       "movearticle": "Тиде Ð»Ð°Ñ\88Ñ\82Ñ\8bкÑ\8bм ÐºÑ\83Ñ\81аÑ\80аш:",
+       "movearticle": "Тиде Ð»Ð°Ñ\88Ñ\82Ñ\8bкÑ\8bн Ð»Ó±Ð¼Ð¶Ñ\8bм Ð²Ð°Ñ\88Ñ\82алÑ\82аш:",
        "newtitle": "У лӱм:",
        "move-watch": "Тиде лаштыкым эскераш",
-       "movepagebtn": "Ð\9bаÑ\88Ñ\82Ñ\8bкÑ\8bм ÐºÑ\83Ñ\81аÑ\80аш",
+       "movepagebtn": "Ð\9bаÑ\88Ñ\82Ñ\8bкÑ\8bн Ð»Ó±Ð¼Ð¶Ñ\8bм Ð²Ð°Ñ\88Ñ\82алÑ\82аш",
        "pagemovedsub": "Кусарымаш сайын эртен",
        "movepage-moved": "'''\"$1\" лаштыкым \"$2\" лаштыкыш кусарыме'''",
        "movepage-moved-redirect": "Вес вере колтымаш ыштыме.",
        "movepage-moved-noredirect": "Вес вере колтымаш ыштыме огыл.",
        "articleexists": "Тыгай лӱман лаштык уло але тиде лӱмым кучылташ огеш лий. Вес лӱмым ойыро.",
-       "movetalk": "Ð\9aаҥаÑ\88Ñ\8bмаÑ\88 Ð»Ð°Ñ\88Ñ\82Ñ\8bкÑ\8bм ÐºÑ\83Ñ\81аÑ\80аш",
+       "movetalk": "Ð\9aаҥаÑ\88Ñ\8bмаÑ\88 Ð»Ð°Ñ\88Ñ\82Ñ\8bкÑ\8bн Ð»Ó±Ð¼Ð¶Ñ\8bм Ð²Ð°Ñ\88Ñ\82алÑ\82аш",
        "movelogpage": "Кусарыме нерген журнал",
        "movereason": "Амал:",
        "revertmove": "мӧҥгешла пӧртылаш",
        "tooltip-ca-history": "Лаштыкын ондаксе тӧрлатымаш",
        "tooltip-ca-protect": "Тиде лаштыкым тӧрлатымаш деч аралаш",
        "tooltip-ca-delete": "Тиде лаштыкым шӧраш",
-       "tooltip-ca-move": "Тиде Ð»Ð°Ñ\88Ñ\82Ñ\8bкÑ\8bм ÐºÑ\83Ñ\81аÑ\80аш",
+       "tooltip-ca-move": "Тиде Ð»Ð°Ñ\88Ñ\82Ñ\8bкÑ\8bн Ð»Ó±Ð¼Ð¶Ñ\8bм Ð²Ð°Ñ\88Ñ\82алÑ\82аш",
        "tooltip-ca-watch": "Тиде лаштыкым тыйын эскерыме лӱмерыш ешараш",
        "tooltip-ca-unwatch": "Тиде лаштыкым тыйын эскерымашет гыч кораҥдаш",
        "tooltip-search": "{{SITENAME}} лаштыкыште кычалаш",
index 1e0e21c..62fe9f1 100644 (file)
        "categoriesfrom": "Приказ на категории почнувајќи од:",
        "special-categories-sort-count": "подреди по број",
        "special-categories-sort-abc": "подреди азбучно",
-       "deletedcontributions": "Ð\98збÑ\80иÑ\88ани Ð¿Ñ\80идонеÑ\81и Ð½Ð° ÐºÐ¾Ñ\80иÑ\81никоÑ\82",
-       "deletedcontributions-title": "Ð\98збÑ\80иÑ\88ани Ð¿Ñ\80идонеÑ\81и Ð½Ð° ÐºÐ¾Ñ\80иÑ\81никоÑ\82",
+       "deletedcontributions": "Ð\98збÑ\80иÑ\88ани ÐºÐ¾Ñ\80иÑ\81ниÑ\87ки Ð¿Ñ\80идонеÑ\81и",
+       "deletedcontributions-title": "Ð\98збÑ\80иÑ\88ани ÐºÐ¾Ñ\80иÑ\81ниÑ\87ки Ð¿Ñ\80идонеÑ\81и",
        "sp-deletedcontributions-contribs": "придонеси",
        "linksearch": "Пребарување на надворешни врски",
        "linksearch-pat": "Услов за пребарување:",
        "sp-contributions-newbies-title": "Придонеси на нови корисници",
        "sp-contributions-blocklog": "Дневник на блокирања",
        "sp-contributions-suppresslog": "притаени придонеси на корисникот",
-       "sp-contributions-deleted": "избÑ\80иÑ\88ани Ð¿Ñ\80идонеÑ\81и Ð½Ð° ÐºÐ¾Ñ\80иÑ\81никоÑ\82",
+       "sp-contributions-deleted": "избÑ\80иÑ\88ани ÐºÐ¾Ñ\80иÑ\81ниÑ\87ки Ð¿Ñ\80идонеÑ\81и",
        "sp-contributions-uploads": "подигања",
        "sp-contributions-logs": "дневници",
        "sp-contributions-talk": "разговор",
index 5e254fa..745d0c8 100644 (file)
        "rcnotefrom": "Доорх нь '''$2'''-с хойших өөрчлөлтүүд ('''$1''' хүртэлхийг харуулав) юм.",
        "rclistfrom": "$3 $2-с хойших шинэ засваруудыг үзүүлэх",
        "rcshowhideminor": "Бага зэргийн засваруудыг $1",
+       "rcshowhideminor-show": "үзүүлэх",
+       "rcshowhideminor-hide": "нуух",
        "rcshowhidebots": "Роботуудыг $1",
        "rcshowhideliu": "Нийт $1 бүртгэгдсэн хэрэглэгчид",
        "rcshowhideliu-show": "үзүүлэх",
        "rc-enhanced-expand": "Дэлгэрэнгүй мэдээллийг үзүүлэх (ЖаваСкрипт хэрэглэгдэнэ)",
        "rc-enhanced-hide": "Дэлгэрэнгүй мэдээллийг нуух (ЖаваСкрипт хэрэглэгдэнэ)",
        "rc-old-title": "Анх өгсөн гарчиг нь \"$1\"",
-       "recentchangeslinked": "Холбогдох өөрчлөлтүүд",
-       "recentchangeslinked-feed": "Холбогдох өөрчлөлтүүд",
-       "recentchangeslinked-toolbox": "Холбогдох өөрчлөлтүүд",
+       "recentchangeslinked": "Өөрчлөгдчихсөн эсэх",
+       "recentchangeslinked-feed": "Өөрчлөгдчихсөн эсэх",
+       "recentchangeslinked-toolbox": "Өөрчлөгдчихсөн эсэх",
        "recentchangeslinked-title": "\"$1\"-тай холбоотой засварууд",
        "recentchangeslinked-summary": "Энэ хуудас бол тодорхой хуудаснаас (эсвэл тодорхой ангиллын доторх хуудсууд) холбогдсон хуудсуудад хийгдсэн өөрчлөлтийн жагсаалт юм.\nТаны [[Special:Watchlist|хянах жагсаалтанд]] буй хуудсууд '''тодруулагдсан''' байгаа.",
        "recentchangeslinked-page": "Хуудасны нэр:",
        "undelete-error-long": "Дараах файлыг сэргээхэд алдаа гарлаа:\n\n$1",
        "undelete-show-file-confirm": "$2-ий $3 дахь \"<nowiki>$1</nowiki>\" файлын устгагдсан засварыг үзмээр байгаадаа итгэлтэй байна уу?",
        "undelete-show-file-submit": "Тийм",
-       "namespace": "Ð\9dÑ\8dÑ\80ний Ð·Ð°Ð¹:",
+       "namespace": "Ð¥Ñ\83Ñ\83даÑ\81нÑ\8b Ñ\82Ó©Ñ\80өл:",
        "invert": "Зааснаас бусад",
        "namespace_association": "Заасантай холбоотой",
        "blanknamespace": "(Гол)",
        "import-interwiki-history": "Энэ хуудсын бүх хувилбаруудын түүхийг хуулах",
        "import-interwiki-templates": "Бүх загварыг оруулах",
        "import-interwiki-submit": "Импортлох",
-       "import-interwiki-namespace": "Зорьсон нэрний зай:",
+       "import-interwiki-namespace": "Зорьсон хуудсын төрөл:",
        "import-upload-filename": "Файлын нэр:",
        "import-comment": "Тайлбар:",
        "importtext": "[[Special:Export|экспорт багажийг]]  ашиглан файлыг эх үүсвэр викигээс татаад, өөрийн дискэнд хадгалж, энд оруулна уу.",
        "sqlite-has-fts": "$1 (бүх текстээрх хайлтыг дэмждэг)",
        "sqlite-no-fts": "$1 (бүх текстээрх хайлтыг дэмждэггүй)",
        "logentry-delete-delete": "$3 хуудсыг $1 устгасан",
-       "logentry-delete-restore": "$3 Ñ\85Ñ\83Ñ\83дÑ\81Ñ\8bг $1 Ñ\81Ñ\8dÑ\82гÑ\8dÑ\8dÑ\81Ñ\8dн",
+       "logentry-delete-restore": "$3 Ñ\85Ñ\83Ñ\83дÑ\81Ñ\8bг $1 Ñ\81Ñ\8dÑ\80гÑ\8dÑ\8dв",
        "revdelete-restricted": "системийн операторуудад тавигдсан хязгаарлалтууд",
        "revdelete-unrestricted": "системийн операторуудаас авч хаясан хязгаарлалтууд",
        "logentry-rights-rights": "$1 $3 дахь грүпийн гишүүнчлэлээ $4 ээс $5 руу шилжүүллээ",
index 2c4fe54..3a9edc0 100644 (file)
        "permalink": "शाश्वत दुवा",
        "print": "छापा",
        "view": "दाखवा",
+       "view-foreign": "$1 वर पहा",
        "edit": "संपादन",
        "create": "तयार करा",
        "editthispage": "हे पृष्ठ संपादित करा",
index 9969a7d..76f5b25 100644 (file)
@@ -48,7 +48,7 @@
        "tog-hidepatrolled": "Skjul patruljerte redigeringer i siste endringer",
        "tog-newpageshidepatrolled": "Skjul patruljerte sider fra listen over nye sider",
        "tog-extendwatchlist": "Utvid overvåkningslisten til å vise alle endringer, ikke bare de siste",
-       "tog-usenewrc": "Gruppeendringer per side i siste endringer samt overvåkingsliste",
+       "tog-usenewrc": "Gruppeendringer per side i siste endringer samt overvåkingsliste",
        "tog-numberheadings": "Autonummerer overskrifter",
        "tog-showtoolbar": "Vis verktøylinje",
        "tog-editondblclick": "Rediger sider ved å dobbeltklikke",
        "listgrouprights-namespaceprotection-namespace": "Navnerom",
        "listgrouprights-namespaceprotection-restrictedto": "Rettighet(er) som tillater at brukeren redigerer",
        "trackingcategories": "Sporingskategori",
-       "trackingcategories-summary": "Denne siden lister sporingskategorier som er automatisk befolket av Mediawiki-programvaren. Deres navn kan bli endret ved å redigere de tilhørende systembeskjedene i {{ns:8}}-navnerommet.",
+       "trackingcategories-summary": "Denne siden lister sporingskategorier som er automatisk befolket av Mediawiki-programvaren. Navnene deres kan endres ved å redigere de tilhørende systembeskjedene i {{ns:8}}-navnerommet.",
        "trackingcategories-msg": "Sporingskategori",
        "trackingcategories-name": "Beskjednavn",
        "trackingcategories-desc": "Kategori-inklusjonskriterium",
index 1687f64..c42de5e 100644 (file)
        "editundo": "angre",
        "diff-empty": "(Ingen skilnad)",
        "diff-multi-sameuser": "({{PLURAL:$1|Éin mellomversjon|$1 mellomversjonar}} av den same brukaren er ikkje {{PLURAL:$1|vist|viste}})",
+       "diff-multi-otherusers": "({{PLURAL:$1|Éin mellomliggjande versjon|$1 mellomliggjande versjonar}} av {{PLURAL:$2|éin annan brukar|$2 brukarar}} er ikkje {{PLURAL:$1|vist|viste}})",
        "diff-multi-manyusers": "({{PLURAL:$1|Ein mellomversjon|$1 mellomversjonar}} av meir enn $2 {{PLURAL:$2|brukar|brukarar}}  er ikkje {{PLURAL:$1|vist|viste}})",
        "difference-missing-revision": "{{PLURAL:$2|Éin versjon|$2 versjonar}} av skilnaden ($1) vart ikkje {{PLURAL:$2|funnen|funne}}.\n\nDette skriv seg som oftast frå at ein har fylgt ei forelda versjonslenkje til ei side som er sletta.\nDetaljar kan ein finna i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletteloggen].",
        "searchresults": "Søkjeresultat",
        "listgrouprights-removegroup-self": "Kan ta vekk {{PLURAL:$2|gruppe|grupper}} frå eigen konto: $1",
        "listgrouprights-addgroup-self-all": "Kan leggja til alle gruppene til sin eigen konto",
        "listgrouprights-removegroup-self-all": "Kan ta vekk alle gruppene frå sin eigen konto",
+       "trackingcategories": "Sporingskategoriar",
+       "trackingcategories-summary": "Denne sida listar opp sporingskategoriar som automatisk får innhald av MediaWiki-programvara. Namna deira kan endrast gjennom å endra dei relevante systemmeldingane i {{ns:8}}-namnerommet.",
+       "trackingcategories-msg": "Sporingskategori",
+       "trackingcategories-name": "Meldingsnamn",
+       "trackingcategories-desc": "Inkluderingsgrunnlag",
+       "noindex-category-desc": "Sida vert ikkje indeksert av robotar av di ho inneheld trylleordet <code><nowiki>__NOINDEX__</nowiki></code> og er i eit namnerom der dette flagget er tillate.",
        "mailnologin": "Inga avsendaradresse",
        "mailnologintext": "Du lyt vera [[Special:UserLogin|innlogga]] og ha ei gyldig e-postadresse sett i [[Special:Preferences|brukarinnstillingane]] for å sende e-post åt andre brukarar.",
        "emailuser": "Send e-post åt denne brukaren",
        "version-hook-subscribedby": "Brukt av",
        "version-version": "(versjon $1)",
        "version-license": "Lisens",
+       "version-ext-colheader-credits": "Forfattarar",
        "version-poweredby-credits": "Denne wikien er driven av '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "andre",
        "version-poweredby-translators": "translatewiki.net-omsetjarar",
        "redirect-lookup": "Sjå etter:",
        "redirect-value": "Verdi",
        "redirect-user": "Brukar-ID",
+       "redirect-page": "Side-ID",
        "redirect-revision": "Sideversjon",
        "redirect-file": "Filnamn",
        "redirect-not-exists": "Fann ikkje verdi",
        "dberr-problems": "Nettstaden har tekniske problem.",
        "dberr-again": "Venta nokre minutt og last sida inn på nytt.",
        "dberr-info": "(Kan ikkje kontakta databasetenaren: $1)",
+       "dberr-info-hidden": "(får ikkje kontakt med databasetenaren)",
        "dberr-usegoogle": "Du kan søkja gjennom Google i mellomtida.",
        "dberr-outofdate": "Merk at versjonane deira av innhaldet vårt kan vera forelda.",
        "dberr-cachederror": "Dette er ein mellomlagra kopi av den etterspurde sida og er mogelegvis ikkje den gjeldande versjonen av henne.",
        "expand_templates_input": "Inntekst:",
        "expand_templates_output": "Resultat",
        "expand_templates_xml_output": "XML-resultat",
+       "expand_templates_html_output": "Rå HTML-utdata",
        "expand_templates_ok": "OK",
        "expand_templates_remove_comments": "Fjern kommentarar",
        "expand_templates_remove_nowiki": "Ikkje vis <nowiki>-merke i resultatet",
        "expand_templates_generate_xml": "Vis parsertre som XML",
+       "expand_templates_generate_rawhtml": "Vis rå HTML",
        "expand_templates_preview": "Førehandsvising"
 }
index 38ce832..a4a4cdd 100644 (file)
        "loginlanguagelabel": "ਭਾਸ਼ਾ: $1",
        "suspicious-userlogout": "ਤੁਹਾਡੀ ਵਿਦਾਇਗੀ ਦੀ ਬੇਨਤੀ ਨਕਾਰ ਦਿੱਤੀ ਗਈ ਕਿਉਂਕਿ ਲੱਗਦਾ ਹੈ ਕਿ ਇਹ ਕਿਸੇ ਟੁੱਟੇ ਹੋਏ ਬਰਾਊਜ਼ਰ ਜਾਂ ਕੈਸ਼ ਹੋਈ ਪ੍ਰਾਕਸੀ ਤੋਂ ਭੇਜੀ ਗਈ ਸੀ।",
        "createacct-another-realname-tip": "ਅਸਲੀ ਨਾਂ ਚੋਣਵਾਂ ਹੈ।\nਜੇਕਰ ਤੁਸੀਂ ਇਹ ਦਿੱਤਾ ਹੈ ਤਾਂ ਤੁਹਾਡੇ ਕੰਮ ਵਾਸਤੇ ਗੁਣ ਦੇ ਤੌਰ ਉੱਤੇ ਵਰਤਿਆ ਜਾਵੇਗਾ।",
+       "pt-login": "ਲਾਗ ਇਨ",
        "pt-login-button": "ਲਾਗ ਇਨ",
+       "pt-createaccount": "ਖਾਤਾ ਬਣਾਓ",
+       "pt-userlogout": "ਲਾਗ ਆਉਟ",
        "php-mail-error-unknown": "PHP ਦੇ ਮੇਲ() ਕਰਜ ਵਿੱਚ ਅਣਜਾਣ ਦੋਸ਼",
        "user-mail-no-addy": "ਬਿਨਾਂ ਈ-ਮੇਲ ਪਤਾ ਦਿੱਤੇ ਈ-ਮੇਲ ਭੇਜਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ।",
        "user-mail-no-body": "ਖ਼ਾਲੀ ਜਾਂ ਬਹੁਤੀ ਛੋਟੀ ਸਮੱਗਰੀ ਨਾਲ਼ ਈਮੇਲ ਭੇਜਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਗਈ",
index c69252a..f25121d 100644 (file)
        "jumptonavigation": "nawigacji",
        "jumptosearch": "wyszukiwania",
        "view-pool-error": "Niestety w chwili obecnej serwery są przeciążone.\nZbyt wielu użytkowników próbuje wyświetlić tę stronę.\nPoczekaj chwilę przed ponowną próbą dostępu do tej strony.\n\n$1",
+       "generic-pool-error": "Niestety w chwili obecnej serwery są przeciążone.\nZbyt wielu użytkowników próbuje wyświetlić tę stronę.\nPoczekaj chwilę przed ponowną próbą dostępu do tej strony.",
        "pool-timeout": "Zbyt długi czas oczekiwania na blokadę",
        "pool-queuefull": "Kolejka zadań jest pełna",
        "pool-errorunknown": "Błąd nieznany",
        "doubleredirects": "Podwójne przekierowania",
        "doubleredirectstext": "Lista zawiera strony z przekierowaniami do stron, które przekierowują do innej strony.\nKażdy wiersz zawiera linki do pierwszego i drugiego przekierowania oraz link, do którego prowadzi drugie przekierowanie. Ostatni link prowadzi zazwyczaj do strony, do której powinna w rzeczywistości przekierowywać pierwsza strona.\n<del>Skreślenie</del> oznacza naprawienie przekierowania.",
        "double-redirect-fixed-move": "Naprawa podwójnego przekierowania [[$1]] → [[$2]]",
-       "double-redirect-fixed-maintenance": "Naprawiono podwójne przekierowanie z [[$1]] do [[$2]].",
+       "double-redirect-fixed-maintenance": "Automatyczna naprawa podwójnego przekierowania podczas prac konserwacyjnych z [[$1]] na [[$2]].",
        "double-redirect-fixer": "Naprawiacz przekierowań",
        "brokenredirects": "Zerwane przekierowania",
        "brokenredirectstext": "Poniższe przekierowania wskazują na nieistniejące strony.",
index d14a9ba..26fffc5 100644 (file)
@@ -13,7 +13,8 @@
                        "Ævar Arnfjörð Bjarmason <avarab@gmail.com>, Jens Frank",
                        "לערי ריינהארט",
                        "Shirayuki",
-                       "아라"
+                       "아라",
+                       "Kolega2357"
                ]
        },
        "tog-underline": "Anliure con la sotliniadura",
        "cantrollback": "As peul pa tornesse a na version pì veja: l'ùltima modìfica a l'ha fala l'ùnich utent che a l'abia travajà a cost artìcol-sì.",
        "alreadyrolled": "As peulo pa anulé j'ultime modìfiche ëd [[:$1]] fàite da [[User:$2|$2]] ([[User talk:$2|Talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);\ncheidun d'àutr a l'ha già modificà ò pura anulà le modìfiche a sta pàgina-sì.\n\nL'ùltima modìfica a la pàgina a l'é stàita fàita da [[User:$3|$3]] ([[User talk:$3|Talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Ël coment dla modìfica a l'era: \"''$1''\".",
-       "revertpage": "Gavà via le modìfiche ëd [[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]); ël contnù a l'é stàit tirà andarè a l'ùltima version dl'utent [[User:$1|$1]]",
+       "revertpage": "Gavà via le modìfiche ëd [[Special:Contributions/$2|$2]] ([[User talk:$2|ciaciarade]]), ël contnù a l'é stàit tirà andaré a l'ùltima version dl'utent [[User:$1|$1]]",
        "revertpage-nouser": "Révoca dle modìfiche da part ëd n'utent ëstërmà a l'ùltima version ëd {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Modìfiche anulà da $1; tirà andré a l'ùltima version da $2.",
        "sessionfailure-title": "Eror ëd session",
index a434280..1a4e7f5 100644 (file)
        "invalid-content-data": "Error message indicating that the page's content can not be saved because it is invalid. This may occurr for content types with internal consistency constraints.",
        "content-not-allowed-here": "Error message indicating that the desired content model is not supported in given localtion.\n* $1 - the human readable name of the content model: {{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}}\n* $2 - the title of the page in question",
        "editwarning-warning": "Uses {{msg-mw|Prefs-editing}}",
-       "editpage-notsupportedcontentformat-title": "Title of error page shown when using an incompatible format on EditPage",
-       "editpage-notsupportedcontentformat-text": "Error message shown when using an incompatible format on EditPage. Parameters:\n* $1 - the format id\n* $2 - the content model name",
+       "editpage-notsupportedcontentformat-title": "Title of error page shown when using an incompatible format on EditPage.\n\nUsed as title for the following error message:\n* {{msg-mw|Editpage-notsupportedcontentformat-text}}.",
+       "editpage-notsupportedcontentformat-text": "Error message shown when using an incompatible format on EditPage.\n\nThe title for this error is {{msg-mw|Editpage-notsupportedcontentformat-title}}.\n\nParameters:\n* $1 - the format id\n* $2 - the content model name",
        "content-model-wikitext": "Name for the wikitext content model, used when decribing what type of content a page contains.\n\nThis message is substituted in:\n*{{msg-mw|Bad-target-model}}\n*{{msg-mw|Content-not-allowed-here}}",
        "content-model-text": "Name for the plain text content model, used when decribing what type of content a page contains.\n\nThis message is substituted in:\n*{{msg-mw|Bad-target-model}}\n*{{msg-mw|Content-not-allowed-here}}\n{{Identical|Plain text}}",
        "content-model-javascript": "Name for the JavaScript content model, used when decribing what type of content a page contains.\n\nThis message is substituted in:\n*{{msg-mw|Bad-target-model}}\n*{{msg-mw|Content-not-allowed-here}}",
        "previousrevision": "See also:\n* {{msg-mw|Nextrevision}}",
        "nextrevision": "See also:\n* {{msg-mw|Previousrevision}}",
        "currentrevisionlink": "{{Identical|Current revision}}",
-       "cur": "Link in page history",
+       "cur": "Link in page history ([https://translatewiki.net/w/i.php?title=MediaWiki:Cur/qqq&action=history example])",
        "next": "Link in page history\n\n{{Identical|Next}}",
        "last": "Link in page history\n\n{{Identical|Last}}",
        "page_first": "This is part of the navigation message on the top and bottom of Special pages which are lists of things in alphabetical order, e.g. the '[[Special:Categories|Categories]]' special page. It is followed by the message {{msg-mw|Viewprevnext}}.\n{{Identical|First}}",
        "group": "{{Identical|Group}}",
        "group-user": "{{doc-group|user}}\n{{Identical|User}}",
        "group-autoconfirmed": "{{doc-group|autoconfirmed}}\nOn Wikimedia sites autoconfirmed users are users which are older than 4 days. After those 4 days, they have more rights.",
-       "group-bot": "{{doc-group|bot}}",
-       "group-sysop": "{{doc-group|sysop}}",
+       "group-bot": "{{doc-group|bot}}\n{{Identical|Bot}}",
+       "group-sysop": "{{doc-group|sysop}}\n{{Identical|Administrator}}",
        "group-bureaucrat": "{{doc-group|bureaucrat}}",
        "group-suppress": "{{doc-group|suppress}}\nThis is an optional (disabled by default) user group, meant for the [[mw:RevisionDelete|RevisionDelete]] feature, to change the visibility of revisions through [[Special:RevisionDelete]].\n\n{{Identical|Oversight}}",
        "group-all": "The name of the user group that contains all users, including anonymous users\n\n{{Identical|All}}",
        "recentchanges-legend-plusminus": "{{optional}}\nA plus/minus sign with a number for the legend.",
        "rcnotefrom": "This message is displayed at [[Special:RecentChanges]] when viewing recentchanges from some specific time.\n\nThe corresponding message is {{msg-mw|Rclistfrom}} (split into date and time).\n\nParameters:\n* $1 - the maximum number of changes that are displayed\n* $2 - a date and time\n* $3 - (Optional) a date\n* $4 - (Optional) a time",
        "rclistfrom": "Used on [[Special:RecentChanges]]. Parameters:\n* $1 - (Currently not use) date and time. The date and the time adds to the rclistfrom description.\n* $2 - time. The time adds to the rclistfrom link description (with split of date and time).\n* $3 - date. The date adds to the rclistfrom link description (with split of date and time).\n\nThe corresponding message is {{msg-mw|Rcnotefrom}}.",
-       "rcshowhideminor": "Option text in [[Special:RecentChanges]]. Parameters:\n* $1 - the \"show/hide\" command, with the text taken from either {{msg-mw|rcshowhideminor-show}} or {{msg-mw|rcshowhideminor-hide}}",
+       "rcshowhideminor": "Option text in [[Special:RecentChanges]]. Parameters:\n* $1 - the \"show/hide\" command, with the text taken from either {{msg-mw|rcshowhideminor-show}} or {{msg-mw|rcshowhideminor-hide}}\n{{Identical|Minor edit}}",
        "rcshowhideminor-show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideminor}}.\n\nSee also:\n* {{msg-mw|rcshowhideminor-hide}}\n{{Identical|Show}}",
        "rcshowhideminor-hide": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideminor}}.\n\nSee also:\n* {{msg-mw|rcshowhideminor-show}}\n{{Identical|Hide}}",
        "rcshowhidebots": "Option text in [[Special:RecentChanges]]. Parameters:\n* $1 - the \"show/hide\" command, with the text taken from either {{msg-mw|rcshowhidebots-show}} or {{msg-mw|rcshowhidebots-hide}}\n{{Identical|$1 bots}}",
        "statistics-articles": "Used in [[Special:Statistics]].\n\nA 'content page' is a page that forms part of the purpose of the wiki. It includes the main page and pages in the main namespace and any other namespaces that are included when the wiki is customised. For example on Wikimedia Commons 'content pages' include pages in the file and category namespaces. On Wikinews 'content pages' include pages in the Portal namespace. For technical definition of 'content namespaces' see [[mw:Manual:Using_custom_namespaces#Content_namespaces|MediaWiki]].\n\nPossible alternatives to the word 'content' are 'subject matter' or 'wiki subject' or 'wiki purpose'.\n\n{{Identical|Content page}}",
        "statistics-pages": "Used in [[Special:Statistics]]\n{{Identical|Page}}",
        "statistics-pages-desc": "Tooltip shown over ''Pages'' (or as a note below it) in [[Special:Statistics]]",
-       "statistics-files": "Used in [[Special:Statistics]]",
+       "statistics-files": "Used in [[Special:Statistics]].\n{{Identical|Uploaded file}}",
        "statistics-edits": "Used in [[Special:Statistics]]",
        "statistics-edits-average": "Used in [[Special:Statistics]]",
        "statistics-views-total": "Used in [[Special:Statistics]]",
        "pageinfo-templates": "The list of templates transcluded within the page. Parameters:\n* $1 is the number of templates transcluded within the current page.\nSee also:\n* {{msg-mw|Pageinfo-transclusions}}",
        "pageinfo-transclusions": "The list of pages on which this page is transcluded. Parameters:\n* $1 is the number of pages the current page is transcluded on.\nSee also:\n* {{msg-mw|Pageinfo-templates}}",
        "pageinfo-footer": "{{ignored}}Custom text for the bottom of the info page (action=info).",
-       "pageinfo-toolboxlink": "Information link for the page (like 'What links here', but to action=info for the current page instead)",
+       "pageinfo-toolboxlink": "Information link for the page (like \"What links here\", but to action=info for the current page instead).\n{{Identical|Page information}}",
        "pageinfo-redirectsto": "Key for the row shown if this page is a redirect. Verb. See [{{canonicalurl:w:Main_page|action=info}} example].",
        "pageinfo-redirectsto-info": "Text to put in parentheses for the link to the action=info of the redirect target.\n{{Identical|Info}}",
        "pageinfo-contentpage": "Key for the row shown on [{{fullurl:News|action=info}} action=info] if this page is [[mw:Manual:Article count|counted as a content page]]",
        "metadata-help": "This message is followed by a table with metadata.",
        "metadata-expand": "On an image description page, there is mostly a table containing data (metadata) about the image. The most important data are shown, but if you click on this link, you can see more data and information. For the link to hide back the less important data, see {{msg-mw|Metadata-collapse}}.",
        "metadata-collapse": "On an image description page, there is mostly a table containing data (metadata) about the image. The most important data are shown, but if you click on the link {{msg-mw|Metadata-expand}}, you can see more data and information. This message is for the link to hide back the less important data.",
-       "metadata-fields": "{{doc-important|覅翻译列表项,只翻译上头个文本!畀 \"<code>* make</code>\" 搭别个列表项正确保留。}}\nThe sentences are for explanation only and are not shown to the user.",
+       "metadata-fields": "{{doc-important|Do not translate list items, only translate the text! So leave \"<code>* make</code>\" and the other items exactly as they are.}}\nThe sentences are for explanation only and are not shown to the user.",
        "metadata-langitem": "{{optional}}\nThis is used for constructing the list of translations when a metadata property is translated into multiple languages.\n\nParameters:\n* $1 - the value of the property (in one language)\n* $2 - the language name that this translation is for (or language code if language name cannot be determined)\n* $3 - (Unused) the language code",
        "metadata-langitem-default": "{{optional}}\nSimilar to \"metadata-langitem\" but for the case where a multilingual property has a default specified that does not specify what language the default is in. $1 is the value of the property.",
        "exif-imagewidth": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n{{Identical|Width}}",
        "exif-componentsconfiguration": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThis contains how the information in the picture is stored. This is most commonly Y, Cr, Cb to specify luma, red, blue. RGB is also possible to specify Red, Green, Blue.\n{{Related|Exif-componentsconfiguration}}",
        "exif-compressedbitsperpixel": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].",
        "exif-pixelydimension": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n{{Identical|Image width}}",
-       "exif-pixelxdimension": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].",
+       "exif-pixelxdimension": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n{{Identical|Image height}}",
        "exif-usercomment": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nComments by user. Sometimes used like ImageDescription when the ImageDescription contained non-ascii characters. (Technically ImageDescription is supposed to contain ascii characters. In practise utf-8 is used in ImageDescription, so this field isn't used too much.)",
        "exif-relatedsoundfile": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nSome cameras offer the option to record an audio \"memo\" for the photo they just took. If the user did that, the name of the file is labelled with this message.",
        "exif-datetimeoriginal": "Exif is a format for storing metadata in image files. See this [[w:Exchangeable_image_file_format|Wikipedia article]] and the example at the bottom of [[commons:File:Phalacrocorax-auritus-020.jpg|this page on Commons]]. The tags are explained [http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html briefly] and [http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf in further detail].\n\nThe date and time when the original image data was generated. For example if it was a painting from 1773, scanned in to a computer in 2007, the datetimeoriginal would be 1773 and {{msg-mw|exif-datetimedigitized}} would have the 2007 date.",
index cc07ca2..77a8d04 100644 (file)
        "jumptonavigation": "navigare",
        "jumptosearch": "căutare",
        "view-pool-error": "Ne pare rău, dar serverele sunt supraîncărcare în acest moment.\nPrea mulți utilizatori încearcă să vizualizeze această pagină.\nVă rugăm să așteptați un moment înainte de a reîncerca accesarea paginii.\n\n$1",
+       "generic-pool-error": "Ne pare rău, dar serverele sunt supraîncărcate în acest moment.\nPrea mulți utilizatori încearcă să vizualizeze această resursă.\nVă rugăm să așteptați un moment înainte de a reîncerca accesarea acestei resurse.",
        "pool-timeout": "Timpul alocat așteptării pentru blocare a expirat",
        "pool-queuefull": "Coada de așteptare este plină",
        "pool-errorunknown": "Eroare necunoscută",
        "tooltip-pt-watchlist": "Lista paginilor pe care le monitorizați",
        "tooltip-pt-mycontris": "Listă de contribuții",
        "tooltip-pt-login": "Sunteți încurajat să vă autentificați, deși acest lucru nu este obligatoriu.",
-       "tooltip-pt-logout": "Închideți sesiunea de lucru",
+       "tooltip-pt-logout": "Închide sesiunea de lucru",
        "tooltip-ca-talk": "Discuții despre această pagină",
        "tooltip-ca-edit": "Puteți modifica această pagină. Înainte de a o salva vă rugăm s-o previzualizați.",
        "tooltip-ca-addsection": "Adaugă o nouă secțiune.",
index 408b81a..f20b904 100644 (file)
        "wlshowlast": "Shaw hainmaist $1 hoors $2 days $3",
        "watchlist-options": "Watchleet opties",
        "watching": "Watchin...",
-       "unwatching": "Unwatchin...",
+       "unwatching": "Onwatchin...",
        "watcherrortext": "Ae mistak occurred while chyngin yer watchleet settins fer \"$1\".",
-       "enotif_reset": "Merk aa pages visitit",
+       "enotif_reset": "Maurk aw pages aes veesitit",
        "enotif_impersonal_salutation": "{{SITENAME}} uiser",
        "enotif_subject_deleted": "{{SITENAME}} page $1 haes been {{GENDER:$2|delytit}} bi $2",
        "enotif_subject_created": "{{SITENAME}} page $1 haes been {{GENDER:$2|cræftit}} bi $2",
        "dellogpagetext": "Ablo is ae leet o the maist recynt delytions.",
        "deletionlog": "delytion log",
        "reverted": "Revertit til aulder reveesion",
-       "deletecomment": "Raeson:",
+       "deletecomment": "Raison:",
        "deleteotherreason": "Ither/addeetional raison:",
-       "deletereasonotherlist": "Ither raeson",
+       "deletereasonotherlist": "Ither raison",
        "deletereason-dropdown": "* Commyn delyte raisons\n** Spam\n** Vandaleesm\n** Copiericht violation\n** Writer request\n** Broken reguidal",
        "delete-edit-reasonlist": "Eedit delytion raisons",
        "delete-toobig": "This page haes ae muckle eedit histerie, ower $1 {{PLURAL:$1|reveesion|reveesions}}.\nDelytion o sic pages haes been restrictit tae stap accidental disruption o {{SITENAME}}.",
        "delete-warning-toobig": "This page haes ae muckle eedit histerie, ower $1 {{PLURAL:$1|reveesion|reveesions}}.\nDelytin it micht disrupt database operations o {{SITENAME}};\nproceed wi caution.",
        "deleting-backlinks-warning": "'''Warnishment:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Ither pages]] airt til or transcluide the page ye'r aboot tae delyte.",
-       "rollback": "Row back edits",
+       "rollback": "Row back eedits",
        "rollback_short": "Rowback",
        "rollbacklink": "rowback",
        "rollbacklinkcount": "rowback $1 {{PLURAL:$1|eedit|eedits}}",
        "modifiedarticleprotection": "chynged protection level fer \"[[$1]]\"",
        "unprotectedarticle": "remuied protection fae \"[[$1]]\"",
        "movedarticleprotection": "muived protection settins fae \"[[$2]]\" til \"[[$1]]\"",
-       "protect-title": "Protectin \"$1\"",
+       "protect-title": "Chynge protection level fer \"$1\"",
        "protect-title-notallowed": "See protection level o \"$1\"",
-       "prot_1movedto2": "[[$1]] flittit til [[$2]]",
+       "prot_1movedto2": "[[$1]] muivit tae [[$2]]",
        "protect-badnamespace-text": "Pages in this namespace canna be protected.",
        "protect-norestrictiontypes-text": "This page canna be protected aes thaur's naw restreection types available.",
-       "protectcomment": "Raeson:",
+       "protectcomment": "Raison:",
        "protectexpiry": "Expires:",
        "protect_expiry_invalid": "Expirie time is onvalit.",
        "protect_expiry_old": "Expirie time is in the past.",
        "protect-locked-dblock": "Protection levels canna be chynged cause o aen acteeve database lock.\nHere ar the settins fer the page <strong>$1</strong> nou:",
        "protect-locked-access": "Yer accont disna hae permeession tae chynge page protection levels.\nHere ar the settins fer the page <strong>$1</strong> the nou:",
        "protect-cascadeon": "This page is nou protected cause it is incluided in the follaein {{PLURAL:$1|page, this haes|pages, thir hae}} cascadin protection turned oan.\nChynges til this page's protection level will na affect the cascadin protection.",
-       "protect-default": "Allow aw uisers",
+       "protect-default": "Allou aw uisers",
        "protect-fallback": "permit yinlie uisers wi \"$1\" permission",
        "protect-level-autoconfirmed": "Allou yinly autæconfirmed uisers",
        "protect-level-sysop": "Allou admeenistraters yinly",
        "maximum-size": "Mucklest size:",
        "restriction-edit": "Eidit",
        "restriction-move": "Muiv",
-       "restriction-create": "Mak",
+       "restriction-create": "Creaut",
        "restriction-upload": "Uplaid",
        "restriction-level-sysop": "fulie protected",
        "restriction-level-autoconfirmed": "semie protected",
        "sp-contributions-newbies": "Shaw contreebutions o freish accoonts ainlie",
        "sp-contributions-newbies-sub": "Fer new accoonts",
        "sp-contributions-newbies-title": "Uiser contreebutions fer new accoonts",
-       "sp-contributions-blocklog": "block log",
+       "sp-contributions-blocklog": "the block log",
        "sp-contributions-suppresslog": "suppressed uiser contreebutions",
        "sp-contributions-deleted": "delytit uiser contreebutions",
-       "sp-contributions-uploads": "uploads",
+       "sp-contributions-uploads": "uplaids",
        "sp-contributions-logs": "logs",
        "sp-contributions-talk": "tauk",
        "sp-contributions-userrights": "uiser richts management",
        "isredirect": "reguidal page",
        "istemplate": "transclusion",
        "isimage": "file airtin",
-       "whatlinkshere-prev": "{{PLURAL:$1|previous|previous $1}}",
-       "whatlinkshere-next": "{{PLURAL:$1|next|next $1}}",
+       "whatlinkshere-prev": "{{PLURAL:$1|aforegaun|aforegaun $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|neix|neix $1}}",
        "whatlinkshere-links": "← airtins",
-       "whatlinkshere-hideredirs": "$1 redirects",
+       "whatlinkshere-hideredirs": "$1 reguidals",
        "whatlinkshere-hidetrans": "$1 transclusions",
        "whatlinkshere-hidelinks": "$1 airtins",
        "whatlinkshere-hideimages": "$1 file airtins",
        "blockip": "Block uiser",
        "blockip-legend": "Block uiser",
        "blockiptext": "Uise the form ablo tae block write access fae ae speceefic IP address or uisername. This shid be dun juist tae hinder vandaleesm, n in accord wi [[{{MediaWiki:Policy-url}}|policie]]. Fil in ae speceefic raison ablo (fer exemplar, citin parteecular pages that were vandalised).",
-       "ipadressorusername": "IP Address or uisername",
+       "ipadressorusername": "IP address or uisername:",
        "ipbexpiry": "Expirie:",
-       "ipbreason": "Raeson:",
+       "ipbreason": "Raison:",
        "ipbreason-dropdown": "*Commyn block raisons\n** Insertin false information\n** Remuivin content fae pages\n** Spammin airtins til ootby steids\n** Insertin nonsense/gibberish intil pages\n** Inteemidatin behavier/harassment\n** Abuisin multiple accoonts\n** Onacceptable uisername",
        "ipb-hardblock": "Stap loggit-in uisers fae eeditin fae this IP address",
        "ipbcreateaccount": "Stap accoont cræftin",
        "ipbemailban": "Stap uiser fae sendin wab-mail",
        "ipbenableautoblock": "Autæmateeclie block the laist IP address uised bi this uiser, n onie subsequent IP addresses that thay attempt tae eedit fae",
        "ipbsubmit": "Block this uiser",
-       "ipbother": "Ither time",
-       "ipboptions": "2 hours:2 hours,1 day:1 day,3 days:3 days,1 week:1 week,2 weeks:2 weeks,1 month:1 month,3 months:3 months,6 months:6 months,1 year:1 year,indefinite:infinite",
+       "ipbother": "Ither time:",
+       "ipboptions": "2 hoors:2 hours,1 day:1 day,3 days:3 days,1 week:1 week,2 weeks:2 weeks,1 month:1 month,3 months:3 months,6 months:6 months,1 year:1 year,indefinite:infinite",
        "ipbhidename": "Skauk uisername fae eedits n leets",
        "ipbwatchuser": "Watch this uiser's uiser n tauk pages",
        "ipb-disableusertalk": "Stap this uiser fae eeditin thair ain tauk page while blockit",
        "ipblocklist-otherblocks": "Ither {{PLURAL:$1|block|blocks}}",
        "infiniteblock": "infeenite",
        "expiringblock": "dies oan $1 at $2",
-       "anononlyblock": "anon. juist",
+       "anononlyblock": "anon. yinlie",
        "noautoblockblock": "autæblock disabled",
-       "createaccountblock": "accoont-makkin blockit",
+       "createaccountblock": "account creaution disablt",
        "emailblock": "wab-mail disabled",
        "blocklist-nousertalk": "canna eedit yer ain tauk page",
        "ipblocklist-empty": "The block leet is tuim.",
        "blocklogentry": "blockit [[$1]] wi aen expirie time o $2 $3",
        "reblock-logentry": "chynged block settins fer [[$1]] wi ae diein time o $2 $3",
        "blocklogtext": "This is ae log o uiser blockin n onblockin actions. Autaematiclie blockit IP addresses isna leetit. See the [[Special:BlockList|block leet]] fer the leet o bans n blocks oan the nou.",
-       "unblocklogentry": "unblockit $1",
+       "unblocklogentry": "onblockit $1",
        "block-log-flags-anononly": "anonymos uisers yinlie",
-       "block-log-flags-nocreate": "accoont-makkin blockit",
+       "block-log-flags-nocreate": "account creaution disablt",
        "block-log-flags-noautoblock": "autæblock disabled",
        "block-log-flags-noemail": "wab-mail disabled",
        "block-log-flags-nousertalk": "canna eedit yer ain tauk page",
        "block-log-flags-angry-autoblock": "enhanced autæblock enabled",
        "block-log-flags-hiddenname": "uisername skaukt",
-       "range_block_disabled": "The administrator abeility tae mak range blocks is disabled.",
+       "range_block_disabled": "The admeenistrater abeelitie tae creaut range blocks is disablt.",
        "ipb_expiry_invalid": "Expirie time is onvalit.",
        "ipb_expiry_temp": "Skaukt uisername blocks maun be permanent.",
        "ipb_hide_invalid": "Onable tae suppress this accoont; it haes mair than {{PLURAL:$1|yin eedit|$1 eedits}}.",
        "locknoconfirm": "Ye didna tick the confirmation kist.",
        "lockdbsuccesssub": "Database lock fine",
        "unlockdbsuccesssub": "Database lowsed",
-       "lockdbsuccesstext": "The database haes been lockit. <br />Mynd an tak the lock aff efter yer maintenance is feinisht.",
+       "lockdbsuccesstext": "The database haes been lockit. <br />Mynd an [[Special:UnlockDB|tak the lock aff]] efter yer maintenance is compleate.",
        "unlockdbsuccesstext": "The database haes bin lowsed.",
        "lockfilenotwritable": "The database lock file isna writable.\nTae lock or lowse the database, this needs tae be writable bi the wab server.",
-       "databasenotlocked": "The database isna lockit.",
+       "databasenotlocked": "The database is no lockit.",
        "lockedbyandtime": "(bi {{GENDER:$1|$1}} oan $2 at $3)",
        "move-page": "Muiv $1",
        "move-page-legend": "Muiv page",
        "newtitle": "Til new teitle",
        "move-watch": "Watch soorce page n tairget page",
        "movepagebtn": "Muiv page",
-       "pagemovedsub": "Flittin succeedit",
+       "pagemovedsub": "Muiv succeedit",
        "movepage-moved": "<strong>\"$1\" has been muived til \"$2\"</strong>",
        "movepage-moved-redirect": "Ae reguidal haes been cræftit.",
        "movepage-moved-noredirect": "The cræftin o ae reguidal haes been suppressed.",
-       "articleexists": "A page o that name aareadies exists, or the name ye'v waled isna guid. Please wale anither name.",
+       "articleexists": "Ae page o that name awreadie exeests, or the name that ye'v chosen is no valit. Please chuise anither name.",
        "cantmove-titleprotected": "Ye canna muiv ae page til this location cause the new title haes been protected fae cræftin",
        "movetalk": "Muiv associated tauk page",
        "move-subpages": "Muiv subpages (up til $1)",
        "movepage-page-unmoved": "The page $1 coudna be muived til $2.",
        "movepage-max-pages": "The mmucklest o $1 {{PLURAL:$1|page|pages}} haes been muived n naw mair will be muived autæmateeclie.",
        "movelogpage": "Muiv log",
-       "movelogpagetext": "A leet o pages that's flitted is ablo.",
+       "movelogpagetext": "Ae leet o aw page muives is ablo.",
        "movesubpagetext": "This page haes $1 {{PLURAL:$1|subpage|subpages}} shawn ablo.",
        "movenosubpage": "This page haes naw subpages.",
-       "movereason": "Raeson:",
+       "movereason": "Raison:",
        "revertmove": "revert",
        "delete_and_move": "Delyte n muiv",
        "delete_and_move_text": "==Delytion caad fer==\n\nThe destination airticle \"[[:$1]]\" aareadies exists. Div ye want tae delyte it fer tae mak wey fer the muiv?",
        "allmessagesname": "Name",
        "allmessagesdefault": "Defaut message tex",
        "allmessagescurrent": "Message tex the nou",
-       "allmessagestext": "This is ae leet o system messages available in the MediaWiki namespace.\nPlease veesit [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation] n [//translatewiki.net translatewiki.net] gif ye wish tae contreebute til the generic MediaWiki localisation.",
-       "allmessagesnotsupportedDB": "'''{{ns:special}}:AllMessages''' nae supportit acause '''$wgUseDatabaseMessages''' is aff.",
+       "allmessagestext": "This is ae leet o seestem messages available in the MediaWiki namespace.\nPlease veesit [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Localisation] n [//translatewiki.net translatewiki.net] gif ye wish tae contreebute tae the generic MediaWiki localisation.",
+       "allmessagesnotsupportedDB": "This page canna be uised cause <strong>$wgUseDatabaseMessages</strong> haes been disablt.",
        "allmessages-filter": "Filter b custymization state:",
        "allmessages-filter-unmodified": "Onmodified",
        "allmessages-filter-all": "Aw",
        "allmessages-language": "Leid:",
        "allmessages-filter-submit": "Gang",
        "allmessages-filter-translate": "Owerset",
-       "thumbnail-more": "Eik",
+       "thumbnail-more": "Mak Muckler",
        "filemissing": "File missin",
        "thumbnail_error": "Mistak makin thummnail: $1",
        "thumbnail_error_remote": "Mistak message fae $1:\n$2",
        "tooltip-pt-anonuserpage": "The uiser page fer the IP address that ye'r eeditin aes",
        "tooltip-pt-mytalk": "Yer tauk page",
        "tooltip-pt-anontalk": "Discussion aneat eedits fae this IP address",
-       "tooltip-pt-preferences": "Ma preferences",
+       "tooltip-pt-preferences": "Ma preferances",
        "tooltip-pt-watchlist": "Ae leet o pages ye'r moniterin fer chynges",
        "tooltip-pt-mycontris": "Leet o yer contreebutions",
-       "tooltip-pt-login": "It's a guid idea tae log i, but ye dinna hae tae.",
+       "tooltip-pt-login": "It's ae guid idea tae log in, but ye dinna hae tae.",
        "tooltip-pt-logout": "Log oot",
        "tooltip-ca-talk": "Discussion aneat the content page",
        "tooltip-ca-edit": "Ye can eedit this page. Please uise the luikower button afore hainin",
        "tooltip-ca-undelete": "Restore the eedits dun oan this page afore it wis delytit",
        "tooltip-ca-move": "Muiv this page",
        "tooltip-ca-watch": "Eik this page til yer watchleet",
-       "tooltip-ca-unwatch": "Remove this page frum yer watchleet",
+       "tooltip-ca-unwatch": "Remuiv this page fae yer watchleet",
        "tooltip-search": "Rake {{SITENAME}}",
        "tooltip-search-go": "Gang til ae page wi this exact name gif exeests",
        "tooltip-search-fulltext": "Rake the pages fer this tex",
        "tooltip-n-mainpage": "Gang til the Main Page",
        "tooltip-n-mainpage-description": "Gang til the Main Page",
        "tooltip-n-portal": "Aneat the project, whit ye can dae, whaur tae fynd things",
-       "tooltip-n-currentevents": "Fin' background speirins oan current events",
-       "tooltip-n-recentchanges": "The leet o recent chynges in the wiki",
+       "tooltip-n-currentevents": "Fynd backgroond speirins oan the nou events",
+       "tooltip-n-recentchanges": "Ae leet o recynt chynges in the wiki",
        "tooltip-n-randompage": "Laid ae random page",
        "tooltip-n-help": "The steid tae fynd oot",
-       "tooltip-t-whatlinkshere": "List o' a' wiki pages that link 'ere",
+       "tooltip-t-whatlinkshere": "Ae leet o aw wiki pages that airt here",
        "tooltip-t-recentchangeslinked": "Recynt chynges in pages linkt fae this page",
        "tooltip-feed-rss": "RSS feed fer this page",
        "tooltip-feed-atom": "Atom feed fer this page",
        "tooltip-t-contributions": "See ae leet o this uiser's contreebutions",
        "tooltip-t-emailuser": "Send ae wab-mail til this uiser",
        "tooltip-t-upload": "Uplaid files",
-       "tooltip-t-specialpages": "Leet o byordinar pages",
-       "tooltip-t-print": "Printable version o' this page",
+       "tooltip-t-specialpages": "Ae leet o aw byordinar pages",
+       "tooltip-t-print": "Prentable version o this page",
        "tooltip-t-permalink": "Permanent link til this reveesion o the page",
-       "tooltip-ca-nstab-main": "Leuk at content page",
+       "tooltip-ca-nstab-main": "Leuk at the content page",
        "tooltip-ca-nstab-user": "See the uiser page",
        "tooltip-ca-nstab-media": "See the media page",
        "tooltip-ca-nstab-special": "This is ae byordinair page, ye canna eedit the page itsel",
        "tooltip-ca-nstab-template": "See the template",
        "tooltip-ca-nstab-help": "See the heelp page",
        "tooltip-ca-nstab-category": "See the categerie page",
-       "tooltip-minoredit": "Mairk this as a smaa edit",
+       "tooltip-minoredit": "Maurk this aes ae smaa eedit",
        "tooltip-save": "Hain yer chynges",
        "tooltip-preview": "Luikower yer chynges, please uise this afore hainin!",
        "tooltip-diff": "Shaw the chynges that ye makit til the tex.",
        "pageinfo-category-pages": "Nummer o pages",
        "pageinfo-category-subcats": "Nummer o subcategeries",
        "pageinfo-category-files": "Nummer o files",
-       "markaspatrolleddiff": "Merk as patrolled",
-       "markaspatrolledtext": "Merk this airticle as patrolled",
-       "markedaspatrolled": "Merkit as patrolled",
+       "markaspatrolleddiff": "Maurk aes patrolled",
+       "markaspatrolledtext": "Maurk this page aes patrolled",
+       "markedaspatrolled": "Maurkit aes patrolled",
        "markedaspatrolledtext": "The selected reveesion o [[:$1]] haes been maurked aes patrolled.",
        "rcpatroldisabled": "Recynt chynges patrol disabled",
        "rcpatroldisabledtext": "The Recynt Chynges Patrol featur is disabled the nou.",
        "imagemaxsize": "Eemage size leemit:<br /><em>(fer file descreeption pages)</em>",
        "thumbsize": "Thummnail size:",
        "file-info-size": "$1 × $2 pixels, file size: $3, MIME type: $4",
-       "file-nohires": "Na higher resolution available.",
-       "svg-long-desc": "SVG file, nominally $1 × $2 pixels, file size: $3",
+       "file-nohires": "Nae heier resolution available.",
+       "svg-long-desc": "SVG file, nominallie $1 × $2 pixels, file size: $3",
        "svg-long-desc-animated": "Animated SVG file, nominallie $1 × $2 pixels, file size: $3",
        "svg-long-error": "Onvalit SVG file: $1",
        "show-big-image": "Oreeginal file",
        "file-info-png-repeat": "pleyed $1 {{PLURAL:$1|time|times}}",
        "file-no-thumb-animation": "<strong>Mynd: Due til techneecal limitations, thummnails o this file will na be animated.</strong>",
        "file-no-thumb-animation-gif": "<strong>Mynd: Due til techneecal limitations, thummnails o hei resolution GIF eemages sic aes this will na be animated.</strong>",
-       "newimages": "Gallery o new files",
+       "newimages": "Gallerie o new files",
        "imagelisttext": "Ablo is a leet o $1 {{PLURAL:$1|eemage|eemages}} sortit $2.",
        "newimages-summary": "This byordinair page shaws the last uplaidit files.",
        "newimages-label": "Filename (or ae pairt o it):",
        "exif-imagedescription": "Eemage title",
        "exif-software": "Saffware uised",
        "exif-artist": "Writer",
-       "exif-copyright": "Copyricht hauder",
+       "exif-copyright": "Copiericht hauder",
        "exif-flashpixversion": "Supportit Flashpix version",
        "exif-colorspace": "Colour space",
        "exif-componentsconfiguration": "Meanin o ilka component",
        "exif-urgency-high": "Hei ($1)",
        "exif-urgency-other": "Uiser-defined prioritie ($1)",
        "watchlistall2": "aw",
-       "namespacesall": "aa",
+       "namespacesall": "aw",
        "monthsall": "aw",
        "confirmemail": "Confirm wab-mail address",
-       "confirmemail_noemail": "Ye dinna hae a valid email address set in yer [[Special:Preferences|uiser preferences]].",
+       "confirmemail_noemail": "Ye dinna hae ae valid email address set in yer [[Special:Preferences|uiser preferances]].",
        "confirmemail_text": "This wiki needs ye tae validate yer wab-mail address\nafore uisin wab-mail featurs. Acteevate the button ablo tae send a confirmation\nmail til yer address. The mail will incluide ae link containin ae code; laid the\n link in yer brouser tae confirm that yer wab-mail address is guid.",
        "confirmemail_pending": "Ae confirmation code haes awreadie been wab-mailed til ye;\ngif ye recantlie cræftit yer accoont, ye micht wish tae wait ae few minutes fer it tae arrive afore speirin fer ae new code.",
        "confirmemail_send": "Mail ae confirmation code",
        "confirmemail_invalid": "Onvalid confirmation code.\nThe code micht hae expired.",
        "confirmemail_needlogin": "Please $1 fer tae confirm yer wab-mail address.",
        "confirmemail_success": "Yer wab-mail address haes been confirmed. Ye can nou [[Special:UserLogin|login]]  n enjoy the wiki.",
-       "confirmemail_loggedin": "Yer e-mail address haes noo been confirmed.",
+       "confirmemail_loggedin": "Yer e-mail address haes nou been confirmed.",
        "confirmemail_subject": "{{SITENAME}} wab-mail address confirmation",
        "confirmemail_body": "Somebodie, maist likely ye, fae IP address $1,\nhaes registered aen accoont \"$2\" wi this wab-mail address oan {{SITENAME}}.\n\nTae confirm that this accoont reallie is yers n acteevate wab-mail featurs oan {{SITENAME}}, apen this link in yer brouser:\n\n$3\n\nGif ye div *naw* register the accoont, follae this link\ntae cancel the wab-mail address confirmation:\n\n$5\n\nThis confirmation code will expire oan $4.",
        "confirmemail_body_changed": "Somebodie, proabablie ye, from IP address $1,\nhaes chynged the wab-mail address o the accoont \"$2\" til this address oan {{SITENAME}}.\n\nTae confirm that this accoont reallie dis belang til ye n reacteevate\nwab-mail featurs oan {{SITENAME}}, apen this link in yer brouser:\n\n$3\n\nGif the account dis *na* belang til ye, follae this link\ntae cancel the wab-mail address confirmation:\n\n$5\n\nThis confirmation code will die oan $4.",
        "table_pager_limit": "Shaw $1 eetems per page",
        "table_pager_limit_label": "Eetems per page:",
        "table_pager_limit_submit": "Gang",
-       "table_pager_empty": "Nae results",
+       "table_pager_empty": "Nae ootcomes",
        "autosumm-blank": "Blanked the page",
        "autosumm-replace": "Replacin page wi '$1'",
        "autoredircomment": "Reguidin til [[$1]]",
        "specialpages-group-media": "Media reports n uplaids",
        "specialpages-group-users": "Uisers n richts",
        "specialpages-group-highuse": "Hei uiss pages",
-       "specialpages-group-pages": "leet o pages",
+       "specialpages-group-pages": "Leets o pages",
        "specialpages-group-pagetools": "Page tuils",
        "specialpages-group-wiki": "Data n tuils",
        "specialpages-group-redirects": "Reguidin byordinair pages",
index b96e7e2..bf7e661 100644 (file)
@@ -33,7 +33,7 @@
        "tog-shownumberswatching": "Prikaži broj korisnika koji prate",
        "tog-oldsig": "Postojeći potpis:",
        "tog-fancysig": "Smatraj potpis kao wikitekst (bez automatskog linka)",
-       "tog-uselivepreview": "Koristite pretpregled uživo (potreban JavaScript) (eksperimentalno)",
+       "tog-uselivepreview": "Koristi pretpregled uživo (eksperimentalno)",
        "tog-forceeditsummary": "Opomeni me pri unosu praznog sažetka",
        "tog-watchlisthideown": "Sakrij moje izmjene sa spiska praćenih članaka",
        "tog-watchlisthidebots": "Sakrij izmjene botova sa spiska praćenih članaka",
@@ -46,6 +46,7 @@
        "tog-showhiddencats": "Prikaži skrivene kategorije",
        "tog-norollbackdiff": "Nakon povrata zanemari prikaz razlika",
        "tog-useeditwarning": "Upozori me kad napuštam stranicu za uređivanje bez snimanja izmjena",
+       "tog-prefershttps": "Uvijek koristi sigurnu vezu kod prijave",
        "underline-always": "Uvijek",
        "underline-never": "Nikad",
        "underline-default": "prema skinu ili postavkama preglednika",
        "newwindow": "(otvara se u novom prozoru)",
        "cancel": "Odustani - Одустани",
        "moredotdotdot": "Još...",
-       "morenotlisted": "Više nije prikazano...",
+       "morenotlisted": "Ovaj spisak nije kompletan.",
        "mypage": "Moja stranica",
        "mytalk": "Moj razgovor / Мој разговор",
        "anontalk": "Razgovor za ovu IP adresu",
        "permalink": "Trajni link",
        "print": "Štampa",
        "view": "Vidi",
+       "view-foreign": "Vidi na $1",
        "edit": "Uredi / Уреди",
+       "edit-local": "Uredi lokalni opis",
        "create": "Napravi",
+       "create-local": "Dodaj lokalni opis",
        "editthispage": "Uredite ovu stranicu",
        "create-this-page": "Stvori ovu stranicu",
        "delete": "Obrisati - Обрисати",
        "jumptonavigation": "navigacija",
        "jumptosearch": "pretraga",
        "view-pool-error": "Žao nam je, serveri su trenutno preopterećeni.\nPreviše korisnika pokušava da pregleda ovu stranicu.\nMolimo pričekajte trenutak prije nego što ponovno pokušate pristupiti ovoj stranici.\n\n$1",
+       "generic-pool-error": "Žao nam je, serveri su trenutno preopterećeni.\nPreviše korisnika pokušava da pregleda ovu stranicu.\nMolimo pričekajte trenutak prije nego što ponovno pokušate pristupiti ovoj stranici.",
        "pool-timeout": "Zaustavi čekanje za zaključavanje",
        "pool-queuefull": "Red na pool je prenapunjen",
        "pool-errorunknown": "nepoznata greška",
        "versionrequiredtext": "Potrebna je verzija $1 MediaWikija da bi se koristila ova stranica. Pogledaj [[Special:Version|verziju]].",
        "ok": "da",
        "retrievedfrom": "Dobavljeno iz \"$1\"",
-       "youhavenewmessages": "Imate / Имате $1 ($2).",
+       "youhavenewmessages": "Imate $1 ($2).",
        "youhavenewmessagesfromusers": "Imate $1 od {{PLURAL:$3|drugog korisnika|$3 korisnika|$3 korisnika}} ($2).",
        "youhavenewmessagesmanyusers": "Imate $1 od mnogo korisnika ($2).",
-       "newmessageslinkplural": "{{PLURAL:$1|novu poruku|$1 nove poruke|$1 novih poruka}}",
-       "newmessagesdifflinkplural": "{{PLURAL:$1|posljednje uređivanje|$ posljednja uređivanja|$ posljednjih uređivanja}}",
+       "newmessageslinkplural": "{{PLURAL:$1|novu poruku|999=nove poruke}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|posljednju izmenu|999=posljednje izmjene}}",
        "youhavenewmessagesmulti": "Imate nove poruke na $1",
        "editsection": "uredi",
        "editold": "uredi",
        "nospecialpagetext": "<strong>Zatražili ste nevaljanu posebnu stranicu.</strong>\n\nLista valjanih posebnih stranica se može naći na [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Greška - Грешка",
        "databaseerror": "Greška u bazi podataka",
+       "databaseerror-text": "Došlo je do greške u upitu baze podataka. Možda je u pitanju \nsoftverska pogreška.",
+       "databaseerror-textcl": "Došlo je do greške u upitu baze podataka.",
+       "databaseerror-query": "Upit: $1",
+       "databaseerror-function": "Funkcija: $1",
+       "databaseerror-error": "Greška: $1",
        "laggedslavemode": "'''Upozorenje''': Stranica ne mora sadržavati posljednja ažuriranja.",
        "readonly": "Baza podataka je zaključana",
        "enterlockreason": "Unesite razlog za zaključavanje, uključujući procjenu vremena otključavanja",
        "cannotdelete": "Ne može se obrisati stranica ili datoteka \"$1\".\nMoguće je da ju je neko drugi već obrisao.",
        "cannotdelete-title": "Brisanje stranice \"$1\" nije moguće",
        "delete-hook-aborted": "Brisanje prekinuto softverskim priključkom (hook).\nNema obrazloženja ili poruke o grešci.",
+       "no-null-revision": "Nije se mogla stvoriti nova ništavna revizija za stranicu \"$1\"",
        "badtitle": "Loš naslov",
        "badtitletext": "Zatražena stranica je bila nevaljana, prazna ili neispravno povezana s među-jezičkim ili inter-wiki naslovom.\nMože sadržavati jedno ili više slova koja se ne mogu koristiti u naslovima.",
        "perfcached": "Sledeći podaci su keširani i mogu biti zastareli. Keš sadrži najviše {{PLURAL:$1|jedan rezultat|$1 rezultata|$1 rezultata}}.",
        "invalidtitle-knownnamespace": "Neispravan naslov s imenskim prostorom „$2“ i tekstom „$3“",
        "invalidtitle-unknownnamespace": "Neispravan naslov s imenskim prostorom br. $1 i tekstom „$2“",
        "exception-nologin": "Niste prijavljeni",
-       "exception-nologin-text": "Ova stranica ili aktivnost zahtijeva da budete prijavljeni na ovom wikiju.",
+       "exception-nologin-text": "Molimo [[Special:Userlogin|prijavite se]] da biste pristupili ovoj stranici ili radnji.",
+       "exception-nologin-text-manual": "Molimo $1 da biste pristupili ovoj stranici ili radnji.",
        "virus-badscanner": "Loša konfiguracija: nepoznati anti-virus program: ''$1''",
        "virus-scanfailed": "skeniranje nije uspjelo (code $1)",
        "virus-unknownscanner": "nepoznati anti-virus program:",
-       "logouttext": "'''Sad ste odjavljeni.'''\n\nMožete nastaviti da koristite {{SITENAME}} anonimno, ili se ponovo <span class='plainlinks'>[$1 prijaviti]</span> kao isti ili kao drugi korisnik.\nObratite pažnju da neke stranice mogu nastaviti da se prikazuju kao da ste još uvijek prijavljeni, dok ne očistite keš svog preglednika.",
+       "logouttext": "'''Sad ste odjavljeni.'''\n\nObratite pažnju da neke stranice mogu nastaviti da se prikazuju kao da ste još uvijek prijavljeni, dok ne očistite keš svog preglednika.",
        "welcomeuser": "Dobro došli, $1!",
        "welcomecreation-msg": "Vaš korisnički račun je napravljen.\nNe zaboravite izmijeniti vlastite [[Special:Preferences|{{SITENAME}} postavke]].",
        "yourname": "Vaše korisničko ime / Ваше корисничко име",
        "gotaccount": "Imate račun? '''$1'''.",
        "gotaccountlink": "Prijavite se / Пријавите се",
        "userlogin-resetlink": "Zaboravili ste detalje vaše prijave?",
-       "userlogin-resetpassword-link": "Resetirajte svoju lozinku/zaporku",
+       "userlogin-resetpassword-link": "Zaboravili ste lozinku/zaporku?",
+       "userlogin-helplink2": "Pomoć pri prijavljivanju",
+       "userlogin-loggedin": "Već ste prijavljeni kao {{GENDER:$1|$1}}.\nKoristite donji obrazac da biste se prijavili kao drugi korisnik.",
+       "userlogin-createanother": "Stvori još jedan račun",
        "createacct-emailrequired": "E-mail adresa",
        "createacct-emailoptional": "E-mail adresa (opcionalno)",
        "createacct-email-ph": "Unesite svoju E-mail adresu",
        "createacct-another-email-ph": "Postavite E-mail adresu",
-       "createaccountmail": "Koristite privremenu slučajno stvorenu lozinku i pošaljite na dolje specificiranu e-mail adresu",
+       "createaccountmail": "Koristite privremenu, slučajno stvorenu šifru/lozinku i pošaljite na navedenu adrеsu e-pošte",
        "createacct-realname": "Stvarno ime (opcionalno)",
        "createaccountreason": "Razlog:",
        "createacct-reason": "Razlog",
        "passwordtooshort": "Lozinka mora imati najmanje {{PLURAL:$1|1 znak|$1 znakova}}.",
        "password-name-match": "Vaša lozinka mora biti različita od Vašeg korisničkog imena.",
        "password-login-forbidden": "Korištenje ovog korisničkog imena i lozinke je zabranjeo.",
-       "mailmypassword": "Pošalji mi novu lozinku putem E-maila",
+       "mailmypassword": "Resetiraj lozinku/zaporku",
        "passwordremindertitle": "Nova privremena lozinka za {{SITENAME}}",
        "passwordremindertext": "Neko (vjerovatno Vi, sa IP adrese $1) je zahtjevao da vam pošaljemo novu šifru za {{SITENAME}}  ($4). Privremena šifra za korisnika \"$2\" je napravljena i glasi \"$3\". Ako ste to željeli, sad treba da se prijavite i promjenite šifru.\nVaša privremena šifra će isteči za {{PLURAL:$5|$5 dan|$5 dana}}.\n\nAko je neko drugi napravio ovaj zahtjev ili ako ste se sjetili vaše šifre i ne želite više da je promjenite, možete da ignorišete ovu poruku i da nastavite koristeći vašu staru šifru.",
        "noemail": "Ne postoji adresa e-maila za korisnika \"$1\".",
        "noemailcreate": "Morate da navedete valjanu e-mail adresu",
        "passwordsent": "Nova šifra je poslata na e-mail adresu korisnika \"$1\".\nMolimo Vas da se prijavite pošto je primite.",
        "blocked-mailpassword": "Da bi se spriječila nedozvoljena akcija, Vašoj IP adresi je onemogućeno uređivanje stranica kao i mogućnost zahtijevanje nove šifre.",
-       "eauthentsent": "Na navedenu adresu poslan je e-mail s potvrdom.\nPrije nego što pošaljemo daljnje poruke, molimo vas da otvorite e-mail i slijedite u njemu sadržana uputstva da potvrdite da ste upravo vi kreirali korisnički račun.",
+       "eauthentsent": "Na navedenu adresu poslana je e-poruka s potvrdom.\nPrije nego što pošaljemo daljnje poruke, pratite uputstva s e-pošte da biste potvrdili da je račun zaista Vaš.",
        "throttled-mailpassword": "Već Vam je poslan e-mail za promjenu šifre u {{PLURAL:$1|zadnjih sat vremena|zadnja $1 sata|zadnjih $1 sati}}.\nDa bi se spriječila zloupotreba, može se poslati samo jedan e-mail za promjenu šifre {{PLURAL:$1|svakih sat vremena|svaka $1 sata|svakih $1 sati}}.",
        "mailerror": "Greška pri slanju e-pošte: $1",
        "acct_creation_throttle_hit": "Posjetioci na ovoj wiki koji koriste Vašu IP adresu su već napravili {{PLURAL:$1|$1 račun|$1 računa}} u zadnjih nekoliko dana, što je najveći broj dopuštenih napravljenih računa za ovaj period.\nKao rezultat, posjetioci koji koriste ovu IP adresu ne mogu trenutno praviti više računa.",
-       "emailauthenticated": "Vaša e-mail adresa je autentificirana na $2 u $3.",
-       "emailnotauthenticated": "Vaša e-mail adresa još nije autentificirana.\nNijedan e-mail neće biti poslan za bilo koju uslugu od slijedećih.",
+       "emailauthenticated": "Vaša adresa e-pošte potvrđena je $2 u $3.",
+       "emailnotauthenticated": "Vaša adresa e-pošte još nije potvrđena.\nNijedna e-poruka neće biti poslana za bilo koju uslugu od sljedećih.",
        "noemailprefs": "Unesite e-mail adresu za osposobljavanje slijedećih usluga.",
        "emailconfirmlink": "Potvrdite Vašu e-mail adresu",
        "invalidemailaddress": "Ova e-mail adresa ne može biti prihvaćena jer je u neodgovarajućem obliku.\nMolimo vas da unesete ispravnu adresu ili ostavite prazno polje.",
        "cannotchangeemail": "Na ovom wikiju ne možete promeniti e-mail adresu računa.",
        "emaildisabled": "Ova web-stranica ne može da šalje e-poruke.",
        "accountcreated": "Korisnički nalog kreiran / Кориснички налог креиран",
-       "accountcreatedtext": "Korisnički račun za $1 je kreiran. Кориснички налог за $1 је креиран.",
+       "accountcreatedtext": "Korisnički račun za [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|razgovor]]) je napravljen.",
        "createaccount-title": "Pravljenje korisničkog računa za {{SITENAME}}",
        "createaccount-text": "Neko je napravio korisnički račun za vašu e-mail adresu na {{SITENAME}} ($4) sa imenom \"$2\", i sa šifrom \"$3\".\nTrebali biste se prijaviti i promjeniti šifru.\n\nMožete ignorisati ovu poruku, ako je korisnički račun napravljen greškom.",
-       "login-throttled": "Previše puta ste se pokušali prijaviti.\nMolimo Vas da sačekate prije nego što pokušate ponovo.",
+       "login-throttled": "Previše puta ste se pokušali prijaviti.\nMolimo Vas da sačekate $1 prije nego što pokušate ponovo.",
        "login-abort-generic": "Vaša prijava nije bila uspješna – Prekinuto",
        "loginlanguagelabel": "Jezik: $1",
        "suspicious-userlogout": "Vaš zahtjev za odjavu je odbijen jer je poslan preko pokvarenog preglednika ili keširanog proksija.",
+       "createacct-another-realname-tip": "Pravo ime nije obavezno.\nAko izaberete da date ime, biće korišteno za pripisivanje za vaš rad.",
        "pt-login": "Prijavi me / Пријави ме",
        "pt-login-button": "Prijavi me / Пријави ме",
        "pt-createaccount": "Napraviti novi nalog / Направити нови налог",
        "user-mail-no-addy": "Pokušaj slanja e-maila bez e-mail adrese.",
        "user-mail-no-body": "Pokušano slanje e-maila s praznim ili nerazumno kratkim sadržajem.",
        "changepassword": "Promijeni lozinku",
-       "resetpass_announce": "Prijavili ste se sa privremenim kodom koji ste dobili na e-mail.\nDa biste završili prijavu, morate unijeti novu šifru ovdje:",
+       "resetpass_announce": "Da biste završili prijavu, podesite novu lozinku ovde.",
        "resetpass_header": "Obnovi lozinku za račun",
        "oldpassword": "Stara šifra:",
        "newpassword": "Nova šifra:",
        "retypenew": "Ukucajte ponovo novu šifru:",
        "resetpass_submit": "Odredi lozinku i prijavi se",
        "changepassword-success": "Vaša šifra je uspiješno promjenjena! Prijava u toku...",
+       "changepassword-throttled": "Previše puta ste se pokušali prijaviti.\nMolimo Vas da sačekate $1 prije nego što pokušate ponovo.",
        "resetpass_forbidden": "Šifre ne mogu biti promjenjene",
        "resetpass-no-info": "Morate biti prijavljeni da bi ste pristupili ovoj stranici direktno.",
        "resetpass-submit-loggedin": "Promijeni lozinku",
        "resetpass-submit-cancel": "Odustani",
        "resetpass-wrong-oldpass": "Privremena ili trenutna lozinka nije valjana.\nMožda ste već uspješno promijenili Vašu lozinku ili ste tražili novu privremenu lozinku.",
+       "resetpass-recycled": "Molimo resetirajte vašu lozinku/zaporku u nešto drugo od vaše trenutne lozinke/zaporke.",
+       "resetpass-temp-emailed": "Prijavili ste se sa privremenim kodom iz e-pošte.\nDa biste završili prijavljivanje morate postaviti novu lozinku ovde:",
        "resetpass-temp-password": "Privremena lozinka:",
        "resetpass-abort-generic": "Promjenu lozinke/zaporke je prekinula ekstenzija.",
+       "resetpass-expired": "Vaša lozinka je istekla. Postavite novu lozinku da biste se prijavili.",
+       "resetpass-expired-soft": "Vaša lozinka je istekla i morate postaviti novu. Postavite novu lozinku ili kliknite „{{int:resetpass-submit-cancel}}“ da je postavite kasnije.",
+       "resetpass-validity-soft": "Vaša loznika nije valjana: $1\n\nMolimo da sada odaberete novu lozinku ili kliknete \"{{int:resetpass-submit-cancel}}\" kako bi je resetirali kasnije.",
        "passwordreset": "Ponovno postavi lozinku",
        "passwordreset-text-one": "Dovršite ovaj obrazac kako biste resetirali svoju lozinku/zaporku.",
        "passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja kako bi ste resetirali svoju lozinku/zaporku.}}",
        "changeemail-password": "Tvoja šifra/lozinka za {{SITENAME}}:",
        "changeemail-submit": "Promijeni e-mail",
        "changeemail-cancel": "Odustani",
+       "changeemail-throttled": "Previše puta ste se pokušali prijaviti.\nMolimo Vas da sačekate $1 prije nego što pokušate ponovo.",
+       "resettokens": "Resetirajte tokene",
+       "resettokens-text": "Možete resetirati tokene koji dozvoljavaju pristup određenim privatnim podacima povezanim sa vašim računom ovdje.\n\nTo možete učiniti ako ste ih slučajno podijelili sa nekim ili ako je vaš račun kompromitiran.",
+       "resettokens-no-tokens": "Nema tokena za resetiranje.",
+       "resettokens-legend": "Resetiranje tokena",
+       "resettokens-tokens": "Tokeni:",
+       "resettokens-token-label": "$1 (trenutna vrijednost: $2)",
+       "resettokens-watchlist-token": "Token za web feed (Atom/RSS) [[Special:Watchlist|promjena za vašem spisku praćenja]]",
+       "resettokens-done": "Tokeni resetirani.",
+       "resettokens-resetbutton": "Resetiraj odabrane tokene",
        "bold_sample": "Podebljan tekst",
        "bold_tip": "Podebljan tekst",
        "italic_sample": "Kurzivan tekst",
        "confirmedittext": "Morate potvrditi Vašu e-mail adresu prije nego počnete mijenjati stranice.\nMolimo da postavite i verifikujete Vašu e-mail adresu putem Vaših [[Special:Preferences|korisničkih opcija]].",
        "nosuchsectiontitle": "Ne mogu pronaći sekciju",
        "nosuchsectiontext": "Pokušali ste uređivati sekciju koja ne postoji.\nMožda je premještena ili obrisana dok ste pregledavali stranicu.",
-       "loginreqtitle": "Potrebno je da se [[{{ns:-1}}:Userlogin|prijavite]]",
+       "loginreqtitle": "Potrebno je prijavljivanje",
        "loginreqlink": "prijavi se",
        "loginreqpagetext": "Morate $1 da bi ste vidjeli druge stranice.",
        "accmailtitle": "Šifra je poslana!\n\n\nШифра је послата!",
-       "accmailtext": "Šifra za nalog '$1' je poslana na adresu $2.\n\n\nШифра за налог '$1' је послата на адресу $2.",
+       "accmailtext": "Nasumično odabrana šifra za [[User talk:$1|$1]] je poslata na adresu $2.\n\nŠifra/lozinka za ovaj novi račun može biti promijenjena na stranici ''[[Special:ChangePassword|izmjene šifre]]'' nakon prijave.",
        "newarticle": "(Novi)",
        "newarticletext": "Preko linka ste došli na stranicu koja još uvijek ne postoji.\n* Ako želite stvoriti stranicu, počnite tipkati u okviru dolje (v. [$1 stranicu za pomoć] za više informacija).\n* Ukoliko ste došli greškom, pritisnike dugme '''Nazad''' ('''back''') na vašem pregledniku.",
        "anontalkpagetext": "----''Ovo je stranica za razgovor za anonimnog korisnika koji još nije napravio račun ili ga ne koristi.\nZbog toga moramo da koristimo brojčanu IP adresu kako bismo identifikovali njega ili nju.\nTakvu adresu može dijeliti više korisnika.\nAko ste anonimni korisnik i mislite da su vam upućene nebitne primjedbe, molimo Vas da [[Special:UserLogin/signup|napravite račun]] ili se [[Special:UserLogin|prijavite]] da biste izbjegli buduću zabunu sa ostalim anonimnim korisnicima.''",
        "copyrightwarning": "Molimo da uzmete u obzir kako se smatra da su svi doprinosi u {{SITENAME}} izdani pod $2 (v. $1 za detalje).\nUkoliko ne želite da vaše pisanje bude nemilosrdno uređivano i redistribuirano po tuđoj volji, onda ga nemojte ovdje objavljivati.<br />\nTakođer obećavate kako ste ga napisali sami ili kopirali iz izvora u javnoj domeni ili sličnog slobodnog izvora.\n'''NEMOJTE SLATI RAD ZAŠTIĆEN AUTORSKIM PRAVIMA BEZ DOZVOLE!'''",
        "copyrightwarning2": "Zapamtite da svaki doprinos na stranici {{SITENAME}} može biti izmijenjen, promijenjen ili uklonjen od strane ostalih korisnika. Ako ne želite da ovo desi sa Vašim tekstom, onda ga nemojte slati ovdje.<br />\nTakođer nam garantujete da ste ovo Vi napisali, ili da ste ga kopirali iz javne domene ili sličnog slobodnog izvora informacija (pogledajte $1 za više detalja).\n'''NE ŠALJITE DJELA ZAŠTIĆENA AUTORSKIM PRAVOM BEZ DOZVOLE!'''",
        "longpageerror": "'''Greška: tekst koji ste uneli je veličine {{PLURAL:$1|jedan kilobajt|$1 kilobajta|$1 kilobajta}}, što je veće od {{PLURAL:$2|dozvoljenog jednog kilobajta|dozvoljena $2 kilobajta|dozvoljenih $2 kilobajta}}.'''\nStranica ne može biti sačuvana.",
-       "readonlywarning": "<font color=\"#FF0000\">'''PAŽNJA:'''</font> Baza je upravo zaključana zbog održavanja,\ntako da nećete moći da snimite svoje izmene upravo sada. Možda želite da iskopirate i nalepite\ntekst u tekst editor i snimite ga za kasnije.\n<br>\n<font color=\"#FF0000\">'''ПАЖЊА:'''</font> База је управо закључана због одржавања,\nтако да нећете моћи да снимите своје измене управо сада. Можда желите да ископирате и налепите\nтекст у текст едитор и снимите га за касније.",
+       "readonlywarning": "<strong>Upozorenje: baza podataka je zaključana radi održavanja, tako da trenutno nećete moći da sačuvate izmene.</strong>\nMožda biste želeli sačuvati tekst za kasnije u nekoj tekstualnoj datoteci.\n\nAdministrator koji je zaključao bazu dao je sledeće objašnjenje: $1",
        "protectedpagewarning": "'''PAŽNJA: Ova stranica je zaključana tako da samo korisnici sa administratorskim privilegijama mogu da je mijenjaju.'''\nPosljednja stavka u registru je prikazana ispod kao referenca:",
        "semiprotectedpagewarning": "'''Pažnja:''' Ova stranica je zaključana tako da je samo registrovani korisnici mogu uređivati.\nPosljednja stavka registra je prikazana ispod kao referenca:",
        "cascadeprotectedwarning": "'''Upozorenje:''' Ova stranica je zaključana tako da je samo administratori mogu mijenjati, jer je ona uključena u {{PLURAL:$1|ovu, lančanu povezanu, zaštićenu stranicu|sljedeće, lančano povezane, zaštićene stranice}}:",
        "content-failed-to-parse": "Ne mogu da raščlanim sadržaj tipa $2 za model $1: $3",
        "invalid-content-data": "Neispravni podaci sadržaja",
        "content-not-allowed-here": "Sadržaj modela „$1“ nije dozvoljen na stranici [[$2]]",
-       "editwarning-warning": "Napuštanje ove stranice može dovesti do gubitka svih promjena koje ste načinili.\nAko ste prijavljeni, možete isključiti ovo upozorenje u sekciji \"Uređivanje\" vaših postavki.",
+       "editwarning-warning": "Ako napustite ovu stranicu, izgubićete sve izmene koje ste napravili.\nAko ste prijavljeni, možete onemogućiti ovo upozorenje u svojim podešavanjima, u odeljku \"{{int:prefs-editing}}\".",
+       "editpage-notsupportedcontentformat-title": "Format sadržaja nije podržan",
+       "editpage-notsupportedcontentformat-text": "Format sadržaja $1 nije podržan modelom sadržaja $2.",
        "content-model-wikitext": "wikitekst",
        "content-model-text": "obični tekst",
        "content-model-javascript": "JavaScript",
        "undo-success": "Izmjena se može vratiti.\nMolimo da provjerite usporedbu ispod da budete sigurni da to želite učiniti, a zatim spremite promjene da bi ste završili vraćanje izmjene.",
        "undo-failure": "Izmjene se ne mogu vratiti zbog konflikta sa izmjenama u međuvremenu.",
        "undo-norev": "Izmjena se ne može vratiti jer ne postoji ranija ili je obrisana.",
+       "undo-nochange": "Ovo je uređivanje izgleda već bilo poništeno.",
        "undo-summary": "Poništena izmjena $1 [[Special:Contributions/$2|korisnika $2]] ([[User talk:$2|razgovor]])",
        "undo-summary-username-hidden": "Poništi izmjenu $1 od skrivenog korisnika",
        "cantcreateaccounttitle": "Nije moguće napraviti korisnički račun",
        "cantcreateaccount-text": "Pravljenje korisničkog računa sa ove IP adrese ('''$1''') je blokirano od strane [[User:$3|$3]].\n\nRazlog koji je naveo $3 je ''$2''",
+       "cantcreateaccount-range-text": "Stvaranje računa od IP adresa iz pojasa'''$1''', koji uključuje vašu IP adresu ('''$4'''), je blokirao/la [[User:$3|$3]].\n\nRazlog koji je dao/la $3 je ''$2''",
        "viewpagelogs": "Pogledaj protokole ove stranice",
        "nohistory": "Ne postoji historija izmjena za ovu stranicu.",
        "currentrev": "Trenutna revizija",
        "revdelete-no-file": "Navedena datoteka ne postoji.",
        "revdelete-show-file-confirm": "Da li ste sigurni da želite pogledati obrisanu reviziju datoteke \"<nowiki>$1</nowiki>\" od $2 u $3?",
        "revdelete-show-file-submit": "Da",
+       "revdelete-selected-text": "{{PLURAL:$1|Izabrana izmjena|Izabrane izmjene}} [[:$2]]:",
+       "revdelete-selected-file": "{{PLURAL:$1|Izabrana verzija datoteke|Izabrane verzije datoteke}} [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Označena stavka registra|Označene stavke registra}}:",
+       "revdelete-text-text": "Izbrisane revizije će se još pojavljivati u historiji stranice, ali dijelovi njihovog sadržaja neće biti javno dostupni.",
+       "revdelete-text-file": "Izbrisane verzije datoteke će se još pojavljivati u historiji datoteke, ali dijelovi sadržaja neće biti dostupni javnosti.",
+       "logdelete-text": "Izbrisane stavke u registru događaja će se još pojavljivati u registrima, ali dijelovi njihovog sadržaja neće biti javno dostupni.",
+       "revdelete-text-others": "Drugi administratori {{SITENAME}} će još uvijek moći pristupiti skrivenom sadržaju i mogu ga ponovno odbrisati kroz isti interfejs, ukoliko nisu postavljena dodatna ograničenja.",
        "revdelete-confirm": "Molimo potvrdite da namjeravate ovo učiniti, da razumijete posljedice i da to činite u skladu s [[{{MediaWiki:Policy-url}}|pravilima]].",
-       "revdelete-suppress-text": "Ograničenja bi trebala biti korištena '''samo''' u sljedećim slučajevima:\n* Osjetljive korisničke informacije\n*: ''kućne adrese, brojevi telefona, brojevi bankovnih kartica itd.''",
+       "revdelete-suppress-text": "Sakrivanje izmjena bi se trebalo koristiti <strong>samo</strong> za sljedeće slučajeve:\n* potencijalno klevetničke informacije\n* neprimjerene lične informacije\n*: <em>kućne adrese i telefonski brojevi, matični i lični identifikacijski brojevi itd.</em>",
        "revdelete-legend": "Postavi ograničenja vidljivosti",
-       "revdelete-hide-text": "Sakrij tekst revizije",
+       "revdelete-hide-text": "Tekst revizije",
        "revdelete-hide-image": "Sakrij sadržaj datoteke",
        "revdelete-hide-name": "Sakrij akciju i cilj",
-       "revdelete-hide-comment": "Sakrij izmjene komentara",
+       "revdelete-hide-comment": "Opis izmjene",
        "revdelete-hide-user": "Sakrij korisničko ime / IP adresu korisnika koji je uređivao stranicu",
        "revdelete-hide-restricted": "Ograniči podatke za administratore kao i za druge korisnike",
        "revdelete-radio-same": "(ne mijenjaj)",
-       "revdelete-radio-set": "Da",
-       "revdelete-radio-unset": "Ne",
+       "revdelete-radio-set": "Sakriveno",
+       "revdelete-radio-unset": "Vidljivo",
        "revdelete-suppress": "Sakrij podatke od administratora kao i od drugih",
        "revdelete-unsuppress": "Ukloni ograničenja na vraćenim revizijama",
        "revdelete-log": "Razlog:",
        "showhideselectedversions": "Pokaži/sakrij odabrane verzije",
        "editundo": "ukloni ovu izmjenu - уклони ову измену",
        "diff-empty": "(nema razlike)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Nije prikazana jedna međuverzija|Nisu prikazane $1 međuverzije|Nije prikazano $1 međuverzija}} istog korisnika)",
+       "diff-multi-otherusers": "({{PLURAL:$1|Nije prikazana jedna međuverzija|Nisu prikazane $1 međuverzije|Nije prikazano $1 međuverzija}} {{PLURAL:$2|jednog|$2}} korisnika)",
        "diff-multi-manyusers": "({{PLURAL:$1|Nije prikazana jedna međuverzija|Nisu prikazane $1 međuverzije|Nije prikazano $1 međuverzija}}) od strane {{PLURAL:$2|korisnika|korisnika}}",
        "difference-missing-revision": "Ne mogu da pronađem {{PLURAL:$2|jednu izmenu|$2 izmene|$2 izmena}} od ove razlike ($1).\n\nOvo se obično dešava kada pratite zastarjelu vezu do stranice koja je obrisana.\nViše informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].",
        "searchresults": "Rezultati pretrage",
        "textmatches": "Tekst stranice odgovara",
        "notextmatches": "Tekst stranice ne odgovara",
        "prevn": "prethodna {{PLURAL:$1|$1}}",
-       "nextn": "sljedećih - следећих $1",
+       "nextn": "{{PLURAL:$1|slijedeći $1|slijedećih $1}}",
        "prevn-title": "{{PLURAL:$1|Prethodni $1 rezultat|Prethodna $1 rezultata|Prethodnih $1 rezultata}}",
        "nextn-title": "{{PLURAL:$1|Slijedeći $1 rezultat|Slijedeća $1 rezultata|Slijedećih $1 rezultata}}",
        "shown-title": "Pokaži $1 {{PLURAL:$1|rezultat|rezultata}} po stranici",
        "viewprevnext": "Pogledaj ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''Postoji stranica pod nazivom \"[[:$1]]\" na ovoj wiki'''",
-       "searchmenu-new": "'''Napravi stranicu \"[[:$1|$1]]\" na ovoj wiki!'''",
+       "searchmenu-new": "<strong>Napravi stranicu \"[[:$1]]\" na ovoj wiki!</strong> {{PLURAL:$2|0=|Pogledajte također straniu pronađenu vašom pretragom.|Pogledajte također i vaše rezultate pretrage.}}",
        "searchprofile-articles": "Stranice sadržaja",
        "searchprofile-project": "Stranice pomoći i projekta",
        "searchprofile-images": "Multimedija",
        "search-result-score": "Relevantnost: $1%",
        "search-redirect": "(preusmjeravanje $1)",
        "search-section": "(sekcija $1)",
+       "search-file-match": "(odgovara sadržaju datoteke)",
        "search-suggest": "Da li ste mislili: $1",
        "search-interwiki-caption": "Srodni projekti",
-       "search-interwiki-default": "$1 rezultati:",
+       "search-interwiki-default": "Rezultati od $1:",
        "search-interwiki-more": "(više)",
        "search-relatedarticle": "Povezano",
        "searcheverything-enable": "Pretraga u svim imenskim prostorima",
        "searchrelated": "povezano",
        "searchall": "sve",
        "showingresults": "Dole {{PLURAL:$1|je prikazan '''1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}} počev od '''$2'''.",
+       "showingresultsinrange": "Ispod {{PLURAL:$1|je prikazan <strong>1</strong> rezultat|su prikazana <strong>$1</strong> rezultata|je prikazano <strong>$1</strong> rezultata}}, u rasponu od <strong>$2</strong> do <strong>$3</strong>.",
        "showingresultsnum": "Dolje {{PLURAL:$3|je prikazan '''1''' rezultat|su prikazana '''$3''' rezultata|je prikazano '''$3''' rezultata}} počev od #'''$2'''.",
        "showingresultsheader": "{{PLURAL:$5|Rezultat '''$1''' od '''$3'''|Rezultati '''$1 - $2''' od '''$3'''}} za '''$4'''",
        "search-nonefound": "Nisu pronađeni rezultati koji odgovaraju upitu.",
        "preferences": "Postavke / Подешавања",
        "mypreferences": "Moje postavke / Моја подешавања",
        "prefs-edits": "Broj izmjena:",
+       "prefsnologintext2": "Molimo $1 kako bi promijenili vaše postavke.",
        "prefs-skin": "Izgled (skin)",
        "skin-preview": "Pretpregled",
        "datedefault": "Bez preferenci",
        "prefs-email": "E-mail opcije",
        "prefs-rendering": "Izgled",
        "saveprefs": "Snimi postavke",
-       "restoreprefs": "Vrati sve pretpostavljene postavke",
+       "restoreprefs": "Vrati sve na podrazumijevano (u svim odjeljcima)",
        "prefs-editing": "Uređivanje",
        "rows": "Redova:",
        "columns": "Kolona:",
        "recentchangesdays-max": "(najviše $1 {{PLURAL:$1|dan|dana}})",
        "recentchangescount": "Broj uređivanja za prikaz po pretpostavkama:",
        "prefs-help-recentchangescount": "Ovo uključuje nedavne izmjene, historije stranice i registre.",
+       "prefs-help-watchlist-token2": "Ovo je tajni ključ prema sažetku Vašeg popisa praćenja. Svaki suradnik kojem je poznat, moći će čitati Vaš popis praćenih stranica. Ne dijelite ga ni s kim. [[Special:ResetTokens|Kliknite ovdje ako ga želite ponovo postaviti]].",
        "savedprefs": "Vaša postavke su snimljene.",
        "timezonelegend": "Vremenska zona / Временска зона",
        "localtime": "Lokalno vrijeme:",
        "prefs-help-signature": "Komentari na stranicama za razgovor trebaju biti potpisani sa \"<nowiki>~~~~</nowiki>\" koje će biti pretvoreno u vaš potpis i vrijeme.",
        "badsig": "Loš sirovi potpis.\nProvjerite HTML tagove.",
        "badsiglength": "Vaš potpis je predug.\nMora biti manji od $1 {{PLURAL:$1|znaka|znaka|znakova}}.",
-       "yourgender": "Spol:",
-       "gender-unknown": "neodređen",
-       "gender-male": "Muški",
-       "gender-female": "Ženski",
-       "prefs-help-gender": "Opcionalno: koristi se za ispravke gramatičkog roda u porukama softvera.\nOva informacija će biti javna.",
+       "yourgender": "Kako želite da se predstavite?",
+       "gender-unknown": "Preferiram da se ne odredim",
+       "gender-male": "On uređuje wiki stranice",
+       "gender-female": "Ona uređuje wiki stranice",
+       "prefs-help-gender": "Postavljanje ove preferencije nije obavezno.\nSoftver koristi ovu vrijednost kako bi vam se obratio i spomenuo vas drugima koristeći vaš gramatički rod.\nOva informacija će biti javna.",
        "email": "E-mail",
        "prefs-help-realname": "Pravo ime nije obavezno.\nAko izaberete da date ime, biće korišteno za pripisivanje Vašeg rada.",
-       "prefs-help-email": "* E-mail (nije obavezno): omogućuje drugima da Vas kontaktiraju na korisničkoj strani ili strani za razgovor bez javnog pokazivanja Vaše elektronske adrese. Ako zaboravite šifru možemo Vam na ovu adresu poslati novu, privremenu. <br/>\n\n* Е-пошта (није обавезно): Омогућује другима да Вас контактирају на корисничкој страни или страни за разговор без јавног показивања Ваше електронске адресе. Ако заборавите шифру, можемо Вам на ову адресу послати нову, привремену.",
+       "prefs-help-email": "E-mail adresa je opcionalna, ali je potrebna jer omogućava da Vam se pošalje nova šifra u slučaju da je izgubite ili zaboravite.",
        "prefs-help-email-others": "Također možete da odaberete da vas drugi kontaktiraju putem vaše korisničke stranice ili stranice za razgovor bez otkrivanja vašeg identiteta.",
        "prefs-help-email-required": "Neophodno je navesti e-mail adresu.",
        "prefs-info": "Osnovne informacije",
        "prefs-signature": "Potpis",
        "prefs-dateformat": "Format datuma",
        "prefs-timeoffset": "Vremenska razlika",
-       "prefs-advancedediting": "Općenito",
+       "prefs-advancedediting": "Opće opcije",
        "prefs-editor": "Uređivač",
        "prefs-preview": "Pretpregled",
        "prefs-advancedrc": "Napredne opcije",
        "prefs-displayrc": "Postavke displeja",
        "prefs-displaywatchlist": "Postavke prikaza",
        "prefs-diffs": "Razlike",
+       "prefs-help-prefershttps": "Ova mogućnost će stupiti na snagu kod vaše sljedeće prijave.",
+       "prefs-tabs-navigation-hint": "Savjet: Možete koristi lijevu i desnu navigacijsku tipku kako biste se kretali između tabova u popisu tabova.",
        "email-address-validity-valid": "E-mail adresa izgleda valjano",
        "email-address-validity-invalid": "Unesite valjanu e-mail adresu",
        "userrights": "Postavke korisničkih prava",
        "userrights-no-interwiki": "Nemate dopuštenja da uređujete korisnička prava na drugim wikijima.",
        "userrights-nodatabase": "Baza podataka $1 ne postoji ili nije lokalna baza.",
        "userrights-nologin": "Morate se [[Special:UserLogin|prijaviti]] sa administratorskim računom da bi ste mogli postavljati korisnička prava.",
-       "userrights-notallowed": "Vaš račun Vam ne daje dozvolu da postavljate i uklanjate korisnička prava.",
+       "userrights-notallowed": "Vaš račun nema privilegije da dodaje ili oduzima prava korisnika.",
        "userrights-changeable-col": "Grupe koje možete mijenjati",
        "userrights-unchangeable-col": "Grupe koje ne možete mijenjati",
-       "userrights-conflict": "Sukob u korisničkim pravima! Molimo pošaljite Vaše promjene ponovno.",
+       "userrights-conflict": "Sukob u izmjeni korisničkih prava! Molimo da razmotrite i potvrdite Vaše promjene.",
        "userrights-removed-self": "Uspješno ste uklonili vlastite prava. Zbog toga više niste u stanju pristupiti ovoj stranici.",
        "group": "Grupa:",
        "group-user": "Korisnici",
        "right-hideuser": "Blokiranje korisničkog imena, i njegovo sakrivanje od javnosti",
        "right-ipblock-exempt": "Zaobilaženje IP blokada, autoblokada i blokada IP grupe",
        "right-proxyunbannable": "Zaobilaženje automatskih blokada proxy-ja",
-       "right-unblockself": "Deblokiranje samog sebe",
+       "right-unblockself": "Deblokiraj samog sebe",
        "right-protect": "Promjena nivoa zaštite i uređivanje kaskadno zaštićenih stranica",
        "right-editprotected": "Uređivanje stranice zaštićenih kao \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Uređivanje stranica zaštićenih kao  \"{{int:protect-level-autoconfirmed}}\"",
        "action-block": "blokiranje uređivanja ovog korisnika",
        "action-protect": "promijeniti nivo zaštite ove stranice",
        "action-rollback": "brzo vraćanje izmjena posljednjeg korisnika koji je mijenjao određenu stranicu",
-       "action-import": "uvoženje ove stranice s drugog wikija",
-       "action-importupload": "uvoženje ove stranice postavljanjem datoteke",
+       "action-import": "uvoženje stranica s drugog wikija",
+       "action-importupload": "uvoženje stranica postavljanjem datoteke",
        "action-patrol": "označavanje tuđih izmjena patroliranim",
        "action-autopatrol": "označavanje vlastitih izmjena kao patroliranih",
        "action-unwatchedpages": "pregled spiska nenadgledanih strana",
        "action-viewmyprivateinfo": "pogledajte svoje privatne informacije",
        "action-editmyprivateinfo": "uredite svoje privatne informacije",
        "nchanges": "$1 {{PLURAL:$1|izmjena|izmjene|izmjena}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|izmjena od Vaše posljedne posjete}}",
+       "enhancedrc-history": "historija",
        "recentchanges": "Nedavne izmjene / Скорашње измене",
        "recentchanges-legend": "Postavke za Nedavne promjene",
        "recentchanges-summary": "Na ovoj stranici možete pratiti nedavne izmjene.",
        "recentchanges-label-minor": "Ovo je manja izmjena",
        "recentchanges-label-bot": "Ovu je izmjenu učinio bot",
        "recentchanges-label-unpatrolled": "Ova izmjena još nije patrolirana",
-       "recentchanges-legend-newpage": "$1 - nova stranica",
-       "rcnotefrom": "Ispod {{PLURAL:$1|je '''$1''' izmjena|su '''$1''' zadnje izmjene|su '''$1''' zadnjih izmjena}} u {{PLURAL:$2|posljednjem '''$2''' danu|posljednja '''$2''' dana|posljednjih '''$2''' dana}}, od $4, $5.",
+       "recentchanges-label-plusminus": "Veličina stranice promijenila se za ovoliko bajtova",
+       "recentchanges-legend-heading": "'''Legenda:'''",
+       "recentchanges-legend-newpage": "(također pogledajte [[Special:NewPages|spisak novih stranica]])",
+       "rcnotefrom": "Ispod su izmjene od <strong>$2</strong> (do <strong>$1</strong> prikazano).",
        "rclistfrom": "Prikaži nove poruke od / Прикажи нове поруке од $3 $2",
        "rcshowhideminor": "$1 male izmjene / мале измене",
+       "rcshowhideminor-show": "Pokaži",
+       "rcshowhideminor-hide": "Sakrij",
        "rcshowhidebots": "$1 botove / ботове",
-       "rcshowhideliu": "$1 prijavljene korisnike",
+       "rcshowhidebots-show": "Pokaži",
+       "rcshowhidebots-hide": "Sakrij",
+       "rcshowhideliu": "$1 registrovanih korisnika",
+       "rcshowhideliu-show": "Pokaži",
+       "rcshowhideliu-hide": "Sakrij",
        "rcshowhideanons": "$1 anonimne / анонимне",
+       "rcshowhideanons-show": "Pokaži",
+       "rcshowhideanons-hide": "Sakrij",
        "rcshowhidepatr": "$1 označene / означене",
+       "rcshowhidepatr-show": "Pokaži",
+       "rcshowhidepatr-hide": "Sakrij",
        "rcshowhidemine": "$1 vlastite izmjene / сопствене измене",
-       "rclinks": "<br>\nPrikaži zadnjih / Прикажи последњих $1 promjena / промена<br>\nu zadnjih / у последњних $2 dana / дана<br />\n<br>\n$3\n<br>",
+       "rcshowhidemine-show": "Pokaži",
+       "rcshowhidemine-hide": "Sakrij",
+       "rclinks": "Prikaži najskorijih $1 izmjena u posljednjih $2 dana<br />$3",
        "diff": "razl-разл",
        "hist": "his-пов",
        "hide": "Sakrij",
        "rc_categories_any": "Sve",
        "rc-change-size-new": "$1 {{PLURAL:$1|bajt|bajta|bajtova}} posle izmene",
        "newsectionsummary": "/* $1 */ nova sekcija",
-       "rc-enhanced-expand": "Pokaži detalje (neophodan JavaScript)",
+       "rc-enhanced-expand": "Pokaži detalje",
        "rc-enhanced-hide": "Sakrij detalje",
        "rc-old-title": "prvobitno kreirano kao \"$1\"",
        "recentchangeslinked": "Srodne izmjene / Сродне измене",
        "fileexists-shared-forbidden": "Datoteka sa ovim imenom već postoji u zajedničkoj ostavi; molimo Vas da se vratite i pošaljete ovu datoteku pod novim imenom. [[File:$1|thumb|center|$1]]",
        "file-exists-duplicate": "Ova datoteka je dvojnik {{PLURAL:$1|slijedećoj datoteci|slijedećim datotekama}}:",
        "file-deleted-duplicate": "Datoteka koje je identična ovoj datoteci ([[:$1]]) je ranije bila obrisana. Trebate provjeriti historiju brisanja te datoteke prije nego što nastavite sa njenim ponovnim postavljanjem.",
+       "file-deleted-duplicate-notitle": "Datoteka identična ovoj datoteci je prethodno bila izbrisana, a naslov je bio sakriven.\nPrije nego što nastavite ponovno postavljanje trebali biste pitati nekoga sa mogućnošću pregleda sakrivenih podataka o datotekama.",
        "uploadwarning": "Upozorenje pri slanju",
        "uploadwarning-text": "Molimo izmijeniti opis datoteke ispod i pokušajte kasnije.",
        "savefile": "Snimi datoteku",
        "uploaddisabledtext": "Postavljanje datoteka je onemogućeno.",
        "php-uploaddisabledtext": "Postavljanje datoteka preko PHP je onemogućeno. \nMolimo provjerite postavku za postavljanje datoteka.",
        "uploadscripted": "Ova datoteka sadrži HTML ili skriptni kod koji može izazvati grešku kod internet preglednika.",
+       "uploadscriptednamespace": "Ova SVG datoteka sadrži pogrešan imenski prostor „$1“",
+       "uploadinvalidxml": "XML u postavljenoj datoteci nije mogao biti parsiran.",
        "uploadvirus": "Fajl sadrži virus!  Detalji:  $1",
        "uploadjava": "Datoteka je ZIP datoteka koja sadrži Java .class datoteku.\nPostavljanje Java datoteka nije dopušteno, jer one mogu prouzrokovati zaobilaženje sigurnosnih ograničenja.",
        "upload-source": "Izvorna datoteka",
        "license-nopreview": "(Pregled nije dostupan)",
        "upload_source_url": "(valjani, javno dostupni URL)",
        "upload_source_file": "(datoteka na Vašem kompjuteru)",
-       "listfiles-summary": "Ova posebna stranica pokazuje sve postavljene datoteke.\nKad je filtriran po korisniku, popis prikazuje samo one datoteke čiju je posljednju verziju postavio taj korisnik.",
+       "listfiles-summary": "Ova posebna stranica prikazuje sve postavljene datoteke.",
        "listfiles_search_for": "Traži ime medija:",
        "imgfile": "datoteka",
        "listfiles": "Spisak slika",
        "listfiles_size": "Veličina",
        "listfiles_description": "Opis",
        "listfiles_count": "Verzije",
+       "listfiles-show-all": "Uključi starije verzije slika",
+       "listfiles-latestversion": "Trenutna verzija",
+       "listfiles-latestversion-yes": "Da",
+       "listfiles-latestversion-no": "Ne",
        "file-anchor-link": "Datoteka",
        "filehist": "Historija datoteke",
        "filehist-help": "Kliknite na datum/vrijeme da vidite kako je tada izgledala datoteka/fajl.",
        "download": "učitaj",
        "unwatchedpages": "Nepraćene stranice",
        "listredirects": "Spisak preusmjerenja",
+       "listduplicatedfiles": "Spisak datoteka sa duplikatima",
+       "listduplicatedfiles-summary": "Ovo je popis datoteka gdje su najskorije verzije datoteke duplikati najskorijih verzija neke druge datoteke. Samo se lokalne datoteke uzimaju u obzir.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]] ima [[$3|{{PLURAL:$2|duplikat|$2 duplikata}}]].",
        "unusedtemplates": "Nekorišteni šabloni",
        "unusedtemplatestext": "Ova stranica prikazuje sve stranice u imenskom prostoru {{ns:template}} koji se ne koriste.\nPrije brisanja provjerite da li druge stranice vode na te šablone.",
        "unusedtemplateswlh": "ostali linkovi",
        "randompage": "Slučajna stranica / Случајна страница",
        "randompage-nopages": "Nema stranica u {{PLURAL:$2|slijedećem imenskom prostoru|slijedećim imenskim prostorima}}: \"$1\".",
+       "randomincategory": "Slučajna stranica u kategoriji",
+       "randomincategory-invalidcategory": "\"$1\" nije valjano ime kategorije.",
+       "randomincategory-nopages": "Nema stranica u kategoriji [[:Category:$1|$1]].",
+       "randomincategory-selectcategory": "Dobij slučajnu stranicu iz kategorije: $1 $2.",
+       "randomincategory-selectcategory-submit": "Idi",
        "randomredirect": "Slučajno preusmjerenje / Случајно преусмјерење",
        "randomredirect-nopages": "Nema preusmjerenja u imenskom prostoru \"$1\".",
        "statistics": "Statistike / Статистике",
        "pageswithprop-text": "Ova stranica navodi stranice sa specifičnim svojstvom stranice.",
        "pageswithprop-prop": "Naziv svojstva:",
        "pageswithprop-submit": "Idi",
+       "pageswithprop-prophidden-long": "vrijednost svojstva dugog teksta sakrivena ($1)",
+       "pageswithprop-prophidden-binary": "vrijednost binarnog svojstva sakrivena ($1)",
        "doubleredirects": "Dvostruka preusmjerenja",
        "doubleredirectstext": "Ova stranica prikazuje stranice koje preusmjeravaju na druga preusmjerenja.\nSvaki red sadrži veze na prvo i drugo preusmjerenje, kao i na prvu liniju teksta drugog preusmjerenja, što obično daje \"pravi\" ciljni članak, na koji bi prvo preusmjerenje i trebalo da pokazuje.\n<del>Precrtane</del> stavke su riješene.",
-       "double-redirect-fixed-move": "[[$1]] je premješten, sada je preusmjerenje na [[$2]]",
-       "double-redirect-fixed-maintenance": "Popravak dvostrukih datoteka od [[$1]] do [[$2]].",
+       "double-redirect-fixed-move": "[[$1]] je bio premješten.\nAutomatski je ažuriran i sada preusmjeruje na [[$2]]",
+       "double-redirect-fixed-maintenance": "Automatski popravak dvostrukih datoteka od [[$1]] do [[$2]] u poslu održavanja.",
        "double-redirect-fixer": "Popravljač preusmjerenja",
        "brokenredirects": "Pokvarena preusmjerenja",
        "brokenredirectstext": "Slijedeća preusmjerenja vode na nepostojeće stranice:",
        "ninterwikis": "$1 {{PLURAL:$1|međuviki|međuvikija|međuvikija}}",
        "nlinks": "$1 {{PLURAL:$1|link|linka|linkova}}",
        "nmembers": "$1 {{PLURAL:$1|član|članova}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|član|članova}}",
        "nrevisions": "$1 {{PLURAL:$1|revizija|revizije|revizija}}",
        "nviews": "$1 {{PLURAL:$1|pregled|pregleda}}",
        "nimagelinks": "Koristi se na $1 {{PLURAL:$1|stranici|stranice|stranica}}",
        "mostrevisions": "Stranice sa najviše izmjena",
        "prefixindex": "Sve stranice sa prefiksom",
        "prefixindex-namespace": "Sve stranice s predmetkom (imenski prostor $1)",
+       "prefixindex-strip": "Sakrij prefiks u spisku",
        "shortpages": "Kratke stranice",
        "longpages": "Duge stranice / Дуге странице",
        "deadendpages": "Članci bez internih linkova / Чланци без интерних линкова",
        "deadendpagestext": "Slijedeće stranice nisu povezane s drugim stranicama na {{SITENAME}}.",
        "protectedpages": "Zaštićene stranice / Заштићене странице",
        "protectedpages-indef": "Samo neograničena zaštićenja",
+       "protectedpages-summary": "Ovaj stranica navodi popis postojećih stranica koje su trenutno zaštićene. Za popis stranica zaštićenih od stvaranja, vidi [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Samo prenosive zaštite",
+       "protectedpages-noredirect": "Sakrij preusmjerenja",
        "protectedpagesempty": "Trenutno nijedna stranica nije zaštićena s ovim parametrima.",
+       "protectedpages-timestamp": "Vremenska oznaka",
+       "protectedpages-page": "Stranica",
+       "protectedpages-expiry": "Istječe",
+       "protectedpages-performer": "Zaštitio/la",
+       "protectedpages-params": "Nivo zaštite",
+       "protectedpages-reason": "Razlog",
+       "protectedpages-unknown-timestamp": "Nepoznato",
+       "protectedpages-unknown-performer": "Nepoznati korisnik",
        "protectedtitles": "Zaštićeni naslovi",
        "protectedtitlesempty": "Nema naslova zaštićenih članaka sa ovim parametrima.",
        "listusers": "Spisak korisnika",
index e14700a..fa7f4a9 100644 (file)
        "jumptonavigation": "navigacija",
        "jumptosearch": "iskanje",
        "view-pool-error": "Žal so strežniki trenutno preobremenjeni.\nPreveč uporabnikov skuša obiskati to stran.\nProsimo za potrpežljivost, obiščite nas spet kmalu.\n\n$1",
+       "generic-pool-error": "Žal so strežniki trenutno preobremenjeni.\nPreveč uporabnikov si skuša ogledati ta vir.\nProsimo za potrpežljivost, obiščite nas spet kmalu.",
        "pool-timeout": "Časovno obdobje čakanja na zaklep",
        "pool-queuefull": "Čakalna vrsta zaloge je polna",
        "pool-errorunknown": "Neznana napaka",
index d8e1b69..5a26e27 100644 (file)
        "jumptonavigation": "навигацију",
        "jumptosearch": "претрагу",
        "view-pool-error": "Нажалост, сервери су тренутно преоптерећени.\nПревише корисника покушава да прегледа ову страницу.\nСачекајте неко време пре него што поново покушате да јој приступите.\n\n$1",
+       "generic-pool-error": "Нажалост, сервери су тренутно преоптерећени.\nПревише корисника покушава да види овај ресурс.\nСачекајте неко време пре него што поново покушате да му приступите.",
        "pool-timeout": "Истек времена чека на закључавање",
        "pool-queuefull": "Ред је пун захтева",
        "pool-errorunknown": "Непозната грешка",
        "changeemail-password": "Ваша лозинка:",
        "changeemail-submit": "Промени",
        "changeemail-cancel": "Откажи",
+       "resettokens-tokens": "Токени:",
        "resettokens-token-label": "$1 (тренутна вредност: $2)",
        "bold_sample": "Подебљан текст",
        "bold_tip": "Подебљан текст",
        "search-section": "(одељак $1)",
        "search-suggest": "Да ли сте мислили на: $1",
        "search-interwiki-caption": "Братски пројекти",
-       "search-interwiki-default": "$1 резултати:",
+       "search-interwiki-default": "Резултати са $1:",
        "search-interwiki-more": "(више)",
        "search-relatedarticle": "Повезано",
        "searcheverything-enable": "сви именски простори",
        "prefs-advancedwatchlist": "Напредне поставке",
        "prefs-displayrc": "Поставке приказа",
        "prefs-displaywatchlist": "Поставке приказа",
+       "prefs-tokenwatchlist": "Токен",
        "prefs-diffs": "Разлике",
        "prefs-help-prefershttps": "Ова подешавања ће ступити на снагу при следећој пријави.",
        "email-address-validity-valid": "Е-адреса је исправна",
        "action-block": "блокирање даљих измена овог корисника",
        "action-protect": "мењање степена заштите ове странице",
        "action-rollback": "брзо враћање измена последњег корисника који је мењао одређену страницу",
-       "action-import": "Ñ\83воз Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\81 Ð´Ñ\80Ñ\83гог викија",
-       "action-importupload": "Ñ\83воз Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\81лаÑ\9aем датотеке",
+       "action-import": "Ñ\83вожеÑ\9aе Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¸Ð· Ð´Ñ\80Ñ\83гиÑ\85 викија",
+       "action-importupload": "Ñ\83вожеÑ\9aе Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¸Ð· Ð¾Ñ\82пÑ\80емÑ\99ене датотеке",
        "action-patrol": "означавање туђих измена прегледаним",
        "action-autopatrol": "самоозначавање измена прегледаним",
        "action-unwatchedpages": "прегледање списка ненадгледаних страница",
        "recentchanges-label-newpage": "Нова страница",
        "recentchanges-label-minor": "Мања измена",
        "recentchanges-label-bot": "Ову измену је направио бот",
-       "recentchanges-label-unpatrolled": "Ова измена још није прегледана",
-       "recentchanges-label-plusminus": "Промена величине странице (у бајтовима)",
+       "recentchanges-label-unpatrolled": "Ова измена још није патролирана",
+       "recentchanges-label-plusminus": "Промена величине странице у бајтовима",
        "recentchanges-legend-heading": "'''Легенда:'''",
        "recentchanges-legend-newpage": "([[Special:NewPages|списак нових страница]])",
        "rcnotefrom": "Испод су измене од <strong>$2</strong> (до <strong>$1</strong> измена).",
        "listgrouprights-removegroup-self": "уклањање {{PLURAL:$2|групе|група}} са свог налога: $1",
        "listgrouprights-addgroup-self-all": "Додај све групе на сопствени налог",
        "listgrouprights-removegroup-self-all": "Уклони све групе са сопственог налога",
+       "listgrouprights-namespaceprotection-namespace": "Именски простор",
        "trackingcategories-nodesc": "Опис није доступан.",
        "mailnologin": "Нема адресе за слање",
        "mailnologintext": "Морате бити [[Special:UserLogin|пријављени]] и имати исправну е-адресу у [[Special:Preferences|подешавањима]] да бисте слали е-поруке другим корисницима.",
        "markedaspatrollederror": "Не могу да означим као патролирано",
        "markedaspatrollederrortext": "Морате изабрати измену да бисте је означили као прегледану.",
        "markedaspatrollederror-noautopatrol": "Не можете да означите своје измене као патролиране.",
-       "markedaspatrollednotify": "Ова измена на страници „$1“ је означена као прегледана.",
-       "markedaspatrollederrornotify": "Ð\9dиÑ\98е Ñ\83Ñ\81пеÑ\88но Ð¾Ð·Ð½Ð°Ñ\87аваÑ\9aе Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е ÐºÐ°Ð¾ Ð¿Ñ\80егледаном.",
+       "markedaspatrollednotify": "Ова измена на страници „$1“ је означена као патролирана.",
+       "markedaspatrollederrornotify": "Ð\9eзнаÑ\87аваÑ\9aе Ð¾Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¿Ð°Ñ\82Ñ\80олиÑ\80аном Ð½Ð¸Ñ\98е Ñ\83Ñ\81пело.",
        "patrol-log-page": "Дневник патролирања",
        "patrol-log-header": "Ово је дневник патролираних измена.",
        "log-show-hide-patrol": "$1 дневник патролирања",
index 80cf0db..a0e1228 100644 (file)
        "recentchanges-label-newpage": "Nova stranica",
        "recentchanges-label-minor": "Manja izmena",
        "recentchanges-label-bot": "Ovu izmenu je napravio bot",
-       "recentchanges-label-unpatrolled": "Ova izmena još nije pregledana",
-       "recentchanges-label-plusminus": "Promena veličine stranice (u bajtovima)",
+       "recentchanges-label-unpatrolled": "Ova izmena još nije patrolirana",
+       "recentchanges-label-plusminus": "Promena veličine stranice u bajtovima",
        "recentchanges-legend-heading": "'''Legenda:'''",
        "recentchanges-legend-newpage": "([[Special:NewPages|spisak novih stranica]])",
        "rcnotefrom": "Ispod su izmene od <b>$2</b> (do <b>$1</b> izmena).",
        "markedaspatrollederror": "Ne mogu da označim kao patrolirano",
        "markedaspatrollederrortext": "Morate izabrati izmenu da biste je označili kao pregledanu.",
        "markedaspatrollederror-noautopatrol": "Ne možete da označite svoje izmene kao patrolirane.",
-       "markedaspatrollednotify": "Ova izmena na stranici „$1“ je označena kao pregledana.",
-       "markedaspatrollederrornotify": "Nije uspešno označavanje ove stranice kao pregledanom.",
+       "markedaspatrollednotify": "Ova izmena na stranici „$1“ je označena kao patrolirana.",
+       "markedaspatrollederrornotify": "Označavanje ove stranice patroliranom nije uspelo.",
        "patrol-log-page": "Dnevnik patroliranja",
        "patrol-log-header": "Ovo je dnevnik patroliranih izmena.",
        "log-show-hide-patrol": "$1 dnevnik patroliranja",
index 36d115c..b029fa6 100644 (file)
        "jumptonavigation": "navigering",
        "jumptosearch": "sök",
        "view-pool-error": "Tyvärr är servrarna överbelastade för tillfället.\nFör många användare försöker visa denna sida.\nVänta en liten stund och försök igen lite senare.\n\n$1",
+       "generic-pool-error": "Tyvärr är servrarna överbelastade för tillfället.\nFör många användare försöker visa denna resurs.\nVänta en liten stund innan du försöker komma åt resursen igen.",
        "pool-timeout": "Timeout i väntan på låsning",
        "pool-queuefull": "Kön är full",
        "pool-errorunknown": "Okänt fel",
index da76f92..328b25b 100644 (file)
        "templatesused": "该页面使用的{{PLURAL:$1|模板}}:",
        "templatesusedpreview": "本预览使用的{{PLURAL:$1|模板}}:",
        "templatesusedsection": "该段落使用的{{PLURAL:$1|模板}}:",
-       "template-protected": "(保护)",
+       "template-protected": "(保护)",
        "template-semiprotected": "(半保护)",
        "hiddencategories": "该页面属于$1个隐藏分类:",
        "edittools": "<!-- 这里的文字将显示在编辑和上传表格下面。 -->",
        "action-unwatchedpages": "查看未受监视页面的列表",
        "action-mergehistory": "合并本页面的历史",
        "action-userrights": "编辑所有用户的权限",
-       "action-userrights-interwiki": "编辑其它wiki的用户的用户权限",
+       "action-userrights-interwiki": "编辑其他wiki用户的用户权限",
        "action-siteadmin": "锁定或解锁数据库",
        "action-sendemail": "电邮联系其他用户",
        "action-editmywatchlist": "编辑你的监视列表",
        "action-viewmywatchlist": "查看你的监视列表",
        "action-viewmyprivateinfo": "查看您的私人信息",
        "action-editmyprivateinfo": "编辑你的私人信息",
-       "nchanges": "$1更改",
+       "nchanges": "$1更改",
        "enhancedrc-since-last-visit": "{{PLURAL:$1|上次访问后}}$1个",
        "enhancedrc-history": "历史",
        "recentchanges": "最近更改",
index 157ee0b..e6dc4b2 100644 (file)
                        "아라"
                ]
        },
-       "tog-underline": "é\80£çµ\90å\8a åº\95ç·\9aï¼\9a",
+       "tog-underline": "連結底線:",
        "tog-hideminor": "隱藏最近更改中的小修改",
        "tog-hidepatrolled": "隱藏最近更改中巡查過的編輯",
        "tog-newpageshidepatrolled": "隱藏新頁面清單中巡查過的頁面",
        "tog-extendwatchlist": "展開監視列表以顯示所有更改,不只是最近的",
        "tog-usenewrc": "在最近更改和監視列表中整合同一頁的修改",
        "tog-numberheadings": "標題自動編號",
-       "tog-showtoolbar": "顯示編輯工具",
-       "tog-editondblclick": "雙擊編輯頁面",
-       "tog-editsectiononrightclick": "å\85\81許å\8f³æ\93\8aæ¨\99é¡\8c編輯段è\90½",
+       "tog-showtoolbar": "顯示編輯工具",
+       "tog-editondblclick": "啟用滑鼠雙擊編輯頁面",
+       "tog-editsectiononrightclick": "å\95\9fç\94¨æ»\91é¼ å\8f³é\8dµé»\9eé\81¸ç« ç¯\80æ¨\99é¡\8c編輯",
        "tog-watchcreations": "將我建立的頁面和上傳的檔案加入監視列表",
        "tog-watchdefault": "將我更改的頁面和檔案加入監視列表",
        "tog-watchmoves": "將我移動的頁面和檔案加入監視列表",
        "tog-watchdeletion": "將我刪除的頁面和檔案加入監視列表",
-       "tog-minordefault": "預設將所有編輯標記為小修改",
+       "tog-minordefault": "預設標記所有編輯為小修訂",
        "tog-previewontop": "在編輯框上方顯示預覽",
        "tog-previewonfirst": "第一次編輯時顯示預覽",
-       "tog-enotifwatchlistpages": "當我監視列表中的頁面或檔案有變更時,發送電子郵件通知我",
-       "tog-enotifusertalkpages": "我的對話頁有變更時,發送電子郵件通知我",
-       "tog-enotifminoredits": "頁面和檔案的小修改也發電子郵件給我",
+       "tog-enotifwatchlistpages": "ç\95¶æ\88\91ç\9a\84ç\9b£è¦\96å\88\97表中ç\9a\84é \81é\9d¢æ\88\96æª\94æ¡\88æ\9c\89è®\8aæ\9b´æ\99\82ï¼\8cç\99¼é\80\81é\9b»å­\90é\83µä»¶é\80\9aç\9f¥æ\88\91",
+       "tog-enotifusertalkpages": "當我的對話頁面有變更時,發送電子郵件通知我",
+       "tog-enotifminoredits": "當頁面與檔案有小修訂時,發送電子郵件通知我",
        "tog-enotifrevealaddr": "在通知信件中顯示我的電子郵件位址",
        "tog-shownumberswatching": "顯示正在監視的使用者數目",
-       "tog-oldsig": "有簽名:",
-       "tog-fancysig": "將簽名視為圍記文字(Wikitext)(不會自動產生連結)",
+       "tog-oldsig": "有簽名:",
+       "tog-fancysig": "將簽名視為 Wikitext 語言 (不自動產生連結)",
        "tog-uselivepreview": "使用即時預覽(實驗性)",
-       "tog-forceeditsummary": "未輸入編輯摘要時提醒我",
+       "tog-forceeditsummary": "當我輸入空白的編輯摘要時,提示我",
        "tog-watchlisthideown": "監視列表中隱藏我的編輯",
        "tog-watchlisthidebots": "監視列表中隱藏機器人的編輯",
        "tog-watchlisthideminor": "監視列表中隱藏小修改",
        "tog-watchlisthideliu": "監視列表中隱藏已登入使用者的編輯",
        "tog-watchlisthideanons": "監視列表中隱藏匿名使用者的編輯",
        "tog-watchlisthidepatrolled": "監視清單中隱藏已巡查的編輯",
-       "tog-ccmeonemails": "ç\95¶æ\88\91å¯\84é\9b»å­\90é\83µä»¶çµ¦å\85¶ä»\96使ç\94¨è\80\85æ\99\82ï¼\8cä¹\9få¯\84ä¸\80份å\89¯æ\9c¬å\88°æ\88\91ç\9a\84信箱",
+       "tog-ccmeonemails": "ç\99¼é\80\81é\83µä»¶çµ¦ä»\96人æ\99\82ï¼\8cä¹\9fé\80\81ä¸\80份å\89¯æ\9c¬å\88°æ\88\91ç\9a\84é\9b»å­\90é\83µä»¶信箱",
        "tog-diffonly": "比對版本差異時下面不顯示頁面內容",
        "tog-showhiddencats": "顯示隱藏分類",
        "tog-norollbackdiff": "回退後不做差異比對",
-       "tog-useeditwarning": "當離開頁面時編輯仍未儲存,請提醒我",
+       "tog-useeditwarning": "當我未儲存離開編輯頁面時,警告我",
        "tog-prefershttps": "登入時始終使用安全連線",
        "underline-always": "總是使用",
        "underline-never": "從不使用",
-       "underline-default": "外觀或瀏覽器預設",
+       "underline-default": "外觀或瀏覽器預設",
        "editfont-style": "編輯區字型樣式:",
        "editfont-default": "瀏覽器預設",
        "editfont-monospace": "等距字型",
        "thu": "四",
        "fri": "五",
        "sat": "六",
-       "january": "1月",
-       "february": "2月",
-       "march": "3月",
-       "april": "4月",
-       "may_long": "5月",
-       "june": "6月",
-       "july": "7月",
-       "august": "8月",
-       "september": "9月",
-       "october": "10月",
-       "november": "11月",
-       "december": "12月",
+       "january": "月",
+       "february": "月",
+       "march": "月",
+       "april": "月",
+       "may_long": "月",
+       "june": "月",
+       "july": "月",
+       "august": "月",
+       "september": "月",
+       "october": "月",
+       "november": "十一月",
+       "december": "十二月",
        "january-gen": "一月",
        "february-gen": "二月",
        "march-gen": "三月",
        "oct": "10月",
        "nov": "11月",
        "dec": "12月",
-       "january-date": "1月$1日",
-       "february-date": "2月$1日",
-       "march-date": "3月$1日",
-       "april-date": "4月$1日",
-       "may-date": "5月$1日",
-       "june-date": "6月$1日",
-       "july-date": "7月$1日",
-       "august-date": "8月$1日",
-       "september-date": "9月$1日",
-       "october-date": "10月$1日",
-       "november-date": "11月$1日",
-       "december-date": "12月$1日",
+       "january-date": "一月 $1 日",
+       "february-date": "二月 $1 日",
+       "march-date": "三月 $1 日",
+       "april-date": "四月 $1 日",
+       "may-date": "五月 $1 日",
+       "june-date": "六月 $1 日",
+       "july-date": "七月 $1 日",
+       "august-date": "八月 $1 日",
+       "september-date": "九月 $1 日",
+       "october-date": "十月 $1 日",
+       "november-date": "十一月 $1 日",
+       "december-date": "十二月 $1 日",
        "pagecategories": "{{PLURAL:$1|分類}}",
        "category_header": "「$1」分類中的頁面",
        "subcategories": "子分類",
        "moredotdotdot": "更多...",
        "morenotlisted": "此列表並不完整。",
        "mypage": "頁面",
-       "mytalk": "討論",
-       "anontalk": "此IP的對話頁",
+       "mytalk": "對話",
+       "anontalk": "此 IP 位址的對話頁",
        "navigation": "導覽",
        "and": "及",
        "qbfind": "尋找",
        "qbpageoptions": "頁面選項",
        "qbmyoptions": "我的選項",
        "faq": "常見問題解答",
-       "faqpage": "Project:常見問題解答",
+       "faqpage": "Project:常見問題",
        "vector-action-addsection": "加入主題",
        "vector-action-delete": "刪除",
        "vector-action-move": "移動",
        "variants": "變換",
        "navigation-heading": "導航",
        "errorpagetitle": "錯誤",
-       "returnto": "返回$1。",
-       "tagline": "出自{{SITENAME}}",
+       "returnto": "返回至 $1。",
+       "tagline": "出自 {{SITENAME}}",
        "help": "說明",
        "search": "搜尋",
        "searchbutton": "搜尋",
        "permalink": "永久連結",
        "print": "列印",
        "view": "檢視",
-       "view-foreign": "於$1查閱",
+       "view-foreign": "於 $1 查閱",
        "edit": "編輯",
        "edit-local": "編輯本地說明",
        "create": "建立",
        "delete": "刪除",
        "deletethispage": "刪除本頁",
        "undeletethispage": "取消刪除此頁",
-       "undelete_short": "å\8f\8då\88ªé\99¤$1項修訂",
-       "viewdeleted_short": "æ\9f¥ç\9c\8b$1項已刪除的修訂",
+       "undelete_short": "å\8f\96æ¶\88å\88ªé\99¤ $1 項修訂",
+       "viewdeleted_short": "檢è¦\96 $1 項已刪除的修訂",
        "protect": "保護",
        "protect_change": "變更",
        "protectthispage": "保護本頁",
        "talk": "討論",
        "views": "檢視",
        "toolbox": "工具",
-       "userpage": "檢視用戶頁面",
-       "projectpage": "檢視計劃頁面",
+       "userpage": "檢視使用者頁面",
+       "projectpage": "檢視專案頁面",
        "imagepage": "檢視檔案頁面",
        "mediawikipage": "檢視使用者介面訊息",
        "templatepage": "檢視模板頁面",
        "categorypage": "檢視分類頁面",
        "viewtalkpage": "檢視討論頁面",
        "otherlanguages": "其他語言",
-       "redirectedfrom": "(重定向自$1)",
-       "redirectpagesub": "重向頁面",
+       "redirectedfrom": "(自 $1 重新導向)",
+       "redirectpagesub": "重新導向頁面",
        "lastmodifiedat": "此頁面最後修訂於 $1 $2。",
        "viewcount": "本頁面已經被瀏覽$1次。",
        "protectedpage": "受保護頁面",
-       "jumpto": "跳轉到:",
+       "jumpto": "前往:",
        "jumptonavigation": "導覽",
        "jumptosearch": "搜尋",
-       "view-pool-error": "抱歉,太多用戶正嘗試檢視此頁,使伺服器超出負荷。請稍候片刻再嘗試。\n\n$1",
+       "view-pool-error": "抱歉,太多使用者正嘗試檢視此頁面,伺服器超出負荷。\n請稍候片刻再嘗試。\n\n$1",
+       "generic-pool-error": "對不起,伺服器當前載入太大。太多用戶嘗試訪問此頁面。請在重試前稍後片刻。",
        "pool-timeout": "等待鎖定逾時",
        "pool-queuefull": "請求池已滿",
        "pool-errorunknown": "未知錯誤",
        "edithelp": "編輯幫助",
        "mainpage": "首頁",
        "mainpage-description": "首頁",
-       "policy-url": "Project:æ\96¹é\87\9d",
+       "policy-url": "Project:æ\94¿ç­\96",
        "portal": "社群主頁",
        "portal-url": "Project:社群主頁",
        "privacy": "隱私政策",
        "privacypage": "Project:隱私政策",
        "badaccess": "權限錯誤",
        "badaccess-group0": "系統不允許您執行這項操作。",
-       "badaccess-groups": "æ\82¨è«\8bæ±\82ç\9a\84æ\93\8dä½\9cå\8fªæ\9c\89{{PLURAL:$2|é\80\99å\80\8b\80\99äº\9b}}ç\94¨æ\88¶ç¾¤çµ\84ç\9a\84ç\94¨æ\88能使用:$1",
+       "badaccess-groups": "æ\82¨è«\8bæ±\82ç\9a\84æ\93\8dä½\9cå\8fªæ\9c\89{{PLURAL:$2|é\80\99å\80\8b\80\99äº\9b}}群çµ\84ç\9a\84使ç\94¨è\80\85能使用:$1",
        "versionrequired": "需要 MediaWiki $1 版",
        "versionrequiredtext": "需要版本 $1 的 MediaWiki 才能使用此頁面。\n詳情請見[[Special:Version|版本頁]]。",
        "ok": "確定",
        "hidetoc": "隱藏",
        "collapsible-collapse": "摺叠",
        "collapsible-expand": "展開",
-       "thisisdeleted": "檢視或恢復$1?",
+       "thisisdeleted": "檢視或還原 $1 ?",
        "viewdeleted": "檢視 $1?",
        "restorelink": "$1個被刪除的版本",
        "feedlinks": "訂閱:",
        "feed-invalid": "無效的訂閱類型。",
        "feed-unavailable": "聯合訂閱並無提供",
-       "site-rss-feed": "$1的RSS訂閱",
-       "site-atom-feed": "$1的 Atom 訂閱",
-       "page-rss-feed": "「$1」的RSS訂閱",
-       "page-atom-feed": "「$1」的Atom訂閱",
-       "red-link-title": "$1(頁面存在)",
-       "sort-descending": "倒序排列",
-       "sort-ascending": "升序排序",
+       "site-rss-feed": "$1 的 RSS 訂閱",
+       "site-atom-feed": "$1 的 Atom 訂閱",
+       "page-rss-feed": "「$1」的 RSS 訂閱",
+       "page-atom-feed": "「$1」的 Atom 訂閱",
+       "red-link-title": "$1(頁面存在)",
+       "sort-descending": "降冪排序",
+       "sort-ascending": "昇冪排序",
        "nstab-main": "頁面",
        "nstab-user": "使用者頁面",
        "nstab-media": "媒體頁面",
        "nstab-special": "特殊頁面",
-       "nstab-project": "計劃頁面",
+       "nstab-project": "專案頁面",
        "nstab-image": "檔案",
        "nstab-mediawiki": "訊息",
        "nstab-template": "模板",
        "protectedpagetext": "該頁面已被保護以防止編輯或其他操作。",
        "viewsourcetext": "{{GENDER:|你|妳|你}}可以檢視並複製本頁面的原始碼。",
        "viewyourtext": "您可以查看並複製'''您對此頁面作出編輯後'''的源代碼:",
-       "protectedinterface": "該頁提供此wiki軟體的介面文字,它已被保護以防止惡意修改。\n如欲修改所有wiki的翻譯,請到[//translatewiki.net/ translatewiki.net]上的MediaWiki本地化計畫。",
-       "editinginterface": "'''警告:'''您正在編輯的頁面是用於提供軟體的介面文字。\n改變此頁將影響其他在此wiki上的用戶介面外觀。\n如欲修改所有wiki的翻譯,請到[//translatewiki.net/ translatewiki.net]上的MediaWiki本地化計畫。",
+       "protectedinterface": "本頁用來提供此 Wiki 軟體介面上的文字,並且已被保護以防止惡意修改。\n如欲增加或修改 Wiki 的翻譯,請至 [//translatewiki.net/ translatewiki.net] 上的MediaWiki 本地化專案。",
+       "editinginterface": "<strong>警告:</strong>您正在編輯的頁面是用來提供軟體介面上的文字。\n更改此頁將影響其他在此 Wiki 上的使用者介面外觀。\n如欲修改 Wiki 的翻譯,請至 [//translatewiki.net/ translatewiki.net]上的MediaWiki 本地化專案。",
        "cascadeprotected": "這個頁面已經被保護,因為這個頁面被以下已標註\"聯鎖保護\"的{{PLURAL:$1|一個|多個}}被保護頁面包含:\n$2",
        "namespaceprotected": "您並沒有權限編輯'''$1'''名字空間的頁面。",
-       "customcssprotected": "你並無權限編輯此CSS頁面,因為它包含了其他用戶的個人設置。",
-       "customjsprotected": "你並無權限去編輯此JavaScript頁面,因為他包含了另一位用戶的個人設定。",
+       "customcssprotected": "您並沒有權限編輯此 CSS 頁面,因為此頁面包含了其他使用者的個人設定。",
+       "customjsprotected": "您並沒有權限編輯此 JavaScript 頁面,因為此頁面包含了其他使用者的個人設定。",
        "mycustomcssprotected": "你沒有編輯這CSS頁面的權限。",
        "mycustomjsprotected": "你沒有編輯這JavaScript頁面的權限。",
        "myprivateinfoprotected": "您沒有權限來編輯您的個人信息。",
-       "mypreferencesprotected": "您沒有權限編輯您的設定。",
+       "mypreferencesprotected": "您沒有權限編輯您的偏好設定。",
        "ns-specialprotected": "特殊頁面是不可以編輯的。",
-       "titleprotected": "這個標題已經被[[User:$1|$1]]保護以防止建立。理由是''$2''。",
+       "titleprotected": "此標題已經被 [[User:$1|$1]] 保護以防止建立,原因是 \"<em>$2</em>\"。",
        "filereadonlyerror": "無法修改文件「$1」因為文件庫「$2」處於唯讀模式。 !\n管理員鎖定它的解釋是:「$3」。",
        "invalidtitle-knownnamespace": "使用名字空間「$2」和文本「$3」的無效標題",
        "invalidtitle-unknownnamespace": "使用未知名字空間編號$1和文本“$2”的無效標題",
        "exception-nologin": "未登入",
-       "exception-nologin-text": "你需要[[Special:Userlogin|登錄]]此wiki查閲此頁或進行操作。",
+       "exception-nologin-text": "您需要先 [[Special:Userlogin|登入]] 檢視或者編輯此頁面。",
        "exception-nologin-text-manual": "請$1以便能夠訪問此頁或行動。",
        "virus-badscanner": "損壞設定: 未知的病毒掃瞄器: ''$1''",
        "virus-scanfailed": "掃瞄失敗 (代碼 $1)",
        "virus-unknownscanner": "未知的防病毒:",
        "logouttext": "您已經登出。\n\n請注意,如果你再次登入,此頁或會繼續顯示,直到您清除瀏覽器緩存。",
        "welcomeuser": "歡迎,$1!",
-       "welcomecreation-msg": "您的帳號已建立。\n不要忘記變更您的[[Special:Preferences| {{SITENAME}} 的偏好設定]]。",
+       "welcomecreation-msg": "您的帳號已建立。\n不要忘記變更您的 {{SITENAME}} [[Special:Preferences|偏好設定]]。",
        "yourname": "使用者名稱:",
-       "userlogin-yourname": "使用者名稱",
+       "userlogin-yourname": "使用者名稱",
        "userlogin-yourname-ph": "輸入您的使用者名稱",
        "createacct-another-username-ph": "輸入帳號名稱",
        "yourpassword": "您的密碼:",
        "userlogin-remembermypassword": "保持我的登入狀態",
        "userlogin-signwithsecure": "使用安全連線",
        "yourdomainname": "您的網域:",
-       "password-change-forbidden": "您不可變更此圍記(Wiki)上的密碼。",
+       "password-change-forbidden": "您不可變更此維基(Wiki)上的密碼。",
        "externaldberror": "這可能是由於驗證資料庫錯誤,或是您被禁止更新您的外部帳號。",
        "login": "登入",
        "nav-login-createaccount": "登入/建立新帳號",
        "userlogin-resetlink": "忘記了您的登入細節?",
        "userlogin-resetpassword-link": "忘記您的密碼?",
        "userlogin-helplink2": "登入幫助",
-       "userlogin-loggedin": "您已作為{{GENDER:$1|$1}}登錄。\n利用以下表單以作為另一賬戶登錄。",
+       "userlogin-loggedin": "您目前已登入 {{GENDER:$1|$1}} 使用者,\n請使用下列表單登入另一位使用者。",
        "userlogin-createanother": "建立另一賬戶",
        "createacct-emailrequired": "電子郵件",
        "createacct-emailoptional": "電子郵件(可選)",
        "createacct-another-submit": "建立另一帳號",
        "createacct-benefit-heading": "{{SITENAME}}是由像您一樣的人建立。",
        "createacct-benefit-body1": "{{PLURAL:$1|次編輯}}",
-       "createacct-benefit-body2": "$1個頁面",
+       "createacct-benefit-body2": "$1 頁",
        "createacct-benefit-body3": "位近期{{PLURAL:$1|貢獻者}}",
        "badretype": "您所輸入的密碼並不符合。",
        "userexists": "您所輸入的使用者名稱已存在,請另選一個名稱。",
        "loginerror": "登入錯誤",
        "createacct-error": "帳號建立錯誤",
        "createaccounterror": "無法建立帳號:$1",
-       "nocookiesnew": "已成功建立新帳號!偵測到您已關閉 Cookies,請開啟它並登入。",
-       "nocookieslogin": "本站利用 Cookies 進行使用者登入,偵測到您已關閉 Cookies,請開啟它並重新登入。",
+       "nocookiesnew": "使用者帳號已建立成功,但您尚未登入。\n要登入 {{SITENAME}} 使用者需使用 Cookies,\n您的 Cookies 未尚開啟。\n請在開啟後使用您新的使用者名稱及密碼登入。",
+       "nocookieslogin": "要登入 {{SITENAME}} 使用者需使用 Cookies,\n您的 Cookies 未尚開啟。\n請在開啟後重試。",
        "nocookiesfornew": "這個使用者的帳號未建立,我們不能確認它的來源。\n請確認您已開啟 Cookie,重新載入後再試。",
-       "noname": "{{GENDER:|你|妳|你}}沒有輸入一個有效的使用者名稱。",
+       "noname": "您輸入的使用者名稱無效。",
        "loginsuccesstitle": "登入成功",
        "loginsuccess": "{{GENDER:|你|妳|你}}正在以「$1」的身份在 {{SITENAME}} 登入。",
-       "nosuchuser": "æ\89¾ä¸\8då\88°ç\94¨æ\88¶ \"$1\"ã\80\82\nç\94¨æ\88¶å\90\8d稱æ\98¯æ\9c\89大å°\8f寫å\8d\80å\88\86ç\9a\84ã\80\82\n檢æ\9f¥æ\82¨ç\9a\84æ\8b¼å¯«ï¼\8cæ\88\96è\80\85ç\94¨ä¸\8bé\9d¢ç\9a\84表格[[Special:UserLogin/signup|建ç«\8bä¸\80å\80\8bæ\96°è³¬號]]。",
+       "nosuchuser": "æ\9f¥ç\84¡ä½¿ç\94¨è\80\85 \"$1\"ã\80\82\n使ç\94¨è\80\85å\90\8d稱æ\9c\89大å°\8f寫å\8d\80å\88\86ï¼\8c\nè«\8b檢æ\9f¥æ\82¨è¼¸å\85¥ç\9a\84å­\97æ¯\8dï¼\8cæ\88\96è\80\85 [[Special:UserLogin/signup|建ç«\8bæ\96°å¸³號]]。",
        "nosuchusershort": "沒有一個名為「$1」的用戶。請檢查您輸入的文字是否有錯誤。",
-       "nouserspecified": "{{GENDER:|你|妳|你}}需要指定一個用戶名。",
-       "login-userblocked": "這位用戶已被封鎖。不容許登入。",
+       "nouserspecified": "您必須指定一個使用者名稱。",
+       "login-userblocked": "這位使用者已被封鎖,不允許登入。",
        "wrongpassword": "您輸入的密碼錯誤,請再試一次。",
        "wrongpasswordempty": "沒有輸入密碼!請重試。",
        "passwordtooshort": "您的密碼不能少於$1個字元。",
-       "password-name-match": "您的密碼必須跟您的用戶名不相同。",
+       "password-name-match": "您的密碼不可跟您的使用者相同。",
        "password-login-forbidden": "這個用戶名稱及密碼的使用是被禁止的。",
        "mailmypassword": "重設密碼",
        "passwordremindertitle": "{{SITENAME}}的新臨時密碼",
-       "passwordremindertext": "有人(可能是您,來自IP位址$1)已請求{{SITENAME}}的新密碼 ($4)。\n用戶\"$2\"的一個新臨時密碼現在已被設定好為\"$3\"。\n如果這個動作是您所指示的,您便需要立即登入並選擇一個新的密碼。\n您的臨時密碼會於{{PLURAL:$5|一|$5}}天內過期。\n\n如果是其他人發出了該請求,或者您已經記起了您的密碼並不準備改變它,\n您可以忽略此消息並繼續使用您的舊密碼。",
-       "noemail": "用戶「$1」沒有登記電子郵件地址。",
+       "passwordremindertext": "不明人士 (可能是您自己,來自 IP 位址 $1) 要求重設在 {{SITENAME}} ($4) 的密碼。\n給使用者 \"$2\" 的臨時密碼設為 \"$3\"。\n如果這個動作是您做的,您需要立即登入並設定一個新的密碼,\n您的臨時密碼將於{{PLURAL:$5|一|$5}}天內過期。\n\n如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
+       "noemail": "使用者 \"$1\" 未登記電子郵件地址。",
        "noemailcreate": "您需要提供一個有效的電子郵件地址",
-       "passwordsent": "用戶「$1」的新密碼已經寄往所登記的電子郵件地址。\n請在收到後再登入。",
-       "blocked-mailpassword": "您的IP地址處於查封狀態而不允許編輯,為了安全起見,密碼恢復功能已被禁用。",
+       "passwordsent": "使用者 \"$1\" 的新密碼已寄出至當出登記的電子郵件地址,\n請稍後收到信件後再登入。",
+       "blocked-mailpassword": "您的 IP 位址已被封鎖不允編輯,密碼復原的功能也同樣被禁止使用以防止被濫用。",
        "eauthentsent": "一封確認信已遞送至您設定的電郵位址。\n在發送其它郵件到此賬戶前,您必須首先依照這封信中的指導確認這個電子郵件信箱真實有效。",
        "throttled-mailpassword": "密碼提醒已經在前$1小時內發送。\n為防止濫用,限定在$1小時內僅發送一次密碼提醒。",
        "mailerror": "發送郵件錯誤: $1",
        "acct_creation_throttle_hit": "在這個wiki上的訪客利用您的IP地址在昨天創建了$1個賬戶,是在這段時間中的上限。\n結果利用這個IP地址的訪客在這段時間中不能創建更多的賬戶。",
-       "emailauthenticated": "您的電子郵件位址已於$2在$3確認。",
+       "emailauthenticated": "您的電子郵件位址已確認於 $2 的 $3。",
        "emailnotauthenticated": "您的電郵位址尚未確認。\n將不會發送與以下功能相關的電郵。",
-       "noemailprefs": "å\9c¨æ\82¨ç\9a\84å\8f\83æ\95¸è¨­ç½®ä¸­æ\8c\87å®\9aä¸\80å\80\8bé\9b»å­\90é\83µä»¶å\9c°å\9d\80以使ç\94¨æ­¤功能。",
+       "noemailprefs": "å\9c¨æ\82¨ç\9a\84å\81\8f好設å®\9a中設å®\9aé\9b»å­\90é\83µä»¶å\9c°å\9d\80ï¼\8cè®\93æ\82¨å\8f¯ä»¥ä½¿ç\94¨é\80\99äº\9b功能。",
        "emailconfirmlink": "確認您的電子郵件位址",
        "invalidemailaddress": "郵箱地址格式不正確,請輸入正確的郵箱位址或清空該輸入框。",
-       "cannotchangeemail": "此圍記(Wiki)不允許對帳號的電子郵件位址進行變更。",
+       "cannotchangeemail": "此維基(Wiki)不允許對帳號的電子郵件位址進行變更。",
        "emaildisabled": "此網站不能發送電子郵件。",
        "accountcreated": "已建立帳號",
-       "accountcreatedtext": "[[{{ns:User}}:$1|$1]]([[{{ns:User talk}}:$1|討論]])的賬戶已經被建立。",
+       "accountcreatedtext": "使用者帳號 [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|對話]]) 已建立。",
        "createaccount-title": "在{{SITENAME}}中建立新賬戶",
        "createaccount-text": "有人在{{SITENAME}}中利用您的電郵創建了一個名為 \"$2\" 的新賬戶($4),密碼是 \"$3\" 。您應該立即登入並更改密碼。\n\n如果該賬戶建立錯誤的話,您可以忽略此訊息。",
        "login-throttled": "您已經嘗試多次的登入動作。\n請稍等$1後再試。",
        "login-abort-generic": "登入錯誤 - 中止",
        "loginlanguagelabel": "語言:$1",
        "suspicious-userlogout": "您登出的要求已經被拒絕,因為它可能是由已損壞的瀏覽器或者快取代理傳送。",
-       "createacct-another-realname-tip": "真實姓名為選填。\n如果您選擇提供,它將用於貢獻署名。",
+       "createacct-another-realname-tip": "真實姓名為選填欄位。\n若您提供真實姓名,它會用於使用者貢獻署名。",
        "pt-login": "登入",
        "pt-login-button": "登入",
        "pt-createaccount": "建立帳戶",
        "passwordreset-text-one": "完成此表格以重新設定您的密碼。",
        "passwordreset-text-many": "{{PLURAL:$1|鍵入一個電郵位址以便遞送新密碼。}}",
        "passwordreset-legend": "重設密碼",
-       "passwordreset-disabled": "此圍記(Wiki)已禁用重設密碼。",
-       "passwordreset-emaildisabled": "此圍記(Wiki)已禁用電子郵件功能。",
+       "passwordreset-disabled": "此維基(Wiki)已禁用重設密碼。",
+       "passwordreset-emaildisabled": "此維基(Wiki)已禁用電子郵件功能。",
        "passwordreset-username": "使用者名稱:",
        "passwordreset-domain": "域名:",
-       "passwordreset-capture": "檢視產生的電子郵件嗎?",
-       "passwordreset-capture-help": "如果您選中此框,電子郵件(包括臨時密碼)將顯示,並發送給用戶。",
+       "passwordreset-capture": "檢視電子郵件內容?",
+       "passwordreset-capture-help": "如果您勾選此方塊,電子郵件(包含臨時密碼)將顯示,並發送給使用者。",
        "passwordreset-email": "電子郵件位址:",
        "passwordreset-emailtitle": "在{{SITENAME}}上的詳細訊息",
-       "passwordreset-emailtext-ip": "有人(可能是你,來自$1這個IP)要求重置{{SITENAME}}($4)的密碼。該用戶{{PLURAL:$3|是}}與以下電郵地址有關:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}會在{{PLURAL:$5|一天|$5天}}到期。\n你應該現在登入並選擇一個新的密碼。如果不是你作出這個請求,又或你已經記\n起你原來的密碼,你可以忽略本信息並使用你原來的密碼。",
-       "passwordreset-emailtext-user": "用戶$1要求重置在{{SITENAME}}($4)的密碼。該用戶{{PLURAL:$3|是}}與以下\n電郵地址有關:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}會在{{PLURAL:$5|一天|$5天}}到期。\n你應該現在登入並選擇一個新的密碼。如果不是你作出這個請求,又或你已經記\n起你原來的密碼,你可以忽略本信息並使用你原來的密碼。",
+       "passwordreset-emailtext-ip": "不明人士 (可能是您自己,來自 IP 位址 $1) 要求重設在 {{SITENAME}}($4)的密碼,下列是與此電子郵件地址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
+       "passwordreset-emailtext-user": "使用者 $1 要求重設在 {{SITENAME}}($4)的密碼,下列是與此電子郵件地址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
        "passwordreset-emailelement": "使用者名稱:$1\n臨時密碼:$2",
        "passwordreset-emailsent": "已發送重設密碼的電子郵件。",
        "passwordreset-emailsent-capture": "已發送重設密碼的電子郵件,並在下面顯示。",
        "missingcommentheader": "'''提示:''' 您沒有為此評論提供一個標題。如果您再次單擊「{{int:savearticle}}」,您的編輯將不帶標題儲存。",
        "summary-preview": "摘要預覽:",
        "subject-preview": "主題/標題預覽:",
-       "blockedtitle": "用戶被查封",
-       "blockedtext": "'''您的用戶名或IP地址已被封禁。'''\n\n此次封禁操作由$1完成,封禁原因爲''$2''。\n\n* 起始時間:$8\n* 終止時間:$6\n* 擬封禁對象:$7\n\n您可以聯繫$1或其他的[[{{MediaWiki:Grouppage-sysop}}|管理員]]討論此次封禁。若您已在[[Special:Preferences|帳號設置]]中配置了一個有效的電子郵件地址,且未被封禁電子郵件功能,則您可通過“發送電子郵件給這位用戶”功能來聯絡相關管理員。您當前的IP地址是$3,此次封禁的ID爲#$5。請在您的查詢中註明上述所有信息。",
-       "autoblockedtext": "{{GENDER:|你|妳|你}}的IP地址已經被自動查封,由於先前的另一位用戶被$1所查封。\n而查封的原因是:\n\n:''$2''\n\n* 這次查封的開始時間是:$8\n* 這次查封的到期時間是:$6\n* 對於被查封者:$7\n\n{{GENDER:|你|妳|你}}可以聯絡$1或者其他的[[{{MediaWiki:Grouppage-sysop}}|管理員]],討論這次查封。\n除非{{GENDER:|你|妳|你}}已經在{{GENDER:|你|妳|你}}的[[Special:Preferences|賬號參數設置]]中設定了一個有效的電子郵件地址,否則{{GENDER:|你|妳|你}}是不能使用「電郵這位用戶」的功能。當設定了一個有效的電子郵件地址後,這個功能是不會封鎖的。\n\n您現時正在使用的 IP 地址是 $3,查封ID是 #$5。 請在{{GENDER:|你|妳|你}}的查詢中註明以上所有的資料。",
+       "blockedtitle": "使用者已被封鎖",
+       "blockedtext": "<strong>您的使用者名稱或 IP 位址以被封鎖。</strong>\n\n您被 $1 封鎖,\n原因爲 <em>$2</em>。\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 相關封鎖對象:$7\n\n您可以聯繫 $1 或其他的 [[{{MediaWiki:Grouppage-sysop}}|管理員]] 討論封鎖的相關問題。\n若您已在 [[Special:Preferences|偏好設定]] 中設定了一個有效的電子郵件地址,且尚未被封鎖郵件功能,則您可透過 \"發送電子郵件給這位使用者\" 的功能來聯絡相關管理員。\n您目刖的 IP 位址是 $3,此次封鎖的 ID 爲 #$5。\n請您在詢問時附註以上詳細訊息。",
+       "autoblockedtext": "因先前的另一位使用者被 $1 封鎖,您的 IP 位址已被自動封鎖。\n原因是:\n\n:<em>$2</em>\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 相關封鎖對象:$7\n\n您可以聯繫 $1 或其他的 [[{{MediaWiki:Grouppage-sysop}}|管理員]] 討論封鎖的相關問題。\n若您已在 [[Special:Preferences|偏好設定]] 中設定了一個有效的電子郵件地址,且尚未被封鎖郵件功能,則您可透過 \"發送電子郵件給這位使用者\" 的功能來聯絡相關管理員。\n您目刖的 IP 位址是 $3,此次封鎖的 ID 爲 #$5。\n請您在詢問時附註以上詳細訊息。",
        "blockednoreason": "無給出原因",
        "whitelistedittext": "您必須先$1才可編輯頁面。",
-       "confirmedittext": "å\9c¨ç·¨è¼¯æ­¤é \81ä¹\8bå\89\8dæ\82¨å¿\85é \88確èª\8dæ\82¨ç\9a\84é\83µç®±ä½\8då\9d\80ã\80\82è«\8bé\80\8fé\81\8e[[Special:Preferences|å\81\8f好設å®\9a]]設å®\9a並é©\97è­\89æ\82¨ç\9a\84é\83µç®±å\9c°址。",
+       "confirmedittext": "å\9c¨ç·¨è¼¯æ­¤é \81ä¹\8bå\89\8dæ\82¨å¿\85é \88確èª\8dæ\82¨ç\9a\84é\9b»å­\90é\83µä»¶ä½\8då\9d\80ã\80\82\nè«\8bé\80\8fé\81\8e [[Special:Preferences|å\81\8f好設å®\9a]] è¨­å®\9a並é©\97è­\89æ\82¨ç\9a\84é\9b»å­\90é\83µä»¶ä½\8d址。",
        "nosuchsectiontitle": "找不到段落",
        "nosuchsectiontext": "您嘗試編輯的章節並不存在。\n可能在您查看頁面時已經移動或刪除。",
        "loginreqtitle": "需要登入",
        "loginreqlink": "登入",
-       "loginreqpagetext": "您必須$1才能檢視其它頁面。",
+       "loginreqpagetext": "您必須 $1 才能檢視其它頁面。",
        "accmailtitle": "密碼已寄出",
-       "accmailtext": "[[User talk:$1|$1]]的隨機產生密碼已經寄到$2。其可於登入後予以'''[[Special:ChangePassword|更改]]'''。",
+       "accmailtext": "[[User talk:$1|$1]] 的隨機密碼已經寄送至 $2,可登入後至 <em>[[Special:ChangePassword|變更密碼]] 頁面更改</em>。",
        "newarticle": "(新)",
-       "newarticletext": "您進入了一個尚未建立的頁面。\n要建立該頁面,請在下面的編輯框中輸入內容(詳情參見[$1 幫助])。\n如果您是不小心來到此頁面,直接點擊您瀏覽器中的「返回」按鈕返回。",
-       "anontalkpagetext": "---- ''這是一個還未建立賬號的匿名用戶的對話頁。我們因此只能用IP地址來與他/她聯絡。該IP地址可能由幾名用戶共享。如果您是一名匿名用戶並認為本頁上的評語與您無關,請[[Special:UserLogin/signup|創建新賬號]]或[[Special:UserLogin|登入]]以避免在未來於其他匿名用戶混淆。''",
+       "newarticletext": "您正連結至一頁不存在頁面。\n要建立該頁面,請在下方的編輯框中輸入內容(詳情請參考 [$1 説明頁面])。\n如果您是不小心來到此頁面,請點選瀏覽器的 <strong>返回</strong> 按鈕。",
+       "anontalkpagetext": "----\n<em>此討論頁面是給尚未建立帳號的匿名使用者使用</em>\n因此我們必須使用 IP 位址來辨識身份,但相同的 IP 位置可能由許多不同的使用者所共用。\n如果您是匿名使用者並且覺得評論的內容與您無關,請 [[Special:UserLogin/signup|建立新帳號]] 或 [[Special:UserLogin|登入]] 避免與其他匿名使用者混淆。",
        "noarticletext": "此頁面目前沒有內容,您可以在其它頁面[[Special:Search/{{PAGENAME}}|搜尋此頁標題]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋有關日誌],\n或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 編輯此頁]</span>。",
        "noarticletext-nopermission": "此頁目前沒有內容。\n您可以在其它頁[[Special:Search/{{PAGENAME}}|搜尋此頁標題]],或<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜尋有關日誌]</span>,但您沒有權限建立此頁。",
        "missing-revision": "「{{FULLPAGENAME}}」的#$1修訂版本不存在。\n\n這通常是因為過時的頁面歷史鏈接被刪除。\n詳情請閱[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]。",
-       "userpage-userdoesnotexist": "用戶「$1」尚未註冊。\n請在建立/編輯這個頁面前先檢查一下。",
+       "userpage-userdoesnotexist": "使用者帳號 \"$1\" 尚未註冊。\n若您要建立/編輯此頁面,請先檢查是否正確。",
        "userpage-userdoesnotexist-view": "未曾建立用戶名「$1」。",
-       "blocked-notice-logextract": "這位用戶現正被封鎖。\n下面有最近的封鎖紀錄以供參考:",
-       "clearyourcache": "'''注意:'''在保存以後,您必須繞過瀏覽器緩存才能看到所作出的改變。\n* '''火狐(Firefox)/Safari:'''按住“Shift”鍵再點擊“刷新”,或按下“Ctrl-F5”或“Ctrl-R”(Mac上為“⌘-R”)\n* '''谷歌瀏覽器(Google Chrome):'''按下“Ctrl-Shift-R”(Mac上為“⌘-Shift-R”)\n* '''Internet Explorer:'''按住“Ctrl”鍵再點擊“刷新”,或按下“Ctrl-F5”\n* '''Opera:'''在“工具→首選項”中清除緩存",
+       "blocked-notice-logextract": "此使用者目前已被封鎖。\n以下為最近的封鎖紀錄以供參考:",
+       "clearyourcache": "<strong>注意:</strong> 在您儲存之後您必須清除瀏覽器快取才可看到最新的變動。\n* <strong>Firefox / Safari:</strong> 按住 <em>Shift</em> 時點選 <em>重新整理</em>,或按 <em>Ctrl-F5</em> 或 <em>Ctrl-R</em> (Mac 為 <em>⌘-R</em>)\n* <strong>Google Chrome:</strong> 按 <em>Ctrl-Shift-R</em> (Mac 為 <em>⌘-Shift-R</em>)\n* <strong>Internet Explorer:</strong> 按住 <em>Ctrl</em> 時點選 <em>重新整理</em>,或按 <em>Ctrl-F5</em>\n* <strong>Opera:</strong> 進入 <em>工具 → 偏好設定</em> 中清除快取。",
        "usercssyoucanpreview": "'''提示:''' 在保存前請用「{{int:showpreview}}」按鈕來測試您新的 CSS 。",
        "userjsyoucanpreview": "'''提示:''' 在保存前請用「{{int:showpreview}}」按鈕來測試您新的 JavaScript 。",
        "usercsspreview": "'''記住您只是在預覽您的個人 CSS。'''\n'''還沒有儲存﹗'''",
        "sitejspreview": "'''記住你現在只是預覽此 JavaScript 代碼。'''\n'''還沒有儲存!'''",
        "userinvalidcssjstitle": "'''警告:''' 不存在面板「$1」。\n注意自訂的 .css 和 .js 頁要使用小寫標題,例如,{{ns:user}}:Foo/vector.css 不同於 {{ns:user}}:Foo/Vector.css。",
        "updated": "(已更新)",
-       "note": "'''注意:'''",
+       "note": "</strong>注意:</strong>",
        "previewnote": "'''請記住這只是預覽。'''\n您的變更尚未儲存!",
        "continue-editing": "往編輯框",
        "previewconflict": "這個預覽顯示了上面文字編輯區中的內容。它將在{{GENDER:|你|妳|你}}選擇保存後出現。",
        "copyrightwarning2": "請注意您對{{SITENAME}}的所有貢獻\n都可能被其他貢獻者編輯,修改或刪除。\n如果您不希望您的文字被任意修改和再散佈,請不要提交。<br />\n您同時也要向我們保證您所提交的內容是您自己所作,或得自一個不受版權保護或相似自由的來源(參閱$1的細節)。\n'''不要在未獲授權的情況下發表!'''",
        "longpageerror": "'''錯誤:您所提交的文本長度有{{PLURAL:$1|1|$1}}KB,這大於{{PLURAL:$2|1|$2}}KB的最大值。 '''\n因此,該文本無法保存。",
        "readonlywarning": "'''警告: 資料庫被鎖定以進行維護,所以您目前將無法保存您的修改。'''\n您可先複製您的文字並保存到文字檔案,然後等一會兒再修改。\n\n鎖定資料庫的管理員有如下解釋:$1",
-       "protectedpagewarning": "'''警告:本頁已經被保護,只有擁有管理員許可權的用戶才可修改。'''\n最近的日誌在下面提供以便參考:",
-       "semiprotectedpagewarning": "'''注意:'''本頁面被保護,僅限註冊用戶編輯。\n最近的日誌在下面提供以便參考:",
+       "protectedpagewarning": "<strong>警告:本頁已經被保護,只有擁有管理員權限的使用者才可編輯。</strong>\n以下提供最近的日誌以便參考:",
+       "semiprotectedpagewarning": "<strong>注意:</strong>本頁已經被保護,只有已註冊的使用者才可編輯。\n以下提供最近的日誌以便參考:",
        "cascadeprotectedwarning": "'''警告:'''本頁已經被保護,只有擁有管理員權限的用戶才可修改,因為本頁已被以下連鎖保護的{{PLURAL:$1|一個|多個}}頁面所包含:",
        "titleprotectedwarning": "'''警告:本頁面已被保護,需要[[Special:ListGroupRights|指定權限]]方可創建。'''\n最近的日誌在下面提供以便參考:",
        "templatesused": "此頁面包含以下{{PLURAL:$1|模板}}:",
        "edittools": "<!-- 此處的文字將被顯示在編輯和上傳表單以下。 -->",
        "nocreatetext": "{{SITENAME}}限制了創建新頁面的功能。{{GENDER:|你|妳|你}}可以返回並編輯已有的頁面,或者[[Special:UserLogin|登錄或創建新賬戶]]。",
        "nocreate-loggedin": "您並無許可權去創建新頁面。",
-       "sectioneditnotsupported-title": "ä¸\8dæ\94¯æ\8c\81段è\90½ç·¨è¼¯",
+       "sectioneditnotsupported-title": "ä¸\8dæ\94¯æ\8f´ç·¨è¼¯ç« ç¯\80",
        "sectioneditnotsupported-text": "此頁面不支持段落編輯。",
        "permissionserrors": "權限錯誤",
        "permissionserrorstext": "根據以下的{{PLURAL:$1|原因}},您並無權限去做以下的動作:",
        "content-failed-to-parse": "未能轉換$2 內容成為$1:$3",
        "invalid-content-data": "內容資料無效",
        "content-not-allowed-here": "[[$2]]頁面上不允許「$1」內容",
-       "editwarning-warning": "離開這個頁面可能會令您失去之前作出的所有更改。若您已經登入,您可在偏好設定的「{{int:prefs-editing}}」部份裡關閉此警告。",
+       "editwarning-warning": "離開此頁面可能會令您遺失之前所作的所有更改。\n若您已經登入,您可在偏好設定的 \"{{int:prefs-editing}}\" 關閉此警告。",
        "editpage-notsupportedcontentformat-title": "內容格式尚無法支援",
        "editpage-notsupportedcontentformat-text": "內容模型$2尚無法支援內容格式$1。",
        "content-model-wikitext": "維基文字",
        "undo-failure": "由於中途的編輯不一致,此編輯不能撤銷。",
        "undo-norev": "由於其修訂版本不存在或已刪除,此編輯不能撤銷。",
        "undo-nochange": "是次編輯似乎已經被撤銷。",
-       "undo-summary": "取消由[[Special:Contributions/$2|$2]] ([[User talk:$2|對話]])所作出的修訂 $1",
+       "undo-summary": "取消由 [[Special:Contributions/$2|$2]] ([[User talk:$2|對話]]) 所作出的修訂 $1",
        "undo-summary-username-hidden": "隱藏的用戶撤銷$1的修訂",
        "cantcreateaccounttitle": "無法建立帳號",
-       "cantcreateaccount-text": "從這個 IP 位址 (<b>$1</b>) 建立帳號已經被 [[User:$3|$3]] 禁止。\n\n當中被 $3 封禁的原因是 ''$2''",
-       "cantcreateaccount-range-text": "於此IP位址段'''$1'''之賬戶註冊被[[User:$3|$3]]禁止,其亦包括您所使用之IP位址('''$4''')。\n$3所述禁止原因為“$2”。",
-       "viewpagelogs": "æ\9f¥è©¢é\80\99å\80\8b頁面的日誌",
+       "cantcreateaccount-text": "來自這個 IP 位址 (<strong>$1</strong>) 建立的帳號已經被 [[User:$3|$3]] 封鎖。\n\n $3 封鎖的原因是 <em>$2</em>",
+       "cantcreateaccount-range-text": "來自 IP 位址範圍 '''$1''',包含您的 IP 位置 ('''$4''') 所建立的帳號已經被 [[User:$3|$3]] 封鎖。\n\n $3 封鎖的原因是 ''$2''",
+       "viewpagelogs": "檢è¦\96æ­¤頁面的日誌",
        "nohistory": "沒有本頁的修訂記錄。",
        "currentrev": "最新修訂版本",
        "currentrev-asof": "$1的最新修訂版本",
        "revdelete-edit-reasonlist": "編輯刪除埋由",
        "revdelete-offender": "修訂版本編輯者:",
        "suppressionlog": "監督日誌",
-       "suppressionlogtext": "該列表列出對管理員隱藏的刪除與封禁。另參見[[Special:BlockList|封鎖名單]]以查詢當前的封禁列表。",
+       "suppressionlogtext": "以下清單為管理員透過刪除或封鎖所隱藏的內容。\n請至 [[Special:BlockList|封鎖清單]] 取得目前已封鎖的清單。",
        "mergehistory": "合併頁面歷史",
        "mergehistory-header": "這一頁可以講您合併一個來源頁面的歷史到另一個新頁面中。\n請確認這次更改會繼續保留該頁面先前的歷史版本。",
        "mergehistory-box": "合併兩個頁面的修訂:",
        "editundo": "復原",
        "diff-empty": "(沒有差異)",
        "diff-multi-sameuser": "(未顯示同用戶所作出之$1次版本)",
-       "diff-multi-otherusers": "(未顯示$2位用戶所作出之$1次版本)",
+       "diff-multi-otherusers": "(未顯示由 $2 位使用者於中間所作的 $1 次修訂)",
        "diff-multi-manyusers": "(由多於$2名用戶作出的{{PLURAL:$1|一個中途修訂版本|$1個中途修訂版本}} 未被顯示)",
        "difference-missing-revision": "{{PLURAL:$2|1次修訂|$2 次修訂}}差異($1)不存在。\n\n這通常是因為過時的頁面修訂差異鏈接被刪除。\n詳情請閱[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]。",
        "searchresults": "搜尋結果",
        "searchmenu-exists": "'''在這個 wiki 上已有一頁面叫做「[[:$1]]」。'''",
        "searchmenu-new": "<strong>於此wiki建立這個頁面「[[:$1]]」!</strong>請參見已發現之$2條搜尋結果。",
        "searchprofile-articles": "內容頁面",
-       "searchprofile-project": "幫助和計劃頁面",
+       "searchprofile-project": "說明與專案頁面",
        "searchprofile-images": "多媒體",
        "searchprofile-everything": "全部",
        "searchprofile-advanced": "進階",
-       "searchprofile-articles-tooltip": "在$1中搜尋",
-       "searchprofile-project-tooltip": "在$1中搜尋",
+       "searchprofile-articles-tooltip": "在 $1 中搜尋",
+       "searchprofile-project-tooltip": "在 $1 中搜尋",
        "searchprofile-images-tooltip": "搜尋檔案",
-       "searchprofile-everything-tooltip": "搜尋全部(包括討論頁面)",
+       "searchprofile-everything-tooltip": "搜尋所有內容 (包含對話頁面)",
        "searchprofile-advanced-tooltip": "在自訂名字空間中搜尋",
        "search-result-size": "$1 ($2個字)",
        "search-result-category-size": "$1個成員($2個子分類,$3個檔案)",
        "search-result-score": "相關度: $1%",
-       "search-redirect": "(重向 $1)",
+       "search-redirect": "(重新導向 $1)",
        "search-section": "(段落 $1)",
        "search-file-match": "(匹配檔案內容)",
        "search-suggest": "{{GENDER:|你|妳|你}}是不是要找:$1",
-       "search-interwiki-caption": "姊妹計劃",
+       "search-interwiki-caption": "姊妹專案",
        "search-interwiki-default": "來自$1之結果:",
        "search-interwiki-more": "(更多)",
        "search-relatedarticle": "相關",
-       "searcheverything-enable": "å\9c¨æ\89\80æ\9c\89å\90\8då­\97空é\96\93中搜尋",
+       "searcheverything-enable": "å\9c¨æ\89\80æ\9c\89å\91½å\90\8d空é\96\93搜尋",
        "searchrelated": "相關",
        "searchall": "所有",
        "showingresults": "下面顯示從第 <b>$2</b> 條開始的 <b>$1</b> 條結果:",
        "preferences": "偏好設定",
        "mypreferences": "偏好設定",
        "prefs-edits": "編輯次數:",
-       "prefsnologintext2": "請$1以進入用戶設定。",
+       "prefsnologintext2": "請 $1 以更改您的偏好設定。",
        "prefs-skin": "外觀",
        "skin-preview": "預覽",
        "datedefault": "預設值",
        "prefs-labs": "實驗中的功能",
        "prefs-user-pages": "使用者頁面",
-       "prefs-personal": "使用者概況表",
-       "prefs-rc": "近期變更",
+       "prefs-personal": "使用者基本資料",
+       "prefs-rc": "最近變更",
        "prefs-watchlist": "監視列表",
        "prefs-watchlist-days": "監視列表中顯示的天數:",
        "prefs-watchlist-days-max": "最多$1{{PLURAL:$1|天}}",
        "prefs-email": "電子郵件選項",
        "prefs-rendering": "外觀",
        "saveprefs": "儲存",
-       "restoreprefs": "還原所有預設設定(所有部分)",
+       "restoreprefs": "還原所有預設設定 (所有部分)",
        "prefs-editing": "編輯",
        "rows": "行數:",
        "columns": "列數:",
        "searchresultshead": "搜尋",
        "stub-threshold": "<a href=\"#\" class=\"stub\">短頁面連結</a>格式門檻值 (位元組):",
        "stub-threshold-disabled": "已停用",
-       "recentchangesdays": "近期變更的顯示日數:",
+       "recentchangesdays": "最近變更的顯示日數:",
        "recentchangesdays-max": "最多$1{{PLURAL:$1|天}}",
        "recentchangescount": "預設顯示的編輯數:",
-       "prefs-help-recentchangescount": "這個包括最近更改、頁面歷史以及日誌。",
+       "prefs-help-recentchangescount": "這個包括最近變更、頁面歷史以及日誌。",
        "prefs-help-watchlist-token2": "這是一個秘密的密鑰,用於訂源您的監視列表。\n知道它的人將能夠讀取您的監視列表,所以您不應該分享它。[[Special:ResetTokens|如有需要重設此密鑰,請點擊這裡]]。",
        "savedprefs": "您的偏好設定已儲存。",
        "timezonelegend": "時區:",
        "localtime": "當地時間:",
        "timezoneuseserverdefault": "使用預設($1)",
-       "timezoneuseoffset": "其他 (指定偏移)",
+       "timezoneuseoffset": "其他 (指定時差)",
        "servertime": "伺服器時間:",
-       "guesstimezone": "從瀏覽器填寫",
+       "guesstimezone": "使用瀏覽器設定值",
        "timezoneregion-africa": "非洲",
        "timezoneregion-america": "美洲",
        "timezoneregion-antarctica": "南極洲",
        "timezoneregion-europe": "歐洲",
        "timezoneregion-indian": "印度洋",
        "timezoneregion-pacific": "太平洋",
-       "allowemail": "接受來自其他使用者的信件",
+       "allowemail": "啟用來自其他使用者的郵件通知功能",
        "prefs-searchoptions": "搜尋",
        "prefs-namespaces": "頁面名稱空間",
-       "defaultns": "否則在這些名字空間搜尋:",
+       "defaultns": "或在這些命名空間搜尋:",
        "default": "預設",
        "prefs-files": "檔案",
-       "prefs-custom-css": "自CSS",
-       "prefs-custom-js": "自JavaScript",
-       "prefs-common-css-js": "共用 CSS/JavaScript 於所有的外觀中:",
-       "prefs-reset-intro": "您可以利用這個頁面去重設您的參數設置到網站預設值。這個動作無法復原。",
+       "prefs-custom-css": "自訂 CSS",
+       "prefs-custom-js": "自訂 JavaScript",
+       "prefs-common-css-js": "所有外觀共用的 CSS/JavaScript:",
+       "prefs-reset-intro": "您可以使用此頁面重設您的偏好設定為網站預設值。\n這個動作將無法復原。",
        "prefs-emailconfirm-label": "電子郵件確認:",
        "youremail": "電子郵件:",
        "username": "{{GENDER:$1|使用者名稱}}:",
        "uid": "{{GENDER:$1|使用者 ID}}:",
-       "prefs-memberingroups": "{{PLURAL:$1|群組}}{{GENDER:$2|成員}}:",
+       "prefs-memberingroups": "{{GENDER:$2|所屬}}{{PLURAL:$1|群組}}:",
        "prefs-registration": "註冊時間:",
        "yourrealname": "真實姓名:",
        "yourlanguage": "語言:",
        "yourvariant": "內容語言變體:",
        "prefs-help-variant": "您希望用於顯示本站內容的語種或拼寫語系。",
-       "yournick": "新簽名:",
-       "prefs-help-signature": "在討論頁面上的評論應該要用「<nowiki>~~~~</nowiki>」簽名,這樣便會轉換成{{GENDER:|你|妳|你}}的簽名以及一個時間截記。",
+       "yournick": "æ\96°ç\9a\84ç°½å\90\8dï¼\9a",
+       "prefs-help-signature": "在對話頁面上評論時應使用 \"<nowiki>~~~~</nowiki>\" 簽名,\n該符號會轉換成您的簽名與時間。",
        "badsig": "錯誤的原始簽名。請檢查HTML標籤。",
        "badsiglength": "您的簽名過長。\n它的長度不可超過$1個字元。",
-       "yourgender": "您希望如何顯示性别?",
-       "gender-unknown": "我不想指定",
-       "gender-male": "",
-       "gender-female": "女",
-       "prefs-help-gender": "此設定為可選。\n軟件將使用此設定顯示正確的稱呼。\n此項資料將會被公開。",
+       "yourgender": "您希望如何被描述?",
+       "gender-unknown": "我不想說明",
+       "gender-male": "他編輯了 Wiki 頁面",
+       "gender-female": "她編輯äº\86 Wiki é \81é\9d¢",
+       "prefs-help-gender": "此偏好設定為選填欄位。\n系統會使用您選擇的方式稱呼您,對他人提及您時也會使用適當語法稱呼。\n此項資訊會被公開。",
        "email": "電子郵件",
-       "prefs-help-realname": "真實姓名是可選的。\n如果您選擇提供它,它會用於貢獻署名。",
-       "prefs-help-email": "电子邮件是可选项,但是在您忘记密码时很有用。",
-       "prefs-help-email-others": "您亦可以在您沒有公開自己的用戶身分時透過您的用戶頁或用戶討論頁與您聯繫。",
+       "prefs-help-realname": "真實姓名為選填欄位。\n若您提供真實姓名,它會用於使用者貢獻署名。",
+       "prefs-help-email": "電子郵件地址為選填欄位。\n但在重設密碼時會使用,而您很有可能會忘記密。",
+       "prefs-help-email-others": "您亦可以選擇讓其他使用者用電子郵件與您聯繫,透過您的使用者或對話頁面上方的連結。\n您的電子郵件位址不會實際告知給其他要聯絡您的使用者。",
        "prefs-help-email-required": "電子郵件地址是必填項目。",
-       "prefs-info": "基本資",
+       "prefs-info": "基本資",
        "prefs-i18n": "國際化",
        "prefs-signature": "簽名",
        "prefs-dateformat": "日期格式",
-       "prefs-timeoffset": "時間偏移",
+       "prefs-timeoffset": "時",
        "prefs-advancedediting": "一般選項",
        "prefs-editor": "編輯器",
        "prefs-preview": "預覽",
        "prefs-displaywatchlist": "顯示選項",
        "prefs-tokenwatchlist": "密鑰",
        "prefs-diffs": "差異",
-       "prefs-help-prefershttps": "此選項將於您下次登入時生效。",
+       "prefs-help-prefershttps": "此偏好設定將於您下次登入時生效。",
        "prefs-tabs-navigation-hint": "提示:您可通過左、右鍵於選項卡之間切換。",
        "email-address-validity-valid": "電子郵件位址有效",
        "email-address-validity-invalid": "請提供一個有效的電子郵件位址",
        "userrights-notallowed": "你無權加入或刪除使用者權限。",
        "userrights-changeable-col": "您可以更改的群組",
        "userrights-unchangeable-col": "您不可以更改的群組",
-       "userrights-conflict": "使用者權限更改發生衝突!請檢視並確認你的更改。",
+       "userrights-conflict": "使用者權限更改發生衝突!請重新檢視並確認你的更改。",
        "userrights-removed-self": "您已成功移除自己的權限,故此您沒法再次訪問此頁。",
        "group": "群組:",
        "group-user": "使用者",
        "right-move-subpages": "移動頁面與其子頁面",
        "right-move-rootuserpages": "移動根使用者頁面",
        "right-movefile": "移動檔案",
-       "right-suppressredirect": "ç\95¶ç§»å\8b\95é \81é\9d¢æ\99\82ä¸\8d建ç«\8bä¾\86æº\90é \81é\9d¢ä¹\8bé\87\8då®\9aå\90\91",
+       "right-suppressredirect": "移å\8b\95é \81é\9d¢æ\99\82ä¸\8d建ç«\8bä¾\86æº\90ç\9a\84é\87\8dæ\96°å°\8eå\90\91é \81é\9d¢",
        "right-upload": "上傳檔案",
        "right-reupload": "覆蓋現有的檔案",
        "right-reupload-own": "覆蓋由同一位上載的檔案",
        "right-undelete": "反刪除頁面",
        "right-suppressrevision": "檢視及恢復由操作員隱藏之修訂",
        "right-suppressionlog": "檢視非公開的日誌",
-       "right-block": "封鎖其他用戶防止編輯",
+       "right-block": "封鎖其他使用者的編輯權限",
        "right-blockemail": "封鎖用戶不可發電郵",
-       "right-hideuser": "封鎖用戶名,對公眾隱藏",
-       "right-ipblock-exempt": "ç¹\9eé\81\8eIP封鎖、自動封鎖以及範圍封鎖",
-       "right-proxyunbannable": "ç¹\9eé\81\8eProxyç\9a\84自動封鎖",
+       "right-hideuser": "封鎖使用者名稱,避免公開顯示",
+       "right-ipblock-exempt": "ç\95¥é\81\8e IP 封鎖、自動封鎖以及範圍封鎖",
+       "right-proxyunbannable": "ç\95¥é\81\8e Proxy 自動封鎖",
        "right-unblockself": "解除封鎖自己",
        "right-protect": "更改保護等級以及編輯被連鎖保護的頁面",
        "right-editprotected": "編輯保護層級為「{{int:protect-level-sysop}}」的頁面",
        "right-editsemiprotected": "編輯保護層級為「{{int:protect-level-autoconfirmed}}」的頁面",
        "right-editinterface": "編輯用戶界面",
-       "right-editusercssjs": "編輯其他用戶的CSS和JavaScript檔案",
+       "right-editusercssjs": "編輯其他使用者的 CSS 和 JavaScript 檔案",
        "right-editusercss": "編輯其他用戶的CSS檔案",
-       "right-edituserjs": "編輯其他用戶的JavaScript檔案",
+       "right-edituserjs": "編輯其他使用者的 JavaScript 檔案",
        "right-editmyusercss": "編輯你自己的用戶CSS檔",
        "right-editmyuserjs": "編輯你自己的用戶JavaScript檔",
        "right-viewmywatchlist": "檢視您的監視列表",
        "right-editmywatchlist": "編輯您的監視列表。請注意即使沒有這種權利,某些操作仍將添加頁面。",
        "right-viewmyprivateinfo": "檢視自己的私隱資料(如電郵地址及真實姓名)",
        "right-editmyprivateinfo": "編輯自己的私隱資料(如電郵地址及真實姓名)",
-       "right-editmyoptions": "編輯您的設定",
+       "right-editmyoptions": "編輯您的偏好設定",
        "right-rollback": "快速復原上位用戶對某一頁面之編輯",
        "right-markbotedits": "標示復原編輯作機械人編輯",
        "right-noratelimit": "沒有使用頻率限制",
        "right-unwatchedpages": "檢視未監視之頁面",
        "right-mergehistory": "合併頁面歷史",
        "right-userrights": "編輯所有用戶的權限",
-       "right-userrights-interwiki": "編輯在其它wiki上的用戶權限",
+       "right-userrights-interwiki": "編輯在其它 Wiki 上的使用者權限",
        "right-siteadmin": "鎖定和解除鎖定資料庫",
        "right-override-export-depth": "匯出含有五層深度連結頁面之頁面",
-       "right-sendemail": "ç\99¼é\9b»å­\90é\83µä»¶çµ¦å\85¶ä»\96ç\94¨æ\88",
+       "right-sendemail": "ç\99¼é\80\81é\9b»å­\90é\83µä»¶çµ¦å\85¶ä»\96使ç\94¨è\80\85",
        "right-passwordreset": "查看重置密碼郵件",
-       "newuserlogpage": "使ç\94¨è\80\85建ç«\8b日誌",
+       "newuserlogpage": "使ç\94¨è\80\85å\89µä½\9c日誌",
        "newuserlogpagetext": "這是一個最近被創建用戶的新日誌",
        "rightslog": "使用者權限日誌",
        "rightslogtext": "以下記錄了用戶權限的更改記錄。",
        "action-undelete": "反刪除這個頁面",
        "action-suppressrevision": "翻查和恢復這次隱藏修訂",
        "action-suppressionlog": "檢視這個私有日誌",
-       "action-block": "封鎖這位用戶的編輯",
+       "action-block": "封鎖此使用者的編輯權限",
        "action-protect": "更改這個頁面的保護等級",
        "action-rollback": "快速回退最後對特定頁面作出的編輯的用戶的所有編輯",
        "action-import": "由其他 Wiki 匯入頁面",
        "action-unwatchedpages": "檢視未被監視的頁面",
        "action-mergehistory": "合併這個頁面的歷史",
        "action-userrights": "編輯所有的權限",
-       "action-userrights-interwiki": "編輯在其它wiki上用戶的權限",
+       "action-userrights-interwiki": "編輯在其它 Wiki 上的使用者權限",
        "action-siteadmin": "鎖定和解除鎖定資料庫",
        "action-sendemail": "發送電郵",
        "action-editmywatchlist": "編輯您的監視列表�",
        "enhancedrc-since-last-visit": "自上次訪問已有$1",
        "enhancedrc-history": "歷史",
        "recentchanges": "最近變更",
-       "recentchanges-legend": "近期變更選項",
-       "recentchanges-summary": "追蹤該圍記(Wiki)的近期變更。",
+       "recentchanges-legend": "最近變更選項",
+       "recentchanges-summary": "追蹤該維基(Wiki)的近期變更。",
        "recentchanges-noresult": "在所選擇的時間裡沒有任何更改與所給條件吻合。",
-       "recentchanges-feed-description": "訂閱該圍記(Wiki)的近期變更。",
+       "recentchanges-feed-description": "訂閱該維基(Wiki)的最近變更。",
        "recentchanges-label-newpage": "這次編輯建立了一個新頁面",
        "recentchanges-label-minor": "這是一個小編輯",
        "recentchanges-label-bot": "這次編輯是由機器人進行",
        "rcshowhidebots": "$1機器人的編輯",
        "rcshowhidebots-show": "顯示",
        "rcshowhidebots-hide": "隱藏",
-       "rcshowhideliu": "$1已註冊用戶",
+       "rcshowhideliu": "$1 位已註冊的使用者",
        "rcshowhideliu-show": "顯示",
        "rcshowhideliu-hide": "隱藏",
-       "rcshowhideanons": "$1匿名用戶的編輯",
+       "rcshowhideanons": "$1 位匿名的使用者",
        "rcshowhideanons-show": "顯示",
        "rcshowhideanons-hide": "隱藏",
        "rcshowhidepatr": "$1巡查過的編輯",
        "minoreditletter": "小",
        "newpageletter": "新",
        "boteditletter": "機",
-       "number_of_watching_users_pageview": "[$1 位使用者在監視]",
+       "number_of_watching_users_pageview": "[$1 位在監視的使用者]",
        "rc_categories": "分類界限(以\"|\"分割)",
        "rc_categories_any": "任意",
        "rc-change-size-new": "更改後$1字節",
        "upload-file-error-text": "當試圖在伺服器上創建臨時檔案時發生內部錯誤。請與[[Special:ListUsers/sysop|管理員]]聯繫。",
        "upload-misc-error": "未知的上傳錯誤",
        "upload-misc-error-text": "在上傳時發生未知的錯誤。請驗証使用了正確並可訪問的 URL,然後進行重試。如果問題仍然存在,請與[[Special:ListUsers/sysop|管理員]]聯繫。",
-       "upload-too-many-redirects": "在網址中有太多重新定向",
+       "upload-too-many-redirects": "URL 中包含太多重新導向資訊",
        "upload-http-error": "已發生一個HTTP錯誤:$1",
        "upload-copy-upload-invalid-domain": "不能從該域名上載檔案副本。",
        "backend-fail-stream": "無法流傳送文件「$1」。",
        "img-auth-isdir": "您嘗試過存取一個目錄「$1」。\n只是可以存取檔案。",
        "img-auth-streaming": "串流「$1」中。",
        "img-auth-public": "img_auth.php的功能是由一個公共wiki中輸出檔案。\n這個wiki是已經設定做一個公共wiki。\n基於保安最佳化,img_auth.php已經停用。",
-       "img-auth-noread": "用戶無權讀取「$1」。",
+       "img-auth-noread": "使用者沒有權限讀取 \"$1\"。",
        "http-invalid-url": "無效的URL:$1",
        "http-invalid-scheme": "不支援含有「$1」的URL。",
        "http-request-error": "未知的錯誤令到HTTP請求失敗。",
        "linkstoimage-more": "超過$1個頁面連接到這個檔案。\n此處只列出首$1個連接到此檔案的頁面。\n您也可以查看[[Special:WhatLinksHere/$2|完整的清單]]。",
        "nolinkstoimage": "沒有頁面連接到本檔案。",
        "morelinkstoimage": "檢視連接到這個檔案的[[Special:WhatLinksHere/$1|更多連結]]。",
-       "linkstoimage-redirect": "$1 (檔案重向) $2",
+       "linkstoimage-redirect": "$1 (檔案重新導向) $2",
        "duplicatesoffile": "以下的$1個檔案跟這個檔案重覆([[Special:FileDuplicateSearch/$2|更多細節]]):",
-       "sharedupload": "該檔案來自於$1,它可能在其它計劃項目中被應用。",
+       "sharedupload": "此檔案來自 $1 且可能被其他專案所使用。",
        "sharedupload-desc-there": "該檔案來自於$1,它可能在其它計劃項目中被應用。\n請參閱在[$2 檔案描述頁面]以了解其相關資訊。",
-       "sharedupload-desc-here": "該檔案來自於$1,它可能在其它計劃項目中被應用。\n它在[$2 檔案描述頁面]那邊上的描述於下面顯示。",
+       "sharedupload-desc-here": "此檔案來自 $1 且可能被其他專案所使用。\n以下為該檔案於 [$2 檔案描述頁面] 的內容描述。",
        "sharedupload-desc-edit": "該檔案來自$1,它可能在其它計劃項目中被使用。\n或許您可以在其[$2 檔案描述頁面]上編輯說明。",
-       "sharedupload-desc-create": "該檔案來自$1,它可能在其它計劃項目中被使用。\n或許您可以在那邊的[$2 檔案描述頁面]上編輯其說明。",
+       "sharedupload-desc-create": "此檔案來自 $1 且可能被其他專案所使用。\n若您想要編輯內容描述可至 [$2 檔案描述頁面]。",
        "filepage-nofile": "不存在此名稱的檔案。",
        "filepage-nofile-link": "不存在此名稱的檔案,但您可以[$1 上傳它]。",
        "uploadnewversion-linktext": "上傳該檔案的新版本",
        "mimetype": "MIME 類型:",
        "download": "下載",
        "unwatchedpages": "未被監視的頁面",
-       "listredirects": "重向清單",
+       "listredirects": "重新導向清單",
        "listduplicatedfiles": "重複檔案列表",
        "listduplicatedfiles-summary": "以下列表中某檔案之最新版本與其他檔案之最新版本重複。進包含本地檔案",
        "listduplicatedfiles-entry": "檔案[[:File:$1|$1]]與[[$3|其他$2個重複]]。",
        "randomincategory-nopages": "[[:Category:$1]]中沒有頁面。",
        "randomincategory-selectcategory": "從分類中獲取隨機頁面:$1 $2",
        "randomincategory-selectcategory-submit": "顯示",
-       "randomredirect": "隨機重向",
-       "randomredirect-nopages": "在「$1」名字空間中沒有重向頁面。",
+       "randomredirect": "隨機重新導向",
+       "randomredirect-nopages": "在「$1」名字空間中沒有重新導向頁面。",
        "statistics": "統計",
        "statistics-header-pages": "頁面統計",
        "statistics-header-edits": "編輯統計",
        "statistics-header-views": "檢視統計",
-       "statistics-header-users": "使用者統計",
+       "statistics-header-users": "使用者統計資訊",
        "statistics-header-hooks": "其它統計",
        "statistics-articles": "內容頁面",
        "statistics-pages": "頁面",
-       "statistics-pages-desc": "在圍記(Wiki)上的所有頁面,包括討論頁、重新導向等。",
+       "statistics-pages-desc": "在 Wiki 上所有的頁面,包含對話頁面、重新導向頁面...等。",
        "statistics-files": "已經上傳的檔案",
        "statistics-edits": "自從{{SITENAME}}設定的頁面編輯數",
        "statistics-edits-average": "每一頁面的平均編輯數",
        "statistics-views-total": "檢視總數",
        "statistics-views-total-desc": "不存在頁面和特殊頁面的查看數未計入",
        "statistics-views-peredit": "每次編輯檢視數",
-       "statistics-users": "已註冊[[Special:ListUsers|使用者]]",
+       "statistics-users": "已註冊的 [[Special:ListUsers|使用者]]",
        "statistics-users-active": "活躍使用者",
-       "statistics-users-active-desc": "在前$1天中操作過的用戶",
+       "statistics-users-active-desc": "在最近 $1 天操作過的使用者",
        "statistics-mostpopular": "被查閱次數最多的頁面",
        "pageswithprop": "有頁面屬性的頁面",
        "pageswithprop-legend": "有頁面屬性的頁面",
        "pageswithprop-submit": "進入",
        "pageswithprop-prophidden-long": "長文本屬性值已被隱藏($1)",
        "pageswithprop-prophidden-binary": "已隱藏二進位屬性值($1)",
-       "doubleredirects": "雙重的重新導向",
+       "doubleredirects": "雙重的重新導向頁面",
        "doubleredirectstext": "這一頁列出所有重定向頁面重定向到另一個重定向頁的頁面。每一行都包含到第一和第二個重定向頁面的連結,以及第二個重定向頁面的目標,通常顯示的都會是\"真正\"的目標頁面,也就是第一個重定向頁面應該指向的頁面。\n<del>已劃去</del>的為已經解決之項目。",
-       "double-redirect-fixed-move": "[[$1]]已經完成移動。它已自動更新,並已重定向至[[$2]]。",
+       "double-redirect-fixed-move": "[[$1]] 已完成移動。\n此頁面已自動更新並重新導向至 [[$2]]。",
        "double-redirect-fixed-maintenance": "作為維護工作自動修復於[[$1]]至[[$2]]之雙重重定向。",
        "double-redirect-fixer": "重新導向修正器",
-       "brokenredirects": "中斷的重新導向",
+       "brokenredirects": "中斷的重新導向頁面",
        "brokenredirectstext": "以下的重新導向頁面連結到不存在的頁面:",
        "brokenredirects-edit": "編輯",
        "brokenredirects-delete": "刪除",
        "protectedpages-indef": "只有無期之保護頁面",
        "protectedpages-summary": "此頁面列出當前受保護之頁面。欲訪問受白紙保護之標題列表,請參見[[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]。",
        "protectedpages-cascade": "只有連鎖之保護頁面",
-       "protectedpages-noredirect": "隱藏重定向",
+       "protectedpages-noredirect": "隱藏重新導向頁面",
        "protectedpagesempty": "在這些參數下沒有頁面正在保護。",
        "protectedpages-timestamp": "時間戳",
        "protectedpages-page": "頁面",
-       "protectedpages-expiry": "過期",
+       "protectedpages-expiry": "期限",
        "protectedpages-performer": "保護用戶",
        "protectedpages-params": "保護參數",
        "protectedpages-reason": "原因",
        "protectedtitles": "受保護標題",
        "protectedtitles-summary": "此頁面列出當前受白紙保護之標題。欲訪問受保護頁面之列表,請參見[[{{#special:ProtectedPages}}|{{int:protectedpages}}]]。",
        "protectedtitlesempty": "在這些參數之下並無標題正在保護。",
-       "listusers": "用戶列表",
-       "listusers-editsonly": "只顯示有編輯的用戶",
+       "listusers": "使用者清單",
+       "listusers-editsonly": "只顯示有編輯的使用者",
        "listusers-creationsort": "按建立日期排序",
        "listusers-desc": "使用降冪排序",
        "usereditcount": "$1 次{{PLURAL:$1|編輯}}",
        "allpagesprefix": "顯示有此前綴的頁面:",
        "allpagesbadtitle": "給定的頁面標題是非法的,或者具有一個內部語言或內部 wiki 的前綴。它可能包含一個或更多的不能用於標題的字元。",
        "allpages-bad-ns": "在{{SITENAME}}中沒有一個叫做「$1」的名字空間。",
-       "allpages-hide-redirects": "隱藏重定向頁",
+       "allpages-hide-redirects": "隱藏重新導向頁面",
        "cachedspecial-viewing-cached-ttl": "你正在瀏覽本頁的緩存版本,至多可能存在$1的延遲。",
        "cachedspecial-viewing-cached-ts": "您正在閱讀此頁的緩存版本,這可能不是完整的版本。",
        "cachedspecial-refresh-now": "查看最新。",
        "linksearch-text": "可使用通配符,如“*.wikipedia.org”。至少需要一個頂級域名,例如“*.org”。<br />\n支持的{{PLURAL:$2|協議}}:<code>$1</code>(若沒有指定協議,預設為http://)。",
        "linksearch-line": "$1 連自 $2",
        "linksearch-error": "萬用字元僅可在主機名稱的開頭使用。",
-       "listusersfrom": "給定顯示用戶條件:",
+       "listusersfrom": "顯示使用者開始自:",
        "listusers-submit": "顯示",
        "listusers-noresult": "找不到用戶。",
-       "listusers-blocked": "(已封禁)",
-       "activeusers": "æ´»èº\8dç\94¨æ\88¶å\88\97表",
-       "activeusers-intro": "這個是在最近$1天之內有一些動作的用戶列表。",
+       "listusers-blocked": "(已封鎖)",
+       "activeusers": "æ\9c\89æ´»å\8b\95ç\9a\84使ç\94¨è\80\85æ¸\85å\96®",
+       "activeusers-intro": "此清單為最近 $1 天有活動的使用者。",
        "activeusers-count": "最近$3天內有$1次編輯",
-       "activeusers-from": "顯示用戶開始於:",
+       "activeusers-from": "顯示使用者開始自:",
        "activeusers-hidebots": "隱藏機器人",
        "activeusers-hidesysops": "隱藏管理員",
-       "activeusers-noresult": "æ\89¾ä¸\8då\88°ç\94¨æ\88。",
-       "listgrouprights": "用戶群組權限",
+       "activeusers-noresult": "æ\9f¥ç\84¡ä½¿ç\94¨è\80\85。",
+       "listgrouprights": "使用者群組權限",
        "listgrouprights-summary": "以下面是一個在這個wiki中定義出來的用戶權限清單,以及它們的存取權。\n更多有關個別權限的細節可以在[[{{MediaWiki:Listgrouprights-helppage}}|這裏]]找到。",
        "listgrouprights-key": "* <span class=\"listgrouprights-granted\">已授予的權限</span>\n* <span class=\"listgrouprights-revoked\">被吊銷的權限</span>",
        "listgrouprights-group": "群組",
        "trackingcategories-nodesc": "並無說明。",
        "trackingcategories-disabled": "分類被禁用",
        "mailnologin": "無電郵地址",
-       "mailnologintext": "您必須先[[Special:UserLogin|登入]]\n並在[[Special:Preferences|偏好設定]]\n中有一個有效的 e-mail 地址才可以電郵其他用戶。",
+       "mailnologintext": "您必須先 [[Special:UserLogin|登入]]\n並在 [[Special:Preferences|偏好設定]]\n中設定一個有效的電子郵件地址才可以發送信件給其他使用者。",
        "emailuser": "E-mail該用戶",
        "emailuser-title-target": "電郵這位{{GENDER:$1|用戶}}",
-       "emailuser-title-notarget": "E-mail用戶",
-       "emailpage": "E-mail用戶",
-       "emailpagetext": "您可以ç\94¨ä¸\8bé\9d¢ç\9a\84表格å\8e»å¯\84ä¸\80å°\81é\9b»é\83µçµ¦é\80\99ä½\8d{{Gender:$1|ç\94¨æ\88¶}}ã\80\82\næ\82¨å\9c¨[[Special:Preferences|æ\82¨ç\9a\84å\8f\83æ\95¸è¨­ç½®]]中æ\89\80輸å\85¥ç\9a\84é\9b»å­\90é\83µä»¶å\9c°å\9d\80å°\87å\87ºç\8f¾å\9c¨é\83µä»¶ã\80\8cç\99¼ä»¶äººã\80\8dä¸\80æ¬\84中ï¼\8cé\80\99樣該ç\94¨æ\88¶å°±å\8f¯ä»¥å\9b\9eè¦\86æ\82¨ã\80\82",
+       "emailuser-title-notarget": "E-mail 給使用者",
+       "emailpage": "E-mail 給使用者",
+       "emailpagetext": "您可以使ç\94¨ä»¥ä¸\8b表格ç\99¼é\80\81é\9b»å­\90é\83µä»¶çµ¦é\80\99ä½\8d {{Gender:$1|使ç\94¨è\80\85}}ã\80\82\næ\82¨å\9c¨ [[Special:Preferences|å\81\8f好設å®\9a]] ä¸­æ\89\80輸å\85¥ç\9a\84é\9b»å­\90é\83µä»¶å\9c°å\9d\80å°\87æ\9c\83ä½\9cç\82ºé\83µä»¶ç\9a\84 \"å¯\84件人\"ï¼\8cå\9b æ­¤è©²ä½¿ç\94¨è\80\85å\8f¯ç\9b´æ\8e¥å\9b\9eè¦\86æ\82¨ã\80\82",
        "defemailsubject": "{{SITENAME}}來自用戶「$1」的電子郵件",
-       "usermaildisabled": "用戶電郵已停用",
-       "usermaildisabledtext": "您不可以發送電郵到這個wiki上的其他用戶",
+       "usermaildisabled": "使用者 E-mail 已停用",
+       "usermaildisabledtext": "您不可發送信件到這個 Wiki 上的其他使用者",
        "noemailtitle": "無e-mail地址",
        "noemailtext": "該用戶還沒有指定一個有效的e-mail地址。",
-       "nowikiemailtext": "這位用戶選擇不接收其他用戶的電子郵件。",
+       "nowikiemailtext": "這位使用者選擇不接收其他使用者的信件。",
        "emailnotarget": "收件人不存在或無效的用戶名。",
        "emailtarget": "輸入收件人用戶名",
-       "emailusername": "用戶名:",
+       "emailusername": "使用者名稱:",
        "emailusernamesubmit": "提交",
        "email-legend": "發一封電子郵件至另一位{{SITENAME}}用戶",
        "emailfrom": "發件人:",
        "watchlistanontext": "請$1以檢視或編輯您的監視列表。",
        "watchnologin": "未登入",
        "addwatch": "加至監視列表",
-       "addedwatchtext": "已將頁面「[[:$1]]」加入您的[[Special:Watchlist|監視列表]]。將來此頁面及其討論頁如有更動都會在那裡列出。",
+       "addedwatchtext": "已將頁面 \"[[:$1]]\" 加入您的 [[Special:Watchlist|監視列表]]。若此頁面及其對話頁面有任何更動都會在監視列表中列出。",
        "removewatch": "停止監視",
        "removedwatchtext": "[[:$1]]已經從[[Special:Watchlist|您的監視頁面]]中移除。",
        "watch": "監視",
        "unwatchthispage": "停止監視",
        "notanarticle": "不是頁面",
        "notvisiblerev": "上次由不同用戶所作的修訂版本已經刪除",
-       "watchlist-details": "不包含討論頁,您的監視列表上有$1個頁面。",
+       "watchlist-details": "您的監視列表上共有 $1 個頁面 (不包含對話頁面)。",
        "wlheader-enotif": "已經啟動電子郵件通知功能。",
        "wlheader-showupdated": "在{{GENDER:|你|妳|你}}上次檢視後有被修改過的頁面會顯示為'''粗體'''。",
        "wlnote2": "以下是新近<strong>$1</strong>小時的更改,截至$2 $3。",
        "enotif_lastvisited": "請參閱 $1 檢視你上次訪問後的所有更改。",
        "enotif_lastdiff": "請參閱 $1 檢視該更改。",
        "enotif_anon_editor": "匿名用戶$1",
-       "enotif_body": "$WATCHINGUSERNAME閣下,\n\n$PAGEINTRO $NEWPAGE\n\n編輯摘要:$PAGESUMMARY $PAGEMINOREDIT\n\n聯絡此編輯者:\n\n郵件:$PAGEEDITOR_EMAIL\n本站:$PAGEEDITOR_WIKI\n\n在您訪問此頁之前,將來的更改將不會向您發出通知。您也可以在監視列表中重設您所有監視頁面的通知標記。\n\n{{SITENAME}}通知系統啟\n\n--\n更改電郵通知設定:\n{{canonicalurl:{{#special:Preferences}}}}\n\n更改監視列表設定:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\n從監視列表中刪除此頁面:\n$UNWATCHURL\n\n回饋和其他幫助:\n{{canonicalurl:{{MediaWiki:Helppage}}}}",
+       "enotif_body": "$WATCHINGUSERNAME 您好,\n\n$PAGEINTRO $NEWPAGE\n\n編輯摘要:$PAGESUMMARY $PAGEMINOREDIT\n\n聯絡此編輯者:\n\n信箱:$PAGEEDITOR_EMAIL\n本站:$PAGEEDITOR_WIKI\n\n在您檢視該頁面之前,接下來的變更系統不會再向您發出通知。您也可以在監視列表中重設您所有監視頁面的通知狀態。\n\n{{SITENAME}} 通知系統啟\n\n--\n更改您的電子郵件通知設定,請至:\n{{canonicalurl:{{#special:Preferences}}}}\n\n更改您的監視列表設定,請至:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\n從監視列表中刪除此頁面,請至:\n$UNWATCHURL\n\n回函並取得更多協助:\n{{canonicalurl:{{MediaWiki:Helppage}}}}",
        "created": "建立了",
        "changed": "更改",
        "deletepage": "刪除頁面",
        "deletecomment": "理由:",
        "deleteotherreason": "其它/附加的理由:",
        "deletereasonotherlist": "其它理由",
-       "deletereason-dropdown": "* 常見刪除理由\n** 濫發電郵\n** 破壞\n** 侵犯版權\n** 作者請求\n** 損壞重定向頁",
+       "deletereason-dropdown": "* 常見刪除理由\n** 濫發電郵\n** 破壞\n** 侵犯版權\n** 作者請求\n** 損壞的重新導向頁面",
        "delete-edit-reasonlist": "編輯刪除理由",
        "delete-toobig": "這個頁面有一個十分大量的編輯歷史,超過$1次修訂。刪除此類頁面的動作已經被限制,以防止在{{SITENAME}}上的意外擾亂。",
        "delete-warning-toobig": "這個頁面有一個十分大量的編輯歷史,超過$1次修訂。刪除它可能會擾亂{{SITENAME}}的資料庫操作;在繼續此動作前請小心。",
        "rollbacklinkcount-morethan": "回退多過 $1 次{{PLURAL:$1|編輯}}",
        "rollbackfailed": "無法回退",
        "cantrollback": "無法恢復編輯;最後的貢獻者是本篇的唯一作者。",
-       "alreadyrolled": "無法回退由[[User:$2|$2]]([[User talk:$2|討論]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]在[[:$1]]上的編輯;其他人已經編輯或者回退了該頁。\n\n該頁最後的編輯者是[[User:$3|$3]]([[User talk:$3|討論]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])。",
+       "alreadyrolled": "無法還原由 [[User:$2|$2]] ([[User talk:$2|對話]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]] 所作的最後一次編輯 [[:$1]],已有其他人編輯或還原了該頁面。\n\n最後一次編輯該頁面的使用者是 [[User:$3|$3]] ([[User talk:$3|對話]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])。",
        "editcomment": "編輯摘要: \"''$1''\"。",
-       "revertpage": "已恢復由[[Special:Contributions/$2|$2]]([[User talk:$2|對話]])的編輯至[[User:$1|$1]]的最後一個修訂版本",
+       "revertpage": "已還原由 [[Special:Contributions/$2|$2]] ([[User talk:$2|對話]]) 編輯的版本為 [[User:$1|$1]] 所做的最後一個修訂版本",
        "revertpage-nouser": "已由隱藏的使用者恢復編輯到上個{{GENDER:$1|[[User:$1|$1]]}}的修訂版本",
        "rollback-success": "已恢復 $1 的編輯;\n更變更回 $2 的最後修訂版本。",
        "sessionfailure-title": "登入資訊失敗",
        "protect_expiry_old": "終止時間已過去。",
        "protect-unchain-permissions": "解除鎖定更多的保護選項",
        "protect-text": "{{GENDER:|你|妳|你}}可以在這裡瀏覽和修改對頁面'''$1'''的保護級別。",
-       "protect-locked-blocked": "您不能在被查封時更改保護級別。\n以下是'''$1'''現時的保護級別:",
+       "protect-locked-blocked": "您不能在被封鎖期間更改保護級別。\n以下為 <strong>$1</strong> 頁面目前的設定:",
        "protect-locked-dblock": "在資料庫鎖定時無法更改保護級別。\n以下是'''$1'''現時的保護級別:",
        "protect-locked-access": "您的賬戶權限不能修改保護級別。\n以下是'''$1'''現時的保護級別:",
        "protect-cascadeon": "以下$1個頁面包含着本頁面的同時,啟動了連鎖保護,因此本頁面目前也被保護。您可以設定本頁面的保護級別,但這並不會對連鎖保護有所影響。",
-       "protect-default": "容許æ\89\80æ\9c\89ç\94¨æ\88",
+       "protect-default": "å\85\81許æ\89\80æ\9c\89使ç\94¨è\80\85",
        "protect-fallback": "僅允許有「$1」權限的用戶",
-       "protect-level-autoconfirmed": "僅允許自動確認使用者",
+       "protect-level-autoconfirmed": "僅允許已自動確認的使用者",
        "protect-level-sysop": "僅允許管理員",
        "protect-summary-desc": "[$1=$2]($3)",
        "protect-summary-cascade": "連鎖",
        "restriction-level-sysop": "全保護",
        "restriction-level-autoconfirmed": "半保護",
        "restriction-level-all": "任何級別",
-       "undelete": "æ\81¢å¾©è¢«å\88ª頁面",
+       "undelete": "檢è¦\96å·²å\88ªé\99¤ç\9a\84頁面",
        "undeletepage": "檢視與還原已刪除的頁面",
        "undeletepagetitle": "'''以下包含[[:$1]]的已刪除之修訂版本'''。",
        "viewdeletedpage": "檢視已刪除的頁面",
        "undeleterevisions": "$1版本存檔",
        "undeletehistory": "如果您恢復了該頁面,所有版本都會被恢復到修訂歷史中。\n如果本頁刪除後有一個同名的新頁面建立,被恢復的版本將會出現在先前的歷史中。",
        "undeleterevdel": "如果把最新修訂部份刪除,反刪除便無法進行。如果遇到這種情況,您必須反選或反隱藏最新已刪除的修訂。",
-       "undeletehistorynoadmin": "這個頁面已經被刪除,刪除原因顯示在下方編輯摘要中。被刪除前的所有修訂版本,連同刪除前貢獻用戶等等細節只有管理員可以看見。",
+       "undeletehistorynoadmin": "此頁面已經被刪除。\n以下為刪除原因的摘要並包含刪除之前有那些使用者曾編輯此頁面。\n只有管理者可以檢視實際被刪除的修訂內容。",
        "undelete-revision": "$1由$3(在$4 $5)所編寫的已刪除修訂版本:",
        "undeleterevision-missing": "此版本的內容不正確或已經遺失。可能連結錯誤、被移除或已經被恢復。",
        "undelete-nodiff": "找不到先前的修訂版本。",
        "invert": "反向選擇",
        "tooltip-invert": "選中此複選框以隱藏選定命名空間內頁面更改(以及相關的命名空間,如果選中)",
        "namespace_association": "關聯名字空間",
-       "tooltip-namespace_association": "選中此框可包括與選定名字空間相關的討論或主題命名空間",
-       "blanknamespace": "(主)",
+       "tooltip-namespace_association": "勾選此方塊會包含已選擇命名空間相關的對話或主題命名空間",
+       "blanknamespace": "(主要)",
        "contributions": "{{GENDER:$1|用戶}}貢獻",
        "contributions-title": "$1 的使用者貢獻",
        "mycontris": "我的貢獻",
        "contribsub2": "{{GENDER:$3|$1}} 的貢獻 ($2)",
-       "contributions-userdoesnotexist": "用戶賬戶「$1」未曾註冊。",
+       "contributions-userdoesnotexist": "使用者帳號 \"$1\" 尚未註冊。",
        "nocontribs": "沒有找到符合特徵的更改。",
        "uctop": "(最新修改)",
        "month": "截止月份:",
        "sp-contributions-newbies": "只顯示新建立之用戶的貢獻",
        "sp-contributions-newbies-sub": "新手",
        "sp-contributions-newbies-title": "新手的用戶貢獻",
-       "sp-contributions-blocklog": "封記錄",
+       "sp-contributions-blocklog": "封記錄",
        "sp-contributions-suppresslog": "已隱藏的用戶貢獻",
        "sp-contributions-deleted": "已刪除的用戶貢獻",
        "sp-contributions-uploads": "上傳",
        "sp-contributions-logs": "日誌",
        "sp-contributions-talk": "對話",
-       "sp-contributions-userrights": "用戶權限管理",
-       "sp-contributions-blocked-notice": "這位用戶現時正在被封鎖中。\n最近的封鎖日誌項目在下面提供以便參考:",
-       "sp-contributions-blocked-notice-anon": "這個IP地址現時正在被封鎖中。\n最近的封鎖日誌項目在下面提供以便參考:",
+       "sp-contributions-userrights": "使用者權限管理",
+       "sp-contributions-blocked-notice": "此使用者目前已被封鎖。\n以下為最近的封鎖紀錄以供參考:",
+       "sp-contributions-blocked-notice-anon": "此 IP 位址目前已被封鎖。\n以下為最近的封鎖紀錄以供參考:",
        "sp-contributions-search": "搜尋貢獻記錄",
        "sp-contributions-username": "IP位址或用戶名稱:",
        "sp-contributions-toponly": "只顯示最新修訂版本的編輯",
        "whatlinkshere-prev": "前$1個",
        "whatlinkshere-next": "後$1個",
        "whatlinkshere-links": "← 連入",
-       "whatlinkshere-hideredirs": "$1重定向",
+       "whatlinkshere-hideredirs": "重新導向 $1 次",
        "whatlinkshere-hidetrans": "$1嵌入",
        "whatlinkshere-hidelinks": "$1連結",
        "whatlinkshere-hideimages": "$1檔案連結",
        "whatlinkshere-filters": "搜尋",
        "autoblockid": "自動查封 #$1",
-       "block": "封使用者",
-       "unblock": "解使用者",
-       "blockip": "封使用者",
-       "blockip-legend": "封使用者",
-       "blockiptext": "用下面的表單來禁止來自某一特定IP地址的修改許可權。\n只有在為防止破壞,及符合[[{{MediaWiki:Policy-url}}|守則]]的情況下才可採取此行動。\n請在下面輸入一個具體的理由(例如引述一個被破壞的頁面)。",
+       "block": "封使用者",
+       "unblock": "解除封鎖使用者",
+       "blockip": "封使用者",
+       "blockip-legend": "封使用者",
+       "blockiptext": "填寫以下單據可封鎖特定 IP 位置或使用者名稱的存取權限。\n這個動作應用來避免破壞行為,可根據 [[{{MediaWiki:Policy-url}}|管理政策]]。\n請在下方填寫一個具體的原因 (例如:引述一段破壞頁面的事實)。",
        "ipadressorusername": "IP地址或用戶名:",
        "ipbexpiry": "期限:",
        "ipbreason": "原因:",
-       "ipbreason-dropdown": "*一般的封禁理由\n** 屢次增加不實資料\n** 刪除頁面內容\n** 外部連結廣告\n** 在頁面中增加無意義文字\n** 無禮的行為、攻擊/騷擾別人\n** 濫用多個賬號\n** 不能接受的用戶名",
-       "ipb-hardblock": "é\98²æ­¢å·²ç\99»å\85¥ç\94¨æ\88¶å¾\9e該IPå\9c°å\9d\80編輯",
+       "ipbreason-dropdown": "*常見的封鎖原因\n** 填寫不實資訊\n** 刪除頁面內容\n** 散佈外部廣告連結\n** 在頁面填寫無意義文字\n** 無禮的行為、攻擊/騷擾別人\n** 濫用多個帳號\n** 使用不受歡迎的使用者名稱",
+       "ipb-hardblock": "é\81¿å\85\8d使ç\94¨æ­¤ IP ä½\8då\9d\80ç\99»å\85¥ç\9a\84使ç\94¨è\80\85編輯",
        "ipbcreateaccount": "阻止創建新賬號",
        "ipbemailban": "阻止用戶傳送電郵",
-       "ipbenableautoblock": "自動查封此用戶最後所用的IP位址,以及後來試圖編輯所用的所有位址",
+       "ipbenableautoblock": "自動封鎖此使用者最後使用的 IP 位置,以及所有之後嘗試編輯使用的 IP 位址",
        "ipbsubmit": "查封該地址",
        "ipbother": "其它時間:",
        "ipboptions": "2小時:2 hours,1天:1 day,3天:3 days,1周:1 week,2周:2 weeks,1個月:1 month,3個月:3 months,6個月:6 months,1年:1 year,無限期:infinite",
        "ipbhidename": "在編輯及列表中隱藏用戶名",
-       "ipbwatchuser": "監視這位用戶的用戶頁面以及其對話頁面",
-       "ipb-disableusertalk": "禁止被封禁用戶編輯自己的討論頁",
+       "ipbwatchuser": "監視這位使用者的使用者頁面以及其對話頁面",
+       "ipb-disableusertalk": "避免在封鎖此使用者的期間編輯自己的對話頁面",
        "ipb-change-block": "利用這些設定重新封鎖用戶",
-       "ipb-confirm": "確認封",
+       "ipb-confirm": "確認封",
        "badipaddress": "無效IP地址",
-       "blockipsuccesssub": "查封成功",
-       "blockipsuccesstext": "[[Special:Contributions/$1|$1]]已經被查封。<br />\n參看[[Special:BlockList|被封IP地址列表]]以覆審查封。",
-       "ipb-blockingself": "你要封禁自己!確認要這樣做嗎?",
-       "ipb-confirmhideuser": "你要封禁用戶並隱藏其用戶名,這會隱藏在所有列表及日誌中涉及此用戶之用戶名。你確定要這樣做嗎?",
+       "blockipsuccesssub": "封鎖成功",
+       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] 已經被封鎖。<br />\n請參考 [[Special:BlockList|封鎖清單]] 以檢查目前的封鎖。",
+       "ipb-blockingself": "您要封鎖自己!您確定要這樣做嗎?",
+       "ipb-confirmhideuser": "您要封鎖一位使用者並且 \"隱藏\" 該使用者,這會隱藏所有出現在清單及記錄中的使用者名稱。\n你確定要這樣做?",
        "ipb-confirmaction": "如果您確信這樣做,請檢查底部的「{{int:ipb-confirm}}」部分。",
-       "ipb-edit-dropdown": "編輯查封原因",
-       "ipb-unblock-addr": "解$1",
+       "ipb-edit-dropdown": "編輯封鎖原因",
+       "ipb-unblock-addr": "解除封鎖 $1",
        "ipb-unblock": "解除禁封用戶名或IP地址",
-       "ipb-blocklist": "檢è¦\96ç\8f¾æ\9c\89ç\9a\84å°\81ç¦\81",
+       "ipb-blocklist": "檢è¦\96ç\9b®å\89\8dç\9a\84å°\81é\8e\96",
        "ipb-blocklist-contribs": "$1的貢獻",
-       "unblockip": "解封用戶",
-       "unblockiptext": "用下面的表單來恢復先前被查封的IP位址或用戶的寫權限。",
+       "unblockip": "解除封鎖使用者",
+       "unblockiptext": "填寫以下單據以取消先前封鎖的 IP 位址或使用者名稱。",
        "ipusubmit": "移除這個封鎖",
-       "unblocked": "[[User:$1|$1]] 的封已經解除。",
+       "unblocked": "[[User:$1|$1]] 的封已經解除。",
        "unblocked-range": "$1已被解封",
-       "unblocked-id": "å°\81ç¦\81 $1 å·²ç¶\93被移é\99¤",
-       "blocklist": "å°\81ç¦\81ç\94¨æ\88",
-       "ipblocklist": "被封用戶列表",
-       "ipblocklist-legend": "搜尋一位已經被查封的用戶",
-       "blocklist-userblocks": "隱藏用戶封禁",
-       "blocklist-tempblocks": "隱藏臨時封禁",
-       "blocklist-addressblocks": "隱藏單一IP封禁",
-       "blocklist-rangeblocks": "隱藏IP段封禁",
+       "unblocked-id": "å·²ç¶\93移é\99¤ $1 ç\9a\84å°\81é\8e\96ã\80\82",
+       "blocklist": "å·²å°\81é\8e\96ç\9a\84使ç\94¨è\80\85",
+       "ipblocklist": "已封鎖的使用者",
+       "ipblocklist-legend": "搜尋已封鎖的使用者",
+       "blocklist-userblocks": "隱藏帳號封鎖",
+       "blocklist-tempblocks": "隱藏暫時封鎖",
+       "blocklist-addressblocks": "隱藏單一 IP 封鎖",
+       "blocklist-rangeblocks": "隱藏 IP 範圍封鎖",
        "blocklist-timestamp": "時間",
        "blocklist-target": "目標",
-       "blocklist-expiry": "過期",
-       "blocklist-by": "封管理員",
-       "blocklist-params": "封參數",
+       "blocklist-expiry": "期限",
+       "blocklist-by": "封鎖的管理員",
+       "blocklist-params": "封參數",
        "blocklist-reason": "原因",
        "ipblocklist-submit": "搜尋",
        "ipblocklist-localblock": "本地封鎖",
        "noautoblockblock": "禁用自動查封",
        "createaccountblock": "禁止建立帳號",
        "emailblock": "禁止電子郵件",
-       "blocklist-nousertalk": "ç¦\81止編輯è\87ªå·±ç\9a\84ç\94¨æ\88¶è¨\8eè«\96é \81",
-       "ipblocklist-empty": "查封列表為空。",
-       "ipblocklist-no-results": "æ\89\80è¦\81æ±\82ç\9a\84IPå\9c°å\9d\80\94¨æ\88¶å\90\8dæ²\92æ\9c\89被æ\9f¥å°\81。",
+       "blocklist-nousertalk": "ç\84¡æ³\95編輯è\87ªå·±ç\9a\84å°\8d話é \81é\9d¢",
+       "ipblocklist-empty": "封鎖清單無任何資訊。",
+       "ipblocklist-no-results": "æ\8c\87å®\9aç\9a\84 IP ä½\8då\9d\80æ\88\96使ç\94¨è\80\85å\90\8d稱å°\9aæ\9cªè¢«å°\81é\8e\96。",
        "blocklink": "查封",
-       "unblocklink": "解除封",
-       "change-blocklink": "變更封",
+       "unblocklink": "解除封",
+       "change-blocklink": "變更封",
        "contribslink": "貢獻",
        "emaillink": "傳送電郵",
-       "autoblocker": "因為您與「[[User:$1|$1]]」共享同一IP位址而被自動封禁。\n$1被封禁的理由是「$2」",
+       "autoblocker": "您的 IP 位址因最近被 [[User:$1|$1]] 使用過而被自動封鎖。\n封鎖 $1 的原因為 \"$2\"",
        "blocklogpage": "查封日誌",
-       "blocklog-showlog": "這位用戶曾經被封鎖過。在下列提供封鎖記錄以便參考:",
+       "blocklog-showlog": "此使用者先前被封鎖過。\n以下為封鎖紀錄以供參考:",
        "blocklog-showsuppresslog": "這位用戶曾經被封鎖和隱藏過。在下列提供廢止記錄以便參考:",
-       "blocklogentry": "å°\81ç¦\81[[$1]]ï¼\8cå\88°æ\9c\9fæ\99\82é\96\93ç\88²$2$3",
-       "reblock-logentry": "更改[[$1]]的封禁設置,到期時間爲$2$3",
-       "blocklogtext": "這是關於用戶封禁和解除封禁操作的記錄。被自動封禁的IP地址沒有被列出。請參閱[[Special:BlockList|被查封的IP地址和用戶列表]]。",
+       "blocklogentry": "å·²å°\81é\8e\96 [[$1]] ç\9a\84æ\9c\9fé\99\90è\87³ $2 $3",
+       "reblock-logentry": "更改 [[$1]] 的封鎖期限至 $2 $3",
+       "blocklogtext": "此為使用者的封鎖及取消封鎖記錄。\n不包自動封鎖的 IP 位址。\n請參考 [[Special:BlockList|封鎖清單]] 以查看目前的封鎖。",
        "unblocklogentry": "已解封 $1",
-       "block-log-flags-anononly": "僅限匿名用戶",
+       "block-log-flags-anononly": "僅限匿名使用者",
        "block-log-flags-nocreate": "建立帳號已禁用",
-       "block-log-flags-noautoblock": "停用自動封",
+       "block-log-flags-noautoblock": "停用自動封",
        "block-log-flags-noemail": "禁止電子郵件",
-       "block-log-flags-nousertalk": "ç¦\81止編輯è\87ªå·±ç\9a\84ç\94¨æ\88¶è¨\8eè«\96é \81",
+       "block-log-flags-nousertalk": "ç\84¡æ³\95編輯è\87ªå·±ç\9a\84å°\8d話é \81é\9d¢",
        "block-log-flags-angry-autoblock": "加強自動封鎖已啟用",
        "block-log-flags-hiddenname": "隱藏用戶名稱",
-       "range_block_disabled": "只有管理員才能創建禁止查封的範圍。",
+       "range_block_disabled": "管理員可建立範圍封鎖的權限以被關閉。",
        "ipb_expiry_invalid": "無效的終止時間。",
-       "ipb_expiry_temp": "隱藏用戶名封鎖必須是永久性的。",
+       "ipb_expiry_temp": "隱藏使用者名稱的封鎖不可設定期限。",
        "ipb_hide_invalid": "不能抑制此賬戶;它擁有多於$1次編輯。",
-       "ipb_already_blocked": "已經封鎖「$1」",
+       "ipb_already_blocked": "已經封鎖 \"$1\"。",
        "ipb-needreblock": "$1已經被封鎖。您是否想更改這個設定?",
        "ipb-otherblocks-header": "其他{{PLURAL:$1|封鎖}}",
-       "unblock-hideuser": "由於其用戶名已隱藏,你無法解封這個用戶。",
-       "ipb_cant_unblock": "錯誤: 找不到查封ID$1。可能已經解除封禁。",
-       "ipb_blocked_as_range": "錯誤: 該IP $1 無直接查封,不可以解除封禁。但是它是在 $2 的查封範圍之內,該段範圍是可以解除封禁的。",
+       "unblock-hideuser": "由於此使用者名稱已被設為隱藏,您無法解除封鎖這個使用者。",
+       "ipb_cant_unblock": "錯誤:查無封鎖 ID $1,可能已被解除封鎖。",
+       "ipb_blocked_as_range": "錯誤:IP 位址 $1 並不是直接被封鎖,因此無法直接解除封鎖。\n此 IP 位址在 $2 的封鎖範圍之中,您可以解決此範圍的封鎖。",
        "ip_range_invalid": "無效的IP範圍。",
-       "ip_range_toolarge": "大於 /$1 的封鎖範圍是不容許的。",
+       "ip_range_toolarge": "不允許封鎖範圍大於 /$1。",
        "proxyblocker": "代理封鎖器",
-       "proxyblockreason": "您的IP位址是一個開放的代理,它已經被封鎖。請聯繫您的網際網路服務提供商或技術支援者並告知告知他們該嚴重的安全問題。",
+       "proxyblockreason": "因您的 IP 位址是開放代理伺服器,已被封鎖。\n請聯繫您的網路服務供應商或您所在組織的技術支援,告知他們此嚴重的安全性問題。",
        "sorbsreason": "您的IP位址在{{SITENAME}}中被 DNSBL列為屬於開放代理服務器。",
        "sorbs_create_account_reason": "由於您的IP位址在{{SITENAME}}中被 DNSBL列為屬於開放代理服務器,所以您無法建立賬號。",
-       "xffblockreason": "您或您使用的代理伺服器X-Forwarded-For字段所包含的一個IP地址已被封禁。原始封禁理由:$1",
-       "cant-see-hidden-user": "您現正嘗試封鎖的用戶已經被封鎖或隱藏。\n您現在沒有隱藏用戶的權限,您不可以檢視或者編輯這位用戶的封鎖。",
-       "ipbblocked": "您無法封禁或解封其他用戶,因為您自己已被封禁",
-       "ipbnounblockself": "您不容許自我解除封禁",
+       "xffblockreason": "您的 IP 位址使用 X-Forwarded-For 標頭,您或您使用的代理伺服器已被封鎖。\n封鎖的原因為:$1",
+       "cant-see-hidden-user": "您欲封鎖的使用者已經被封鎖並且隱藏。\n您沒有隱藏使用者的權限,您無法檢視或編輯該使用者的封鎖狀態。",
+       "ipbblocked": "因您已被封鎖,故無法封鎖或解除封鎖其他使用者。",
+       "ipbnounblockself": "不允許解除封鎖自己。",
        "lockdb": "禁止更改資料庫",
        "unlockdb": "開放更改資料庫",
-       "lockdbtext": "鎖住資料庫將禁止所有用戶進行編輯頁面、更改參數、編輯監視列表以及其他需要更改資料庫的操作。\n請確認您的決定,並且保證您在維護工作結束後會重新開放資料庫。",
+       "lockdbtext": "鎖定資料庫將會中止所有使用者編輯頁面、更改偏好設定、編輯監視清單與其他需要更動到資料庫的操作。\n請確認您要做的動作,並在維護作業結束時解除資料庫的鎖定。",
        "unlockdbtext": "開放資料庫將會恢復所有用戶進行編輯頁面、修改參數、編輯監視列表以及其他需要更改資料庫的操作。\n請確認您的決定。",
        "lockconfirm": "是的,我確實想要封鎖資料庫。",
        "unlockconfirm": "是的,我確實想要開放資料庫。",
        "lockedbyandtime": "在$2的$3由$1",
        "move-page": "移動$1",
        "move-page-legend": "移動頁面",
-       "movepagetext": "用下面的表單來重新命名一個頁面,並將其修訂歷史同時移動到新頁面。\n老的頁面將成為新頁面的重定向頁。\n您可以自動地更新指到原標題的重定向。\n如果您選擇不去做的話,請檢查[[Special:DoubleRedirects|雙重]]或[[Special:BrokenRedirects|損壞重定向]]連結。\n您應當負責確定所有連結依然會連到指定的頁面。\n\n注意如果新頁面已經有內容的話,頁面將'''不會'''被移動,除非新頁面是重定向頁,而且沒有修訂歷史。\n這意味著您再必要時可以在移動到新頁面後再移回老的頁面,同時您也無法覆蓋現有頁面。\n\n'''警告!'''\n對一個經常被訪問的頁面而言這可能是一個重大與唐突的更改;\n請在行動前先了解其所可能帶來的後果。",
-       "movepagetext-noredirectfixer": "用下面的表單來重命名一個頁面,並將其修訂歷史同時移動到新頁面。\n老的頁面將成為新頁面的重定向頁。\n請檢查[[Special:DoubleRedirects|雙重重定向]]或[[Special:BrokenRedirects|損壞重定向]]連結。\n您應當負責確定所有連結依然會連到指定的頁面。\n\n注意如果新頁面已經有內容的話,頁面將'''不會'''被移動,\n除非新頁面無內容或是重定向頁,而且沒有修訂歷史。\n這意味著您再必要時可以在移動到新頁面後再移回老的頁面,\n同時您也無法覆蓋現有頁面。\n\n'''警告!'''\n對一個經常被訪問的頁面而言這可能是一個重大與唐突的更改;\n請在行動前先確定您了解其所可能帶來的後果。",
-       "movepagetalktext": "有關的對話頁(如果有的話)將被自動與該頁面一起移動,'''除非''':\n*您將頁面移動到不同的名字空間;\n*新頁面已經有一個包含內容的對話頁,或者\n*您不勾選下面的覆選框。\n\n在這些情況下,您在必要時必須手工移動或合併頁面。",
+       "movepagetext": "使用以下表單來重新命名一個頁面的名稱,並將所有頁面的歷史記錄一併移至新的頁面,\n舊標題的頁面將會變成重新導向頁面,導向至使用新標題的頁面。\n您可以選擇自動更新將所有導向至舊頁面的重新導向頁面改導向到新的頁面,\n若您選擇不使用自動更新,請記得檢查 [[Special:DoubleRedirects|雙重導向頁面]] 或 [[Special:BrokenRedirects|中斷的導向頁面]],\n您有責任讓連結維持有效並且能夠繼續連結到正確的新頁面。\n\n請注意,若新的頁面名稱已經被使用,則此頁面將<strong>不會</strong>被移動,除非新名稱存在的是重新導向頁面且沒有任何的編修記錄。\n這個意思指的是,您可將因失誤而移動至其他名稱的頁面復原為舊的名稱,並且您不可以覆蓋任何已存在的頁面。\n\n<strong>警告!</strong>\n這個動作對受歡迎的頁面可能是一個重大與唐突的更改;\n請在行動前確認您已了解可能帶來後果。",
+       "movepagetext-noredirectfixer": "使用以下表單來重新命名一個頁面的名稱,並將所有頁面的歷史記錄一併移至新的頁面,\n舊標題的頁面將會變成重新導向頁面,導向至使用新標題的頁面。\n請記得檢查 [[Special:DoubleRedirects|雙重導向頁面]] 或 [[Special:BrokenRedirects|中斷的導向頁面]],\n您有責任讓連結維持有效並且能夠繼續連結到正確的新頁面。\n\n請注意,若新的頁面名稱已經被使用,則此頁面將<strong>不會</strong>被移動,除非新名稱存在的是重新導向頁面且沒有任何的編修記錄。\n這個意思指的是,您可將因失誤而移動至其他名稱的頁面復原為舊的名稱,並且您不可以覆蓋任何已存在的頁面。\n\n<strong>警告!</strong>\n這個動作對受歡迎的頁面可能是一個重大與唐突的更改;\n請在行動前確認您已了解可能帶來後果。",
+       "movepagetalktext": "相關的的對話頁面 (如果有的話) 會自動與該頁面一起移動,<strong>除非:</strong>\n*新的名稱已有一個存在的對話頁面,或\n*您未勾選此核選方塊。\n\n在上述情況下,若有必要您必須手動移動或合併已存在的頁面。",
        "movearticle": "移動頁面:",
        "moveuserpage-warning": "'''警告:'''您將會移動一個用戶頁面。請留意該頁面在移動後該用戶的名字是''不會''變更的。",
        "movenologintext": "您必須是一名登記用戶並且[[Special:UserLogin|登入]]\n後才可移動一個頁面。",
        "movepage-moved-noredirect": "已經壓制創建重新定向。",
        "articleexists": "該名字的頁面已經存在,或者您選擇的名字無效。請再選一個名字。",
        "cantmove-titleprotected": "您不可以移動這個頁面到這個位置,因為該新標題已經被保護以防止建立。",
-       "movetalk": "移動關聯的對話頁",
+       "movetalk": "移動相關的對話頁面",
        "move-subpages": "移動子頁面(上至$1頁)",
-       "move-talk-subpages": "移å\8b\95å­\90å°\8d話é \81é\9d¢ï¼\88ä¸\8aè\87³$1é \81ï¼\89",
+       "move-talk-subpages": "移å\8b\95å°\8d話é \81é\9d¢ç\9a\84å­\90é \81é\9d¢ (å\85± $1 é \81)",
        "movepage-page-exists": "頁面 $1 已經存在,不可以自動地覆寫。",
        "movepage-page-moved": "頁面 $1 已經移動到 $2。",
        "movepage-page-unmoved": "頁面 $1 不可以移動到 $2。",
        "nonfile-cannot-move-to-file": "不可以移動非檔案到檔案名字空間",
        "imagetypemismatch": "該新副檔名不匹配它的類型",
        "imageinvalidfilename": "目標檔案名稱是無效的",
-       "fix-double-redirects": "更新指到原先標題的任何重新定向",
+       "fix-double-redirects": "更新導向到原標題的任何重新導向頁面",
        "move-leave-redirect": "留下重新定向",
-       "protectedpagemovewarning": "'''警告:'''這個頁面已經被保護,只有擁有管理員權限的用戶才可以移動它。\n最近的日誌在下面提供以便參考:",
-       "semiprotectedpagemovewarning": "'''注意:'''這個頁面已經被保護,只有已經註冊的用戶才可以移動它。\n最近的日誌在下面提供以便參考:",
+       "protectedpagemovewarning": "<strong>警告:</strong>本頁已經被保護,只有擁有管理員權限的使用者才可移動。\n以下提供最近的日誌以便參考:",
+       "semiprotectedpagemovewarning": "<strong>注意:</strong>本頁已經被保護,只有已註冊的使用者才可移動。\n以下提供最近的日誌以便參考:",
        "move-over-sharedrepo": "== 檔案已存在 ==\n[[:$1]]已於共享資源存在,將檔案移動到此標題會覆蓋共享資源中的檔案。",
        "file-exists-sharedrepo": "同名檔案已於共享資源存在。\n請選擇另一個檔案名。",
        "export": "匯出頁面",
        "allmessages-filter-translate": "翻譯",
        "thumbnail-more": "放大",
        "filemissing": "無法找到檔案",
-       "thumbnail_error": "å\89µå»º縮圖錯誤: $1",
+       "thumbnail_error": "建ç«\8b縮圖錯誤: $1",
        "thumbnail_error_remote": "$1發出的電子郵件:\n$2",
        "djvu_page_error": "DjVu頁面超出範圍",
        "djvu_no_xml": "無法在DjVu檔案中擷取XML",
        "javascripttest-qunit-heading": "MediaWiki JavaScript QUnit 測試套件",
        "tooltip-pt-userpage": "您的使用者頁面",
        "tooltip-pt-anonuserpage": "您編輯本站所用IP的對應用戶頁",
-       "tooltip-pt-mytalk": "您的對話頁",
+       "tooltip-pt-mytalk": "您的對話頁",
        "tooltip-pt-anontalk": "對於來自此IP地址編輯的對話",
        "tooltip-pt-preferences": "您的偏好設定",
        "tooltip-pt-watchlist": "您所監視頁面的變更列表",
        "tooltip-p-logo": "訪問首頁",
        "tooltip-n-mainpage": "訪問首頁",
        "tooltip-n-mainpage-description": "訪問首頁",
-       "tooltip-n-portal": "關於本計劃、您可以做什麼、在哪裡可以找到",
+       "tooltip-n-portal": "關於本專案、您可以做什麼、哪裡可以找到事情",
        "tooltip-n-currentevents": "提供目前新聞事件的背景資料",
        "tooltip-n-recentchanges": "列出此維基中的最近修改",
        "tooltip-n-randompage": "隨機載入一個頁面",
        "tooltip-t-permalink": "這個頁面修訂版本的永久連結",
        "tooltip-ca-nstab-main": "檢視頁面內容",
        "tooltip-ca-nstab-user": "檢視使用者頁面",
-       "tooltip-ca-nstab-media": "檢è¦\96å¤\9aåª\92é«\94æª\94æ¡\88è³\87è¨\8a頁面",
+       "tooltip-ca-nstab-media": "檢è¦\96åª\92é«\94頁面",
        "tooltip-ca-nstab-special": "本頁面會隨著資料庫的數據即時更新,任何人均不能直接編輯",
-       "tooltip-ca-nstab-project": "檢視計劃頁面",
+       "tooltip-ca-nstab-project": "檢視專案頁面",
        "tooltip-ca-nstab-image": "檢視檔案頁面",
        "tooltip-ca-nstab-mediawiki": "檢視系統資訊",
        "tooltip-ca-nstab-template": "檢視模板",
-       "tooltip-ca-nstab-help": "檢視幫助頁面",
+       "tooltip-ca-nstab-help": "檢視說明頁面",
        "tooltip-ca-nstab-category": "檢視分類頁面",
        "tooltip-minoredit": "標記為小修改",
        "tooltip-save": "保存您的修改",
        "tooltip-upload": "開始上傳",
        "tooltip-rollback": "按「復原」恢復上一位貢獻者對本頁面的編輯",
        "tooltip-undo": "「復原」可以在編輯模式上開啟編輯表格以便恢復。它容許在摘要中加入原因。",
-       "tooltip-preferences-save": "儲存使用偏好",
+       "tooltip-preferences-save": "儲存偏好設定",
        "tooltip-summary": "輸入一個簡短的摘要",
        "interlanguage-link-title": "$1 – $2",
        "common.css": "/* 此處的 CSS 將應用於所有的面板 */",
        "monobook.js": "/* 此處的JavaScript將載入於使用Monobook面板的用戶 */",
        "modern.js": "/* 此處的JavaScript將載入於使用Modern面板的用戶 */",
        "vector.js": "/* 此處的JavaScript將載入於使用Vector面板的用戶 */",
-       "anonymous": "{{SITENAME}}的匿名{{PLURAL:$1|用戶}}",
+       "anonymous": "{{SITENAME}} 的匿名{{PLURAL:$1|使用者}}",
        "siteuser": "{{SITENAME}}用戶$1",
        "anonuser": "{{SITENAME}}匿名用戶$1",
        "lastmodifiedatby": "此頁由 $3 於 $1 $2 的最後更改。",
        "othercontribs": "在$1的工作基礎上。",
        "others": "其他",
-       "siteusers": "{{SITENAME}}{{PLURAL:$2|用戶}}$1",
-       "anonusers": "{{SITENAME}}匿名{{PLURAL:$2|用戶}}$1",
+       "siteusers": "{{SITENAME}} {{PLURAL:$2|使用者}}$1",
+       "anonusers": "{{SITENAME}} 匿名{{PLURAL:$2|使用者}}$1",
        "creditspage": "頁面致謝",
        "nocredits": "該頁沒有致謝名單訊息。",
        "spamprotectiontitle": "垃圾過濾器",
-       "spamprotectiontext": "您要保存的文字被垃圾過濾器阻止。\n這可能是由於一個連往匹配黑名單的外部站點的連結引起的。",
+       "spamprotectiontext": "您欲儲存的文字內容已被垃圾過濾器封鎖,\n可能因您的內容包含了已封鎖的外部連結。",
        "spamprotectionmatch": "觸發了我們的垃圾過濾器的文本如下:$1",
        "spambot_username": "MediaWiki 廣告清除",
        "spam_reverting": "恢復到不包含連結至$1的最近修訂版本",
        "simpleantispam-label": "反濫發電郵檢查。\n'''不要'''加入這個!",
        "pageinfo-title": "「$1」的信息",
        "pageinfo-not-current": "抱歉,無法提供之前修訂版本的資訊。",
-       "pageinfo-header-basic": "基本資",
+       "pageinfo-header-basic": "基本資",
        "pageinfo-header-edits": "編輯歷史",
        "pageinfo-header-restrictions": "保護頁面",
        "pageinfo-header-properties": "頁面屬性",
        "pageinfo-views": "觀看次數",
        "pageinfo-watchers": "頁面監視者數目",
        "pageinfo-few-watchers": "少於$1名監視者",
-       "pageinfo-redirects-name": "重定向到此頁的數字",
+       "pageinfo-redirects-name": "重新導向至此頁面的數量",
        "pageinfo-subpages-name": "此頁面的子頁面",
-       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|重定向}}; $3 {{PLURAL:$3|非重定向}})",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|筆重新導向頁面}}; $3 {{PLURAL:$3|筆非重新導向頁面}})",
        "pageinfo-firstuser": "頁面的建立者",
        "pageinfo-firsttime": "頁面創建日期",
        "pageinfo-lastuser": "最近編輯者",
        "pageinfo-templates": "使用的模板($1)",
        "pageinfo-transclusions": "使用的頁面($1)",
        "pageinfo-toolboxlink": "頁面資訊",
-       "pageinfo-redirectsto": "重向至",
+       "pageinfo-redirectsto": "重新導向至",
        "pageinfo-redirectsto-info": "資訊",
        "pageinfo-contentpage": "計算為內容頁",
        "pageinfo-contentpage-yes": "是",
        "exif-compressedbitsperpixel": "圖片壓縮模式",
        "exif-pixelydimension": "圖片寬度",
        "exif-pixelxdimension": "圖片高度",
-       "exif-usercomment": "用戶註釋",
+       "exif-usercomment": "使用者評論",
        "exif-relatedsoundfile": "相關的音頻檔案",
        "exif-datetimeoriginal": "數據產生時間",
        "exif-datetimedigitized": "數字化處理時間",
        "exif-urgency-normal": "正常( $1 )",
        "exif-urgency-low": "低( $1 )",
        "exif-urgency-high": "高( $1 )",
-       "exif-urgency-other": "用戶定義( $1 )",
+       "exif-urgency-other": "使用者自訂優先權 ($1)",
        "watchlistall2": "全部",
        "namespacesall": "全部",
        "monthsall": "全部",
        "confirmemail": "確認郵箱位址",
-       "confirmemail_noemail": "您沒有在您的[[Special:Preferences|用戶設定]]裡面輸入一個有效的 email 位址。",
+       "confirmemail_noemail": "您尚未於 [[Special:Preferences|偏好設定]] 輸入一個有效的電子郵件地址。",
        "confirmemail_text": "{{SITENAME}}要求您在使用郵件功能之前驗證您的郵箱位址。\n點擊以下按鈕可向您的郵箱發送一封確認郵件。該郵件包含有一行代碼連結;\n請在您的瀏覽器中加載此連結以確認您的郵箱位址是有效的。",
        "confirmemail_pending": "一個確認碼已經被發送到您的郵箱,您可能需要等幾分鐘才能收到。如果無法收到,請再申請一個新的確認碼。",
        "confirmemail_send": "郵發確認代碼",
        "scarytranscludefailed-httpstatus": "[模板$1讀取失敗:HTTP$2]",
        "scarytranscludetoolong": "[URL 地址太長]",
        "deletedwhileediting": "'''警告:'''此頁在您開始編輯之後已經被刪除﹗",
-       "confirmrecreate": "在您開始編輯這個頁面後,用戶[[User:$1|$1]] ([[User talk:$1|對話]])以下列原因刪除了這個頁面:\n: ''$2''\n請確認在您重新創建頁面前三思。",
-       "confirmrecreate-noreason": "在您開始編輯後,用戶[[User:$1|$1]] ([[User talk:$1|對話]])刪除了這個頁面。請在重新創建頁面前三思。",
+       "confirmrecreate": "在您編輯的同時,使用者 [[User:$1|$1]] ([[User talk:$1|對話]]) 刪除了此頁面,原因為:\n: <em>$2</em>\n請確認您是否真的要重新建立此頁面。",
+       "confirmrecreate-noreason": "在您編輯的同時,使用者 [[User:$1|$1]] ([[User talk:$1|對話]]) 刪除了此頁面,請確認您是否真的要重新建立此頁面。",
        "recreate": "重建",
        "confirm_purge_button": "確定",
        "confirm-purge-top": "要清除此頁面的快取嗎?",
        "table_pager_empty": "沒有結果",
        "autosumm-blank": "清空頁面",
        "autosumm-replace": "以「$1」替換內容",
-       "autoredircomment": "重定向頁面到[[$1]]",
+       "autoredircomment": "重新導向頁面至 [[$1]]",
        "autosumm-new": "以內容「$1」創建新頁面",
        "size-bytes": "$1 位元組",
        "lag-warn-normal": "過去$1秒內的更改未必會在這個清單中顯示。",
        "watchlistedit-raw-done": "您的監視列表已經更新。",
        "watchlistedit-raw-added": "已經加入了$1個標題:",
        "watchlistedit-raw-removed": "已經移除了$1個標題:",
-       "watchlisttools-view": "檢視關更改",
+       "watchlisttools-view": "檢視關更改",
        "watchlisttools-edit": "檢視並編輯監視列表",
        "watchlisttools-raw": "編輯原始監視列表",
-       "signature": "[[{{ns:user}}:$1|$2]]([[{{ns:user_talk}}:$1|討論]])",
+       "signature": "[[{{ns:user}}:$1|$2]]([[{{ns:user_talk}}:$1|對話]])",
        "unknown_extension_tag": "不明的擴展標籤「$1」",
        "duplicate-defaultsort": "警告: 預設的排序鍵「$2」覆蓋先前的預設排序鍵「$1」。",
        "version": "版本",
        "version-entrypoints-header-entrypoint": "入口點",
        "version-entrypoints-header-url": "URL",
        "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath 條目路徑]",
-       "redirect": "重定向檔案、用戶、頁面或修訂ID",
-       "redirect-legend": "重定向到檔案或頁面",
-       "redirect-summary": "此特殊頁面重定向到檔案(請指定檔案名)、頁面(請指定修訂ID或頁面ID)或用戶頁(請指定用戶ID數值)。用法:[[{{#Special:Redirect}}/file/Example.jpg]]、[[{{#Special:Redirect}}/page/64308]]、[[{{#Special:Redirect}}/revision/328429]]或[[{{#Special:Redirect}}/user/101]]。",
+       "redirect": "依檔案、用戶、頁面或修訂 ID 重新導向",
+       "redirect-legend": "重新導向至檔案或頁面",
+       "redirect-summary": "此特殊頁面可重新導向至檔案(指定檔案名稱)、頁面(指定修訂 ID 或頁面 ID)或用戶頁(指定用戶 ID)。用法:[[{{#Special:Redirect}}/file/Example.jpg]]、[[{{#Special:Redirect}}/page/64308]]、[[{{#Special:Redirect}}/revision/328429]] 或 [[{{#Special:Redirect}}/user/101]]。",
        "redirect-submit": "提交",
        "redirect-lookup": "尋找:",
        "redirect-value": "值:",
-       "redirect-user": "用戶ID:",
+       "redirect-user": "使用者 ID",
        "redirect-page": "頁面ID",
        "redirect-revision": "頁面修訂ID",
        "redirect-file": "檔案名稱",
        "specialpages-group-login": "登入/建立新帳號",
        "specialpages-group-changes": "最近更改和日誌",
        "specialpages-group-media": "媒體報告和上傳",
-       "specialpages-group-users": "用戶和權限",
+       "specialpages-group-users": "使用者與權限",
        "specialpages-group-highuse": "高度使用頁面",
        "specialpages-group-pages": "頁面清單",
        "specialpages-group-pagetools": "頁面工具",
        "specialpages-group-wiki": "資料和工具",
-       "specialpages-group-redirects": "é\87\8dæ\96°å®\9aå\90\91特殊頁面",
+       "specialpages-group-redirects": "é\87\8dæ\96°å°\8eå\90\91è\87³特殊頁面",
        "specialpages-group-spam": "反垃圾工具",
        "blankpage": "空白頁面",
        "intentionallyblankpage": "這個頁面是為空白",
        "revdelete-restricted": "已應用限制至操作員",
        "revdelete-unrestricted": "已移除對於操作員的限制",
        "logentry-move-move": "$1移動$3頁面至$4",
-       "logentry-move-move-noredirect": "$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-move-move_redir-noredirect": "$1 透過重新導向移動 $3 頁面至 $4,未留重新導向頁面",
        "logentry-patrol-patrol": "$1{{GENDER:$2|標記}}頁面$3的版本$4為已巡查",
        "logentry-patrol-patrol-auto": "$1自動{{GENDER:$2|標記}}頁面$3的版本$4為已巡查",
        "logentry-newusers-newusers": "已{{GENDER:$2|建立}}用戶「$1」",
        "logentry-newusers-create": "已{{GENDER:$2|建立}}用戶「$1」",
-       "logentry-newusers-create2": "用戶「$1」建立用戶「$3」",
+       "logentry-newusers-create2": "使用者 \"$1\" 建立使用者 \"$3\"",
        "logentry-newusers-byemail": "$1建立用戶$3並電郵密碼給他",
-       "logentry-newusers-autocreate": "ç\94¨æ\88¶$1被è\87ªå\8b\95{{GENDER:$2|建ç«\8b}}",
+       "logentry-newusers-autocreate": "系統è\87ªå\8b\95{{GENDER:$2|建ç«\8b}}使ç\94¨è\80\85 $1",
        "logentry-rights-rights": "$1將$3的權限從$4改為$5",
        "logentry-rights-rights-legacy": "$1更改$3的權限",
        "logentry-rights-autopromote": "$1的權限自動從$4改為$5",
diff --git a/maintenance/jsduck/MetaTags.rb b/maintenance/jsduck/MetaTags.rb
deleted file mode 100644 (file)
index cde7d3b..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-# Custom tags for JSDuck 4.x
-# See also:
-# - https://github.com/senchalabs/jsduck/wiki/Tags
-# - https://github.com/senchalabs/jsduck/wiki/Custom-tags
-# - https://github.com/senchalabs/jsduck/wiki/Custom-tags/7f5c32e568eab9edc8e3365e935bcb836cb11f1d
-require 'jsduck/meta_tag'
-
-class SourceTag < JsDuck::MetaTag
-  def initialize
-    # This defines the name of the @tag
-    @name = 'source'
-  end
-
-  # Generate HTML output for this tag.
-  # One can make use of the #format method to easily support
-  # Markdown and {@link} tags inside the contents of the tag.
-  #
-  # @param tags All matches of this tag on one class.
-  def to_html(tags)
-    '<h3 class="pa">Source</h3>' + tags.map {|tag| format(tag) }.join("\n")
-  end
-end
-
-class ContextTag < JsDuck::MetaTag
-  def initialize
-    @name = 'context'
-  end
-
-  # @param tags All matches of this tag on one class.
-  def to_html(tags)
-    return '<h3 class="pa">Context</h3>' +  render_long_context(tags.last)
-  end
-
-  def render_long_context(tag)
-    if tag =~ /\A([^\s]+)/m
-      name = $1
-      return format("`this` : {@link #{name}}")
-    end
-  end
-end
-
-class SeeTag < JsDuck::MetaTag
-  def initialize
-    @name = 'see'
-    @multiline = true
-  end
-
-  # @param tags All matches of this tag on one class.
-  def to_html(tags)
-    doc = []
-    doc << '<h3 class="pa">Related</h3>'
-    doc << [
-        '<ul>',
-        tags.map {|tag| render_long_see(tag) },
-        '</ul>',
-      ]
-    doc
-  end
-
-  def render_long_see(tag)
-    if tag =~ /\A([^\s]+)( .*)?\Z/m
-      name = $1
-      doc = $2 ? ': ' + $2 : ''
-      return [
-        '<li>',
-        format("{@link #{name}} #{doc}"),
-        '</li>'
-      ]
-    end
-  end
-end
-
-# As of JSDuck 5 this is in core
-class FiresTag < JsDuck::MetaTag
-  def initialize
-    @name = 'fires'
-    @multiline = true
-  end
-
-  # @param tags All matches of this tag on one class.
-  def to_html(tags)
-    doc = []
-    doc << '<h3 class="pa">Fires</h3>'
-    doc << [
-        '<ul>',
-        tags.map {|tag| render_long_event(tag) },
-        '</ul>',
-      ]
-    doc
-  end
-
-  def render_long_event(tag)
-    if tag =~ /\A(\w+)( .*)?\Z/m
-      name = $1
-      doc = $2 ? ': ' + $2 : ''
-      return [
-        '<li>',
-        format("{@link #event-#{name}} #{doc}"),
-        '</li>'
-      ]
-    end
-  end
-end
index eaf0a38..2d45645 100644 (file)
                "groups": [
                        {
                                "name": "Plugins",
-                               "classes": ["jQuery.plugin.*"]
+                               "classes": [
+                                       "jQuery.client",
+                                       "jQuery.colorUtil",
+                                       "jQuery.plugin.*"
+                               ]
                        }
                ]
        },
index 493815e..65ead02 100644 (file)
@@ -1,26 +1,37 @@
 {
        "--title": "MediaWiki core - Documentation",
-       "--footer": "Documentation for MediaWiki core. Generated on {DATE} by {JSDUCK} {VERSION}.",
        "--categories": "./categories.json",
        "--eg-iframe": "./eg-iframe.html",
+       "--tags": "./CustomTags.rb",
+       "--warnings": ["-nodoc(class,public)"],
        "--builtin-classes": true,
-       "--output": "../../docs/js",
+       "--warnings-exit-nonzero": true,
        "--external": "HTMLElement,HTMLDocument,Window",
+       "--footer": "Documentation for MediaWiki core. Generated on {DATE} by {JSDUCK} {VERSION}.",
+       "--output": "../../docs/js",
        "--": [
                "./external.js",
                "../../resources/src/mediawiki",
-               "../../resources/src/mediawiki.action/mediawiki.action.edit.js",
-               "../../resources/src/mediawiki.action/mediawiki.action.view.postEdit.js",
-               "../../resources/src/mediawiki.page/mediawiki.page.startup.js",
-               "../../resources/src/mediawiki.page/mediawiki.page.watch.ajax.js",
+               "../../resources/src/mediawiki.action",
+               "../../resources/src/mediawiki.page",
                "../../resources/src/mediawiki.api",
                "../../resources/src/mediawiki.language",
+               "../../resources/src/jquery/jquery.accessKeyLabel.js",
                "../../resources/src/jquery/jquery.arrowSteps.js",
                "../../resources/src/jquery/jquery.autoEllipsis.js",
                "../../resources/src/jquery/jquery.badge.js",
+               "../../resources/src/jquery/jquery.byteLength.js",
                "../../resources/src/jquery/jquery.byteLimit.js",
+               "../../resources/src/jquery/jquery.checkboxShiftClick.js",
+               "../../resources/src/jquery/jquery.client.js",
+               "../../resources/src/jquery/jquery.colorUtil.js",
+               "../../resources/src/jquery/jquery.footHovzer.js",
+               "../../resources/src/jquery/jquery.getAttrs.js",
+               "../../resources/src/jquery/jquery.hidpi.js",
                "../../resources/src/jquery/jquery.localize.js",
+               "../../resources/src/jquery/jquery.makeCollapsible.js",
                "../../resources/src/jquery/jquery.spinner.js",
+               "../../resources/src/jquery/jquery.tabIndex.js",
                "../../resources/lib/oojs",
                "../../resources/lib/oojs-ui"
        ]
diff --git a/maintenance/mssql/archives/patch-user_password_expires.sql b/maintenance/mssql/archives/patch-user_password_expires.sql
new file mode 100644 (file)
index 0000000..c22b10c
--- /dev/null
@@ -0,0 +1 @@
+ALTER TABLE /*_*/mwuser ADD user_password_expires VARCHAR(14) DEFAULT NULL
\ No newline at end of file
index 4a3cdea..fb8db08 100644 (file)
@@ -45,8 +45,8 @@ CREATE TABLE /*_*/mwuser (
    user_email_token  NCHAR(32) DEFAULT '',
    user_email_token_expires varchar(14) DEFAULT NULL,
    user_registration varchar(14) DEFAULT NULL,
-   user_editcount    INT NULL DEFAULT NULL
-   user_password_expires DATETIME DEFAULT NULL
+   user_editcount    INT NULL DEFAULT NULL,
+   user_password_expires varchar(14) DEFAULT NULL
 );
 CREATE UNIQUE INDEX /*i*/user_name ON /*_*/mwuser (user_name);
 CREATE INDEX /*i*/user_email_token ON /*_*/mwuser (user_email_token);
index 442163e..cc42307 100755 (executable)
@@ -14,18 +14,9 @@ fi
 
 MWCORE_DIR=$(cd $(dirname $0)/..; pwd)
 
-# Support jsduck 4.x and 5.x
-JSDUCK_VERSION="$(jsduck --version | sed -e 's/[.].*//')"
-if [  "$JSDUCK_VERSION" = "JSDuck 4" ]; then
-       JSDUCK_VERSION_OPT="--meta-tags $MWCORE_DIR/maintenance/jsduck/MetaTags.rb --warnings=-no_doc"
-else
-       JSDUCK_VERSION_OPT="--tags $MWCORE_DIR/maintenance/jsduck/CustomTags.rb --warnings=-nodoc(class,public)"
-fi
-
 jsduck \
 --config=$MWCORE_DIR/maintenance/jsduck/config.json \
-$JSDUCK_VERSION_OPT \
 --footer="Documentation for branch ($JSDUCK_MWVERSION) on {DATE} by {JSDUCK} {VERSION}." \
---processes 0 --warnings-exit-nonzero \
+--processes 0 \
 && echo 'JSDuck execution finished.' \
 && ln -s ../../resources $MWCORE_DIR/docs/js/modules
index b488fe9..f69a3a3 100644 (file)
@@ -176,9 +176,12 @@ class RunJobs extends Maintenance {
        private function getBackoffTimeToWait( Job $job ) {
                global $wgJobBackoffThrottling;
 
-               if ( !isset( $wgJobBackoffThrottling[$job->getType()] ) ) {
+               if ( !isset( $wgJobBackoffThrottling[$job->getType()] ) ||
+                       $job instanceof DuplicateJob // no work was done
+               ) {
                        return 0; // not throttled
                }
+
                $itemsPerSecond = $wgJobBackoffThrottling[$job->getType()];
                if ( $itemsPerSecond <= 0 ) {
                        return 0; // not throttled
index a3c427e..668dc14 100644 (file)
@@ -185,6 +185,13 @@ return array(
 
        /* jQuery Plugins */
 
+       'jquery.accessKeyLabel' => array(
+               'scripts' => 'resources/src/jquery/jquery.accessKeyLabel.js',
+               'dependencies' => array(
+                       'jquery.client',
+               ),
+               'targets' => array( 'mobile', 'desktop' ),
+       ),
        'jquery.appear' => array(
                'scripts' => 'resources/lib/jquery/jquery.appear.js',
        ),
@@ -897,7 +904,7 @@ return array(
        'mediawiki.util' => array(
                'scripts' => 'resources/src/mediawiki/mediawiki.util.js',
                'dependencies' => array(
-                       'jquery.client',
+                       'jquery.accessKeyLabel',
                        'jquery.mwExtension',
                        'mediawiki.notify',
                ),
index 2dcb198..085f908 100644 (file)
@@ -7,6 +7,6 @@
        "ooui-dialog-action-close": "Claise",
        "ooui-outline-control-move-down": "Muiv eetem doon",
        "ooui-outline-control-move-up": "Muiv eetem up",
-       "ooui-outline-control-remove": "Remuiv eitem",
+       "ooui-outline-control-remove": "Remuiv eetem",
        "ooui-toolbar-more": "Mair"
 }
index 0eec396..091dbaf 100644 (file)
@@ -9,5 +9,6 @@
        "ooui-dialog-action-close": "שליסן",
        "ooui-outline-control-move-down": "רוקן עלעמענט אראפ",
        "ooui-outline-control-move-up": "רוקן עלעמענט ארויף",
+       "ooui-outline-control-remove": "אַראָפנעמען איינס",
        "ooui-toolbar-more": "נאך"
 }
index da9bacc..56f5e6d 100644 (file)
                        "Shirayuki",
                        "Simon Shek",
                        "Spring Roll Conan",
-                       "Waihorace"
+                       "Waihorace",
+                       "Cwlin0416"
                ]
        },
        "ooui-dialog-action-close": "關閉",
-       "ooui-outline-control-move-down": "向下移項",
-       "ooui-outline-control-move-up": "向上移項",
-       "ooui-outline-control-remove": "移除項",
+       "ooui-outline-control-move-down": "項目下移",
+       "ooui-outline-control-move-up": "項目上移",
+       "ooui-outline-control-remove": "移除項",
        "ooui-toolbar-more": "更多"
 }
diff --git a/resources/lib/oojs-ui/images/icons/info.png b/resources/lib/oojs-ui/images/icons/info.png
new file mode 100644 (file)
index 0000000..f43804d
Binary files /dev/null and b/resources/lib/oojs-ui/images/icons/info.png differ
diff --git a/resources/lib/oojs-ui/images/icons/info.svg b/resources/lib/oojs-ui/images/icons/info.svg
new file mode 100644 (file)
index 0000000..8c5672a
--- /dev/null
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="24" height="24" viewBox="0, 0, 24, 24">
+  <g id="help" opacity="0.75">
+    <path d="M11.499,17 C8.463,17 6,14.536 6,11.5 C6,8.463 8.462,6 11.499,6 C14.536,6 17,8.462 17,11.5 C17,14.536 14.536,17 11.499,17 z M11.501,5 C7.91,5 5,7.91 5,11.5 C5,15.09 7.91,18 11.501,18 C15.089,18 18,15.089 18,11.5 C18,7.911 15.089,5 11.501,5 z" fill="#000000"/>
+    <path d="M12,10 L12,14 L13,14 L13,15 L10,15 L10,14 L11,14 L11,11 L10,11 L10,10 z" fill="#000000"/>
+    <path d="M11,8 L12,8 L12,9 L11,9 z" fill="#000000"/>
+  </g>
+  <defs/>
+</svg>
diff --git a/resources/lib/oojs-ui/images/indicators/alert.png b/resources/lib/oojs-ui/images/indicators/alert.png
new file mode 100644 (file)
index 0000000..bfc83e7
Binary files /dev/null and b/resources/lib/oojs-ui/images/indicators/alert.png differ
diff --git a/resources/lib/oojs-ui/images/indicators/alert.svg b/resources/lib/oojs-ui/images/indicators/alert.svg
new file mode 100644 (file)
index 0000000..8ce4b25
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12" height="12" viewBox="0, 0, 12, 12">
+  <g id="deprecated" opacity="0.75">
+    <path d="M6,12 C2.686,12 -0,9.314 -0,6 C-0,2.686 2.686,-0 6,-0 C9.314,-0 12,2.686 12,6 C12,9.314 9.314,12 6,12 z M5,7 L7,7 L7,2 L5,2 z M5,10 L7,10 L7,8 L5,8 z" fill="#000000"/>
+  </g>
+  <defs/>
+</svg>
index aeb35a3..d10e0d4 100644 (file)
Binary files a/resources/lib/oojs-ui/images/indicators/required.png and b/resources/lib/oojs-ui/images/indicators/required.png differ
index 7c60ec0..ee1baf7 100644 (file)
@@ -2,7 +2,9 @@
 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="12" height="12" viewBox="0, 0, 12, 12">
   <g id="required" opacity="0.75">
-    <path d="M7,0 L7,4.268 L10.696,2.134 L11.696,3.866 L8,6 L11.696,8.134 L10.696,9.866 L7,7.732 L7,12 L5,12 L5,7.732 L1.304,9.866 L0.304,8.134 L4,6 L0.304,3.866 L1.304,2.134 L5,4.268 L5,0 z" fill="#000000"/>
+    <path d="M5,1 L7,1 L7,11 L5,11 z" fill="#000000"/>
+    <path d="M9.83,2.634 L10.83,4.366 L2.17,9.366 L1.17,7.634 z" fill="#000000"/>
+    <path d="M1.17,4.366 L2.17,2.634 L10.83,7.634 L9.83,9.366 z" fill="#000000"/>
   </g>
   <defs/>
 </svg>
index 40e76d2..ac07802 100644 (file)
   padding-right: 1.5em;
 }
 
+.oo-ui-outlineItemWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
+  opacity: 0.5;
+}
+
 .oo-ui-outlineItemWidget-level-0 {
   padding-left: 3.5em;
 }
   font-style: italic;
 }
 
-.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-iconedElement-icon,
-.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-indicatedElement-indicator {
+.oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-iconedElement-icon {
   opacity: 0.5;
 }
 
index ff11631..d965ffa 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (0a7180f468)
+ * OOjs UI v0.1.0-pre (70f1886a35)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: Wed Apr 23 2014 18:05:30 GMT-0700 (PDT)
+ * Date: Tue Apr 29 2014 17:13:10 GMT-0700 (PDT)
  */
 ( function ( OO ) {
 
@@ -173,7 +173,8 @@ OO.ui.resolveMsg = function ( msg ) {
  * @param {Object} [config] Configuration options
  * @cfg {Function} [$] jQuery for the frame the widget is in
  * @cfg {string[]} [classes] CSS class names
- * @cfg {jQuery} [$content] Content elements to append
+ * @cfg {string} [text] Text to insert
+ * @cfg {jQuery} [$content] Content elements to append (after text)
  */
 OO.ui.Element = function OoUiElement( config ) {
        // Configuration initialization
@@ -188,6 +189,9 @@ OO.ui.Element = function OoUiElement( config ) {
        if ( $.isArray( config.classes ) ) {
                this.$element.addClass( config.classes.join( ' ' ) );
        }
+       if ( config.text ) {
+               this.$element.text( config.text );
+       }
        if ( config.$content ) {
                this.$element.append( config.$content );
        }
@@ -612,32 +616,52 @@ OO.ui.Element.prototype.offDOMEvent = function ( event, callback ) {
 
 ( function () {
        // Static
-       var specialFocusin;
 
-       function handler( e ) {
-               jQuery.event.simulate( 'focusin', e.target, jQuery.event.fix( e ), /* bubble = */ true );
-       }
+       // jQuery 1.8.3 has a bug with handling focusin/focusout events inside iframes.
+       // Firefox doesn't support focusin/focusout at all, so we listen for 'focus'/'blur' on the
+       // document, and simulate a 'focusin'/'focusout' event on the target element and make
+       // it bubble from there.
+       //
+       // - http://jsfiddle.net/sw3hr/
+       // - http://bugs.jquery.com/ticket/14180
+       // - https://github.com/jquery/jquery/commit/1cecf64e5aa4153
+       function specialEvent( simulatedName, realName ) {
+               function handler( e ) {
+                       jQuery.event.simulate(
+                               simulatedName,
+                               e.target,
+                               jQuery.event.fix( e ),
+                               /* bubble = */ true
+                       );
+               }
 
-       specialFocusin = {
-               setup: function () {
-                       var doc = this.ownerDocument || this,
-                               attaches = $.data( doc, 'ooui-focusin-attaches' );
-                       if ( !attaches ) {
-                               doc.addEventListener( 'focus', handler, true );
-                       }
-                       $.data( doc, 'ooui-focusin-attaches', ( attaches || 0 ) + 1 );
-               },
-               teardown: function () {
-                       var doc = this.ownerDocument || this,
-                               attaches = $.data( doc, 'ooui-focusin-attaches' ) - 1;
-                       if ( !attaches ) {
-                               doc.removeEventListener( 'focus', handler, true );
-                               $.removeData( doc, 'ooui-focusin-attaches' );
-                       } else {
-                               $.data( doc, 'ooui-focusin-attaches', attaches );
+               return {
+                       setup: function () {
+                               var doc = this.ownerDocument || this,
+                                       attaches = $.data( doc, 'ooui-' + simulatedName + '-attaches' );
+                               if ( !attaches ) {
+                                       doc.addEventListener( realName, handler, true );
+                               }
+                               $.data( doc, 'ooui-' + simulatedName + '-attaches', ( attaches || 0 ) + 1 );
+                       },
+                       teardown: function () {
+                               var doc = this.ownerDocument || this,
+                                       attaches = $.data( doc, 'ooui-' + simulatedName + '-attaches' ) - 1;
+                               if ( !attaches ) {
+                                       doc.removeEventListener( realName, handler, true );
+                                       $.removeData( doc, 'ooui-' + simulatedName + '-attaches' );
+                               } else {
+                                       $.data( doc, 'ooui-' + simulatedName + '-attaches', attaches );
+                               }
                        }
-               }
-       };
+               };
+       }
+
+       var hasOwn = Object.prototype.hasOwnProperty,
+               specialEvents = {
+                       focusin: specialEvent( 'focusin', 'focus' ),
+                       focusout: specialEvent( 'focusout', 'blur' )
+               };
 
        /**
         * Bind a handler for an event on a DOM element.
@@ -654,25 +678,15 @@ OO.ui.Element.prototype.offDOMEvent = function ( event, callback ) {
        OO.ui.Element.onDOMEvent = function ( el, event, callback ) {
                var orig;
 
-               if ( event === 'focusin' ) {
-                       // jQuery 1.8.3 has a bug with handling focusin events inside iframes.
-                       // Firefox doesn't support focusin at all, so we listen for 'focus' on the
-                       // document, and simulate a 'focusin' event on the target element and make
-                       // it bubble from there.
-                       //
-                       // - http://jsfiddle.net/sw3hr/
-                       // - http://bugs.jquery.com/ticket/14180
-                       // - https://github.com/jquery/jquery/commit/1cecf64e5aa4153
-
+               if ( hasOwn.call( specialEvents, event ) ) {
                        // Replace jQuery's override with our own
-                       orig = $.event.special.focusin;
-                       $.event.special.focusin = specialFocusin;
+                       orig = $.event.special[event];
+                       $.event.special[event] = specialEvents[event];
 
                        $( el ).on( event, callback );
 
                        // Restore
-                       $.event.special.focusin = orig;
-
+                       $.event.special[event] = orig;
                } else {
                        $( el ).on( event, callback );
                }
@@ -688,11 +702,15 @@ OO.ui.Element.prototype.offDOMEvent = function ( event, callback ) {
         */
        OO.ui.Element.offDOMEvent = function ( el, event, callback ) {
                var orig;
-               if ( event === 'focusin' ) {
-                       orig = $.event.special.focusin;
-                       $.event.special.focusin = specialFocusin;
+               if ( hasOwn.call( specialEvents, event ) ) {
+                       // Replace jQuery's override with our own
+                       orig = $.event.special[event];
+                       $.event.special[event] = specialEvents[event];
+
                        $( el ).off( event, callback );
-                       $.event.special.focusin = orig;
+
+                       // Restore
+                       $.event.special[event] = orig;
                } else {
                        $( el ).off( event, callback );
                }
@@ -1279,7 +1297,9 @@ OO.ui.Window.prototype.teardown = function () {
  * Do not override this method. See #setup for a way to make changes each time the window opens.
  *
  * @param {Object} [data] Window opening data
+ * @fires opening
  * @fires open
+ * @fires ready
  * @chainable
  */
 OO.ui.Window.prototype.open = function ( data ) {
@@ -1290,13 +1310,16 @@ OO.ui.Window.prototype.open = function ( data ) {
                        this.visible = true;
                        this.emit( 'opening', data );
                        this.setup( data );
-                       // Focus the content div (which has a tabIndex) to inactivate
-                       // (but not clear) selections in the parent frame.
-                       // Must happen after setup runs (otherwise focusing it doesn't work)
-                       // but before 'open' is emitted (so subclasses can give focus to something else)
-                       this.frame.$content.focus();
                        this.emit( 'open', data );
-                       this.opening = false;
+                       setTimeout( OO.ui.bind( function () {
+                               // Focus the content div (which has a tabIndex) to inactivate
+                               // (but not clear) selections in the parent frame.
+                               // Must happen after 'open' is emitted (to ensure it is visible)
+                               // but before 'ready' is emitted (so subclasses can give focus to something else)
+                               this.frame.$content.focus();
+                               this.emit( 'ready', data );
+                               this.opening = false;
+                       }, this ) );
                }, this ) );
        }
 
@@ -1309,6 +1332,7 @@ OO.ui.Window.prototype.open = function ( data ) {
  * See #teardown for a way to do something each time the window closes.
  *
  * @param {Object} [data] Window closing data
+ * @fires closing
  * @fires close
  * @chainable
  */
@@ -2206,7 +2230,6 @@ OO.ui.FlaggableElement.prototype.setFlags = function ( flags ) {
  * @constructor
  * @param {jQuery} $group Container node, assigned to #$group
  * @param {Object} [config] Configuration options
- * @cfg {Object.<string,string>} [aggregations] Events to aggregate, keyed by item event name
  */
 OO.ui.GroupElement = function OoUiGroupElement( $group, config ) {
        // Configuration
@@ -2216,8 +2239,7 @@ OO.ui.GroupElement = function OoUiGroupElement( $group, config ) {
        this.$group = $group;
        this.items = [];
        this.$items = this.$( [] );
-       this.aggregate = !$.isEmptyObject( config.aggregations );
-       this.aggregations = config.aggregations || {};
+       this.aggregateItemEvents = {};
 };
 
 /* Methods */
@@ -2231,6 +2253,59 @@ OO.ui.GroupElement.prototype.getItems = function () {
        return this.items.slice( 0 );
 };
 
+/**
+ * Add an aggregate item event.
+ *
+ * Aggregated events are listened to on each item and then emitted by the group under a new name,
+ * and with an additional leading parameter containing the item that emitted the original event.
+ * Other arguments that were emitted from the original event are passed through.
+ *
+ * @param {Object.<string,string|null>} events Aggregate events emitted by group, keyed by item
+ *   event, use null value to remove aggregation
+ * @throws {Error} If aggregation already exists
+ */
+OO.ui.GroupElement.prototype.aggregate = function ( events ) {
+       var i, len, item, add, remove, itemEvent, groupEvent;
+
+       for ( itemEvent in events ) {
+               groupEvent = events[itemEvent];
+
+               // Remove existing aggregated event
+               if ( itemEvent in this.aggregateItemEvents ) {
+                       // Don't allow duplicate aggregations
+                       if ( groupEvent ) {
+                               throw new Error( 'Duplicate item event aggregation for ' + itemEvent );
+                       }
+                       // Remove event aggregation from existing items
+                       for ( i = 0, len = this.items.length; i < len; i++ ) {
+                               item = this.items[i];
+                               if ( item.connect && item.disconnect ) {
+                                       remove = {};
+                                       remove[itemEvent] = [ 'emit', groupEvent, item ];
+                                       item.disconnect( this, remove );
+                               }
+                       }
+                       // Prevent future items from aggregating event
+                       delete this.aggregateItemEvents[itemEvent];
+               }
+
+               // Add new aggregate event
+               if ( groupEvent ) {
+                       // Make future items aggregate event
+                       this.aggregateItemEvents[itemEvent] = groupEvent;
+                       // Add event aggregation to existing items
+                       for ( i = 0, len = this.items.length; i < len; i++ ) {
+                               item = this.items[i];
+                               if ( item.connect && item.disconnect ) {
+                                       add = {};
+                                       add[itemEvent] = [ 'emit', groupEvent, item ];
+                                       item.connect( this, add );
+                               }
+                       }
+               }
+       }
+};
+
 /**
  * Add items.
  *
@@ -2255,10 +2330,10 @@ OO.ui.GroupElement.prototype.addItems = function ( items, index ) {
                        }
                }
                // Add the item
-               if ( this.aggregate ) {
+               if ( item.connect && item.disconnect && !$.isEmptyObject( this.aggregateItemEvents ) ) {
                        events = {};
-                       for ( event in this.aggregations ) {
-                               events[event] = [ 'emit', this.aggregations[event], item ];
+                       for ( event in this.aggregateItemEvents ) {
+                               events[event] = [ 'emit', this.aggregateItemEvents[event], item ];
                        }
                        item.connect( this, events );
                }
@@ -2291,15 +2366,22 @@ OO.ui.GroupElement.prototype.addItems = function ( items, index ) {
  * @chainable
  */
 OO.ui.GroupElement.prototype.removeItems = function ( items ) {
-       var i, len, item, index;
+       var i, len, item, index, remove, itemEvent;
 
        // Remove specific items
        for ( i = 0, len = items.length; i < len; i++ ) {
                item = items[i];
                index = $.inArray( item, this.items );
                if ( index !== -1 ) {
-                       if ( this.aggregate ) {
-                               item.disconnect( this );
+                       if (
+                               item.connect && item.disconnect &&
+                               !$.isEmptyObject( this.aggregateItemEvents )
+                       ) {
+                               remove = {};
+                               if ( itemEvent in this.aggregateItemEvents ) {
+                                       remove[itemEvent] = [ 'emit', this.aggregateItemEvents[itemEvent], item ];
+                               }
+                               item.disconnect( this, remove );
                        }
                        item.setElementGroup( null );
                        this.items.splice( index, 1 );
@@ -2319,13 +2401,20 @@ OO.ui.GroupElement.prototype.removeItems = function ( items ) {
  * @chainable
  */
 OO.ui.GroupElement.prototype.clearItems = function () {
-       var i, len, item;
+       var i, len, item, remove, itemEvent;
 
        // Remove all items
        for ( i = 0, len = this.items.length; i < len; i++ ) {
                item = this.items[i];
-               if ( this.aggregate ) {
-                       item.disconnect( this );
+               if (
+                       item.connect && item.disconnect &&
+                       !$.isEmptyObject( this.aggregateItemEvents )
+               ) {
+                       remove = {};
+                       if ( itemEvent in this.aggregateItemEvents ) {
+                               remove[itemEvent] = [ 'emit', this.aggregateItemEvents[itemEvent], item ];
+                       }
+                       item.disconnect( this, remove );
                }
                item.setElementGroup( null );
        }
@@ -3344,9 +3433,7 @@ OO.ui.ToolFactory.prototype.extract = function ( collection, used ) {
  */
 OO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) {
        // Configuration initialization
-       config = $.extend( true, {
-               'aggregations': { 'disable': 'itemDisable' }
-       }, config );
+       config = config || {};
 
        // Parent constructor
        OO.ui.ToolGroup.super.call( this, config );
@@ -3373,6 +3460,7 @@ OO.ui.ToolGroup = function OoUiToolGroup( toolbar, config ) {
                'mouseout': OO.ui.bind( this.onMouseOut, this )
        } );
        this.toolbar.getToolFactory().connect( this, { 'register': 'onToolFactoryRegister' } );
+       this.aggregate( { 'disable': 'itemDisable' } );
        this.connect( this, { 'itemDisable': 'updateDisabled' } );
 
        // Initialization
@@ -5464,7 +5552,7 @@ OO.ui.InputWidget.prototype.isReadOnly = function () {
  */
 OO.ui.InputWidget.prototype.setReadOnly = function ( state ) {
        this.readOnly = !!state;
-       this.$input.prop( 'readonly', this.readOnly );
+       this.$input.prop( 'readOnly', this.readOnly );
        return this;
 };
 
@@ -7706,6 +7794,13 @@ OO.ui.SearchWidget.prototype.clear = function () {
        this.query.setValue( '' );
 };
 
+/**
+ * Focus the query input.
+ */
+OO.ui.SearchWidget.prototype.focus = function () {
+       this.query.$input[0].focus();
+};
+
 /**
  * Get the results list.
  *
index 1dbb098..d19eb80 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (0a7180f468)
+ * OOjs UI v0.1.0-pre (70f1886a35)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: Wed Apr 23 2014 18:05:30 GMT-0700 (PDT)
+ * Date: Tue Apr 29 2014 17:13:10 GMT-0700 (PDT)
  */
 
 /* Textures */
   background-image: /* @embed */ url(images/icons/help.svg);
 }
 
+.oo-ui-icon-info {
+  background-image: /* @embed */ url(images/icons/info.svg);
+}
+
 .oo-ui-icon-link {
   background-image: /* @embed */ url(images/icons/link.svg);
 }
 
 /* Indicators */
 
+.oo-ui-indicator-alert {
+  background-image: /* @embed */ url(images/indicators/alert.svg);
+}
+
 .oo-ui-indicator-down {
   background-image: /* @embed */ url(images/indicators/down.svg);
 }
diff --git a/resources/src/jquery/jquery.accessKeyLabel.js b/resources/src/jquery/jquery.accessKeyLabel.js
new file mode 100644 (file)
index 0000000..4caf072
--- /dev/null
@@ -0,0 +1,197 @@
+/**
+ * jQuery plugin to update the tooltip to show the correct access key
+ *
+ * @class jQuery.plugin.accessKeyLabel
+ */
+( function ( $ ) {
+
+// Cached access key prefix for used browser
+var cachedAccessKeyPrefix,
+
+       // Wether to use 'test-' instead of correct prefix (used for testing)
+       useTestPrefix = false,
+
+       // tag names which can have a label tag
+       // https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#Form-associated_content
+       labelable = 'button, input, textarea, keygen, meter, output, progress, select';
+
+/**
+ * Get the prefix for the access key for browsers that don't support accessKeyLabel.
+ *
+ * For browsers that support accessKeyLabel, #getAccessKeyLabel never calls here.
+ *
+ * @private
+ * @param {Object} [ua] An object with a 'userAgent' and 'platform' property.
+ * @return {string} Access key prefix
+ */
+function getAccessKeyPrefix( ua ) {
+       // use cached prefix if possible
+       if ( !ua && cachedAccessKeyPrefix ) {
+               return cachedAccessKeyPrefix;
+       }
+
+       var profile = $.client.profile( ua ),
+               accessKeyPrefix = 'alt-';
+
+       // Opera on any platform
+       if ( profile.name === 'opera' ) {
+               accessKeyPrefix = 'shift-esc-';
+
+       // Chrome on any platform
+       } else if ( profile.name === 'chrome' ) {
+               accessKeyPrefix = (
+                       profile.platform === 'mac'
+                               // Chrome on Mac
+                               ? 'ctrl-option-'
+                               // Chrome on Windows or Linux
+                               // (both alt- and alt-shift work, but alt with E, D, F etc does not
+                               // work since they are browser shortcuts)
+                               : 'alt-shift-'
+               );
+
+       // Non-Windows Safari with webkit_version > 526
+       } else if ( profile.platform !== 'win'
+               && profile.name === 'safari'
+               && profile.layoutVersion > 526
+       ) {
+               accessKeyPrefix = 'ctrl-alt-';
+
+       // Safari/Konqueror on any platform, or any browser on Mac
+       // (but not Safari on Windows)
+       } else if ( !( profile.platform === 'win' && profile.name === 'safari' )
+               && ( profile.name === 'safari'
+               || profile.platform === 'mac'
+               || profile.name === 'konqueror' )
+       ) {
+               accessKeyPrefix = 'ctrl-';
+
+       // Firefox/Iceweasel 2.x and later
+       } else if ( ( profile.name === 'firefox' || profile.name === 'iceweasel' )
+               && profile.versionBase > '1'
+       ) {
+               accessKeyPrefix = 'alt-shift-';
+       }
+
+       // cache prefix
+       if ( !ua ) {
+               cachedAccessKeyPrefix = accessKeyPrefix;
+       }
+       return accessKeyPrefix;
+}
+
+/**
+ * Get the access key label for an element.
+ *
+ * Will use native accessKeyLabel if available (currently only in Firefox 8+),
+ * falls back to #getAccessKeyPrefix.
+ *
+ * @private
+ * @param {HTMLElement} element Element to get the label for
+ * @return {string} Access key label
+ */
+function getAccessKeyLabel( element ) {
+       // abort early if no access key
+       if ( !element.accessKey ) {
+               return '';
+       }
+       // use accessKeyLabel if possible
+       // http://www.whatwg.org/specs/web-apps/current-work/multipage/editing.html#dom-accesskeylabel
+       if ( !useTestPrefix && element.accessKeyLabel ) {
+               return element.accessKeyLabel;
+       }
+       return ( useTestPrefix ? 'test-' : getAccessKeyPrefix() ) + element.accessKey;
+}
+
+/**
+ * Update the title for an element (on the element with the access key or it's label) to show
+ * the correct access key label.
+ *
+ * @private
+ * @param {HTMLElement} element Element with the accesskey
+ * @param {HTMLElement} titleElement Element with the title to update (may be the same as `element`)
+ */
+function updateTooltipOnElement( element, titleElement ) {
+       var oldTitle = titleElement.title,
+               rawTitle = oldTitle.replace( / \[.*?\]$/, '' ),
+               newTitle = rawTitle,
+               accessKeyLabel = getAccessKeyLabel( element );
+
+       // don't add a title if the element didn't have one before
+       if ( !oldTitle ) {
+               return;
+       }
+
+       if ( accessKeyLabel ) {
+               newTitle += ' [' + accessKeyLabel + ']';
+       }
+       if ( oldTitle !== newTitle ) {
+               titleElement.title = newTitle;
+       }
+}
+
+/**
+ * Update the title for an element to show the correct access key label.
+ *
+ * @private
+ * @param {HTMLElement} element Element with the accesskey
+ */
+function updateTooltip( element ) {
+       var id, $element, $label, $labelParent;
+       updateTooltipOnElement( element, element );
+
+       // update associated label if there is one
+       $element = $( element );
+       if ( $element.is( labelable ) ) {
+               // Search it using 'for' attribute
+               id = element.id.replace( /"/g, '\\"' );
+               if ( id ) {
+                       $label = $( 'label[for="' + id + '"]' );
+                       if ( $label.length === 1 ) {
+                               updateTooltipOnElement( element, $label[0] );
+                       }
+               }
+
+               // Search it as parent, because the form control can also inside the label element itself
+               $labelParent = $element.parents( 'label' );
+               if ( $labelParent.length === 1 ) {
+                       updateTooltipOnElement( element, $labelParent[0] );
+               }
+       }
+}
+
+/**
+ * Update the titles for all elements in a jQuery selection.
+ *
+ * @return {jQuery}
+ * @chainable
+ */
+$.fn.updateTooltipAccessKeys = function () {
+       return this.each( function () {
+               updateTooltip( this );
+       } );
+};
+
+/**
+ * Exposed for testing.
+ *
+ * @method updateTooltipAccessKeys_getAccessKeyPrefix
+ * @inheritdoc #getAccessKeyPrefix
+ */
+$.fn.updateTooltipAccessKeys.getAccessKeyPrefix = getAccessKeyPrefix;
+
+/**
+ * Switch test mode on and off.
+ *
+ * @method updateTooltipAccessKeys_setTestMode
+ * @param {boolean} mode New mode
+ */
+$.fn.updateTooltipAccessKeys.setTestMode = function ( mode ) {
+       useTestPrefix = mode;
+};
+
+/**
+ * @class jQuery
+ * @mixins jQuery.plugin.accessKeyLabel
+ */
+
+}( jQuery ) );
index 398937e..0b8f9da 100644 (file)
@@ -1,14 +1,16 @@
 /**
- * jQuery.byteLength
- *
- * Calculate the byte length of a string (accounting for UTF-8).
- *
+ * @class jQuery.plugin.byteLength
  * @author Jan Paul Posma, 2011
  * @author Timo Tijhof, 2012
  * @author David Chan, 2013
  */
-jQuery.byteLength = function ( str ) {
 
+/**
+ * Calculate the byte length of a string (accounting for UTF-8).
+ *
+ * @static
+ */
+jQuery.byteLength = function ( str ) {
        // This basically figures out how many bytes a UTF-16 string (which is what js sees)
        // will take in UTF-8 by replacing a 2 byte character with 2 *'s, etc, and counting that.
        // Note, surrogate (\uD800-\uDFFF) characters are counted as 2 bytes, since there's two of them
@@ -27,5 +29,9 @@ jQuery.byteLength = function ( str ) {
                .replace( /[\u0080-\u07FF\uD800-\uDFFF]/g, '**' )
                .replace( /[\u0800-\uD7FF\uE000-\uFFFF]/g, '***' )
                .length;
-
 };
+
+/**
+ * @class jQuery
+ * @mixins jQuery.plugin.byteLength
+ */
index b206566..d99e9f0 100644 (file)
@@ -1,13 +1,15 @@
 /**
- * jQuery checkboxShiftClick
- *
- * This will enable checkboxes to be checked or unchecked in a row by clicking one,
- * holding shift and clicking another one.
- *
- * @author Timo Tijhof, 2011 - 2012
- * @license GPL v2
+ * @class jQuery.plugin.checkboxShiftClick
  */
 ( function ( $ ) {
+
+       /**
+        * Enable checkboxes to be checked or unchecked in a row by clicking one,
+        * holding shift and clicking another one.
+        *
+        * @return {jQuery}
+        * @chainable
+        */
        $.fn.checkboxShiftClick = function () {
                var prevCheckbox = null,
                        $box = this;
                } );
                return $box;
        };
+
+       /**
+        * @class jQuery
+        * @mixins jQuery.plugin.checkboxShiftClick
+        */
+
 }( jQuery ) );
index 6689b7c..662a688 100644 (file)
@@ -1,35 +1,36 @@
 /**
  * User-agent detection
+ *
+ * @class jQuery.client
+ * @singleton
  */
 ( function ( $ ) {
 
-       /* Private Members */
-
        /**
-        * @var {Object} profileCache Keyed by userAgent string,
+        * @private
+        * @property {Object} profileCache Keyed by userAgent string,
         * value is the parsed $.client.profile object for that user agent.
         */
        var profileCache = {};
 
-       /* Public Methods */
-
        $.client = {
 
                /**
                 * Get an object containing information about the client.
                 *
-                * @param {Object} nav An object with atleast a 'userAgent' and 'platform' key.
-                * Defaults to the global Navigator object.
+                * @param {Object} [nav] An object with a 'userAgent' and 'platform' property.
+                *  Defaults to the global `navigator` object.
                 * @return {Object} The resulting client object will be in the following format:
-                *  {
-                *   'name': 'firefox',
-                *   'layout': 'gecko',
-                *   'layoutVersion': 20101026,
-                *   'platform': 'linux'
-                *   'version': '3.5.1',
-                *   'versionBase': '3',
-                *   'versionNumber': 3.5,
-                *  }
+                *
+                *     {
+                *         'name': 'firefox',
+                *         'layout': 'gecko',
+                *         'layoutVersion': 20101026,
+                *         'platform': 'linux'
+                *         'version': '3.5.1',
+                *         'versionBase': '3',
+                *         'versionNumber': 3.5,
+                *     }
                 */
                profile: function ( nav ) {
                        /*jshint boss: true */
@@ -47,7 +48,7 @@
                                versionNumber,
                                key = nav.userAgent + '|' + nav.platform,
 
-                               /* Configuration */
+                               // Configuration
 
                                // Name of browsers or layout engines we don't recognize
                                uk = 'unknown',
                                // Translations for conforming operating system names
                                platformTranslations = [ ['sunos', 'solaris'], ['wow64', 'win'] ],
 
-                               /* Methods */
-
                                /**
                                 * Performs multiple replacements on a string
+                                * @ignore
                                 */
                                translate = function ( source, translations ) {
                                        var i;
                                        return source;
                                },
 
-                               /* Pre-processing */
+                               // Pre-processing
 
                                ua = nav.userAgent,
                                match,
                        // Everything will be in lowercase from now on
                        ua = ua.toLowerCase();
 
-                       /* Extraction */
+                       // Extraction
 
                        if ( match = new RegExp( '(' + names.join( '|' ) + ')' ).exec( ua ) ) {
                                name = translate( match[1], nameTranslations );
                                version = match[3];
                        }
 
-                       /* Edge Cases -- did I mention about how user agent string lie? */
+                       // Edge Cases -- did I mention about how user agent string lie?
 
                        // Decode Safari's crazy 400+ version numbers
                        if ( name === 'safari' && version > 400 ) {
 
                        versionNumber = parseFloat( version, 10 ) || 0.0;
 
-                       /* Caching */
+                       // Caching
 
                        return profileCache[ key  ] = {
                                name: name,
                 * algorithm, similar to PHP's version_compare ('1.2' < '1.11').
                 *
                 * A browser map is in the following format:
-                * {
-                *   // Multiple rules with configurable operators
-                *   'msie': [['>=', 7], ['!=', 9]],
-                *    // Match no versions
-                *   'iphone': false,
-                *    // Match any version
-                *   'android': null
-                * }
+                *
+                *     {
+                *         // Multiple rules with configurable operators
+                *         'msie': [['>=', 7], ['!=', 9]],
+                *         // Match no versions
+                *         'iphone': false,
+                *         // Match any version
+                *         'android': null
+                *     }
                 *
                 * It can optionally be split into ltr/rtl sections:
-                * {
-                *   'ltr': {
-                *     'android': null,
-                *     'iphone': false
-                *   },
-                *   'rtl': {
-                *     'android': false,
-                *     // rules are not inherited from ltr
-                *     'iphone': false
-                *   }
-                * }
+                *
+                *     {
+                *         'ltr': {
+                *             'android': null,
+                *             'iphone': false
+                *         },
+                *         'rtl': {
+                *             'android': false,
+                *             // rules are not inherited from ltr
+                *             'iphone': false
+                *         }
+                *     }
                 *
                 * @param {Object} map Browser support map
                 * @param {Object} [profile] A client-profile object
index 37bf176..be770a9 100644 (file)
@@ -1,17 +1,27 @@
-/**
+/*!
  * jQuery Color Utilities
- * Written by Krinkle in 2011
+ *
  * Released under the MIT and GPL licenses.
+ *
  * Mostly based on other plugins and functions (linted and optimized a little).
  * Sources cited inline.
  */
 ( function ( $ ) {
+       /**
+        * @class jQuery.colorUtil
+        * @singleton
+        */
        $.colorUtil = {
 
-               // Color Conversion function from highlightFade
-               // By Blair Mitchelmore
-               // http://jquery.offput.ca/highlightFade/
-               // Parse strings looking for color tuples [255,255,255]
+               /**
+                * Parse CSS color strings looking for color tuples
+                *
+                * Based on highlightFade by Blair Mitchelmore
+                * <http://jquery.offput.ca/highlightFade/>
+                *
+                * @param {Array|string} color
+                * @return {Array}
+                */
                getRGB: function ( color ) {
                        /*jshint boss:true */
                        var result;
                        return $.colorUtil.colors[$.trim(color).toLowerCase()];
                },
 
-               // Some named colors to work with
-               // From Interface by Stefan Petre
-               // http://interface.eyecon.ro/
+               /**
+                * Named color map
+                *
+                * Based on Interface by Stefan Petre
+                * <http://interface.eyecon.ro/>
+                *
+                * @property {Object}
+                */
                colors: {
                        aqua: [0,255,255],
                        azure: [240,255,255],
                },
 
                /**
-                * http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript
-                * Converts an RGB color value to HSL. Conversion formula
-                * adapted from http://en.wikipedia.org/wiki/HSL_color_space.
-                * Assumes r, g, and b are contained in the set [0, 255] and
-                * returns h, s, and l in the set [0, 1].
+                * Convert an RGB color value to HSL.
                 *
-                * @param       Number  R               The red color value
-                * @param       Number  G               The green color value
-                * @param       Number  B               The blue color value
-                * @return      Array                   The HSL representation
+                * Conversion formula based on
+                * <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>
+                *
+                * Adapted from <https://en.wikipedia.org/wiki/HSL_color_space>.
+                *
+                * Assumes `r`, `g`, and `b` are contained in the set `[0, 255]` and
+                * returns `h`, `s`, and `l` in the set `[0, 1]`.
+                *
+                * @param {number} r The red color value
+                * @param {number} g The green color value
+                * @param {number} b The blue color value
+                * @return {number[]} The HSL representation
                 */
-               rgbToHsl: function ( R, G, B ) {
+               rgbToHsl: function ( r, g, b ) {
+                       r = r / 255;
+                       g = g / 255;
+                       b = b / 255;
+
                        var d,
-                               r = R / 255,
-                               g = G / 255,
-                               b = B / 255,
-                               max = Math.max( r, g, b ), min = Math.min( r, g, b ),
+                               max = Math.max( r, g, b ),
+                               min = Math.min( r, g, b ),
                                h,
                                s,
                                l = (max + min) / 2;
                },
 
                /**
-                * http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript
-                * Converts an HSL color value to RGB. Conversion formula
-                * adapted from http://en.wikipedia.org/wiki/HSL_color_space.
-                * Assumes h, s, and l are contained in the set [0, 1] and
-                * returns r, g, and b in the set [0, 255].
+                * Convert an HSL color value to RGB.
+                *
+                * Conversion formula based on
+                * <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>
+                *
+                * Adapted from <https://en.wikipedia.org/wiki/HSL_color_space>.
+                *
+                * Assumes `h`, `s`, and `l` are contained in the set `[0, 1]` and
+                * returns `r`, `g`, and `b` in the set `[0, 255]`.
                 *
-                * @param       Number  h               The hue
-                * @param       Number  s               The saturation
-                * @param       Number  l               The lightness
-                * @return      Array                   The RGB representation
+                * @param {number} h The hue
+                * @param {number} s The saturation
+                * @param {number} l The lightness
+                * @return {number[]} The RGB representation
                 */
                hslToRgb: function ( h, s, l ) {
                        var r, g, b, hue2rgb, q, p;
                },
 
                /**
-                * Get's a brighter or darker rgb() value string.
+                * Get a brighter or darker rgb() value string.
                 *
-                * @author Krinkle
+                * Usage:
                 *
-                * @example     getCSSColorMod( 'red', +0.1 )
-                * @example     getCSSColorMod( 'rgb(200,50,50)', -0.2 )
+                *     $.colorUtil.getColorBrightness( 'red', +0.1 );
+                *     // > "rgb(255,50,50)"
+                *     $.colorUtil.getColorBrightness( 'rgb(200,50,50)', -0.2 );
+                *     // > "rgb(118,29,29)"
                 *
-                * @param       Mixed   currentColor current value in css
-                * @param       Number  mod wanted brightness modification between -1 and 1
-                * @return      String 'rgb(r,g,b)'
+                * @param {Mixed} currentColor Current value in css
+                * @param {number} mod Wanted brightness modification between -1 and 1
+                * @return {string} Like `'rgb(r,g,b)'`
                 */
                getColorBrightness: function ( currentColor, mod ) {
                        var rgbArr = $.colorUtil.getRGB( currentColor ),
index 56fc32d..de745c3 100644 (file)
@@ -1,14 +1,5 @@
 /**
- * Utility to stack stuff in an overlay fixed on the bottom of the page.
- *
- * Usage:
- * <code>
- *     var hovzer = $.getFootHovzer();
- *     hovzer.$.append( $myCollection );
- *     hovzer.update();
- * </code>
- *
- * @author Timo Tijhof, 2012
+ * @class jQuery.plugin.footHovzer
  */
 ( function ( $ ) {
        var $hovzer, footHovzer, prevHeight, newHeight;
                return $hovzer;
        }
 
+       /**
+        * Utility to stack stuff in an overlay fixed on the bottom of the page.
+        *
+        * Usage:
+        *
+        *     var hovzer = $.getFootHovzer();
+        *     hovzer.$.append( $myCollection );
+        *     hovzer.update();
+        *
+        * @static
+        * @inheritable
+        * @return {jQuery.footHovzer}
+        */
+       $.getFootHovzer = function () {
+               footHovzer.$ = getHovzer();
+               return footHovzer;
+       };
+
+       /**
+        * @private
+        * @class jQuery.footHovzer
+        */
        footHovzer = {
+
+               /**
+                * @property {jQuery} $ The stack container
+                */
+
+               /**
+                * Update dimensions of stack to account for changes in the subtree.
+                */
                update: function () {
                        var $body;
 
                        $body = $( 'body' );
                        if ( prevHeight === undefined ) {
-                               prevHeight = getHovzer().outerHeight( /*includeMargin=*/true );
+                               prevHeight = getHovzer().outerHeight( /* includeMargin = */ true );
                                $body.css( 'paddingBottom', '+=' + prevHeight + 'px' );
                        } else {
                                newHeight = getHovzer().outerHeight( true );
@@ -37,9 +58,9 @@
                }
        };
 
-       $.getFootHovzer = function () {
-               footHovzer.$ = getHovzer();
-               return footHovzer;
-       };
+       /**
+        * @class jQuery
+        * @mixins jQuery.plugin.footHovzer
+        */
 
 }( jQuery ) );
index 25b806b..c44831c 100644 (file)
@@ -1,7 +1,24 @@
 /**
- * Utility to get all attributes of an element directy as an object.
+ * @class jQuery.plugin.getAttrs
+ */
+
+/**
+ * Get the attributes of an element directy as a plain object.
+ *
+ * If there are more elements in the collection, like most jQuery get/read methods,
+ * this method will use the first element in the collection.
+ *
+ * In IE6, the `attributes` map of a node includes *all* allowed attributes
+ * for an element (including those not set). Those will have values like
+ * `undefined`, `null`, `0`, `false`, `""` or `"inherit"`.
  *
- * @author Timo Tijhof, 2011
+ * However there may be attributes genuinely set to one of those values, and there
+ * is no way to distinguish between attributes set to that and those not set and
+ * it being the default. If you need them, set `all` to `true`. They are filtered out
+ * by default.
+ *
+ * @param {boolean} [all=false]
+ * @return {Object}
  */
 jQuery.fn.getAttrs = function ( all ) {
        var map = this[0].attributes,
@@ -10,10 +27,6 @@ jQuery.fn.getAttrs = function ( all ) {
                i, v;
 
        for ( i = 0; i < len; i++ ) {
-               // IE6 includes *all* allowed attributes for thew element (including those
-               // not set). Those have values like undefined, null, 0, false, "" or "inherit".
-               // However there may be genuine attributes set to that. If you need them,
-               // set all to true. They are excluded by default.
                v = map[i].nodeValue;
                if ( all || ( v && v !== 'inherit' ) ) {
                        attrs[ map[i].nodeName ] = v;
@@ -22,3 +35,8 @@ jQuery.fn.getAttrs = function ( all ) {
 
        return attrs;
 };
+
+/**
+ * @class jQuery
+ * @mixins jQuery.plugin.getAttrs
+ */
index eb29db9..99889f1 100644 (file)
@@ -1,21 +1,26 @@
 /**
- * Responsive images based on 'srcset' and 'window.devicePixelRatio' emulation where needed.
+ * Responsive images based on `srcset` and `window.devicePixelRatio` emulation where needed.
  *
- * Call $().hidpi() on a document or part of a document to replace image srcs in that section.
+ * Call `.hidpi()` on a document or part of a document to proces image srcsets within that section.
  *
- * $.devicePixelRatio() can be used to supplement window.devicePixelRatio with support on
- * some additional browsers.
+ * `$.devicePixelRatio()` can be used as a substitute for `window.devicePixelRatio`.
+ * It provides a familiar interface to retrieve the pixel ratio for browsers that don't
+ * implement `window.devicePixelRatio` but do have a different way of getting it.
+ *
+ * @class jQuery.plugin.hidpi
  */
 ( function ( $ ) {
 
 /**
- * Detect reported or approximate device pixel ratio.
- * 1.0 means 1 CSS pixel is 1 hardware pixel
- * 2.0 means 1 CSS pixel is 2 hardware pixels
- * etc
+ * Get reported or approximate device pixel ratio.
+ *
+ * - 1.0 means 1 CSS pixel is 1 hardware pixel
+ * - 2.0 means 1 CSS pixel is 2 hardware pixels
+ * - etc.
  *
- * Uses window.devicePixelRatio if available, or CSS media queries on IE.
+ * Uses `window.devicePixelRatio` if available, or CSS media queries on IE.
  *
+ * @static
  * @return {number} Device pixel ratio
  */
 $.devicePixelRatio = function () {
@@ -51,6 +56,7 @@ $.devicePixelRatio = function () {
  * native srcset support.
  *
  * @return {jQuery} This selection
+ * @chainable
  */
 $.fn.hidpi = function () {
        var $target = this,
@@ -81,9 +87,11 @@ $.fn.hidpi = function () {
  *
  * Exposed for testing.
  *
+ * @private
+ * @static
  * @param {number} devicePixelRatio
  * @param {string} srcset
- * @return {mixed} null or the matching src string
+ * @return {Mixed} null or the matching src string
  */
 $.matchSrcSet = function ( devicePixelRatio, srcset ) {
        var candidates,
@@ -112,4 +120,9 @@ $.matchSrcSet = function ( devicePixelRatio, srcset ) {
        return selectedSrc;
 };
 
+/**
+ * @class jQuery
+ * @mixins jQuery.plugin.hidpi
+ */
+
 }( jQuery ) );
index 01fde4c..c3fd626 100644 (file)
@@ -1,27 +1,22 @@
 /**
  * jQuery makeCollapsible
  *
- * This will enable collapsible-functionality on all passed elements.
- * - Will prevent binding twice to the same element.
- * - Initial state is expanded by default, this can be overriden by adding class
- *   "mw-collapsed" to the "mw-collapsible" element.
- * - Elements made collapsible have jQuery data "mw-made-collapsible" set to true.
- * - The inner content is wrapped in a "div.mw-collapsible-content" (except for tables and lists).
+ * Dual licensed:
+ * - CC BY 3.0 <http://creativecommons.org/licenses/by/3.0>
+ * - GPL2 <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
  *
- * @author Krinkle, 2011-2012
- *
- * Dual license:
- * @license CC BY 3.0 <http://creativecommons.org/licenses/by/3.0>
- * @license GPL2 <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>
+ * @class jQuery.plugin.makeCollapsible
  */
 ( function ( $, mw ) {
+
        /**
         * Handler for a click on a collapsible toggler.
         *
+        * @private
         * @param {jQuery} $collapsible
         * @param {string} action The action this function will take ('expand' or 'collapse').
-        * @param {jQuery|null} [optional] $defaultToggle
-        * @param {Object|undefined} options
+        * @param {jQuery|null} [$defaultToggle]
+        * @param {Object|undefined} [options]
         */
        function toggleElement( $collapsible, action, $defaultToggle, options ) {
                var $collapsibleContent, $containers, hookCallback;
        }
 
        /**
-        * Handles clicking/keypressing on the collapsible element toggle and other
+        * Handle clicking/keypressing on the collapsible element toggle and other
         * situations where a collapsible element is toggled (e.g. the initial
         * toggle for collapsed ones).
         *
+        * @private
         * @param {jQuery} $toggle the clickable toggle itself
         * @param {jQuery} $collapsible the collapsible element
         * @param {jQuery.Event|null} e either the event or null if unavailable
        }
 
        /**
-        * Make any element collapsible.
+        * Enable collapsible-functionality on all elements in the collection.
+        *
+        * - Will prevent binding twice to the same element.
+        * - Initial state is expanded by default, this can be overriden by adding class
+        *   "mw-collapsed" to the "mw-collapsible" element.
+        * - Elements made collapsible have jQuery data "mw-made-collapsible" set to true.
+        * - The inner content is wrapped in a "div.mw-collapsible-content" (except for tables and lists).
         *
-        * Supported options:
-        * - collapseText: text to be used for the toggler when clicking it would
-        *   collapse the element. Default: the 'data-collapsetext' attribute of
-        *   the collapsible element or the content of 'collapsible-collapse'
-        *   message.
-        * - expandText: text to be used for the toggler when clicking it would
-        *   expand the element. Default: the 'data-expandtext' attribute of
-        *   the collapsible element or the content of 'collapsible-expand'
-        *   message.
-        * - collapsed: boolean, whether to collapse immediately. By default
+        * @param {Object} [options]
+        * @param {string} [options.collapseText] Text used for the toggler, when clicking it would
+        *   collapse the element. Default: the 'data-collapsetext' attribute of the
+        *   collapsible element or the content of 'collapsible-collapse' message.
+        * @param {string} [options.expandText] Text used for the toggler, when clicking it would
+        *   expand the element. Default: the 'data-expandtext' attribute of the
+        *   collapsible element or the content of 'collapsible-expand' message.
+        * @param {boolean} [options.collapsed] Whether to collapse immediately. By default
         *   collapse only if the elements has the 'mw-collapsible' class.
-        * - $customTogglers: jQuerified list of elements to be used as togglers
+        * @param {jQuery} [options.$customTogglers] Elements to be used as togglers
         *   for this collapsible element. By default, if the collapsible element
         *   has an id attribute like 'mw-customcollapsible-XXX', elements with a
         *   *class* of 'mw-customtoggle-XXX' are made togglers for it.
-        * - plainMode: boolean, whether to use a "plain mode" when making the
+        * @param {boolean} [options.plainMode=false] Whether to use a "plain mode" when making the
         *   element collapsible - that is, hide entire tables and lists (instead
         *   of hiding only all rows but first of tables, and hiding each list
         *   item separately for lists) and don't wrap other elements in
         *   div.mw-collapsible-content. May only be used with custom togglers.
+        * @return {jQuery}
+        * @chainable
         */
        $.fn.makeCollapsible = function ( options ) {
                if ( options === undefined ) {
                        }
                } );
        };
+
+       /**
+        * @class jQuery
+        * @mixins jQuery.plugin.makeCollapsible
+        */
+
 }( jQuery, mediaWiki ) );
index cdae0ba..46cc8f2 100644 (file)
@@ -1,12 +1,12 @@
 /**
- * jQuery tabIndex
+ * @class jQuery.plugin.tabIndex
  */
 ( function ( $ ) {
 
        /**
-        * Finds the lowerst tabindex in use within a selection
+        * Find the lowest tabindex in use within a selection.
         *
-        * @return number Lowest tabindex on the page
+        * @return {number} Lowest tabindex on the page
         */
        $.fn.firstTabIndex = function () {
                var minTabIndex = null;
@@ -29,9 +29,9 @@
        };
 
        /**
-        * Finds the highest tabindex in use within a selection
+        * Find the highest tabindex in use within a selection.
         *
-        * @return number Highest tabindex on the page
+        * @return {number} Highest tabindex on the page
         */
        $.fn.lastTabIndex = function () {
                var maxTabIndex = null;
@@ -49,4 +49,9 @@
                return maxTabIndex;
        };
 
+       /**
+        * @class jQuery
+        * @mixins jQuery.plugin.tabIndex
+        */
+
 }( jQuery ) );
index 49518fa..042db91 100644 (file)
@@ -70,7 +70,7 @@
                                var retval, range,
                                        el = this.get( 0 );
 
-                               if ( $( el ).is( ':hidden' ) ) {
+                               if ( !el || $( el ).is( ':hidden' ) ) {
                                        retval = '';
                                } else if ( document.selection && document.selection.createRange ) {
                                        activateElementOnIE( el );
                                                // Range containing text after the selection
                                                postRange;
 
-                                       if ( document.selection && document.selection.createRange ) {
+                                       if ( e && document.selection && document.selection.createRange ) {
                                                // IE doesn't properly report non-selected caret position through
                                                // the selection ranges when textarea isn't focused. This can
                                                // lead to saving a bogus empty selection, which then screws up
                                                } while ( ( !preFinished || !periFinished || !postFinished ) );
                                                caretPos = rawPreText.replace( /\r\n/g, '\n' ).length;
                                                endPos = caretPos + rawPeriText.replace( /\r\n/g, '\n' ).length;
-                                       } else if ( e.selectionStart || e.selectionStart === 0 ) {
+                                       } else if ( e && ( e.selectionStart || e.selectionStart === 0 ) ) {
                                                // Firefox support
                                                caretPos = e.selectionStart;
                                                endPos = e.selectionEnd;
index 4c2fc3a..6b212c2 100644 (file)
@@ -1,9 +1,10 @@
-/**
+/*!
  * Live edit preview.
  */
 ( function ( mw, $ ) {
 
        /**
+        * @ignore
         * @param {jQuery.Event} e
         */
        function doLivePreview( e ) {
index 2a02d87..8aa5a1f 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*!
  * JavaScript for History action
  */
 jQuery( function ( $ ) {
@@ -7,6 +7,7 @@ jQuery( function ( $ ) {
                $lis = $( '#pagehistory > li' );
 
        /**
+        * @ignore
         * @context {Element} input
         * @param e {jQuery.Event}
         */
index 727a525..2ded40c 100644 (file)
@@ -1,5 +1,5 @@
-/**
- * This module enables double-click-to-edit functionality.
+/*!
+ * Enables double-click-to-edit functionality.
  */
 ( function ( mw, $ ) {
        $( function () {
index 21f40c5..712cf29 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*!
  * Exif metadata display for MediaWiki file uploads
  *
  * Add an expand/collapse link and collapse by default if set to
index 93befe3..ada101e 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*!
  * JavaScript to enable right click edit functionality.
  * When the user right-clicks in a heading, it will open the
  * edit screen.
index fd77025..5b9afcf 100644 (file)
         */
        mw.language = {
                /**
-                * Language-related data (keyed by language, contains instances of mw.Map). Loaded dynamically
-                * (see ResourceLoaderLanguageDataModule in PHP docs, aka mediawiki.language.data module).
+                * Language-related data (keyed by language, contains instances of mw.Map).
+                * Loaded dynamically (see ResourceLoaderLanguageDataModule class in PHP, registered
+                * as mediawiki.language.data on the client).
                 *
                 * To set data:
                 *
                 *     // Override, extend or create the language data object of 'nl'
                 *     mw.language.setData( 'nl', 'myKey', 'My value' );
                 *
-                *     // Set multiple values at once
+                *     // Set multiple key/values pairs at once
                 *     mw.language.setData( 'nl', { foo: 'X', bar: 'Y' } );
                 *
                 * To get GrammarForms data for language 'nl':
@@ -47,8 +48,8 @@
                 *
                 * @param {string} langCode
                 * @param {string} dataKey
-                * @return {Mixed} Value stored in the mw.Map (or `undefined` if there is no map for the specified
-                *  langCode).
+                * @return {Mixed} Value stored in the mw.Map (or `undefined` if there is no map for the
+                *  specified langCode)
                 */
                getData: function ( langCode, dataKey ) {
                        var langData = mw.language.data;
@@ -64,8 +65,8 @@
                 * Creates the data mw.Map if there isn't one for the specified language already.
                 *
                 * @param {string} langCode
-                * @param {string|Object} dataKey Key or object of key/values.
-                * @param {Mixed} value Value for dataKey, ignored if dataKey is an object.
+                * @param {string|Object} dataKey Key or object of key/values
+                * @param {Mixed} [value] Value for dataKey, omit if dataKey is an object
                 */
                setData: function ( langCode, dataKey, value ) {
                        var langData = mw.language.data;
index f92d372..e7c962f 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*!
  * Show gallery captions when focused. Copied directly from jquery.mw-jump.js.
  * Also Dynamically resize images to justify them.
  */
                                                }
                                        }
                                }
-                       } )();
+                       }() );
                } );
        } );
-} )( jQuery, mediaWiki );
+}( jQuery, mediaWiki ) );
index 50301bd..4819be0 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*!
  * Change multi-page image navigation so that the current page display can be changed
  * without a page reload. Currently, the only image formats that can be multi-page images are
  * PDF and DjVu files
index 5fb14dd..1fe0e26 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*!
  * Animate patrol links to use asynchronous API requests to
  * patrol pages, rather than navigating to a different URI.
  *
index f6154ee..3025260 100644 (file)
@@ -471,7 +471,7 @@ var mw = ( function ( $, undefined ) {
                 *
                 * This was reserved for future use but never ended up being used.
                 *
-                * @deprecated since 1.22: Let deprecated identifiers keep their original name
+                * @deprecated since 1.22 Let deprecated identifiers keep their original name
                 *  and use mw.log#deprecate to create an access container for tracking.
                 * @property
                 */
@@ -538,7 +538,7 @@ var mw = ( function ( $, undefined ) {
                         */
                        log.warn = function () {
                                var console = window.console;
-                               if ( console && console.warn ) {
+                               if ( console && console.warn && console.warn.apply ) {
                                        console.warn.apply( console, arguments );
                                        if ( console.trace ) {
                                                console.trace();
index 8344111..0cf897a 100644 (file)
@@ -90,7 +90,7 @@
 
                /**
                 * @inheritdoc #getName
-                * @deprecated since 1.20 use #getName instead
+                * @deprecated since 1.20 Use #getName instead
                 */
                name: function () {
                        return user.getName();
 
                /**
                 * @inheritdoc #isAnon
-                * @deprecated since 1.20 use #isAnon instead
+                * @deprecated since 1.20 Use #isAnon instead
                 */
                anonymous: function () {
                        return user.isAnon();
index a5bc7d9..f09d03c 100644 (file)
@@ -57,7 +57,7 @@
 
                                // Make sure we don't unset util.$content if it was preset and we don't find anything
                                return util.$content;
-                       } )();
+                       }() );
                },
 
                /* Main body */
                        return null;
                },
 
-               /**
-                * @property {string}
-                * Access key prefix.
-                */
-               tooltipAccessKeyPrefix: ( function () {
-                       var profile = $.client.profile();
-
-                       // Opera on any platform
-                       if ( profile.name === 'opera' ) {
-                               return 'shift-esc-';
-                       }
-
-                       // Chrome on any platform
-                       if ( profile.name === 'chrome' ) {
-                               if ( profile.platform === 'mac' ) {
-                                       // Chrome on Mac
-                                       return 'ctrl-option-';
-                               }
-                               // Chrome on Windows or Linux
-                               // (both alt- and alt-shift work, but alt with E, D, F etc does not
-                               // work since they are browser shortcuts)
-                               return 'alt-shift-';
-                       }
-
-                       // Non-Windows Safari with webkit_version > 526
-                       if ( profile.platform !== 'win'
-                               && profile.name === 'safari'
-                               && profile.layoutVersion > 526
-                       ) {
-                               return 'ctrl-alt-';
-                       }
-
-                       // Firefox 14+ on Mac
-                       if ( profile.platform === 'mac'
-                               && profile.name === 'firefox'
-                               && profile.versionNumber >= 14
-                       ) {
-                               return 'ctrl-option-';
-                       }
-
-                       // Safari/Konqueror on any platform, or any browser on Mac
-                       // (but not Safari on Windows)
-                       if ( !( profile.platform === 'win' && profile.name === 'safari' )
-                               && ( profile.name === 'safari'
-                               || profile.platform === 'mac'
-                               || profile.name === 'konqueror' )
-                       ) {
-                               return 'ctrl-';
-                       }
-
-                       // Firefox/Iceweasel 2.x and later
-                       if ( ( profile.name === 'firefox' || profile.name === 'iceweasel' )
-                               && profile.versionBase > '1' ) {
-                               return 'alt-shift-';
-                       }
-
-                       return 'alt-';
-               } )(),
-
-               /**
-                * @property {RegExp}
-                * Regex to match accesskey tooltips.
-                *
-                * Should match:
-                *
-                * - "ctrl-option-"
-                * - "alt-shift-"
-                * - "ctrl-alt-"
-                * - "ctrl-"
-                *
-                * The accesskey is matched in group $6.
-                */
-               tooltipAccessKeyRegexp: /\[(ctrl-)?(option-)?(alt-)?(shift-)?(esc-)?(.)\]$/,
-
                /**
                 * Add the appropriate prefix to the accesskey shown in the tooltip.
                 *
                                $nodes = $( $nodes );
                        }
 
-                       $nodes.attr( 'title', function ( i, val ) {
-                               if ( val && util.tooltipAccessKeyRegexp.test( val ) ) {
-                                       return val.replace( util.tooltipAccessKeyRegexp,
-                                               '[' + util.tooltipAccessKeyPrefix + '$6]' );
-                               }
-                               return val;
-                       } );
+                       $nodes.updateTooltipAccessKeys();
                },
 
                /*
                                $item.attr( 'id', id );
                        }
 
-                       if ( tooltip ) {
-                               // Trim any existing accesskey hint and the trailing space
-                               tooltip = $.trim( tooltip.replace( util.tooltipAccessKeyRegexp, '' ) );
-                               if ( accesskey ) {
-                                       tooltip += ' [' + accesskey + ']';
-                               }
-                               $link.attr( 'title', tooltip );
-                               if ( accesskey ) {
-                                       util.updateTooltipAccessKeys( $link );
-                               }
-                       }
-
                        if ( accesskey ) {
                                $link.attr( 'accesskey', accesskey );
                        }
 
+                       if ( tooltip ) {
+                               $link.attr( 'title', tooltip ).updateTooltipAccessKeys();
+                       }
+
                        if ( nextnode ) {
                                if ( nextnode.nodeType || typeof nextnode === 'string' ) {
                                        // nextnode is a DOM element (was the only option before MW 1.17, in wikibits.js)
 
                },
 
-               /**
-                * Add a little box at the top of the screen to inform the user of
-                * something, replacing any previous message.
-                * Calling with no arguments, with an empty string or null will hide the message
-                *
-                * @param {Mixed} message The DOM-element, jQuery object or HTML-string to be put inside the message box.
-                * to allow CSS/JS to hide different boxes. null = no class used.
-                * @deprecated since 1.20 Use mw#notify
-                */
-               jsMessage: function ( message ) {
-                       if ( !arguments.length || message === '' || message === null ) {
-                               return true;
-                       }
-                       if ( typeof message !== 'object' ) {
-                               message = $.parseHTML( message );
-                       }
-                       mw.notify( message, { autoHide: true, tag: 'legacy' } );
-                       return true;
-               },
-
                /**
                 * Validate a string as representing a valid e-mail address
                 * according to HTML5 specification. Please note the specification
         */
        mw.log.deprecate( util, 'wikiGetlink', util.getUrl, 'Use mw.util.getUrl instead.' );
 
+       /**
+        * @property {string} tooltipAccessKeyPrefix
+        * Access key prefix. Might be wrong for browsers implementing the accessKeyLabel property.
+        * @deprecated since 1.24 Use the module jquery.accessKeyLabel instead.
+        */
+       mw.log.deprecate( util, 'tooltipAccessKeyPrefix', $.fn.updateTooltipAccessKeys.getAccessKeyPrefix(), 'Use jquery.accessKeyLabel instead.' );
+
+       /**
+        * @property {RegExp} tooltipAccessKeyRegexp
+        * Regex to match accesskey tooltips.
+        *
+        * Should match:
+        *
+        * - "ctrl-option-"
+        * - "alt-shift-"
+        * - "ctrl-alt-"
+        * - "ctrl-"
+        *
+        * The accesskey is matched in group $6.
+        *
+        * Will probably not work for browsers implementing the accessKeyLabel property.
+        *
+        * @deprecated since 1.24 Use the module jquery.accessKeyLabel instead.
+        */
+       mw.log.deprecate( util, 'tooltipAccessKeyRegexp', /\[(ctrl-)?(option-)?(alt-)?(shift-)?(esc-)?(.)\]$/, 'Use jquery.accessKeyLabel instead.' );
+
+       /**
+        * @method jsMessage
+        * Add a little box at the top of the screen to inform the user of
+        * something, replacing any previous message.
+        * Calling with no arguments, with an empty string or null will hide the message
+        *
+        * @param {Mixed} message The DOM-element, jQuery object or HTML-string to be put inside the message box.
+        * to allow CSS/JS to hide different boxes. null = no class used.
+        * @deprecated since 1.20 Use mw#notify
+        */
+       mw.log.deprecate( util, 'jsMessage', function ( message ) {
+               if ( !arguments.length || message === '' || message === null ) {
+                       return true;
+               }
+               if ( typeof message !== 'object' ) {
+                       message = $.parseHTML( message );
+               }
+               mw.notify( message, { autoHide: true, tag: 'legacy' } );
+               return true;
+       }, 'Use mw.notify instead.' );
+
        mw.util = util;
 
 }( mediaWiki, jQuery ) );
index dd125e9..d1d11c3 100644 (file)
@@ -198,7 +198,9 @@ class ModernTemplate extends MonoBookTemplate {
                </div>
 
                <?php $this->printTrail(); ?>
-               </body></html>
+
+       </body>
+</html>
                <?php
                wfRestoreWarnings();
        } // end of execute() method
index a8d3477..ee61272 100644 (file)
@@ -177,7 +177,7 @@ class VectorTemplate extends BaseTemplate {
                        $this->text( 'pageLanguage' );
                        ?>"><span dir="auto"><?php $this->html( 'title' ) ?></span></h1>
                        <?php $this->html( 'prebodyhtml' ) ?>
-                       <div id="bodyContent">
+                       <div id="bodyContent" class="mw-body-content">
                                <?php
                                if ( $this->data['isarticle'] ) {
                                        ?>
@@ -321,8 +321,8 @@ class VectorTemplate extends BaseTemplate {
                </div>
                <?php $this->printTrail(); ?>
 
-               </body>
-               </html>
+       </body>
+</html>
        <?php
        }
 
index a7ff2da..d30f554 100644 (file)
@@ -19,7 +19,6 @@ if ( mw.config.get( 'wgBreakFrames' ) ) {
 
 /**
  * User-agent sniffing.
- * To be removed in MediaWiki 1.23.
  *
  * @deprecated since 1.17 Use jquery.client instead
  */
@@ -51,8 +50,6 @@ mw.log.deprecate( win, 'ie6_bugs', false, msg );
 /**
  * DOM utilities for handling of events, text nodes and selecting elements
  *
- * To be removed in MediaWiki 1.23.
- *
  * @deprecated since 1.17 Use jQuery instead
  */
 msg = 'Use jQuery instead.';
@@ -104,8 +101,6 @@ $( win ).on( 'load', function () {
 /**
  * Toggle checkboxes with shift selection
  *
- * To be removed in MediaWiki 1.23.
- *
  * @deprecated since 1.17 Use jquery.checkboxShiftClick instead
  */
 msg = 'Use jquery.checkboxShiftClick instead.';
@@ -118,8 +113,6 @@ mw.log.deprecate( win, 'checkboxClickHandler', $.noop, msg );
 /**
  * Add a button to the default editor toolbar
  *
- * To be removed in MediaWiki 1.23.
- *
  * @deprecated since 1.17 Use mw.toolbar instead
  */
 mw.log.deprecate( win, 'mwEditButtons', [], 'Use mw.toolbar instead.' );
@@ -128,8 +121,6 @@ mw.log.deprecate( win, 'mwCustomEditButtons', [], 'Use mw.toolbar instead.' );
 /**
  * Spinner creation, injection and removal
  *
- * To be removed in MediaWiki 1.23.
- *
  * @deprecated since 1.18 Use jquery.spinner instead
  */
 mw.log.deprecate( win, 'injectSpinner', $.noop, 'Use jquery.spinner instead.' );
@@ -138,8 +129,6 @@ mw.log.deprecate( win, 'removeSpinner', $.noop, 'Use jquery.spinner instead.' );
 /**
  * Escape utilities
  *
- * To be removed in MediaWiki 1.23.
- *
  * @deprecated since 1.18 Use mw.html instead
  */
 mw.log.deprecate( win, 'escapeQuotes', $.noop, 'Use mw.html instead.' );
@@ -148,18 +137,23 @@ mw.log.deprecate( win, 'escapeQuotesHTML', $.noop, 'Use mw.html instead.' );
 /**
  * Display a message to the user
  *
- * To be removed in MediaWiki 1.23.
- *
  * @deprecated since 1.17 Use mediawiki.notify instead
  * @param {string|HTMLElement} message To be put inside the message box
  */
-mw.log.deprecate( win, 'jsMsg', mw.util.jsMessage, 'Use mediawiki.notify instead.' );
+mw.log.deprecate( win, 'jsMsg', function ( message ) {
+       if ( !arguments.length || message === '' || message === null ) {
+               return true;
+       }
+       if ( typeof message !== 'object' ) {
+               message = $.parseHTML( message );
+       }
+       mw.notify( message, { autoHide: true, tag: 'legacy' } );
+       return true;
+}, 'Use mediawiki.notify instead.' );
 
 /**
  * Misc. utilities
  *
- * To be removed in MediaWiki 1.23.
- *
  * @deprecated since 1.17 Use mediawiki.util instead
  */
 msg = 'Use mediawiki.util instead.';
index 76d1873..f70c7a4 100644 (file)
@@ -127,7 +127,9 @@ pre, .mw-code {
        vertical-align: text-bottom;
 }
 
-#bodyContent {
+/* TODO: Remove #bodyContent selector (kept for backwards compatibility with cached html) */
+#bodyContent,
+.mw-body-content {
        position: relative;
        line-height: @content-line-height;
        font-size: @content-font-size;
index 29c3269..a5eb29b 100644 (file)
@@ -34,6 +34,7 @@ $wgAutoloadClasses += array(
        'TestFileIterator' => "$testDir/testHelpers.inc",
        'TestRecorder' => "$testDir/testHelpers.inc",
        'ITestRecorder' => "$testDir/testHelpers.inc",
+       'DjVuSupport' => "$testDir/testHelpers.inc",
 
        # tests/phpunit
        'MediaWikiTestCase' => "$testDir/phpunit/MediaWikiTestCase.php",
@@ -92,6 +93,7 @@ $wgAutoloadClasses += array(
        'MockBitmapHandler' => "$testDir/phpunit/mocks/media/MockBitmapHandler.php",
        'MockImageHandler' => "$testDir/phpunit/mocks/media/MockImageHandler.php",
        'MockSvgHandler' => "$testDir/phpunit/mocks/media/MockSvgHandler.php",
+       'MockDjVuHandler' => "$testDir/phpunit/mocks/media/MockDjVuHandler.php",
 
        # tests/parser
        'NewParserTest' => "$testDir/phpunit/includes/parser/NewParserTest.php",
index 0899d46..b4e903d 100644 (file)
@@ -64,6 +64,11 @@ class ParserTest {
         */
        private $dbClone;
 
+       /**
+        * @var DjVuSupport
+        */
+       private $djVuSupport;
+
        /**
         * @var string $oldTablePrefix Original table prefix
         */
@@ -136,6 +141,8 @@ class ParserTest {
                $this->runDisabled = isset( $options['run-disabled'] );
                $this->runParsoid = isset( $options['run-parsoid'] );
 
+               $this->djVuSupport = new DjVuSupport();
+
                $this->hooks = array();
                $this->functionHooks = array();
                self::setUp();
@@ -549,6 +556,12 @@ class ParserTest {
                $user = $context->getUser();
                $options = ParserOptions::newFromContext( $context );
 
+               if ( isset( $opts['djvu'] ) ) {
+                       if ( !$this->djVuSupport->isEnabled() ) {
+                               return $this->showSkipped();
+                       }
+               }
+
                if ( isset( $opts['title'] ) ) {
                        $titleText = $opts['title'];
                } else {
@@ -1014,6 +1027,44 @@ class ParserTest {
                        'sha1' => wfBaseConvert( '3', 16, 36, 31 ),
                        'fileExists' => true
                ), $this->db->timestamp( '20010115123500' ), $user );
+
+               # A DjVu file
+               $image = wfLocalFile( Title::makeTitle( NS_FILE, 'LoremIpsum.djvu' ) );
+               $image->recordUpload2( '', 'Upload a DjVu', 'A DjVu', array(
+                       'size' => 3249,
+                       'width' => 2480,
+                       'height' => 3508,
+                       'media_type' => MEDIATYPE_BITMAP,
+                       'mime' => 'image/vnd.djvu',
+                       'metadata' => '<?xml version="1.0" ?>
+<!DOCTYPE DjVuXML PUBLIC "-//W3C//DTD DjVuXML 1.1//EN" "pubtext/DjVuXML-s.dtd">
+<DjVuXML>
+<HEAD></HEAD>
+<BODY><OBJECT height="3508" width="2480">
+<PARAM name="DPI" value="300" />
+<PARAM name="GAMMA" value="2.2" />
+</OBJECT>
+<OBJECT height="3508" width="2480">
+<PARAM name="DPI" value="300" />
+<PARAM name="GAMMA" value="2.2" />
+</OBJECT>
+<OBJECT height="3508" width="2480">
+<PARAM name="DPI" value="300" />
+<PARAM name="GAMMA" value="2.2" />
+</OBJECT>
+<OBJECT height="3508" width="2480">
+<PARAM name="DPI" value="300" />
+<PARAM name="GAMMA" value="2.2" />
+</OBJECT>
+<OBJECT height="3508" width="2480">
+<PARAM name="DPI" value="300" />
+<PARAM name="GAMMA" value="2.2" />
+</OBJECT>
+</BODY>
+</DjVuXML>',
+                       'sha1' => wfBaseConvert( '', 16, 36, 31 ),
+                       'fileExists' => true
+               ), $this->db->timestamp( '20010115123600' ), $user );
        }
 
        public function teardownDatabase() {
@@ -1092,6 +1143,9 @@ class ParserTest {
                        '<?xml version="1.0" encoding="utf-8"?>' .
                        '<svg xmlns="http://www.w3.org/2000/svg"' .
                        ' version="1.1" width="240" height="180"/>' );
+               wfMkdirParents( $dir . '/5/5f', null, __METHOD__ );
+               copy( "$IP/tests/phpunit/data/media/LoremIpsum.djvu", "$dir/5/5f/LoremIpsum.djvu" );
+
                return $dir;
        }
 
@@ -1159,6 +1213,11 @@ class ParserTest {
 
                                "$dir/0/09/Bad.jpg",
 
+                               "$dir/5/5f/LoremIpsum.djvu",
+                               "$dir/thumb/5/5f/LoremIpsum.djvu/page2-2480px-LoremIpsum.djvu.jpg",
+                               "$dir/thumb/5/5f/LoremIpsum.djvu/page2-3720px-LoremIpsum.djvu.jpg",
+                               "$dir/thumb/5/5f/LoremIpsum.djvu/page2-4960px-LoremIpsum.djvu.jpg",
+
                                "$dir/f/ff/Foobar.svg",
                                "$dir/thumb/f/ff/Foobar.svg/180px-Foobar.svg.png",
                                "$dir/thumb/f/ff/Foobar.svg/2000px-Foobar.svg.png",
@@ -1190,6 +1249,11 @@ class ParserTest {
                                "$dir/thumb/f/",
                                "$dir/0/09/",
                                "$dir/0/",
+                               "$dir/5/5f",
+                               "$dir/5",
+                               "$dir/thumb/5/5f/LoremIpsum.djvu",
+                               "$dir/thumb/5/5f",
+                               "$dir/thumb/5",
                                "$dir/thumb",
                                "$dir/math/f/a/5",
                                "$dir/math/f/a",
@@ -1283,6 +1347,19 @@ class ParserTest {
                return false;
        }
 
+       /**
+        * Print a skipped message.
+        *
+        * @return boolean
+        */
+       protected function showSkipped() {
+               if ( $this->showProgress ) {
+                       print $this->term->color( '1;33' ) . 'SKIPPED' . $this->term->reset() . "\n";
+               }
+
+               return true;
+       }
+
        /**
         * Run given strings through a diff and return the (colorized) output.
         * Requires writable /tmp directory and a 'diff' command in the PATH.
index e2bf9f6..569c165 100644 (file)
@@ -3042,6 +3042,38 @@ should be left alone
 </p>
 !! end
 
+!! test
+Definition Lists: Hacky use to indent tables, with comments (bug 63979)
+!! wikitext
+<!-- foo -->
+::{|
+|foo
+|bar
+|}<!-- bar -->
+this text
+should be left alone
+!! html/parsoid
+<!-- foo -->
+<dl><dd><dl><dd><table><tr>
+<td>foo</td>
+<td>bar</td>
+</tr></table><!-- bar --></dd></dl></dd></dl>
+<p>this text
+should be left alone</p>
+!! end
+
+!! test
+Definition Lists: Hacky use to indent tables, with comment before table
+!! wikitext
+::<!-- foo -->{|
+|foo
+|}
+!! html/parsoid
+<dl><dd><dl><dd><!-- foo --><table><tr>
+<td>foo</td>
+</tr></table></dd></dl></dd></dl>
+!! end
+
 # Bug 52473
 !! test
 Definition Lists: Hacky use to indent tables (WS-insensitive)
@@ -3645,17 +3677,22 @@ Non-bracketed: http://example.com
 </p>
 !! end
 
+# parsoid doesn't explicitly mark autonumbered links, see bug 53505
 !! test
 External links: numbered
 !! wikitext
 Numbered: [http://example.com]
 Numbered: [http://example.net]
 Numbered: [http://example.com]
-!! html
+!! html/php
 <p>Numbered: <a rel="nofollow" class="external autonumber" href="http://example.com">[1]</a>
 Numbered: <a rel="nofollow" class="external autonumber" href="http://example.net">[2]</a>
 Numbered: <a rel="nofollow" class="external autonumber" href="http://example.com">[3]</a>
 </p>
+!! html/parsoid
+<p>Numbered: <a rel="mw:ExtLink" href="http://example.com"></a>
+Numbered: <a rel="mw:ExtLink" href="http://example.net"></a>
+Numbered: <a rel="mw:ExtLink" href="http://example.com"></a></p>
 !!end
 
 !! test
@@ -3685,28 +3722,50 @@ http://example.com/1$2345
 </p>
 !! end
 
+# parsoid doesn't explicitly mark autonumbered links, see bug 53505
 !! test
-External links: dollar sign in URL (named)
+External links: dollar sign in URL (autonumber)
 !! wikitext
 [http://example.com/1$2345]
-!! html
+!! html/php
 <p><a rel="nofollow" class="external autonumber" href="http://example.com/1$2345">[1]</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://example.com/1$2345"></a></p>
 !!end
 
 !! test
 External links: open square bracket forbidden in URL (bug 4377)
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 http://example.com/1[2345
-!! html
+!! html/php
 <p><a rel="nofollow" class="external free" href="http://example.com/1">http://example.com/1</a>[2345
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://example.com/1">http://example.com/1</a>[2345</p>
 !! end
 
 !! test
 External links: open square bracket forbidden in URL (named) (bug 4377)
+!! options
+parsoid=wt2html,html2html
 !! wikitext
 [http://example.com/1[2345]
+!! html/php
+<p><a rel="nofollow" class="external text" href="http://example.com/1">[2345</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://example.com/1">[2345</a></p>
+!!end
+
+# parsoid adds a space before the link name
+!! test
+External links: open square bracket forbidden in URL (named) (bug 4377)
+Parsoid variant.
+!! wikitext
+[http://example.com/1 [2345]
 !! html
 <p><a rel="nofollow" class="external text" href="http://example.com/1">[2345</a>
 </p>
@@ -3750,13 +3809,16 @@ External links: protocol-relative URL in brackets
 </p>
 !! end
 
+# parsoid doesn't explicitly mark autonumbered links, see bug 53505
 !! test
 External links: protocol-relative URL in brackets without text
 !! wikitext
 [//example.com]
-!! html
+!! html/php
 <p><a rel="nofollow" class="external autonumber" href="//example.com">[1]</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="//example.com"></a></p>
 !! end
 
 !! test
@@ -3882,54 +3944,95 @@ Old &amp; use: http://x&y
 External links: encoded ampersand
 !! wikitext
 Old &amp; use: http://x&amp;y
-!! html
+!! html/php
 <p>Old &amp; use: <a rel="nofollow" class="external free" href="http://x&amp;y">http://x&amp;y</a>
 </p>
+!! html/parsoid
+<p>Old <span typeof="mw:Entity">&amp;</span> use: <a rel="mw:ExtLink" href="http://x&amp;y">http://x&amp;y</a></p>
 !! end
 
 !! test
 External links: encoded equals (bug 6102)
 !! wikitext
 http://example.com/?foo&#61;bar
-!! html
+!! html/php
 <p><a rel="nofollow" class="external free" href="http://example.com/?foo=bar">http://example.com/?foo=bar</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://example.com/?foo=bar">http://example.com/?foo=bar</a></p>
 !! end
 
+##
+## Note that parsoid doesn't explicit mark autonumbered links, nor
+## does it number them.  As discussed in bug 53505, we can identify
+## autonumbered links via CSS.
+##
+
 !! test
 External links: [raw ampersand]
 !! wikitext
 Old &amp; use: [http://x&y]
-!! html
+!! html/php
 <p>Old &amp; use: <a rel="nofollow" class="external autonumber" href="http://x&amp;y">[1]</a>
 </p>
+!! html/parsoid
+<p>Old <span typeof="mw:Entity">&amp;</span> use: <a rel="mw:ExtLink" href="http://x&amp;y"></a></p>
 !! end
 
+# note that parsoid html is identical to [raw ampersand] case; so html2wt
+# mode will return the [raw ampersand] wikitext
 !! test
 External links: [encoded ampersand]
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 Old &amp; use: [http://x&amp;y]
-!! html
+!! html/php
 <p>Old &amp; use: <a rel="nofollow" class="external autonumber" href="http://x&amp;y">[1]</a>
 </p>
+!! html/parsoid
+<p>Old <span typeof="mw:Entity">&amp;</span> use: <a rel="mw:ExtLink" href="http://x&amp;y"></a></p>
 !! end
 
+!! test
+External links: [raw equals]
+!! wikitext
+[http://example.com/?foo=bar]
+!! html/php
+<p><a rel="nofollow" class="external autonumber" href="http://example.com/?foo=bar">[1]</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://example.com/?foo=bar"></a></p>
+!! end
+
+# note that parsoid html is identical to [raw equals] case; so html2wt
+# mode will return the [raw equals] wikitext
 !! test
 External links: [encoded equals] (bug 6102)
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [http://example.com/?foo&#61;bar]
-!! html
+!! html/php
 <p><a rel="nofollow" class="external autonumber" href="http://example.com/?foo=bar">[1]</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://example.com/?foo=bar"></a></p>
 !! end
 
+# xxx parsoid strips the IDN character, so the round-trip tests will
+#     obviously fail and are disabled. --cscott
 !! test
 External links: [IDN ignored character reference in hostname; strip it right off]
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [http://e&zwnj;xample.com/]
-!! html
+!! html/php
 <p><a rel="nofollow" class="external autonumber" href="http://example.com/">[1]</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://example.com/"></a></p>
 !! end
 
 # FIXME: This test (the IDN characters in the text of a link) is an inconsistency.
@@ -3949,13 +4052,19 @@ External links: [IDN ignored character reference in hostname; strip it right off
 #
 # All our love,
 # The Parsoid team.
+# xxx parsoid strips the IDN character, so the round-trip tests will
+#     obviously fail and are disabled. --cscott
 !! test
 External links: IDN ignored character reference in hostname; strip it right off
+!! options
+parsoid=wt2html,html2html
 !! wikitext
 http://e&zwnj;xample.com/
-!! html
+!! html/php
 <p><a rel="nofollow" class="external free" href="http://example.com/">http://example.com/</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://example.com/">http://example.com/</a></p>
 !! end
 
 !! test
@@ -3967,13 +4076,16 @@ http://www.jpeg.org
 </p>
 !! end
 
+# parsoid doesn't explicitly mark autonumbered links, see bug 53505
 !! test
 External links: URL within URL (original bug 2)
 !! wikitext
 [http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp]
-!! html
+!! html/php
 <p><a rel="nofollow" class="external autonumber" href="http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp">[1]</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.unausa.org/newindex.asp?place=http://www.unausa.org/programs/mun.asp"></a></p>
 !! end
 
 !! test
@@ -4122,9 +4234,11 @@ Bug 2702: Mismatched <i>, <b> and <a> tags are invalid
 Bug 4781: %26 in URL
 !! wikitext
 http://www.example.com/?title=AT%26T
-!! html
+!! html/php
 <p><a rel="nofollow" class="external free" href="http://www.example.com/?title=AT%26T">http://www.example.com/?title=AT%26T</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.example.com/?title=AT%26T">http://www.example.com/?title=AT%26T</a></p>
 !! end
 
 # According to http://dev.w3.org/html5/spec/Overview.html#parsing-urls a plain
@@ -4133,18 +4247,22 @@ http://www.example.com/?title=AT%26T
 Bug 4781, 5267: %25 in URL
 !! wikitext
 http://www.example.com/?title=100%25_Bran
-!! html
+!! html/php
 <p><a rel="nofollow" class="external free" href="http://www.example.com/?title=100%25_Bran">http://www.example.com/?title=100%25_Bran</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.example.com/?title=100%25_Bran">http://www.example.com/?title=100%25_Bran</a></p>
 !! end
 
 !! test
 Bug 4781, 5267: %28, %29 in URL
 !! wikitext
 http://www.example.com/?title=Ben-Hur_%281959_film%29
-!! html
+!! html/php
 <p><a rel="nofollow" class="external free" href="http://www.example.com/?title=Ben-Hur_%281959_film%29">http://www.example.com/?title=Ben-Hur_%281959_film%29</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.example.com/?title=Ben-Hur_%281959_film%29">http://www.example.com/?title=Ben-Hur_%281959_film%29</a></p>
 !! end
 
 
@@ -4152,27 +4270,33 @@ http://www.example.com/?title=Ben-Hur_%281959_film%29
 Bug 4781: %26 in autonumber URL
 !! wikitext
 [http://www.example.com/?title=AT%26T]
-!! html
+!! html/php
 <p><a rel="nofollow" class="external autonumber" href="http://www.example.com/?title=AT%26T">[1]</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.example.com/?title=AT%26T"></a></p>
 !! end
 
 !! test
 Bug 4781, 5267: %26 in autonumber URL
 !! wikitext
 [http://www.example.com/?title=100%25_Bran]
-!! html
+!! html/php
 <p><a rel="nofollow" class="external autonumber" href="http://www.example.com/?title=100%25_Bran">[1]</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.example.com/?title=100%25_Bran"></a></p>
 !! end
 
 !! test
 Bug 4781, 5267: %28, %29 in autonumber URL
 !! wikitext
 [http://www.example.com/?title=Ben-Hur_%281959_film%29]
-!! html
+!! html/php
 <p><a rel="nofollow" class="external autonumber" href="http://www.example.com/?title=Ben-Hur_%281959_film%29">[1]</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.example.com/?title=Ben-Hur_%281959_film%29"></a></p>
 !! end
 
 
@@ -4180,13 +4304,15 @@ Bug 4781, 5267: %28, %29 in autonumber URL
 Bug 4781: %26 in bracketed URL
 !! wikitext
 [http://www.example.com/?title=AT%26T link]
-!! html
+!! html/php
 <p><a rel="nofollow" class="external text" href="http://www.example.com/?title=AT%26T">link</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.example.com/?title=AT%26T">link</a></p>
 !! end
 
 !! test
-Bug 4781, 5267: %26 in bracketed URL
+Bug 4781, 5267: %25 in bracketed URL
 !! wikitext
 [http://www.example.com/?title=100%25_Bran link]
 !! html
@@ -4198,11 +4324,57 @@ Bug 4781, 5267: %26 in bracketed URL
 Bug 4781, 5267: %28, %29 in bracketed URL
 !! wikitext
 [http://www.example.com/?title=Ben-Hur_%281959_film%29 link]
-!! html
+!! html/php
 <p><a rel="nofollow" class="external text" href="http://www.example.com/?title=Ben-Hur_%281959_film%29">link</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://www.example.com/?title=Ben-Hur_%281959_film%29">link</a></p>
 !! end
 
+# Note that parsoid does not munge anchor text; all non-space
+# characters are valid in HTML5 ids.
+!! test
+Anchor containing a #. (bug 63430)
+!! wikitext
+[[Main Page#And#Link]]
+!! html/php
+<p><a href="/wiki/Main_Page#And.23Link" title="Main Page">Main Page#And#Link</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Main_Page#And%23Link">Main Page#And#Link</a></p>
+!! end
+
+!! test
+External link containing a period in the anchor. (bug 63947)
+!! wikitext
+[//foo.org/bar#baz. bang]
+
+[//foo.org/bar. bang]
+!! html/php
+<p><a rel="nofollow" class="external text" href="//foo.org/bar#baz.">bang</a>
+</p><p><a rel="nofollow" class="external text" href="//foo.org/bar.">bang</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="//foo.org/bar#baz.">bang</a></p>
+<p><a rel="mw:ExtLink" href="//foo.org/bar.">bang</a></p>
+!! end
+
+!! test
+External link containing a single quote. (bug 63947)
+!! wikitext
+[//foo.org/bar'baz]
+
+[//foo.org/bar'baz bang]
+!! html/php
+<p><a rel="nofollow" class="external autonumber" href="//foo.org/bar'baz">[1]</a>
+</p><p><a rel="nofollow" class="external text" href="//foo.org/bar'baz">bang</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="//foo.org/bar'baz"></a></p>
+<p><a rel="mw:ExtLink" href="//foo.org/bar'baz">bang</a></p>
+!! end
+
+
 !! test
 External link containing double-single-quotes in text '' (bug 4598 sanity check)
 !! wikitext
@@ -4265,10 +4437,14 @@ Brackets in urls
 http://example.com/index.php?foozoid%5B%5D=bar
 
 http://example.com/index.php?foozoid&#x5B;&#x5D;=bar
-!! html
+!! html/php
 <p><a rel="nofollow" class="external free" href="http://example.com/index.php?foozoid%5B%5D=bar">http://example.com/index.php?foozoid%5B%5D=bar</a>
 </p><p><a rel="nofollow" class="external free" href="http://example.com/index.php?foozoid%5B%5D=bar">http://example.com/index.php?foozoid%5B%5D=bar</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://example.com/index.php?foozoid%5B%5D=bar">http://example.com/index.php?foozoid%5B%5D=bar</a></p>
+
+<p><a rel="mw:ExtLink" href="http://example.com/index.php?foozoid[]=bar">http://example.com/index.php?foozoid[]=bar</a></p>
 !! end
 
 !! test
@@ -4902,12 +5078,16 @@ Invalid attributes in table cell (bug 1830)
 !! end
 
 
+# The "|}" to close the table is missing from the input, so parsoid's
+# *2wt modes will fail.
 !! test
 Table security: embedded pipes (http://lists.wikimedia.org/mailman/htdig/wikitech-l/2006-April/022293.html)
+!! options
+parsoid=wt2html,html2html
 !! wikitext
 {|
 | |[ftp://|x||]" onmouseover="alert(document.cookie)">test
-!! html
+!! html/php
 <table>
 <tr>
 <td>[<a rel="nofollow" class="external free" href="ftp://%7Cx">ftp://%7Cx</a></td>
@@ -4916,6 +5096,10 @@ Table security: embedded pipes (http://lists.wikimedia.org/mailman/htdig/wikitec
 </tr>
 </table>
 
+!! html/parsoid
+<table><tbody>
+<tr>
+<td><a rel="mw:ExtLink" href="ftp://|x||"></a>" onmouseover="alert(document.cookie)">test</td></tr></tbody></table>
 !! end
 
 
@@ -5266,6 +5450,17 @@ Piped link with comment in link text
 </p>
 !! end
 
+!! test
+Piped link with multiple pipe characters in link text
+!! wikitext
+[[Main Page||The|Main|Page|]]
+!! html/php
+<p><a href="/wiki/Main_Page" title="Main Page">|The|Main|Page|</a>
+</p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="Main_Page">|The|Main|Page|</a></p>
+!! end
+
 !! test
 Broken link
 !! wikitext
@@ -5454,22 +5649,37 @@ Link containing }
 </p>
 !! end
 
+!! article
+7% Solution
+!! text
+Just a test of an article title containing a percent.
+!! endarticle
+
 !! test
 Link containing % (not as a hex sequence)
 !! wikitext
 [[7% Solution]]
-!! html
-<p><a href="/index.php?title=7%25_Solution&amp;action=edit&amp;redlink=1" class="new" title="7% Solution (page does not exist)">7% Solution</a>
+!! html/php
+<p><a href="/wiki/7%25_Solution" title="7% Solution">7% Solution</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./7%25_Solution">7% Solution</a></p>
 !! end
 
+# note that the parsoid HTML is identical to the previous test output,
+# so the previous test ensures that the html2wt mode will generate the
+# "not as a hex sequence" wikitext.
 !! test
 Link containing % as a single hex sequence interpreted to char
+!! options
+parsoid=wt2wt,wt2html,html2html
 !! wikitext
 [[7%25 Solution]]
-!! html
-<p><a href="/index.php?title=7%25_Solution&amp;action=edit&amp;redlink=1" class="new" title="7% Solution (page does not exist)">7% Solution</a>
+!! html/php
+<p><a href="/wiki/7%25_Solution" title="7% Solution">7% Solution</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./7%25_Solution">7% Solution</a></p>
 !!end
 
 !! test
@@ -5481,14 +5691,18 @@ Link containing % as a double hex sequence interpreted to hex sequence
 </p>
 !!end
 
+# note that parsoid does not munge anchor text; all non-space
+# characters are valid in HTML5 anchors.
 !! test
 Link containing "#<" and "#>" % as a hex sequences- these are valid section anchors
 Example for such a section: == < ==
 !! wikitext
 [[%23%3c]][[%23%3e]]
-!! html
+!! html/php
 <p><a href="#.3C">#&lt;</a><a href="#.3E">#&gt;</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Main%20Page#%3C">#&lt;</a><a rel="mw:WikiLink" href="./Main%20Page#%3E">#></a></p>
 !! end
 
 !! test
@@ -5504,9 +5718,11 @@ Link containing "<#" and ">#" as a hex sequences
 Link containing an equals sign
 !! wikitext
 [[Special:BookSources/isbn=4-00-026157-6]]
-!! html
+!! html/php
 <p><a href="/wiki/Special:BookSources/isbn%3D4-00-026157-6" title="Special:BookSources/isbn=4-00-026157-6">Special:BookSources/isbn=4-00-026157-6</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Special:BookSources/isbn=4-00-026157-6">Special:BookSources/isbn=4-00-026157-6</a></p>
 !! end
 
 !! article
@@ -5522,33 +5738,39 @@ Just a test of an article title containing a tilde.
 Link containing a tilde
 !! wikitext
 [[Foo~bar]]
-!! html
+!! html/php
 <p><a href="/wiki/Foo%7Ebar" title="Foo~bar">Foo~bar</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Foo~bar">Foo~bar</a></p>
 !! end
 
 !! test
 Link containing double-single-quotes '' (bug 4598)
 !! wikitext
 [[Lista d''e paise d''o munno]]
-!! html
+!! html/php
 <p><a href="/index.php?title=Lista_d%27%27e_paise_d%27%27o_munno&amp;action=edit&amp;redlink=1" class="new" title="Lista d''e paise d''o munno (page does not exist)">Lista d''e paise d''o munno</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Lista_d''e_paise_d''o_munno">Lista d''e paise d''o munno</a></p>
 !! end
 
 !! test
 Link containing double-single-quotes '' in text (bug 4598 sanity check)
 !! wikitext
 Some [[Link|pretty ''italics'' and stuff]]!
-!! html
+!! html/php
 <p>Some <a href="/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (page does not exist)">pretty <i>italics</i> and stuff</a>!
 </p>
+!! html/parsoid
+<p>Some <a rel="mw:WikiLink" href="Link">pretty <i>italics</i> and stuff</a>!</p>
 !! end
 
 !! test
 Link containing double-single-quotes '' in text embedded in italics (bug 4598 sanity check)
 !! wikitext
-''Some [[Link|pretty ''italics'' and stuff]]!
+''Some [[Link|pretty ''italics'' and stuff]]!''
 !! html
 <p><i>Some <a href="/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (page does not exist)">pretty <i>italics</i> and stuff</a>!</i>
 </p>
@@ -5564,12 +5786,17 @@ Link with double quotes in title part (literal) and alternate part (interpreted)
 [[''Pentecoste''|Pentecoste]]
 
 [[''Pentecoste''|''Pentecoste'']]
-!! html
+!! html/php
 <p><a href="/index.php?title=Special:Upload&amp;wpDestFile=Denys_Savchenko_%27%27Pentecoste%27%27.jpg" class="new" title="File:Denys Savchenko &#39;&#39;Pentecoste&#39;&#39;.jpg">File:Denys Savchenko <i>Pentecoste</i>.jpg</a>
 </p><p><a href="/index.php?title=%27%27Pentecoste%27%27&amp;action=edit&amp;redlink=1" class="new" title="''Pentecoste'' (page does not exist)">''Pentecoste''</a>
 </p><p><a href="/index.php?title=%27%27Pentecoste%27%27&amp;action=edit&amp;redlink=1" class="new" title="''Pentecoste'' (page does not exist)">Pentecoste</a>
 </p><p><a href="/index.php?title=%27%27Pentecoste%27%27&amp;action=edit&amp;redlink=1" class="new" title="''Pentecoste'' (page does not exist)"><i>Pentecoste</i></a>
 </p>
+!! html/parsoid
+<meta typeof="mw:Placeholder"/>
+<p><a rel="mw:WikiLink" href="''Pentecoste''">''Pentecoste''</a></p>
+<p><a rel="mw:WikiLink" href="''Pentecoste''">Pentecoste</a></p>
+<p><a rel="mw:WikiLink" href="''Pentecoste''"><i>Pentecoste</i></a></p>
 !! end
 
 !! test
@@ -5591,9 +5818,11 @@ Broken image links with HTML captions (bug 39700)
 Plain link to URL
 !! wikitext
 [[http://www.example.com]]
-!! html
+!! html/php
 <p>[<a rel="nofollow" class="external autonumber" href="http://www.example.com">[1]</a>]
 </p>
+!! html/parsoid
+<p>[<a rel="mw:ExtLink" href="http://www.example.com"></a>]</p>
 !! end
 
 !! test
@@ -5609,9 +5838,11 @@ Plain link to URL with link text
 Plain link to protocol-relative URL
 !! wikitext
 [[//www.example.com]]
-!! html
+!! html/php
 <p>[<a rel="nofollow" class="external autonumber" href="//www.example.com">[1]</a>]
 </p>
+!! html/parsoid
+<p>[<a rel="mw:ExtLink" href="//www.example.com"></a>]</p>
 !! end
 
 !! test
@@ -5651,29 +5882,36 @@ Plain link to page with question mark in title
 Piped link to URL
 !! wikitext
 Piped link to URL: [[http://www.example.com|an example URL]]
-!! html
+!! html/php
 <p>Piped link to URL: [<a rel="nofollow" class="external text" href="http://www.example.com%7Can">example URL</a>]
 </p>
+!! html/parsoid
+<p>Piped link to URL: [<a rel="mw:ExtLink" href="http://www.example.com|an">example URL</a>]</p>
 !! end
 
 !! test
 BUG 2: [[page|http://url/]] should link to page, not http://url/
 !! wikitext
 [[Main Page|http://url/]]
-!! html
+!! html/php
 <p><a href="/wiki/Main_Page" title="Main Page">http://url/</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Main_Page">http://url/</a></p>
 !! end
 
+# Parsoid does not mark self-links, by design.
 !! test
 BUG 337: Escaped self-links should be bold
 !! options
 title=[[Bug462]]
 !! wikitext
 [[Bu&#103;462]] [[Bug462]]
-!! html
+!! html/php
 <p><strong class="selflink">Bu&#103;462</strong> <strong class="selflink">Bug462</strong>
 </p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Bug462">Bug462</a> <a rel="mw:WikiLink" href="./Bug462">Bug462</a></p>
 !! end
 
 !! test
@@ -5997,8 +6235,6 @@ Different interwiki prefixes mapping to the same URL
 
 !! test
 Interwiki links that cannot be represented in wiki syntax
-!! options
-parsoid
 !! wikitext
 [[meatball:ok]]
 [[meatball:ok#foo|ok with fragment]]
@@ -6006,10 +6242,10 @@ parsoid
 [http://de.wikipedia.org/wiki/Foo?action=history has query]
 [http://de.wikipedia.org/wiki/#foo is just fragment]
 
-!! html
+!! html/parsoid
 <p><a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok">meatball:ok</a>
 <a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok#foo">ok with fragment</a>
-<a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok_as_well%3F">ok ending with ? mark</a>
+<a rel="mw:ExtLink" href="http://www.usemod.com/cgi-bin/mb.pl?ok_as_well?">ok ending with ? mark</a>
 <a rel="mw:ExtLink" href="http://de.wikipedia.org/wiki/Foo?action=history">has query</a>
 <a rel="mw:ExtLink" href="http://de.wikipedia.org/wiki/#foo">is just fragment</a></p>
 !! end
@@ -7519,7 +7755,7 @@ Magic Word: {{NUMBEROFFILES}}
 !! wikitext
 {{NUMBEROFFILES}}
 !! html
-<p>4
+<p>5
 </p>
 !! end
 
@@ -8748,7 +8984,7 @@ parsoid
 !!end
 
 !!test
-Templates: Inline Text: 1. Multiple tmeplate uses
+Templates: Inline Text: 1. Multiple template uses
 !! wikitext
 {{echo|Foo}}bar{{echo|baz}}
 !! html
@@ -9263,6 +9499,33 @@ Templates: Ugly templates: 4. newline-only template parameter inconsistency
 </p>
 !! end
 
+# Bug 64017 -- ugly wikitext with fostered content generates two template ranges that
+# have a true overlap (T1-start - T2-start - T1-end - T2-end).
+!! test
+Templates: Ugly templates: 5. Template encapsulation test: Non-trivial overlap of template ranges is properly handled
+!! wikitext
+{{echo|<table>}}
+{{echo|<div>foo}}
+{{echo|</table>}}
+!! html/parsoid
+<div about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;table>"}},"i":0}},"\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;div>foo"}},"i":1}},"\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;/table>"}},"i":2}}]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[{"k":"1","spc":["","","",""]}],[{"k":"1","spc":["","","",""]}],[{"k":"1","spc":["","","",""]}]]}'>foo
+</div><table about="#mwt1" data-parsoid='{"stx":"html"}'>
+</table>
+!! end
+
+# Bug 64017 -- ugly wikitext with fostered content generates two template ranges
+# that are "identical" and generate nesting cycles in the algorithm
+!! test
+Templates: Ugly templates: 6. Template encapsulation test: Cyclical nesting of template ranges is properly handled
+!! wikitext
+{{echo|<table><tr><td><table>}}
+{{echo|<div>}}
+{{echo|</div>}}
+!! html/parsoid
+<table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;table>&lt;tr>&lt;td>&lt;table>"}},"i":0}},"\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;div>"}},"i":1}},"\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;/div>"}},"i":2}}]}' data-parsoid='{"stx":"html","autoInsertedEnd":true,"pi":[[{"k":"1","spc":["","","",""]}],[{"k":"1","spc":["","","",""]}],[{"k":"1","spc":["","","",""]}]]}'><tbody><tr data-parsoid='{"stx":"html"}'><td data-parsoid='{"stx":"html"}'><div data-parsoid='{"stx":"html"}'>
+</div><table about="#mwt1" data-parsoid='{"stx":"html"}'>
+</table></td></tr></tbody></table>
+!! end
 
 !!test
 Parser Functions: 1. Simple example
@@ -10473,6 +10736,8 @@ parsoid=wt2html,wt2wt,html2html
 
 !! test
 Image with 'frameless' first.
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[File:Foobar.jpg|frameless|caption]]
 
@@ -10484,10 +10749,16 @@ Image with 'frameless' first.
 </p><p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
 </p><p><a href="/wiki/File:Foobar.jpg" class="image" title="caption"><img alt="caption" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>
 </p>
+!! html/parsoid
+<p><span class="mw-default-size" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a></span></p>
+<p><span class="mw-default-size" typeof="mw:Image/Frameless" data-mw='{"caption":"caption"}'><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a></span></p>
 !! end
 
 !! test
 Image with 'frame' first.
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[File:Foobar.jpg|frame|caption]]
 [[File:Foobar.jpg|frame|frameless|caption]]
@@ -10497,10 +10768,14 @@ Image with 'frame' first.
 <div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption">caption</div></div></div>
 <div class="thumb tright"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption">caption</div></div></div>
 
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
 Image with 'thumb' first.
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[File:Foobar.jpg|thumb|caption]]
 [[File:Foobar.jpg|thumb|frameless|caption]]
@@ -10510,6 +10785,8 @@ Image with 'thumb' first.
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>caption</div></div></div>
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>caption</div></div></div>
 
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure><figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 ###################
@@ -12612,27 +12889,33 @@ Attribute test: no value
 Bug 2095: link with three closing brackets
 !! wikitext
 [[Main Page]]]
-!! html
+!! html/php
 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>]
 </p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Main_Page">Main Page</a>]</p>
 !! end
 
 !! test
 Bug 2095: link with pipe and three closing brackets
 !! wikitext
 [[Main Page|link]]]
-!! html
+!! html/php
 <p><a href="/wiki/Main_Page" title="Main Page">link</a>]
 </p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Main_Page">link</a>]</p>
 !! end
 
 !! test
 Bug 2095: link with pipe and three closing brackets, version 2
 !! wikitext
 [[Main Page|[http://example.com/]]]
-!! html
+!! html/php
 <p><a href="/wiki/Main_Page" title="Main Page">[http://example.com/]</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:WikiLink" href="./Main_Page">[http://example.com/]</a></p>
 !! end
 
 
@@ -13565,6 +13848,7 @@ HTML ordered list item with parameters oddity
 
 !! end
 
+# parsoid doesn't explicitly mark autonumbered links, see bug 53505
 !!test
 bug 5918: autonumbering
 !! wikitext
@@ -13577,13 +13861,19 @@ ftp://inlineftp
 [mailto:enclosed@mail.tld]
 
 mailto:inline@mail.tld
-!! html
+!! html/php
 <p><a rel="nofollow" class="external autonumber" href="http://first/">[1]</a> <a rel="nofollow" class="external autonumber" href="http://second">[2]</a> <a rel="nofollow" class="external autonumber" href="ftp://ftp">[3]</a>
 </p><p><a rel="nofollow" class="external free" href="ftp://inlineftp">ftp://inlineftp</a>
 </p><p><a rel="nofollow" class="external text" href="mailto:enclosed@mail.tld">With target</a>
 </p><p><a rel="nofollow" class="external autonumber" href="mailto:enclosed@mail.tld">[4]</a>
 </p><p><a rel="nofollow" class="external free" href="mailto:inline@mail.tld">mailto:inline@mail.tld</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://first/"></a> <a rel="mw:ExtLink" href="http://second"></a> <a rel="mw:ExtLink" href="ftp://ftp"></a></p>
+<p><a rel="mw:ExtLink" href="ftp://inlineftp">ftp://inlineftp</a></p>
+<p><a rel="mw:ExtLink" href="mailto:enclosed@mail.tld">With target</a></p>
+<p><a rel="mw:ExtLink" href="mailto:enclosed@mail.tld"></a></p>
+<p><a rel="mw:ExtLink" href="mailto:inline@mail.tld">mailto:inline@mail.tld</a></p>
 !! end
 
 
@@ -14786,17 +15076,39 @@ xxx
 !! test
 Handling of &#x0A; in URLs
 !! wikitext
-**irc://&#x0A;a
-!! html
+** irc://&#x0A;a
+!! html/php
 <ul>
 <li><ul>
-<li><a rel="nofollow" class="external free" href="irc://%0Aa">irc://%0Aa</a>
+<li> <a rel="nofollow" class="external free" href="irc://%0Aa">irc://%0Aa</a>
 </li>
 </ul>
 </li>
 </ul>
 
-!!end
+!! html/parsoid
+<ul><li><ul><li> <a rel="mw:ExtLink" href="irc://
+a">irc://
+a</a></li></ul></li></ul>
+!! end
+
+!! test
+Handling of %0A in URLs
+!! wikitext
+** irc://%0Aa
+!! html/php
+<ul>
+<li><ul>
+<li> <a rel="nofollow" class="external free" href="irc://%0Aa">irc://%0Aa</a>
+</li>
+</ul>
+</li>
+</ul>
+
+!! html/parsoid
+<ul><li><ul><li> <a rel="mw:ExtLink" href="irc://%0Aa">irc://%0Aa</a></li></ul></li></ul>
+!! end
+
 
 # The PHP parser strips the empty tags out for giggles; parsoid doesn't.
 !! test
@@ -15136,29 +15448,39 @@ foobar.jpg
 
 !! test
 HTML Hex character encoding (spells the word "JavaScript")
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 &#x4A;&#x061;&#x0076;&#x00061;&#x000053;&#x0000063;&#114;&#x0000069;&#00000112;&#x0000000074;
-!! html
+!! html/php
 <p>&#x4a;&#x61;&#x76;&#x61;&#x53;&#x63;&#114;&#x69;&#112;&#x74;
 </p>
+!! html/parsoid
+<p><span typeof="mw:Entity">J</span><span typeof="mw:Entity">a</span><span typeof="mw:Entity">v</span><span typeof="mw:Entity">a</span><span typeof="mw:Entity">S</span><span typeof="mw:Entity">c</span><span typeof="mw:Entity">r</span><span typeof="mw:Entity">i</span><span typeof="mw:Entity">p</span><span typeof="mw:Entity">t</span></p>
 !! end
 
 !! test
 HTML Hex character encoding bogus encoding (bug 26437 regression check)
 !! wikitext
 &#xsee;&#XSEE;
-!! html
+!! html/php
 <p>&amp;#xsee;&amp;#XSEE;
 </p>
+!! html/parsoid
+<p>&amp;#xsee;&amp;#XSEE;</p>
 !! end
 
 !! test
 HTML Hex character encoding mixed case
+!! options
+parsoid=wt2html,wt2wt,html2html
 !! wikitext
 &#xEE;&#Xee;
-!! html
+!! html/php
 <p>&#xee;&#xee;
 </p>
+!! html/parsoid
+<p><span typeof="mw:Entity">î</span><span typeof="mw:Entity">î</span></p>
 !! end
 
 !! test
@@ -15305,6 +15627,17 @@ Width-sized image (using px, with preceding whitespace - test regression from r3
 </p>
 !!end
 
+!! test
+Image with page parameter
+!! options
+djvu
+!! wikitext
+[[File:LoremIpsum.djvu|page=2]]
+!! html
+<p><a href="/index.php?title=File:LoremIpsum.djvu&amp;page=2" class="image"><img alt="LoremIpsum.djvu" src="http://example.com/images/thumb/5/5f/LoremIpsum.djvu/page2-2480px-LoremIpsum.djvu.jpg" width="2480" height="3508" srcset="http://example.com/images/thumb/5/5f/LoremIpsum.djvu/page2-3720px-LoremIpsum.djvu.jpg 1.5x, http://example.com/images/thumb/5/5f/LoremIpsum.djvu/page2-4960px-LoremIpsum.djvu.jpg 2x" /></a>
+</p>
+!! end
+
 !! test
 Another italics / bold test
 !! wikitext
@@ -15351,11 +15684,13 @@ disabled
 !! test
 Images with the "|" character in the comment
 !! wikitext
-[[image:Foobar.jpg|thumb|An [http://test/?param1=|left|&param2=|x external] URL]]
-!! html
+[[File:Foobar.jpg|thumb|An [http://test/?param1=|left|&param2=|x external] URL]]
+!! html/php
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"><img src="/skins/common/images/magnify-clip.png" width="15" height="11" alt="" /></a></div>An <a rel="nofollow" class="external text" href="http://test/?param1=%7Cleft%7C&amp;param2=%7Cx">external</a> URL</div></div></div>
 
-!!end
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="25" width="220"/></a><figcaption>An <a rel="mw:ExtLink" href="http://test/?param1=|left|&amp;param2=|x">external</a> URL</figcaption></figure>
+!! end
 
 !! test
 [Before] HTML without raw HTML enabled ($wgRawHtml==false)
@@ -16626,9 +16961,11 @@ Bug 15196: localised external link numbers
 language=fa
 !! wikitext
 [http://en.wikipedia.org/]
-!! html
+!! html/php
 <p><a rel="nofollow" class="external autonumber" href="http://en.wikipedia.org/">[۱]</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/"></a></p>
 !! end
 
 !! test
@@ -17660,9 +17997,11 @@ Special:Foobar
 Bug 34939 - Case insensitive link parsing ([HttP://])
 !! wikitext
 [HttP://MediaWiki.Org/]
-!! html
+!! html/php
 <p><a rel="nofollow" class="external autonumber" href="HttP://MediaWiki.Org/">[1]</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="HttP://MediaWiki.Org/"></a></p>
 !! end
 
 !!test
@@ -17678,9 +18017,11 @@ Bug 34939 - Case insensitive link parsing ([HttP:// title])
 Bug 34939 - Case insensitive link parsing (HttP://)
 !! wikitext
 HttP://MediaWiki.Org/
-!! html
+!! html/php
 <p><a rel="nofollow" class="external free" href="HttP://MediaWiki.Org/">HttP://MediaWiki.Org/</a>
 </p>
+!! html/parsoid
+<p><a rel="mw:ExtLink" href="HttP://MediaWiki.Org/">HttP://MediaWiki.Org/</a></p>
 !! end
 
 !!test
@@ -18141,6 +18482,16 @@ B <span about="#mwt4" class="reference" data-mw='{"name":"ref","attrs":{"group":
 <ol class="references" typeof="mw:Extension/references" about="#mwt8" data-parsoid='{"src":"&lt;references group=\"X\">\n&lt;ref name=\"b\">foo&lt;/ref>\n&lt;/references>","group":"X"}' data-mw='{"name":"references","body":{"extsrc":"&lt;ref name=\"b\">foo&lt;/ref>","html":"\n&lt;span about=\"#mwt10\" class=\"reference\" data-mw=&#39;{\"name\":\"ref\",\"body\":{\"html\":\"foo\"},\"attrs\":{\"name\":\"b\"}}&#39; rel=\"dc:references\" typeof=\"mw:Extension/ref\">&lt;a href=\"#cite_note-b-1\">[1]&lt;/a>&lt;/span>\n"},"attrs":{"group":"X"}}'><li about="#cite_note-b-3" id="cite_note-b-3" data-parsoid="{}"><span rel="mw:referencedBy" data-parsoid="{}"><a href="#cite_ref-b-3-0" data-parsoid="{}">↑</a></span> </li></ol>
 !! end
 
+!! test
+Entities in ref name
+!! options
+parsoid
+!! wikitext
+<ref name="test &amp; me">hi</ref>
+!! html
+<p data-parsoid='{}'><span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"hi"},"attrs":{"name":"test &amp; me"}}' id="cite_ref-test &amp; me-1-0" rel="dc:references" typeof="mw:Extension/ref" data-parsoid='{"src":"&lt;ref name=\"test &amp;amp; me\">hi&lt;/ref>"}'><a href="#cite_note-test &amp; me-1" data-parsoid="{}">[1]</a></span></p>
+!! end
+
 # This test is wt2html only because we're permitting the serializer to produce
 # dirty diffs, normalizing the unclosed references to the self-closed version.
 !! test
 <p>b</p></div>
 !! end
 
+!! test
+Substrings resembling wikitext in hrefs should not get nowiki escapes
+!! options
+parsoid=html2wt
+!! wikitext
+[[Foo''bar''baz]]
+!! html
+<a rel="mw:WikiLink" href="./Foo''bar''baz">Foo''bar''baz</a>
+!! end
+
 #-----------------------------
 # I/B quote minimization tests
 #-----------------------------
@@ -20408,9 +20769,9 @@ Bug 54262: New entities
 !! options
 parsoid=html2wt
 !! wikitext
-foo
+&nbsp;
 !! html
-<span typeof="mw:Entity">foo</span>
+<span typeof="mw:Entity">&nbsp;</span>
 !! end
 
 ## Note that there is no wikitext output for 'unknownproperty' ##
index 58d5eda..1c7b662 100644 (file)
@@ -81,6 +81,7 @@ class TitleTest extends MediaWikiTestCase {
                        'Foo/.../Sandbox',
                        'Sandbox/...',
                        'A~~',
+                       ':A',
                        // Length is 256 total, but only title part matters
                        'Category:' . str_repeat( 'x', 248 ),
                        str_repeat( 'x', 252 ),
index c61ed22..537c124 100644 (file)
@@ -20,20 +20,13 @@ class DjVuTest extends MediaWikiTestCase {
        protected $handler;
 
        protected function setUp() {
-               global $wgDjvuRenderer, $wgDjvuDump, $wgDjvuToXML;
                parent::setUp();
 
                //cli tool setup
-               $wgDjvuRenderer = $wgDjvuRenderer ? $wgDjvuRenderer : '/usr/bin/ddjvu';
-               $wgDjvuDump = $wgDjvuDump ? $wgDjvuDump : '/usr/bin/djvudump';
-               $wgDjvuToXML = $wgDjvuToXML ? $wgDjvuToXML : '/usr/bin/djvutoxml';
-               if (
-                       !$this->checkIfToolExists( $wgDjvuRenderer ) ||
-                       !$this->checkIfToolExists( $wgDjvuDump ) ||
-                       !$this->checkIfToolExists( $wgDjvuToXML )
-               ) {
-                       $this->markTestSkipped( 'This test needs the installation of the '
-                               . 'ddjvu, djvutoxml and djvudump tools' );
+               $djvuSupport = new DjVuSupport();
+
+               if ( !$djvuSupport->isEnabled() ) {
+                       $this->markTestSkipped( 'This test needs the installation of the ddjvu, djvutoxml and djvudump tools' );
                }
 
                //file repo setup
@@ -53,19 +46,6 @@ class DjVuTest extends MediaWikiTestCase {
                $this->handler = new DjVuHandler();
        }
 
-       /**
-        * Check if a tool exist
-        *
-        * @param string $path path to the tool
-        * @return bool
-        */
-       protected function checkIfToolExists( $path ) {
-               wfSuppressWarnings();
-               $result = file_exists( $path );
-               wfRestoreWarnings();
-               return $result;
-       }
-
        protected function dataFile( $name, $type ) {
                return new UnregisteredLocalFile(
                        false,
index f3c499b..66ed020 100644 (file)
@@ -31,6 +31,11 @@ class NewParserTest extends MediaWikiTestCase {
        public $fuzzSeed = 0;
        public $memoryLimit = 50;
 
+       /**
+        * @var DjVuSupport
+        */
+       private $djVuSupport;
+
        protected $file = false;
 
        public static function setUpBeforeClass() {
@@ -130,6 +135,9 @@ class NewParserTest extends MediaWikiTestCase {
                // Vector images have to be handled slightly differently
                $tmpGlobals['wgMediaHandlers']['image/svg+xml'] = 'MockSvgHandler';
 
+               // DjVu images have to be handled slightly differently
+               $tmpGlobals['wgMediaHandlers']['image/vnd.djvu'] = 'MockDjVuHandler';
+
                $tmpHooks = $wgHooks;
                $tmpHooks['ParserTestParser'][] = 'ParserTestParserHook::setup';
                $tmpHooks['ParserGetVariableValueTs'][] = 'ParserTest::getFakeTimestamp';
@@ -138,6 +146,9 @@ class NewParserTest extends MediaWikiTestCase {
                # proper precedence when resolving links. (bug 51680)
                $tmpGlobals['wgExtraNamespaces'] = array( 100 => 'MemoryAlpha' );
 
+               //DjVu support
+               $this->djVuSupport = new DjVuSupport();
+
                $this->setMwGlobals( $tmpGlobals );
 
                $this->savedWeirdGlobals['image_alias'] = $wgNamespaceAliases['Image'];
@@ -273,6 +284,47 @@ class NewParserTest extends MediaWikiTestCase {
                                        'fileExists'  => true
                        ), $this->db->timestamp( '20010115123500' ), $user );
                }
+
+               # A DjVu file
+               $image = wfLocalFile( Title::makeTitle( NS_FILE, 'LoremIpsum.djvu' ) );
+               if ( !$this->db->selectField( 'image', '1', array( 'img_name' => $image->getName() ) ) ) {
+                       $image->recordUpload2( '', 'Upload a DjVu', 'A DjVu', array(
+                               'size' => 3249,
+                               'width' => 2480,
+                               'height' => 3508,
+                               'bits' => 24,
+                               'media_type' => MEDIATYPE_BITMAP,
+                               'mime' => 'image/vnd.djvu',
+                               'metadata' => '<?xml version="1.0" ?>
+<!DOCTYPE DjVuXML PUBLIC "-//W3C//DTD DjVuXML 1.1//EN" "pubtext/DjVuXML-s.dtd">
+<DjVuXML>
+<HEAD></HEAD>
+<BODY><OBJECT height="3508" width="2480">
+<PARAM name="DPI" value="300" />
+<PARAM name="GAMMA" value="2.2" />
+</OBJECT>
+<OBJECT height="3508" width="2480">
+<PARAM name="DPI" value="300" />
+<PARAM name="GAMMA" value="2.2" />
+</OBJECT>
+<OBJECT height="3508" width="2480">
+<PARAM name="DPI" value="300" />
+<PARAM name="GAMMA" value="2.2" />
+</OBJECT>
+<OBJECT height="3508" width="2480">
+<PARAM name="DPI" value="300" />
+<PARAM name="GAMMA" value="2.2" />
+</OBJECT>
+<OBJECT height="3508" width="2480">
+<PARAM name="DPI" value="300" />
+<PARAM name="GAMMA" value="2.2" />
+</OBJECT>
+</BODY>
+</DjVuXML>',
+                               'sha1' => wfBaseConvert( '', 16, 36, 31 ),
+                               'fileExists' => true
+                       ), $this->db->timestamp( '20140115123600' ), $user );
+               }
        }
 
        //ParserTest setup/teardown functions
@@ -446,6 +498,10 @@ class NewParserTest extends MediaWikiTestCase {
                $backend->store( array(
                        'src' => "$IP/skins/monobook/headbg.jpg", 'dst' => "$base/local-public/0/09/Bad.jpg"
                ) );
+               $backend->prepare( array( 'dir' => "$base/local-public/5/5f" ) );
+               $backend->store( array(
+                       'src' => "$IP/tests/phpunit/data/media/LoremIpsum.djvu", 'dst' => "$base/local-public/5/5f/LoremIpsum.djvu"
+               ) );
 
                // No helpful SVG file to copy, so make one ourselves
                $data = '<?xml version="1.0" encoding="utf-8"?>' .
@@ -525,6 +581,11 @@ class NewParserTest extends MediaWikiTestCase {
 
                                "$base/local-public/0/09/Bad.jpg",
 
+                               "$base/local-public/5/5f/LoremIpsum.djvu",
+                               "$base/local-thumb/5/5f/LoremIpsum.djvu/page2-2480px-LoremIpsum.djvu.jpg",
+                               "$base/local-thumb/5/5f/LoremIpsum.djvu/page2-3720px-LoremIpsum.djvu.jpg",
+                               "$base/local-thumb/5/5f/LoremIpsum.djvu/page2-4960px-LoremIpsum.djvu.jpg",
+
                                "$base/local-public/f/ff/Foobar.svg",
                                "$base/local-thumb/f/ff/Foobar.svg/180px-Foobar.svg.png",
                                "$base/local-thumb/f/ff/Foobar.svg/2000px-Foobar.svg.png",
@@ -638,6 +699,11 @@ class NewParserTest extends MediaWikiTestCase {
                                        . "Current configuration is:\n\$wgTexvc = '$wgTexvc'" );
                        }
                }
+               if ( isset( $opts['djvu'] ) ) {
+                       if ( !$this->djVuSupport->isEnabled() ) {
+                               $this->markTestSkipped( "SKIPPED: djvu binaries do not exist or are not executable.\n" );
+                       }
+               }
 
                if ( isset( $opts['pst'] ) ) {
                        $out = $parser->preSaveTransform( $input, $title, $user, $options );
index 5b51ef8..c4412de 100644 (file)
@@ -151,6 +151,7 @@ mw.loader.addSource( {
                                                        'test.x.foo',
                                                        'test.x.bar',
                                                        'test.x.util',
+                                                       'test.x.unknown',
                                                ),
                                        ) ),
                                        'test.group.foo.1' => new ResourceLoaderTestModule( array(
@@ -211,7 +212,6 @@ mw.loader.addSource( {
         "test.x.bar",
         "1388534400",
         [
-            "test.x.core",
             "test.x.util"
         ]
     ],
@@ -221,7 +221,7 @@ mw.loader.addSource( {
         [
             "test.x.foo",
             "test.x.bar",
-            "test.x.util"
+            "test.x.unknown"
         ]
     ],
     [
@@ -256,7 +256,10 @@ mw.loader.addSource( {
 
        /**
         * @dataProvider provideGetModuleRegistrations
+        * @covers ResourceLoaderStartupModule::optimizeDependencies
         * @covers ResourceLoaderStartUpModule::getModuleRegistrations
+        * @covers ResourceLoader::makeLoaderSourcesScript
+        * @covers ResourceLoader::makeLoaderRegisterScript
         */
        public function testGetModuleRegistrations( $case ) {
                if ( isset( $case['sources'] ) ) {
diff --git a/tests/phpunit/mocks/media/MockDjVuHandler.php b/tests/phpunit/mocks/media/MockDjVuHandler.php
new file mode 100644 (file)
index 0000000..31cb13d
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Fake handler for DjVu images.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Media
+ */
+
+class MockDjVuHandler extends DjVuHandler {
+       function doTransform( $image, $dstPath, $dstUrl, $params, $flags = 0 ) {
+               if ( !$this->normaliseParams( $image, $params ) ) {
+                       return new TransformParameterError( $params );
+               }
+               $width = $params['width'];
+               $height = $params['height'];
+               $page = $params['page'];
+               if ( $page > $this->pageCount( $image ) ) {
+                       return new MediaTransformError(
+                               'thumbnail_error',
+                               $width,
+                               $height,
+                               wfMessage( 'djvu_page_error' )->text()
+                       );
+               }
+
+               $params = array(
+                       'width' => $width,
+                       'height' => $height,
+                       'page' => $page
+               );
+
+               return new ThumbnailImage( $image, $dstUrl, $dstPath, $params );
+       }
+}
index cb9fa07..e861967 100644 (file)
@@ -44,6 +44,7 @@ return array(
        'test.mediawiki.qunit.suites' => array(
                'scripts' => array(
                        'tests/qunit/suites/resources/startup.test.js',
+                       'tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.autoEllipsis.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.byteLength.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.byteLimit.test.js',
@@ -77,6 +78,7 @@ return array(
                        'tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js',
                ),
                'dependencies' => array(
+                       'jquery.accessKeyLabel',
                        'jquery.autoEllipsis',
                        'jquery.byteLength',
                        'jquery.byteLimit',
diff --git a/tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js b/tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js
new file mode 100644 (file)
index 0000000..d5c5d27
--- /dev/null
@@ -0,0 +1,103 @@
+( function ( $ ) {
+       QUnit.module( 'jquery.accessKeyLabel', QUnit.newMwEnvironment() );
+
+       var getAccessKeyPrefixTestData = [
+                       //ua string, platform string, expected prefix
+                       // Internet Explorer
+                       ['Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)', 'Win32', 'alt-'],
+                       ['Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)', 'Win32', 'alt-'],
+                       ['Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko', 'Win64', 'alt-'],
+                       // Firefox
+                       ['Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.19) Gecko/20110420 Firefox/3.5.19', 'MacIntel', 'ctrl-'],
+                       ['Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.10 (maverick) Firefox/3.6.17', 'Linux i686', 'alt-shift-'],
+                       ['Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1', 'Win32', 'alt-shift-'],
+                       // Safari / Konqueror
+                       ['Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; nl-nl) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7', 'MacIntel', 'ctrl-alt-'],
+                       ['Mozilla/5.0 (Windows; U; Windows NT 6.0; cs-CZ) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7', 'Win32', 'alt-'],
+                       ['Mozilla/5.0 (X11; Linux i686) KHTML/4.9.1 (like Gecko) Konqueror/4.9', 'Linux i686', 'ctrl-'],
+                       // Opera
+                       ['Opera/9.80 (Windows NT 5.1)', 'Win32', 'shift-esc-'],
+                       ['Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.130', 'Win32', 'shift-esc-'],
+                       // Chrome
+                       ['Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30', 'MacIntel', 'ctrl-option-'],
+                       ['Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30', 'Linux i686', 'alt-shift-']
+               ],
+               //strings appended to title to make sure updateTooltipAccessKeys handles them correctly
+               updateTooltipAccessKeysTestData = [ '', ' [a]', ' [test-a]', ' [alt-b]' ];
+
+       function makeInput ( title, accessKey ) {
+               //The properties aren't escaped, so make sure you don't call this function with values that need to be escaped!
+               return '<input title="' + title + '" ' + ( accessKey ? 'accessKey="' + accessKey + '" ' : '' ) + ' />';
+       }
+
+       QUnit.test( 'getAccessKeyPrefix', getAccessKeyPrefixTestData.length, function ( assert ) {
+               var i;
+               for ( i = 0; i < getAccessKeyPrefixTestData.length; i++ ) {
+                       assert.equal( $.fn.updateTooltipAccessKeys.getAccessKeyPrefix( {
+                               userAgent: getAccessKeyPrefixTestData[i][0],
+                               platform: getAccessKeyPrefixTestData[i][1]
+                       } ), getAccessKeyPrefixTestData[i][2], 'Correct prefix for ' + getAccessKeyPrefixTestData[i][0] );
+               }
+       } );
+
+       QUnit.test( 'updateTooltipAccessKeys - current browser', 2, function ( assert ) {
+               var title = $( makeInput ( 'Title', 'a' ) ).updateTooltipAccessKeys().prop( 'title' ),
+                       //The new title should be something like "Title [alt-a]", but the exact label will depend on the browser.
+                       //The "a" could be capitalized, and the prefix could be anything, e.g. a simple "^" for ctrl-
+                       //(no browser is known using such a short prefix, though) or "Alt+Umschalt+" in German Firefox.
+                       result = /^Title \[(.+)[aA]\]$/.exec( title );
+               assert.ok( result, 'title should match expected structure.' );
+               assert.notEqual( result[1], 'test-', 'Prefix used for testing shouldn\'t be used in production.' );
+       } );
+
+       QUnit.test( 'updateTooltipAccessKeys - no access key', updateTooltipAccessKeysTestData.length, function ( assert ) {
+               var i, oldTitle, $input, newTitle;
+               for ( i = 0; i < updateTooltipAccessKeysTestData.length; i++ ) {
+                       oldTitle = 'Title' + updateTooltipAccessKeysTestData[i];
+                       $input = $( makeInput( oldTitle ) );
+                       $( '#qunit-fixture' ).append( $input );
+                       newTitle = $input.updateTooltipAccessKeys().prop( 'title' );
+                       assert.equal( newTitle, 'Title', 'title="' + oldTitle + '"' );
+               }
+       } );
+
+       QUnit.test( 'updateTooltipAccessKeys - with access key', updateTooltipAccessKeysTestData.length, function ( assert ) {
+               $.fn.updateTooltipAccessKeys.setTestMode( true );
+               var i, oldTitle, $input, newTitle;
+               for ( i = 0; i < updateTooltipAccessKeysTestData.length; i++ ) {
+                       oldTitle = 'Title' + updateTooltipAccessKeysTestData[i];
+                       $input = $( makeInput( oldTitle, 'a' ) );
+                       $( '#qunit-fixture' ).append( $input );
+                       newTitle = $input.updateTooltipAccessKeys().prop( 'title' );
+                       assert.equal( newTitle, 'Title [test-a]', 'title="' + oldTitle + '"' );
+               }
+               $.fn.updateTooltipAccessKeys.setTestMode( false );
+       } );
+
+       QUnit.test( 'updateTooltipAccessKeys with label element', 2, function ( assert ) {
+               $.fn.updateTooltipAccessKeys.setTestMode( true );
+               var html = '<label for="testInput" title="Title">Label</label><input id="testInput" accessKey="a" />',
+                       $label, $input;
+               $( '#qunit-fixture' ).html( html );
+               $label = $( '#qunit-fixture label' );
+               $input = $( '#qunit-fixture input' );
+               $input.updateTooltipAccessKeys();
+               assert.equal( $input.prop( 'title' ), '', 'No title attribute added to input element.' );
+               assert.equal( $label.prop( 'title' ), 'Title [test-a]', 'title updated for associated label element.' );
+               $.fn.updateTooltipAccessKeys.setTestMode( false );
+       } );
+
+       QUnit.test( 'updateTooltipAccessKeys with label element as parent', 2, function ( assert ) {
+               $.fn.updateTooltipAccessKeys.setTestMode( true );
+               var html = '<label title="Title">Label<input id="testInput" accessKey="a" /></label>',
+               $label, $input;
+               $( '#qunit-fixture' ).html( html );
+               $label = $( '#qunit-fixture label' );
+               $input = $( '#qunit-fixture input' );
+               $input.updateTooltipAccessKeys();
+               assert.equal( $input.prop( 'title' ), '', 'No title attribute added to input element.' );
+               assert.equal( $label.prop( 'title' ), 'Title [test-a]', 'title updated for associated label element.' );
+               $.fn.updateTooltipAccessKeys.setTestMode( false );
+       } );
+
+}( jQuery ) );
index 70bcaf9..cd0db7c 100644 (file)
@@ -1,11 +1,7 @@
 ( function ( mw ) {
        QUnit.module( 'mediawiki.api.parse', QUnit.newMwEnvironment( {
                setup: function () {
-                       this.clock = this.sandbox.useFakeTimers();
                        this.server = this.sandbox.useFakeServer();
-               },
-               teardown: function () {
-                       this.clock.tick( 1 );
                }
        } ) );
 
index 4ee8afa..a93f572 100644 (file)
@@ -1,11 +1,7 @@
 ( function ( mw ) {
        QUnit.module( 'mediawiki.api', QUnit.newMwEnvironment( {
                setup: function () {
-                       this.clock = this.sandbox.useFakeTimers();
                        this.server = this.sandbox.useFakeServer();
-               },
-               teardown: function () {
-                       this.clock.tick( 1 );
                }
        } ) );
 
index e178090..5965ab7 100644 (file)
@@ -1,11 +1,7 @@
 ( function ( mw ) {
        QUnit.module( 'mediawiki.api.watch', QUnit.newMwEnvironment( {
                setup: function () {
-                       this.clock = this.sandbox.useFakeTimers();
                        this.server = this.sandbox.useFakeServer();
-               },
-               teardown: function () {
-                       this.clock.tick( 1 );
                }
        } ) );
 
index f5fd16d..61d662b 100644 (file)
@@ -74,6 +74,7 @@
                        'Foo/.../Sandbox',
                        'Sandbox/...',
                        'A~~',
+                       ':A',
                        // Length is 256 total, but only title part matters
                        'Category:' + repeat( 'x', 248 ),
                        repeat( 'x', 252 )
index 9707ab9..1e059e1 100644 (file)
@@ -1,11 +1,10 @@
 ( function ( mw, $ ) {
        QUnit.module( 'mediawiki.util', QUnit.newMwEnvironment( {
                setup: function () {
-                       this.taPrefix = mw.util.tooltipAccessKeyPrefix;
-                       mw.util.tooltipAccessKeyPrefix = 'ctrl-alt-';
+                       $.fn.updateTooltipAccessKeys.setTestMode( true );
                },
                teardown: function () {
-                       mw.util.tooltipAccessKeyPrefix = this.taPrefix;
+                       $.fn.updateTooltipAccessKeys.setTestMode( false );
                }
        } ) );
 
@@ -89,6 +88,8 @@
        } );
 
        QUnit.test( 'tooltipAccessKey', 4, function ( assert ) {
+               this.suppressWarnings();
+
                assert.equal( typeof mw.util.tooltipAccessKeyPrefix, 'string', 'tooltipAccessKeyPrefix must be a string' );
                assert.equal( $.type( mw.util.tooltipAccessKeyRegexp ), 'regexp', 'tooltipAccessKeyRegexp is a regexp' );
                assert.ok( mw.util.updateTooltipAccessKeys, 'updateTooltipAccessKeys is non-empty' );
@@ -96,6 +97,8 @@
                'Example [a]'.replace( mw.util.tooltipAccessKeyRegexp, function ( sub, m1, m2, m3, m4, m5, m6 ) {
                        assert.equal( m6, 'a', 'tooltipAccessKeyRegexp finds the accesskey hint' );
                } );
+
+               this.restoreWarnings();
        } );
 
        QUnit.test( '$content', 2, function ( assert ) {
                assert.ok( $.isDomElement( tbRL ), 'addPortletLink returns a valid DOM Element according to $.isDomElement' );
 
                tbMW = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/',
-                       'MediaWiki.org', 't-mworg', 'Go to MediaWiki.org ', 'm', tbRL );
+                       'MediaWiki.org', 't-mworg', 'Go to MediaWiki.org', 'm', tbRL );
                $tbMW = $( tbMW );
 
                assert.propEqual(
                        $tbMW.find( 'a' ).getAttrs(),
                        {
                                href: '//mediawiki.org/',
-                               title: 'Go to MediaWiki.org [ctrl-alt-m]',
+                               title: 'Go to MediaWiki.org [test-m]',
                                accesskey: 'm'
                        },
                        'Validate attributes of anchor tag in created element'
                cuQuux = mw.util.addPortletLink( 'p-test-custom', '#', 'Quux', null, 'Example [shift-x]', 'q' );
                $cuQuux = $( cuQuux );
 
-               assert.equal( $cuQuux.find( 'a' ).attr( 'title' ), 'Example [ctrl-alt-q]', 'Existing accesskey is stripped and updated' );
+               assert.equal( $cuQuux.find( 'a' ).attr( 'title' ), 'Example [test-q]', 'Existing accesskey is stripped and updated' );
 
                assert.equal(
                        $( '#p-test-custom #c-barmenu ul li' ).length,
index 6ff2b24..818b24e 100644 (file)
@@ -664,3 +664,37 @@ class DelayedParserTest {
        }
 
 }
+
+/**
+ * Initialize and detect the DjVu files support
+ */
+class DjVuSupport {
+
+       /**
+        * Initialises DjVu tools global with default values
+        */
+       public function __construct() {
+               global $wgDjvuRenderer, $wgDjvuDump, $wgDjvuToXML, $wgFileExtensions;
+
+               $wgDjvuRenderer = $wgDjvuRenderer ? $wgDjvuRenderer : '/usr/bin/ddjvu';
+               $wgDjvuDump = $wgDjvuDump ? $wgDjvuDump : '/usr/bin/djvudump';
+               $wgDjvuToXML = $wgDjvuToXML ? $wgDjvuToXML : '/usr/bin/djvutoxml';
+
+               if ( !in_array( 'djvu', $wgFileExtensions ) ) {
+                       $wgFileExtensions[] = 'djvu';
+               }
+       }
+
+       /**
+        * Returns if the DjVu tools are usable
+        *
+        * @return bool
+        */
+       public function isEnabled() {
+               global $wgDjvuRenderer, $wgDjvuDump, $wgDjvuToXML;
+
+               return is_executable( $wgDjvuRenderer )
+                       && is_executable( $wgDjvuDump )
+                       && is_executable( $wgDjvuToXML );
+       }
+}
index 707f1e2..b0310c8 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -163,12 +163,6 @@ function wfStreamThumb( array $params ) {
                return;
        }
 
-       // Check if the file is hidden
-       if ( $img->isDeleted( File::DELETED_FILE ) ) {
-               wfThumbError( 404, "The source file '$fileName' does not exist." );
-               return;
-       }
-
        // Check permissions if there are read restrictions
        $varyHeader = array();
        if ( !in_array( 'read', User::getGroupPermissions( array( '*' ) ), true ) ) {
@@ -181,6 +175,12 @@ function wfStreamThumb( array $params ) {
                $varyHeader[] = 'Cookie';
        }
 
+       // Check if the file is hidden
+       if ( $img->isDeleted( File::DELETED_FILE ) ) {
+               wfThumbError( 404, "The source file '$fileName' does not exist." );
+               return;
+       }
+
        // Do rendering parameters extraction from thumbnail name.
        if ( isset( $params['thumbName'] ) ) {
                $params = wfExtractThumbParams( $img, $params );
@@ -327,7 +327,7 @@ function wfStreamThumb( array $params ) {
        }
 
        // Actually generate a new thumbnail
-       list( $thumb, $errorMsg ) = wfGenerateThumbnail( $img, $params, $thumbName );
+       list( $thumb, $errorMsg ) = wfGenerateThumbnail( $img, $params, $thumbName, $thumbPath );
 
        // Check for thumbnail generation errors...
        $msg = wfMessage( 'thumbnail_error' );
@@ -356,9 +356,10 @@ function wfStreamThumb( array $params ) {
  * @param File $file
  * @param array $params
  * @param string $thumbName
+ * @param string $thumbPath
  * @return array (MediaTransformOutput|bool, string|bool error message HTML)
  */
-function wfGenerateThumbnail( File $file, array $params, $thumbName ) {
+function wfGenerateThumbnail( File $file, array $params, $thumbName, $thumbPath ) {
        global $wgMemc, $wgAttemptFailureEpoch;
 
        $key = wfMemcKey( 'attempt-failures', $wgAttemptFailureEpoch,
@@ -374,7 +375,8 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName ) {
        register_shutdown_function( function() use ( &$done, $key ) {
                if ( !$done ) { // transform() gave a fatal
                        global $wgMemc;
-                       $wgMemc->incrWithInit( $key, 3600 );
+                       // Randomize TTL to reduce stampedes
+                       $wgMemc->incrWithInit( $key, 3600 + mt_rand( 0, 300 ) );
                }
        } );
 
@@ -388,8 +390,12 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName ) {
                                'doWork' => function() use ( $file, $params ) {
                                        return $file->transform( $params, File::RENDER_NOW );
                                },
-                               'getCachedWork' => function() use ( $file, $params ) {
-                                       return $file->transform( $params );
+                               'getCachedWork' => function() use ( $file, $params, $thumbPath ) {
+                                       // If the worker that finished made this thumbnail then use it.
+                                       // Otherwise, it probably made a different thumbnail for this file.
+                                       return $file->getRepo()->fileExists( $thumbPath )
+                                               ? $file->transform( $params )
+                                               : false; // retry once more in exclusive mode
                                },
                                'fallback' => function() {
                                        return wfMessage( 'generic-pool-error' )->parse();
@@ -412,7 +418,8 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName ) {
        $done = true; // no PHP fatal occured
 
        if ( !$thumb || $thumb->isError() ) {
-               $wgMemc->incrWithInit( $key, 3600 );
+               // Randomize TTL to reduce stampedes
+               $wgMemc->incrWithInit( $key, 3600 + mt_rand( 0, 300 ) );
        }
 
        return array( $thumb, $errorHtml );
@@ -427,16 +434,13 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName ) {
  * of possible files with standard parameters is far less than that of all
  * possible combinations; rate-limiting for them can thus be more generious.
  *
- * @param File $img
+ * @param File $file
  * @param array $params
  * @return bool
  */
-function wfThumbIsStandard( File $img, array $params ) {
+function wfThumbIsStandard( File $file, array $params ) {
        global $wgThumbLimits, $wgImageLimits;
-       // @TODO: use polymorphism with media handler here
-       if ( array_diff( array_keys( $params ), array( 'width', 'page' ) ) ) {
-               return false; // extra parameters present
-       }
+
        if ( isset( $params['width'] ) ) {
                $widths = $wgThumbLimits;
                foreach ( $wgImageLimits as $pair ) {
@@ -446,6 +450,24 @@ function wfThumbIsStandard( File $img, array $params ) {
                        return false;
                }
        }
+
+       $handler = $file->getHandler();
+       if ( $handler ) {
+               // Standard thumbnails use a standard width and any page number
+               $normalParams = array( 'width' => $params['width'] );
+               if ( isset( $params['page'] ) ) {
+                       $normalParams['page'] = $params['page'];
+               }
+               // Append any default values to the map (e.g. "lossy", "lossless", "seek"...)
+               $handler->normaliseParams( $file, $normalParams );
+               // Check that the given values for non-page, non-width, params are just defaults
+               foreach ( $params as $key => $value ) {
+                       if ( !isset( $normalParams[$key] ) || $normalParams[$key] !== $value ) {
+                               return false;
+                       }
+               }
+       }
+
        return true;
 }