Merge "improving comment re DateFormatter.php"
authorKaldari <rkaldari@wikimedia.org>
Mon, 24 Sep 2012 23:21:19 +0000 (23:21 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 24 Sep 2012 23:21:19 +0000 (23:21 +0000)
333 files changed:
.gitignore
RELEASE-NOTES-1.20
docs/doxygen_first_page.php
docs/hooks.txt
docs/language.txt
docs/uidesign/design.html
includes/Article.php
includes/BacklinkCache.php
includes/Block.php
includes/CategoryViewer.php
includes/ChangesList.php
includes/DefaultSettings.php
includes/EditPage.php
includes/Exception.php
includes/Export.php
includes/GlobalFunctions.php
includes/Html.php
includes/ImagePage.php
includes/OutputPage.php
includes/Revision.php
includes/Sanitizer.php
includes/SiteStats.php
includes/SkinLegacy.php
includes/SkinTemplate.php
includes/Timestamp.php
includes/Title.php
includes/WikiError.php
includes/WikiPage.php
includes/Xml.php
includes/ZhConversion.php
includes/actions/HistoryAction.php
includes/actions/InfoAction.php
includes/api/ApiBase.php
includes/api/ApiMain.php
includes/api/ApiParse.php
includes/api/ApiQuery.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryRevisions.php
includes/db/Database.php
includes/db/LoadBalancer.php
includes/diff/DifferenceEngine.php
includes/filebackend/FileBackend.php
includes/filebackend/FileBackendMultiWrite.php
includes/filebackend/FileBackendStore.php
includes/filebackend/SwiftFileBackend.php
includes/filebackend/TempFSFile.php
includes/filebackend/lockmanager/DBLockManager.php
includes/filebackend/lockmanager/FSLockManager.php
includes/filebackend/lockmanager/MemcLockManager.php
includes/filerepo/FileRepo.php
includes/filerepo/file/File.php
includes/filerepo/file/LocalFile.php
includes/installer/MysqlUpdater.php
includes/installer/SqliteUpdater.php
includes/installer/WebInstaller.php
includes/installer/WebInstallerOutput.php
includes/logging/LogEventsList.php
includes/media/FormatMetadata.php
includes/normal/RandomTest.php
includes/objectcache/BagOStuff.php
includes/objectcache/DBABagOStuff.php
includes/objectcache/RedisBagOStuff.php
includes/objectcache/SqlBagOStuff.php
includes/parser/Parser.php
includes/parser/ParserOptions.php
includes/parser/Preprocessor_DOM.php
includes/search/SearchEngine.php
includes/specials/SpecialActiveusers.php
includes/specials/SpecialAncientpages.php
includes/specials/SpecialBrokenRedirects.php
includes/specials/SpecialChangeEmail.php
includes/specials/SpecialContributions.php
includes/specials/SpecialDeletedContributions.php
includes/specials/SpecialDoubleRedirects.php
includes/specials/SpecialFileDuplicateSearch.php
includes/specials/SpecialListredirects.php
includes/specials/SpecialListusers.php
includes/specials/SpecialLonelypages.php
includes/specials/SpecialMIMEsearch.php
includes/specials/SpecialMostcategories.php
includes/specials/SpecialMostimages.php
includes/specials/SpecialMostinterwikis.php
includes/specials/SpecialMostlinked.php
includes/specials/SpecialMostlinkedcategories.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialPasswordReset.php
includes/specials/SpecialPopularpages.php
includes/specials/SpecialPrefixindex.php
includes/specials/SpecialSearch.php
includes/specials/SpecialTags.php
includes/specials/SpecialUncategorizedpages.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUnusedcategories.php
includes/specials/SpecialUnusedtemplates.php
includes/specials/SpecialUnwatchedpages.php
includes/specials/SpecialUserlogin.php
includes/specials/SpecialUserrights.php
includes/specials/SpecialWantedpages.php
includes/specials/SpecialWhatlinkshere.php
includes/upload/UploadFromChunks.php
includes/upload/UploadStash.php
includes/zhtable/tradphrases.manual
languages/Language.php
languages/Names.php
languages/classes/LanguageHsb.php
languages/classes/LanguageLn.php [deleted file]
languages/classes/LanguageMo.php [deleted file]
languages/classes/LanguageRo.php [deleted file]
languages/classes/LanguageSe.php [deleted file]
languages/classes/LanguageSma.php [deleted file]
languages/classes/LanguageWa.php
languages/data/plurals-mediawiki.xml
languages/data/plurals.xml
languages/messages/MessagesAce.php
languages/messages/MessagesAr.php
languages/messages/MessagesArc.php
languages/messages/MessagesArn.php
languages/messages/MessagesArz.php
languages/messages/MessagesAst.php
languages/messages/MessagesBa.php
languages/messages/MessagesBar.php
languages/messages/MessagesBe_tarask.php
languages/messages/MessagesBg.php
languages/messages/MessagesBn.php
languages/messages/MessagesBr.php
languages/messages/MessagesCeb.php
languages/messages/MessagesCkb.php
languages/messages/MessagesCs.php
languages/messages/MessagesCy.php
languages/messages/MessagesDa.php
languages/messages/MessagesDe.php
languages/messages/MessagesDiq.php
languages/messages/MessagesDsb.php
languages/messages/MessagesDtp.php
languages/messages/MessagesEn.php
languages/messages/MessagesEs.php
languages/messages/MessagesEt.php
languages/messages/MessagesEu.php
languages/messages/MessagesFa.php
languages/messages/MessagesFi.php
languages/messages/MessagesFr.php
languages/messages/MessagesGl.php
languages/messages/MessagesGsw.php
languages/messages/MessagesGu.php
languages/messages/MessagesHe.php
languages/messages/MessagesHi.php
languages/messages/MessagesHil.php
languages/messages/MessagesHr.php
languages/messages/MessagesHsb.php
languages/messages/MessagesHu.php
languages/messages/MessagesIa.php
languages/messages/MessagesId.php
languages/messages/MessagesIlo.php
languages/messages/MessagesInh.php
languages/messages/MessagesIs.php
languages/messages/MessagesIt.php
languages/messages/MessagesJa.php
languages/messages/MessagesKa.php
languages/messages/MessagesKk_cyrl.php
languages/messages/MessagesKm.php
languages/messages/MessagesKo.php
languages/messages/MessagesKsh.php
languages/messages/MessagesKu_latn.php
languages/messages/MessagesLb.php
languages/messages/MessagesLiv.php
languages/messages/MessagesLzh.php
languages/messages/MessagesMg.php
languages/messages/MessagesMk.php
languages/messages/MessagesMl.php
languages/messages/MessagesMn.php
languages/messages/MessagesMs.php
languages/messages/MessagesNb.php
languages/messages/MessagesNds_nl.php
languages/messages/MessagesNe.php
languages/messages/MessagesNl.php
languages/messages/MessagesNn.php
languages/messages/MessagesOr.php
languages/messages/MessagesOs.php
languages/messages/MessagesPa.php
languages/messages/MessagesPl.php
languages/messages/MessagesPms.php
languages/messages/MessagesPs.php
languages/messages/MessagesPt.php
languages/messages/MessagesPt_br.php
languages/messages/MessagesQqq.php
languages/messages/MessagesRo.php
languages/messages/MessagesRoa_tara.php
languages/messages/MessagesRu.php
languages/messages/MessagesRue.php
languages/messages/MessagesSa.php
languages/messages/MessagesSe.php
languages/messages/MessagesSh.php
languages/messages/MessagesSi.php
languages/messages/MessagesSk.php
languages/messages/MessagesSl.php
languages/messages/MessagesSr_ec.php
languages/messages/MessagesSr_el.php
languages/messages/MessagesSv.php
languages/messages/MessagesSw.php
languages/messages/MessagesTa.php
languages/messages/MessagesTe.php
languages/messages/MessagesTl.php
languages/messages/MessagesTly.php
languages/messages/MessagesTpi.php
languages/messages/MessagesTr.php
languages/messages/MessagesUk.php
languages/messages/MessagesUz.php
languages/messages/MessagesVi.php
languages/messages/MessagesWar.php
languages/messages/MessagesYi.php
languages/messages/MessagesYo.php
languages/messages/MessagesZh_hans.php
languages/messages/MessagesZh_hant.php
maintenance/Maintenance.php
maintenance/archives/patch-cat_hidden.sql [new file with mode: 0644]
maintenance/benchmarks/Benchmarker.php
maintenance/benchmarks/bench_delete_truncate.php
maintenance/benchmarks/benchmarkHooks.php
maintenance/benchmarks/benchmarkPurge.php
maintenance/dev/includes/router.php
maintenance/fileOpPerfTest.php
maintenance/language/alltrans.php
maintenance/language/checkDupeMessages.php
maintenance/language/countMessages.php
maintenance/language/date-formats.php
maintenance/language/digit2html.php
maintenance/language/dumpMessages.php
maintenance/language/generateCollationData.php
maintenance/language/generateNormalizerData.php
maintenance/language/langmemusage.php
maintenance/locking/LockServerDaemon.php
maintenance/oracle/alterSharedConstraints.php
maintenance/purgeStaleMemcachedText.php [deleted file]
maintenance/refreshImageCount.php [deleted file]
maintenance/sqlite/archives/patch-cat_hidden.sql [new file with mode: 0644]
maintenance/storage/checkStorage.php
maintenance/storage/compressOld.php
maintenance/storage/dumpRev.php
maintenance/storage/fixBug20757.php
maintenance/storage/orphanStats.php
maintenance/storage/recompressTracked.php
maintenance/storage/resolveStubs.php
maintenance/storage/testCompression.php
maintenance/syncFileBackend.php
maintenance/tables.sql
resources/Resources.php
resources/jquery/images/spinner-large.gif [new file with mode: 0644]
resources/jquery/images/spinner.gif
resources/jquery/jquery.jStorage.js
resources/jquery/jquery.js
resources/jquery/jquery.makeCollapsible.js
resources/jquery/jquery.placeholder.js
resources/jquery/jquery.spinner.css
resources/jquery/jquery.spinner.js
resources/mediawiki.action/mediawiki.action.view.rightClickEdit.js
resources/mediawiki.language/languages/am.js [deleted file]
resources/mediawiki.language/languages/bat-smg.js [deleted file]
resources/mediawiki.language/languages/be-tarask.js [deleted file]
resources/mediawiki.language/languages/be.js [deleted file]
resources/mediawiki.language/languages/bh.js [deleted file]
resources/mediawiki.language/languages/bs.js
resources/mediawiki.language/languages/cs.js [deleted file]
resources/mediawiki.language/languages/cu.js [deleted file]
resources/mediawiki.language/languages/cy.js [deleted file]
resources/mediawiki.language/languages/dsb.js
resources/mediawiki.language/languages/fr.js [deleted file]
resources/mediawiki.language/languages/ga.js
resources/mediawiki.language/languages/gd.js [deleted file]
resources/mediawiki.language/languages/gv.js [deleted file]
resources/mediawiki.language/languages/hr.js [deleted file]
resources/mediawiki.language/languages/hsb.js
resources/mediawiki.language/languages/hy.js
resources/mediawiki.language/languages/ksh.js [deleted file]
resources/mediawiki.language/languages/ln.js [deleted file]
resources/mediawiki.language/languages/lt.js [deleted file]
resources/mediawiki.language/languages/lv.js [deleted file]
resources/mediawiki.language/languages/mg.js [deleted file]
resources/mediawiki.language/languages/mk.js [deleted file]
resources/mediawiki.language/languages/mo.js [deleted file]
resources/mediawiki.language/languages/mt.js [deleted file]
resources/mediawiki.language/languages/nso.js [deleted file]
resources/mediawiki.language/languages/pl.js [deleted file]
resources/mediawiki.language/languages/ro.js [deleted file]
resources/mediawiki.language/languages/ru.js
resources/mediawiki.language/languages/se.js [deleted file]
resources/mediawiki.language/languages/sh.js [deleted file]
resources/mediawiki.language/languages/sk.js [deleted file]
resources/mediawiki.language/languages/sl.js
resources/mediawiki.language/languages/sma.js [deleted file]
resources/mediawiki.language/languages/sr-ec.js [deleted file]
resources/mediawiki.language/languages/sr-el.js [deleted file]
resources/mediawiki.language/languages/sr.js [deleted file]
resources/mediawiki.language/languages/ti.js [deleted file]
resources/mediawiki.language/languages/tl.js [deleted file]
resources/mediawiki.language/languages/uk.js
resources/mediawiki.language/languages/wa.js [deleted file]
resources/mediawiki.language/mediawiki.language.init.js
resources/mediawiki.libs/CLDRPluralRuleParser.js
resources/mediawiki/mediawiki.debug.css
resources/mediawiki/mediawiki.debug.js
resources/mediawiki/mediawiki.htmlform.js
resources/mediawiki/mediawiki.jqueryMsg.js
skins/CologneBlue.php
skins/Standard.php
skins/common/commonPrint.css
skins/common/config.js
skins/common/preview.js
skins/common/shared.css
skins/common/wikibits.js
tests/TestsAutoLoader.php
tests/jasmine/spec_makers/makeJqueryMsgSpec.php
tests/parser/parserTests.txt
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/HtmlTest.php
tests/phpunit/includes/LocalisationCacheTest.php
tests/phpunit/includes/PreferencesTest.php
tests/phpunit/includes/RevisionStorageTest.php
tests/phpunit/includes/SanitizerTest.php
tests/phpunit/includes/TestUser.php [new file with mode: 0644]
tests/phpunit/includes/XmlTest.php
tests/phpunit/includes/api/ApiOptionsTest.php
tests/phpunit/includes/api/ApiTestCase.php
tests/phpunit/includes/api/ApiTestUser.php [deleted file]
tests/phpunit/includes/db/DatabaseTest.php
tests/phpunit/includes/media/BitmapMetadataHandlerTest.php
tests/phpunit/includes/upload/UploadStashTest.php
tests/phpunit/languages/LanguageHuTest.php [new file with mode: 0644]
tests/phpunit/maintenance/backupTextPassTest.php
tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js
thumb.php

index ff3ced3..d3c56bc 100644 (file)
@@ -32,8 +32,11 @@ StartProfiler.php
 # Operating systems
 ## Mac OS X
 .DS_Store
+## Windows
+thumbs.db
 
 # Misc
+.buildpath
 .classpath
 .idea
 .metadata*
index 51798c7..fd5c5d7 100644 (file)
@@ -27,6 +27,9 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
   different timezone than the wiki timezone set by $wgLocaltimezone.
 * New variables $wgDBssl and $wgDBcompress to enable SSL and compression for database
   connections, if either are available for the selected DB type.
+* $wgUseCombinedLoginLink now defaults to false, making MediaWiki output separate
+  login and create account links by default.
+* (bug 29374) $wgVectorUseSimpleSearch is now enabled by default.
 
 === New features in 1.20 ===
 * Added TitleIsAlwaysKnown hook which gets called when determining if a page exists.
@@ -65,7 +68,7 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * (bug 35685) api.php URL and other entry point URLs are now listed on
   Special:Version
 * Edit notices can now be translated.
-* jQuery upgraded to 1.7.2
+* jQuery upgraded to 1.8.1
 * jQuery UI upgraded to 1.8.23.
 * QUnit upgraded from v1.2.0 to v1.10.0.
 * (bug 37604) jquery.cookie upgraded to 2011 version.
@@ -99,6 +102,8 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
   replacement, and so on.
 * (bug 34678) Added InternalParseBeforeSanitize hook which gets called during Parser's
   internalParse method just before the parser removes unwanted/dangerous HTML tags.
+* Added new hook AfterFinalPageOutput to allow modifications to buffered page output before sent
+  to the client.
 * (bug 36783) Implement jQuery Promise interface in mediawiki.api module.
 * Make dates in sortable tables sort according to the page content language
   instead of the site content language
@@ -128,11 +133,11 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * (bug 22749) Create Special:MostInterwikis.
 * Show change tags when transclude Special:Recentchanges(linked) or Special:Newpages.
 * (bug 23226) Add |class= parameter to image links in order to add class(es) to HTML img tag.
-* (bug 39431) SVG animated status is now shown in long description
+* (bug 39431) SVG animated status is now shown in long description.
 * (bug 39376) jquery.form upgraded to 3.14.
 * SVG files will now show the actual width in the SVG's specified units
   in the metadata box.
-* Added ResourceLoader module "jquery.jStorage".
+* Added ResourceLoader module "jquery.jStorage" (v0.3.0, http://jStorage.info/).
 * (bug 39273) Added AJAX support for "Show changes" (diff) in LivePreview.
 * Added ResourceLoader module "jquery.badge".
 * mw.util.$content now points to the overall content area in the skin rather than just
@@ -141,7 +146,8 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
   with auto-hide, multi-message support, and message replacement tags.
 * jquery.messageBox which appears to be unused by both core and extensions has
   been removed.
-* (bug 34939) made link parsking insensitive ([HttP://])
+* (bug 34939) Made link parsing insensitive ([HttP://]).
+* (bug 40072) Add CSS classes to items in output of ChangesList pages.
 
 === Bug fixes in 1.20 ===
 * (bug 30245) Use the correct way to construct a log page title.
@@ -237,6 +243,10 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * (bug 36761) "Mark pages as visited" now submits previously established filter options.
 * (bug 39635) PostgreSQL LOCK IN SHARE MODE option is a syntax error.
 * (bug 36329) Accesskey tooltips for Firefox 14 on Mac should use "ctrl-option-" prefix.
+* (bug 32552) Drop unused database field cat_hidden from table category.
+* (bug 40214) Category pages no longer use deprecated "width" HTML attribute.
+* (bug 39941) Add missing stylesheets to the installer pages
+* In HTML5 mode, allow new input element types values (such as color, range..)
 
 === API changes in 1.20 ===
 * (bug 34316) Add ability to retrieve maximum upload size from MediaWiki API.
@@ -275,6 +285,7 @@ upgrade PHP if you have not done so prior to upgrading MediaWiki.
 * (bug 11142) Improve file extension blacklist error reporting in API upload.
 * (bug 39665) Cache AllowedGenerator array so it doesn't autoload all query classes
   on every request.
+* (bug 35693) ApiQueryImageInfo now suppresses errors when unserializing metadata
 
 === Languages updated in 1.20 ===
 
index 11db1f5..9949d13 100644 (file)
@@ -13,7 +13,7 @@ die("Not a valid entry point\n");
  * Welcome on MediaWiki autogenerated documentation system.
  *
  * If you are looking to use, install or configure your wiki, you probably
- * want to look at the main site: http://www.mediawiki.org/
+ * want to look at the main site: https://www.mediawiki.org/
  *
  * @note this page is generated from docs/doxygen_first_page.php
  */
index 5b78ed9..5207730 100644 (file)
@@ -290,6 +290,12 @@ $revCount: Number of revisions in the XML file
 $sRevCount: Number of sucessfully imported revisions
 $pageInfo: associative array of page information
 
+'AfterFinalPageOutput': Nearly at the end of OutputPage::output() but
+before OutputPage::sendCacheControl() and final ob_end_flush() which
+will send the buffered output to the client. This allows for last-minute
+modification of the output within the buffer by using ob_get_clean().
+$output: The OutputPage object where output() was called
+
 'AjaxAddScript': Called in output page just before the initialisation
 of the javascript ajax engine. The hook is only called when ajax
 is enabled ( $wgUseAjax = true; ).
@@ -314,12 +320,13 @@ $body: Body of the message
 Use this to extend core API modules.
 &$module: Module object
 
-'APICheckCanExecute': Called during ApiMain::checkCanExecute. Use to
+'ApiCheckCanExecute': Called during ApiMain::checkCanExecute. Use to
 further authenticate and authorize API clients before executing the
 module. Return false and set a message to cancel the request.
 $module: Module object
 $user: Current user
-&$message: API usage message to die with
+&$message: API usage message to die with, as a message key or array
+as accepted by ApiBase::dieUsageMsg.
 
 'APIEditBeforeSave': before saving a page with api.php?action=edit,
 after processing request parameters. Return false to let the request
@@ -1710,6 +1717,11 @@ in the $searchEngine->namespaces array.
 $query : Original query.
 &$parsed : Resultant query with the prefixes stripped.
 
+'SearchResultInitFromTitle': Set the revision used when displaying a page in
+search results.
+$title : Current Title object being displayed in search results.
+&$id: Revision ID (default is false, for latest)
+
 'SearchableNamespaces': An option to modify which namespaces are searchable.
 &$arr : Array of namespaces ($nsId => $name) which will be used.
 
index 1df9881..42a6027 100644 (file)
@@ -1,21 +1,5 @@
 language.txt
 
-The Language object handles all readable text produced by the software. The most
-used function is getMessage(), usually called with the wrapper function wfMsg()
-which calls that method on the global language object. It just returns a piece
-of text given a text key. It is recommended that you use each key only
-once--bits of text in different contexts that happen to be identical in English
-may not be in other languages, so it's better to add new keys than to reuse them
-a lot. Likewise, if there is text that gets combined with things like names and
-titles, it is better to put markers like "$1" inside a piece of text and use
-str_replace() than to compose such messages in code, because their order may
-change in other languages too.
+The Language object handles all readable text produced by the software.
 
-While the system is running, there will be one global language object, which
-will be a subtype of Language. The methods in these objects will return the
-native text requested if available, otherwise they fall back to sending English
-text (which is why the LanguageEn object has no code at all--it just inherits
-the English defaults of the Language base class).
-
-The names of the namespaces are also contained in the language object, though
-the numbers are fixed.
+See http://www.mediawiki.org/wiki/Localisation#General_use_.28for_developers.29
index 20dab86..7062a82 100644 (file)
        <span class="comment">span.comment</span>
        <a class="feedlink">a.feedlink</a>
        <table class="wikitable">
-               <tr><th colspan="2">table.wikitable</td></tr>
+               <tr><th colspan="2">table.wikitable</th></tr>
                <tr><td>cell</td><td>cell</td></tr>
                <tr><td>cell</td><td>cell</td></tr>
        </table>
 
        <table class="mw-datatable">
-               <tr><th colspan="2">table.mw-datatable</td></tr>
+               <tr><th colspan="2">table.mw-datatable</th></tr>
                <tr><td>line with hover</td><td>line with hover</td></tr>
                <tr><td>line with hover</td><td>line with hover</td></tr>
        </table>
index a3fb747..9ab4b6b 100644 (file)
@@ -1243,7 +1243,7 @@ class Article extends Page {
 
                if ( $appendSubtitle ) {
                        $out = $this->getContext()->getOutput();
-                       $out->appendSubtitle( wfMessage( 'redirectpagesub' )->escaped() );
+                       $out->addSubtitle( wfMessage( 'redirectpagesub' )->escaped() );
                }
 
                // the loop prepends the arrow image before the link, so the first case needs to be outside
@@ -1617,8 +1617,11 @@ class Article extends Page {
         * @return ParserOutput or false if the given revsion ID is not found
         */
        public function getParserOutput( $oldid = null, User $user = null ) {
-               $user = is_null( $user ) ? $this->getContext()->getUser() : $user;
-               $parserOptions = $this->mPage->makeParserOptions( $user );
+               if ( $user === null ) {
+                       $parserOptions = $this->getParserOptions();
+               } else {
+                       $parserOptions = $this->mPage->makeParserOptions( $user );
+               }
 
                return $this->mPage->getParserOutput( $parserOptions, $oldid );
        }
@@ -1629,7 +1632,7 @@ class Article extends Page {
         */
        public function getParserOptions() {
                if ( !$this->mParserOptions ) {
-                       $this->mParserOptions = $this->mPage->makeParserOptions( $this->getContext()->getUser() );
+                       $this->mParserOptions = $this->mPage->makeParserOptions( $this->getContext() );
                }
                // Clone to allow modifications of the return value without affecting cache
                return clone $this->mParserOptions;
index 2aba29f..05bf318 100644 (file)
@@ -41,6 +41,8 @@
  * @internal documentation reviewed on 18 Mar 2011 by hashar
  */
 class BacklinkCache {
+       /** @var ProcessCacheLRU */
+       protected static $cache;
 
        /**
         * Multi dimensions array representing batches. Keys are:
@@ -81,12 +83,32 @@ class BacklinkCache {
 
        /**
         * Create a new BacklinkCache
-        * @param Title $title : Title object to create a backlink cache for.
+        *
+        * @param Title $title : Title object to create a backlink cache for
         */
-       function __construct( $title ) {
+       public function __construct( Title $title ) {
                $this->title = $title;
        }
 
+       /**
+        * Create a new BacklinkCache or reuse any existing one.
+        * Currently, only one cache instance can exist; callers that
+        * need multiple backlink cache objects should keep them in scope.
+        *
+        * @param Title $title : Title object to get a backlink cache for
+        * @return BacklinkCache
+        */
+       public static function get( Title $title ) {
+               if ( !self::$cache ) { // init cache
+                       self::$cache = new ProcessCacheLRU( 1 );
+               }
+               $dbKey = $title->getPrefixedDBkey();
+               if ( !self::$cache->has( $dbKey, 'obj' ) ) {
+                       self::$cache->set( $dbKey, 'obj', new self( $title ) );
+               }
+               return self::$cache->get( $dbKey, 'obj' );
+       }
+
        /**
         * Serialization handler, diasallows to serialize the database to prevent
         * failures after this class is deserialized from cache with dead DB
@@ -303,7 +325,7 @@ class BacklinkCache {
         */
        public function partition( $table, $batchSize ) {
 
-               // 1) try partition cache ... 
+               // 1) try partition cache ...
 
                if ( isset( $this->partitionCache[$table][$batchSize] ) ) {
                        wfDebug( __METHOD__ . ": got from partition cache\n" );
@@ -358,7 +380,7 @@ class BacklinkCache {
         * Partition a DB result with backlinks in it into batches
         * @param $res ResultWrapper database result
         * @param $batchSize integer
-        * @return array @see 
+        * @return array @see
         */
        protected function partitionResult( $res, $batchSize ) {
                $batches = array();
index 6e8f9f3..732699d 100644 (file)
@@ -1002,41 +1002,6 @@ class Block {
                return wfGetDB( DB_SLAVE )->getInfinity();
        }
 
-       /**
-        * Convert a DB-encoded expiry into a real string that humans can read.
-        *
-        * @param $encoded_expiry String: Database encoded expiry time
-        * @return Html-escaped String
-        * @deprecated since 1.18; use $wgLang->formatExpiry() instead
-        */
-       public static function formatExpiry( $encoded_expiry ) {
-               wfDeprecated( __METHOD__, '1.18' );
-
-               global $wgContLang;
-               static $msg = null;
-
-               if ( is_null( $msg ) ) {
-                       $msg = array();
-                       $keys = array( 'infiniteblock', 'expiringblock' );
-
-                       foreach ( $keys as $key ) {
-                               $msg[$key] = wfMessage( $key )->escaped();
-                       }
-               }
-
-               $expiry = $wgContLang->formatExpiry( $encoded_expiry, TS_MW );
-               if ( $expiry == wfGetDB( DB_SLAVE )->getInfinity() ) {
-                       $expirystr = $msg['infiniteblock'];
-               } else {
-                       global $wgLang;
-                       $expiredatestr = htmlspecialchars( $wgLang->date( $expiry, true ) );
-                       $expiretimestr = htmlspecialchars( $wgLang->time( $expiry, true ) );
-                       $expirystr = wfMsgReplaceArgs( $msg['expiringblock'], array( $expiredatestr, $expiretimestr ) );
-               }
-
-               return $expirystr;
-       }
-
        /**
         * Convert a submitted expiry time, which may be relative ("2 weeks", etc) or absolute
         * ("24 May 2034"), into an absolute timestamp we can put into the database.
index 5f4aaea..3bb2bc9 100644 (file)
@@ -504,11 +504,11 @@ class CategoryViewer extends ContextSource {
                # Split into three columns
                $columns = array_chunk( $columns, ceil( count( $columns ) / 3 ), true /* preserve keys */ );
 
-               $ret = '<table width="100%"><tr style="vertical-align: top;">';
+               $ret = '<table style="width: 100%;"><tr style="vertical-align: top;">';
                $prevchar = null;
 
                foreach ( $columns as $column ) {
-                       $ret .= '<td width="33.3%">';
+                       $ret .= '<td style="width: 33.3%;">';
                        $colContents = array();
 
                        # Kind of like array_flip() here, but we keep duplicates in an
index 8cca4bb..8467712 100644 (file)
@@ -345,7 +345,7 @@ class ChangesList extends ContextSource {
                                'action' => 'history'
                        )
                );
-               $s .= $this->msg( 'parentheses' )->rawParams( $diffhist )->escaped() . ' . . ';
+               $s .= $this->msg( 'parentheses' )->rawParams( $diffhist )->escaped() . ' <span class="mw-changeslist-separator">. .</span> ';
        }
 
        /**
@@ -366,7 +366,7 @@ class ChangesList extends ContextSource {
                $articlelink = Linker::linkKnown(
                        $rc->getTitle(),
                        null,
-                       array(),
+                       array( 'class' => 'mw-changeslist-title' ),
                        $params
                );
                if( $this->isDeleted($rc,Revision::DELETED_TEXT) ) {
@@ -388,8 +388,8 @@ class ChangesList extends ContextSource {
         * @param $rc RecentChange
         */
        public function insertTimestamp( &$s, $rc ) {
-               $s .= $this->message['semicolon-separator'] .
-                       $this->getLanguage()->userTime( $rc->mAttribs['rc_timestamp'], $this->getUser() ) . ' . . ';
+               $s .= $this->message['semicolon-separator'] . '<span class="mw-changeslist-date">' .
+                       $this->getLanguage()->userTime( $rc->mAttribs['rc_timestamp'], $this->getUser() ) . '</span> <span class="mw-changeslist-separator">. .</span> ';
        }
 
        /**
@@ -628,7 +628,7 @@ class OldChangesList extends ChangesList {
                if ( $wgRCShowChangedSize ) {
                        $cd = $this->formatCharacterDifference( $rc );
                        if ( $cd !== '' ) {
-                               $s .= "$cd  . . ";
+                               $s .= $cd . '  <span class="mw-changeslist-separator">. .</span> ';
                        }
                }
 
@@ -994,7 +994,7 @@ class EnhancedChangesList extends ChangesList {
                        $r .= $this->msg( 'parentheses' )->rawParams( $logtext )->escaped();
                }
 
-               $r .= ' . . ';
+               $r .= ' <span class="mw-changeslist-separator">. .</span> ';
 
                # Character difference (does not apply if only log items)
                if( $wgRCShowChangedSize && !$allLogs ) {
@@ -1013,7 +1013,7 @@ class EnhancedChangesList extends ChangesList {
                        if( $chardiff == '' ) {
                                $r .= ' ';
                        } else {
-                               $r .= ' ' . $chardiff. ' . . ';
+                               $r .= ' ' . $chardiff. ' <span class="mw-changeslist-separator">. .</span> ';
                        }
                }
 
@@ -1066,13 +1066,13 @@ class EnhancedChangesList extends ChangesList {
                        if ( !$type == RC_LOG || $type == RC_NEW ) {
                                $r .= ' ' . $this->msg( 'parentheses' )->rawParams( $rcObj->curlink . $this->message['pipe-separator'] . $rcObj->lastlink )->escaped();
                        }
-                       $r .= ' . . ';
+                       $r .= ' <span class="mw-changeslist-separator">. .</span> ';
 
                        # Character diff
                        if ( $wgRCShowChangedSize ) {
                                $cd = $this->formatCharacterDifference( $rcObj );
                                if ( $cd !== '' ) {
-                                       $r .= "$cd . . ";
+                                       $r .= $cd . ' <span class="mw-changeslist-separator">. .</span> ';
                                }
                        }
 
@@ -1202,12 +1202,12 @@ class EnhancedChangesList extends ChangesList {
                                $query
                        ) )->escaped();
                }
-               $r .= ' . . ';
+               $r .= ' <span class="mw-changeslist-separator">. .</span> ';
                # Character diff
                if ( $wgRCShowChangedSize ) {
                        $cd = $this->formatCharacterDifference( $rcObj );
                        if ( $cd !== '' ) {
-                               $r .= "$cd . . ";
+                               $r .= $cd . ' <span class="mw-changeslist-separator">. .</span> ';
                        }
                }
 
index c65d133..19670bf 100644 (file)
@@ -2711,14 +2711,14 @@ $wgFooterIcons = array(
  *  - true = use a combined login / create account link
  *  - false = split login and create account into two separate links
  */
-$wgUseCombinedLoginLink = true;
+$wgUseCombinedLoginLink = false;
 
 /**
  * Search form behavior for Vector skin only.
  *  - true = use an icon search button
  *  - false = use Go & Search buttons
  */
-$wgVectorUseSimpleSearch = false;
+$wgVectorUseSimpleSearch = true;
 
 /**
  * Watch and unwatch as an icon rather than a link for Vector skin only.
@@ -3218,10 +3218,23 @@ $wgParserConf = array(
 $wgMaxTocLevel = 999;
 
 /**
- * A complexity limit on template expansion
+ * A complexity limit on template expansion: the maximum number of nodes visited
+ * by PPFrame::expand()
  */
 $wgMaxPPNodeCount = 1000000;
 
+/**
+ * A complexity limit on template expansion: the maximum number of elements
+ * generated by Preprocessor::preprocessToObj(). This allows you to limit the
+ * amount of memory used by the Preprocessor_DOM node cache: testing indicates
+ * that each element uses about 160 bytes of memory on a 64-bit processor, so
+ * this default corresponds to about 155 MB.
+ *
+ * When the limit is exceeded, an exception is thrown.
+ */
+$wgMaxGeneratedPPNodeCount = 1000000;
+
+
 /**
  * Maximum recursion depth for templates within templates.
  * The current parser adds two levels to the PHP call stack for each template,
index f9bba19..d3b670d 100644 (file)
@@ -1244,7 +1244,7 @@ class EditPage {
                        if ( $this->section == 'new' ) {
                                if ( $this->sectiontitle !== '' ) {
                                        // Insert the section title above the content.
-                                       $text = wfMessage( 'newsectionheaderdefaultlevel', $this->sectiontitle )
+                                       $text = wfMessage( 'newsectionheaderdefaultlevel' )->rawParams( $this->sectiontitle )
                                                ->inContentLanguage()->text() . "\n\n" . $text;
 
                                        // Jump to the new section
@@ -1255,12 +1255,12 @@ class EditPage {
                                        // passed.
                                        if ( $this->summary === '' ) {
                                                $cleanSectionTitle = $wgParser->stripSectionName( $this->sectiontitle );
-                                               $this->summary = wfMessage( 'newsectionsummary', $cleanSectionTitle )
-                                                       ->inContentLanguage()->text();
+                                               $this->summary = wfMessage( 'newsectionsummary' )
+                                                       ->rawParams( $cleanSectionTitle )->inContentLanguage()->text();
                                        }
                                } elseif ( $this->summary !== '' ) {
                                        // Insert the section title above the content.
-                                       $text = wfMessage( 'newsectionheaderdefaultlevel', $this->summary )
+                                       $text = wfMessage( 'newsectionheaderdefaultlevel' )->rawParams( $this->summary )
                                                ->inContentLanguage()->text() . "\n\n" . $text;
 
                                        // Jump to the new section
@@ -1268,8 +1268,8 @@ class EditPage {
 
                                        // Create a link to the new section from the edit summary.
                                        $cleanSummary = $wgParser->stripSectionName( $this->summary );
-                                       $this->summary = wfMessage( 'newsectionsummary', $cleanSummary )
-                                               ->inContentLanguage()->text();
+                                       $this->summary = wfMessage( 'newsectionsummary' )
+                                               ->rawParams( $cleanSummary )->inContentLanguage()->text();
                                }
                        }
 
@@ -1295,7 +1295,7 @@ class EditPage {
                                                $this->isConflict = false;
                                                wfDebug( __METHOD__ . ": conflict suppressed; new section\n" );
                                        }
-                               } elseif ( $this->section == '' && $this->userWasLastToEdit( $wgUser->getId(), $this->edittime ) ) {
+                               } elseif ( $this->section == '' && Revision::userWasLastToEdit( DB_MASTER,  $this->mTitle->getArticleID(), $wgUser->getId(), $this->edittime ) ) {
                                        # Suppress edit conflict with self, except for section edits where merging is required.
                                        wfDebug( __METHOD__ . ": Suppressing edit conflict, same user.\n" );
                                        $this->isConflict = false;
@@ -1399,16 +1399,16 @@ class EditPage {
                                        // passed.
                                        if ( $this->summary === '' ) {
                                                $cleanSectionTitle = $wgParser->stripSectionName( $this->sectiontitle );
-                                               $this->summary = wfMessage( 'newsectionsummary', $cleanSectionTitle )
-                                                       ->inContentLanguage()->text();
+                                               $this->summary = wfMessage( 'newsectionsummary' )
+                                                       ->rawParams( $cleanSectionTitle )->inContentLanguage()->text();
                                        }
                                } elseif ( $this->summary !== '' ) {
                                        $sectionanchor = $wgParser->guessLegacySectionNameFromWikiText( $this->summary );
                                        # This is a new section, so create a link to the new section
                                        # in the revision summary.
                                        $cleanSummary = $wgParser->stripSectionName( $this->summary );
-                                       $this->summary = wfMessage( 'newsectionsummary', $cleanSummary )
-                                               ->inContentLanguage()->text();
+                                       $this->summary = wfMessage( 'newsectionsummary' )
+                                               ->rawParams( $cleanSummary )->inContentLanguage()->text();
                                }
                        } elseif ( $this->section != '' ) {
                                # Try to get a section anchor from the section source, redirect to edited section if header found
@@ -1489,35 +1489,6 @@ class EditPage {
                }
        }
 
-       /**
-        * Check if no edits were made by other users since
-        * the time a user started editing the page. Limit to
-        * 50 revisions for the sake of performance.
-        *
-        * @param $id int
-        * @param $edittime string
-        *
-        * @return bool
-        */
-       protected function userWasLastToEdit( $id, $edittime ) {
-               if ( !$id ) return false;
-               $dbw = wfGetDB( DB_MASTER );
-               $res = $dbw->select( 'revision',
-                       'rev_user',
-                       array(
-                               'rev_page' => $this->mTitle->getArticleID(),
-                               'rev_timestamp > ' . $dbw->addQuotes( $dbw->timestamp( $edittime ) )
-                       ),
-                       __METHOD__,
-                       array( 'ORDER BY' => 'rev_timestamp ASC', 'LIMIT' => 50 ) );
-               foreach ( $res as $row ) {
-                       if ( $row->rev_user != $id ) {
-                               return false;
-                       }
-               }
-               return true;
-       }
-
        /**
         * @private
         * @todo document
@@ -2459,7 +2430,7 @@ HTML
                wfRunHooks( 'EditPageCopyrightWarning', array( $title, &$copywarnMsg ) );
 
                return "<div id=\"editpage-copywarn\">\n" .
-                       call_user_func_array( "wfMsgNoTrans", $copywarnMsg ) . "\n</div>";
+                       call_user_func_array( 'wfMessage', $copywarnMsg )->plain() . "\n</div>";
        }
 
        protected function showStandardInputs( &$tabindex = 2 ) {
@@ -2489,7 +2460,7 @@ HTML
                $edithelpurl = Skin::makeInternalOrExternalUrl( wfMessage( 'edithelppage' )->inContentLanguage()->text() );
                $edithelp = '<a target="helpwindow" href="' . $edithelpurl . '">' .
                        wfMessage( 'edithelp' )->escaped() . '</a> ' .
-                       wfMessage( 'newwindow' )->escaped();
+                       wfMessage( 'newwindow' )->parse();
                $wgOut->addHTML( "      <span class='cancelLink'>{$cancel}</span>\n" );
                $wgOut->addHTML( "      <span class='editHelp'>{$edithelp}</span>\n" );
                $wgOut->addHTML( "</div><!-- editButtons -->\n</div><!-- editOptions -->\n" );
@@ -2642,9 +2613,9 @@ HTML
                                ' [[#' . self::EDITFORM_ID . '|' . $wgLang->getArrow() . ' ' . wfMessage( 'continue-editing' )->text() . ']]';
                }
 
-               $parserOptions = ParserOptions::newFromUser( $wgUser );
+               $parserOptions = $this->mArticle->makeParserOptions( $this->mArticle->getContext() );
+
                $parserOptions->setEditSection( false );
-               $parserOptions->setTidy( true );
                $parserOptions->setIsPreview( true );
                $parserOptions->setIsSectionPreview( !is_null( $this->section ) && $this->section !== '' );
 
@@ -2689,8 +2660,6 @@ HTML
 
                        wfRunHooks( 'EditPageGetPreviewText', array( $this, &$toparse ) );
 
-                       $parserOptions->enableLimitReport();
-
                        $toparse = $wgParser->preSaveTransform( $toparse, $this->mTitle, $wgUser, $parserOptions );
                        $parserOutput = $wgParser->parse( $toparse, $this->mTitle, $parserOptions );
 
index a131cca..714f73e 100644 (file)
@@ -240,7 +240,6 @@ class MWException extends Exception {
                        }
 
                        echo "</body></html>\n";
-                       die( 1 );
                }
        }
 
@@ -639,7 +638,7 @@ class MWExceptionHandler {
                                if ( $cmdLine ) {
                                        self::printError( $message );
                                } else {
-                                       self::escapeEchoAndDie( $message );
+                                       echo nl2br( htmlspecialchars( $message ) ) . "\n";
                                }
                        }
                } else {
@@ -653,7 +652,7 @@ class MWExceptionHandler {
                        if ( $cmdLine ) {
                                self::printError( $message );
                        } else {
-                               self::escapeEchoAndDie( $message );
+                               echo nl2br( htmlspecialchars( $message ) ) . "\n";
                        }
                }
        }
@@ -674,17 +673,6 @@ class MWExceptionHandler {
                }
        }
 
-       /**
-        * Print a message after escaping it and converting newlines to <br>
-        * Use this for non-command line failures.
-        *
-        * @param $message string Failure text
-        */
-       private static function escapeEchoAndDie( $message ) {
-               echo nl2br( htmlspecialchars( $message ) ) . "\n";
-               die(1);
-       }
-
        /**
         * Exception handler which simulates the appropriate catch() handling:
         *
index f01fb23..c2409de 100644 (file)
@@ -83,9 +83,9 @@ class WikiExporter {
         * @param $buffer Int: one of WikiExporter::BUFFER or WikiExporter::STREAM
         * @param $text Int: one of WikiExporter::TEXT or WikiExporter::STUB
         */
-       function __construct( &$db, $history = WikiExporter::CURRENT,
+       function __construct( $db, $history = WikiExporter::CURRENT,
                        $buffer = WikiExporter::BUFFER, $text = WikiExporter::TEXT ) {
-               $this->db =& $db;
+               $this->db = $db;
                $this->history = $history;
                $this->buffer  = $buffer;
                $this->writer  = new XmlDumpWriter();
index 98bc65f..17e3f4d 100644 (file)
@@ -1542,8 +1542,6 @@ function wfMsgGetKey( $key, $useDB = true, $langCode = false, $transform = true
 /**
  * Replace message parameter keys on the given formatted output.
  *
- * @deprecated since 1.18
- *
  * @param $message String
  * @param $args Array
  * @return string
@@ -2404,7 +2402,6 @@ define( 'TS_ISO_8601_BASIC', 9 );
 /**
  * Get a timestamp string in one of various formats
  *
- * @deprecated
  * @param $outputtype Mixed: A timestamp in one of the supported formats, the
  *                    function will autodetect which format is supplied and act
  *                    accordingly.
@@ -2412,8 +2409,13 @@ define( 'TS_ISO_8601_BASIC', 9 );
  * @return Mixed: String / false The same date in the format specified in $outputtype or false
  */
 function wfTimestamp( $outputtype = TS_UNIX, $ts = 0 ) {
-       $timestamp = new MWTimestamp( $ts );
-       return $timestamp->getTimestamp( $outputtype );
+       try {
+               $timestamp = new MWTimestamp( $ts );
+               return $timestamp->getTimestamp( $outputtype );
+       } catch( TimestampException $e ) {
+               wfDebug("wfTimestamp() fed bogus time value: TYPE=$outputtype; VALUE=$ts\n");
+               return false;
+       }
 }
 
 /**
index d4d0203..dfd081f 100644 (file)
@@ -191,12 +191,8 @@ class Html {
                        return '';
                }
 
-               # Remove HTML5-only attributes if we aren't doing HTML5, and disable
-               # form validation regardless (see bug 23769 and the more detailed
-               # comment in expandAttributes())
+               # Remove invalid input types
                if ( $element == 'input' ) {
-                       # Whitelist of types that don't cause validation.  All except
-                       # 'search' are valid in XHTML1.
                        $validTypes = array(
                                'hidden',
                                'text',
@@ -208,18 +204,30 @@ class Html {
                                'image',
                                'reset',
                                'button',
-                               'search',
                        );
 
+                       # Allow more input types in HTML5 mode
+                       if( $wgHtml5 ) {
+                               $validTypes = array_merge( $validTypes, array(
+                                       'datetime',
+                                       'datetime-local',
+                                       'date',
+                                       'month',
+                                       'time',
+                                       'week',
+                                       'number',
+                                       'range',
+                                       'email',
+                                       'url',
+                                       'search',
+                                       'tel',
+                                       'color',
+                               ) );
+                       }
                        if ( isset( $attribs['type'] )
                        && !in_array( $attribs['type'], $validTypes ) ) {
                                unset( $attribs['type'] );
                        }
-
-                       if ( isset( $attribs['type'] ) && $attribs['type'] == 'search'
-                       && !$wgHtml5 ) {
-                               unset( $attribs['type'] );
-                       }
                }
 
                if ( !$wgHtml5 && $element == 'textarea' && isset( $attribs['maxlength'] ) ) {
@@ -286,6 +294,8 @@ class Html {
                        return $attribs;
                }
 
+               # Whenever altering this array, please provide a covering test case
+               # in HtmlTest::provideElementsWithAttributesHavingDefaultValues
                static $attribDefaults = array(
                        'area' => array( 'shape' => 'rect' ),
                        'button' => array(
@@ -306,7 +316,6 @@ class Html {
                        'input' => array(
                                'formaction' => 'GET',
                                'type' => 'text',
-                               'value' => '',
                        ),
                        'keygen' => array( 'keytype' => 'rsa' ),
                        'link' => array( 'media' => 'all' ),
@@ -347,6 +356,29 @@ class Html {
                && strval( $attribs['type'] ) == 'text/css' ) {
                        unset( $attribs['type'] );
                }
+               if ( $element === 'input' ) {
+                       $type = isset( $attribs['type'] ) ? $attribs['type'] : null;
+                       $value = isset( $attribs['value'] ) ? $attribs['value'] : null;
+                       if ( $type === 'checkbox' || $type === 'radio' ) {
+                               // The default value for checkboxes and radio buttons is 'on'
+                               // not ''. By stripping value="" we break radio boxes that
+                               // actually wants empty values.
+                               if ( $value === 'on' ) {
+                                       unset( $attribs['value'] );
+                               }
+                       } elseif ( $type === 'submit' ) {
+                               // The default value for submit appears to be "Submit" but
+                               // let's not bother stripping out localized text that matches
+                               // that.
+                       } else {
+                               // The default value for nearly every other field type is ''
+                               // The 'range' and 'color' types use different defaults but
+                               // stripping a value="" does not hurt them.
+                               if ( $value === '' ) {
+                                       unset( $attribs['value'] );
+                               }
+                       }
+               }
                if ( $element === 'select' && isset( $attribs['size'] ) ) {
                        if ( in_array( 'multiple', $attribs )
                                || ( isset( $attribs['multiple'] ) && $attribs['multiple'] !== false )
index c7afb76..6f1b1a1 100644 (file)
@@ -383,6 +383,9 @@ class ImagePage extends Article {
                                        # Some sort of audio file that doesn't have dimensions
                                        # Don't output a no hi res message for such a file
                                        $msgsmall = '';
+                               } elseif ( $this->displayImg->isVectorized() ) {
+                                       # For vectorized images, full size is just the frame size
+                                       $msgsmall = '';
                                } else {
                                        # Image is small enough to show full size on image page
                                        $msgsmall = wfMessage( 'file-nohires' )->parse();
index b020a8e..b69069b 100644 (file)
@@ -851,11 +851,10 @@ class OutputPage extends ContextSource {
                $this->getContext()->setTitle( $t );
        }
 
-
        /**
         * Replace the subtile with $str
         *
-        * @param $str String|Message: new value of the subtitle
+        * @param $str String|Message: new value of the subtitle. String should be safe HTML.
         */
        public function setSubtitle( $str ) {
                $this->clearSubtitle();
@@ -875,7 +874,7 @@ class OutputPage extends ContextSource {
        /**
         * Add $str to the subtitle
         *
-        * @param $str String|Message to add to the subtitle
+        * @param $str String|Message to add to the subtitle. String should be safe HTML.
         */
        public function addSubtitle( $str ) {
                if ( $str instanceof Message ) {
@@ -1990,6 +1989,9 @@ class OutputPage extends ContextSource {
                        wfProfileOut( 'Output-skin' );
                }
 
+               // This hook allows last minute changes to final overall output by modifying output buffer
+               wfRunHooks( 'AfterFinalPageOutput', array( $this ) );
+
                $this->sendCacheControl();
                ob_end_flush();
                wfProfileOut( __METHOD__ );
@@ -3545,7 +3547,7 @@ $templates
         *
         * Is equivalent to:
         *
-        *    $wgOut->addWikiText( "<div class='error'>\n" . wfMsgNoTrans( 'some-error' ) . "\n</div>" );
+        *    $wgOut->addWikiText( "<div class='error'>\n" . wfMessage( 'some-error' )->plain() . "\n</div>" );
         *
         * The newline after opening div is needed in some wikitext. See bug 19226.
         *
index 9da031e..20cc8f5 100644 (file)
@@ -1290,4 +1290,42 @@ class Revision implements IDBAccessObject {
                }
                return 0;
        }
-}
+
+       /**
+        * Check if no edits were made by other users since
+        * the time a user started editing the page. Limit to
+        * 50 revisions for the sake of performance.
+        *
+        * @since 1.20
+        *
+        * @param DatabaseBase|int $db the Database to perform the check on. May be given as a Database object or
+        *        a database identifier usable with wfGetDB.
+        * @param int $pageId the ID of the page in question
+        * @param int $userId the ID of the user in question
+        * @param string $since look at edits since this time
+        *
+        * @return bool True if the given user was the only one to edit since the given timestamp
+        */
+       public static function userWasLastToEdit( $db, $pageId, $userId, $since ) {
+               if ( !$userId ) return false;
+
+               if ( is_int( $db ) ) {
+                       $db = wfGetDB( $db );
+               }
+
+               $res = $db->select( 'revision',
+                       'rev_user',
+                       array(
+                               'rev_page' => $pageId,
+                               'rev_timestamp > ' . $db->addQuotes( $db->timestamp( $since ) )
+                       ),
+                       __METHOD__,
+                       array( 'ORDER BY' => 'rev_timestamp ASC', 'LIMIT' => 50 ) );
+               foreach ( $res as $row ) {
+                       if ( $row->rev_user != $userId ) {
+                               return false;
+                       }
+               }
+               return true;
+       }
+}
\ No newline at end of file
index 734c4ec..224b2d1 100644 (file)
@@ -692,7 +692,9 @@ class Sanitizer {
                                }
                        }
 
-                       if ( $attribute === 'align' && !in_array( $element, $cells ) ) {
+                       // Table align is special, it's about block alignment instead of
+                       // content align (see also bug 40306)
+                       if ( $attribute === 'align' && in_array( $element, $table ) ) {
                                if ( $value === 'center' ) {
                                        $style .= ' margin-left: auto;';
                                        $property = 'margin-right';
index 1c2c454..01841b6 100644 (file)
@@ -48,8 +48,7 @@ class SiteStats {
                        # Update schema
                        $u = new SiteStatsUpdate( 0, 0, 0 );
                        $u->doUpdate();
-                       $dbr = wfGetDB( DB_SLAVE );
-                       self::$row = $dbr->selectRow( 'site_stats', '*', false, __METHOD__ );
+                       self::$row = self::doLoad( wfGetDB( DB_SLAVE ) );
                }
 
                self::$loaded = true;
@@ -91,7 +90,16 @@ class SiteStats {
         * @return Bool|ResultWrapper
         */
        static function doLoad( $db ) {
-               return $db->selectRow( 'site_stats', '*', false, __METHOD__ );
+               return $db->selectRow( 'site_stats', array(
+                               'ss_row_id',
+                               'ss_total_views',
+                               'ss_total_edits',
+                               'ss_good_articles',
+                               'ss_total_pages',
+                               'ss_users',
+                               'ss_active_users',
+                               'ss_images',
+                       ), false, __METHOD__ );
        }
 
        /**
@@ -286,6 +294,8 @@ class SiteStatsUpdate implements DeferrableUpdate {
                        $this->doUpdatePendingDeltas();
                } else {
                        $dbw = wfGetDB( DB_MASTER );
+                       // Need a separate transaction because this a global lock
+                       $dbw->begin( __METHOD__ );
 
                        $lockKey = wfMemcKey( 'site_stats' ); // prepend wiki ID
                        if ( $rate ) {
@@ -306,9 +316,6 @@ class SiteStatsUpdate implements DeferrableUpdate {
                                $this->images   += ( $pd['ss_images']['+'] - $pd['ss_images']['-'] );
                        }
 
-                       // Need a separate transaction because this a global lock
-                       $dbw->begin( __METHOD__ );
-
                        // Build up an SQL query of deltas and apply them...
                        $updates = '';
                        $this->appendUpdate( $updates, 'ss_total_views', $this->views );
index 1ae1cb3..7fb17a7 100644 (file)
@@ -120,7 +120,7 @@ class LegacyTemplate extends BaseTemplate {
                }
 
                $s .= "\n<div id='content'>\n<div id='topbar'>\n" .
-                 "<table border='0' cellspacing='0' width='100%'>\n<tr>\n";
+                 "<table cellspacing='0' style='width: 100%;'>\n<tr>\n";
 
                if ( $this->getSkin()->qbSetting() == 0 ) {
                        $s .= "<td class='top' style='text-align: left; vertical-align: top;' rowspan='{$rows}'>\n" .
@@ -553,7 +553,7 @@ class LegacyTemplate extends BaseTemplate {
         */
        function getQuickbarCompensator( $rows = 1 ) {
                wfDeprecated( __METHOD__, '1.19' );
-               return "<td width='152' rowspan='{$rows}'>&#160;</td>";
+               return "<td style='width: 152px;' rowspan='{$rows}'>&#160;</td>";
        }
 
        function editThisPage() {
index df94dcb..bda4395 100644 (file)
@@ -1153,7 +1153,7 @@ class SkinTemplate extends Skin {
                        if ( $revid ) {
                                $nav_urls['permalink'] = array(
                                        'text' => $this->msg( 'permalink' )->text(),
-                                       'href' => $out->getTitle()->getLocalURL( "oldid=$revid" )
+                                       'href' => $this->getTitle()->getLocalURL( "oldid=$revid" )
                                );
                        }
 
index 16be775..a5844b6 100644 (file)
@@ -69,6 +69,8 @@ class MWTimestamp {
         * Make a new timestamp and set it to the specified time,
         * or the current time if unspecified.
         *
+        * @since 1.20
+        *
         * @param $timestamp bool|string Timestamp to set, or false for current time
         */
        public function __construct( $timestamp = false ) {
@@ -81,6 +83,8 @@ class MWTimestamp {
         * Parse the given timestamp into either a DateTime object or a Unix timestamp,
         * and then store it.
         *
+        * @since 1.20
+        *
         * @param $ts string|bool Timestamp to store, or false for now
         * @throws TimestampException
         */
@@ -136,18 +140,14 @@ class MWTimestamp {
                        $strtime = call_user_func_array( "sprintf", $da );
                }
 
-               if( function_exists( "date_create" ) ) {
-                       try {
-                               $final = new DateTime( $strtime, new DateTimeZone( 'GMT' ) );
-                       } catch(Exception $e) {
-                               throw new TimestampException( __METHOD__ . 'Invalid timestamp format.' );
-                       }
-               } else {
-                       $final = strtotime( $strtime );
+               try {
+                       $final = new DateTime( $strtime, new DateTimeZone( 'GMT' ) );
+               } catch(Exception $e) {
+                       throw new TimestampException( __METHOD__ . ' Invalid timestamp format.' );
                }
 
                if( $final === false ) {
-                       throw new TimestampException( __METHOD__ . 'Invalid timestamp format.' );
+                       throw new TimestampException( __METHOD__ . ' Invalid timestamp format.' );
                }
                $this->timestamp = $final;
        }
@@ -158,6 +158,8 @@ class MWTimestamp {
         * Convert the internal timestamp to the specified format and then
         * return it.
         *
+        * @since 1.20
+        *
         * @param $style int Constant Output format for timestamp
         * @throws TimestampException
         * @return string The formatted timestamp
@@ -192,6 +194,8 @@ class MWTimestamp {
         * generate a readable timestamp by returning "<N> <units> ago", where the
         * largest possible unit is used.
         *
+        * @since 1.20
+        *
         * @return string Formatted timestamp
         */
        public function getHumanTimestamp() {
@@ -219,6 +223,8 @@ class MWTimestamp {
        }
 
        /**
+        * @since 1.20
+        *
         * @return string
         */
        public function __toString() {
@@ -226,4 +232,7 @@ class MWTimestamp {
        }
 }
 
+/**
+ * @since 1.20
+ */
 class TimestampException extends MWException {}
index f9c7bdf..1b5e21d 100644 (file)
@@ -84,7 +84,6 @@ class Title {
        var $mLength = -1;                // /< The page length, 0 for special pages
        var $mRedirect = null;            // /< Is the article at this title a redirect?
        var $mNotificationTimestamp = array(); // /< Associative array of user ID -> timestamp/false
-       var $mBacklinkCache = null;       // /< Cache of links to this title
        var $mHasSubpage;                 // /< Whether a page has any subpages
        // @}
 
@@ -4433,6 +4432,11 @@ class Title {
                        'rd_title' => $this->getDBkey(),
                        'rd_from = page_id'
                );
+               if ( $this->isExternal() ) {
+                       $where['rd_interwiki'] = $this->getInterwiki();
+               } else {
+                       $where[] = 'rd_interwiki = ' . $dbr->addQuotes( '' ) . ' OR rd_interwiki IS NULL';
+               }
                if ( !is_null( $ns ) ) {
                        $where['page_namespace'] = $ns;
                }
@@ -4477,11 +4481,8 @@ class Title {
         *
         * @return BacklinkCache
         */
-       function getBacklinkCache() {
-               if ( is_null( $this->mBacklinkCache ) ) {
-                       $this->mBacklinkCache = new BacklinkCache( $this );
-               }
-               return $this->mBacklinkCache;
+       public function getBacklinkCache() {
+               return BacklinkCache::get( $this );
        }
 
        /**
index 4b0e68c..45ee20c 100644 (file)
@@ -91,22 +91,22 @@ class WikiErrorMsg extends WikiError {
                wfDeprecated( __METHOD__, '1.17' );
                $args = func_get_args();
                array_shift( $args );
-               $this->mMessage = wfMsgReal( $message, $args, true );
+               $this->mMessage = wfMessage( $message )->rawParams( $args )->text();
                $this->mMsgKey = $message;
                $this->mMsgArgs = $args;
        }
-       
+
        function getMessageKey() {
                return $this->mMsgKey;
        }
-       
+
        function getMessageArgs() {
                return $this->mMsgArgs;
        }
 }
 
 /**
- * Error class designed to handle errors involved with 
+ * Error class designed to handle errors involved with
  * XML parsing
  * @ingroup Exception
  */
index 1021767..5a3a9e6 100644 (file)
@@ -559,14 +559,16 @@ class WikiPage extends Page implements IDBAccessObject {
         *
         * @param $audience Integer: one of:
         *      Revision::FOR_PUBLIC       to be displayed to all users
-        *      Revision::FOR_THIS_USER    to be displayed to $wgUser
+        *      Revision::FOR_THIS_USER    to be displayed to the given user
         *      Revision::RAW              get the text regardless of permissions
+        * @param $user User object to check for, only if FOR_THIS_USER is passed
+        *              to the $audience parameter
         * @return String|bool The text of the current revision. False on failure
         */
-       public function getText( $audience = Revision::FOR_PUBLIC ) {
+       public function getText( $audience = Revision::FOR_PUBLIC, User $user = null ) {
                $this->loadLastEdit();
                if ( $this->mLastRevision ) {
-                       return $this->mLastRevision->getText( $audience );
+                       return $this->mLastRevision->getText( $audience, $user );
                }
                return false;
        }
@@ -608,14 +610,16 @@ class WikiPage extends Page implements IDBAccessObject {
        /**
         * @param $audience Integer: one of:
         *      Revision::FOR_PUBLIC       to be displayed to all users
-        *      Revision::FOR_THIS_USER    to be displayed to $wgUser
+        *      Revision::FOR_THIS_USER    to be displayed to the given user
         *      Revision::RAW              get the text regardless of permissions
+        * @param $user User object to check for, only if FOR_THIS_USER is passed
+        *              to the $audience parameter
         * @return int user ID for the user that made the last article revision
         */
-       public function getUser( $audience = Revision::FOR_PUBLIC ) {
+       public function getUser( $audience = Revision::FOR_PUBLIC, User $user = null ) {
                $this->loadLastEdit();
                if ( $this->mLastRevision ) {
-                       return $this->mLastRevision->getUser( $audience );
+                       return $this->mLastRevision->getUser( $audience, $user );
                } else {
                        return -1;
                }
@@ -625,14 +629,16 @@ class WikiPage extends Page implements IDBAccessObject {
         * Get the User object of the user who created the page
         * @param $audience Integer: one of:
         *      Revision::FOR_PUBLIC       to be displayed to all users
-        *      Revision::FOR_THIS_USER    to be displayed to $wgUser
+        *      Revision::FOR_THIS_USER    to be displayed to the given user
         *      Revision::RAW              get the text regardless of permissions
+        * @param $user User object to check for, only if FOR_THIS_USER is passed
+        *              to the $audience parameter
         * @return User|null
         */
-       public function getCreator( $audience = Revision::FOR_PUBLIC ) {
+       public function getCreator( $audience = Revision::FOR_PUBLIC, User $user = null ) {
                $revision = $this->getOldestRevision();
                if ( $revision ) {
-                       $userName = $revision->getUserText( $audience );
+                       $userName = $revision->getUserText( $audience, $user );
                        return User::newFromName( $userName, false );
                } else {
                        return null;
@@ -642,14 +648,16 @@ class WikiPage extends Page implements IDBAccessObject {
        /**
         * @param $audience Integer: one of:
         *      Revision::FOR_PUBLIC       to be displayed to all users
-        *      Revision::FOR_THIS_USER    to be displayed to $wgUser
+        *      Revision::FOR_THIS_USER    to be displayed to the given user
         *      Revision::RAW              get the text regardless of permissions
+        * @param $user User object to check for, only if FOR_THIS_USER is passed
+        *              to the $audience parameter
         * @return string username of the user that made the last article revision
         */
-       public function getUserText( $audience = Revision::FOR_PUBLIC ) {
+       public function getUserText( $audience = Revision::FOR_PUBLIC, User $user = null ) {
                $this->loadLastEdit();
                if ( $this->mLastRevision ) {
-                       return $this->mLastRevision->getUserText( $audience );
+                       return $this->mLastRevision->getUserText( $audience, $user );
                } else {
                        return '';
                }
@@ -658,14 +666,16 @@ class WikiPage extends Page implements IDBAccessObject {
        /**
         * @param $audience Integer: one of:
         *      Revision::FOR_PUBLIC       to be displayed to all users
-        *      Revision::FOR_THIS_USER    to be displayed to $wgUser
+        *      Revision::FOR_THIS_USER    to be displayed to the given user
         *      Revision::RAW              get the text regardless of permissions
+        * @param $user User object to check for, only if FOR_THIS_USER is passed
+        *              to the $audience parameter
         * @return string Comment stored for the last article revision
         */
-       public function getComment( $audience = Revision::FOR_PUBLIC ) {
+       public function getComment( $audience = Revision::FOR_PUBLIC, User $user = null ) {
                $this->loadLastEdit();
                if ( $this->mLastRevision ) {
-                       return $this->mLastRevision->getComment( $audience );
+                       return $this->mLastRevision->getComment( $audience, $user );
                } else {
                        return '';
                }
@@ -1640,18 +1650,34 @@ class WikiPage extends Page implements IDBAccessObject {
 
        /**
         * Get parser options suitable for rendering the primary article wikitext
-        * @param User|string $user User object or 'canonical'
+        *
+        * @param IContextSource|User|string $context One of the following:
+        *        - IContextSource: Use the User and the Language of the provided
+        *          context
+        *        - User: Use the provided User object and $wgLang for the language,
+        *          so use an IContextSource object if possible.
+        *        - 'canonical': Canonical options (anonymous user with default
+        *          preferences and content language).
         * @return ParserOptions
         */
-       public function makeParserOptions( $user ) {
+       public function makeParserOptions( $context ) {
                global $wgContLang;
-               if ( $user instanceof User ) { // settings per user (even anons)
-                       $options = ParserOptions::newFromUser( $user );
+
+               if ( $context instanceof IContextSource ) {
+                       $options = ParserOptions::newFromContext( $context );
+               } elseif ( $context instanceof User ) { // settings per user (even anons)
+                       $options = ParserOptions::newFromUser( $context );
                } else { // canonical settings
                        $options = ParserOptions::newFromUserAndLang( new User, $wgContLang );
                }
+
+               if ( $this->getTitle()->isConversionTable() ) {
+                       $options->disableContentConversion();
+               }
+
                $options->enableLimitReport(); // show inclusion/loop reports
                $options->setTidy( true ); // fix bad HTML
+
                return $options;
        }
 
@@ -2406,9 +2432,9 @@ class WikiPage extends Page implements IDBAccessObject {
                $target = Revision::newFromId( $s->rev_id );
                if ( empty( $summary ) ) {
                        if ( $from == '' ) { // no public user name
-                               $summary = wfMessage( 'revertpage-nouser' )->inContentLanguage()->text();
+                               $summary = wfMessage( 'revertpage-nouser' );
                        } else {
-                               $summary = wfMessage( 'revertpage' )->inContentLanguage()->text();
+                               $summary = wfMessage( 'revertpage' );
                        }
                }
 
@@ -2418,7 +2444,11 @@ class WikiPage extends Page implements IDBAccessObject {
                        $wgContLang->timeanddate( wfTimestamp( TS_MW, $s->rev_timestamp ) ),
                        $current->getId(), $wgContLang->timeanddate( $current->getTimestamp() )
                );
-               $summary = wfMsgReplaceArgs( $summary, $args );
+               if( $summary instanceof Message ) {
+                       $summary = $summary->params( $args )->inContentLanguage()->text();
+               } else {
+                       $summary = wfMsgReplaceArgs( $summary, $args );
+               }
 
                # Truncate for whole multibyte characters.
                $summary = $wgContLang->truncate( $summary, 255 );
index 120312d..4a55d5e 100644 (file)
@@ -198,10 +198,11 @@ class Xml {
                } else {
                        $encYear = '';
                }
-               return Xml::label( wfMessage( 'year' )->text(), 'year' ) . ' '.
-                       Xml::input( 'year', 4, $encYear, array('id' => 'year', 'maxlength' => 4) ) . ' '.
-                       Xml::label( wfMessage( 'month' )->text(), 'month' ) . ' '.
-                       Xml::monthSelector( $encMonth, -1 );
+               $inputAttribs = array( 'id' => 'year', 'maxlength' => 4, 'size' => 7 );
+               return self::label( wfMessage( 'year' )->text(), 'year' ) . ' '.
+                       Html::input( 'year', $encYear, 'number', $inputAttribs ) . ' '.
+                       self::label( wfMessage( 'month' )->text(), 'month' ) . ' '.
+                       self::monthSelector( $encMonth, -1 );
        }
 
        /**
index 247b193..0cbbad9 100644 (file)
@@ -6716,6 +6716,7 @@ $zh2Hant = array(
 '准话' => '準話',
 '准谱' => '準譜',
 '准货币' => '準貨幣',
+'准军事' => '準軍事',
 '准头' => '準頭',
 '准点' => '準點',
 '溟蒙' => '溟濛',
@@ -18515,4 +18516,4 @@ $zh2SG = array(
 '笨豬跳' => '绑紧跳',
 '蹦极跳' => '绑紧跳',
 '笑星' => '谐星',
-);
\ No newline at end of file
+);
index 1c57f25..dcd6fe5 100644 (file)
@@ -604,7 +604,7 @@ class HistoryPager extends ReverseChronologicalPager {
                        : 0;
                $sDiff = ChangesList::showCharacterDifference( $prevSize, $rev->getSize() );
                $fSize = Linker::formatRevisionSize($rev->getSize());
-               $s .= " . . $fSize $sDiff";
+               $s .= ' <span class="mw-changeslist-separator">. .</span> ' . "$fSize $sDiff";
 
                # Text following the character difference is added just before running hooks
                $s2 = Linker::revComment( $rev, false, true );
@@ -658,7 +658,7 @@ class HistoryPager extends ReverseChronologicalPager {
 
                # Include separator between character difference and following text
                if ( $s2 !== '' ) {
-                       $s .= " . . $s2";
+                       $s .= ' <span class="mw-changeslist-separator">. .</span> ' . $s2;
                }
 
                wfRunHooks( 'PageHistoryLineEnding', array( $this, &$row , &$s, &$classes ) );
@@ -684,7 +684,7 @@ class HistoryPager extends ReverseChronologicalPager {
                        $link = Linker::linkKnown(
                                $this->getTitle(),
                                $date,
-                               array(),
+                               array( 'class' => 'mw-changeslist-date' ),
                                array( 'oldid' => $rev->getId() )
                        );
                } else {
index 6c21306..e27e53e 100644 (file)
@@ -157,16 +157,18 @@ class InfoAction extends FormlessAction {
                                ->numParams( count( $title->getRedirectsHere() ) )->escaped()
                );
 
-               // Subpages of this page
-               $prefixIndex = SpecialPage::getTitleFor( 'Prefixindex', $title->getPrefixedText() . '/' );
-               $table = $this->addRow( $table,
-                       Linker::link( $prefixIndex, $this->msg( 'pageinfo-subpages-name' )->escaped() ),
-                       $this->msg( 'pageinfo-subpages-value' )
-                               ->numParams(
-                                       $pageInfo['subpages']['total'],
-                                       $pageInfo['subpages']['redirects'],
-                                       $pageInfo['subpages']['nonredirects'] )->escaped()
-               );
+               // Subpages of this page, if subpages are enabled for the current NS
+               if ( MWNamespace::hasSubpages( $title->getNamespace() ) ) {
+                       $prefixIndex = SpecialPage::getTitleFor( 'Prefixindex', $title->getPrefixedText() . '/' );
+                       $table = $this->addRow( $table,
+                               Linker::link( $prefixIndex, $this->msg( 'pageinfo-subpages-name' )->escaped() ),
+                               $this->msg( 'pageinfo-subpages-value' )
+                                       ->numParams(
+                                               $pageInfo['subpages']['total'],
+                                               $pageInfo['subpages']['redirects'],
+                                               $pageInfo['subpages']['nonredirects'] )->escaped()
+                       );
+               }
 
                // Page protection
                $content = $this->addTable( $content, $table );
@@ -202,24 +204,40 @@ class InfoAction extends FormlessAction {
                $content = $this->addHeader( $content, $this->msg( 'pageinfo-header-edits' )->text() );
                $table = '';
 
+               $firstRev = $this->page->getOldestRevision();
+
                // Page creator
                $table = $this->addRow( $table,
-                       $this->msg( 'pageinfo-firstuser' )->escaped(), $pageInfo['firstuser']
+                       $this->msg( 'pageinfo-firstuser' )->escaped(),
+                       $firstRev->getUserText( Revision::FOR_THIS_USER, $user )
                );
 
                // Date of page creation
                $table = $this->addRow( $table,
-                       $this->msg( 'pageinfo-firsttime' )->escaped(), $lang->userTimeAndDate( $pageInfo['firsttime'], $user )
+                       $this->msg( 'pageinfo-firsttime' )->escaped(),
+                       Linker::linkKnown(
+                               $title,
+                               $lang->userTimeAndDate( $firstRev->getTimestamp(), $user ),
+                               array(),
+                               array( 'oldid' => $firstRev->getId() )
+                       )
                );
 
                // Latest editor
                $table = $this->addRow( $table,
-                       $this->msg( 'pageinfo-lastuser' )->escaped(), $pageInfo['lastuser']
+                       $this->msg( 'pageinfo-lastuser' )->escaped(),
+                       $this->page->getUserText( Revision::FOR_THIS_USER, $user )
                );
 
                // Date of latest edit
                $table = $this->addRow( $table,
-                       $this->msg( 'pageinfo-lasttime' )->escaped(), $lang->userTimeAndDate( $pageInfo['lasttime'], $user )
+                       $this->msg( 'pageinfo-lasttime' )->escaped(),
+                       Linker::linkKnown(
+                               $title,
+                               $lang->userTimeAndDate( $this->page->getTimestamp(), $user ),
+                               array(),
+                               array( 'oldid' => $this->page->getLatest() )
+                       )
                );
 
                // Total number of edits
@@ -404,54 +422,32 @@ class InfoAction extends FormlessAction {
                );
                $result['recent_authors'] = $authors;
 
-               $conds = array( 'page_namespace' => $title->getNamespace(), 'page_is_redirect' => 1 );
-               $conds[] = 'page_title ' . $dbr->buildLike( $title->getDBkey() . '/', $dbr->anyString() );
-
-               // Subpages of this page (redirects)
-               $result['subpages']['redirects'] = (int) $dbr->selectField(
-                       'page',
-                       'COUNT(page_id)',
-                       $conds,
-                       __METHOD__ );
-
-               // Subpages of this page (non-redirects)
-               $conds['page_is_redirect'] = 0;
-               $result['subpages']['nonredirects'] = (int) $dbr->selectField(
-                       'page',
-                       'COUNT(page_id)',
-                       $conds,
-                       __METHOD__
-               );
-
-               // Subpages of this page (total)
-               $result['subpages']['total'] = $result['subpages']['redirects']
-                       + $result['subpages']['nonredirects'];
+               // Subpages (if enabled)
+               if ( MWNamespace::hasSubpages( $title->getNamespace() ) ) {
+                       $conds = array( 'page_namespace' => $title->getNamespace() );
+                       $conds[] = 'page_title ' . $dbr->buildLike( $title->getDBkey() . '/', $dbr->anyString() );
 
-               // Latest editor + date of latest edit
-               $options = array( 'ORDER BY' => 'rev_timestamp ASC', 'LIMIT' => 1 );
-               $row = $dbr->fetchRow( $dbr->select(
-                       'revision',
-                       array( 'rev_user_text', 'rev_timestamp' ),
-                       array( 'rev_page' => $id ),
-                       __METHOD__,
-                       $options
-               ) );
-
-               $result['firstuser'] = $row['rev_user_text'];
-               $result['firsttime'] = $row['rev_timestamp'];
+                       // Subpages of this page (redirects)
+                       $conds['page_is_redirect'] = 1;
+                       $result['subpages']['redirects'] = (int) $dbr->selectField(
+                               'page',
+                               'COUNT(page_id)',
+                               $conds,
+                               __METHOD__ );
 
-               // Latest editor + date of latest edit
-               $options['ORDER BY'] = 'rev_timestamp DESC';
-               $row = $dbr->fetchRow( $dbr->select(
-                       'revision',
-                       array( 'rev_user_text', 'rev_timestamp' ),
-                       array( 'rev_page' => $id ),
-                       __METHOD__,
-                       $options
-               ) );
+                       // Subpages of this page (non-redirects)
+                       $conds['page_is_redirect'] = 0;
+                       $result['subpages']['nonredirects'] = (int) $dbr->selectField(
+                               'page',
+                               'COUNT(page_id)',
+                               $conds,
+                               __METHOD__
+                       );
 
-               $result['lastuser'] = $row['rev_user_text'];
-               $result['lasttime'] = $row['rev_timestamp'];
+                       // Subpages of this page (total)
+                       $result['subpages']['total'] = $result['subpages']['redirects']
+                               + $result['subpages']['nonredirects'];
+               }
 
                wfProfileOut( __METHOD__ );
                return $result;
@@ -478,7 +474,7 @@ class InfoAction extends FormlessAction {
         */
        protected function addRow( $table, $name, $value ) {
                return $table . Html::rawElement( 'tr', array(),
-                       Html::rawElement( 'td', array(), $name ) .
+                       Html::rawElement( 'td', array( 'valign' => 'top' ), $name ) .
                        Html::rawElement( 'td', array(), $value )
                );
        }
index 1e62766..1513e7d 100644 (file)
@@ -929,9 +929,9 @@ abstract class ApiBase extends ContextSource {
                                ApiBase::dieDebug( __METHOD__, "Boolean param $encParamName's default is set to '$default'. Boolean parameters must default to false." );
                        }
 
-                       $value = $this->getRequest()->getCheck( $encParamName );
+                       $value = $this->getMain()->getCheck( $encParamName );
                } else {
-                       $value = $this->getRequest()->getVal( $encParamName, $default );
+                       $value = $this->getMain()->getVal( $encParamName, $default );
 
                        if ( isset( $value ) && $type == 'namespace' ) {
                                $type = MWNamespace::getValidNamespaces();
@@ -1401,10 +1401,9 @@ abstract class ApiBase extends ContextSource {
                }
 
                if ( isset( self::$messageMap[$key] ) ) {
-                       return array( 'code' =>
-                       wfMsgReplaceArgs( self::$messageMap[$key]['code'], $error ),
-                               'info' =>
-                               wfMsgReplaceArgs( self::$messageMap[$key]['info'], $error )
+                       return array(
+                               'code' => wfMsgReplaceArgs( self::$messageMap[$key]['code'], $error ),
+                               'info' => wfMsgReplaceArgs( self::$messageMap[$key]['info'], $error )
                        );
                }
 
index 35febd9..bfc4933 100644 (file)
@@ -135,6 +135,7 @@ class ApiMain extends ApiBase {
 
        private $mCacheMode = 'private';
        private $mCacheControl = array();
+       private $mParamsUsed = array();
 
        /**
         * Constructs an instance of ApiMain that utilizes the module and format specified by $request.
@@ -168,7 +169,7 @@ class ApiMain extends ApiBase {
                        // Remove all modules other than login
                        global $wgUser;
 
-                       if ( $this->getRequest()->getVal( 'callback' ) !== null ) {
+                       if ( $this->getVal( 'callback' ) !== null ) {
                                // JSON callback allows cross-site reads.
                                // For safety, strip user credentials.
                                wfDebug( "API: stripping user credentials for JSON callback\n" );
@@ -365,6 +366,7 @@ class ApiMain extends ApiBase {
                // clear the output buffer and print just the error information
                ob_start();
 
+               $t = microtime( true );
                try {
                        $this->executeAction();
                } catch ( Exception $e ) {
@@ -401,6 +403,9 @@ class ApiMain extends ApiBase {
                        $this->printResult( true );
                }
 
+               // Log the request whether or not there was an error
+               $this->logRequest( microtime( true ) - $t);
+
                // Send cache headers after any code which might generate an error, to
                // avoid sending public cache headers for errors.
                $this->sendCacheHeaders();
@@ -816,6 +821,7 @@ class ApiMain extends ApiBase {
                $module->profileOut();
 
                if ( !$this->mInternalMode ) {
+
                        //append Debug information
                        MWDebug::appendDebugInfoToApiResult( $this->getContext(), $this->getResult() );
 
@@ -824,6 +830,73 @@ class ApiMain extends ApiBase {
                }
        }
 
+       /**
+        * Log the preceding request
+        * @param $time Time in seconds
+        */
+       protected function logRequest( $time ) {
+               $request = $this->getRequest();
+               $milliseconds = $time === null ? '?' : round( $time * 1000 );
+               $s = 'API' . 
+                       ' ' . $request->getMethod() .
+                       ' ' . wfUrlencode( str_replace( ' ', '_', $this->getUser()->getName() ) ) .
+                       ' ' . $request->getIP() .
+                       ' T=' . $milliseconds .'ms';
+               foreach ( $this->getParamsUsed() as $name ) {
+                       $value = $request->getVal( $name );
+                       if ( $value === null ) {
+                               continue;
+                       }
+                       $s .= ' ' . $name . '=';
+                       if ( strlen( $value ) > 256 ) {
+                               $encValue = $this->encodeRequestLogValue( substr( $value, 0, 256 ) );
+                               $s .= $encValue . '[...]';
+                       } else {
+                               $s .= $this->encodeRequestLogValue( $value );
+                       }
+               }
+               $s .= "\n";
+               wfDebugLog( 'api', $s, false );
+       }
+
+       /**
+        * Encode a value in a format suitable for a space-separated log line.
+        */
+       protected function encodeRequestLogValue( $s ) {
+               static $table;
+               if ( !$table ) {
+                       $chars = ';@$!*(),/:';
+                       for ( $i = 0; $i < strlen( $chars ); $i++ ) {
+                               $table[ rawurlencode( $chars[$i] ) ] = $chars[$i];
+                       }
+               }
+               return strtr( rawurlencode( $s ), $table );
+       }
+
+       /**
+        * Get the request parameters used in the course of the preceding execute() request
+        */
+       protected function getParamsUsed() {
+               return array_keys( $this->mParamsUsed );
+       }
+
+       /**
+        * Get a request value, and register the fact that it was used, for logging.
+        */
+       public function getVal( $name, $default = null ) {
+               $this->mParamsUsed[$name] = true;
+               return $this->getRequest()->getVal( $name, $default );
+       }
+
+       /**
+        * Get a boolean request value, and register the fact that the parameter
+        * was used, for logging.
+        */
+       public function getCheck( $name ) {
+               $this->mParamsUsed[$name] = true;
+               return $this->getRequest()->getCheck( $name );          
+       }
+
        /**
         * Print results using the current printer
         *
index c63ae8a..2fcdc38 100644 (file)
@@ -68,10 +68,6 @@ class ApiParse extends ApiBase {
                        $this->getContext()->setLanguage( Language::factory( $params['uselang'] ) );
                }
 
-               $popts = ParserOptions::newFromContext( $this->getContext() );
-               $popts->setTidy( true );
-               $popts->enableLimitReport( !$params['disablepp'] );
-
                $redirValues = null;
 
                // Return result
@@ -89,13 +85,15 @@ class ApiParse extends ApiBase {
                                }
 
                                $titleObj = $rev->getTitle();
-
                                $wgTitle = $titleObj;
+                               $pageObj = WikiPage::factory( $titleObj );
+                               $popts = $pageObj->makeParserOptions( $this->getContext() );
+                               $popts->enableLimitReport( !$params['disablepp'] );
 
                                // If for some reason the "oldid" is actually the current revision, it may be cached
-                               if ( $titleObj->getLatestRevID() === intval( $oldid ) )  {
+                               if ( $rev->isCurrent() )  {
                                        // May get from/save to parser cache
-                                       $p_result = $this->getParsedSectionOrText( $titleObj, $popts, $pageid,
+                                       $p_result = $this->getParsedSectionOrText( $pageObj, $popts, $pageid,
                                                 isset( $prop['wikitext'] ) ) ;
                                } else { // This is an old revision, so get the text differently
                                        $this->text = $rev->getText( Revision::FOR_THIS_USER, $this->getUser() );
@@ -129,32 +127,26 @@ class ApiParse extends ApiBase {
                                        foreach ( (array)$redirValues as $r ) {
                                                $to = $r['to'];
                                        }
-                                       $titleObj = Title::newFromText( $to );
-                               } else {
-                                       if ( !is_null ( $pageid ) ) {
-                                               $reqParams['pageids'] = $pageid;
-                                               $titleObj = Title::newFromID( $pageid );
-                                       } else { // $page
-                                               $to = $page;
-                                               $titleObj = Title::newFromText( $to );
-                                       }
-                               }
-                               if ( !is_null ( $pageid ) ) {
-                                       if ( !$titleObj ) {
-                                               // Still throw nosuchpageid error if pageid was provided
-                                               $this->dieUsageMsg( array( 'nosuchpageid', $pageid ) );
-                                       }
-                               } elseif ( !$titleObj || !$titleObj->exists() ) {
-                                       $this->dieUsage( "The page you specified doesn't exist", 'missingtitle' );
+                                       $pageParams = array( 'title' => $to );
+                               } elseif ( !is_null( $pageid ) ) {
+                                       $pageParams = array( 'pageid' => $pageid );
+                               } else { // $page
+                                       $pageParams = array( 'title' => $page );
                                }
+
+                               $pageObj = $this->getTitleOrPageId( $pageParams, 'fromdb' );
+                               $titleObj = $pageObj->getTitle();
                                $wgTitle = $titleObj;
 
                                if ( isset( $prop['revid'] ) ) {
-                                       $oldid = $titleObj->getLatestRevID();
+                                       $oldid = $pageObj->getLatest();
                                }
 
+                               $popts = $pageObj->makeParserOptions( $this->getContext() );
+                               $popts->enableLimitReport( !$params['disablepp'] );
+
                                // Potentially cached
-                               $p_result = $this->getParsedSectionOrText( $titleObj, $popts, $pageid,
+                               $p_result = $this->getParsedSectionOrText( $pageObj, $popts, $pageid,
                                         isset( $prop['wikitext'] ) ) ;
                        }
                } else { // Not $oldid, $pageid, $page. Hence based on $text
@@ -168,6 +160,10 @@ class ApiParse extends ApiBase {
                                $this->dieUsageMsg( array( 'invalidtitle', $title ) );
                        }
                        $wgTitle = $titleObj;
+                       $pageObj = WikiPage::factory( $titleObj );
+
+                       $popts = $pageObj->makeParserOptions( $this->getContext() );
+                       $popts->enableLimitReport( !$params['disablepp'] );
 
                        if ( $this->section !== false ) {
                                $this->text = $this->getSectionText( $this->text, $titleObj->getText() );
@@ -323,23 +319,21 @@ class ApiParse extends ApiBase {
        }
 
        /**
-        * @param $titleObj Title
+        * @param $page WikiPage
         * @param $popts ParserOptions
         * @param $pageId Int
         * @param $getWikitext Bool
         * @return ParserOutput
         */
-       private function getParsedSectionOrText( $titleObj, $popts, $pageId = null, $getWikitext = false ) {
+       private function getParsedSectionOrText( $page, $popts, $pageId = null, $getWikitext = false ) {
                global $wgParser;
 
-               $page = WikiPage::factory( $titleObj );
-
                if ( $this->section !== false ) {
                        $this->text = $this->getSectionText( $page->getRawText(), !is_null( $pageId )
-                                       ? 'page id ' . $pageId : $titleObj->getText() );
+                                       ? 'page id ' . $pageId : $page->getTitle()->getPrefixedText() );
 
                        // Not cached (save or load)
-                       return $wgParser->parse( $this->text, $titleObj, $popts );
+                       return $wgParser->parse( $this->text, $page->getTitle(), $popts );
                } else {
                        // Try the parser cache first
                        // getParserOutput will save to Parser cache if able
index 9c932a2..64399b2 100644 (file)
@@ -47,55 +47,55 @@ class ApiQuery extends ApiBase {
        private $params, $redirects, $convertTitles, $iwUrl;
 
        private $mQueryPropModules = array(
+               'categories' => 'ApiQueryCategories',
+               'categoryinfo' => 'ApiQueryCategoryInfo',
+               'duplicatefiles' => 'ApiQueryDuplicateFiles',
+               'extlinks' => 'ApiQueryExternalLinks',
+               'images' => 'ApiQueryImages',
+               'imageinfo' => 'ApiQueryImageInfo',
                'info' => 'ApiQueryInfo',
-               'revisions' => 'ApiQueryRevisions',
                'links' => 'ApiQueryLinks',
                'iwlinks' => 'ApiQueryIWLinks',
                'langlinks' => 'ApiQueryLangLinks',
-               'images' => 'ApiQueryImages',
-               'imageinfo' => 'ApiQueryImageInfo',
+               'pageprops' => 'ApiQueryPageProps',
+               'revisions' => 'ApiQueryRevisions',
                'stashimageinfo' => 'ApiQueryStashImageInfo',
                'templates' => 'ApiQueryLinks',
-               'categories' => 'ApiQueryCategories',
-               'extlinks' => 'ApiQueryExternalLinks',
-               'categoryinfo' => 'ApiQueryCategoryInfo',
-               'duplicatefiles' => 'ApiQueryDuplicateFiles',
-               'pageprops' => 'ApiQueryPageProps',
        );
 
        private $mQueryListModules = array(
+               'allcategories' => 'ApiQueryAllCategories',
                'allimages' => 'ApiQueryAllImages',
-               'allpages' => 'ApiQueryAllPages',
                'alllinks' => 'ApiQueryAllLinks',
-               'allcategories' => 'ApiQueryAllCategories',
+               'allpages' => 'ApiQueryAllPages',
                'allusers' => 'ApiQueryAllUsers',
                'backlinks' => 'ApiQueryBacklinks',
                'blocks' => 'ApiQueryBlocks',
                'categorymembers' => 'ApiQueryCategoryMembers',
                'deletedrevs' => 'ApiQueryDeletedrevs',
                'embeddedin' => 'ApiQueryBacklinks',
+               'exturlusage' => 'ApiQueryExtLinksUsage',
                'filearchive' => 'ApiQueryFilearchive',
                'imageusage' => 'ApiQueryBacklinks',
                'iwbacklinks' => 'ApiQueryIWBacklinks',
                'langbacklinks' => 'ApiQueryLangBacklinks',
                'logevents' => 'ApiQueryLogEvents',
+               'protectedtitles' => 'ApiQueryProtectedTitles',
+               'querypage' => 'ApiQueryQueryPage',
+               'random' => 'ApiQueryRandom',
                'recentchanges' => 'ApiQueryRecentChanges',
                'search' => 'ApiQuerySearch',
                'tags' => 'ApiQueryTags',
                'usercontribs' => 'ApiQueryContributions',
+               'users' => 'ApiQueryUsers',
                'watchlist' => 'ApiQueryWatchlist',
                'watchlistraw' => 'ApiQueryWatchlistRaw',
-               'exturlusage' => 'ApiQueryExtLinksUsage',
-               'users' => 'ApiQueryUsers',
-               'random' => 'ApiQueryRandom',
-               'protectedtitles' => 'ApiQueryProtectedTitles',
-               'querypage' => 'ApiQueryQueryPage',
        );
 
        private $mQueryMetaModules = array(
+               'allmessages' => 'ApiQueryAllMessages',
                'siteinfo' => 'ApiQuerySiteinfo',
                'userinfo' => 'ApiQueryUserInfo',
-               'allmessages' => 'ApiQueryAllMessages',
        );
 
        private $mSlaveDB = null;
@@ -513,8 +513,9 @@ class ApiQuery extends ApiBase {
                $exportTitles = array();
                $titles = $pageSet->getGoodTitles();
                if ( count( $titles ) ) {
+                       $user = $this->getUser();
                        foreach ( $titles as $title ) {
-                               if ( $title->userCan( 'read' ) ) {
+                               if ( $title->userCan( 'read', $user ) ) {
                                        $exportTitles[] = $title;
                                }
                        }
index d822eed..ee55fb5 100644 (file)
@@ -377,8 +377,10 @@ class ApiQueryImageInfo extends ApiQueryBase {
                }
 
                if ( $meta ) {
+                       wfSuppressWarnings();
                        $metadata = unserialize( $file->getMetadata() );
-                       if ( $version !== 'latest' ) {
+                       wfRestoreWarnings();
+                       if ( $metadata && $version !== 'latest' ) {
                                $metadata = $file->convertMetadataVersion( $metadata, $version );
                        }
                        $vals['metadata'] = $metadata ? self::processMetaData( $metadata, $result ) : null;
index 5d4f034..b617ed0 100644 (file)
@@ -406,7 +406,7 @@ class ApiQueryInfo extends ApiQueryBase {
                        $pageInfo['fullurl'] = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT );
                        $pageInfo['editurl'] = wfExpandUrl( $title->getFullURL( 'action=edit' ), PROTO_CURRENT );
                }
-               if ( $this->fld_readable && $title->userCan( 'read' ) ) {
+               if ( $this->fld_readable && $title->userCan( 'read', $this->getUser() ) ) {
                        $pageInfo['readable'] = '';
                }
 
index f2fd425..5d85c22 100644 (file)
@@ -263,6 +263,7 @@ class ApiQueryLogEvents extends ApiQueryBase {
                }
                if ( !is_null( $params ) ) {
                        $result->setIndexedTagName( $params, 'param' );
+                       $result->setIndexedTagName_recursive( $params, 'param' );
                        $vals = array_merge( $vals, $params );
                }
                return $vals;
index b89a8ea..41dfc33 100644 (file)
@@ -191,8 +191,9 @@ class ApiQueryRevisions extends ApiQueryBase {
 
                if ( isset( $prop['content'] ) || !is_null( $this->difftotext ) ) {
                        // For each page we will request, the user must have read rights for that page
+                       $user = $this->getUser();
                        foreach ( $pageSet->getGoodTitles() as $title ) {
-                               if ( !$title->userCan( 'read' ) ) {
+                               if ( !$title->userCan( 'read', $user ) ) {
                                        $this->dieUsage(
                                                'The current user is not allowed to read ' . $title->getPrefixedText(),
                                                'accessdenied' );
index a46f33d..b250fda 100644 (file)
@@ -246,6 +246,23 @@ abstract class DatabaseBase implements DatabaseType {
 
        protected $delimiter = ';';
 
+       /**
+        * Remembers the function name given for starting the most recent transaction via begin().
+        * Used to provide additional context for error reporting.
+        *
+        * @var String
+        * @see DatabaseBase::mTrxLevel
+        */
+       private $mTrxFname = null;
+
+       /**
+        * Record if possible write queries were done in the last transaction started
+        *
+        * @var Bool
+        * @see DatabaseBase::mTrxLevel
+        */
+       private $mTrxDoneWrites = false;
+
 # ------------------------------------------------------------------------------
 # Accessors
 # ------------------------------------------------------------------------------
@@ -836,9 +853,10 @@ abstract class DatabaseBase implements DatabaseType {
                $commentedSql = preg_replace( '/\s/', " /* $fname $userName */ ", $sql, 1 );
 
                # If DBO_TRX is set, start a transaction
-               if ( ( $this->mFlags & DBO_TRX ) && !$this->trxLevel() &&
-                       $sql != 'BEGIN' && $sql != 'COMMIT' && $sql != 'ROLLBACK' ) {
-                       # avoid establishing transactions for SHOW and SET statements too -
+               if ( ( $this->mFlags & DBO_TRX ) && !$this->mTrxLevel &&
+                       $sql != 'BEGIN' && $sql != 'COMMIT' && $sql != 'ROLLBACK' )
+               {
+                       # Avoid establishing transactions for SHOW and SET statements too -
                        # that would delay transaction initializations to once connection
                        # is really used by application
                        $sqlstart = substr( $sql, 0, 10 ); // very much worth it, benchmark certified(tm)
@@ -851,6 +869,11 @@ abstract class DatabaseBase implements DatabaseType {
                        }
                }
 
+               # Keep track of whether the transaction has write queries pending
+               if ( $this->mTrxLevel && !$this->mTrxDoneWrites && $this->isWriteQuery( $sql ) ) {
+                       $this->mTrxDoneWrites = true;
+               }
+
                if ( $this->debug() ) {
                        static $cnt = 0;
 
@@ -2874,11 +2897,20 @@ abstract class DatabaseBase implements DatabaseType {
         * @param $fname string
         */
        final public function begin( $fname = 'DatabaseBase::begin' ) {
-               if ( $this->mTrxLevel ) { // implicit commit
+               if ( $this->mTrxLevel && $this->mTrxDoneWrites ) { // implicit commit
+                       // In theory, we should always warn about nesting BEGIN statements.
+                       // However, it is sometimes hard to avoid so we simply warn about ones
+                       // that involve write queries. This gives warnings about bad transactions
+                       // that could cause partial writes but not about read queries seeing more
+                       // than one DB snapshot (when in REPEATABLE-READ) due to nested BEGINs.
+                       wfWarn( "$fname: Transaction already in progress (from {$this->mTrxFname}), " .
+                               " performing implicit commit!" );
                        $this->doCommit( $fname );
                        $this->runOnTransactionIdleCallbacks();
                }
                $this->doBegin( $fname );
+               $this->mTrxFname = $fname;
+               $this->mTrxDoneWrites = false;
        }
 
        /**
@@ -2896,6 +2928,9 @@ abstract class DatabaseBase implements DatabaseType {
         * @param $fname string
         */
        final public function commit( $fname = 'DatabaseBase::commit' ) {
+               if ( !$this->mTrxLevel ) {
+                       wfWarn( "$fname: No transaction to commit, something got out of sync!" );
+               }
                $this->doCommit( $fname );
                $this->runOnTransactionIdleCallbacks();
        }
@@ -2918,6 +2953,9 @@ abstract class DatabaseBase implements DatabaseType {
         * @param $fname string
         */
        final public function rollback( $fname = 'DatabaseBase::rollback' ) {
+               if ( !$this->mTrxLevel ) {
+                       wfWarn( "$fname: No transaction to rollback, something got out of sync!" );
+               }
                $this->doRollback( $fname );
                $this->trxIdleCallbacks = array(); // cancel
        }
index c40ac0c..d635645 100644 (file)
@@ -585,6 +585,7 @@ class LoadBalancer {
                        $server['serverIndex'] = $i;
                        $conn = $this->reallyOpenConnection( $server, false );
                        if ( $conn->isOpen() ) {
+                               wfDebug( "Connected to database $i at {$this->mServers[$i]['host']}\n" );
                                $this->mConns['local'][$i][0] = $conn;
                        } else {
                                wfDebug( "Failed to connect to database $i at {$this->mServers[$i]['host']}\n" );
@@ -706,7 +707,6 @@ class LoadBalancer {
                }
 
                # Create object
-               wfDebug( "Connecting to $host $dbname...\n" );
                try {
                        $db = DatabaseBase::factory( $server['type'], $server );
                } catch ( DBConnectionError $e ) {
@@ -715,11 +715,6 @@ class LoadBalancer {
                        $db = $e->db;
                }
 
-               if ( $db->isOpen() ) {
-                       wfDebug( "Connected to $host $dbname.\n" );
-               } else {
-                       wfDebug( "Connection failed to $host $dbname.\n" );
-               }
                $db->setLBInfo( $server );
                if ( isset( $server['fakeSlaveLag'] ) ) {
                        $db->setFakeSlaveLag( $server['fakeSlaveLag'] );
@@ -926,7 +921,7 @@ class LoadBalancer {
                                continue;
                        }
                        foreach ( $conns2[$masterIndex] as $conn ) {
-                               if ( $conn->doneWrites() ) {
+                               if ( $conn->trxLevel() && $conn->doneWrites() ) {
                                        $conn->commit( __METHOD__ );
                                }
                        }
index 3846473..c7156fb 100644 (file)
@@ -536,9 +536,7 @@ class DifferenceEngine extends ContextSource {
                                        $wikiPage = WikiPage::factory( $this->mNewPage );
                                }
 
-                               $parserOptions = ParserOptions::newFromContext( $this->getContext() );
-                               $parserOptions->enableLimitReport();
-                               $parserOptions->setTidy( true );
+                               $parserOptions = $wikiPage->makeParserOptions( $this->getContext() );
 
                                if ( !$this->mNewRev->isCurrent() ) {
                                        $parserOptions->setEditSection( false );
index e59a13b..306bf35 100644 (file)
@@ -50,7 +50,7 @@
  * backends with virtual directories may not have this limitation. Callers should
  * store files in such a way that no files and directories are under the same path.
  *
- * Methods should avoid throwing exceptions at all costs.
+ * Methods of subclasses should avoid throwing exceptions at all costs.
  * As a corollary, external dependencies should be kept to a minimum.
  *
  * @ingroup FileBackend
@@ -128,6 +128,16 @@ abstract class FileBackend {
                return $this->name;
        }
 
+       /**
+        * Get the wiki identifier used for this backend (possibly empty)
+        *
+        * @return string
+        * @since 1.20
+        */
+       final public function getWikiId() {
+               return $this->wikiId;
+       }
+
        /**
         * Check if this backend is read-only
         *
@@ -249,13 +259,13 @@ abstract class FileBackend {
         *   - allowStale          : Don't require the latest available data.
         *                           This can increase performance for non-critical writes.
         *                           This has no effect unless the 'force' flag is set.
-        *   - preserveCache       : Don't clear the process cache before checking files.
-        *                           This should only be used if all entries in the process
-        *                           cache were added after the files were already locked.
         *   - nonJournaled        : Don't log this operation batch in the file journal.
         *                           This limits the ability of recovery scripts.
         *   - parallelize         : Try to do operations in parallel when possible.
         *   - bypassReadOnly      : Allow writes in read-only mode (since 1.20).
+        *   - preserveCache       : Don't clear the process cache before checking files.
+        *                           This should only be used if all entries in the process
+        *                           cache were added after the files were already locked (since 1.20).
         *
         * @remarks Remarks on locking:
         * File system paths given to operations should refer to files that are
@@ -284,16 +294,6 @@ abstract class FileBackend {
                        unset( $opts['nonLocking'] );
                        unset( $opts['allowStale'] );
                }
-               $opts['concurrency'] = 1; // off
-               if ( $this->parallelize === 'implicit' ) {
-                       if ( !isset( $opts['parallelize'] ) || $opts['parallelize'] ) {
-                               $opts['concurrency'] = $this->concurrency;
-                       }
-               } elseif ( $this->parallelize === 'explicit' ) {
-                       if ( !empty( $opts['parallelize'] ) ) {
-                               $opts['concurrency'] = $this->concurrency;
-                       }
-               }
                return $this->doOperationsInternal( $ops, $opts );
        }
 
@@ -676,7 +676,7 @@ abstract class FileBackend {
        /**
         * Delete a storage directory if it is empty.
         * Backends using key/value stores may do nothing unless the directory
-        * is that of an empty container, in which case it should be deleted.
+        * is that of an empty container, in which case it will be deleted.
         *
         * @param $params Array
         * $params include:
@@ -784,15 +784,15 @@ abstract class FileBackend {
 
        /**
         * Stream the file at a storage path in the backend.
-        * If the file does not exists, a 404 error will be given.
+        * If the file does not exists, an HTTP 404 error will be given.
         * Appropriate HTTP headers (Status, Content-Type, Content-Length)
-        * must be sent if streaming began, while none should be sent otherwise.
+        * will be sent if streaming began, while none will be sent otherwise.
         * Implementations should flush the output buffer before sending data.
         *
         * @param $params Array
         * $params include:
         *   - src     : source storage path
-        *   - headers : additional HTTP headers to send on success
+        *   - headers : list of additional HTTP headers to send on success
         *   - latest  : use the latest available data
         * @return Status
         */
@@ -850,10 +850,10 @@ abstract class FileBackend {
        /**
         * Get an iterator to list *all* directories under a storage directory.
         * If the directory is of the form "mwstore://backend/container",
-        * then all directories in the container should be listed.
+        * then all directories in the container will be listed.
         * If the directory is of form "mwstore://backend/container/dir",
-        * then all directories directly under that directory should be listed.
-        * Results should be storage directories relative to the given directory.
+        * then all directories directly under that directory will be listed.
+        * Results will be storage directories relative to the given directory.
         *
         * Storage backends with eventual consistency might return stale data.
         *
@@ -885,10 +885,10 @@ abstract class FileBackend {
        /**
         * Get an iterator to list *all* stored files under a storage directory.
         * If the directory is of the form "mwstore://backend/container",
-        * then all files in the container should be listed.
+        * then all files in the container will be listed.
         * If the directory is of form "mwstore://backend/container/dir",
-        * then all files under that directory should be listed.
-        * Results should be storage paths relative to the given directory.
+        * then all files under that directory will be listed.
+        * Results will be storage paths relative to the given directory.
         *
         * Storage backends with eventual consistency might return stale data.
         *
@@ -1105,17 +1105,27 @@ abstract class FileBackend {
        }
 
        /**
-        * Build a Content-Disposition header value per RFC 6266
+        * Build a Content-Disposition header value per RFC 6266.
         *
         * @param $type string One of (attachment, inline)
         * @param $filename string Suggested file name (should not contain slashes)
         * @return string
         * @since 1.20
         */
-       final public static function makeContentDisposition( $type, $filename ) {
+       final public static function makeContentDisposition( $type, $filename = '' ) {
+               $parts = array();
+
                $type = strtolower( $type );
-               $type = in_array( $type, array( 'inline', 'attachment' ) ) ? $type : 'inline';
-               return "$type; filename*=UTF-8''" . rawurlencode( basename( $filename ) );
+               if ( !in_array( $type, array( 'inline', 'attachment' ) ) ) {
+                       throw new MWException( "Invalid Content-Disposition type '$type'." );
+               }
+               $parts[] = $type;
+
+               if ( strlen( $filename ) ) {
+                       $parts[] = "filename*=UTF-8''" . rawurlencode( basename( $filename ) );
+               }
+
+               return implode( ';', $parts );
        }
 
        /**
index 9efa0db..4be0323 100644 (file)
@@ -44,6 +44,8 @@ class FileBackendMultiWrite extends FileBackend {
        protected $backends = array(); // array of (backend index => backends)
        protected $masterIndex = -1; // integer; index of master backend
        protected $syncChecks = 0; // integer; bitfield
+       protected $autoResync = false; // boolean
+
        /** @var Array */
        protected $noPushDirConts = array();
        protected $noPushQuickOps = false; // boolean
@@ -70,6 +72,9 @@ class FileBackendMultiWrite extends FileBackend {
         *                      Possible bits include the FileBackendMultiWrite::CHECK_* constants.
         *                      There are constants for SIZE, TIME, and SHA1.
         *                      The checks are done before allowing any file operations.
+        *   - autoResync     : Automatically resync the clone backends to the master backend
+        *                      when pre-operation sync checks fail. This should only be used
+        *                      if the master backend is stable and not missing any files.
         *   - noPushQuickOps : (hack) Only apply doQuickOperations() to the master backend.
         *   - noPushDirConts : (hack) Only apply directory functions to the master backend.
         *
@@ -81,6 +86,7 @@ class FileBackendMultiWrite extends FileBackend {
                $this->syncChecks = isset( $config['syncChecks'] )
                        ? $config['syncChecks']
                        : self::CHECK_SIZE;
+               $this->autoResync = !empty( $config['autoResync'] );
                $this->noPushQuickOps = isset( $config['noPushQuickOps'] )
                        ? $config['noPushQuickOps']
                        : false;
@@ -152,16 +158,30 @@ class FileBackendMultiWrite extends FileBackend {
                // Clear any cache entries (after locks acquired)
                $this->clearCache();
                $opts['preserveCache'] = true; // only locked files are cached
-               // Do a consistency check to see if the backends agree
-               $status->merge( $this->consistencyCheck( $this->fileStoragePathsForOps( $ops ) ) );
+               // Get the list of paths to read/write...
+               $relevantPaths = $this->fileStoragePathsForOps( $ops );
+               // Check if the paths are valid and accessible on all backends...
+               $status->merge( $this->accessibilityCheck( $relevantPaths ) );
                if ( !$status->isOK() ) {
                        return $status; // abort
                }
+               // Do a consistency check to see if the backends are consistent...
+               $syncStatus = $this->consistencyCheck( $relevantPaths );
+               if ( !$syncStatus->isOK() ) {
+                       wfDebugLog( 'FileOperation', get_class( $this ) .
+                               " failed sync check: " . FormatJson::encode( $relevantPaths ) );
+                       // Try to resync the clone backends to the master on the spot...
+                       if ( !$this->autoResync || !$this->resyncFiles( $relevantPaths )->isOK() ) {
+                               $status->merge( $syncStatus );
+                               return $status; // abort
+                       }
+               }
                // Actually attempt the operation batch on the master backend...
                $masterStatus = $mbe->doOperations( $realOps, $opts );
                $status->merge( $masterStatus );
                // Propagate the operations to the clone backends if there were no fatal errors.
                // If $ops only had one operation, this might avoid backend inconsistencies.
+               // This also avoids inconsistency for expected errors (like "file already exists").
                if ( !count( $masterStatus->getErrorsArray() ) ) {
                        foreach ( $this->backends as $index => $backend ) {
                                if ( $index !== $this->masterIndex ) { // not done already
@@ -193,7 +213,7 @@ class FileBackendMultiWrite extends FileBackend {
                }
 
                $mBackend = $this->backends[$this->masterIndex];
-               foreach ( array_unique( $paths ) as $path ) {
+               foreach ( $paths as $path ) {
                        $params = array( 'src' => $path, 'latest' => true );
                        $mParams = $this->substOpPaths( $params, $mBackend );
                        // Stat the file on the 'master' backend
@@ -203,8 +223,7 @@ class FileBackendMultiWrite extends FileBackend {
                        } else {
                                $mSha1 = false;
                        }
-                       $mUsable = $mBackend->isPathUsableInternal( $mParams['src'] );
-                       // Check of all clone backends agree with the master...
+                       // Check if all clone backends agree with the master...
                        foreach ( $this->backends as $index => $cBackend ) {
                                if ( $index === $this->masterIndex ) {
                                        continue; // master
@@ -241,8 +260,29 @@ class FileBackendMultiWrite extends FileBackend {
                                                $status->fatal( 'backend-fail-synced', $path );
                                        }
                                }
-                               if ( $mUsable !== $cBackend->isPathUsableInternal( $cParams['src'] ) ) {
-                                       $status->fatal( 'backend-fail-synced', $path );
+                       }
+               }
+
+               return $status;
+       }
+
+       /**
+        * Check that a set of file paths are usable across all internal backends
+        *
+        * @param $paths Array List of storage paths
+        * @return Status
+        */
+       public function accessibilityCheck( array $paths ) {
+               $status = Status::newGood();
+               if ( count( $this->backends ) <= 1 ) {
+                       return $status; // skip checks
+               }
+
+               foreach ( $paths as $path ) {
+                       foreach ( $this->backends as $backend ) {
+                               $realPath = $this->substPaths( $path, $backend );
+                               if ( !$backend->isPathUsableInternal( $realPath ) ) {
+                                       $status->fatal( 'backend-fail-usable', $path );
                                }
                        }
                }
@@ -265,6 +305,10 @@ class FileBackendMultiWrite extends FileBackend {
                        $mPath  = $this->substPaths( $path, $mBackend );
                        $mSha1  = $mBackend->getFileSha1Base36( array( 'src' => $mPath ) );
                        $mExist = $mBackend->fileExists( array( 'src' => $mPath ) );
+                       // Check if the master backend is available...
+                       if ( $mExist === null ) {
+                               $status->fatal( 'backend-fail-internal', $this->name );
+                       }
                        // Check of all clone backends agree with the master...
                        foreach ( $this->backends as $index => $cBackend ) {
                                if ( $index === $this->masterIndex ) {
@@ -307,7 +351,7 @@ class FileBackendMultiWrite extends FileBackend {
                                $paths[] = $op['dst'];
                        }
                }
-               return array_unique( $paths );
+               return array_unique( array_filter( $paths, 'FileBackend::isStoragePath' ) );
        }
 
        /**
index 5771560..5823326 100644 (file)
@@ -292,8 +292,14 @@ abstract class FileBackendStore extends FileBackend {
                // Try to lock the source files for the scope of this function
                $scopeLockS = $this->getScopedFileLocks( $params['srcs'], LockManager::LOCK_UW, $status );
                if ( $status->isOK() ) {
-                       // Actually do the concatenation
+                       // Actually do the file concatenation...
+                       $start_time = microtime( true );
                        $status->merge( $this->doConcatenate( $params ) );
+                       $sec = microtime( true ) - $start_time;
+                       if ( !$status->isOK() ) {
+                               wfDebugLog( 'FileOperation', get_class( $this ) . " failed to concatenate " .
+                                       count( $params['srcs'] ) . " file(s) [$sec sec]" );
+                       }
                }
 
                wfProfileOut( __METHOD__ . '-' . $this->name );
@@ -1010,6 +1016,7 @@ abstract class FileBackendStore extends FileBackend {
                $this->primeContainerCache( $performOps );
 
                // Actually attempt the operation batch...
+               $opts = $this->setConcurrencyFlags( $opts );
                $subStatus = FileOpBatch::attempt( $performOps, $opts, $this->fileJournal );
 
                // Merge errors into status fields
@@ -1540,6 +1547,26 @@ abstract class FileBackendStore extends FileBackend {
                wfProfileOut( __METHOD__ . '-' . $this->name );
                wfProfileOut( __METHOD__ );
        }
+
+       /**
+        * Set the 'concurrency' option from a list of operation options
+        *
+        * @param $opts array Map of operation options
+        * @return Array
+        */
+       final protected function setConcurrencyFlags( array $opts ) {
+               $opts['concurrency'] = 1; // off
+               if ( $this->parallelize === 'implicit' ) {
+                       if ( !isset( $opts['parallelize'] ) || $opts['parallelize'] ) {
+                               $opts['concurrency'] = $this->concurrency;
+                       }
+               } elseif ( $this->parallelize === 'explicit' ) {
+                       if ( !empty( $opts['parallelize'] ) ) {
+                               $opts['concurrency'] = $this->concurrency;
+                       }
+               }
+               return $opts;
+       }
 }
 
 /**
index 7f91ae3..185a557 100644 (file)
@@ -81,7 +81,8 @@ class SwiftFileBackend extends FileBackendStore {
         *                             - levels : the number of hash levels (and digits)
         *                             - repeat : hash subdirectories are prefixed with all the
         *                                        parent hash directory names (e.g. "a/ab/abc")
-        *   - cacheAuthInfo      : Whether to cache authentication tokens in APC/XCache.
+        *   - cacheAuthInfo      : Whether to cache authentication tokens in APC, XCache, ect.
+        *                          If those are not available, then the main cache will be used.
         *                          This is probably insecure in shared hosting environments.
         */
        public function __construct( array $config ) {
@@ -121,9 +122,13 @@ class SwiftFileBackend extends FileBackendStore {
                $this->connContainerCache = new ProcessCacheLRU( 300 );
                // Cache auth token information to avoid RTTs
                if ( !empty( $config['cacheAuthInfo'] ) ) {
-                       try { // look for APC, XCache, WinCache, ect...
-                               $this->srvCache = ObjectCache::newAccelerator( array() );
-                       } catch ( Exception $e ) {}
+                       if ( php_sapi_name() === 'cli' ) {
+                               $this->srvCache = wfGetMainCache(); // preferrably memcached
+                       } else {
+                               try { // look for APC, XCache, WinCache, ect...
+                                       $this->srvCache = ObjectCache::newAccelerator( array() );
+                               } catch ( Exception $e ) {}
+                       }
                }
                $this->srvCache = $this->srvCache ? $this->srvCache : new EmptyBagOStuff();
        }
@@ -162,6 +167,24 @@ class SwiftFileBackend extends FileBackendStore {
                return false;
        }
 
+       /**
+        * @param $disposition string Content-Disposition header value
+        * @return string Truncated Content-Disposition header value to meet Swift limits
+        */
+       protected function truncDisp( $disposition ) {
+               $res = '';
+               foreach ( explode( ';', $disposition ) as $part ) {
+                       $part = trim( $part );
+                       $new  = ( $res === '' ) ? $part : "{$res};{$part}";
+                       if ( strlen( $new ) <= 255 ) {
+                               $res = $new;
+                       } else {
+                               break; // too long; sigh
+                       }
+               }
+               return $res;
+       }
+
        /**
         * @see FileBackendStore::doCreateInternal()
         * @return Status
@@ -212,7 +235,7 @@ class SwiftFileBackend extends FileBackendStore {
                        }
                        // Set the Content-Disposition header if requested
                        if ( isset( $params['disposition'] ) ) {
-                               $obj->headers['Content-Disposition'] = $params['disposition'];
+                               $obj->headers['Content-Disposition'] = $this->truncDisp( $params['disposition'] );
                        }
                        if ( !empty( $params['async'] ) ) { // deferred
                                $op = $obj->write_async( $params['content'] );
@@ -302,7 +325,7 @@ class SwiftFileBackend extends FileBackendStore {
                        }
                        // Set the Content-Disposition header if requested
                        if ( isset( $params['disposition'] ) ) {
-                               $obj->headers['Content-Disposition'] = $params['disposition'];
+                               $obj->headers['Content-Disposition'] = $this->truncDisp( $params['disposition'] );
                        }
                        if ( !empty( $params['async'] ) ) { // deferred
                                wfSuppressWarnings();
@@ -392,7 +415,7 @@ class SwiftFileBackend extends FileBackendStore {
                        $dstObj = new CF_Object( $dContObj, $dstRel, false, false ); // skip HEAD
                        $hdrs = array(); // source file headers to override with new values
                        if ( isset( $params['disposition'] ) ) {
-                               $hdrs['Content-Disposition'] = $params['disposition'];
+                               $hdrs['Content-Disposition'] = $this->truncDisp( $params['disposition'] );
                        }
                        if ( !empty( $params['async'] ) ) { // deferred
                                $op = $sContObj->copy_object_to_async( $srcRel, $dContObj, $dstRel, null, $hdrs );
@@ -471,7 +494,7 @@ class SwiftFileBackend extends FileBackendStore {
                        $dstObj = new CF_Object( $dContObj, $dstRel, false, false ); // skip HEAD
                        $hdrs = array(); // source file headers to override with new values
                        if ( isset( $params['disposition'] ) ) {
-                               $hdrs['Content-Disposition'] = $params['disposition'];
+                               $hdrs['Content-Disposition'] = $this->truncDisp( $params['disposition'] );
                        }
                        if ( !empty( $params['async'] ) ) { // deferred
                                $op = $sContObj->move_object_to_async( $srcRel, $dContObj, $dstRel, null, $hdrs );
@@ -766,8 +789,7 @@ class SwiftFileBackend extends FileBackendStore {
                $status = Status::newGood();
                $scopeLockS = $this->getScopedFileLocks( array( $path ), LockManager::LOCK_UW, $status );
                if ( $status->isOK() ) {
-                       # Do not stat the file in getLocalCopy() to avoid infinite loops
-                       $tmpFile = $this->getLocalCopy( array( 'src' => $path, 'latest' => 1, 'nostat' => 1 ) );
+                       $tmpFile = $this->getLocalCopy( array( 'src' => $path, 'latest' => 1 ) );
                        if ( $tmpFile ) {
                                $hash = $tmpFile->getSha1Base36();
                                if ( $hash !== false ) {
@@ -785,7 +807,7 @@ class SwiftFileBackend extends FileBackendStore {
 
        /**
         * @see FileBackend::getFileContents()
-        * @return bool|null|string
+        * @return bool|string
         */
        public function getFileContents( array $params ) {
                list( $srcCont, $srcRel ) = $this->resolveStoragePathReal( $params['src'] );
@@ -793,16 +815,13 @@ class SwiftFileBackend extends FileBackendStore {
                        return false; // invalid storage path
                }
 
-               if ( !$this->fileExists( $params ) ) {
-                       return null;
-               }
-
                $data = false;
                try {
                        $sContObj = $this->getContainer( $srcCont );
                        $obj = new CF_Object( $sContObj, $srcRel, false, false ); // skip HEAD
                        $data = $obj->read( $this->headersFromParams( $params ) );
                } catch ( NoSuchContainerException $e ) {
+               } catch ( NoSuchObjectException $e ) {
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, null, __METHOD__, $params );
                }
@@ -1005,6 +1024,8 @@ class SwiftFileBackend extends FileBackendStore {
                        $output = fopen( 'php://output', 'wb' );
                        $obj = new CF_Object( $cont, $srcRel, false, false ); // skip HEAD
                        $obj->stream( $output, $this->headersFromParams( $params ) );
+               } catch ( NoSuchObjectException $e ) {
+                       $status->fatal( 'backend-fail-stream', $params['src'] );
                } catch ( CloudFilesException $e ) { // some other exception?
                        $this->handleException( $e, $status, __METHOD__, $params );
                }
@@ -1023,7 +1044,7 @@ class SwiftFileBackend extends FileBackendStore {
                }
 
                // Blindly create a tmp file and stream to it, catching any exception if the file does
-               // not exist. Also, doing a stat here will cause infinite loops when filling metadata.
+               // not exist. Also, doing a stat here will cause infinite loops in addMissingMetadata().
                $tmpFile = null;
                try {
                        $sContObj = $this->getContainer( $srcCont );
index b738898..5032bf6 100644 (file)
@@ -54,7 +54,7 @@ class TempFSFile extends FSFile {
                                fclose( $newFileHandle );
                                break; // got it
                        }
-                       if ( $attempt >= 15 ) {
+                       if ( $attempt >= 5 ) {
                                wfProfileOut( __METHOD__ );
                                return null; // give up
                        }
index 204ca3b..a8fe258 100644 (file)
@@ -54,22 +54,22 @@ class DBLockManager extends QuorumLockManager {
         * Construct a new instance from configuration.
         *
         * $config paramaters include:
-        *     'dbServers'   : Associative array of DB names to server configuration.
-        *                     Configuration is an associative array that includes:
-        *                     'host'        - DB server name
-        *                     'dbname'      - DB name
-        *                     'type'        - DB type (mysql,postgres,...)
-        *                     'user'        - DB user
-        *                     'password'    - DB user password
-        *                     'tablePrefix' - DB table prefix
-        *                     'flags'       - DB flags (see DatabaseBase)
-        *     'dbsByBucket' : Array of 1-16 consecutive integer keys, starting from 0,
-        *                     each having an odd-numbered list of DB names (peers) as values.
-        *                     Any DB named 'localDBMaster' will automatically use the DB master
-        *                     settings for this wiki (without the need for a dbServers entry).
-        *     'lockExpiry'  : Lock timeout (seconds) for dropped connections. [optional]
-        *                     This tells the DB server how long to wait before assuming
-        *                     connection failure and releasing all the locks for a session.
+        *   - dbServers   : Associative array of DB names to server configuration.
+        *                   Configuration is an associative array that includes:
+        *                     - host        : DB server name
+        *                     - dbname      : DB name
+        *                     - type        : DB type (mysql,postgres,...)
+        *                     - user        : DB user
+        *                     - password    : DB user password
+        *                     - tablePrefix : DB table prefix
+        *                     - flags       : DB flags (see DatabaseBase)
+        *   - dbsByBucket : Array of 1-16 consecutive integer keys, starting from 0,
+        *                   each having an odd-numbered list of DB names (peers) as values.
+        *                   Any DB named 'localDBMaster' will automatically use the DB master
+        *                   settings for this wiki (without the need for a dbServers entry).
+        *   - lockExpiry  : Lock timeout (seconds) for dropped connections. [optional]
+        *                   This tells the DB server how long to wait before assuming
+        *                   connection failure and releasing all the locks for a session.
         *
         * @param Array $config
         */
index 53f3e9f..9a6206f 100644 (file)
@@ -50,7 +50,7 @@ class FSLockManager extends LockManager {
         * Construct a new instance from configuration.
         *
         * $config includes:
-        *     'lockDirectory' : Directory containing the lock files
+        *   - lockDirectory : Directory containing the lock files
         *
         * @param array $config
         */
index 9e81dbf..57c0463 100644 (file)
@@ -56,12 +56,12 @@ class MemcLockManager extends QuorumLockManager {
         * Construct a new instance from configuration.
         *
         * $config paramaters include:
-        *   - 'lockServers'  : Associative array of server names to "<IP>:<port>" strings.
-        *   - 'srvsByBucket' : Array of 1-16 consecutive integer keys, starting from 0,
-        *                      each having an odd-numbered list of server names (peers) as values.
-        *   - 'memcConfig'   : Configuration array for ObjectCache::newFromParams. [optional]
-        *                      If set, this must use one of the memcached classes.
-        *   - 'wikiId'       : Wiki ID string that all resources are relative to. [optional]
+        *   - lockServers  : Associative array of server names to "<IP>:<port>" strings.
+        *   - srvsByBucket : Array of 1-16 consecutive integer keys, starting from 0,
+        *                    each having an odd-numbered list of server names (peers) as values.
+        *   - memcConfig   : Configuration array for ObjectCache::newFromParams. [optional]
+        *                    If set, this must use one of the memcached classes.
+        *   - wikiId       : Wiki ID string that all resources are relative to. [optional]
         *
         * @param Array $config
         */
index 30d6825..5f24fed 100644 (file)
@@ -696,7 +696,7 @@ class FileRepo {
        /**
         * Store a file to a given destination.
         *
-        * @param $srcPath String: source FS path, storage path, or virtual URL
+        * @param $srcPath String: source file system path, storage path, or virtual URL
         * @param $dstZone String: destination zone
         * @param $dstRel String: destination relative path
         * @param $flags Integer: bitwise combination of the following flags:
@@ -841,7 +841,7 @@ class FileRepo {
         * This function can be used to write to otherwise read-only foreign repos.
         * This is intended for copying generated thumbnails into the repo.
         *
-        * @param $src string File system path
+        * @param $src string Source file system path, storage path, or virtual URL
         * @param $dst string Virtual URL or storage path
         * @param $disposition string|null Content-Disposition if given and supported
         * @return FileRepoStatus
@@ -883,22 +883,24 @@ class FileRepo {
         * This function can be used to write to otherwise read-only foreign repos.
         * This is intended for copying generated thumbnails into the repo.
         *
+        * All path parameters may be a file system path, storage path, or virtual URL.
         * When "dispositions" are given they are used as Content-Disposition if supported.
         *
-        * @param $pairs Array List of tuples (file system path, virtual URL/storage path, disposition)
+        * @param $triples Array List of (source path, destination path, disposition)
         * @return FileRepoStatus
         */
-       public function quickImportBatch( array $pairs ) {
+       public function quickImportBatch( array $triples ) {
                $status = $this->newGood();
                $operations = array();
-               foreach ( $pairs as $pair ) {
-                       list ( $src, $dst ) = $pair;
+               foreach ( $triples as $triple ) {
+                       list( $src, $dst ) = $triple;
+                       $src = $this->resolveToStoragePath( $src );
                        $dst = $this->resolveToStoragePath( $dst );
                        $operations[] = array(
-                               'op'          => 'store',
+                               'op'          => FileBackend::isStoragePath( $src ) ? 'copy' : 'store',
                                'src'         => $src,
                                'dst'         => $dst,
-                               'disposition' => isset( $pair[2] ) ? $pair[2] : null
+                               'disposition' => isset( $triple[2] ) ? $triple[2] : null
                        );
                        $status->merge( $this->initDirectory( dirname( $dst ) ) );
                }
@@ -1014,12 +1016,12 @@ class FileRepo {
 
        /**
         * Copy or move a file either from a storage path, virtual URL,
-        * or FS path, into this repository at the specified destination location.
+        * or file system path, into this repository at the specified destination location.
         *
         * Returns a FileRepoStatus object. On success, the value contains "new" or
         * "archived", to indicate whether the file was new with that name.
         *
-        * @param $srcPath String: the source FS path, storage path, or URL
+        * @param $srcPath String: the source file system path, storage path, or URL
         * @param $dstRel String: the destination relative path
         * @param $archiveRel String: the relative path where the existing file is to
         *        be archived, if there is one. Relative to the public zone root.
@@ -1319,6 +1321,9 @@ class FileRepo {
         * @return string
         */
        public function getDeletedHashPath( $key ) {
+               if ( strlen( $key ) < 31 ) {
+                       throw new MWException( "Invalid storage key '$key'." );
+               }
                $path = '';
                for ( $i = 0; $i < $this->deletedHashLevels; $i++ ) {
                        $path .= $key[$i] . '/';
index 3b0ea14..557609d 100644 (file)
@@ -68,6 +68,9 @@ abstract class File {
        const FOR_THIS_USER = 2;
        const RAW = 3;
 
+       // Options for File::thumbName()
+       const THUMB_FULL_NAME = 1;
+
        /**
         * Some member variables can be lazy-initialised using __get(). The
         * initialisation function for these variables is always a function named
@@ -759,15 +762,18 @@ abstract class File {
        }
 
        /**
-        * Return the file name of a thumbnail with the specified parameters
+        * Return the file name of a thumbnail with the specified parameters.
+        * Use File::THUMB_FULL_NAME to always get a name like "<params>-<source>".
+        * Otherwise, the format may be "<params>-<source>" or "<params>-thumbnail.<ext>".
         *
         * @param $params Array: handler-specific parameters
-        * @private -ish
-        *
+        * @param $flags integer Bitfield that supports THUMB_* constants
         * @return string
         */
-       function thumbName( $params ) {
-               $name = $this->repo ? $this->repo->nameForThumb( $this->getName() ) : $this->getName();
+       public function thumbName( $params, $flags = 0 ) {
+               $name = ( $this->repo && !( $flags & self::THUMB_FULL_NAME ) )
+                       ? $this->repo->nameForThumb( $this->getName() )
+                       : $this->getName();
                return $this->generateThumbName( $name, $params );
        }
 
@@ -779,7 +785,7 @@ abstract class File {
         *
         * @return string
         */
-       function generateThumbName( $name, $params ) {
+       public function generateThumbName( $name, $params ) {
                if ( !$this->getHandler() ) {
                        return null;
                }
index 75b9d45..695c4e9 100644 (file)
@@ -1154,7 +1154,9 @@ class LocalFile extends File {
                $logId = $log->addEntry( $action, $descTitle, $comment, array(), $user );
 
                wfProfileIn( __METHOD__ . '-edit' );
-               if ( $descTitle->exists() ) {
+               $exists = $descTitle->exists();
+
+               if ( $exists ) {
                        # Create a null revision
                        $latest = $descTitle->getLatestRevID();
                        $nullRevision = Revision::newNullRevision(
@@ -1169,8 +1171,15 @@ class LocalFile extends File {
                                wfRunHooks( 'NewRevisionFromEditComplete', array( $wikiPage, $nullRevision, $latest, $user ) );
                                $wikiPage->updateRevisionOn( $dbw, $nullRevision );
                        }
-                       $dbw->update( 'logging', array( 'log_page' => $descTitle->getArticleID() ), array( 'log_id' => $logId ), __METHOD__ );
+               }
+
+               # Commit the transaction now, in case something goes wrong later
+               # The most important thing is that files don't get lost, especially archives
+               # NOTE: once we have support for nested transactions, the commit may be moved
+               #       to after $wikiPage->doEdit has been called.
+               $dbw->commit( __METHOD__ );
 
+               if ( $exists ) {
                        # Invalidate the cache for the description page
                        $descTitle->invalidateCache();
                        $descTitle->purgeSquid();
@@ -1180,16 +1189,18 @@ class LocalFile extends File {
                        # Squid and file cache for the description page are purged by doEdit.
                        $status = $wikiPage->doEdit( $pageText, $comment, EDIT_NEW | EDIT_SUPPRESS_RC, false, $user );
 
-                       if ( isset( $status->value['revision'] ) ) {
-                               $dbw->update( 'logging', array( 'log_page' => $status->value['revision']->getPage() ), array( 'log_id' => $logId ), __METHOD__ );
+                       if ( isset( $status->value['revision'] ) ) { // XXX; doEdit() uses a transaction
+                               $dbw->begin();
+                               $dbw->update( 'logging',
+                                       array( 'log_page' => $status->value['revision']->getPage() ),
+                                       array( 'log_id' => $logId ),
+                                       __METHOD__
+                               );
+                               $dbw->commit(); // commit before anything bad can happen
                        }
                }
                wfProfileOut( __METHOD__ . '-edit' );
 
-               # Commit the transaction now, in case something goes wrong later
-               # The most important thing is that files don't get lost, especially archives
-               $dbw->commit( __METHOD__ );
-
                # Save to cache and purge the squid
                # We shall not saveToCache before the commit since otherwise
                # in case of a rollback there is an usable file from memcached
index d93dba6..bd55cb4 100644 (file)
@@ -213,6 +213,7 @@ class MysqlUpdater extends DatabaseUpdater {
                        array( 'addIndex', 'revision', 'page_user_timestamp', 'patch-revision-user-page-index.sql' ),
                        array( 'addField', 'ipblocks',      'ipb_parent_block_id',           'patch-ipb-parent-block-id.sql' ),
                        array( 'addIndex', 'ipblocks',      'ipb_parent_block_id',           'patch-ipb-parent-block-id-index.sql' ),
+                       array( 'dropField', 'category',     'cat_hidden',       'patch-cat_hidden.sql' ),
                );
        }
 
index 9ba9eab..bc5fcac 100644 (file)
@@ -92,6 +92,7 @@ class SqliteUpdater extends DatabaseUpdater {
                        array( 'addIndex', 'revision', 'page_user_timestamp', 'patch-revision-user-page-index.sql' ),
                        array( 'addField', 'ipblocks', 'ipb_parent_block_id', 'patch-ipb-parent-block-id.sql' ),
                        array( 'addIndex', 'ipblocks', 'ipb_parent_block_id', 'patch-ipb-parent-block-id-index.sql' ),
+                       array( 'dropField', 'category',     'cat_hidden',       'patch-cat_hidden.sql' ),
                );
        }
 
index 0d5ea57..2f46ff0 100644 (file)
@@ -376,7 +376,7 @@ class WebInstaller extends Installer {
                $args = func_get_args();
                array_shift( $args );
                $args = array_map( 'htmlspecialchars', $args );
-               $msg = wfMsgReal( $msg, $args, false, false, false );
+               $msg = wfMessage( $msg, $args )->useDatabase( false )->plain();
                $this->output->addHTML( $this->getErrorBox( $msg ) );
        }
 
@@ -655,7 +655,7 @@ class WebInstaller extends Installer {
                $args = func_get_args();
                array_shift( $args );
                $args = array_map( 'htmlspecialchars', $args );
-               $text = wfMsgReal( $msg, $args, false, false, false );
+               $text = wfMessage( $msg, $args )->useDatabase( false )->plain();
                $html = $this->parse( $text, true );
 
                return "<div class=\"mw-help-field-container\">\n" .
@@ -685,7 +685,7 @@ class WebInstaller extends Installer {
                $args = func_get_args();
                array_shift( $args );
                $html = '<div class="config-message">' .
-                       $this->parse( wfMsgReal( $msg, $args, false, false, false ) ) .
+               $this->parse( wfMessage( $msg, $args )->useDatabase( false )->plain() ) .
                        "</div>\n";
                $this->output->addHTML( $html );
        }
index e440c6b..f3166c2 100644 (file)
@@ -118,6 +118,7 @@ class WebInstallerOutput {
                $cssFileNames = array(
 
                        // Basically the "skins.vector" ResourceLoader module styles
+                       'common/shared.css',
                        'common/commonElements.css',
                        'common/commonContent.css',
                        'common/commonInterface.css',
index 6016641..c478b43 100644 (file)
@@ -166,7 +166,7 @@ class LogEventsList extends ContextSource {
                        $query[$queryKey] = $hideVal;
 
                        $link = Linker::linkKnown(
-                               $this->getDisplayTitle(),
+                               $this->getTitle(),
                                $messages[$hideVal],
                                array(),
                                $query
@@ -351,9 +351,9 @@ class LogEventsList extends ContextSource {
                $user = $this->getUser();
                // Don't show useless checkbox to people who cannot hide log entries
                if( $user->isAllowed( 'deletedhistory' ) ) {
-                       if( $row->log_deleted || $user->isAllowed( 'deletelogentry' ) ) {
-                               $canHide = $user->isAllowed( 'deletelogentry' );
-                               if ( $this->flags & self::USE_REVDEL_CHECKBOXES ) { // Show checkboxes instead of links.
+                       $canHide = $user->isAllowed( 'deletelogentry' );
+                       if( $row->log_deleted || $canHide ) {
+                               if ( $canHide && $this->flags & self::USE_REVDEL_CHECKBOXES ) { // Show checkboxes instead of links.
                                        if ( !self::userCan( $row, LogPage::DELETED_RESTRICTED, $user ) ) { // If event was hidden from sysops
                                                $del = Xml::check( 'deleterevisions', false, array( 'disabled' => 'disabled' ) );
                                        } else {
index 6914402..843c1fa 100644 (file)
@@ -104,10 +104,16 @@ class FormatMetadata {
                                        . ':' . str_pad( intval( $m[0] / $m[1] ), 2, '0', STR_PAD_LEFT )
                                        . ':' . str_pad( intval( $s[0] / $s[1] ), 2, '0', STR_PAD_LEFT );
 
-                               $time = wfTimestamp( TS_MW, '1971:01:01 ' . $tags[$tag] );
-                               // the 1971:01:01 is just a placeholder, and not shown to user.
-                               if ( $time && intval( $time ) > 0 ) {
-                                       $tags[$tag] = $wgLang->time( $time );
+                               try {
+                                       $time = wfTimestamp( TS_MW, '1971:01:01 ' . $tags[$tag] );
+                                       // the 1971:01:01 is just a placeholder, and not shown to user.
+                                       if ( $time && intval( $time ) > 0 ) {
+                                               $tags[$tag] = $wgLang->time( $time );
+                                       }
+                               } catch ( TimestampException $e ) {
+                                       // This shouldn't happen, but we've seen bad formats
+                                       // such as 4-digit seconds in the wild.
+                                       // leave $tags[$tag] as-is
                                }
                                continue;
                        }
index d96cb09..23471e9 100644 (file)
@@ -57,10 +57,6 @@ function donorm( $str ) {
        return rtrim( utf8_normalize( $str . "\x01", UtfNormal::UNORM_NFC ), "\x01" );
 }
 
-function wfMsg($x) {
-       return $x;
-}
-
 function showDiffs( $a, $b ) {
        $ota = explode( "\n", str_replace( "\r\n", "\n", $a ) );
        $nta = explode( "\n", str_replace( "\r\n", "\n", $b ) );
index 57029a8..7bbaff9 100644 (file)
@@ -167,19 +167,18 @@ abstract class BagOStuff {
         * Increase stored value of $key by $value while preserving its TTL
         * @param $key String: Key to increase
         * @param $value Integer: Value to add to $key (Default 1)
-        * @return null if lock is not possible else $key value increased by $value
-        * @return integer
+        * @return integer|bool New value or false on failure
         */
        public function incr( $key, $value = 1 ) {
                if ( !$this->lock( $key ) ) {
-                       return null;
+                       return false;
                }
-
-               $value = intval( $value );
-
-               if ( ( $n = $this->get( $key ) ) !== false ) {
-                       $n += $value;
-                       $this->set( $key, $n ); // exptime?
+               $n = $this->get( $key );
+               if ( $this->isInteger( $n ) ) { // key exists?
+                       $n += intval( $value );
+                       $this->set( $key, max( 0, $n ) ); // exptime?
+               } else {
+                       $n = false;
                }
                $this->unlock( $key );
 
@@ -220,7 +219,7 @@ abstract class BagOStuff {
        }
 
        /**
-        * Convert an optionally absolute expiry time to a relative time. If an 
+        * Convert an optionally absolute expiry time to a relative time. If an
         * absolute time is specified which is in the past, use a short expiry time.
         *
         * @param $exptime integer
index 264aed7..36ced49 100644 (file)
@@ -70,7 +70,7 @@ class DBABagOStuff extends BagOStuff {
         */
        protected function decode( $blob ) {
                if ( !is_string( $blob ) ) {
-                       return array( null, 0 );
+                       return array( false, 0 );
                } else {
                        return array(
                                unserialize( substr( $blob, 11 ) ),
@@ -111,7 +111,7 @@ class DBABagOStuff extends BagOStuff {
 
        /**
         * @param $key string
-        * @return mixed|null|string
+        * @return mixed
         */
        public function get( $key ) {
                wfProfileIn( __METHOD__ );
@@ -120,7 +120,7 @@ class DBABagOStuff extends BagOStuff {
                $handle = $this->getReader();
                if ( !$handle ) {
                        wfProfileOut( __METHOD__ );
-                       return null;
+                       return false;
                }
 
                $val = dba_fetch( $key, $handle );
@@ -129,13 +129,13 @@ class DBABagOStuff extends BagOStuff {
                # Must close ASAP because locks are held
                dba_close( $handle );
 
-               if ( !is_null( $val ) && $expiry && $expiry < time() ) {
+               if ( $val !== false && $expiry && $expiry < time() ) {
                        # Key is expired, delete it
                        $handle = $this->getWriter();
                        dba_delete( $key, $handle );
                        dba_close( $handle );
                        wfDebug( __METHOD__ . ": $key expired\n" );
-                       $val = null;
+                       $val = false;
                }
 
                wfProfileOut( __METHOD__ );
@@ -182,7 +182,7 @@ class DBABagOStuff extends BagOStuff {
                        return false;
                }
 
-               $ret = dba_delete( $key, $handle );
+               $ret = !dba_exists( $key, $handle ) || dba_delete( $key, $handle );
                dba_close( $handle );
 
                wfProfileOut( __METHOD__ );
@@ -243,18 +243,18 @@ class DBABagOStuff extends BagOStuff {
                }
 
                list( $value, $expiry ) = $this->decode( dba_fetch( $key, $handle ) );
-               if ( !is_null( $value ) ) {
+               if ( $value !== false ) {
                        if ( $expiry && $expiry < time() ) {
                                # Key is expired, delete it
                                dba_delete( $key, $handle );
                                wfDebug( __METHOD__ . ": $key expired\n" );
-                               $value = null;
+                               $value = false;
                        } else {
                                $value += $step;
                                $blob = $this->encode( $value, $expiry );
 
                                $ret = dba_replace( $key, $blob, $handle );
-                               $value = $ret ? $value : null;
+                               $value = $ret ? $value : false;
                        }
                }
 
@@ -262,7 +262,7 @@ class DBABagOStuff extends BagOStuff {
 
                wfProfileOut( __METHOD__ );
 
-               return is_null( $value ) ? false : (int)$value;
+               return ( $value === false ) ? false : (int)$value;
        }
 
        function keys() {
index c5966cd..d5de044 100644 (file)
@@ -289,6 +289,12 @@ class RedisBagOStuff extends BagOStuff {
                        $candidates = $this->servers;
                } else {
                        // Use consistent hashing
+                       //
+                       // Note: Benchmarking on PHP 5.3 and 5.4 indicates that for small
+                       // strings, md5() is only 10% slower than hash('joaat',...) etc.,
+                       // since the function call overhead dominates. So there's not much
+                       // justification for breaking compatibility with installations
+                       // compiled with ./configure --disable-hash.
                        $hashes = array();
                        foreach ( $this->servers as $server ) {
                                $hashes[$server] = md5( $server . '/' . $key );
index a3d2d89..54051dc 100644 (file)
@@ -163,7 +163,7 @@ class SqlBagOStuff extends BagOStuff {
         */
        public function get( $key ) {
                $values = $this->getMulti( array( $key ) );
-               return $values[$key];
+               return array_key_exists( $key, $values ) ? $values[$key] : false;
        }
 
        /**
index de55de0..59d379a 100644 (file)
@@ -163,7 +163,8 @@ class Parser {
        var $mLinkHolders;
 
        var $mLinkID;
-       var $mIncludeSizes, $mPPNodeCount, $mHighestExpansionDepth, $mDefaultSort;
+       var $mIncludeSizes, $mPPNodeCount, $mGeneratedPPNodeCount, $mHighestExpansionDepth;
+       var $mDefaultSort;
        var $mTplExpandCache; # empty-frame expansion cache
        var $mTplRedirCache, $mTplDomCache, $mHeadings, $mDoubleUnderscores;
        var $mExpensiveFunctionCount; # number of expensive parser function calls
@@ -306,6 +307,7 @@ class Parser {
                        'arg' => 0,
                );
                $this->mPPNodeCount = 0;
+               $this->mGeneratedPPNodeCount = 0;
                $this->mHighestExpansionDepth = 0;
                $this->mDefaultSort = false;
                $this->mHeadings = array();
@@ -339,7 +341,7 @@ class Parser {
                 * to internalParse() which does all the real work.
                 */
 
-               global $wgUseTidy, $wgAlwaysUseTidy, $wgDisableLangConversion, $wgDisableTitleConversion;
+               global $wgUseTidy, $wgAlwaysUseTidy;
                $fname = __METHOD__.'-' . wfGetCaller();
                wfProfileIn( __METHOD__ );
                wfProfileIn( $fname );
@@ -392,9 +394,8 @@ class Parser {
                 * c) It's a conversion table
                 * d) it is an interface message (which is in the user language)
                 */
-               if ( !( $wgDisableLangConversion
-                               || isset( $this->mDoubleUnderscores['nocontentconvert'] )
-                               || $this->mTitle->isConversionTable() ) )
+               if ( !( $options->getDisableContentConversion()
+                               || isset( $this->mDoubleUnderscores['nocontentconvert'] ) ) )
                {
                        # Run convert unconditionally in 1.18-compatible mode
                        global $wgBug34832TransitionalRollback;
@@ -413,8 +414,7 @@ class Parser {
                 * {{DISPLAYTITLE:...}} is present. DISPLAYTITLE takes precedence over
                 * automatic link conversion.
                 */
-               if ( !( $wgDisableLangConversion
-                               || $wgDisableTitleConversion
+               if ( !( $options->getDisableTitleConversion()
                                || isset( $this->mDoubleUnderscores['nocontentconvert'] )
                                || isset( $this->mDoubleUnderscores['notitleconvert'] )
                                || $this->mOutput->getDisplayTitle() !== false ) )
@@ -482,13 +482,20 @@ class Parser {
                        $PFreport = "Expensive parser function count: {$this->mExpensiveFunctionCount}/{$this->mOptions->getExpensiveParserFunctionLimit()}\n";
                        $limitReport =
                                "NewPP limit report\n" .
-                               "Preprocessor node count: {$this->mPPNodeCount}/{$this->mOptions->getMaxPPNodeCount()}\n" .
+                               "Preprocessor visited node count: {$this->mPPNodeCount}/{$this->mOptions->getMaxPPNodeCount()}\n" .
+                               "Preprocessor generated node count: " .
+                                       "{$this->mGeneratedPPNodeCount}/{$this->mOptions->getMaxGeneratedPPNodeCount()}\n" .
                                "Post-expand include size: {$this->mIncludeSizes['post-expand']}/$max bytes\n" .
                                "Template argument size: {$this->mIncludeSizes['arg']}/$max bytes\n".
                                "Highest expansion depth: {$this->mHighestExpansionDepth}/{$this->mOptions->getMaxPPExpandDepth()}\n".
                                $PFreport;
                        wfRunHooks( 'ParserLimitReport', array( $this, &$limitReport ) );
                        $text .= "\n<!-- \n$limitReport-->\n";
+
+                       if ( $this->mGeneratedPPNodeCount > $this->mOptions->getMaxGeneratedPPNodeCount() / 10 ) {
+                               wfDebugLog( 'generated-pp-node-count', $this->mGeneratedPPNodeCount . ' ' .
+                                       $this->mTitle->getPrefixedDBkey() );
+                       }
                }
                $this->mOutput->setText( $text );
 
index 211fcd6..009b18a 100644 (file)
@@ -94,6 +94,11 @@ class ParserOptions {
         * Maximum number of nodes touched by PPFrame::expand()
         */
        var $mMaxPPNodeCount;
+
+       /**
+        * Maximum number of nodes generated by Preprocessor::preprocessToObj()
+        */
+       var $mMaxGeneratedPPNodeCount;
        
        /**
         * Maximum recursion depth in PPFrame::expand()
@@ -149,6 +154,16 @@ class ParserOptions {
         */
        var $mPreSaveTransform = true;
 
+       /**
+        * Whether content conversion should be disabled
+        */
+       var $mDisableContentConversion;
+
+       /**
+        * Whether title conversion should be disabled
+        */
+       var $mDisableTitleConversion;
+
        /**
         * Automatically number headings?
         */
@@ -219,6 +234,7 @@ class ParserOptions {
        function getTargetLanguage()                { return $this->mTargetLanguage; }
        function getMaxIncludeSize()                { return $this->mMaxIncludeSize; }
        function getMaxPPNodeCount()                { return $this->mMaxPPNodeCount; }
+       function getMaxGeneratedPPNodeCount()       { return $this->mMaxGeneratedPPNodeCount; }
        function getMaxPPExpandDepth()              { return $this->mMaxPPExpandDepth; }
        function getMaxTemplateDepth()              { return $this->mMaxTemplateDepth; }
        /* @since 1.20 */
@@ -228,6 +244,8 @@ class ParserOptions {
        function getEnableLimitReport()             { return $this->mEnableLimitReport; }
        function getCleanSignatures()               { return $this->mCleanSignatures; }
        function getExternalLinkTarget()            { return $this->mExternalLinkTarget; }
+       function getDisableContentConversion()      { return $this->mDisableContentConversion; }
+       function getDisableTitleConversion()        { return $this->mDisableTitleConversion; }
        function getMath()                          { $this->optionUsed( 'math' );
                                                                                                  return $this->mMath; }
        function getThumbSize()                     { $this->optionUsed( 'thumbsize' );
@@ -307,6 +325,7 @@ class ParserOptions {
        function setTargetLanguage( $x )            { return wfSetVar( $this->mTargetLanguage, $x, true ); }
        function setMaxIncludeSize( $x )            { return wfSetVar( $this->mMaxIncludeSize, $x ); }
        function setMaxPPNodeCount( $x )            { return wfSetVar( $this->mMaxPPNodeCount, $x ); }
+       function setMaxGeneratedPPNodeCount( $x )   { return wfSetVar( $this->mMaxGeneratedPPNodeCount, $x ); }
        function setMaxTemplateDepth( $x )          { return wfSetVar( $this->mMaxTemplateDepth, $x ); }
        /* @since 1.20 */
        function setExpensiveParserFunctionLimit( $x ) { return wfSetVar( $this->mExpensiveParserFunctionLimit, $x ); }
@@ -316,6 +335,8 @@ class ParserOptions {
        function setTimestamp( $x )                 { return wfSetVar( $this->mTimestamp, $x ); }
        function setCleanSignatures( $x )           { return wfSetVar( $this->mCleanSignatures, $x ); }
        function setExternalLinkTarget( $x )        { return wfSetVar( $this->mExternalLinkTarget, $x ); }
+       function disableContentConversion( $x = true ) { return wfSetVar( $this->mDisableContentConversion, $x ); }
+       function disableTitleConversion( $x = true ) { return wfSetVar( $this->mDisableTitleConversion, $x ); }
        function setMath( $x )                      { return wfSetVar( $this->mMath, $x ); }
        function setUserLang( $x )                  {
                if ( is_string( $x ) ) {
@@ -404,7 +425,8 @@ class ParserOptions {
                global $wgUseDynamicDates, $wgInterwikiMagic, $wgAllowExternalImages,
                        $wgAllowExternalImagesFrom, $wgEnableImageWhitelist, $wgAllowSpecialInclusion,
                        $wgMaxArticleSize, $wgMaxPPNodeCount, $wgMaxTemplateDepth, $wgMaxPPExpandDepth,
-                       $wgCleanSignatures, $wgExternalLinkTarget, $wgExpensiveParserFunctionLimit;
+                       $wgCleanSignatures, $wgExternalLinkTarget, $wgExpensiveParserFunctionLimit,
+                       $wgMaxGeneratedPPNodeCount, $wgDisableLangConversion, $wgDisableTitleConversion;
 
                wfProfileIn( __METHOD__ );
 
@@ -416,11 +438,14 @@ class ParserOptions {
                $this->mAllowSpecialInclusion = $wgAllowSpecialInclusion;
                $this->mMaxIncludeSize = $wgMaxArticleSize * 1024;
                $this->mMaxPPNodeCount = $wgMaxPPNodeCount;
+               $this->mMaxGeneratedPPNodeCount = $wgMaxGeneratedPPNodeCount;
                $this->mMaxPPExpandDepth = $wgMaxPPExpandDepth;
                $this->mMaxTemplateDepth = $wgMaxTemplateDepth;
                $this->mExpensiveParserFunctionLimit = $wgExpensiveParserFunctionLimit;
                $this->mCleanSignatures = $wgCleanSignatures;
                $this->mExternalLinkTarget = $wgExternalLinkTarget;
+               $this->mDisableContentConversion = $wgDisableLangConversion;
+               $this->mDisableTitleConversion = $wgDisableLangConversion || $wgDisableTitleConversion;
 
                $this->mUser = $user;
                $this->mNumberHeadings = $user->getOption( 'numberheadings' );
index e75237b..34de0ba 100644 (file)
@@ -162,6 +162,15 @@ class Preprocessor_DOM implements Preprocessor {
                        }
 
                }
+
+               // Fail if the number of elements exceeds acceptable limits
+               // Do not attempt to generate the DOM 
+               $this->parser->mGeneratedPPNodeCount += substr_count( $xml, '<' );
+               $max = $this->parser->mOptions->getMaxGeneratedPPNodeCount();
+               if ( $this->parser->mGeneratedPPNodeCount > $max ) {
+                       throw new MWException( __METHOD__.': generated node count limit exceeded' );
+               }
+
                wfProfileIn( __METHOD__.'-loadXML' );
                $dom = new DOMDocument;
                wfSuppressWarnings();
index b505592..2ccb6d3 100644 (file)
@@ -756,8 +756,10 @@ class SearchResult {
        protected function initFromTitle( $title ) {
                $this->mTitle = $title;
                if ( !is_null( $this->mTitle ) ) {
+                       $id = false;
+                       wfRunHooks( 'SearchResultInitFromTitle', array( $title, &$id ) );
                        $this->mRevision = Revision::newFromTitle(
-                               $this->mTitle, false, Revision::READ_NORMAL );
+                               $this->mTitle, $id, Revision::READ_NORMAL );
                        if ( $this->mTitle->getNamespace() === NS_FILE )
                                $this->mImage = wfFindFile( $this->mTitle );
                }
index aefa6cc..c5aa238 100644 (file)
@@ -94,8 +94,8 @@ class ActiveUsersPager extends UsersPager {
                $dbr = wfGetDB( DB_SLAVE );
                $conds = array( 'rc_user > 0' ); // Users - no anons
                $conds[] = 'ipb_deleted IS NULL'; // don't show hidden names
-               $conds[] = "rc_log_type IS NULL OR rc_log_type != 'newusers'";
-               $conds[] = "rc_timestamp >= '{$dbr->timestamp( wfTimestamp( TS_UNIX ) - $this->RCMaxAge*24*3600 )}'";
+               $conds[] = 'rc_log_type IS NULL OR rc_log_type != ' . $dbr->addQuotes( 'newusers' );
+               $conds[] = 'rc_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( wfTimestamp( TS_UNIX ) - $this->RCMaxAge*24*3600 ) );
 
                if( $this->requestedUser != '' ) {
                        $conds[] = 'rc_user_text >= ' . $dbr->addQuotes( $this->requestedUser );
@@ -115,7 +115,11 @@ class ActiveUsersPager extends UsersPager {
                        ),
                        'join_conds' => array(
                                'user' => array( 'INNER JOIN', 'rc_user_text=user_name' ),
-                               'ipblocks' => array( 'LEFT JOIN', 'user_id=ipb_user AND ipb_auto=0 AND ipb_deleted=1' ),
+                               'ipblocks' => array( 'LEFT JOIN', array(
+                                       'user_id=ipb_user',
+                                       'ipb_auto' => 0,
+                                       'ipb_deleted' => 1
+                               )),
                        ),
                        'conds' => $conds
                );
index 6e3d49b..fc5df4f 100644 (file)
@@ -36,7 +36,9 @@ class AncientPagesPage extends QueryPage {
                return true;
        }
 
-       function isSyndicated() { return false; }
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array(
index 8119e6d..9fa499c 100644 (file)
@@ -33,9 +33,17 @@ class BrokenRedirectsPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
-       function sortDescending() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
+
+       function sortDescending() {
+               return false;
+       }
 
        function getPageHeader() {
                return $this->msg( 'brokenredirectstext' )->parseAsBlock();
index fc72610..0996de3 100644 (file)
@@ -151,7 +151,7 @@ class SpecialChangeEmail extends UnlistedSpecialPage {
                $items = array(
                        array( 'wpName', 'username', 'text', $user->getName() ),
                        array( 'wpOldEmail', 'changeemail-oldemail', 'text', $oldEmailText ),
-                       array( 'wpNewEmail', 'changeemail-newemail', 'input', $this->mNewEmail ),
+                       array( 'wpNewEmail', 'changeemail-newemail', 'email', $this->mNewEmail ),
                );
                if ( $wgRequirePasswordforEmailChange ) {
                        $items[] = array( 'wpPassword', 'yourpassword', 'password', $this->mPassword );
index fb94ff7..54f8e26 100644 (file)
@@ -841,7 +841,7 @@ class ContribsPager extends ReverseChronologicalPager {
                        $link = Linker::link(
                                $page,
                                htmlspecialchars( $page->getPrefixedText() ),
-                               array(),
+                               array( 'class' => 'mw-contributions-title' ),
                                $page->isRedirect() ? array( 'redirect' => 'no' ) : array()
                        );
                        # Mark current revisions
@@ -882,11 +882,11 @@ class ContribsPager extends ReverseChronologicalPager {
                                // For some reason rev_parent_id isn't populated for this row.
                                // Its rumoured this is true on wikipedia for some revisions (bug 34922).
                                // Next best thing is to have the total number of bytes.
-                               $chardiff = ' . . ' . Linker::formatRevisionSize( $row->rev_len ) . ' . . ';
+                               $chardiff = ' <span class="mw-changeslist-separator">. .</span> ' . Linker::formatRevisionSize( $row->rev_len ) . ' <span class="mw-changeslist-separator">. .</span> ';
                        } else {
                                $parentLen = isset( $this->mParentLens[$row->rev_parent_id] ) ? $this->mParentLens[$row->rev_parent_id] : 0;
-                               $chardiff = ' . . ' . ChangesList::showCharacterDifference(
-                                               $parentLen, $row->rev_len, $this->getContext() ) . ' . . ';
+                               $chardiff = ' <span class="mw-changeslist-separator">. .</span> ' . ChangesList::showCharacterDifference(
+                                               $parentLen, $row->rev_len, $this->getContext() ) . ' <span class="mw-changeslist-separator">. .</span> ';
                        }
 
                        $lang = $this->getLanguage();
@@ -896,7 +896,7 @@ class ContribsPager extends ReverseChronologicalPager {
                                $d = Linker::linkKnown(
                                        $page,
                                        htmlspecialchars( $date ),
-                                       array(),
+                                       array( 'class' => 'mw-changeslist-date' ),
                                        array( 'oldid' => intval( $row->rev_id ) )
                                );
                        } else {
index 991e7a2..c880b61 100644 (file)
@@ -191,7 +191,7 @@ class DeletedContribsPager extends IndexPager {
                        $link = Linker::linkKnown(
                                $undelete,
                                $date,
-                               array(),
+                               array( 'class' => 'mw-changeslist-date' ),
                                array(
                                        'target' => $page->getPrefixedText(),
                                        'timestamp' => $rev->getTimestamp()
@@ -203,7 +203,11 @@ class DeletedContribsPager extends IndexPager {
                        $link = '<span class="history-deleted">' . $link . '</span>';
                }
 
-               $pagelink = Linker::link( $page );
+               $pagelink = Linker::link(
+                       $page,
+                       null,
+                       array( 'class' => 'mw-changeslist-title' )
+               );
 
                if( $rev->isMinor() ) {
                        $mflag = ChangesList::flag( 'minor' );
@@ -222,7 +226,8 @@ class DeletedContribsPager extends IndexPager {
                                array( $last, $dellog, $reviewlink ) ) )->escaped()
                );
 
-               $ret = "{$del}{$link} {$tools} . . {$mflag} {$pagelink} {$comment}";
+               $separator = '<span class="mw-changeslist-separator">. .</span>';
+               $ret = "{$del}{$link} {$tools} {$separator} {$mflag} {$pagelink} {$comment}";
 
                # Denote if username is redacted for this edit
                if( $rev->isDeleted( Revision::DELETED_USER ) ) {
index 5864ca9..8ecc871 100644 (file)
@@ -33,9 +33,17 @@ class DoubleRedirectsPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
-       function sortDescending() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
+
+       function sortDescending() {
+               return false;
+       }
 
        function getPageHeader() {
                return $this->msg( 'doubleredirectstext' )->parseAsBlock();
index ccf8ba1..96739ea 100644 (file)
@@ -40,9 +40,17 @@ class FileDuplicateSearchPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isSyndicated() { return false; }
-       function isCacheable() { return false; }
-       function isCached() { return false; }
+       function isSyndicated() {
+               return false;
+       }
+
+       function isCacheable() {
+               return false;
+       }
+
+       function isCached() {
+               return false;
+       }
 
        function linkParameters() {
                return array( 'filename' => $this->filename );
index fe338a0..f4acd64 100644 (file)
@@ -34,9 +34,17 @@ class ListredirectsPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
-       function sortDescending() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
+
+       function sortDescending() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array(
index 923a18d..331a0e0 100644 (file)
@@ -88,7 +88,7 @@ class UsersPager extends AlphabeticPager {
                $dbr = wfGetDB( DB_SLAVE );
                $conds = array();
                // Don't show hidden names
-               if( !$this->getUser()->isAllowed('hideuser') ) {
+               if( !$this->getUser()->isAllowed( 'hideuser' ) ) {
                        $conds[] = 'ipb_deleted IS NULL';
                }
 
@@ -116,18 +116,22 @@ class UsersPager extends AlphabeticPager {
                $query = array(
                        'tables' => array( 'user', 'user_groups', 'ipblocks'),
                        'fields' => array(
-                               $this->creationSort ? 'MAX(user_name) AS user_name' : 'user_name',
-                               $this->creationSort ? 'user_id' : 'MAX(user_id) AS user_id',
-                               'MAX(user_editcount) AS edits',
-                               'COUNT(ug_group) AS numgroups',
-                               'MAX(ug_group) AS singlegroup', // the usergroup if there is only one
-                               'MIN(user_registration) AS creation',
-                               'MAX(ipb_deleted) AS ipb_deleted' // block/hide status
+                               'user_name' => $this->creationSort ? 'MAX(user_name)' : 'user_name',
+                               'user_id' => $this->creationSort ? 'user_id' : 'MAX(user_id)',
+                               'edits' => 'MAX(user_editcount)',
+                               'numgroups' => 'COUNT(ug_group)',
+                               'singlegroup' => 'MAX(ug_group)', // the usergroup if there is only one
+                               'creation' => 'MIN(user_registration)',
+                               'ipb_deleted' => 'MAX(ipb_deleted)' // block/hide status
                        ),
                        'options' => $options,
                        'join_conds' => array(
                                'user_groups' => array( 'LEFT JOIN', 'user_id=ug_user' ),
-                               'ipblocks' => array( 'LEFT JOIN', 'user_id=ipb_user AND ipb_deleted=1 AND ipb_auto=0' ),
+                               'ipblocks' => array( 'LEFT JOIN', array(
+                                       'user_id=ipb_user',
+                                       'ipb_deleted' => 1,
+                                       'ipb_auto' => 0
+                               )),
                        ),
                        'conds' => $conds
                );
@@ -183,7 +187,7 @@ class UsersPager extends AlphabeticPager {
                }
 
                wfRunHooks( 'SpecialListusersFormatRow', array( &$item, $row ) );
-               return "<li>{$item}{$edits}{$created}</li>";
+               return Html::rawElement( 'li', array(), "{$item}{$edits}{$created}" );
        }
 
        function doBatchLookups() {
@@ -294,14 +298,13 @@ class UsersPager extends AlphabeticPager {
 /**
  * @ingroup SpecialPage
  */
-class SpecialListUsers extends SpecialPage {
+class SpecialListUsers extends IncludableSpecialPage {
 
        /**
         * Constructor
         */
        public function __construct() {
                parent::__construct( 'Listusers' );
-               $this->mIncludable = true;
        }
 
        /**
index 763bbdb..2889f7e 100644 (file)
@@ -44,7 +44,10 @@ class LonelyPagesPage extends PageQueryPage {
        function isExpensive() {
                return true;
        }
-       function isSyndicated() { return false; }
+
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
index 104c653..432956f 100644 (file)
@@ -34,9 +34,17 @@ class MIMEsearchPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
-       function isCacheable() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
+
+       function isCacheable() {
+               return false;
+       }
 
        function linkParameters() {
                return array( 'mime' => "{$this->major}/{$this->minor}" );
index 3f0bafa..085a09f 100644 (file)
@@ -35,8 +35,13 @@ class MostcategoriesPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
index 3d79790..01a5caf 100644 (file)
@@ -35,8 +35,13 @@ class MostimagesPage extends ImageQueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
index 894d697..e08cdf3 100644 (file)
@@ -35,8 +35,13 @@ class MostinterwikisPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
index 89c4350..66814cb 100644 (file)
@@ -36,8 +36,13 @@ class MostlinkedPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
index dadef8b..df2975c 100644 (file)
@@ -35,7 +35,9 @@ class MostlinkedCategoriesPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isSyndicated() { return false; }
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
@@ -46,7 +48,9 @@ class MostlinkedCategoriesPage extends QueryPage {
                );
        }
 
-       function sortDescending() { return true; }
+       function sortDescending() {
+               return true;
+       }
 
        /**
         * Fetch user page links and cache their existence
index 3ece917..af3dbf3 100644 (file)
@@ -258,7 +258,7 @@ class MovePageForm extends UnlistedSpecialPage {
                         Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getTitle()->getLocalURL( 'action=submit' ), 'id' => 'movepage' ) ) .
                         Xml::openElement( 'fieldset' ) .
                         Xml::element( 'legend', null, $this->msg( 'move-page-legend' )->text() ) .
-                        Xml::openElement( 'table', array( 'border' => '0', 'id' => 'mw-movepage-table' ) ) .
+                        Xml::openElement( 'table', array( 'id' => 'mw-movepage-table' ) ) .
                         "<tr>
                                <td class='mw-label'>" .
                                        $this->msg( 'movearticle' )->escaped() .
index efb5765..c09da4e 100644 (file)
@@ -247,7 +247,7 @@ class SpecialPasswordReset extends FormSpecialPage {
                        $username,
                        $passwordBlock,
                        count( $passwords ),
-                       Title::newMainPage()->getCanonicalUrl(),
+                       '<' . Title::newMainPage()->getCanonicalUrl() . '>',
                        round( $wgNewPasswordExpiry / 86400 )
                );
 
index 448d179..5a9f3f7 100644 (file)
@@ -37,7 +37,9 @@ class PopularPagesPage extends QueryPage {
                return true;
        }
 
-       function isSyndicated() { return false; }
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
index c37bb1d..7740b32 100644 (file)
@@ -188,7 +188,7 @@ class SpecialPrefixindex extends SpecialAllpages {
 
                        $n = 0;
                        if( $res->numRows() > 0 ) {
-                               $out = Xml::openElement( 'table', array( 'border' => '0', 'id' => 'mw-prefixindex-list-table' ) );
+                               $out = Xml::openElement( 'table', array( 'id' => 'mw-prefixindex-list-table' ) );
 
                                while( ( $n < $this->maxPerPage ) && ( $s = $res->fetchObject() ) ) {
                                        $t = Title::makeTitle( $s->page_namespace, $s->page_title );
@@ -227,7 +227,7 @@ class SpecialPrefixindex extends SpecialAllpages {
                } else {
                        $nsForm = $this->namespacePrefixForm( $namespace, $prefix, $hideredirects );
                        $self = $this->getTitle();
-                       $out2 = Xml::openElement( 'table', array( 'border' => '0', 'id' => 'mw-prefixindex-nav-table' ) )  .
+                       $out2 = Xml::openElement( 'table', array( 'id' => 'mw-prefixindex-nav-table' ) )  .
                                '<tr>
                                        <td>' .
                                                $nsForm .
index 85365f5..d2add62 100644 (file)
@@ -300,7 +300,7 @@ class SpecialSearch extends SpecialPage {
                        )
                );
                $out->addHtml(
-                       Xml::openElement( 'table', array( 'id'=>'mw-search-top-table', 'border'=>0, 'cellpadding'=>0, 'cellspacing'=>0 ) ) .
+                       Xml::openElement( 'table', array( 'id' => 'mw-search-top-table', 'cellpadding' => 0, 'cellspacing' => 0 ) ) .
                        Xml::openElement( 'tr' ) .
                        Xml::openElement( 'td' ) . "\n" .
                        $this->shortDialog( $term ) .
@@ -667,7 +667,7 @@ class SpecialSearch extends SpecialPage {
                                        return "<li>" .
                                                '<table class="searchResultImage">' .
                                                '<tr>' .
-                                               '<td width="120" style="text-align: center; vertical-align: top;">' .
+                                               '<td style="width: 120px; text-align: center; vertical-align: top;">' .
                                                $thumb->toHtml( array( 'desc-link' => true ) ) .
                                                '</td>' .
                                                '<td style="vertical-align: top;">' .
@@ -868,7 +868,7 @@ class SpecialSearch extends SpecialPage {
                for( $i = 0; $i < $numRows; $i += 4 ) {
                        $namespaceTables .= Xml::openElement(
                                'table',
-                               array( 'cellpadding' => 0, 'cellspacing' => 0, 'border' => 0 )
+                               array( 'cellpadding' => 0, 'cellspacing' => 0 )
                        );
                        for( $j = $i; $j < $i + 4 && $j < $numRows; $j++ ) {
                                $namespaceTables .= Xml::tags( 'tr', null, $rows[$j] );
index c895dae..4036ebb 100644 (file)
@@ -69,7 +69,7 @@ class SpecialTags extends SpecialPage {
                }
 
                $newRow = '';
-               $newRow .= Xml::tags( 'td', null, Xml::element( 'tt', null, $tag ) );
+               $newRow .= Xml::tags( 'td', null, Xml::element( 'code', null, $tag ) );
 
                $disp = ChangeTags::tagDescription( $tag );
                $disp .= ' ';
index 1226a6c..37fcb2f 100644 (file)
@@ -41,7 +41,10 @@ class UncategorizedPagesPage extends PageQueryPage {
        function isExpensive() {
                return true;
        }
-       function isSyndicated() { return false; }
+
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
index 6dde6b9..6ebaed5 100644 (file)
@@ -908,16 +908,16 @@ class SpecialUndelete extends SpecialPage {
                $diffEngine->showDiffStyle();
                $this->getOutput()->addHTML(
                        "<div>" .
-                       "<table border='0' width='98%' cellpadding='0' cellspacing='4' class='diff'>" .
+                       "<table style='width: 98%;' cellpadding='0' cellspacing='4' class='diff'>" .
                        "<col class='diff-marker' />" .
                        "<col class='diff-content' />" .
                        "<col class='diff-marker' />" .
                        "<col class='diff-content' />" .
                        "<tr>" .
-                               "<td colspan='2' width='50%' style='text-align: center' class='diff-otitle'>" .
+                               "<td colspan='2' style='width: 50%; text-align: center' class='diff-otitle'>" .
                                $this->diffHeader( $previousRev, 'o' ) .
                                "</td>\n" .
-                               "<td colspan='2' width='50%' style='text-align: center' class='diff-ntitle'>" .
+                               "<td colspan='2' style='width: 50%;  text-align: center' class='diff-ntitle'>" .
                                $this->diffHeader( $currentRev, 'n' ) .
                                "</td>\n" .
                        "</tr>" .
index 1bd38e1..69c42d5 100644 (file)
@@ -26,7 +26,9 @@
  */
 class UnusedCategoriesPage extends QueryPage {
 
-       function isExpensive() { return true; }
+       function isExpensive() {
+               return true;
+       }
 
        function __construct( $name = 'Unusedcategories' ) {
                parent::__construct( $name );
index 06077d1..fe79731 100644 (file)
@@ -35,9 +35,17 @@ class UnusedtemplatesPage extends QueryPage {
                parent::__construct( $name );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
-       function sortDescending() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
+
+       function sortDescending() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
index e5a7941..d397149 100644 (file)
@@ -35,8 +35,13 @@ class UnwatchedpagesPage extends QueryPage {
                parent::__construct( $name, 'unwatchedpages' );
        }
 
-       function isExpensive() { return true; }
-       function isSyndicated() { return false; }
+       function isExpensive() {
+               return true;
+       }
+
+       function isSyndicated() {
+               return false;
+       }
 
        function getQueryInfo() {
                return array (
@@ -54,7 +59,9 @@ class UnwatchedpagesPage extends QueryPage {
                );
        }
 
-       function sortDescending() { return false; }
+       function sortDescending() {
+               return false;
+       }
 
        function getOrderFields() {
                return array( 'page_namespace', 'page_title' );
index c101897..ef6af80 100644 (file)
@@ -464,8 +464,7 @@ class LoginForm extends SpecialPage {
                $u->saveSettings();
 
                # Update user count
-               $ssUpdate = new SiteStatsUpdate( 0, 0, 0, 0, 1 );
-               $ssUpdate->doUpdate();
+               DeferredUpdates::addUpdate( new SiteStatsUpdate( 0, 0, 0, 0, 1 ) );
 
                return $u;
        }
@@ -833,7 +832,7 @@ class LoginForm extends SpecialPage {
                $u->setNewpassword( $np, $throttle );
                $u->saveSettings();
                $userLanguage = $u->getOption( 'language' );
-               $m = $this->msg( $emailText, $ip, $u->getName(), $np, $wgServer . $wgScript,
+               $m = $this->msg( $emailText, $ip, $u->getName(), $np, '<' . $wgServer . $wgScript . '>',
                        round( $wgNewPasswordExpiry / 86400 ) )->inLanguage( $userLanguage )->text();
                $result = $u->sendMail( $this->msg( $emailTitle )->inLanguage( $userLanguage )->text(), $m );
 
index 59d983f..9f5a48a 100644 (file)
@@ -449,7 +449,7 @@ class UserrightsPage extends SpecialPage {
                        $this->msg( 'userrights-groups-help', $user->getName() )->parse() .
                        $grouplist .
                        Xml::tags( 'p', null, $this->groupCheckboxes( $groups, $user ) ) .
-                       Xml::openElement( 'table', array( 'border' => '0', 'id' => 'mw-userrights-table-outer' ) ) .
+                       Xml::openElement( 'table', array( 'id' => 'mw-userrights-table-outer' ) ) .
                                "<tr>
                                        <td class='mw-label'>" .
                                                Xml::label( $this->msg( 'userrights-reason' )->text(), 'wpReason' ) .
@@ -534,7 +534,7 @@ class UserrightsPage extends SpecialPage {
                }
 
                # Build the HTML table
-               $ret .= Xml::openElement( 'table', array( 'border' => '0', 'class' => 'mw-userrights-groups' ) ) .
+               $ret .= Xml::openElement( 'table', array( 'class' => 'mw-userrights-groups' ) ) .
                        "<tr>\n";
                foreach( $columns as $name => $column ) {
                        if( $column === array() )
index 7673305..dec123d 100644 (file)
@@ -30,7 +30,10 @@ class WantedPagesPage extends WantedQueryPage {
        
        function __construct( $name = 'Wantedpages' ) {
                parent::__construct( $name );
-               $this->mIncludable = true;
+       }
+
+       function isIncludable() {
+               return true;
        }
 
        function execute( $par ) {
index 5d6a112..f135649 100644 (file)
@@ -163,7 +163,7 @@ class SpecialWhatLinksHere extends SpecialPage {
                        'rd_from = page_id',
                        'rd_namespace' => $target->getNamespace(),
                        'rd_title' => $target->getDBkey(),
-                       '(rd_interwiki is NULL) or (rd_interwiki = \'\')'
+                       'rd_interwiki = ' . $dbr->addQuotes( '' ) . ' OR rd_interwiki IS NULL'
                )));
 
                if( $fetchlinks ) {
index 54a68af..0542bba 100644 (file)
@@ -61,35 +61,35 @@ class UploadFromChunks extends UploadFromFile {
                return true;
        }
        /**
-        * Calls the parent stashFile and updates the uploadsession table to handle "chunks" 
+        * Calls the parent stashFile and updates the uploadsession table to handle "chunks"
         *
         * @return UploadStashFile stashed file
         */
        public function stashFile() {
-               // Stash file is the called on creating a new chunk session: 
+               // Stash file is the called on creating a new chunk session:
                $this->mChunkIndex = 0;
                $this->mOffset = 0;
                // Create a local stash target
                $this->mLocalFile = parent::stashFile();
-               // Update the initial file offset ( based on file size ) 
+               // Update the initial file offset ( based on file size )
                $this->mOffset = $this->mLocalFile->getSize();
                $this->mFileKey = $this->mLocalFile->getFileKey();
 
                // Output a copy of this first to chunk 0 location:
                $status = $this->outputChunk( $this->mLocalFile->getPath() );
 
-               // Update db table to reflect initial "chunk" state 
+               // Update db table to reflect initial "chunk" state
                $this->updateChunkStatus();
                return $this->mLocalFile;
        }
 
        /**
         * Continue chunk uploading
-        */     
+        */
        public function continueChunks( $name, $key, $webRequestUpload ) {
                $this->mFileKey = $key;
                $this->mUpload = $webRequestUpload;
-               // Get the chunk status form the db: 
+               // Get the chunk status form the db:
                $this->getChunkStatus();
 
                $metadata = $this->stash->getMetadata( $key );
@@ -105,7 +105,7 @@ class UploadFromChunks extends UploadFromFile {
         * @return FileRepoStatus
         */
        public function concatenateChunks() {
-               wfDebug( __METHOD__ . " concatenate {$this->mChunkIndex} chunks:" . 
+               wfDebug( __METHOD__ . " concatenate {$this->mChunkIndex} chunks:" .
                        $this->getOffset() . ' inx:' . $this->getChunkIndex() . "\n" );
 
                // Concatenate all the chunks to mVirtualTempPath
@@ -125,10 +125,10 @@ class UploadFromChunks extends UploadFromFile {
                // Concatenate the chunks at the temp file
                $status = $this->repo->concatenate( $fileList, $tmpPath, FileRepo::DELETE_SOURCE );
                if( !$status->isOk() ){
-                       return $status; 
+                       return $status;
                }
                // Update the mTempPath and mLocalFile
-               // ( for FileUpload or normal Stash to take over )  
+               // ( for FileUpload or normal Stash to take over )
                $this->mTempPath = $tmpPath; // file system path
                $this->mLocalFile = parent::stashFile();
 
@@ -149,16 +149,16 @@ class UploadFromChunks extends UploadFromFile {
        }
 
        /**
-        * Returns the virtual chunk location:  
+        * Returns the virtual chunk location:
         * @param $index
         * @return string
         */
        function getVirtualChunkLocation( $index ){
-               return $this->repo->getVirtualUrl( 'temp' ) . 
+               return $this->repo->getVirtualUrl( 'temp' ) .
                                '/' .
-                               $this->repo->getHashPath( 
+                               $this->repo->getHashPath(
                                        $this->getChunkFileKey( $index )
-                               ) . 
+                               ) .
                                $this->getChunkFileKey( $index );
        }
 
@@ -173,20 +173,20 @@ class UploadFromChunks extends UploadFromFile {
        public function addChunk( $chunkPath, $chunkSize, $offset ) {
                // Get the offset before we add the chunk to the file system
                $preAppendOffset = $this->getOffset();
-               
+
                if ( $preAppendOffset + $chunkSize > $this->getMaxUploadSize()) {
                        $status = Status::newFatal( 'file-too-large' );
                } else {
                        // Make sure the client is uploading the correct chunk with a matching offset.
                        if ( $preAppendOffset == $offset ) {
-                               // Update local chunk index for the current chunk   
+                               // Update local chunk index for the current chunk
                                $this->mChunkIndex++;
                                $status = $this->outputChunk( $chunkPath );
                                if( $status->isGood() ){
-                                       // Update local offset: 
+                                       // Update local offset:
                                        $this->mOffset = $preAppendOffset + $chunkSize;
-                                       // Update chunk table status db         
-                                       $this->updateChunkStatus();             
+                                       // Update chunk table status db
+                                       $this->updateChunkStatus();
                                }
                        } else {
                                $status = Status::newFatal( 'invalid-chunk-offset' );
@@ -196,16 +196,16 @@ class UploadFromChunks extends UploadFromFile {
        }
 
        /**
-        * Update the chunk db table with the current status: 
+        * Update the chunk db table with the current status:
         */
        private function updateChunkStatus(){
-               wfDebug( __METHOD__ . " update chunk status for {$this->mFileKey} offset:" . 
+               wfDebug( __METHOD__ . " update chunk status for {$this->mFileKey} offset:" .
                                        $this->getOffset() . ' inx:' . $this->getChunkIndex() . "\n" );
 
                $dbw = $this->repo->getMasterDb();
                $dbw->update(
                        'uploadstash',
-                       array( 
+                       array(
                                'us_status' => 'chunks',
                                'us_chunk_inx' => $this->getChunkIndex(),
                                'us_size' => $this->getOffset()
@@ -219,12 +219,12 @@ class UploadFromChunks extends UploadFromFile {
         * Get the chunk db state and populate update relevant local values
         */
        private function getChunkStatus(){
-               // get Master db to avoid race conditions. 
+               // get Master db to avoid race conditions.
                // Otherwise, if chunk upload time < replag there will be spurious errors
                $dbw = $this->repo->getMasterDb();
                $row = $dbw->selectRow(
-                       'uploadstash', 
-                       array( 
+                       'uploadstash',
+                       array(
                                'us_chunk_inx',
                                'us_size',
                                'us_path',
@@ -241,7 +241,7 @@ class UploadFromChunks extends UploadFromFile {
        }
 
        /**
-        * Get the current Chunk index 
+        * Get the current Chunk index
         * @return Integer index of the current chunk
         */
        private function getChunkIndex(){
@@ -252,8 +252,8 @@ class UploadFromChunks extends UploadFromFile {
        }
 
        /**
-        * Gets the current offset in fromt the stashedupload table 
-        * @return Integer current byte offset of the chunk file set 
+        * Gets the current offset in fromt the stashedupload table
+        * @return Integer current byte offset of the chunk file set
         */
        private function getOffset(){
                if ( $this->mOffset !== null ){
@@ -272,11 +272,12 @@ class UploadFromChunks extends UploadFromFile {
        private function outputChunk( $chunkPath ){
                // Key is fileKey + chunk index
                $fileKey = $this->getChunkFileKey();
-               
-               // Store the chunk per its indexed fileKey: 
+
+               // Store the chunk per its indexed fileKey:
                $hashPath = $this->repo->getHashPath( $fileKey );
-               $storeStatus = $this->repo->store( $chunkPath, 'temp', "$hashPath$fileKey" );
-               
+               $storeStatus = $this->repo->quickImport( $chunkPath,
+                       $this->repo->getZonePath( 'temp' ) . "/{$hashPath}{$fileKey}" );
+
                // Check for error in stashing the chunk:
                if ( ! $storeStatus->isOK() ) {
                        $error = $storeStatus->getErrorsArray();
index aa65ffe..c7fd23a 100644 (file)
@@ -572,9 +572,10 @@ class UploadStashFile extends UnregisteredLocalFile {
         * ugly file name.
         *
         * @param $params Array: handler-specific parameters
+        * @param $flags integer Bitfield that supports THUMB_* constants
         * @return String: base name for URL, like '120px-12345.jpg', or null if there is no handler
         */
-       function thumbName( $params ) {
+       function thumbName( $params, $flags = 0 ) {
                return $this->generateThumbName( $this->getUrlName(), $params );
        }
 
index 9a9534f..e20ca05 100644 (file)
 一個準
 準擬
 準貨幣
+準軍事
 準式
 認準
 三準
index 1edca80..40d1f36 100644 (file)
@@ -3005,7 +3005,7 @@ class Language {
        function listToText( array $l ) {
                $s = '';
                $m = count( $l ) - 1;
-               
+
                if ( $m === 0 ) {
                        return $l[0];
                } elseif ( $m === 1 ) {
@@ -4187,7 +4187,17 @@ class Language {
         * @return array Associative array with plural form, and plural rule as key-value pairs
         */
        public function getCompiledPluralRules() {
-               return self::$dataCache->getItem( strtolower( $this->mCode ), 'compiledPluralRules' );
+               $pluralRules = self::$dataCache->getItem( strtolower( $this->mCode ), 'compiledPluralRules' );
+               $fallbacks = Language::getFallbacksFor( $this->mCode );
+               if ( !$pluralRules ) {
+                       foreach ( $fallbacks as $fallbackCode ) {
+                               $pluralRules = self::$dataCache->getItem( strtolower( $fallbackCode ), 'compiledPluralRules' );
+                               if ( $pluralRules ) {
+                                       break;
+                               }
+                       }
+               }
+               return $pluralRules;
        }
 
        /**
@@ -4196,7 +4206,17 @@ class Language {
         * @return array Associative array with plural form, and plural rule as key-value pairs
         */
        public function getPluralRules() {
-               return self::$dataCache->getItem( strtolower( $this->mCode ), 'pluralRules' );
+               $pluralRules = self::$dataCache->getItem( strtolower( $this->mCode ), 'pluralRules' );
+               $fallbacks = Language::getFallbacksFor( $this->mCode );
+               if ( !$pluralRules ) {
+                       foreach ( $fallbacks as $fallbackCode ) {
+                               $pluralRules = self::$dataCache->getItem( strtolower( $fallbackCode ), 'pluralRules' );
+                               if ( $pluralRules ) {
+                                       break;
+                               }
+                       }
+               }
+               return $pluralRules;
        }
 
        /**
index 8f158a4..da55c82 100644 (file)
   * These determine things like interwikis, language selectors, and so on.
   * Safe to change without running scripts on the respective sites.
   *
+  * \xE2\x80\x8E is the left-to-right marker and
+  * \xE2\x80\x8F is the right-to-left marker.
+  * They are required for ensuring the correct display of brackets in
+  * mixed rtl/ltr environment.
+  *
   * @ingroup Language
   */
 /* private */ $coreLanguageNames = array(
@@ -56,8 +61,8 @@
        'bcc' => 'بلوچی مکرانی', # Southern Balochi
        'bcl' => 'Bikol Central', # Bikol: Central Bicolano language
        'be' => 'беларуская', #  Belarusian normative
-       'be-tarask' => "\xE2\x80\xAAбеларуская (тарашкевіца)\xE2\x80\xAC", # Belarusian in Taraskievica orthography
-       'be-x-old' => "\xE2\x80\xAAбеларуская (тарашкевіца)\xE2\x80\xAC",  # Belarusian in Taraskievica orthography; compat link
+       'be-tarask' => "беларуская (тарашкевіца)\xE2\x80\x8E",     # Belarusian in Taraskievica orthography
+       'be-x-old' => "беларуская (тарашкевіца)\xE2\x80\x8E",      # Belarusian in Taraskievica orthography; compat link
        'bg' => 'български',   # Bulgarian
        'bh' => 'भोजपुरी',        # Bihari macro language. Falls back to Bhojpuri (bho). The name actually says "Bhojpuri".
        'bho' => 'भोजपुरी',       # Bhojpuri
@@ -87,8 +92,8 @@
        'cps' => 'Capiceño', # Capiznon
        'cr' => 'Nēhiyawēwin / ᓀᐦᐃᔭᐍᐏᐣ',                # Cree
        'crh' => 'qırımtatarca',   # Crimean Tatar (multiple scripts - defaults to Latin)
-       'crh-latn' => "\xE2\x80\xAAqırımtatarca (Latin)\xE2\x80\xAC",       # Crimean Tatar (Latin)
-       'crh-cyrl' => "\xE2\x80\xAAкъырымтатарджа (Кирилл)\xE2\x80\xAC",       # Crimean Tatar (Cyrillic)
+       'crh-latn' => "qırımtatarca (Latin)\xE2\x80\x8E",       # Crimean Tatar (Latin)
+       'crh-cyrl' => "къырымтатарджа (Кирилл)\xE2\x80\x8E",       # Crimean Tatar (Cyrillic)
        'cs' => 'česky',       # Czech
        'csb' => 'kaszëbsczi', # Cassubian
        'cu' => 'словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ',      # Old Church Slavonic (ancient language)
        'de' => 'Deutsch',              # German ("Du")
        'de-at' => 'Österreichisches Deutsch',         # Austrian German
        'de-ch' => 'Schweizer Hochdeutsch',             # Swiss Standard German
-       'de-formal' => "\xE2\x80\xAADeutsch (Sie-Form)\xE2\x80\xAC",            # German - formal address ("Sie")
+       'de-formal' => "Deutsch (Sie-Form)\xE2\x80\x8E",                # German - formal address ("Sie")
        'diq' => 'Zazaki',              # Zazaki
        'dsb' => 'dolnoserbski', # Lower Sorbian
        'dtp' => 'Dusun Bundu-liwan', # Central Dusun
        'ga' => 'Gaeilge',              # Irish
        'gag' => 'Gagauz',              # Gagauz
        'gan' => '贛語',              # Gan (multiple scripts - defaults to Traditional)
-       'gan-hans' => "\xE2\x80\xAA赣语(简体)\xE2\x80\xAC",     # Gan (Simplified Han)
-       'gan-hant' => "\xE2\x80\xAA贛語(繁體)\xE2\x80\xAC",     # Gan (Traditional Han)
+       'gan-hans' => "赣语(简体)\xE2\x80\x8E", # Gan (Simplified Han)
+       'gan-hant' => "贛語(繁體)\xE2\x80\x8E", # Gan (Traditional Han)
        'gd' => 'Gàidhlig',    # Scots Gaelic
        'gl' => 'galego',               # Galician
        'glk' => 'گیلکی',  # Gilaki
        'gsw' => 'Alemannisch', # Alemannic
        'gu' => 'ગુજરાતી',        # Gujarati
        'gv' => 'Gaelg',                # Manx
-       'ha' => 'هَوُسَ', # Hausa
+       'ha' => 'Hausa',        # Hausa
        'hak' => 'Hak-kâ-fa',  # Hakka
        'haw' => 'Hawai`i',             # Hawaiian
        'he' => 'עברית',   # Hebrew
        'kiu' => 'Kırmancki',  # Kirmanjki
        'kj' => 'Kwanyama',     # Kwanyama
        'kk' => 'қазақша',       # Kazakh (multiple scripts - defaults to Cyrillic)
-       'kk-arab' => "\xE2\x80\xABقازاقشا (تٴوتە)\xE2\x80\xAC",     # Kazakh Arabic
-       'kk-cyrl' => "\xE2\x80\xAAқазақша (кирил)\xE2\x80\xAC",     # Kazakh Cyrillic
-       'kk-latn' => "\xE2\x80\xAAqazaqşa (latın)\xE2\x80\xAC",       # Kazakh Latin
-       'kk-cn' => "\xE2\x80\xABقازاقشا (جۇنگو)\xE2\x80\xAC",       # Kazakh (China)
-       'kk-kz' => "\xE2\x80\xAAқазақша (Қазақстан)\xE2\x80\xAC",       # Kazakh (Kazakhstan)
-       'kk-tr' => "\xE2\x80\xAAqazaqşa (Türkïya)\xE2\x80\xAC",      # Kazakh (Turkey)
+       'kk-arab' => "قازاقشا (تٴوتە)\xE2\x80\x8F", # Kazakh Arabic
+       'kk-cyrl' => "қазақша (кирил)\xE2\x80\x8E", # Kazakh Cyrillic
+       'kk-latn' => "qazaqşa (latın)\xE2\x80\x8E",   # Kazakh Latin
+       'kk-cn' => "قازاقشا (جۇنگو)\xE2\x80\x8F",   # Kazakh (China)
+       'kk-kz' => "қазақша (Қазақстан)\xE2\x80\x8E",   # Kazakh (Kazakhstan)
+       'kk-tr' => "qazaqşa (Türkïya)\xE2\x80\x8E",  # Kazakh (Turkey)
        'kl' => 'kalaallisut',  # Inuktitut, Greenlandic/Greenlandic/Kalaallisut (kal)
        'km' => 'ភាសាខ្មែរ',  # Khmer, Central
        'kn' => 'ಕನ್ನಡ',      # Kannada
        'ks-deva' => 'कॉशुर', # Kashmiri (Devanagari script)
        'ksh' => 'Ripoarisch',  # Ripuarian
        'ku'  => 'Kurdî',      # Kurdish (multiple scripts - defaults to Latin)
-       'ku-latn' => "\xE2\x80\xAAKurdî (latînî)\xE2\x80\xAC",       # Northern Kurdish (Latin script)
-       'ku-arab' => "\xE2\x80\xABكوردي (عەرەبی)\xE2\x80\xAC",       # Northern Kurdish (Arabic script) (falls back to ckb)
+       'ku-latn' => "Kurdî (latînî)\xE2\x80\x8E",   # Northern Kurdish (Latin script)
+       'ku-arab' => "كوردي (عەرەبی)\xE2\x80\x8F",   # Northern Kurdish (Arabic script) (falls back to ckb)
        'kv' => 'коми',     # Komi-Zyrian (Cyrillic is common script but also written in Latin script)
        'kw' => 'kernowek',             # Cornish
        'ky' => 'Кыргызча',     # Kirghiz
        'nah' => 'Nāhuatl',            # Nahuatl, en:Wikipedia writes Nahuatlahtolli, while another form is Náhuatl
        'nan' => 'Bân-lâm-gú', # Min-nan -- (bug 8217) nan instead of zh-min-nan, http://www.sil.org/iso639-3/codes.asp?order=639_3&letter=n
        'nap' => 'Nnapulitano', # Neapolitan
-       'nb' => "\xE2\x80\xAAnorsk (bokmål)\xE2\x80\xAC",              # Norwegian (Bokmal)
+       'nb' => "norsk (bokmål)\xE2\x80\x8E",          # Norwegian (Bokmal)
        'nds' => 'Plattdüütsch',      # Low German ''or'' Low Saxon
        'nds-nl' => 'Nedersaksisch',    # Dutch Low Saxon
        'ne' => 'नेपाली',   # Nepali
        'ng' => 'Oshiwambo',            # Ndonga
        'niu' => 'Niuē',       # Niuean
        'nl' => 'Nederlands',   # Dutch
-       'nl-informal' => "\xE2\x80\xAANederlands (informeel)\xE2\x80\xAC",      # Dutch (informal address ("je"))
-       'nn' => "\xE2\x80\xAAnorsk (nynorsk)\xE2\x80\xAC",      # Norwegian (Nynorsk)
-       'no' => "\xE2\x80\xAAnorsk (bokmål)\xE2\x80\xAC",              # Norwegian (falls back to nb).
+       'nl-informal' => "Nederlands (informeel)\xE2\x80\x8E",  # Dutch (informal address ("je"))
+       'nn' => "norsk (nynorsk)\xE2\x80\x8E",  # Norwegian (Nynorsk)
+       'no' => "norsk (bokmål)\xE2\x80\x8E",          # Norwegian (falls back to nb).
        'nov' => 'Novial',              # Novial
        'nrm' => 'Nouormand',   # Norman
        'nso' => 'Sesotho sa Leboa',    # Northern Sotho
        'so' => 'Soomaaliga',   # Somali
        'sq' => 'shqip',                # Albanian
        'sr' => 'српски / srpski',        # Serbian (multiple scripts - defaults to Cyrillic)
-       'sr-ec' => "\xE2\x80\xAAсрпски (ћирилица)\xE2\x80\xAC",   # Serbian Cyrillic ekavian
-       'sr-el' => "\xE2\x80\xAAsrpski (latinica)\xE2\x80\xAC", # Serbian Latin ekavian
+       'sr-ec' => "српски (ћирилица)\xE2\x80\x8E",       # Serbian Cyrillic ekavian
+       'sr-el' => "srpski (latinica)\xE2\x80\x8E",     # Serbian Latin ekavian
        'srn' => 'Sranantongo',         # Sranan Tongo
        'ss' => 'SiSwati',              # Swati
        'st' => 'Sesotho',              # Southern Sotho
        'zea' => 'Zeêuws',     # Zeeuws/Zeaws
        'zh' => '中文',                                               # (Zhōng Wén) - Chinese
        'zh-classical' => '文言',                     # Classical Chinese/Literary Chinese -- (see bug 8217)
-       'zh-cn' => "\xE2\x80\xAA中文(中国大陆)\xE2\x80\xAC",  # Chinese (PRC)
-       'zh-hans' => "\xE2\x80\xAA中文(简体)\xE2\x80\xAC",      # Mandarin Chinese (Simplified Chinese script) (cmn-hans)
-       'zh-hant' => "\xE2\x80\xAA中文(繁體)\xE2\x80\xAC",      # Mandarin Chinese (Traditional Chinese script) (cmn-hant)
-       'zh-hk' => "\xE2\x80\xAA中文(香港)\xE2\x80\xAC",        # Chinese (Hong Kong)
+       'zh-cn' => "中文(中国大陆)\xE2\x80\x8E",      # Chinese (PRC)
+       'zh-hans' => "中文(简体)\xE2\x80\x8E",  # Mandarin Chinese (Simplified Chinese script) (cmn-hans)
+       'zh-hant' => "中文(繁體)\xE2\x80\x8E",  # Mandarin Chinese (Traditional Chinese script) (cmn-hant)
+       'zh-hk' => "中文(香港)\xE2\x80\x8E",    # Chinese (Hong Kong)
        'zh-min-nan' => 'Bân-lâm-gú',                                # Min-nan -- (see bug 8217)
-       'zh-mo' => "\xE2\x80\xAA中文(澳門)\xE2\x80\xAC",        # Chinese (Macau)
-       'zh-my' => "\xE2\x80\xAA中文(马来西亚)\xE2\x80\xAC",  # Chinese (Malaysia)
-       'zh-sg' => "\xE2\x80\xAA中文(新加坡)\xE2\x80\xAC",     # Chinese (Singapore)
-       'zh-tw' => "\xE2\x80\xAA中文(台灣)\xE2\x80\xAC",        # Chinese (Taiwan)
+       'zh-mo' => "中文(澳門)\xE2\x80\x8E",    # Chinese (Macau)
+       'zh-my' => "中文(马来西亚)\xE2\x80\x8E",      # Chinese (Malaysia)
+       'zh-sg' => "中文(新加坡)\xE2\x80\x8E", # Chinese (Singapore)
+       'zh-tw' => "中文(台灣)\xE2\x80\x8E",    # Chinese (Taiwan)
        'zh-yue' => '粵語',                                   # Cantonese -- (see bug 8217)
        'zu' => 'isiZulu'               # Zulu
 );
index 965ea6a..5623f3c 100644 (file)
@@ -54,21 +54,4 @@ class LanguageHsb extends Language {
                return $word; # this will return the original value for 'nominatiw' (nominativ) and all undefined case values
        }
 
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 4 );
-
-               switch ( abs( $count ) % 100 ) {
-                       case 1:  return $forms[0]; // singular
-                       case 2:  return $forms[1]; // dual
-                       case 3:
-                       case 4:  return $forms[2]; // plural
-                       default: return $forms[3]; // pluralgen
-               }
-       }
 }
diff --git a/languages/classes/LanguageLn.php b/languages/classes/LanguageLn.php
deleted file mode 100644 (file)
index d7329d5..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-/**
- * Lingala (Lingála) specific code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Language
- */
-
-/**
- * Lingala (Lingála)
- *
- * @ingroup Language
- */
-class LanguageLn extends Language {
-       /**
-        * Use singular form for zero
-        * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#ln
-        *
-        * @param $count int
-        * @param $forms array
-        *
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-               $forms = $this->preConvertPlural( $forms, 2 );
-
-               return ( $count <= 1 ) ? $forms[0] : $forms[1];
-       }
-}
diff --git a/languages/classes/LanguageMo.php b/languages/classes/LanguageMo.php
deleted file mode 100644 (file)
index bf8a10d..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-/**
- * Moldavian (Молдовеняскэ) specific code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Language
- */
-
-/**
- * Moldavian (Молдовеняскэ)
- *
- * @ingroup Language
- */
-class LanguageMo extends Language {
-
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               // Plural rules per
-               // http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#mo
-               // Identical to Romanian (ro).
-               if ( !count( $forms ) ) { return ''; }
-
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               if ( $count == 1 ) {
-                       $index = 0;
-               } elseif ( $count == 0 || ( $count % 100 > 0 && $count % 100 < 20 ) ) {
-                       $index = 1;
-               } else {
-                       $index = 2;
-               }
-               return $forms[$index];
-       }
-}
diff --git a/languages/classes/LanguageRo.php b/languages/classes/LanguageRo.php
deleted file mode 100644 (file)
index 0db2ec0..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-/**
- * Romanian (Română) specific code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Language
- */
-
-/**
- * Romanian (Română)
- *
- * @ingroup Language
- */
-class LanguageRo extends Language {
-
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               // Plural rules per
-               // http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#ro
-               if ( !count( $forms ) ) { return ''; }
-
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               if ( $count == 1 ) {
-                       $index = 0;
-               } elseif ( $count == 0 || ( $count % 100 > 0 && $count % 100 < 20 ) ) {
-                       $index = 1;
-               } else {
-                       $index = 2;
-               }
-               return $forms[$index];
-       }
-}
diff --git a/languages/classes/LanguageSe.php b/languages/classes/LanguageSe.php
deleted file mode 100644 (file)
index 25b61c3..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/**
- * Northern Sami (Sámegiella) specific code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Language
- */
-
-/**
- * Northern Sami (Sámegiella)
- *
- * @ingroup Language
- */
-class LanguageSe extends Language {
-
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-
-               // plural forms per http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#se
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               if ( $count == 1 ) {
-                       $index = 0;
-               } elseif ( $count == 2 ) {
-                       $index = 1;
-               } else {
-                       $index = 2;
-               }
-               return $forms[$index];
-       }
-}
diff --git a/languages/classes/LanguageSma.php b/languages/classes/LanguageSma.php
deleted file mode 100644 (file)
index 1961871..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/**
- * Southern Sami (Åarjelsaemien) specific code.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Language
- */
-
-/**
- * Southern Sami (Åarjelsaemien)
- *
- * @ingroup Language
- */
-class LanguageSma extends Language {
-
-       /**
-        * @param $count int
-        * @param $forms array
-        * @return string
-        */
-       function convertPlural( $count, $forms ) {
-               if ( !count( $forms ) ) { return ''; }
-
-               // plural forms per http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html#sma
-               $forms = $this->preConvertPlural( $forms, 3 );
-
-               if ( $count == 1 ) {
-                       $index = 0;
-               } elseif ( $count == 2 ) {
-                       $index = 1;
-               } else {
-                       $index = 2;
-               }
-               return $forms[$index];
-       }
-}
index 8a4aca6..9e90c7f 100644 (file)
@@ -58,7 +58,9 @@ class LanguageWa extends Language {
         */
        function date( $ts, $adj = false, $format = true, $tc = false ) {
                $ts = wfTimestamp( TS_MW, $ts );
-               if ( $adj ) { $ts = $this->userAdjust( $ts, $tc ); }
+               if ( $adj ) {
+                       $ts = $this->userAdjust( $ts, $tc );
+               }
                $datePreference = $this->dateFormat( $format );
 
                # ISO (YYYY-mm-dd) format
index 54f23dc..65e27ca 100644 (file)
@@ -6,7 +6,7 @@
                        <pluralRule count="one">n is 1</pluralRule>
                        <pluralRule count="two">n is 2</pluralRule>
                </pluralRules>
-               <pluralRules locales="dsb">
+               <pluralRules locales="dsb hsb">
                        <pluralRule count="one">n mod 100 is 1</pluralRule>
                        <pluralRule count="two">n mod 100 is 2</pluralRule>
                        <pluralRule count="few">n mod 100 in 3..4</pluralRule>
@@ -31,5 +31,9 @@
                        <pluralRule count="twelve">n is 12</pluralRule>
                        <pluralRule count="few">n in 3..10 or n in 13..19</pluralRule>
                </pluralRules>
+               <!-- Hopefully temporary overrides for bug 40251 -->
+               <pluralRules locales="fa hu ja vi">
+                       <pluralRule count="one">n is 1</pluralRule>
+               </pluralRules>
        </plurals>
 </supplementalData>
index 8432df4..a2992c8 100644 (file)
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE supplementalData SYSTEM "../../common/dtd/ldmlSupplemental.dtd">
 <supplementalData>
-    <version number="$Revision: 6155 $"/>
-    <generation date="$Date: 2011-09-21 23:51:12 +0530 (ബു, 21 സെപ് 2011) $"/>
+    <version number="$Revision: 7657 $"/>
+    <generation date="$Date: 2012-08-29 11:20:56 -0700 (Wed, 29 Aug 2012) $"/>
     <plurals>
         <!-- if locale is known to have no plurals, there are no rules -->
-        <pluralRules locales="az bm bo dz fa id ig ii hu ja jv ka kde kea km kn ko lo ms my sah ses sg th to tr vi wo yo zh"/>
+        <pluralRules locales="az bm bo dz fa id ig ii hu ja jv ka kde kea km kn ko lo ms my sah ses sg th to tr vi wo yo zh"/> 
         <pluralRules locales="ar">
             <pluralRule count="zero">n is 0</pluralRule>
             <pluralRule count="one">n is 1</pluralRule>
             <pluralRule count="few">n mod 100 in 3..10</pluralRule>
             <pluralRule count="many">n mod 100 in 11..99</pluralRule>
         </pluralRules>
-        <pluralRules locales="asa af bem bez bg bn brx ca cgg chr da de dv ee el en eo es et eu fi fo fur fy gl gsw gu ha haw he is it jmc kaj kcg kk kl ksb ku lb lg mas ml mn mr nah nb nd ne nl nn no nr ny nyn om or pa pap ps pt rof rm rwk saq seh sn so sq ss ssy st sv sw syr ta te teo tig tk tn ts ur wae ve vun xh xog zu">
+        <pluralRules locales="he">
+            <pluralRule count="one">n is 1</pluralRule>
+            <pluralRule count="two">n is 2</pluralRule>
+            <pluralRule count="many">n is not 0 AND n mod 10 is 0</pluralRule>
+        </pluralRules>
+        <pluralRules locales="asa ast af bem bez bg bn brx ca cgg chr ckb da de dv ee el en eo es et eu fi fo fur fy gl gsw gu ha haw is it jgo jmc kaj kcg kk kkj kl ks ksb ku ky lb lg mas mgo ml mn mr nah nb nd ne nl nn nnh no nr ny nyn om or os pa pap ps pt rof rm rwk saq seh sn so sq ss ssy st sv sw syr ta te teo tig tk tn ts ur vo wae ve vun xh xog zu">
             <pluralRule count="one">n is 1</pluralRule>
         </pluralRules>
         <pluralRules locales="ak am bh fil tl guw hi ln mg nso ti wa">
@@ -93,7 +98,7 @@
             <pluralRule count="one">n mod 10 is 1 and n mod 100 not in 11,71,91</pluralRule>
             <pluralRule count="two">n mod 10 is 2 and n mod 100 not in 12,72,92</pluralRule>
             <pluralRule count="few">n mod 10 in 3..4,9 and n mod 100 not in 10..19,70..79,90..99</pluralRule>
-            <pluralRule count="many">n mod 1000000 is 0 and n is not 0</pluralRule>
+            <pluralRule count="many">n is not 0 and n mod 1000000 is 0</pluralRule>
         </pluralRules>
         <pluralRules locales="ksh">
             <pluralRule count="zero">n is 0</pluralRule>
index 7803258..e763f58 100644 (file)
@@ -336,7 +336,7 @@ $messages = array(
 'history_short' => 'Atra u likôt',
 'updatedmarker' => 'geuubah yoh seunaweue keuneulheueh lon phon kon',
 'printableversion' => 'Seunalén citak',
-'permalink' => 'Hubông teutap',
+'permalink' => 'Neuhubông teutap',
 'print' => 'Rakam',
 'view' => 'Beuet',
 'edit' => 'Andam',
@@ -354,13 +354,13 @@ $messages = array(
 'unprotectthispage' => 'Gantoe neulindông ôn nyoë',
 'newpage' => 'Ôn barô',
 'talkpage' => 'Peugah haba bhah ôn nyoë',
-'talkpagelinktext' => 'Peugah haba',
+'talkpagelinktext' => 'Marit',
 'specialpage' => 'Ôn kusuih',
 'personaltools' => 'Alat droë',
 'postcomment' => 'Beunagi baro',
 'articlepage' => 'Eu ôn asoë',
 'talk' => 'Peugah haba',
-'views' => 'Leumah',
+'views' => 'Ôn',
 'toolbox' => 'Plôk alat',
 'userpage' => 'Eu on ureueng nguy',
 'projectpage' => 'Eu ôn buët',
@@ -376,9 +376,14 @@ $messages = array(
 'lastmodifiedat' => 'Ôn nyoë keuneulheuëh geu’ubah bak $2, $1.',
 'viewcount' => 'On nyoe ka geusaweue {{PLURAL:$1|sigo|$sigo}}.<br />',
 'protectedpage' => 'Ôn teupeulindông',
-'jumpto' => 'Langsông u:',
+'jumpto' => 'Lansông u:',
 'jumptonavigation' => 'navigasi',
 'jumptosearch' => 'mita',
+'view-pool-error' => "Meu'ah, server teungoh sibuk jinoe
+Le that ureueng nyang meuh'eut jak eu on nyoe
+Neupreh si'at yoh goh neubaci lom
+
+$1",
 'pool-timeout' => 'Liwat watee preh gunci',
 'pool-queuefull' => 'Seunapat neupreh peunoh',
 'pool-errorunknown' => 'Salah hana meukon',
@@ -405,13 +410,21 @@ $messages = array(
 
 'badaccess' => 'Salah khut/hak tamöng',
 'badaccess-group0' => 'Droeneuh hana geupeuidin keu neupeulaku buet nyang neulakee',
+'badaccess-groups' => 'Buet nyang neulakee geupeubatah keu ureueng nguy lam {{PLURAL:$2|kawan|salah saboh nibak kawan}}: $1.',
 
 'versionrequired' => 'Peureulee MediaWiki versi $1',
+'versionrequiredtext' => "MediaWiki versi $1 geupeureulee keu neunguy on nyoe. Neu'eu [[Special:Version|on versi]]",
 
-'retrievedfrom' => 'Meurumpok nibak "$1"',
+'ok' => 'Ka göt',
+'retrievedfrom' => 'Geurumpok nibak "$1"',
 'youhavenewmessages' => 'Droëneuh   na $1 ($2).',
 'newmessageslink' => 'peusan barô',
 'newmessagesdifflink' => 'neuubah keuneulheuëh',
+'youhavenewmessagesfromusers' => "Droeneuh na $1 nibak {{PLURAL:$3||}}ureueng nguy la'en ($2).",
+'youhavenewmessagesmanyusers' => "Droeneuh na $1 nibak ureueng nguy la'en ($2)",
+'newmessageslinkplural' => '{{PLURAL:$1|saboh peusan baro|peusan baro}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|neuubah|neuubah}} baro',
+'youhavenewmessagesmulti' => 'Droëneuh na padum boh peusan barô bak $1',
 'editsection' => 'andam',
 'editold' => 'andam',
 'viewsourceold' => 'Eu nè',
@@ -421,11 +434,21 @@ $messages = array(
 'toc' => 'Asoë',
 'showtoc' => 'peuleumah',
 'hidetoc' => 'peusom',
+'collapsible-collapse' => 'Peuubeut',
+'collapsible-expand' => 'Peuluwaih',
+'thisisdeleted' => 'Eu atawa peuriwang $1?',
+'viewdeleted' => 'Eu $1?',
+'restorelink' => '$1 {{PLURAL:$1|neuandam|neuandam}} nyang ka geusampoh',
+'feedlinks' => 'Umpeuen:',
+'feed-invalid' => 'Jeuneh neulakee umpeuen hana paih',
+'feed-unavailable' => 'Umpeuen sindikasi hana',
 'site-rss-feed' => 'Umpeuën RSS $1',
 'site-atom-feed' => 'Umpeuën Atôm $1',
 'page-rss-feed' => 'Umpeuën RSS "$1"',
 'page-atom-feed' => 'Umpeuën Atom "$1"',
 'red-link-title' => '$1 (ôn goh na)',
+'sort-descending' => 'Peuurot tren',
+'sort-ascending' => 'Peuurot ek',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Ôn',
@@ -439,15 +462,35 @@ $messages = array(
 'nstab-help' => 'Beunantu',
 'nstab-category' => 'Kawan',
 
+# Main script and global functions
+'nosuchaction' => 'Hana buet nyan',
+'nosuchactiontext' => 'Buet nyang geulakee le URL nyan hana sah. Droeneuh kadang salah neukeutik URL, atawa neuseutot saboh neuhubong nyang hana beutoy. Hay nyoe kadang jeuet keu lageuem saboh bug bak alat leumiek nyang geunguy le {{SITENAME}}.',
+'nosuchspecialpage' => 'Hana on kusuih lagee nyan',
+'nospecialpagetext' => '<strong>Droeneuh neulakee on kusuih nyang hana sah.</strong>',
+
 # General errors
 'error' => 'Seunalah',
 'databaseerror' => 'Kesalahan basis data',
+'dberrortext' => 'Na salah bak syntax neulakee basis data.
+Nyoe kadang tanda na saboh bug lam alat leumiek.
+Neulakee basis data keuneulheueh nakeuh:
+<blockquote><code>$1</code></blockquote>
+nibak function "<code>$2</code>".
+Basis data na salah "<samp>$3: $4</samp>".',
+'dberrortextcl' => 'Na salah sintaks bak neulakee basis data.
+Neulakee basis data nyang keuneulheueh nakeuh:
+"$1"
+nibak fungsi "$2"
+Basis data geupeuhase salah "$3: $4".',
+'laggedslavemode' => 'Peuneugah: On nyoe kadang hana neuubah baro',
 'missing-article' => 'Basis data h’an jeuët jiteumèë naseukah nibak ôn nyang sipatôtjih na, nakeuh "$1" $2.
 
 Nyoë biasajih sabab hubông useuëng u geunantoë away nyang ka teusampôh.
 
 Meunyo kön nyoë sababjih, Droëneuh kadang ka neuteumèë saboh bug lam software. Neutulông peugah bhah nyoë bak salah sidroë [[Special:ListUsers/sysop|Nyang urôh]], ngön neupeugah alamat URL nyang neusaweuë.',
 'missingarticle-rev' => '(revisi#: $1)',
+'internalerror' => 'Salah bak dalam',
+'internalerror_info' => 'Salah bak dalam: $1',
 'badtitle' => 'Nan hana sah',
 'badtitletext' => 'Nan ôn nyang neulakèë hana sah, soh, atawa nan antarabahsa atawa antarawiki nyang salah sambông.',
 'viewsource' => 'Eu nè',
@@ -642,7 +685,7 @@ Alasan-alasan nyan hana geupeureumeuen.",
 'searchprofile-images-tooltip' => 'Mita beureukaih',
 'searchprofile-everything-tooltip' => 'Mita ban dum ôn asoë (rôh ôn marit)',
 'searchprofile-advanced-tooltip' => 'Mita bak ruweueng nan meupat-pat',
-'search-result-size' => '$1 ({{PLURAL:$2|1 kata|$2 kata}})',
+'search-result-size' => '$1 ({{PLURAL:$2|1 narit|$2 narit}})',
 'search-result-category-size' => '{{PLURAL:$1|1 anggeeta|$1 anggeeta}} ({{PLURAL:$2|1 aneuk kawan|$2 aneuk kawan}}, {{PLURAL:$3|1 beureukaih|$3 beureukaih}})',
 'search-redirect' => '(peuninah $1)',
 'search-section' => '(bagian $1)',
@@ -732,7 +775,7 @@ Ceunatat: (bida) = neuubah, (riwayat) = riwayat teumuléh, '''B''' = ôn barô,
 'recentchangeslinked-to' => 'Peuleumah neu’ubah nibak ôn-ôn nyang meusambông ngön ôn nyang geubri',
 
 # Upload
-'upload' => 'Peutamong',
+'upload' => 'Peutamong beureukaih',
 'uploadbtn' => 'Peutamong beureukah',
 'uploadlogpage' => 'Log peutamöng',
 'filedesc' => 'Ehtisa',
@@ -932,7 +975,7 @@ Droëneuh jeuët neugantoë tingkat lindông keu ôn nyoë, tapi nyan hana peung
 # Namespace form on various pages
 'namespace' => 'Ruweuëng nan:',
 'invert' => 'Peubalék peuniléh',
-'blanknamespace' => '(Utama)',
+'blanknamespace' => '(Keuë)',
 
 # Contributions
 'contributions' => 'Peuneugöt',
@@ -955,7 +998,7 @@ Droëneuh jeuët neugantoë tingkat lindông keu ôn nyoë, tapi nyan hana peung
 'sp-contributions-submit' => 'Mita',
 
 # What links here
-'whatlinkshere' => 'Hubông balék',
+'whatlinkshere' => 'Neuhubông balék',
 'whatlinkshere-title' => 'Ôn nyang na hubông u $1',
 'whatlinkshere-page' => 'Ôn:',
 'linkshere' => "Ôn-ôn nyoë meuhubông u '''[[:$1]]''':",
@@ -1033,10 +1076,10 @@ Lam masalah nyoë, meunyo neuhawa, Droëneuh jeuët neupeupinah atawa neupeugab
 'tooltip-pt-preferences' => 'Atô',
 'tooltip-pt-watchlist' => 'Dapeuta ôn nyang lôn kalön',
 'tooltip-pt-mycontris' => 'Dapeuta peuneugöt Droëneuh',
-'tooltip-pt-login' => 'Droën geupeusaran keu tamong log, bahpih nyan hana geupeuwajéb.',
+'tooltip-pt-login' => 'Droëneuh geupadan keu tamong log, bah pih nyan hana geupeuwajéb.',
 'tooltip-pt-logout' => 'Teubiët',
 'tooltip-ca-talk' => 'Peugah haba ôn asoë',
-'tooltip-ca-edit' => 'Andam ôn nyoë. Nguy tumbôy euë dilèë yôh goh lom keumeubah.',
+'tooltip-ca-edit' => 'Droëneuh jeuët neuandam ôn nyoë. Neunguy tumbôy eu dilèë yôh goh neukeubah.',
 'tooltip-ca-addsection' => 'Puphôn beunagi barô',
 'tooltip-ca-viewsource' => 'Ôn nyoë geupeulindông.
 Droëneuh cit jeuët neu’eu nèjih.',
@@ -1046,24 +1089,24 @@ Droëneuh cit jeuët neu’eu nèjih.',
 'tooltip-ca-move' => 'Peupinah ôn nyoë',
 'tooltip-ca-watch' => 'Peutamah ôn nyoë u dapeuta kalön Droëneuh',
 'tooltip-ca-unwatch' => 'Sampôh ôn nyoë nibak dapeuta keunalön Droëneuh',
-'tooltip-search' => 'Mita lam {{SITENAME}} nyoë',
+'tooltip-search' => 'Mita {{SITENAME}}',
 'tooltip-search-go' => 'Mita saboh ôn ngon nan nyang peureuséh lagèë nyoë meunyo na',
 'tooltip-search-fulltext' => 'Mita ôn nyang na asoë lagèë nyoë',
 'tooltip-p-logo' => 'Saweuë Ôn Keuë',
 'tooltip-n-mainpage' => 'Jak u Ôn Keuë',
 'tooltip-n-mainpage-description' => 'Saweuë Ôn Keuë',
-'tooltip-n-portal' => 'Bhah buët, peuë nyang jeuët neupeulaku, pat tamita sipeuë hay',
-'tooltip-n-currentevents' => 'Mita beurita nyang paléng barô',
+'tooltip-n-portal' => 'Bhaih buët, peuë nyang jeuët neupeulaku, pat tamita sipeuë hay',
+'tooltip-n-currentevents' => 'Mita haba barô',
 'tooltip-n-recentchanges' => 'Dapeuta nyang ban meu’ubah lam wiki.',
 'tooltip-n-randompage' => 'Peuleumah beurangkari ôn',
 'tooltip-n-help' => 'Bak mita bantu.',
-'tooltip-t-whatlinkshere' => 'Dapeuta mandum ôn wiki nyang na hubông u ôn nyoë',
+'tooltip-t-whatlinkshere' => 'Dapeuta ban dum ôn wiki nyang na neuhubông u ôn nyoë',
 'tooltip-t-recentchangeslinked' => 'Neuubah barô ôn-ôn nyang na hubông u ôn nyoë',
 'tooltip-feed-rss' => 'Umpeuën RSS keu ôn nyoë',
 'tooltip-feed-atom' => 'Umpeuën Atom keu ôn nyoë',
 'tooltip-t-contributions' => 'Eu dapeuta nyang ka geutuléh lé ureuëng nguy nyoë',
 'tooltip-t-emailuser' => 'Kirém surat-e u ureuëng nguy nyoë',
-'tooltip-t-upload' => 'Peutamong gamba atawa beureukah alat',
+'tooltip-t-upload' => 'Peutamong beureukaih',
 'tooltip-t-specialpages' => 'Dapeuta ban dum ôn kusuih',
 'tooltip-t-print' => 'Seunalén citak ôn nyoë',
 'tooltip-t-permalink' => '
index b85ee8c..322ebc4 100644 (file)
@@ -1417,8 +1417,9 @@ $1",
 'revdelete-only-restricted' => 'خطأ إخفاء العنصر المؤرخ $2, $1: لا تستطيع تنحية العناصر من عرض الإداريين بدون أن تحدد أيضا إحدى خيارات التنحية الأخرى.',
 'revdelete-reason-dropdown' => '* أسباب حذف عامة
 ** خرق لحقوق النشر
-** معلومات شخصية غير ملائمة
-**معلومات تشهيرية محتملة',
+** تعليق أو معلومات شخصية غير ملائمة
+** اسم مستخدم غير ملائم
+** معلومات تشهيرية محتملة',
 'revdelete-otherreason' => 'سبب آخر/إضافي:',
 'revdelete-reasonotherlist' => 'سبب آخر',
 'revdelete-edit-reasonlist' => 'عدل أسباب الحذف',
@@ -2048,7 +2049,7 @@ $1',
 'backend-fail-internal' => 'وقع خطأ غير معروف في خلفية التخزين "$1".',
 'backend-fail-contenttype' => 'تعذر تحديد نوع محتوى الملف الذي تريد تخزينه في "$1".',
 'backend-fail-batchsize' => 'أعطت خلفية التخزين دفعة $1 ملف {{PLURAL:$1|عملية|عمليات}}; الحد الأقصى هو $2 {{PLURAL:$2|عملية|عمليات}}.',
-'backend-fail-usable' => 'تعذر Ù\83تابة Ø§Ù\84Ù\85Ù\84Ù\81 $1 لنقص في التراخيص أو فقدان الدلائل/الحاويات.',
+'backend-fail-usable' => 'تعذر Ù\82راءة Ø£Ù\88 Ù\83تابة Ø§Ù\84Ù\85Ù\84Ù\81 "$1" لنقص في التراخيص أو فقدان الدلائل/الحاويات.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'تعذر ربط الإتصال بقاعدة بيانات خلفية التخزين "$1".',
@@ -2648,8 +2649,8 @@ $UNWATCHURL
 'protect-title' => 'ضبط مستوى الحماية ل"$1"',
 'protect-title-notallowed' => 'عرض مستوى الحماية ل "$1"',
 'prot_1movedto2' => 'نُقلت [[$1]] إلى [[$2]]',
-'protect-badnamespace-title' => 'Ù\85ساحة Ø¥Ø³Ù\85 ØºÙ\8aر Ù\85Ø­Ù\85Ù\8aØ©',
-'protect-badnamespace-text' => 'لا يمكن حماية الصفحات الموجودة في مساحة الإسم',
+'protect-badnamespace-title' => 'Ù\86طاÙ\82 Ù\84ا Ù\8aØ­Ù\85Ù\89',
+'protect-badnamespace-text' => 'صفحات هذا النطاق لا يمكن حمايتها',
 'protect-legend' => 'تأكيد الحماية',
 'protectcomment' => 'السبب:',
 'protectexpiry' => 'تنتهي في:',
@@ -2850,7 +2851,7 @@ $1',
 'ipb-confirm' => 'أكّد المنع',
 'badipaddress' => 'عنوان أيبي غير صحيح',
 'blockipsuccesssub' => 'تم المنع بنجاح',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] تم منعها.<br />
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] تم {{GENDER:$1|منعه|منعها}}.<br />
 أنظر [[Special:BlockList|قائمة منع الآيبي]] لمراجعة حالات المنع.',
 'ipb-blockingself' => 'أنت على وشك منع نفسك! أمتأكد من رغبتك في القيام بذلك؟',
 'ipb-confirmhideuser' => 'أنت على وشك منع مستخدم مع تفعيل خيار "أخف المستخدم". سوف يخفي هذا الخيار اسم المستخدم من جميل القوائم ومدخلات السجلات. أمتأكد من رغبتك في القيام بذلك؟',
@@ -3158,7 +3159,7 @@ $1',
 'import-error-edit' => 'الصفحة "$1" لم يتم استيرادها لأنه لا يمكن لك تحريرها.',
 'import-error-create' => 'الصفحة "$1" لم يتم استيرادها لأنه لا يمكن لك استحداثها أصلا.',
 'import-error-interwiki' => 'تعذر أستيراد الصفحة "$1" بسبب أن إسمها محجوز للربط الخارجي (interwiki).',
-'import-error-special' => 'تعذر Ø£Ø³ØªÙ\8aراد Ø§Ù\84صÙ\81حة "$1" Ù\84Ø£Ù\86Ù\87ا ØªÙ\86تÙ\85Ù\8a Ø¥Ù\84Ù\89 Ù\85ساحة Ø¥Ø³Ù\85 Ø®Ø§ØµØ© Øªمنع الصفحات.',
+'import-error-special' => 'صÙ\81حة "$1" Ù\84Ù\85 ØªØ³ØªÙ\88رد Ù\84Ø£Ù\86Ù\87ا ØªÙ\86تÙ\85Ù\8a Ø¥Ù\84Ù\89 Ù\86طاÙ\82 Ø®Ø§Øµ Ù\8aمنع الصفحات.',
 'import-error-invalid' => 'تعذر أستيراد الصفحة "$1" بسبب أن إسمها غير صحيح.',
 'import-options-wrong' => 'خطأ {{PLURAL:$2|خيار|خيارات}}: <nowiki>$1</nowiki>',
 'import-rootpage-invalid' => 'إن عنوان الصفحة الجذر المعطاة هي ذات عنوان غير صالح.',
@@ -3340,7 +3341,7 @@ $1',
 'pageinfo-authors' => 'عدد المؤلفين المختلفين',
 'pageinfo-recent-edits' => 'عدد التعديلات الأخيرة (خلال  $1 يوم/أيام)',
 'pageinfo-recent-authors' => 'عدد المؤلفين المختلفين الأخيرين',
-'pageinfo-restriction' => 'حماية الصفحة (<code>$1</code>)',
+'pageinfo-restriction' => 'حماية الصفحة ($1)',
 'pageinfo-magic-words' => 'السحرية {{PLURAL:$1|الكلمة|الكلمات}} ($1)',
 'pageinfo-hidden-categories' => 'مخفية {{PLURAL:$1|فئة|فئات}} ($1)',
 'pageinfo-templates' => 'متضمنة {{PLURAL:$1|قالب|قوالب}} ($1)',
@@ -4136,7 +4137,7 @@ $5
 
 # Signatures
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|نقاش]])',
-'timezone-utc' => 'باÙ\84تÙ\88Ù\82Ù\8aت Ø§Ù\84عاÙ\84Ù\85Ù\8a',
+'timezone-utc' => 'ت Ø¹ Ù\85',
 
 # Core parser functions
 'unknown_extension_tag' => 'وسم امتداد غير معروف "$1"',
index 147d19a..e26e5ae 100644 (file)
@@ -187,9 +187,12 @@ $messages = array(
 'category-empty' => "''ܗܢܐ ܣܕܪܐ ܗܫܐ ܠܝܬ ܒܗ ܦܐܬܬ̈ܐ ܐܘ ܡܝܕܝܐ.''",
 'hidden-categories' => '{{PLURAL:$1|ܣܕܪܐ ܛܘܫܝܐ|ܣܕܪ̈ܐ ܛܘܫܝܐ}}',
 'hidden-category-category' => 'ܣܕܪ̈ܐ ܛܘܫܝ̈ܐ',
+'category-subcat-count' => '{{PLURAL:$2|ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ ܗܢܐ ܣܕܪܐ ܦܪܥܝܐ ܕܐܬܐ ܒܠܚܘܕ.|ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ {{PLURAL:$1|ܣܕܪܐ ܦܪܥܝܐ ܕܐܬܐ|$1 ܣܕܪ̈ܐ ܦܪ̈ܥܝܐ ܕܐܬܝܢ}}، ܡܢ ܣܘܝܟܐ ܕ $2.}}',
 'category-subcat-count-limited' => 'ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ {{PLURAL:$1|ܣܕܪܐ ܦܪܥܝܐ ܗܢܐ|$1 ܣܕܪ̈ܐ ܦܪ̈ܥܝܐ ܗܠܝܢ}}.',
-'category-article-count' => '{{PLURAL:$2|ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ ܦܐܬܐ ܗܕܐ ܒܠܚܘܕ.|ܐܝܬ {{PLURAL:$1|ܦܐܬܐ|$1 ܦܐܬܬ̈ܐ}} ܒܣܕܪܐ ܗܢܐ، ܡܢ $2 ܟܠܢܐܝܬ.}}',
+'category-article-count' => '{{PLURAL:$2|ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ ܦܐܬܐ ܗܕܐ ܒܠܚܘܕ.|ܐܝܬ {{PLURAL:$1|ܦܐܬܐ|$1 ܦܐܬܬ̈ܐ}} ܒܣܕܪܐ ܗܢܐ، ܡܢ ܣܘܝܟܐ ܕ$2.}}',
 'category-article-count-limited' => '{{PLURAL:$1|ܦܐܬܐ ܗܕܐ|$1 ܦܐܬܬ̈ܐ ܗܠܝܢ}} ܒܣܕܪܐ ܗܢܐ.',
+'category-file-count' => '{{PLURAL:$2|ܣܕܪܐ ܗܢܐ ܐܝܬ ܒܗ ܠܦܦܐ ܗܢܐ ܒܠܚܘܕ.|{{PLURAL:$1|ܠܦܦܐ ܕܐܬܐ ܐܝܬܘܗܝ|$1 ܠܦܦ̈ܐ ܕܐܬܝܢ ܐܝܬܝܗܘܢ}} ܒܣܕܪܐ ܗܢܐ، ܡܢ ܣܘܝܟܐ ܕ$2.}}',
+'category-file-count-limited' => 'ܐܝܬ {{PLURAL:$1|ܠܦܦܐ ܕܐܬܐ|$1 ܠܦܦ̈ܐ ܕܐܬܝܢ}} ܒܣܕܪܐ ܗܫܝܐ.',
 'listingcontinuesabbrev' => '(ܫܘܠܡܐ)',
 
 'about' => 'ܡܢܘ',
@@ -320,6 +323,10 @@ $1',
 'youhavenewmessages' => 'ܐܝܬ ܠܟ $1 ($2).',
 'newmessageslink' => 'ܐܓܪ̈ܬܐ ܚܕ̈ܬܬܐ',
 'newmessagesdifflink' => 'ܫܘܚܠܦܐ ܐܚܪܝܐ',
+'youhavenewmessagesfromusers' => 'ܐܝܬ ܠܟ $1 ܡܢ {{PLURAL:$3|ܡܦܠܚܢܐ ܐܚܪܢܐ|$3 ܡܦܠܚܢ̈ܐ}} ($2).',
+'youhavenewmessagesmanyusers' => 'ܐܝܬ ܠܟ $1 ܡܢ ܡܦܠܚܢ̈ܐ ܣܓܝܐ̈ܐ ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|ܐܓܪܬܐ ܚܕܬܐ|ܐܓܪ̈ܬܐ ܚܕ̈ܬܬܐ}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|ܫܘܚܠܦܐ ܐܚܪܝܐ|ܫܘܚܠܦ̈ܐ ܐܚܪ̈ܝܐ}}',
 'youhavenewmessagesmulti' => 'ܐܝܬ ܠܟ ܐܓܪ̈ܬܐ ܚܕ̈ܬܬܐ ܒ $1',
 'editsection' => 'ܫܚܠܦ',
 'editold' => 'ܫܚܠܦ',
@@ -368,11 +375,12 @@ $1',
 'viewsource' => 'ܚܙܝ ܡܒܘܥܐ',
 'viewsource-title' => 'ܚܙܝ ܡܒܘܥܐ ܕ $1',
 'actionthrottled' => 'ܠܐ ܡܬܡܨܝܢܬܐ ܐܝܬܝܗܝ ܠܡܥܒܕ ܝܬܝܪ ܡܢ ܗܢܐ ܥܒܕܐ',
-'viewsourcetext' => 'ܡܨܐ ܐܢܬ ܕܢܚܙܐ ܘܢܣܚܐ ܠܡܒܘ̈ܥܐ ܕܗܕܐ ܦܐܬܐ:',
-'protectedinterface' => 'ܗܕܐ ܦܐܬܐ ܡܘܬܪܐ ܟܬܝܒܬܐ ܕܦܐܬܐ ܠܚܘܪܙܐ, ܘܐܝܬܝܗܝ ܢܛܪܬܐ ܠܡܘܢܥ ܚܘܒܠܐ.',
+'viewsourcetext' => 'ܡܨܐ ܐܢܬ ܕܬܚܙܐ ܘܬܢܣܚ ܠܡܒܘ̈ܥܐ ܕܗܕܐ ܦܐܬܐ:',
+'protectedinterface' => 'ܗܕܐ ܦܐܬܐ ܡܘܬܪܐ ܟܬܝܒܬܐ ܕܦܐܬܐ ܠܚܘܪܙܐ ܒܗܢܐ ܘܝܩܝ, ܘܐܝܬܝܗܝ ܢܛܪܬܐ ܠܡܘܢܥ ܚܘܒܠܐ.
+ܠܡܘܣܦ ܐܘ ܫܘܚܠܦ ܬܘܪ̈ܓܡܐ ܕܟܠܗܘܢ ܘܝܩܝ، ܐܦܠܚ [//translatewiki.net/ translatewiki.net]، ܬܪܡܝܬܐ ܕܬܘܪܓܡܐ ܕܡܝܕܝܐܘܝܩܝ.',
 'editinginterface' => "'''ܙܘܗܪܐ:''' ܐܢܬ ܫܚܠܦܬ ܦܐܬܐ ܕܡܬܦܠܚܬ ܒܚܙܝܐ ܟܬܝܒܝܐ ܕܬܚܪܙܬܐ.
-ܟܠ ܫܘܚܠܦܐ ܒܦܐܬܐ ܗܕܐ ܢܗܘܐ ܠܗ ܡܥܒܕܢܘܬܐ ܥܠ ܐܣܟܡܐ ܕܦܐܬܐ ܕܡܦܠܚܢܐ ܕܡܦܠܚܢ̈ܐ ܐܚܪ̈ܢܐ.
-ܠܬÜ\98ܪÌ\88Ü\93Ü¡Ü\90Ø\8c Ü\90ܦܠÜ\9a Ü¬ÜªÜ¡Ü\9dܬÜ\90 Ü\95ܬÜ\98ܪÜ\93Ü¡Ü\90 Ü\95Ü¡Ü\9dÜ\95Ü\9dÜ\90Ü\98Ü\9dÜ©Ü\9d [//translatewiki.net/wiki/Main_Page?setlang=ar translatewiki.net].",
+ܟܠ ܫܘܚܠܦܐ ܒܦܐܬܐ ܗܕܐ ܢܗܘܐ ܠܗ ܡܥܒܕܢܘܬܐ ܥܠ ܐܣܟܡܐ ܕܦܐܬܐ ܕܡܦܠܚܢܐ ܕܡܦܠܚܢ̈ܐ ܐܚܪ̈ܢܐ ܒܘܝܩܝ ܗܢܐ.
+Ü Ü¡Ü\98ܣܦ Ü\90Ü\98 Ü«Ü\98Ü\9aܠܦ Ü¬Ü\98ܪÌ\88Ü\93Ü¡Ü\90 Ü\95Ü\9fÜ Ü\97Ü\98Ü¢ Ü\98Ü\9dÜ©Ü\9dØ\8c Ü\90ܦܠÜ\9a [//translatewiki.net/ translatewiki.net]Ø\8c Ü¬ÜªÜ¡Ü\9dܬÜ\90 Ü\95ܬÜ\98ܪÜ\93Ü¡Ü\90 Ü\95Ü¡Ü\9dÜ\95Ü\9dÜ\90Ü\98Ü\9dÜ©Ü\9d.",
 'sqlhidden' => '(ܒܘܬܬܐ SQL ܛܫܝܐ)',
 'namespaceprotected' => "ܠܝܬ ܠܟ ܦܣܣܐ ܠܫܚܠܦܬܐ ܕܦܐܬܬ̈ܐ ܒܚܩܠܐ ܕ'''$1'''.",
 
@@ -517,12 +525,12 @@ $1',
 'currentrev-asof' => 'ܬܢܝܬܐ ܗܫܝܬܐ ܒܣܝܩܘܡ $1',
 'revisionasof' => 'ܬܢܝܬܐ ܒܣܝܩܘܡ $1',
 'revision-info' => 'ܬܢܝܬܐ ܒܣܝܩܘܡ $1 ܒܝܕ $2',
-'previousrevision' => 'â\86\90 Ü¬Ü¢Ü\9dܬÜ\90 Ü¥Ü¬Ü\9dܩܬÜ\90',
-'nextrevision' => 'ܬܢÜ\9dܬÜ\90 Ü\9aÜ\95ܬÜ\90 →',
+'previousrevision' => 'â\86\90 Ü¬Ü¢Ü\9dܬÜ\90 Ü\95Ü©Ü\95Ü¡',
+'nextrevision' => 'ܬܢÜ\9dܬÜ\90 Ü\95Ü\92ܬܪ →',
 'currentrevisionlink' => 'ܬܢܝܬܐ ܗܫܝܬܐ',
 'cur' => 'ܗܫܝܐ',
-'next' => 'ܒܬܪ',
-'last' => 'ܩܕܡ',
+'next' => 'Ü\95Ü\92ܬܪ',
+'last' => 'Ü\95Ü©Ü\95Ü¡',
 'page_first' => 'ܩܕܡܝܐ',
 'page_last' => 'ܐܚܪܝܐ',
 'histlegend' => "ܓܒܝܐ ܕܦܘܪܫܐ: ܓܒܝ ܣܢܕ̈ܘܩܐ ܕܬܢܝܬ̈ܐ ܠܦܘܚܡܐ ܘܕܘܫ '''Enter''' ܐܘ '''ܦܚܘܡ ܒܝܢܝ ܬܪܝܢ ܬܢܝܬ̈ܐ ܓܒܝܬ̈ܐ'''.<br />
@@ -600,10 +608,10 @@ $1',
 'notitlematches' => 'ܠܝܬ ܫܡܐ ܕܦܐܬܐ ܐܘܝܢܐ',
 'textmatches' => 'ܟܬܒܬܐ ܐܘܝܢܬܐ',
 'notextmatches' => 'ܠܝܬ ܟܬܒܬܐ ܐܘܝܢܬܐ',
-'prevn' => '{{PLURAL:$1|$1}} Ü©Ü\95Ü\9dÜ¡Ü\90',
-'nextn' => '{{PLURAL:$1|$1}} Ü\90Ü\9aܪܢÜ\90',
-'prevn-title' => '$1 {{PLURAL:$1|ܦܠܛܐ ܩܕܝܡܐ|ܦܠܛ̈ܐ ܩܕ̈ܝܡܐ}}',
-'nextn-title' => '$1 {{PLURAL:$1|ܦܠܛܐ ܐܚܪܢܐ|ܦܠܛ̈ܐ ܐܚܪ̈ܢܐ}}',
+'prevn' => '{{PLURAL:$1|$1}} Ü\95Ü©Ü\95Ü¡',
+'nextn' => '{{PLURAL:$1|$1}} Ü\95Ü\92ܬܪ',
+'prevn-title' => '$1 {{PLURAL:$1|ܦܠܛܐ|ܦܠܛ̈ܐ}} ܕܩܕܡ',
+'nextn-title' => '$1 {{PLURAL:$1|ܦܠܛܐ|ܦܠܛ̈ܐ}} ܕܒܬܪ',
 'shown-title' => 'ܚܘܝ $1 {{PLURAL:$1|ܦܠܛܐ|ܦܠܛ̈ܐ}} ܠܟܠ ܦܐܬܐ',
 'viewprevnext' => 'ܚܘܝ ($1 {{int:pipe-separator}} $2) ($3)',
 'searchmenu-legend' => 'ܓܒܝܬ̈ܐ ܕܒܨܝܐ',
@@ -617,6 +625,7 @@ $1',
 'searchprofile-advanced' => 'ܡܬܩܕܡܢܐ',
 'searchprofile-articles-tooltip' => 'ܒܨܝ ܒ $1',
 'searchprofile-project-tooltip' => 'ܒܨܝ ܒ $1',
+'searchprofile-images-tooltip' => 'ܒܨܝ ܥܠ ܠܦܦ̈ܐ',
 'search-result-size' => '$1 ({{PLURAL:$2|1 ܡܠܬܐ|$2 ܡܠ̈ܐ}})',
 'search-redirect' => '(ܨܝܒ $1)',
 'search-section' => '(ܡܢܬܐ $1)',
@@ -663,6 +672,7 @@ $1',
 'prefs-watchlist-days-max' => 'ܠܡܬܚܐ ܥܠܝܐ ܕ $1 {{PLURAL:$1|ܝܘܡܐ|ܝܘܡܬ̈ܐ}}',
 'prefs-misc' => 'ܦܪ̈ܝܫܬܐ',
 'prefs-resetpass' => 'ܫܚܠܦ ܡܠܬܐ ܕܥܠܠܐ',
+'prefs-changeemail' => 'ܫܚܠܦ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ',
 'prefs-email' => 'ܓܒܝܬ̈ܐ ܕܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ',
 'prefs-rendering' => 'ܐܣܟܝܡܐ',
 'saveprefs' => 'ܠܒܘܟ',
@@ -686,7 +696,7 @@ $1',
 'timezoneregion-europe' => 'ܐܘܪܘܦܐ',
 'timezoneregion-indian' => 'ܐܘܩܝܢܘܣ ܗܢܕܘܝܐ',
 'timezoneregion-pacific' => 'ܐܘܩܝܢܘܣ ܫܩܛܝܐ',
-'prefs-searchoptions' => 'Ü\93Ü\92Ü\9dܬÌ\88Ü\90 Ü\95Ü\92ܨÜ\9dÜ\90',
+'prefs-searchoptions' => 'ܒܨܝܐ',
 'prefs-namespaces' => 'ܚܩܠܬ̈ܐ',
 'defaultns' => 'ܐܘ ܒܨܝ ܒܚܩܠܬ̈ܐ ܗܢܝܢ',
 'prefs-files' => 'ܠܦܦ̈ܐ',
@@ -849,6 +859,7 @@ $1',
 'minlength1' => 'ܫܡܗ̈ܐ ܕܠܦܦܐ ܘܠܐ ܕܢܗܘܐ ܒܪܝܐ ܡܢ ܐܬܘܬܐ ܚܕܐ ܟܕ ܙܥܘܪ',
 'uploadwarning' => 'ܐܣܩ ܙܘܗܪܐ',
 'savefile' => 'ܠܒܘܟ ܠܦܦܐ',
+'uploadedimage' => '',
 'uploadvirus' => 'ܠܦܦܐ ܐܝܬ ܒܗ ܒܝܪܘܣ!
 ܐܪ̈ܝܟܬܐ: $1',
 'upload-source' => 'ܡܒܘܥܐ ܕܠܦܦܐ',
@@ -1024,7 +1035,7 @@ $1',
 'notargettitle' => 'ܠܐ ܢܘܦܐ',
 'nopagetitle' => 'ܠܝܬ ܗܟܘܬ ܦܐܬܐ ܕܢܘܦܐ',
 'pager-newer-n' => '{{PLURAL:$1|1 1 ܚܕܬܐ|$1 ܚܕ̈ܬܐ}}',
-'pager-older-n' => '{{PLURAL:$1|1 ܥܬܝܩ̈ܐ 1|$1 ܥܬܝܩ̈ܐ}}',
+'pager-older-n' => '{{PLURAL:$1|ܥܬܝܩܐ 1|ܥܬܝܩ̈ܐ $1}}',
 'suppress' => 'ܚܝܘܪܐ',
 
 # Book sources
@@ -1043,15 +1054,15 @@ $1',
 # Special:AllPages
 'allpages' => 'ܟܠ ܦܐܬܬ̈ܐ',
 'alphaindexline' => '$1 ܠ $2',
-'nextpage' => 'ܦÜ\90ܬÜ\90 Ü\90Ü\9aܪܬÜ\90 ($1)',
-'prevpage' => 'ܦÜ\90ܬÜ\90 Ü©Ü\95Ü\9dܡܬÜ\90 ($1)',
+'nextpage' => 'ܦÜ\90ܬÜ\90 Ü\95Ü\92ܬܪ ($1)',
+'prevpage' => 'ܦÜ\90ܬÜ\90 Ü\95Ü©Ü\95Ü¡ ($1)',
 'allpagesfrom' => 'ܚܘܝ ܦܐܬܬ̈ܐ ܕܫܪܐ ܥܡ:',
 'allpagesto' => 'ܚܘܝ ܦܐܬܬ̈ܐ ܕܫܠܡ ܥܡ:',
 'allarticles' => 'ܟܠ ܡܓܠ̈ܐ',
 'allinnamespace' => 'ܟܠ ܦܐܬܬ̈ܐ (ܚܩܠܐ ܕ $1)',
 'allnotinnamespace' => 'ܟܠ ܦܐܬܬ̈ܐ (ܠܐ ܒܚܩܠܐ ܕ $1)',
-'allpagesprev' => 'ܩܕܡ',
-'allpagesnext' => 'ܒܬܪ',
+'allpagesprev' => 'Ü\95Ü©Ü\95Ü¡',
+'allpagesnext' => 'Ü\95Ü\92ܬܪ',
 'allpagessubmit' => 'ܙܠ',
 'allpagesprefix' => 'ܚܘܝ ܦܐܬܬ̈ܐ ܕܫܪܝܢ ܒ:',
 'allpages-bad-ns' => '{{SITENAME}} ܠܝܬ ܠܗ ܚܩܠܐ "$1".',
@@ -1291,8 +1302,8 @@ $1',
 'isredirect' => 'ܦܐܬܐ ܕܨܘܝܒܐ',
 'istemplate' => 'ܚܒܝܫܬܐ',
 'isimage' => 'ܐܣܘܪܐ ܕܠܦܦܐ',
-'whatlinkshere-prev' => '{{PLURAL:$1|Ü©Ü\95Ü\9dÜ¡Ü\90|$1 Ü©Ü\95Ì\88Ü\9dÜ¡Ü\90}}',
-'whatlinkshere-next' => '{{PLURAL:$1|Ü\9aÜ\95ܬÜ\90|$1 Ü\9aÜ\95Ì\88ܬÜ\90}}',
+'whatlinkshere-prev' => '{{PLURAL:$1|Ü\95Ü©Ü\95Ü¡|$1 Ü\95Ü©Ü\95Ü¡}}',
+'whatlinkshere-next' => '{{PLURAL:$1|Ü\95Ü\92ܬܪ|$1 Ü\95Ü\92ܬܪ}}',
 'whatlinkshere-links' => '← ܐܣܘܪ̈ܐ',
 'whatlinkshere-hideredirs' => '$1 ܨܘܝܒ̈ܐ',
 'whatlinkshere-hidetrans' => '$1 ܡܬܚܪ̈ܙܢܘܬܐ',
@@ -1415,6 +1426,7 @@ Do you want to change the settings?',
 'tooltip-pt-mytalk' => 'ܦܐܬܐ ܕܡܡܠܘܟ',
 'tooltip-pt-preferences' => 'Your preferences',
 'tooltip-pt-watchlist' => 'ܡܟܬܒܢܘܬܐ ܕܦܐܬܬ̈ܐ ܕܒܪܗܝܬ ܐܢܬ ܫܘܚܠܦ̈ܐ ܕܬܗܘܐ ܒܗܘܢ',
+'tooltip-pt-mycontris' => 'ܡܟܬܒܢܘܬܐ ܕܫܘܬܦܘܝܬܘ̈ܟ',
 'tooltip-pt-login' => 'ܢܠܒܒ ܠܟ ܕܣܓܠ ܐܢܬ ܥܠܠܐ ܕܝܠܟ، ܐܠܐ ܗܢܐ ܠܐ ܐܝܬܝܗܝ ܐܠܨܝܐ',
 'tooltip-pt-logout' => 'ܦܠܛܐ',
 'tooltip-ca-talk' => 'ܡܡܠܠܐ ܥܠ ܚܒܝܫܬܐ ܕܦܐܬܐ',
@@ -1423,9 +1435,11 @@ Do you want to change the settings?',
 ܐܝܬ ܒܟ ܬܚܙܝ ܡܒܘܥܐ ܕܝܠܗ',
 'tooltip-ca-protect' => 'ܢܛܘܪ ܗܕܐ ܦܐܬܐ',
 'tooltip-ca-delete' => 'ܫܘܦ ܦܐܬܐ ܗܕܐ',
+'tooltip-ca-move' => 'ܫܢܝ ܦܐܬܐ ܗܕܐ',
 'tooltip-search' => 'ܒܨܝ ܒܓܘ {{SITENAME}}',
 'tooltip-search-fulltext' => 'ܒܨܝ ܒܓܘ ܦܐܬܬ̈ܐ ܥܠ ܗܢܐ ܟܬܝܒܬܐ',
 'tooltip-p-logo' => 'ܦܐܬܐ ܪܝܫܝܬܐ',
+'tooltip-n-mainpage' => 'ܬܪܘܩܬܐ ܕܦܐܬܐ ܪܝܫܝܬܐ',
 'tooltip-n-mainpage-description' => 'ܬܪܘܩܬܐ ܕܦܐܬܐ ܪܝܫܝܬܐ',
 'tooltip-n-portal' => 'ܚܕܪ ܬܪܡܝܬܐ، ܡܢܐ ܡܫܟܚ ܐܢܬ ܠܥܒܕܐ، ܐܝܟܐ ܬܚܙܝ ܟܠ ܡܐ ܕܣܢܝܩ ܐܢܬ ܠܗ',
 'tooltip-n-recentchanges' => 'ܡܟܬܒܢܘܬܐ ܒܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ ܒܓܘ ܘܝܩܝ.',
@@ -1439,7 +1453,9 @@ Do you want to change the settings?',
 'tooltip-ca-nstab-main' => 'ܚܘܝ ܦܐܬܬܐ ܕܚܒ̈ܝܫܬܐ',
 'tooltip-ca-nstab-user' => 'ܚܘܝ ܦܐܬܐ ܕܡܦܠܚܢܐ',
 'tooltip-ca-nstab-image' => 'ܚܘܝ ܦܐܬܐ ܕܠܦܦܐ',
+'tooltip-ca-nstab-category' => 'ܚܘܝ ܦܐܬܐ ܕܣܕܪ̈ܐ',
 'tooltip-save' => 'ܠܒܘܟ ܫܘܚܠܦܟ',
+'tooltip-watch' => 'ܐܘܣܦ ܗܢܐ ܦܐܬܐ ܠܡܟܬܒܢܘܬܐ ܕܪܗܝܬܘܟ',
 
 # Attribution
 'anonymous' => '{{PLURAL:$1|ܡܦܠܚܢܐ ܠܐ ܝܕܝܥܐ|ܡܦܠܚܢ̈ܐ ܠܐ ܝܕ̈ܝܥܐ}} ܕ {{SITENAME}}',
@@ -1456,8 +1472,8 @@ Do you want to change the settings?',
 $1',
 
 # Browsing diffs
-'previousdiff' => 'â\86\90 Ü«Ü\98Ü\9aܠܦÜ\90 Ü¥Ü¬Ü\9dÜ©Ü\90',
-'nextdiff' => 'Ü«Ü\98Ü\9aܠܦÜ\90 Ü\9aÜ\95ܬÜ\90 →',
+'previousdiff' => 'â\86\90 Ü«Ü\98Ü\9aܠܦÜ\90 Ü\95Ü©Ü\95Ü¡',
+'nextdiff' => 'Ü«Ü\98Ü\9aܠܦÜ\90 Ü\95Ü\92ܬܪ →',
 
 # Media information
 'thumbsize' => 'ܥܓܪܐ ܕܨܘܪܬܐ ܙܥܘܪܬܐ:',
@@ -1558,16 +1574,16 @@ $1',
 'confirm_purge_button' => 'ܛܒ',
 
 # Multipage image navigation
-'imgmultipageprev' => 'â\86\90 Ü«Ü\98Ü\9aܠܦÜ\90 Ü©Ü\95Ü\9dÜ¡Ü\90',
-'imgmultipagenext' => 'â\86\90 Ü«Ü\98Ü\9aܠܦÜ\90 Ü\9aÜ\95ܬÜ\90',
+'imgmultipageprev' => 'â\86\90 Ü«Ü\98Ü\9aܠܦÜ\90 Ü\95Ü©Ü\95Ü¡',
+'imgmultipagenext' => 'â\86\90 Ü«Ü\98Ü\9aܠܦÜ\90 Ü\95Ü\92ܬܪ',
 'imgmultigo' => 'ܙܠ!',
 'imgmultigoto' => 'ܙܠ ܠܦܐܬܐ $1',
 
 # Table pager
 'ascending_abbrev' => 'ܡܣܩܐܝܬ',
 'descending_abbrev' => 'ܡܚܬܐܝܬ',
-'table_pager_next' => 'ܦÜ\90ܬÜ\90 Ü\90Ü\9aܪܬÜ\90',
-'table_pager_prev' => 'ܦÜ\90ܬÜ\90 Ü©Ü\95Ü\9dܡܬÜ\90',
+'table_pager_next' => 'ܦÜ\90ܬÜ\90 Ü\95Ü\92ܬܪ',
+'table_pager_prev' => 'ܦÜ\90ܬÜ\90 Ü\95Ü©Ü\95Ü¡',
 'table_pager_first' => 'ܦܐܬܐ ܩܕܡܝܬܐ',
 'table_pager_last' => 'ܦܐܬܐ ܐܚܪܝܬܐ',
 'table_pager_limit_label' => 'ܡܕ̈ܡܐ ܠܟܠ ܦܐܬܐ:',
@@ -1623,7 +1639,7 @@ $1',
 * <span class="mw-specialpagerestricted">ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ ܕܩܝܘܡ̈ܐ ܒܠܚܘܕ.</span>',
 'specialpages-group-maintenance' => 'ܬܫܪܪܐ ܕܚܕܬܘܬܐ',
 'specialpages-group-other' => 'ܦܐܬܬ̈ܐ ܕ̈ܝܠܢܝܬܐ ܐܚܪ̈ܢܝܬܐ',
-'specialpages-group-login' => 'ܥܘܠ / ܒܪܝ',
+'specialpages-group-login' => 'ܥܘܠ / ܒܪܝ ܚܘܫܒܢܐ',
 'specialpages-group-changes' => 'ܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ ܘܣܓܠ̈ܐ',
 'specialpages-group-users' => 'ܡܦܠܚܢ̈ܐ ܘܙܕ̈ܩܐ',
 'specialpages-group-highuse' => 'ܦܐܬܬ̈ܐ ܕܡܬܚܫܚܢܘܬܐ ܥܠܝܬܐ',
index dd00e1c..fe36fae 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Araucanian (mapudungun)
+/** Mapuche (mapudungun)
  *
  * See MessagesQqq.php for message documentation incl. usage of parameters
  * To improve a translation please visit http://translatewiki.net
@@ -107,7 +107,9 @@ $messages = array(
 
 # Cologne Blue skin
 'qbfind' => 'Kintupe',
+'qbbrowse' => 'Kintun',
 'qbedit' => 'Pepikape',
+'qbpageoptions' => 'Tüfachi wülngiñ',
 'qbpageinfo' => 'Trokiñdungu',
 'qbmyoptions' => 'tañi nütramkawe',
 'qbspecialpages' => 'Kangelu',
@@ -180,6 +182,7 @@ $messages = array(
 'jumpto' => 'Amulün:',
 'jumptonavigation' => 'miyawün',
 'jumptosearch' => 'kintun',
+'pool-errorunknown' => 'Kimnoelchi welulkan',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
 'aboutsite' => '{{SITENAME}} ñi dungu',
@@ -204,6 +207,7 @@ $messages = array(
 'youhavenewmessages' => 'Nieymi $1 ($2).',
 'newmessageslink' => 'weke werkün',
 'newmessagesdifflink' => 'we kalekünun',
+'newmessagesdifflinkplural' => 'we {{PLURAL:$1|kalekünuy|kalekünuy}}',
 'youhavenewmessagesmulti' => 'Nieymi we yefalzugu $1 mew.',
 'editsection' => 'Wirin',
 'editold' => 'kümeelün',
@@ -214,15 +218,22 @@ $messages = array(
 'toc' => 'Trokiñdungu',
 'showtoc' => 'pegelpe',
 'hidetoc' => 'ellkangepe',
+'thisisdeleted' => 'Pen kam kümeeltun $1?',
 'viewdeleted' => 'Küpaadkintuymi $1 am?',
 'restorelink' => '{{PLURAL:$1|kiñe wirin ñamümgün|$1 wirin ñamümün}}',
+'feedlinks' => 'Amuldungu:',
+'site-rss-feed' => '$1 RSS ñi amuldungu',
 'site-atom-feed' => '$1 ñi Atom ñi amuldungu',
+'page-rss-feed' => '«$1» RSS ñi amuldungu',
 'page-atom-feed' => '$1 ñi Atom ñi amuldungu',
 'red-link-title' => '$1 (ngelay tichi adtapül)',
+'sort-descending' => 'Kümeelngen minche püle',
+'sort-ascending' => 'Kümeelngen püra püle',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Wülngiñ',
 'nstab-user' => 'Kellufe',
+'nstab-media' => 'Ad ñi wülngiñ',
 'nstab-special' => 'Wichu wülngiñ',
 'nstab-project' => 'Deumandungu wülngiñ',
 'nstab-image' => 'Eltukawün',
@@ -231,6 +242,9 @@ $messages = array(
 'nstab-help' => 'Kelluwe',
 'nstab-category' => 'Trokiñ',
 
+# Main script and global functions
+'nosuchaction' => 'Mülelay feychi femün',
+
 # General errors
 'error' => 'Welulkan',
 'missing-article' => 'Feychi ngülümdunguwe kintulay feychi wülngiñ ñi wirin, welu nienuafulu. Ñi üy ta "$1" $2.
@@ -245,6 +259,7 @@ Femnuale, welulkafuy feychi küzauwe. Feypimi tüfachi dungu kiñe [[Special:Lis
 'badtitletext' => 'Tüfachi wülngiñ ñi üy kümelay, welliley kam niey weda lasun nülkükawlelu kake dungun kam kake wiki wülngiñ ñi üy.
 Nieafuy falinochi wirin püñamtuam wülngiñ ñi üy.',
 'viewsource' => 'Kimam chew küpan chi wirin',
+'exception-nologin' => 'Petu konlaymi',
 
 # Login and logout pages
 'yourname' => 'Tami üy',
index 142b79f..aac01e1 100644 (file)
@@ -887,9 +887,10 @@ $2',
 ممكن [[Special:Search/{{PAGENAME}}|تدور على عنوان الصفحه دى]] فى صفح تانيه,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} تدور فى السجلات اللى ليها علاقه],
 او [{{fullurl:{{FULLPAGENAME}}|action=edit}} تعدل الصفحه دى]</span>.',
-'noarticletext-nopermission' => 'مفيش اى نص دلوقتى فى الصفحه دى.
-ممكن [[Special:Search/{{PAGENAME}}|تدور على عنوان الصفحه دى]] فى الصفحات التانيه,
-او <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} تدور فى السجلات بتاعتها]</span>.',
+'noarticletext-nopermission' => 'مافيش دلوقتى اى نص فى الصفحه دى.
+ممكن [[Special:Search/{{PAGENAME}}|تدور على عنوان الصفحه دى]] فى صفح تانيه,
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} تدور فى السجلات اللى ليها علاقه],
+او [{{fullurl:{{FULLPAGENAME}}|action=edit}} تعدل الصفحه دى]</span>.',
 'userpage-userdoesnotexist' => 'حساب اليوزر "<nowiki>$1</nowiki>" مش متسجل. لو سمحت تشوف لو عايز تبتدي/تعدل الصفحة دي.',
 'userpage-userdoesnotexist-view' => 'حساب اليوزر "$1" مش متسجل',
 'blocked-notice-logextract' => 'اليوزر ده معمول له بلوك دلوقتى.
index 44d6dee..c0e7226 100644 (file)
@@ -226,7 +226,7 @@ $messages = array(
 'namespaces' => 'Espacios de nome',
 'variants' => 'Variantes',
 
-'errorpagetitle' => 'Fallu',
+'errorpagetitle' => 'Error',
 'returnto' => 'Tornar a $1.',
 'tagline' => 'De {{SITENAME}}',
 'help' => 'Ayuda',
@@ -375,7 +375,7 @@ Tamién podría ser un bug nel software usáu por {{SITENAME}}.",
 Pues atopar una llista de les páxines especiales válides en [[Special:SpecialPages|{{int:specialpages}}]].',
 
 # General errors
-'error' => 'Fallu',
+'error' => 'Error',
 'databaseerror' => 'Fallu na base de datos',
 'dberrortext' => "Hebo un fallu de sintaxis nuna consulta a la base de datos.
 Esti fallu pue ser por un problema del software.
@@ -1013,10 +1013,11 @@ Nun tienes accesu al mesmu.',
 'revdelete-concurrent-change' => "Error al camudar l'elementu con data $2, $1: paez que'l so estáu camudólu otra persona mientres tentabes camudalu tu.
 Comprueba los rexistros, por favor.",
 'revdelete-only-restricted' => "Fallu al anubrir l'elementu con data $1, $2: nun se puen quitar elementos de la vista de los alministradores ensin escoyer tamién una de les otres opciones de visibilidá.",
-'revdelete-reason-dropdown' => '*Razones comúnes de desaniciu 
+'revdelete-reason-dropdown' => "*Razones comúnes de desaniciu 
 ** Violación del Copyright
-** Información personal non apropiada
-** Información potencialmente bilordiosa',
+** Información personal o comentariu non apropiáu
+** Nome d'usuariu non apropiáu
+** Información potencialmente bilordiosa",
 'revdelete-otherreason' => 'Motivu distintu/adicional:',
 'revdelete-reasonotherlist' => 'Otru motivu',
 'revdelete-edit-reasonlist' => 'Editar motivos del desaniciu',
@@ -2917,7 +2918,7 @@ Probablemente tea causao por un enllaz a un sitiu esternu de la llista prieta.',
 'pageinfo-authors' => "Númberu total d'autores distintos",
 'pageinfo-recent-edits' => "Númberu d'ediciones recientes (nos caberos $1)",
 'pageinfo-recent-authors' => "Númberu d'autores distintos recientes",
-'pageinfo-restriction' => 'Proteición de la páxina (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Proteición de la páxina ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Pallabra máxica|Pallabres máxiques}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoría anubrida|Categoríes anubríes}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Plantía incluída|Plantíes incluíes}} ($1)',
index 77b913b..097eb64 100644 (file)
@@ -261,7 +261,7 @@ $messages = array(
 'unprotectthispage' => 'Был биттең һаҡлауын үҙгәртергә',
 'newpage' => 'Яңы бит',
 'talkpage' => 'Фекер алышыу',
-'talkpagelinktext' => 'Фекер алышыу',
+'talkpagelinktext' => 'әңг.',
 'specialpage' => 'Ярҙамсы бит',
 'personaltools' => 'Шәхси ҡоралдар',
 'postcomment' => 'Яңы бүлек',
@@ -2157,7 +2157,7 @@ $UNWATCHURL
 # Rollback
 'rollback' => 'Үҙгәртеүҙәрҙе кире ҡайтарырға',
 'rollback_short' => 'Кире ҡайтарырға',
-'rollbacklink' => 'кире алырға',
+'rollbacklink' => 'кире',
 'rollbacklinkcount' => '$1 {{PLURAL:$1|төҙәтеүҙе|төҙәтеүҙе}} кире алырға',
 'rollbacklinkcount-morethan' => '$1 {{PLURAL:$1|төҙәтеүҙән|төҙәтеүҙән}} күберәк кире алырға',
 'rollbackfailed' => 'Кире ҡайтарырғанда барлыҡҡа килгән хата',
@@ -2430,10 +2430,10 @@ $1',
 'blocklist-nousertalk' => 'үҙенең фекер алышыу битен мөхәррирләй алмай',
 'ipblocklist-empty' => 'Бикләү исемлеге буш.',
 'ipblocklist-no-results' => 'Күрһәтелгән IP адрес йәки ҡатнашыусы исеме бикләнмәгән.',
-'blocklink' => 'ябып ҡуйырға',
+'blocklink' => 'яб.',
 'unblocklink' => 'Тыйыуҙы кире алырға',
 'change-blocklink' => 'блоклауҙы үҙгәртергә',
-'contribslink' => 'индергән өлөш',
+'contribslink' => 'өл.',
 'emaillink' => 'электрон хат ебәрергә',
 'autoblocker' => 'Һеҙҙең IP адресығыҙ [[User:$1|$1]] яңыраҡ ҡулланған адрес менән тап килеүе арҡаһында бикләнде.
 $1 ҡатнашыусыһын бикләү сәбәбе: "$2"',
index f9ffd92..431332b 100644 (file)
@@ -268,8 +268,8 @@ $1",
 'mainpage' => 'Hauptseiten',
 'mainpage-description' => 'Hauptseiten',
 'policy-url' => 'Project:Richtlinien',
-'portal' => 'Gmoahschoftsportoi',
-'portal-url' => 'Project:Gmoahschoftsportoi',
+'portal' => 'Autornportal',
+'portal-url' => 'Project:Autornportal',
 'privacy' => 'Daatenschutz',
 'privacypage' => 'Project:Daatenschutz',
 
index de1217d..28ec4b3 100644 (file)
@@ -632,10 +632,10 @@ $1',
 'protectedpagetext' => 'Рэдагаваньне гэтай старонкі забароненае.',
 'viewsourcetext' => 'Вы можаце праглядаць і капіяваць крынічны тэкст гэтай старонкі:',
 'viewyourtext' => "Вы можаце праглядзець і скапіяваць крынічны тэкст '''вашых рэдагаваньняў''' на гэтую старонку:",
-'protectedinterface' => 'Гэтая старонка ўтрымлівае інтэрфэйснае паведамленьне праграмнага забесьпячэньня, і яе зьмена забаронена.',
+'protectedinterface' => 'Гэтая старонка ўтрымлівае інтэрфэйснае паведамленьне праграмнага забесьпячэньня, і яе зьмена забаронена. Каб дадаць ці зьмяніць пераклад ва ўсіх праектах, зьвярніцеся на [//translatewiki.net/ translatewiki.net], праект для перакладу MediaWiki.',
 'editinginterface' => "'''Увага:''' Вы рэдагуеце старонку, якая ўтрымлівае сыстэмнае паведамленьне MediaWiki.
-Яе зьмена паўплывае на вонкавы выгляд інтэрфэйсу іншых удзельнікаў.
\9aалÑ\96 Ð»Ð°Ñ\81ка, Ð²Ñ\8bкаÑ\80Ñ\8bÑ\81Ñ\82оÑ\9eвайÑ\86е [//translatewiki.net/wiki/Main_Page?setlang=be-tarask translatewiki.net] — праект для лякалізацыі MediaWiki.",
+Яе зьмена паўплывае на вонкавы выгляд інтэрфэйсу іншых удзельнікаў у гэтай вікі.
\9aаб Ð´Ð°Ð´Ð°Ñ\86Ñ\8c Ñ\86Ñ\96 Ð·Ñ\8cмÑ\8fнÑ\96Ñ\86Ñ\8c Ð¿ÐµÑ\80аклад Ð²Ð° Ñ\9eÑ\81Ñ\96Ñ\85 Ð¿Ñ\80аекÑ\82аÑ\85, Ð·Ñ\8cвÑ\8fÑ\80нÑ\96Ñ\86еÑ\81Ñ\8f Ð½Ð° [//translatewiki.net/wiki/Main_Page?setlang=be-tarask translatewiki.net] — праект для лякалізацыі MediaWiki.",
 'sqlhidden' => '(SQL-запыт схаваны)',
 'cascadeprotected' => 'Гэтая старонка абароненая ад рэдагаваньня, таму што яна ўключаная ў {{PLURAL:$1|наступную старонку, якая была абароненая|наступныя старонкі, якія былі абароненыя}} з актывізаванай опцыяй «каскаднай абароны»:
 $2',
@@ -913,7 +913,7 @@ $2
 Вы можаце [[Special:Search/{{PAGENAME}}|пашукаць гэтую назву]] ў іншых старонках, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} пашукаць у адпаведных журналах падзеяў]
 альбо [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} рэдагаваць гэтую старонку]</span>.',
 'noarticletext-nopermission' => 'Цяпер на гэтай старонцы тэкст адсутнічае.
-Вы можаце [[Special:Search/{{PAGENAME}}|пашукаць назву гэтай старонкі]] на іншых старонках, альбо <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} пашукаць зьвязаныя запісы ў журналах]</span>.',
+Вы можаце [[Special:Search/{{PAGENAME}}|пашукаць назву гэтай старонкі]] на іншых старонках, альбо <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} пашукаць зьвязаныя запісы ў журналах]</span>, але ў вас няма дазволу ствараць гэтую старонку.',
 'missing-revision' => 'Вэрсія старонкі №$1 з назвай «{{PAGENAME}}» не існуе.
 
 Звычайна гэта здараецца з-за перахода па састарэлай спасылцы на старонку, якая была выдаленая.
@@ -1177,7 +1177,9 @@ $1",
 'revdelete-only-restricted' => 'Памылка хаваньня запісаў элемэнтаў $2, $1: Вы ня можаце схаваць запісы ад прагляду адміністратарамі бяз выбару адной зь іншых наладаў хаваньня.',
 'revdelete-reason-dropdown' => '* Агульныя прычыны выдаленьня
 ** Парушэньне аўтарскіх правоў
-** Інфармацыя, якая парушае прыватнасьць',
+** Інфармацыя, якая парушае прыватнасьць
+** Недапушчальнае імя ўдзельніка
+** Патэнцыйна паклёпніцкія зьвесткі',
 'revdelete-otherreason' => 'Іншая/дадатковая прычына:',
 'revdelete-reasonotherlist' => 'Іншая прычына',
 'revdelete-edit-reasonlist' => 'Рэдагаваць прычыны выдаленьня',
@@ -1214,7 +1216,7 @@ $1",
 'mergehistory-reason' => 'Прычына:',
 
 # Merge log
-'mergelog' => "Журнал аб'яднаньняў",
+'mergelog' => 'Журнал аб’яднаньняў',
 'pagemerge-logentry' => 'аб’яднаная [[$1]] ў [[$2]] (гісторыя рэдагаваньняў да $3)',
 'revertmerge' => 'Разьяднаць',
 'mergelogpagetext' => "Ніжэй знаходзіцца сьпіс апошніх аб'яднаньняў гісторыяў старонак.",
@@ -1374,7 +1376,7 @@ $1",
 'timezoneregion-indian' => 'Індыйскі акіян',
 'timezoneregion-pacific' => 'Ціхі акіян',
 'allowemail' => 'Дазволіць атрыманьне лістоў ад іншых удзельнікаў і ўдзельніц',
-'prefs-searchoptions' => 'Ð\9cагÑ\87Ñ\8bмаÑ\81Ñ\8cÑ\86Ñ\96 Ð¿Ð¾Ñ\88Ñ\83кÑ\83',
+'prefs-searchoptions' => 'Ð\9fоÑ\88Ñ\83к',
 'prefs-namespaces' => 'Прасторы назваў',
 'defaultns' => 'Інакш шукаць у наступных прасторах назваў:',
 'default' => 'па змоўчваньні',
@@ -1788,7 +1790,7 @@ $1',
 'backend-fail-internal' => 'Узьнікла невядомая памылка на сэрвэры сховішча «$1».',
 'backend-fail-contenttype' => 'Немагчыма вызначыць тып зьместу файла, які мусіць быць захаваны ў «$1».',
 'backend-fail-batchsize' => 'Cховішча атрымала блёк з $1 {{PLURAL:$1|файлавай апэрацыі|файлавых апэрацыяў|файлавых апэрацыяў}}; абмежаваньне складае $2 {{PLURAL:$2|апэрацыю|апэрацыі|апэрацыяў}}.',
-'backend-fail-usable' => 'Ð\9dе Ð°Ñ\82Ñ\80Ñ\8bмалаÑ\81Ñ\8f Ð·Ð°Ð¿Ñ\96Ñ\81аÑ\86Ñ\8c Ñ\84айл $1 з-за недастачы правоў ці адсутнасьці дырэкторыяў або кантэйнэраў.',
+'backend-fail-usable' => 'Ð\9dе Ð°Ñ\82Ñ\80Ñ\8bмалаÑ\81Ñ\8f Ð¿Ñ\80аÑ\87Ñ\8bÑ\82аÑ\86Ñ\8c Ñ\86Ñ\96 Ð·Ð°Ð¿Ñ\96Ñ\81аÑ\86Ñ\8c Ñ\84айл Â«$1» з-за недастачы правоў ці адсутнасьці дырэкторыяў або кантэйнэраў.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Не атрымалася злучыцца з базай зьвестак журнала для сховішча «$1».',
@@ -3033,7 +3035,7 @@ $1',
 'pageinfo-authors' => 'Колькасьць аўтараў',
 'pageinfo-recent-edits' => 'Колькасьць апошніх рэдагаваньняў (за $1)',
 'pageinfo-recent-authors' => 'Колькасьць апошніх аўтараў',
-'pageinfo-restriction' => 'Стан аховы (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Стан аховы ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Магічнае слова|Магічныя словы}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Схаваная катэгорыя|Схаваныя катэгорыі}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Шаблён|Шаблёны}} ($1)',
index 40735c9..e8aec2e 100644 (file)
@@ -2859,14 +2859,15 @@ $1',
 'pageinfo-title' => 'Информация за "$1"',
 'pageinfo-header-basic' => 'Основна информация',
 'pageinfo-header-edits' => 'Редакции',
+'pageinfo-article-id' => 'Номер на страницата',
 'pageinfo-views' => 'Брой прегледи',
-'pageinfo-watchers' => 'Ð\91Ñ\80ой Ð½Ð°Ð±Ð»Ñ\8eдабаÑ\89и',
+'pageinfo-watchers' => 'Ð\91Ñ\80ой Ð½Ð°Ð±Ð»Ñ\8eдаваÑ\89и Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а',
 'pageinfo-redirects-name' => 'Пренасочвания към тази страница',
 'pageinfo-subpages-name' => 'Подстраници на тази страница',
 'pageinfo-lastuser' => 'Последeн редактор',
 'pageinfo-lasttime' => 'Дата на последнoто редактиране',
 'pageinfo-edits' => 'Общ брой редакции',
-'pageinfo-authors' => 'Ð\91Ñ\80ой Ð½Ð° Ð¾Ñ\82делни автори',
+'pageinfo-authors' => 'Ð\9eбÑ\89 Ð±Ñ\80ой Ð½Ð° Ð¾Ñ\82делниÑ\82е автори',
 'pageinfo-magic-words' => '{{PLURAL:$1|Вълшебна думичка|Вълшебни думички}} ($1)',
 
 # Skin names
@@ -3503,6 +3504,8 @@ MediaWiki се разпространява с надеждата, че ще б
 'version-software' => 'Инсталиран софтуер',
 'version-software-product' => 'Продукт',
 'version-software-version' => 'Версия',
+'version-entrypoints' => 'Адреси на входни точки',
+'version-entrypoints-header-entrypoint' => 'Входна точка',
 'version-entrypoints-header-url' => 'Адрес',
 
 # Special:FilePath
index fd22a46..527957e 100644 (file)
@@ -75,7 +75,7 @@ $messages = array(
 'tog-hidepatrolled' => 'পরীক্ষিত সম্পাদনা গুলো সাম্প্রতিক পরিবর্তনসমূহে আড়াল করো',
 'tog-newpageshidepatrolled' => 'পরীক্ষিত পাতা গুলো নতুন পাতার তালিকায় আড়াল করো',
 'tog-extendwatchlist' => 'শুধু সাম্প্রতিক পরিবর্তনই নয়, সকল পরিবর্তন দেখতে নজর তালিকা সম্প্রসারণ করুন।',
-'tog-usenewrc' => 'à¦\89নà§\8dনততর à¦¸à¦¾à¦®à§\8dপà§\8dরতিà¦\95 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনসমà§\82হ à¦¬à§\8dযবহার à¦\95রà§\81ন (জাভাস্ক্রিপ্ট প্রয়োজন)',
+'tog-usenewrc' => 'সামà§\8dপà§\8dরতিà¦\95 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনসমà§\82হ à¦\8fবà¦\82 à¦¨à¦\9cরতালিà¦\95া à¦ªà¦¾à¦¤à¦¾à¦¯à¦¼ à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনà¦\97à§\81লà§\8b à¦\8fà¦\95তà§\8dরà§\87 à¦ªà§\8dরদরà§\8dশন (জাভাস্ক্রিপ্ট প্রয়োজন)',
 'tog-numberheadings' => 'শিরোনামগুলোকে স্বয়ংক্রিয়ভাবে ক্রমাঙ্কিত করা হোক',
 'tog-showtoolbar' => 'সম্পাদনা টুলবার দেখানো হোক (জাভাস্ক্রিপ্ট)',
 'tog-editondblclick' => 'দুইবার ক্লিক করে পাতা সম্পাদনা করার ক্ষমতা দেয়া হোক (জাভাস্ক্রিপ্ট)',
@@ -83,17 +83,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'পরিচ্ছেদের শিরোনামে ডান ক্লিকের মাধ্যমে <br />পরিচ্ছেদ সম্পাদনা করার ক্ষমতা দেয়া হোক (জাভাস্ক্রিপ্ট)',
 'tog-showtoc' => 'সূচিপত্র দেখানো হোক (৩টির বেশি পরিচ্ছেদের শিরোনামবিশিষ্ট পাতার জন্য)',
 'tog-rememberpassword' => 'এই ব্রাউজারে আমার লগ ইন তথ্য (শব্দচাবি) মনে রাখো (সর্বোচ্চ $1 {{PLURAL:$1|দিনের|দিনের}} জন্য)',
-'tog-watchcreations' => 'আমার তৈরি পাতাগুলি আমার নজরতালিকায় যোগ করা হোক',
-'tog-watchdefault' => 'আমার সম্পাদিত পাতাগুলি আমার নজরতালিকায় যোগ করা হোক',
-'tog-watchmoves' => 'আমার সরিয়ে ফেলা পাতাগুলি আমার নজরতালিকায় যোগ করা হোক',
-'tog-watchdeletion' => 'আমার মুছে ফেলা পাতাগুলি আমার নজর তালিকায় যোগ করা হোক',
+'tog-watchcreations' => 'আমার তৈরি পাতা এবং আপলোড করা ফাইলগুললো আমার নজরতালিকায় যোগ করা হোক',
+'tog-watchdefault' => 'আমার সম্পাদিত পাতা এবং ফাইলগুলো আমার নজরতালিকায় যোগ করা হোক',
+'tog-watchmoves' => 'আমার সরিয়ে ফেলা পাতা এবং ফাইলগুলো আমার নজরতালিকায় যোগ করা হোক',
+'tog-watchdeletion' => 'আমার মুছে ফেলা পাতা এবং ফাইলগুলো আমার নজর তালিকায় যোগ করা হোক',
 'tog-minordefault' => 'শুরুতেই সব সম্পাদনাকে অনুল্লেখ্য বলে চিহ্নিত করা হোক',
 'tog-previewontop' => 'সম্পাদনা বাক্সের আগে প্রাকদর্শন দেখানো হোক',
 'tog-previewonfirst' => 'প্রথম সম্পাদনার ক্ষেত্রে প্রাকদর্শন দেখানো হোক',
 'tog-nocache' => 'ব্রাউজার পাতা ক্যাশিং নিষ্ক্রিয় করো',
-'tog-enotifwatchlistpages' => 'আমার নজর তালিকায় আছে এমন পাতাে পরিবর্তন হলে তা জানিয়ে আমাকে ই-মেইল করো',
+'tog-enotifwatchlistpages' => 'আমার নজর তালিকায় আছে এমন পাতা অথবা ফাইলে পরিবর্তন হলে তা জানিয়ে আমাকে ই-মেইল করো',
 'tog-enotifusertalkpages' => 'আমার ব্যবহারকারী আলোচনা পাতার পরিবর্তন হলে আমাকে ই-মেইল করা হোক',
-'tog-enotifminoredits' => 'পাতাগুলির অনুল্লেখ্য সম্পাদনার জন্যও আমাকে ই-মেইল করা হোক',
+'tog-enotifminoredits' => 'পাতা এবং ফাইলগুলোতে অনুল্লেখ্য সম্পাদনার জন্যও আমাকে ই-মেইল করা হোক',
 'tog-enotifrevealaddr' => 'বিজ্ঞপ্তি মেইলে আমার ই-মেইল ঠিকানা প্রকাশ করা হোক',
 'tog-shownumberswatching' => 'নজরদারী করছে, এমন ব্যবহারকারীর সংখ্যা দেখানো হোক',
 'tog-oldsig' => 'বর্তমান স্বাক্ষর:',
@@ -391,8 +391,8 @@ $1',
 সফটওয়্যারে কোন বাগের কারণে এমন হতে পারে।
 সর্বশেষ ডাটাবেজ কোয়েরিটি ছিল এরকম:
 <blockquote><tt>$1</tt></blockquote>
-"<tt>$2</tt>" ফাংশনের ভিতর থেকে।
-ডাটাবেজ যে ত্রুটি পাঠিয়েছে: "<tt>$3: $4</tt>"।',
+"<code>$2</code>" ফাংশনের ভিতর থেকে।
+ডাটাবেজ যে ত্রুটি পাঠিয়েছে: "<samp>$3: $4</samp>"।',
 'dberrortextcl' => 'ডাটাবেজ কোয়েরি সিনট্যাক্স ত্রুটি ঘটেছে।
 সর্বশেষ ডাটাবেজ কোয়েরিটি ছিল:
 "$1"
@@ -446,8 +446,11 @@ $1',
 'protectedpagetext' => 'সম্পাদনা এড়াতে এ পাতাটির ব্যবহার নিয়ন্ত্রণ করা হয়েছে।',
 'viewsourcetext' => 'এ পাতাটি আপনি দেখতে এবং উৎসের অনুলিপি নিতে পারবেন:',
 'viewyourtext' => "আপনি ' ' ' আপনার সম্পাদনা ' ' ' এই পাতায় দেখতে এবং কপি করতে পারেন:",
-'protectedinterface' => 'এই পাতার বিষয়বস্তু উইকি সফটওয়্যারের একটি ইন্টারফেস বার্তা প্রদান করে, তাই এটিকে সুরক্ষিত করে রাখা হয়েছে।',
-'editinginterface' => "'''সতর্কীকরণ:''' আপনি এমন একটি পাতা সম্পাদনা করছেন যা সফটওয়্যারের জন্য ইন্টারফেস টেক্সট প্রদান করে। এই পাতাতে সংঘটিত পরিবর্তন ব্যবহারকারী ইন্টারফেসে প্রভাব ফেলবে, যা অন্য ব্যবহারকারীরা দেখতে পাবেন। অনুবাদের জন্য অনুগ্রহ করে [//translatewiki.net/wiki/Main_Page?setlang=bn translatewiki.net] ব্যবহার করার ব্যাপারটি বিবেচনা করুন। এটি মিডিয়াউইকি স্থানীয়করণ প্রকল্প।",
+'protectedinterface' => 'এই পাতার বিষয়বস্তু এই উইকি সফটওয়্যারের একটি ইন্টারফেস বার্তা প্রদান করে, তাই এটিকে সুরক্ষিত করে রাখা হয়েছে।
+সকল উইকির অনুবাদে কোনো ধরনের সংযোজন বা পরিবর্তন করতে, অনুগ্রহ করে মিডিয়াউইকি স্থানীয়করন প্রকল্প [//translatewiki.net/ translatewiki.net] ব্যবহার করুন।',
+'editinginterface' => "'''সতর্কীকরণ:''' আপনি এমন একটি পাতা সম্পাদনা করছেন যা সফটওয়্যারের জন্য ইন্টারফেস টেক্সট প্রদান করে।
+এই পাতাতে সংঘটিত পরিবর্তন এই উইকির ব্যবহারকারীদের ইন্টারফেসে প্রভাব ফেলবে, যা অন্য ব্যবহারকারীরা দেখতে পাবেন।
+সকল উইকির অনুবাদে কোনো ধরনের সংযোজন বা পরিবর্তন করতে, অনুগ্রহ করে মিডিয়াউইকি স্থানীয়করন প্রকল্প [//translatewiki.net/ translatewiki.net] ব্যবহার করুন।",
 'sqlhidden' => '(এস কিউ এল কোয়েরি লুকানো আছে)',
 'cascadeprotected' => 'এই পাতাটি সম্পাদনা থেকে সুরক্ষিত, কারণ পাতাটি নিচের {{PLURAL:$1|টি পাতার|টি পাতার}} অন্তর্গত, যে পাতা(গুলি) "প্রপাতাকার" (cascading) বৈশিষ্ট্য সহযোগে সুরক্ষিত করা হয়েছে:
 $2',
@@ -721,8 +724,11 @@ $1 নিষেধাজ্ঞা আরোপ করেছেন। নিষ
 'noarticletext' => 'বর্তমানে এই পাতায় কোন লেখা নেই।
 আপনি চাইলে অন্যান্য পাতায় [[Special:Search/{{PAGENAME}}| এই শিরোনামটি অনুসন্ধান করতে পারেন]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} এ সম্পর্কিত লগ অনুসন্ধান করতে পারেন], কিংবা [{{fullurl:{{FULLPAGENAME}}|action=edit}} এই পাতাটি সম্পাদনা করতে পারেন]</span>।',
 'noarticletext-nopermission' => 'বর্তমানে এই পাতায় কোন লেখা নেই।
-আপনি চাইলে অন্য পাতায় [[Special:Search/{{PAGENAME}}| শিরোনামটি অনুসন্ধান করতে পারেন]],
-অথবা <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} সম্পর্কিত লগ অনুসন্ধান করতে পারেন]</span>।',
+আপনি চাইলে অন্য পাতায় [[Special:Search/{{PAGENAME}}| শিরোনামটি অনুসন্ধান করতে পারেন]], অথবা <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} সম্পর্কিত লগ অনুসন্ধান করতে পারেন]</span>, কিন্তু আপনার এই পাতাটি তৈরী করার অনুমতি নেই।',
+'missing-revision' => '"{{PAGENAME}}" এর #$1তম সংস্করণটি প্রদর্শন সম্ভব নয়।
+
+সাধারণত মুছে ফেলা হয়েছে এমন পাতার মেয়াদ উত্তীর্ণ ইতিহাস পাতার লিংক ওপেন করার কারণে এটি হতে পারে। 
+[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অপসারণ লগে] বিস্তারিত তথ্য জানা যাবে।',
 'userpage-userdoesnotexist' => '"<nowiki>$1</nowiki>" নামের কোন ব্যবহারকারী অ্যাকাউন্ট নিবন্ধিত হয়নি। অনুগ্রহ করে পরীক্ষা করে দেখুন আপনি এই পাতাটি সৃষ্টি/সম্পাদনা করতে চান কি না।',
 'userpage-userdoesnotexist-view' => 'ব্যবহারকারী অ্যাকাউন্ট "$1" অনিবন্ধিত।',
 'blocked-notice-logextract' => 'এই ব্যবহারকারী বর্তমানে ব্লক রয়েছে।
@@ -731,7 +737,6 @@ $1 নিষেধাজ্ঞা আরোপ করেছেন। নিষ
 * '''ফায়ারফক্স / সাফারি:''' ''শিফট'' কি ধরে রাখা অবস্থায় ''রিলোড''-এ ক্লিক করুন, অথবা ''Ctrl-F5'' বা ''Ctrl-R'' (ম্যাক-এ ''⌘-R'') চাপুন
 * '''গুগল ক্রোম:''' ''Ctrl-Shift-R'' (ম্যাক-এ ''⌘-Shift-R'') চাপুন
 * '''ইন্টারনেট এক্সপ্লোরার:''' ''Ctrl'' কি ধরে রাখা অবস্থায় ''রিফ্রেশ''-এ ক্লিক করুন, অথবা ''Ctrl-F5'' চাপুন
-* '''কনকুয়েরার:''' ''রিলোড''-এ ক্লিক করুন বা ''F5'' চাপুন
 * '''অপেরা:''' ''টুলস → প্রিফারেন্স''-এ গিয়ে ক্যাশে পরিস্কার করে নিন",
 'usercssyoucanpreview' => "'''পরামর্শ:''' \"{{int:showpreview}}\" বোতাম ব্যবহার করে সংরক্ষণের আগে আপনার নতুন CSS পরীক্ষা করুন।",
 'userjsyoucanpreview' => "'''পরামর্শ:''' \"{{int:showpreview}}\" বোতাম ব্যবহার করে সংরক্ষণের আগে আপনার নতুন JavaScript পরীক্ষা করুন।",
@@ -836,6 +841,13 @@ $1 নিষেধাজ্ঞা আরোপ করেছেন। নিষ
 'parser-template-loop-warning' => 'টেম্পলেট লুপ সনাক্ত হয়েছে: [[$1]]',
 'parser-template-recursion-depth-warning' => 'টেমপ্লেট  পুনরাবৃত্তি (রিকার্শন)  ডেপথ্‌ সীমা অতক্রম করেছে ($1)',
 'language-converter-depth-warning' => 'ভাষা পরিবর্তন  ডেপথ্‌ সীমা অতক্রম করেছে ($1)',
+'node-count-exceeded-category' => 'যে সকল পাতার নোড কাউন্ট সীমানা পার হয়েছে',
+'node-count-exceeded-warning' => 'পাতাটি নোড কাউন্ট সীমানা পার করেছে',
+'expansion-depth-exceeded-category' => 'যে সকল পাতার এক্সেপশন সীমানা অতিক্রম করেছে',
+'expansion-depth-exceeded-warning' => 'পাতাটি এক্সেপশন সীমানা অতিক্রম করেছে',
+'parser-unstrip-loop-warning' => 'ত্রুটিপূর্ণ লুপ খুঁজে পাওয়া গিয়েছে',
+'parser-unstrip-recursion-limit' => 'লুপ রিকারশন সীমানা অতিক্রম করেছে ($1)',
+'converter-manual-rule-error' => 'ভাষা পরিবর্তন রুলে ত্রুটি পাওয়া গিয়েছে',
 
 # "Undo" feature
 'undo-success' => 'সম্পাদনাটি বাতিল করা যাবে। অনুগ্রহ করে নিচের তুলনাটি পরীক্ষা করে দেখুন ও নিশ্চিত করুন যে এটাই আপনি করতে চান, এবং তারপর নিচের সম্পাদনাগুলি সংরক্ষণ করে সম্পাদনাটির বাতিল প্রক্রিয়া সমাপ্ত করুন।',
@@ -919,13 +931,20 @@ $3-এর দেয়া কারণ হল ''$2''",
 'revdelete-nologtype-title' => 'কোনো লগ টাইপ দেওয়া হয়নি।',
 'revdelete-nologtype-text' => 'আপনি হয়তো এই কাজটি করার জন্য কোনো লগ নির্ধারণ করেননি।',
 'revdelete-nologid-title' => 'ভুল লগ ভুক্তি',
+'revdelete-nologid-text' => 'হয়তো আপনি এই ফাংশনটির জন্য কোনো লগ ইভেন্ট নির্ধারণ করে দেননি, অথবা নির্ধারিত ইভেন্টটি সঠিক নয়।',
 'revdelete-no-file' => 'নির্ধারিত ফাইলটি নেই।',
+'revdelete-show-file-confirm' => 'আপনি কি নিশ্চিত যে "<nowiki>$1</nowiki>" ফাইলের $2 তারিখের $3 টার অপসারণ লগ দেখানো হবে?',
 'revdelete-show-file-submit' => 'হ্যাঁ',
 'revdelete-selected' => "'''[[:$1]] পাতার {{PLURAL:$2|নির্বাচিত সংশোধন|নির্বাচিত সংশোধনসমূহ}}:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|টি নির্বাচিত লগ-ঘটনা|টি নির্বাচিত লগ-ঘটনা}}:'''",
 'revdelete-text' => "'''মুছে ফেলা সংশোধনগুলো এবং ঘটনাগুলি এখনও পাতার ইতিহাস ও লগগুলোতে দেখাবে, কিন্তু তাদের বিষয়বস্তুর অংশবিশেষ সর্বোসাধারণের জন্য উন্মুক্ত থাকবে না।'''
 
 {{SITENAME}} এর অন্যান্য প্রশাসকগণ লুকানো এই বিষয়বস্তু দেখতে পাবেন এবং বাড়তি কোনো সীমাবদ্ধতা না থাকলে একই ইন্টারফেসের মাধ্যমে এটি পুনরুদ্ধার করতে পারবেন।",
+'revdelete-confirm' => 'অনুগ্রহ করে নিশ্চিত করুন যে আপনি এটি করতে চাচ্ছিলেন, আপনি এর ফলাফল সম্পর্কে অবগত আছেন, এবং [[{{MediaWiki:Policy-url}}|নীতিমালার]] উপর ভিত্তি করেই এই কাজটি করছেন।',
+'revdelete-suppress-text' => "'''কেবলমাত্র''' নিচের বিষয়গুলোর ক্ষেত্রেই চাপাচাপি করা যাবে:
+* সম্ভাব্য মানহানিকর তথ্য
+* ভুল ব্যক্তিগত তথ্য
+*:  ''বাসার ঠিকানা এবং ফোন নম্বর, সোসাল সিকিউরিটি নম্বর, ইত্যাদি।''",
 'revdelete-legend' => 'দৃষ্টিপাত সীমাবদ্ধ করো',
 'revdelete-hide-text' => 'সংশোধিত লেখা আড়াল করো',
 'revdelete-hide-image' => 'ফাইলের বিষয়বস্তু আড়াল করো',
@@ -941,6 +960,8 @@ $3-এর দেয়া কারণ হল ''$2''",
 'revdelete-log' => 'কারণ:',
 'revdelete-submit' => 'নির্বাচিত {{PLURAL:$1|সংশোধনে|সংশোধসমূহে}} প্রয়োগ করো',
 'revdelete-success' => "'''সংশোধন দৃশ্যমানতা সফলভাবে হালনাগাদ করা হয়েছে।'''",
+'revdelete-failure' => "'''রিভিশন ভিজিবিলিটি আপডেট সম্ভব নয়:'''
+$1",
 'logdelete-success' => "'''ঘটনা দৃশ্যমানতা সফলভাবে স্থাপন করা হয়েছে।'''",
 'logdelete-failure' => "'''লগ-এর দৃশ্যমানতা নির্ধারণ সম্ভব হচ্ছে না:'''
 $1",
@@ -952,6 +973,7 @@ $1",
 'revdelete-reason-dropdown' => '*সাধারণ অপসারণের কারণসমূহ
 ** কপিরাইট লঙ্ঘন
 ** অনুপযুক্ত ব্যক্তিগত তথ্য
+** অনুপযুক্ত ব্যবহারকারী নাম
 ** সম্ভাব্য ক্ষতিকারক তথ্য',
 'revdelete-otherreason' => 'অন্য/বাড়তি কারণ:',
 'revdelete-reasonotherlist' => 'অন্য কারণ',
@@ -1136,7 +1158,7 @@ $1",
 'timezoneregion-indian' => 'ভারত মহাসাগর',
 'timezoneregion-pacific' => 'প্রশান্ত মহাসাগর',
 'allowemail' => 'অন্য ব্যবহারকারীদেরকে আপনাকে ই-মেইল পাঠানোর অনুমতি দিন।',
-'prefs-searchoptions' => 'অনুসন্ধানের পছন্দসমূহ',
+'prefs-searchoptions' => 'অনুসন্ধান',
 'prefs-namespaces' => 'নামস্থানসমূহ',
 'defaultns' => 'নতুবা এই নামস্থানগুলিতে অনুসন্ধান করো:',
 'default' => 'আদি অবস্থা',
@@ -1246,22 +1268,33 @@ $1",
 'right-move-subpages' => 'পাতাগুলোকে তার উপপাতাসহ সরিয়ে নিন',
 'right-move-rootuserpages' => 'root ব্যবহারকারীর পাতাগুলো সরিয়ে ফেলুন',
 'right-movefile' => 'ফাইল স্থানান্তর',
+'right-suppressredirect' => 'পাতা স্থানান্তরের সময় মূল পাতায় রিডাইরেক্ট তৈরী করছে না',
 'right-upload' => 'ফাইল আপলোড করুন',
 'right-reupload' => 'বিদ্যমান ফাইল প্রতিস্থাপন করো',
+'right-reupload-own' => 'কারও আপলোডকৃত ফাইল ওভাররাইট করুন',
+'right-reupload-shared' => 'স্থানীয়ভাবে শেয়ার্ড মিডিয়া রিপোজিটরীর ফাইল ওভাররাইড',
 'right-upload_by_url' => 'URL থেকে ফাইল আপলোড',
+'right-purge' => 'নিশ্চিতকরণ ছাড়াই সাইটের ক্যাশ পার্জ করুন',
 'right-autoconfirmed' => 'অর্ধ-সুরক্ষিত পাতা সম্পাদনা',
+'right-bot' => 'সয়ংক্রিয় পদ্ধতি হিসাবে চিহ্নিত করণ',
+'right-apihighlimits' => 'API কোয়েরি হিসাবে আরও উচ্চ লিমিট ব্যবহার করুন',
 'right-writeapi' => 'write API এর ব্যবহার',
 'right-delete' => 'পাতা মুছে ফেলুন',
 'right-bigdelete' => 'বিশাল ইতিহাস সম্বলিত পাতা মুছে ফেলো',
+'right-deletelogentry' => 'নির্দিষ্ট লগ এন্ট্রি অপসারণ অথবা ফিরিয়ে আনুন',
 'right-deleterevision' => 'পাতার নির্দিষ্ট সংশোধনসমূহ অপসারণ এবং পুনরুদ্ধার',
 'right-deletedhistory' => 'অপরাসিত ভুক্তির ইতিহাস দেখাও, তাদের সংশ্লিষ্ট লেখা ছাড়া',
 'right-deletedtext' => 'অপরাসারিত সংশোধনের অপরাসারিত লেখা এবং পরিবর্তনসমূহ দেখাও',
 'right-browsearchive' => 'অপসারিত পাতা অনুসন্ধান করো',
 'right-undelete' => 'পাতাটি পুনরুদ্ধার করুন',
+'right-suppressrevision' => 'প্রশাসকদের থেকে লুকানো সংস্করণগুলো রিভিউ এবং রিস্টোর করুন',
 'right-suppressionlog' => 'ব্যক্তিগত লগ দেখাও',
 'right-block' => 'সম্পাদনা করতে কোনো ব্যবহারকারীকে বাঁধা দাও',
 'right-blockemail' => 'ই-মেইল পাঠাতে কোনো ব্যবহারকারীকে বাঁধা দাও',
 'right-hideuser' => 'ব্যবহারকারীকে ব্লক করুন, এবং সর্বসাধারণের দৃষ্টিসীমা থেকে সরিয়ে নিন',
+'right-ipblock-exempt' => 'আইপি ব্লক, অটো ব্লক এবং রেঞ্জ ব্লক এড়িয়ে যান',
+'right-proxyunbannable' => 'সয়ংক্রিয় প্রক্সি ব্লক এড়িয়ে যান',
+'right-unblockself' => 'আনব্লক করুন',
 'right-protect' => 'পাতাটির সংরক্ষণ সীমা পরিবর্তন করুন এবং পাতটি সম্পাদনা করুন',
 'right-editprotected' => 'সুরক্ষিত পাতা সম্পাদনা (ক্যাসকাডিং সুরক্ষা ছাড়া)',
 'right-editinterface' => 'ব্যবহারকারী ইন্টারফেস সম্পাদনা',
@@ -1273,6 +1306,7 @@ $1",
 'right-import' => 'অন্য উইকি থেকে পাতা আমদানী করো',
 'right-importupload' => 'ফাইল আপলোড থেকে এই পাতাগুলো আমদানী করো',
 'right-patrol' => 'অন্যের সম্পাদনা পরীক্ষিত বলে চিহ্নিত করো',
+'right-autopatrol' => 'কারও নিজের সম্পাদনা সয়ংক্রিয়ভাবে পরীক্ষাণ হিসাবে চিহ্নিত',
 'right-patrolmarks' => 'সাম্প্রতিক পরিবর্তনের পরীক্ষিত চিহ্ন দেখাও',
 'right-unwatchedpages' => 'নজরতালিকা বহির্ভূত পাতাগুলির তালিকা দেখাও',
 'right-mergehistory' => 'পাতার ইতিহাস একীকরণ করুন।',
@@ -1281,11 +1315,13 @@ $1",
 'right-siteadmin' => 'ডাটাবেজ বন্ধ এবং খুলুন',
 'right-override-export-depth' => '৫ম স্তর পর্যন্ত সংযুক্তিসহ একটি পাতা রপ্তানী করুন',
 'right-sendemail' => 'অন্য ব্যবহারকারীকে ইমেইল পাঠান',
+'right-passwordreset' => 'পাসওয়ার্ড রিসেট ইমেইল দেখুন',
 
 # User rights log
 'rightslog' => 'ব্যবহারকারীর অধিকার লগ',
 'rightslogtext' => 'এটি ব্যবহারকারী অধিকারে আনা পরিবর্তনগুলির একটি লগ।',
 'rightslogentry' => '$1-কে $2 দল থেকে পরিবর্তন করে $3 দলের সদস্য করা হয়েছে',
+'rightslogentry-autopromote' => 'সয়ংক্রিয়ভাবে $2 থেকে $3 উন্নীত হয়েছে',
 'rightsnone' => '(কিছু নাই)',
 
 # Associated actions - in the sentence "You do not have permission to X"
@@ -1301,6 +1337,7 @@ $1",
 'action-movefile' => 'এই ফাইলটি সরিয়ে ফেলুন',
 'action-upload' => 'এই ফাইল আপলোড করো',
 'action-reupload' => 'বিদ্যমান ফাইল প্রতিস্থাপন করো',
+'action-reupload-shared' => 'শেয়ার্ড রিপোজিটরীতে এই ফাইলটি আপডেট করুন',
 'action-upload_by_url' => 'কোন ইউআরএল থেকে ফাইলটি আপলোড করো',
 'action-writeapi' => 'রাইট এপিআই ব্যবহার করুন',
 'action-delete' => 'পাতাটি মুছে ফেলো',
@@ -1308,9 +1345,11 @@ $1",
 'action-deletedhistory' => 'পাতার মুছে ফেলা ইতিহাস দেখাও',
 'action-browsearchive' => 'অপসারিত পাতায় অনুসন্ধান করুন',
 'action-undelete' => 'পাতাটি পুনরুদ্ধার করো',
+'action-suppressrevision' => 'লুকানো সংস্করণগুলো রিভিউ এবং রিস্টোর করুন',
 'action-suppressionlog' => 'এই ব্যক্তিগত লগ দেখাও',
 'action-block' => 'এই ব্যবহারকারীকে সম্পাদনা করতে বাঁধা দাও',
 'action-protect' => 'এই পাতার সুরক্ষার মাত্রা পরিবর্তন করো',
+'action-rollback' => 'একটি নির্দিষ্ট পাতার সর্বশেষ ব্যবহারকারীর সম্পদনা পূর্বাবস্থায় ফিরিয়ে আনুন',
 'action-import' => 'অন্য উইকি থেকে এই পাতাটি আমদানী করো',
 'action-importupload' => 'ফাইল আপলোড থেকে এই পাতাটি আমদানী করো',
 'action-patrol' => 'অন্যদের সম্পাদনা পরীক্ষিত বলে চিহ্নিত করো',
@@ -1319,6 +1358,7 @@ $1",
 'action-mergehistory' => 'এই পাতার ইতিহাস একত্রিত করুন',
 'action-userrights' => 'সকল ব্যবহারকারীর অধিকার সম্পাদনা করুন',
 'action-userrights-interwiki' => 'অন্যান্য উইকির ব্যবহারকারীদের অধিকারসমূহ সম্পাদনা করুন',
+'action-siteadmin' => 'ডাটাবেজ বন্ধ অথবা খুলুন',
 'action-sendemail' => 'ই-মেইল পাঠাও',
 
 # Recent changes
@@ -1353,9 +1393,11 @@ $1",
 'number_of_watching_users_pageview' => '[$1 {{PLURAL:$1|জন ব্যবহারকারী|জন ব্যবহারকারী}} এই পাতার উপর নজর রাখছেন]',
 'rc_categories' => 'এই বিষয়শ্রেণীগুলিতে সীমাবদ্ধ করা হোক ("|" দিয়ে আলাদা করে লিখুন)',
 'rc_categories_any' => 'যেকোনো',
+'rc-change-size-new' => 'পরিবর্তনের পর $1 {{PLURAL:$1|বাইট}}',
 'newsectionsummary' => '/* $1 */ নতুন অনুচ্ছেদ',
 'rc-enhanced-expand' => 'বিস্তারিত দেখাও (জাভাস্ক্রিপ্ট দরকার)',
 'rc-enhanced-hide' => 'বিস্তারিত লুকাও',
+'rc-old-title' => 'মূলত "$1" হিসাবে তৈরী করা হয়েছিল',
 
 # Recent changes linked
 'recentchangeslinked' => 'সম্পর্কিত পরিবর্তন',
@@ -1377,6 +1419,9 @@ $1",
 'upload_directory_missing' => 'আপলোড ডাইরেক্টরি ($1) পাওয়া যাচ্ছে না এবং ওয়েব সার্ভার কর্তৃক তৈরি করা যাচ্ছে না।',
 'upload_directory_read_only' => 'আপলোড ডিরেক্টরিটি ($1) ওয়েবসার্ভার কর্তৃক লিখনযোগ্য নয়।',
 'uploaderror' => 'আপলোড এ সমস্যা হয়েছে',
+'upload-recreate-warning' => "'''সতর্কতা: এই নামের ফাইলটি অপসারণ অথবা স্থানান্তর করা হয়েছে।'''
+
+কাজের সুবিধার জন্য অপসারণ এবং স্থানান্তর লগ এখানে দেখানো হল:",
 'uploadtext' => "ফাইল আপলোড করতে নিচের ফরমটি ব্যবহার করুন।</br>
 পূর্বে আপলোড করা ফাইল দেখতে বা অনুসন্ধানে [[Special:FileList|পূর্বে আপলোড করা ফাইলের তালিকা]] দেখুন। (পুনঃ)আপলোড করা ফাইল এর নাম  [[Special:Log/upload|আপলোড লগে]] যোগ হয়, অপসারিত ফাইলের নাম [[Special:Log/delete|অপসারণ লগে]] রয়েছে।
 
@@ -1402,7 +1447,9 @@ $1",
 'ignorewarnings' => 'সমস্ত সতর্কীকরণ উপেক্ষা করা হোক',
 'minlength1' => 'ফাইলের নাম কমপক্ষে এক বর্ণের হতে হবে।',
 'illegalfilename' => '"$1" ফাইলনামটিতে এমন কিছু ক্যারেক্টার আছে যেগুলি পাতার শিরোনামে ব্যবহার করা অবৈধ। অনুগ্রহ করে ফাইলটি নতুন করে নামকরণ করুন এবং তারপর আপলোড করার চেষ্টা করুন।',
+'filename-toolong' => 'ফাইলের নাম ২৪০ বাইটের বড় হওয়া যাবে না।',
 'badfilename' => 'ফাইলের নামটি পরিবর্তন করে $1" করা হয়েছে।',
+'filetype-mime-mismatch' => '".$1" ফাইল এক্সটেনশনটি MIME থেকে চিহ্নিত ফাইলের ধরনের সাথে মিলছে না ($2)।',
 'filetype-badmime' => '"$1" MIME ধরনের ফাইল আপলোড করা যাবে না।',
 'filetype-bad-ie-mime' => 'এই ফাইলটি আপলোড করা সম্ভব নয় কারণ ইন্টারনেট এক্সপ্লোরার একে "$1" হিসেবে সনাক্ত করতে পারে, যা অননুমোদিত এবং সম্ভাব্য ক্ষতিকারক ফাইল টাইপ।',
 'filetype-unwanted-type' => "'''\".\$1\"''' ফাইল ধরনটি অগ্রহণযোগ্য।
@@ -1413,6 +1460,7 @@ $1",
 'file-too-large' => 'আপনার জমাকৃত ফাইলটি অনেক বড়।',
 'filename-tooshort' => 'ফাইল নামটি খুব ছোট।',
 'filetype-banned' => 'এই ধরনের ফাইল নিষিদ্ধ।',
+'verification-error' => 'এই ফাইলের ফাইল ভ্যালিডেশন উত্তীর্ণ হয়নি।',
 'illegal-filename' => 'ফাইলের এই নামটি গ্রহণযোগ্য নয়।',
 'overwrite' => 'বিদ্যমান কোনো ফাইল প্রতিস্থাপন গ্রহণযোগ্য নয়।',
 'unknown-error' => 'একটি অজানা ত্রুটি দেখা দিয়েছে।',
@@ -1465,6 +1513,9 @@ $1",
 'upload-success-subj' => 'আপলোড সফল হয়েছে',
 'upload-success-msg' => '[$2] থেকে আপনার আপলোড সফল হয়েছে। এটি এখানে: [[:{{ns:file}}:$1]] পাওয়া যাবে',
 'upload-failure-subj' => 'আপলোড সমস্যা',
+'upload-failure-msg' => 'আপনার আপলোড ফর্ম [$2]-এ একটি সমস্যা হয়েছে:
+
+$1',
 'upload-warning-subj' => 'আপলোড সতর্কীকরণ',
 'upload-warning-msg' => '[$2] থেকে করা আপনার আপলোডে সমস্যা হয়েছে। সমস্যার সমাধানকল্পে আপনাকে সম্ভবত [[Special:Upload/stash/$1|আপলোড ফর্ম]]-এ ফিরে যেতে হবে।',
 
@@ -1480,11 +1531,35 @@ $1",
 'upload-too-many-redirects' => 'এই ইউআরএলটিতে অনেক বেশি পুনর্নির্দেশনা রয়েছে',
 'upload-unknown-size' => 'অজানা আকার',
 'upload-http-error' => 'একটি এইচটিটিপি ত্রুটি দেখা দিয়েছে: $1',
+'upload-copy-upload-invalid-domain' => 'এই ডোমেইন থেকে আপলোড সম্ভব নয়।',
 
 # File backend
+'backend-fail-stream' => '"$1" ফাইলের স্ট্রিম দেখানো যাচ্ছে না।',
+'backend-fail-backup' => '"$1" ফাইলের ব্যাকআপ তৈরী সম্ভব নয়।',
+'backend-fail-notexists' => '"$1" নামের কোনো ফাইল নেই।',
+'backend-fail-hashes' => 'তুলনা করার জন্য ফাইল হ্যাশ খুজে পাওয়া যাচ্ছে না।',
+'backend-fail-notsame' => '"$1"-এ আগে থেকেই অপর একটি ফাইল রয়েছে।',
+'backend-fail-invalidpath' => '"$1" একটি ভুল স্টোরেজ পাথ।',
 'backend-fail-delete' => '$1 ফাইলটি অপসারণ সম্ভব নয়।',
+'backend-fail-alreadyexists' => '"$1" নামের একটি ফাইল আগে থেকেই রয়েছে।',
+'backend-fail-store' => '"$2"-এ "$1" ফাইলটি সংরক্ষন করা সম্ভব নয়।',
+'backend-fail-copy' => '"$1" ফাইলটি "$2"-তে কপি করা সম্ভব নয়।',
+'backend-fail-move' => '"$2"-এ "$1" ফাইলটি স্থানান্তর করা সম্ভব নয়।',
+'backend-fail-opentemp' => 'অস্থায়ী ফাইলটি ওপেন করা যাচ্ছে না।',
+'backend-fail-writetemp' => 'অস্থায়ী ফাইলটিতে লেখা যাচ্ছে না।',
+'backend-fail-closetemp' => 'অস্থায়ী ফাইলটি বন্ধ করা যাচ্ছে না।',
 'backend-fail-read' => '$1 ফাইলটি ওপেন করা যাচ্ছে না।',
 'backend-fail-create' => '$1 ফাইলটি তৈরী করা যাচ্ছে না।',
+'backend-fail-maxsize' => '"$1" ফাইলে লেখা যাচ্ছে না কারণ এটি {{PLURAL:$2|এক বাইট|$2 বাইট}} থেকে বড়।',
+'backend-fail-readonly' => '"$1" স্টোরেজ ব্যাকএন্ড থেকে বর্তমানে লেখা যাচ্ছে না। কারণ: "\'\'$2\'\'"',
+
+# Lock manager
+'lockmanager-notlocked' => '"$1" আনলক করা যাচ্ছে না; এটি লক করা রয়েছে।',
+'lockmanager-fail-closelock' => '"$1" ফাইলটি লক করা তাই বন্ধ করা যাচ্ছে না।',
+'lockmanager-fail-deletelock' => '"$1" লক করা ফাইলটি অপসারণ সম্ভব নয়।',
+'lockmanager-fail-acquirelock' => '"$1" লক করা ফাইল খুজে পাওয়া যাচ্ছে না।',
+'lockmanager-fail-openlock' => '"$1" লক করা ফাইলটি খোলা সম্ভব নয়।',
+'lockmanager-fail-releaselock' => '"$1" লক করা ফাইলটি ছাড়া যাচ্ছে না।',
 
 # ZipDirectoryReader
 'zip-file-open-error' => 'ফাইলটির জিপ পরীক্ষা করার সময় একটি ত্রুটি দেখা দিয়েছে।',
@@ -1567,6 +1642,7 @@ $1",
 'filepage-nofile' => 'এই নামের কোন ফাইল নেই।',
 'uploadnewversion-linktext' => 'এই ফাইলটির একটি নতুন সংস্করণ আপলোড করুন',
 'shared-repo-from' => '$1 থেকে',
+'shared-repo' => 'শেয়ার্ড রিপোজিটরী',
 
 # File reversion
 'filerevert' => '$1 পূর্বাবস্থায় ফেরত নিন',
@@ -1645,13 +1721,16 @@ $1",
 
 'disambiguations' => 'দ্ব্যর্থতা-দূরীকরণ পাতাসমূহে সংযোগকৃত পাতাসমূহ',
 'disambiguationspage' => 'Template:দ্ব্যর্থতা_নিরসন',
-'disambiguations-text' => "নিচের পাতাগুলি থেকে একটি '''দ্ব্যর্থতা নিরসন পাতা'''-তে সংযোগ আছে। এর পরিবর্তে এগুলি থেকে একটি উপযুক্ত বিষয়ে সংযোগ থাকা আবশ্যক।<br />যদি কোন পাতায় এমন কোন টেমপ্লেট থাকে যেটিতে [[MediaWiki:Disambiguationspage]] থেকে সংযোগ আছে, তবে সেই পাতাটিকে একটি দ্ব্যর্থতা নিরসন পাতা হিসেবে গণ্য করা হয়।",
+'disambiguations-text' => "নিচের পাতাগুলিতে অন্তত একটি '''দ্ব্যর্থতা নিরসন পাতা'''-তে সংযোগ আছে।
+এর পরিবর্তে এগুলি থেকে একটি উপযুক্ত বিষয়ে সংযোগ থাকা আবশ্যক।<br />
+যদি কোন পাতায় এমন কোন টেমপ্লেট থাকে যেটিতে [[MediaWiki:Disambiguationspage]] থেকে সংযোগ আছে, তবে সেই পাতাটিকে একটি দ্ব্যর্থতা নিরসন পাতা হিসেবে গণ্য করা হয়।",
 
 'doubleredirects' => 'দুইবার করা পুনর্নির্দেশনাগুলি',
 'doubleredirectstext' => 'এই পাতায় এমন পাতাগুলোর তালিকা আছে, যেগুলো অন্য কোন পুনর্নির্দেশনা পাতায় পুনর্নির্দেশিত হয়েছে। প্রতিটি সারিতে প্রথম ও দ্বিতীয় পুনর্নির্দেশনার জন্য সংযোগ আছে এবং দ্বিতীয় পুনর্নির্দেশনাটির লক্ষ্য সংযোগটিও দেওয়া আছে। এই লক্ষ্য সংযোগটিই সাধারণত "আসল" লক্ষ্য পাতা, যেটিতে প্রথম পুনর্নির্দেশনাটি থেকে সংযোগ থাকা উচিত।
 <del>কেটে দেওয়া</del> ভুক্তিগুলো ঠিক করা হয়েছে।',
 'double-redirect-fixed-move' => '[[$1]] সরিয়ে নেওয়া হয়েছে।
 এটি এখন [[$2]] এ পুনঃনির্দেশিত হয়েছে।',
+'double-redirect-fixed-maintenance' => '[[$1]] থেকে [[$2]] এর দ্বিপুনঃর্নিদেশ সংশোধন করা হয়েছে।',
 'double-redirect-fixer' => 'পুনঃনির্দেশনা মেরামতকারী',
 
 'brokenredirects' => 'অকার্যকর পুনর্নির্দেশনাসমূহ',
@@ -1669,6 +1748,7 @@ $1",
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|বাইট|বাইট}}',
 'ncategories' => '$1 {{PLURAL:$1|বিষয়শ্রেণী|বিষয়শ্রেণীসমূহ}}',
+'ninterwikis' => '$1 {{PLURAL:$1|ইন্টারউইকি|ইন্টারউইকিসমূহ}}',
 'nlinks' => '$1টি {{PLURAL:$1|সংযোগ|সংযোগসমূহ}}',
 'nmembers' => '$1 {{PLURAL:$1|সদস্য|সদস্যবৃন্দ}}',
 'nrevisions' => '$1 {{PLURAL:$1|সংশোধন|সংশোধনসমূহ}}',
@@ -1694,8 +1774,10 @@ $1",
 'mostlinkedtemplates' => 'যেসব টেমপ্লেটে সবচেয়ে বেশি সংযোগ আছে',
 'mostcategories' => 'সবচেয়ে বেশী বিষয়শ্রেণী-সমৃদ্ধ নিবন্ধসমূহ',
 'mostimages' => 'যেসব ফাইলের দিকে সবচেয়ে বেশি সংযোগ আছে',
+'mostinterwikis' => 'সবচেয়ে বেশী ইন্টারউইকি লিংক-সমৃদ্ধ নিবন্ধসমূহ',
 'mostrevisions' => 'সবচেয়ে বেশী বার সম্পাদিত নিবন্ধসমূহ',
 'prefixindex' => 'উপসর্গ সহ সমস্ত পাতা',
+'prefixindex-namespace' => 'প্রিফিক্স সম্পবলিত সকল পাতা ($1 নামস্থান)',
 'shortpages' => 'সংক্ষিপ্ত পাতাসমূহ',
 'longpages' => 'দীর্ঘ পাতাসমূহ',
 'deadendpages' => 'যেসব পাতা থেকে কোনো সংযোগ নেই',
@@ -1728,12 +1810,14 @@ $1",
 'pager-newer-n' => '{{PLURAL:$1|নতুনতর ১টি|নতুনতর $1টি}}',
 'pager-older-n' => '{{PLURAL:$1|আরও পুরনো ১টি|আরও পুরনো $1টি}}',
 'suppress' => 'ওভারসাইট',
+'querypage-disabled' => 'কারিগরি কারণে এই বিশেষ পাতাটি আপাতত বন্ধ রয়েছে।',
 
 # Book sources
 'booksources' => 'বইয়ের উৎস',
 'booksources-search-legend' => 'বইয়ের উৎসের জন্য অনুসন্ধান করা হোক',
 'booksources-go' => 'চলো',
 'booksources-text' => 'নতুন ও পুরাতন ব্যবহৃত বই বিক্রি করে, এমন কতগুলি সাইটের সংযোগের তালিকা নিচে দেওয়া হল, যে সাইটগুলিতে আপনার অনুসন্ধানকৃত বইগুলির উপর আরও তথ্য থাকতে পারে:',
+'booksources-invalid-isbn' => 'উল্লেখিত ISBN সঠিক নয়; অনুগ্রহ করে মূল উৎস থেকে আবার পরীক্ষা করুন।',
 
 # Special:Log
 'specialloguserlabel' => 'সম্পাদক:',
@@ -1744,6 +1828,7 @@ $1",
 আপনি লগের ধরন, ব্যবহারকারীর নাম, বা পাতার নাম নির্বাচন করে প্রদর্শনটির আকার কমিয়ে আনতে পারেন।',
 'logempty' => 'মিলে যায় এমন কিছু লগে পাওয়া যায়নি।',
 'log-title-wildcard' => 'এই টেক্সট দিয়ে শুরু হওয়া শিরোনামগুলি অনুসন্ধান করা হোক',
+'showhideselectedlogentries' => 'নির্বাচিত লগগুলো দেখাও/লুকাও',
 
 # Special:AllPages
 'allpages' => 'সব পাতা',
@@ -1764,6 +1849,8 @@ $1",
 'allpages-hide-redirects' => 'পুনর্নির্দেশনাগুলো লুকাও',
 
 # SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'আপনার ওপেন করা পাতাটি ক্যাশ থেকে প্রদর্শিত হচ্ছে, এটি $1 দিনের পুরানো হতে পারে।',
+'cachedspecial-viewing-cached-ts' => 'আপনার ওপেন করা পাতাটি ক্যাশ থেকে প্রদর্শিত হচ্ছে, এটি সম্পূর্ণ নতুন হতে পারে।',
 'cachedspecial-refresh-now' => 'সাম্প্রতিকগুলো প্রদর্শন করো।',
 
 # Special:Categories
@@ -1785,7 +1872,11 @@ $1",
 'linksearch-pat' => 'অনুসন্ধান প্যাটার্ন:',
 'linksearch-ns' => 'নামস্থান:',
 'linksearch-ok' => 'অনুসন্ধান',
+'linksearch-text' => '"*.wikipedia.org" এর মত ওয়াইল্ড কার্ড ব্যবহার করা যেতে পারে।
+নূন্যতম একটি টপ লেভেল ডোমেইন প্রয়োজন, যেমন "*.org".<br />
+যে সকল প্রোটোকল সমর্থন করে: <code>$1</code> (অনুসন্ধান বক্সে এগুলো ব্যবহার করবেন না)।',
 'linksearch-line' => '$2 থেকে $1 এ লিংক করা হয়েছে',
+'linksearch-error' => 'হোস্ট নামের শুরুতে কেবলমাত্র ওয়াইল্ডকার্ড ব্যবহার করা যায়।',
 
 # Special:ListUsers
 'listusersfrom' => 'সেই সব ব্যবহারকারী দেখাও যাদের নাম এই অক্ষর দিয়ে শুরু:',
@@ -1808,6 +1899,8 @@ $1",
 
 # Special:ListGroupRights
 'listgrouprights' => 'দলগত ব্যবহারকারী অধিকার',
+'listgrouprights-key' => '* <span class="listgrouprights-granted">অনুমোদিত অধিকার</span>
+* <span class="listgrouprights-revoked">বাধাপ্রাপ্ত অধিকার</span>',
 'listgrouprights-group' => 'দল',
 'listgrouprights-rights' => 'অধিকারসমূহ',
 'listgrouprights-helppage' => 'Help:দলের অধিকার',
@@ -1816,20 +1909,29 @@ $1",
 'listgrouprights-removegroup' => '{{PLURAL:$2|দল|দলসমূহ}} অপসারণ: $1',
 'listgrouprights-addgroup-all' => 'সমস্ত দল যোগ করুন',
 'listgrouprights-removegroup-all' => 'সমস্ত দল অপসারণ করুন',
+'listgrouprights-addgroup-self' => 'নিজের অ্যকাউন্টে {{PLURAL:$2|দল|দলসমূহ}} সংযোজন: $1',
+'listgrouprights-removegroup-self' => 'নিজের অ্যাকাউন্ট থেকে {{PLURAL:$2|দল|দলসমূহ}} অপসারণ: $1',
+'listgrouprights-addgroup-self-all' => 'নিজের অ্যাকাউন্টে সকল দল সংযোজন',
+'listgrouprights-removegroup-self-all' => 'নিজের অ্যাকাউন্ট থেকে সকল দল অপসারণ',
 
 # E-mail user
 'mailnologin' => 'প্রাপকের ঠিকানা নেই',
 'mailnologintext' => "অন্য ব্যবহারকারীদেরকে ই-মেইল পাঠাতে হলে আপনাকে অবশ্যই আগে [[Special:UserLogin|লগ-ইন]] করতে হবে এবং ''[[Special:Preferences|আপনার পছন্দ তালিকায়]] আপনার ই-মেইল ঠিকানাটি ঠিকমত দিতে হবে।",
 'emailuser' => 'ইমেইল করো',
+'emailuser-title-target' => '{{GENDER:$1|ব্যবহারকারীকে}} ইমেইল পাঠান',
+'emailuser-title-notarget' => 'ব্যবহারকারীকে ই-মেইল করুন',
 'emailpage' => 'ব্যবহারকারীকে ই-মেইল করুন',
 'emailpagetext' => 'আপনি নিচের ফর্মটি ব্যবহার করে এই ব্যবহারকারীকে একটি ই-মেইল পাঠাতে পারেন।
 আপনি [[Special:Preferences|আপনার ব্যবহারকারী পছন্দে]] যে ই-মেইল ঠিকানাটি প্রবেশ করিয়েছেন সেটিকে ই-মেইলের প্রেরক হিসেবে দেখানো হবে, যেনো মেইলের প্রাপক আপনাকে উত্তর দিতে পারেন।',
 'usermailererror' => 'মেইল অবজেক্ট ত্রুটি পাঠিয়েছে:',
 'defemailsubject' => '{{SITENAME}} ব্যবহারকারী "$1" প্রেরিত ইমেইল',
 'usermaildisabled' => 'ব্যবহারকারী ই-মেইল নিস্ক্রিয়',
+'usermaildisabledtext' => 'আপনি এই উইকির অন্যান্য ব্যবহারকারীকে ইমেইল পাঠাতে পারবেন না',
 'noemailtitle' => 'ই-মেইল ঠিকানা নেই',
 'noemailtext' => 'এই ব্যবহারকারী কোন বৈধ ই-মেইল ঠিকানা জানাননি।',
 'nowikiemailtitle' => 'কোন ইমেইল অনুমোদিত নয়',
+'nowikiemailtext' => 'এই ব্যবহারকারীকে ইমেইল পাঠানোর অপশন বন্ধ রয়েছে।',
+'emailnotarget' => 'প্রাপকের ব্যবহারকারী নাম সঠিক নয় অথবা এই নামের ব্যবহারকারী নেই।',
 'emailtarget' => 'ব্যবহারকারী নাম অথবা প্রাপকের নাম প্রবেশ করান',
 'emailusername' => 'ব্যবহারকারী নাম:',
 'emailusernamesubmit' => 'জমা দাও',
@@ -1887,6 +1989,7 @@ $1",
 # Displayed when you click the "watch" button and it is in the process of watching
 'watching' => 'নজর রাখা হচ্ছে...',
 'unwatching' => 'নজর তুলে নেওয়া হচ্ছে...',
+'watcherrortext' => '"$1" এর নজরতালিকা পরিবর্তনের সময় একটি ত্রুটি হয়েছে।',
 
 'enotif_mailer' => '{{SITENAME}} বিজ্ঞপ্তি ই-মেইল প্রেরক',
 'enotif_reset' => 'সমস্ত পাতা দেখা হয়েছে হিসেবে চিহ্নিত করুন',
@@ -1967,6 +2070,8 @@ $UNWATCHURL
 'rollback' => 'সম্পাদনা ফিরিয়ে নিন',
 'rollback_short' => 'ফিরিয়ে নিন',
 'rollbacklink' => 'পুনর্বহাল',
+'rollbacklinkcount' => '$1 {{PLURAL:$1|সম্পাদনা|সম্পাদনাগুলো}} রোলব্যাক করুন',
+'rollbacklinkcount-morethan' => '$1 এর বেশি {{PLURAL:$1|সম্পাদনা|সম্পাদনাগুলো}} রোলব্যাক করুন',
 'rollbackfailed' => 'রোলব্যাক ব্যর্থ',
 'cantrollback' => 'পূর্বের সংস্করণে ফেরত যাওয়া সম্ভব হল না, সর্বশেষ সম্পাদনাকারী এই নিবন্ধটির একমাত্র লেখক।',
 'alreadyrolled' => '[[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) দ্বারা সম্পাদিত সর্বশেষ [[:$1]] সম্পাদনাটি পুনর্বহাল করা যাচ্ছে না;
@@ -1993,12 +2098,16 @@ $UNWATCHURL
 'unprotectedarticle' => '"[[$1]]"-এর সুরক্ষা সরিয়ে নেওয়া হয়েছে',
 'movedarticleprotection' => 'সুরক্ষা সেটিংস "[[$2]]" থেকে "[[$1]]"-এ স্থানান্তরিত হয়েছে',
 'protect-title' => '"$1" সুরক্ষিত করা হচ্ছে',
+'protect-title-notallowed' => '"$1" এর সুরক্ষা মাত্রা দেখুন',
 'prot_1movedto2' => '[[$1]]-কে [[$2]]-এ সরিয়ে নেওয়া হয়েছে',
+'protect-badnamespace-title' => 'নামস্থানটি সুরক্ষিত করা সম্ভব নয়',
+'protect-badnamespace-text' => 'এই নামস্থানের পাতাগুলো সুরক্ষিত করা সম্ভব নয়।',
 'protect-legend' => 'সুরক্ষা নিশ্চিত করুন',
 'protectcomment' => 'কারণ:',
 'protectexpiry' => 'মেয়াদোত্তীর্ণ হবে:',
 'protect_expiry_invalid' => 'মেয়াদোত্তীর্ণ সময় অবৈধ।',
 'protect_expiry_old' => 'মেয়াদোত্তীর্ণ সময় অতীতে অবস্থিত।',
+'protect-unchain-permissions' => 'সুরক্ষিত করার অন্যন্য অপশনগুলো আনলক করুন',
 'protect-text' => "'''$1''' পাতাটির জন্য সুরক্ষার স্তর আপনি এখানে দেখতে ও পরিবর্তন করতে পারেন।",
 'protect-locked-blocked' => "বাধাপ্রাপ্ত অবস্থায় আপনি পাতাটির সুরক্ষা স্তর পরিবর্তন করতে পারবেন না। এখানে '''$1''' পাতাটির বর্তমান সেটিংস দেওয়া হল:",
 'protect-locked-dblock' => "ডাটাবেজ বন্ধ থাকায় সুরক্ষা স্তর পরিবর্তন করা যাবে না।
@@ -2051,11 +2160,13 @@ $UNWATCHURL
 'viewdeletedpage' => 'মুছে ফেলা হয়েছে, এমন পাতাগুলো দেখুন',
 'undeletepagetext' => 'নিচের {{PLURAL:$1|পাতা মুছে ফেলা হয়েছে কিন্তু|$1 পাতাগুলি মুছে ফেলা হয়েছে কিন্তু}} এগুলি এখনও আর্কাইভে আছে ও পুনরুদ্ধার করা সম্ভব। আর্কাইভ পর্যায়ক্রমিকভাবে পরিস্কার করা হতে পারে।',
 'undelete-fieldset-title' => 'সংশোধন পুনরুদ্ধার',
-'undeleteextrahelp' => "সম্পূর্ণ পাতাটি পুনরুদ্ধার করার জন্য সবগুলি টিকবাক্স অনির্বাচিত করুন এবং '''''{{int:undeletebtn}}''''' বোতামে ক্লিক করুন। নির্বাচিত পুনরুদ্ধারের জন্য যেসব সংশোধন পুনরুদ্ধার করতে চান, তার পাশের বাক্সে টিক দিন এবং '''''{{int:undeletebtn}}''''' বোতামে ক্লিক করুন। '''''{{int:undeletereset}}''''' বোতামে ক্লিক করলে মন্তব্য রাখার এলাকা ও সবগুলি টিকবাক্স খালি করে দেওয়া হবে।",
+'undeleteextrahelp' => "সম্পূর্ণ পাতাটি পুনরুদ্ধার করার জন্য সবগুলি টিকবাক্স অনির্বাচিত করুন এবং '''''{{int:undeletebtn}}''''' বোতামে ক্লিক করুন।
+নির্বাচিত পুনরুদ্ধারের জন্য যেসব সংশোধন পুনরুদ্ধার করতে চান, তার পাশের বাক্সে টিক দিন এবং '''''{{int:undeletebtn}}''''' বোতামে ক্লিক করুন।",
 'undeleterevisions' => '$1 {{PLURAL:$1|টি সংশোধন|টি সংশোধন}} আর্কাইভে আছে',
 'undeletehistory' => 'আপনি যদি পাতাটি পুনরুদ্ধার করেন, তবে সবগুলি সংশোধন ইতিহাসে ফিরিয়ে আনা হবে।
-যদি মুছে ফেলার পর একই নামে আরেকটি পাতা সৃষ্টি করা হয়ে থাকে, তবে পুনরুদ্ধারকৃত সংশোধনগুলি পূর্বের ইতিহাসে স্থান পাবে। আরও লক্ষ্য করুন যে ফাইল সংশোধনের উপর সীমাবদ্ধতা পুনরুদ্ধারের পর বাতিল হয়ে যায়।',
-'undeleterevdel' => 'শীর্ষে অবস্থিত সংশোধনটি যদি আংশিক মুছে যায়, তবে মুছে ফেলা বাতিল করা হবে না। এ ধরনের ক্ষেত্রে আপনাকে অবশ্যই নতুনতম মুছে ফেলা সংশোধনগুলি অনির্বাচিত করতে হবে। আপনার যেসব ফাইলের সংশোধন দেখার অনুমতি নেই, সেগুলি পুনরুদ্ধার করা হবে না।',
+যদি মুছে ফেলার পর একই নামে আরেকটি পাতা সৃষ্টি করা হয়ে থাকে, তবে পুনরুদ্ধারকৃত সংশোধনগুলি পূর্বের ইতিহাসে স্থান পাবে।',
+'undeleterevdel' => 'শীর্ষে অবস্থিত সংশোধনটি যদি আংশিক মুছে যায়, তবে মুছে ফেলা বাতিল করা যাবে না।
+এ ধরনের ক্ষেত্রে আপনাকে অবশ্যই নতুনতম মুছে ফেলা সংশোধনগুলি অনির্বাচিত করতে হবে।',
 'undeletehistorynoadmin' => 'এই পাতাটি মুছে ফেলা হয়েছে। মুছে ফেলার কারণ নিচের সারাংশে দেখানো হল। সেই সাথে মুছে ফেলার আগে যেসমস্ত ব্যবহারকারী পাতাটি সম্পাদনা করেছেন, তাদের সম্পর্কেও বিস্তারিত দেখানো হল। এই মুছে ফেলা সংশোধনগুলির বিষয়বস্তু  কেবল প্রশাসকদের কাছে লভ্য।',
 'undelete-revision' => '$3-এর করা $1 সংশোধন ($4 তারিখে, $5 সময়ের) মুছে ফেলা হয়েছে:',
 'undeleterevision-missing' => 'সংশোধনটি অবৈধ কিংবা হারানো গেছে। আপনি হয়ত অচল সংযোগে ক্লিক করেছেন, কিংবা সংশোধনটি হয়ত বাতিল করে পাতাটি পূর্বাবস্থায় নেওয়া হয়েছে, অথবা সংশোধনটি আর্কাইভ থেকে মুছে ফেলা হয়েছে।',
@@ -2083,10 +2194,12 @@ $UNWATCHURL
 'undelete-bad-store-key' => '$1 সময়টিকেটবিশিষ্ট ফাইল সংশোধনের মুছে ফেলা বাতিল করা গেল না: মুছে ফেলার আগে ফাইল হারিয়ে গিয়েছিল।',
 'undelete-cleanup-error' => 'অব্যবহৃত আর্কাইভ ফাইল "$1" মুছতে গিয়ে ত্রুটি ঘটেছে।',
 'undelete-missing-filearchive' => 'ফাইল আর্কাইভ আইডি $1 পুনরুদ্ধার করা গেল না, কারণ এটি ডাটাবেজে নেই। হয়ত ইতিমধ্যেই এটির মুছে ফেলা বাতিল করা হয়েছে।',
+'undelete-error' => 'অপসারিত পাতা ফিরিয়ে আনতে ত্রুটি',
 'undelete-error-short' => 'ফাইল মোছা বাতিল করতে গিয়ে ত্রুটি: $1',
 'undelete-error-long' => 'ফাইলটি মোছা বাতিল করতে গিয়ে ত্রুটি ঘটেছে:
 
 $1',
+'undelete-show-file-confirm' => 'আপনি কি নিশ্চিত যে "<nowiki>$1</nowiki>" ফাইলের $2 এর $3 সময়ে অপসারিত রিভিশন প্রদর্শন করা হবে?',
 'undelete-show-file-submit' => 'হ্যাঁ',
 
 # Namespace form on various pages
@@ -2180,8 +2293,8 @@ $1',
 'ipb-confirm' => 'বাধা নিশ্চিতকরণ',
 'badipaddress' => 'আইপি (IP) ঠিকানাটি অগ্রহনযোগ্য',
 'blockipsuccesssub' => 'বাধা সফল',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] কে বাধা দেয়া হয়েছে
-<br />বাধা দেয়া পুনর্বিবেচনা করতে হলে [[Special:BlockList|বাধা দেয়া আইপি ঠিকানার তালিকা]] দেখুন।',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] কে বাধা দেয়া হয়েছে।<br />
+বাধা দেয়া পুনর্বিবেচনা করতে হলে [[Special:BlockList|বাধা দেয়া তালিকা]] দেখুন।',
 'ipb-blockingself' => 'আপনি নিজেকেই বাধাপ্রদান করতে যাচ্ছেন! আপনি কী নিশ্চিত যে আপনি এটি-ই করতে চান?',
 'ipb-edit-dropdown' => 'বাধাদানের কারণ সম্পাদনা করুন',
 'ipb-unblock-addr' => '$1-এর উপর থেকে বাধা তুলে নেওয়া হোক',
@@ -2200,6 +2313,7 @@ $1',
 'blocklist-userblocks' => 'অ্যাকাউন্ট বাধা লুকাও',
 'blocklist-tempblocks' => 'অস্থায়ী বাধা লুকাও',
 'blocklist-addressblocks' => 'একক আইপি বাধা লুকাও',
+'blocklist-rangeblocks' => 'রেঞ্জ ব্লকসমূহ লুকান',
 'blocklist-timestamp' => 'সময়বার্তা',
 'blocklist-target' => 'লক্ষ্য',
 'blocklist-expiry' => 'মেয়াদোত্তীর্ণ হবে',
@@ -2230,7 +2344,9 @@ $1',
 'blocklog-showsuppresslog' => 'এই ব্যবহারকারীকে পূর্বেও বাধা প্রদান ও লুকানো হয়েছিলো।
 তথ্যসূত্র হিসেবে তাই পূর্বের অপসারণ লগটি নিচে প্রদর্শন করা হচ্ছে:',
 'blocklogentry' => '[[$1]]এর উপর $2 $3 মেয়াদের জন্য নিষেধাজ্ঞা আরোপিত হয়েছে।',
-'blocklogtext' => 'এটি ব্যবহারকারীদেরকে বাধা দানের বা বাধা তুলে নেওয়ার লগ। স্বয়ংক্রিয়ভাবে বাধাদানকৃত আইপি ঠিকানাগুলি এখানে তালিকাবদ্ধ করা হয়নি। বর্তমানে সক্রিয় নিষিদ্ধকরণ ও বাধাদানের তালিকার জন্য [[Special:BlockList|আইপি বাধাদান তালিকা]] দেখুন।',
+'blocklogtext' => 'এটি ব্যবহারকারীদেরকে বাধা দানের বা বাধা তুলে নেওয়ার লগ।
+স্বয়ংক্রিয়ভাবে বাধাদানকৃত আইপি ঠিকানাগুলি এখানে তালিকাবদ্ধ করা হয়নি।
+বর্তমানে সক্রিয় নিষিদ্ধকরণ ও বাধাদানের তালিকার জন্য [[Special:BlockList| বাধাদান তালিকা]] দেখুন।',
 'unblocklogentry' => '$1-এর উপর বাধা তুলে নেয়া হয়েছে',
 'block-log-flags-anononly' => 'কেবল বেনামী ব্যবহারকারীরা',
 'block-log-flags-nocreate' => 'অ্যাকাউন্ট সৃষ্টি নিষ্ক্রিয় করা হয়েছে',
@@ -2241,9 +2357,13 @@ $1',
 'range_block_disabled' => 'প্রশাসকের পক্ষে আইপি ঠিকানার শ্রেণী বাধাদানের ক্ষমতা নিষ্ক্রিয় আছে।',
 'ipb_expiry_invalid' => 'মেয়াদোত্তীর্ণকাল অবৈধ।',
 'ipb_already_blocked' => '"$1" ইতিমধ্যে ব্লক',
+'ipb-needreblock' => '$1 পূর্বেই ব্লক রয়েছেন। আপনি কি সেটিংস পরিবর্তন করতে চান?',
+'ipb-otherblocks-header' => 'অন্যান্য {{PLURAL:$1|বাধাঁ|বাধাঁসমূহ}}',
+'unblock-hideuser' => 'আপনি এই ব্যবহারকারীকে আনব্লক করতে পারবেন না, কারণ এই ব্যবহারকারীদের ব্যবহাকারী নাম লুকানো রয়েছে।',
 'ipb_cant_unblock' => 'ত্রুটি: $1 ব্লক আইডি খুঁজে পাওয়া যায়নি। হয়ত ইতিমধ্যেই এটির উপর থেকে বাধা তুলে নেওয়া হয়েছে।',
 'ipb_blocked_as_range' => 'ত্রুটি: $1 আইপি ঠিকানাটিকে সরাসরি বাধা দেওয়া হয়নি এবং বাধা তুলে নেওয়া যাবে না। তবে ঠিকানাটি $2 সীমার অন্তর্ভুক্ত এবং সেটি থেকে বাধা তুলে নেওয়া সম্ভব।',
 'ip_range_invalid' => 'অবৈধ আইপি শ্রেণী',
+'ip_range_toolarge' => '/$1 এর বড় রেঞ্জব্লক ব্যবহার অনুমদিত নয়।',
 'blockme' => 'আমাকে বাধা দেওয়া হোক',
 'proxyblocker' => 'প্রক্সি বাধাদানকারী',
 'proxyblocker-disabled' => 'এই ফাংশনটি নিষ্ক্রিয়।',
@@ -2251,6 +2371,9 @@ $1',
 'proxyblocksuccess' => 'নিষ্পন্ন হয়েছে।',
 'sorbsreason' => 'আপনার আইপি ঠিকানাটি {{SITENAME}}-এর ব্যবহার করা DNSBL-এ উন্মুক্ত প্রক্সি হিসেবে তালিকাভুক্ত আছে।',
 'sorbs_create_account_reason' => 'আপনার আইপি ঠিকানাটি {{SITENAME}}-এর ব্যবহার করা DNSBL-এ উন্মুক্ত প্রক্সি হিসেবে তালিকাভুক্ত আছে। আপনি কোন অ্যাকাউন্ট সৃষ্টি করতে পারবেন না।',
+'cant-block-while-blocked' => 'আপনি নিজে ব্লক থাকা অবস্থায় অন্যন্য ব্যবহারকারীকে ব্লক করতে পারবেন না।',
+'ipbblocked' => 'আপনি অন্য কোন ব্যবহারকরীকে ব্লক বা আনব্লক করতে পারবেন না, কারণ আপনি নিজেই ব্লক রয়েছেন',
+'ipbnounblockself' => 'আপনি নিজেকে আনব্লক করতে পারবেন না',
 
 # Developer tools
 'lockdb' => 'ডাটাবেজ বন্ধ করে দেওয়া হোক',
@@ -2271,6 +2394,7 @@ $1',
 'unlockdbsuccesstext' => 'ডাটাবেজ খুলে দেওয়া হয়েছে।',
 'lockfilenotwritable' => 'ডাটাবেজ বন্ধ করার ফাইলটি লিখনযোগ্য নয়। ডাটাবেজ বন্ধ করতে বা খুলতে চাইলে ফাইলটিকে ওয়েব সার্ভার কর্তৃক লিখনযোগ্য হতে হবে।',
 'databasenotlocked' => 'ডাটাবেজ বন্ধ নয়।',
+'lockedbyandtime' => '({{GENDER:$1|$1}} $2 এর $3 সময়ে)',
 
 # Move page
 'move-page' => '$1 স্থানান্তর',
@@ -2313,8 +2437,11 @@ $1',
 'movepage-page-exists' => '$1 পাতাটি ইতিমধ্যেই বিদ্যমান এবং স্বয়ংক্রিয়ভাবে পুনর্লিখন করা সম্ভব নয়।',
 'movepage-page-moved' => '$1 পাতাটি $2 পাতায় স্থানান্তর করা হয়েছে।',
 'movepage-page-unmoved' => '$1 পাতাটি $2 -এ সরিয়ে নেওয়া সম্ভপর নয়।',
+'movepage-max-pages' => 'সর্বোচ্চ $1টি {{PLURAL:$1|উপপাতা}}স্থানান্তর করা হয়েছে এবং এর থেকে বেশি সংখ্যক পাতা সয়ংক্রিয়ভাবে স্থানান্তর সম্ভব নয়।',
 'movelogpage' => 'পাতা স্থানান্তর লগ',
 'movelogpagetext' => 'সরানো পাতাগুলির একটি তালিকা নিচে দেয়া হল।',
+'movesubpage' => '{{PLURAL:$1|উপপাতা|উপপাতাসমূহ}}',
+'movesubpagetext' => 'এই পাতার $1টি {{PLURAL:$1|উপপাতা}} রয়েছে যেগুলো নিচে দেখানো হচ্ছে।',
 'movenosubpage' => 'এই পাতাটির কোনো উপপাতা নেই।',
 'movereason' => 'কারণ:',
 'revertmove' => 'পূর্বাবস্থায় ফেরত নেওয়া হোক',
@@ -2325,8 +2452,13 @@ $1',
 'delete_and_move_confirm' => 'হ্যাঁ, পাতাটি মুছে ফেলা হোক',
 'delete_and_move_reason' => '"[[$1]]" থেকে স্থানান্তরের স্বার্থে মুছে ফেলা হয়েছে',
 'selfmove' => 'উৎস ও গন্তব্য পাতা একই শিরোনামের; কোন পাতা একই শিরোনামের আরেক পাতায় সরানো যাবে না।',
+'immobile-source-namespace' => 'পাতাটি "$1" নামস্থানে স্থানান্তর সম্ভব নয়',
+'immobile-target-namespace' => 'পাতাটি "$1" নামস্থানে স্থানান্তর সম্ভব নয়',
 'immobile-source-page' => 'এই পাতাটির স্থানান্তর সম্ভব নয়।',
 'immobile-target-page' => 'গন্তব্য শিরোনামে স্থানান্তর করা যাবে না।',
+'imageinvalidfilename' => 'ফাইল নামটি সঠিক নয়',
+'fix-double-redirects' => 'মূল শিরনামকে নির্দেশ করে এমন সকল রিডাইরেক্ট আপডেট করুন',
+'move-leave-redirect' => 'রিডাইরেক্ট উপেক্ষা করুন',
 
 # Export
 'export' => 'পাতা রপ্তানি',
@@ -2345,6 +2477,7 @@ $1',
 'export-addnstext' => 'নামস্থান থেকে পাতা যুক্ত করুন:',
 'export-addns' => 'যোগ',
 'export-download' => 'ফাইল হিসেবে সংরক্ষণ করা হোক',
+'export-templates' => 'টেম্পলেট অন্তর্ভুক্তি',
 
 # Namespace 8 related
 'allmessages' => 'সিস্টেম বার্তাসমূহ',
@@ -2358,6 +2491,7 @@ $1',
 'allmessages-filter-unmodified' => 'অপরিবর্তিত',
 'allmessages-filter-all' => 'সমস্ত',
 'allmessages-filter-modified' => 'পরিবর্তিত',
+'allmessages-prefix' => 'প্রিফিক্স অনুযায়ী ফিল্টার:',
 'allmessages-language' => 'ভাষা:',
 'allmessages-filter-submit' => 'চলো',
 
@@ -2367,9 +2501,12 @@ $1',
 'thumbnail_error' => 'থাম্বনেইল সৃষ্টি করতে গিয়ে ত্রুটি: $1',
 'djvu_page_error' => 'DjVu পাতা সীমার বাইরে',
 'djvu_no_xml' => 'DjVu ফাইলের জন্য XML আনতে পারা যায়নি।',
+'thumbnail-temp-create' => 'অস্থায়ী থাম্বনেইল ফাইল তৈরী করা সম্ভব নয়',
+'thumbnail-dest-create' => 'নির্ধারিত স্থানে থাম্বনেইল তৈরী করা সম্ভব নয়',
 'thumbnail_invalid_params' => 'থাম্বনেইল প্যারামিটারগুলি অবৈধ',
 'thumbnail_dest_directory' => 'গন্তব্য ডিরেক্টরি তৈরি করা যায়নি',
 'thumbnail_image-type' => 'চিত্রের ধরন সমর্থন করে না',
+'thumbnail_image-missing' => 'ফাইলটি খুজে পাওয়া যাচ্ছে না: $1',
 
 # Special:Import
 'import' => 'পাতা আমদানি',
@@ -2404,7 +2541,17 @@ $1',
 'import-noarticle' => 'ইম্পোর্ট করার মত কোন পাতা নেই!',
 'xml-error-string' => '$1 যে লাইনে $2, কলামে $3 (বাইট $4): $5',
 'import-upload' => 'XML ডাটা আপলোড',
+'import-token-mismatch' => 'সেশন ডাটা হারিয়ে গিয়েছে।
+অনুগ্রহ করে পুনরায় চেষ্টা করুন।',
 'import-invalid-interwiki' => 'নির্ধারিত উইকি থেকে আমদানী করা যাবে না।',
+'import-error-edit' => '"$1" পাতাটি ইম্পোর্ট করা যায়নি কারণ আপনার এটি সম্পাদনা করার অনুমতি নেই।',
+'import-error-create' => '"$1" পাতাটি ইম্পোর্ট করা যায়নি কারণ আপনার এটি তৈরী করার অনুমতি নেই।',
+'import-error-interwiki' => '"$1" পাতাটি ইম্পোর্ট করা যায়নি কারণ এই নামটি বহিঃসংযোগর জন্য নির্ধারিত (ইন্টারউইকি)।',
+'import-error-special' => '"$1" পাতাটি ইম্পোর্ট করা যায়নি কারণ এটি একটি বিশেষ নামস্থানকে নির্দেশ করে যেটি সম্পাদনার জন্য অনুমোদিত নয়।',
+'import-error-invalid' => '"$1" পাতাটি ইম্পোর্ট করা যায়নি কারণ নামটি সঠিক নয়।',
+'import-options-wrong' => 'ভুল {{PLURAL:$2|অপশন|অপশনসমূহ}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'মূল পাতার ভুল শিরনাম দেয়া হয়েছে।',
+'import-rootpage-nosubpage' => 'মূল পাতার "$1" নামস্থানে উপপাতা তৈরী অনুমোদিত নয়।',
 
 # Import log
 'importlogpage' => 'আমদানি লগ',
@@ -2416,6 +2563,13 @@ $1',
 
 # JavaScriptTest
 'javascripttest' => 'জাভাস্ক্রিপ্ট পরীক্ষা',
+'javascripttest-disabled' => 'এই উইকিতে নির্ধারিত অপশনটি চালু নেই।',
+'javascripttest-title' => '$1 পরীক্ষা চলছে',
+'javascripttest-pagetext-noframework' => 'এই পাতাটি জাভাস্ক্রিপ্ট পরীক্ষার জন্য সংরক্ষিত।',
+'javascripttest-pagetext-unknownframework' => 'পরীক্ষার অজানা ফ্রেমওয়ার্ক "$1"।',
+'javascripttest-pagetext-frameworks' => 'অনুগ্রহ করে নিচের কোনো একটি ফ্রেমওয়ার্ক নির্ধারণ করুন: $1',
+'javascripttest-pagetext-skins' => 'পরীক্ষার জন্য একটি স্কীন নির্ধারণ করুন:',
+'javascripttest-qunit-heading' => 'মিডিয়াউইকি জাভাস্ক্রিপ্ট কিউইউনিট টেস্ট স্যুট',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'আপনার ব্যবহারকারী পাতা',
@@ -2478,6 +2632,7 @@ $1',
 'tooltip-compareselectedversions' => 'এই পাতার দুইটি নির্বাচিত সংস্করণের মধ্যে তুলনা দেখুন।',
 'tooltip-watch' => 'এই পাতাটি আমার নজরতালিকায় যোগ করো',
 'tooltip-watchlistedit-normal-submit' => 'শিরোনাম অপসারণ',
+'tooltip-watchlistedit-raw-submit' => 'নজরতালিকা হালনাগাদ',
 'tooltip-recreate' => 'মুছে ফেলা সত্ত্বেও পাতাটি পুনরায় সৃষ্টি করুন',
 'tooltip-upload' => 'আপলোড শুরু করো',
 'tooltip-rollback' => '"পুনর্বহাল" এই পাতায় সর্বশেষ অবদানকারীর সম্পাদনাসমূহ বাতিল করে পাতাটিকে পূর্বাবস্থায় ফিরিয়ে দেয়',
@@ -2507,18 +2662,44 @@ $1',
 'spambot_username' => 'মিডিয়াউইকি স্প্যাম পরিস্কার',
 'spam_reverting' => '$1-এর প্রতি কোন সংযোগ নেই, এমন সর্বশেষ সংস্করণে ফেরত নেওয়া হচ্ছে।',
 'spam_blanking' => '$1-এর প্রতি সংযোগ অন্তর্ভুক্ত আছে এমন সমস্ত সংশোধন খালি করা হচ্ছে',
+'spam_deleting' => '$1-এর প্রতি সংযোগ অন্তর্ভুক্ত আছে এমন সমস্ত সংশোধন অপসারণ করা হচ্ছে',
 
 # Info page
-'pageinfo-header-edits' => 'সম্পাদনা',
+'pageinfo-title' => '"$1" এর তথ্য',
+'pageinfo-header-basic' => 'সাধারণ তথ্য',
+'pageinfo-header-edits' => 'সম্পাদনা ইতিহাস',
+'pageinfo-header-restrictions' => 'পাতা সুরক্ষা',
+'pageinfo-header-properties' => 'পাতা বৈশিষ্টসমূহ',
+'pageinfo-display-title' => 'শিরনাম প্রদর্শন',
+'pageinfo-default-sort' => 'ডিফল্ট সর্ট কি',
+'pageinfo-length' => 'পাতার দৈর্ঘ্য (বাইটে)',
+'pageinfo-article-id' => 'পাতার আইডি',
+'pageinfo-robot-policy' => 'সার্চ ইঞ্জিনের অবস্থা',
+'pageinfo-robot-index' => 'ইনডেক্স উপযোগী',
+'pageinfo-robot-noindex' => 'ইনডেক্সের অনুপযোগী',
 'pageinfo-views' => 'পরিদর্শন সংখ্যা',
-'pageinfo-edits' => 'সম্পাদনা সংখ্যা',
-'pageinfo-authors' => 'সতন্ত্র সম্পাদকের সংখ্যা',
+'pageinfo-watchers' => 'পাতাটি প্রদর্শনের সংখ্যা',
+'pageinfo-redirects-name' => 'এই পাতার রিডাইরেক্ট সমূহ',
+'pageinfo-subpages-name' => 'এই পাতার উপপাতাসমূহ',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|পুনর্নির্দেশ|পুনর্নির্দেশসমূহ}}; $3 {{PLURAL:$3|পুনর্নির্দেশ নেই|পুনর্নির্দেশ নেই}})',
+'pageinfo-firstuser' => 'পাতা তৈরী',
+'pageinfo-firsttime' => 'পাতা তৈরীর তারিখ',
+'pageinfo-lastuser' => 'সর্বশেষ সম্পাদনা করেছেন',
+'pageinfo-lasttime' => 'সর্বশেষ সম্পাদনার তারিখ',
+'pageinfo-edits' => 'সর্বমোট সম্পাদনা সংখ্যা',
+'pageinfo-authors' => 'সর্বমোট সতন্ত্র সম্পাদকের সংখ্যা',
+'pageinfo-recent-edits' => 'সর্বশেষ সম্পাদনা করা হয়েছে (শেষ $1 দিনে)',
+'pageinfo-recent-authors' => 'সাম্প্রতিক সতন্ত্র সম্পাদকের সংখ্যা',
+'pageinfo-restriction' => 'পাতার সুরক্ষা ({{lcfirst:$1}})',
+'pageinfo-magic-words' => 'ম্যাজিক {{PLURAL:$1|শব্দ|শব্দসমূহ}} ($1)',
+'pageinfo-hidden-categories' => 'লুকানো {{PLURAL:$1|বিষয়শ্রেণী|বিষয়শ্রেণীসমূহ}} ($1)',
+'pageinfo-templates' => 'সংযুক্ত {{PLURAL:$1|টেমপ্লেট|টেমপ্লেটসমূহ}} ($1)',
 
 # Patrolling
 'markaspatrolleddiff' => 'পরীক্ষিত বলে চিহ্নিত করুন',
 'markaspatrolledtext' => 'এই নিবন্ধটিকে পরীক্ষিত বলে চিহ্নিত করুন',
 'markedaspatrolled' => 'পরীক্ষিত বলে চিহ্নিত করুন',
-'markedaspatrolledtext' => 'আপনার নির্বাচিত সংস্করণ পরীক্ষিত বলে চিহ্নিত করা হয়েছে।',
+'markedaspatrolledtext' => 'আপনার নির্বাচিত সংস্করণ [[:$1]] পরীক্ষিত বলে চিহ্নিত করা হয়েছে।',
 'rcpatroldisabled' => 'সাম্প্রতিক পরিবর্তন প্যাট্রোল নিষ্ক্রিয়',
 'rcpatroldisabledtext' => 'সাম্প্রতিক পরিবর্তন প্যাট্রোল ফিচারটি বর্তমানে নিষ্ক্রিয় আছে।',
 'markedaspatrollederror' => 'পরীক্ষিত বলে চিহ্নিত করা যাবে না',
@@ -2527,6 +2708,7 @@ $1',
 
 # Patrol log
 'patrol-log-page' => 'পরীক্ষণ লগ',
+'patrol-log-header' => 'এটি যাচাইকৃত রিভিশনের তালিকা।',
 'log-show-hide-patrol' => '$1 পরীক্ষণ লগ',
 
 # Image deletion
@@ -2546,19 +2728,26 @@ $1',
 
 # Media information
 'mediawarning' => "'''সতর্কীকরণ''': এই ফাইলের ধরনে ক্ষতিকর কোড থাকতে পারে। এটি চালালে আপনার সিস্টেমে ক্ষতি হতে পারে।",
-'imagemaxsize' => 'ছবির বিবরণ পাতায় প্রদর্শিত ছবির আকারের সর্বোচ্চ সীমা:',
+'imagemaxsize' => "ছবির আকারের সর্বোচ্চ সীমা:<br />''(ছবির বিবরণ পাতার জন্য)''",
 'thumbsize' => 'থাম্বনেইল আকার:',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$1|পাতাট|পাতাগুলো}}',
 'file-info' => 'ফাইলের আকার: $1, MIME ধরণ: $2',
 'file-info-size' => '$1 × $2 pixel, ফাইলের আকার: $3, MIME ধরণ: $4',
+'file-info-size-pages' => '$1 × $2 পিক্সেল, fফাইলের আকার: $3, MIME ধরন: $4, $5 {{PLURAL:$5|পাতা|পাতাসমূহ}}',
 'file-nohires' => 'এর চেয়ে বেশি রেজোলিউশন লভ্য নয়।',
 'svg-long-desc' => 'SVG ফাইল, সাধারণত $1 × $2 pixels, ফাইলের আকার: $3',
+'svg-long-desc-animated' => 'এনিমেটেড SVG ফাইল, সাধারণত $1 × $2 pixels, ফাইলের আকার: $3',
 'show-big-image' => 'পূর্ণ রেজোলিউশন',
+'show-big-image-preview' => 'এই প্রিভিউ-এর আকার: $1।',
+'show-big-image-other' => 'অন্যান্য {{PLURAL:$2|আকার|আকারসমূহ}}: $1।',
+'show-big-image-size' => '$1 × $2 পিক্সেল',
 'file-info-gif-looped' => 'লুপকৃত',
 'file-info-gif-frames' => '$1 {{PLURAL:$1|ফ্রেম|ফ্রেম}}',
 'file-info-png-looped' => 'লুপকৃত',
 'file-info-png-repeat' => '$1 {{PLURAL:$1|বার|বার}} পরিবেশিত হয়েছে',
 'file-info-png-frames' => '$1টি {{PLURAL:$1|ফ্রেম|ফ্রেম}}',
+'file-no-thumb-animation' => "'''টিকা: কারিগরি ত্রুটির কারণে, এই থাম্বনেইলে এনিমেশন দেখানো সম্ভব নয়।'''",
+'file-no-thumb-animation-gif' => "'''টীকা: কারিগরি ত্রুটির কারণে, উচ্চ রেজ্যুলেশনের GIF ছবিট এনিমেশন দেখানো সম্ভব নয়।'''",
 
 # Special:NewFiles
 'newimages' => 'নতুন ফাইলের গ্যালারি',
@@ -2803,6 +2992,8 @@ $1',
 'exif-planarconfiguration-1' => 'খণ্ড ফরম্যাট',
 'exif-planarconfiguration-2' => 'সমতলীয় ফরম্যাট',
 
+'exif-colorspace-65535' => 'সমন্বয় সম্ভব নয়',
+
 'exif-componentsconfiguration-0' => 'বিদ্যমান নয়',
 
 'exif-exposureprogram-0' => 'অসংজ্ঞায়িত',
@@ -2846,7 +3037,13 @@ $1',
 
 # Flash modes
 'exif-flash-fired-0' => 'ফ্লাস জ্বলেনি',
+'exif-flash-fired-1' => 'ফ্ল্যাশ ব্যবহার করা হয়েছিল',
+'exif-flash-return-0' => 'স্ট্রোব চিহ্নিতকরণ ফাংশন নেই',
+'exif-flash-return-2' => 'স্ট্রোবের আলো চিহ্নিত করা যায়নি',
+'exif-flash-return-3' => 'স্ট্রোবের আলো চিহ্নিত হয়েছে',
+'exif-flash-mode-1' => 'বাধ্যতামূলকভাবে ফ্ল্যাশ ব্যবহৃত হয়েছে',
 'exif-flash-mode-3' => 'স্বয়ংক্রিয় মোড',
+'exif-flash-function-1' => 'ফ্ল্যাশ ব্যবহৃত হয়নি',
 'exif-flash-redeye-1' => 'রেড-আই হ্রাস মোড',
 
 'exif-focalplaneresolutionunit-2' => 'ইঞ্চি',
@@ -2944,6 +3141,7 @@ $1',
 'exif-gpsdirection-m' => 'চৌম্বক দিক',
 
 'exif-ycbcrpositioning-1' => 'কেন্দ্রীভূত',
+'exif-ycbcrpositioning-2' => 'কো-সাইটেড',
 
 'exif-dc-contributor' => 'অবদানকারী',
 'exif-dc-date' => 'তারিখ',
@@ -2955,6 +3153,8 @@ $1',
 
 'exif-rating-rejected' => 'প্রত্যাখাত',
 
+'exif-isospeedratings-overflow' => '৬৫৫৩৫ থেকে বড়',
+
 'exif-iimcategory-ace' => 'শিল্প, সংস্কৃতি এবং বিনোদন',
 'exif-iimcategory-clj' => 'অপরাধ ও আইন',
 'exif-iimcategory-dis' => 'দুর্যোগ ও দুর্ঘটনা',
@@ -2964,6 +3164,7 @@ $1',
 'exif-iimcategory-hth' => 'স্বাস্থ্য',
 'exif-iimcategory-hum' => 'মানব আগ্রহ',
 'exif-iimcategory-lab' => 'শ্রম',
+'exif-iimcategory-lif' => 'লাইফস্টাইল এবং অবসর',
 'exif-iimcategory-pol' => 'রাজনীতি',
 'exif-iimcategory-rel' => 'ধর্ম এবং বিশ্বাস',
 'exif-iimcategory-sci' => 'বিজ্ঞান ও প্রযুক্তি',
@@ -2975,6 +3176,7 @@ $1',
 'exif-urgency-normal' => 'সাধারণ ($1)',
 'exif-urgency-low' => 'নিম্ন ($1)',
 'exif-urgency-high' => 'উচ্চ ($1)',
+'exif-urgency-other' => 'ব্যবহারকারী নির্ধারিত অগ্রাধিকার ক্রম ($1)',
 
 # External editor support
 'edit-externally' => 'ফাইলটি অন্য কোন সফটওয়্যার দিয়ে সম্পাদনা করুন',
@@ -3029,6 +3231,7 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'confirmrecreate' => "আপনি সম্পাদনা শুরু করার পর ব্যবহারকারী [[User:$1|$1]] ([[User talk:$1|আলাপ]]) এই পাতাটি মুছে দিয়েছেন, নিচের কারণ দেখিয়ে:
 : ''$2''
 আপনি সত্যিই যে পাতাটি পুনরায় সৃষ্টি করতে চান, তা দয়া করে নিশ্চিত করুন।",
+'confirmrecreate-noreason' => 'আপনি সম্পাদনা শুরু করার পর ব্যবহারকারী [[User:$1|$1]] ([[User talk:$1|আলাপ]]) এই পাতাটি মুছে দিয়েছেন। আপনি সত্যিই যে পাতাটি পুনরায় সৃষ্টি করতে চান, তা দয়া করে নিশ্চিত করুন।',
 'recreate' => 'পুনরায় তৈরি করো',
 
 # action=purge
@@ -3056,6 +3259,7 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'table_pager_first' => 'প্রথম পাতা',
 'table_pager_last' => 'শেষ পাতা',
 'table_pager_limit' => 'প্রতি পাতায় $1 গুলো বিষয়বস্তু দেখাও',
+'table_pager_limit_label' => 'প্রতি পাতায় আইটেম সংখ্যা:',
 'table_pager_limit_submit' => 'চলো',
 'table_pager_empty' => 'ফলাফল শূন্য',
 
@@ -3086,12 +3290,17 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'watchlistedit-noitems' => 'আপনার নজর তালিকায় কোন পাতার শিরোনাম নেই।',
 'watchlistedit-normal-title' => 'নজরতালিকা সম্পাদনা করো',
 'watchlistedit-normal-legend' => 'নজর তালিকা থেকে শিরোনামসমূহ মুছে ফেলো',
-'watchlistedit-normal-explain' => 'আপনার নজরতালিকায় রাখা পাতার শিরোনামগুলি নিচে দেখানো হয়েছে। কোন শিরোনাম সরিয়ে নিতে চাইলে পাশের বাক্সে টিক দিন এবং "শিরোনামগুলি সরিয়ে ফেলা হোক"-এ ক্লিক করুন। আপনি [[Special:EditWatchlist/raw|মূল তালিকাটিও]] সম্পাদনা করতে পারেন।',
+'watchlistedit-normal-explain' => 'আপনার নজরতালিকায় রাখা পাতার শিরোনামগুলি নিচে দেখানো হয়েছে।
+কোন শিরোনাম সরিয়ে নিতে চাইলে পাশের বাক্সে টিক দিন এবং "{{int:Watchlistedit-normal-submit}}"-এ ক্লিক করুন।
+আপনি [[Special:EditWatchlist/raw|মূল তালিকাটিও]] সম্পাদনা করতে পারেন।',
 'watchlistedit-normal-submit' => 'শিরোনামগুলি সরিয়ে ফেলা হোক',
 'watchlistedit-normal-done' => '{{PLURAL:$1|1 শিরোনাম|$1 শিরোনামসমূহ}} আপনার নজর তালিকা থেকে মুছে ফেলা হয়েছে:',
 'watchlistedit-raw-title' => 'অশোধিত নজর তালিকা সম্পাদনা করুন',
 'watchlistedit-raw-legend' => 'অশোধিত নজরতালিকা সম্পাদনা করুন',
-'watchlistedit-raw-explain' => 'আপনার নজরতালিকায় রাখা পাতার শিরোনামগুলি নিচে দেখানো হয়েছে। এই তালিকাতে নতুন শিরোনাম যোগ করা যাবে বা শিরোনাম সরিয়ে নেওয়া যাবে। একটি শিরোনামের জন্য একটি লাইন বরাদ্দ। শেষ হলে "নজরতালিকা হালনাগাদ করা হোক"-এ ক্লিক করুন। আপনি [[Special:EditWatchlist|আদর্শ সম্পাদনা সরঞ্জাম]]-ও ব্যবহার করতে পারেন।',
+'watchlistedit-raw-explain' => 'আপনার নজরতালিকায় রাখা পাতার শিরোনামগুলি নিচে দেখানো হয়েছে, এই তালিকাতে নতুন শিরোনাম যোগ করা যাবে বা শিরোনাম সরিয়ে নেওয়া যাবে;
+প্রতিটি লাইনে একটি করে শিরনাম দেখানো হচ্ছে।
+শেষ হলে "{{int:Watchlistedit-raw-submit}}"-এ ক্লিক করুন।
+আপনি [[Special:EditWatchlist|আদর্শ সম্পাদনা সরঞ্জাম]]-ও ব্যবহার করতে পারেন।',
 'watchlistedit-raw-titles' => 'শিরোনাম:',
 'watchlistedit-raw-submit' => 'নজরতালিকা হালনাগাদ করা হোক',
 'watchlistedit-raw-done' => 'আপনার নজর তালিকা হালনাগাদ করা হয়েছে।',
@@ -3103,6 +3312,9 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'watchlisttools-edit' => 'নজর তালিকা দেখুন এবং সম্পাদনা করুন',
 'watchlisttools-raw' => 'অশোধিত নজরতালিকা সম্পাদনা করুন',
 
+# Signatures
+'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|আলাপ]])',
+
 # Core parser functions
 'unknown_extension_tag' => 'অজানা এক্সটেনশন ট্যাগ "$1"',
 'duplicate-defaultsort' => '\' \' \' সাবধান: \' \' \'  ডিফল্ট সাজানোর কীঃ "$2" পূর্বে ডিফল্ট সাজানোর কীঃ "$1" কে অগ্রাহ্য করে।',
@@ -3116,6 +3328,7 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'version-antispam' => 'স্প্যাম প্রতিরোধ',
 'version-skins' => 'আবরণসমূহ (Skin)',
 'version-other' => 'অন্য',
+'version-mediahandlers' => 'মিডিয়া ব্যবস্থাপক',
 'version-hooks' => 'হুক',
 'version-extension-functions' => 'এক্সটেনশনের কাজ',
 'version-parser-extensiontags' => 'পার্সার এক্সটেনশন ট্যাগ',
@@ -3129,15 +3342,20 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'version-software' => 'ইনস্টলকৃত সফটওয়্যার',
 'version-software-product' => 'পণ্য',
 'version-software-version' => 'সংস্করণ',
+'version-entrypoints' => 'শুরুর ইউআরএল',
+'version-entrypoints-header-entrypoint' => 'শুরু',
 'version-entrypoints-header-url' => 'ইউআরএল',
 
 # Special:FilePath
 'filepath' => 'ফাইলের পাথ',
 'filepath-page' => 'ফাইল:',
 'filepath-submit' => 'চলো',
+'filepath-summary' => 'এই বিশেষ পাতায় ফাইলের পূর্ণাঙ্গ পাথ দেখা যাবে।
+চিত্রগুলো পূর্ণ রেজ্যুলেশনে প্রদর্শিত হবে, অন্যান্য ধরনের ফাইলগুলো তার নির্ধারিত প্রোগ্রামের মাধ্যমে ওপেন হবে।',
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch' => 'ডুপ্লিকেট ফাইলের জন্য অনুসন্ধান',
+'fileduplicatesearch-summary' => 'হ্যাশ ভ্যালুর ওর ভিত্তি করে একই ছবিগুলো খুঁজুন।',
 'fileduplicatesearch-legend' => 'অনুলিপির জন্য অনুসন্ধান',
 'fileduplicatesearch-filename' => 'ফাইলনাম:',
 'fileduplicatesearch-submit' => 'অনুসন্ধান',
@@ -3150,11 +3368,10 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'specialpages' => 'বিশেষ পাতাসমূহ',
 'specialpages-note' => '----
 * সাধারণ বিশেষ পাতাসমূহ।
-* <span class="mw-specialpagerestricted">সীমাবদ্ধ বিশেষ পাতা।</span>
-* <span class="mw-specialpagecached">কেবল ক্যাশকৃত বিশেষ পাতা।</span>',
+* <span class="mw-specialpagerestricted">সীমাবদ্ধ বিশেষ পাতা।</span>',
 'specialpages-group-maintenance' => 'রক্ষণাবেক্ষণের কার্যবিবরণীসমূহ',
 'specialpages-group-other' => 'অন্যান্য বিশেষ পাতাসমূহ',
-'specialpages-group-login' => 'à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87 à¦ªà§\8dরবà§\87শ',
+'specialpages-group-login' => 'পà§\8dরবà§\87শ/নতà§\81ন à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f',
 'specialpages-group-changes' => 'সাম্প্রতিক পরিবর্তন ও লগসমূহ',
 'specialpages-group-media' => 'মিডিয়া বিবরণী ও আপলোডসমূহ',
 'specialpages-group-users' => 'ব্যবহারকারীবৃন্দ ও অধিকারসমূহ',
@@ -3180,11 +3397,13 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 #এই রেখার উপরের regex টুকরা বসান. এই লাইন ঠিক যেমন আছে তেমন রাখুন</pre>',
 
 # Special:Tags
+'tags' => 'সঠিক চেঞ্জ ট্যাগ',
 'tag-filter' => '[[Special:Tags|ট্যাগ]] ছাকনী:',
 'tag-filter-submit' => 'ছাকনী',
 'tags-title' => 'ট্যাগসমূহ',
 'tags-tag' => 'ট্যাগ নাম',
 'tags-description-header' => 'অর্থের পূর্ণ বণনা',
+'tags-hitcount-header' => 'ট্যাগকৃত পরিবর্সতনমূহ',
 'tags-edit' => 'সম্পাদনা',
 'tags-hitcount' => '$1 {{PLURAL:$1|পরিবর্তন|পরিবর্তনসমূহ}}',
 
@@ -3213,14 +3432,30 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 # HTML forms
 'htmlform-invalid-input' => 'আপনার প্রদানকৃত ইনপুটে সমস্যা রয়েছে',
 'htmlform-select-badoption' => 'যে মান আপনি উল্লেখ করেছেন তা গ্রহণযোগ্য অপশন নয়।',
+'htmlform-int-invalid' => 'আপনার পরিবর্তীত সংখ্যাটি ইন্টিজার(পূর্ণসংখ্যা) নয়।',
+'htmlform-float-invalid' => 'আপনার নির্ধারিত মানটি সংখ্যা নয়।',
+'htmlform-int-toolow' => 'আপনার নির্ধারিত মানটি সর্বনিম্ন মান $1 থেকে ছোট',
+'htmlform-int-toohigh' => 'আপনার নির্ধারিত মানটি সর্বোচ্চ মান $1 থেকে বড়',
 'htmlform-required' => 'মান প্রদান করা আবশ্যক।',
 'htmlform-submit' => 'জমা দাও',
 'htmlform-reset' => 'পরিবর্তন বাতিল',
 'htmlform-selectorother-other' => 'অন্য',
 
+# SQLite database support
+'sqlite-has-fts' => '$1 সহ পূর্ণ টেক্সট সার্চ সমর্থন',
+'sqlite-no-fts' => '$1 বাদে পূর্ণ টেক্সট সার্চ সমর্থন',
+
 # New logging system
 'logentry-delete-delete' => '$1 কর্তৃক $3 পাতাটি অপসারিত হয়েছে',
 'logentry-delete-restore' => '$1 কর্তৃক $3 পাতাটি ফিরিয়ে আনা হয়েছে',
+'logentry-delete-event' => '$1 {{PLURAL:$5|একটি লগ ইভেন্টের|$5 লগ ইভেন্টসমূহর}} ভিজিবিলিটি পরিবর্তন করেছেন $3: $4',
+'logentry-delete-revision' => '$1 {{PLURAL:$5|একটি সংস্করণের|$5 সংস্করণসমূহর}} ভিজিবিলিটি পরিবর্তন করেছেন $3: $4',
+'logentry-delete-event-legacy' => '$1 $3টায় লগ ইভেন্টসমূহরে ভিজিবিলিটি পরিবর্তন করেছেন',
+'logentry-delete-revision-legacy' => '$1 $3টায় সংস্করণসমূহরে ভিজিবিলিটি পরিবর্তন করেছেন',
+'logentry-suppress-event' => '$1 গোপনে {{PLURAL:$5|একটি লগ ইভেন্টের|$5 লগ ইভেন্টসমূহর}} ভিজিবিলিটি পরিবর্তন করেছেন $3: $4',
+'logentry-suppress-revision' => '$1 গোপনে {{PLURAL:$5|একটি সংস্করণের|$5 সংস্করণসমূহর}} ভিজিবিলিটি পরিবর্তন করেছেন $3: $4',
+'logentry-suppress-event-legacy' => '$1 গোপনে $3টায় লগ ইভেন্টসমূহরে ভিজিবিলিটি পরিবর্তন করেছেন',
+'logentry-suppress-revision-legacy' => '$1 গোপনে $3টায় সংস্করণসমূহরে ভিজিবিলিটি পরিবর্তন করেছেন',
 'revdelete-content-hid' => 'বিষয়বস্তু লুকায়িত',
 'revdelete-summary-hid' => 'সম্পাদনা সারাংশ লুকায়িত',
 'revdelete-uname-hid' => 'ব্যবহারকারী নাম লুকায়িত',
@@ -3246,27 +3481,29 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'feedback-message' => 'বার্তা:',
 'feedback-cancel' => 'বাতিল',
 'feedback-submit' => 'প্রতিক্রিয়া জমা',
-'feedback-adding' => 'পাতায় à¦ªà§\8dরতিà¦\95à§\8dরিয়া à¦¯à§\8bà¦\97 à¦\95রা à¦¹à¦\9aà§\8dà¦\9bà§\87...',
-'feedback-error1' => 'তà§\8dরà§\81à¦\9fি: à¦\8fপিà¦\86à¦\87 à¦¥à§\87à¦\95ে অজানা ফলাফল এসেছে',
+'feedback-adding' => 'পাতায় প্রতিক্রিয়া যোগ হচ্ছে...',
+'feedback-error1' => 'তà§\8dরà§\81à¦\9fি: à¦\8fপিà¦\86à¦\87 à¦¹à¦¤ে অজানা ফলাফল এসেছে',
 'feedback-error2' => 'ত্রুটি: সম্পাদনা ব্যর্থ',
-'feedback-error3' => 'তà§\8dরà§\81à¦\9fি: à¦\8fপিà¦\86à¦\87 à¦¥à§\87à¦\95ে কোন সাড়া নেই',
-'feedback-thanks' => 'ধনà§\8dযবাদ! à¦\86পনার à¦®à¦¤à¦¾à¦®à¦¤ "[$2 $1]" à¦ªà¦¾à¦¤à¦¾à¦¯à¦¼ করা হয়েছে।',
+'feedback-error3' => 'তà§\8dরà§\81à¦\9fি: à¦\8fপিà¦\86à¦\87 à¦¹à¦¤ে কোন সাড়া নেই',
+'feedback-thanks' => 'ধনà§\8dযবাদ! à¦\86পনার à¦ªà§\8dরতিà¦\95à§\8dরিয়া "[$2 $1]" à¦ªà¦¾à¦¤à¦¾à¦¯à¦¼ à¦ªà§\8bসà§\8dà¦\9f করা হয়েছে।',
 'feedback-close' => 'সম্পন্ন',
-'feedback-bugcheck' => 'à¦\89তà§\8dতম! à¦ªà¦°à¦¿à¦\95à§\8dষা à¦\95রà§\87 à¦¦à§\87à¦\96à§\81ন à¦\85বিলমà§\8dবà§\87  [$1  à¦\9cানা à¦¬à¦¾à¦\97] কিনা।',
-'feedback-bugnew' => 'à¦\86মি à¦ªà¦°à§\80à¦\95à§\8dষা à¦\95রà§\87à¦\9bি। à¦¨à¦¤à§\81ন à¦\8fà¦\95à¦\9fি à¦¬à¦¾à¦\97 à¦°à¦¿à¦ªà§\8bরà§\8dà¦\9f করুন।',
+'feedback-bugcheck' => 'à¦\89তà§\8dতম! à¦¯à¦¾à¦\9aাà¦\87 à¦\95রà§\81ন à¦¯à§\87 à¦\8fà¦\87 [$1  à¦\9cানা à¦¬à¦¾à¦\97à§\87র] à¦\95à§\8bন à¦\8fà¦\95à¦\9fি কিনা।',
+'feedback-bugnew' => 'à¦\86মি à¦¯à¦¾à¦\9aাà¦\87 à¦\95রà§\87à¦\9bি। à¦¨à¦¤à§\81ন à¦¬à¦¾à¦\97 à¦¨à¦¿à¦¬à¦¨à§\8dধন করুন।',
 
 # API errors
 'api-error-badaccess-groups' => 'আপনার এই উইকিতে ফাইল আপলোডের অনুমতি নেই।',
-'api-error-badtoken' => 'à¦\85ভà§\8dযনà§\8dতরà§\80ণ à¦¤à§\8dরà§\81à¦\9fি: à¦\85পà§\8dরযà§\8bà¦\9cà§\8dয টোকেন।',
+'api-error-badtoken' => 'à¦\85ভà§\8dযনà§\8dতরà§\80ণ à¦¤à§\8dরà§\81à¦\9fি: à¦\96ারাপ টোকেন।',
 'api-error-copyuploaddisabled' => 'এই সার্ভারে ইউআরএল-এর মাধ্যমে আপলোড করার সুবিধা নিস্ক্রিয় রয়েছে।',
 'api-error-duplicate' => 'ইতোমধ্যে এই সাইটে একই রকমের কন্টেট সমৃদ্ধ {{PLURAL:$1|[$2 অন্য ফাইল]|[$2 কিছু অন্য ফাইল]}} রয়েছে।',
 'api-error-duplicate-archive' => 'একই নাম ও বিষয়বস্তু বিশিষ্ট {{PLURAL:$1| [$2 অপর একটি ফাইল]| [$2 কয়েকটি ফাইল]}} পূর্বে এই উইকিতে ছিলো, এবং {{PLURAL:$1|সেটিকে|সেগুলোকে}} অপসারণ করা হয়েছে।',
 'api-error-duplicate-archive-popup-title' => 'অনুলিপি {{PLURAL:$1|ফাইল|ফাইল}} যা ইতমধ্যে অপসারণ করা হয়েছে',
 'api-error-duplicate-popup-title' => 'অনুলিপি {{PLURAL:$1|ফাইল|ফাইল}}',
-'api-error-empty-file' => 'à¦\86পনার à¦\9cমাদানà¦\95à§\83ত à¦«à¦¾à¦\87লà¦\9fি à¦\96ালি।',
-'api-error-emptypage' => 'নতà§\81ন à¦\93 à¦\96ালি à¦ªà¦¾à¦¤à¦¾ à¦¤à§\88রি গ্রহণযোগ্য নয়।',
+'api-error-empty-file' => 'আপনার জমাকৃত ফাইলটি খালি।',
+'api-error-emptypage' => 'নতà§\81ন à¦ªà¦¾à¦¤à¦¾ à¦¤à§\88রি à¦¹à¦\9aà§\8dà¦\9bà§\87, à¦\96ালি à¦ªà¦¾à¦¤à¦¾ গ্রহণযোগ্য নয়।',
 'api-error-fetchfileerror' => 'অভ্যন্তরীণ ত্রুটি: ফাইল নিয়ে আসার সময় কোনো সমস্যা হয়েছিলো।',
-'api-error-file-too-large' => 'আপনার জমাদানকৃত ফাইলটি অনেক বড়।',
+'api-error-fileexists-forbidden' => '"$1" নামের একটি ফাইল রয়েছে, প্রতিস্থাপন সম্ভব নয়।',
+'api-error-fileexists-shared-forbidden' => '"$1" নামে শেয়ার্ড রিপোজিরীতে একটি ফাইল রয়েছে, প্রতিস্থাপন সম্ভব নয়।',
+'api-error-file-too-large' => 'আপনার জমাকৃত ফাইলটি অনেক বড়।',
 'api-error-filename-tooshort' => 'এই ফাইল নামটি খুবই ছোট।',
 'api-error-filetype-banned' => 'এই ধরনের ফাইল নিষিদ্ধ।',
 'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|ফাইল ধরনটি অনুমোদিত নয়|ফাইল ধরনগুলো অনুমোদিত নয়}}। অনুমোদিত {{PLURAL:$3|ফাইলের ধরন|ফাইলের ধরনগুলো}} হল $2।',
@@ -3290,7 +3527,7 @@ $4-এ নিশ্চিতকরণ কোডটি মেয়াদোত
 'api-error-unknown-code' => 'অজানা ত্রুটি: "$1"',
 'api-error-unknown-error' => 'অভ্যন্তরীণ ত্রুটি: আপনার ফাইলটি আপলোড করার সময় কিছু সমস্যা হয়েছে।',
 'api-error-unknown-warning' => 'অজানা সতর্কীকরণ: $1',
-'api-error-unknownerror' => 'অজানা ত্রুটি: "$1"',
+'api-error-unknownerror' => 'অজানা ত্রুটি: "$1"',
 'api-error-uploaddisabled' => 'এই উইকির জন্য আপলোড সুবিধা নিস্ক্রিয় রয়েছে।',
 'api-error-verification-error' => 'সম্ভবত এই ফাইলটি ত্রুটিপূর্ণ অথবা এর এক্সটেনশনটি ভুল।',
 
index 0fa7c96..6a47be7 100644 (file)
@@ -837,7 +837,9 @@ Gallout a rit [[Special:Search/{{PAGENAME}}|klask an titl anezhi]] e pajennoù a
 'noarticletext-nopermission' => 'N\'eus, evit ar mare, tamm testenn ebet war ar bajenn-mañ.
 Gallout a rit [[Special:Search/{{PAGENAME}}|klask titl ar bajenn-mañ]] war pajennoù all,
 pe <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} klask er marilhoù kar]</span>.',
-'missing-revision' => "C'hoarvezout a ra peurliesañ pa vez heuliet ul liamm istorel dispredet war-zu ur bajenn zo bet dilamet.
+'missing-revision' => "N'eus ket eus adwel niv. $1 eus ar bajenn anvet « {{PAGENAME}} ».
+
+C'hoarvezout a ra peurliesañ pa vez heuliet ul liamm istorel dispredet war-zu ur bajenn zo bet dilamet.
 Gallout a reot kavout muioc'h a vunudoù e [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} renabl an dilamadurioù].",
 'userpage-userdoesnotexist' => 'N\'eo ket enrollet ar gont "<nowiki>$1</nowiki>". Merkit ma fell deoc\'h krouiñ/kemmañ ar bajenn-mañ.',
 'userpage-userdoesnotexist-view' => 'N\'eo ket enrollet ar gont implijer "$1".',
@@ -1091,9 +1093,10 @@ N\'oc\'h ket aotreet da vont outi.',
 'revdelete-no-change' => "'''Evezh :''' emañ an arventennoù gweluster goulennet gant an elfenn deiziataet eus an $1 da $2 dija",
 'revdelete-concurrent-change' => "Fazi p'eo bet kemmet an elfenn deiziataet eus an $1 da $2 : cheñchet eo bet e statud gant unan bennak all dres pa oac'h-chwi o kemmañ anezhi. Gwiriit ar marilhoù.",
 'revdelete-only-restricted' => "Ur fazi zo bet en ur guzhat an elfenn deiziadet eus an $1 da $2 : n'hallit ket kuzhat an elfennoù-mañ ouzh ar verourien hep dibab ivez unan eus an dibarzhioù gweluster all.",
-'revdelete-reason-dropdown' => '*Abegoù diverkañ boutin
+'revdelete-reason-dropdown' => "*Abegoù diverkañ boutin
 **Gaou ouzh ar gwirioù implijout
-** Titouroù personel dizereat',
+**Titouroù personel dizereat
+** Titouroù a c'hall bezañ gwallvrudus",
 'revdelete-otherreason' => 'Abeg all/ouzhpenn :',
 'revdelete-reasonotherlist' => 'Abeg all',
 'revdelete-edit-reasonlist' => 'Kemmañ abegoù an diverkañ',
@@ -1144,7 +1147,9 @@ Gwiriit ne vo ket torret red istor ar bajenn gant ar c'hemm-mañ.",
 'editundo' => 'dizober',
 'diff-multi' => "({{PLURAL:$1|Ur reizhadenn da c'hortoz|$1 reizhadenn da c'hortoz}} gant {{PLURAL:$2|un implijer|$2 implijer}} kuzhet.)",
 'diff-multi-manyusers' => "({{PLURAL:$1|Ur reizhadenn da c'hortoz|$1 reizhadenn da c'hortoz}} gant muioc'h eget $2 {{PLURAL:$2|implijer|implijer}} kuzhet.)",
-'difference-missing-revision' => "C'hoarvezout a ra peurliesañ pa vez heuliet ul liamm disheñvel dispredet war-zu ur bajenn zo bet dilamet.
+'difference-missing-revision' => "!!{{PLURAL:$2|Un adweladur|$2 adweladurioù}} eus an disheñvelder ($1) {{PLURAL:$2|n'eo ket bet kavet|n'int ket bet adkavet}}.
+
+C'hoarvezout a ra peurliesañ pa vez heuliet ul liamm disheñvel dispredet war-zu ur bajenn zo bet dilamet.
 Gallout a reot kavout munudoù e [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} renabl an dilamadurioù].",
 
 # Search results
@@ -1979,6 +1984,7 @@ $1 {{PLURAL:$1|rummad|rummad}}',
 'mostlinkedtemplates' => 'Patromoù implijet ar muiañ',
 'mostcategories' => 'Pennadoù rummatet ar muiañ',
 'mostimages' => 'Skeudennoù implijet ar muiañ',
+'mostinterwikis' => 'Pajennoù gant an niver brasañ a etrewikioù',
 'mostrevisions' => 'Pennadoù bet kemmet ar muiañ',
 'prefixindex' => 'An holl bajennoù a grog gant...',
 'prefixindex-namespace' => 'An holl bajennoù enno ur rakger (esaouenn anv $1)',
@@ -2276,6 +2282,8 @@ taolit evezh bras.",
 'rollback' => "disteuler ar c'hemmoù",
 'rollback_short' => 'Disteuler',
 'rollbacklink' => 'disteuler',
+'rollbacklinkcount' => 'terriñ $1 {{PLURAL:$1|kemm|kemmañ}}',
+'rollbacklinkcount-morethan' => 'terriñ ouzhpenn $1 {{PLURAL:$1|kemm|kemmoù}}',
 'rollbackfailed' => "C'hwitet eo bet an distaoladenn",
 'cantrollback' => 'Dibosupl da zisteuler: an aozer diwezhañ eo an hini nemetañ da vezañ kemmet ar pennad-mañ',
 'alreadyrolled' => "Dibosupl eo disteuler ar c'hemm diwezhañ graet d'ar bajenn [[:$1]] gant [[User:$2|$2]] ([[User talk:$2|Kaozeal]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);
@@ -2756,6 +2764,7 @@ Miret eo an holl enporzhiadennoù etrewiki e-barzh [[Special:Log/import|log an e
 'import-interwiki-templates' => 'Lakaat e-barzh an holl batromoù',
 'import-interwiki-submit' => 'Enporzhiañ',
 'import-interwiki-namespace' => 'Esaouenn anv ar pal :',
+'import-interwiki-rootpage' => 'Pennpajenn kas (war zibab)',
 'import-upload-filename' => 'Anv ar restr :',
 'import-comment' => 'Notenn :',
 'importtext' => "Ezporzhiit ar restr adal ar wiki orin en ur ober gant an arc'hwel [[Special:Export|ezporzhiañ]].
@@ -2789,6 +2798,8 @@ Enrollit ar bajenn war hoc'h urzhiataer ha kargit anezhi amañ.",
 'import-error-special' => 'Ne vez ket enporzhiet ar bajenn "$1" rak stag eo ouzh un esaouenn anv dibar na aotre ket pajennoù.',
 'import-error-invalid' => 'Ne vez ket enporzhiet ar bajenn "$1" rak direizh eo hec\'h anv.',
 'import-options-wrong' => '{{PLURAL:$2|Dibab fall|Dibaboù fall}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => "Pourchas a ra ar bennbajenn un titl n'eo ket reizh.",
+'import-rootpage-nosubpage' => 'Esaouenn anvioù "$1" eus ar bennpajenn ne aotre ket an ispajennoù.',
 
 # Import log
 'importlogpage' => 'Log an enporzhiadennoù',
@@ -2961,7 +2972,7 @@ Sur a-walc'h abalamour d'ul liamm enni a gas d'ul lec'hienn ziavaez berzet.",
 'pageinfo-authors' => 'Niver a aozerien disheñvel',
 'pageinfo-recent-edits' => 'Niver a gemmoù nevez (er $1 diwezhañ)',
 'pageinfo-recent-authors' => "Niver a aozerien nevez a-ziforc'h",
-'pageinfo-restriction' => 'Gwareziñ ar bajenn (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Gwareziñ ar bajenn ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Ger hud |Gerioù hud}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Rumm kuzh|Rummoù kuzh}} ($1)',
 'pageinfo-templates' => "{{PLURAL:$1|Patrom endalc'het|Patromoù endalc'het}} ($1)",
index aef2dc4..b7d1060 100644 (file)
@@ -10,6 +10,7 @@
  * @author Abastillas
  * @author Dosmiin Barsbold
  * @author Jordz
+ * @author Mirzali
  * @author Palang hernan
  * @author Reedy
  * @author לערי ריינהארט
@@ -456,7 +457,7 @@ Ayaw kalimot sa pag-usab sa imong [[Special:Preferences|{{SITENAME}} mga prepere
 'loginprompt' => 'Kinahanglang naka-enable ang mga koki aron ikaw maka-log-in sa {{SITENAME}}.',
 'userlogin' => 'Rehistro / Dayon',
 'logout' => 'Biya',
-'userlogout' => 'Biya',
+'userlogout' => 'Bıveciye',
 'notloggedin' => 'Wala ka pa masulod',
 'nologin' => "Wala pay akawnt? '''$1'''.",
 'nologinlink' => 'Paghimo og akawnt',
index 229956a..f2e1eaf 100644 (file)
@@ -560,7 +560,7 @@ $2',
 'externaldberror' => 'یان هەڵەی ڕێگەپێدانی بنکەدراو هەیە یان ڕێگات پێ نادرێت بۆ نوێ کردنی هەژماری دەرەکیت.',
 'login' => 'بچۆ ژوورەوە',
 'nav-login-createaccount' => 'بچۆ ژوورەوە / ھەژمار دروست بکە',
-'loginprompt' => 'بۆ چوونەژوورەوە لە {{SITENAME}} دەبێ ڕێگەت دابێت بە کووکییەکان (cookies enabled).',
+'loginprompt' => 'بۆ چوونەژوورەوە بۆ {{SITENAME}} دەبێ کوکییەکان چالاک بکەیت.',
 'userlogin' => 'بچۆ ژوورەوە / ھەژمار دروست بکە',
 'userloginnocreate' => 'بچۆ ژوورەوە',
 'logout' => 'بچۆ دەرەوە',
@@ -717,10 +717,10 @@ $2
 'hr_tip' => 'هێڵی ئاسۆیی (دەگمەن بەکاری بێنە)',
 
 # Edit pages
-'summary' => 'پوختە:',
+'summary' => 'کورتەی دەستکاری:',
 'subject' => 'بابەت/سەردێڕ:',
 'minoredit' => 'ئەمە دەستکارییەکی بچووکە',
-'watchthis' => 'چاودێریی ئەم پەڕە بکە',
+'watchthis' => 'ئەم پەڕەیە بخە ژێر چاودێری',
 'savearticle' => 'پەڕەکە پاشەکەوت بکە',
 'preview' => 'پێشبینین',
 'showpreview' => 'پێشبینین نیشانبدە',
@@ -794,12 +794,11 @@ $2
 'userpage-userdoesnotexist' => 'هەژماری بەکارهێنەری "<nowiki>$1</nowiki>" تۆمار نەکراوە.<br />
 گەر دەتەوێ ئەم لاپەڕە درووست‌کەی یان دەستکاری بکەی تکایە تاقی‌بکەوە .',
 'userpage-userdoesnotexist-view' => 'ھەژماری بەکارھێنەریی «$1» تۆمار نەکراوە.',
-'clearyourcache' => "'''ئاگاداری:''' لە دوای پاشەکەوت کردن، لەوانەیە  بۆ بینینی گۆڕانکارییەکان پێویست بێ کاشی وێبگەڕەکەت پاکبکەیتەوە.
+'clearyourcache' => "تێبینی:''' لە دوای پاشەکەوت کردن، لەوانەیە  بۆ بینینی گۆڕانکارییەکان پێویست بێ cacheی وێبگەڕەکەت پاکبکەیتەوە.
 * '''Firefox / Safari:''' دوگمەی ''Shift'' بگرە کاتێک لەسەر ''Reload''دا کرتە دەکەی، یان ھەرکام لە ''Ctrl-F5'' یان ''Ctrl-R'' لێبدە (''⌘-R'' لەسەر Mac دا)
 * '''Google Chrome:''' دوگمەکانی ''Ctrl-Shift-R'' لێبدە  (''⌘-Shift-R'' لەسەر Mac دا)
 * '''Internet Explorer:''' دوگمەی ''Ctrl'' بگرە کاتێک لەسەر  ''Refresh''دا کرتە دەکەی، یان ''Ctrl-F5'' لێبدە
-* '''Konqueror:''' کرتە بکە لەسەر ''Reload'' یان دوگمەی ''F5'' لێبدە
-* '''Opera:''' کاشەکە لە ڕێگەی ''Tools → Preferences'' بسڕەوە.",
+* '''Opera:''' لە ڕێگەی ''Tools → Preferences'' ەوە cacheەکە بسڕەوە.",
 'usercssyoucanpreview' => "'''سەرچەشن:''' «{{int:showpreview}}» بەکاربێنە بۆ تاقی‌کردنەوەی CSS نوێ‌کەت، پێش پاشەکەوت‌کردن.",
 'userjsyoucanpreview' => "'''سەرچەشن:''' «{{int:showpreview}}» بەکاربێنە بۆ تاقی‌کردنەوەی جاڤاسکریپتە نوێ‌کەت، پێش پاشەکەوت‌کردن.",
 'usercsspreview' => "'''له‌یادت بێ که‌ ئێسته‌ ته‌نها پێشبینینی CSS به‌کارهێنه‌ریه‌که‌ت ده‌که‌ی.'''
@@ -963,9 +962,9 @@ $3 هۆکاری "$2" خستوەتەڕوو',
 'rev-deleted-event' => '(لۆگی کردەوە سڕایەوە)',
 'rev-deleted-text-permission' => "ئەم پیاچوونەوەی پەڕەیە '''سڕاوەتەوە'''.
 وردەکاری سەبارەت بەوە لە [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی سڕینەوە]دا دەست دەکەوێت.",
-'rev-deleted-text-unhide' => "پێداچوونەوەی ئەم لاپەڕە '''سڕدراوەتەوە'''.<br />
\84Û\95Ù\88اÙ\86Û\95Û\8cÛ\95 Ù\88ردÛ\95کارÛ\8c Ø³Û\95بارÛ\95ت Ø¨Û\95Ù\88Û\95 Ù\84Û\8eرÛ\95دا Ø¯Û\95ست Ú©Û\95Ù\88Û\8e : [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Ù\84Û\86Ú¯Û\8c Ø¨Û\95رگرÛ\8c]<br />
-وەک بەڕێوبەر هێشتا دەتوانی [$1 ئەم پێداچوونەوە] ببینی، گەر دەتەوێ پێشتر بڕۆی.",
+'rev-deleted-text-unhide' => "ئەم پیاچوونەوەی پەڕەیە '''سڕراوەتەوە'''.
\88ردÛ\95کارÛ\8cÛ\8cÛ\95کاÙ\86 Ù\84Û\95 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Ù\84Û\86Ú¯Û\8c Ø³Ú\95Û\8cÙ\86Û\95Ù\88Û\95]دا Ø¯Û\95دÛ\86زرÛ\8eتÛ\95Ù\88Û\95.
+ھێشتا دەتوانی [$1 ئەم پیاچوونەوەیە ببینی] ئەگەر دەتەوێ پێشتر بڕۆی.",
 'rev-suppressed-text-unhide' => "پێداچوونەوی ئەم لاپەڕە '''بەرگری''' لێ‌کراوە.
 لەوانەیە وردەکاری سەبارەت بەوە لێرەدا دەست کەوێ : [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} لۆگی بەرگری].
 وەک بەڕێوبەر هێشتا دەتوانی [$1 ئەم پێداچوونەوە] ببینی، گەر دەتەوێ پێشتر بڕۆی.",
@@ -1037,8 +1036,9 @@ $1",
 'revdelete-only-restricted' => 'ھەڵە لە شاردنەوەی بابەتی ڕێکەوتی $2ی $1: ناتوانی لە بینینی بابەتەکان لە لایەن بەڕێوبەرانەوە بەرگری بکەیت، مەگەر یەکێکی تر لە ھەڵبژاردەکانی بەرچاوکەوتن ھەڵبژێریت.',
 'revdelete-reason-dropdown' => '*ھۆکارە باوەکانی سڕینەوە
 ** لادان لە مافی لەبەرگرتنەوە
-** زانیارە تاکەکەسییە نابەجێیەکان
-** Potentially libelous information',
+** بۆچوون یان زانیاریی تاکەکەسیی نەشیاو
+** ناوی بەکارھێنەریی نەشیاو
+** زانیارییەک کە دەتوانێ بوختاناوی بێت',
 'revdelete-otherreason' => 'ھۆکاری تر/زیاتر:',
 'revdelete-reasonotherlist' => 'هۆکاری دیکە',
 'revdelete-edit-reasonlist' => 'دەستکاریی ھۆکارەکانی سڕینەوە',
@@ -1046,8 +1046,8 @@ $1",
 
 # Suppression log
 'suppressionlog' => 'لۆگی بەرگری‌کردن',
-'suppressionlogtext' => 'لە خوارەوە لیستێک لە سڕاوە و بەرگری‌کراوانەی وا ناوەڕۆکیان لە چاو بەڕێوبەران داشاردراوە دەبینیت.
¨Û\86 Ø¯Û\8cتÙ\86Û\8c Ø¦Û\95Ù\88 Ø¨Û\95رگرÛ\8cاÙ\86Û\95Û\8c Ø¦Û\8eستا Ù\84Û\95 Ú©Ø§Ø±Ø¯Ø§Û\8cÛ\95 Ú\86اÙ\88 Ù\84Û\95 [[Special:IPBlockList|Ù\84Û\8cستÛ\8c Ø¨Û\95رگرÛ\8c Ø¦Ø§Û\8câ\80\8cÙ¾Û\8c]] Ø¨Ú©Û\95.',
+'suppressionlogtext' => 'خوارەوە لیستێکی سڕینەوەکان و بەربەستنەکانە کە ناوەرۆکێکی شاراوە لە بەڕێوبەرانیان ھەیە.
³Û\95Û\8cرÛ\8c [[Special:BlockList|Ù\84Û\8cستÛ\8c Ø¨Û\95ربÛ\95ستÙ\86]] Ø¨Ú©Û\95 Ø¨Û\86 Ù\84Û\8cستÛ\8c Ø¦Û\95Ù\88 Ø¨Û\95رگرÛ\8c Ù\88 Ø¨Û\95ربÛ\95ستÙ\86اÙ\86Û\95 Ø¦Û\8eستا Ù\84Û\95کارداÙ\86.',
 
 # History merging
 'mergehistory' => 'یەک‌خستنی مێژووەکانی لاپەڕە',
@@ -1088,7 +1088,7 @@ $1",
 'lineno' => 'ھێڵی  $1:',
 'compareselectedversions' => 'پیاچوونەوە ھەڵبژێردراوەکان ھەڵسەنگێنە',
 'showhideselectedversions' => 'پیاچوونەوە ھەڵبژێردراوەکان نیشانبدە/بشارەوە',
-'editundo' => 'گەڕاندنەوە',
+'editundo' => 'پووچەڵکردنەوە',
 'diff-multi' => '({{PLURAL:$1|پیاچوونەوەیەکی نێوانی|$1 پیاچوونەوەی نێوانی}}ی {{PLURAL:$2|بەکارھێنەرێک|$2 بەکارھێنەر}} نیشان نەدراوە)',
 
 # Search results
@@ -1307,25 +1307,25 @@ $1",
 # Groups
 'group' => 'گرووپ:',
 'group-user' => 'بەکارهێنەران',
-'group-autoconfirmed' => 'بەکارھێنەرە خۆکار پەسندکراوەکان',
+'group-autoconfirmed' => 'بەکارھێنەرانی پەسندکراوی خۆگەڕ',
 'group-bot' => 'بۆتەکان',
 'group-sysop' => 'بەڕێوبەران',
-'group-bureaucrat' => 'بورووکراتەکان',
+'group-bureaucrat' => 'بیوروکراتەکان',
 'group-suppress' => 'چاودێرەکان',
 'group-all' => '(هەموو)',
 
 'group-user-member' => '{{GENDER:$1|بەکارھێنەر}}',
-'group-autoconfirmed-member' => '{{GENDER:$1|بەکارھێنەری خۆکار پەسەندکراو}}',
+'group-autoconfirmed-member' => '{{GENDER:$1|بەکارھێنەرانی پەسندکراوی خۆگەڕ}}',
 'group-bot-member' => 'بۆت',
 'group-sysop-member' => '{{GENDER:$1|بەڕێوبەر}}',
-'group-bureaucrat-member' => '{{GENDER:$1|بورووکرات}}',
+'group-bureaucrat-member' => '{{GENDER:$1|بیوروکرات}}',
 'group-suppress-member' => '{{GENDER:$1|چاودێر}}',
 
 'grouppage-user' => '{{ns:project}}:بەکارھێنەران',
-'grouppage-autoconfirmed' => '{{ns:project}}:بەکارهێنەرانی خۆکار-بڕواکراو',
+'grouppage-autoconfirmed' => '{{ns:project}}:بەکارھێنەرانی پەسندکراوی خۆگەڕ',
 'grouppage-bot' => '{{ns:project}}:بۆتەکان',
 'grouppage-sysop' => '{{ns:project}}:بەڕێوبەران',
-'grouppage-bureaucrat' => '{{ns:project}}:بورووکراتەکان',
+'grouppage-bureaucrat' => '{{ns:project}}:بیوروکراتەکان',
 'grouppage-suppress' => '{{ns:project}}:چاودێر',
 
 # Rights
@@ -1432,7 +1432,7 @@ $1",
 'nchanges' => '$1 {{PLURAL:$1|گۆڕانکاری|گۆڕانکاری}}',
 'recentchanges' => 'دوایین گۆڕانکارییەکان',
 'recentchanges-legend' => 'ھەڵبژاردەکانی دوایین گۆڕانکارییەکان',
-'recentchanges-summary' => 'لەم پەڕەدا بە دوای دوایین گۆڕانکارییەکان لەم ویکیەدا بکەوە.',
+'recentchanges-summary' => 'دوایین گۆڕانکارییەکانیی ویکی لەم پەڕەیەدا ببینە.',
 'recentchanges-feed-description' => 'دوای دوایین گۆڕانکارییەکانی ئەم ویکیە بکەوە لەم «فید»ەوە.',
 'recentchanges-label-newpage' => 'ئەم دەستکارییە لاپەڕەیەکی نوێی دروستکرد',
 'recentchanges-label-minor' => 'ئەمە دەستکاریەکی بچووکە',
@@ -1573,7 +1573,7 @@ $2، ئەو جۆرە {{PLURAL:$3|پەڕگەیە کە ڕێگەی|پەڕگانەی
 'upload-maxfilesize' => 'ئەوپەڕی قەبارەی پەڕگە: $1',
 'upload-description' => 'پێناسەی پەڕگە',
 'upload-options' => 'ھەڵبژاردەکانی  بارکردن',
-'watchthisupload' => 'چاودێریی ئەم پەڕگەیە بکە',
+'watchthisupload' => 'ئەم پەڕگەیە بخە ژێر چاودێری',
 'filewasdeleted' => 'پەڕگەیەک بەم ناوە لەم دواییانەدا بارکرا و بە خێرایی سڕایەوە.
 باشتر وایە پێش هەوڵی دووبارە بۆ بارکردن سەرنجی $1 بدەی.',
 'filename-bad-prefix' => "دەستپێکی ناوی ئەو پەڕگەی باری دەکەی '''\"\$1\"'''، کە ناوێکی ناسێنەر نیە؛ ئەو جۆرە ناوە زۆربەی کات کامێرا دیجیتاڵەکان خۆکار بەکاری‌دەبەن.
@@ -1983,7 +1983,7 @@ $1',
 
 # Watchlist
 'watchlist' => 'پێرستی چاودێرییەکانم',
-'mywatchlist' => 'پێرستی چاودێرییەکانم',
+'mywatchlist' => 'پێرستی چاودێرییەکەم',
 'watchlistfor2' => 'بۆ $1 $2',
 'nowatchlist' => 'لە لیستی چاودێڕییەکانتدا ھیچ نیە.',
 'watchlistanontext' => 'تکایە بۆ دیتن و دەستکاری بابەتەکانی لە ناو لیستی چاودێریەکەت‌دا $1.',
@@ -1995,7 +1995,7 @@ $1',
 'removewatch' => 'لەلیستی چاودێری لایبە',
 'removedwatchtext' => 'پەڕەی «[[:$1]]» لە [[Special:Watchlist|لیستی چاودێریەکەت]] لابرا.',
 'watch' => 'چاودێری بکە',
-'watchthispage' => 'چاودێریی ئەم پەڕە بکە',
+'watchthispage' => 'ئەم پەڕەیە بخە ژێر چاودێری',
 'unwatch' => 'لابردنی چاودێری',
 'unwatchthispage' => 'ئیتر چاودێری مەکە',
 'notanarticle' => 'پەڕەی بێ ناوەڕۆک',
@@ -2093,6 +2093,7 @@ $UNWATCHURL
 'rollback' => 'گەڕاندنەوەی دەستکارییەکان',
 'rollback_short' => 'گەڕاندنەوە',
 'rollbacklink' => 'گەڕاندنەوە',
+'rollbacklinkcount' => 'گەڕاندنەوەی $1 دەستکاری',
 'rollbackfailed' => 'گەڕاندنەوە سەرکەوتوو نەبوو',
 'cantrollback' => 'دەستکاریەکان ناگەڕێندرێتەوە؛
 دوایین هاوبەش تەنها ڕێکخەری ئەم لاپەڕەیە.',
@@ -2179,9 +2180,8 @@ $UNWATCHURL
 'undeletepagetext' => 'ئەم {{PLURAL:$1|سڕاوەتەوە|$1 لاپەڕە سڕاونەتەوە}} بەڵام لەبەر ئەوەی لە ئەرشیڤ‌دا هەن هێشتا دەتوانی بیانهێنیتەوە.
 ئەرشیڤ چەن‌وەخت جارێ لە کاتی دیاری‌کراودا خاوێن‌دەکرێتەوە.',
 'undelete-fieldset-title' => 'هێنانەوەی پێداچوونەوەکان',
-'undeleteextrahelp' => "بۆ هێنانەوەی هەموو مێژووی لاپەڕەیەک، تەواوی چوارچێوەکانی نیشان‌کردن بەتاڵ بهێڵەوە و کرتە بکە سەر '''''هێنانەوە'''''.
-بۆ ئەنجامی گەڕانەوەیەکی هەڵبژاردوو، چوارچێوەی بەرامبەر ئەو پێداچوونەوی دەتەوێ بیهێنیتەوە، نیشان‌بکە و  کرتە بکە سەر '''''هێنانەوە'''''.
-کرتەکردن سەر '''''بردنەوە نووک''''' ئەبێتە هۆی سڕینەوەی شوێنی بۆچوونەکان و بەتاڵ بوونەوەی چوارچێوەکان.",
+'undeleteextrahelp' => "بۆ هێنانەوەی سەرانسەری مێژووی پەڕەیەک، گشت بۆکسەکان ھەڵنەبژێردراو بھێڵەوە و کلیک بکە لەسەر '''''{{int:undeletebtn}}'''''.
+بۆ ئەنجامدانی ھێنانەوەیەکی بژاردەیی، بۆکسەکانی پەیوەندیدار بەو پیاچوونەوانە دەبێ بھێنرێنەوە ھەڵبژێرە و کلیک بکە لەسەر  '''''{{int:undeletebtn}}'''''.",
 'undeleterevisions' => '$1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}} ئەرشیڤ‌کرا',
 'undeletehistory' => 'ئەگەر لاپەڕەیەک بهێنیتەوە، هەموو پێداچوونەوەکانی دەگەڕێنەوە بۆ لاپەڕەی مێژوو.
 ئەگەر لە کاتی سڕاوەبوون، لاپەڕەیەک هەر بەو ناوە درووست‌کرابێت، پێداچوونەوە هێنراوەکان لە لاپەڕەی مێژووی کۆن‌دا نیشان ئەدرێت.',
@@ -2305,8 +2305,8 @@ $1',
 'ipb-change-block' => 'دیسان بەربەست‌کردنەوەی ئەم بەکارهێنەرە بەم هەڵبژاردانە',
 'badipaddress' => 'ناونیشانی ئای‌پی نەگونجاو',
 'blockipsuccesssub' => 'بەربەست کردن سەرکەوتوو بوو',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] بەربەستکراوە.<br />
¨Û\86 Ø¯Û\8cتÙ\86Û\8c Ø¨Û\95ربÛ\95ستâ\80\8cکراÙ\88Û\95کاÙ\86Ø\8c Ú\86اÙ\88 Ù\84Û\95 [[Special:BlockList|Ù\84Û\8cستÛ\8c Ø¨Û\95ربÛ\95ستÛ\8c Ø¦Ø§Û\8câ\80\8cÙ¾Û\8c]] Ø¨Ú©Û\95.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] بەربەستکراوە.<br />
³Û\95Û\8cرÛ\8c [[Special:BlockList|Ù\84Û\8cستÛ\8c Ø¨Û\95ربÛ\95ستÙ\86]] Ø¨Ú©Û\95 Ø¨Û\86 Ø¨Û\8cÙ\86Û\8cÙ\86Û\95Ù\88Û\95Û\8c Ø¨Û\95ربÛ\95ستÙ\86Û\95کاÙ\86.',
 'ipb-edit-dropdown' => 'دەستکاری هۆکارەکانی بەربەست',
 'ipb-unblock-addr' => 'لە بەربەست‌دەرهێنانی $1',
 'ipb-unblock' => 'لە بەربەست‌دەرهێنانی ناوی بەکارهێنەریەک یا ناونیشانێکی ئای‌پی',
@@ -2343,9 +2343,9 @@ $1',
 'blocklogpage' => 'لۆگی بەربەستن',
 'blocklogentry' => '[[$1]] ئاستەنگ کرا بۆ ماوەی $2 $3',
 'reblock-logentry' => 'دۆخی ئاستەنگ کردنی [[$1]]  بۆ گۆڕدرا بۆ ماوەی $2 $3',
-'blocklogtext' => 'ئÛ\95Ù\85Û\95 Ù\84Û\86Ú¯Û\8c Ú©Ø±Ø¯Û\95Ù\88Û\95کاÙ\86Û\8c Ø¨Û\95ربÛ\95ستâ\80\8cکراÙ\86 Û\8cا Ù\84ابردÙ\86Û\8c Ø¨Û\95ربÛ\95ستÛ\8c Ø¨Û\95کارÙ\87ێنەرە.
¨Û\95ربÛ\95ستâ\80\8cکراÙ\86Û\8c Ø®Û\86کارÛ\8c Ø¦Ø§Û\8câ\80\8cÙ¾Û\8c Ù\84Û\95Ù\85 Ù\84Û\8cستÛ\95دا Ù\86Û\95Ù\87اتÙ\88ون.
¨Û\86 Ø¯Û\8cتÙ\86Û\8c Ø¦Û\95Ù\88 Ø¨Û\95ربÛ\95ستاÙ\86Û\95 Ø¦Û\8eستÛ\95 Ù\84Û\95 Ø¦Ø§Ø±Ø§Ø¯Ø§Ù\86 Ú\86اÙ\88 Ù\84Û\95 [[Special:BlockList|Ù\84Û\8cستÛ\8c Ø¨Û\95ربÛ\95ستÛ\8c Ø¦Ø§Û\8câ\80\8cÙ¾Û\8c]] Ø¨Ú©Û\95.',
+'blocklogtext' => 'ئÛ\95Ù\85Û\95 Ù\84Û\86Ú¯Û\8eÚ©Û\8c Ú©Ø±Ø¯Û\95Ù\88Û\95کاÙ\86Û\8c Ø¨Û\95ربÛ\95ستÙ\86 Û\8cاÙ\86 Ù\84ابردÙ\86Û\8c Ø¨Û\95ربÛ\95ستÙ\86Û\8c Ø¨Û\95کارھێنەرە.
¦Û\95Ù\88 Ø¦Ø§Û\8cÙ¾Û\8c Ø¦Û\95درÛ\95ساÙ\86Û\95 Ø®Û\86کاراÙ\86Û\95 Ø¨Û\95ربستکراÙ\88Ù\86 Ø¨Û\95 Ú\95Û\8cز Ù\86Û\95کراون.
³Û\95Û\8cرÛ\8c [[Special:BlockList|Ù\84Û\8cستÛ\8c Ø¨Û\95ربÛ\95ستÙ\86]] Ø¨Ú©Û\95 Ø¨Û\86 Ø¨Û\8cÙ\86Û\8cÙ\86Û\8c Ø¦Û\95Ù\88 Ø¨Û\95رگرÛ\8c Ù\88 Ø¨Û\95ربÛ\95ستÙ\86اÙ\86Û\95 Ø¦Û\8eستا Ù\84Û\95 Ø¨Û\95رکارداÙ\86.',
 'unblocklogentry' => 'بەربەستنی "$1" بەتاڵ کرا',
 'block-log-flags-anononly' => 'تەنها بەکارهێنەرە نەناسراوەکان',
 'block-log-flags-nocreate' => 'دروستکردنی ھەژمار ناچالاککراوە',
@@ -2437,7 +2437,7 @@ $1',
 'cant-move-user-page' => 'ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی لاپەڕەکانی بەکارهێنەر (جیاواز لە ژێرلاپەڕەکان).',
 'cant-move-to-user-page' => 'ڕێگەت پێ‌نەدراوە بۆ گواستنەوەی لاپەڕەیەک بۆ لاپەڕەی بەکارهێنەر (غەیری بۆ ژێرلاپەڕەی بەکارهێنەر).',
 'newtitle' => 'بۆ ناوی نوێی:',
-'move-watch' => 'چاودێری ئەم پەڕەیە بکە',
+'move-watch' => 'ئەم پەڕەیە بخە ژێر چاودێری',
 'movepagebtn' => 'ئەم پەڕەیە بگوازەوە',
 'pagemovedsub' => 'گواستنەوە بە سەرکەوتوویی جێبەجێ کرا',
 'movepage-moved' => "'''«$1» گوازرایەوە بۆ «$2»'''",
@@ -2650,8 +2650,8 @@ $1',
 'tooltip-watchlistedit-raw-submit' => 'نوێکردنەوەی لیستی چاودێری',
 'tooltip-recreate' => 'درووست‌کردنەوەی لاپەڕە ئەگەرچی سڕاوەتەوە',
 'tooltip-upload' => 'دەستپێکردنی بارکردن',
-'tooltip-rollback' => "''گەڕاندنەوە'' بە یەک کلیک گۆڕانکاری (گۆڕانکارییەکانی) ئەم پەڕە ئەباتەوە بۆ ھی دواین بەشدار",
-'tooltip-undo' => '«پووچکردنەوە» ئەم گۆڕانکارییە دەگەڕێنێتەوە و فۆرمی دەستکاریکردنەکە لە حاڵەتی پێشبینیندا دەکاتەوە. بەم شێوە دەکرێ ھۆکارێک لە پوختەدا بنووسرێت.',
+'tooltip-rollback' => '«گەڕاندنەوە» بە یەک کرتە گۆڕانکاریی/گۆڕانکارییەکانی ئەم پەڕەیە دەگەڕێنێتەوە بۆ دواین بەشداربوو',
+'tooltip-undo' => '«پووچەڵکردنەوە» ئەم گۆڕانکارییە دەگەڕێنێتەوە و فۆرمی دەستکاریکردن لە شێوەی پێشبینیندا دەکاتەوە. بەم جۆرە دەکرێ ھۆکارێک لە کورتەی دەستکاریدا بنووسرێ.',
 'tooltip-preferences-save' => 'هەڵبژاردنەکانت بپارێزە',
 'tooltip-summary' => 'پوختەیەکی کورتی تێبخە',
 
@@ -2681,13 +2681,20 @@ $1',
 # Info page
 'pageinfo-title' => 'زانیاری بۆ «$1»',
 'pageinfo-header-basic' => 'زانیاریی سەرەتایی',
-'pageinfo-header-edits' => 'دەستکاریەکان',
+'pageinfo-header-edits' => 'مێژووی دەستکاری',
+'pageinfo-header-restrictions' => 'پاراستنی پەڕە',
+'pageinfo-header-properties' => 'تایبەتمەندییەکانی پەڕە',
 'pageinfo-display-title' => 'ناونیشان نیشانبدە',
 'pageinfo-article-id' => 'زنجیرەی پەڕە',
 'pageinfo-views' => 'ژمارەی بینینەکان',
-'pageinfo-watchers' => 'ژمارەی چاودێران',
+'pageinfo-watchers' => 'ژمارەی چاودێرانی پەڕە',
+'pageinfo-redirects-name' => 'ڕەوانەکردنەکان بۆ ئەم پەڕەیە',
+'pageinfo-subpages-name' => 'ژێرپەڕەکانی ئەم پەڕەیە',
 'pageinfo-firstuser' => 'دروستکەری پەڕە',
-'pageinfo-edits' => 'ژمارەی دەستکارییەکان',
+'pageinfo-firsttime' => 'ڕێکەوتی دروستکردنی پەڕە',
+'pageinfo-lastuser' => 'دوایین دەستکاریکەر',
+'pageinfo-lasttime' => 'ڕێکەوتی دوایین دەستکاری',
+'pageinfo-edits' => 'ژمارەی سەرجەمی دەستکارییەکان',
 
 # Skin names
 'skinname-standard' => 'کلاسیک',
@@ -2816,12 +2823,14 @@ $1',
 'exif-saturation' => 'تێربوون',
 'exif-gpslatitude' => 'پانی',
 'exif-gpslongitude' => 'درێژی',
+'exif-gpstimestamp' => 'کاتی GPS (سەعاتی ئەتۆمی)',
 'exif-gpsmeasuremode' => 'جۆری پێوان',
 'exif-gpsdop' => 'وردی پێوان',
 'exif-gpsspeedref' => 'یەکەی خێرایی',
 'exif-gpsspeed' => 'خێرایی وەرگری GPS',
 'exif-gpstrack' => 'ئاڕاستەی جوڵان',
 'exif-gpsimgdirection' => 'ئاڕاستەی وێنە',
+'exif-gpsareainformation' => 'ناوی ناوچەی GPS',
 'exif-gpsdatestamp' => 'ڕێکەوتی GPS',
 'exif-objectname' => 'سەردێری کورت',
 'exif-headline' => 'سەردێر',
@@ -2850,6 +2859,8 @@ $1',
 
 'exif-exposureprogram-1' => 'دەستکار',
 
+'exif-subjectdistance-value' => '$1 مەتر',
+
 'exif-meteringmode-0' => 'نەزانراو',
 'exif-meteringmode-1' => 'تێکڕا',
 'exif-meteringmode-5' => 'شێوە',
@@ -2949,6 +2960,8 @@ $1',
 'exif-gpsdestdistance-m' => 'میل',
 'exif-gpsdestdistance-n' => 'میکی دەریایی',
 
+'exif-gpsdop-good' => 'چاک ($1)',
+
 'exif-dc-date' => 'ڕۆژ(ەکان)',
 'exif-dc-publisher' => 'بڵاوکار',
 'exif-dc-relation' => 'میدیای پەیوەندیدار',
@@ -2961,8 +2974,11 @@ $1',
 'exif-iimcategory-sci' => 'زانست و تەکنۆلۆژیا',
 'exif-iimcategory-soi' => 'بابەتە کۆمەڵایەتییەکان',
 'exif-iimcategory-spo' => 'وەرزشەکان',
+'exif-iimcategory-wea' => 'کەش و ھەوا',
 
 'exif-urgency-normal' => 'ئاسایی ($1)',
+'exif-urgency-low' => 'کەم ($1)',
+'exif-urgency-high' => 'زۆر ($1)',
 
 # External editor support
 'edit-externally' => 'دەستکاریی ئەم پەڕەیە بکە بە بەکارھێنانی پڕۆگرامێکی دەرەکی',
@@ -3204,7 +3220,7 @@ $5
 * <span class="mw-specialpagerestricted">پەڕە تایبەتە بەرگری‌لێکراوەکان.</span>',
 'specialpages-group-maintenance' => 'ڕاپۆرتەکانی چاکسازی',
 'specialpages-group-other' => 'پەڕە تایبەتەکانی دیکە',
-'specialpages-group-login' => 'چوونەژوورەوە / ناونووسین',
+'specialpages-group-login' => 'چوونەژوورەوە / دروستکردنی ھەژمار',
 'specialpages-group-changes' => 'دوایین گۆڕانکارییەکان و ڕەشنووسەکان',
 'specialpages-group-media' => 'ڕاپۆرتەکان و بارکردنەکانی میدیا',
 'specialpages-group-users' => 'بەکارھێنەران و مافەکان',
@@ -3299,7 +3315,7 @@ $5
 # API errors
 'api-error-filename-tooshort' => 'ناوی پەڕگەکە زۆر کورتە.',
 'api-error-filetype-banned' => 'ئەم جۆرە پەڕگەیە قەدەغەیە.',
-'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|جۆرە پەڕگەی ڕێگە پێ‌نەدراوە‌|جۆرە پەڕگە ڕێگە پێ‌نەدراوە‌کانن}}. $2، ئەو جۆرە {{PLURAL:$3|پەڕگەیە کە ڕێگەی|پەڕگانەیە کە ڕێگەیان}} پێ‌دراوە.',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|جۆرە پەڕگەیەکی ڕێگەپێدراو نییە|جۆرە پەڕگە ڕێگەپێدراوەکان نین}}. {{PLURAL:$3|جۆرە پەڕگەی ڕێگەپێدراو ئەمەیە|جۆرە پەڕگەکانی ڕێگەپێدراو ئەمانەن}}:  $2.',
 'api-error-unclassified' => 'ھەڵەیەکی نەزانراو ڕوویداوە.',
 'api-error-unknown-code' => 'ھەڵەی نەزانراو: «$1».',
 'api-error-unknownerror' => 'ھەڵەی نەزانراو: «$1».',
index 2276e87..369180d 100644 (file)
@@ -735,8 +735,11 @@ Dotaz: $2',
 'protectedpagetext' => 'Tato stránka byla zamčena, takže ji nelze editovat.',
 'viewsourcetext' => 'Můžete si prohlédnout a zkopírovat zdrojový kód této stránky:',
 'viewyourtext' => "Můžete si prohlédnout a zkopírovat zdrojový kód '''vašich změn''' této stránky:",
-'protectedinterface' => 'Tato stránka obsahuje text softwarového rozhraní a smějí ji editovat jen správci.',
-'editinginterface' => "'''Upozornění:''' Editujete stránku, která definuje texty rozhraní. Změny této stránky ovlivní vzhled uživatelského rozhraní všem uživatelům. Při úpravách českého překladu zvažte použití [//translatewiki.net/wiki/Main_Page?setlang=cs translatewiki.net], projektu pro lokalizaci MediaWiki.",
+'protectedinterface' => 'Tato stránka obsahuje text softwarového rozhraní a je zamčena kvůli prevenci zneužití.
+Pro přidávání a změny překladů pro všechny wiki použijte [//translatewiki.net/ translatewiki.net], projekt pro lokalizaci MediaWiki.',
+'editinginterface' => "'''Upozornění:''' Editujete stránku, která definuje texty rozhraní.
+Změny této stránky ovlivní vzhled uživatelského rozhraní všem uživatelům této wiki.
+Pro přidávání a změny překladů pro všechny wiki použijte [//translatewiki.net/ translatewiki.net], projekt pro lokalizaci MediaWiki.",
 'sqlhidden' => '(SQL dotaz skryt)',
 'cascadeprotected' => 'Tato stránka je zamčena, neboť je vložena do {{PLURAL:$1|následující stránky zamčené|následujících stránek zamčených|následujících stránek zamčených}} kaskádovým zámkem:
 $2',
@@ -1011,7 +1014,7 @@ Pokud jste zde omylem, stiskněte ve svém prohlížeči tlačítko ''Zpět''.",
 'noarticletext' => 'Tato stránka zatím neobsahuje žádný text.
 Můžete [[Special:Search/{{PAGENAME}}|zkusit tento název vyhledat]] na jiných stránkách, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} prohlédnout si příslušné protokolovací záznamy] nebo [{{fullurl:{{FULLPAGENAME}}|action=edit}} tuto stránku založit]</span>.',
 'noarticletext-nopermission' => 'Tato stránka zatím neobsahuje žádný text.
-Můžete [[Special:Search/{{PAGENAME}}|zkusit tento název vyhledat]] na jiných stránkách nebo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} si prohlédnout příslušné protokolovací záznamy]</span>.',
+Můžete [[Special:Search/{{PAGENAME}}|zkusit tento název vyhledat]] na jiných stránkách nebo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} si prohlédnout příslušné protokolovací záznamy]</span>, ale na založení této stránky nemáte oprávnění.',
 'missing-revision' => 'Revize #$1 stránky s názvem „{{PAGENAME}}“ neexistuje.
 
 Toto je obvykle způsobeno tím, že jste následovali zastaralý odkaz historickou verzi stránky, jež byla smazána.
@@ -1272,7 +1275,8 @@ Prohlédněte si protokolovací záznamy.',
 'revdelete-only-restricted' => 'Chyba skrývání položky z $2 $1: Nemůžete položky pouze skrýt před správci, aniž byste současně vybrali i některou z dalších možností utajení.',
 'revdelete-reason-dropdown' => '*Obvyklé důvody smazání
 ** Porušení autorských práv
-** Nevhodné osobní údaje
+** Nevhodné komentáře nebo osobní údaje
+** Nevhodné uživatelské jméno
 ** Potenciálně pomlouvačné údaje',
 'revdelete-otherreason' => 'Jiný/další důvod:',
 'revdelete-reasonotherlist' => 'Jiný důvod',
@@ -1468,7 +1472,7 @@ Můžete použít tuto náhodně vygenerovanou hodnotu: $1',
 'timezoneregion-indian' => 'Indický oceán',
 'timezoneregion-pacific' => 'Tichý oceán',
 'allowemail' => 'Povolit e-mail od ostatních uživatelů',
-'prefs-searchoptions' => 'Možnosti vyhledávání',
+'prefs-searchoptions' => 'Vyhledávání',
 'prefs-namespaces' => 'Jmenné prostory',
 'defaultns' => 'Nebo hledat v těchto jmenných prostorech:',
 'default' => 'implicitní',
@@ -1885,7 +1889,7 @@ Kontaktuje prosím [[Special:ListUsers/sysop|správce]].',
 'backend-fail-internal' => 'V koncovém úložném systému „$1“ došlo k neznámé chybě.',
 'backend-fail-contenttype' => 'Nelze určit typ obsahu souboru k uložení do „$1“.',
 'backend-fail-batchsize' => 'Koncový úložný systém přijal dávku s $1 {{PLURAL:souborovou operací|souborovými operacemi}}; maximum je {{PLURAL:$2|$2}}.',
-'backend-fail-usable' => 'Nepodařilo se zapsat do souboru $1 kvůli nedostatečným oprávněním nebo chybějícím adresářům/kontejnerům.',
+'backend-fail-usable' => 'Nepodařilo se zapsat do souboru „$1“ kvůli nedostatečným oprávněním nebo chybějícím adresářům/kontejnerům.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Nelze se připojit k žurnálové databázi pro koncový úložný systém „$1“.',
@@ -3132,7 +3136,7 @@ Uložte jej na svůj disk a nahrajte ho sem.',
 'pageinfo-authors' => 'Celkový počet různých autorů',
 'pageinfo-recent-edits' => 'Počet nedávných ($1) editací',
 'pageinfo-recent-authors' => 'Nedávný počet různých autorů',
-'pageinfo-restriction' => 'Zámek stránky (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Zámek stránky ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Kouzelné slovo|Kouzelná slova}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Skrytá|Skryté}} kategorie ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Použitá šablona|Použité šablony}} ($1)',
@@ -3189,7 +3193,7 @@ Otevřením souboru můžete ohrozit svůj počítač.",
 'file-info-size' => '$1 × $2 pixelů, velikost souboru: $3, MIME typ: $4',
 'file-info-size-pages' => '$1 × $2 pixelů, velikost souboru: $3, MIME typ: $4, $5 {{PLURAL:$5|stránka|stránky|stránek}}',
 'file-nohires' => 'Větší rozlišení není k dispozici.',
-'svg-long-desc' => 'Soubor SVG, nominální rozměr: $1 × $2 pixelů, velikost souboru: $3',
+'svg-long-desc' => 'soubor SVG, nominální rozměr: $1 × $2 pixelů, velikost souboru: $3',
 'svg-long-desc-animated' => 'Animovaný soubor SVG, nominální rozměr: $1 × $2 pixelů, velikost souboru: $3',
 'show-big-image' => 'Obrázek ve vyšším rozlišení',
 'show-big-image-preview' => 'Velikost tohoto náhledu: $1.',
@@ -4050,7 +4054,7 @@ Jinak můžete využít jednoduchý formulář níže. Váš komentář bude př
 'api-error-badtoken' => 'Vnitřní chyba: špatný token.',
 'api-error-copyuploaddisabled' => 'Načítání z URL je na tomto severu zakázáno.',
 'api-error-duplicate' => 'Na této wiki již {{PLURAL:$1|existuje [$2 jiný soubor]|existují [$2 jiné soubory]}} se shodným obsahem',
-'api-error-duplicate-archive' => '{{PLURAL:$1|Soubor|Soubory}} se stejným obsahem již zde dříve {{PLURAL:$1|byl|byly}}, ale {{PLURAL:$1|byl smazán|byly smazány}}.',
+'api-error-duplicate-archive' => '[$2 {{PLURAL:$1|Soubor|Soubory}}] se stejným obsahem již zde dříve {{PLURAL:$1|byl|byly}}, ale {{PLURAL:$1|byl smazán|byly smazány}}.',
 'api-error-duplicate-archive-popup-title' => 'Duplicitní {{PLURAL:$1|soubor, který byl|soubory, které byly}} smazány',
 'api-error-duplicate-popup-title' => 'Duplicitní {{PLURAL:$1|soubor|soubory}}',
 'api-error-empty-file' => 'Načtený soubor je prázdný.',
index 0766e38..8860d97 100644 (file)
@@ -1025,7 +1025,9 @@ Edrychwch ar y logiau er mwyn cael rhagor o wybodaeth.",
 'revdelete-only-restricted' => "Cafwyd gwall wrth guddio'r eitem dyddiedig $2, $1: ni allwch guddio eitemau o olwg gweinyddwyr heb ar yr un pryd ddewis un o'r opsiynau eraill i gyfyngu ar y gallu i weld.",
 'revdelete-reason-dropdown' => '*Rhesymau cyffredin dros ddileu
 ** Torri hawlfraint
-** Gwybodaeth bersonol anaddas',
+** Gwybodaeth bersonol anaddas neu sylw anaddas
+** Enw defnydiwr anaddas
+** Gwybodaeth a allai fod yn enllibus',
 'revdelete-otherreason' => 'Rheswm arall:',
 'revdelete-reasonotherlist' => 'Rheswm arall',
 'revdelete-edit-reasonlist' => 'Golygu rhestr y rhesymau dros ddileu',
@@ -2728,7 +2730,7 @@ Mae ffolder dros dro yn eisiau.',
 'import-error-special' => 'Ni fewnforiwyd y dudalen "$1" oherwydd ei bod yn perthyn i barth arbennig lle nad oes tudalennau i\'w cael.',
 'import-error-invalid' => 'Ni fewnforwyd y dudalen "$1" oherwydd bod yr enw arni yn annilys.',
 'import-options-wrong' => '{{PLURAL:$2|Dewis|Dewis|Dewisiadau}} annilys: <nowiki>$1</nowiki>',
-'import-rootpage-nosubpage' => 'Nid yw\'r parth "$1", sef parth y wraidd-dudalen, yn caniatau is-dudalennau.',
+'import-rootpage-nosubpage' => 'Nid yw\'r parth "$1", sef parth y brif dudalen y mewnforir iddi, yn caniatau is-dudalennau.',
 
 # Import log
 'importlogpage' => 'Lòg mewnforio',
index 522ef8b..71f0d65 100644 (file)
@@ -42,6 +42,7 @@
  * @author Slomox
  * @author Svip
  * @author Søren Løvborg
+ * @author Tjernobyl
  * @author Urhixidur
  */
 
@@ -436,7 +437,7 @@ $1',
 'portal' => 'Forside for skribenter',
 'portal-url' => 'Project:Forside',
 'privacy' => 'Behandling af personlige oplysninger',
-'privacypage' => 'Project:Behandling_af_personlige_oplysninger',
+'privacypage' => 'Project:Behandling af personlige oplysninger',
 
 'badaccess' => 'Manglende rettigheder',
 'badaccess-group0' => 'Du har ikke de nødvendige rettigheder til denne handling.',
@@ -531,15 +532,15 @@ Gør venligst en [[Special:ListUsers/sysop|administrator]] opmærksom på det, o
 'missingarticle-diff' => '(Forskel: $1, $2)',
 'readonly_lag' => 'Databasen er automatisk blevet låst mens slave database serverne synkronisere med master databasen',
 'internalerror' => 'Intern fejl',
-'internalerror_info' => 'Internal fejl: $1',
-'fileappenderrorread' => 'Kunne ikke læse "$1" under tilføjelsen.',
+'internalerror_info' => 'Intern fejl: $1',
+'fileappenderrorread' => 'Kunne ikke læse "$1" mens der blev tilføjet data.',
 'fileappenderror' => 'Kunne ikke tilføje "$1" til "$2".',
 'filecopyerror' => 'Kunne ikke kopiere filen "$1" til "$2".',
 'filerenameerror' => 'Kunne ikke omdøbe filen "$1" til "$2".',
 'filedeleteerror' => 'Kunne ikke slette filen "$1".',
-'directorycreateerror' => 'Kunne ikke oprette kataloget "$1".',
+'directorycreateerror' => 'Kunne ikke oprette mappen "$1".',
 'filenotfound' => 'Kunne ikke finde filen "$1".',
-'fileexistserror' => 'Kunne ikke oprette "$1": filen findes allerede',
+'fileexistserror' => 'Kunne ikke oprette "$1": filen findes allerede.',
 'unexpected' => 'Uventet værdi: "$1"="$2".',
 'formerror' => 'Fejl: Kunne ikke afsende formular',
 'badarticleerror' => 'Denne funktion kan ikke udføres på denne side.',
@@ -564,9 +565,10 @@ Forespørgsel: $2',
 'protectedpagetext' => 'Denne side er skrivebeskyttet.',
 'viewsourcetext' => 'Du kan se og kopiere kildekoden til siden:',
 'viewyourtext' => "Du kan se og kopiere kildekoden for '''dine redigeringer''' til denne side:",
-'protectedinterface' => 'Denne side indeholder tekst til softwarens sprog-interface og er skrivebeskyttet for at forhindre misbrug.',
-'editinginterface' => "'''Advarsel:''' Du redigerer en side som bruges i programmets grænseflade. Ændringer på denne side vil påvirke udseendet af grænsefladen for andre brugere.
-For oversættelser bedes du venligst overveje at bruge [//translatewiki.net/wiki/Main_Page?setlang=da translatewiki.net], projektet for oversættelse af MediaWiki.",
+'protectedinterface' => 'Denne side indeholder teksten i brugergrænsefladen til softwaren på denne wiki, og er beskyttet for at forhindre misbrug.
+Hvis du vil tilføje eller ændre oversættelser til alle wiki-websteder, brug venligst [//translatewiki.net/ translatewiki.net], MediaWiki lokalisering projektet.',
+'editinginterface' => "'''Advarsel:''' Du redigerer en side som bruges i programmets grænseflade. Ændringer på denne side vil påvirke udseendet af grænsefladen for andre brugere af denne wiki.
+For at tilføje eller ændre oversættelser på alle wikier bedes du benytte [//translatewiki.net/ translatewiki.net], projektet for oversættelse af MediaWiki.",
 'sqlhidden' => '(SQL forespørgsel skjult)',
 'cascadeprotected' => 'Denne side er skrivebeskyttet, da den er indeholdt i nedenstående {{PLURAL:$1|side|sider}}, som er skrivebeskyttet med tilvalg af "nedarvende sidebeskyttelse":
 $2',
@@ -599,9 +601,9 @@ Din konto er blevet oprettet. Glem ikke at personliggøre dine [[Special:Prefere
 'yourname' => 'Dit brugernavn:',
 'yourpassword' => 'Din adgangskode:',
 'yourpasswordagain' => 'Gentag adgangskode',
-'remembermypassword' => 'Husk mit brugernavn på denne computer (højst $1 {{PLURAL:$1|dag|dage}})',
+'remembermypassword' => 'Husk mit brugernavn i denne browser (højst $1 {{PLURAL:$1|dag|dage}})',
 'securelogin-stick-https' => 'Behold forbindelsen til HTTPS efter login',
-'yourdomainname' => 'Dit domænenavn',
+'yourdomainname' => 'Dit domænenavn:',
 'password-change-forbidden' => 'Du kan ikke ændre adgangskoder på denne wiki.',
 'externaldberror' => 'Der er opstået en fejl i en ekstern adgangsdatabase, eller du har ikke rettigheder til at opdatere denne.',
 'login' => 'Log på',
@@ -612,10 +614,10 @@ Din konto er blevet oprettet. Glem ikke at personliggøre dine [[Special:Prefere
 'logout' => 'Log af',
 'userlogout' => 'Log af',
 'notloggedin' => 'Ikke logget på',
-'nologin' => "Du har ingen brugerkonto? '''$1'''.",
-'nologinlink' => 'Opret ny brugerkonto',
-'createaccount' => 'Opret en ny konto',
-'gotaccount' => "Du har allerede en brugerkonto? '''$1'''.",
+'nologin' => 'Har du ingen konto? $1.',
+'nologinlink' => 'Opret en ny brugerkonto',
+'createaccount' => 'Opret en ny brugerkonto',
+'gotaccount' => 'Har du allerede en konto? $1.',
 'gotaccountlink' => 'Log på',
 'userlogin-resetlink' => 'Har du glemt dine login oplysninger?',
 'createaccountmail' => 'via e-mail',
@@ -624,14 +626,14 @@ Din konto er blevet oprettet. Glem ikke at personliggøre dine [[Special:Prefere
 'userexists' => 'Det brugernavn, du har valgt, er allerede i brug.
 Vælg venligst et andet brugernavn.',
 'loginerror' => 'Logon mislykket',
-'createaccounterror' => 'Kunne ikke oprette konto: $1',
+'createaccounterror' => 'Kunne ikke oprette brugerkonto: $1',
 'nocookiesnew' => 'Din brugerkonto er nu oprettet, men du er ikke logget på. {{SITENAME}} bruger cookies til at logge brugere på. Du har slået cookies fra. Vær venlig at slå cookies til, og derefter kan du logge på med dit nye brugernavn og kodeord.',
 'nocookieslogin' => '{{SITENAME}} bruger cookies til at logge brugere på. Du har slået cookies fra. Slå dem venligst til og prøv igen.',
 'nocookiesfornew' => 'Denne brugerkonto er ikke oprettet, da vi ikke kunne bekræfte dens kilde.
 Sørg for, at du har aktivereret cookies, genindlæs siden og prøv igen.',
 'noname' => 'Du har ikke angivet et gyldigt brugernavn.',
 'loginsuccesstitle' => 'Du er nu logget på',
-'loginsuccess' => 'Du er nu logget på {{SITENAME}} som "$1".',
+'loginsuccess' => "'''Du er nu logget på {{SITENAME}} som \"\$1\".'''",
 'nosuchuser' => 'Der er ingen bruger med navnet "$1".
 Der skelnes mellem store og bogstaver i brugernavne.
 Kontrollér stavemåden, eller [[Special:UserLogin/signup|opret en ny konto]].',
@@ -843,9 +845,10 @@ Hvis du er en anonym bruger og synes, at du har fået irrelevante kommentarer p
 Du kan [[Special:Search/{{PAGENAME}}|søge efter sidenavnet]] på andre sider,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søge i relaterede logger]
 eller [{{fullurl:{{FULLPAGENAME}}|action=edit}} oprette siden]</span>.',
-'noarticletext-nopermission' => 'Der er i øjeblikket ikke noget tekst på denne side.
-Du kan [[Special:Search/{{PAGENAME}}|søge efter denne sides titel]] på andre sider,
-eller <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} se de relaterede loglister]</span>.',
+'noarticletext-nopermission' => 'Der er i øjeblikket ikke nogen tekst på denne side.
+Du kan [[Special:Search/{{PAGENAME}}|søge efter sidenavnet]] på andre sider,
+eller <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søge i relaterede loglister]</span>,
+men du har ikke tilladelse til at oprette denne side.',
 'missing-revision' => 'Revision #$1 af siden med navnet "{{PAGENAME}}" eksisterer ikke.
 
 Dette skyldes normalt at et forældet historik-link er fulgt til en side der er slettet.
@@ -855,9 +858,9 @@ Detaljer kan findes i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}
 'blocked-notice-logextract' => 'Denne bruger er i øjeblikket blokeret.
 Loggen over den seneste blokering ses nedenfor:',
 'clearyourcache' => "'''Bemærk:''' Efter at have gemt er du måske nødt til at tømme din browsers cache for at kunne se ændringerne.
-* '''Firefox / Safari:''' Hold ''shifttasten'' nede og klik på ''reload'', eller tryk enten ''Ctrl-F5'' eller ''Ctrl-Shift-r'' (''⌘-R'' på en Mac).
+* '''Firefox / Safari:''' Hold ''Shift'' nede og klik på ''Reload'', eller tryk enten ''Ctrl-F5'' eller ''Ctrl-R'' (''⌘-R'' på en Mac).
 * '''Google Chrome:''' Tryk ''Ctrl-Shift-R'' (''⌘-Shift-R'' på en Mac).
-* '''Internet Explorer:''' Hold ''controltasten'' nede og klik på ''refresh'' eller tryk på ''Ctrl-F5''.
+* '''Internet Explorer:''' Hold ''Ctrl'' nede og klik på ''Refresh'' eller tryk på ''Ctrl-F5''.
 * '''Opera:''' Tøm cachen i ''Tools → Preferences''.",
 'usercssyoucanpreview' => "'''Tip:''' Brug \"{{int:showpreview}}\"-knappen for at teste dit nye CSS inden du gemmer.",
 'userjsyoucanpreview' => "'''Tip:''' Brug \"{{int:showpreview}}\"-knappen for at teste dit nye JavaScript inden du gemmer.",
@@ -1097,9 +1100,11 @@ Du har ikke adgang til det.',
 'revdelete-concurrent-change' => 'Fejl under modificering af objekt dateret $1 klokken $2: Dens status ser ud til at være blevet ændret af en, imens du prøvede at modificere den.
 Se venligst loglisterne.',
 'revdelete-only-restricted' => 'Fejl under skjulning af objekt dateret $2, $1: Du kan ikke skjule objekter for administratorerne uden at vælge en alternativ indstilling.',
-'revdelete-reason-dropdown' => '* Almindelige sletningsårsager
-** Overtrædelse af ophavsret
-** Upassende personlige oplysninger',
+'revdelete-reason-dropdown' => '* Almindelige begrundelser for sletning
+** Overtrædelse af ophavsretten
+** Upassende kommentar eller personlige oplysninger
+** Upassende brugernavn
+** Oplysninger, der muligvis er injuriende',
 'revdelete-otherreason' => 'Anden/yderligere årsag:',
 'revdelete-reasonotherlist' => 'Anden årsag',
 'revdelete-edit-reasonlist' => 'Rediger sletningsårsager',
@@ -1296,7 +1301,7 @@ Her er en tilfældig genereret værdi som du kan bruge: $1',
 'timezoneregion-indian' => 'Indiske Ocean',
 'timezoneregion-pacific' => 'Stillehavet',
 'allowemail' => 'Tillad e-mails fra andre brugere',
-'prefs-searchoptions' => 'Søgeindstillinger',
+'prefs-searchoptions' => 'Søg',
 'prefs-namespaces' => 'Navnerum',
 'defaultns' => 'Ellers søg i disse navnerum:',
 'default' => 'standard',
@@ -1703,7 +1708,7 @@ Informer venligst en [[Special:ListUsers/sysop|systemadministrator]].',
 'backend-fail-internal' => 'En ukendt fejl opstod i filbackend "$1".',
 'backend-fail-contenttype' => 'Kunne ikke bestemme typen af indhold i filen, der skal gemmes på "$1".',
 'backend-fail-batchsize' => 'Lagringsbackend gav en batch på $1 fil{{PLURAL:$1|operation|operationer}}; grænsen er $2 {{PLURAL:$2|operation|operationer}}.',
-'backend-fail-usable' => 'Kunne ikke skrive til filen "$1" på grund af manglende rettigheder eller manglende mapper/containere.',
+'backend-fail-usable' => 'Kunne ikke læse eller skrive til filen "$1" på grund af manglende rettigheder eller manglende mapper/containere.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Kunne ikke tilslutte til journal databasen for lager backenden "$1".',
@@ -2740,6 +2745,7 @@ Alle Transwiki import-aktioner protokolleres i [[Special:Log/import|import-logge
 'import-interwiki-templates' => 'Inkluder alle skabeloner',
 'import-interwiki-submit' => 'Importer',
 'import-interwiki-namespace' => 'Importer til navnerum:',
+'import-interwiki-rootpage' => 'Destinationens stamside (valgfri):',
 'import-upload-filename' => 'Filnavn:',
 'import-comment' => 'Kommentar:',
 'importtext' => "Eksportér filen fra kilde-wiki'en ved hjælp af [[Special:Export|eksporterings værktøjet]], gem den på din harddisk og upload den her.",
@@ -2904,6 +2910,7 @@ Dette skyldes sandsynligvis en henvisning til et sortlistet eksternt websted.',
 'pageinfo-header-edits' => 'Redigeringshistorik',
 'pageinfo-header-restrictions' => 'Sidebeskyttelse',
 'pageinfo-header-properties' => 'Sideegenskaber',
+'pageinfo-display-title' => 'Vist sidetitel',
 'pageinfo-default-sort' => 'Standardsorteringsnøgle',
 'pageinfo-length' => 'Sidelængde (i bytes)',
 'pageinfo-article-id' => 'Side-ID',
@@ -2915,11 +2922,15 @@ Dette skyldes sandsynligvis en henvisning til et sortlistet eksternt websted.',
 'pageinfo-redirects-name' => 'Omdirigeringer til denne side',
 'pageinfo-subpages-name' => 'Undersider til denne side',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|omdirigering|omdirigeringer}}; $3 {{PLURAL:$3|der ikke er en omdirigering|der ikke er omdirigeringer}})',
+'pageinfo-firstuser' => 'Brugeren, der oprettede siden',
 'pageinfo-firsttime' => 'Dato for oprettelsen af siden',
+'pageinfo-lastuser' => 'Brugeren, der senest har redigeret siden',
 'pageinfo-lasttime' => 'Dato for seneste redigering',
 'pageinfo-edits' => 'Samlet antal redigeringer',
 'pageinfo-authors' => 'Det samlede antal forskellige forfattere',
-'pageinfo-restriction' => 'Sidebeskyttelse (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-recent-edits' => 'Antallet af nylige redigeringer (i løbet af de seneste $1)',
+'pageinfo-recent-authors' => 'Antallet af bidragydere, der har redigeret siden for nyligt',
+'pageinfo-restriction' => 'Sidebeskyttelse ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magisk|Magiske}} ord ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Skjult kategori|Skjulte kategorier}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Transkluderet skabelon|Transkluderede skabeloner}} ($1)',
index 3a00011..e987ae0 100644 (file)
@@ -780,10 +780,11 @@ Bitte versuche es in ein paar Minuten erneut.',
 'protectedpagetext' => 'Diese Seite wurde geschützt, um Bearbeitungen zu verhindern.',
 'viewsourcetext' => 'Du kannst den Quelltext dieser Seite betrachten und kopieren:',
 'viewyourtext' => "Du kannst den Quelltext '''deiner Bearbeitung''' dieser Seite betrachten und kopieren:",
-'protectedinterface' => 'Diese Seite enthält Text für die Benutzeroberfläche der Software und ist geschützt, um Missbrauch vorzubeugen.',
+'protectedinterface' => 'Diese Seite enthält Text für die Benutzeroberfläche der Software auf diesem Wiki und ist geschützt, um Missbrauch vorzubeugen.
+Nutze bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.',
 'editinginterface' => "'''Warnung:''' Diese Seite enthält von der MediaWiki-Software genutzten Text.
-Änderungen auf dieser Seite wirken sich auf die Benutzeroberfläche aus.
-Ziehe bitte im Fall von Übersetzungen in Betracht, diese bei [//translatewiki.net/wiki/Main_Page?setlang=de translatewiki.net], der Lokalisierungsplattform für MediaWiki, durchzuführen.",
+Änderungen auf dieser Seite wirken sich auf die Benutzeroberfläche dieses Wikis aus.
+Nutze bitte [//translatewiki.net/ translatewiki.net], das Lokalisierungsprojekt von MediaWiki, um Übersetzungen für alle Wikis hinzuzufügen oder zu ändern.",
 'sqlhidden' => "''Die SQL-Datenbankabfrage ist verborgen.''",
 'cascadeprotected' => 'Diese Seite ist zur Bearbeitung gesperrt. Sie ist in die {{PLURAL:$1|folgende Seite|folgenden Seiten}} eingebunden, die mittels der Kaskadensperroption geschützt {{PLURAL:$1|ist|sind}}:
 $2',
@@ -931,7 +932,7 @@ Möglicherweise hast du dein Passwort bereits erfolgreich geändert oder ein neu
 'passwordreset-text' => 'Bitte dieses Formular ausfüllen, um per E-Mail eine Erinnerung zu den Anmeldeinformationen deines Benutzerkontos zu erhalten.',
 'passwordreset-legend' => 'Passwort zurücksetzen',
 'passwordreset-disabled' => 'Das Zurücksetzen von Passwörtern wurde in diesem Wiki deaktiviert.',
-'passwordreset-pretext' => '{{PLURAL:$1||Gib eines der folgenden Daten ein}}',
+'passwordreset-pretext' => '{{PLURAL:$1||Gib eines der folgenden Daten ein.}}',
 'passwordreset-username' => 'Benutzername:',
 'passwordreset-domain' => 'Domain:',
 'passwordreset-capture' => 'Die E-Mail-Nachricht ansehen?',
@@ -1055,8 +1056,7 @@ Du kannst sie <span class="plainlinks">[{{fullurl:{{FULLPAGENAME}}|action=edit}}
 ihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]]
 oder die zugehörigen <span class="plainlinks">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten]</span>.',
 'noarticletext-nopermission' => 'Diese Seite enthält momentan noch keinen Text.
-Du kannst ihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]]
-oder die zugehörigen <span class="plainlinks">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten].</span>',
+Du kannst ihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]] oder die zugehörigen <span class="plainlinks">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten].</span> Du bist allerdings nicht berechtigt diese Seite zu erstellen.',
 'missing-revision' => 'Die Version $1 der Seite namens „{{PAGENAME}}“ ist nicht vorhanden.
 
 Dieser Fehler wird normalerweise von einem veralteten Link zur Versionsgeschichte einer Seite verursacht, die zwischenzeitlich gelöscht wurde.
@@ -1116,12 +1116,12 @@ Bitte füge deine Änderungen in das obere Textfeld ein.
 'yourdiff' => 'Unterschiede',
 'copyrightwarning' => "'''Bitte kopiere keine Webseiten, die nicht deine eigenen sind, benutze keine urheberrechtlich geschützten Werke ohne Erlaubnis des Urhebers!'''<br />
 Du gibst uns hiermit deine Zusage, dass du den Text '''selbst verfasst''' hast, dass der Text Allgemeingut '''(public domain)''' ist, oder dass der '''Urheber''' seine '''Zustimmung''' gegeben hat. Falls dieser Text bereits woanders veröffentlicht wurde, weise bitte auf der Diskussionsseite darauf hin.
-<i>Bitte beachte, dass alle {{SITENAME}}-Beiträge automatisch unter der „$2“ stehen (siehe $1 für Details). Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann drücke nicht auf „Seite speichern“.</i>",
+<i>Bitte beachte, dass alle {{SITENAME}}-Beiträge automatisch unter der „$2“ stehen (siehe $1 für Einzelheiten). Falls du nicht möchtest, dass deine Arbeit hier von anderen verändert und verbreitet wird, dann klicke nicht auf „Seite speichern“.</i>",
 'copyrightwarning2' => "Bitte beachte, dass alle Beiträge zu {{SITENAME}} von anderen Mitwirkenden bearbeitet, geändert oder gelöscht werden können.
 Reiche hier keine Texte ein, falls du nicht willst, dass diese ohne Einschränkung geändert werden können.
 
 Du bestätigst hiermit auch, dass du diese Texte selbst geschrieben hast oder diese von einer gemeinfreien Quelle kopiert hast
-(siehe $1 für weitere Details). '''ÜBERTRAGE OHNE GENEHMIGUNG KEINE URHEBERRECHTLICH GESCHÜTZTEN INHALTE!'''",
+(siehe $1 für weitere Einzelheiten). '''ÜBERTRAGE OHNE GENEHMIGUNG KEINE URHEBERRECHTLICH GESCHÜTZTEN INHALTE!'''",
 'longpageerror' => "'''Fehler: Der Text, den du zu speichern versuchst, ist {{PLURAL:$1|ein Kilobyte|$1 Kilobyte}} groß. Dies ist größer als das erlaubte Maximum von {{PLURAL:$2|ein Kilobyte|$2 Kilobyte}}.'''
 Er kann nicht gespeichert werden.",
 'readonlywarning' => "'''Achtung: Die Datenbank wurde für Wartungsarbeiten gesperrt, so dass deine Änderungen derzeit nicht gespeichert werden können.
@@ -1317,7 +1317,9 @@ Bitte prüfe die Logbücher.',
 'revdelete-only-restricted' => 'Fehler beim Verstecken des Eintrags vom $1, $2 Uhr: Du kannst keinen Eintrag vor Administratoren verstecken, ohne eine der anderen Ansichtsoptionen gewählt zu haben.',
 'revdelete-reason-dropdown' => '*Allgemeine Löschgründe
 ** Urheberrechtsverletzung
-** Unangebrachte persönliche Informationen',
+** Unangebrachte Kommentare oder persönliche Informationen
+** Unangebrachter Benutzername
+** Potentiell beleidigende Informationen',
 'revdelete-otherreason' => 'Anderer/ergänzender Grund:',
 'revdelete-reasonotherlist' => 'Anderer Grund',
 'revdelete-edit-reasonlist' => 'Löschgründe bearbeiten',
@@ -1511,7 +1513,7 @@ Hier ein zufällig generierter Wert, den du verwenden kannst: $1',
 'timezoneregion-indian' => 'Indischer Ozean',
 'timezoneregion-pacific' => 'Pazifischer Ozean',
 'allowemail' => 'E-Mail-Empfang von anderen Benutzern ermöglichen',
-'prefs-searchoptions' => 'Suchoptionen',
+'prefs-searchoptions' => 'Suche',
 'prefs-namespaces' => 'Namensräume',
 'defaultns' => 'Anderenfalls in diesen Namensräumen suchen:',
 'default' => 'Voreinstellung',
@@ -1937,7 +1939,7 @@ Wenn das Problem weiter besteht, informiere einen [[Special:ListUsers/sysop|Syst
 'backend-fail-internal' => 'Im Speicher-Backend „$1“ ist ein unbekannter Fehler aufgetreten.',
 'backend-fail-contenttype' => 'Der Inhaltstyp, der im Pfad „$1“ zu speichernden Datei, konnte nicht bestimmt werden.',
 'backend-fail-batchsize' => 'Eine Stapelverarbeitungsdatei, die {{PLURAL:$1|eine Operation|$1 Operationen}} enthält, wurde an das Speicher-Backend gesandt. Die Begrenzung liegt allerdings bei {{PLURAL:$2|einer Operation|$2 Operationen}}.',
-'backend-fail-usable' => 'Die Datei $1 konnte, entweder aufgrund eines nicht vorhandenen Verzeichnisses oder aufgrund unzureichender Berechtigungen, nicht gespeichert werden.',
+'backend-fail-usable' => 'Die Datei „$1“ konnte, entweder aufgrund eines nicht vorhandenen Verzeichnisses oder aufgrund unzureichender Berechtigungen, weder abgerufen noch gespeichert werden.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Es konnte keine Verbindung zur Journaldatenbank des Speicher-Backends „$1“ hergestellt werden.',
@@ -2975,7 +2977,7 @@ Alle Transwiki-Import-Aktionen werden im [[Special:Log/import|Import-Logbuch]] p
 'import-interwiki-source' => 'Quell-Wiki/-Seite:',
 'import-interwiki-history' => 'Alle Versionen dieser Seite importieren',
 'import-interwiki-templates' => 'Alle Vorlagen einschließen',
-'import-interwiki-submit' => 'Import',
+'import-interwiki-submit' => 'Importieren',
 'import-interwiki-namespace' => 'Zielnamensraum:',
 'import-interwiki-rootpage' => 'Zielstammseite (optional):',
 'import-upload-filename' => 'Dateiname:',
@@ -3189,7 +3191,7 @@ Das liegt wahrscheinlich an einem Link auf eine externe Seite.',
 'pageinfo-authors' => 'Gesamtzahl unterschiedlicher Autoren',
 'pageinfo-recent-edits' => 'Anzahl der kürzlich erfolgten Bearbeitungen (innerhalb von $1)',
 'pageinfo-recent-authors' => 'Anzahl der unterschiedlichen Autoren',
-'pageinfo-restriction' => 'Seitenschutz (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Seitenschutz ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magisches Wort|Magische Wörter}} ($1)',
 'pageinfo-hidden-categories' => 'Versteckte {{PLURAL:$1|Kategorie|Kategorien}} ($1)',
 'pageinfo-templates' => 'Eingebundene {{PLURAL:$1|Vorlage|Vorlagen}} ($1)',
index fd6f09e..df1f9af 100644 (file)
@@ -341,7 +341,7 @@ $messages = array(
 'tog-uselivepreview' => 'Verqayto cınde bıxebetne (JavaScript lazımo) (hewna cerrebnayış dero)',
 'tog-forceeditsummary' => 'Mı ke xulasa kerde cı vira, hay be mı ser de',
 'tog-watchlisthideown' => 'Vurnayışanê mı lista mına seyrkerdışi de bınımne',
-'tog-watchlisthidebots' => 'Vurnayışanê boti lista mına seyrkerdışi de bınımne',
+'tog-watchlisthidebots' => 'Vurnayışanê bota liste da seyrkerdışi de bınımne',
 'tog-watchlisthideminor' => 'Vurnayışanê qıckekan lista mına seyrkerdışi de bınımne',
 'tog-watchlisthideliu' => 'Lista seyrkerdışi ra vurnayışanê karberanê cıkewteyan bınımne',
 'tog-watchlisthideanons' => 'Lista seyrkerdışi ra vurnayışanê karberanê anoniman bınımne',
@@ -384,7 +384,7 @@ $messages = array(
 'april' => 'Nisane',
 'may_long' => 'Gulane',
 'june' => 'Heziran',
-'july' => 'Temuz',
+'july' => 'Temuze',
 'august' => 'Tebaxe',
 'september' => 'Keşkelun',
 'october' => 'Tışrino Verên',
@@ -396,7 +396,7 @@ $messages = array(
 'april-gen' => 'Nisane',
 'may-gen' => 'Gulane',
 'june-gen' => 'Hezirani',
-'july-gen' => 'Temuzi',
+'july-gen' => 'Temuze',
 'august-gen' => 'Tebaxe',
 'september-gen' => 'Keşkeluni',
 'october-gen' => 'Tışrinê Verêni',
@@ -439,11 +439,11 @@ $messages = array(
 
 'about' => 'Heqa',
 'article' => 'Wesiqe',
-'newwindow' => '(Teqa da newi de abêno)',
-'cancel' => 'Bıterkne',
+'newwindow' => '(zerreyê teqeyê newey de beno a)',
+'cancel' => 'Bıtexelne',
 'moredotdotdot' => 'Vêşêri...',
 'mypage' => 'Pela mı',
-'mytalk' => 'Werênayışê mı',
+'mytalk' => 'Verênayışê mı',
 'anontalk' => 'Pela werênayışê nê IPy',
 'navigation' => 'Pusula',
 'and' => '&#32;u',
@@ -462,15 +462,15 @@ $messages = array(
 # Vector skin
 'vector-action-addsection' => 'Mesel Vırazê',
 'vector-action-delete' => 'Besterne',
-'vector-action-move' => 'Ahûln',
+'vector-action-move' => 'Berê',
 'vector-action-protect' => 'Bıpawe',
 'vector-action-undelete' => 'Esterıtışi peyser bıgê',
 'vector-action-unprotect' => 'Starkerdışi bıvurne',
 'vector-simplesearch-preference' => 'Tewsiyanê cıgeyrayışê raverberdan ake (Tenya vector skin de)',
 'vector-view-create' => 'Vıraze',
 'vector-view-edit' => 'Bıvurne',
-'vector-view-history' => 'Tarixi bımocne',
-'vector-view-view' => 'Bıwane',
+'vector-view-history' => 'Vurnayışê verêni',
+'vector-view-view' => 'Bıwanê',
 'vector-view-viewsource' => 'Çımey bıvêne',
 'actions' => 'Kerdeni',
 'namespaces' => 'Cayê namey',
@@ -523,7 +523,7 @@ $messages = array(
 'categorypage' => 'Pela kategoriye bıvêne',
 'viewtalkpage' => 'Werênayışi bıvêne',
 'otherlanguages' => 'Zıwananê binan de',
-'redirectedfrom' => '($1 ra neqıl bi)',
+'redirectedfrom' => '(Pele da $1 ra heteneyê)',
 'redirectpagesub' => 'Pela berdışi',
 'lastmodifiedat' => 'Ena pele tewr peyên roca $2, $1 de biya rocaniye.',
 'viewcount' => 'Ena pele {{PLURAL:$1|rae|$1 rey}} vêniya.',
@@ -549,8 +549,8 @@ $1',
 'currentevents-url' => 'Project:Veng u vac',
 'disclaimers' => 'Redê mesuliyeti',
 'disclaimerpage' => 'Project:Reddê mesuliyetê bıngey',
-'edithelp' => 'Seni vurneyêno?',
-'edithelppage' => 'Help:Pela seni vurniyêna',
+'edithelp' => 'Peştdariya vurnayışi',
+'edithelppage' => 'Help:Vurnayış',
 'helppage' => 'Help:Estêni',
 'mainpage' => 'Pela Seri',
 'mainpage-description' => 'Pela Seri',
@@ -692,10 +692,10 @@ Perse: $2',
 'protectedpagetext' => 'No pel qey nêvuriyayiş hao (nao) pawyeno.',
 'viewsourcetext' => 'To şikinay çımey na pele bıvêne u kopya kerê:',
 'viewyourtext' => "Na pela '''Vurnayışê ke kerdê''' re şıma şenê kopya kerê:",
-'protectedinterface' => 'No pel qey software nuştey hezır keno u ın semed ra şuxulyayişê no pel qedexe biyo.',
-'editinginterface' => "'''Teme:''' Şıma hao jû pela ke seba nuşteyê meqalanê cayanê bırnayeyan dana, vurnenê.
+'protectedinterface' => 'Na pela qandê nusnerin destegê verri dana u kes xırabin nêqero deye kerda kılit.',
+'editinginterface' => "'''İqaz:''' Şıma hao jû pela ke seba nuşteyê meqalanê cayanê bırnayeyan dana, vurnenê.
 Vurnayışê na pele karberanê binan rê serpela karberi kena ke bımocno.
-Seba çarnayışi, yardımê [//translatewiki.net/wiki/Main_Page?setlang=kiu translatewiki.net]i ra procêdoşkerdışi rê diqet kerên.",
+Seba çarnayışi, yardımê [//translatewiki.net/wiki/Main_Page?setlang=diq translatewiki.net]i ra procêdoşkerdışi rê diqet kerên.",
 'sqlhidden' => '(SQL pers kerdışê nımıte)',
 'cascadeprotected' => 'No pel de vurnayiş qedexe biyo, çunke şıma tuşa "kademeyın" aqtif kerdo u no {{PLURAL:$1|pelo|pelo}} pawıteyo de xebıtyeno:
 $2',
@@ -877,15 +877,15 @@ Parola vêrdiye: $2',
 'changeemail-newemail' => 'E-posta adresiyo newe:',
 'changeemail-none' => '(Çıno)',
 'changeemail-submit' => 'E-postay xo bıvurne',
-'changeemail-cancel' => 'Bıterkne',
+'changeemail-cancel' => 'Bıtexelne',
 
 # Edit page toolbar
-'bold_sample' => 'Çapo qalınd',
-'bold_tip' => 'Herfo qalın',
+'bold_sample' => 'Metno qalın',
+'bold_tip' => 'Metno qalın',
 'italic_sample' => 'Herfo Çewt',
 'italic_tip' => 'Herfo çewt',
 'link_sample' => 'Namey gırê',
-'link_tip' => 'Gırê dahili',
+'link_tip' => 'Gıreyê miyani',
 'extlink_sample' => 'http://www.example.com titleya gire',
 'extlink_tip' => 'Çımeyo tewer (http:// prefix)',
 'headline_sample' => 'nuştey xeta seri',
@@ -902,13 +902,13 @@ Parola vêrdiye: $2',
 # Edit pages
 'summary' => 'Xulasa:',
 'subject' => 'Mewzu/serrêze:',
-'minoredit' => 'Vurnayışo werdı',
+'minoredit' => 'Eno yew vurnayışo qıckeko',
 'watchthis' => 'Ena pele seyr ke',
 'savearticle' => 'Pele qeyd ke',
 'preview' => 'Verqayt',
-'showpreview' => 'Verqayti bıvin',
+'showpreview' => 'Verqayti bımocne',
 'showlivepreview' => 'Verqayto cıwın',
-'showdiff' => 'Vurnayışa bıvin',
+'showdiff' => 'Vurnayışan bımocne',
 'anoneditwarning' => 'Teme!: Şıma bı hesabê xo nıkewtê cı. Hurêndiya namey şıma dı IP-adresa şıma qeyd bena u asena.',
 'anonpreviewwarning' => "''Ti hama nicikewte. Qeyd kerdiş zerre tarixê pele de adresê IP yê tu keyd keno.''",
 'missingsummary' => "'''DİQET:''' Şıma kılmnuşte nıkerd.
@@ -968,9 +968,9 @@ Eka tı ita semed yew heta ra amey, ser gocekê '''back'''i klik bıkin.",
 Tı şenay zerreyê pelanê binan de [[Special:Search/{{PAGENAME}}|seba sernamey ena pele cı geyre]],
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cıkewtışê aidi rê cı geyre],
 ya zi [{{fullurl:{{FULLPAGENAME}}|action=edit}} ena pele bıvurne]</span>.',
-'noarticletext-nopermission' => 'No pel nıka veng o.
-No sernuşte şıma [[Special:Search/{{PAGENAME}}|pelanê binan de eşkeni bıgeri]]
-ya zi <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} itara eşekeni bıgere].</span>',
+'noarticletext-nopermission' => 'Na pela dı eno metin enewke vengo
+Na sernuşteya şıma [[Special:Search/{{PAGENAME}}|pelanê binan de şeni bıgeyri]]
+ya zi <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} itara şeni bıgeyri cı].</span> feqet şıma nişeni biizın teba bıkeri.',
 'missing-revision' => 'Rewizyonê name dê pela da #$1 "{{PAGENAME}}" dı çıniyo.
 
 No normal de tarix dê pelanê besterneyan dı ena xırabin asena.
@@ -996,8 +996,8 @@ Cıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:',
 Dosyanê be namey .css u .js'i de herfa werdiye bıgurêne, mesela herında {{ns:user}}:Foo/Vector.css'i de {{ns:user}}:Foo/vector.css bınuse.",
 'updated' => '(Newenyaya)',
 'note' => "'''Not:'''",
-'previewnote' => "Teme! ena teyna verqeyda.'''
-Vurnayışê tu hama qeyd nıbiyo!",
+'previewnote' => "'''Xo vira mekerê ke ena yew verqayta.'''
+Vurnayışê şıma hona qeyd nêbiyo!",
 'continue-editing' => 'Vurnayışi rê dewam ke',
 'previewconflict' => 'No seyrkerdışê verqaydi serê qutiyê nuşte tezim kerdış de yo, eke şıma qayile vurnayişê maddeyi seyino bıvini, no mocneno şıma.',
 'session_fail_preview' => 'Ma ef kere. Vindibiyayişê tayê datay ra a kerdışê hesabê şıma de ma vurnayişê şıma qayd nêkerd. Newe ra tesel (cereb) bıkere. Eke no qayde zi nêbo, [[Special:UserLogout|hesabê xo bıqefelne]] u newera a kere.',
@@ -1108,7 +1108,7 @@ Taye şabloni zerre pel de nêmociyayeni.',
 Sebebo ke terefê $3 ra diyao ''$2''",
 
 # History pages
-'viewpagelogs' => 'Qe ena pele logan bevinin',
+'viewpagelogs' => 'Heq dê ena perer qeydan bıvinên',
 'nohistory' => 'Verê vurnayışanê na pele çıniyo.',
 'currentrev' => 'Halo nıkayên',
 'currentrev-asof' => 'Revizyonanê peniyan, tarixê $1',
@@ -1226,9 +1226,11 @@ resayişê şıma çino.',
 'revdelete-concurrent-change' => '$2 $1 no çi wexta ke vuriya xeta da: wina aseno ke wexta şıma vurnayiş kerdene o enate de yewna te vurnayiş kerdo.
 rocaneyan kontrol bıkere.',
 'revdelete-only-restricted' => 'Xetawa ke maddeyanê rocanê $2, $1ine nımnena: şıma nêşenê maddeyanê ke terefê idarekeran ra nêdiyaeyan, bê weçinıtışê tercihanê vêniyaoğanê binan ra zi yewi, çap kerê.',
-'revdelete-reason-dropdown' => '*sebebê hewna kerdışi umumi
-** ihlalê telifi
-** malumatê şexsiyo ke munasib niye',
+'revdelete-reason-dropdown' => '*Sebebê besternayış de umumi
+** İhlalê telifi
+** Malumatê şexsiyo ke munasib niye
+** Nameyo xırab
+** Malumatê iftira çekerdışi',
 'revdelete-otherreason' => 'ê bini/sebebê bini',
 'revdelete-reasonotherlist' => 'sebebê bini',
 'revdelete-edit-reasonlist' => 'sebebê hewna kerdışani bıvurn',
@@ -1311,7 +1313,7 @@ Detayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'searchprofile-project' => 'Pelê yardım u projey',
 'searchprofile-images' => 'Multimedya',
 'searchprofile-everything' => 'Hemi',
-'searchprofile-advanced' => 'Reverşiyoğî',
+'searchprofile-advanced' => 'Raverşiyaye',
 'searchprofile-articles-tooltip' => '$1 de bigêre',
 'searchprofile-project-tooltip' => '$1 de bigêre',
 'searchprofile-images-tooltip' => 'Dosya cı geyr',
@@ -1327,7 +1329,7 @@ Detayê besternayışi [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'search-interwiki-default' => '$1 neticeyan:',
 'search-interwiki-more' => '(hona)',
 'search-mwsuggest-enabled' => 'ebe teklifan',
-'search-mwsuggest-disabled' => 'teklifi çıniyê',
+'search-mwsuggest-disabled' => 'weşenayışi çıniyê',
 'search-relatedarticle' => 'Eqreba',
 'mwsuggest-disable' => 'Tewsiyay AJAXi bıgê',
 'searcheverything-enable' => 'cayê nameyê hemi de bigêre',
@@ -1424,7 +1426,7 @@ Etıya şıma rê yew kılito raştameo ke şıma şenê bıgurenê/bıxebetnê:
 'timezoneregion-indian' => 'Okyanuso Hind',
 'timezoneregion-pacific' => 'Okyanuso Pasifik',
 'allowemail' => 'Karberê bini wa bışê mı rê e-posta bırışê.',
-'prefs-searchoptions' => 'Tercihê cıgeyrayışi',
+'prefs-searchoptions' => 'Cı geyre',
 'prefs-namespaces' => 'Caê namey',
 'defaultns' => 'Eke heni, enê cayanê namey de cı geyre (sae ke):',
 'default' => 'hesıbyaye',
@@ -1557,7 +1559,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'right-delete' => 'Pele bestere',
 'right-bigdelete' => 'Pelanê be tarixanê dergan bestere',
 'right-deletelogentry' => 'besternayış u mebesternayışa re qeyde definayışê xısusi',
-'right-deleterevision' => 'Vurnayışê xısusiyê ke ê pelanê, inan bestere ya peyser bia',
+'right-deleterevision' => 'Vurnayışê xısusiyê ke ê pelanê, inan bestere ya zi peyser bia',
 'right-deletedhistory' => 'Qeydanê tarixanê esterıteyan de qayt ke, bê nuştey inan',
 'right-deletedtext' => 'Mabênê newede vurnayışanê esterıtiyan de qaytê nuştey esterıtey u vurnayışan ke',
 'right-browsearchive' => 'Bıgeyre pelanê eserıtiyan',
@@ -1577,7 +1579,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'right-editusercss' => 'Dosyanê CSSiê karberanê binan sero bıgureye',
 'right-edituserjs' => 'Dosyanê JSiê karberanê binan sero bıgureye',
 'right-rollback' => 'Lez/herbi vurnayışanê karberê peyêni tekrar bıke, oyo ke yew be yew pelê sero gureyao',
-'right-markbotedits' => 'Vurnayışanê tekraran zey vurnayışanê boti nışan bıde',
+'right-markbotedits' => 'Vurnayışanê peyd ameyan, vurnayışê boti deye nışan kerê',
 'right-noratelimit' => 'Sinoranê xızi (rate limit) ra tesir nêbi',
 'right-import' => 'Pelan wikiyanê binan ra bia',
 'right-importupload' => 'Pelî dosya bar kerdişî ra import bike',
@@ -1626,7 +1628,7 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'action-block' => 'enê karberi vurnayışi ra bıreyne',
 'action-protect' => 'seviyeyê pawitişî se ena pele bivurne',
 'action-rollback' => 'Lez/herbi vurnayışanê karberê peyêni tekrar bıke, oyo ke yew be yew pelê sero gureyao',
-'action-import' => 'ena pele yewna wîkî ra import bike',
+'action-import' => 'ena pele yewna wiki ra azere de',
 'action-importupload' => 'ena pele yew dosyayê bar kerdişî ra import bike',
 'action-patrol' => 'vurnayîşê karberanê binî nişan bike patrol biye',
 'action-autopatrol' => 'vurnayîşê xoye nişan bike ke belli biyo patrol biye',
@@ -1645,11 +1647,11 @@ Kaberê bini ke şıma de kewti irtıbat, adresa e-postey şıma eşkera nêbena
 'recentchanges-feed-description' => 'Ena feed dı vurnayişanê tewr peniyan teqip bık.',
 'recentchanges-label-newpage' => 'Enê vurnayışi pelaya newi vıraşt',
 'recentchanges-label-minor' => 'Eno vurnayışo do qickek o',
-'recentchanges-label-bot' => 'Eno vurnayış terefê yew boti ra vıraziyo',
+'recentchanges-label-bot' => 'Yew boti xo het ra no vurnayış vıraşto',
 'recentchanges-label-unpatrolled' => 'Eno edît patrol nibiyo',
 'rcnote' => "Bıni dı {{PLURAL:$1|is '''1''' vurnayış|peni '''$1''' vurnayışan estê}} {{PLURAL:$2|roc|'''$2''' roci}}, hetani $5, $4.",
 'rcnotefrom' => "Cêr de vurnayîşê esto ke '''$2''' ra raver  (heta '''$1''' mucnayiyo).",
-'rclistfrom' => '$1 ra vurnayışanê neweyan bımoc',
+'rclistfrom' => '$1 ra vurnayışanê neweyan bımocne',
 'rcshowhideminor' => 'Vurnayışanê werdiya $1',
 'rcshowhidebots' => 'Bota $1',
 'rcshowhideliu' => 'karberanê qeydına $1',
@@ -1852,7 +1854,7 @@ Eke problem dewam kerd [[Special:ListUsers/sysop|serkari]] de irtibat kewe.',
 'backend-fail-internal' => 'Depo kerdışê "$1" peyni de ju xırabin vıcyê.',
 'backend-fail-contenttype' => 'Qandê depo kerdışi zerrey babeta dosya da "$1" nêvineya.',
 'backend-fail-batchsize' => 'Depo kerdışê  dosya da $1 {{PLURAL:$1|operasyon de|operasyonê}} cı groto; sinorê  {{PLURAL:$2|operasyoni|operasyona}} $2.',
-'backend-fail-usable' => 'Dosyay $1 nênusneyê çıkı ratnayışê cı racnayeyo yana kewmiyo.',
+'backend-fail-usable' => 'Dosyay $1 nênusneyê çıkı ratnayışê cı racnayeyo yana karkerdışe cı kemiyo.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Depo kerdış de "$1" qande malumatê gurweynayışi cıya irtibat nêkewiya.',
@@ -1888,7 +1890,7 @@ Kontrolê emeleyey oyo veş nêbeno.',
 'invalid-chunk-offset' => 'Ofseto nêravyarde',
 
 # img_auth script messages
-'img-auth-accessdenied' => 'Cıkewtış red biyo',
+'img-auth-accessdenied' => 'Cıresnayış vındarnayo.',
 'img-auth-nopathinfo' => 'PATH_INFO kemiyo.
 Teqdimkerê şıma seba ravurnayışê nê melumati eyar nêkerdo.
 Beno ke be CGI-bıngeyın bo u img_auth rê destek nêbeno.
@@ -2093,7 +2095,7 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 'ninterwikis' => '$1 {{PLURAL:$1|interwiki|interwikiy}}',
 'nlinks' => '$1 {{PLURAL:$1|link|linkî}}',
 'nmembers' => '$1 {{PLURAL:$1|eza|ezayan}}',
-'nrevisions' => '$1 {{PLURAL:$1|revizyon|revizyonî}}',
+'nrevisions' => '$1 {{PLURAL:$1|vurnayış|vurnayışi}}',
 'nviews' => '$1 {{PLURAL:$1|vînayîş|vînayîşî}}',
 'nimagelinks' => '$1 {{PLURAL:$1|pelayan de|pelayan de}} gurweyêno',
 'ntransclusions' => '$1 {{PLURAL:$1|pelayan de|pelayan de}} gurweyêno',
@@ -2143,7 +2145,7 @@ gıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.
 'newpages' => 'Pelê newey',
 'newpages-username' => 'Namey Karberi:',
 'ancientpages' => 'Wesiqeyê ke vurnayışê ciyê peyeni tewr kehani',
-'move' => 'bere',
+'move' => 'Berê',
 'movethispage' => 'Ena pele bere',
 'unusedimagestext' => 'Enê dosyey estê, feqet zerrey yew pele de wedardey niyê.
 Xo vira mekerê ke, sıteyê webiê bini şenê direkt ebe URLi yew dosya ra gırê bê, u wına şenê verba gurênayışo feal de tiya hewna lista bê.',
@@ -2188,7 +2190,7 @@ tipa rocaneyi, nameyê karberi (herfa pil u qıci re hessas a), ya zi peli (reyn
 'allnotinnamespace' => 'Pelanê hemî ($1 cayênameyî de niyo)',
 'allpagesprev' => 'Verên',
 'allpagesnext' => 'ver şo',
-'allpagessubmit' => 'Biya',
+'allpagessubmit' => 'Şo',
 'allpagesprefix' => 'herfê ke şıma tiya de nuşti, pê ney herfan pelê ke destpêkenê liste ker:',
 'allpagesbadtitle' => 'pel o ke şıma kewenî cı, nameyê no peli de gıreyê zıwanan u wikiyi re elaqa esto, ê ra cıkewtış qebul niyo. ya zi sernameyan de karakterê qedexeyi tede esto.',
 'allpages-bad-ns' => '{{SITENAME}} keyepel de wina "$1" yew nameyê cayi çino.',
@@ -2211,7 +2213,7 @@ hem zi bıewnê [[Special:WantedCategories|kategori yê ke waziyeni]].',
 # Special:DeletedContributions
 'deletedcontributions' => 'İştiraqê karberan de besternayına',
 'deletedcontributions-title' => 'Îştirakê karberî wederna',
-'sp-deletedcontributions-contribs' => 'pêşteni',
+'sp-deletedcontributions-contribs' => 'dekerdeni',
 
 # Special:LinkSearch
 'linksearch' => 'Gıreyê teberi cı geyrê',
@@ -2231,9 +2233,9 @@ qaydeyê destek biyayeyi: <code>$1</code>',
 
 # Special:ActiveUsers
 'activeusers' => 'Listey karberan de aktivan',
-'activeusers-intro' => 'Ena yew listeye ke karberanê ke $1 {{PLURAL:$1|roc|rocan}} de îştiraq kerdo înan mocneno.',
-'activeusers-count' => 'ney {{PLURAL:$3|rocê peyin de|$3 rocê peyin de}} $1 {{PLURAL:$1|vuriyayiş|vuriyayiş}}',
-'activeusers-from' => 'karber ê ke pê ney destpêkeni ramocın:',
+'activeusers-intro' => 'Ena yew listeya karberê ke $1 {{PLURAL:$1|roc|rocan}} ra tepya iştiraq kerdo ênan mocneno.',
+'activeusers-count' => 'Karberi {{PLURAL:$3|roce peyni de|$3 roca peyni de}} $1 {{PLURAL:$1|vurnayış|vurnayışi}} kerdê',
+'activeusers-from' => 'Enê karberi ra tepya bımocne:',
 'activeusers-hidebots' => 'Botan bınımne',
 'activeusers-hidesysops' => 'İdarekerdoğan bınımne',
 'activeusers-noresult' => 'Karberî çini yo.',
@@ -2288,7 +2290,7 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed
 'emailfrom' => 'Rışten:',
 'emailto' => 'Geren:',
 'emailsubject' => 'Mersel:',
-'emailmessage' => 'Mesaj',
+'emailmessage' => 'E-posta:',
 'emailsend' => 'bıerşawê/bıruşnê',
 'emailccme' => 'kopyayekê mesaji mı re bıerşaw',
 'emailccsubject' => '$2 kopyaya mesaj a ke şıma erşawıto/a $1:',
@@ -2303,7 +2305,7 @@ qey heqê şexsi de [[{{MediaWiki:Listgrouprights-helppage}}|hema malumato ziyed
 
 # Watchlist
 'watchlist' => 'lista mına seyr-kerdışi',
-'mywatchlist' => 'Lista mına seyrkerdışi',
+'mywatchlist' => 'Listey taqiban',
 'watchlistfor2' => 'Qandê $1 ($2)',
 'nowatchlist' => 'listeya temaşa kerdıişê şıma de yew madde zi çina.',
 'watchlistanontext' => 'qey vurnayişê maddeya listeya temaşakerdişi $1.',
@@ -2377,7 +2379,7 @@ qey hemkari u pêşniyazi:
 'deletepage' => 'Pele bıestere',
 'confirm' => 'Testiq ke',
 'excontent' => "behso kêm: '$1'",
-'excontentauthor' => "behso kêm: '$1' no/na ('[[Special:Contributions/$2|$2]]' karber/e têna paşt dayo/a)",
+'excontentauthor' => "behso kêm: '$1' no/na ('[[Special:Contributions/$2|$2]]'  teyna iştıraq kerdo)",
 'exbeforeblank' => "behsê verê esteriyayişi: '$1'",
 'exblank' => 'zerreyê peli vengo',
 'delete-confirm' => '"$1" bıestere',
@@ -2455,8 +2457,8 @@ Qey malumato ziyede [[Special:ProtectedPages|Peleyê ke star biye]] bewni rê ê
 '''$1''' eyarê peli:",
 'protect-locked-dblock' => "semedê kılidê database ya aktifi şıma neeşkeni seviyeya pawıtışi buvurni.
 '''$1''' eyarê no peli:",
-'protect-locked-access' => "Hesabê tu nıeşken seviyeyê kılit-kerdışi bıvurn.
-Ser pela '''$1''', itiya dı enformasyon esta:",
+'protect-locked-access' => "Karber hesabê şıma nêşeno  staryaye sewiyey ena peler bıvurno.
+Hesı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.
 Tı eşkeno seviyeye kılit kerdışi bıvurno, feqat tı nıeşken "cascading protection"i bıvurno.',
 'protect-default' => 'Destur bıde karberan pêrune',
@@ -2489,7 +2491,7 @@ Tı eşkeno seviyeye kılit kerdışi bıvurno, feqat tı nıeşken "cascading p
 
 # Restrictions (nouns)
 'restriction-edit' => 'Bıvurne',
-'restriction-move' => 'Ahûln',
+'restriction-move' => 'Berê',
 'restriction-create' => 'Vıraze',
 'restriction-upload' => 'Barke',
 
@@ -2518,7 +2520,7 @@ Revizyoni ya hewn a biyê ya arşiw ra veciyayê ya zi cıresayişê şımayi ş
 'undelete-nodiff' => 'revizyonê verıni nidiya',
 'undeletebtn' => 'Timar bike',
 'undeletelink' => 'bıvêne/peyser bia',
-'undeleteviewlink' => 'ra mocın',
+'undeleteviewlink' => 'bıvin',
 'undeletereset' => 'Reset kerê',
 'undeleteinvert' => 'vicnayeyi qeldaye açarn',
 'undeletecomment' => 'Sebeb:',
@@ -2553,14 +2555,14 @@ $1',
 'namespace' => 'Cayê namey:',
 'invert' => 'Bê weçineni ê bina peyser biya',
 'tooltip-invert' => 'nameyo ke nışan biyo (u nameyo elekeyın zi nışanyyayo se) vurnayışan  zerrekan nımtışi re ena dore tesdiqi nışan kerê',
-'namespace_association' => 'Pineyê cadê naman',
+'namespace_association' => 'Cayê nameyanê elaqadaran',
 'tooltip-namespace_association' => 'Herunda canemiya elekeyın nışan kerdışi sero qıse kerdışi yana zerre dekerdışi rê ena dora tesdiqi nışan kerê',
 'blanknamespace' => '(Ser)',
 
 # Contributions
 'contributions' => 'İştiraqê karberi',
 'contributions-title' => '$1 de iştırakê karberi',
-'mycontris' => 'İştıraqê mı',
+'mycontris' => 'Dekerdeni',
 'contribsub2' => 'Qandê $1 ($2)',
 'nocontribs' => 'Ena kriteriya de vurnayîş çini yo.',
 'uctop' => '(ser)',
@@ -2696,13 +2698,13 @@ Sebebê kılit-biyayışê $1\'i: "$2"o',
 Adresê IP'ya ke otomatikmen kılit biyê lista de çıniya.
 Seba lista karberanê ke heta nıka kılit biyê [[Special:BlockList|lista kılitkerdışê IPy]] bıvinê.",
 'unblocklogentry' => '$1 ake',
-'block-log-flags-anononly' => 'teyna karberê anonîmî',
-'block-log-flags-nocreate' => 'akerdışê hesabi qapan bi',
-'block-log-flags-noautoblock' => 'otoblok wedariyo',
-'block-log-flags-noemail' => 'e-mail blok biyo',
-'block-log-flags-nousertalk' => 'ti nieşkena pela minaqeşe xo bivurne',
-'block-log-flags-angry-autoblock' => 'otoblokê weşî a biyo',
-'block-log-flags-hiddenname' => 'nameyê karberî nimniya',
+'block-log-flags-anononly' => 'karberê anomini tenya',
+'block-log-flags-nocreate' => 'akerdışê hesabi racneyayo',
+'block-log-flags-noautoblock' => 'Oto-wedariye terkneyayo',
+'block-log-flags-noemail' => 'e-posta biya bloqe',
+'block-log-flags-nousertalk' => 'Pela verênayişi ke xo nêşeno bıvurno',
+'block-log-flags-angry-autoblock' => 'oto-wedariye amayen aktivo',
+'block-log-flags-hiddenname' => 'nameyê karberi nımteyo',
 'range_block_disabled' => 'Desturê administorî ke viraştişê blokê rangeyî kefiliyo.',
 'ipb_expiry_invalid' => 'Wextê qediyayışi nêvêreno.',
 'ipb_expiry_temp' => 'Kılitbiyayışê karberê nımıtey gani ebedi bo.',
@@ -3090,7 +3092,7 @@ Tı eşkeno yew sebeb bınus.',
 'pageinfo-authors' => 'Amarina nuştekaran pêro',
 'pageinfo-recent-edits' => 'Amariya vurnayışan ($1 ra nata)',
 'pageinfo-recent-authors' => 'Amarina nuştekaran pêro',
-'pageinfo-restriction' => 'Xısusiyetê pela (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Xısusiyetê pela ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Çekuya|Çekuyê}} ($1) sihırini',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Kategoriye|Kategoriyan}} ($1) bınımne',
 'pageinfo-templates' => '{{PLURAL:$1|Şablon|Şabloni}} ($1) açarneyayê',
@@ -3147,7 +3149,7 @@ Gurênayışê nae de, beno ke sistemê şıma zerar bıvêno.",
 'file-info' => 'ebatê dosyayi: $1, MIME tip: $2',
 'file-info-size' => '$1 × $2 pixelan, ebatê dosya: $3, MIME type: $4',
 'file-info-size-pages' => '$1 × $2 pikse, dergeya dosyay: $3, MIME tipiya cı: $4, $5 {{PLURAL:$5|pela|pela}}',
-'file-nohires' => 'Rovıleşiyayışo berzêr çıniyo.',
+'file-nohires' => 'Deha berz agozney cı çıniyo',
 'svg-long-desc' => 'SVG dosya, nominalin $1 × $2 piksels, ebatê dosya: $3',
 'svg-long-desc-animated' => 'SVG dosya, nominalin $1 × $2 piksela, ebatê dosya: $3',
 'show-big-image' => 'Resolosyonê temami',
@@ -3540,7 +3542,7 @@ $8',
 'exif-lightsource-4' => 'Flaş',
 'exif-lightsource-9' => 'saye/hewayo weşî',
 'exif-lightsource-10' => 'hewra/hora',
-'exif-lightsource-11' => 'Virse',
+'exif-lightsource-11' => 'Sersiyın',
 'exif-lightsource-12' => 'Florasanê roşnê tici (D 5700 – 7100K)',
 'exif-lightsource-13' => 'Florasanê sipe ye roci (N 4600 – 5400K)',
 'exif-lightsource-14' => 'Florasanê sipe ye hewli (W 3900 – 4500K)',
@@ -3664,7 +3666,7 @@ $8',
 'exif-ycbcrpositioning-1' => 'Wertekerdış',
 'exif-ycbcrpositioning-2' => 'Wayırê-site',
 
-'exif-dc-contributor' => 'Pêşteni',
+'exif-dc-contributor' => 'Dekerdeni',
 'exif-dc-coverage' => 'Heruna yana wextin grotışa medya',
 'exif-dc-date' => 'Tarix(i)',
 'exif-dc-publisher' => 'Hesrekar',
@@ -3817,7 +3819,7 @@ Ma rica keno tesdiq bike ke ti raştî wazeno eno pel bivirazo.",
 # Multipage image navigation
 'imgmultipageprev' => '← peleyê verin',
 'imgmultipagenext' => 'pela badê cû →',
-'imgmultigo' => 'Şı!',
+'imgmultigo' => 'Şo!',
 'imgmultigoto' => 'Şo pela da $1',
 
 # Table pager
index 1caeafa..2278e13 100644 (file)
@@ -535,8 +535,10 @@ Wótpšašanje: $2',
 'protectedpagetext' => 'Wobźěłanje toś togo boka jo se znjemóžniło.',
 'viewsourcetext' => 'Žrědłowy tekst togo boka móžoš se woglědaś a kopěrowaś:',
 'viewyourtext' => "Móžoš se žrědłowy tekst '''swójich změnow''' woglědaś a do toś togo bok kopěrowaś:",
-'protectedinterface' => 'Toś ten bok wopśimujo tekst za rěcny zwjerch softwary. Jogo wobźěłowanje jo se znjemóžniło, aby se znjewužywanjeju zadorało.',
-'editinginterface' => "'''Warnowanje:''' Wobźěłujoš bok, kótaryž se wužywa, aby se tekst za pówjerch software MediaWiki k dispoziciji stajił. Změny na toś tom boku buźo wuglědanje wužywarskego pówjercha za drugich wužywarjow wobwliwowaś. Wužywaj pšosym za pśełožki [//translatewiki.net/wiki/Main_Page?setlang=dsb translatewiki.net], projekt MediaWiki za lokalizacije.",
+'protectedinterface' => 'Toś ten bok wopśimujo tekst za rěcny zwjerch softwary na toś tom wikiju a šćita se, aby se znjewužywanjeju zadorało.
+Aby pśełožki za wšykne wikije pśidał abo změnił, wužyj pšosym [//translatewiki.net/ translatewiki.net], lokalizěrowański projekt MediaWiki.',
+'editinginterface' => "'''Warnowanje:''' Wobźěłujoš bok, kótaryž se wužywa, aby se tekst za pówjerch software MediaWiki k dispoziciji stajił. Změny na toś tom boku buźo wuglědanje wužywarskego pówjercha za drugich wužywarjow na toś tom wikiju wobwliwowaś.
+Aby pśełožki za wšykne wikije pśidał abo změnił, wužywaj pšosym [//translatewiki.net/ translatewiki.net], projekt MediaWiki za lokalizacije.",
 'sqlhidden' => '(Wótpšašanje SQL schowane)',
 'cascadeprotected' => 'Za toś ten bok jo se wobźěłowanje znjemóžniło, dokulaž jo zawězany do {{PLURAL:$1|slědujucego boka|slědujuceju bokowu|slědujucych bokow}}, {{PLURAL:$1|kótaryž jo|kótarejž stej|kótarež su}} pśez kaskadowu opciju {{PLURAL:$1|šćitany|šćitanej|šćitane}}: $2',
 'namespaceprotected' => "Njejsy wopšawnjony, boki w rumje: '''$1''' wobźěłaś.",
@@ -797,7 +799,7 @@ Aby bok napórał, zapiš do kašćika dołojce (glědaj [[{{MediaWiki:Helppage}
 'noarticletext' => 'Dotychměst toś ten bok hyšći njewopśimujo žeden tekst. Móžoš w drugich bokach [[Special:Search/{{PAGENAME}}|titel togo boka pytaś]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} wótpowědne protokole pytaś] abo [{{fullurl:{{FULLPAGENAME}}|action=edit}} toś ten bok wobźěłaś]</span>.',
 'noarticletext-nopermission' => 'Tuchylu njejo žeden tekst na toś tom boku.
 Móžoš [[Special:Search/{{PAGENAME}}|toś ten bokowy titel]] na drugich bokach pytaś
-abo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} wótpowědne protokole pytaś]</span>.',
+abo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} wótpowědne protokole pytaś]</span>, ale njamaš pšawo, toś ten bok napóraś.',
 'missing-revision' => 'Wersija #$1 boka z mjenim "{{PAGENAME}}" njeeksistěrujo.
 
 Pśicyna jo zwětšego zestarjony wótkaz w historiji k bokoju, kótaryž jo se wulašował.
@@ -1051,7 +1053,9 @@ Pšosym pśeglědaj protokole.',
 'revdelete-only-restricted' => 'Zmólka pśi chowanju zapiska wót $2, $1; njamóžoš zapiski pśed wócami administratorow  pódtłocyś, mimo až teke wuběraš jadnu z drugich wiźobnosćowych opcijow.',
 'revdelete-reason-dropdown' => '*Zwucone pśicyny za wulašowanje
 ** Pśestupjenje awtorskego pšawa
-** Njegóźece se wósobinske informacije',
+** Njegóźece se komentary abo wósobinske informacije
+** Njegóźece se wužywarske mě
+** Potencielnje kśiwźece informacije',
 'revdelete-otherreason' => 'Druga/pśidatna pśicyna:',
 'revdelete-reasonotherlist' => 'Druga pśicyna',
 'revdelete-edit-reasonlist' => 'Pśicyny za lašowanje wobźěłaś',
@@ -1244,7 +1248,7 @@ How jo pśipadnje napórana gódnota, kótaruž móžoš wužywaś: $1',
 'timezoneregion-indian' => 'Indiski ocean',
 'timezoneregion-pacific' => 'Pacifiski ocean',
 'allowemail' => 'Dostawanje e-mailow drugich wužywarjow zmóžniś.',
-'prefs-searchoptions' => 'PytaÅ\84ske opcije',
+'prefs-searchoptions' => 'PytaÅ\9b',
 'prefs-namespaces' => 'Mjenjowe rumy',
 'defaultns' => 'Howac w toś tych mjenjowych rumach pytaś:',
 'default' => 'Standard',
@@ -1663,7 +1667,7 @@ $1',
 'backend-fail-internal' => 'W składowańskem backenźe "$1" jo njeznata zmólka nastała.',
 'backend-fail-contenttype' => 'Wopśimjeśowy typ dataje, kótaraž ma se na "$1" składowaś, njedajo se zwěsćiś.',
 'backend-fail-batchsize' => 'Štapjelowa dataja, kótaraž wopśimujo {{PLURAL:$1|jadnu operaciju|$1 operaciji|$1 operacije|$1 operacijow}},  jo se  na składowański backend pósłała; limit jo $2 {{PLURAL:$1|operaciju|operaciji|operacije|operacijow}}.',
-'backend-fail-usable' => 'Dataja $1 njedajo se dla njedosegajucych  abo felujucych zapisow pisaś.',
+'backend-fail-usable' => 'Dataja "$1" njedajo se dla njedosegajucych  pšawow abo felujucych zapisow daniž cytaś daniž pisaś.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Njejo žeden zwisk ze žurnaloweju datoweju banku za składowański backend "$1" móžno.',
@@ -2874,7 +2878,7 @@ W zespominanju dajo se pśicyna pódaś.',
 'pageinfo-authors' => 'Cełkowna licba wšakich awtorow',
 'pageinfo-recent-edits' => 'Licba nejnowšych změnow (za zachadnych $1)',
 'pageinfo-recent-authors' => 'Nejnowša licba rozdźělnych awtorow',
-'pageinfo-restriction' => 'Šćit boka (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Šćit boka ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magiske słowo|Magiskej słowje|Magiske słowa|Magiske słowa}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Schowana kategorija|Schowanej kategoriji|Schowane kategorije|Schowane kategorije}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Zapśěgnjona pśedłoga|Zapśěgnjonej pśedłoze|Zapśěgnjone pśedłogi|Zapśěgnjone pśedłogi}} ($1)',
index d32ea2b..58e5be0 100644 (file)
@@ -21,7 +21,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Lisoko idit tinamangan ih wagu kaalanai',
 'tog-newpageshidepatrolled' => 'Lisoko bolikon tinamangan mantad lis bolikon kawawagu',
 'tog-extendwatchlist' => 'Pointongo koinsanai listamangan do popokito koinsanai pinongundolihon, okon ko iri kawawagu nopo',
-'tog-usenewrc' => 'Gunao popoingkawas kaalanai kawawagu (momoguno JawaSikrip)',
+'tog-usenewrc' => 'Tinimungan nopingalanan maya bobolikon ii wagu kaalanai om lispintangan (momoguno JawaSikrip)',
 'tog-numberheadings' => 'oporian-mongonumbur it tuluhon',
 'tog-showtoolbar' => 'Pokitono kakamotbar mongidit (momoguno JawaSikrip)',
 'tog-editondblclick' => 'Idito bolikon momoguno induaan todos (momoguno JawaSikrip)',
@@ -29,20 +29,20 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Pabanaro sikson mongidit momoguno todos golibang id sikson tuluon (momoguno JawaSikrip)',
 'tog-showtoc' => 'Pokitono mija sinuang-suang (montok bolikon di kolobi do 3 tuluhon)',
 'tog-rememberpassword' => 'Soroho ot loginku id popogihuman diti (gisom solinaid do $1 {{PLURAL:$1|tadau|madau}})',
-'tog-watchcreations' => 'Ruhangai bolikon di winonsoiku id lisintanganku',
-'tog-watchdefault' => 'Ruhangai bolikon di niditku id lisintanganku',
-'tog-watchmoves' => 'Ruhangai bolikon di pinawalihku id lisintanganku.',
-'tog-watchdeletion' => 'Ruhangai bolikon di pinugasku id lisintanganku',
+'tog-watchcreations' => 'Ruhangai bolikon di winonsoiku om nogi pail pinosuangku id lisintanganku',
+'tog-watchdefault' => 'Ruhangai bolikon om tangapail di niditku id lisintanganku',
+'tog-watchmoves' => 'Ruhangai bolikon om tangapail di pinawalihku id lisintanganku.',
+'tog-watchdeletion' => 'Ruhangai bolikon om tangapail di pinugasku id lisintanganku',
 'tog-minordefault' => 'Tandaai oinsanan niditan tokoro sobaagi do pongoiso',
 'tog-previewontop' => 'Pokitono duluon-kokikitanai id pogulu kutak idit',
 'tog-previewonfirst' => 'Pokitono duluon-kokikitanai di idit koinsan',
 'tog-nocache' => 'Antabai kasing popogigihum bolikon',
-'tog-enotifwatchlistpages' => 'Ponuratai-i doho soira do haro bolikon lisintanganku haro kowolion',
+'tog-enotifwatchlistpages' => 'Ponuratai-i oku soira do haro bolikon toi pail lisintanganku haro nokowolion',
 'tog-enotifusertalkpages' => 'Ponuratai-i oku soira kiharo kowolion id pibabarasan momomogunoku',
-'tog-enotifminoredits' => 'Ponuratai-i oku nogi do nung haro no idit tongokoro do bolikon',
+'tog-enotifminoredits' => 'Ponuratai-i oku nogi do nung haro no idit tongokoro do bolikon om nogi tangapail',
 'tog-enotifrevealaddr' => 'Pokitono adiris surat-i-ku id kapahabaran surat-i',
 'tog-shownumberswatching' => 'Pokitono ginumu do momomoguno minongintong',
-'tog-oldsig' => 'Poduluon kokikitanai do sain pinosuang',
+'tog-oldsig' => 'Sain poinsandad:',
 'tog-fancysig' => 'Pokitono sain sobaagi do tikwiki (ingaa oporian toput )',
 'tog-externaleditor' => 'Pomoguno pongigidit poinlabus sobaagi do pongoiso (montok di angasampin nopo, mongoguno do nuludan pointantu id kompiutonu. [//www.mediawiki.org/wiki/Manual:External_editors Lobi pomoilaan.])',
 'tog-externaldiff' => 'Pomoguno pongigidit poinlabus sobaagi do pongoiso (montok di angasampin nopo, mongoguno do nuludan pointantu id kompiutonu. [//www.mediawiki.org/wiki/Manual:External_editors Lobi pomoilaan.])',
@@ -140,6 +140,7 @@ $messages = array(
 'listingcontinuesabbrev' => 'Mononoluod',
 'index-category' => 'Bolikon naka-abisi',
 'noindex-category' => 'Bolikon awu naka-abisi',
+'broken-file-category' => 'Bobolikon miampai pongoput pail do noputut',
 
 'about' => 'Kokomoi',
 'article' => 'Suang bolikon',
@@ -277,7 +278,11 @@ Intaai [[Special:Version|bolikon dinolinan]].',
 'youhavenewmessages' => 'Kiharo $1 montok dia ($2).',
 'newmessageslink' => 'pason kawawagu',
 'newmessagesdifflink' => 'naalanan kawawagu',
-'youhavenewmessagesmulti' => 'Kiharo pason kawawagu montok dia id $1',
+'youhavenewmessagesfromusers' => 'Nakaramit ko do $1 mantad {{PLURAL:$3|momomoguno suai|$3 tongomomomoguno}} ($2).',
+'youhavenewmessagesmanyusers' => 'Nakaramit koh do $1 mantad do tongomomomoguno ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|pason kawawagu|tangapason kawawagu}}',
+'newmessagesdifflinkplural' => 'dohuri do {{PLURAL:$1|naalanan|nopingalanan}}',
+'youhavenewmessagesmulti' => 'Kipason kawawagu montok dia id $1',
 'editsection' => 'idito',
 'editold' => 'idito',
 'viewsourceold' => 'intaai wowonod',
@@ -300,6 +305,8 @@ Intaai [[Special:Version|bolikon dinolinan]].',
 'page-rss-feed' => '"$1"  papababu RSS',
 'page-atom-feed' => '"$1" Papababu Atom',
 'red-link-title' => '$1 (bolikon awu poinsuang)',
+'sort-descending' => 'Uludo poinruhuk',
+'sort-ascending' => 'Uludo pointakad',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Bolikon',
@@ -329,9 +336,9 @@ Lis pointopot bobolikon pinatantu okito id [[Special:SpecialPages|{{int:specialp
 'dberrortext' => 'Nokosilap pogiuludan databing.
 Haro kaanto kutu id posuang-suangon.
 Tohuri pinokianu pogiuludan databing nopo nga:
-<blockquote><tt>$1</tt></blockquote>
-mantad suang momoguno  "<tt>$2</tt>".
-Databing nokosilap pinopoguli "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+mantad suang momoguno "<code>$2</code>".
+Databing nokosilap pinopoguli "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Haro kinosilapan pinongimuhatan sintak diri databing.
 Pinokianu databing di nokotohuri nopo nga:
 "$1"
@@ -367,34 +374,48 @@ Mangai poruputo iti hilod [[Special:ListUsers/sysop|mantatamong]], miampai nota
 'badarticleerror' => 'Awu milo momonsoi dino id bolikon diti.',
 'cannotdelete' => 'Iti bolikon toi pail "$1" awu milo pugason.
 Nopugas no kaanto do tulun suai.',
+'cannotdelete-title' => 'Awu milo pugason bolikon "$1"',
+'delete-hook-aborted' => 'Niditan pinaratu do kakait.
+Ingaa kointalangan narait.',
 'badtitle' => 'Sosomu tuluhon',
 'badtitletext' => 'Tuluhon bobolikon di pinokianu nopo nga nokosilap, aiso, nakasala pinioputan boros toi pinioputan tuluhon wiki.
 Haro kaanto sokukuri do iso pimato it awu milo gunoon id pongkotuluhon.',
-'perfcached' => 'Data sumusuhut namadangkob om okon ko noinwoguan. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'Data sumusuhut namadangkob, om nopinwoguan ontok $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'Data sumusuhut namadangkob om okon ko noinwoguan. Sokiginumu do  {{PLURAL:$1|iso asil|$1 tangahasil nopo nga}} haro id dangkob diti.',
+'perfcachedts' => 'Data sumusuhut namadangkob, om nopinwoguan ontok $1. Sokiginumu {{PLURAL:$4|iso asil|$4 tangahasil nopo nga}} haro id dangkob diti.',
 'querypage-no-updates' => 'Pinisok ponginwoguan id bolikon diti.
 Awu nodi posikapon do popointalang iri data kawawagu.',
 'wrong_wfQuery_params' => 'Nokosilap tangaparamito mongoi wfQuery()<br />
 Kopomogunoon: $1<br />
 Pongimuhatan: $2',
 'viewsource' => 'Intaai wowonod',
+'viewsource-title' => 'Intaai wowonod montok do $1',
 'actionthrottled' => 'Momilos',
 'actionthrottledtext' => 'Pinapanau lumawan-singkarap, Nantaban ko do mingguli momonsoi miagal dilo id timpu do osikap, om nagampot nu noh gisom diti.
 Umbalan kawagu do katalib poh pipiro minit.',
 'protectedpagetext' => 'Bolikon diti notingoligan tu mangantob do pingiditan.',
 'viewsourcetext' => 'Pasagaon ko do mongintong om mangadalin wowonod diti bolikon:',
-'protectedinterface' => 'Bolikon diti kiharo sinuratan pongurasan montok posusuang-suangon, om notingoligan do momiara mantad pomirumbakan.',
-'editinginterface' => "'''Panansarahan :''' Mongidit ko diti bolikon di gunoon do poposodia diri sinuratan montok posuang-suangon.
-Sinuratan id bolikon diti kopogoit do pongitanan  kourasan momoguno  montok momomoguno wokon.
-Montok pangawaliwboros, pomusarahai no do mongoguno [//translatewiki.net/wiki/Main_Page?setlang=dtp translatewiki.net], purujik popodusun ModiaWiki.",
+'viewyourtext' => "Milo nu do intangan om solinon ot wowonod '''niditannu''' id bolikon diti:",
+'protectedinterface' => 'Bolikon diti kiharo sinuratan pongurasan montok posusuang-suangon, om notingoligan do momiara mantad pomirumbakan.
+Nung mongoruhang toi monimban do waliwboros tongowiki, mangai noh gunoo iri purujik popodusun do Modiawiki id [//translatewiki.net/ translatewiki.net].',
+'editinginterface' => "Panansarahan :''' Mongidit ko diti bolikon di gunoon do poposodia diri pongurasan montok posuang-suangon.
+Sinuratan id bolikon diti kopogoit do pongitanan  kourasan momoguno  montok momomoguno suai.
+Montok mongoruhang toi monimban do waliwboros, gunoo noh [//translatewiki.net/ translatewiki.net], purujik popodusun ModiaWiki.",
 'sqlhidden' => '(Pongimuhatan SQL poinlisok)',
 'cascadeprotected' => 'Notingoligan bolikon diti mantad do pingiditan tu nokosuang  id bolikon, {{PLURAL:$1 | do | it}} pinilian tingolig  "kasading" poinsikit:
 $2',
 'namespaceprotected' => "Ingaa kasagaannu do mongidit bobolikon it kinoingaran '''$1'''.",
 'customcssprotected' => 'Ingaa kasagaannu do mongidit diti bolikon CSS, tu kisuang ponguludan minsosondiri momoguno.',
+'customjsprotected' => 'Ingaa kasagaannu do mongidit diti bolikon JavaScript, tu kisuang ponguludan minsosondiri momoguno.',
 'ns-specialprotected' => 'Bolikon pinotontu awu milo iditon.',
 'titleprotected' => 'Notingoligan tuluhon diti mantad wonsoyon do [[User:$1|$1]].
 Sasabab no do "\'\'$2\'\'".',
+'filereadonlyerror' => 'Awu milo do simbanan pail "$1" tu pinogompi iti pail "$2" id mud do basaon noh tomod.
+
+Mongungulud di minongunsi pinopointalang do kointalangan diti: "$3".',
+'invalidtitle-knownnamespace' => 'Pogoduhan tuluhon kiruangaran "$2" om tiik "$3"',
+'invalidtitle-unknownnamespace' => 'Pogoduhan tuluhon it awu ointutunan ruangaran numbur $1 om tiik "$2"',
+'exception-nologin' => 'Amu nokolog sumuang',
+'exception-nologin-text' => 'Bolikon diti toi koimaan diti mumang do sumuang log koh id wiki diti.',
 
 # Virus scanner
 'virus-badscanner' => "Araat kinooturon: Awu otutunan pongkowili giuk: ''$1''",
@@ -415,6 +436,7 @@ Soroho no do mongolon [[Special:Preferences|{{SITENAME}} komoisoonnu]].',
 'remembermypassword' => 'Soroho ot loginku id popogihuman diti (gisom solinaid do $1 {{PLURAL:$1|tadau|madau}})',
 'securelogin-stick-https' => 'Toririmo poinhubung hilo HTTPS soira kosuang log',
 '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.',
 'login' => 'Sumuang log',
 'nav-login-createaccount' => 'Sumuang log / pomonsoi  do takaun',
@@ -448,7 +470,7 @@ Mangai papanaho ilo om umbalan kawagu.',
 Posikito no pogogonsoknu, gumulisuang id bolikon diti om umbalan kawagu.',
 'noname' => 'Awu nu pinosuang ngaran momomoguno di pasagaon.',
 'loginsuccesstitle' => 'Nokosuang log.',
-'loginsuccess' => "'''Awu kopo nokosuang log id {{SITENAME}} sobaagi do \"\$1\".'''",
+'loginsuccess' => "'''Nokosuang log ko noh id {{SITENAME}} sobaagi do \"\$1\".'''",
 'nosuchuser' => 'Ingaa momoguno pinungaranan "$1".
 Ngaran momoguno nopo nga kowoyo pimato.
 Intaai ijaannu, toi [[Special:UserLogin/signup|pomonsoi do takaun kawawagu]].',
@@ -489,6 +511,8 @@ Ingaa sinuratan-i pootodon montok nonggo-nonggo ilo komoyon sumusuhut.',
 'emailconfirmlink' => 'Pogiroto no surat-i nu.',
 'invalidemailaddress' => 'Awu aramit kinoyonon surat-i tu nokosilap nuludan.
 Maai posuango nuludan tosonong do kinoyonon toi pologoson do ingaa suang dilo posuangan.',
+'cannotchangeemail' => 'Porikatan surat-i do akaun diti awu milo do simbanan id wiki diti.',
+'emaildisabled' => 'Sosondoton diti awu awu kapaatod do tongosurat-i.',
 'accountcreated' => 'Nowonsoi takaun',
 'accountcreatedtext' => 'Momoguno takaun montok $1 nowonsoi noh.',
 'createaccount-title' => 'Winonsoi takaun montok {{SITENAME}}',
@@ -505,6 +529,7 @@ Andado poh do toruhai pogulu do minsingumbal kawagu.',
 
 # E-mail sending
 'php-mail-error-unknown' => 'Awu nointutunan kinosilapan id don surat PHP () function',
+'user-mail-no-addy' => 'Mogumbal do papaatod surat-i tingaa o paatadan.',
 
 # Change password dialog
 'resetpass' => 'Alanai kaatalib',
@@ -526,11 +551,27 @@ Naalanannu noh kaatalib toi nokopokianu koh no do kaatalib daamot.',
 'resetpass-temp-password' => 'Kaatalib daamot:',
 
 # Special:PasswordReset
+'passwordreset' => 'Pudoliai kawagu kaatalib',
+'passwordreset-text' => 'Gonopo poom diti do mangaramit tongosurat-i ponorou do nokomoi id akaun.',
+'passwordreset-legend' => 'Pudoliai kawagu kaatalib',
+'passwordreset-disabled' => 'Pomudolian kawagu do kaatalib kitaantob id wiki diti.',
 'passwordreset-username' => 'Ngarandait:',
 'passwordreset-emailtitle' => 'Kointalangan takaun id {{SITENAME}}',
+'passwordreset-emailelement' => 'Ngaranmoguno: $1
+Kaatalib daamot: $2',
+'passwordreset-emailsent' => 'Surat-i pononsorou nakaatod noh.',
+'passwordreset-emailsent-capture' => 'Surat-i pononsorou nakaatod noh, miagal id siriba diti.',
+'passwordreset-emailerror-capture' => 'Surat-i pononsorou nopudali noh, miagal id siriba diti, nga awu kaatod id momomoguno: $1',
 
 # Special:ChangeEmail
+'changeemail' => 'Alanai porikatan surat-i',
+'changeemail-header' => 'Alanai akaun porikatan surat-i',
+'changeemail-text' => 'Gonopo poom diti do mongolon porikatan surat-i nuh. Mangai posuango kaatalibnu do papasaah di naalanan.',
 'changeemail-no-info' => 'Mositi sumuang log ko do mongoguno monilombus id bolikon diti.',
+'changeemail-oldemail' => 'Porikatan surat-i maso diti:',
+'changeemail-newemail' => 'Porikatan surat-i it kawawagu:',
+'changeemail-none' => '(ingaa)',
+'changeemail-submit' => 'Alanai surat-i',
 'changeemail-cancel' => 'Kinsilo',
 
 # Edit page toolbar
@@ -563,7 +604,7 @@ Naalanannu noh kaatalib toi nokopokianu koh no do kaatalib daamot.',
 'showdiff' => 'Pokitono nokowolion',
 'anoneditwarning' => "'''Woning:''' Awu ko poinlog sumuang.
 Nantadon IPnu maan podolino id susuyan bolikon nidit do hiti.",
-'anonpreviewwarning' => "''Awu ko poinsuang log. Popogompi koponurat do kinoyonon IPnu id bobolikon susuyan niditan.''",
+'anonpreviewwarning' => "''Awu ko poinsuang log. Popogompi do sinuratan koponurat do kinoyonon IPnu id bobolikon susuyan niditan.''",
 'missingsummary' => "'''Panansarahan:''' Awu nu nosuratan hilo id koinibaan niditan.
 Nung todosonnu \"{{int:savearticle}}\" kawagu, kogompi niditannu nga ingaa koinibaan.",
 'missingcommenttext' => 'Mangai gia posuango pason id siriba.',
@@ -619,23 +660,27 @@ Kaatalib montok akaun wagu milo do alanan hilo id bolikon ''[[Special:ChangePass
 'newarticletext' => "Nakatanudko di noputan kumaa di bolikon di awu po nokosuang.
 Momonsoi ko nopo do bolikon diti, timpuun do manaip id kutak siriba (intaai [[{{MediaWiki:Helppage}}|bolikon ponokodung]] montok lobi gumu kointalangan).
 Nung nakaansau ko do hiti, tonsoko ot butang '''gumuli''' id pogigihumnu.",
+'anontalkpagetext' => "----''Iti nopo nga bolikon pogibabarasan montok di momomoguno poinlisok it awu poh nokopomonsoi do takaun, toi it awu momoguno dilo.
+Mantad dilo, asansagan yahai do poposurat numbur kinoyonon IP do mongintutun dau.
+Kinoyonon IP pogialasan do pipiro momomoguno.
+Nung momomoguno koh do ingaa ngaran om karamit koh do komin di awu kapadan, mangai [[Special:UserLogin/signup|wonsoyo takaun]] toi [[Special:UserLogin|sumuang log]] do magalai kounsuhan di momomoguno suai di tingaa ngaran.''",
 'noarticletext' => 'Maso po do ingaa tik id bolikon diti.
 Milo ko nogi do [[Special:Search/{{PAGENAME}}|mogihum do tuluhon bolikon diti]] id bolikon suai,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mogihum kokomoi log-log],
 toi [{{fullurl:{{FULLPAGENAME}}|action=edit}} mongidit bolikon diti]</span>.',
 'noarticletext-nopermission' => 'Maso po do ingaa tik id bolikon diti.
 Milo ko nogi do [[Special:Search/{{PAGENAME}}|mogihum do tuluhon bolikon diti]] id bolikon suai, toi
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mogihum kokomoi log-log] </span>.',
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mogihum kokomoi log-log] </span>, nga ingaa kapasagaannu do momonsoi do bolikon diti.',
 'userpage-userdoesnotexist' => 'Akaun momomoguno "<nowiki>$1</nowiki>" awu nokorijisto.
 Mangai intangai nung mumang ko pomonsoi/mongidit do bolikon diti.',
 'userpage-userdoesnotexist-view' => 'Akaun momomoguno "$1" awu po nokorijisto.',
 'blocked-notice-logextract' => 'Maso do nantaban momomoguno diti.
 Riporon id siriba kokomoi nantaban di tohuri no:',
 'clearyourcache' => "'''Soroho:''' Opongoh do pogompi, mangai  pawayao dangkob pogigihumnu do mongintong di nopingalanan.
-'''Mozilla / Firefox / Safari:''' todoso ''Shift'' maso do mongotik ''Reload'', toi piandadon mononsok ''Ctrl-F5'' toi ''Ctrl-R'' (''Command-R'' id Mac);
-'''Konqueror:''' kotiko ''Reload'' toi tonsoko ''F5'';
-'''Opera:''' imuhawai id dangkob  ''Tools → Preferences'';
-'''Internet Explorer:''' todoso ''Ctrl'' maso do mongotik ''Refresh,'' toi tonsoko ''Ctrl-F5''.",
+'''Firefox / Safari:''' Pointodos ''Shift'' maso do mongotik ''Reload'', toi piandadon mononsok ''Ctrl-F5'' toi ''Ctrl-R'' (''⌘-R'' id Mac);
+'''Google Chrome:''' Todoso ''Ctrl-Shift-R'' (''⌘-Shift-R'' id Mac)
+'''Internet Explorer:''' Todoso ''Ctrl'' maso do mongotik ''Refresh,'' toi tonsoko ''Ctrl-F5''
+'''Opera:''' Imuhawai id dangkob  ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''Tutuduk:''' Momoguno do \"{{int:showpreview}}\" butang do mongumbal CSS kawawagunu pogulu do popogompi.",
 'userjsyoucanpreview' => "'''Tutuduk:''' Momoguno do \"{{int:showpreview}}\" butang do mongumbal JawaSikrip kawawagunu pogulu do popogompi.",
 'usercsspreview' => "'''Soroho no do mongintong kono tomod diti CSS momogunonu.'''
@@ -650,8 +695,9 @@ Riporon id siriba kokomoi nantaban di tohuri no:',
 Bobolikon pinudali .css om .js momoguno do pimato tokoro, miagal pomitanan {{ns:user}}:Foo/vector.css sobaagi do ponuli di {{ns:user}}:Foo/Vector.css.",
 'updated' => '(Noinwoguan)',
 'note' => "'''Pasoniba:'''",
-'previewnote' => "'''Soroho no do iti nopo nga pongintangan no toomod.'''
+'previewnote' => "'''Soroho no do iti nopo nga kopongintangan toomod.'''
 Awu po moti nokogompi iri nopingalanannu!",
+'continue-editing' => 'Potilombuso do mongidit.',
 'previewconflict' => 'Miagal no diti pongitanan do tik id boogian kawas kutak pongiditan tik nung pilionnu do popogompi.',
 'session_fail_preview' => "'''Siou! Awu di dahai opongoh niditannu gisom no do natagakan data.'''
 Mangai umbalai kawagu.
@@ -710,6 +756,7 @@ Miagal do nopugas iti.',
 'edit-no-change' => 'Pinologos niditannu, tu ingaa nopingalanan id tik.',
 'edit-already-exists' => 'Awu owonsoi bolikon kawawagu.
 Haro no do pinsuang.',
+'defaultmessagetext' => 'Tik pason sandad',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Pomisunudan:''' Kisuang bolikon diti do nosontob ogumu kogunoon lolohou parsor.
@@ -762,32 +809,40 @@ Umbalai [[Special:Search|mogihum id wiki]] ot bolikon di kikohompiton.',
 Kointalangan oihum id [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pinugas].",
 'rev-deleted-text-unhide' => "Sinimakan bolikon diti '''nopugas'''.
 Kointalangan oihum id [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pinugas].
-Sobaagi do mandur, milo ko nogi do [$1 mongintong sinimakan diti] nung orohian ko.",
+Milo ko poh do [$1 mongintong sinimakan diti] nung orohian ko.",
 'rev-suppressed-text-unhide' => "Sinimakan bolikon diti '''nalapahan'''.
 Kointalangan oihum id [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log nalapahan].
-Sobaagi do mandur, milo ko nogi do [$1 mongintong sinimakan diti] nung orohian ko.",
+Milo ko nogi do [$1 mongintong sinimakan diti] nung orohian ko.",
 'rev-deleted-text-view' => "Sinimakan bolikon diti '''nopugas'''.
-Sobaagi do mongungulud milo ko do montong diti; kointalangan oihum id [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pinugas].",
+Milo ko do montong diti; kointalangan oihum id [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pinugas].",
 'rev-suppressed-text-view' => "Sinimakan bolikon diti '''nalapahan'''.
-Sobaagi do mongungulud milo ko do montong diti; kointalangan oihum id [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log nalapahan].",
+Milo ko do montong diti; kointalangan oihum id [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log nalapahan].",
 'rev-deleted-no-diff' => "Awu nu okito pisuaian diti tu iso mantad sinimakan diti '''nopugas'''.
 Kointalangan oihum id [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pinugas].",
-'rev-deleted-unhide-diff' => "Iso mantad sinimakan bolikon diti '''nopugas'''.
+'rev-suppressed-no-diff' => "Awu ko milo do mongintong pisuaian tu iso mantad do sinimakan '''nopugas'''.",
+'rev-deleted-unhide-diff' => "Iso mantad pisuaian sinimakan bolikon diti '''nopugas'''.
 Kointalangan oihum id [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pinugas].
-Sobaagi do mandur, milo ko nogi do [$1 mongintong sinimakan diti] nung orohian ko.",
+Milo ko nogi do [$1 mongintong sinimakan diti] nung orohian ko.",
 'rev-suppressed-unhide-diff' => "Iso mantad sinimakan pisuaian diti '''nalapahan'''.
 Kointalangan oihum id [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log nalapahan].
-Sobaagi do mandur, milo ko nogi do [$1 mongintong sinimakan diti] nung orohian ko.",
+Milo ko nogi do [$1 mongintong sinimakan diti] nung orohian ko.",
 'rev-deleted-diff-view' => "Sinimakan pisuaian diti '''nopugas'''.
-Sobaagi do mongungulud milo ko do mongintong pisuaian diti; kointalangan oihum id [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pinugas].",
+Milo ko do mongintong pisuaian diti; kointalangan oihum id [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} log pinugas].",
 'rev-suppressed-diff-view' => "Iso mantad sinimakan pisuaian diti '''nalapahan'''.
-Sobaagi do mongungulud milo ko do montong diti; kointalangan oihum id [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log nalapahan].",
+Milo ko do montong diti; kointalangan oihum id [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} log nalapahan].",
 'rev-delundel' => 'pokitono/lisoko',
 'rev-showdeleted' => 'popointalang',
+'revisiondelete' => 'Pugaso/pogulio sinimakan',
+'revdelete-nooldid-title' => 'Poimpalid rikoton do sinimakan',
+'revdelete-nologtype-title' => 'Awu nonuan koula-laho log',
+'revdelete-nologtype-text' => 'Awu nu pinoilo ot koula-laho log montok koimaan diti.',
+'revdelete-nologid-title' => 'Log pinosuang napalid',
+'revdelete-nologid-text' => 'Awu nu pinatantu rikoton kinaantakan log do popowonsoi kopomogunaan toi suang pointantu awu poinsuang.',
 'revdelete-no-file' => 'Pail pinotontu awu poinsuang.',
 'revdelete-show-file-confirm' => 'Mongintong ko di sinimakan nopugas do pail  "<nowiki>$1</nowiki>" mantad $2 ontok $3?',
 'revdelete-show-file-submit' => 'O',
 'revdelete-selected' => "'''{{PLURAL:$2|Sinimakan pinili|Sinimakan nopili}} id [[:$1]]:'''",
+'logdelete-selected' => "'''{{PLURAL:$1|Log kinaantakan nopili|Tongolog kinaantakan it nopili}}:'''",
 'revdelete-legend' => 'Uludo pogigihum pangangantob',
 'revdelete-hide-text' => 'Polisoko sinimakan tiik',
 'revdelete-hide-image' => 'Polisoko suang pail',
@@ -827,7 +882,8 @@ Maai intaai tongolog.',
 'revdelete-reason-dropdown' => '*Sasabab do pugason
 ** Awu katanud kooturan kuasamonsupu
 ** Pail ahaltinan di awu kosudong
-** Kopoilaan di popinraat do wokon',
+** Ngaranmoguno di awu kosudong
+** Kopoilaan di mongindaraat do wokon',
 'revdelete-otherreason' => 'Sabab suai/poinsungku:',
 'revdelete-reasonotherlist' => 'Sabab suai',
 'revdelete-edit-reasonlist' => 'Idito sasabab pinugas',
@@ -836,22 +892,41 @@ Maai intaai tongolog.',
 # Suppression log
 'suppressionlog' => 'Log nopinlasadan',
 'suppressionlogtext' => 'Id siriba diti nopo nga lis di nopinpugasan om tantob kohompit suang poinlisok mantad mandur.
-Intaai [[Special:BlockList|lis IP nantaban]] montok lis kawawagu karaja mogoduh om mangantob.',
+Intaai [[Special:BlockList|lis nantaban]] montok lis kawawagu karaja mogoduh om mangantob.',
 
 # History merging
+'mergehistory-from' => 'Wowonod bolikon:',
+'mergehistory-into' => 'Rikoton bolikon:',
+'mergehistory-list' => 'Susuyan niditan milo pisompuruon',
+'mergehistory-submit' => 'Pisompuruo sinimakan',
+'mergehistory-empty' => 'Inggaa sinimakan do milo pisompuruon',
+'mergehistory-success' => '$3 {{PLURAL:$3|sinimakan|tongosinimakan}} montok[[:$1]] nokopisompuru noh id [[:$2]].',
+'mergehistory-fail' => 'Awu milo do pisompuruon susuyan, mangai imuriai iri bolikon om nuludan do timpu.',
+'mergehistory-no-source' => 'Wowonod bolikon $1 awu poinsuang.',
+'mergehistory-no-destination' => 'Korikoton do bolikon $1 awu poinsuang.',
+'mergehistory-invalid-source' => 'Wowonod do bolikon mositi do tuluhon di asaah.',
+'mergehistory-invalid-destination' => 'Korkoton do bolikon mositi di tuluhon asaah.',
+'mergehistory-autocomment' => 'Popisompuru [[:$1]] miampai [[:$2]]',
+'mergehistory-comment' => 'Popisompuru [[:$1]] miampai [[:$2]]: $3',
+'mergehistory-same-destination' => 'Wowonod om korikoton do bolikon awu milo do miagal',
 'mergehistory-reason' => 'Sabab:',
 
 # Merge log
 'mergelog' => 'Log pinisompuru',
 'pagemerge-logentry' => 'pisompuruo [[$1]] sumuang id [[$2]] (sinimakan gisom do $3)',
 'revertmerge' => 'Kada piisoo',
+'mergelogpagetext' => 'Id siriba diti nopo nga lis kawawagu do pinisompuruan susuyan tiso-iso bolikon kumaa doid bolikon do suai.',
 
 # Diffs
 'history-title' => 'Susuyan sinimakan do "$1"',
+'difference-title' => 'Pinisuaian mantad sinimakan do "$1"',
+'difference-title-multipage' => 'Pinisuaian do bolikon "$1" om "$2"',
+'difference-multipage' => '(Pisuaian do tongobolikon)',
 'lineno' => 'Baris $1:',
 'compareselectedversions' => 'Popitimbang sinimakan nopili',
 'showhideselectedversions' => 'Pokitono/polisoko sinimakan nopili',
 'editundo' => 'suguto mongidit',
+'diff-multi' => '({{PLURAL:$1|Iso sinimakan pintangaan|$1 tongosinimakan pintangaan}} di {{PLURAL:$2|iso momomoguno|$2 momomoguno}} awu pokitonon)',
 
 # Search results
 'searchresults' => 'Kootuson nihuman',
@@ -883,6 +958,7 @@ Intaai [[Special:BlockList|lis IP nantaban]] montok lis kawawagu karaja mogoduh
 'searchprofile-everything-tooltip' => 'Ihumo oinsanan suang (kohompit bobolikon bolotok)',
 'searchprofile-advanced-tooltip' => 'Pogihum momoguno pinotomod ngaran',
 'search-result-size' => '$1 ({{PLURAL:$2|1 ka|$2 ka-ka}})',
+'search-result-category-size' => '{{PLURAL:$1|1 tutumanud|$1 tongotutumanud}} ({{PLURAL:$2|1 rapang katogori|$2 tangarapang katogori}}, {{PLURAL:$3|1 pail|$3 tangapail}})',
 'search-redirect' => '(potilombuso hilo $1)',
 'search-section' => '(bogian $1)',
 'search-suggest' => '$1 ot komoyonnu?',
@@ -926,13 +1002,47 @@ Imurai no do indik suang diti {{SITENAME}} nopo nga nokolipas.',
 'prefs-edits' => 'Ginumu niditan:',
 'prefsnologin' => 'Amu nokolog sumuang',
 'changepassword' => 'Alanai kaatalib',
+'prefs-skin' => 'Kulit',
 'skin-preview' => 'Kokitanan',
 'datedefault' => 'Ingaa komoisoon',
+'prefs-datetime' => 'Haribulan om timpu',
 'prefs-rc' => 'Wagu kaalanai',
+'prefs-resetpass' => 'Alanai kaatalib',
+'prefs-changeemail' => 'Alanai porikatan surat-i',
+'prefs-rendering' => 'Kowoyowoyoon',
+'saveprefs' => 'Pogompio',
+'resetprefs' => 'Pugaso nalanan awu nogompi',
+'searchresultshead' => 'Ihumo',
+'prefs-searchoptions' => 'Ihumo',
+'prefs-namespaces' => 'Ponuratan ngaran',
 'youremail' => 'Surat-i:',
 'yourrealname' => 'Ngaran otopot:',
 'prefs-help-email' => 'Surat-i pasagaon do momili, nga gunoon iti montok do popoguli do kaatalib, nung olihuannu kaatalib',
 'prefs-help-email-others' => 'Milo nogi do momili ko nung mokiromut do tulun suai momoguno maya do noputan surat-i id bolikon momogunonu toi id bolikon bolotok. Awu iy pokitonon surat-i nu kumaa do momomoguno suai.',
+'prefs-advancedediting' => 'Pomilian pointilombus',
+'prefs-advancedrc' => 'Pomilian pointilombus',
+'prefs-advancedrendering' => 'Pomilian pointilombus',
+'prefs-advancedsearchoptions' => 'Pomilian pointilombus',
+'prefs-advancedwatchlist' => 'Pomilian pointilombus',
+'prefs-displayrc' => 'Pomilian pongitanan',
+'prefs-displaysearchoptions' => 'Pomilian pongitanan',
+'prefs-displaywatchlist' => 'Pomilian pongitanan',
+'prefs-diffs' => 'Pisuaian',
+
+# User preference: e-mail validation using jQuery
+'email-address-validity-valid' => 'Porikatan surat-i asaah',
+'email-address-validity-invalid' => 'Posuango porikatan surat-i di asaah',
+
+# User rights
+'userrights' => 'Ponguludan don momomoguna',
+'userrights-lookup-user' => 'Uludo tinimungan momomoguno',
+'userrights-user-editname' => 'Posuango ngaranmoguno:',
+'editusergroup' => 'Idito tinimungan momomoguno',
+'editinguser' => "Monimban kapasagaan don momomoguno '''[[User:$1|$1]]''' $2",
+'userrights-editusergroup' => 'Mongidit tinimungan momomoguno',
+'saveusergroups' => 'Pogompio tinimungan momomoguno',
+'userrights-groupsmember' => 'Tutumanud montok:',
+'userrights-groupsmember-auto' => 'Tutumanud toporian montok:',
 
 # Groups
 'group-sysop' => 'Mandur',
@@ -1110,6 +1220,7 @@ Kointalangan dilo [$2 kointalangan pail] okito id siriba.',
 # Watchlist
 'watchlist' => 'Lis piintanganku',
 'mywatchlist' => 'Lis piintanganku',
+'watchlistfor2' => 'Montok $1 $2',
 'addedwatchtext' => "Bolikon \"[[:\$1]]\" nokoruhang no id [[Special:Watchlist|lis piintangannu]].
 Kinaalanan id bolikon om kinoruhangan bolikon bolotok diti do maso dumontol maan posurato do hiti, om bolikon diti pokitonon do '''akapal''' id [[Special:RecentChanges|lis wagu kaalanai]] do poposikap mongintutun.",
 'removedwatchtext' => 'Bolikon "[[:$1]]" noidu no mantad [[Special:Watchlist|lis piintangannu]].',
index 35876c3..1ab27bf 100644 (file)
@@ -442,7 +442,6 @@ $specialPageAliases = array(
        'Recentchanges'             => array( 'RecentChanges' ),
        'Recentchangeslinked'       => array( 'RecentChangesLinked', 'RelatedChanges' ),
        'Revisiondelete'            => array( 'RevisionDelete' ),
-       'RevisionMove'              => array( 'RevisionMove' ),
        'Search'                    => array( 'Search' ),
        'Shortpages'                => array( 'ShortPages' ),
        'Specialpages'              => array( 'SpecialPages' ),
@@ -1037,10 +1036,11 @@ Please try again in a few minutes.',
 'protectedpagetext'             => 'This page has been protected to prevent editing.',
 'viewsourcetext'                => 'You can view and copy the source of this page:',
 'viewyourtext'                  => "You can view and copy the source of '''your edits''' to this page:",
-'protectedinterface'            => 'This page provides interface text for the software, and is protected to prevent abuse.',
+'protectedinterface'            => 'This page provides interface text for the software on this wiki, and is protected to prevent abuse.
+To add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.',
 'editinginterface'              => "'''Warning:''' You are editing a page which is used to provide interface text for the software.
-Changes to this page will affect the appearance of the user interface for other users.
-For translations, please consider using [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], the MediaWiki localisation project.",
+Changes to this page will affect the appearance of the user interface for other users on this wiki.
+To add or change translations for all wikis, please use [//translatewiki.net/ translatewiki.net], the MediaWiki localisation project.",
 'sqlhidden'                     => '(SQL query hidden)',
 'cascadeprotected'              => 'This page has been protected from editing, because it is included in the following {{PLURAL:$1|page, which is|pages, which are}} protected with the "cascading" option turned on:
 $2',
@@ -1362,8 +1362,7 @@ You can [[Special:Search/{{PAGENAME}}|search for this page title]] in other page
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],
 or [{{fullurl:{{FULLPAGENAME}}|action=edit}} edit this page]</span>.',
 'noarticletext-nopermission'       => 'There is currently no text in this page.
-You can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,
-or <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>.',
+You can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages, or <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>, but you do not have permission to create this page.',
 'noarticletextanon'                => '{{int:noarticletext}}', # do not translate or duplicate this message to other languages
 'missing-revision'                 => 'The revision #$1 of the page named "{{PAGENAME}}" does not exist.
 
@@ -1647,7 +1646,8 @@ Please check the logs.',
 'revdelete-only-restricted'   => 'Error hiding the item dated $2, $1: You cannot suppress items from view by administrators without also selecting one of the other visibility options.',
 'revdelete-reason-dropdown'   => '*Common delete reasons
 ** Copyright violation
-** Inappropriate personal information
+** Inappropriate comment or personal information
+** Inappropriate username
 ** Potentially libelous information',
 'revdelete-otherreason'       => 'Other/additional reason:',
 'revdelete-reasonotherlist'   => 'Other reason',
@@ -1870,7 +1870,7 @@ Here's a randomly-generated value you can use: $1",
 'timezoneregion-indian'         => 'Indian Ocean',
 'timezoneregion-pacific'        => 'Pacific Ocean',
 'allowemail'                    => 'Enable e-mail from other users',
-'prefs-searchoptions'           => 'Search options',
+'prefs-searchoptions'           => 'Search',
 'prefs-namespaces'              => 'Namespaces',
 'defaultns'                     => 'Otherwise search in these namespaces:',
 'default'                       => 'default',
@@ -2321,7 +2321,7 @@ If the problem persists, contact an [[Special:ListUsers/sysop|administrator]].',
 'backend-fail-internal'      => 'An unknown error occurred in storage backend "$1".',
 'backend-fail-contenttype'   => 'Could not determine the content type of the file to store at "$1".',
 'backend-fail-batchsize'     => 'The storage backend was given a batch of $1 file {{PLURAL:$1|operation|operations}}; the limit is $2 {{PLURAL:$2|operation|operations}}.',
-'backend-fail-usable'        => 'Could not write file "$1" due to insufficient permissions or missing directories/containers.',
+'backend-fail-usable'        => 'Could not read or write file "$1" due to insufficient permissions or missing directories/containers.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Could not connect to the journal database for storage backend "$1".',
@@ -3762,7 +3762,7 @@ This is probably caused by a link to a blacklisted external site.',
 'pageinfo-authors'             => 'Total number of distinct authors',
 'pageinfo-recent-edits'        => 'Recent number of edits (within past $1)',
 'pageinfo-recent-authors'      => 'Recent number of distinct authors',
-'pageinfo-restriction'         => 'Page protection (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction'         => 'Page protection ({{lcfirst:$1}})',
 'pageinfo-magic-words'         => 'Magic {{PLURAL:$1|word|words}} ($1)',
 'pageinfo-hidden-categories'   => 'Hidden {{PLURAL:$1|category|categories}} ($1)',
 'pageinfo-templates'           => 'Transcluded {{PLURAL:$1|template|templates}} ($1)',
index c36b38e..5a47d98 100644 (file)
@@ -735,8 +735,11 @@ Consulta: $2',
 'protectedpagetext' => 'Esta página ha sido protegida para evitar su edición.',
 'viewsourcetext' => 'Puedes ver y copiar el código fuente de esta página:',
 'viewyourtext' => "Puedes ver y copiar el código de '''tus ediciones''' a esta página:",
-'protectedinterface' => 'Esta página provee texto del interfaz del software, y está protegida para evitar vandalismos.',
-'editinginterface' => "'''Aviso:''' Estás editando una página usada para proporcionar texto de interfaz para el software. Los cambios en esta página afectarán a la apariencia de la interfaz para los demás usuarios. Para traducciones, por favor considera usar [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], el proyecto de regionalización de MediaWiki.",
+'protectedinterface' => 'Esta página proporciona el texto de la interfaz del software en este wiki, y está protegida para prevenir el abuso.
+Para agregar o cambiar las traducciones para todos los wikis, por favor use [//translatewiki.net/translatewiki.net], el proyecto de localización de MediaWiki.',
+'editinginterface' => "'''Aviso:''' Estás editando una página usada para proporcionar el texto de la interfaz para el software. 
+Los cambios en esta página afectarán a la apariencia de la interfaz para los demás usuarios de este wiki. 
+Para añadir o cambiar las traducciones, por favor considera usar [//translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
 'sqlhidden' => '(Consulta SQL oculta)',
 'cascadeprotected' => 'Esta página ha sido protegida para su edición, porque está incluida en {{PLURAL:$1|la siguiente página|las siguientes páginas}}, que están protegidas con la opción de «cascada»:
 $2',
@@ -1023,8 +1026,7 @@ Puedes [[Special:Search/{{PAGENAME}}|buscar el título de esta página]] en otra
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros],
 o [{{fullurl:{{FULLPAGENAME}}|action=edit}} editar esta página]</span>.',
 'noarticletext-nopermission' => 'Actualmente no hay texto en esta página.
-Puedes [[Special:Search/{{PAGENAME}}|buscar este título de página]] en otras páginas,
-o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros relacionados]</span>.',
+Puedes [[Special:Search/{{PAGENAME}}|buscar este título de página]] en otras páginas, o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} buscar en los registros relacionados]</span>, pero no tienespermiso para crear esta página.',
 'missing-revision' => 'La revisión #$1 de la página «{{PAGENAME}}» no existe.
 
 Esto suele deberse a seguir un enlace obsoleto hacia el historial de una página que ya ha sido borrada.
@@ -1288,7 +1290,8 @@ No tiene acceso a él.',
 'revdelete-only-restricted' => 'Error ocultando el item de fecha $2, $1: no puedes suprimir elementos de vista de los administradores sin seleccionar asímismo una de las otras opciones de visibilidad.',
 'revdelete-reason-dropdown' => '*Razones de borrado comunes
 ** Violación a los derechos de autor
-** Información personal inapropiada
+** Comentario o información personal inapropiados
+** Nombre de usuario inapropiado
 ** Información potencialmente injuriosa o calumniante',
 'revdelete-otherreason' => 'Otra/adicional razón:',
 'revdelete-reasonotherlist' => 'Otra razón',
@@ -1486,7 +1489,7 @@ Cualquiera que conozca la clave en este campo será capaz de leer tu lista de se
 'timezoneregion-indian' => 'Océano Índico',
 'timezoneregion-pacific' => 'Océano Pacífico',
 'allowemail' => 'Aceptar correo electrónico de otros usuarios',
-'prefs-searchoptions' => 'Opciones de búsqueda',
+'prefs-searchoptions' => 'Buscar',
 'prefs-namespaces' => 'Espacios de nombres',
 'defaultns' => 'Buscar en estos espacios de nombres por defecto:',
 'default' => 'por defecto',
@@ -1908,7 +1911,7 @@ $1',
 'backend-fail-internal' => 'Se ha producido un error desconocido en el servidor (backend) de almacenamiento "$1".',
 'backend-fail-contenttype' => 'No se pudo determinar el tipo de contenido del archivo a guardar en " $1 ".',
 'backend-fail-batchsize' => 'El servidor (back-end) de almacenamiento ha suministrado un lote de $1 {{PLURAL:$1|operación|operaciones}} de archivo; el límite es de $2 {{PLURAL:$2|operación|operaciones}}.',
-'backend-fail-usable' => 'No se pudo escribir el archivo $1 debido a permisos insuficientes o directorios/contenedores desaparecidos.',
+'backend-fail-usable' => 'No se pudo leer o escribir el archivo "$1" debido a permisos insuficientes o directorios/contenedores desaparecidos.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'No se pudo conectar a la base de datos del registro del sistema de almacenamiento "$1".',
@@ -3175,7 +3178,7 @@ Esto podría estar causado por un enlace a un sitio externo incluido en la lista
 'pageinfo-authors' => 'Número total de autores distintos',
 'pageinfo-recent-edits' => 'Número de ediciones recientes (en los últimos $1)',
 'pageinfo-recent-authors' => 'Número de autores distintos recientes',
-'pageinfo-restriction' => 'Protección de la página (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Protección de la página ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Palabra mágica|Palabras mágicas}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoría oculta|Categorías ocultas}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|plantilla incluida|plantillas incluidas}} ($1)',
index 276121a..63fe960 100644 (file)
@@ -17,6 +17,7 @@
  * @author KalmerE.
  * @author Ker
  * @author Kyng
+ * @author Morel
  * @author Oop
  * @author Pikne
  * @author Silvar
@@ -721,7 +722,7 @@ Sinu konto on loodud.
 'gotaccount' => "Kui sul on juba konto, '''$1'''.",
 'gotaccountlink' => 'logi sisse',
 'userlogin-resetlink' => 'Kas oled unustanud oma sisselogimisandmed?',
-'createaccountmail' => 'e-posti teel',
+'createaccountmail' => 'E-posti teel',
 'createaccountreason' => 'Põhjus:',
 'badretype' => 'Sisestatud paroolid ei lange kokku.',
 'userexists' => 'Sisestatud kasutajanimi on juba kasutusel.
@@ -1194,9 +1195,11 @@ Sul ei ole sellele ligipääsu.',
 'revdelete-concurrent-change' => 'Tõrge üksuse kuupäevaga $2, kell $1 muutmisel: paistab, et keegi teine on selle olekut sel ajal muutnud, kui sina seda muuta üritasid.
 Palun vaata logisid.',
 'revdelete-only-restricted' => 'Ei õnnestu varjata üksust seisuga $1, kell $2: Seda üksust ei saa administraatorite eest varjata, valimata seejuures ka ühte muudest nähtavussuvanditest.',
-'revdelete-reason-dropdown' => '*Tavalised kustutamise põhjused
+'revdelete-reason-dropdown' => '*Peamised kustutamise põhjused
 ** Autoriõiguste rikkumine
-** Kohatud eraelulised andmed',
+** Kohatu märkus või isiklik info
+** Kohatu kasutajanimi
+** Potentsiaalne halvustav informatsioon',
 'revdelete-otherreason' => 'Muu või täiendav põhjus:',
 'revdelete-reasonotherlist' => 'Muu põhjus',
 'revdelete-edit-reasonlist' => 'Redigeeri kustutamise põhjuseid',
@@ -2821,8 +2824,8 @@ Viimasel juhul saab kasutada ka linki, näiteks lehekülje "[[{{MediaWiki:Mainpa
 'allmessagesname' => 'Nimi',
 'allmessagesdefault' => 'Vaikimisi tekst',
 'allmessagescurrent' => 'Praegune tekst',
-'allmessagestext' => 'See on loend kõikidest kättesaadavatest süsteemi sõnumitest MediaWiki: nimeruumis.
-Kui soovid MediaWiki tarkvara tõlkimises osaleda siis vaata lehti [//www.mediawiki.org/wiki/Localisation MediaWiki lokaliseerimine] ja [//translatewiki.net translatewiki.net].',
+'allmessagestext' => 'See on loend kõikidest olemasolevatest süsteemisõnumitest MediaWiki nimeruumis.
+Kui soovid MediaWiki tarkvara tõlkimises osaleda, siis vaata lehti [//www.mediawiki.org/wiki/Localisation MediaWiki lokaliseerimine] ja [//translatewiki.net translatewiki.net].',
 'allmessagesnotsupportedDB' => "Seda lehekülge ei saa kasutada, sest '''\$wgUseDatabaseMessages''' ei tööta.",
 'allmessages-filter-legend' => 'Filter',
 'allmessages-filter' => 'Muutmisoleku filter:',
@@ -3047,7 +3050,7 @@ See on ilmselt põhjustatud linkimisest mustas nimekirjas olevasse välisvõrguk
 'pageinfo-authors' => 'Erinevate autorite koguarv',
 'pageinfo-recent-edits' => 'Viimaste redigeerimiste arv (viimase $1 jooksul)',
 'pageinfo-recent-authors' => 'Erinevate viimaste toimetajate arv',
-'pageinfo-restriction' => 'Lehekülje kaitse (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Lehekülje kaitse ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Võlusõna|Võlusõnad}} ($1)',
 'pageinfo-hidden-categories' => 'Peidetud {{PLURAL:$1|kategooria|kategooriad}} ($1)',
 'pageinfo-templates' => 'Kasutatud {{PLURAL:$1|mall|mallid}} ($1)',
index fde8589..d563bf1 100644 (file)
@@ -980,9 +980,10 @@ Ezin duzu atzitu.',
 'revdelete-concurrent-change' => 'Errorea, $1 $2 data duen elementua aldatzean: badirudi haren egoera aldatu duela nor edo nork, zu aldatzen saiatzen ari zinela.
 Begira itzazu erregistroak.',
 'revdelete-reason-dropdown' => '*Ezabatzeko ohiko arrazoiak
-**Egile eskubideen urraketa
-**Informazio pertsonal desegokia
-**Iraingarria izan daitekeen informazioa',
+** Egile eskubideen urraketa
+** Informazio pertsonal edo iruzkin desegokia
+** Lankide izen desegokia
+** Iraingarria izan daitekeen informazioa',
 'revdelete-otherreason' => 'Bestelako arrazoia:',
 'revdelete-reasonotherlist' => 'Beste arrazoi bat',
 'revdelete-edit-reasonlist' => 'Ezabaketa arrazoiak aldatu',
index 6cf366f..775a1ba 100644 (file)
@@ -432,37 +432,37 @@ $imageFiles = array(
 
 $messages = array(
 # User preference toggles
-'tog-underline' => 'زÛ\8cر Ù¾Û\8cÙ\88Ù\86دÙ\87ا Ø®Ø· Ú©Ø´Û\8cدÙ\87 Ø´Ù\88د',
+'tog-underline' => 'خط Ú©Ø´Û\8cدÙ\86 Ø²Û\8cر Ù¾Û\8cÙ\88Ù\86دÙ\87ا:',
 'tog-justify' => 'بندها تمام‌چین نمایش یابند',
 'tog-hideminor' => 'تغییرات جزئی از فهرست تغییرات اخیر پنهان شوند',
 'tog-hidepatrolled' => 'ویرایش‌های گشت‌خورده از فهرست تغییرات اخیر پنهان شوند',
 'tog-newpageshidepatrolled' => 'صفحه‌های نهگبانی‌شده از فهرست صفحه‌های تازه پنهان شوند',
 'tog-extendwatchlist' => 'گسترش فهرست پی‌گیری‌ها برای نمایش همهٔ تغییرات، نه فقط آخرین‌ها',
-'tog-usenewrc' => 'گروه تغییرات بر پایه صفحه در تغییرات اخیر و فهرست پیگیری‌ها (نیازمند جاوااسکریپت)',
+'tog-usenewrc' => 'گروه‌بندی تغییرات بر پایه صفحه در تغییرات اخیر و فهرست پیگیری‌ها (نیازمند جاوااسکریپت)',
 'tog-numberheadings' => 'شماره‌گذاری خودکار عنوان‌ها',
 'tog-showtoolbar' => 'نوار ابزار جعبهٔ ویرایش نمایش یابد (نیازمند جاوااسکریپت)',
 'tog-editondblclick' => 'ویرایش صفحه‌ها با دوکلیک (نیازمند جاوااسکریپت)',
 'tog-editsection' => 'ویرایش بخش‌ها از طریق پیوندهای [ویرایش] فعال باشد',
-'tog-editsectiononrightclick' => 'ویرایش بخش‌ها با کلیک راست روی عنوان‌های بخش‌ها فعال باشد (نیازمند جاوااسکریپت)',
+'tog-editsectiononrightclick' => 'امکان ویرایش بخش‌ها با کلیک راست روی عنوان‌های بخش (نیازمند جاوااسکریپت)',
 'tog-showtoc' => 'فهرست مندرجات نمایش یابد (برای صفحه‌های دارای بیش از ۳ عنوان)',
-'tog-rememberpassword' => 'گذرواژهٔ من (حداکثر $1 روز) در این مرورگر به خاطر سپرده شود',
-'tog-watchcreations' => 'صفحه‌هایی که می‌سازم و پرونده‌هایی را که بارگذاری می‌کنم به فهرست پی‌گیری‌هایم افزوده شود',
-'tog-watchdefault' => 'صفحه‌ها و پرونده‌هایی را که ویرایش می‌کنم به فهرست پی‌گیری‌هایم افزوده شود',
-'tog-watchmoves' => 'صفحه‌ها و پرونده‌هایی را که منتقل می‌کنم به فهرست پی‌گیری‌هایم افزوده شود',
-'tog-watchdeletion' => 'صفحه‌ها و پرونده‌هایی را که حذف می‌کنم به فهرست پی‌گیری‌هایم افزوده شود',
+'tog-rememberpassword' => 'گذرواژهٔ من (حداکثر $1 {{PLURAL:$1|روز|روز}}) در این مرورگر به خاطر سپرده شود',
+'tog-watchcreations' => 'صفحه‌هایی که می‌سازم و پرونده‌هایی که بارگذاری می‌کنم به فهرست پی‌گیری‌هایم افزوده شود',
+'tog-watchdefault' => 'صفحه‌ها و پرونده‌هایی که ویرایش می‌کنم به فهرست پی‌گیری‌هایم افزوده شود',
+'tog-watchmoves' => 'صفحه‌ها و پرونده‌هایی که منتقل می‌کنم به فهرست پی‌گیری‌هایم افزوده شود',
+'tog-watchdeletion' => 'صفحه‌ها و پرونده‌هایی که حذف می‌کنم به فهرست پی‌گیری‌هایم افزوده شود',
 'tog-minordefault' => 'همهٔ ویرایش‌ها به طور پیش‌فرض به عنوان «جزئی» علامت بخورد',
 'tog-previewontop' => 'پیش‌نمایش قبل از جعبهٔ ویرایش نمایش یابد',
 'tog-previewonfirst' => 'پیش‌نمایش هنگام اولین ویرایش نمایش یابد',
 'tog-nocache' => 'حافظهٔ نهانی مرورگر از کار انداخته شود',
-'tog-enotifwatchlistpages' => 'اگر صفحه یا پرونده‌ای از فهرست پی‌گیری‌هایم ویرایش شد برای من نامه‌ای فرستاده شود',
-'tog-enotifusertalkpages' => 'هنگامی که در صفحهٔ بحث کاربری‌ام تغییری صورت می‌گیرد به من رایانامه فرستاده شود',
+'tog-enotifwatchlistpages' => 'اگر صفحه یا پرونده‌ای از فهرست پی‌گیری‌هایم ویرایش شد به من نامه‌ای فرستاده شود',
+'tog-enotifusertalkpages' => 'هنگامی که در صفحهٔ بحث کاربری‌ام تغییری صورت می‌گیرد به من نامه‌ای فرستاده شود',
 'tog-enotifminoredits' => 'برای تغییرات جزئی در صفحه‌ها و پرونده‌ها هم به من نامه‌ای فرستاده شود',
 'tog-enotifrevealaddr' => 'نشانی رایانامهٔ من در رایانامه‌های اطلاع‌رسانی نمایش یابد',
 'tog-shownumberswatching' => 'شمار کاربران پی‌گیری‌کننده نمایش یابد',
 'tog-oldsig' => 'امضای کنونی:',
 'tog-fancysig' => 'امضا به صورت ویکی‌متن در نظر گرفته شود (بدون درج خودکار پیوند)',
-'tog-externaleditor' => 'استفاده از ویرایشگر خارجی به‌طور پیش‌فرض (فقط برای کاربران پیشرفته. نیازمند تنظیمات ویژه در رایانهٔ‌تان است. [//www.mediawiki.org/wiki/Manual:External_editors اطلاعات بیشتر].)',
-'tog-externaldiff' => 'استفاده از تفاوت‌گیر (diff) خارجی به‌طور پیش‌فرض (فقط برای کاربران پیشرفته. نیازمند تنظیمات ویژه در رایانهٔ‌تان است. [//www.mediawiki.org/wiki/Manual:External_editors اطلاعات بیشتر].)',
+'tog-externaleditor' => 'استفاده از ویرایشگر خارجی به‌طور پیش‌فرض (فقط برای کاربران حرفه‌ای؛ نیازمند تنظیمات ویژه در رایانهٔ شما است. [//www.mediawiki.org/wiki/Manual:External_editors اطلاعات بیشتر].)',
+'tog-externaldiff' => 'استفاده از تفاوت‌گیر (diff) خارجی به‌طور پیش‌فرض (فقط برای کاربران حرفه‌ای؛ نیازمند تنظیمات ویژه در رایانهٔ شما است. [//www.mediawiki.org/wiki/Manual:External_editors اطلاعات بیشتر].)',
 'tog-showjumplinks' => 'پیوندهای دسترسی‌پذیری «پرش به» فعال باشد',
 'tog-uselivepreview' => 'استفاده از پیش‌نمایش زنده (نیازمند جاوااسکریپت) (آزمایشی)',
 'tog-forceeditsummary' => 'هنگامی که خلاصهٔ ویرایش ننوشته‌ام به من اطلاع داده شود',
@@ -576,7 +576,7 @@ $messages = array(
 'qbbrowse' => 'مرور',
 'qbedit' => 'ویرایش',
 'qbpageoptions' => 'این صفحه',
-'qbpageinfo' => 'بافت',
+'qbpageinfo' => 'محتوا',
 'qbmyoptions' => 'صفحه‌های من',
 'qbspecialpages' => 'صفحه‌های ویژه',
 'faq' => 'پرسش‌های متداول',
@@ -757,27 +757,27 @@ $1',
 'dberrortext' => 'اشکال نحوی در درخواست فرستاده شده به پایگاه داده رخ داد.
 دلیل این مشکل می‌تواند ایرادی در نرم‌افزار باشد.
 آخرین درخواست که برای پایگاه داده فرستاد شد این بود:
-<blockquote style="direction:ltr;"><code>$1</code></blockquote>
-این درخواست از درون عملگر «<span class="ltr"><code>$2</code></span>» فرستاده شد.
+<blockquote class="mw-content-ltr"><code>$1</code></blockquote>
+این درخواست از درون عملگر «<span class="mw-content-ltr"><code>$2</code></span>» فرستاده شد.
 پایگاه داده این خطا را بازگرداند:
-<div class="ltr"><samp>$3: $4</samp></div>',
+<div class="mw-content-ltr"><samp>$3: $4</samp></div>',
 'dberrortextcl' => 'اشکال نحوی در درخواست فرستاده شده به پایگاه داده رخ داد.
 آخرین درخواستی که برای پایگاه داده فرستاد شد این بود:
-<div class="ltr">$1</div>
-این درخواست از درون عملگر «<span class="ltr">$2</span>» فرستاده شد.
+<div class="mw-content-ltr">$1</div>
+این درخواست از درون عملگر «<span class="mw-content-ltr">$2</span>» فرستاده شد.
 پایگاه داده این خطا را بازگرداند:
-<div class="ltr">$3: $4</div>',
-'laggedslavemode' => "'''Ù\87شدار:''' ØµÙ\81Ø­Ù\87 Ù\85Ù\85Ú©Ù\86 Ø§Ø³Øª Ø´Ø§Ù\85Ù\84 Ø¨Ù\87â\80\8cرÙ\88زرساÙ\86Û\8câ\80\8cÙ\87اÛ\8c Ø§Ø®Û\8cر Ø±Ø§ نشود.",
+<div class="mw-content-ltr">$3: $4</div>',
+'laggedslavemode' => "'''Ù\87شدار:''' ØµÙ\81Ø­Ù\87 Ù\85Ù\85Ú©Ù\86 Ø§Ø³Øª Ø¨Ù\87â\80\8cرÙ\88زرساÙ\86Û\8câ\80\8cÙ\87اÛ\8c Ø§Ø®Û\8cر Ø±Ø§ Ø´Ø§Ù\85Ù\84 نشود.",
 'readonly' => 'پایگاه داده قفل شد',
 'enterlockreason' => 'دلیلی برای قفل کردن ذکر کنید، که حاوی تقریبی از زمانی باشد که قفل برداشته خواهد شد',
-'readonlytext' => 'پاÛ\8cگاÙ\87 Ø¯Ø§Ø¯Ù\87 Ø¯Ø± Ø­Ø§Ù\84 Ø­Ø§Ø¶Ø± Ø¯Ø± Ø¨Ø±Ø§Ø¨Ø± ØªØºÛ\8cÛ\8cرات Ù\88 Ø§Û\8cجاد ØµÙ\81Ø­Ù\87â\80\8cÙ\87ا Ù\82Ù\81Ù\84 Ø´Ø¯Ù\87â\80\8cاستØ\8c احتمالاً به خاطر بهینه‌سازی و رسیدگی‌های معمول است که پس از آن وضع به حالت عادی بازخواهد گشت.
+'readonlytext' => 'پاÛ\8cگاÙ\87 Ø¯Ø§Ø¯Ù\87 Ø¯Ø± Ø­Ø§Ù\84 Ø­Ø§Ø¶Ø± Ø¯Ø± Ø¨Ø±Ø§Ø¨Ø± ØªØºÛ\8cÛ\8cرات Ù\88 Ø§Û\8cجاد ØµÙ\81Ø­Ù\87â\80\8cÙ\87ا Ù\82Ù\81Ù\84 Ø´Ø¯Ù\87â\80\8cاستØ\9b Ø§Û\8cÙ\86 Ù\88ضعÛ\8cت احتمالاً به خاطر بهینه‌سازی و رسیدگی‌های معمول است که پس از آن وضع به حالت عادی بازخواهد گشت.
 
 مدیری که آن را قفل کرده این توضیح را ارائه کرده‌است: $1',
 'missing-article' => 'پایگاه داده متن صفحهٔ با نام «$1» $2 را که باید پیدا می‌کرد نیافت.
 
 این مشکل معمولاً به علت دنبال‌کردن یک پیوند تفاوت تاریخ‌گذشته یا تاریخچهٔ صفحه‌ای که حذف شده‌است، رخ می‌دهد.
 
-در غیر این صورت ممکن است اشکالی در نرم‌افزار پیدا کرده باشید.
+در غیر این صورت ممکن است اشکالی در نرم‌افزار پیدا کرده باشد.
 لطفاً این مشکل را با ذکر نشانی اینترنتی به یکی از [[Special:ListUsers/sysop|مدیران]] گزارش دهید.',
 'missingarticle-rev' => '(شمارهٔ نسخه: $1)',
 'missingarticle-diff' => '(تفاوت: $1، $2)',
@@ -798,7 +798,7 @@ $1',
 'cannotdelete' => 'امکان حذف صفحه یا تصویر «$1» وجود ندارد.
 ممکن است قبلاً فرد دیگری آن را حذف کرده باشد.',
 'cannotdelete-title' => 'نمی‌توان صفحهٔ «$1» را حذف کرد',
-'delete-hook-aborted' => 'ویرایش توسط قلاب لغو شد.
+'delete-hook-aborted' => 'حذف توسط قلاب لغو شد.
 توضیحی در این مورد داده نشد.',
 'badtitle' => 'عنوان بد',
 'badtitletext' => 'عنوان درخواستی نامعتبر، خالی، یا عنوانی میان‌زبانی یا میان‌ویکی‌ای با پیوند نادرست بود.
@@ -811,15 +811,15 @@ $1',
 تابع: $1<br />
 پرس‌وجو: $2',
 'viewsource' => 'نمایش مبدأ',
-'viewsource-title' => 'Ù\85شاÙ\87دÙ\87Ù\94 Ù\85Ù\86بع برای $1',
+'viewsource-title' => 'Ù\86Ù\85اÛ\8cØ´ Ù\85بدأ برای $1',
 'actionthrottled' => 'جلوی عمل شما گرفته شد',
 'actionthrottledtext' => 'به منظور جلوگیری از انتشار اسپم، اجازه ندارید که چنین عملی را بیش از چند بار در یک مدت زمان کوتاه انجام بدهید.
 لطفاً پس از چند دقیقه دوباره تلاش کنید.',
-'protectedpagetext' => 'اÛ\8cÙ\86 ØµÙ\81Ø­Ù\87 Ø¨Ø±Ø§Û\8c Ø¬Ù\84Ù\88Ú¯Û\8cرÛ\8c Ø§Ø² Ù\88Û\8cراÛ\8cØ´ Ù\82Ù\81Ù\84 شده‌است.',
+'protectedpagetext' => 'اÛ\8cÙ\86 ØµÙ\81Ø­Ù\87 Ø¨Ø±Ø§Û\8c Ø¬Ù\84Ù\88Ú¯Û\8cرÛ\8c Ø§Ø² Ù\88Û\8cراÛ\8cØ´ Ù\85حاÙ\81ظت شده‌است.',
 'viewsourcetext' => 'می‌توانید متن مبدأ این صفحه را مشاهده کنید یا از آن نسخه بردارید:',
 'viewyourtext' => "می‌توانید کد مبدأ '''ویرایش‌هایتان''' در این صفحه را ببینید و کپی کنید:",
-'protectedinterface' => 'اÛ\8cÙ\86 ØµÙ\81Ø­Ù\87 Ø§Ø±Ø§Ø¦Ù\87â\80\8cدÙ\87Ù\86دÙ\87Ù\94 Ù\85تÙ\86Û\8c Ø¨Ø±Ø§Û\8c Ù\88اسط Ú©Ø§Ø±Ø¨Ø± Ø§Û\8cÙ\86 Ù\86رÙ\85â\80\8cاÙ\81زار Ø§Ø³Øª Ù\88 Ø¨Ù\87 Ù\85Ù\86ظÙ\88ر Ù¾Û\8cØ´Ú¯Û\8cرÛ\8c Ø§Ø² Ø®Ø±Ø§Ø¨Ú©Ø§Ø±Û\8c Ù\82Ù\81Ù\84 شده‌است.',
-'editinginterface' => "'''هشدار:''' صفحه‌ای را که ویرایش می‌کنید شامل متنیاست که در واسط کاربر این نرم‌افزار به کار رفته‌است.
+'protectedinterface' => 'اÛ\8cÙ\86 ØµÙ\81Ø­Ù\87 Ø§Ø±Ø§Ø¦Ù\87â\80\8cدÙ\87Ù\86دÙ\87Ù\94 Ù\85تÙ\86Û\8c Ø¨Ø±Ø§Û\8c Ù\88اسط Ú©Ø§Ø±Ø¨Ø± Ø§Û\8cÙ\86 Ù\86رÙ\85â\80\8cاÙ\81زار Ø§Ø³Øª Ù\88 Ø¨Ù\87 Ù\85Ù\86ظÙ\88ر Ù¾Û\8cØ´Ú¯Û\8cرÛ\8c Ø§Ø² Ø®Ø±Ø§Ø¨Ú©Ø§Ø±Û\8c Ù\85حاÙ\81ظت شده‌است.',
+'editinginterface' => "'''هشدار:''' صفحه‌ای را که ویرایش می‌کنید شامل متنی است که در واسط کاربر این نرم‌افزار به کار رفته‌است.
 تغییر این صفحه منجر به تغییر ظاهر واسط کاربر این نرم‌افزار برای دیگر کاربران خواهد شد.
 برای ترجمه لطفاً از [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net] (پروژهٔ ترجمهٔ مدیاویکی) استفاده کنید.",
 'sqlhidden' => '(دستور اس‌کیوال پنهان شده)',
@@ -831,13 +831,13 @@ $2',
 'ns-specialprotected' => 'صفحه‌های ویژه غیر قابل ویرایش هستند.',
 'titleprotected' => "این عنوان توسط [[User:$1|$1]] در برابر ایجاد محافظت شده‌است.
 دلیل ارائه‌شده این است: «''$2''».",
-'filereadonlyerror' => "تغییر پرونده «$1» ممکن نیست چون مخزن پرونده «$2» در حالت فقط خواندنی قرار دارد.
+'filereadonlyerror' => 'تغییر پرونده «$1» ممکن نیست چون مخزن پرونده «$2» در حالت فقط خواندنی قرار دارد.
 
-مدیری که آن را قفل کرده چنین توضیحی را ذکر کرده:  ''$3''.",
+مدیری که آن را قفل کرده چنین توضیحی را ذکر کرده:  «$3».',
 'invalidtitle-knownnamespace' => 'عنوان نامعتبر با فضای نام «$2» و متن «$3»',
 'invalidtitle-unknownnamespace' => 'عنوان نامعتبر با فضای نام ناشناختهٔ شمارهٔ $1 و متن «$2»',
 'exception-nologin' => 'به سامانه وارد نشده‌اید',
-'exception-nologin-text' => 'در Ø§Û\8cÙ\86 Ù\88Û\8cÚ©Û\8c Ø§Ù\86جاÙ\85 Ø§Û\8cÙ\86 Ø¹Ù\85Ù\84 نیازمند وارد شدن به سیستم  است.',
+'exception-nologin-text' => 'دسترسÛ\8c Ø¨Ù\87 Ø§Û\8cÙ\86 ØµÙ\81Ø­Ù\87 Û\8cا Ø§Ù\86جاÙ\85 Ø§Û\8cÙ\86 Ø¹Ù\85Ù\84 Ø¯Ø± Ø§Û\8cÙ\86 Ù\88Û\8cÚ©Û\8c نیازمند وارد شدن به سیستم  است.',
 
 # Virus scanner
 'virus-badscanner' => "پیکربندی بد: پویشگر ویروس ناشناخته: ''$1''",
@@ -1382,7 +1382,8 @@ $1",
 'revdelete-only-restricted' => 'خطا در پنهان کردن مورد مورخ $2 ساعت $1: شما نمی‌توانید موارد را از دید مدیران پنهان کنید مگر آن که یکی دیگر از گزینه‌های پنهان‌سازی را نیز انتخاب کنید.',
 'revdelete-reason-dropdown' => '*دلایل متداول حذف
 ** نقض حق تکثیر
-** اطلاعات فردی نامناسب
+** اظهار نظر یا اطلاعات فردی نامناسب
+** نام کاربری نامناسب
 ** اطلاعات به طور بالقوه افتراآمیز',
 'revdelete-otherreason' => 'دلیل دیگر/اضافی:',
 'revdelete-reasonotherlist' => 'دلیل دیگر',
@@ -2008,7 +2009,7 @@ $1',
 'backend-fail-internal' => 'خطایی نامعلوم در پشتیبان ذخیره «$1» رخ داد.',
 'backend-fail-contenttype' => 'تعیین نوع محتوای پرونده برای ذخیره در «$1» ناموفق بود.',
 'backend-fail-batchsize' => 'دسته‌ای مشتمل بر $1 {{PLURAL:$1|عملکرد|عملکرد}} پرونده به پشتیبان ذخیره داده شد؛ حداکثر مجاز $2 {{PLURAL:$2|عملکرد|عملکرد}} است.',
-'backend-fail-usable' => 'امکان نوشتن در پروندهٔ $1 وجود نداشت چرا که سطح دسترسی کافی نیست یا شاخه مورد نظر وجود ندارد.',
+'backend-fail-usable' => 'امکان خواندن یا نوشتن پروندهٔ $1 وجود نداشت چرا که سطح دسترسی کافی نیست یا شاخه/محفظهٔ مورد نظر وجود ندارد.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'امکان وصل شدن به پایگاه داده دفترخانه برای پشتیبان ذخیره‌سازی «$1» وجود نداشت.',
@@ -3232,8 +3233,8 @@ $1',
 
 # Spam protection
 'spamprotectiontitle' => 'پالایهٔ هرزنگاری‌ها',
-'spamprotectiontext' => 'از ذخیره کردن صفحه توسط صافی هرزنگاری‌ها جلوگیری شد.
\85عÙ\85Ù\88Ù\84اÙ\8b Ø§Û\8cÙ\86 Ø§ØªÙ\81اÙ\82 Ø²Ù\85اÙ\86Û\8c Ù\85Û\8câ\80\8cاÙ\81تد Ú©Ù\87 Ù\85تÙ\86 Ø¬Ø¯Û\8cد ØµÙ\81Ø­Ù\87Ø\8c Ø­Ø§Ù\88Û\8c Ù¾Û\8cÙ\88Ù\86دÛ\8c Ø¨Ù\87 Û\8cÚ© Ù\86شاÙ\86Û\8c Ù\88ب Ø®Ø§Ø±Ø¬Û\8c Ø¨Ø§Ø´د.',
+'spamprotectiontext' => 'از ذخیره کردن صفحه توسط پالایهٔ هرزنگاری‌ها جلوگیری شد.
\85عÙ\85Ù\88Ù\84اÙ\8b Ø§Û\8cÙ\86 Ø§ØªÙ\81اÙ\82 Ø²Ù\85اÙ\86Û\8c Ù\85Û\8câ\80\8cاÙ\81تد Ú©Ù\87 Ù\85تÙ\86 Ø¬Ø¯Û\8cد ØµÙ\81Ø­Ù\87Ø\8c Ø­Ø§Ù\88Û\8c Ù¾Û\8cÙ\88Ù\86دÛ\8c Ø¨Ù\87 Û\8cÚ© Ù\86شاÙ\86Û\8c Ù\88ب Ø¨Ø§Ø´Ø¯ Ú©Ù\87 Ø¯Ø± Ù\81Ù\87رست Ø³Û\8cاÙ\87 Ù\82رار Ø¯Ø§Ø±د.',
 'spamprotectionmatch' => 'متن زیر چیزی‌است که پالایهٔ هرزه‌نگاری ما را به کارانداخت: $1',
 'spambot_username' => 'هرزه‌تمیزکارِ مدیاویکی',
 'spam_reverting' => 'واگردانی به آخرین نسخه‌ای که پیوندی به $1 ندارد.',
@@ -3266,7 +3267,7 @@ $1',
 'pageinfo-authors' => 'تعداد کلی نویسندگان یکتا',
 'pageinfo-recent-edits' => 'شماره ویرایش‌های اخیر (در $1 گذشته)',
 'pageinfo-recent-authors' => 'تعداد نویسندگان یکتای اخیر',
-'pageinfo-restriction' => 'محافظت صفحه ( <code>{{lcfirst:$1}}</code> )',
+'pageinfo-restriction' => 'محافظت صفحه ( {{lcfirst:$1}} )',
 'pageinfo-magic-words' => '{{PLURAL:$1|حرف|حروف}} جادویی ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1| ردهٔ|ردهٔ}} پنهان ( $1 )',
 'pageinfo-templates' => '{{PLURAL:$1|الگو|الگو}} استفاده‌شده ($1)',
@@ -3905,7 +3906,7 @@ $5
 'size-gigabytes' => '$1 گیگابایت',
 
 # Live preview
-'livepreview-loading' => 'در حال بارشدن…',
+'livepreview-loading' => 'در حال بارگیری…',
 'livepreview-ready' => 'بارشدن… آماده!',
 'livepreview-failed' => 'پیش‌نمایش زنده به مشکل برخورد! لطفاً از پیش‌نمایش عادی استفاده کنید',
 'livepreview-error' => 'ارتباط به مشکل برخورد: $1 "$2" از پیش‌نمایش عادی استفاده کنید.',
index 75754eb..d2f5e76 100644 (file)
@@ -969,7 +969,6 @@ Alla on viimeisin estolokin tapahtuma:',
 * '''Firefox ja Safari:''' Napsauta ''Shift''-näppäin pohjassa ''Päivitä'' tai paina ''Ctrl-F5'' tai ''Ctrl-R'' (''⌘-R'' Macilla)
 * '''Google Chrome:''' Paina ''Ctrl-Shift-R'' (''⌘-Shift-R'' Macilla)
 * '''Internet Explorer:''' Napsauta ''Ctrl''-näppäin pohjassa ''Päivitä'' tai paina ''Ctrl-F5''
-* '''Konqueror''': Napsauta ''Päivitä'' tai paina ''F5''
 * '''Opera:''' Tyhjennä välimuisti: ''Tools→Preferences''",
 'usercssyoucanpreview' => 'Voit testata uutta CSS:ää ennen tallennusta käyttämällä painiketta ”{{int:showpreview}}”.',
 'userjsyoucanpreview' => 'Voit testata uutta JavaScriptiä ennen tallennusta käyttämällä painiketta ”{{int:showpreview}}”.',
@@ -1119,7 +1118,7 @@ Kokeile [[Special:Search|hakua]] löytääksesi asiaan liittyviä sivuja.',
 'rev-deleted-comment' => '(muokkausyhteenveto poistettu)',
 'rev-deleted-user' => '(käyttäjänimi poistettu)',
 'rev-deleted-event' => '(lokitapahtuma poistettu)',
-'rev-deleted-user-contribs' => '[käyttäjänimi tai IP-osoite poistettu – muokkaus piilotettu muokkauksista]',
+'rev-deleted-user-contribs' => '[käyttäjätunnus tai IP-osoite poistettu – muokkaus on piilotettu muokkausluettelosta]',
 'rev-deleted-text-permission' => "Tämä versio sivusta on '''poistettu'''.
 Lisätietoja löytyy [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} poistolokista].",
 'rev-deleted-text-unhide' => "Tämä versio sivusta on '''poistettu'''.
@@ -1521,7 +1520,7 @@ Tässä satunnaisesti tuotettu arvo, jota voit käyttää: $1',
 'right-writeapi' => 'Käyttää kirjoitus-APIa',
 'right-delete' => 'Poistaa sivuja',
 'right-bigdelete' => 'Poistaa sivuja, joilla on pitkä historia',
-'right-deletelogentry' => 'Poista ja palauta tiettyjä lokimerkintöjä',
+'right-deletelogentry' => 'Poistaa ja palauttaa tiettyjä lokimerkintöjä',
 'right-deleterevision' => 'Poistaa ja palauttaa sivujen versioita',
 'right-deletedhistory' => 'Tarkastella poistettuja versiotietoja ilman niihin liittyvää sisältöä',
 'right-deletedtext' => 'Tarkastella poistettujen sivujen tekstiä ja muutoksia poistettujen versioiden välillä',
index 5b1f34a..3a176a9 100644 (file)
@@ -55,6 +55,7 @@
  * @author Meithal
  * @author Moyg
  * @author Nicolas Raoul
+ * @author Nnemo
  * @author Od1n
  * @author Omnipaedista
  * @author Peter17
@@ -750,8 +751,10 @@ Essayez à nouveau dans quelques minutes.',
 'protectedpagetext' => 'Cette page a été protégée pour empêcher sa modification.',
 'viewsourcetext' => 'Vous pouvez voir et copier le contenu de la page :',
 'viewyourtext' => "Vous pouvez voir et copier le contenu de '''vos modifications''' à cette page :",
-'protectedinterface' => 'Cette page fournit du texte d’interface pour le logiciel et est protégée pour éviter les abus.',
-'editinginterface' => "'''Attention :''' vous êtes en train de modifier une page utilisée pour créer le texte de l’interface du logiciel. Les changements se répercuteront, selon le contexte, sur toutes ou certaines pages visibles par les autres utilisateurs. Pour les traductions, nous vous invitons à utiliser le projet MediaWiki d’internationalisation des messages [//translatewiki.net/wiki/Main_Page?setlang=fr translatewiki.net].",
+'protectedinterface' => 'Cette page fournit du texte d’interface pour le logiciel sur ce wiki, et est protégée pour éviter les abus.
+Pour ajouter ou modifier des traductions sur tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet de localisation de MediaWiki.',
+'editinginterface' => "'''Attention''': Vous êtes en train de modifier une page utilisée pour créer le texte de l’interface du logiciel. Les changements sur cette page se répercuteront dur l'apparence de l'interface utilisateur pour les autres utilisateurs de ce wiki.
+Pour ajouter ou modifier des traductions pour tous les wikis, veuillez utiliser [//translatewiki.net/ translatewiki.net], le projet d’internationalisation de MediaWiki.",
 'sqlhidden' => '(Requête SQL cachée)',
 'cascadeprotected' => 'Cette page est protégée car elle est incluse par {{PLURAL:$1|la page suivante, qui a été protégée|les pages suivantes, qui ont été protégées}} avec l’option « protection en cascade » activée :
 $2',
@@ -783,10 +786,10 @@ Notez que certaines pages peuvent être encore affichées comme si vous étiez t
 
 Votre compte a été créé.
 N’oubliez pas de personnaliser vos [[Special:Preferences|préférences sur {{SITENAME}}]].',
-'yourname' => 'Nom d’utilisateur :',
-'yourpassword' => 'Mot de passe :',
+'yourname' => 'Nom d’utilisateur&nbsp;:',
+'yourpassword' => 'Mot de passe&nbsp;:',
 'yourpasswordagain' => 'Confirmez le mot de passe :',
-'remembermypassword' => 'Me reconnecter automatiquement aux prochaines visites avec ce navigateur (au maximum $1 {{PLURAL:$1|jour|jours}})',
+'remembermypassword' => 'Me reconnecter automatiquement aux prochaines visites avec ce navigateur (au maximum $1&nbsp;{{PLURAL:$1|jour|jours}})',
 'securelogin-stick-https' => 'Rester connecté en HTTPS après la connexion',
 'yourdomainname' => 'Votre domaine :',
 'password-change-forbidden' => 'Vous ne pouvez pas modifier les mots de passe sur ce wiki.',
@@ -818,7 +821,7 @@ Veuillez choisir un nom différent.',
 Vérifiez que vous avez activé les cookies, rechargez la page et réessayez.',
 'noname' => 'Vous n’avez pas saisi un nom d’utilisateur valide.',
 'loginsuccesstitle' => 'Connexion réussie',
-'loginsuccess' => 'Vous êtes maintenant connecté{{GENDER:$1||e|(e)}} à {{SITENAME}} en tant que « $1 ».',
+'loginsuccess' => 'Vous êtes maintenant connecté{{GENDER:$1||e|(e)}} à {{SITENAME}} en tant que « $1 ».',
 'nosuchuser' => 'L’utilisateur « $1 » n’existe pas.
 Les noms d’utilisateurs sont sensibles à la casse.
 Vérifiez l’orthographe, ou [[Special:UserLogin/signup|créez un nouveau compte]].',
@@ -1284,7 +1287,7 @@ Vérifiez les journaux.',
 'revdelete-only-restricted' => 'Erreur lors de la suppression de l’entrée datée du $1 à $2 : vous ne pouvez pas supprimer ces éléments aux administrateurs sans également sélectionner des autres options de suppression.',
 'revdelete-reason-dropdown' => '* Raisons courantes de suppression :
 ** Violation des droits d’auteurs ;
-** Renseignements personnels inappropriés ;
+** Commentaires ou renseignements personnels inappropriés ;
 ** Informations potentiellement diffamatoires.',
 'revdelete-otherreason' => 'Autre raison / raison supplémentaire :',
 'revdelete-reasonotherlist' => 'Autre raison',
@@ -1749,9 +1752,9 @@ Le journal des suppressions et celui des déplacements de cette page sont affich
 'uploadtext' => "Utilisez ce formulaire pour importer des fichiers sur le serveur.
 Pour voir ou rechercher des images précédemment envoyées, consultez la [[Special:FileList|liste des images]]. L’import est aussi enregistrés dans le [[Special:Log/upload|journal d'import des fichiers]], et les suppressions dans le [[Special:Log/delete|journal des suppressions]].
 
-Pour inclure un fichier dans une page, utilisez un lien de la forme :
-* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:fichier.jpg]]</nowiki></code>''', pour afficher le fichier en pleine résolution (dans le cas d’une image) ;
-* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:fichier.png|200px|thumb|left|texte descriptif]]</nowiki></code>''' pour utiliser une miniature de 200 pixels de large dans une boîte à gauche avec « texte descriptif » comme description ;
+Pour inclure un fichier dans une page, utilisez un lien de la forme :
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:fichier.jpg]]</nowiki></code>''', pour afficher le fichier en pleine résolution (dans le cas d’une image) ;
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:fichier.png|200px|thumb|left|texte descriptif]]</nowiki></code>''' pour utiliser une miniature de 200 pixels de large dans une boîte à gauche avec « texte descriptif » comme description ;
 * '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:fichier.ogg]]</nowiki></code>''' pour lier directement vers le fichier sans l’afficher.",
 'upload-permitted' => 'Formats de fichiers autorisés : $1.',
 'upload-preferred' => 'Formats de fichiers préférés : $1.',
@@ -1906,7 +1909,7 @@ Si le problème persiste, contactez un [[Special:ListUsers/sysop|administrateur]
 'backend-fail-internal' => 'Une erreur inconnue s\'est produite dans le support de stockage "$1".',
 'backend-fail-contenttype' => 'Impossible de déterminer le type de contenu du fichier à stocker en "$1".',
 'backend-fail-batchsize' => 'Le support de stockage a fourni un lot de $1 {{PLURAL:$1|opération|opérations}} de fichier; la limite est $2 {{PLURAL:$2|opération|opérations}}.',
-'backend-fail-usable' => 'Impossible d’écrire le fichier $1 en raison de droits insuffisants ou répertoires/conteneurs manquants.',
+'backend-fail-usable' => 'Impossible de lire ou d’écrire le fichier « $1 » en raison de droits insuffisants ou répertoires/conteneurs manquants.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Impossible de se connecter à la base de données du journal pour le terminal de stockage "$1".',
@@ -3181,7 +3184,7 @@ Permet de rétablir la version précédente et d’ajouter un motif dans la boî
 'pageinfo-authors' => "Nombre total d'auteurs distincts",
 'pageinfo-recent-edits' => 'Nombre de modifications récentes (dans les derniers $1)',
 'pageinfo-recent-authors' => "Nombre d'auteurs distincts récents",
-'pageinfo-restriction' => 'Protection de la page (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Protection de la page ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Mot magique|Mots magiques}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Catégorie cachée|Catégories cachées}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Modèle inclu|Modèles inclus}} ($1)',
@@ -3957,7 +3960,7 @@ Vous devriez avoir reçu [{{SERVER}}{{SCRIPTPATH}}/COPYING une copie de la Licen
 'version-software' => 'Logiciels installés',
 'version-software-product' => 'Produit',
 'version-software-version' => 'Version',
-'version-entrypoints' => 'URL de point d’entrée',
+'version-entrypoints' => 'URL des points d’entrée',
 'version-entrypoints-header-entrypoint' => "Point d'entrée",
 'version-entrypoints-header-url' => 'URL',
 'version-entrypoints-articlepath' => '[https://www.mediawiki.org/wiki/Manual:$wgArticlePath Chemin d\'article]',
@@ -4088,8 +4091,8 @@ Les images sont montrées dans leur pleine résolution, les autres fichiers sont
 'logentry-move-move-noredirect' => '$1 a déplacé la page $3 vers $4 sans laisser de redirection',
 'logentry-move-move_redir' => '$1 a déplacé la page $3 vers $4 par-dessus une redirection',
 'logentry-move-move_redir-noredirect' => '$1 a déplacé la page $3 vers $4 par-dessus une redirection sans laisser de redirection',
-'logentry-patrol-patrol' => '$1 a marqué la révision $4 de la page $3 comme contrôlée',
-'logentry-patrol-patrol-auto' => '$1 a automatiquement marqué la révision $4 de la page $3 comme contrôlée',
+'logentry-patrol-patrol' => '$1 a marqué la révision $4 de la page $3 comme relue',
+'logentry-patrol-patrol-auto' => '$1 a automatiquement marqué la révision $4 de la page $3 comme relue',
 'logentry-newusers-newusers' => '$1 a créé un compte utilisateur',
 'logentry-newusers-create' => '$1 a créé son compte utilisateur',
 'logentry-newusers-create2' => '$1 a créé un compte utilisateur $3',
index 83428da..bc04e17 100644 (file)
@@ -602,10 +602,11 @@ Inténteo de novo nuns minutos.",
 'protectedpagetext' => 'Esta páxina foi protexida para evitar a edición.',
 'viewsourcetext' => 'Pode ver e copiar o código fonte desta páxina:',
 'viewyourtext' => "Pode ver e copiar o código fonte '''das súas edicións''' nesta páxina:",
-'protectedinterface' => 'Esta páxina fornece o texto da interface do software e está protexida para evitar o seu abuso.',
+'protectedinterface' => 'Esta páxina fornece o texto da interface do software e está protexida para evitar o seu abuso.
+Para engadir ou modificar as traducións en todos os wikis utilice [//translatewiki.net/wiki/Main_Page?setlang=gl translatewiki.net], o proxecto de localización de MediaWiki.',
 'editinginterface' => "'''Aviso:''' Está editando unha páxina usada para fornecer o texto da interface do software.
-Os cambios nesta páxina afectarán á aparencia da interface para os outros usuarios.
-Para realizar traducións, considere usar [//translatewiki.net/wiki/Main_Page?setlang=gl translatewiki.net], o proxecto de localización de MediaWiki.",
+Os cambios nesta páxina afectarán á aparencia da interface dos outros usuarios do wiki.
+Para engadir ou modificar as traducións en todos os wikis utilice [//translatewiki.net/wiki/Main_Page?setlang=gl translatewiki.net], o proxecto de localización de MediaWiki.",
 'sqlhidden' => '(Procura SQL agochada)',
 'cascadeprotected' => 'Esta páxina foi protexida fronte á edición debido a que está incluída {{PLURAL:$1|na seguinte páxina protexida, que ten|nas seguintes páxinas protexidas, que teñen}} a "protección en serie" activada:
 $2',
@@ -899,8 +900,7 @@ Pode [[Special:Search/{{PAGENAME}}|procurar polo título desta páxina]] noutras
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ollar os rexistros relacionados]
 ou [{{fullurl:{{FULLPAGENAME}}|action=edit}} editar a páxina]</span>.',
 'noarticletext-nopermission' => 'Actualmente non hai ningún texto nesta páxina.
-Pode [[Special:Search/{{PAGENAME}}|procurar polo título desta páxina]] noutras páxinas
-ou <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ollar os rexistros relacionados]</span>.',
+Pode [[Special:Search/{{PAGENAME}}|procurar polo título desta páxina]] noutras páxinas ou <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ollar os rexistros relacionados]</span>, pero non ten os permisos necesarios para crear esta páxina.',
 'missing-revision' => 'A revisión nº$1 da páxina chamada "{{PAGENAME}}" non existe.
 
 A miúdo, isto está provocado por seguir unha ligazón de historial obsoleta cara a unha páxina que foi borrada.
@@ -1168,8 +1168,10 @@ Non ten acceso a el.',
 Por favor, comprobe os rexistros.',
 'revdelete-only-restricted' => 'Erro ao agochar o elemento con data do $1 ás $2: Non pode eliminar elementos da vista dos administradores sen tamén seleccionar algunha das outras opcións de visibilidade.',
 'revdelete-reason-dropdown' => '* Motivos frecuentes para borrar
-** Violación dos dereitos de autor
-** Información persoal inapropiada',
+** Violación dos dereitos de autoría
+** Comentario inapropiado ou información persoal
+** Nome de usuario inapropiado
+** Información potencialmente difamatoria',
 'revdelete-otherreason' => 'Outro motivo:',
 'revdelete-reasonotherlist' => 'Outro motivo',
 'revdelete-edit-reasonlist' => 'Editar os motivos de borrado',
@@ -1366,7 +1368,7 @@ Velaquí un valor xerado ao chou que pode usar: $1',
 'timezoneregion-indian' => 'Océano Índico',
 'timezoneregion-pacific' => 'Océano Pacífico',
 'allowemail' => 'Admitir mensaxes de correo electrónico doutros usuarios',
-'prefs-searchoptions' => 'Opcións de procura',
+'prefs-searchoptions' => 'Procura',
 'prefs-namespaces' => 'Espazos de nomes',
 'defaultns' => 'Se non, procurar nestes espazos de nomes:',
 'default' => 'predeterminado',
@@ -1628,7 +1630,7 @@ As páxinas da súa [[Special:Watchlist|lista de vixilancia]] aparecen en '''neg
 'uploadnologin' => 'Non accedeu ao sistema',
 'uploadnologintext' => 'Debe [[Special:UserLogin|acceder ao sistema]] para poder cargar ficheiros.',
 'upload_directory_missing' => 'Falta o directorio de carga ($1) e non pode ser creado polo servidor da páxina web.',
-'upload_directory_read_only' => 'Non se pode escribir no directorio de subida ($1) do servidor web.',
+'upload_directory_read_only' => 'O servidor web non pode escribir no directorio de carga ($1).',
 'uploaderror' => 'Erro ao cargar',
 'upload-recreate-warning' => "'''Atención: Borrouse ou trasladouse un ficheiro con ese nome.'''
 
@@ -1686,7 +1688,7 @@ Por favor, cambie o nome do ficheiro e intente cargalo de novo.',
 Isto pode deberse a un erro ortográfico no seu nome.
 Por favor, verifique se realmente quere cargar este ficheiro.',
 'windows-nonascii-filename' => 'Este wiki non soporta os nomes de ficheiros con caracteres especiais.',
-'fileexists' => 'Xa existe un ficheiro con ese nome. Por favor, comprobe <strong>[[:$1]]</strong> se non está seguro de querer cambialo.
+'fileexists' => 'Xa existe un ficheiro con ese nome. Por favor, comprobe "<strong>[[:$1]]</strong>" se non está seguro de querer cambialo.
 [[$1|thumb]]',
 'filepageexists' => 'A páxina de descrición deste ficheiro xa foi creada en <strong>[[:$1]]</strong>, pero polo de agora non existe ningún ficheiro con este nome.
 O resumo que escribiu non aparecerá na páxina de descrición.
@@ -1797,7 +1799,7 @@ Se o problema persiste, póñase en contacto cun [[Special:ListUsers/sysop|admin
 'backend-fail-internal' => 'Houbo un erro descoñecido no sistema de almacenamento "$1".',
 'backend-fail-contenttype' => 'Non se puido determinar o tipo de contido do ficheiro a almacenar en "$1".',
 'backend-fail-batchsize' => 'O sistema de almacenamento recibiu un feixe de $1 {{PLURAL:$1|operación|operacións}} de ficheiro; o límite está en $2 {{PLURAL:$2|operación|operacións}}.',
-'backend-fail-usable' => 'Non se puido escribir o ficheiro "$1" debido a que os permisos son insuficientes ou faltan os directorios/contenedores.',
+'backend-fail-usable' => 'Non se puido ler ou escribir o ficheiro "$1" debido a que os permisos son insuficientes ou faltan os directorios/contenedores.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Non se pode conectar coa base de datos do rexistro do sistema de almacenamento "$1".',
@@ -3073,7 +3075,7 @@ Isto, probabelmente, se debe a unha ligazón cara a un sitio externo que está n
 'pageinfo-authors' => 'Número total de autores distintos',
 'pageinfo-recent-edits' => 'Número de edicións recentes (durante os últimos $1)',
 'pageinfo-recent-authors' => 'Número de autores distintos recentes',
-'pageinfo-restriction' => 'Protección da páxina (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Protección da páxina ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Palabra máxica|Palabras máxicas}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoría agochada|Categorías agochadas}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Modelo incluído|Modelos incluídos}} ($1)',
index 271cb56..d1a0703 100644 (file)
@@ -140,7 +140,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Vum Fäldhieter aagluegti Änderige in dr „Letschte Änderige“ usblände',
 'tog-newpageshidepatrolled' => 'Aagluegti Syten uf dr Lischt „Neiji Syte“ verstecke',
 'tog-extendwatchlist' => 'Beobachtungslischte erwytere go alli Änderige aazeige, nit numme di letschte',
-'tog-usenewrc' => 'Erwytereti «letschti Änderige» (brucht JavaScript)',
+'tog-usenewrc' => 'Sytebezogeni Gruppierig bi dr «letschte Änderige» un uf dr Beobachtigslischte  (brucht JavaScript)',
 'tog-numberheadings' => 'Überschrifte outomatisch numeriere',
 'tog-showtoolbar' => 'Editier-Wärchzüüg aazeige',
 'tog-editondblclick' => 'Syte ändere mit Doppelklick i d Syte (JavaScript)',
@@ -148,17 +148,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Einzelni Absätz ändere mit Rächtsclick (Javascript)',
 'tog-showtoc' => 'Inhaltsverzeichnis aazeige bi Artikle mit meh als drei Überschrifte',
 'tog-rememberpassword' => 'Mit däm Browser duurhaft aamälde (Maximal fir $1 {{PLURAL:$1|Tag|Täg}})',
-'tog-watchcreations' => 'Sälber gmachti Sytene beobachte',
-'tog-watchdefault' => 'Vo dir nöi gmachti oder verändereti Syte beobachte',
-'tog-watchmoves' => 'Sälber verschobeni Sytene beobachte',
-'tog-watchdeletion' => 'Sälber glöschti Sytene beobachte',
+'tog-watchcreations' => 'Sälber gmachti Sytene un uffegladeni Dateie automatisch  beobachte',
+'tog-watchdefault' => 'Sälber gändereti Syte un Dateie automatisch beobachte',
+'tog-watchmoves' => 'Sälber verschobeni Sytene un Dateie automatisch beobachte',
+'tog-watchdeletion' => 'Sälber gleschti Sytene un Dateie automatisch beobachte',
 'tog-minordefault' => 'Alli dyni Änderigen als «chlyni Änderige» markiere',
 'tog-previewontop' => 'Vorschou vor em Editierfänschter aazeige',
 'tog-previewonfirst' => 'Vorschou aazeige bim erschten Editiere',
 'tog-nocache' => 'Syte-Cache vum Browser deaktiviere',
-'tog-enotifwatchlistpages' => 'Benachrichtigungsmails by Änderigen a Wiki-Syte',
+'tog-enotifwatchlistpages' => 'Schick mer e Mail, wänn e Syte oder e Datei gänderet wird, wun i beobachte due',
 'tog-enotifusertalkpages' => 'Benachrichtigungsmails bi Änderigen a dyne Benutzersyte',
-'tog-enotifminoredits' => 'Benachrichtigungsmail ou bi chlyne Sytenänderige',
+'tog-enotifminoredits' => 'Au bi chlaine Änderige an Syte oder Dateie ne Mail schicke',
 'tog-enotifrevealaddr' => 'Dyni E-Mail-Adrässe wird i Benachrichtigungsmails zeigt',
 'tog-shownumberswatching' => 'Aazahl Benutzer aazeige, wo ne Syten am Aaluege sy (i den Artikelsyte, i de «letschten Änderigen» und i der Beobachtigslischte)',
 'tog-oldsig' => 'Vorschau vu dr Unterschrift:',
@@ -452,9 +452,9 @@ Alli verfiegbare Spezialsyte sin in dr [[Special:SpecialPages|Lischt vu Spezials
 'dberrortext' => 'S isch e Datebankfähler ufträtte.
 Dr Grund cha ne e Programmierfähler syy.
 Di letscht Datebankabfrog isch
-<blockquote><tt>$1</tt></blockquote>
-us dr Funktion „<tt>$2</tt>“ gsi.
-D Datebank het dr Fähler „<tt>$3: $4</tt>“ gmäldet.',
+<blockquote><code>$1</code></blockquote>
+us dr Funktion „<code>$2</code>“ gsi.
+D Datebank het dr Fähler „<samp>$3: $4</samp>“ gmäldet.',
 'dberrortextcl' => 'S het e Syntaxfähler gee in dr Abfrog vu dr Datebank.
 Di letscht Datebankabfrog isch
 „$1“
@@ -543,7 +543,7 @@ Vergiss nid, dyni [[Special:Preferences|{{SITENAME}}-Yystellige]] aazpasse.',
 'yourdomainname' => 'Dyyni Domäne',
 'externaldberror' => 'Entwäder s lit e Fähler bi dr externe Authentifizierung vor, oder Du derfsch Dyy extern Benutzerkonto nid aktualisiere.',
 'login' => 'Aamälde',
-'nav-login-createaccount' => 'Aamälde / Konto aaleege',
+'nav-login-createaccount' => 'Aamälde / Konto aalege',
 'loginprompt' => '<small>Für di bir {{SITENAME}} aazmälde, muesch Cookies erloube!</small>',
 'userlogin' => 'Aamälde/Konto aalege',
 'userloginnocreate' => 'Aamälde',
@@ -783,12 +783,11 @@ oder <span class="plainlinks">in dr zuegherige [{{fullurl:{{#special:Log}}|page=
 'userpage-userdoesnotexist-view' => 'S Benutzerkonto „$1“ isch nit registriert.',
 'blocked-notice-logextract' => 'Dää Benutzer isch zur Zyt gsperrt.
 As Information chunnt do ne aktuälle Uuszug us em Benutzersperr-Logbuech:',
-'clearyourcache' => "'''Hinweis:''' Noch em Spycheremuesch no dr Browser-Zwischespycher lääre go d Änderige sää.
+'clearyourcache' => "'''Hiiwys:''' Noch em Spycheremuesch no dr Browser-Zwischespycher lääre go d Änderige sää.
 * '''Firefox/ Safari:''' ''Umschaltig'' drucken un glychzytig ''Aktualisiere'' aaklicken oder entwäder ''Strg+F5'' oder ''Strg+R'' (''Befehlstaste-R'' uf em Mac) drucke
 * '''Google Chrome:''' ''Umschaltig+Strg+R'' (''Befählstaschte-R'' uf em Mac) drucke
 * '''Internet Explorer:''' ''Strg+F5'' drucken oder ''Strg'' drucken un glychzytig ''Aktualisiere'' aaklicke
-* '''Opera:''' ''Extra → Internetspure lesche … → Individuäll Uuswahl → Dr komplett Cache lesche''
-* '''Konqueror:''' ''Aktualisiere'' aaklicken oder ''F5'' drucke",
+* '''Opera:''' ''Extra → Internetspure lesche … → Individuäll Uuswahl → Dr komplett Cache lesche''",
 'usercssyoucanpreview' => "'''Tipp:''' Nimm dr „{{int:showpreview}}”-Chnopf, zum Dyy nej CSS vor em Spichere z teschte.",
 'userjsyoucanpreview' => "'''Tipp:''' „Nimm dr {{int:showpreview}}”-Chnopf, zum Dyy nej JS vor em Spichere z teschte.",
 'usercsspreview' => "== Vorschau vu Dyynem Benutzer-CSS. ==
@@ -1363,7 +1362,7 @@ Des cha nimmi ruckgängig gmacht wäre.',
 'right-ipblock-exempt' => 'Uusnahm vu IP-Sperrine, Autoblock und Rangesperre',
 'right-proxyunbannable' => 'Uusnahm vu automatische Proxysperrine',
 'right-unblockself' => 'Sich sälber entsperre',
-'right-protect' => 'Syteschutzstatus ändere',
+'right-protect' => 'Syteschutzstatus änderen un gschitzti Syte bearbeite',
 'right-editprotected' => 'Gschitzti Syte bearbeite (ohni Kaskadeschutz)',
 'right-editinterface' => 'Benutzerinterface bearbeite',
 'right-editusercssjs' => 'Bearbeite vu CSS- und JS-Dateie vu andere Benutzer',
@@ -1843,7 +1842,9 @@ Iberprief anderi Link zue dr Vorlage, voreb Du die leschesch.',
 
 'disambiguations' => 'Syte, wu uf Begriffsklärigssyte verlinke',
 'disambiguationspage' => 'Template:Begriffsklärig',
-'disambiguations-text' => 'Die Syte verwyyse uf e Begriffsklärigs-Syte. Sie sotte aber besser uf d Syte verwyyse, wu eigetli gmeint sin.<br />E Syte wird as Begriffsklärigs-Syte behandlet, wänn [[MediaWiki:Disambiguationspage]] uf si verwyyst.<br />Link us Namensryym wäre do nit ufglischtet.',
+'disambiguations-text' => 'Die Syte verwyyse uf e Begriffsklärigs-Syte. Sie sotte aber besser uf d Syte verwyyse, wu eigetli gmeint sin.
+
+E Syte wird as Begriffsklärigs-Syte behandlet, wänn [[MediaWiki:Disambiguationspage]] uf si verwyyst.',
 
 'doubleredirects' => 'Doppleti Wyterleitige (Redirects)',
 'doubleredirectstext' => 'Die Lischt zeigt Wyterleitige, wu uf anderi Wyterleitige verwyyse.
@@ -2791,7 +2792,7 @@ Die uf em lokale Rächner spychere un derno do uffelade.',
 
 # Info page
 'pageinfo-title' => 'Informatione zue „$1“',
-'pageinfo-header-edits' => 'Bearbeitunge',
+'pageinfo-header-edits' => 'Bearbeitige',
 'pageinfo-views' => 'Aazahl Sytenufruef',
 'pageinfo-watchers' => 'Aazahl vu Beobachter',
 'pageinfo-edits' => 'Aazahl Bearbeitige',
@@ -3506,7 +3507,7 @@ Di aagfrogt Datei wird diräkt dargstellt bzw. mit dr verchnipfte Aawändig gsta
 * <span class="mw-specialpagecached">Gecachti Spezialsyte (dr Inhalt ist villicht veraltet.)</span>',
 'specialpages-group-maintenance' => 'Wartigslischte',
 'specialpages-group-other' => 'Andri Spezialsyte',
-'specialpages-group-login' => 'Aamälde',
+'specialpages-group-login' => 'Aamälde/Konto aalege',
 'specialpages-group-changes' => 'D letschte Änderige un Logbüecher',
 'specialpages-group-media' => 'Medie',
 'specialpages-group-users' => 'Benutzer un Rächt',
index 473f0c6..67fd0e8 100644 (file)
@@ -473,11 +473,11 @@ $1',
 'error' => 'ત્રુટિ',
 'databaseerror' => 'ડેટાબેઝ ત્રુટિ',
 'dberrortext' => 'માહિતીસંચ ને અપાયેલ શોધના સૂત્રમાં ચૂક છે.
-àª\86 àª¸à«\8bફà«\8dàª\9fવà«\87રમાàª\82 àª®àª¾àª\82 àª¨àª¾àª¨à«\80  àª¤à«\8dરà«\81àª\9fિ (bug) àª¨à«\87 àª²à«\80ધà«\87 àª¹à«\8bàª\87 àª¶àª\95à«\87.
-માહિતીસંચ પર કરાયેલ છેલ્લામાં છેલ્લી શોધ આ પ્રમાણે હતી:
-<blockquote><tt>$1</tt></blockquote>
-આ ફંકશન થકી  "<tt>$2</tt>".
-માહિતà«\80સàª\82àª\9aà«\87 àª\86પà«\87લ àª\9aà«\82àª\95નà«\81àª\82 àªµàª¿àªµàª°àª£ "<tt>$3: $4</tt>".',
+આ સોફ્ટવેરમાં નાની  ત્રુટિ (bug) ને લીધે હોઇ શકે.
+માહિતીસંચ પર કરાયેલ છેલ્લામાં છેલ્લી શોધ આ પ્રમાણે હતી:
+<blockquote><code>$1</code></blockquote>
+આ ફંકશન થકી  "<code>$2</code>".
+માહિતà«\80સàª\82àª\9aયà«\87 àª\86પà«\87લ àª\9aà«\82àª\95નà«\81àª\82 àªµàª¿àªµàª°àª£ "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'માહિતીસંચ ને અપાયેલ શોધના સૂત્રમાં ચૂક છે.
 માહિતીસંચ પર કરાયેલ છેલ્લામાં છેલ્લી શોધ આ પ્રમાણે હતી:
 "$1"
@@ -544,7 +544,10 @@ $2',
 'ns-specialprotected' => 'ખાસ પાનાંમાં ફેરફાર ન થઇ શકે.',
 'titleprotected' => 'આ મથાળું (વિષય) [[User:$1|$1]] બનાવવા માટે સુરક્ષિત કરવામાં આવ્યો છે.
 આ માટેનું કારણ છે-- "\'\'$2\'\'".',
+'invalidtitle-knownnamespace' => 'નામસ્થળ "$2" અને લખાણ "$3" સાથે અમાન્ય મથાળું',
+'invalidtitle-unknownnamespace' => 'અજ્ઞાત નામસ્થળ ક્રમાંક $1 અને નામ "$2" વાળું અમાન્ય મથાળું',
 'exception-nologin' => 'પ્રવેશ કરેલ નથી',
+'exception-nologin-text' => 'આ પાનું કે ક્રિયા માટે આ વિકિ પર લોગઈન થવું જરૂરી છે.',
 
 # Virus scanner
 'virus-badscanner' => "ખરાબ રૂપરેખા: અજાણ્યું વાઇરસ સ્કેનર: ''$1''",
@@ -642,8 +645,8 @@ Please log in again after you receive it.
 નિમ્નલિખિત વિશેષતાઓમાંથી કોઇ માટે ઇ-મેઇલ મોકલવામાં આવશે નહીં.',
 'noemailprefs' => "આ વિશેષતાઓ કાર્ય કરી શકે તે માટે 'તમારી પસંદ'માં ઇ-મેઇલ સરનામું દર્શાવો.",
 'emailconfirmlink' => 'તમારા ઇ-મેઇલ સરનામાની પુષ્ટિ કરો',
-'invalidemailaddress' => 'àª\86 àª\88-મà«\87લ àª\85યà«\8bàª\97à«\8dય àª®àª¾àª³àª\96à«\81àª\82 àª§àª°àª¾àªµà«\8dહà«\87 àª\9bà«\87  àª®àª¾àª\9fà«\87 àª¸à«\8dવà«\80àª\95ારà«\80 àª¶àª\95ાશà«\87 àª¨àª¹à«\80àª\82
-કૃપયા યોગ્ય માળખામાં ઇ-મેલ લખો',
+'invalidemailaddress' => 'àª\86 àª\88-મà«\87લ àª\85યà«\8bàª\97à«\8dય àª®àª¾àª³àª\96à«\81àª\82 àª§àª°àª¾àªµà«\87 àª\9bà«\87 àª®àª¾àª\9fà«\87 àª¸à«\8dવà«\80àª\95ારà«\80 àª¶àª\95ાશà«\87 àª¨àª¹à«\80àª\82.
+કૃપયા યોગ્ય માળખામાં ઇ-મેલ લખો અથવા આ ખાનું ખાલી કરો.',
 'cannotchangeemail' => 'એકાઉન્ટ ઈ મેલ એડ્રસ આ વીકી પર નહિ બદલી શકાય.',
 'emaildisabled' => 'આ સાઇટ ઇ-મેલ્સ મોકલી શકતી નથી.',
 'accountcreated' => 'ખાતું ખોલવામાં આવ્યું છે',
@@ -828,8 +831,7 @@ $2
 *'''ફાયરફોક્સ / સફારી:''' ''શીફ્ટ'' દબાવેલી રાખીને ''રિલોડ'' પર ક્લિક કરો, અથવા તો ''Ctrl-F5'' કે ''Ctrl-R'' દબાવો (મેક પર ''⌘-R'')
 *'''ગુગલ ક્રોમ:''' ''Ctrl-Shift-R'' દબાવો (મેક પર ''⌘-Shift-R'')
 *'''ઈન્ટરનેટ એક્સપ્લોરર:''' ''Ctrl'' દબાવેલી રાખીને ''રિફ્રેશ'' પર ક્લિક કરો, અથવા ''Ctrl-F5'' દબાવો
-*'''કોન્કરર:''' ''રિલોડ'' પર ક્લિક કરો અથવા ''F5'' દબાવો
-*'''ઓપેરા:''' ''સાધનો → પસંદગીઓ''માં જઈને કૅશ સાફ કારો",
+*'''ઓપેરા:''' ''સાધનો → પસંદગીઓ''માં જઈને કૅશ સાફ કરો",
 'usercssyoucanpreview' => "'''ટીપ:''' તમારા નવા CSSને સાચવતા પહેલા  \"{{int:showpreview}}\" બટન વાપરી ચકાસણી કરો.",
 'userjsyoucanpreview' => "'''ટીપ:''' Use the તમારી નવી JavaScript ને સાચવતા પહેલા   \"{{int:showpreview}}\" બટન વાપરી ચકાસો.",
 'usercsspreview' => "'''યાદ રહે કે તમે તમારા સભ્ય CSS નું અવલોકન કરો છે.'''
@@ -975,7 +977,7 @@ $3 દ્વારા અપાયેલ કારણ છે ''$2''",
 'last' => 'છેલ્લું',
 'page_first' => 'પહેલું',
 'page_last' => 'છેલ્લું',
-'histlegend' => "વિવિધ àªªàª¸àª\82દàª\97à«\80:સરàª\96ામણà«\80 àª®àª¾àª\9fà«\87 àª¸à«\81ધારà«\87લà«\80 àª\86વà«\83તિàª\93ના àª°à«\87ડિયà«\8b àª\96ાનાàª\93 àªªàª¸àª\82દ àª\95રà«\8b àª\85નà«\87 àª\8fનà«\8dàª\9fર àª®àª¾àª°à«\8b àª\85થવા àª¨à«\80àª\9aà«\87 àª\86વેલું બટન દબાવો.<br />
+'histlegend' => "વિવિધ àªªàª¸àª\82દàª\97à«\80:સરàª\96ામણà«\80 àª®àª¾àª\9fà«\87 àª¸à«\81ધારà«\87લà«\80 àª\86વà«\83તિàª\93ના àª°à«\87ડિયà«\8b àª\96ાનાàª\93 àªªàª¸àª\82દ àª\95રà«\8b àª\85નà«\87 àª\8fનà«\8dàª\9fર àª¦àª¬àª¾àªµà«\8b àª\85થવા àª¨à«\80àª\9aà«\87 àª\86પેલું બટન દબાવો.<br />
 સમજૂતી:'''({{int:cur}})''' = વર્તમાન અને સુધારેલી આવૃતિનો તફાવત, '''({{int:last}})''' = પૂર્વવર્તી ફેરફારનો તફાવત, '''{{int:minoreditletter}}''' = નાનો ફેરફાર.",
 'history-fieldset-title' => 'ઇતિહાસ ઉખેળો',
 'history-show-deleted' => 'માત્ર હટાવાયેલા',
@@ -1081,7 +1083,8 @@ $1",
 'revdelete-only-restricted' => '$2 તારીખ, $1 વાગ્યાની વસ્તુ સંતાડવામાં ત્રુટિ : અન્ય દ્રશ્ય વિકલ્પ પસંદ કર્યા સિવાય તમે પ્રતિબંધને પ્રબંધકથી દેખતા બચાવી ન શકો.',
 'revdelete-reason-dropdown' => '* હટાવવાનાં સામાન્ય કારણો 
 ** પ્રકાશનાધિકાર ભંગ
-** અયોગ્ય અંગત માહિતી 
+** અયોગ્ય ટિપ્પણી કે અંગત માહિતી 
+** અયોગ્ય સભ્યનામ
 ** સંભવતઃ બદનક્ષી કરનારું લખાણ',
 'revdelete-otherreason' => 'અન્ય/વધારાનું કારણ:',
 'revdelete-reasonotherlist' => 'અન્ય કારણ',
@@ -1360,7 +1363,7 @@ HTML નાકું ચકાસો',
 # Groups
 'group' => 'સમુહ',
 'group-user' => 'સભ્ય',
-'group-autoconfirmed' => 'સ્વયં ચલિત પરવાનગી મેળવેલ સભ્યો',
+'group-autoconfirmed' => 'સ્વયંચલિત માન્ય સભ્યો',
 'group-bot' => 'બૉટો',
 'group-sysop' => 'સાઇસૉપ/પ્રબંધકો',
 'group-bureaucrat' => 'રાજનૈતિકો',
@@ -1375,7 +1378,7 @@ HTML નાકું ચકાસો',
 'group-suppress-member' => '{{GENDER:$1|દુર્લક્ષ}}',
 
 'grouppage-user' => '{{ns:project}}:સભ્યો',
-'grouppage-autoconfirmed' => '{{ns:project}}:સà«\8dવà«\8dયàª\82àª\9aલિત àª¬àª¹àª¾àª²  સભ્યો',
+'grouppage-autoconfirmed' => '{{ns:project}}:સà«\8dવયàª\82àª\9aલિત àª®àª¾àª¨à«\8dય સભ્યો',
 'grouppage-bot' => '{{ns:project}}:બૉટો',
 'grouppage-sysop' => '{{ns:project}}:પ્રબંધકો',
 'grouppage-bureaucrat' => '{{ns:project}}: રાજનૈતિક',
@@ -2082,8 +2085,8 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization. જુઓ',
 
 # Special:ListGroupRights
 'listgrouprights' => 'સભ્ય જૂથ ના હક્કો',
-'listgrouprights-summary' => 'નà«\80àª\9aà«\87 àª\86 àªµàª¿àª\95િ àªªàª° àªªàª°àª¿àª­àª¾àª·àª¿àª¤ àª¸àª­à«\8dય àª\9cà«\82થનà«\80 àª¯àª¾àª¦àª¿ àª\86પà«\80 àª\9bà«\87 àª\85નà«\87 àª¤à«\87મના àª¹àª\95à«\8dàª\95à«\8b àªªàª£ àª\86પà«\87લા છે.
-નà«\80àª\9cà«\80 àª¹àª\95à«\8dàª\95à«\8b àª®àª¾àª\9fà«\87 [[{{MediaWiki:Listgrouprights-helppage}}|additional information]] àª®àª¾àª¹àª¿àª¤à«\80.',
+'listgrouprights-summary' => 'નà«\80àª\9aà«\87 àª\86 àªµàª¿àª\95િ àªªàª° àªµà«\8dયાàª\96à«\8dયાયિત àª¸àª­à«\8dય àª\9cà«\82થà«\8bનà«\80 àª¯àª¾àª¦à«\80, àª¤à«\87મનà«\80 àª¸àª¾àª¥à«\87 àª¸àª\82àª\95ળાયà«\87લા àª¹àª\95à«\8dàª\95à«\8b àª¸àª¾àª¥à«\87 àª\86પà«\80 છે.
+વà«\8dયàª\95à«\8dતિàª\97ત àª¹àª\95à«\8dàª\95à«\8b àª®àª¾àª\9fà«\87 [[{{MediaWiki:Listgrouprights-helppage}}|વધારાનà«\80 àª®àª¾àª¹àª¿àª¤à«\80]].',
 'listgrouprights-key' => '* <span class="listgrouprights-granted">અધિકાર અપાયા</span>
 * <span class="listgrouprights-revoked">અધિકાર હટાવાયા</span>',
 'listgrouprights-group' => 'જૂથ',
@@ -2222,7 +2225,7 @@ $UNWATCHURL
 'delete-legend' => 'રદ કરો',
 'historywarning' => "'''ચેતવણી:''' જે પાનું તમે હટાવવા જઇ રહ્યાં છો તેને આશરે $1 {{PLURAL:$1|પુનરાવર્તન|પુનરાવર્તનો}}નો ઇતિહાસ છે:",
 'confirmdeletetext' => 'આપ આ પાનું તેના ઇતિહાસ (બધાજ પૂર્વ  ફેરફારો) સાથે હટાવી રહ્યાં છો.
-àª\95à«\83પા àª\95રà«\80 àª®àª\82àª\9cà«\82રà«\80 àª\86પà«\8b àª\95à«\87, àª\86પ àª\86મ àª\95રવા àª\9aાહà«\8b àª\9bà«\8b, àª\86પ àª\86ના àª¸àª°àª¾-નરસા àªªàª°àª¿àª£àª¾àª®à«\8bથà«\80 àªµàª¾àª\95à«\87ફ àª\9bà«\8b, àª\85નà«\87 àª\86પ àª\86 àª\95à«\83ત્ય [[{{MediaWiki:Policy-url}}|નીતિ]]ને અનુરૂપ જ કરી રહ્યાં છો.',
+àª\95à«\83પા àª\95રà«\80 àª\96ાતà«\8dરà«\80 àª\95રà«\8b àª\95à«\87 àª\86પ àª\86મ àª\95રવા àª\87àª\9aà«\8dàª\9bà«\8b àª\9bà«\8b, àª\86પ àª\86ના àª¸àª¾àª°àª¾-નરસા àªªàª°àª¿àª£àª¾àª®à«\8bથà«\80 àªµàª¾àª\95à«\87ફ àª\9bà«\8b, àª\85નà«\87 àª\86પ àª\86 àª\95ાર્ય [[{{MediaWiki:Policy-url}}|નીતિ]]ને અનુરૂપ જ કરી રહ્યાં છો.',
 'actioncomplete' => 'કામ પૂર્ણ',
 'actionfailed' => 'કાર્ય અસફળ',
 'deletedtext' => '"$1" દૂર કરવામાં આવ્યું છે.
@@ -2343,7 +2346,7 @@ Deleting it may disrupt database operations of {{SITENAME}};',
 
 # Undelete
 'undelete' => 'ભૂંસાડેલા પાના બતાવો',
-'undeletepage' => 'હàª\9fાવà«\87લ àªªàª¾àª¨àª¾ àª\9cà«\81àª\93 àª\85નà«\87 àªªà«\81àª\82રà«\8dàª\9cà«\80વà«\80ત કરો',
+'undeletepage' => 'હàª\9fાવà«\87લ àªªàª¾àª¨àª¾ àª\9cà«\81àª\93 àª\85નà«\87 àªªà«\81નરà«\8dàª\9cà«\80વિત કરો',
 'undeletepagetitle' => "'''નીચે [[:$1|$1]] ના ભૂંસાડેલ સંપાદનો છે.'''.",
 'viewdeletedpage' => 'ભૂંસેલા પાના બતાવો',
 'undeletepagetext' => 'નીચેના {{PLURAL:$1|પાનું હટાવી દેવાયું છે |$1 પાના હટાવી દેવાયા છે}} તે હજી પ્રાચીન દસ્તવેજમાં છે અને પુનઃસ્થાપિત કરી શકાશે.
@@ -2362,7 +2365,7 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 'undelete-revision' => '$1 ( $4 તારીખે , $5 વાગ્યા)  સુધી કરેલા ફેરફારો  $3 દ્વારા હટાવાયા:',
 'undeleterevision-missing' => 'અવૈધ કે ગાયબ પુનરાવર્તન.
 તમારી કડી ખરાબ હશે અથવા ઇતિહાસમાંથી તે માહિતી હટાવાઇ હશે.',
-'undelete-nodiff' => 'àª\95à«\8bàª\87 àªªà«\8dરાàª\9aà«\80ન àª¸àª\82પદનà«\8b àª¨àª¥à«\80 àª®àª³à«\8dયાàª\82',
+'undelete-nodiff' => 'àª\95à«\8bàª\87 àªªà«\8dરાàª\9aà«\80ન àª¸àª\82પાદનà«\8b àª¨àª¥à«\80 àª®àª³à«\8dયાàª\82.',
 'undeletebtn' => 'પાછું વાળો',
 'undeletelink' => 'જુઓ/પાછુ વાળો',
 'undeleteviewlink' => 'જુઓ',
@@ -2372,8 +2375,8 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 'undeletedrevisions' => '{{PLURAL:$1|૧ સંપાદન|$1 સંપાદનો}} પુન સ્થાપિત કરાયા',
 'undeletedrevisions-files' => '{{PLURAL:$1|1 ફેરફાર|$1 ફેરફારો}} અને {{PLURAL:$2|1 ફાઈલા|$2 ફાઈલો}} પુનઃસ્થાપિત',
 'undeletedfiles' => '{{PLURAL:$1|1 ફાઇલ|$1 ફાઇલો}} પુનઃસ્થાપિત',
-'cannotundelete' => 'પà«\81નàª\83àª\9cà«\80વિત àª\95રવાનà«\81àª\82 àª\95ારà«\8dય àª\85સફળ 
-કોઇકે  આ પાનાને પહેલેથી પુનઃજીવિત કર્યું હોઇ શકે.',
+'cannotundelete' => 'પà«\81નરà«\8dàª\9cà«\80વિત àª\95રવાનà«\81àª\82 àª\95ારà«\8dય àª\85સફળ; 
+કોઇકે આ પાનાને પહેલેથી પુનર્જીવિત કર્યું હોઈ શકે.',
 'undeletedpage' => "'''$1 પુનઃસ્થાપિત કરાયા'''
 
 તાજેતરમાં હટાવેલા કે પુનઃસ્થાપિત થયેલા ફેરફારની નોંધ નો સંદર્ભ અહીં ઉપ્લબ્ધ [[Special:Log/delete|deletion log]].",
@@ -2456,22 +2459,22 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 'blockip' => 'સભ્ય પર પ્રતિબંધ મુકો',
 'blockip-title' => 'સભ્ય પર પ્રતિબંધ મુકો',
 'blockip-legend' => 'સભ્ય પર પ્રતિબંધ મુકો',
-'blockiptext' => 'àª\95à«\8bàª\87 àª\9aà«\8bàª\95à«\8dàª\95સ IP àª¸àª°àª¨àª¾àª®à«\81àª\82 àª\95à«\87 àª¸àª­à«\8dય  àª¨àª¾  લેખન યોગદાન પર પ્રતિબંધ મુકવા નીચેનું ફોર્મ વાપરો.
-તેનો ઉપયોગ માત્ર ભાંગફોડિયા પ્રવૃત્તિઓને રોકવા અને  [[{{MediaWiki:Policy-url}}|policy]] અનુસાર જ હોવી જોઇએ.
-àª\95ારણનà«\81àª\82 àª\96ાનà«\81àª\82 àª\85વશà«\8dય àª«àª°àª¶à«\8b (દા.ત. àª\85મà«\81àª\95 àª­àª¾àª\82àª\97ફà«\8bડ àª\95રાયà«\87લ àªªàª¾àª¨à«\81àª\82)',
+'blockiptext' => 'àª\95à«\8bàª\88 àª\9aà«\8bàª\95à«\8dàª\95સ IP àª¸àª°àª¨àª¾àª®à«\81àª\82 àª\95à«\87 àª¸àª­à«\8dયના લેખન યોગદાન પર પ્રતિબંધ મુકવા નીચેનું ફોર્મ વાપરો.
+તેનો ઉપયોગ માત્ર ભાંગફોડિયા પ્રવૃત્તિઓને રોકવા અને  [[{{MediaWiki:Policy-url}}|નીતિ]] અનુસાર જ હોવો જોઈએ.
+àª\95ારણનà«\81àª\82 àª\96ાનà«\81àª\82 àª\85વશà«\8dય àª­àª°àª¶à«\8b (દા.ત. àª\85મà«\81àª\95 àª­àª¾àª\82àª\97ફà«\8bડ àª\95રાયà«\87લા àªªàª¾àª¨àª¾àª¨à«\8b àª¸àª\82દરà«\8dભ).',
 'ipadressorusername' => 'IP સરનામું અથવા સભ્યનામ:',
 'ipbexpiry' => 'સમાપ્તિ:',
 'ipbreason' => 'કારણ:',
 'ipbreasonotherlist' => 'અન્ય કારણ',
 'ipbreason-dropdown' => '*સામાન્ય પ્રતિબંધ કારણો
-** ખોટી  માહિતી ઉમેરાઇ  
+** ખોટી માહિતી ઉમેરાઈ  
 ** પાનામાંથી માહિતી ભૂંસી નાંખી
 ** અનાવશ્યક બાહ્ય કડીઓ ઉમેરી 
 ** પાનામાં મૂર્ખામીભરી/અર્થહીન માહિતી ઉમેરી
-**  ત્રાસદાયક વર્તન 
-** ઘણા ખાતાઓનું સાથે શોષણ 
+** ત્રાસદાયક વર્તન 
+** ઘણા ખાતાઓ અને દુરુપયોગ
 ** અસ્વીકાર્ય સભ્ય નામ
-**આત્યંતિક ભાંગફોડ',
+** આત્યંતિક ભાંગફોડ',
 'ipb-hardblock' => 'અટકાવો આ IP સરનામું માંથી ફેરફાર વપરાશકર્તાઓ માં લૉગ',
 'ipbcreateaccount' => 'ખાતા ખોલવા પર પ્રતિબંધ',
 'ipbemailban' => 'સભ્યના ઇ-મેલ મોકલવા પર પ્રતિબંધ મૂકો',
@@ -2915,11 +2918,11 @@ To perform a selective restoration, check the boxes corresponding to the revisio
 
 # Info page
 'pageinfo-title' => ' $1 પાના ની માહિતી નૂ મથાડૂ',
-'pageinfo-header-edits' => 'àª\95રà«\87લા àª«à«\87રફાર',
+'pageinfo-header-edits' => 'àª\87તિહાસ àª¸àª\82પાદન',
 'pageinfo-views' => 'જોનારાની સંખ્યા',
-'pageinfo-watchers' => 'નીરીક્ષકોની સંખ્યા',
-'pageinfo-edits' => 'સંપાદનોની સંખ્યા',
-'pageinfo-authors' => 'ક્ષેત્રના લેખકોની સંખ્યા',
+'pageinfo-watchers' => 'પાના àª¨à«\80રà«\80àª\95à«\8dષàª\95à«\8bનà«\80 àª¸àª\82àª\96à«\8dયા',
+'pageinfo-edits' => 'àª\95à«\81લ àª¸àª\82પાદનà«\8bનà«\80 àª¸àª\82àª\96à«\8dયા',
+'pageinfo-authors' => 'àª\95à«\8dષà«\87તà«\8dરના àª²à«\87àª\96àª\95à«\8bનà«\80 àª\95à«\81લ àª¸àª\82àª\96à«\8dયા',
 
 # Patrolling
 'markaspatrolleddiff' => 'નિરીક્ષીત અંકિત કરો',
@@ -3630,7 +3633,7 @@ $5
 * <span class="mw-specialpagerestricted">ખાસ પાનાં પ્રતિબંધિત.</span>',
 'specialpages-group-maintenance' => 'સમારકામ અહેવાલ',
 'specialpages-group-other' => 'અન્ય ખાસ પાનાઓ',
-'specialpages-group-login' => 'પà«\8dરવà«\87શ / àª¨à«\8bàª\82ધણà«\80 àª\95રો',
+'specialpages-group-login' => 'પà«\8dરવà«\87શ / àª\96ાતà«\81 àª¬àª¨àª¾àªµો',
 'specialpages-group-changes' => 'હાલના ફેરફારો અને લોગ',
 'specialpages-group-media' => 'મિડિયા રિપોર્ટ અને ચડાવેલી ફાઇલ',
 'specialpages-group-users' => 'સભ્યો અને અધિકારો',
index 2c878b1..d8882df 100644 (file)
@@ -366,7 +366,7 @@ $messages = array(
 'tog-editsection' => 'עריכת פסקאות באמצעות קישורי [עריכה]',
 'tog-editsectiononrightclick' => 'עריכת פסקאות על ידי לחיצה ימנית על כותרות הפסקאות (דרוש JavaScript)',
 'tog-showtoc' => 'הצגת תוכן עניינים (עבור דפים עם יותר מ־3 כותרות)',
-'tog-rememberpassword' => 'שמירת הכניסה שלי בדפדפן זה ({{PLURAL:$1|ליום אחד|ל־$1 ימים|ליומיים}} לכל היותר)',
+'tog-rememberpassword' => 'שמירת הכניסה שלי בדפדפן זה ({{PLURAL:$1|ליום אחד|ליומיים|ל־$1 ימים}} לכל היותר)',
 'tog-watchcreations' => 'מעקב אחרי דפים שיצרתי וקבצים שהעליתי',
 'tog-watchdefault' => 'מעקב אחרי דפים וקבצים שערכתי',
 'tog-watchmoves' => 'מעקב אחרי דפים וקבצים שהעברתי',
@@ -570,7 +570,7 @@ $messages = array(
 'redirectedfrom' => '(הופנה מהדף $1)',
 'redirectpagesub' => 'דף הפניה',
 'lastmodifiedat' => 'שונה לאחרונה ב־$2, $1.',
-'viewcount' => 'דף זה נצפה {{PLURAL:$1|פעם אחת|$1 פעמים|פעמיים}}.',
+'viewcount' => 'דף זה נצפה {{PLURAL:$1|פעם אחת|פעמיים|$1 פעמים}}.',
 'protectedpage' => 'דף מוגן',
 'jumpto' => 'קפיצה אל:',
 'jumptonavigation' => 'ניווט',
@@ -733,10 +733,11 @@ $1',
 'protectedpagetext' => 'דף זה מוגן ולא ניתן לערוך אותו.',
 'viewsourcetext' => 'באפשרותכם לצפות בטקסט המקור של הדף ולהעתיקו:',
 'viewyourtext' => "באפשרותכם לצפות בטקסט המקור של '''העריכות שלכם''' של הדף ולהעתיקו:",
-'protectedinterface' => 'דף זה הוא אחד מסדרת דפים המספקים הודעות מערכת לתוכנה, ומוגן כדי למנוע השחתות.',
+'protectedinterface' => 'דף זה הוא אחד מסדרת דפים המספקים הודעות מערכת לתוכנה באתר ויקי זה, ומוגן כדי למנוע השחתות.
+כדי להוסיף או לשנות תרגומים בכל אתרי הוויקי, אנא השתמשו ב־[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.',
 'editinginterface' => "'''אזהרה:''' הדף שאתם עורכים הוא אחד הדפים המספקים הודעות מערכת לתוכנה.
-שינויים בדף זה ישפיעו על תצוגת ממשק המשתמש של משתמשים אחרים.
\9cתר×\92×\95×\9e×\99×\9d, ×\90× ×\90 ×©×§×\9c×\95 ×\9c×\94שת×\9eש ×\91Ö¾[//translatewiki.net/wiki/Main_Page?setlang=he translatewiki.net], פרויקט התרגום של מדיה־ויקי.",
+שינויים בדף זה ישפיעו על תצוגת ממשק המשתמש של משתמשים אחרים באתר ויקי זה.
\9b×\93×\99 ×\9c×\94×\95ס×\99×£ ×\90×\95 ×\9cשנ×\95ת ×ª×¨×\92×\95×\9e×\99×\9d ×\91×\9b×\9c ×\90תר×\99 ×\94×\95×\95×\99ק×\99, ×\90× ×\90 ×\94שת×\9eש×\95 ×\91Ö¾[//translatewiki.net/ translatewiki.net], פרויקט התרגום של מדיה־ויקי.",
 'sqlhidden' => '(שאילתת ה־SQL מוסתרת)',
 'cascadeprotected' => 'דף זה מוגן מעריכה כי הוא מוכלל {{PLURAL:$1|בדף הבא, שמופעלת עליו|בדפים הבאים, שמופעלת עליהם}} הגנה מדורגת:
 $2',
@@ -770,7 +771,7 @@ $2',
 'yourname' => 'שם משתמש:',
 'yourpassword' => 'סיסמה:',
 'yourpasswordagain' => 'הקש סיסמה שנית:',
-'remembermypassword' => 'שמירת הכניסה שלי בדפדפן הזה (ל{{PLURAL:$1|יום אחד|־$1 ימים|יומיים}} לכל היותר)',
+'remembermypassword' => 'שמירת הכניסה שלי בדפדפן הזה (ל{{PLURAL:$1|יום אחד|יומיים|־$1 ימים}} לכל היותר)',
 'securelogin-stick-https' => 'המשך שימוש ב־HTTPS אחרי הכניסה',
 'yourdomainname' => 'המתחם שלך:',
 'password-change-forbidden' => 'אינכם יכולים לשנות סיסמאות באתר זה.',
@@ -824,9 +825,9 @@ $2',
 'mailmypassword' => 'שלחו לי סיסמה חדשה',
 'passwordremindertitle' => 'סיסמה זמנית חדשה מ{{grammar:תחילית|{{SITENAME}}}}',
 'passwordremindertext' => 'מישהו (ככל הנראה אתם, מכתובת ה־IP מספר $1) ביקש סיסמה
-חדשה לכניסה לחשבון ב{{grammar:תחילית|{{SITENAME}}}} ($4). נוצרה סיסמה זמנית למשתמש "$2",
+חדשה לכניסה לחשבון ב{{GRAMMAR:תחילית|{{SITENAME}}}} ($4). נוצרה סיסמה זמנית למשתמש "$2",
 וסיסמה זו היא "$3". אם זו הייתה כוונתכם, תוכלו כעת להיכנס לחשבון ולבחור סיסמה חדשה.
-הסיסמה הזמנית שלכם תפקע תוך {{PLURAL:$5|יום אחד|$5 ימים|יומיים}}.
+הסיסמה הזמנית שלכם תפקע תוך {{PLURAL:$5|יום אחד|יומיים|$5 ימים}}.
 
 עליכם להיכנס לאתר ולשנות את סיסמתכם בהקדם האפשרי. אם מישהו אחר ביקש סיסמה חדשה זו או אם נזכרתם בסיסמתכם
 ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמתכם הישנה.',
@@ -837,8 +838,8 @@ $2',
 'blocked-mailpassword' => 'כתובת ה־IP שלכם חסומה מעריכה, ולפיכך אינכם מורשים להשתמש באפשרות שחזור הסיסמה כדי למנוע ניצול לרעה של התכונה.',
 'eauthentsent' => 'דוא"ל אימות נשלח לכתובת הדוא"ל שקבעת.
 לפני שדברי דוא"ל אחרים יישלחו לחשבון הזה, יהיה עליך לפעול לפי ההוראות בדוא"ל, כדי לאשר שהחשבון אכן שייך לך.',
-'throttled-mailpassword' => 'כבר נעשה שימוש באפשרות שחזור הסיסמה ב{{PLURAL:$1|שעה האחרונה|־$1 השעות האחרונות|שעתיים האחרונות}}.
-כדי למנוע ניצול לרעה, יכול להישלח רק דואר אחד כזה בכל {{PLURAL:$1|שעה|$1 שעות|שעתיים}}.',
+'throttled-mailpassword' => 'כבר נעשה שימוש באפשרות שחזור הסיסמה ב{{PLURAL:$1|שעה האחרונה|שעתיים האחרונות|־$1 השעות האחרונות}}.
+כדי למנוע ניצול לרעה, יכול להישלח רק דואר אחד כזה בכל {{PLURAL:$1|שעה|שעתיים|$1 שעות}}.',
 'mailerror' => 'שגיאה בשליחת דואר: $1',
 'acct_creation_throttle_hit' => 'מבקרים באתר זה דרך כתובת ה־IP שלכם כבר יצרו {{PLURAL:$1|חשבון אחד|$1 חשבונות}} ביום האחרון. זהו המקסימום המותר בתקופה זו.
 לפיכך, מבקרים דרך כתובת ה־IP הזו לא יכולים ליצור חשבונות נוספים ברגע זה.',
@@ -904,17 +905,17 @@ $2',
 
 $2
 
-{{PLURAL:$3|סיסמה זמנית זו|סיסמאות זמניות אלה}} יפקעו תוך {{PLURAL:$5|יום|$5 ימים|יומיים}}.
+{{PLURAL:$3|סיסמה זמנית זו|סיסמאות זמניות אלה}} יפקעו תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.
 עליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם
 המקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה
 הישנה.',
-'passwordreset-emailtext-user' => 'המשתמש $1 ב{{grammar:תחילית|{{SITENAME}}}} ביקש תזכורת של פרטי
-החשבון שלכם ב{{grammar:תחילית|{{SITENAME}}}} ($4). {{PLURAL:$3|חשבון המשתמש הבא|חשבונות המשתמש הבאים}}
+'passwordreset-emailtext-user' => 'המשתמש $1 ב{{GRAMMAR:תחילית|{{SITENAME}}}} ביקש תזכורת של פרטי
+החשבון שלכם ב{{GRAMMAR:תחילית|{{SITENAME}}}} ($4). {{PLURAL:$3|חשבון המשתמש הבא|חשבונות המשתמש הבאים}}
 שייכים לכתובת הדואר האלקטרוני הזו:
 
 $2
 
-{{PLURAL:$3|סיסמה זמנית זו|סיסמאות זמניות אלה}} יפקעו תוך {{PLURAL:$5|יום|$5 ימים|יומיים}}.
+{{PLURAL:$3|סיסמה זמנית זו|סיסמאות זמניות אלה}} יפקעו תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.
 עליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או שנזכרתם בסיסמתכם
 המקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה
 הישנה.',
@@ -1023,7 +1024,8 @@ $2
 או [{{fullurl:{{FULLPAGENAME}}|action=edit}} לערוך דף זה]</span>.',
 'noarticletext-nopermission' => 'אין כרגע טקסט בדף זה.
 באפשרותכם [[Special:Search/{{PAGENAME}}|לחפש את כותרת הדף]] בדפים אחרים,
-או <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} לחפש ביומנים הרלוונטיים].</span>',
+או <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} לחפש ביומנים הרלוונטיים]</span>,
+אך אינכם מורשים ליצור את הדף.',
 'missing-revision' => 'גרסה #$1 של הדף "{{PAGENAME}}" אינה קיימת.
 
 זה נגרם בדרך כלל על־ידי לחיצה על קישור ישן לגרסה קודמת של דף שנמחק.
@@ -1286,7 +1288,8 @@ $1",
 'revdelete-only-restricted' => 'שגיאה בהסתרת הפריט מתאריך $2, $1: אין באפשרותכם להסתיר פרטים מצפיית מפעילי מערכת בלי לבחור גם באחת מאפשרויות ההסתרה האחרות.',
 'revdelete-reason-dropdown' => '* סיבות מחיקה נפוצות
 ** הפרת זכויות יוצרים
-** חשיפת מידע אישי
+** תקציר עריכה או מידע אישי לא הולמים
+** שם משתמש לא הולם
 ** מידע שעלול להיות לשון הרע',
 'revdelete-otherreason' => 'סיבה אחרת/נוספת:',
 'revdelete-reasonotherlist' => 'סיבה אחרת',
@@ -1438,7 +1441,7 @@ $1",
 'prefs-rc' => 'שינויים אחרונים',
 'prefs-watchlist' => 'רשימת המעקב',
 'prefs-watchlist-days' => 'מספר הימים המרבי שיוצגו ברשימת המעקב:',
-'prefs-watchlist-days-max' => 'לכל היותר {{PLURAL:$1|יום אחד|$1 ימים|יומיים}}',
+'prefs-watchlist-days-max' => 'לכל היותר {{PLURAL:$1|יום אחד|יומיים|$1 ימים}}',
 'prefs-watchlist-edits' => 'מספר העריכות המרבי שיוצגו ברשימת המעקב המורחבת:',
 'prefs-watchlist-edits-max' => 'לכל היותר 1000',
 'prefs-watchlist-token' => 'אסימון לרשימת המעקב:',
@@ -1460,7 +1463,7 @@ $1",
 'stub-threshold' => 'סף לעיצוב <a href="#" class="stub">קישורים</a> לקצרמרים (בתים):',
 'stub-threshold-disabled' => 'מבוטל',
 'recentchangesdays' => 'מספר הימים שיוצגו בדף השינויים האחרונים:',
-'recentchangesdays-max' => 'לכל היותר {{PLURAL:$1|יום אחד|$1 ימים}}',
+'recentchangesdays-max' => 'לכל היותר {{PLURAL:$1|יום אחד|יומיים|$1 ימים}}',
 'recentchangescount' => 'מספר העריכות שיוצגו כברירת מחדל:',
 'prefs-help-recentchangescount' => 'כולל שינויים אחרונים, היסטוריית הדף ויומנים.',
 'prefs-help-watchlist-token' => 'מילוי השדה הזה במפתח סודי ייצור הזנת RSS עבור רשימת המעקב שלכם.
@@ -1485,7 +1488,7 @@ $1",
 'timezoneregion-indian' => 'האוקיינוס ההודי',
 'timezoneregion-pacific' => 'האוקיינוס השקט',
 'allowemail' => 'קבלת דוא"ל ממשתמשים אחרים',
-'prefs-searchoptions' => '×\90פשר×\95×\99×\95ת ×\97×\99פ×\95ש',
+'prefs-searchoptions' => 'חיפוש',
 'prefs-namespaces' => 'מרחבי שם',
 'defaultns' => 'אחרת, החיפוש יתבצע במרחבי השם הבאים:',
 'default' => 'ברירת מחדל',
@@ -1705,7 +1708,7 @@ $1",
 'recentchanges-label-minor' => 'זוהי עריכה משנית',
 'recentchanges-label-bot' => 'עריכה זו בוצעה על ידי בוט',
 'recentchanges-label-unpatrolled' => 'עריכה זו טרם נבדקה',
-'rcnote' => "להלן {{PLURAL:$1|השינוי האחרון|'''$1''' השינויים האחרונים}} {{PLURAL:$2|ביום האחרון|ב־$2 הימים האחרונים|ביומיים האחרונים}}, עד $5, $4:",
+'rcnote' => "להלן {{PLURAL:$1|השינוי האחרון|'''$1''' השינויים האחרונים}} {{PLURAL:$2|ביום האחרון|ביומיים האחרונים|ב־$2 הימים האחרונים}}, עד $5, $4:",
 'rcnotefrom' => 'להלן <b>$1</b> השינויים האחרונים שבוצעו החל מתאריך <b>$2</b>:',
 'rclistfrom' => 'הצגת שינויים חדשים החל מ־$1',
 'rcshowhideminor' => '$1 שינויים משניים',
@@ -1916,7 +1919,7 @@ $1',
 'backend-fail-internal' => 'אירעה שגיאה בלתי־ידועה במאגר אחסון הקבצים הפנימי "$1".',
 'backend-fail-contenttype' => 'לא ניתן היה לקבוע את סוג התוכן של הקובץ לאחסון ב־"$1".',
 'backend-fail-batchsize' => 'למאגר אחסון הקבצים הפנימי הועבר אוסף של {{PLURAL:$1|פעולת קובץ אחת|$1 פעולות קובץ}}; המגבלה היא {{PLURAL:$2|פעולה אחת|$2 פעולות}}.',
-'backend-fail-usable' => '×\9bת×\99×\91ת ×\94ק×\95×\91×¥ $1 לא הצליחה כיוון שההרשאות אינן מספיקות או כיוון שהספריות/המכלים חסרים.',
+'backend-fail-usable' => 'קר×\99×\90ת ×\90×\95 ×\9bת×\99×\91ת ×\94ק×\95×\91×¥ "$1" לא הצליחה כיוון שההרשאות אינן מספיקות או כיוון שהספריות/המכלים חסרים.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'לא ניתן היה להתחבר לבסיס הנתונים של היומן עבור מאגר אחסון הקבצים הפנימי "$1".',
@@ -2126,7 +2129,7 @@ $1',
 'statistics-views-peredit' => 'מספר הצפיות לעריכה',
 'statistics-users' => 'ה[[Special:ListUsers|משתמשים]] הרשומים',
 'statistics-users-active' => 'המשתמשים הפעילים',
-'statistics-users-active-desc' => 'משתמשים שביצעו פעולה כלשהי {{PLURAL:$1|ביום האחרון|ב־$1 הימים האחרונים|ביומיים האחרונים}}',
+'statistics-users-active-desc' => 'משתמשים שביצעו פעולה כלשהי {{PLURAL:$1|ביום האחרון|ביומיים האחרונים|ב־$1 הימים האחרונים}}',
 'statistics-mostpopular' => 'הדפים הנצפים ביותר',
 
 'disambiguations' => 'דפים שמקשרים לדפי פירושונים',
@@ -2301,8 +2304,8 @@ $1',
 
 # Special:ActiveUsers
 'activeusers' => 'רשימת משתמשים פעילים',
-'activeusers-intro' => 'זוהי רשימת המשתמשים שביצעו פעולה כלשהי {{PLURAL:$1|ביום האחרון|ב־$1 הימים האחרונים|ביומיים האחרונים}}.',
-'activeusers-count' => '{{PLURAL:$1|עריכה אחת|$1 עריכות}} ב{{PLURAL:$3|יום האחרון|־$3 הימים האחרונים|יומיים האחרונים}}',
+'activeusers-intro' => 'זוהי רשימת המשתמשים שביצעו פעולה כלשהי {{PLURAL:$1|ביום האחרון|ביומיים האחרונים|ב־$1 הימים האחרונים}}.',
+'activeusers-count' => '{{PLURAL:$1|עריכה אחת|$1 עריכות}} ב{{PLURAL:$3|יום האחרון|יומיים האחרונים|־$3 הימים האחרונים}}',
 'activeusers-from' => 'הצגת משתמשים החל מ:',
 'activeusers-hidebots' => 'הסתרת בוטים',
 'activeusers-hidesysops' => 'הסתרת מפעילי מערכת',
@@ -2396,7 +2399,7 @@ $1',
 'watchmethod-list' => 'בודק את העריכות האחרונות בדפים שברשימת המעקב',
 'watchlistcontains' => 'רשימת המעקב כוללת {{PLURAL:$1|דף אחד|$1 דפים}}.',
 'iteminvalidname' => 'בעיה עם $1, שם שגוי…',
-'wlnote' => "להלן {{PLURAL:$1|השינוי האחרון|'''$1''' השינויים האחרונים}} {{PLURAL:$2|בשעה האחרונה|ב־'''$2''' השעות האחרונות|בשעתיים האחרונות}}, עד $4, $3.",
+'wlnote' => "להלן {{PLURAL:$1|השינוי האחרון|'''$1''' השינויים האחרונים}} {{PLURAL:$2|בשעה האחרונה|בשעתיים האחרונות|ב־'''$2''' השעות האחרונות}}, עד $4, $3.",
 'wlshowlast' => '(הצגת $1 שעות אחרונות | $2 ימים אחרונים | $3)',
 'watchlist-options' => 'אפשרויות ברשימת המעקב',
 
@@ -3188,7 +3191,7 @@ $1',
 'pageinfo-authors' => 'המספר הכולל של כותבים שונים',
 'pageinfo-recent-edits' => 'מספר העריכות לאחרונה ($1)',
 'pageinfo-recent-authors' => 'מספר הכותבים הייחודיים לאחרונה',
-'pageinfo-restriction' => 'הגנה על הדף (<code>$1</code>)',
+'pageinfo-restriction' => 'הגנה על הדף ($1)',
 'pageinfo-magic-words' => '{{PLURAL:$1|מילת קסם|מילות קסם}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|קטגוריה מוסתרת|קטגוריות מוסתרות}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|תבנית מוכללת|תבניות מוכללות}} ($1)',
@@ -3254,7 +3257,7 @@ $1',
 'file-info-gif-looped' => 'בלולאה',
 'file-info-gif-frames' => '{{PLURAL:$1|תמונה אחת|$1 תמונות}}',
 'file-info-png-looped' => 'בלולאה',
-'file-info-png-repeat' => '×\94×\95צ×\92 {{PLURAL:$1|פע×\9d ×\90×\97ת|$1 ×¤×¢×\9e×\99×\9d|פע×\9e×\99ים}}',
+'file-info-png-repeat' => '×\9e×\95צ×\92 {{PLURAL:$1|פע×\9d ×\90×\97ת|פע×\9e×\99×\99×\9d|$1 ×¤×¢×\9eים}}',
 'file-info-png-frames' => '{{PLURAL:$1|תמונה אחת|$1 תמונות}}',
 'file-no-thumb-animation' => "'''לתשומת לבך: בשל מגבלות טכניות, תמונות ממוזערות של הקובץ הזה לא תהיינה מונפשות.'''",
 'file-no-thumb-animation-gif' => "'''לתשומת לבך: בשל מגבלות טכניות, תמונות ממוזערות של תמונות GIF בעלות רזולוציה גבוהה כמו זאת לא תהיינה מונפשות.'''",
@@ -3274,8 +3277,8 @@ $1',
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'seconds' => '{{PLURAL:$1|שנייה|$1 שניות}}',
 'minutes' => '{{PLURAL:$1|דקה|$1 דקות}}',
-'hours' => '{{PLURAL:$1|שעה|$1 שעות|שעתיים}}',
-'days' => '{{PLURAL:$1|יום|$1 ימים|יומיים}}',
+'hours' => '{{PLURAL:$1|שעה|שעתיים|$1 שעות}}',
+'days' => '{{PLURAL:$1|יום|יומיים|$1 ימים}}',
 'ago' => 'לפני $1',
 
 # Bad image list
@@ -4151,12 +4154,12 @@ $5
 # Durations
 'duration-seconds' => '{{PLURAL:$1|שנייה|$1 שניות}}',
 'duration-minutes' => '{{PLURAL:$1|דקה|$1 דקות}}',
-'duration-hours' => '{{PLURAL:$1|שעה|$1 שעות|שעתיים}}',
-'duration-days' => '{{PLURAL:$1|יום|$1 ימים|יומיים}}',
-'duration-weeks' => '{{PLURAL:$1|שבוע|$1 שבועות|שבועיים}}',
-'duration-years' => '{{PLURAL:$1|שנה|$1 שנים|שנתיים}}',
+'duration-hours' => '{{PLURAL:$1|שעה|שעתיים|$1 שעות}}',
+'duration-days' => '{{PLURAL:$1|יום|יומיים|$1 ימים}}',
+'duration-weeks' => '{{PLURAL:$1|שבוע|שבועיים|$1 שבועות}}',
+'duration-years' => '{{PLURAL:$1|שנה|שנתיים|$1 שנים}}',
 'duration-decades' => '{{PLURAL:$1|עשור|$1 עשורים}}',
-'duration-centuries' => '{{PLURAL:$1|מאה שנה|$1 מאות שנים|מאתיים שנה}}',
-'duration-millennia' => '{{PLURAL:$1|אלף שנה|$1 אלפי שנים|אלפיים שנה}}',
+'duration-centuries' => '{{PLURAL:$1|מאה שנה|מאתיים שנה|$1 מאות שנים}}',
+'duration-millennia' => '{{PLURAL:$1|אלף שנה|אלפיים שנה|$1 אלפי שנים}}',
 
 );
index 3e3ecf9..f159368 100644 (file)
@@ -442,6 +442,10 @@ $1',
 'youhavenewmessages' => 'आपके लिए $1 है। ($2)',
 'newmessageslink' => 'नए सन्देश',
 'newmessagesdifflink' => 'पिछला बदलाव',
+'youhavenewmessagesfromusers' => 'आपके लिये {{PLURAL:$3|एक अन्य सदस्य का सन्देश है|$3 अन्य सदस्यों के सन्देश हैं}}। ($2)',
+'youhavenewmessagesmanyusers' => 'आपके लिये $1 हैं। ($2)',
+'newmessageslinkplural' => '{{PLURAL:$1|एक नया सन्देश|नये सन्देश}}',
+'newmessagesdifflinkplural' => 'अंतिम {{PLURAL:$1|परिवर्तन}}',
 'youhavenewmessagesmulti' => '$1 पर आपके लिए नया संदेश है',
 'editsection' => 'सम्पादन',
 'editold' => 'सम्पादन',
@@ -567,6 +571,7 @@ $2',
 इसके लिये निम्न कारण दिया गया है: "\'\'$2\'\'"',
 'invalidtitle-knownnamespace' => '"$2" नामस्थान और "$3" नाम वाला गलत शीर्षक',
 'invalidtitle-unknownnamespace' => 'अज्ञात नामस्थान संख्या $1 और नाम "$2" वाला गलत शीर्षक',
+'exception-nologin' => 'लॉग इन नहीं किया है',
 
 # Virus scanner
 'virus-badscanner' => "गलत जमाव: अज्ञात वायरस जाँचक: ''$1''",
@@ -586,6 +591,7 @@ $2',
 'remembermypassword' => 'इस ब्राउज़र पर मेरा लॉगिन याद रखें (अधिकतम $1 {{PLURAL:$1|दिन|दिनों}} के लिए)',
 'securelogin-stick-https' => 'प्रवेश के बाद HTTPS से जुड़े रहें',
 'yourdomainname' => 'आपका डोमेन:',
+'password-change-forbidden' => 'आप इस विकि पर कूटशब्द नहीं बदल सकते हैं।',
 'externaldberror' => 'या तो प्रमाणिकरण डाटाबेस में त्रुटि हुई है या फिर आपको अपना बाह्य खाता अपडेट करने की अनुमति नहीं है।',
 'login' => 'लॉग इन',
 'nav-login-createaccount' => 'सत्रारंभ / खाता खोलें',
index 9da7764..e34ebfd 100644 (file)
@@ -24,7 +24,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Taguon ang mga nabantayan nga na islan na nga bag-o lang gin obra',
 'tog-newpageshidepatrolled' => 'Taguon ang mga nabantayan  nga pahina sa bag-ong lista sang mga pahina',
 'tog-extendwatchlist' => 'Palaparon ang watchlist para makita ang tanan nga mga na-islan, indi lang man sa pinaka bag-o',
-'tog-usenewrc' => 'Gamiton ang ginpanami nga bag-o lang gid nga na-islan (nagakilanlan JavaScript)',
+'tog-usenewrc' => 'Grupohon ang mga pagbag-o kada panid sa bag-o lang gid na ilisan kag sa ginabantayan (nagakilanlan sang JavaScript)',
 'tog-numberheadings' => 'Auto-numero heading',
 'tog-showtoolbar' => 'Ipakita ang edit toolbar (nagakilanlan JavaScript)',
 'tog-editondblclick' => 'Islan ang pahina kung i-doble klik mo (nagakilanlan JavaScript)',
@@ -32,17 +32,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Sugtan ang pag-ilis sang seksyon paagi sa pagtum-ok sang natoo sa mouse sa titulo sang seksyon (nagakinahanglan sang JavaScript)',
 'tog-showtoc' => 'Ipakita ang sinulatan sang nagabug-os (para sang mga panid nga may yara sang masobra sa 3 nga pangolohan)',
 'tog-rememberpassword' => 'Dumdumon ang akon password sa sini nga brawser (para sa indi magsobra $1 {{PLURAL:$1|nga adlaw|nga mga adlaw}})',
-'tog-watchcreations' => 'Idugang ang mga panid nga akon pagahimoon sa akon ginabantayan',
-'tog-watchdefault' => 'Idugang ang mga panid nga akon gina-ilisan sa akon ginabantayan',
-'tog-watchmoves' => 'Idugang ang mga panid nga akon pagasaylohon sa akon ginabantayan',
-'tog-watchdeletion' => 'Idugang ang mga panid nga akon pagadulaon sa akon ginabantayan',
+'tog-watchcreations' => 'Magdugang sang mga panid nga akon buhaton kag mga hilera nga akon igapasaka sa akon mga ginabantayan',
+'tog-watchdefault' => 'Idugang ang mga panid kag hilera nga akon ginbag-o sa akon mga ginabantayan',
+'tog-watchmoves' => 'Idugang ang mga panid kag hilera nga akon ginsaylo sa akon mga ginabantayan',
+'tog-watchdeletion' => 'Idugang ang mga panid kag hilera nga akon dulaon sa akon mga ginabantayan',
 'tog-minordefault' => 'Markahan dayon ang tanan nga diyutay nga pag-ilis',
 'tog-previewontop' => 'Ipakita ang preview bag-o ang kahon sang pag-ilis',
 'tog-previewonfirst' => 'Ipakita ang preview sa pinaka-una nga pag-ilis',
 'tog-nocache' => 'Untaton ang kina-iya sang brawser nga magtago sang panid',
-'tog-enotifwatchlistpages' => 'Padal-i ako sang e-mail kon ang panid nga akon ginabantayan paga-ilisan',
+'tog-enotifwatchlistpages' => 'Padal-i ako sang e-mail kon ang panid kag hilera nga akon ginabantayan paga-ilisan',
 'tog-enotifusertalkpages' => 'Padal-i ako sang e-mail kon paga-ilisan ang akon panid sang pag-hisayranay',
-'tog-enotifminoredits' => 'Padal-i man ako sang e-mail kon may diyutay nga pag-ilis sa akon mga panid',
+'tog-enotifminoredits' => 'Padal-i man ako sang e-mail kon may diyutay nga pag-ilis sa akon mga panid kag hilera',
 'tog-enotifrevealaddr' => 'Ipakita ang akon e-mail adres sa mga e-mail nga nagapahibalo',
 'tog-shownumberswatching' => 'Ipakita ang numero sang mga nagalantaw nga manug-gamit',
 'tog-oldsig' => 'Nagapabilin nga pirma:',
@@ -281,6 +281,10 @@ Lantawa ang [[Special:Version|panid sang mga bersiyon]].',
 'youhavenewmessages' => 'Ikaw may $1 ($2).',
 'newmessageslink' => 'mga bag-ong mensahe',
 'newmessagesdifflink' => 'nagligad nga ginbag-o',
+'youhavenewmessagesfromusers' => 'May yara ka sang $1 halin sa {{PLURAL:$3|lain nga manuggamit|$3 mga manuggamit}} ($2).',
+'youhavenewmessagesmanyusers' => 'May yara ka sang $1 halin sa madamo nga manuggamit ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|isa ka bag-o nga mensahe|bag-o nga mga mensahe}}',
+'newmessagesdifflinkplural' => 'pinaka-ulihi nga {{PLURAL:$1|pagbag-o|mga pagbag-o}}',
 'youhavenewmessagesmulti' => 'May mga bag-ong mensahe ka sa $1',
 'editsection' => 'ilisan',
 'editold' => 'ilisan',
@@ -333,11 +337,11 @@ May lista sang mga nagaka-igo nga mga espesyal nga mga panid sa [[Special:Specia
 'error' => 'Sala/Eror',
 'databaseerror' => 'May sala sa database',
 'dberrortext' => 'May sala sa syntax sang pagpangita sa database.
-Ini nagakahulogan nga basi may sapat-sapat sa software.
-Ang pinaka-ulihe nga pamilit sa pagpangita sa database amo ang:
-<blockquote><tt>$1</tt></blockquote>
-nga halin sa buluhaton nga "<tt>$2</tt>".
-Ang database nagbalik sang sala/eror nga "<tt>$3: $4</tt>".',
+Ini nagakahulogan nga basi may sapat-sapat/bug sa software.
+Ang pinaka-ulihe nga pagtilaw sa pagpangita sa database amo ang:
+<blockquote><code>$1</code></blockquote>
+nga halin sa buluhaton nga "<code>$2</code>".
+Ang database nagbalik sang sala/eror nga "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'May sala sa syntax sang pagpangita sa database.
 Ang pinaka-ulihe nga pamilit sa pagpangita sa database amo ang:
 "$1"
@@ -373,22 +377,27 @@ Palihog isugid sa [[Special:ListUsers/sysop|administrador]], kag i-lista ang iya
 'badarticleerror' => 'Ang ini nga hulag indi pwede mabuhat sa sini nga panid.',
 'cannotdelete' => 'Ang panid ukon hilera nga "$1" indi mahimo nga pagapanason.
 Mahimo nga napanas na ini sang iban.',
+'cannotdelete-title' => 'Indi mahimo nga dulaon ang panid nga "$1"',
+'delete-hook-aborted' => 'Ang pag-ilis gin-untat sang taga.
+Wala ini naghatag sang ano man nga eksplenasyon.',
 'badtitle' => 'Malain nga titulo',
 'badtitletext' => 'Ang ginapangayo mo nga titulo ka pahina ay sala, blangko, ukon indi ensakto ang pagtabid sang inter-lengwahe o inter-wiki na titulo.
 Siguro may-ara ini sang isa ukon madamo nga karakter nga indi ginabaton kag ginagamit sa titulo.',
-'perfcached' => 'Ang masunod nga datos nakatago lamang kag mahimo nga indi bag-o. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.',
-'perfcachedts' => 'Ang masunod nga datos nakatago lamang, kag pinaka-ulihe nga ginbag-o sang $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.',
+'perfcached' => 'Ang masunod nga datos nakatago lamang kag mahimo nga indi bag-o. May maksimum nga {{PLURAL:$1|isa ka resulta nga|$1 mga resulta nga}} ara sa nakatago nga datos.',
+'perfcachedts' => 'Ang masunod nga datos nakatago lamang, kag pinaka-ulihe nga ginbag-o sang $1. May maksimum nga {{PLURAL:$4|isa ka resulta nga|$4 mga resulta nga}} ara sa nakatago nga datos.',
 'querypage-no-updates' => 'Ang mga pagbag-o sa sini nga panid karon ginpa-untat.
 Ang datos nga yari diri indi pagliwaton.',
 'wrong_wfQuery_params' => 'Indi insakto nga mga parametro sa wfQuery()<br />
 Kapuslanan: $1<br />
 Pagpamangkot: $2',
 'viewsource' => 'Lantawon ang ginhalinan',
+'viewsource-title' => 'Lantawon ang ginhalinan sang $1',
 'actionthrottled' => 'Ang paghulag ginpunggan',
 'actionthrottledtext' => 'Bilang pagpangontra sa span, ginalimitahan ka sa pagbuhat sang sini nga paghulag sa tuman ka damo nga beses sa malip-ot nga tinion, kag naglapaw ka na sa sini nga patakaran.
 Palihog tilawan mo liwat pagkatapos sang malip-ot nga tinion.',
 'protectedpagetext' => 'Ang ini nga panid ginpangapinan agod to mapunggan ang pag-ilis sini.',
 'viewsourcetext' => 'Mahimo mo nga makita kag makopya ang ginhalinan sang sini nga panid:',
+'viewyourtext' => "Mahimo mo nga makita kag makopya ang ginhalinan sang '''imo mga pagbag-o''' sa sini nga panid:",
 'protectedinterface' => 'Ang ini nga panid nagahatag sang mga teksto sang interface para sa software, kag ginapangapinan agod indi maabuso.',
 'editinginterface' => "'''Pahibalo:''' Naga-ilis ka sang panid nga ginagamit sa paghatag sang mga teksto sang interface para sa software.
 Ang mga pagbag-o sang sini nga panid maga-apekto sa hitsura sang interface sang panid sang manug-gamit sang iban.
@@ -402,6 +411,13 @@ $2',
 'ns-specialprotected' => 'Ang mga espesyal nga panid indi mahimo nga paga-ilisan.',
 'titleprotected' => 'Ang ini nga titulo ginpangapinan batok sa pagbuhat ni [[User:$1|$1]].
 Ang iya rason amo ang "\'\'$2\'\'".',
+'filereadonlyerror' => 'Indi mahimo nga ma-ilisan ang hilera nga "$1" tungod kay ang gintaguan sang mga hilera nga "$2" ara sa estado nga mahimo lang mabasa.
+
+Ang administrador nga nag-kandado sini naghatag sang paathag nga: "$3".',
+'invalidtitle-knownnamespace' => 'Sala ang titulo sang may ngalanligwa nga "$2" kag taksto nga "$3"',
+'invalidtitle-unknownnamespace' => 'Sala nga titulo nga may wala mahibaluan nga ngalanligwa nga numero nga $1 kag teksto nga "$2"',
+'exception-nologin' => 'Wala naka-sulod',
+'exception-nologin-text' => 'Ang ini nga panid ukon tikang nagakinahanglan nga ikaw nakasulod/log-in sa sini nga wiki.',
 
 # Virus scanner
 'virus-badscanner' => "Malain nga konpigurasyon: wala makilal-an nga manuglantaw sang virus: ''$1''",
@@ -422,6 +438,7 @@ Indi pagkalimti ang pag-ilis sang imo mga [[Special:Preferences|{{SITENAME}} pag
 'remembermypassword' => 'Dumdumon ang akon pagsulod sa sini nga brawser (para sa indi magsobra $1 {{PLURAL:$1|nga adlaw|nga mga adlaw}})',
 'securelogin-stick-https' => 'Magpabilin nga nakatakod sa HTTPS pagkatapos magsulod',
 'yourdomainname' => 'Imo dominyo',
+'password-change-forbidden' => 'Indi ka mahimo nga makailis sang pasword sa sini nga wiki.',
 'externaldberror' => 'Mahimo nga may ara sang sala sa pagpamatood sang database ukon wala ka sa lugar nga magbag-o sang imo pang-guha nga akawnt.',
 'login' => 'Mag sulod',
 'nav-login-createaccount' => 'Magsulod / maghimo account',
@@ -501,6 +518,7 @@ Wala pa sang e-mail nga ipadala diri para sa bisan ano sa masunod nga mga katung
 'invalidemailaddress' => 'Ang e-mail adres indi mabaton tungod kay nagagwa nga sala ang iya plastar.
 Palihog butang sang ginplastar sing maayo nga adres ukon panason nal lang ang lugar.',
 'cannotchangeemail' => 'Ang mga e-mail adres indi mahimo nga ilisan sa sini nga wiki.',
+'emaildisabled' => 'Ang ini nga lugar indi makapadala sang mga e-mail.',
 'accountcreated' => 'Nahimo na ang akawnt',
 'accountcreatedtext' => 'Ang akawnt sang manug-gamit nga $1 nahimo na.',
 'createaccount-title' => 'Pagbuhat sang akawnt para sa {{SITENAME}}',
@@ -682,17 +700,20 @@ o [{{fullurl:{{FULLPAGENAME}}|action=edit}} islan ini nga pahina]</span>.',
 'noarticletext-nopermission' => 'Wala subong sang teksto ang ini nga panid.
 Pwede ka [[Special:Search/{{PAGENAME}}|mangita para sa titulo sang ini nga panid]] sa iban man nga panid,
 ukon <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mangita ka sang kaparehas nga logs]</span>.',
+'missing-revision' => 'Ang ini nga pag-ilis nga #$1 sang panid nga ginhinanglan nga "{{PAGENAME}}" wala naga-eksister.
+
+Ini kalabanan ginabuhat sang nagasunod nga wala na mabag-o nga link sang hisayranay sa isa ka panid nga gindula na.
+Ang mga detalye mahimo nga makita sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].',
 'userpage-userdoesnotexist' => 'Ang akawnt sang manuggamit nga "<nowiki>$1</nowiki>" wala pa marehistro.
 Palihog tsek kon luyag mo nga himuon/ilisan ang ini nga panid.',
 'userpage-userdoesnotexist-view' => 'Ang akawnt sang manuggamit nga "$1" wala pa marehistro.',
 'blocked-notice-logextract' => 'Ang ini nga manuggamit ginapunggan karon.
 Ang pinaka-ulihi nga log sa pagpuggong yara sa idalom para mahibaluan nimo:',
 'clearyourcache' => "'''Tandaan:''' Pagkatapos nga tiponon, mahimo nga kinahanglan mo pa nga i-baipas ang cache sang imo brawser agod makita ang mga pagbag-o.
-* '''Firefox / Safari:''' pinduton sing madugay ang ''Shift'' samtang ginapitik ang ''Reload'', ukon pinduton ang ''Ctrl-F5'' ukon ''Ctrl-R'' (''Command-R'' sa Mac)
-* '''Google Chrome:''' pinduton ang ''Ctrl-Shift-R'' (''Command-Shift-R'' sa Mac)
+* '''Firefox / Safari:''' pinduton sing madugay ang ''Shift'' samtang ginapitik ang ''Reload'', ukon pinduton ang ''Ctrl-F5'' ukon ''Ctrl-R'' (''-R'' sa Mac)
+* '''Google Chrome:''' pinduton ang ''Ctrl-Shift-R'' (''-Shift-R'' sa Mac)
 * '''Internet Explorer:''' pinduton sing madugay ang ''Ctrl'' samtang ginapitik ''Refresh'', ukon pinduton ang ''Ctrl-F5''
-* '''Konqueror:''' pitikon ang ''Reload'' ukon pinduton ang ''F5''
-* '''Opera:''' hawanon ang  cache sa ''Tools → Preferences''",
+* '''Opera:''' Tan-awon ang  cache sa ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''Pagbulig:''' Gamiton ang \"{{int:showpreview}}\" nga tulom-ukon agod matilawan ang imo bag-o nga CSS bag-o magtipon.",
 'userjsyoucanpreview' => "'''Pagbulig:''' Gamiton ang \"{{int:showpreview}}\" nga tulom-ukon agod matilawan ang imo bag-o nga JavaScript bag-o magtipon.",
 'usercsspreview' => "'''Tandai nga ginalantaw mo pa lang ang imo CSS sang manuggamit.'''
@@ -709,6 +730,7 @@ Sa mga pahungod nga mga panid nga .css and .js magamit sang titulo nga may gagma
 'note' => "'''Pansinon:'''",
 'previewnote' => "'''Tandaan nga prebyu lamang ini.'''
 Wala pa nabutang ang imo nga ginbag-o!",
+'continue-editing' => 'Padayunon ang pagbag-o',
 'previewconflict' => 'Ang ini nga paglantaw nagapakita sang mga teksto nga yara sa may ibabaw ayon nga amo man ang magagwa kon luyag mo na ini nga pagatiponon.',
 'session_fail_preview' => "'''Nagapangayo kami sang pasaylo! Indi namon ma-proseso ang imo pag-ilis tungod sa pagkadula sang datos sang sesyon.'''
 Palihog tilawi liwat.
@@ -724,6 +746,7 @@ Ang pag-ilis wala ginbaton agod to nga malikawan ang kalainan sang mga teksto sa
 Ini nagakatabo kon kaisa kon nagagamit ka sang nakabase sa web nga serbisyo proxy nga madamo sing lusot.",
 'edit_form_incomplete' => "'''Ang iban nga bahin sang formas sa pag-ilis wala nakalab-ot sa serber; palihog verificar kon ang imo pag-ilis santo man sa gihapon kag tilawi liwat.'''",
 'editing' => 'Gina-islan $1',
+'creating' => 'Ginabuhat ang $1',
 'editingsection' => 'Gina-Islan $1 (seksiyon)',
 'editingcomment' => 'Gina-islan ang $1 (bag-o nga bahin)',
 'editconflict' => 'May pagpamatok sa pag-ilis: $1',
@@ -747,7 +770,7 @@ Naga promisa ka man sa amon nga ikaw mismo ang nagsulat sina, o ginkopya mo ini
 Kon indi mo luyag nga ang imo sinulatan paga-ilisan nga wala sin kaluoy, ginapangabay nga indi mo ina diri pag-ipasa.<br />
 Ikam man nagasumpa sa amon karon nga ikaw mismo ang nagsulat sini, ukon ginkopya mo ini sa pampubliko nga domain ukon kaparehas nga libre nga ginkuhaan (palihog lantaw sang $1 sa mga detalye).
 '''Indi magpadala sang mga na kapirayt nga mga inubrahan nga wala sing lisensya!'''",
-'longpageerror' => "'''Eror: Ang teksto nga imo ginpasa may kalabaon nga $1, nga mas malaba pa sang ginpasugtan nga labing malaba nga $2.'''
+'longpageerror' => "'''Eror: Ang teksto nga imo ginpasa may kalabaon nga {{PLURAL:$1|isa ka kilobayt|$1 ka mga kilobayt}}, nga mas malaba pa sang ginpasugtan nga labing malaba nga {{PLURAL:$2|isa ka kilobayt|$2 ka mga kilobayt}}.'''
 Indi ini matipon.",
 'readonlywarning' => "'''Phibalo: Ang database ginkandaduhan para sa pagpabilin, gani indi ka mahimo nga magtipon sang imo mga pag-ilis subong.'''
 Mahimo nga maluyagon ikaw nga mag-utod-kag-tapik sang teksto sa isa kag hilera sang teksto kag ini pagatipon mo sa lain nga tinion.
@@ -790,6 +813,7 @@ Ini nagapakita nga gindula na.',
 'edit-no-change' => 'Ang imo pag-ilis ginpabayaan lamang, kay wala sang pagbag-o nga natabo sa teksto.',
 'edit-already-exists' => 'Indi mahimo ang bag-o nga panid.
 Naga-eksister na ini.',
+'defaultmessagetext' => 'Teksto sang mensahe nga wala pa ma-ilisan',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => "'''Pahibalo:''' Ang ini nga panid may yara sang madamo nga mahal nga pagtawag sang kapusalanan parser.
@@ -805,6 +829,13 @@ Ang ini nga pagbinaisay wala na gin-upod pa.",
 'parser-template-loop-warning' => 'Ang natiktikan nga pagpukot: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Ang ginalimitahan nga rekursyon sang templeyt nalab-ot na ($1)',
 'language-converter-depth-warning' => 'Ang ginalimitahan nga kadalumon sa pag-ilis sang hambalanon nalab-ot na ($1)',
+'node-count-exceeded-category' => 'Mga panid kon diin ang pag-isip sang node nagsobra',
+'node-count-exceeded-warning' => 'Ang panid nagsobra na sa pag-isip sang node',
+'expansion-depth-exceeded-category' => 'Mga panid kon diin ang kadalumon sang pagpalapad nagsobra na',
+'expansion-depth-exceeded-warning' => 'Ang panid nagsobra na sa kadalumon sang pagpalapad',
+'parser-unstrip-loop-warning' => 'May loop nga unstrip nga nakita',
+'parser-unstrip-recursion-limit' => 'Naglapaw ka na sa ginapasugtan nga pagliwat-liwat ($1)',
+'converter-manual-rule-error' => 'May sala nga nakita sa mano-mano nga pagsulunsan sa pagbadbad sang lenggwahe',
 
 # "Undo" feature
 'undo-success' => 'Ang pag-ilis indi mahuman.
@@ -943,6 +974,7 @@ Palihog sekyar sang mga logs.',
 'revdelete-reason-dropdown' => '*Masami nga rason sang pagdula
 ** Paglapas sang kinamatarong-kontra-pagkopya
 ** Indi nagakadapat nga impormasyon pangkaugalingon
+** Indi nagakadapat nga gamit-pangalan
 ** Mahimo nagapangguba-kinamatarong nga impormasyon',
 'revdelete-otherreason' => 'Iban/dugang nga rason:',
 'revdelete-reasonotherlist' => 'Iban nga rason',
@@ -952,7 +984,7 @@ Palihog sekyar sang mga logs.',
 # Suppression log
 'suppressionlog' => 'Log sang pagkakas',
 'suppressionlogtext' => 'Sa idalom isa ka lista sang mga gindula kag pagpugong nga naga-dala sang mga unod nga gintago halin sa mga administrador.
-Lantawa ang [[Special:BlockList|lista sang mga ginpunggan nga IP]] para sa lista sang mga naga-eksister nga pagdula kag pagpugong.',
+Lantawa ang [[Special:BlockList|lista sang mga ginpunggan]] para sa lista sang mga naga-eksister nga pagdula kag pagpugong.',
 
 # History merging
 'mergehistory' => 'Isugpon ang mga kasaysayan sang panid',
@@ -986,7 +1018,9 @@ Tandai nga ang paggamit sang mga link sa pagnabigar magaliwat sining hilera.',
 'mergelogpagetext' => 'Sa dalom isa ka lista sang mga pinaka-ulihe nga pagsugpon sang isa ka kasaysayan sang panid sa isa pa gid.',
 
 # Diffs
-'history-title' => 'Rebisyon sang historya sa "$1"',
+'history-title' => 'Rebisyon sang hisayranay sa "$1"',
+'difference-title' => 'Kinalain sang mga pagbag-o sa "$1"',
+'difference-title-multipage' => 'Kinalain sang mga panid nga "$1" kag "$2"',
 'difference-multipage' => '(Kinala-in sang mga panid)',
 'lineno' => 'Linya $1:',
 'compareselectedversions' => 'I-kompara ang pinilian nga mga rebisyon',
@@ -994,6 +1028,10 @@ Tandai nga ang paggamit sang mga link sa pagnabigar magaliwat sining hilera.',
 'editundo' => 'bawi-on ang pag ilis',
 'diff-multi' => '({{PLURAL:$1|Isa ka tunga-tunga nga pagbag-o|$1 ka tunga-tunga nga mga pagbag-o}} sang {{PLURAL:$2|isa ka manuggamit|$2 ka mga manuggamit}} nga wala ginpakita)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Isa ka tunga-tunga nga pagbag-o|$1 ka tunga-tunga nga mga pagbag-o}} sang masobra $2 ka {{PLURAL:$2|manuggamit|mga manuggamit}} nga wala ginpakita)',
+'difference-missing-revision' => 'May {{PLURAL:$2|isa ka pagbag-o|$2 ka mga pagbag-o}} san sini nga kinalain ($1) ang wala makita.
+
+Ini kalabanan ginabuhat sang nagasunod nga wala na mabag-o nga link sang isa ka panid nga gindula na.
+Ang mga detalye mahimo nga makita sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].',
 
 # Search results
 'searchresults' => 'Resulta sang Pagpangita',
@@ -1084,11 +1122,12 @@ Tandai nga ang ila nga palasulundan sang mga unod sang {{SITENAME}} mahimo nga m
 'prefs-beta' => 'Mga kaupod sang Beta',
 'prefs-datetime' => 'Petsa kag oras',
 'prefs-labs' => 'Mga kaupod sang Labs',
+'prefs-user-pages' => 'Mga panid sang manuggamit',
 'prefs-personal' => 'Profayl sang manuggamit',
 'prefs-rc' => 'Mga Bag-o nga Inislan',
 'prefs-watchlist' => 'Lista sang mga ginabantayan',
 'prefs-watchlist-days' => 'Mga adlaw nga ipakita sa lista sang ginabantayan:',
-'prefs-watchlist-days-max' => 'Maximum $1 {{PLURAL:$1|day|days}}',
+'prefs-watchlist-days-max' => 'Indi magtaas sa $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}}',
 'prefs-watchlist-edits' => 'Ang pinakataas nga beses sang pag-ilis nga ipakita sa ginpalawig nga lista sang ginabantayan:',
 'prefs-watchlist-edits-max' => 'Pinakataas nga numero: 1000',
 'prefs-watchlist-token' => 'Token sang lista sang ginabantayan:',
@@ -1168,6 +1207,11 @@ Ini indi dapat nga magsobra sa $1 {{PLURAL:$1|ka karakter|ka mga karakter}} ang
 'gender-female' => 'Babayi',
 'prefs-help-gender' => '',
 'email' => 'E-mail',
+'prefs-help-realname' => 'Ang matood-tood nga pangalan mahimo nga indi gamiton.
+Kon imo ini luyag nga ihatag, ini gamiton sa paghatag sing pagkilala sa imo nga gin-ubra.',
+'prefs-help-email' => 'Ang adres sang e-mail mahimo nga indi ihatag, apang kinahanglan ini sa pagliwat sang paswod, kon matabo nga imo ini malipatan.',
+'prefs-help-email-others' => 'Mahimo mo man pilion nga ma-kontak ka sang iban paagi sa e-mail paagi sa isa ka link sa imo manuggamit ukon gina-hisayranay nga panid.
+Ang imo adres sang e-mail wala ginapakita kon kontakon ka sang iban.',
 'prefs-help-email-required' => 'Kinahanglan ang imo e-mail',
 'prefs-signature' => 'pirma',
 
index f58fa4f..bc1fbfe 100644 (file)
@@ -481,7 +481,7 @@ $messages = array(
 'namespaces' => 'Imenski prostori',
 'variants' => 'Inačice',
 
-'errorpagetitle' => 'Pogreška',
+'errorpagetitle' => 'Pogrješka',
 'returnto' => 'Vrati se na $1.',
 'tagline' => 'Izvor: {{SITENAME}}',
 'help' => 'Pomoć',
@@ -781,7 +781,7 @@ koristiti staru lozinku.',
 Prije nego što pošaljemo daljnje poruke, molimo Vas da otvorite e-mail i slijedite u njemu sadržana uputstva kako biste potvrdili da je e-mail adresa zaista Vaša.',
 'throttled-mailpassword' => 'Već Vam je poslan e-mail za promjenu lozinke, u {{PLURAL:$1|zadnjih sat vremena|zadnja $1 sata|zadnjih $1 sati}}.
 Da bi spriječili zloupotrebu, moguće je poslati samo jedan e-mail za promjenu lozinke {{PLURAL:$1|svakih sat vremena|svaka $1 sata|svakih $1 sati}}.',
-'mailerror' => 'Pogreška pri slanju e-maila: $1',
+'mailerror' => 'Pogrješka pri slanju e-pošte: $1',
 'acct_creation_throttle_hit' => 'Posjetitelji ovog wikija koji rabe Vašu IP adresu napravili su {{PLURAL:$1|1 račun|$1 računa}} u posljednjem danu, što je najveći dopušteni broj u tom vremenskom razdoblju.
 Zbog toga posjetitelji s ove IP adrese trenutačno ne mogu otvoriti nove suradničke račune.',
 'emailauthenticated' => 'Vaša e-mail adresa je ovjerena $2 u $3.',
@@ -1019,7 +1019,8 @@ ove stranice. Ako je sačuvate, sve će promjene učinjene nakon ove inačice bi
 Također nam obećavate da ste ovo sami napisali, ili da ste to prepisali iz nečeg što je u javnom vlasništvu ili pod sličnom slobodnom licencijom.
 '''NE POSTAVLJAJTE RADOVE ZAŠTIĆENE AUTORSKIM PRAVIMA BEZ DOPUŠTENJA!'''",
 'copyrightwarning2' => "Molimo uočite da svi suradnici mogu mijenjati sve doprinose na {{SITENAME}}. Ako ne želite da se Vaše pisanje nemilosrdno uređuje, nemojte ga slati ovdje.<br /> Također nam obećavate da ste ovo sami napisali, ili da ste to prepisali iz nečeg što je u javnom vlasništvu ili pod sličnom slobodnom licencijom (vidi $1 za detalje). '''NE POSTAVLJAJTE RADOVE ZAŠTIĆENE AUTORSKIM PRAVIMA BEZ DOPUŠTENJA!'''",
-'longpageerror' => "'''GREŠKA: Tekst koji ste unijeli dug je $1 kilobajta, što je više od maksimalnih $2 kilobajta. Nije ga moguće snimiti.'''",
+'longpageerror' => "'''Pogrješka: Tekst koji ste unijeli dug je {{PLURAL:$1|jedan kilobajt|$1 kilobajta}}, što je više od maksimalno {{PLURAL:$2|jednog kilobajta|$2 kilobajta}}.'''
+Nije ga moguće snimiti.",
 'readonlywarning' => "'''UPOZORENJE: Baza podataka je zaključana zbog održavanja, pa trenutačno ne možete sačuvati svoje
 promjene. Najbolje je da kopirate i zaljepite tekst u tekstualnu datoteku te je snimite za kasnije.'''
 
@@ -1203,16 +1204,16 @@ $1",
 'revdel-restore-visible' => 'vidljive izmjene',
 'pagehist' => 'Povijest stranice',
 'deletedhist' => 'Obrisana povijest',
-'revdelete-hide-current' => 'Greška u skrivanju stavke datirane $2, $1: ovo je trenutačna inačica. Ne može biti skrivena.',
-'revdelete-show-no-access' => 'Greška u prikazivanju stavke od $2, $1: ova stavka je označena kao "ograničeno".
+'revdelete-hide-current' => 'Pogrješka u skrivanju stavke datirane $2, $1: ovo je trenutačna inačica. Ne može biti skrivena.',
+'revdelete-show-no-access' => 'Pogrješka u prikazivanju stavke od $2, $1: ova stavka označena je kao "ograničeno".
 Nemate pristup do nje.',
-'revdelete-modify-no-access' => 'Greška pri izmjeni stavke od $2, $1: ova stavka je označena kao "ograničeno".
+'revdelete-modify-no-access' => 'Pogrješka pri izmjeni stavke od $2, $1: ova je stavka označena kao "ograničeno".
 Nemate pristup do nje.',
-'revdelete-modify-missing' => 'Greška pri izmjeni izmjene broj $1: nedostaje u bazi!',
+'revdelete-modify-missing' => 'Pogrješka pri izmjeni izmjene broj $1: nedostaje u bazi!',
 'revdelete-no-change' => "'''Upozorenje:''' stavka od $2, $1 već ima tražene postavke vidljivosti.",
-'revdelete-concurrent-change' => 'Greška pri izmjeni stavke od $2, $1: izgleda da je njen status promijenio netko drugi dok ste ju pokušavali mijenjati.
+'revdelete-concurrent-change' => 'Pogrješka pri izmjeni stavke od $2, $1: izgleda da je njen status promijenio netko drugi dok ste ju pokušavali mijenjati.
 Provjerite evidencije.',
-'revdelete-only-restricted' => 'Greška pri skrivanju stavke od dana $2, $1: ne možete ukloniti stavke od pregledavanja administratora bez da odaberete neku od drugih mogućnosti vidljivosti.',
+'revdelete-only-restricted' => 'Pogrješka pri skrivanju stavke od dana $2, $1: ne možete ukloniti stavke od pregledavanja administratora bez da odaberete neku od drugih mogućnosti vidljivosti.',
 'revdelete-reason-dropdown' => '*Uobičajeni razlozi brisanja
 ** Kršenje autorskih prava
 ** Neprimjereni osobni podaci',
@@ -1834,9 +1835,9 @@ Za optimalnu sigurnost, img_auth.php je onemogućena.',
 'http-invalid-url' => 'Nevaljan URL: $1',
 'http-invalid-scheme' => 'URL-ovi s prefiksom "$1" nisu podržani.',
 'http-request-error' => 'HTTP zahtjev nije uspio zbog nepoznate pogreške.',
-'http-read-error' => 'Greška pri čitanju HTTP.',
+'http-read-error' => 'Pogrješka pri čitanju HTTP.',
 'http-timed-out' => 'HTTP zahtjev je istekao.',
-'http-curl-error' => 'Greška pri otvaranju URL-a: $1',
+'http-curl-error' => 'Pogrješka pri otvaranju URL-a: $1',
 'http-host-unreachable' => 'URL nije dostupan.',
 'http-bad-status' => 'Došlo je do problema tijekom HTTP zahtjeva: $1 $2',
 
@@ -1887,7 +1888,7 @@ Kad je filtriran po korisniku, popis prikazuje samo one datoteke čiju posljednj
 'imagelinks' => 'Upotreba datoteke',
 'linkstoimage' => '{{PLURAL:$1|Sljedeća stranica povezuje|$1 sljedećih stranice povezuju}} na ovu datoteku:',
 'linkstoimage-more' => 'Više od $1 {{PLURAL:$1|stranice povezuje|stranica povezuje}} na ovu datoteku.
-Slijedeći popis prikazuje {{PLURAL:$1|stranice koje|prvih $1 stranica koje}} vode na ovu datoteku.
+Sljedeći popis prikazuje {{PLURAL:$1|stranice koje|prvih $1 stranica koje}} vode na ovu datoteku.
 [[Special:WhatLinksHere/$2|Ovdje se nalazi]] potpuni popis.',
 'nolinkstoimage' => 'Nijedna stranica ne povezuje na ovu sliku.',
 'morelinkstoimage' => 'Pogledaj [[Special:WhatLinksHere/$1|više poveznica]] za ovu datoteku.',
@@ -2042,7 +2043,7 @@ koja obično ukazuje na "pravu" odredišnu stranicu, na koju bi trebalo pokaziva
 'shortpages' => 'Kratke stranice',
 'longpages' => 'Duge stranice',
 'deadendpages' => 'Slijepe ulice',
-'deadendpagestext' => 'Slijedeće stranice nemaju poveznice na druge stranice na ovom wikiju ({{SITENAME}}).',
+'deadendpagestext' => 'Sljedeće stranice nemaju poveznice na druge stranice na ovom wikiju ({{SITENAME}}).',
 'protectedpages' => 'Zaštićene stranice',
 'protectedpages-indef' => 'Samo neograničene zaštite',
 'protectedpages-cascade' => 'Samo prenosiva zaštita',
@@ -2089,6 +2090,7 @@ Molimo obratite pozornost da druge web stranice mogu povezivati sliku izravnim U
 Možete suziti prikaz odabirući tip evidencije, suradničko ime ili stranicu u upitu.',
 'logempty' => 'Nema pronađenih stavki.',
 'log-title-wildcard' => 'Traži stranice koje počinju s navedenim izrazom',
+'showhideselectedlogentries' => 'Otkrij/sakrij odabrane evidencije',
 
 # Special:AllPages
 'allpages' => 'Sve stranice',
@@ -2504,7 +2506,7 @@ Posljednja stavka evidencije blokiranja navedena je niže kao napomena:',
 'istemplate' => 'kao predložak',
 'isimage' => 'poveznica na datoteku',
 'whatlinkshere-prev' => '{{PLURAL:$1|prethodna|prethodne|prethodnih}} $1',
-'whatlinkshere-next' => '{{PLURAL:$1|slijedeća|slijedeće|slijedećih}} $1',
+'whatlinkshere-next' => '{{PLURAL:$1|sljedeća|sljedeće|sljedećih}} $1',
 'whatlinkshere-links' => '← poveznice',
 'whatlinkshere-hideredirs' => '$1 preusmjeravanja',
 'whatlinkshere-hidetrans' => '$1 transkluzije',
@@ -2624,7 +2626,7 @@ Za popis trenutačnih zabrana i blokiranja vidi [[Special:BlockList|popis blokir
 'ipb-needreblock' => '$1 je već blokiran. Želite promijeniti postavke blokiranja?',
 'ipb-otherblocks-header' => '{{PLURAL:$1|Ostalo blokiranje|Ostala blokiranja}}',
 'unblock-hideuser' => 'Ne možete deblokirati ovog suradnika, jer je njegovo suradničko ime skriveno.',
-'ipb_cant_unblock' => 'Pogreška: blok ID $1 nije nađen. Moguće je da je suradnik već odblokiran.',
+'ipb_cant_unblock' => 'Pogrješka: blok ID $1 nije nađen. Moguće je da je suradnik već odblokiran.',
 'ipb_blocked_as_range' => 'Pogreška: IP adresa $1 nije blokirana direktno te stoga ne može biti odblokirana. Blokirana je kao dio opsega $2, koji može biti odblokiran.',
 'ip_range_invalid' => 'Raspon IP adresa nije valjan.',
 'ip_range_toolarge' => 'Opsezi blokiranja veći od /$1 nisu dozvoljeni.',
@@ -3581,7 +3583,7 @@ Potvrdite namjeru vraćanja ovog članka.",
 
 # Multipage image navigation
 'imgmultipageprev' => '← prethodna slika',
-'imgmultipagenext' => 'slijedeća slika →',
+'imgmultipagenext' => 'sljedeća slika →',
 'imgmultigo' => 'Kreni!',
 'imgmultigoto' => 'Idi na stranicu $1',
 
index b7c2b96..a9c2d02 100644 (file)
@@ -529,8 +529,9 @@ Wotprašenje: $2',
 'protectedpagetext' => 'Strona je přećiwo wobdźěłowanju škitana.',
 'viewsourcetext' => 'Móžeš sej žórłowy tekst tuteje strony wobhladać a jón kopěrować:',
 'viewyourtext' => "Móžeš sej žórłowy tekst '''swojich změnow''' wobhladać a do slědowaceje strony kopěrować:",
-'protectedinterface' => 'Tuta strona wobsahuje tekst za wužiwarski powjerch softwary a je škitana, zo by so znjewužiwanje zadźěwało.',
-'editinginterface' => "'''Warnowanje:''' Wobdźěłuješ stronu, kotraž so wužiwa, zo by tekst za wužiwarski powjerch softwary k dispoziciji stajiła. Změny na stronje  wuskutkuja so na napohlad wužiwarskeho powjercha za druhich wužiwarjow. Hlej za přełožki [//translatewiki.net/wiki/Main_Page?setlang=hsb translatewiki.net], projekt lokalizacije MediaWiki.",
+'protectedinterface' => 'Tuta strona wobsahuje tekst za wužiwarski powjerch softwary na tutym wikiju a je škitana, zo by so znjewužiwanje zadźěwało.
+Zo by přełožki za wšě wikije přidał abo změnił, wužij prošu [//translatewiki.net/ translatewiki.net], projekt MediaWiki za lokalizaciju.',
+'editinginterface' => "'''Warnowanje:''' Wobdźěłuješ stronu, kotraž so wužiwa, zo by tekst za wužiwarski powjerch softwary k dispoziciji stajiła. Změny na stronje  wuskutkuja so na napohlad wužiwarskeho powjercha za druhich wužiwarjow na tutym wikiju. Zo by přełožki za wšě wikije přidał abo změnił, wužij prošu [//translatewiki.net/ translatewiki.net], projekt MediaWiki za lokalizaciju.",
 'sqlhidden' => '(SQL wotprašenje schowane)',
 'cascadeprotected' => 'Tuta strona je za wobdźěłowanje zawrjena, dokelž je w {{PLURAL:$1|slědowacej stronje|slědowacymaj stronomaj|slědowacych stronach|slědowacych stronach}} zapřijata, {{PLURAL:$1|kotraž je|kotrejž stej|kotrež su|kotrež su}} přez kaskadowu opciju {{PLURAL:$1|škitana|škitanej|škitane|škitane}}:
 $2',
@@ -790,7 +791,7 @@ Hesło za tute nowe konto da so na stronje ''[[Special:ChangePassword|hesło zm
 'anontalkpagetext' => "---- ''To je diskusijna strona za anonymneho wužiwarja, kiž hišće konto wutworił njeje abo je njewužiwa. Dyrbimy tohodla numerisku IP-adresu wužiwać, zo bychmy jeho/ju identifikowali. Tajka IP-adresa hodźi so wot wjacorych wužiwarjow zhromadnje wužiwać. Jeli sy anonymny wužiwar a měniš, zo buchu irelewantne komentary k tebi pósłane, [[Special:UserLogin/signup|wutwor prošu konto]] abo [[Special:UserLogin|přizjew so]], zo by přichodnu šmjatańcu z anonymnymi wužiwarjemi wobešoł.''",
 'noarticletext' => 'Tuchwilu tuta strona žadyn tekst njewobsahuje. Móžeš [[Special:Search/{{PAGENAME}}|tutón titul strony na druhich stronach pytać]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} wotpowědne protokole pytać] abo [{{fullurl:{{FULLPAGENAME}}|action=edit}} tutu stronu wobdźěłać]</span>.',
 'noarticletext-nopermission' => 'Tuchwilu žadyn tekst na tutej stronje njeje.
-Móžeš [[Special:Search/{{PAGENAME}}|tutón titul strony]] na druhich stronach pytać abo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pytaj wotpowědne protokole]</span>.',
+Móžeš [[Special:Search/{{PAGENAME}}|tutón titul strony]] na druhich stronach pytać abo <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pytaj wotpowědne protokole]</span>, ale nimaš prawo, strou wutworić.',
 'missing-revision' => 'Wersija #$1 strony z mjenom "{{PAGENAME}}" njeeksistuje.
 
 Přičina je zwjetša zestarjeny wotkaz w stawiznach k stronje, kotraž je so zhašała.
@@ -1048,7 +1049,9 @@ Prošu přepruwuj protokole.',
 'revdelete-only-restricted' => 'Zmylk při chowanju zapiska wot $2, $1; njemóžeš zapiski před wočemi administratorow potłóčić, bjez toho zo wuběraš tež jednu z druhich widźomnosćowych opcijow.',
 'revdelete-reason-dropdown' => '*Zwučene přičiny za wušmórnjenje
 ** Přeńdźenje awtorskeho prawa
-** Njepřihódne wosobinske informacije',
+** Njepřihódne komentary abo wosobinske informacije
+** Njepřihódne wužiwarske mjeno
+** Potencielnje ranjace informacije',
 'revdelete-otherreason' => 'Druha/přidatna přičina:',
 'revdelete-reasonotherlist' => 'Druha přičina',
 'revdelete-edit-reasonlist' => 'Přičiny za wušmórnjenje wobdźěłać',
@@ -1243,7 +1246,7 @@ Tu je připadnje wupłodźena hódnota, kotruž móžeš wužiwać: $1',
 'timezoneregion-indian' => 'Indiski ocean',
 'timezoneregion-pacific' => 'Pacifiski ocean',
 'allowemail' => 'Mejlki wot druhich wužiwarjow přijimować',
-'prefs-searchoptions' => 'Pytanske opcije',
+'prefs-searchoptions' => 'Pytać',
 'prefs-namespaces' => 'Mjenowe rumy',
 'defaultns' => 'Hewak w tutych mjenowych rumach pytać:',
 'default' => 'standard',
@@ -1409,7 +1412,7 @@ Smě mjenje hač $1 {{PLURAL:$1|znamješko|znamješce|znamješka|znamješkow}} d
 # User rights log
 'rightslog' => 'Protokol zrjadowanja wužiwarskich prawow',
 'rightslogtext' => 'To je protokol změnow wužiwarskich prawow.',
-'rightslogentry' => 'skupinowe čłonstwo za $1 z $2 na $3 změnjene',
+'rightslogentry' => 'změni skupinske čłonstwo za $1 z $2 do $3',
 'rightslogentry-autopromote' => 'je so awtomatisce wot $2 do $3 změnił',
 'rightsnone' => '(ničo)',
 
@@ -1666,7 +1669,7 @@ $1',
 'backend-fail-internal' => 'W składowanskim backendźe "$1" je njeznaty zmylk wustupił.',
 'backend-fail-contenttype' => 'Wobsahowy typ dataje, kotraž ma so na "$1" składować, njeda so zwěsćić.',
 'backend-fail-batchsize' => 'Staplowa dataja, kotraž {{PLURAL:$1|jednu operaciju|$1 operaciji|$1 operacije|$1 operacijow}} wobsahuje,  je so  na składowanski backend pósłała; limit je $2 {{PLURAL:$2|operaciju|operaciji|operacije|operacijow}} .',
-'backend-fail-usable' => 'Dataja $1 njeda so njedosahacych prawow  dla abo falowacych zapisow dla pisać.',
+'backend-fail-usable' => 'Dataja "$1" njeda so njedosahacych prawow  abo falowacych zapisow dla ani čitać ani pisać.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Njeje žadyn zwisk ze žurnalowej datowej banku za składowanski backend "$1" móžno.',
@@ -2870,7 +2873,7 @@ W poslednim padźe móžeš tež wotkaz wužiwać, na př. „[[{{#Special:Expor
 'pageinfo-authors' => 'Cyłkowna ličba rozdźělnych awtorow',
 'pageinfo-recent-edits' => 'Ličba najnowšich změnow (za zańdźenych $1)',
 'pageinfo-recent-authors' => 'Najnowša ličba rozdźělnych awtorow',
-'pageinfo-restriction' => 'Škit strony (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Škit strony ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magiske słowo|Magiskej słowje|Magiske słowa|Magiske słowa}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Schowana kategorija|Schowanej kategoriji|Schowane kategorije|Schowane kategorije}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Zapřijata předłoha|Zapřijatej předłoze|Zapřijate předłohi|Zapřijate předłohi}} ($1)',
index 03586e4..5863d2f 100644 (file)
@@ -573,7 +573,7 @@ További információkat a [[Special:Version|verzióinformációs lapon]] talál
 
 'ok' => 'OK',
 'retrievedfrom' => 'A lap eredeti címe: „$1”',
-'youhavenewmessages' => '$1 a vitalapodon! ($2. külön is megtekintheted)',
+'youhavenewmessages' => '$1 a vitalapodon! ($2 külön is megtekintheted.)',
 'newmessageslink' => 'új üzenet vár',
 'newmessagesdifflink' => 'az utolsó üzenetet',
 'youhavenewmessagesmanyusers' => '$1ed van több szerkesztőtől ($2).',
@@ -687,7 +687,7 @@ Lekérdezés: $2',
 'viewsourcetext' => 'Megtekintheted és másolhatod a lap forrását:',
 'viewyourtext' => "Megtekintheted és kimásolhatod a '''saját szerkesztéseidet''' az alábbi lapra:",
 'protectedinterface' => 'Ez a lap a szoftver felületéhez szolgáltat szöveget, és a visszaélések elkerülése miatt le van zárva.',
-'editinginterface' => "'''Vigyázat:''' egy olyan lapot szerkesztesz, ami a MediaWiki szoftver felületéhez tartozik. A lap megváltoztatása hatással lesz más szerkesztők számára is. Fordításra inkább használd a MediaWiki fordítására indított kezdeményezést, a [//translatewiki.net/wiki/Main_Page?setlang=hu translatewiki.net-et].",
+'editinginterface' => "'''Vigyázat:''' egy olyan lapot szerkesztesz, ami a MediaWiki szoftver felületéhez tartozik. A lap megváltoztatása hatással lesz a kinézetre, ahogy más szerkesztők látják a lapot. Fordításra inkább használd a MediaWiki fordítására indított kezdeményezést, a [//translatewiki.net/wiki/Main_Page?setlang=hu translatewiki.net-et].",
 'sqlhidden' => '(rejtett SQL lekérdezés)',
 'cascadeprotected' => 'Ez a lap szerkesztés elleni védelemmel lett ellátva, mert a következő {{PLURAL:$1|lapon|lapokon}} be van kapcsolva a „kaszkádolt” védelem:
 $2',
@@ -1218,7 +1218,8 @@ Ellenőrizd a naplókat.',
 'revdelete-only-restricted' => 'Hiba a(z) $1 $2 időbélyegű elem elrejtésekor: nem rejthetsz el az adminisztrátorok elől elemeket anélkül, hogy ne választanál ki egy másik elrejtési beállítást.',
 'revdelete-reason-dropdown' => '*Általános törlési okok
 ** Jogsértő tartalom
-** Kényes személyes információk',
+** Kényes személyes információk
+** Potenciális becsületsértő információk',
 'revdelete-otherreason' => 'Más/további ok:',
 'revdelete-reasonotherlist' => 'Más ok',
 'revdelete-edit-reasonlist' => 'Törlési okok szerkesztése',
@@ -2783,7 +2784,7 @@ Kérlek, válassz egy másik nevet.',
 
 Az átnevezés céljaként megadott „[[:$1]]” szócikk már létezik.  Ha az átnevezést végre akarod hajtani, ezt a lapot törölni kell.  Valóban ezt szeretnéd?',
 'delete_and_move_confirm' => 'Igen, töröld a lapot',
-'delete_and_move_reason' => 'Törölve, hogy legyen hely átmozgatni [[$1]] lapot.',
+'delete_and_move_reason' => 'átnevezendő lap célneve felszabadítva „[[$1]]” számára',
 'selfmove' => 'A cikk jelenlegi címe megegyezik azzal, amire át szeretnéd mozgatni. Egy szócikket saját magára mozgatni nem lehet.',
 'immobile-source-namespace' => 'A(z) „$1” névtér lapjai nem nevezhetőek át',
 'immobile-target-namespace' => 'A(z) „$1” névtérbe nem mozgathatsz át lapokat',
@@ -3881,8 +3882,8 @@ A képek teljes méretben jelennek meg, más fájltípusok közvetlenül a hozz
 'revdelete-unrestricted' => 'felfedett az adminisztrátoroknak',
 'logentry-move-move' => '$1 átnevezte a(z) $3 lapot a következő névre: $4',
 'logentry-move-move-noredirect' => '$1 átnevezte a(z) $3 lapot $4 lapra átirányítás nélkül',
-'logentry-move-move_redir' => '$1 átnevezte a(z) $3 lapot $4 lapra átirányítással',
-'logentry-move-move_redir-noredirect' => '$1 átnevezte a(z) $3 lapot $4 lapra átirányítás nélkül',
+'logentry-move-move_redir' => '$1 átnevezte a(z) $3 lapot $4 lapra az átirányítást felülírva',
+'logentry-move-move_redir-noredirect' => '$1 átnevezte a(z) $3 lapot $4 lapra az átirányítást felülírva, átirányítás nélkül',
 'logentry-patrol-patrol' => '$1 a(z) $3 lap $4 változatát ellenőrzöttnek jelölte',
 'logentry-patrol-patrol-auto' => '$1 a(z) $3 lap $4 változatát automatikusan ellenőrzöttnek jelölte',
 'logentry-newusers-newusers' => '$1 létrehozott egy felhasználói fiókot',
index 738b529..135e150 100644 (file)
@@ -523,10 +523,10 @@ Per favor reprova post alcun minutas.',
 'protectedpagetext' => 'Iste pagina ha essite protegite contra modificationes.',
 'viewsourcetext' => 'Tu pote vider e copiar le codice-fonte de iste pagina:',
 'viewyourtext' => "Tu pote vider e copiar le fonte de '''tu modificationes''' de iste pagina:",
-'protectedinterface' => 'Iste pagina contine texto pro le interfacie del software, e es protegite pro impedir le abuso.',
+'protectedinterface' => 'Iste pagina contine texto pro le interfacie del software de iste wiki, e es protegite pro impedir le abuso. Pro adder o modificar traductiones pro tote le wikis, per favor usa [//translatewiki.net/ translatewiki.net], le projecto de traduction de MediaWiki.',
 'editinginterface' => "'''Attention:''' Le texto de iste pagina face parte del interfacie pro le software.
-Omne modification a iste pagina cambiara le apparentia del interfacie pro altere usatores.
-Pro traductiones, per favor considera usar [//translatewiki.net/wiki/Main_Page?setlang=ia translatewiki.net], le projecto pro localisar MediaWiki.",
+Omne modification a iste pagina cambiara le apparentia del interfacie pro altere usatores de iste wiki.
+Pro adder o modificar traductiones pro tote le wikis, per favor usa [//translatewiki.net/ translatewiki.net], le projecto de traduction de MediaWiki.",
 'sqlhidden' => '(Consulta SQL non monstrate)',
 'cascadeprotected' => 'Iste pagina ha essite protegite contra modificationes, proque illo es includite in le sequente {{PLURAL:$1|pagina, le qual|paginas, le quales}} es protegite usante le option "cascada":
 $2',
@@ -3023,7 +3023,7 @@ Le causa es probabilemente un ligamine verso un sito externe que es presente in
 'pageinfo-authors' => 'Numero total de autores distincte',
 'pageinfo-recent-edits' => 'Numero de modificationes recente (intra le ultime $1)',
 'pageinfo-recent-authors' => 'Numero de autores distincte recente',
-'pageinfo-restriction' => 'Protection del pagina (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Protection del pagina ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Parola|Parolas}} magic ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria|Categorias}} celate ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Patrono|Patronos}} transcludite ($1)',
index ff96cb3..cd02b48 100644 (file)
@@ -600,6 +600,10 @@ $1',
 'youhavenewmessages' => 'Anda mempunyai $1 ($2).',
 'newmessageslink' => 'pesan baru',
 'newmessagesdifflink' => 'perubahan terakhir',
+'youhavenewmessagesfromusers' => 'Anda memiliki $1 dari {{PLURAL:$3||}}pengguna lain ($2).',
+'youhavenewmessagesmanyusers' => 'Anda memiliki $1 dari pengguna lain ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1||}}pesan baru',
+'newmessagesdifflinkplural' => '{{PLURAL:$1||}}perubahan terakhir',
 'youhavenewmessagesmulti' => 'Anda mendapat beberapa pesan baru pada $1',
 'editsection' => 'sunting',
 'editold' => 'sunting',
@@ -2005,7 +2009,7 @@ Mungkin Anda ingin menyunting keterangan pada [$2 halaman deskripsi berkas] di s
 
 # MIME search
 'mimesearch' => 'Pencarian MIME',
-'mimesearch-summary' => 'Halaman ini menyediakan fasilitas menyaring berkas berdasarkan tipe MIME nya. Masukkan: contenttype/subtype, misalnya <code>image/jpeg</code>.',
+'mimesearch-summary' => 'Halaman ini menyediakan fasilitas menyaring berkas berdasarkan tipe MIME-nya. Masukkan: contenttype/subtype, misalnya <code>image/jpeg</code>.',
 'mimetype' => 'Tipe MIME:',
 'download' => 'unduh',
 
index aab9cf2..3af5815 100644 (file)
@@ -38,45 +38,45 @@ $messages = array(
 # User preference toggles
 'tog-underline' => 'Pinag-ugisan ti silpo:',
 'tog-justify' => 'Limpiaen dagiti parapo',
-'tog-hideminor' => 'Ilemmeng dagiti bassit a panagbaliw kadagiti naudi a panagisukat',
+'tog-hideminor' => 'Ilemmeng dagiti bassit a panagbaliw kadagiti naudi a sinuk-sukatan',
 'tog-hidepatrolled' => 'Ilemmeng dagiti napatruliaan nga inurnos kadagiti naudi a sinuk-sukatan',
-'tog-newpageshidepatrolled' => 'Ilemmeng dagiti napatruliaan a panid idiay baro a listaan ti panid',
+'tog-newpageshidepatrolled' => 'Ilemmeng dagiti napatruliaan a panid manipud ti baro a listaan ti panid',
 'tog-extendwatchlist' => 'Ipalawa ti listaan ti bambantayan tapno maipakita amin a nasukatan, tapno saan laeng a dagiti nabiit',
-'tog-usenewrc' => 'Dagiti grupo panagbaliw babaen ti panid kadagiti kinaudi a panagbaliw ken banbantayan  (masapul ti JavaScript)',
+'tog-usenewrc' => 'Dagiti grupo panagbaliw babaen ti panid kadagiti kinaudi a panagbaliw ken banbantayan  (masapul ti JavaScript)',
 'tog-numberheadings' => 'Automatiko a pabilangan dagiti paulo',
 'tog-showtoolbar' => 'Ipakita ti ramit ti panag-urnos (masapul ti JavaScript)',
 'tog-editondblclick' => 'Urnosen dagiti panid iti mamindua a panagtakla (masapul ti JavaScript)',
 'tog-editsection' => 'Pakabaelan ti panag-urnos iti paset babaen kadagiti [urnosen] a  panilpo',
-'tog-editsectiononrightclick' => 'Ikkan ti pakabaelan ti paset  a panag-urnos no agtakla ti kanawan kadagiti paset a titulo (masapul ti JavaScript)',
-'tog-showtoc' => 'Ipakita ti tabla dagiti linaon (para kadagiti panid nga addan ti ad-adu ngem dagiti 3 a paulo)',
-'tog-rememberpassword' => 'Laglagipem ti iseserrekko iti daytoy a pagbasabasa (iti kaadu nga $1 {{PLURAL:$1|aldaw|al-aldaw}})',
+'tog-editsectiononrightclick' => 'Pakabaelan ti paset  a panag-urnos babaen ti agtakla ti kanawan kadagiti paset a titulo (masapul ti JavaScript)',
+'tog-showtoc' => 'Ipakita ti tabla dagiti linaon (para kadagiti panid nga adda ti ad-adu ngem dagiti 3 a paulo)',
+'tog-rememberpassword' => 'Laglagipem ti iseserrekko iti daytoy a pagbasabasa (iti kapaut nga $1 {{PLURAL:$1|aldaw|al-aldaw}})',
 'tog-watchcreations' => 'Agnayon kadagiti panid a pinartuatko ken papeles  nga inpanko idiay listaan ti bambantayak',
 'tog-watchdefault' => 'Agnayon kadagiti panid ken papeles nga inurnosko idiay listaan ti bambantayak',
 'tog-watchmoves' => 'Agnayon kadagiti panid ken papeles nga inyalisko idiay listaan ti bambantayak',
 'tog-watchdeletion' => 'Agnayon kadagiti panid ken papeles nga inikkatko idiay listaan ti bambantayak',
 'tog-minordefault' => 'Markaan amin nga  inurnos a kas sigud a bassit',
 'tog-previewontop' => 'Ipakita ti panag-padas sakbay ti kahon ti inurnos',
-'tog-previewonfirst' => 'Ipakita ti na-ipadas iti umuna nga inurnos',
-'tog-nocache' => 'Ibaldado ti pagcache ti pabasabasam iti daytoy a panid',
+'tog-previewonfirst' => 'Ipakita ti pinadas iti umuna a panag-urnos',
+'tog-nocache' => 'Ibaldado ti panagilemmeng ti pabasabasa ti panid',
 'tog-enotifwatchlistpages' => 'E-suratannak no mabaliwan ti panid wenno papeles idiay listaan dagiti bambantayak',
-'tog-enotifusertalkpages' => 'E-suratannak no mabaliwan ti panidko a tungtongan ti agar-aramat',
+'tog-enotifusertalkpages' => 'E-suratannak no mabaliwan ti tungtungan a panidko',
 'tog-enotifminoredits' => 'E-suratannak pay para kadagiti bassit a panag-urnos kadagiti panid ken papeles',
-'tog-enotifrevealaddr' => 'Iparang ti pagtaengan ti e-surat ko kadagiti pammalagip ti  e-surat',
-'tog-shownumberswatching' => 'Ipakita ti bilang dagiti agbambantay nga agar-aramat',
+'tog-enotifrevealaddr' => 'Iparang ti pagtaengan ti e-suratko kadagiti panagipakaaammo nga  e-surat',
+'tog-shownumberswatching' => 'Ipakita ti bilang dagiti agbuybuya nga agar-aramat',
 'tog-oldsig' => 'Ti adda a pirma:',
 'tog-fancysig' => 'Tratuen ti pirma a kas wikitext (nga awan ti automatiko a panagsilpo)',
-'tog-externaleditor' => 'Isigud ti panag-usar iti ruar a pnag-urnos (para dagiti eksperto laeng, masapul ti nangruna a kasasaad a pinakaikabil idiay komputer mo. [//www.mediawiki.org/wiki/Manual:External_editors Adu pay a pakaammo.])',
-'tog-externaldiff' => 'Isigud ti panag-usar iti ruar a  sabali (para dagiti eksperto laeng, masapul ti nagruna a kasasaad a pinakaikabil idiay komputer mo. [//www.mediawiki.org/wiki/Manual:External_editors Adu pay a pakaammo.])',
-'tog-showjumplinks' => 'Ikkan ti pakabaelan  a  "mapan iti"  agpalaka a sumrek kadagiti panagsilpo',
-'tog-uselivepreview' => 'Usaren ti panag-padas tattan (masapul ti JavaScript) (suuten laeng)',
+'tog-externaleditor' => 'Isigud ti panag-usar iti ruar a pnag-urnos (para dagiti eksperto laeng, masapul ti nangruna a kasasaad a panagikabil idiay kompiutermo. [//www.mediawiki.org/wiki/Manual:External_editors Adu pay a pakaammo.])',
+'tog-externaldiff' => 'Isigud ti panag-usar iti ruar a  sabali (para dagiti eksperto laeng, masapul ti nangruna a kasasaad a panagikabil idiay kompiutermo. [//www.mediawiki.org/wiki/Manual:External_editors Adu pay a pakaammo.])',
+'tog-showjumplinks' => 'Pakabaelan  a  "lumaktaw kadagiti"  naipalaka a pagserkan a silpo',
+'tog-uselivepreview' => 'Usaren ti agdama a panagpadas  (masapul ti JavaScript) (eksperimento)',
 'tog-forceeditsummary' => 'Pakaammuannak no sumrek ti blanko a pakabuklan ti panag-urnos',
-'tog-watchlisthideown' => 'Ilemmeng idiay listaan ti bambantayan dagiti inurnosko',
-'tog-watchlisthidebots' => 'Ilemmeng idiay listaan ti bambantayan dagiti inurnos ti bot',
-'tog-watchlisthideminor' => 'Ilemmeng idiay listaan ti bambantayan dagiti bassit nga  inurnos',
-'tog-watchlisthideliu' => 'Ilemmeng idiay listaan ti bambantayan dagiti inurnos ti nakastrek nga agar-aramat',
-'tog-watchlisthideanons' => 'Ilemmeng idiay listaan ti bambantayan dagiti inurnos ti di am-ammo nga agar-aramat',
-'tog-watchlisthidepatrolled' => 'Ilemmeng idiay listaan ti bambantayan dagiti napatruliaan nga inurnos',
-'tog-ccmeonemails' => 'Patulodandak iti kopia kadagiti e-surat nga ipatulodko kadagiti sabsabali nga agar-aramat',
+'tog-watchlisthideown' => 'Ilemmeng dagiti inurnosko manipud ti listaan ti bambantayan',
+'tog-watchlisthidebots' => 'Ilemmeng dagiti inurnos ti bot manipud ti listaan ti bambantayan',
+'tog-watchlisthideminor' => 'Ilemmeng dagiti bassit nga inurnos manipud ti listaan ti bambantayan',
+'tog-watchlisthideliu' => 'Ilemmeng dagiti inurnos ti nakasterk nga agar-aramat manipud ti listaan ti bambantayan',
+'tog-watchlisthideanons' => 'Ilemmeng dagiti inurnos ti di am-ammo nga agar-aramat manipud ti  listaan ti bambantayan',
+'tog-watchlisthidepatrolled' => 'Ilemmeng dagiti napatruliaan nga inurnos manipud ti listaan ti bambantayan',
+'tog-ccmeonemails' => 'Patulodandak kadagiti kopia ti e-surat nga ipatulodko kadagiti sabsabali nga agar-aramat',
 'tog-diffonly' => 'Saan nga iparang ti linaon ti panid dita baba dagiti pagiddiatan',
 'tog-showhiddencats' => 'Ipakita dagiti nailemmeng a kategoria',
 'tog-norollbackdiff' => 'Laksiden ti paggiddiatan kalpasan ti panagaramid ti panagi-subli',
@@ -145,19 +145,19 @@ $messages = array(
 'dec' => 'Dis',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|Kategoria|Dagiti kategoria}}',
-'category_header' => 'Dagiti panid ti kategoria  "$1"',
+'pagecategories' => '{{PLURAL:$1|Kategoria|Katkategoria}}',
+'category_header' => 'Dagiti panid nga adda iti kategoria  "$1"',
 'subcategories' => 'Dagiti apo ti kategoria',
-'category-media-header' => 'Dagiti midia ti kategoria  "$1"',
+'category-media-header' => 'Dagiti midia nga adda iti kategoria  "$1"',
 'category-empty' => "''Daytoy a kategoria ket agdama a saan nga aglaon kadagiti panid wenno midia.''",
 'hidden-categories' => '{{PLURAL:$1|Nailemmeng a kategoria|Nailemmeng a katkategoria}}',
-'hidden-category-category' => 'Dagiti nailemmeng a kategoria',
+'hidden-category-category' => 'Nailemmeng a katkategoria',
 'category-subcat-count' => '{{PLURAL:$2|Daytoy a kategoria ket adda laeng ti sumaganad nga apo ti kategoria.|Daytoy a kategoria ket adda kadagiti sumaganad nga {{PLURAL:$1|nga apo ti kategoria|$1 nga apo dagiti kategoria}}, manipud ti dagup nga $2.}}',
-'category-subcat-count-limited' => 'Daytoy a kategoria ket adda ti sumaganad nga {{PLURAL:$1|nga apo ti kategoria|$1 nga apo dagiti kategoria}}.',
-'category-article-count' => '{{PLURAL:$2|Daytoy a kategoria ket aglaon laeng ti sumaganad a panid.|Ti sumaganad nga {{PLURAL:$1|a panid|$1 a pampanid}} ket adda iti daytoy a kategoria, manipud ti dagup nga $2.}}',
-'category-article-count-limited' => 'Ti sumaganad nga {{PLURAL:$1|a panid |$1 a pampanid}} ket adda iti agdama a kategoria.',
-'category-file-count' => '{{PLURAL:$2|Daytoy a kategoria ket aglaon laeng ti sumaganad a papeles.|Ti sumaganad nga {{PLURAL:$1| a papeles|$1  a pappapeles}} ket adda iti daytoy a kategoria, ti $2 a dagup.}}',
-'category-file-count-limited' => 'Ti sumaganad nga {{PLURAL:$1|a papeles|$1 a pappapeles}} ket adda iti agdama a kategoria.',
+'category-subcat-count-limited' => 'Daytoy a kategoria ket adda ti sumaganad  {{PLURAL:$1|nga apo ti kategoria|$1 nga apo dagiti kategoria}}.',
+'category-article-count' => '{{PLURAL:$2|Daytoy a kategoria ket aglaon laeng ti sumaganad a panid.|Ti sumaganad  {{PLURAL:$1|a panid|$1 a pampanid}} ket adda iti daytoy a kategoria, manipud ti dagup nga $2.}}',
+'category-article-count-limited' => 'Ti sumaganad {{PLURAL:$1|a panid |$1 a pampanid}} ket adda iti agdama a kategoria.',
+'category-file-count' => '{{PLURAL:$2|Daytoy a kategoria ket aglaon laeng ti sumaganad a papeles.|Ti sumaganad  {{PLURAL:$1| a papeles|$1  a pappapeles}} ket adda iti daytoy a kategoria, ti $2 a dagup.}}',
+'category-file-count-limited' => 'Ti sumaganad  {{PLURAL:$1|a papeles|$1 a pappapeles}} ket adda iti agdama a kategoria.',
 'listingcontinuesabbrev' => 'tuloy.',
 'index-category' => 'Dagiti naipasurutan a panid',
 'noindex-category' => 'Dagiti saan a pagsurutan a panid',
@@ -169,8 +169,8 @@ $messages = array(
 'cancel' => 'Ukasen',
 'moredotdotdot' => 'Adu pay...',
 'mypage' => 'Panidko',
-'mytalk' => 'Pakitungtongak',
-'anontalk' => 'Tungtongan iti daytoy a pagtaengan ti IP',
+'mytalk' => 'Pakitungtungak',
+'anontalk' => 'Tungtungan para iti daytoy a pagtaengan ti IP',
 'navigation' => 'Pagdaliasatan',
 'and' => '&#32;ken',
 
@@ -191,8 +191,8 @@ $messages = array(
 'vector-action-move' => 'Iyalis',
 'vector-action-protect' => 'Salakniban',
 'vector-action-undelete' => 'Isubli ti inikkat',
-'vector-action-unprotect' => 'Sukatan ti panag-salaknib',
-'vector-simplesearch-preference' => 'Ikkan ti pakabaelan ti napasayaat a singasing ti panagbiruk (Kudil a Vector laeng)',
+'vector-action-unprotect' => 'Sukatan ti salaknib',
+'vector-simplesearch-preference' => 'Pakabaelan ti napasayaat a singasing ti panagbiruk (Kudil a Vector laeng)',
 'vector-view-create' => 'Agaramid',
 'vector-view-edit' => 'Urnosen',
 'vector-view-history' => 'Kitaen ti pakasaritaan',
@@ -228,16 +228,16 @@ $messages = array(
 'protect' => 'Salakniban',
 'protect_change' => 'sukatan',
 'protectthispage' => 'Salakniban daytoy a panid',
-'unprotect' => 'Sukatan ti panag-salaknib',
+'unprotect' => 'Sukatan ti salaknib',
 'unprotectthispage' => 'Sukatan ti salaknib daytoy a panid',
 'newpage' => 'Baro a panid',
-'talkpage' => 'Pagtungtongan daytoy a panid',
-'talkpagelinktext' => 'Makipatang',
+'talkpage' => 'Pagtungtungan daytoy a panid',
+'talkpagelinktext' => 'Tungtungan',
 'specialpage' => 'Espesial a panid',
 'personaltools' => 'Bukod a ram-ramit',
 'postcomment' => 'Baro a paset',
 'articlepage' => 'Kitaen ti naglaon a panid',
-'talk' => 'Pagtungtongan',
+'talk' => 'Pagtungtungan',
 'views' => 'Dagiti pangkitaan',
 'toolbox' => 'Ramramit',
 'userpage' => 'Kitaen ti panid ti agar-aramat',
@@ -248,13 +248,13 @@ $messages = array(
 'viewhelppage' => 'Kitaen ti panid ti tulong',
 'categorypage' => 'Kitaen ti panid ti kategoria',
 'viewtalkpage' => 'Kitaen ti pagtungtungan',
-'otherlanguages' => 'Dagiti sabali a pagsasao',
+'otherlanguages' => 'Kadagiti sabali a pagsasao',
 'redirectedfrom' => '(Naibaw-ing manipud idiay $1)',
 'redirectpagesub' => 'Baw-ing a panid',
-'lastmodifiedat' => 'Naudi a nabaliwan daytoy a panid idi $1, ti oras nga $2.',
+'lastmodifiedat' => 'Daytoy a panid ket  naudi a nabaliwan idi $1, ti oras nga $2.',
 'viewcount' => 'Naserrekan daytoy a panid iti {{PLURAL:$1|naminsan|$1 a daras}}.',
 'protectedpage' => 'Nasalakniban a panid',
-'jumpto' => 'Mapan idiay:',
+'jumpto' => 'Lumaktaw idiay:',
 'jumptonavigation' => 'pagdaliasatan',
 'jumptosearch' => 'biruken',
 'view-pool-error' => 'Pasensian, dagiti servers ket nadagsenan unay tattan.
@@ -273,7 +273,7 @@ $1',
 'copyrightpage' => '{{ns:project}}:Dagiti Karbengan-Panagipablaak',
 'currentevents' => 'Agdama a paspasamak',
 'currentevents-url' => 'Project:Agdama a paspasamak',
-'disclaimers' => 'Dagiti karbengan ken rebbeng',
+'disclaimers' => 'Dagiti renunsia',
 'disclaimerpage' => 'Project:Sapasap ti karbengan ken rebbeng',
 'edithelp' => 'Tulong ti panag-urnos',
 'edithelppage' => 'Help:Panag-urnos',
@@ -299,7 +299,7 @@ $1',
 'newmessageslink' => 'dagiti baro a mensahe',
 'newmessagesdifflink' => 'naudi a sinukatan',
 'youhavenewmessagesfromusers' => 'Adda $1 manipud {{PLURAL:$3|ti sabali nga agar-aramat|$3 kadagiti sabsabali nga agar-aramat}} ($2).',
-'youhavenewmessagesmanyusers' => 'Adda $1 fmanipud kadagiti adu nga agar-aramat ($2).',
+'youhavenewmessagesmanyusers' => 'Adda $1 manipud kadagiti adu nga agar-aramat ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|baro a mensahem|dagiti baro a mensahem}}',
 'newmessagesdifflinkplural' => 'kinaudi {{PLURAL:$1|a sinukatan|a sinuksukatan}}',
 'youhavenewmessagesmulti' => 'Adda dagiti baro a mensahem iti $1',
@@ -312,21 +312,21 @@ $1',
 'toc' => 'Dagiti linaon',
 'showtoc' => 'ipakita',
 'hidetoc' => 'ilemmeng',
-'collapsible-collapse' => 'Marba',
+'collapsible-collapse' => 'Rebbaen',
 'collapsible-expand' => 'Palawaen',
 'thisisdeleted' => 'Kitaen wenno isubli ti $1?',
 'viewdeleted' => 'Kitaen ti $1?',
 'restorelink' => '{{PLURAL:$1|ti maysa a naikkat a naurnos|dagiti $1 a naikkat a naurnos}}',
 'feedlinks' => 'Pakan:',
-'feed-invalid' => 'Saan a mabalin a kita ti maalala a pakan.',
-'feed-unavailable' => 'Awan dagiti pakan a sindikasion',
+'feed-invalid' => 'Saan a mabalin a kita ti maala a pakan.',
+'feed-unavailable' => 'Awan dagiti magun-od a sindikasion ti pakan',
 'site-rss-feed' => '$1 Pakan ti RSS',
 'site-atom-feed' => '$1 Pakan ti Atom',
 'page-rss-feed' => '"$1" Pakan ti RSS',
 'page-atom-feed' => 'Pakan nga Atom ti "$1"',
 'red-link-title' => '$1 (awan ti panid)',
-'sort-descending' => 'Ilasin mo nga agpababa',
-'sort-ascending' => 'Ilasin mo nga agpangato',
+'sort-descending' => 'Ilasin nga agpababa',
+'sort-ascending' => 'Ilasin nga agpangato',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Panid',
@@ -346,7 +346,7 @@ $1',
 Baka madi ti naimakiniliam nga URL, wenno sinurotmo ti saan nga agpayso a panilpo.
 Baka daytoy ket "kiteb" ti "software" nga ususaren babaen ti {{SITENAME}}.',
 'nosuchspecialpage' => 'Awan ti kasta nga espesial a panid',
-'nospecialpagetext' => '<strong>Nagkiddaw ka ti imbalido nga espesial a panid.</strong>
+'nospecialpagetext' => '<strong>Nagkiddawka ti imbalido nga espesial a panid.</strong>
 
 Masarakan ti listaan dagiti umisu nga espesial a pampanid iti [[Special:SpecialPages|{{int:specialpages}}]].',
 
@@ -364,33 +364,33 @@ Ti kinaudi a panagsapul ti database ket:
 "$1"
 naggapu ti uneg ti opisio "$2".
 Ti database ket nangipatulod ti biddut "$3: $4".',
-'laggedslavemode' => 'Ballaag: Mabalin a ti panid ket awan ti nagyan na kadagiti naudi a panagpabaro.',
+'laggedslavemode' => 'Ballaag: Mabalin a ti panid ket saan nga aglaon kadagiti naudi a panagpabaro.',
 'readonly' => 'Nakandadoan ti database',
-'enterlockreason' => 'Mangipan ti rason no apay nga ikandado, agraman no kaano a maluktan ti kandado',
-'readonlytext' => 'Ti database ket naikandado iti baro a panagikabil ken panagbaliw, gapu dagiti kanayon a pagsimpa, ket no malpas kadawyanto nga agsubli.
+'enterlockreason' => 'Agikabil ti maysa a rasaon para iti kandado, agraman ti karkulo no kaano a maluktan ti kandado',
+'readonlytext' => 'Ti database ket agdama a naikandado kadagiti baro a panagikabil ken panagbaliw, mabalin a gapu dagiti kanayon a pagsimpa, ket no malpas kadawyanto nga agsubli.
 
-Ti administrador a nagkandado ket daytoy ti palawag na: $1',
-'missing-article' => 'Ti database ket saan a nakabiruk ti testo ti panid  a nabirukanna kuman, ti napanaganan ti "$1" $2.
+Ti administrador a nangkandado ket nangited ti daytoy a palawag: $1',
+'missing-article' => 'Ti database ket saan a nakabiruk ti testo ti panid  a mabirukanna kuma, a napanaganan ti "$1" $2.
 
 Dayoty ket gapu babaen ti sumaganad a baak a paggiddiatan wenno panilpo ti pakasaritaan ti maysa panid a dati a naikkat.
 
 No saan a kasta, baka nakasarak ti kiteb ti "software".
 
-Panngaasi nga  ibagam kadagiti [[Special:ListUsers/sysop|administrador]], isurat mo ti pakaammo dayta URL.',
+Panngaasi nga  ipadamagmo kadagiti [[Special:ListUsers/sysop|administrador]], isurat mo ti pakaammo dayta URL.',
 'missingarticle-rev' => '(binaliwan#: $1)',
 'missingarticle-diff' => '(Sabali: $1, $2)',
-'readonly_lag' => 'Automatiko a narikpan ti database kabayatan a dagiti tagabu a database servers ket kumamakam iti agturay',
+'readonly_lag' => 'Automatiko a narikpan ti database kabayatan a dagiti tagabu a database server ket kumamakam iti agturay',
 'internalerror' => 'Akin-uneg a biddut',
 'internalerror_info' => 'Akin-uneg a biddut: $1',
 'fileappenderrorread' => 'Saan a mabasa ti "$1" idi agpanayon.',
 'fileappenderror' => 'Saan a manayonan ti "$1" iti  "$2".',
 'filecopyerror' => 'Saan a makopia ti papeles $1 iti $2.',
-'filerenameerror' => 'Saan a managanan ti papeles "$1" iti "$2".',
+'filerenameerror' => 'Saan a managanan manen ti papeles "$1" iti "$2".',
 'filedeleteerror' => 'Saan a maikkat ti papeles  "$1".',
 'directorycreateerror' => 'Saan a maaramid ti direktorio  "$1".',
-'filenotfound' => 'Saan a masarakan ti papeles  "$1".',
+'filenotfound' => 'Saan a mabirukan ti papeles  "$1".',
 'fileexistserror' => 'Di mabalin a maisurat ti papeles  "$1": Adda kastan a papeles',
-'unexpected' => 'Di mapakpakadaaan a kuwenta: "$1"="$2".',
+'unexpected' => 'Di mapakpakadaaan a pateg: "$1"="$2".',
 'formerror' => 'Biddut: saan a maited ti nakabuklan.',
 'badarticleerror' => 'Saan a matungpal daytoy nga aramid iti daytoy a panid.',
 'cannotdelete' => 'Ti panid wenno ti papeles "$1" ket saan a maikkat.
@@ -401,25 +401,26 @@ Awan ti intedna a palawag.',
 'badtitle' => 'Madi a titulo',
 'badtitletext' => 'Ti nakiddaw a titulo ti panid ket imbalido, blanko, wenno maysa a saan nga husto a naisilpo a titulo nga inter-lengguahe wenno inter-wiki a titulo.
 Adda ngata nagyan a maysa wenno ad-adu pay a kababalin a saan a mausar iti titulo.',
-'perfcached' => 'Ti sumaganad a data ket naka-cached ken mabalin a saan a napabaro. Ti kaadu {{PLURAL:$1|iti maysa a nagbanagant|dagiti $1 a nagbanagan}} ket magun-od idiay cache.',
-'perfcachedts' => 'Ti sumaganad a data ket naka-cached, ken naudi a napabaro idi $1. Ti kaadu a {{PLURAL:$4|iti maysa a nagbanagan |dagiti $4 nagbanagan}} ket magun-od idiay cache.',
+'perfcached' => 'Ti sumaganad a data ket naidulin ken mabalin a saan a napabaro. Ti kaadu {{PLURAL:$1|iti maysa a nagbanagan|dagiti $1 a nagbanagan}} ket magun-od idiay nagidulinan.',
+'perfcachedts' => 'Ti sumaganad a data ket naidulin, ken naudi a napabaro idi $1. Ti kaadu a {{PLURAL:$4|iti maysa a nagbanagan |dagiti $4 nagbanagan}} ket magun-od idiay pagidulinan.',
 'querypage-no-updates' => 'Dagiti panangpabaro iti daytoy a panid ket agdama a nabaldado. 
-Saan a mipasaradiwa ita dagiti data ditoy.',
+Saan a mipasaradiwa ita dagiti datos ditoy.',
 'wrong_wfQuery_params' => 'Kamali a parametro iti wfQuery()<br />
 Pamay-an: $1<br />
 Panagsapul: $2',
 'viewsource' => 'Kitaen ti taudan',
-'viewsource-title' => 'Kitaen ti taudan iti $1',
+'viewsource-title' => 'Kitaen ti taudan para iti $1',
 'actionthrottled' => 'Napabuntog ti aramid',
 'actionthrottledtext' => 'Para ti pagkontra ti spam, naipatinggaka ti panagtungpal ti adu unay iti daytoy nga aramid iti nasiket nga oras, ken nalippasamon ti patingga.
 Pangngaasi nga ipadasmo manen no madamdama.',
 'protectedpagetext' => 'Nasalakniban daytoy a panid tapno mapawilan ti panag-urnos.',
 'viewsourcetext' => 'Mabalinmo a kitaen ken tuladen ti taudan daytoy a panid:',
 'viewyourtext' => "Mabalinmo a makita ken tuladen ti taudan dagiti '''inurnosmo''' ditoy a panid:",
-'protectedinterface' => 'Daytoy a panid ket mangited ti testo nga interface para iti software, ken nasalakniban tapno mapawilan ti panag-abuso.',
+'protectedinterface' => 'Daytoy a panid ket mangited ti testo nga interface para iti software iti daytoy a wiki, ken nasalakniban tapno mapawilan ti panag-abuso.
+Ti aginayon wenno panagibaliw kadagiti panagipatarus para kadagiti amin a wiki,  pangngaasi nga usaren ti [//translatewiki.net/ translatewiki.net], ti lokalisasion a gandat ti MediaWiki.',
 'editinginterface' => "'''Ballaag:''' Ururnosem ti maysa a panid a maar-aramat a mangted iti testo ti interface para iti software.
-Dagiti panagsukat iti daytoy a panid ket maarigan ti langa ti agaramat nga interface dagiti sabali nga agar-aramat.
-Para kadagiti panagipatarus, pangngaasim a padasen ti agaramat ti [//translatewiki.net/wiki/Main_Page?setlang=ilo translatewiki.net], ti gandat a panagipatarus ti MediaWiki.",
+Dagiti panagsukat iti daytoy a panid ket maarigan ti langa ti panagaramat nga interface dagiti sabali nga agar-aramat iti daytoy a wiki.
+Ti aginayon wenno panagibaliw kadagiti panagipatarus para kadagiti amin a wiki,  pangngaasi nga usaren ti [//translatewiki.net/ translatewiki.net], ti lokalisasion a gandat ti MediaWiki..",
 'sqlhidden' => '(nakalemmeng ti biniruk a SQL )',
 'cascadeprotected' => 'Daytoy a panid ket nasalakniban para iti panag-urnos, ngamin ket nairaman kadagiti sumaganad {{PLURAL:$1|a panid, a|a pampanid, a}} nasalakniban nga adda ti napili nga "agsariap"  :
 $2',
@@ -429,7 +430,7 @@ $2',
 'ns-specialprotected' => 'Saan a mabalin nga urnosen dagiti espesial a panid.',
 'titleprotected' => "Daytoy a titulo ket nasalakniban manipud ti panakapartuat babaen ni [[User:$1|$1]].
 Ti naited a rason ket ''$2''.",
-'filereadonlyerror' => 'Di nabaliwan ti papales "$1" gapu ket ti repositorio ti papeles "$2" ket basaen laeng a moda.
+'filereadonlyerror' => 'Di nabaliwan ti papeles "$1" gapu ket ti repositorio ti papeles "$2" ket basaen laeng a moda.
 
 Ti administrador a nagserra ket nagited iti daytoy a panagilawlawag "\'\'$3\'\'".',
 'invalidtitle-knownnamespace' => 'Imbalido a titulo nga adda ti nagan ti lugar "$2" ken testo "$3"',
@@ -446,7 +447,7 @@ Ti administrador a nagserra ket nagited iti daytoy a panagilawlawag "\'\'$3\'\'"
 'logouttext' => "'''Nakaruarkan.'''
 
 Mabalinmo nga ituloy ti agusar iti {{SITENAME}} a di am-ammo, wenno [[Special:UserLogin|sumrek ka manen]] iti sigud wenno sabali nga agar-aramat.
-Laglagipem a sumagmamano a pampanid ti mabalin a nakaparang latta a kasla nakaserrek ka pay laeng, agingga na nga dalusam ti \"cache\" ti panagbasabasam.",
+Laglagipem a sumagmamano a pampanid ti mabalin a nakaparang latta a kasla nakaserrekka pay laeng, aginggana no dalusam ti \"cache\" ti panagbasabasam.",
 'welcomecreation' => '== Kablaaw, $1! ==
 Naaramiden ti pakabilangam.
 Dimo liplipatan a sukatan dagita kaykayatmo idiay [[Special:Preferences|{{SITENAME}} kaykayat]].',
@@ -454,7 +455,7 @@ Dimo liplipatan a sukatan dagita kaykayatmo idiay [[Special:Preferences|{{SITENA
 'yourpassword' => 'Kontrasenias:',
 'yourpasswordagain' => 'Uliten ti kontrasenias:',
 'remembermypassword' => 'Laglagipem ti iseserrekko iti daytoy a pagbasabasa (para iti kapaut iti $1 {{PLURAL:$1|nga aldaw|nga al-aldaw}})',
-'securelogin-stick-https' => 'Agyan ka a nakasilpo iti HTTPS no nakastrekka',
+'securelogin-stick-https' => 'Agyanka a nakasilpo iti HTTPS kalpasan no nakastrekka',
 'yourdomainname' => 'Ti bukodmo a pagturayan:',
 'password-change-forbidden' => 'Saanmo a mabalin ti mangbaliw kadagiti kontrasenias iti daytoy a wiki.',
 'externaldberror' => 'Adda biddut idi ti panakapasingked ti database wenno saanmo a mabalin ti agpabaro ti bukodmo a ruar a pakabilangan.',
@@ -474,37 +475,41 @@ Dimo liplipatan a sukatan dagita kaykayatmo idiay [[Special:Preferences|{{SITENA
 'userlogin-resetlink' => 'Nalipatam dagiti salaysay ti pagserrek mo?',
 'createaccountmail' => 'Babaen ti e-surat',
 'createaccountreason' => 'Rason:',
-'badretype' => 'Saan nga agparis dagiti impanmo a kontrasenias.',
-'userexists' => 'Maus-usaren ti nagan a kayat mo.
-Pangngaasim ta agpilika ti sabali a nagan.',
+'badretype' => 'Saan nga agpada dagiti impanmo a kontrasenias.',
+'userexists' => 'Maus-usaren ti nagan a kayatmo.
+Pangngaasi nga agpilika ti sabali a nagan.',
 'loginerror' => 'Biddut ti sumrek',
 'createaccounterror' => 'Saan a makaaramid ti pakabilangan: $1',
-'nocookiesnew' => 'Naaramid ti pakabilangan daytoy agaramat, ngem saanka a nakastrek.
-{{SITENAME}} ket agususar kadagiti "galietas" para iserrek ti agaramat.
-Nabaldado dagiti galietas mo.
-Pangngaasi ta pakabaelam ida,  ken sumrek ka nga agusar ti baro a nagan ken kontrasenias.',
-'nocookieslogin' => 'Ti {{SITENAME}} ket agus-usar  kadagiti galietas tapno makastrek dagiti agar-aramat.
-Nabaldado dagiti galietas mo.
+'nocookiesnew' => 'Naaramid ti pakabilangan ti agar-aramat, ngem saanka a nakastrek.
+Ti {{SITENAME}} ket agususar kadagiti "galietas" tapno maiserrek dagiti agaramat.
+Nabaldado dagiti galietam.
+Pangngaasi a pakabaelam ida,  ken sumrekka nga agusar ti baro a nagan ken kontrasenias.',
+'nocookieslogin' => 'Ti {{SITENAME}} ket agus-usar  kadagiti galietas tapno maiserrek dagiti agar-aramat.
+Nabaldado dagiti galietam.
 Pangngaasi a pakabaelam ida ken padasem manen ti sumrek.',
-'nocookiesfornew' => 'Ti pakabilangan ti agar-aramat ket saan a naaramid, saan mi a masingkedan ti naggapuan na.
-Usarem dagita galietas mo, ipadas mo manen daytoy a panid.',
+'nocookiesfornew' => 'Ti pakabilangan ti agar-aramat ket saan a naaramid, saanmi a mapasingkedan ti taudanna.
+Siguraduem a napakabaelan dagita galietam, ikargam manen daytoy a panid ken padasem manen.',
 'noname' => 'Saanmo a nainaganan ti agpayso a nagan ti agar-aramat.',
 'loginsuccesstitle' => 'Balligi ti panagserrek',
 'loginsuccess' => "'''Nakastrekkan iti {{SITENAME}} a kas ni \"\$1\".'''",
 'nosuchuser' => 'Awan ti agar-aramat nga agnagan iti "$1". 
 
-Kitaem ti panangiletra, wenno [[Special:UserLogin/signup|agaramid ka ti baro a pakabilangan]].',
-'nosuchusershort' => 'Awan ti agar-aramat nga addaan iti nagan a "$1".
+Dagiti nagan ti agar-aramat ket sensitibo ti kadakkel ti letra.
+
+Kitaem ti panangiletra, wenno [[Special:UserLogin/signup|agaramidka ti baro a pakabilangan]].',
+'nosuchusershort' => 'Awan ti agar-aramat nga agnagan ti "$1".
 Kitaem ti panangiletra.',
 'nouserspecified' => 'Nasken nga agikabilka ti nagan ti agar-aramat.',
 'login-userblocked' => 'Naserraan daytoy nga agar-aramat. Maiparit ti sumrek.',
-'wrongpassword' => 'Biddut (wenno awan) ti kontrasenias nga ikabil mo. Padasem koma manen, apo.',
-'wrongpasswordempty' => 'Blanko ti impanmo a kontrasenias. Padasem koma manen apo.',
-'passwordtooshort' => 'Ti kontrasenias ket nasken nga adda  {{PLURAL:$1|iti 1 a karakter|kadagiti $1 a karakter}}.',
-'password-name-match' => 'Masapul a saan nga agpadpada ti  nagan mo nga agar-aramat ken kontrasenias',
-'password-login-forbidden' => 'Maiparit daytoy ususarem a nagan ti agar-aramat ken kontrasenias.',
+'wrongpassword' => 'Saan nga husto  ti kontrasenias a naikabil. 
+Pangngaasi a padasem manen.',
+'wrongpasswordempty' => 'Blanko ti naikabil  a kontrasenias. 
+Pangngaasi a padasem manen.',
+'passwordtooshort' => 'Ti kontrasenias ket nasken a saan a basbasit ngem  {{PLURAL:$1|1 a karakter| $1 a karkarakter}}.',
+'password-name-match' => 'Nasken a ti kontrasenias ket maigiddiat manipud ti naganmo.',
+'password-login-forbidden' => 'Ti panag-usar ti daytoy a nagan ket kontrasenias ket naiparit..',
 'mailmypassword' => 'E-surat ti baro a kontrasenias',
-'passwordremindertitle' => 'Baro a saan nga agnayon a kontrasenias para idiay  {{SITENAME}}',
+'passwordremindertitle' => 'Baro a temporario a kontrasenias para iti  {{SITENAME}}',
 'passwordremindertext' => 'Adda maysa a tao (mabalin a sika met laeng, manipud iti IP a pagtaengan a $1) ket nagkiddaw ti baro
 a kontrasenias para iti {{SITENAME}} ($4). Ti saan nga agnayon a kontrasenias ti agususar
 "$2" ket naaramiden ken naidisso iti "$3". No kastan ti kinayatmo,
@@ -512,74 +517,75 @@ masapul a sumrek ka ta agpili ka ti baro a kontrasenias.
 Ti temporario a bukodmo a kontrasenias ket agpaso  {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.
 
 No sabali ti nagkiddaw, wenno no malagipmo pay ti kontrasenias mo ket dimon kayat a suktan daytoy, mabalin a dimo lattan ikaskaso daytoy a mensahe ket itultuloymo latta nga usaren ti daan a kontrasenias.',
-'noemail' => 'Awan ti nagtaengan ti e-surat  a nairehistro iti agar-aramat a ni "$1".',
+'noemail' => 'Awan ti i e-surat a pagtaengan a nairehistro para  iti agar-aramat a ni "$1".',
 'noemailcreate' => 'Mangtedka to pudno nga e-surat a pagtaengam',
-'passwordsent' => 'Naipatulod ti baro a kontrasenias iti e-surat a pagtaengan a nairehistro ken "$1".
+'passwordsent' => 'Naipatulod ti baro a kontrasenias iti e-surat a pagtaengan a nairehistro kenni "$1".
 Sumrekka koma manen kalpasan a maawatmo daytoy a baro a kontrasenias.',
-'blocked-mailpassword' => 'Ti IP a pagtaengam ket naserraan iti panagurnos, isu nga saan a mabalin nga agusar ti panagala ti kontrasenias nga opisio tapno mapawilan ti panag-abuso.',
+'blocked-mailpassword' => 'Ti IP a pagtaengam ket naserraan manipud ti panag-urnos, ken isu a saan a mabalin nga agusar ti panagala ti kontrasenias a pamay-an tapno mapawilan ti panag-abuso.',
 'eauthentsent' => 'Naipatuloden ti pammasingked nga e-surat iti naited nga e-surat a pagtaengan.
 Sakbay nga ania man nga e-surat ti maipatulod iti pakabilangan, masapul a surotem dagiti maibagbaga iti e-surat, tapno mapasingkedan a ti pakabilangan ket agpayso a kukuam.',
 'throttled-mailpassword' => 'Ti palagip ti kontrasenias ket naipatuloden, iti napalabas nga {{PLURAL:$1|oras|$1 nga oras}}.
 Tapno maipawilan ti panag-abuso, maysa laeng a palagip ti kontrasenias ti maipatulod ti tunggal maysa nga {{PLURAL:$1|oras|$1 nga oras}}.',
-'mailerror' => 'Biddut iti panagipatulod iti surat: $1',
-'acct_creation_throttle_hit' => 'Dagiti bisita daytoy wiki nga agususar ti IP a pagtaengan ket nakaaramid {{PLURAL:$1|iti 1 a pakabilangan|kadagiti $1 a pakabilangan}} ti maysa nga aldaw, dagita laeng ti mabalin a mausar.
-Ti nagbanaganna, dagitoy bisita nga agususar ti IP a pagtaengan ket saan a makaaramid ti pakabilangan tatta.',
+'mailerror' => 'Biddut iti panagipatulod ti surat: $1',
+'acct_creation_throttle_hit' => 'Dagiti sumarungkar ti daytoy a wiki nga agususar ti IP a pagtaengan ket nakaaramid {{PLURAL:$1|iti 1 a pakabilangan|kadagiti $1 a pakabilangan}} iti nasakbayan nga aldaw, nga isu laeng ti kaadu a maipalubos iti daytoy a paset ti panawen.
+A kas ti nagbanagan, dagiti agsarsarummgkar nga agususar ti IP a pagtaengan ket agdama a saanda a mabalin a makaaramid kadagiti pakabilangan.',
 'emailauthenticated' => 'Napasingkedan ti e-surat a pagtaengan idi $2 ti oras nga $3.',
 'emailnotauthenticated' => 'Saan pay a napasingkedan ti e-surat mo.
-Awan ti e-surat nga ipatulod para dagitoy a langa.',
+Awan ti e-surat a naipatulod para kadagiti sumaganad a langa.',
 'noemailprefs' => 'Ipanaganan ti e-surat a pagtaengan tapno agbalin dagitoy a langa.',
 'emailconfirmlink' => 'Pasingkedam ti e-surat a pagtaengam',
-'invalidemailaddress' => 'Ti e-surat a pagtaengam ket saan a maawat, ket kasla addaan ti saan a napudno a nakabuklan.
+'invalidemailaddress' => 'Ti e-surat a pagtaengam ket saan a maawat ngamin ket kasla adda ti saan a napudno a nakabuklan.
 Pangngaasi nga ikkam ti nasayaat  a  nakabuklan a pagtaengan wenno ikkatem amin dagiti naikabil mo.',
 'cannotchangeemail' => 'Dagiti pakabilangan nga e-surat a pagtaengan ket saan a mabaliwan ditoy a wiki.',
 'emaildisabled' => 'Daytoy a pagsaaadan ket saan a makaipatuod kadagiti e-surat.',
 'accountcreated' => 'Naaramiden ti pakabilangan',
-'accountcreatedtext' => 'Naaramiden ti pakabilangan a pagaramat ni $1.',
+'accountcreatedtext' => 'Ti pakabilangan ti agar-aramat para iti  $1 ket naaramiden.',
 'createaccount-title' => 'Panagaramid iti pakabilangan para iti {{SITENAME}}',
-'createaccount-text' => 'Adda nagaramid ti pakabilangan iti e-surat a pagtaengam idiay {{SITENAME}} ($4) nagnagan a "$2", a ti kontrasenias a "$3".
-
-Saan mo nga ikaskaso daytoy a mensahe, no biddut a naaramid daytoy a pakabilangan.',
-'usernamehasherror' => 'Dagiti nagan ti agar-aramat ke saan nga ikkan dagiti "hash" a kababalin',
-'login-throttled' => 'Adu unay ti panagpadas mo a sumrek.
-Pangaasim ta aguray ka sakbay nga agipadas manen.',
-'login-abort-generic' => 'Madi ti panakastrekmo - Napasardeng',
+'createaccount-text' => 'Adda nagaramid ti pakabilangan para iti e-surat a pagtaengam idiay {{SITENAME}} ($4) nga agnagan  ti "$2", iti kontrasenias a "$3".
+Nasken a sumrekka ken sukatam ti kontraseniasmo tattan.
+
+Mabalinmo ti saan a mangikaskaso ti daytoy a mensahe, no biddut a naaramid daytoy a pakabilangan.',
+'usernamehasherror' => 'Ti nagan ti agar-aramat ket nasken a saan nga aglaon kadagiti "hash" a karakter',
+'login-throttled' => 'Adu unay ti panagpadasmo a sumrek.
+Pangaasi nga agurayka sakbay nga agipadas manen.',
+'login-abort-generic' => 'Napaay ti panagserrekmo - Napasardeng',
 'loginlanguagelabel' => 'Pagsasao: $1',
-'suspicious-userlogout' => 'Madi ti kiniddawmo a rummuar, ngamin ket kasla inpatulod ti nadadael a "panagbasabasa" wenno "caching proxy".',
+'suspicious-userlogout' => 'Naiparit ti panagkiddawmo a rummuar  ngamin ket kasla inpatulod ti nadadael a "panagbasabasa" wenno "caching proxy".',
 
 # E-mail sending
-'php-mail-error-unknown' => 'Di am-ammo a biddut ti kukua ti PHP a surat () nga opisio.',
-'user-mail-no-addy' => 'Pinadas nga impatulod ti e-surat nga awan ti e-surat a pagtaengan na.',
+'php-mail-error-unknown' => 'Di am-ammo a biddut iti surat ti PHP  () a pamay-an.',
+'user-mail-no-addy' => 'Pinadas nga impatulod ti e-surat nga awan ti e-surat a pagtaengan.',
 
 # Change password dialog
 'resetpass' => 'Sukatan ti kontrasenias',
-'resetpass_announce' => 'Simrek ka nga nagusar iti saan nga agnayon nga e-surat a kodigo.
-Tapno malpas ka a makastrek, mangikabil ka ti baro a kontrasenias ditoy:',
+'resetpass_announce' => 'Simrekka a nagus-usar ti temporario a kodigo ti e-surat.
+Tapno malpaska a makastrek, nasken a mangikabilka ti baro a kontrasenias ditoy:',
 'resetpass_header' => 'Sukatan ti kontrasenias ti pakabilangan',
 'oldpassword' => 'Daan a kontrasenias:',
 'newpassword' => 'Baro a kontrasenias:',
-'retypenew' => 'Isurat manen ti baro a kontrasenias:',
+'retypenew' => 'Imakinilya manen ti baro a kontrasenias:',
 'resetpass_submit' => 'Ikabil ti kontrasenias ken sumrek',
 'resetpass_success' => 'Nagballigi a nabaliwan ti kontrasenias mo! 
 </br>
 Iserrek kan...',
 'resetpass_forbidden' => 'Saan a masukatan dagiti kontrasenias',
-'resetpass-no-info' => 'Masapul a nakastrekka tapno dagus ka a makapan iti panid .',
+'resetpass-no-info' => 'Masapul a nakastrekka tapno dagus a makapan ti daytoy a panid .',
 'resetpass-submit-loggedin' => 'Sukatan ti kontrasenias',
 'resetpass-submit-cancel' => 'Ukasen',
-'resetpass-wrong-oldpass' => 'Imbalido ti saan nga agnayon wenno agdama a kontrasenias.
-Baka mabalin a nasukatam metten ti kontrasenias mo wenno nagkiddaw ka ti saan nga agnayon a kontrasenias.',
-'resetpass-temp-password' => 'Saan nga agnayon a kontrasenias:',
+'resetpass-wrong-oldpass' => 'Imbalido ti temporario wenno agdama a kontrasenias.
+Mabalin a nagballigi ti panagsukatmo ti kontrasenias wenno nagkiddaw ti baro a temporario a kontrasenias.',
+'resetpass-temp-password' => 'Temporario a kontrasenias:',
 
 # Special:PasswordReset
 'passwordreset' => 'Ipasubli ti kontrasenias',
-'passwordreset-text' => 'Lippasem daytoy a kinabuklan tapno maipatulodan ka ti e-surat a palagipan kadagiti dsalaysay ti pakabilangam.',
+'passwordreset-text' => 'Lippasem daytoy a kinabuklan tapno maipatulodanka ti e-surat a paglagipan kadagiti salaysay ti pakabilangam.',
 'passwordreset-legend' => 'Ipasubli ti kontrasenias',
-'passwordreset-disabled' => 'Naikkat dagiti pagisubli iti kontrasenias daytoy a wiki.',
-'passwordreset-pretext' => '{{PLURAL:$1||Ikabil ti maysa a bukel ti datos dita baba}}',
+'passwordreset-disabled' => 'Nabaldado dagiti panagisubli ti kontrasenias iti daytoy a wiki.',
+'passwordreset-pretext' => '{{PLURAL:$1||Ikabil ti maysa a piraso ti datos dita baba}}',
 'passwordreset-username' => 'Nagan ti agar-aramat:',
 'passwordreset-domain' => 'Pagturayan:',
-'passwordreset-capture' => 'Kayatmo a kitaen ti nagbanagan ti e-surat?',
-'passwordreset-capture-help' => 'No markaam daytoy a kahon, ti e-surat (nga adda saan nga agnayon a kontrasenias) ket maipakita kenka ken maipatulod iti agar-aramat.',
+'passwordreset-capture' => 'Kitaem ti nagbanagan ti e-surat?',
+'passwordreset-capture-help' => 'No markaam daytoy a kahon, ti e-surat (nga adda ti temporario a kontrasenias) ket maipakita kenka ken maipatulod iti agar-aramat.',
 'passwordreset-email' => 'E-surat a pagtaengan:',
 'passwordreset-emailtitle' => 'Salaysay ti pakabilangan iti {{SITENAME}}',
 'passwordreset-emailtext-ip' => 'Adda (baka sika, ti naggapuan ti IP a pagtaengan $1) a nagkiddaw ti palagip para
@@ -588,7 +594,7 @@ nakairaman iti daytoy nga e-surat a pagtaengan:
 
 $2
 
-{{PLURAL:$3|Daytoy a saan nga agnayon a kontrasenias|Dagitoy a saan nga agnayon a kontrasenias}} ket agpaso  {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.
+{{PLURAL:$3|Daytoy temporario a kontrasenias|Dagitoy temporario a kontrasenias}} ket agpaso  {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.
 Sumrekka kuman ta agpili ka ti baro a kontrasenias mo tattan. No adda met sabali a nagaramid daytoy a 
 panagkiddaw, wenno malagip mo ti dati a kontrasenias mo, ket saan mo a kayaten a sukatan, saan mo nga ikaskaso daytoy a mensahe ken 
 agtuloy ka nga agusar ti daan a kontrasenias.',
@@ -598,41 +604,41 @@ nakairaman iti daytoy nga e-surat a pagtaengan:
 
 $2
 
-{{PLURAL:$3|Daytoy a saan nga agnayon a kontrasenias|Dagitoy a saan nga agnayon a kontrasenias}} ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.
+{{PLURAL:$3|Daytoy temporario a kontrasenias|Dagitoy temporario a kontrasenias}} ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.
 Sumrekka kuman ta agpili ka ti baro a kontrasenias mo tattan. No adda met sabali a nagaramid daytoy a 
 panagkiddaw, wenno malagip mo ti dati a kontrasenias mo, ket saan mo a kayaten a sukatan, saan mo nga ikaskaso daytoy a mensahe ken 
 agtuloy kan nga agusar ti daan a kontrasenias mo.',
 'passwordreset-emailelement' => 'Nagan ti agar-aramat: $1
-Saan nga agnayon a kontrasenias: $2',
+Temporario a kontrasenias: $2',
 'passwordreset-emailsent' => 'Maipatuloden ti e-surat a palagip.',
 'passwordreset-emailsent-capture' => 'Naipatulod ti palagip nga e-surat, a napaikita dita baba.',
-'passwordreset-emailerror-capture' => 'Naaramid ti palagip nga e-surat, a napaikita dita baba, ngem madi a napaitulod ti agar-aramat: $1',
+'passwordreset-emailerror-capture' => 'Naaramid ti palagip nga e-surat, a napaikita dita baba, ngem napaay a napaitulod iti agar-aramat: $1',
 
 # Special:ChangeEmail
 'changeemail' => 'Sukatan ti e-surat a pagtaengan',
 'changeemail-header' => 'Sukatan ti e-surat a pagtaengan ti pakabilangan',
 'changeemail-text' => 'Lippasem daytoy a kabuklan ti panagsukat ti e-surat a pagtaengam. Nasken nga ikabilmo ti kontrasenias tapno mapasingkedan daytoy a panagsukat.',
-'changeemail-no-info' => 'Masapul a nakastrekka tapno dagus ka a makapan ditoy a panid.',
+'changeemail-no-info' => 'Masapul a nakastrekka tapno dagus a makapan iti ditoy a panid.',
 'changeemail-oldemail' => 'Agdama nga E-surat a pagtaengam:',
-'changeemail-newemail' => 'Baro nga e-surat a pagtaengam:',
+'changeemail-newemail' => 'Baro nga e-surat a pagtaengan:',
 'changeemail-none' => '(awan)',
 'changeemail-submit' => 'Sukatan ti e-surat',
 'changeemail-cancel' => 'Ukasen',
 
 # Edit page toolbar
-'bold_sample' => 'Napuskol a teksto',
-'bold_tip' => 'Napuskol a teksto',
-'italic_sample' => 'Nakairig a teksto',
-'italic_tip' => 'Nakairig a teksto',
+'bold_sample' => 'Napuskol a testo',
+'bold_tip' => 'Napuskol a testo',
+'italic_sample' => 'Nakairig a testo',
+'italic_tip' => 'Nakairig a testo',
 'link_sample' => 'Titulo ti panilpo',
 'link_tip' => 'Akin-uneg a panilpo',
 'extlink_sample' => 'http://www.example.com titulo ti panilpo',
-'extlink_tip' => 'Akinruar a panilpo (laglagipen ti http:// a prefix)',
+'extlink_tip' => 'Akin-ruar a panilpo (laglagipen ti http:// a pasaruno)',
 'headline_sample' => 'Testo ti paulo',
-'headline_tip' => 'Maika-2 a lessaad ti paulo',
-'nowiki_sample' => 'Isengngat ti saan a nabuklan a testo ditoy',
-'nowiki_tip' => 'Saan nga ikaskaso ti panagbuklan a wiki',
-'image_tip' => 'Naibinggas a papeles',
+'headline_tip' => 'Maika-2 nga agasmang ti paulo',
+'nowiki_sample' => 'Isengngat ti saan a naporma a testo ditoy',
+'nowiki_tip' => 'Saan nga ikaskaso ti panakaporma ti wiki',
+'image_tip' => 'Naisengngat a papeles',
 'media_tip' => 'Panilpo ti papeles',
 'sig_tip' => 'Ti pirmam nga adda ti oras ken petsa',
 'hr_tip' => 'Pakuros a linia (manmano laeng nga aramaten)',
@@ -640,7 +646,7 @@ Saan nga agnayon a kontrasenias: $2',
 # Edit pages
 'summary' => 'Pakabuklan:',
 'subject' => 'Suheto/paulo:',
-'minoredit' => 'Bassit a panag-urnos laeng daytoy',
+'minoredit' => 'Daytoy ket bassit a panag-urnos',
 'watchthis' => 'Bantayan daytoy a panid',
 'savearticle' => 'Idulin ti panid',
 'preview' => 'Naipadas',
@@ -649,12 +655,12 @@ Saan nga agnayon a kontrasenias: $2',
 'showdiff' => 'Ipakita dagiti sinukatan',
 'anoneditwarning' => "'''Ballaag:''' Saanka a nakastrek.
 Mairehistro ti IP a pagtaengam iti pakasaritaan ti panagurnos iti daytoy a panid.",
-'anonpreviewwarning' => '" Saanka a nakastrek. No idulin mo mairehistro ti IP a pagtaengam kadagitoy pakasaritaan ti panagurnos ti panid."',
-'missingsummary' => "'''Palagip:''' Saanka a nangipan iti pakabuklan ti panag-urnos mo.
-No agtakla ka ti \"{{int:savearticle}}\" manen, maidulin ti inurnos mo nga awan ti pakabuklan na.",
-'missingcommenttext' => 'Pangngaasim a mangipanka iti komentario dita baba.',
-'missingcommentheader' => "'''Palagip:''' Saanka a nangipan iti suheto/paulo para iti daytoy a komentario.
-No agtakla ka ti \"{{int:savearticle}}\" manen, maidulin ti inurnormo nga awan ti pakabuklanna.",
+'anonpreviewwarning' => '" Saanka a nakastrek. Ti panagidulin ket agirehistro ti IP a pagtaengam kadagitoy a  pakasaritaan ti panagurnos iti daytoy a panid."',
+'missingsummary' => "'''Palagip:''' Saanka a nakaited iti pakabuklan ti panag-urnos.
+No agtakla ka ti \"{{int:savearticle}}\" manen, maidulin ti inurnosmo nga awan ti pakabuklanna.",
+'missingcommenttext' => 'Pangngaasi nga agikabil ti komentario dita baba.',
+'missingcommentheader' => "'''Palagip:''' Saanka a nakaited  iti suheto/paulo para iti daytoy a komentario.
+No agtakla ka ti \"{{int:savearticle}}\" manen, maidulin ti inurnosmo nga awan ti pakabuklanna.",
 'summary-preview' => 'Naipadas a  pakabuklan:',
 'subject-preview' => 'Suheto/naipadas a paulo:',
 'blockedtitle' => 'Naseraan ti agar-aramat',
@@ -665,7 +671,7 @@ Ti rason ket ''$2''.
 
 * Rugi ti panangserra: $8
 * Panagpaso ti panangserra: $6
-* Ti kuma serraan na: $7
+* Ti kuma serraan na: $7
 
 Mabalinmo a kontaken ni $1 wenno sabali pay nga [[{{MediaWiki:Grouppage-sysop}}|administrador]] no kayatmo a maipalawag daytoy a panag-serra.
 Dimo mabalin nga aramaten ti ramit nga e-suratan daytoy nga agar-aramat malaksid no adda napudno nga e-surat a pagtaengan a naipan iti  [[Special:Preferences|pakabilangan ti kaykayatmo]] ken no saanka a naparitan nga agaramat iti daytoy.
@@ -687,15 +693,15 @@ naserraan ti panag-usar na.
 Ti tatta nga IP a pagtaengam ket $3, ken ti ID ti naserraan ket #$5.
 Pangaasi nga iramanmo amin dagiti salaysay ti amin a panagsaludsodmo.',
 'blockednoreason' => 'awan ti naited a rason',
-'whitelistedittext' => 'Nasken ti $1 tapno makaurnos kadagiti panid.',
-'confirmedittext' => 'Masapul a pasingkedam ti e-surat sakbay a makaurnos ka kadagiti panid.
+'whitelistedittext' => 'Nasken ti $1 tapno maurnosmo dagitoy a panid.',
+'confirmedittext' => 'Masapul a pasingkedam ti e-surat sakbay a makaurnos kadagitoy a panid.
 Pangngaasim nga ikabil ken ipapudnom ti e-suratmo idiay [[Special:Preferences|kaykayat dagiti agar-aramat ]].',
-'nosuchsectiontitle' => 'Saan a mabirukan ti kasta a paset',
-'nosuchsectiontext' => 'Pinadasmo nga inurnos ti maysa a paset nga awan pay.
-Naiyalis ngatan wenno naikkat idi kitkitaen dayta a panid.',
+'nosuchsectiontitle' => 'Saan a mabirukan ti paset',
+'nosuchsectiontext' => 'Pinadasmo nga inurnos ti awan a paset.
+Mabalin a naiyalis wenno naikkat bayat idi kitkitaem ti panid.',
 'loginreqtitle' => 'Masapul ti sumrek',
 'loginreqlink' => 'sumrek',
-'loginreqpagetext' => 'Nasken a $1 ka tapno makakitaka iti sabsabali a pampanid.',
+'loginreqpagetext' => 'Nasken a $1 ka tapno makakitaka kadagiti sabsabali a pampanid.',
 'accmailtitle' => 'Naipatuloden ti kontrasenias.',
 'accmailtext' => "Ti kontrasenias para ken ni [[User talk:$1|$1]] ket naipatuloden ken ni $2.
 
@@ -703,27 +709,25 @@ Ti kontrasenias ti baro a pakabilangan ket masukatan idiay ''[[Special:ChangePas
 'newarticle' => '(Baro)',
 'newarticletext' => "Nasurotmo ti maysa a panilpo ti panid a saan pay a napartuat. 
 Tapno mapartuat daytoy a panid, rugiamon ti agikur-it wenno agisurat iti pagsuratan a kahon dita baba (kitaen ti [[{{MediaWiki:Helppage}}|panid ti tulong]] para iti ad-adu pay a pakaammo). 
-No addaka ditoy babaen ti biddut, itaklam ti '''agsubli'''a buton ti pabasabasam tapno makasublika iti naggapuam a panid.",
-'anontalkpagetext' => "----''Daytoy ti pakitungtungan a panid para iti di am-ammo nga agar-aramat a saan pay a nakaaramid ti pakabilangan, wenno saan na nga us-usaren.
+No addaka ditoy babaen ti biddut, itaklam ti '''agsubli''' a buton ti pabasabasam tapno makasublika iti naggapuam a panid.",
+'anontalkpagetext' => "----''Daytoy ti pakitungtungan a panid para iti di am-ammo nga agar-aramat a saan pay a nakaaramid ti pakabilangan, wenno saanna nga us-usaren.
 Dakami ket agusar kami ti numero nga IP a pagtaengan ti panangilasin dagiti lalaki/babai.
 Ti kastoy nga IP a pagtaengan ket us-usaren a bingayan ti adu pay a sabsabali nga agar-aramat.
 No sika ket maysa a di am-ammo nga agar-aramat ken dagiti awan ti kapategan a komentario ket napaitudo kenka, pangngaasi nga [[Special:UserLogin/signup|agaramid ka ti pakabilangam]] wenno [[Special:UserLogin|sumrekka]] 
-tapno maawanan ti pinakaulaw kadagiti sabali a di am-ammo nga agar-aramat.",
+tapno maawanan ti panakaulaw kadagiti sabali a di am-ammo nga agar-aramat.",
 'noarticletext' => 'Awan ti agdama a testo  daytoy a panid.
 Mabalinmo ti [[Special:Search/{{PAGENAME}}|agsapul iti kastoy a titulo ti panid]] kadagiti sabsabali a pampanid,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbirukka],
 wenno [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} urnosem daytoy a panid].',
-'noarticletext-nopermission' => 'Awan pay ti  nagyan na daytoy a panid.
-Mabalinmo ti [[Special:Search/{{PAGENAME}}|agsapul iti kastoy a titulo ti panid]] iti sabsabali a pampanid,
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbirukka],
-wenno <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk ka kadagiti maikabagian a listaan]</span>.',
+'noarticletext-nopermission' => 'Awan ti agdama  a linaon daytoy a panid.
+Mabalinmo ti [[Special:Search/{{PAGENAME}}|agbiruk para iti titulo ti daytoy a panid]] kadagiti dadduma a panid, wenno <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk kadagiti mainaig a listaan]</span>, ngem awan ti pammalubosmo a mangpartuat ti daytoy a panid.',
 'missing-revision' => 'Ti panagbalbaliw ti #$1 tipanid a nanaganan ti "{{PAGENAME}}" ket awan.
 
-Daytoy ket kadawyan agapuanan babaen ti samaganad a panilpo ti baak a pakasaritaan iti maysa a panid a naikkaten.
+Daytoy ket kadawyan a gapuanan babaen ti samaganad a panilpo ti baak a pakasaritaan iti maysa a panid a naikkaten.
 Dagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].',
 'userpage-userdoesnotexist' => 'Ti pakabilangan ti agar-aramat "$1" ket saan a nakarehistro. 
 Pangngaasi a kitaem no kayatmo ti agaramid/urnosen daytoy a panid.',
-'userpage-userdoesnotexist-view' => 'Ti pakabilangan ni agar-aramat "$1" ket saan a nakarehistro.',
+'userpage-userdoesnotexist-view' => 'Ti pakabilangan ti agar-aramat "$1" ket saan a nakarehistro.',
 'blocked-notice-logextract' => 'Agdama a naserraan daytoy nga agar-aramat.
 Ti naudi a listaan ti panaka-serra ket adda dita baba tapno mausar a reperensia:',
 'clearyourcache' => "'''Pakaammo:''' No nalpaskan nga agiduldulin, kuma ket masapul nga ipalabas ti cahe ti pinagbasabasam tapno makita dagiti sinukatam.
@@ -758,7 +762,7 @@ No saan pay a mabalin, padasem ti [[Special:UserLogout|rummuar]] ken sumrek ka m
 
 '''No daytoy ket pudno a panag-urnos, pangngaasi a padasem manen.'''
 No saan pay a mabalin, padasem ti [[Special:UserLogout|rummuar]] ken sumrek manen.",
-'token_suffix_mismatch' => "'''Ti panag-urnosmo ket saan a naawat ngamin ket ti klientem ket dinadaelna ti kuldit ti kababalin idiay pinagpudno ti panag-urnos.'''
+'token_suffix_mismatch' => "'''Ti panag-urnosmo ket saan a naawat ngamin ket ti klientem ket dinadaelna ti kuldit ti kababalin idiay panagpudno ti panag-urnos.'''
 Ti panag-urnos ket saan a naawat tapno mapawilan ti panakadadael ti testo ti panid.
 Mapasamak daytoy no agus-usarka ti saan a nasayaat a naibasta ti sapot a diamammo a proxy a panagserbi.",
 'edit_form_incomplete' => "'''Adda dagiti paset ti panag-urnos a kabuklan a saan a nakadanon dita server; kitkitaen nga dagiti panag-urnosmo ket saan a naikkatan ken padasem manen.'''",
@@ -774,35 +778,35 @@ Ipatipon mo dagiti sinukatam idiay lugar ti testo.
 '''Iti laeng''' testo dita ngato a lugar ti testo ti maidulin no pesselem ti \"{{int:savearticle}}\".",
 'yourtext' => 'Ti testom',
 'storedversion' => 'Bersion a naidulin',
-'nonunicodebrowser' => "'''Ballaag: Ti  pabasabasam ket saan a kasla unicode .'''
-Adda sabali a mausar tapno makaurnos ka kadagiti panid: Ti saan nga-ASCII a kababalin ket agparang iti pagurnosan a kahon a kas dagiti heksadesimal a kodigo.",
+'nonunicodebrowser' => "'''Ballaag: Ti  pabasabasam ket saan a naikeddeng ti Unicode .'''
+Adda sabali a mausar tapno makaurnoska kadagiti panid: Ti saan nga-ASCII a kababalin ket agparang iti pagurnosan a kahon a kas dagiti heksadesimal a kodigo.",
 'editingold' => "'''Ballag: Ururnosem ti daan a panag-baliw iti daytoy a panid.'''
 No idulinmo, mapukaw amin a sinukatam iti daytoy a panag-baliw.",
 'yourdiff' => 'Dagiti nagdudumaan',
-'copyrightwarning' => "Laglagipenyo koma, apo, nga amin a parawad iti {{SITENAME}} ket maibilang a nairuar iti babaen ti $2 (kitaen ti $1 para kadagiti salaysay). 
+'copyrightwarning' => "Laglagipenyo koma, apo, nga amin a parawad iti {{SITENAME}} ket maibilang a mairuar iti babaen ti $2 (kitaen ti $1 para kadagiti salaysay). 
 No dimo kayat a ti sinuratmo ket maurnos nga awanan-asi ken maiwaras nga awan sungsungbatan kenka, saanmo laengen nga ip-ipan wenno ipabpablaak ditoy.<br />
-Kasta met nga ikarim kadakami a bukodmo a sinurat wenno gapuanan daytoy, wenno tinuladmo ngem iti maysa a nawaya a pagturayan ti publiko wenno pumadmad a libre a pagtaudan.
- '''Saan a mangipan iti addaan a karbengan ti pinagpablaak nga obra no awan ti  pammalubos!'''",
+Kasta met nga ikarim kadakami a bukodmo a sinurat wenno gapuanan daytoy, wenno tinuladmo manipud ti maysa a nawaya a pagturayan ti publiko wenno ti kapadpadana a lnawaya a nagtaudan.
+ '''Saan a mangited ti adda karbenganna a panagipablaak nga obra no awan ti  pammalubos!'''",
 'copyrightwarning2' => "Pangngaasiyo, apo, a laglagipen nga amin a parawad iti {{SITENAME}} ket mabalin a maurnos, masuktan, wenno ikkaten dagiti sabali pay nga agar-aramat.
 No dimo kayat a ti sinuratmo ket maurnos nga awanan-asi ken maiwaras nga awan sungsungbatan kenka, saanmo laengen nga ip-ipan wenno ipabpablaak ditoy.<br />
-Kasta met nga ikarim kadakami a bukodmo a sinurat wenno gapuanan daytoy, wenno tinuladam ngem iti maysa a nawaya a pagturayan ti publiko wenno pumadmad a libre a pagtaudan (kitaen ti $1 para iti salaysay).
-'''Saan a mangipan iti addaan ti karbengan ti pinagpablaak nga obra no awan ti  pammalubos!'''",
+Kasta met nga ikarim kadakami a bukodmo a sinurat wenno gapuanan daytoy, wenno tinuladmo manipud ti maysa a nawaya a pagturayan ti publiko wenno ti kapadpadana a nawaya a pagtaudan (kitaen ti $1 para iti salaysay).
+'''Saan a mangipan iti adda ti karbenganna a panagpablaak nga obra no awan ti  pammalubos!'''",
 'longpageerror' => "'''Biddut: Ti testo nga intedmo ket {{PLURAL:$1|maysa a kilobyte|$1 kil-kilobyte}} a katiddog, nga at-atiddog ngem ti kangatuan iti  {{PLURAL:$2|maysa a kilobyte|$2 kil-kilobyte}}.'''
 Isu ti gapuna a saan a maidulin.",
-'readonlywarning' => "'''Ballaag: Narikepan ti database tapno masimpaan, saan mo a mabalin nga idulin dagita inurnosmo tattan.'''
+'readonlywarning' => "'''Ballaag: Narikepan ti database para iti panagtaripatu, saanmo a mabalin nga idulin dagita inurnosmo tattan.'''
 No kayatmo i \"cut-n-paste\" mo dagiti testo iti testo a papeles ken idulinmo no madamdama.
 
 Ti administrador a nangrikep ket saan a nangted ti palawag: \$1",
-'protectedpagewarning' => "'''Ballaag:  Daytoy a panid ket nasalakniban tapno dagiti laeng agar-aramat nga addaan ti gundaway nga administrador ti makaurnos ditoy.'''
+'protectedpagewarning' => "'''Ballaag:  Daytoy a panid ket nasalakniban tapno dagiti laeng agar-aramat nga adda ti gundaway nga administrador ti makaurnos ditoy.'''
 Ti nakaudi a naikabil a listaan ket adda dita baba tapno usaren a  reperensia:",
 'semiprotectedpagewarning' => "'''Pakaammo:'''Nasalakniban daytoy a panid tapno dagiti laeng nakarehistro nga agar-aramat ti makaurnos ditoy.
 Ti naudi a naikabil a listaan ket adda dita baba tapno usaren a reperensia:",
-'cascadeprotectedwarning' => "'''Ballaag:''' Daytoy a panid ket nasalakniban tapno dagiti laeng administrador nga addaan ti  gundaway ti makaurnos, ngamin ket nairaman kadagiti sumaganad a sariap a nasalakniban
+'cascadeprotectedwarning' => "'''Ballaag:''' Daytoy a panid ket nasalakniban tapno dagiti laeng administrador nga adda ti  gundaway ti makaurnos, ngamin ket nairaman kadagiti sumaganad a nasalakniban ti sariap
 {{PLURAL:$1|a panid|a pampanid}}:",
-'titleprotectedwarning' => "'''Ballaag:  Nasalakniban daytoy a panid tapno [[Special:ListGroupRights|dagiti naisangayan a karbengan ]] ket nasken ti agpartuat iti daytoy.'''
+'titleprotectedwarning' => "'''Ballaag:  Nasalakniban daytoy a panid tapno [[Special:ListGroupRights|dagiti naisangayan a karbengan ]] ket nasken ti makapartuat iti daytoy.'''
 Ti kinaudi a naikabil iti listaan ket naikabil dita baba tapno usaren a reperensia:",
 'templatesused' => '{{PLURAL:$1|Ti plantilia|Dagiti plantilia}} a naaramat iti daytoy a panid:',
-'templatesusedpreview' => '{{PLURAL:$1|Ti plantilia|Dagiti plantilia}} a nausar iti daytoy a panagpadas:',
+'templatesusedpreview' => '{{PLURAL:$1|Ti plantilia|Dagiti plantilia}} a naaramat iti daytoy a panagpadas:',
 'templatesusedsection' => '{{PLURAL:$1|Ti plantilia|Dagiti plantilia}} a naaramat iti daytoy a paset:',
 'template-protected' => '(nasalakniban)',
 'template-semiprotected' => '(nasalakniban-bassit)',
@@ -819,29 +823,29 @@ Mabalinmo ti agsubli ken urnosen ti adda a panid, wenno [[Special:UserLogin|sumr
 'recreate-moveddeleted-warn' => "'''Ballaag: Agparpartuatka manen ti naikkat idi a panid'''
 
 Nasken a siguraduem no maikanatad nga ituloymo nga urnosen daytoy a panid.
-Ti panaka-ikkat ken panka-iyalis a listaan para iti daytoy  a panid ket adda ditoy a pakakitaan:",
+Ti panaka-ikkat ken panaka-iyalis a listaan para iti daytoy  a panid ket adda ditoy a pakakitaan:",
 'moveddeleted-notice' => 'Naikkaten daytoy a panid.
 Ti listaan a panaka-ikkat ken panaka-iyalis ti panid ket naikabil dita baba tapno usaren a reperensia.',
-'log-fulllog' => 'Kitaem amin dagita listaan',
+'log-fulllog' => 'Kitaem ti napno a listaan',
 'edit-hook-aborted' => 'Ti panag-urnos ket napasardeng ti kawit.
 Awan ti intedna a palawag.',
 'edit-gone-missing' => 'Saan a mapabaro daytoy a panid.
 Kasla met naikkaten.',
 'edit-conflict' => 'Adda kasinnungat ti panag-urnos.',
-'edit-no-change' => 'Ti inurnos mo ket saan a naikaskaso, ngamin ket awan ti nasukatan a testo.',
+'edit-no-change' => 'Ti inurnosmo ket saan a naikaskaso, ngamin ket awan ti nasukatan a testo.',
 'edit-already-exists' => 'Saan a makaaramid ti baro a panid.
 Adda met daytoyen.',
-'defaultmessagetext' => 'Naisigud a testo ti mensahe',
+'defaultmessagetext' => 'Kasisigud a testo ti mensahe',
 
 # Parser/template warnings
-'expensive-parserfunction-warning' => "'''Ballaag:''' Daytoy a panid ket adu unay kadagiti nangina a parser nga opisio a pinagtawtawag.
+'expensive-parserfunction-warning' => "'''Ballaag:''' Daytoy a panid ket adu unay kadagiti nangina a parser a pamay-an  a panagtawtawag.
 
 Adda kuman basbasit ngem $2 {{PLURAL:$2|a panagtawtawag|kadagiti panagtawtawag}}, adda {{PLURAL:$1|tattan $1 a panagtawtawag|tattan kadagiti $1 a panagtawtawag}}.",
-'expensive-parserfunction-category' => 'Dagiti panid nga adda ti adu unay a nangina a parser nga opisio a panagtawtawag',
-'post-expand-template-inclusion-warning' => "'''Ballaag:''' Dakkel unay ti naikabil a plantilia.
-Addan to dagiti plantilia a saan a maikabil.",
-'post-expand-template-inclusion-category' => 'Dagiti pampanid nga ayan dagiti nagsobra ti rukod dagiti naikabil a plantilia',
-'post-expand-template-argument-warning' => "'''Ballaag:''' Daytoy a panid ket adda nagyanna a maysa a panagpalawag a plantilia a dakkel unay ti panagpadakkel na.
+'expensive-parserfunction-category' => 'Dagiti panid nga adda ti adu unay a nangina a parser a pamay-an a panagtawtawag',
+'post-expand-template-inclusion-warning' => "'''Ballaag:''' Dakkel unay ti nairaman a kadakkel ti plantilia.
+Adda dagiti plantilia a saanto a mairaman.",
+'post-expand-template-inclusion-category' => 'Pampanid nga ayan ti plantilia a  nagsobra ti kadakkel ti rukod a nairaman',
+'post-expand-template-argument-warning' => "'''Ballaag:''' Daytoy a panid ket aglaon ti saan a basbasit ngem maysa a panagpalawag a plantilia a dakkel unay ti panagpadakkel na.
 Dagitoy a panagpalawag  ket naikkaten.",
 'post-expand-template-argument-category' => 'Dagiti panid a naglaon ti naikkat a plantilia kadagiti kasinnungat',
 'parser-template-loop-warning' => 'Adda nasarakan a silo ti plantilia: [[$1]]',
@@ -860,13 +864,13 @@ Dagitoy a panagpalawag  ket naikkaten.",
 Pangngaasi a kitaen ti pagipadaan dita baba tapno maamuan no agpaypayso ti kayatmo nga aramiden, ken idulin dagiti sinukatan dita baba tapno malpas ti panagsubli ti inurnos.',
 'undo-failure' => 'Ti inurnos ket saan a maipasubli ta adda dagiti nakisinnungat a patingnga a naurnos.',
 'undo-norev' => 'Saan a maibabawi ti naurnos ngamin ket awan met daytoy wenno mabalin a naikkat.',
-'undo-summary' => 'Ibabawi ti binaliwan $1 ni [[Special:Contributions/$2|$2]] ([[User talk:$2|Makipatang]])',
+'undo-summary' => 'Ibabawi ti $1 a binaliwan babaen ni [[Special:Contributions/$2|$2]] ([[User talk:$2|tungtungan]])',
 
 # Account creation failure
-'cantcreateaccounttitle' => 'Madi a maaramid ti pakabilangan',
-'cantcreateaccount-text' => "Ti agaramid iti pakabilangan manipud itoy nga IP a pagtaengan ('''$1''') ket sinerraan ni [[User:$3|$3]].
+'cantcreateaccounttitle' => 'Saan a makaaramid ti pakabilangan',
+'cantcreateaccount-text' => "Ti panagaramid ti pakabilangan manipud itoy nga IP a pagtaengan ('''$1''') ket sinerraan babaen ni [[User:$3|$3]].
 
-Ti inted a rason ni $3 ket ''$2''",
+Ti inted a rason babaen ni $3 ket ''$2''",
 
 # History pages
 'viewpagelogs' => 'Kitaen dagiti listaan para iti daytoy a panid',
@@ -877,7 +881,7 @@ Ti inted a rason ni $3 ket ''$2''",
 'revision-info' => 'Panangbaliw manipud idi $1 babaen ni $2',
 'previousrevision' => '←Daan a panangbalbaliw',
 'nextrevision' => 'Nabarbaro a panangbalbaliw→',
-'currentrevisionlink' => 'kitaen ti agdama a panangbaliw',
+'currentrevisionlink' => 'Kinaudi a binaliwan',
 'cur' => 'agdama',
 'next' => 'sumaruno',
 'last' => 'naudi',
@@ -889,16 +893,16 @@ Sarita: '''({{int:cur}})''' = naggidiatan ti kinaudi a panagbaliw, '''({{int:las
 'history-show-deleted' => 'Naikkat laeng',
 'histfirst' => 'Kaunaan',
 'histlast' => 'Kaudian',
-'historysize' => '({{PLURAL:$1|1 a byte|$1 a bytes}})',
+'historysize' => '({{PLURAL:$1|1 byte|$1 bytes}})',
 'historyempty' => '(blanko)',
 
 # Revision feed
 'history-feed-title' => 'Pakasaritaan ti panagbalbaliw',
 'history-feed-description' => 'Pakasaritaan ti panagbalbaliw para iti daytoy a panid ditoy a wiki',
 'history-feed-item-nocomment' => '$1 iti $2',
-'history-feed-empty' => 'Awan ti kiniddaw a panid..
-Baka naikkaten ditoy a wiki, wenno nanaganan.
-Padasem ti [[Special:Search|agbiruk ditoy a wiki]] kadagiti mapaay a baro a panid.',
+'history-feed-empty' => 'Awan ti kiniddaw a panid.
+Mabalin a naikkat manipud ti daytoy a wiki, wenno nanaganan manen.
+Padasem ti [[Special:Search|agbiruk ditoy a wiki]] para kadagiti maitutop a baro a panid.',
 
 # Revision deletion
 'rev-deleted-comment' => '(naikkat ti pakabuklan ti inurnos)',
@@ -912,7 +916,7 @@ Dagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FU
 Mabalinmo pay a [$1 makita daytoy a panakabaliw] no kayatmo ti agtuloy.",
 'rev-suppressed-text-unhide' => "Ti panakabaliw daytoy a panid ket '''napasardeng'''.
 Dagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} listaan ti napasardeng].
-Mabalin mo pay a [$1 makita daytoy a panakabaliw] no kayatmo ti agtuloy.",
+Mabalinmo pay a [$1 makita daytoy a panakabaliw] no kayatmo ti agtuloy.",
 'rev-deleted-text-view' => "Ti panakabaliw daytoy a panid ket '''naikkaten'''.
 Mabalinmo a kitaen; dagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti naikkat].",
 'rev-suppressed-text-view' => "Ti panakabaliw daytoy a panid ket '''napasardeng'''.
@@ -932,73 +936,75 @@ Mabalinmo pay a kitaen daytoy a paggiddiatan; dagiti salaysay ket mabirukan idia
 Mabalinmo pay a kitaen daytoy a paggiddiatan; dagiti salaysay ket mabirukan idiay [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} listaan ti napasardeng].",
 'rev-delundel' => 'ipakita/ilemmeng',
 'rev-showdeleted' => 'ipakita',
-'revisiondelete' => 'Naikkat/isubli dagiti naikkat a panagbaliw',
+'revisiondelete' => 'Ikkaten/isubli dagiti naikkat a panagbaliw',
 'revdelete-nooldid-title' => 'Imbalido ti napuntaan a panagbaliw',
-'revdelete-nooldid-text' => 'Baka saanmo nga imbaga ti pagpuntaan ti panagbaliw  (dagiti panagbaliwan) ti panagaramid daytoy,
+'revdelete-nooldid-text' => 'Mabalin a saanmo nga imbaga ti pagpuntaan ti panagbaliw  (dagiti panagbaliwan) ti panagaramid daytoy,
 awan ti naibaga a panagbaliw, wenno padpadasem nga ilemlemmeng ti agdama a panagbaliw.',
 'revdelete-nologtype-title' => 'Awan ti naited a kita ti listaan',
 'revdelete-nologtype-text' => 'Saanmo nga nainaganan ti kita a listaan ti agtungpal daytoy nga aramid.',
 'revdelete-nologid-title' => 'Imbalido a panangikabil dita listaan',
 'revdelete-nologid-text' => 'Saanmo a nainaganan ti puntaan ti listaan a paspasamak ti agaramid daytoy a pagusar wenno ti nainaganan nga inkabil ket saan nga adda idiay.',
-'revdelete-no-file' => 'Awan dayta ti nainaganan a papeles.',
-'revdelete-show-file-confirm' => 'Segurado a kayatmo ti mangkita ti naikkat a baliwan ti papeles "<nowiki>$1</nowiki>" a naggapu idi $2 ti oras nga $3?',
+'revdelete-no-file' => 'Awan dayta nainaganan a papeles.',
+'revdelete-show-file-confirm' => 'Sigurado kadi a kayatmo ti mangkita ti naikkat a baliwan ti papeles "<nowiki>$1</nowiki>" a naggapu idi $2 ti oras nga $3?',
 'revdelete-show-file-submit' => 'Wen',
 'revdelete-selected' => "'''{{PLURAL:$2|Napili a nabaliwan|Dagiti napili a nabaliwan}} iti [[:$1]]:'''",
 'logdelete-selected' => "'''{{PLURAL:$1|Ti napili a listaan ti napasamak|Dagiti napili a listaan ti napasamak}}:'''",
 'revdelete-text' => "'''Dagiti naikkat a binaliwan ken dagiti napasamak ket agparang idiay panid ti pakasaritaan ken dagiti listaan, ngem addaan dagiti paset ti nagyanda a saan a maserrekan ti publiko.'''
-Dagiti sabsabali nga administrador idiay {{SITENAME}} ket mabalin da a serrekan ti nailemmeng a nagyan ken isubli ti panakaikkat da manen idiay dati nga interface, ngem saan no adda dagiti nainayon a naikabil a panagparit.",
+Dagiti sabsabali nga administrador idiay {{SITENAME}} ket mabalinda a serrekan ti nailemmeng a nagyan ken isubli ti panakaikkatda manen idiay dati nga interface, ngem saan no adda dagiti nainayon a naikabil a panagparit.",
 'revdelete-confirm' => 'Pangngaasi a pasingkedam a kayatmo nga aramiden daytoy, a maawatam dagiti pagbanagan, ket araramidem daytoy a segun iti [[{{MediaWiki:Policy-url}}|ti annuroten]].',
-'revdelete-suppress-text' => "Ti pinagdepdep ket usaren '''laeng''' kadagiti sumaganad;
-* Makapataud a dakes a pakaammo
+'revdelete-suppress-text' => "Ti panagdepdep ket usaren '''laeng''' kadagiti sumaganad a kaso;
+* Adda panakabalinna a dakes a pakaammo
 * Di maiparbeng a  kabukbukodan a pakaammo
 * : ''dagiti pagtaengan ken numero ti telepono, numero ti sosial a seguridad, ken dadduma pay.''",
-'revdelete-legend' => 'Iplastar dagiti panagiparit ti panagkita',
+'revdelete-legend' => 'Ikabil dagiti panagiparit ti panagkita',
 'revdelete-hide-text' => 'Ilemmeng ti testo ti binaliwan',
 'revdelete-hide-image' => 'Ilemmeng ti linaon ti papeles',
 'revdelete-hide-name' => 'Ilemmeng ti aramid ken puntaan',
 'revdelete-hide-comment' => 'Ilemmeng ti pakabulan ti inurnos',
 'revdelete-hide-user' => 'Ilemmeng ti nagan ti agar-amat/ti IP a pagtaengan',
 'revdelete-hide-restricted' => 'Depdepen ti datos a naggapu kadagiti administrador ken dagiti sabsabali',
-'revdelete-radio-same' => 'saan a sukatan',
+'revdelete-radio-same' => '(saan a sukatan)',
 'revdelete-radio-set' => 'Wen',
 'revdelete-radio-unset' => 'Saan',
-'revdelete-suppress' => 'Depdepen ti data a naggapu kadagiti administrador ken dagiti sabsabali',
+'revdelete-suppress' => 'Depdepen ti datos manipud kadagiti administrador ken dagiti sabsabali',
 'revdelete-unsuppress' => 'Ikkaten dagiti pannakaiparit kadagiti naisubli a binaliwan',
 'revdelete-log' => 'Rason:',
-'revdelete-submit' => 'Ipakat ti napili {{PLURAL:$1|a panagbalbaliw|a dagiti panagbalbaliw}}',
+'revdelete-submit' => 'Ipakat  {{PLURAL:$1|ti napili a panagbalbaliw|dagiti napili a panagbalbaliw}}',
 'revdelete-success' => "'''Balligi ti panagpabaro ti pinakakita ti pinagbaliwan.'''",
 'revdelete-failure' => "'''Saan a napabaro ti pinakakita ti pinagbaliwan.'''
 $1",
 'logdelete-success' => "'''Balligi ti panagikabil ti listaan ti panagkita.'''",
 'logdelete-failure' => "'''Napaay ti panagikabil ti listaan ti panagkita:'''
 $1",
-'revdel-restore' => 'Sukatan ti panagkita',
-'revdel-restore-deleted' => 'naikkat a binaliwan',
-'revdel-restore-visible' => 'makita a binaliwan',
+'revdel-restore' => 'sukatan ti panagkita',
+'revdel-restore-deleted' => 'dagiti naikkat a binaliwan',
+'revdel-restore-visible' => 'dagiti makita a binaliwan',
 'pagehist' => 'Pakasaritaan ti panid',
 'deletedhist' => 'Naikkat a pakasaritaan',
 'revdelete-hide-current' => 'Biddut ti panakailemmeng ti banag a napetsado a $2, $1: Daytoy ti kinaudi a panagbaliw
-Saan a mailemmeng.',
+Saan a mabalin a mailemmeng.',
 'revdelete-show-no-access' => 'Biddut ti panagpakita ti banag a petsado a $2, $1: Daytoy ket namarkaan a "nakedngan".
-Saan mo a mabalin a serrekan.',
+Saanmo a mabalin a serrekan.',
 'revdelete-modify-no-access' => 'Biddut ti panagpabaro ti banag a petsado a $2, $1: Daytoy ket namarkaan a "nakedngan".
-Saan mo a mabalin a serrekan.',
+Saanmo a mabalin a serrekan.',
 'revdelete-modify-missing' => 'Biddut ti panagpabaro daytoy ID $1: Saan a nasarakan idiay database!',
-'revdelete-no-change' => "'''Biddut:''' Daytoy a banag a petsado a  $2, $1 ket addaan ti kiniddaw kadagiti pakakita a kasasaad.",
-'revdelete-concurrent-change' => 'Biddut ti panagpabaro daytoy a banag a petsado a $2, $1: Ti panakaikabil na ket mabalin a nasuktanen ti sabsabli idi pinadas mo a pinabaro.',
-'revdelete-only-restricted' => 'Biddut ti panagilemmeng daytoy banag a petsado a $2, $1: Saan mo a maidepdep dagita iti panagkita dagiti adminitrador no saan mo a pilian ti maysa kadagiti pinagpili ti panagkita.',
-'revdelete-reason-dropdown' => '*Dagiti kadawyan a panagikkat
-** Panaglabsing ti karbengan ti panagipablaak
-** Saan a maibagay ti kabukbukodan a pakaammo
-** Makapataud ti dakes a pakaammo',
-'revdelete-otherreason' => 'Sabali/dadduma a rason:',
+'revdelete-no-change' => "'''Ballaag:''' Daytoy a banag a napetsado ti  $2, $1 ket addaan ti kiniddaw kadagiti panakakita a kasasaad.",
+'revdelete-concurrent-change' => 'Biddut ti panagpabaro daytoy a banag a napetsado ti  $2, $1: Ti panakaikabilna ket mabalin a nasuktanen ti sabsabli idi pinada mo a pinabaro.
+Pangngaasi a kitaen dagiti listaan.',
+'revdelete-only-restricted' => 'Biddut ti panagilemmeng daytoy banag a napetsado ti $2, $1: Saanmo a maidepdep dagita iti panagkita dagiti adminitrador no saanmo a pilian ti maysa kadagiti pinagpili ti panagkita.',
+'revdelete-reason-dropdown' => '*Dagiti kadawyan a rason ti panagikkat
+** Panaglabsing ti karbengan ti kopia
+** Di maiparbeng a komentario wenno kabukbukodan a pakaammo
+** Di maiparbeng a nagan ti agar-aramat
+** Adda pannakabalinna a pammadpadakes a pakaammo',
+'revdelete-otherreason' => 'Sabali/maipatinayon a rason:',
 'revdelete-reasonotherlist' => 'Sabali a rason',
-'revdelete-edit-reasonlist' => 'Urnosen ti rason ti panagikkat',
+'revdelete-edit-reasonlist' => 'Urnosen dagiti rason ti panagikkat',
 'revdelete-offender' => 'Nangsukat a mannurat:',
 
 # Suppression log
 'suppressionlog' => 'Listaan ti nadepdepan',
-'suppressionlogtext' => 'Dita baba ket addaan dagiti listaan ti pinagikkat ken npanagserra a nairaman dagiti linaon a nailemmeng manipud kadagiti administrador.
+'suppressionlogtext' => 'Dita baba ket addaan dagiti listaan ti pinagikkat ken panagserra a nairaman dagiti linaon a nailemmeng manipud kadagiti administrador.
 Kitaen ti [[Special:BlockList|Listaan ti lapden nga IP]] para iti listaan kadagiti agdama nga operasional a panagparit ken panagserra.',
 
 # History merging
@@ -1008,13 +1014,13 @@ Masapul a sigaraduem a daytoy a panagsukat ket agsustento ti panakaituloy ti pak
 'mergehistory-box' => 'Pagtiponen dagiti nasukatan iti dua a pampanid:',
 'mergehistory-from' => 'Taudan ti panid:',
 'mergehistory-into' => 'Pangipanan a panid:',
-'mergehistory-list' => 'Mabalin nga itipon ti pakasaritaan ti inurnos',
+'mergehistory-list' => 'Mabalin nga itipon a pakasaritaan ti inurnos',
 'mergehistory-merge' => 'Dagiti sumaganad a panagbaliw iti [[:$1]] ket mabalin nga itipon iti [[:$2]].
 Usaren ti radio a buton a tukol ti pinagtipon iti laeng panagbaliw a naaramid idiay ken sakbay ti nainagan nga oras.',
 'mergehistory-go' => 'Ipakita dagiti mabalin a maitipon a panag-urnos',
 'mergehistory-submit' => 'Pagtitiponen dagiti binalbaliwan',
-'mergehistory-empty' => 'Awan dagiti mabalin nga itipon.',
-'mergehistory-success' => '$3 {{PLURAL:$3|a binaliwan|dagiti binaliwan}} ti [[:$1]] balligi ti pinagtipon idiay [[:$2]].',
+'mergehistory-empty' => 'Awan dagiti mabalin nga itipon ti panagbalbaliw.',
+'mergehistory-success' => '$3 {{PLURAL:$3|a binaliwan|dagiti binaliwan}} ti [[:$1]] balligi ti panagitipon idiay [[:$2]].',
 'mergehistory-fail' => 'Saan a nakaaramid ti panagtipon ti pakasaritaan, pangngaasi ta kitaen ti panid ken parametro ti oras.',
 'mergehistory-no-source' => 'Awan ti taudan ti panid a $1.',
 'mergehistory-no-destination' => 'Awan ti papanan ti panid a $1.',
@@ -1041,7 +1047,7 @@ Usaren ti radio a buton a tukol ti pinagtipon iti laeng panagbaliw a naaramid id
 'showhideselectedversions' => 'Ipakita/ilemmeng dagiti napili a nabaliwan',
 'editundo' => 'ibabawi',
 'diff-multi' => '({{PLURAL:$1|Maysa nga agtengnga a panangbalbaliw|Dagiti $1 nga agtennga a panangbalbaliw}} babaen {{PLURAL:$2|ti agararamat|dagiti $2 nga agararamat}} ti saan a naipakita)',
-'diff-multi-manyusers' => '({{PLURAL:$1|Maysa nga agtengnga a panangbalbaliw|Dagiti $1 nga agtengnga a panangbalbaliw}} babaen ti ad-adu ngem $2 {{PLURAL:$2|nga agar-aramat|kadagiti agar-aramat}} a saan a naipakita)',
+'diff-multi-manyusers' => '({{PLURAL:$1|Maysa nga agtengnga a panangbalbaliw|Dagiti $1 nga agtengnga a panangbalbaliw}} babaen ti ad-adu ngem $2 {{PLURAL:$2|nga agar-aramat|kadagiti agar-aramat}} ti saan a naipakita)',
 'difference-missing-revision' => '{{PLURAL:$2|Maysa a panagbalbaliw|$2 kadagiti panagbalbaliw}} iti daytoy a paggiddiatan ($1) {{PLURAL:$2|ket ti|ket dagiti}} saan a naburikan.
 
 Daytoy ket kadawyan a gapuanan babaen ti sumaganad a nabaak a panilpo tipaggiddiatan ti maysa a panid a naikkaten.
@@ -1049,15 +1055,15 @@ Dagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete
 
 # Search results
 'searchresults' => 'Dagiti nagbanagan ti panagbiruk',
-'searchresults-title' => 'Dagiti nabirukan a nagbanagan ti "$1"',
-'searchresulttext' => 'Ti adu pay a pakaammo ti panagbiruk {{SITENAME}}, kitaem ti [[{{MediaWiki:Helppage}}|{{int:help}}]].',
-'searchsubtitle' => 'Nagbiruk ka  para iti \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|amin a panid a mangrugi iti "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|amin a panid nga agsilpo iti "$1"]])',
+'searchresults-title' => 'Dagiti nabirukan a nagbanagan para iti "$1"',
+'searchresulttext' => 'Para iti adu pay a pakaammo a maipanggep ti panagbiruk {{SITENAME}}, kitaem ti [[{{MediaWiki:Helppage}}|{{int:help}}]].',
+'searchsubtitle' => 'Nagbirukka  para iti \'\'\'[[:$1]]\'\'\' ([[Special:Prefixindex/$1|amin a panid a mangrugi iti "$1"]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|amin a panid nga agsilpo iti "$1"]])',
 'searchsubtitleinvalid' => "Nagbiruk ka para  iti '''$1'''",
 'toomanymatches' => 'Adu unay ti napasubli  nga agpapada, pangngaasi a padasem ti sabali a panagsapul',
 'titlematches' => 'Dagiti kapadpada a titulo ti panid',
 'notitlematches' => 'Awan dagiti kapadpada a titulo ti panid',
 'textmatches' => 'Dagiti agpapada a testo ti panid',
-'notextmatches' => 'Awan dagiti kapadpada a teksto ti panid',
+'notextmatches' => 'Awan dagiti kapadpada a testo ti panid',
 'prevn' => 'napalabas {{PLURAL:$1|$1}}',
 'nextn' => 'sumaruno {{PLURAL:$1|$1}}',
 'prevn-title' => 'Napalabas a $1 {{PLURAL:$1|a nagbanagan|kadagiti nagbanagan}}',
@@ -1081,22 +1087,22 @@ Dagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete
 'searchprofile-advanced-tooltip' => 'Agbiruk ka kadagiti naiduma a "nagan ti lugar"',
 'search-result-size' => '$1 ({{PLURAL:$2|iti 1 a balikas|kadagiti $2 a balikas}})',
 'search-result-category-size' => '{{PLURAL:$1|1 a kameng| dagiti $1 a kameng}} ({{PLURAL:$2|1 nga apo ti kategoria|dagiti $2  nga apo ti kategoria}}, {{PLURAL:$3|1 a papeles|dagiti $3 a papeles}})',
-'search-result-score' => 'Kapategan: $1%',
+'search-result-score' => 'Kaitutopan: $1%',
 'search-redirect' => '(ibaw-ing ti $1)',
 'search-section' => '(paset $1)',
 'search-suggest' => 'Daytoy kadi: $1',
 'search-interwiki-caption' => 'Dagiti kakabsat a gandat',
 'search-interwiki-default' => '$1 dagiti nagbanagan:',
 'search-interwiki-more' => '(adu pay)',
-'search-mwsuggest-enabled' => 'addaan ti singasing',
-'search-mwsuggest-disabled' => 'awanan ti singasing',
+'search-mwsuggest-enabled' => 'addaan dagiti singasing',
+'search-mwsuggest-disabled' => 'awanan dagiti singasing',
 'search-relatedarticle' => 'Mainaig',
-'mwsuggest-disable' => 'Pagsardengen dagiti AJAX a naibagbaga',
+'mwsuggest-disable' => 'Pagsardengen dagiti AJAX a naisingasing',
 'searcheverything-enable' => 'Agbirukka kadagiti amin a nagan ti lugar',
 'searchrelated' => 'mainaig',
 'searchall' => 'amin',
 'showingresults' => "Maiparang iti baba ti agingga {{PLURAL:$1|iti '''1''' a nagbanagan|dagiti '''$1''' a nagbanagan}} a mangrugi iti #'''$2'''.",
-'showingresultsnum' => "Makita dita baba  {{PLURAL:$3|iti '''1''' a nagbanagan|dagiti '''$3''' a nagbanagan}} a mangrugi iti #'''$2'''.",
+'showingresultsnum' => "Maipakpakita dita baba  {{PLURAL:$3|iti '''1''' a nagbanagan|dagiti '''$3''' a nagbanagan}} a mangrugi iti #'''$2'''.",
 'showingresultsheader' => "{{PLURAL:$5|Nagbanagan a '''$1''' iti '''$3'''|Dagiti Nagbanagan a '''$1 - $2''' iti '''$3'''}} para iti '''$4'''",
 'nonefound' => "'''Palagip'': Adda laeng bassit dagita nagan ti lugar a masigud a biruken.
 Padasem a  pasarunuan ti panagbiruk mo ti ''all:'' tapno birukem amin a nagyan (mairaman ti kapatangan a pampanid, dagiti plantilia, ken dadduma pay), wenno usarem nga ipasaruno ti kayatmo a nagan ti lugar.",
@@ -1140,7 +1146,7 @@ Laglagipem laeng a dagiti pagsurotan nagyan ti {{SITENAME}} ket baka baak.',
 'prefs-personal' => 'Bariweswes ti agar-aramat',
 'prefs-rc' => 'Kinaudi a binalbaliwan',
 'prefs-watchlist' => 'Listaan ti bambantayan',
-'prefs-watchlist-days' => 'Manu nga aldaw nga agparang ti listaan iti bambantayan:',
+'prefs-watchlist-days' => 'Alaldaw nga iparang idiay listaan ti bambantayan:',
 'prefs-watchlist-days-max' => 'Kabayag nga $1 {{PLURAL:$1|nga aldaw|nga al-aldaw}}',
 'prefs-watchlist-edits' => 'Kaadu a bilang ti ipakita kadagiti sinukatan iti napadakkel a bambantayan:',
 'prefs-watchlist-edits-max' => 'Kaadu a bilang: 1000',
@@ -1160,20 +1166,20 @@ Laglagipem laeng a dagiti pagsurotan nagyan ti {{SITENAME}} ket baka baak.',
 'columns' => 'Tuk-tukol:',
 'searchresultshead' => 'Biruken',
 'resultsperpage' => 'Nabirukan ti tunggal maysa a panid:',
-'stub-threshold' => 'Pangruggian ti <a href="#" class="stub">pungol a panilpo</a>pinagbukel (bytes):',
+'stub-threshold' => 'Pangruggian ti <a href="#" class="stub">pungol a panilpo</a>panagporma (dagiti byte):',
 'stub-threshold-disabled' => 'Nabaldado',
-'recentchangesdays' => 'Mano nga aldaw nga ipakita dagiti kinaudi a binalbaliwan:',
+'recentchangesdays' => 'Alaldaw nga ipakita dagiti kinaudi a binalbaliwan:',
 'recentchangesdays-max' => 'Kabayag nga $1 {{PLURAL:$1|nga aldaw|nga al-aldaw}}',
 'recentchangescount' => 'Dagiti bilang dagiti naurnos a kinasigud a maiparang:',
 'prefs-help-recentchangescount' => 'Nairaman dagiti kinaudian a baliwan, dagiti pakasaritaan ti panid, ken dagiti listaan.',
 'prefs-help-watchlist-token' => 'No ikkam daytoy pagikabilan ti sekreto a tulbek, agaramid ti pakan a RSS para ti binambantayam.
-No adda makaammo daytoy a tulbek ditoy a pagikabilan ket mabalin da a basaen ti binambantayam, masapul nga agpili ka ti kuwenta a seguridad.
+No adda makaammo daytoy a tulbek ditoy a pagikabilan ket mabalin da a basaen ti binambantayam, masapul nga agpilika ti pateg a seguridad.
 
-Adda ditoy ti pugto a kuwenta a mausarmo: $1',
+Adda ditoy ti pugto a pateg a mausarmo: $1',
 'savedprefs' => 'Naidulin dagitoy kaykayatmon.',
 'timezonelegend' => 'Sona ti oras:',
 'localtime' => 'Lokal nga oras:',
-'timezoneuseserverdefault' => 'Usaren ti wiki a kinasigud ($1)',
+'timezoneuseserverdefault' => 'Usaren ti wiki a kasisigud ($1)',
 'timezoneuseoffset' => 'Sabsabali (inaganan ti tangdan)',
 'timezoneoffset' => 'Tangda¹:',
 'servertime' => 'Oras ti server:',
@@ -1189,10 +1195,10 @@ Adda ditoy ti pugto a kuwenta a mausarmo: $1',
 'timezoneregion-indian' => 'Taaw Indiano',
 'timezoneregion-pacific' => 'Taaw Pasipiko',
 'allowemail' => 'Pakabaelam ti e-surat a naggapu kadagiti sabali nga agar-aramat',
-'prefs-searchoptions' => 'Pagpilian ti agbiruk',
+'prefs-searchoptions' => 'Biruken',
 'prefs-namespaces' => 'Nagan ti luglugar',
-'defaultns' => 'Wenno no saan agbiruk ka kadagitoy a nagan ti luglugar:',
-'default' => 'kinasigud',
+'defaultns' => 'Wenno no saan agbirukka kadagitoy a nagan ti luglugar:',
+'default' => 'kasisigud',
 'prefs-files' => 'Dagiti papeles',
 'prefs-custom-css' => 'Naiduma a CSS',
 'prefs-custom-js' => 'Naiduma a JavaScript',
@@ -1234,11 +1240,11 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 'prefs-signature' => 'Pirma',
 'prefs-dateformat' => 'Kita ti petsa',
 'prefs-timeoffset' => 'Tangda ti oras',
-'prefs-advancedediting' => 'Dagiti nangato a pagpilian',
-'prefs-advancedrc' => 'Dagiti nangato a pagpilian',
-'prefs-advancedrendering' => 'Dagiti nangato a pagpilian',
-'prefs-advancedsearchoptions' => 'Dagiti nangato a pagpilian',
-'prefs-advancedwatchlist' => 'Dagiti nangato a pagpilian',
+'prefs-advancedediting' => 'Dagiti napasayaat a pagpilian',
+'prefs-advancedrc' => 'Dagiti napasayaat a pagpilian',
+'prefs-advancedrendering' => 'Dagiti napasayaat a pagpilian',
+'prefs-advancedsearchoptions' => 'Dagiti napasayaat a pagpilian',
+'prefs-advancedwatchlist' => 'Dagiti napasayaat a pagpilian',
 'prefs-displayrc' => 'Ipakita dagiti pagpilian',
 'prefs-displaysearchoptions' => 'Ipakita dagiti pagpilian',
 'prefs-displaywatchlist' => 'Ipakita dagiti pagpilian',
@@ -1264,7 +1270,7 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 * A * ti kunana ket saan mo a maikkat ti bunggoy no nainayonmon, wenno pagbalittaden.',
 'userrights-reason' => 'Rason:',
 'userrights-no-interwiki' => 'Awan ti pammalubosmo nga agbaliw ti karbengan ti agar-aramat kadagiti sabali a wiki.',
-'userrights-nodatabase' => 'Awan ti database a $1 wenno baka saan a lokal.',
+'userrights-nodatabase' => 'Awan ti database a $1 wenno saan a lokal.',
 'userrights-nologin' => 'Masapul a [[Special:UserLogin|sumrekka]] nga adda pakabilangan nga administrador ti magted kadagiti karbengan ti agar-aramat.',
 'userrights-notallowed' => 'Awan ti pammalubos ti pakabilangam a mangted iti kakaberngan ti agar-aramat.',
 'userrights-changeable-col' => 'Dagiti bunggoy a mabalinmo a baliwan',
@@ -1274,29 +1280,29 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 'group' => 'Bunggoy:',
 'group-user' => 'Dagiti agar-aramat',
 'group-autoconfirmed' => 'Dagiti automatiko a napasingkedan nga agar-aramat',
-'group-bot' => 'Dagiti bots',
+'group-bot' => 'Dagiti bot',
 'group-sysop' => 'Dagiti administrador',
 'group-bureaucrat' => 'Dagiti burokrata',
 'group-suppress' => 'Pakapansin',
 'group-all' => '(amin)',
 
 'group-user-member' => '{{GENDER:$1|agar-aramat}}',
-'group-autoconfirmed-member' => 'automatiko a napasingkedan nga agar-aramat',
-'group-bot-member' => 'bot',
-'group-sysop-member' => 'administrador',
-'group-bureaucrat-member' => 'burokrata',
-'group-suppress-member' => 'pagpansin',
+'group-autoconfirmed-member' => '{{GENDER:$1|automatiko a napasingkedan nga agar-aramat}}',
+'group-bot-member' => '{{GENDER:$1|bot}}',
+'group-sysop-member' => '{{GENDER:$1|administrador}}',
+'group-bureaucrat-member' => '{{GENDER:$1|burokrata}}',
+'group-suppress-member' => '{{GENDER:$1|pagpansin}}',
 
 'grouppage-user' => '{{ns:project}}:Dagiti agar-aramat',
 'grouppage-autoconfirmed' => '{{ns:project}}:Dagiti automatiko a napasingkedan nga agar-aramat',
-'grouppage-bot' => '{{ns:project}}:Dagiti bots',
+'grouppage-bot' => '{{ns:project}}:Dagiti bot',
 'grouppage-sysop' => '{{ns:project}}:Dagiti administrador',
 'grouppage-bureaucrat' => '{{ns:project}}:Dagiti burokrata',
 'grouppage-suppress' => '{{ns:project}}:Pagpansin',
 
 # Rights
 'right-read' => 'Basaen dagiti panid',
-'right-edit' => 'Agurnos kadagiti pampanid',
+'right-edit' => 'Agurnos kadagiti panid',
 'right-createpage' => 'Agaramid kadagiti panid (saan a pagtutungtongan a pampanid)',
 'right-createtalk' => 'Agaramid ti pagtungtungan a pampanid',
 'right-createaccount' => 'Agaramid kadagiti baro a pakabilangan ti agar-aramat',
@@ -1309,23 +1315,23 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 'right-upload' => 'Agipan ti papeles',
 'right-reupload' => 'Suratam manen dagiti adda a papeles',
 'right-reupload-own' => 'Pasuratam manen dagiti addaan ti pinag-ipan mo a papeles',
-'right-reupload-shared' => 'Paawanen dagiti papeles idiay pagbingayan ti nakaikabilan ti media a lokal',
+'right-reupload-shared' => 'Paawanen dagiti papeles idiay pagbingayan ti nakaikabilan ti midia a lokal',
 'right-upload_by_url' => 'Pag-ipan ti papeles a naggapu ti URL',
-'right-purge' => 'Pasariwaam ti cache ti pagsaadan a ti panid ket awan ti pasingkedan na.',
+'right-purge' => 'Purgaen ti pagidulinan ti pagsaadan a ti panid nga awan ti panagpasingked',
 'right-autoconfirmed' => 'Urnosen dagiti nasalakniban-bassit a panid',
-'right-bot' => 'Matrato a kas automatiko a panagaramid',
+'right-bot' => 'Matrato a kas automatiko a pamay-an',
 'right-nominornewtalk' => 'Nga awanan ti bassit a panagurnos dagiti tungtungan a panid ti mangkalbit dagiti agpakabil ti baro a mensahe',
-'right-apihighlimits' => 'Agusar ti nangatngato a patingga kadagiti pinagsapul ti API.',
+'right-apihighlimits' => 'Agusar ti nangatngato a patingga kadagiti panagsapul ti API.',
 'right-writeapi' => 'Panagusar ti panagsurat nga API',
 'right-delete' => 'Ikkaten dagiti panid',
 'right-bigdelete' => 'Ikkaten dagiti panid nga adda dagiti dakkel a pakasaritaanna',
 'right-deletelogentry' => 'Ikkaten ken isubli ti panagikkat dagiti naisangsangayan a naikabil ti listaan',
-'right-deleterevision' => 'Ikkaten ken ipasubli dagiti nainagan a pinagbaliwan ti panid',
+'right-deleterevision' => 'Ikkaten ken ipasubli dagiti nainagan a panagbaliw ti panid',
 'right-deletedhistory' => 'Kitaen dagiti naikabil a pakasaritaan, nga awan kaniada kadagiti nairaman a testo',
 'right-deletedtext' => 'Kitaen dagiti naikkat a testo ken dagiti nasukatan a nagbaetan dagiti binaliwan',
 'right-browsearchive' => 'Biruken dagiti naikkat a panid',
 'right-undelete' => 'Isubli ti naikkat a panid',
-'right-suppressrevision' => 'Kitaen ken ipasubli dagiti binaliwan a nailemmeng kadagiti administrador',
+'right-suppressrevision' => 'Kitaen ken ipasubli dagiti binaliwan a nailemmeng manipud kadagiti administrador',
 'right-suppressionlog' => 'Kitaen dagita pribado a listaan',
 'right-block' => 'Serraan dagiti sabali nga agar-aramat manipud iti panag-urnos',
 'right-blockemail' => 'Serraan dagiti agar-aramat nga agpatulod manipud ti e-surat',
@@ -1358,20 +1364,20 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 
 # User rights log
 'rightslog' => 'Listaan dagiti karbengan ti agar-aramat',
-'rightslogtext' => 'Listaan daytoy kadagiti sinukatan a karbengan ti agararamat.',
+'rightslogtext' => 'Listaan daytoy kadagiti sinukatan a karbengan ti agar-aramat.',
 'rightslogentry' => 'sinukatan ti panagkameng iti bunggoy ti $1 manipud $2 iti $3',
-'rightslogentry-autopromote' => 'na automatiko a naipangato a naggapo iti $2 idiay $3',
+'rightslogentry-autopromote' => 'naautomatiko a naipangato a naggapo iti $2 idiay $3',
 'rightsnone' => '(awan)',
 
 # Associated actions - in the sentence "You do not have permission to X"
-'action-read' => 'basaem datoy a panid',
-'action-edit' => 'agurnos iti datoy a panid',
+'action-read' => 'basaen datoy a panid',
+'action-edit' => 'urnosen datoy a panid',
 'action-createpage' => 'agpartuat kadagiti panid',
 'action-createtalk' => 'agaramid kadagiti pagtungtungan a panid',
 'action-createaccount' => 'agpartuat ti pakabilangan daytoy nga agar-aramat',
 'action-minoredit' => 'markaam a bassit nga urnos daytoy',
 'action-move' => 'iyalis daytoy a panid',
-'action-move-subpages' => 'iyalis daytoy a panid, ken dagiti apo na a panid',
+'action-move-subpages' => 'iyalis daytoy a panid, ken dagiti apona a panid',
 'action-move-rootuserpages' => 'iyalis dagiti ramut a panid ti agar-aramat',
 'action-movefile' => 'iyalis daytoy a papeles',
 'action-upload' => 'ipapan daytoy a papeles',
@@ -1414,7 +1420,7 @@ Ti e-surat a pagtaengam ket saan nga maipakita kadagiti agar-aramat nga agkontak
 'rcnotefrom' => "Makita dita baba dagiti sinukatan manipud idi '''$2''' (agingga iti '''$1''' ti naipakita).",
 'rclistfrom' => 'Ipakita dagiti kabarbaro a sinukatan a mangrugi manipud idi $1',
 'rcshowhideminor' => '$1 dagiti bassit a panag-urnos',
-'rcshowhidebots' => '$1 dagiti bots',
+'rcshowhidebots' => '$1 dagiti bot',
 'rcshowhideliu' => '$1 dagiti nakastrek nga agar-aramat',
 'rcshowhideanons' => '$1 dagiti di am-ammo nga agar-aramat',
 'rcshowhidepatr' => '$1 dagiti napatrulian a panag-urnos',
@@ -1494,7 +1500,7 @@ Pangngaasi ta naganan manen ti papeles ken padasen manen nga ipapan.',
 'filetype-unwanted-type' => "'''\".\$1\"''' ti saan a mapalubusan a kita ti papeles.
 Ti mapalubusan  {{PLURAL:\$3|a kita ti papeles ket|kadagiti kita ti papeles ket}} \$2.",
 'filetype-banned-type' => 'Ti \'\'\'".$1"\'\'\' {{PLURAL:$4|ket saan a mapalubusan a kita ti papeles|ket dagiti saan a mapalubusan a kita ti papeles}}.
-Ti mapalubusan{{PLURAL:$3|a kita ti papeles ket|kadagiti kita ti papeles ket}} $2.',
+Ti mapalubusan {{PLURAL:$3|a kita ti papeles ket|kadagiti kita ti papeles ket}} $2.',
 'filetype-missing' => 'Daytoy a papeles ket awan ti kita na a (kasla ".jpg").',
 'empty-file' => 'Ti papeles nga intedmo ket awan ti nagyan na.',
 'file-too-large' => 'Ti papeles nga intedmo ket dakkel unay.',
@@ -1595,7 +1601,7 @@ No ti parikut ket agsubli latta, kontaken ti [[Special:ListUsers/sysop|administr
 'backend-fail-backup' => 'Saan a maidulin ti papeles $1.',
 'backend-fail-notexists' => 'Ti papeles a $1 ket awanen.',
 'backend-fail-hashes' => 'Saan a maala dagiti papeles a hash tapno maipada.',
-'backend-fail-notsame' => 'Addaan ti saan a kapada tipapeles idiay $1.',
+'backend-fail-notsame' => 'Addaan ti saan a kapada ti papeles idiay $1.',
 'backend-fail-invalidpath' => '$1 ket imbalido a pagnaan ti pagidulinan.',
 'backend-fail-delete' => 'Saan a maikkat ti papeles $1.',
 'backend-fail-alreadyexists' => 'Ti papeles $1 ket addan.',
@@ -1607,14 +1613,18 @@ No ti parikut ket agsubli latta, kontaken ti [[Special:ListUsers/sysop|administr
 'backend-fail-closetemp' => 'Saan a marikpan ti temporario a papeles.',
 'backend-fail-read' => 'Saan a mabasa ti papeles $1.',
 'backend-fail-create' => 'Saan a masuratan ti papeles $1.',
-'backend-fail-maxsize' => 'Saan a masuratan ti papeles $1 gapu ta dakdakkel ngem {{PLURAL:$2|maysa a byte|dagiti $2 a bytes}}.',
+'backend-fail-maxsize' => 'Saan a masuratan ti papeles $1 gapu ta dakdakkel ngem {{PLURAL:$2|maysa a byte|dagiti $2 a byte}}.',
 'backend-fail-readonly' => 'Ti pagidulinan a kalikudan ti "$1" ket agdama a mabasa laeng. Ti rason a naited idi ket: "$2"',
 'backend-fail-synced' => 'Ti papeles "$1" ket bangking ti kasasaad na  iti kinauneg a pagidulinan ti kalikudan',
 'backend-fail-connect' => 'Saan a makaikapet idiay pagidulinan a kalikudan  "$1".',
 'backend-fail-internal' => 'Adda di amammo a biddut ti napasamak idiay pagidulinan a kalikudan "$1".',
 'backend-fail-contenttype' => 'Saan a maammoan ti kita ti linaon ti papeles nga idulin idiay "$1".',
 'backend-fail-batchsize' => 'Nagited ti nagipenpenan ti bunggoy iti $1 a papeles {{PLURAL:$1|nga aramid|nga ar-aramid}}; ti patingga ket $2 {{PLURAL:$2|nga aramid|nga ar-aramid}}.',
-'backend-fail-usable' => 'Saan a masuratan ti papeles $1 gapu ta awan ti makaanay a pammalubos wenno awan dagiti direktorio/pangikabilan.',
+'backend-fail-usable' => 'Saan a mabasa wenno masuratan ti papeles $1 gaputa awan ti makaanay a pammalubos wenno awan dagiti direktorio/pangikabilan.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'Saan a maikapet idiay warnakan a database para iti likudan a pagipenpenan "$1".',
+'filejournal-fail-dbquery' => 'Saan a makapabaro idiay warnakan a database para iti likudan a pagipenpenan "$1".',
 
 # Lock manager
 'lockmanager-notlocked' => 'Saan a malukatan ti "$1"; saan a nakandaduan.',
@@ -1644,7 +1654,7 @@ Saan a matutup ti pinagkita ti seguridad na.',
 'uploadstash-badtoken' => 'Ti panag-tungpal dayta nga aramid ket napaay, ngamin ta dagiti talek mo ti panag-urnos ket nagpaso. Padasem manen.',
 'uploadstash-errclear' => 'Ti panagdalus kadagiti papeles ket napaay.',
 'uploadstash-refresh' => 'Pasadiwaam dagiti listaan ti papeles',
-'invalid-chunk-offset' => 'Imbalido ti maysa a supli',
+'invalid-chunk-offset' => 'Imbalido ti maysa a tangdan',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'naiparit ti iseserrek',
@@ -1672,7 +1682,7 @@ Para iti kangatuan a talinaay, nabaldado ti img_auth.php.',
 'http-timed-out' => 'Nagsardeng ti panagtulod ti HTTP.',
 'http-curl-error' => 'Biddut ti panagala ti URL: $1',
 'http-host-unreachable' => 'Di madanon ti URL',
-'http-bad-status' => 'Adda pakirut iti agdama a pinagtulod ti HTTP: $1 $2',
+'http-bad-status' => 'Adda pakirut idi las-ud ti panagkiddaw ti HTTP: $1 $2',
 
 # Some likely curl errors. More could be added from <http://curl.haxx.se/libcurl/c/libcurl-errors.html>
 'upload-curl-error6' => 'Di madanon ti URL',
@@ -1702,7 +1712,7 @@ No sagaten ti agar-aramat, dagiti laeng papeles a pinag-ipan ti agar-aramat ti k
 'listfiles_user' => 'Agar-aramat',
 'listfiles_size' => 'Kadakkel',
 'listfiles_description' => 'Panagipalpalawag',
-'listfiles_count' => 'Dagiti Bersion',
+'listfiles_count' => 'Dagiti bersion',
 
 # File description page
 'file-anchor-link' => 'Papeles',
@@ -1754,32 +1764,32 @@ Baka kayatmo nga urnosen ti bukodna a deskripsionna idiay [$2 deskripsion ti pap
 'filerevert-defaultcomment' => 'Naisubli ti bersion manipud idi $2, $1',
 'filerevert-submit' => 'Isubli',
 'filerevert-success' => "Ti '''[[Media:$1|$1]]''' ket naipasubli idiay [$4 bersion ti oras ken petsa $3, $2].",
-'filerevert-badversion' => 'Awan ti napalubos a lokal a bersion daytoy a papeles nga adda naikkan dayta nga oras ken petsa.',
+'filerevert-badversion' => 'Awan ti dati a lokal a bersion daytoy a papelesa naited ti dayta nga oras ken petsa.',
 
 # File deletion
 'filedelete' => 'Ikkaten ti $1',
-'filedelete-legend' => 'ikkaten ti papeles',
+'filedelete-legend' => 'Ikkaten ti papeles',
 'filedelete-intro' => "Mangrugrugika nga agikkat ti '''[[Media:$1|$1]]''' ken mairaman amin a pakasaritaanna.",
-'filedelete-intro-old' => "Ikikatem ti bersion iti '''[[Media:$1|$1]]''' manipud idi [$4 $3, $2].",
+'filedelete-intro-old' => "Ikikkatem ti bersion iti '''[[Media:$1|$1]]''' manipud idi [$4 $3, $2].",
 'filedelete-comment' => 'Rason:',
 'filedelete-submit' => 'Ikkaten',
 'filedelete-success' => "Naikkaten ti '''$1'''.",
 'filedelete-success-old' => "Ti bersion iti '''[[Media:$1|$1]]''' manipud idi $3, $2 ket naikkaten.",
 'filedelete-nofile' => "awan ti '''$1''' .",
 'filedelete-nofile-old' => "Awan ti nailebbeng a bersion ti '''$1''' nga addaan ti naited a kakitkita na.",
-'filedelete-otherreason' => 'Sabali/nayon a rason:',
+'filedelete-otherreason' => 'Sabali/maipatinayon a rason:',
 'filedelete-reason-otherlist' => 'Sabali a rason',
 'filedelete-reason-dropdown' => '*Kadawyan a rasrason ti pannakaikkat
 ** Panagsalungasing iti karbengan ti panagkopia
 ** Nadoble a papeles',
-'filedelete-edit-reasonlist' => 'Unosen ti rason ti panagikkat',
-'filedelete-maintenance' => 'Saan nga agnayon a naibaldado ti pinagikkat ken pinagisubli dagiti papeles iti dagdama a pinagsimpa.',
+'filedelete-edit-reasonlist' => 'Unosen dagiti rason ti panagikkat',
+'filedelete-maintenance' => 'Ti panagikkat ken panagisubli kadagiti papaeles ket nabaldado iti las-ud ti panagtartaripatu.',
 'filedelete-maintenance-title' => 'Saan a maikkat daytoy a papeles',
 
 # MIME search
 'mimesearch' => 'Pagbiruk ti MIME',
 'mimesearch-summary' => 'Daytoy a panid ket pakabaelan na ti panagsagat ti papeles iti kita da a MIME.
-Ikabil: kita ti nagyan/apo a kita, e.g. <code>image/jpeg</code>.',
+Ikabil: kita ti nagyan/apo a kita, a kas ti <code>image/jpeg</code>.',
 'mimetype' => 'Kita ti MIME:',
 'download' => 'Ikarga nga agpababa',
 
@@ -1827,9 +1837,8 @@ Laglagipem ti agkita kadagiti sabsabali a panilpo ti plantilia sakbay nga ikkate
 'disambiguations' => 'Dagiti panid a nakasilpo kadagiti panangilawlawag',
 'disambiguationspage' => 'Template:Panangilawlawag',
 'disambiguations-text' => "Dagiti sumaganad a panid ket aglaon ti saan a basbasit ngem maysa a panilpo iti '''panangilawlawag a panid'''.
-Dagitoy ket mabalinno a nasken nga isilpo kadagiti embes a nasaysayaat a panid.<br />
-Ti panid ket matrato a kas panangilawlawag a panid no agusar ti plantilia a nakasilpo idiay
- [[MediaWiki:Disambiguationspage]]",
+Dagitoy ket embes a nasken a maisilpoda kadagiti maitutop a panid.<br />
+Ti panid ket matrato a kas panangilawlawag a panid no agusar ti plantilia a nakasilpo manipud idiay [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects' => 'Dagiti namindua a naibaw-ing',
 'doubleredirectstext' => 'Daytoy a panid ket ilistana dagiti panid nga agbaw-ing kadagiti sabsabali a baw-ing a pampanid.
@@ -1853,7 +1862,7 @@ Tattan ket naibaw-ing idiay [[$2]].',
 'fewestrevisions' => 'Dagiti panid nga adda kadagiti kabassitan a panangbalbaliw',
 
 # Miscellaneous special pages
-'nbytes' => '$1 {{PLURAL:$1|a byte|kadagiti byte}}',
+'nbytes' => '$1 {{PLURAL:$1| byte|bytes}}',
 'ncategories' => '$1 {{PLURAL:$1|a kategoria|kadagiti kategoria}}',
 'ninterwikis' => '$1 {{PLURAL:$1|interwiki|dagiti interwiki}}',
 'nlinks' => '$1 {{PLURAL:$1|a panilpo|kadagiti panilpo}}',
@@ -1877,7 +1886,7 @@ Tattan ket naibaw-ing idiay [[$2]].',
 'wantedpages-badtitle' => 'Saan nga umisu a titulo idiay naikabil a pagbanagan: $1',
 'wantedfiles' => 'Dagiti makidkiddaw a papeles',
 'wantedfiletext-cat' => 'Dagiti sumaganad a papeles ket maus-usar ngem awanda met. Dagiti papeles a naggapu kadagiti ganganaet a repositorio ket mailista uray pay no addaan da. No adda dagiti kasla adda dagitoy ket <del>maikkat</del> to. A maipanayon pay, dagiti pampanid nga agisengngat kadagiti papeles nga awan ket nailista idiay [[:$1]].',
-'wantedfiletext-nocat' => '    Dagiti sumaganad a papeles ket maus-usar ngem awanda met. Dagiti papeles a naggapu kadagiti ganganaet a repositorio ket mailista uray pay no addaan da. No adda dagiti kasla adda dagitoy ket <del>maikkat</del> to.',
+'wantedfiletext-nocat' => 'Dagiti sumaganad a papeles ket maus-usar ngem awanda met. Dagiti papeles a naggapu kadagiti ganganaet a repositorio ket mailista uray pay no addaan da. No adda dagiti kasla adda dagitoy ket <del>maikkat</del> to.',
 'wantedtemplates' => 'Dagiti makidkiddaw a plantilia',
 'mostlinked' => 'Dagiti panid a kaaduan iti nakasilpo',
 'mostlinkedcategories' => 'Dagiti kategoria a kaaduan iti nakasilpo',
@@ -1947,7 +1956,7 @@ Mapabassit mo ti pinagpakita no piliam ti kita ti listaan, ti nagan ti gar-arama
 'prevpage' => 'Napalabas a panid ($1)',
 'allpagesfrom' => 'Ipakita dagiti panid a mangrugi iti:',
 'allpagesto' => 'Ipakita dagiti panid a nalpasan iti:',
-'allarticles' => 'Amin nga artikulo',
+'allarticles' => 'Amin a pampanid',
 'allinnamespace' => 'Amin a pampanid ($1 nagan ti lugar)',
 'allnotinnamespace' => 'Amin a pampanid (awan iti $1 nagan ti lugar)',
 'allpagesprev' => 'Napalabas',
@@ -1999,7 +2008,7 @@ Natapayaen a protokol: <code>$1</code> (saanmo nga inayon dagitoy iti panagbiruk
 'activeusers-intro' => 'Daytoy ti listaan dagiti agar-aramat nga adda inararamidda kadagiti napalabas a $1 {{PLURAL:$1|nga aldaw|nga alaldaw}}.',
 'activeusers-count' => '$1 {{PLURAL:$1|nga inurnos|kadagiti inurnos}} idi kalpasan ti  {{PLURAL:$3|nga aldaw|$3 nga alaldaw}}',
 'activeusers-from' => 'Iparang dagiti agar-aramat a mangrugi iti:',
-'activeusers-hidebots' => 'Ilemmeng dagiti bots',
+'activeusers-hidebots' => 'Ilemmeng dagiti bot',
 'activeusers-hidesysops' => 'Ilemmeng dagiti administrador',
 'activeusers-noresult' => 'Awan ti nasarakan nga agar-aramat.',
 
@@ -2107,7 +2116,7 @@ Mailistanto ditoy dagiti pinagsukat daytoy a panid iti masakbayan agraman ti kan
 'created' => 'naaramid',
 'enotif_subject' => 'Ti {{SITENAME}} a panid a $PAGETITLE ket $CHANGEDORCREATED ni $PAGEEDITOR',
 'enotif_lastvisited' => 'Kitaen ti $1 para iti am-amin a panagsukat sipud ti naudi nga isasarungkarmo.',
-'enotif_lastdiff' => 'kitaen ti $1 tapno mabuya daytoy a pinagsukat.',
+'enotif_lastdiff' => 'Kitaen ti $1 tapno mabuya daytoy a panagsukat.',
 'enotif_anon_editor' => 'di am-ammo nga agar-aramat $1',
 'enotif_body' => 'Nadungngo a $WATCHINGUSERNAME,
 
@@ -2143,10 +2152,10 @@ Ti makunkunam ken no masapulmo pay ti tulong:
 # Delete
 'deletepage' => 'Ikkaten ti panid',
 'confirm' => 'Pasingkedan',
-'excontent' => "ti linaon ket: '$1'",
-'excontentauthor' => 'ti linaonna ket: "$1" (ken ti laeng nakaaramid ket ni "[[Special:Contributions/$2|$2]]")',
-'exbeforeblank' => 'ti linaon sakbay a nablanko ket: "$1"',
-'exblank' => 'blanko ti panid',
+'excontent' => "ti linaon idi ket: '$1'",
+'excontentauthor' => 'ti linaonna idi ket: "$1" (ken ti laeng nakaaramid idi ket ni "[[Special:Contributions/$2|$2]]")',
+'exbeforeblank' => 'ti linaon sakbay idi nablanko ket: "$1"',
+'exblank' => 'blanko idi ti panid',
 'delete-confirm' => 'Ikkaten ti "$1"',
 'delete-legend' => 'Ikkaten',
 'historywarning' => "'''Ballaag: ''' Ti panid a kayatmo nga ikkaten ket adda pakasaritaanna ti agarup a $1 {{PLURAL:$1|a binaliwan|kadagiti binaliwan}}:",
@@ -2161,9 +2170,9 @@ Kitaen ti $2 para iti panakrehistro dagiti naudi a naikkat.',
 'deletionlog' => 'listaan ti panagikkat',
 'reverted' => 'Naisubli iti immuna a panagbalbaliw',
 'deletecomment' => 'Rason:',
-'deleteotherreason' => 'Sabali/dadduma pay a rason:',
+'deleteotherreason' => 'Sabali/maipatinayon a rason:',
 'deletereasonotherlist' => 'Sabali a rason',
-'deletereason-dropdown' => '*Kadawyan a gapgapu dagiti pannakaikkat
+'deletereason-dropdown' => '*Kadawyan a rasrason ti panagikkat
 ** Kiddaw ti mannurat
 ** Panaglabsing iti karbengan ti panagipablaak
 ** Bandalismo',
@@ -2183,15 +2192,15 @@ agal-aluad ka a mangrugi.',
 'rollbackfailed' => 'Napaay ti panangisubli',
 'cantrollback' => 'Saan a maisubli ti panagurnos;
 ti naudi a nakaaramid ket iti laeng nagsurat daytoy a panid..',
-'alreadyrolled' => 'Saan a maipasubli ti kinaudi a panagurnos iti [[:$1]] ni [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);
+'alreadyrolled' => 'Saan a maipasubli ti kinaudi a panagurnos iti [[:$1]] babaen ni [[User:$2|$2]] ([[User talk:$2|tungtungan]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);
 adda sabali a naurnos wenno nagipasubli ti panid.
 
-Ti kinaudi a panagurnos daytoy a panid ket babaen ni [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
-'editcomment' => "Ti panagurnos a pakabuklan ket: \"''\$1''\".",
-'revertpage' => 'Insubli ti panagurnos ni [[Special:Contributions/$2|$2]] ([[User talk:$2|pagtutungtongan]]), naisubli ti kinaudi a panagbaliw ni [[User:$1|$1]]',
-'revertpage-nouser' => 'Naisubli ti panagurnos ni (naikkat ti nagan ti agar-aramat) ti kinaudi a panagbaliw ni [[User:$1|$1]]',
-'rollback-success' => 'Naibabawi dagiti panag-urnos ni $1;
-naisubli manen ti naudi a panagbaliw ni $2.',
+Ti kinaudi a panagurnos daytoy a panid ket babaen ni [[User:$3|$3]] ([[User talk:$3|tungtungan]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
+'editcomment' => "Ti panagurnos a pakabuklan idi ket: \"''\$1''\".",
+'revertpage' => 'Insubli ti panagurnos babaen ni [[Special:Contributions/$2|$2]] ([[User talk:$2|tungtungan]]), naisubli ti kinaudi a panagbaliw babaen ni [[User:$1|$1]]',
+'revertpage-nouser' => 'Naisubli ti panagurnos babaen ni (naikkat ti nagan ti agar-aramat) ti kinaudi a panagbaliw babaen ni [[User:$1|$1]]',
+'rollback-success' => 'Naibabawi dagiti panag-urnos babaen ni $1;
+naisubli manen ti naudi a panagbaliw babaen ni $2.',
 
 # Edit tokens
 'sessionfailure-title' => 'Napaay ti gimong',
@@ -2204,11 +2213,11 @@ Agsubli ka ti naggapuam a panid, ikargam ti panid ken padasem manen.',
 'protectlogtext' => 'Dita baba ket adda listaan dagiti sinukatan a salaknib ti panid.
 Kitaen ti [[Special:ProtectedPages|listaan kadagiti nasalakniban a panid]] ti listaan kadagiti agdama a panagpataray a panagsalaknib ti panid.',
 'protectedarticle' => 'nasalakniban ti "[[$1]]"',
-'modifiedarticleprotection' => 'nasukatan ti lessaad ti salaknib para iti "[[$1]]"',
+'modifiedarticleprotection' => 'nasukatan ti agpang ti salaknib para iti "[[$1]]"',
 'unprotectedarticle' => 'naikkat ti salaknib ti "[[$1]]"',
 'movedarticleprotection' => 'iyalis ti kasasaad ti salaknib manipud iti "[[$2]]" idiay "[[$1]]"',
-'protect-title' => 'Sukatan ti lessaad ti salaknib para iti "$1"',
-'protect-title-notallowed' => 'Kitaen ti lessaad ti salaknib ti "$1"',
+'protect-title' => 'Sukatan ti agpang ti salaknib para iti "$1"',
+'protect-title-notallowed' => 'Kitaen ti agpang ti salaknib ti "$1"',
 'prot_1movedto2' => '[[$1]] naiyalis iti [[$2]]',
 'protect-badnamespace-title' => 'Saan a mabalin a salakniban a nagan ti lugar',
 'protect-badnamespace-text' => 'Dagiti panid ditoy  a nagan ti lugar ket saan a mabalin a masalakniban.',
@@ -2227,7 +2236,7 @@ Adda ditoy kadagiti agdama a kasasaad ti panid '''$1''':",
 Dagitoy dagiti agdama a kasasaad ti panid a '''$1''':",
 'protect-cascadeon' => 'Daytoy a panid ket agdama a  nasalakniban gapu ta nairaman kadagiti sumaganad a {{PLURAL:$1|panid, nga addaan|pampanid, nga addaan}} ti sipapakat a salaknib ti amin-amin.
 Mabalinmo a sukatan ti lessaad ti salaknib daytoy a panid, ngem saanna a tignayen ti salaknib nga amin-amin.',
-'protect-default' => 'Mabalin amin nga agar-aramat',
+'protect-default' => 'Palubosan amin nga agar-aramat',
 'protect-fallback' => 'Masapul ti "$1" a pammalubos',
 'protect-level-autoconfirmed' => 'Serraan dagiti baro ken saan a nakarehistro nga agar-aramat',
 'protect-level-sysop' => 'Dagiti administrador laeng',
@@ -2236,13 +2245,13 @@ Mabalinmo a sukatan ti lessaad ti salaknib daytoy a panid, ngem saanna a tignaye
 'protect-expiring-local' => 'agpaso $1',
 'protect-expiry-indefinite' => "inggana't inggana",
 'protect-cascade' => 'Salakniban dagiti pampanid a nairaman iti daytoy a panid (babaen ti sariap a salaknib)',
-'protect-cantedit' => 'Saanmo a masuktan ti lessaad ti salaknib iti daytoy a panid, gapu ta awan ti pammalubosmo nga agurnos iti daytoy.',
+'protect-cantedit' => 'Saanmo a masuktan ti agpang ti salaknib iti daytoy a panid, gapu ta awan ti pammalubosmo nga agurnos iti daytoy.',
 'protect-othertime' => 'Sabali nga oras:',
 'protect-othertime-op' => 'sabali nga oras',
 'protect-existing-expiry' => 'Ti adda a panagpaso ti oras: $3, $2',
-'protect-otherreason' => 'Sabali/dadduma a rason:',
+'protect-otherreason' => 'Sabali/maipatinayon a rason:',
 'protect-otherreason-op' => 'Sabali a rason',
-'protect-dropdown' => '*Kadawyan a rason ti panagsalaknib
+'protect-dropdown' => '*Kadawyan a rasrason ti panagsalaknib
 ** Adu unay a bandalismo
 ** Adu unay a panagspam
 ** Saan a produktibo ti kasinnungat a panag-urnos
@@ -2250,7 +2259,7 @@ Mabalinmo a sukatan ti lessaad ti salaknib daytoy a panid, ngem saanna a tignaye
 'protect-edit-reasonlist' => 'Urnosen dagiti rason ti salaknib',
 'protect-expiry-options' => '1 nga oras:1 hour,1 nga aldaw:1 day,1 a lawas:1 week,2 a lawas:2 weeks,1 a bulan:1 month,3 a bulan:3 months,6 a bulan:6 months,1 a tawen:1 year,awan inggana:infinite',
 'restriction-type' => 'Pammalubos:',
-'restriction-level' => 'Lessaad ti pannakaiparit:',
+'restriction-level' => 'Agpang ti pannakaiparit:',
 'minimum-size' => 'Kinababa a kadakkel:',
 'maximum-size' => 'Kinangato a kadakkel:',
 'pagesize' => '(bytes)',
@@ -2264,30 +2273,30 @@ Mabalinmo a sukatan ti lessaad ti salaknib daytoy a panid, ngem saanna a tignaye
 # Restriction levels
 'restriction-level-sysop' => 'napno a nasalakniban',
 'restriction-level-autoconfirmed' => 'nasalakniban bassit',
-'restriction-level-all' => 'ania man a lessaad',
+'restriction-level-all' => 'aniaman nga agpang',
 
 # Undelete
 'undelete' => 'Kitaen dagiti naikkat a pampanid',
 'undeletepage' => 'Kitaen ken isubli dagiti naikkat a panid',
-'undeletepagetitle' => "'''TI sumaganad ket buklen dagiti naikkat a panagbaliw ti [[:$1|$1]]'''.",
+'undeletepagetitle' => "'''TI sumaganad ket buklen dagiti naikkat a panagbaliw ni [[:$1|$1]]'''.",
 'viewdeletedpage' => 'Kitaen dagiti naikkat a pampanid',
 'undeletepagetext' => 'Ti sumaganad a {{PLURAL:$1|panid ket naikkaten ngem|$1 pampanid ket naikkaten ngem}} adda pay naarkibo ken mabalin pay a maipasubli .
 Ti arkibo ket mabalin a sagpaminsan a madalusan.',
 'undelete-fieldset-title' => 'Ipasubli dagiti pinagbaliwan',
 'undeleteextrahelp' => "Ti panagisubli dagiti amin a pakasaritaan ti panid, ibatim a saan nga nakur-itan dagita kahon ken agtakla ti '''''{{int:undeletebtn}}'''''.
 Ti agaramid ti napilian a pagisubli, ikur-it dagita napilim kadagiti kahon ti kayatmo nga ipasubli, ken agtakla ti '''''{{int:undeletebtn}}'''''.",
-'undeleterevisions' => '$1 {{PLURAL:$1|a pinagbaliwan|kadagiti pinagbaliwan}} ti nailebben',
+'undeleterevisions' => '$1 {{PLURAL:$1|a binalbaliwan|kadagiti binalbaliwan}} ti nailebben',
 'undeletehistory' => 'No ipasublim daytoy a panid, amin dagiti pinagbaliwan ket maipasubli idiay pakasaritaan.
 Ket no adda baro a panid a kanagnagan na a naaramid ti napalabas a pinagikkat, dagiti naipasubli a pinagbaliwan ket agparang idiay napalabas a pakasaritaan.',
 'undeleterevdel' => 'Ti panagikkat ket saan a maaramid no agbanag iti rabaw ti panid, wenno ti pinagbaliwan ti papeles ket maikkatan ti bassit.
-Iti kastoy a kaso, masapul nga ikkatem ti kur-it wenno ikkatem ti lemmeng dagiti kabarbaro a naikkat a pinagbaliwan.',
+Iti kastoy a kaso, masapul nga ikkatem ti kur-it wenno ikkatem ti lemmeng dagiti kabarbaro a naikkat a binalbaliwan.',
 'undeletehistorynoadmin' => 'Daytoy a panid ket naikkaten.
-Ti rason ti panagikkat ket naipakita ti pinakabuklan dita baba, ken dagita dsalaysay ti agar-aramat a nagpabaliw ditoy a panid sakbay a naikkat.
+Ti rason ti panagikkat ket naipakita ti pakabuklan dita baba, ken dagita dsalaysay ti agar-aramat a nagpabaliw ditoy a panid sakbay a naikkat.
 Ti husto a testo ti nabaliwan a panagbaliw ket adda kadagiti administrador laeng.',
 'undelete-revision' => 'Naikkat ti binaliwan a $1 (manipud idi $4, idi $5) babaen ni $3:',
 'undeleterevision-missing' => 'Imbalido wenno napukaw a panagbaliw.
 Addaan ka ngata ti madi a panilpo, wenno ti panagbaliw ket naipasubli wenno naikkat manipud idiay nailebbeng.',
-'undelete-nodiff' => 'Awan ti nasarakan a kallabes a binaliwan.',
+'undelete-nodiff' => 'Awan ti nasarakan kadagiti dati a nabalbaliwan.',
 'undeletebtn' => 'Isubli',
 'undeletelink' => 'kitaen/isubli',
 'undeleteviewlink' => 'kitaen',
@@ -2396,7 +2405,7 @@ Ikkan ti nainaganan a rason dita baba (kas pagarigan, dakamaten ti maysa a panid
 ** Agikabil ti spam a silpo iti ruar
 ** Agikabil ti minamaag/saan a maawatan a pampanid
 ** Nabutbuteng a panagkukua /agriribok
-** Ab-abuso kadagiti sabsabali a pakabilangan
+** Agab-abuso kadagiti sabsabali a pakabilangan
 ** Saan a maawat a nagan ti agar-aramat',
 'ipb-hardblock' => 'Iparit kadagiti nakastrek nga agar-aramat ti agpabaliw iti naggapo ditoy nga IP a pagtaengan',
 'ipbcreateaccount' => 'Pawilan ti panagpartuat iti pakabilangan',
@@ -2591,7 +2600,7 @@ Pangngaasim ta i-manualmo lattan a pagtiponem ida.'''",
 'movelogpage' => 'Listaan ti naiyalis',
 'movelogpagetext' => 'Adda dita baba ti listaan dagiti naiyalis a pampanid.',
 'movesubpage' => '{{PLURAL:$1|Apo ti panid|Dagiti apo ti panid}}',
-'movesubpagetext' => 'Daytoy a panid ket adda $1 {{PLURAL:$1|apo ti panid|dagiti apo ti panid}} a naipakita dita baba..',
+'movesubpagetext' => 'Daytoy a panid ket adda $1 {{PLURAL:$1|apo ti panid|dagiti apo ti panid}} a naipakita dita baba.',
 'movenosubpage' => 'Daytoy a panid ket awan ti apo na a panid.',
 'movereason' => 'Rason:',
 'revertmove' => 'isubli',
@@ -2624,11 +2633,11 @@ Ti kinaudi a naikabil ti listaan ket adda iti baba tapno mausar a reperensia:",
 Pangngaasi nga agpilika ti sabali a nagan.',
 
 # Export
-'export' => 'Agipan dagiti panid',
+'export' => 'Agipan kadagiti panid',
 'exporttext' => 'Maipanmo ti testo ken pakasaritaan ti inurnos iti maysa a panid wenno pampanid a nabalkut ti XML.
 Daytoy ket mabalin a maikabil iti sabali a wiki nga agususar ti MediaWiki nga usaren ti [[Special:Import|pinagala ti panid]].
 
-Ti pinagipan ti panid, ikabil ti titulo dita kahon ti teksto dita baba, maysa a titulo iti maysa a linia, ken agpili ka no ti kayatmo ket ti agdama a pinagbaliw ken amin nga daan a pinagbalbaliw, nga addaan ti linia ti pakasaritaan ti pampanid, wenno ti agdama a pinagbaliw nga addaan ti pakaammo a maipapan ti kinaudi a pinagurnos.
+Ti pinagipan ti panid, ikabil ti titulo dita kahon ti testo dita baba, maysa a titulo iti maysa a linia, ken agpili ka no ti kayatmo ket ti agdama a pinagbaliw ken amin nga daan a pinagbalbaliw, nga addaan ti linia ti pakasaritaan ti pampanid, wenno ti agdama a pinagbaliw nga addaan ti pakaammo a maipapan ti kinaudi a pinagurnos.
 
 No iti kinaudi a kaso mabalinmo nga usaren ti panilpo, a kas pagarigan [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] para iti panid "[[{{MediaWiki:Mainpage}}]]".',
 'exportall' => 'Ipan amin a pampanid',
@@ -2642,8 +2651,8 @@ No iti kinaudi a kaso mabalinmo nga usaren ti panilpo, a kas pagarigan [[{{#Spec
 'export-addnstext' => 'Nayunan dagiti panid a naggapu idiay nagan ti lugar:',
 'export-addns' => 'Inayon',
 'export-download' => 'Idulin a kas papeles',
-'export-templates' => 'Ikabil dagiti plantilia',
-'export-pagelinks' => 'Ikkam dagiti nakasilpo a panid iti  kauneg a:',
+'export-templates' => 'Mangiraman kadagiti plantilia',
+'export-pagelinks' => 'Mangiraman kadagiti nakasilpo a panid iti  kauneg ti:',
 
 # Namespace 8 related
 'allmessages' => 'Dagiti mensahe ti sistema',
@@ -2677,14 +2686,14 @@ Pangngaasi a bisitaeen ti [//www.mediawiki.org/wiki/Localisation MediaWiki Local
 'thumbnail_image-missing' => 'Daytoy a papeles ket  kasla napukaw: $1',
 
 # Special:Import
-'import' => 'Agala dagiti panid',
+'import' => 'Agala kadagiti panid',
 'importinterwiki' => 'Agala ti transwiki',
 'import-interwiki-text' => 'Agpili ka ti wiki ken titulo ti panid nga alaem.
 Dagit panagbaliw a petsa ken dagiti nagan ti mannurat ket maipreserba.
 Amin a transwiki nga alaem ket mailista idiay [[Special:Log/import|listaan ti pinagala]].',
 'import-interwiki-source' => 'Taudan ti wiki/panid:',
 'import-interwiki-history' => 'Kopiaen amin dagiti bersion ti pakasaritaan daytoy a panid',
-'import-interwiki-templates' => 'Ikabil amin dagiti plantilia',
+'import-interwiki-templates' => 'Iraman amin dagiti plantilia',
 'import-interwiki-submit' => 'Agala',
 'import-interwiki-namespace' => 'Pangipanan ti nagan ti lugar:',
 'import-interwiki-rootpage' => 'Papanan a ramut ti panid (mapili):',
@@ -2749,15 +2758,15 @@ Pangngaasi ta padasem manen.',
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Daytoy ti panid mo',
 'tooltip-pt-anonuserpage' => 'Ti panid ti agar-aramat daytoy nga IP a pagtaengan nga urnosem a  kasla',
-'tooltip-pt-mytalk' => 'Pakitungtongam a panid',
-'tooltip-pt-anontalk' => 'Pakitungtungan ti pinagurnos a naggapu ditoy nga IP a pagtaengan',
+'tooltip-pt-mytalk' => 'Pakitungtungam a panid',
+'tooltip-pt-anontalk' => 'Pakitungtungan a maipapan ti panagurnos a naggapu ditoy nga IP a pagtaengan',
 'tooltip-pt-preferences' => 'Dagiti kaykayatmo',
 'tooltip-pt-watchlist' => 'Listaan dagiti panid a sipsiputem ti panagsuksutda',
 'tooltip-pt-mycontris' => 'Listaan dagiti naaramidmo',
 'tooltip-pt-login' => 'Maisingasing ti inka panag-serrek; nupay kasta, daytoy ket saan a maipapilit',
 'tooltip-pt-anonlogin' => 'Maisingasing ti inka panag-serrek; nupay kasta, daytoy ket saan a maipapilit',
 'tooltip-pt-logout' => 'Rummuar',
-'tooltip-ca-talk' => 'Pagtutungtongan a maipapan ti linaon ti panid',
+'tooltip-ca-talk' => 'Pagtungtungan a maipapan ti linaon ti panid',
 'tooltip-ca-edit' => 'Mabalinmo nga urnosen daytoy a panid. Pangngaasi nga aramatem ti buton ti panagipadas sakbay nga agidulin',
 'tooltip-ca-addsection' => 'Mangirugi ti baro a paset',
 'tooltip-ca-viewsource' => 'Nasalakniban daytoy a panid.
@@ -2766,13 +2775,13 @@ Mabalinmo a kitaen ti taudanna.',
 'tooltip-ca-protect' => 'Salakniban daytoy a panid',
 'tooltip-ca-unprotect' => 'Sukatan ti salaknib daytoy a panid',
 'tooltip-ca-delete' => 'Ikkaten daytoy a panid',
-'tooltip-ca-undelete' => 'Isubli dagiti inurnos a panid sakbay a naikkat.',
+'tooltip-ca-undelete' => 'Isubli dagiti inurnos ti daytoy a panid sakbay idi naikkat',
 'tooltip-ca-move' => 'Iyalis daytoy a panid',
 'tooltip-ca-watch' => 'Inayon daytoy a panid kadagiti bambantayam',
 'tooltip-ca-unwatch' => 'Ikkatem daytoy a panid kadagiti bambantayam',
 'tooltip-search' => 'Biruken idiay {{SITENAME}}',
 'tooltip-search-go' => 'Inka idiay panid nga adda kastoy a naganna no adda',
-'tooltip-search-fulltext' => 'Birukem dagiti panid daytoy a testo',
+'tooltip-search-fulltext' => 'Biruken dagiti panid para iti daytoy a testo',
 'tooltip-p-logo' => 'Sarungkaran ti umuna a panid',
 'tooltip-n-mainpage' => 'Sarungkaran ti umuna a panid',
 'tooltip-n-mainpage-description' => 'Sarungkaran ti umuna a panid',
@@ -2784,13 +2793,13 @@ Mabalinmo a kitaen ti taudanna.',
 'tooltip-t-whatlinkshere' => 'Listaan ti am-amin a pampanid ti wiki a nakasilpo ditoy',
 'tooltip-t-recentchangeslinked' => 'Kinaudian a sinukatan  dagiti panid a nakasilpo ditoy a panid',
 'tooltip-feed-rss' => 'RSS a pakan para iti daytoy a panid',
-'tooltip-feed-atom' => 'Atom a pakan para itoy a panid',
+'tooltip-feed-atom' => 'Atom a pakan para iti daytoy a panid',
 'tooltip-t-contributions' => 'Kitaen ti listaan dagiti naaramidan daytoy nga agar-aramat',
 'tooltip-t-emailuser' => 'Patulodan ti e-surat daytoy nga agar-aramat',
 'tooltip-t-upload' => 'Agipan iti papeles',
 'tooltip-t-specialpages' => 'Listaan ti amin nga espesial a pampanid',
 'tooltip-t-print' => 'Maimaldit a bersion ti panid',
-'tooltip-t-permalink' => 'Permanente a silpo idiay binaliwan daytoy a panid',
+'tooltip-t-permalink' => 'Agnanayon a silpo ti daytoy a panagbaliw ti panid',
 'tooltip-ca-nstab-main' => 'Kitaen ti naglaon a panid',
 'tooltip-ca-nstab-user' => 'Kitaen ti panid ti agar-aramat',
 'tooltip-ca-nstab-media' => 'Kitaen ti panid ti midia',
@@ -2849,7 +2858,7 @@ Daytoy ket mabalin a gapuanan babaen ti panilpo a naiparit ti akin ruar a pagsaa
 'pageinfo-header-properties' => 'Tagtagikua ti panid',
 'pageinfo-display-title' => 'Iparang ti titulo',
 'pageinfo-default-sort' => 'Kasisigud a kangrunaan a panagilasin',
-'pageinfo-length' => 'Kaatiddog ti panid (kadagiti bytes)',
+'pageinfo-length' => 'Kaatiddog ti panid (kadagiti byte)',
 'pageinfo-article-id' => 'ID ti panid',
 'pageinfo-robot-policy' => 'Kasasaad ti panagbiruk a makina',
 'pageinfo-robot-index' => 'Mabalin a maipasurotan',
@@ -2867,7 +2876,7 @@ Daytoy ket mabalin a gapuanan babaen ti panilpo a naiparit ti akin ruar a pagsaa
 'pageinfo-authors' => 'Dagup a bilang dagiti naisangsangayn a mannurat',
 'pageinfo-recent-edits' => 'Itay nabiit a bilang dagiti inurnos (ti uneg ti napalabas ti $1)',
 'pageinfo-recent-authors' => 'Itay nabiit a bilang dagiti naisangsangayan a mannurat',
-'pageinfo-restriction' => 'Panagsalaknib ti panid (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Panagsalaknib ti panid ({{lcfirst:$1}})',
 'pageinfo-magic-words' => 'Salamangka  {{PLURAL:$1|a balikas|a balbalikas}} ($1)',
 'pageinfo-hidden-categories' => 'Nailemmeng {{PLURAL:$1|a kategoria|a katkategoria}} ($1)',
 'pageinfo-templates' => 'Nailak-am  {{PLURAL:$1|a plantilia|a planplantilia}} ($1)',
@@ -2933,7 +2942,7 @@ No usarem daytoy, baka makompromiso ti sistema.",
 'newimages-summary' => 'Daytoy nga espesial a panid ket ipakitana ti kinaudi a pinag-ipan kadagiti papeles.',
 'newimages-legend' => 'Sagat',
 'newimages-label' => 'Nagan ti papeles (wenno paset na) :',
-'showhidebots' => '($1 bots)',
+'showhidebots' => '($1 dagiti bot)',
 'noimages' => 'Awan ti makita.',
 'ilsubmit' => 'Biruken',
 'bydate' => 'babaen ti petsa',
@@ -3101,7 +3110,7 @@ Dagiti dadduma ket mailemmeng a kinasigud.
 'exif-citydest' => 'Naipakita a siudad',
 'exif-sublocationdest' => 'Sabali pay a lokasion ti siudad a naipakita',
 'exif-objectname' => 'Pandek a titulo',
-'exif-specialinstructions' => 'Kangrunaan a pinagipalpalawag',
+'exif-specialinstructions' => 'Kangrunaan a panagipalpalawag',
 'exif-headline' => 'Paulo',
 'exif-credit' => 'Pammadayaw/Nangted',
 'exif-source' => 'Taudan',
@@ -3120,7 +3129,7 @@ Dagiti dadduma ket mailemmeng a kinasigud.
 'exif-datetimeexpires' => 'Saan nga usaren ti kallabes nga',
 'exif-datetimereleased' => 'Nakairuar idi',
 'exif-originaltransmissionref' => 'Kinasigud a pinagipatulod iti kodigo ti papanan',
-'exif-identifier' => 'Pinaglasin',
+'exif-identifier' => 'Panagilasin',
 'exif-lens' => 'Lente nga inusar',
 'exif-serialnumber' => 'Agsasaruno a numero ti kamera',
 'exif-cameraownername' => 'Akinkukua ti kamera',
@@ -3325,7 +3334,7 @@ Dagiti dadduma ket mailemmeng a kinasigud.
 'exif-dc-contributor' => 'Dagiti nakaaramid',
 'exif-dc-date' => 'Petsa (dagiti petsa)',
 'exif-dc-publisher' => 'Nangipablaak',
-'exif-dc-relation' => 'Minaig a midia',
+'exif-dc-relation' => 'Mainaig a midia',
 'exif-dc-rights' => 'Dagiti Kaberngan',
 'exif-dc-source' => 'Taudan ti midia',
 'exif-dc-type' => 'Kita ti midia',
@@ -3749,7 +3758,7 @@ Nupay kasta, mau-sarmo ti nakabuklan dita baba. Ti komentario nga itedmo ket mai
 'api-error-unknown-code' => 'Di amamo a biddut: "$1"',
 'api-error-unknown-error' => 'Kinauneg a biddut: Addaan ti dakes a napasamak idi inpadas mo ti agipan ti papeles mo.',
 'api-error-unknown-warning' => 'Di am-ammo a ballaag: $1',
-'api-error-unknownerror' => 'Di amamo a biddut: "$1".',
+'api-error-unknownerror' => 'Di am-ammo a biddut: "$1".',
 'api-error-uploaddisabled' => 'Nabaldado ti mangipapan iti daytoy a wiki.',
 'api-error-verification-error' => 'Dakes ngata daytoy a papeles, wenno addaan ti madi a pagpa-atiddog.',
 
index 9720672..f48debb 100644 (file)
@@ -18,51 +18,55 @@ $fallback = 'ru';
 $messages = array(
 # User preference toggles
 'tog-underline' => 'Ӏинкаш белгалде:',
-'tog-justify' => 'Яздам оагӀува шоралца хьанийсъе',
-'tog-hideminor' => 'ЗӀамига хувцамаш керда дӀахувцама дагаршкахь къайлаяккха',
-'tog-hidepatrolled' => 'Керда хувцама дагарчеча дӀанийсъя хувцамаш къайлаяккха',
-'tog-newpageshidepatrolled' => 'Ð\9aеÑ\80да Ð¾Ð°Ð³Ó\80Ñ\83вни Ð´Ð°Ð³Ð°Ñ\80Ñ\87еÑ\87а Ð´Ó\80анийÑ\81Ñ\8aÑ\8f Ñ\85Ñ\83вÑ\86амаÑ\88 ÐºÑ\8aайлаÑ\8fккха',
-'tog-extendwatchlist' => 'Шеръя теркама дагарче, массайола хувцамаш чулоацаш',
-'tog-usenewrc' => 'ТоаÑ\8f ÐºÐµÑ\80да Ñ\85Ñ\83вÑ\86ама Ð´Ð°Ð³Ð°Ñ\80Ñ\88каÑ\80а Ð¿Ð°Ð¹Ð´Ð° Ñ\8dÑ\86а (JavaScript Ñ\8dÑ\88а)',
-'tog-numberheadings' => 'Ð\9aеÑ\80Ñ\82еÑ\80а-деÑ\88а Ñ\82аÑ\8cÑ\80аÑ\85Ñ\8c Ñ\88ий Ð»Ð¾Ó\80амаÑ\86а Ð¾Ñ\82Ñ\82айе',
-'tog-showtoolbar' => 'Ð\93Ó\80алаÑ\82нийcдаÑ\80а Ñ\8eкÑ\8aе Ð»Ð°ÐºÑ\85еÑ\80а Ð³Ó\80иÑ\80Ñ\81ий Ð³Ð°Ñ\80Ñ\82акÑ\85 Ñ\85Ñ\8cаÑ\85окха (JavaScript)',
-'tog-editondblclick' => 'Шозза цлицкацa oагӀув хувца (JavaScript)',
-'tog-editsection' => 'ХӀара дакъа "хувца" яха Ӏинк хьахокха',
-'tog-editsectiononrightclick' => 'Декъам хувца кертмугӀа аьтта цлицка я (JavaScript)',
+'tog-justify' => 'Яздам оагӀува шоралца хьанийсде',
+'tog-hideminor' => 'ЗӀамига хувцамаш керда хувцаман дагарленашках къайлаяккха',
+'tog-hidepatrolled' => 'Керда хувцаман дагарленач дӀанийсаяь хувцамаш къайладаккха',
+'tog-newpageshidepatrolled' => 'Ð\9aеÑ\80да Ð¾Ð°Ð³Ó\80Ñ\83вна Ð´Ð°Ð³Ð°Ñ\80ленаÑ\87 Ð´Ó\80анийÑ\81аÑ\8fÑ\8c Ñ\85Ñ\83вÑ\86амаÑ\88 ÐºÑ\8aайладаккха',
+'tog-extendwatchlist' => 'Шераяь теркама дагарле, массадола хувцамаш чулоацаш',
+'tog-usenewrc' => 'Ð\9aеÑ\80да Ñ\85Ñ\83вÑ\86ами Ñ\82еÑ\80кама Ð´Ð°Ð³Ð°Ñ\80леи Ñ\85Ñ\83вÑ\86амаÑ\88 Ñ\82оабÑ\8aе (JavaScript)',
+'tog-numberheadings' => 'Ð\9aоÑ\80Ñ\82аленаÑ\88Ñ\82 Ð°Ð»Ð°Ð½Ð·Ð° Ñ\82аÑ\8cÑ\80аÑ\85Ñ\8cал Ð´е',
+'tog-showtoolbar' => 'Ð\93Ó\80алаÑ\82нийcдаÑ\80а Ñ\8eкÑ\8aе Ð»Ð°ÐºÑ\85еÑ\80а Ð³Ó\80оÑ\80Ñ\81ан Ð³Ð°Ñ\80Ñ\82акÑ\85 Ñ\85Ñ\8cаÑ\85Ñ\8cокха (JavaScript)',
+'tog-editondblclick' => 'Шозза Ñ\86лиÑ\86акаÑ\86a oагÓ\80Ñ\83в Ñ\85Ñ\83вÑ\86а (JavaScript)',
+'tog-editsection' => 'ХӀара дакъа "хувца" яха Ӏинк хьахьокха',
+'tog-editsectiononrightclick' => 'Ð\94екÑ\8aам Ñ\85Ñ\83вÑ\86а ÐºÐµÑ\80Ñ\82мÑ\83гÓ\80а Ð°Ñ\8cÑ\82Ñ\82а Ñ\86лиÑ\86ака Ñ\8f (JavaScript)',
 'tog-showtoc' => 'Кортанче хьокха (кхьаннена дукхагӀа кертмугӀанаш йoлa оагӀувна)',
-'tog-rememberpassword' => '(укх $1 {{PLURAL:$1|ден|деношкахь}}) мара са чувалара/чуялара дагалоаца дезаш дац',
-'tog-watchcreations' => 'Аз яь йола оагӀувнаш теркама дагарчеча чуяккха',
-'tog-watchdefault' => 'Аз хийца йола оагӀувнаш теркама дагарчеча чуяккха',
-'tog-watchmoves' => 'Аз цӀи хийца йола оагӀувнаш теркама дагарчеча чуяккха',
-'tog-watchdeletion' => 'Аз дӀаяккха йола оагӀувнаш теркама дагарчеча чуяккха',
+'tog-rememberpassword' => '(укх $1 {{PLURAL:$1|ден|деношк}}) мара са чувалара/ялара дагалоаца дезаш дац',
+'tog-watchcreations' => 'Аз яь йола оагӀувнаш теркама дагарле йолач чуяьккха',
+'tog-watchdefault' => 'Аз хийца йола оагӀувнаш теркама дагарле йолач чуяьккха',
+'tog-watchmoves' => 'Аз цӀи хийца йола оагӀувнаш теркама дагарле йолач чуяьккха',
+'tog-watchdeletion' => 'Аз дӀаяьккха йола оагӀувнаш теркама дагарле йолач чуяьккха',
 'tog-minordefault' => 'Теркамза хувцамаш лоархӀамза белгалде',
 'tog-previewontop' => 'ГӀалатнийсдара кора хьалхе бӀаргтассам оттае',
 'tog-previewonfirst' => 'ГӀалатнийсдаре дехьавоалаш/йоалаш бӀаргтассам хьахьокха',
 'tog-nocache' => 'Укхазара оагӀувнаший лочкъараш дӀадоаде',
-'tog-enotifwatchlistpages' => 'ОагӀувнаший хувцамахь теркама дагарчера лаьца, д-фоштаца хоам бе',
-'tog-enotifusertalkpages' => 'Са дувцама оагӀув тӀа хувцамаш хилача, д-фоштаца хоам бе',
-'tog-enotifminoredits' => 'Геттара зӀамига хувцамаш хилача, д-фоштаца хоам бе',
-'tog-enotifrevealaddr' => 'ЗӀы хоамаш тӀа са фоштмоттиг хьахьокха',
-'tog-shownumberswatching' => 'Ший теркама дагарченгахь оагӀув чулаьца бола дакъалаьцархой таьрах хьахьокха',
-'tog-fancysig' => 'Ший кулга яздара вики-хоамбаккхам (ший лоӀаме Ӏинка йоацаш)',
-'tog-externaleditor' => 'Арена гӀалатнийсдарца болх бе (ший болх ховш болачара мара мегаш дац, хьамлоархара ший-тайпара оттам эша; [//www.mediawiki.org/wiki/Manual:External_editors хьажа эша])',
-'tog-externaldiff' => 'Арена бӀасакхосса болхоагӀувца болх бе (ший болх ховш болачара мара мегаш дац, хьамлоархара ший-тайпара оттам эша; [//www.mediawiki.org/wiki/Manual:External_editors хьажа эша])',
+'tog-enotifwatchlistpages' => 'ОагӀувний хувцамахи теркама дагарленахи лаьца, д-хоамнец хоам бе',
+'tog-enotifusertalkpages' => 'Са дувцама оагӀув тӀа хувцамаш хилача, д-хоамнец хоам бе',
+'tog-enotifminoredits' => 'Геттара зӀамига хувцамаш хилача, д-хоамнец хоам бе',
+'tog-enotifrevealaddr' => 'ЗӀы хоамаш тӀа са хоамни моттиг хьахьокха',
+'tog-shownumberswatching' => 'Ший теркама дагарленгах оагӀув чулаьца бола дакъалаьцархой таьрах хьахьокха',
+'tog-oldsig' => 'Дола кулгайоазув:',
+'tog-fancysig' => 'Ший кулга яздара массахоамбаккхам (ший лоӀаме Ӏинка йоацаш)',
+'tog-externaleditor' => 'Арена гӀалатнийсдарца болх бе (ший болх ховш болачара мара мегаш дац, хьамлоархIара ший-тайпара оттам эша; [//www.mediawiki.org/wiki/Manual:External_editors хьажа эша])',
+'tog-externaldiff' => 'Арена бӀасакхосса болхоагӀувца болх бе (ший болх ховш болачара мара мегаш дац, хьамлоархIара ший-тайпара оттам эша; [//www.mediawiki.org/wiki/Manual:External_editors хьажа эша])',
 'tog-showjumplinks' => '"Дехьадала" яха новкъостала Ӏинк хьахьокха',
 'tog-uselivepreview' => 'Сиха бӀарахьажар (JavaScript) (Экспериментально)',
-'tog-forceeditsummary' => 'Хоам Ð±Ðµ, Ñ\85Ñ\83вÑ\86амий Ð»Ð¾Ð°Ñ\86ам Ð±ÐµÐ»Ð³Ð°Ð» Ð´Ð°Ñ\8c Ð´ÐµÑ\86и',
+'tog-forceeditsummary' => 'Хоам Ð±Ðµ, Ñ\85Ñ\83вÑ\86амий Ð»Ð¾Ð°Ñ\86ам Ð±ÐµÐ»Ð³Ð°Ð» Ð´Ð°Ñ\8c Ð´ÐµÑ\86е',
 'tog-watchlisthideown' => 'Са хувцамаш теркама дагарчера къайладаккха',
 'tog-watchlisthidebots' => 'БӀатий хувцамаш теркама дагарчера къайладаккха',
 'tog-watchlisthideminor' => 'Са зӀамига хувцамаш теркама дагарчера къайладаккха',
-'tog-watchlisthideliu' => 'Чубаьнна дакъалаьцархой хувцамаш теркама дагaрчеча къайлаяккха',
-'tog-watchlisthideanons' => 'ЦӀи йоаца дакъалаьцархой хувцамаш теркама дагрчеча къайлаяккха',
-'tog-watchlisthidepatrolled' => 'Теркама дагарчера дӀанийсъя хувцамаш къайлаяккха',
-'tog-ccmeonemails' => 'Ð\90з Ð´Ð°ÐºÑ\8aалаÑ\8cÑ\86аÑ\80Ñ\85оÑ\88оа Ð´Ð°Ñ\85Ñ\82а ÐºÐ°Ñ\8cÑ\85аÑ\82аÑ\88 Ñ\81а Ð´-Ñ\84оÑ\88Ñ\82а тӀа хьатӀадайта',
-'tog-diffonly' => 'Диста къал йоалаж йола оагӀувна дакъа ма хьокха',
-'tog-showhiddencats' => 'Къайла цатегаш хьахьокха',
+'tog-watchlisthideliu' => 'Чубаьнна дакъалаьцархой хувцамаш теркама дагaрчеча къайлаяьккха',
+'tog-watchlisthideanons' => 'ЦӀи йоаца дакъалаьцархой хувцамаш теркама дагрчеча къайлаяьккха',
+'tog-watchlisthidepatrolled' => 'Теркама дагарчера дӀанийсъя хувцамаш къайлаяьккха',
+'tog-ccmeonemails' => 'Ð\90з Ð´Ð°ÐºÑ\8aалаÑ\8cÑ\86аÑ\80Ñ\85оÑ\88оа Ð´Ð°Ñ\85Ñ\82а ÐºÐ°Ñ\8cÑ\85аÑ\82аÑ\88 Ñ\81а Ð´-Ñ\85оамни тӀа хьатӀадайта',
+'tog-diffonly' => 'Диста кIал йоалаж йола оагӀувна дакъа ма хьокха',
+'tog-showhiddencats' => 'Къайла катагаш хьахьокха',
 
 'underline-always' => 'Массаза',
 'underline-never' => 'ЦӀаккха',
-'underline-default' => 'МазбӀарглокхарий оттамаш хайрамбе',
+'underline-default' => 'МазабӀарглокхарий оттамаш хайрамбе',
+
+# Font style option in Special:Preferences
+'editfont-style' => 'ТIеракуц хувца',
 
 # Dates
 'sunday' => 'КӀиранди',
@@ -117,33 +121,34 @@ $messages = array(
 'dec' => 'Чант.',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|ЦаÑ\82ег|ЦаÑ\82егаш}}',
-'category_header' => '"$1" Ð¦Ð°Ñ\82егÑ\87Ñ\83 оагӀувнаш',
-'subcategories' => 'Чурацатегаш',
-'category-media-header' => '"$1" Ð¦Ð°Ñ\82егÑ\87Ñ\83 паьлаш',
-'category-empty' => "''Укх цатегчоа цхьаккха оагӀувнаш е паьлаш яц.''",
-'hidden-categories' => '{{PLURAL:$1|Къайла цатег|Къайла цатегаш}}',
-'hidden-category-category' => 'Къайла цатегаш',
-'category-subcat-count' => '{{PLURAL:$2|Йола цатег тӀехьара бухцатег чулоаца.|{{PLURAL:$1|$1 бухцатег хьахьекха я|$1 бухцатегаш хьахьекха я}} $2 йолачара.}}',
-'category-subcat-count-limited' => 'Укх цатегий {{PLURAL:$1|$1 кӀалцатег|$1 кӀалцатегаш}}.',
+'pagecategories' => '{{PLURAL:$1|Ð\9aаÑ\82аг|Ð\9aаÑ\82агаш}}',
+'category_header' => '"$1" Ð\9aаÑ\82агаÑ\87аÑ\80 оагӀувнаш',
+'subcategories' => 'Чуракатагаш',
+'category-media-header' => '"$1" Ð\9aаÑ\82агаÑ\87аÑ\80 паьлаш',
+'category-empty' => "''Укх катагчоа цхьаккха оагӀувнаш е паьлаш яц.''",
+'hidden-categories' => '{{PLURAL:$1|Къайла катаг|Къайла катагаш}}',
+'hidden-category-category' => 'Къайла катагаш',
+'category-subcat-count' => '{{PLURAL:$2|Йола катаг тӀехьара бухкатаг чулоаца.|{{PLURAL:$1|$1 бухкатаг хьахьекха я|$1 бухкатагаш хьахьекха я}} $2 йолачара.}}',
+'category-subcat-count-limited' => 'Укх катагий {{PLURAL:$1|$1 кӀалкатаг|$1 кӀалкатагаш}}.',
 'category-article-count' => '{{PLURAL:$2|Йола цатег цхьа оагӀув мара чулоацац.|{{PLURAL:$1|$1 оагӀув хьахекха я|$1 оагӀувнаш хьахекха я}} укх цатега $2 йолачарах.}}',
-'category-article-count-limited' => 'Укх цатегчоахь {{PLURAL:$1|$1 оагӀув|$1 оагӀувнаш|}}.',
+'category-article-count-limited' => 'Укх катагач {{PLURAL:$1|$1 оагӀув|$1 оагӀувнаш|}}.',
 'category-file-count' => '{{PLURAL:$2|Укх цатего ца паьла мара чулоацац.|{{PLURAL:$1|$1 паьла хьахьекха я|$1 паьлаш хьахьекха я}} укх цатегий $2 долачаьрахь.}}',
-'category-file-count-limited' => 'Укх цатегчоахь {{PLURAL:$1|$1 паьл|$1 паьлаш}}.',
-'listingcontinuesabbrev' => 'дӀахьо',
-'noindex-category' => 'Моттигза оагӀувнаш',
+'category-file-count-limited' => 'Укх катагач {{PLURAL:$1|$1 паьл|$1 паьлаш}}.',
+'listingcontinuesabbrev' => 'дӀахо',
+'index-category' => 'ДIахьожаман оагӀувнаш',
+'noindex-category' => 'ДIахьожаманза оагӀувнаш',
 'broken-file-category' => 'Болхбеш йоаца паьла Ӏинкашца оагӀувнаш',
 
 'about' => 'Лоацам',
 'article' => 'Йоазув',
 'newwindow' => '(керда кора)',
-'cancel' => 'Юхавал',
+'cancel' => 'Юхавалa/ялa',
 'moredotdotdot' => 'ДӀахо',
 'mypage' => 'Са оагӀув',
 'mytalk' => 'Са дувцама оагӀув',
 'anontalk' => 'Укх IP-моттига дувцам',
-'navigation' => 'Ð\9dикÑ\8aÑ\82аÑ\85каÑ\80',
-'and' => '&#32;кха',
+'navigation' => 'Ð\9dикÑ\8aÑ\82оÑ\85каÑ\80г',
+'and' => '&#32;кхы',
 
 # Cologne Blue skin
 'qbfind' => 'Лахар',
@@ -163,37 +168,37 @@ $messages = array(
 'vector-action-protect' => 'Лораде',
 'vector-action-undelete' => 'Юхаоттаде',
 'vector-action-unprotect' => 'Лорам хувца',
-'vector-simplesearch-preference' => 'Яьржа лахарий довзамаш чуяккха (Vector skin only)',
-'vector-view-create' => 'Кхоллам',
-'vector-view-edit' => 'Хувцар',
+'vector-simplesearch-preference' => 'Яьржа лахарий довзамаш чуяьккха (Vector skin only)',
+'vector-view-create' => 'Кхолларле',
+'vector-view-edit' => 'Хувцам',
 'vector-view-history' => 'Искар',
-'vector-view-view' => 'Дешам',
+'vector-view-view' => 'Дешар',
 'vector-view-viewsource' => 'Зембакхама бӀаргтассам',
-'actions' => 'Дулархам',
+'actions' => 'ДулархIамаш',
 'namespaces' => 'ЦӀерий аренаш',
-'variants' => 'Дошаламаш',
+'variants' => 'Доштайпарленаш',
 
 'errorpagetitle' => 'ГӀалат',
-'returnto' => '$1 оагӀув тӀа юхавалар',
+'returnto' => '$1 оагӀув тӀа юхавалар/ялар',
 'tagline' => 'Кечал укхазара я {{SITENAME}}',
-'help' => 'Ð\9dовкÑ\8a\81Ñ\82ал',
-'search' => 'ТоÑ\85кам',
+'help' => 'Ð\9aÑ\83Ñ\86Ñ\82оÑ\85кам',
+'search' => 'Ð\9bаÑ\85аp',
 'searchbutton' => 'Хьалаха',
 'go' => 'Дехьавала',
 'searcharticle' => 'Дехьавала',
 'history' => 'искар',
 'history_short' => 'Искар',
-'updatedmarker' => 'Со Ñ\85анаÑ\87а Ð´ÐµÐ½Ñ\86а Ñ\85Ñ\83вÑ\86амаÑ\88 Ñ\85иннaй',
-'printableversion' => 'Ð\9aаÑ\8cÑ\85аÑ\82и Ð·Ð°Ñ\80ба Ð±Ó\80аÑ\81а',
+'updatedmarker' => 'Со Ñ\85анаÑ\87а Ð´ÐµÐ½Ñ\86а Ñ\85Ñ\83вÑ\86амаÑ\88 Ñ\85иннaд',
+'printableversion' => 'Ð\9aаÑ\8cÑ\85аÑ\82заÑ\80бане Ð´Ð¾Ñ\80жам',
 'permalink' => 'Даим латта Ӏинк',
 'print' => 'Каьхат арадаккха',
-'view' => 'БӀаргтассар',
+'view' => 'БӀаргтассам',
 'edit' => 'Хувца',
 'create' => 'Хьаде',
 'editthispage' => 'Ер оагӀув хувца',
 'create-this-page' => 'Ep oагӀув хьае',
-'delete' => 'ДӀадакха',
-'deletethispage' => 'Ер оагӀув дӀаяккха',
+'delete' => 'ДӀадаккха',
+'deletethispage' => 'Ер оагӀув дӀаяьккха',
 'undelete_short' => 'Меттаоттае {{PLURAL:$1|хувцам|$1 хувцамаш}}',
 'viewdeleted_short' => 'БӀаргтасса {{PLURAL:$1|дӀадаьккха хувцам тӀа|$1 дӀадаьккха хувцамаш тӀа}}',
 'protect' => 'Лораде',
@@ -205,54 +210,55 @@ $messages = array(
 'talkpage' => 'Укх оагӀув тӀа дувцам бе',
 'talkpagelinktext' => 'дувцам',
 'specialpage' => 'ГӀулакха оагӀув',
-'personaltools' => 'Са Ð³Ó\80ирсаш',
+'personaltools' => 'Са Ð³Ó\80орсаш',
 'postcomment' => 'Керда декъам',
 'articlepage' => 'Йоазув тӀа бӀаргтасса',
 'talk' => 'Дувцам',
-'views' => 'БӀаргтассараш',
-'toolbox' => 'Ð\93Ó\80ирсаш',
+'views' => 'БӀаргтассамаш',
+'toolbox' => 'Ð\93Ó\80орсаш',
 'userpage' => 'Дакъалаьцачунна оагӀуве бӀаргтасса',
 'projectpage' => 'Хьахьоадайтама оагӀуве бӀаргтасса',
 'imagepage' => 'Паьла оагӀув тӀа бӀаргтасса',
-'mediawikipage' => 'Xоама оагӀув хьахокха',
-'templatepage' => 'ЧӀабла оагӀув тӀа бӀаргтасса',
-'viewhelppage' => 'Ð\93Ó\80о Ð´еха',
-'categorypage' => 'ЦаÑ\82ега оагӀув тӀа бӀаргтасса',
+'mediawikipage' => 'Xоаман оагӀув хьахьокха',
+'templatepage' => 'ЧÓ\80абала Ð¾Ð°Ð³Ó\80Ñ\83в Ñ\82Ó\80а Ð±Ó\80аÑ\80гÑ\82аÑ\81Ñ\81а',
+'viewhelppage' => 'Ð\9aÑ\83Ñ\86Ñ\82оÑ\85кам Ð±еха',
+'categorypage' => 'Ð\9aаÑ\82ага оагӀув тӀа бӀаргтасса',
 'viewtalkpage' => 'Дувцамага бӀаргтасса',
 'otherlanguages' => 'Кхыча меттал',
 'redirectedfrom' => '($1 тӀера хьадейта да)',
 'redirectpagesub' => 'ДӀа-хьа дайта оагӀув',
 'lastmodifiedat' => 'Укх оагӀув тӀехьара  хувцам: $2, $1.',
-'viewcount' => 'Укх оагӀув тӀа бӀаргтасса хиннад {{PLURAL:$1|цкъа|$1 шозза}}.',
+'viewcount' => 'Укх оагӀув тӀа бӀаргтасса хиннад {{PLURAL:$1|цхьазза|$1 шозза}}.',
 'protectedpage' => 'Лорама оагӀув',
-'jumpto' => 'Укхаза дехьавала:',
-'jumptonavigation' => 'никÑ\8aÑ\82аÑ\85каÑ\80',
+'jumpto' => 'Укхаза дехьавала/яла:',
+'jumptonavigation' => 'никÑ\8aÑ\82оÑ\85каÑ\80г',
 'jumptosearch' => 'леха',
+'pool-timeout' => 'ЧIегатохара сабаран ха чакхаяьннай',
 'pool-queuefull' => 'Хаттарий цӀа хьалдизад',
 'pool-errorunknown' => 'Довзаш доаца гӀалат',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
 'aboutsite' => 'Лоацам {{SITENAME}}',
 'aboutpage' => 'Project:Лоацам',
-'copyright' => '$1 чулоацамаца такхоачаш да.',
+'copyright' => '$1 чулоацамаца тIакхоачаш да.',
 'copyrightpage' => '{{ns:project}}:Яздаьчунна бокъо',
 'currentevents' => 'ХӀанзара хоамаш',
 'currentevents-url' => 'Project:ХӀанзара хоамаш',
 'disclaimers' => 'Бокъонах юхавалаp',
 'disclaimerpage' => 'Project:Бокъонах юхавалаp',
-'edithelp' => 'Ð¥Ñ\83вÑ\86ама Ð½Ð¾Ð²ÐºÑ\8aоÑ\81Ñ\82ал',
-'edithelppage' => 'Help:ГӀалатнийсдара новкъoстал',
+'edithelp' => 'Ð¥Ñ\83вÑ\86ама ÐºÑ\83Ñ\86Ñ\82оÑ\85кам',
+'edithelppage' => 'Help:ГӀалатнийсдар',
 'helppage' => 'Help:Чулоацам',
 'mainpage' => 'Кертера оагӀув',
 'mainpage-description' => 'Кертера оагӀув',
 'policy-url' => 'Project:Бокъонаш',
-'portal' => 'Гулламхой ков',
-'portal-url' => 'Project:Гулламхой ков',
+'portal' => 'Гулламков',
+'portal-url' => 'Project:Гулламков',
 'privacy' => 'Паьлбокъо',
 'privacypage' => 'Project:Паьлбокъо',
 
 'badaccess' => 'Чуваларa гӀалат',
-'badaccess-group0' => 'Оаш хьадийха дулархам шунна де йийшяц.',
+'badaccess-group0' => 'Оаш хьадийха дулархIам шун де йишяц.',
 'badaccess-groups' => 'Дахта кхоачашдар {{PLURAL:$2|тоабачара|тоабашкара}} $1 дакъалаьцархой мара де бокъо яц.',
 
 'versionrequired' => '$1 MediaWiki доржам эша',
@@ -266,18 +272,18 @@ $messages = array(
 'youhavenewmessagesmulti' => 'Оаш $1чу керда хоамаш дӀайийцад',
 'editsection' => 'хувца',
 'editold' => 'хувца',
-'viewsourceold' => 'xÑ\8cадоагÓ\80а ÐºÑ\8aайладоагÓ\80а тӀа бӀаргтасса',
+'viewsourceold' => 'xÑ\8cайоагÓ\80а ÐºÑ\8aайлоÑ\80г тӀа бӀаргтасса',
 'editlink' => 'хувца',
-'viewsourcelink' => 'xÑ\8cадоагÓ\80а ÐºÑ\8aайладоагÓ\80а тӀа бӀаргтасса',
+'viewsourcelink' => 'xÑ\8cайоагÓ\80а ÐºÑ\8aайлоÑ\80г тӀа бӀаргтасса',
 'editsectionhint' => 'Декъам хувца: $1',
 'toc' => 'Чулоацам',
-'showtoc' => 'хьахокха',
+'showtoc' => 'хьахьокха',
 'hidetoc' => 'къайладаккха',
 'collapsible-collapse' => 'чудерзаде',
 'collapsible-expand' => 'хьадоаржаде',
 'thisisdeleted' => '$1 бӀаргтасса е юхаметтаоттаде?',
 'viewdeleted' => '$1 бӀаргтасса?',
-'restorelink' => '{{PLURAL:$1|дӀаяккха хувцам|$1 дӀаяккха хувцамаш}}',
+'restorelink' => '{{PLURAL:$1|дӀаяьккха хувцам|$1 дӀаяьккха хувцамаш}}',
 'feedlinks' => 'Цу тайпара:',
 'site-rss-feed' => '$1 RSS мугӀ',
 'site-atom-feed' => '$1 Atom мугӀ',
@@ -290,121 +296,132 @@ $messages = array(
 'nstab-user' => 'Дакъалаьцархо',
 'nstab-media' => 'Медифаг',
 'nstab-special' => 'ГӀулакха оагӀув',
-'nstab-project' => 'Хьахьоадайтамахь лаьца',
+'nstab-project' => 'Хьахоадайтамах лаьца',
 'nstab-image' => 'Паьл',
 'nstab-mediawiki' => 'Хоам',
-'nstab-template' => 'Ð\9aÑ\83Ñ\86кеп',
-'nstab-help' => 'Ð\9dовкÑ\8a\81Ñ\82ал',
-'nstab-category' => 'ЦаÑ\82ег',
+'nstab-template' => 'ЧIабал',
+'nstab-help' => 'Ð\9aÑ\83Ñ\86Ñ\82оÑ\85кам',
+'nstab-category' => 'Ð\9aаÑ\82аг',
 
 # Main script and global functions
-'nosuchaction' => 'Цу тайпара дулархам бац',
-'nosuchspecialpage' => 'Изза мо гӀооагӀув яц',
+'nosuchaction' => 'Цу тайпара дулархIам бац',
+'nosuchspecialpage' => 'Ð\98зза Ð¼Ð¾ Ð³Ó\80он Ð¾Ð°Ð³Ó\80Ñ\83в Ñ\8fÑ\86',
 
 # General errors
 'error' => 'ГӀалат',
 'missing-article' => 'Кораде дезаш хинна оагӀувни яздам корадаьдац «$1» $2.
 
-Из мо гӀалат нийсалуш хула, саг тишъенна Ӏинкаца, д|адаькха дола оагӀувни хувца искара тӀа чувала гӀиртача.
+Из мо гӀалат нийсалуш хула, саг тишъенна Ӏинкаца, д|адаьккха дола оагӀувни хувца искара тӀа чувала гӀертача.
 
\9dаггаÑ\85Ñ\8c Ñ\81анна Ð¸Ð· Ð¸Ñ\88Ñ\82Ñ\82а Ð´ÐµÑ\86e, Ñ\88оана Ð³Ó\80ирса Ӏалаш деча гӀалат кораяь хила мега.
\9dаггаÑ\85Ñ\8c Ñ\81анна Ð¸Ð· Ð¸Ñ\88Ñ\82Ñ\82а Ð´ÐµÑ\86e, Ñ\88оана Ð³Ó\80орса Ӏалаш деча гӀалат кораяь хила мега.
 Дехар да, [[Special:ListUsers/sysop|мазакулгалхочоа]] хоам бе, URL хьахьокхаш.',
 'missingarticle-rev' => '(бӀаргоагӀув № $1)',
 'internalerror' => 'Чура гӀалат',
 'internalerror_info' => 'Чура гӀалат: $1',
+'cannotdelete-title' => 'ОагIув дIаяккха йиш яц "$1"',
 'badtitle' => 'Мегаш йоаца цӀи',
-'badtitletext' => 'Дехаш дола оагӀувни цӀи, нийса яц, яьсса я е меттаюкъара е вIикъaюкъара цӀи харцахь я. ЦӀера юкъе мегаш доаца харакъаш нийсаденна хила мегаш да.',
-'viewsource' => 'Тахкам',
+'badtitletext' => 'Дехаш дола оагӀувни цӀи, нийса яц, яьсса я е меттаюкъара е массаюкъара цӀи харцахь я. ЦӀера юкъе мегаш доаца харакъаш нийсаденна хила мегаш да.',
+'viewsource' => 'БIаргтассам',
+'actionthrottled' => 'Сихален овзамал',
+'protectedpagetext' => 'Хувцаман белхаш долаш ер оагIув къайла я.',
+
+# Virus scanner
+'virus-unknownscanner' => 'довзашдоаца мазаундохьалург:',
 
 # Login and logout pages
 'yourname' => 'Дакъалаьцархочунна цӀи:',
-'yourpassword' => 'КъайладоагӀа:',
-'yourpasswordagain' => 'КъайладоагӀа юха Ӏоязаде:',
+'yourpassword' => 'КъайладIоагӀа:',
+'yourpasswordagain' => 'КъайладIоагӀа юха Ӏоязаде:',
 'remembermypassword' => '(укх $1 {{PLURAL:$1|ден|деношкахь}}) мара са чувалара/чуялара дагалоаца дезаш дац',
 'yourdomainname' => 'Шун цӀеноагӀув:',
 'login' => 'Чувала/яла',
-'nav-login-createaccount' => 'ЦӀи яькха/Ший oагӀув ела',
-'loginprompt' => 'УкÑ\85 Ð±Ð¾Ð»Ñ\85aоагÓ\80Ñ\83ваца доттагӀал лаца, шун "cookies" йийла хьалдеза.',
-'userlogin' => 'ЦӀи яькха/ОагӀув ела',
+'nav-login-createaccount' => 'ЦӀи яьккха/Ший oагӀув ела',
+'loginprompt' => 'УкÑ\85 Ð±ÐµÐ»Ñ\85аÑ\86Ñ\85Ñ\8cоагIоца доттагӀал лаца, шун "cookies" йийла хьалдеза.',
+'userlogin' => 'ЦӀи яьккха/ОагӀув ела',
 'userloginnocreate' => 'Чувала/яла',
 'logout' => 'Аравала/яла',
 'userlogout' => 'Аравала/яла',
 'notloggedin' => 'Оаш шоай цӀи хьааьннадац',
-'nologin' => "ТеÑ\80кама Ð¹Ð¾Ð°Ð·Ñ\83в Ñ\8fц? '''$1'''.",
-'nologinlink' => 'Ð\9bаÑ\80Ñ\85ама Ð¹Ð¾Ð°Ð·Ñ\83в Ð´Ðµ',
+'nologin' => "Ð\9bеламе Ð´IаÑ\8fздаÑ\80 Ð´Ð°ц? '''$1'''.",
+'nologinlink' => 'Ð\9bеламе Ð´IаÑ\8fздаÑ\80 ÐºÑ\85олла',
 'createaccount' => 'Керда дакъалаьцархо кхолла',
 'gotaccount' => "Укхаза дӀаязабенна дий шо? '''$1'''.",
 'gotaccountlink' => 'Чувала/яла',
-'userlogin-resetlink' => 'ЧÑ\83вала/Ñ\8fла Ñ\86Ó\80еи Ð´Ð¾Ð°Ð³Ó\80еи дийцаденнадий?',
-'createaccountmail' => 'Ð\94\84оÑ\88Ñ\82аÑ\86а',
+'userlogin-resetlink' => 'ЧÑ\83вала/Ñ\8fла Ñ\86Ó\80ии Ð´IоагÓ\80аи дийцаденнадий?',
+'createaccountmail' => 'Ð\9aÑ\8aайладIоагIа Ð´-Ñ\85оамнеÑ\86 Ñ\85Ñ\8cадайÑ\82а',
 'createaccountreason' => 'Бахьан:',
-'mailmypassword' => 'Керда къайладоагӀа хьаэца',
+'badretype' => 'Оаша яьккха дIоагIий цIераш шоайл таралуш яц.',
+'loginerror' => 'Дакъалаьцархочун цIи нийса яц',
+'mailmypassword' => 'Керда къайладIоагӀа хьаэца',
+'mailerror' => 'Хоам дIабохьийташ гIалат даьннад: $1',
+'emailconfirmlink' => 'Доаржален хоамни хьожадорг дIачIоагIаде',
 'loginlanguagelabel' => 'Мотт: $1',
 
 # Change password dialog
-'oldpassword' => 'Къаьна къайладоагӀ:',
-'newpassword' => 'Керда къайладоагӀ:',
-'retypenew' => 'Керда къайладоагӀа юха Ӏоязаде:',
-'resetpass-submit-loggedin' => 'КъайладогӀа дӀахувца',
+'resetpass' => 'КъайладIоагIа дIахувцар',
+'oldpassword' => 'Къаьна къайладIоагӀа:',
+'newpassword' => 'Керда къайладIоагӀа:',
+'retypenew' => 'Керда къайладIоагӀа юха Ӏоязаде:',
+'resetpass-submit-loggedin' => 'КъайладIоагӀа дӀахувца',
 'resetpass-submit-cancel' => 'Юхавал/ялa',
 
 # Special:PasswordReset
 'passwordreset-username' => 'Дакъалаьцархочунна цӀи:',
-'passwordreset-email' => 'Ð\94\84оÑ\88Ñ\82а моттиг:',
+'passwordreset-email' => 'Ð\94\85оамни моттиг:',
 
 # Edit page toolbar
 'bold_sample' => 'Сома яздам',
 'bold_tip' => 'Сома яздам',
 'italic_sample' => 'Кулга яздам',
 'italic_tip' => 'Кулга яздам',
-'link_sample' => 'Ó\80инка ÐºÐµÑ\80Ñ\82мÑ\83гÓ\80',
+'link_sample' => 'Ó\80инка ÐºÐ¾Ñ\80Ñ\82але',
 'link_tip' => 'ЧураӀинк',
-'extlink_sample' => 'Ó\80инка ÐºÐµÑ\80Ñ\82доÑ\88 http://www.example.com',
-'extlink_tip' => 'Арена Ӏинка (http:// тамагӀахь дийца ма ле)',
-'headline_sample' => 'KертмугӀa яздама',
-'headline_tip' => '2-гÓ\80а ÐºÐµÑ\80Ñ\82мÑ\83гÓ\80a Ð»Ð°Ð³Ó\80а',
+'extlink_sample' => 'Ó\80инка ÐºÐ¾Ñ\80Ñ\82але http://www.example.com',
+'extlink_tip' => 'Арен Ӏинка (http:// тамагӀах дийца ма ле)',
+'headline_sample' => 'Кортален яздам',
+'headline_tip' => '2-гÓ\80а Ð»Ð°Ð³Ó\80аÑ\80лен ÐºÐ¾Ñ\80Ñ\82але',
 'nowiki_sample' => 'Укхаза кийчаде дезаш доаца яздам оттаде',
-'nowiki_tip' => 'Ð\92|икÑ\8aa-бÓ\80аÑ\81оÑ\82Ñ\82амаÑ\85Ñ\8c Ñ\82еÑ\80кам Ð¼Ð° Ð±Ðµ',
-'image_tip' => 'Чуяькха паьла',
+'nowiki_tip' => 'Ð\9cаÑ\81Ñ\81а-бÑ\83Ñ\81Ñ\82амлоÑ\80г Ñ\82еÑ\80камза Ð´Ð¸Ñ\82а',
+'image_tip' => 'Чуяьккха паьла',
 'media_tip' => 'Паьла Ӏинк',
 'sig_tip' => 'Шун кулгаяздар а, хӀанзара ха а',
 'hr_tip' => 'Мухала мугӀ (могаш тайпара к|еззига хайраде)',
 
 # Edit pages
 'summary' => 'Хувцамий белгалдер',
-'subject' => 'Ð\91Ó\80агал/кеÑ\80Ñ\82мÑ\83гÓ\80:',
+'subject' => 'Ð\91Ó\80агал/коÑ\80Ñ\82але:',
 'minoredit' => 'ЗӀамига хувцам',
 'watchthis' => 'Укх оагӀува теркам бе',
-'savearticle' => 'ОагӀув хьаязде',
+'savearticle' => 'ОагӀув хьаязъе',
 'preview' => 'Хьалхе бӀаргтассар',
-'showpreview' => 'Хьалхе бӀаргтaссар',
+'showpreview' => 'Хьалхе бӀаргтaссам',
 'showlivepreview' => 'Сиха бӀаргтассар',
 'showdiff' => 'Даь хувцамаш',
-'anoneditwarning' => 'Ð\97ем Ñ\85ила! Ð¨Ð¾ ÐºÑ\85Ñ\8b Ñ\87Ñ\83даÑ\8cннадаÑ\86. Ð¨Ñ\83н IP-моÑ\82Ñ\82иг Ñ\83кÑ\85 Ñ\85ийÑ\86а Ð¾Ð°Ð³Ó\80Ñ\83в Ð¸Ñ\81каÑ\80еÑ\87Ñ\83 Ð´Ó\80аÑ\8fздаÑ\8c Ñ\85Ñ\83Ñ\80гÑ\8aе.',
+'anoneditwarning' => 'Ð\97ем Ñ\85ила! Ð¨Ð¾ ÐºÑ\85Ñ\8b Ñ\87Ñ\83даÑ\8cннадаÑ\86. Ð¨Ñ\83н IP-моÑ\82Ñ\82иг Ñ\83кÑ\85 Ñ\85ийÑ\86а Ð¾Ð°Ð³Ó\80Ñ\83в Ð¸Ñ\81каÑ\80еÑ\87Ñ\83 Ð´Ó\80аÑ\8fздаÑ\8c Ñ\85Ñ\83Ñ\80гÑ\8cÑ\8f.',
 'summary-preview' => 'Лоацам ба:',
-'subject-preview' => 'Кортяздам:',
+'subject-preview' => 'Кортале хургья:',
 'blockedtitle' => 'Дакъалаьцархо чӀега бела ва/я',
 'blockednoreason' => 'бахьан доацаш да',
 'loginreqlink' => 'чувала/яла',
 'loginreqpagetext' => 'Кхыйола оагӀувнашка хьожаргдолаш, оаш $1 де деза.',
-'accmailtitle' => 'КъайладоагӀ дӀадахатад',
+'accmailtitle' => 'КъайладIоагӀа дӀадахьийтад',
 'newarticle' => '(Kерда)',
 'newarticletext' => 'Шо йоаца оагӀув тӀа Ӏинкаца дехьадаьннад.
 Из хьае, кӀалхагӀа доала корачу яздам очуязаде (кхета хала дале [[{{MediaWiki:Helppage}}|новкъостала оагӀув тӀа]] бӀаргтасса).
 Цаховш укхаза нийсадена дале, юхавала/яла яха тоӀобама тӀа пӀелга тоӀобе.',
-'noarticletext' => "У Ñ\81аÑ\85Ñ\8cаÑ\82е укх оагӀув тӀа яздам доацаш да.
+'noarticletext' => "Ð¥Iанз укх оагӀув тӀа яздам доацаш да.
 [[Special:Search/{{PAGENAME}}|цу тайпара цӀи дувцам кораде]] кхыдола йоазувашках йийша я шун, вешта
 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} тара дола таптарий йоазув карае], е
 '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} изза мо цӀи йолаш оагӀув ела]'''</span>.",
-'noarticletext-nopermission' => 'УкÑ\85 Ñ\81аÑ\85Ñ\8cаÑ\82е укх оагӀув тӀа яздам дац.
-Шун йийшая, кхыдола йоазувнашкахь [[Special:Search/{{PAGENAME}}|дола цӀерий хаттам корае]] е <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} нийсамий тептара йоазувнаш корае].</span>',
+'noarticletext-nopermission' => 'Ð¥Iанз укх оагӀув тӀа яздам дац.
+Шун йиш я, кхыдола йоазувнашках [[Special:Search/{{PAGENAME}}|дола цӀерий хаттам корае]] е <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} нийсамий тептара йоазувнаш корае].</span>',
 'note' => "'''ХӀамоалар:'''",
 'previewnote' => "'''Хьалхе б|аргтассам мара бац.'''
-Яздам кха яздаь дац!",
+Яздам кхы яздаь дац!",
 'editing' => 'ГӀалатнийсдар: $1',
 'editingsection' => 'ГIалатнийсдар $1 (оагӀувдакъа)',
 'editingcomment' => 'ГӀалатнийсдар $1 (керда декъам)',
-'editconflict' => 'Ð\93Ó\80алаÑ\82нийÑ\81даÑ\80а ÐºÑ\85овсам: $1',
+'editconflict' => 'Ð\93Ó\80алаÑ\82нийÑ\81даÑ\80а ÐºÑ\8aовсам: $1',
 'yourtext' => 'Хьа яздам',
 'copyrightwarning' => "Теркам бе, $2 ($1 хьажа) бокъонаца лорадеш, тӀахьежама кӀала уллаш, оаш мел чуяккхаш дола хоамаш, яздамаш долга.
 Наггахь санна шоай яздамаш пурам доацаш мала волашву саго хувца е кхы дола моттиге яздердолаш, безам беци, укхаз Ӏочуцаяздеча, дикаьгӀа да.<br />
@@ -412,23 +429,23 @@ $messages = array(
 '''Яздархой бокъоца лорадеш дола хӀамаш, цара пурам доацаш, Ӏочумаязаде!'''",
 'templatesused' => 'Укх бӀаргоагӀувни оагӀув тӀа лелаяь {{PLURAL:$1|Куцкеп|Куцкепаш}}:',
 'templatesusedpreview' => 'Хьалхе бӀаргтассама оагӀув тӀа леладеш дола {{PLURAL:$1|Куцкеп|Куцкепаш}}:',
-'template-protected' => ' (лорам лаьца бa)',
+'template-protected' => '(лорам лаьца)',
 'template-semiprotected' => '(дакъа-лорам)',
 'hiddencategories' => 'Ер оагӀув укх {{PLURAL:$1|къайла цатегаца|къайла цатегашца}} дакъа лоаца:',
 'permissionserrorstext-withaction' => '$2 де бокъо яц {{PLURAL:$1|из бахьан долаш|из бахьанаш долаш}}:',
-'recreate-moveddeleted-warn' => "'''Зем бе! Шо хьалххе дайоаккхаш хина оагӀув хьае гӀарта.'''
+'recreate-moveddeleted-warn' => "'''Зем бе! Шо хьалххе дIайоаккхаш хинна оагӀув хьае гӀерта.'''
 
 Хьажа, бокъонцахь езаш йолга.
-КӀалхагIа укх оагӀуви дӀадаккхамeи цӀи хувцамeи тептараш хьекха да.",
-'moveddeleted-notice' => 'Ер оагӀув дӀаяккха хиннай.
+КӀалхагIа укх оагӀуви дӀадаккхами цӀи хувцами тептараш хьекха да.",
+'moveddeleted-notice' => 'Ер оагӀув дӀаяьккха хиннай.
 Новкъостала, кӀалха дӀадаккхама а хувцама а тептарашкера нийсама йоазувнаш хьахьекха я.',
 'log-fulllog' => 'Деррига таптара бӀаргтасса',
-'edit-conflict' => 'Ð¥Ñ\83вÑ\86амий ÐºÑ\85овсам.',
+'edit-conflict' => 'Ð¥Ñ\83вÑ\86амий ÐºÑ\8aовсам.',
 
 # Parser/template warnings
-'post-expand-template-inclusion-warning' => 'Зембакхам: дагара куцкепаш чулоаца дустам геттара доккха да.
-Цхьадола куцкепаш чулоацалургдац.',
-'post-expand-template-inclusion-category' => 'Чулоаца куцкепий мегаш дола дустам дукхалена тӀехьайоала оагӀувнаш',
+'post-expand-template-inclusion-warning' => 'Зембаккхам: жамIан чIабалаш чулоаца дустам геттара доккха да.
+Цхьадола чIабалаш чулоацалургдац.',
+'post-expand-template-inclusion-category' => 'Чулоаца чIабала мегаш дола дустам дукхалена тӀехьайоала оагӀувнаш',
 'post-expand-template-argument-warning' => 'Зем бе! Ер оагӀув цаӀ куцкепа |аьлдош мара чулоацац, юхадастара сел доккха дустам йолаш.
 Цу тайпара |аьлдешаш ӀокӀаладаькха да.',
 'post-expand-template-argument-category' => 'Куцкепий теркамза |аьлдешаш чулоаца оагӀувнаш',
@@ -439,7 +456,7 @@ $messages = array(
 'revisionasof' => '$1 доржам',
 'revision-info' => '$1; $2 хувцам',
 'previousrevision' => '← Xьалхйоаг|араш',
-'nextrevision' => 'TӀадоагӀа →',
+'nextrevision' => 'ТIехьайоагIараш →',
 'currentrevisionlink' => 'Дола доржам',
 'cur' => 'хӀанз.',
 'next' => 'тӀехь.',
@@ -448,9 +465,10 @@ $messages = array(
 'page_last' => 'тӀехьара',
 'histlegend' => "Кхетам: (хӀанз.) = хӀанза йолачунна бӀаргоагӀувни хьакъоастам ба; (хьалх.) = хьалха хинначунна бӀаргоагӀувни хьакъоастам ба; '''зӀ''' = зӀамига хьахувцам ба.",
 'history-fieldset-title' => 'Искара бӀаргтасса',
-'history-show-deleted' => 'ДӀадаькхараш мара',
+'history-show-deleted' => 'ДӀадаьккхараш мара',
 'histfirst' => 'къаьнараш',
 'histlast' => 'ха яннараш',
+'historyempty' => '(даьсса)',
 
 # Revision feed
 'history-feed-title' => 'Хувцамий искар',
@@ -458,54 +476,55 @@ $messages = array(
 'history-feed-item-nocomment' => '$1гӀара $2гӀачу',
 
 # Revision deletion
-'rev-delundel' => 'хьахьокха/къайлаяькха',
-'rev-showdeleted' => 'хьахокха',
+'rev-delundel' => 'хьахьокха/къайлаяьккха',
+'rev-showdeleted' => 'хьахьокха',
 'revdelete-show-file-submit' => 'XӀаа',
 'revdelete-radio-set' => 'XӀаа',
 'revdelete-radio-unset' => 'A',
 'revdelete-log' => 'Бахьан',
-'revdel-restore' => 'Ð\91Ó\80аÑ\81анÑ\87е хувца',
-'revdel-restore-deleted' => 'дӀадаькха доржамаш',
+'revdel-restore' => 'Ð\9aÑ\83Ñ\81Ñ\82гойÑ\82ам хувца',
+'revdel-restore-deleted' => 'дӀадаьккха доржамаш',
 'revdel-restore-visible' => 'бӀаргагушдола доржамаш',
 'pagehist' => 'ОагӀува искар',
-'deletedhist' => 'ДӀадакхамий искар',
+'deletedhist' => 'ДӀадаккхамий искар',
+'revdelete-reasonotherlist' => 'Кхыдола бахьан',
 
 # History merging
 'mergehistory-list' => 'ВIашагIатоха хувцамий искар',
 'mergehistory-go' => 'ВIашагIатоха хувцамаш хьахьокха',
 'mergehistory-submit' => 'Хувцамаш вIашагIатоха',
-'mergehistory-empty' => 'Ð\92IаÑ\88агIаÑ\82оÑ\85аÑ\80а Ñ\85Ñ\83вÑ\86амаÑ\88 ÐºÐ¾Ñ\80аÑ\8fÑ\8fÑ\86',
+'mergehistory-empty' => 'Ð\92IаÑ\88агIаÑ\82оÑ\85аÑ\80а Ñ\85Ñ\83вÑ\86амаÑ\88 ÐºÐ¾Ñ\80аÑ\8fÑ\8c Ñ\8fÑ\86.',
 'mergehistory-reason' => 'Бахьан:',
 
 # Merge log
-'revertmerge' => ' Декъа',
+'revertmerge' => 'Декъа',
 
 # Diffs
-'history-title' => '"$1" хувцамий искар',
+'history-title' => '"$1" — хувцамий искар',
 'lineno' => 'МугI $1:',
 'compareselectedversions' => 'Хьаржа доржамаша тарона тIа хьажа',
 'editundo' => 'юхавала/яла',
 'diff-multi' => '({{PLURAL:$1|$1 юкъара доржам хьахьекха дац|$1 юкъара доржамаш хьахьекха дац}} {{PLURAL:$2|$2 дакъалаьцархочунна|$2 дакъалаьцархоший}})',
 
 # Search results
-'searchresults' => 'ТаÑ\85кама Ð³IÑ\83лакÑ\85хилар',
-'searchresults-title' => '"$1" Ñ\82ахка',
-'searchresulttext' => 'Ð¥Ñ\8cаÑ\85Ñ\8cоадайÑ\82ама Ð¾Ð°Ð³IÑ\83внаÑ\88 Ñ\82Iа Ñ\82аÑ\85камаÑ\85Ñ\8c лаьца лоаца маIандар эца [[{{MediaWiki:Helppage}}|новкъостала декъамага]] хьажа.',
-'searchsubtitle' => 'Хоаттамахь лаьца «[[:$1]]» ([[Special:Prefixindex/$1|цу цIерахь ювалу оагIувнаш]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|цу цIерахь Iинкаш еж йола]])',
+'searchresults' => 'ТоÑ\85кама Ð³IÑ\83лакÑ\85ахилар',
+'searchresults-title' => '"$1" Ñ\82охка',
+'searchresulttext' => 'Ð¥Ñ\8cаÑ\85Ñ\8cоадайÑ\82ама Ð¾Ð°Ð³IÑ\83внаÑ\88 Ñ\82Iа Ñ\82оÑ\85камаÑ\85 лаьца лоаца маIандар эца [[{{MediaWiki:Helppage}}|новкъостала декъамага]] хьажа.',
+'searchsubtitle' => 'Хоаттамах лаьца «[[:$1]]» ([[Special:Prefixindex/$1|цу цIерах ювалу оагIувнаш]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|цу цIерах Iинкаш еш йола]])',
 'searchsubtitleinvalid' => "'''$1''' хаттара",
 'notitlematches' => 'ОагIувни цIераш вIашагIа кхеташ яц',
-'notextmatches' => 'ОагIувнаша ядамий вIашагIакхетараш дац',
+'notextmatches' => 'Ð\9eагIÑ\83внаÑ\88а Ñ\8fздамий Ð²IаÑ\88агIакÑ\85еÑ\82аÑ\80аÑ\88 Ð´Ð°Ñ\86',
 'prevn' => '{{PLURAL:$1|хьалхйоаг|ар $1|хьалхйоаг|араш $1|хьалхйоаг|араш $1}}',
 'nextn' => '{{PLURAL:$1|тlехьайоагlар $1|тlехьайоагlараш $1|тlехьайоагlараш $1}}',
 'prevn-title' => '{{PLURAL:$1|$1 хьалхара йоазув|$1 хьалхара йоазувнаш}}',
 'nextn-title' => '{{PLURAL:$1|$1 тIехьара йоазув|$1 тIехьара йоазувнаш}}',
 'shown-title' => 'Укх оагIувни $1 {{PLURAL:$1|йоазув|йоазувнаш}} хьахьокха',
 'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) хьажа',
-'searchmenu-exists' => "'''УкÑ\85 Ð²IикÑ\8aa-Ñ\85Ñ\8cаÑ\85Ñ\8cоадайÑ\82ама Ñ\87Ñ\83 ер оаг|ув \"[[:\$1]]\" я'''",
-'searchmenu-new' => "'''УкÑ\85 \"[[:\$1]]\" Ð²|икÑ\8aa-Ñ\85Ñ\8cаÑ\85Ñ\8cоадайÑ\82амÑ\87оÑ\85 Ð¾Ð°Ð³IÑ\83в Ð´е!'''",
+'searchmenu-exists' => "'''УкÑ\85 Ð¼Ð°Ñ\81Ñ\81а-Ñ\85Ñ\8cаÑ\85Ñ\8cоадайÑ\82амаÑ\87 ер оаг|ув \"[[:\$1]]\" я'''",
+'searchmenu-new' => "'''УкÑ\85 \"[[:\$1]]\" Ð¼Ð°Ñ\81Ñ\81а-Ñ\85Ñ\8cаÑ\85оадайÑ\82амаÑ\87 Ð¾Ð°Ð³IÑ\83в Ñ\85Ñ\8cае!'''",
 'searchhelp-url' => 'Help:Чулоацам',
-'searchprofile-articles' => 'Ð\9bаÑ\80доагIувнаш',
-'searchprofile-project' => 'Дагарчеи хьахьоадайтамеи оагIувнаш',
+'searchprofile-articles' => 'Ð\93омлен оагIувнаш',
+'searchprofile-project' => 'Дагарлеи хьахоадайтами оагIувнаш',
 'searchprofile-images' => 'Медифаг',
 'searchprofile-everything' => 'Массана',
 'searchprofile-advanced' => 'Шера я',
@@ -513,17 +532,18 @@ $messages = array(
 'searchprofile-project-tooltip' => '$1чу лахар',
 'searchprofile-images-tooltip' => 'Паьлий лахар',
 'searchprofile-everything-tooltip' => 'Массадола оагIувний лахар (дувцама оагIувнаш чулоацаш)',
-'searchprofile-advanced-tooltip' => 'Iочуязьяь цIераренашках лаха',
+'searchprofile-advanced-tooltip' => 'Iочуязаяь цIераренашках лаха',
 'search-result-size' => ' $1 ({{PLURAL:$2|1 дош|$2 дешаш}})',
 'search-result-category-size' => '{{PLURAL:$1|$1 дакъа|$1 дакъаш}} ({{PLURAL:$2|$2 кIалцатег|$2 кIалцатегаш}}, {{PLURAL:$3|$3 паьла|$3 паьлий|$3 паьлий}})',
-'search-redirect' => '($1 дехьачуяькхар)',
+'search-redirect' => '($1 дехьачуяьккхар)',
 'search-section' => ' (дакъа $1)',
 'search-suggest' => 'Iа лохар из хила мега: $1',
-'search-interwiki-caption' => 'Гаргалона хьахьоадайтамаш',
+'search-interwiki-caption' => 'Гаргалон хьахьоадайтамаш',
 'search-interwiki-default' => '$1 толамчаш:',
 'search-interwiki-more' => '(кха)',
 'search-mwsuggest-enabled' => ' Хьехамашца',
 'search-mwsuggest-disabled' => ' Хьехамаш боацаш',
+'search-relatedarticle' => 'шоайл дола',
 'searchrelated' => 'гаргара',
 'searchall' => 'деррига',
 'showingresultsheader' => "{{PLURAL:$5|'''$1''' толамче укх '''$3''' долачарах|'''$1 — $2''' толамчаш укх '''$3''' долачарах}} '''$4'''а",
@@ -545,42 +565,42 @@ $messages = array(
 'preferences' => 'Оттамаш',
 'mypreferences' => 'Оттамаш',
 'prefsnologin' => 'Шо чудаьнна дац',
-'changepassword' => 'КъайладоaгIа дIахувцар',
+'changepassword' => 'КъайладIоaгIа дIахувцар',
 'prefs-skin' => 'БIагала куц',
 'skin-preview' => 'Хьажа',
-'prefs-datetime' => 'ТаÑ\8cÑ\80аÑ\85Ñ\8cеи Ñ\81аÑ\85Ñ\8cаÑ\82еи',
+'prefs-datetime' => 'ТаÑ\8cÑ\80аÑ\85Ñ\8cи Ñ\81аÑ\85Ñ\8cаÑ\82и',
 'prefs-personal' => 'Хьа хьай далам',
 'prefs-rc' => 'Керда хувцамаш',
 'prefs-watchlist' => 'Теркама дагарче',
 'prefs-watchlist-days' => 'Ден дукхал',
-'prefs-resetpass' => 'КъайладогIа хувца',
+'prefs-resetpass' => 'КъайладIоагIа хувца',
 'prefs-rendering' => 'ТIера бIаса',
 'saveprefs' => 'Дита',
 'prefs-editing' => 'ГIалатнийсдар',
 'searchresultshead' => 'Лахаp',
 'timezonelegend' => 'Сахьати юкъ:',
 'localtime' => 'Вола/Йола моттиги ха:',
-'timezoneregion-africa' => 'Эприк',
+'timezoneregion-africa' => 'Ð\90Ñ\8cприк',
 'timezoneregion-america' => 'Iаьмрик',
 'timezoneregion-antarctica' => 'Энтарцит',
 'timezoneregion-arctic' => 'Эрцит',
 'timezoneregion-asia' => 'Iаьзик',
-'timezoneregion-atlantic' => 'IаÑ\82ланÑ\82иÑ\86форд',
+'timezoneregion-atlantic' => 'IаÑ\8cÑ\82ланÑ\82а форд',
 'timezoneregion-australia' => 'Устралик',
 'timezoneregion-europe' => 'Аьроп',
 'timezoneregion-indian' => 'ХIинда форд',
 'timezoneregion-pacific' => 'Тийна форд',
-'prefs-searchoptions' => 'Тахкама оттамаш',
+'prefs-searchoptions' => 'Тохкама оттамаш',
 'prefs-files' => 'Паьлаш',
-'youremail' => 'Ð\94\84оÑ\88Ñ\82:',
+'youremail' => 'Ð\94\85оамни:',
 'username' => 'Дакъалаьцархочунна цIи:',
 'yourrealname' => 'Шун цIи:',
 'yourlanguage' => 'Мотт:',
 'gender-male' => 'МаIа',
 'gender-female' => 'Кхал',
-'email' => 'Ð\94\84оÑ\88Ñ\82',
-'prefs-help-email' => 'Ð\94\84оÑ\88Ñ\82ий Ð¼Ð¾Ñ\82Ñ\82иг Ð°Ð»Ð° Ñ\8dÑ\88аÑ\88 Ð´Ð°Ñ\86, Ð°Ð¼Ð¼Ð° Ð½Ð¾Ð²ÐºÐ° Ð´Ð°Ñ\86а, Ð½Ð°Ð³Ð³Ð°Ñ\85 Ñ\81анна ÐºÑ\8aайладоагIа Ñ\88оан дийцалой, цу тIа хьатIадайтаргда.',
-'prefs-help-email-others' => 'Ð\9aÑ\85Ñ\8bбола Ð´Ð°ÐºÑ\8aалаÑ\8cÑ\86аÑ\80Ñ\85оÑ\88а Ñ\88оаÑ\86а Ð±Ñ\83взам Ñ\8f Ð¹Ð¸Ð¹Ñ\88Ñ\85Ñ\83Ñ\80гÑ\8cÑ\8f Ñ\88Ñ\83н Ð¾Ð°Ð³IÑ\83ва Ñ\82Iа Ð³Iолла, Ð´-Ñ\84оÑ\88Ñ\82 хьаела ца езаш.',
+'email' => 'Ð\94\85оамни',
+'prefs-help-email' => 'Ð\94\85оамни Ð¼Ð¾Ñ\82Ñ\82иг Ð°Ð»Ð° Ñ\8dÑ\88аÑ\88 Ð´Ð°Ñ\86, Ð°Ð¼Ð¼Ð° Ð½Ð¾Ð²ÐºÑ\8aа Ð´Ð°Ñ\86а, Ð½Ð°Ð³Ð³Ð°Ñ\85Ñ\8c Ñ\81анна ÐºÑ\8aайладIоагIа Ñ\88оана дийцалой, цу тIа хьатIадайтаргда.',
+'prefs-help-email-others' => 'Ð\9aÑ\85Ñ\8bбола Ð´Ð°ÐºÑ\8aалаÑ\8cÑ\86аÑ\80Ñ\85оÑ\88а Ñ\88оаÑ\86а Ð±Ñ\83взам Ñ\8f Ð¹Ð¸Ð¹Ñ\88Ñ\85Ñ\83Ñ\80гÑ\8cÑ\8f Ñ\88Ñ\83н Ð¾Ð°Ð³IÑ\83ва Ñ\82Iа Ð³Iолла, Ð´-Ñ\85оамни хьаела ца езаш.',
 'prefs-signature' => 'Кулгяздар',
 
 # User rights
@@ -627,47 +647,50 @@ $messages = array(
 'recentchanges' => 'Керда хувцамаш',
 'recentchanges-legend' => 'Керда хувцамий оттамаш',
 'recentchanges-summary' => 'КIалхагIа лоарамий доаламе тIехьара оагIувний хувцамаш дIаязадаь да{{grammar:genitive|{{SITENAME}}}}.',
-'recentchanges-feed-description' => 'УкÑ\85 Ð»Ð°Ñ\80амÑ\86а Ñ\82IеÑ\85Ñ\8cаÑ\80а Ð²Ð¸ÐºÐ¸хувцамашт теркам бе.',
+'recentchanges-feed-description' => 'УкÑ\85 Ð»Ð°Ñ\80амÑ\86а Ñ\82IеÑ\85Ñ\8cаÑ\80а Ð¼Ð°Ñ\81Ñ\81ахувцамашт теркам бе.',
 'recentchanges-label-newpage' => 'Укх хувцамаца керда оагIув даь хиннад',
 'recentchanges-label-minor' => 'ЗIамига хувцам я',
 'recentchanges-label-bot' => 'Ер хувцам бIатаца яь е',
-'recentchanges-label-unpatrolled' => 'Ер хувцам ший моттиге кхы дIадехьаяькхаяц.',
+'recentchanges-label-unpatrolled' => 'Ер хувцам ший моттиге кхы дIадехьаяьккхаяц.',
 'rcnote' => "{{PLURAL:$1|Тlехьара '''$1''' хувцам|Тlехьара '''$1''' хувцамаш}} дола '''$2''' {{PLURAL:$2|ден|деношкахь}}, укх сахьате $5 $4.",
 'rcnotefrom' => 'КIалхагIа хувцамаш хьахьекха я <strong>$2</strong> денза (<strong>$1</strong> кхачалца).',
 'rclistfrom' => '$1 тIара хувцамаш хьахьокха',
 'rcshowhideminor' => 'зIамига хувцамаш $1',
 'rcshowhidebots' => '$1 шабелхалой',
 'rcshowhideliu' => 'Чубаьнначара дакъалаьцархочий $1',
-'rcshowhideanons' => 'цIияькханза дакъалаьцархой $1',
+'rcshowhideanons' => 'цIияьккханза дакъалаьцархой $1',
 'rcshowhidepatr' => '$1 теркам даь хувцамаш',
 'rcshowhidemine' => '$1 сай хувцамаш',
 'rclinks' => '$2 динах<br />$3 $1 хинна тIехьара хувцамаш хьахьокха',
 'diff' => 'кхы.',
 'hist' => 'искар',
-'hide' => 'Къайлдакха',
+'hide' => 'Къайлдаккха',
 'show' => 'Хьахьокха',
 'minoreditletter' => 'м',
 'newpageletter' => 'Н',
 'boteditletter' => 'б',
+'rc_categories_any' => 'МоллагIа а',
 'rc-enhanced-expand' => 'Ма дарра чулоацамаш хьахьокха (JavaScriptаца)',
-'rc-enhanced-hide' => 'Ма дарра чулоацамаш къайладакха',
+'rc-enhanced-hide' => 'Ма дарра чулоацамаш къайладаккха',
 
 # Recent changes linked
-'recentchangeslinked' => 'Гаргалона хувцамаш',
-'recentchangeslinked-toolbox' => 'Гаргалона хувцамаш',
+'recentchangeslinked' => 'Гаргалон хувцамаш',
+'recentchangeslinked-feed' => 'Гаргалон хувцамаш',
+'recentchangeslinked-toolbox' => 'Гаргалон хувцамаш',
 'recentchangeslinked-title' => '$1ца хьалаьца хувцамаш',
 'recentchangeslinked-noresult' => 'Укх заманашка гаргарон оагIувнаш тIа хувцамаш хиннаяц.',
-'recentchangeslinked-summary' => "Ер, Iинк яь йола оагIув (е укх цатегачу чуйоагIараш), дукха ха йоацаш хьийца оагIувнашкий дагарче я.
-[[Special:Watchlist|Шун теркама дагаршках]] чуйоагIа оагIувнаш '''белгалъяь я'''.",
+'recentchangeslinked-summary' => "Ер, Iинк яь йола оагIув (е укх цатегачу чуйоагIараш), дукха ха йоацаш хьийца оагIувнашкий дагарле я.
+[[Special:Watchlist|Шун теркама дагарленашках]] чуйоагIа оагIувнаш '''белгалаяь я'''.",
 'recentchangeslinked-page' => 'ОагIува цIи',
 'recentchangeslinked-to' => 'ОагIувнаш тIа хувцамаш хьахьокха, хьахьекха йола оагIув тIа Iинкаш еш йола.',
 
 # Upload
-'upload' => 'Паьл чуяькха',
-'uploadlogpage' => 'Чуяккхамий тептар',
+'upload' => 'Паьл чуяьккха',
+'uploadbtn' => 'Паьл чуяьккха',
+'uploadlogpage' => 'Чуяьккхамий тептар',
 'filedesc' => 'Лоаца лоацам',
 'fileuploadsummary' => 'Лоаца лоацам:',
-'uploadedimage' => '"[[$1]]" чуяккхай',
+'uploadedimage' => '"[[$1]]" чуяьккхай',
 
 'license' => 'ЦIийяздар',
 'license-header' => 'ЦIийяздар',
@@ -685,8 +708,8 @@ $messages = array(
 # File description page
 'file-anchor-link' => 'Паьл',
 'filehist' => 'Паьла искар',
-'filehist-help' => 'Хьалхе паьла мишта хиннай хьожаpгволаш/хьожаpгйолаш, дентаьрах/сахьата тIа пIелга тIообе.',
-'filehist-revert' => 'юхаяккха',
+'filehist-help' => 'Хьалхе паьла мишта хиннай хьожаpгволаш/йолаш, дентаьрах/сахьата тIа пIелга тIообе.',
+'filehist-revert' => 'юхаяьккха',
 'filehist-current' => 'xIанзара',
 'filehist-datetime' => 'Дентаьрах/Ха',
 'filehist-thumb' => 'ЗIамигасуртанче',
@@ -698,11 +721,11 @@ $messages = array(
 'filehist-missing' => 'Паьла йоацаш я',
 'imagelinks' => 'Паьлий пайда эца',
 'linkstoimage' => '{{PLURAL:$1|ТIехьайоагIа $1 оагIув Iинк ду|ТIехьайоагIа $1 оагIувнаш Iинкаш ду}} укх паьла тIа:',
-'nolinkstoimage' => 'Йола паьлат  Iинк ю оагIувнаш дац',
+'nolinkstoimage' => 'Йола паьла тIа  Iинк ю оагIувнаш дац',
 'sharedupload' => 'Ер паьла $1чера я, кхыча хьахьоадайтамча хьахайраде йийшайолаш я.',
 'sharedupload-desc-here' => 'Ер паьл $1чара я, кхыдола хьахьоадайтамача хайрамбе йийш йолаш да.
 Цун [$2 лоацама оагIувца] лоаца маIандар кIалхагIа латта.',
-'uploadnewversion-linktext' => 'Укх паьлий керда бIаса чуяккха',
+'uploadnewversion-linktext' => 'Укх паьлий керда бIаса чуяьккха',
 
 # File reversion
 'filerevert-comment' => 'Бахьан:',
@@ -713,7 +736,7 @@ $messages = array(
 'filedelete-reason-otherlist' => 'Кхыдола бахьан',
 
 # MIME search
-'download' => 'хьачуяккха',
+'download' => 'хьачуяьккха',
 
 # Unwatched pages
 'unwatchedpages' => 'Теркамза оагIувнаш',
@@ -730,7 +753,7 @@ $messages = array(
 'brokenredirects-edit' => 'хувца',
 'brokenredirects-delete' => 'дIадаккха',
 
-'withoutinterwiki-submit' => 'Хьахокха',
+'withoutinterwiki-submit' => 'Хьахьокха',
 
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|бIат|бIаташ}}',
@@ -747,7 +770,7 @@ $messages = array(
 
 # Book sources
 'booksources' => 'Китабий гIувам',
-'booksources-search-legend' => 'Ð\9aиÑ\82аба Ð»Ð¾Ð°Ñ\86а Ð¼Ð°IандаÑ\80а Ñ\82ахкам',
+'booksources-search-legend' => 'Ð\9aиÑ\82аба Ð»Ð¾Ð°Ñ\86а Ð¼Ð°IандаÑ\80а Ñ\82охкам',
 'booksources-go' => 'Лаха',
 
 # Special:Log
@@ -777,20 +800,20 @@ $messages = array(
 'listgrouprights-members' => '(тоабий дагарче)',
 
 # E-mail user
-'emailuser' => 'Ð\94акÑ\8aалаÑ\8cÑ\86аÑ\80Ñ\85оÑ\87оа Ð´-Ñ\84оÑ\88Ñ\82:',
+'emailuser' => 'Ð\94акÑ\8aалаÑ\8cÑ\86аÑ\80Ñ\85оÑ\87оа Ð´-Ñ\85оамни:',
 
 # Watchlist
 'watchlist' => 'Теркама дагарче',
-'mywatchlist' => 'Теркама дагарче',
+'mywatchlist' => 'Теркама дагарле',
 'watchlistfor2' => '$1 $2 царна',
 'addedwatchtext' => '"[[:$1]]" оагIув, шун [[Special:Watchlist|теркама дагаршкахь]] чуяккха я. 
 Техьара мел йола укх оагIувни хувцамаш цу дагаршкахь хоам беш хургья. Вешта [[Special:RecentChanges|керда хувцама дагаршкаехь]] сома къоалмаца хьакъоастлуш хургья.',
 'removedwatchtext' => '"[[:$1]]" оагIув, шун [[Special:Watchlist|теркама дарагчера]] дIаяккха хиннай.',
-'watch' => 'Тaхкам бе',
+'watch' => 'Тохкам бе',
 'watchthispage' => 'Укх оагIува теркам бе',
 'unwatch' => 'Лора ма де',
-'watchlist-details' => 'Шун теркама дагарченгахь йола  $1 {{PLURAL:$1|оагIув|оагIувнаш}}, дувцама оагIувнаш ца лоархаш.',
-'wlshowlast' => 'Тlехьара $1 сахьаташ $2 денош $3 хьахокха',
+'watchlist-details' => 'Шун теркама дагарченгахь йола  $1 {{PLURAL:$1|оагIув|оагIувнаш}}, дувцама оагIувнаш ца лоархIаш.',
+'wlshowlast' => 'Тlехьара $1 сахьаташ $2 денош $3 хьахьокха',
 'watchlist-options' => 'Зем баккха дагарена хувцамаш',
 
 # Displayed when you click the "watch" button and it is in the process of watching
@@ -798,39 +821,39 @@ $messages = array(
 'unwatching' => 'Тохкам беча оагIув тIера дIадаккха',
 
 # Delete
-'deletepage' => 'ОагIув дIаяккха',
+'deletepage' => 'ОагIув дIаяьккха',
 'confirmdeletetext' => 'Оаш оагIувни (е сурти) барча дIадаккхар хьайийхай кха еррига хувцамий искар долама ковчера. 
 Дехар да, жоп дала, шоай из бокъонцахь де безам болаш да, шоай даьчоахь хургдолчоахь кхеташ долга, [[{{MediaWiki:Policy-url}}]] декъамачу Iоязадаь дола адаташ ца из деш долга.',
-'actioncomplete' => 'Дулархам баьб',
+'actioncomplete' => 'ДулархIам баьб',
 'actionfailed' => 'Оттам даьдац',
-'deletedtext' => '"$1" дIаяккха хиннай.
+'deletedtext' => '"$1" дIаяьккха хиннай.
 ТIехьара дIадаьккха дагарчена хьожаргволаш/хьожаргьйолаш, $2 хьажа.',
-'dellogpage' => 'ДIадакхара тептар',
+'dellogpage' => 'ДIадаккхара тептар',
 'deletecomment' => 'Бахьан:',
 'deleteotherreason' => 'Кхыдола бахьан/тIатохар:',
 'deletereasonotherlist' => 'Кхыдола бахьан',
 
 # Rollback
-'rollbacklink' => 'юхаяькха',
+'rollbacklink' => 'юхаяьккха',
 
 # Protect
 'protectlogpage' => 'Лорама тептар',
 'protectedarticle' => '"[[$1]]" оагIув лорам деж я',
-'modifiedarticleprotection' => '"[[$1]]" оагIувни лорама лагIа хувцаеннай',
+'modifiedarticleprotection' => '"[[$1]]" оагIувни лорама лагIа хувцаяьннай',
 'protectcomment' => 'Бахьан:',
 'protectexpiry' => 'Кхоачалуш латта:',
-'protect_expiry_invalid' => 'Чаккхабоала лорама харца ха',
-'protect_expiry_old' => 'Чаккхайоала ха - яха зама я.',
+'protect_expiry_invalid' => 'Чакхабоала лорама харца ха',
+'protect_expiry_old' => 'Чакхайоала ха - яха зама я.',
 'protect-text' => "'''$1''' укхаз шоана шоай оагIув лорамлагIа хувца a бIаргтасса a йийш хургья.",
-'protect-locked-access' => "Шун лархама йоазуви нидза кхоачаш бац оагIувни лорама лагIа хувца. '''$1''' оагIувни дIаоттамаш:",
+'protect-locked-access' => "Шун лархIама йоазуви нидза кхоачаш бац оагIувни лорама лагIа хувца. '''$1''' оагIувни дIаоттамаш:",
 'protect-cascadeon' => '{{PLURAL:$1|КIалхахь хьагойташ йола оагIувчу|КIалхахь хьагойташ йола оагIувнашчу}} ер оагIув чуяккха халарахь, лорам Iоттая я, хурхала лорам Iоттая я. Укх оагIувни лорама лагIа хувца йийш йолаш я, амма хурхала лорам хувцлургдац.',
 'protect-default' => 'Лорамза',
 'protect-fallback' => '"$1" пурам эша',
 'protect-level-autoconfirmed' => 'Керда а, дакъалаьцабоацачаьрахь а лораде',
 'protect-level-sysop' => 'Мазакулгалхо мара чувала бокъо яц',
 'protect-summary-cascade' => 'хурхала',
-'protect-expiring' => 'чаккхайоала',
-'protect-cascade' => 'Укх оагIувче чуяккха оагIуваш лорае (хурхала лорам)',
+'protect-expiring' => 'чакхайоала $1 (UTC)',
+'protect-cascade' => 'Укх оагIувач чуяьккха оагIуваш лорае (хурхала лорам)',
 'protect-cantedit' => 'Шун укх оагIувни лорама лагIа хувца мегаш дац, гIалатнийсдара шун бокъо йоацандаь.',
 'restriction-type' => 'Бокъонаш:',
 'restriction-level' => 'Чувоала лагIа:',
@@ -847,7 +870,7 @@ $messages = array(
 
 # Namespace form on various pages
 'namespace' => 'ЦIерий аренаш',
-'invert' => 'Харжар юхадакха',
+'invert' => 'Хьаржар юхадаккха',
 'blanknamespace' => '(Корта)',
 
 # Contributions
@@ -856,12 +879,12 @@ $messages = array(
 'mycontris' => 'Са къахьегам',
 'contribsub2' => '$1 ($2) баь болх',
 'uctop' => '(тIехьара)',
-'month' => 'Цхьа бутт хьалхагIа (кха хьалхагIа)',
-'year' => 'Цхьа шу хьалхагIа (кха хьалхагIа):',
+'month' => 'Цхьа бутт хьалхагIа (кхы хьалхагIа)',
+'year' => 'Цхьа шу хьалхагIа (кхы хьалхагIа):',
 
-'sp-contributions-newbies' => 'Керда даязья йоазоначера мара баь бола къахьегам ма хокха',
+'sp-contributions-newbies' => 'Керда даязья йоазоначера мара баь бола къахьегам ма хьокха',
 'sp-contributions-blocklog' => 'чIегаш',
-'sp-contributions-uploads' => 'чуяккхамаш',
+'sp-contributions-uploads' => 'чуяьккхамаш',
 'sp-contributions-logs' => 'тептараш',
 'sp-contributions-talk' => 'дувцам',
 'sp-contributions-search' => 'Къахьегама лахар',
@@ -876,13 +899,13 @@ $messages = array(
 'linkshere' => "ТIехьара оагIувнаш '''[[:$1]]''' тIа Iинкаш ю:",
 'nolinkshere' => "'''[[:$1]]''' оагIув тIа, кхыдола оагIувашкара Iинкаш йоацаш я",
 'isredirect' => 'дIа-хьа оагIув',
-'istemplate' => 'чудакхар',
+'istemplate' => 'чудаккхар',
 'isimage' => 'паьла Iинк',
 'whatlinkshere-prev' => '{{PLURAL:$1|хьалхайоагIа|хьалхайоагIараш}} $1',
 'whatlinkshere-next' => '{{PLURAL:$1|тIехьайоагIа|тIехьайоагIараш}} $1',
 'whatlinkshere-links' => '← Iинкаш',
-'whatlinkshere-hideredirs' => '$1 дIа-хьа чуяькхамаш',
-'whatlinkshere-hidetrans' => '$1 чуяькхамаш',
+'whatlinkshere-hideredirs' => '$1 дIа-хьа чуяьккхамаш',
+'whatlinkshere-hidetrans' => '$1 чуяьккхамаш',
 'whatlinkshere-hidelinks' => '$1 Iинкаш',
 'whatlinkshere-hideimages' => '$1 суртIинкаш',
 'whatlinkshere-filters' => 'ЦIенъераш',
@@ -898,7 +921,7 @@ $messages = array(
 'blocklogpage' => 'ЧIегаш тoха таптар',
 'blocklogentry' => '[[$1]] чIега белаб,  $2 $3 ха ялалца',
 'unblocklogentry' => '$1 юха яста я',
-'block-log-flags-nocreate' => 'Лархамий дагарчена цIи яккхар пурам янза я.',
+'block-log-flags-nocreate' => 'ЛархIамий дагарчена цIи яьккхар пурам янза я.',
 'blockme' => 'ЧIега бола сона',
 'proxyblocksuccess' => 'Хьадаьд.',
 
@@ -936,7 +959,7 @@ $messages = array(
 'movetalk' => 'МаIан чулоаца дувцама оагIувни цIи хувца',
 'movelogpage' => 'Хувцама тептар',
 'movereason' => 'Бахьан',
-'revertmove' => 'юхаяькха',
+'revertmove' => 'юхаяьккха',
 
 # Export
 'export' => 'ОагIувий эхфортам',
@@ -946,7 +969,7 @@ $messages = array(
 'allmessagesdefault' => 'Сатийна улла яздам',
 'allmessages-filter-all' => 'Дерригаш',
 'allmessages-language' => 'Мотт:',
-'allmessages-filter-submit' => 'Дехьавала',
+'allmessages-filter-submit' => 'Дехьавала/яла',
 
 # Thumbnails
 'thumbnail-more' => 'Хьадоккхаде',
@@ -958,20 +981,20 @@ $messages = array(
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Дакъалаьцархочунна оагIув',
 'tooltip-pt-mytalk' => 'Шун дувцамий оагIув',
-'tooltip-pt-preferences' => ' Шун оттамаш',
-'tooltip-pt-watchlist' => 'Ð\9eаÑ\88 Ñ\85Ñ\83вÑ\86амаÑ\88 Ñ\82Iа Ð±IаÑ\80глакÑ\85а Ð¾Ð°Ð³IÑ\83внаÑ\88а Ð´Ð°Ð³Ð°Ñ\80Ñ\87е',
+'tooltip-pt-preferences' => 'Шун оттамаш',
+'tooltip-pt-watchlist' => 'Ð\9eоагIÑ\83вна Ð´Ð°Ð³Ð°Ñ\80ле, Ñ\88о Ð±IаÑ\80галокÑ\85аÑ\88 Ð¹Ð¾Ð»Ð°',
 'tooltip-pt-mycontris' => 'Шун хувцамаш',
-'tooltip-pt-login' => 'УкÑ\85аза Ñ\85Ñ\8cай Ñ\86Iи Ð°Ñ\8cле Ñ\87Ñ\83вала/Ñ\87Ñ\83Ñ\8fла Ð¹Ð¸Ð¹Ñ\88а Ñ\8f, Ð°Ð¼Ð¼Ð° Ñ\87Ñ\83Ñ\86аваÑ\8cлаÑ\87а/Ñ\87Ñ\83Ñ\86аÑ\8fлаÑ\87а Ñ\85Iамма а дац',
+'tooltip-pt-login' => 'УкÑ\85аза Ñ\85Ñ\8cай Ñ\86Iи Ð°Ñ\8cле Ñ\87Ñ\83вала/Ñ\8fла Ð¹Ð¸Ñ\88а Ñ\8f, Ð°Ð¼Ð¼Ð° Ñ\87Ñ\83Ñ\86аваÑ\8cлаÑ\87а/Ñ\8fлаÑ\87а Ñ\85Iама а дац',
 'tooltip-pt-logout' => 'Аравала/яла',
-'tooltip-ca-talk' => 'Ð\9eагIÑ\83ва Ñ\87Ñ\83лоаÑ\86амий дувцам',
-'tooltip-ca-edit' => 'Ер оагIув хувца йийшйолаш я. Дехар да, Iалаш елаьх, хьалхе бIаргтассама оагIув тIа бIаргтасса.',
+'tooltip-ca-talk' => 'Ð\9eагIÑ\83вна Ñ\87Ñ\83лоаÑ\86аме дувцам',
+'tooltip-ca-edit' => 'Ер оагIув хувца йишйолаш я. Дехар да, Iалаш елаьх, хьалхе бIаргтассама оагIув тIа бIаргтасса.',
 'tooltip-ca-addsection' => 'Керда декъам хьаде',
 'tooltip-ca-viewsource' => 'Ер оагIув хувцамах лораяь я, амма шун цунна гIувамага хьажа бокъо я.',
 'tooltip-ca-history' => 'Укх оагIувни хувцама таптар',
 'tooltip-ca-protect' => 'Eр оагIув лорае',
 'tooltip-ca-delete' => 'Ер оагIув дIаяькха',
 'tooltip-ca-move' => 'Укх оагIува цIи хувца',
-'tooltip-ca-watch' => 'Ер оагIув теркам беча каьхата тIа тIаяькха',
+'tooltip-ca-watch' => 'Ер оагIув теркам беча каьхата тIа тIаяьккха',
 'tooltip-ca-unwatch' => 'Ер оагIув теркам беча каьхата тIара дIаяькха',
 'tooltip-search' => 'Цу тайпара дош лаха {{SITENAME}}',
 'tooltip-search-go' => 'Изза мо цӀи йолаш оагӀув тӀa дехьавала',
@@ -979,27 +1002,27 @@ $messages = array(
 'tooltip-p-logo' => 'Кертера оагIув тIа дехьавала',
 'tooltip-n-mainpage' => 'Кертера оагIув тIа дехьавала',
 'tooltip-n-mainpage-description' => 'Кертера оагIув тIа дехьавала',
-'tooltip-n-portal' => 'Хьахьоадайтамахь лаьца, хьа де йийшдар, фа а мичча а йоала',
-'tooltip-n-currentevents' => 'Ð¥IанзаÑ\80а Ñ\85оамий Ð´Ð°Ð³Ð°Ñ\80Ñ\87е',
+'tooltip-n-portal' => 'Хьахьоадайтамахь лаьца, хьа де йишдар, фу а мичча а йоала',
+'tooltip-n-currentevents' => 'Ð¥IанзаÑ\80а Ñ\85оаман Ð´Ð°Ð³Ð°Ñ\80ле',
 'tooltip-n-recentchanges' => 'ТӀехьара хувцамий дагарче',
 'tooltip-n-randompage' => 'Бе йоаца оагӀув ела',
 'tooltip-n-help' => 'Новкъостала моттиг',
-'tooltip-t-whatlinkshere' => 'Массайола оагIувий дагарче, укх оагIув тIа Iинкаш луш йола',
+'tooltip-t-whatlinkshere' => 'Массайола оагIувий дагарле, укх оагIув тIа Iинкаш луш йола',
 'tooltip-t-recentchangeslinked' => 'ОагIувнаш тIа тIехьара хувцамаш, укх оагIувнера Iинк яь йола',
 'tooltip-feed-rss' => 'Укх оагIувна RSSчу гойтар',
 'tooltip-feed-atom' => 'Укх оаг|увна Atomчу гойтар',
 'tooltip-t-contributions' => 'Укх дакъалаьцархочу хьийца йола оагIувнаш хьахьокха',
 'tooltip-t-emailuser' => 'Укх дакъалаьцархочоа зIы яхьийта',
-'tooltip-t-upload' => 'Паьлаш чуяькха',
+'tooltip-t-upload' => 'Паьлаш чуяьккха',
 'tooltip-t-specialpages' => 'ГIулакха оагIувний дагарчe',
-'tooltip-t-print' => 'УкÑ\85 Ð·Ð°Ñ\80ба Ð¾Ð°Ñ\83гIÑ\83вни Ð´Ð°Ð³Ð°Ñ\80Ñ\87е',
+'tooltip-t-print' => 'УкÑ\85 Ð¾Ð°Ñ\83гIÑ\83вна ÐºÐ°Ñ\8cÑ\85аÑ\82заÑ\80бане Ð´Ð¾Ñ\80жам',
 'tooltip-t-permalink' => 'Укх оагIув доржама даим латта Iинк',
 'tooltip-ca-nstab-main' => 'Йоазува чулоацам',
 'tooltip-ca-nstab-user' => 'Дакъалаьцархочунна ший оагIув',
 'tooltip-ca-nstab-special' => 'Ер гIулакха оагIув я, из хувца хьо бокъо йолаш вац/яц.',
 'tooltip-ca-nstab-project' => 'Хьахьоадайтама оагIув',
 'tooltip-ca-nstab-image' => 'Паьла оагIув',
-'tooltip-ca-nstab-template' => 'Ð\9aÑ\83Ñ\86кепа оагIув',
+'tooltip-ca-nstab-template' => 'ЧIабала оагIув',
 'tooltip-ca-nstab-category' => 'Цатега оагIув',
 'tooltip-minoredit' => 'Ер хувцар башха доаца санна белгалде',
 'tooltip-save' => 'Хувцамаш кходе',
@@ -1007,8 +1030,8 @@ $messages = array(
 'tooltip-diff' => 'Яздам тIа яь йола хувцамаш хьахьокха',
 'tooltip-compareselectedversions' => 'Укх оагIувни шин доржамаш тIа юкъера хувцамаш зе.',
 'tooltip-watch' => 'Ер оагIув теркам беча каьхата тIа яькха',
-'tooltip-rollback' => 'Ð\93IалaÑ\82нийÑ\81адаÑ\80о Ñ\82IеÑ\85Ñ\8cаÑ\80а Ñ\8fÑ\8c Ð¹Ð¾Ð»Ð° Ñ\85Ñ\83вÑ\86амаÑ\88, Ð¿Iелг Ñ\82оIоби Ð´IаÑ\8fÑ\8cкха.',
-'tooltip-undo' => 'ЯÑ\8c Ñ\85Ñ\83вÑ\86ам Ð´IаÑ\8fÑ\8cкÑ\85e, Ð±IаÑ\80гаÑ\82аÑ\81Ñ\81аÑ\80 Ñ\85Ñ\8cаÑ\85Ñ\8cокÑ\85а, ÐºÐ°Ñ\80а Ð´Ð°Ð»Ðµ, Ð´IаÑ\8fÑ\8cкха бахьан Iочуязаде моттигаца.',
+'tooltip-rollback' => 'Ð\93IалaÑ\82нийÑ\81адаÑ\80о Ñ\82IеÑ\85Ñ\8cаÑ\80а Ñ\8fÑ\8c Ð¹Ð¾Ð»Ð° Ñ\85Ñ\83вÑ\86амаÑ\88, Ð¿Iелг Ñ\82оIобе Ð´IаÑ\8fÑ\8cккха.',
+'tooltip-undo' => 'Ð\91аÑ\8c Ñ\85Ñ\83вÑ\86ам Ð´IабаÑ\8cккÑ\85e, Ð±IаÑ\80гаÑ\82аÑ\81Ñ\81ам Ñ\85Ñ\8cаÑ\85Ñ\8cокÑ\85а, ÐºÐ°Ñ\80а Ð´Ð°Ð»Ðµ, Ð´IаÑ\8fÑ\8cккха бахьан Iочуязаде моттигаца.',
 'tooltip-summary' => 'Лоаца чулоацам Iочуязаде',
 
 # Browsing diffs
@@ -1028,14 +1051,14 @@ $messages = array(
 # Bad image list
 'bad_image_list' => 'Бустам цу тайпара хила беза:
 
\94агаÑ\80ена Ñ\85Ñ\8cаÑ\80акÑ\8aаÑ\88 Ð¼Ð°Ñ\80а Ð»Ð¾Ð°Ñ\80Ñ\85аш хургьяц (укх тамагIалгацa * дувлашду мугIараш).
-МугIарена хьалхара Iинк, сурт Iоттае пурам доаца Iинка, хила еза. 
-Цу мугIар тIа тIехьайоагIа Iинкаш, арадаккхар мо лоархаш хургья, вешта аьлча, йоазувашка чуIоттаде мегаш дола сурт санна ларха мега.',
\94агаÑ\80лен Ñ\85Ñ\8cаÑ\80акÑ\8aаÑ\88 Ð¼Ð°Ñ\80а Ð»Ð¾Ð°Ñ\80Ñ\85|аш хургьяц (укх тамагIалгацa * дувлашду мугIараш).
+МугIарен хьалхара Iинк, сурт Iоттае пурам доаца Iинка, хила еза. 
+Цу мугIара тIехьайоагIа Iинкаш, арадаккхар мо лоарх|аш хургья, вешта аьлча, йоазувашка чуIоттаде мегаш дола сурт санна ларх|а мега.',
 
 # Metadata
 'metadata' => 'МетахIамаш',
 'metadata-help' => 'Паьлас чулоаца, кхыдола хIамаш, таьрахьа суртдоакхаргца е тIагIолладоакхаргца чудакхаш дола. Хьаяь паьл, гIалатахь мукъадаькха хинна дале, хьахьокхаш дола сурт, деррига хIамаш чулоацаргдац.',
-'metadata-expand' => 'Кхыдола хIамаш хьахокха',
+'metadata-expand' => 'Кхыдола хIамаш хьахьокха',
 'metadata-collapse' => 'Кхыдола хIамаш къайладаккха',
 'metadata-fields' => 'Укх дагарченгахь дагaрадаь метахIамаша суртий мугIаш, сурт оагIув тIа хьахьекха хургья, чуерзaяь метахIамашийца. Вож мугIанаш ха йоалаш къайла хургья.
 * make
@@ -1055,11 +1078,11 @@ $messages = array(
 # EXIF tags
 'exif-imagewidth' => 'Шерал',
 'exif-imagelength' => 'Лакхал',
-'exif-imagedescription' => 'СÑ\83Ñ\80Ñ\82и цIи',
+'exif-imagedescription' => 'СÑ\83Ñ\80Ñ\82а цIи',
 'exif-artist' => 'Яздархо',
 'exif-colorspace' => 'Басара аре',
-'exif-pixelydimension' => 'СÑ\83Ñ\80Ñ\82и шерал',
-'exif-pixelxdimension' => 'СÑ\83Ñ\80Ñ\82и лакхал',
+'exif-pixelydimension' => 'СÑ\83Ñ\80Ñ\82а шерал',
+'exif-pixelxdimension' => 'СÑ\83Ñ\80Ñ\82а лакхал',
 'exif-writer' => 'Яздама да',
 'exif-languagecode' => 'Мотт',
 'exif-iimcategory' => 'Цатег',
@@ -1068,18 +1091,18 @@ $messages = array(
 'exif-scenecapturetype-2' => 'Сурт',
 
 'exif-iimcategory-edu' => 'Дешар',
-'exif-iimcategory-evn' => 'Арена буне',
+'exif-iimcategory-evn' => 'Арен буне',
 'exif-iimcategory-hth' => 'Могар',
 'exif-iimcategory-hum' => 'Адамий искараш',
-'exif-iimcategory-rel' => 'Ð\94инеи Ñ\82еÑ\88аÑ\80еи',
-'exif-iimcategory-sci' => 'Iилмеи ÐºÑ\83лгболÑ\85еи',
+'exif-iimcategory-rel' => 'Ð\94ини Ñ\82еÑ\88аÑ\80и',
+'exif-iimcategory-sci' => 'Iилмаи ÐºÑ\83лгболÑ\85и',
 'exif-iimcategory-soi' => 'Сагий хаттараш',
 'exif-iimcategory-spo' => 'Нидзоамал',
-'exif-iimcategory-war' => 'ТIомаÑ\88, ÐºÑ\85овÑ\81амаÑ\88еи Ð»Ð°Ñ\82Ñ\82аÑ\80аÑ\88еи',
+'exif-iimcategory-war' => 'ТIемаÑ\88, ÐºÑ\85овÑ\81амаÑ\88и Ð»Ð°Ñ\82Ñ\82аÑ\80аÑ\88и',
 'exif-iimcategory-wea' => 'Хаоттам',
 
 # External editor support
-'edit-externally' => 'Йола болхоагIувца паьла гIалатахь мукъаяькха',
+'edit-externally' => 'Йола болхоагIувца паьла гIалатах мукъаяьккха',
 'edit-externally-help' => '(ма даррачунга хьажа [//www.mediawiki.org/wiki/Manual:External_editors хьаоттама кулгалхо])',
 
 # 'all' in various places, this might be different for inflected languages
@@ -1092,7 +1115,7 @@ $messages = array(
 'confirm_purge_button' => 'ХIаа',
 
 # Multipage image navigation
-'imgmultigo' => 'Дехьавала!',
+'imgmultigo' => 'Дехьавала/яла!',
 'imgmultigoto' => '$1 оагIув тIа дехьавала',
 
 # Table pager
@@ -1115,7 +1138,7 @@ $messages = array(
 # Special:FilePath
 'filepath' => 'Паьлачу никъ',
 'filepath-page' => 'Паьл:',
-'filepath-submit' => 'Дехьавала',
+'filepath-submit' => 'Дехьавала/яла',
 
 # Special:FileDuplicateSearch
 'fileduplicatesearch-filename' => 'ПаьлацIи:',
@@ -1153,11 +1176,11 @@ $messages = array(
 'compare-rev2' => '2. Доржам',
 
 # Database error messages
-'dberr-header' => 'УкÑ\85 Ð²Ð¸ÐºÐ¸Ñ\81 халонаш ловш латта',
+'dberr-header' => 'УкÑ\85 Ð¼Ð°Ñ\81Ñ\81ано халонаш ловш латта',
 
 # HTML forms
-'htmlform-submit' => 'ДIадахийта',
-'htmlform-reset' => 'Хувцамаш юхадакха',
+'htmlform-submit' => 'ДIадахьийта',
+'htmlform-reset' => 'Хувцамаш юхадаккха',
 'htmlform-selectorother-other' => 'Кхыдола',
 
 );
index b5eef99..3d8d8f7 100644 (file)
@@ -256,7 +256,7 @@ $messages = array(
 'tog-nocache' => 'Slökkva á flýtiminni vafrans',
 'tog-enotifwatchlistpages' => 'Senda mér tölvupóst þegar síðu eða skrá á vaktlistanum mínu er breytt',
 'tog-enotifusertalkpages' => 'Senda mér tölvupóst þegar notandaspjallinu mínu er breytt',
-'tog-enotifminoredits' => 'Senda mér einnig tölvupóst vegna minniháttar breytinga á síðum',
+'tog-enotifminoredits' => 'Senda mér einnig tölvupóst vegna minniháttar breytinga á síðum og skrám',
 'tog-enotifrevealaddr' => 'Gefa upp netfang mitt í tilkynningarpóstum',
 'tog-shownumberswatching' => 'Sýna fjölda vaktandi notenda',
 'tog-oldsig' => 'Núverandi undirskrift:',
@@ -496,6 +496,10 @@ Sjá [[Special:Version|útgáfusíðuna]].',
 'youhavenewmessages' => 'Þú hefur fengið $1 ($2).',
 'newmessageslink' => 'ný skilaboð',
 'newmessagesdifflink' => 'síðasta breyting',
+'youhavenewmessagesfromusers' => 'Þú hefur $1 frá {{PLURAL:$3|öðrum notanda|$3 notendum}} ($2)',
+'youhavenewmessagesmanyusers' => 'Þú hefur $1 frá mörgum notendum ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|ein|}} ný skilaboð',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|síðasta breyting|síðustu breytingar}} spjallsíðunnar',
 'youhavenewmessagesmulti' => 'Þín bíða ný skilaboð á $1',
 'editsection' => 'breyta',
 'editold' => 'breyta',
@@ -548,9 +552,9 @@ Sjá [[Special:Version|útgáfusíðuna]].',
 'dberrortext' => 'Málfræðivilla kom upp í gangagrnunsfyrirspurninni.
 Þetta gæti verið vegna villu í hugbúnaðinum.
 Síðasta gagnagrunnsfyrirspurnin var:
-<blockquote><tt>$1</tt></blockquote>
-úr aðgerðinni: „<tt>$2</tt>“.
-MySQL skilar villuboðanum „<tt>$3: $4</tt>“.',
+<blockquote><code>$1</code></blockquote>
+úr aðgerðinni: „<code>$2</code>".
+MySQL skilar villuboðunum „<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Málfræðivilla kom upp í gangagrnunsfyrirspurninni.
 Síðasta gagnagrunnsfyrirspurnin var:
 „$1“
@@ -603,10 +607,11 @@ Spurn: $2',
 'protectedpagetext' => 'Þessari síðu hefur verið læst til að koma í veg fyrir breytingar.',
 'viewsourcetext' => 'Þú getur skoðað og afritað kóða þessarar síðu:',
 'viewyourtext' => "Þú getur skoðað og afritað kóða '''breytinganna þinna''' yfir á þessa síðu:",
-'protectedinterface' => 'Þessi síða útvegar textann sem birtist í viðmóti hugbúnaðarins, og er læst til að koma í veg fyrir misnotkun.',
+'protectedinterface' => 'Þessi síða útvegar textann sem birtist í viðmóti hugbúnaðarins sem keyrir þessa síðu, og er læst til að koma í veg fyrir misnotkun.
+Til þess að bæta við eða breyta þýðingum fyrir öll wiki verkefni, vinsamlegast notaðu [//translatewiki.net/ translatewiki.net], staðfæringaverkefni MediaWiki',
 'editinginterface' => "'''Aðvörun:''' Þú ert að breyta síðu sem hefur að geyma texta fyrir notendaumhverfi hugbúnaðarins.
-Breytingar á þessari síðu munu hafa áhrif á notendaumhverfi annarra notenda.
-Fyrir þýðingar, gjörðu svo vel að nota [//translatewiki.net/wiki/Main_Page?setlang=is translatewiki.net], staðfæringverkefni MediaWiki.",
+Breytingar á þessari síðu munu hafa áhrif á notendaumhverfi annarra notenda á þessu vefsvæði.
+Til þess að bæta við eða breyta þýðingum fyrir öll wiki verkefni, vinsamlegast notaðu [//translatewiki.net/wiki/Main_Page?setlang=is translatewiki.net], staðfæringaverkefni MediaWiki.",
 'sqlhidden' => '(SQL-fyrirspurn falin)',
 'cascadeprotected' => 'Þessi síða hefur verið vernduð fyrir breytingum, vegna þess að hún er innifalin í eftirfarandi {{PLURAL:$1|síðu, sem er vernduð|síðum, sem eru verndaðar}} með „keðjuverndun“:
 $2',
@@ -888,9 +893,11 @@ Ef þú ert óþekktur notandi og finnst að óviðkomandi athugasemdum hafa ver
 'noarticletext' => 'Enginn texti er á þessari síðu enn sem komið er.
 Þú getur [[Special:Search/{{PAGENAME}}|leitað í öðrum síðum]],
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} leitað í tengdum skrám], eða [{{fullurl:{{FULLPAGENAME}}|action=edit}} breytt henni sjálfur]</span>.',
-'noarticletext-nopermission' => 'Enginn texti er á þessari síðu enn sem komið er.
-Þú getur [[Special:Search/{{PAGENAME}}|leitað í öðrum síðum]],
-eða <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} leitað í tengdum skrám]</span>.',
+'noarticletext-nopermission' => 'Það er enginn texti á þessari síðu eins og er.
+Þú getur [[Special:Search/{{PAGENAME}}|leitað að þessum titli]] í öðrum síðum, eða <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} leitað í tengdum skrám]</span>, en þú hefur ekki réttindi til þess að stofna þessa síðu.',
+'missing-revision' => 'Útgáfa #$1 síðunnar „{{PAGENAME}}" er ekki til.
+
+Þetta gerist oftast þegar úreld breytingarskrá tengir á síðu sem hefur verið eytt. Frekari upplýsingar eru í [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} eyðingarskránni].',
 'userpage-userdoesnotexist' => 'Notandaaðgangurinn „<nowiki>$1</nowiki>“ er ekki skráður.
 Gjörðu svo vel og athugaðu hvort að þú viljir skapa/breyta þessari síðu.',
 'userpage-userdoesnotexist-view' => 'Notandinn "$1" er ekki skráður.',
@@ -2888,14 +2895,15 @@ Vinsamlegast reyndu aftur.',
 'spambot_username' => 'MediaWiki amapósts hreinsun',
 'spam_reverting' => 'Tek aftur síðustu breytingu sem inniheldur ekki tengil á $1',
 'spam_blanking' => 'Allar útgáfur innihéldu tengla á $1, tæmi síðuna',
+'spam_deleting' => 'Allar útgáfur innihéldu tengla á $1, eyði síðunni',
 
 # Info page
 'pageinfo-title' => 'Upplýsingar um $1',
-'pageinfo-header-edits' => 'Breytingar',
+'pageinfo-header-edits' => 'Breytingarskrá',
 'pageinfo-views' => 'Fjöldi innlita',
-'pageinfo-watchers' => 'Fjöldi notenda',
-'pageinfo-edits' => 'Fjöldi breytinga',
-'pageinfo-authors' => 'Fjöldi einstakra höfunda',
+'pageinfo-watchers' => 'Fjöldi notenda, sem vakta síðuna',
+'pageinfo-edits' => 'Heildarfjöldi breytinga',
+'pageinfo-authors' => 'Heildarfjöldi einstakra höfunda',
 
 # Skin names
 'skinname-standard' => 'Sígilt',
@@ -3512,6 +3520,7 @@ MediaWiki er útgefin í þeirri von að hann sé gagnlegur, en ÁN ALLRAR ÁBYR
 'version-software' => 'Uppsettur hugbúnaður',
 'version-software-product' => 'Vara',
 'version-software-version' => 'Útgáfa',
+'version-entrypoints-header-url' => 'vefslóð',
 
 # Special:FilePath
 'filepath' => 'Slóð skráar',
@@ -3674,10 +3683,11 @@ Ef ekki, þá getur þú notað einfalt eyðublað hér fyrir neðan. Athugasemd
 'api-error-emptypage' => 'Stofnun nýrra, tómra síðna er óheimil.',
 'api-error-fetchfileerror' => 'Innri villa: Mistókst að sækja skránna.',
 'api-error-fileexists-forbidden' => 'Skrá með nafninu "$1" er þegar til og ekki er hægt að yfirskrifa hana.',
+'api-error-fileexists-shared-forbidden' => 'Skrá með nafninu "$1" er þegar til á miðlæga gagnaþjóninum og ekki er hægt að yfirskrifa hana.',
 'api-error-file-too-large' => 'Skráin sem þú valdir er of stór.',
 'api-error-filename-tooshort' => 'Skráarnafnið er of stutt',
 'api-error-filetype-banned' => 'Þessi gerð skráar er bönnuð.',
-'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|er ekki leifileg skráargerð|eru ekki leifilegar skráargerðir}}. {{PLURAL:$3|Leyfileg skráargerð er|Leyfilegar skráargerðir eru}} $2.',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|er óleyfileg skráargerð|eru óleyfilegar skráargerðir}}. {{PLURAL:$3|Leyfð skráargerð er|Leyfðar skráargerðir eru}} $2.',
 'api-error-filetype-missing' => 'Skráin hefur enga skráarendingu.',
 'api-error-hookaborted' => 'Hætt var við breytinguna sem þú reyndir að gera með viðbót.',
 'api-error-http' => 'Innri villa: Get ekki tengst vefþjón.',
index a97ec76..3243623 100644 (file)
@@ -645,9 +645,10 @@ Query: $2',
 'protectedpagetext' => 'Questa pagina è stata protetta per impedirne la modifica.',
 'viewsourcetext' => 'È possibile visualizzare e copiare il codice sorgente di questa pagina:',
 'viewyourtext' => "È possibile visualizzare e copiare il codice sorgente delle '''tue modifiche''' a questa pagina:",
-'protectedinterface' => "Questa pagina contiene un elemento che fa parte dell'interfaccia utente del software; è quindi protetta per evitare possibili abusi.",
-'editinginterface' => "'''Attenzione:''' Il testo di questa pagina fa parte dell'interfaccia utente del sito. Tutte le modifiche apportate a questa pagina si riflettono sui messaggi visualizzati per tutti gli utenti.
-Per le traduzioni, considera la possibilità di usare [//translatewiki.net/wiki/Main_Page?setlang=it translatewiki.net], il progetto MediaWiki per la localizzazione.",
+'protectedinterface' => "Questa pagina contiene un elemento che fa parte dell'interfaccia utente del software di questo sito ed è protetta per evitare possibili abusi.
+Per aggiungere o modificare traduzioni per tutti i wiki usare [//translatewiki.net/ translatewiki.net], il progetto di localizzazione di MediaWiki,",
+'editinginterface' => "'''Attenzione:''' Il testo di questa pagina fa parte dell'interfaccia utente del sito. Tutte le modifiche apportate a questa pagina si riflettono sui messaggi visualizzati per tutti gli utenti su questo wiki.
+Per aggiungere o modificare le traduzioni valide su tutti i wiki, considera la possibilità di usare [//translatewiki.net/wiki/Main_Page?setlang=it translatewiki.net], il progetto MediaWiki per la localizzazione.",
 'sqlhidden' => '(la query SQL è stata nascosta)',
 'cascadeprotected' => 'Su questa pagina non è possibile effettuare modifiche perché è stata inclusa {{PLURAL:$1|nella pagina indicata di seguito, che è stata protetta|nelle pagine indicate di seguito, che sono state protette}} selezionando la protezione "ricorsiva":
 $2',
@@ -916,7 +917,7 @@ Se vuoi creare la pagina ora, basta cominciare a scrivere il testo nella casella
 Se il collegamento è stato aperto per errore, è sufficiente fare clic sul pulsante '''Indietro''' del proprio browser.",
 'anontalkpagetext' => "----''Questa è la pagina di discussione di un utente anonimo, che non ha ancora creato un accesso o comunque non lo usa. Per identificarlo è quindi necessario usare il numero del suo indirizzo IP. Gli indirizzi IP possono però essere condivisi da più utenti. Se sei un utente anonimo e ritieni che i commenti presenti in questa pagina non si riferiscano a te, [[Special:UserLogin/signup|crea un nuovo accesso]] o [[Special:UserLogin|entra con quello che già hai]] per evitare di essere confuso con altri utenti anonimi in futuro.''",
 'noarticletext' => 'In questo momento la pagina richiesta è vuota. È possibile [[Special:Search/{{PAGENAME}}|cercare questo titolo]] nelle altre pagine del sito, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercare nei registri correlati] oppure [{{fullurl:{{FULLPAGENAME}}|action=edit}} modificare la pagina ora]</span>.',
-'noarticletext-nopermission' => 'In questo momento la pagina richiesta è vuota. È possibile [[Special:Search/{{PAGENAME}}|cercare questo titolo]] nelle altre pagine del sito o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercare nei registri correlati]</span>.',
+'noarticletext-nopermission' => 'In questo momento la pagina richiesta è vuota. È possibile [[Special:Search/{{PAGENAME}}|cercare questo titolo]] nelle altre pagine del sito o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} cercare nei registri correlati]</span>, ma non hai i permessi per creare questa pagina.',
 'missing-revision' => 'La revisione #$1 della pagina "{{PAGENAME}}" non esiste.
 
 Questo si verifica solitamente seguendo un collegamento a una pagina cancellata, in una cronologia non aggiornata.
@@ -1167,9 +1168,10 @@ $1",
 'revdelete-no-change' => "'''Attenzione:''' l'oggetto con data $1 $2 aveva già le impostazioni di visibilità richieste.",
 'revdelete-concurrent-change' => "Impossibile modificare l'oggetto con data $1 $2 in quanto il suo stato è stato modificato da un altro utente mentre se ne tentava la modifica.",
 'revdelete-only-restricted' => "Errore nel nascondere l'oggetto datato $1, $2: non è possibile nascondere gli oggetti alla vista degli amministratori senza selezionare almeno un'altra delle opzioni di rimozione.",
-'revdelete-reason-dropdown' => '*Motivazioni più comuni per la cancellazione
+'revdelete-reason-dropdown' => '* Motivazioni più comuni per la cancellazione
 ** Violazione di copyright
-** Informazioni personali inappropriate
+** Commenti o informazioni personali inappropriate
+** Nome utente inappropriato
 ** Informazione potenzialmente diffamatoria',
 'revdelete-otherreason' => 'Altra motivazione o motivazione aggiuntiva:',
 'revdelete-reasonotherlist' => 'Altra motivazione',
@@ -1362,7 +1364,7 @@ I dettagli possono essere trovati nel [{{fullurl:{{#Special:Log}}/delete|page={{
 'timezoneregion-indian' => 'Oceano Indiano',
 'timezoneregion-pacific' => 'Oceano Pacifico',
 'allowemail' => 'Abilita la ricezione di messaggi e-mail da altri utenti',
-'prefs-searchoptions' => 'Opzioni di ricerca',
+'prefs-searchoptions' => 'Ricerca',
 'prefs-namespaces' => 'Namespace',
 'defaultns' => 'In caso contrario, cerca in questi namespace:',
 'default' => 'predefinito',
@@ -1775,7 +1777,7 @@ $1',
 'backend-fail-internal' => 'Si è verificato un errore sconosciuto nel backend di memoria "$1".',
 'backend-fail-contenttype' => 'Impossibile determinare la tipologia del file da archiviare in "$1".',
 'backend-fail-batchsize' => 'Il backend di memoria ha programmato una serie di $1 {{PLURAL:$1|operazione|operazioni}} su file; il limite è di $2 {{PLURAL:$2|operazione|operazioni}}.',
-'backend-fail-usable' => 'Impossibile scrivere il file $1 a causa di autorizzazione insufficienti o directory/recipienti mancanti.',
+'backend-fail-usable' => 'Impossibile leggere o scrivere il file "$1" a causa di autorizzazione insufficienti o directory/contenitori mancanti.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Impossibile connettersi al database journal per l\'archiviazione back-end "$1".',
@@ -3017,7 +3019,7 @@ Tutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log
 'pageinfo-authors' => 'Numero totale di autori diversi',
 'pageinfo-recent-edits' => 'Numero di modifiche recenti (negli ultimi $1)',
 'pageinfo-recent-authors' => 'Numero di autori diversi recenti',
-'pageinfo-restriction' => 'Protezione della pagina (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Protezione della pagina ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Parola magica|Parole magiche}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria nascosta|Categorie nascoste}} ($1)',
 'pageinfo-templates' => 'Template {{PLURAL:$1|incluso|inclusi}}  ($1)',
index f85531f..a2ef485 100644 (file)
@@ -483,7 +483,7 @@ $messages = array(
 'hidden-category-category' => '隠しカテゴリ',
 'category-subcat-count' => '{{PLURAL:$2|このカテゴリには以下の下位カテゴリのみが含まれています。|このカテゴリには $2 下位カテゴリが含まれており、そのうち以下の {{PLURAL:$1|$1 下位カテゴリ}}を表示しています。}}',
 'category-subcat-count-limited' => 'このカテゴリには以下の{{PLURAL:$1|下位カテゴリ|&#32;$1 下位カテゴリ}}が含まれています。',
-'category-article-count' => '{{PLURAL:$2|このカテゴリには以下のページのみが含まれています。|このカテゴリには $2 ページが含まれており、そのうち以下の {{PLURAL:$1|$1 ページ}}を表示しています。}}',
+'category-article-count' => '{{PLURAL:$2|このカテゴリには以下のページのみが含まれています。|このカテゴリには $2 ページが含まれており、そのうち以下の $1 ページを表示しています。}}',
 'category-article-count-limited' => '現在のカテゴリには以下の{{PLURAL:$1|ページ|&#32;$1 ページ}}が含まれています。',
 'category-file-count' => '{{PLURAL:$2|このカテゴリには以下のファイルのみが含まれています。|このカテゴリには $2 ファイルが含まれており、そのうち以下の {{PLURAL:$1|$1 ファイル}}を表示しています。}}',
 'category-file-count-limited' => '現在のカテゴリには以下の{{PLURAL:$1|ファイル|&#32;$1 ファイル}}が含まれています。',
@@ -578,7 +578,7 @@ $messages = array(
 'categorypage' => 'カテゴリのページを表示',
 'viewtalkpage' => '議論を表示',
 'otherlanguages' => '他言語版',
-'redirectedfrom' => '($1から転送)',
+'redirectedfrom' => '($1から転送)',
 'redirectpagesub' => 'リダイレクトページ',
 'lastmodifiedat' => 'このページが最後に更新されたのは $1 $2 です。',
 'viewcount' => 'このページは {{PLURAL:$1|$1 回}}アクセスされました。',
@@ -625,7 +625,7 @@ $1',
 
 'ok' => 'OK',
 'retrievedfrom' => '「$1」から取得',
-'youhavenewmessages' => '$1があります($2)。',
+'youhavenewmessages' => '$1があります ($2)。',
 'newmessageslink' => '新着メッセージ',
 'newmessagesdifflink' => '最終更新の差分',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|他の利用者|$3 人の利用者}}からの$1があります ($2)。',
@@ -683,14 +683,14 @@ URL を間違って入力したか、正しくないリンクをたどった可
 # General errors
 'error' => 'エラー',
 'databaseerror' => 'データベース エラー',
-'dberrortext' => 'データベースクエリーの構文エラーが発生しました。
+'dberrortext' => 'データベース クエリの構文エラーが発生しました。
 ソフトウェアにバグがある可能性があります。
-最後に実行を試みたクエリー:
+最後に実行を試みたクエリ:
 <blockquote><code>$1</code></blockquote>
 (関数「<code>$2</code>」内)。
 データベースはエラー「<samp>$3:$4</samp>」を返しました。',
-'dberrortextcl' => 'データベースクエリーの構文エラーが発生しました。
-最後に実行を試みたクエリー:
+'dberrortextcl' => 'データベース クエリの構文エラーが発生しました。
+最後に実行を試みたクエリ:
 「$1」
 (関数「$2」内)。
 データベースはエラー「$3:$4」を返しました',
@@ -700,14 +700,14 @@ URL を間違って入力したか、正しくないリンクをたどった可
 'readonlytext' => 'データベースは現在、新しいページの追加や編集を受け付けない「ロック状態」になっています。これはおそらくデータベースの定期メンテナンスのためで、メンテナンス終了後は正常な状態に復帰します。
 
 データベースをロックした管理者による説明は以下の通りです:$1',
-'missing-article' => 'æ±\82ã\82\81ã\82\89れたページ「$1」$2 の本文がデータベース内で見つかりませんでした。
+'missing-article' => 'æ\8c\87å®\9aã\81\95れたページ「$1」$2 の本文がデータベース内で見つかりませんでした。
 
 通常、削除されたページの版への古い差分表示や固定リンクをたどった際に、このようなことが起きます。
 
 それ以外の操作でこのメッセージが表示された場合、ソフトウェアのバグである可能性があります。
-[[Special:ListUsers/sysop|管理者]]までそのURLを添えてお知らせください。',
-'missingarticle-rev' => '(版番号:$1)',
-'missingarticle-diff' => '(差分:$1、$2)',
+[[Special:ListUsers/sysop|管理者]]までその URL を添えてお知らせください。',
+'missingarticle-rev' => '(版番号: $1)',
+'missingarticle-diff' => '(差分: $1, $2)',
 'readonly_lag' => 'データベースはスレーブのデータベースサーバーがマスターに同期するまで自動的にロックされています',
 'internalerror' => '内部エラー',
 'internalerror_info' => '内部エラー:$1',
@@ -734,9 +734,9 @@ URL を間違って入力したか、正しくないリンクをたどった可
 'perfcachedts' => '以下のデータはキャッシュされており、最終更新日時は $1 です。最大 $4 {{PLURAL:$4|件の結果}}がキャッシュされます。',
 'querypage-no-updates' => 'ページの更新は無効になっています。
 以下のデータの更新は現在行われていません。',
-'wrong_wfQuery_params' => 'wfQuery()に正しくないパラメーターが渡されました<br />
-関数$1<br />
-クエリー:$2',
+'wrong_wfQuery_params' => 'wfQuery() のパラメーターが無効です<br />
+関数$1<br />
+クエリ$2',
 'viewsource' => 'ソースを表示',
 'viewsource-title' => '$1のソースを表示',
 'actionthrottled' => '操作が速度規制されました',
@@ -745,11 +745,12 @@ URL を間違って入力したか、正しくないリンクをたどった可
 'protectedpagetext' => 'このページは編集できないように保護されています。',
 'viewsourcetext' => 'このページのソースの閲覧やコピーができます:',
 'viewyourtext' => "このページへの'''あなたの編集'''のソースの閲覧やコピーができます:",
-'protectedinterface' => 'このページはソフトウェアのインターフェイスに使用されるテキストが保存されており、いたずらなどの防止のために保護されています。',
-'editinginterface' => "'''警告:'''ソフトウェアのインターフェイスの文章として使用しているページを編集しています。
-このページの変更は他の利用者のユーザーインターフェイスの外観に影響します。
-翻訳する場合、MediaWiki のローカライズプロジェクト [//translatewiki.net/wiki/Main_Page?setlang=ja translatewiki.net] の使用を検討してください。",
-'sqlhidden' => '(SQLクエリー非表示)',
+'protectedinterface' => 'このページにはこのウィキのソフトウェアのインターフェイスに使用されるテキストが保存されており、いたずらなどの防止のために保護されています。
+すべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/ translatewiki.net] を使用してください。',
+'editinginterface' => "'''警告:''' ソフトウェアのインターフェイスに使用されるのテキストのページを編集しています。
+このページを変更すると、このウィキの他の利用者のユーザーインターフェイスの外観に影響します。
+すべてのウィキに対して翻訳を追加/変更する場合は、MediaWiki の地域化プロジェクト [//translatewiki.net/wiki/Main_Page?setlang=ja translatewiki.net] を使用してください。",
+'sqlhidden' => '(SQL クエリ非表示)',
 'cascadeprotected' => 'このページは、「カスケード保護」が指定された状態で保護されている以下の{{PLURAL:$1|ページ|ページ群}}で読み込まれているため、編集できないように保護されています:
 $2',
 'namespaceprotected' => "'''$1'''名前空間にあるページを編集する権限がありません。",
@@ -784,7 +785,7 @@ $2',
 'securelogin-stick-https' => 'ログイン後にHTTPS接続を維持',
 'yourdomainname' => 'ドメイン:',
 'password-change-forbidden' => 'このウィキではパスワードを変更できません。',
-'externaldberror' => '外部の認証データベースでエラーが発生したか、または外部アカウント情報の更新が許可されていません。',
+'externaldberror' => '認証データベースでエラーが発生した、または外部アカウントの更新が許可されていません。',
 'login' => 'ログイン',
 'nav-login-createaccount' => 'ログインまたはアカウント作成',
 'loginprompt' => '{{SITENAME}}にログインするにはCookieを有効にする必要があります。',
@@ -835,7 +836,7 @@ Cookieを有効にしていることを確認して、このページを再読
 'password-login-forbidden' => 'この利用者名とパスワードの使用は禁止されています。',
 'mailmypassword' => '新しいパスワードをメールで送信',
 'passwordremindertitle' => '{{SITENAME}}の仮パスワード通知',
-'passwordremindertext' => '誰か(おそらくあなた)がIPアドレス$1から{{SITENAME}}($4)のログイン用パスワードの再発行を申請しました。
+'passwordremindertext' => '誰か(おそらくあなた)がIPアドレス$1から{{SITENAME}} ($4) のログイン用パスワードの再発行を申請しました。
 利用者「$2」の仮パスワードが作成され「$3」に設定されました。
 もしあなたがこの申請をしたのであれば、ログインして新しいパスワードを決めてください。
 この仮パスワードは {{PLURAL:$5|$5 日間}}で有効期限が切れます。
@@ -1048,7 +1049,12 @@ IP アドレスは複数の利用者で共有されている場合がありま
 他のページ内で[[Special:Search/{{PAGENAME}}|このページ名を検索]]するか、
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 関連する記録を検索]するか、
 [{{fullurl:{{FULLPAGENAME}}|action=edit}} このページを編集]</span>することができます。',
-'noarticletext-nopermission' => '現在このページには内容がありません。他のページに含まれる[[Special:Search/{{PAGENAME}}|このページ名を検索]]するか、もしくは<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 関連記録を検索]</span>することができます。',
+'noarticletext-nopermission' => '現在このページには内容がありません。
+他のページ内で[[Special:Search/{{PAGENAME}}|このページ名を検索]]するか、<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 関連記録を検索]</span>することができますが、あなたにはこのページを作成する権限はありません。',
+'missing-revision' => '「{{PAGENAME}}」というページの版番号 $1 の版は存在しません。
+
+通常、削除されたページの版への古い差分表示や固定リンクをたどった際に、このようなことが起きます。 
+詳細は[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 削除記録]を参照してください。',
 'userpage-userdoesnotexist' => '「$1」という利用者アカウントは登録されていません。
 このページの作成/編集が適切かご確認ください。',
 'userpage-userdoesnotexist-view' => '利用者アカウント「$1」は登録されていません。',
@@ -1188,7 +1194,7 @@ IP アドレスは複数の利用者で共有されている場合がありま
 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。',
 'undo-failure' => '中間の版での編集と競合したため、取り消せませんでした。',
 'undo-norev' => '取り消そうとした編集が存在しないか削除済みのため取り消せませんでした。',
-'undo-summary' => '[[Special:Contributions/$2|$2]]([[User talk:$2|トーク]])による第$1版を取り消し',
+'undo-summary' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|トーク]]) による版 $1 を取り消し',
 
 # Account creation failure
 'cantcreateaccounttitle' => 'アカウントを作成できません',
@@ -1315,7 +1321,8 @@ $1",
 'revdelete-concurrent-change' => '$1$2の項目の変更に失敗しました:あなたが変更しようとしている間に、他の誰かが変更したようです。
 記録を確認してください。',
 'revdelete-only-restricted' => '$1$2の項目の版指定削除に失敗しました:他の閲覧レベルの選択肢のうちどれかをさらに選択しなければ、管理者から項目を秘匿できません。',
-'revdelete-reason-dropdown' => '*よくある削除理由
+'revdelete-reason-dropdown' => '
+*よくある削除理由
 ** 著作権侵害
 ** 名誉毀損のおそれ
 ** 非公開個人情報',
@@ -1371,6 +1378,10 @@ $1",
 'editundo' => '取り消し',
 'diff-multi' => '({{PLURAL:$2|$2人の利用者}}による、{{PLURAL:$1|間の$1版}}が非表示)',
 'diff-multi-manyusers' => '({{PLURAL:$2|$2人を超える利用者}}による、{{PLURAL:$1|間の$1版}}が非表示)',
+'difference-missing-revision' => '指定された{{PLURAL:$2|$2版}}の差分 ($1) が見つかりませんでした。
+
+通常、削除されたページの版への古い差分表示や固定リンクをたどった際に、このようなことが起きます。 
+詳細は[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 削除記録]を参照してください。',
 
 # Search results
 'searchresults' => '検索結果',
@@ -1407,8 +1418,8 @@ $1",
 'search-result-size' => '$1({{PLURAL:$2|$2単語}})',
 'search-result-category-size' => '{{PLURAL:$1|$1件}}({{PLURAL:$2|$2下位カテゴリ}}、{{PLURAL:$3|$3ファイル}})',
 'search-result-score' => '関連度:$1%',
-'search-redirect' => '($1からのリダイレクト)',
-'search-section' => '($1の節)',
+'search-redirect' => '($1からのリダイレクト)',
+'search-section' => '($1の節)',
 'search-suggest' => 'もしかして:$1',
 'search-interwiki-caption' => '姉妹プロジェクト',
 'search-interwiki-default' => '$1の結果:',
@@ -1420,18 +1431,18 @@ $1",
 'searcheverything-enable' => 'すべての名前空間を検索',
 'searchrelated' => '関連',
 'searchall' => 'すべて',
-'showingresults' => "'''$2'''件目以降の{{PLURAL:$1|'''$1'''件の結果}}を表示しています。",
-'showingresultsnum' => "'''$2'''件目以降の{{PLURAL:$3|'''$3'''件の結果}}を表示しています。",
-'showingresultsheader' => "ã\80\8c'''$4'''ã\80\8dã\81«å¯¾ã\81\99ã\82\8b{{PLURAL:$5|'''$3'''件中ã\81®'''$1'''件ã\81®çµ\90æ\9e\9c|'''$3'''件中ã\81®'''$1'''件ç\9b®ã\81\8bã\82\89'''$2'''件ç\9b®ã\81®çµ\90æ\9e\9c}}",
+'showingresults' => "'''$2''' 件目以降の {{PLURAL:$1|'''$1''' 件の結果}}を表示しています。",
+'showingresultsnum' => "'''$2''' 件目以降の {{PLURAL:$3|'''$3''' 件の結果}}を表示しています。",
+'showingresultsheader' => "ã\80\8c'''$4'''ã\80\8dã\81®æ¤\9cç´¢çµ\90æ\9e\9c {{PLURAL:$5|'''$3''' ä»¶ä¸­ã\81® '''$1''' ä»¶ç\9b®|'''$3''' ä»¶ä¸­ã\81® '''$1''' ä»¶ç\9b®ã\81\8bã\82\89 '''$2''' ä»¶ç\9b®}}",
 'nonefound' => "'''注意''':既定では一部の名前空間のみを検索します。
 ''all:''を前に付けると、すべて(トークページやテンプレートなどを含む)を対象にできます。検索する名前空間を前に付けることもできます。",
 'search-nonefound' => '問い合わせに合致する検索結果はありませんでした。',
 'powersearch' => '高度な検索',
 'powersearch-legend' => '高度な検索',
-'powersearch-ns' => '名前空間を指定して検索',
-'powersearch-redir' => 'リダイレクトを表示',
-'powersearch-field' => '検索対象',
-'powersearch-togglelabel' => 'チェックを入れる',
+'powersearch-ns' => '名前空間を指定して検索:',
+'powersearch-redir' => '転送ページを含める',
+'powersearch-field' => '検索対象',
+'powersearch-togglelabel' => 'チェックを入れる:',
 'powersearch-toggleall' => 'すべて',
 'powersearch-togglenone' => 'すべて外す',
 'search-external' => '外部検索',
@@ -1499,7 +1510,7 @@ $1",
 'localtime' => 'ローカルの時刻:',
 'timezoneuseserverdefault' => 'ウィキの既定を使用 ($1)',
 'timezoneuseoffset' => 'その他(時差を指定)',
-'timezoneoffset' => '時差¹',
+'timezoneoffset' => '時差¹:',
 'servertime' => 'サーバーの時刻:',
 'guesstimezone' => 'ブラウザーの設定から入力',
 'timezoneregion-africa' => 'アフリカ',
@@ -1513,7 +1524,7 @@ $1",
 'timezoneregion-indian' => 'インド洋',
 'timezoneregion-pacific' => '太平洋',
 'allowemail' => '他の利用者からのメールを受け取る',
-'prefs-searchoptions' => '検索設定',
+'prefs-searchoptions' => '検索',
 'prefs-namespaces' => '名前空間',
 'defaultns' => '指定した名前空間のみを検索:',
 'default' => '既定',
@@ -1629,7 +1640,7 @@ $1 {{PLURAL:$1|文字}}以下である必要があります。',
 'right-move-subpages' => '下位ページを含めてページを移動',
 'right-move-rootuserpages' => '利用者ページ本体を移動',
 'right-movefile' => 'ファイルを移動',
-'right-suppressredirect' => 'リダイレクトを残さずにページを移動',
+'right-suppressredirect' => '転送ページを作成せずにページを移動',
 'right-upload' => 'ファイルをアップロード',
 'right-reupload' => '既存のファイルに上書き',
 'right-reupload-own' => '自分自身がアップロードした既存のファイルに上書き',
@@ -1954,6 +1965,7 @@ $1',
 'backend-fail-internal' => 'ストレージバックエンド「$1」内で不明なエラーが発生しました。',
 'backend-fail-contenttype' => '「$1」に保存するコンテンツの種類が判断できませんでした。',
 'backend-fail-batchsize' => 'ストレージバックエンドは $1 件のファイル{{PLURAL:$1|操作}}のバッチを与えられました; 上限は $2 件の{{PLURAL:$2|操作}}です。',
+'backend-fail-usable' => '権限が不足している、またはディレクトリ/コンテナーがないため、ファイル「$1」の読み取り/書き込みができません。',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'ストレージバックエンド「$1」のジャーナルデータベースに接続できません。',
@@ -1968,6 +1980,7 @@ $1',
 'lockmanager-fail-releaselock' => '「$1」用のロックを解放できませんでした。',
 'lockmanager-fail-db-bucket' => 'バケット $1 で十分な数のロックデータベースに接触できませんでした。',
 'lockmanager-fail-db-release' => 'データベース $1 上のロックを解放できませんでした。',
+'lockmanager-fail-svr-acquire' => 'サーバー $1 上でロックを取得できませんでした。',
 'lockmanager-fail-svr-release' => 'サーバー $1 上のロックを解放できませんでした。',
 
 # ZipDirectoryReader
@@ -2029,7 +2042,7 @@ URLが正しいものであり、ウェブサイトが稼働していること
 'license' => 'ライセンス:',
 'license-header' => 'ライセンス',
 'nolicense' => '選択なし',
-'license-nopreview' => '(プレビューはありません)',
+'license-nopreview' => '(プレビューはありません)',
 'upload_source_url' => '(有効かつ一般に公開されているURL)',
 'upload_source_file' => '(あなたのコンピューター上のファイル)',
 
@@ -2132,7 +2145,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'unwatchedpages' => 'ウォッチされていないページ',
 
 # List redirects
-'listredirects' => 'リダイレクトの一覧',
+'listredirects' => '転送ページの一覧',
 
 # Unused templates
 'unusedtemplates' => '使われていないテンプレート',
@@ -2146,7 +2159,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 
 # Random redirect
 'randomredirect' => 'おまかせリダイレクト',
-'randomredirect-nopages' => '「$1」名前空間にリダイレクトはありません。',
+'randomredirect-nopages' => '「$1」名前空間に転送ページはありません。',
 
 # Statistics
 'statistics' => '統計',
@@ -2157,7 +2170,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'statistics-header-hooks' => 'その他の統計',
 'statistics-articles' => '記事数',
 'statistics-pages' => '総ページ数',
-'statistics-pages-desc' => 'ã\82¦ã\82£ã\82­å\86\85ã\81®ã\80\81ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\80\81ã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81ªã\81©ã\82\92å\90«ã\82\80すべてのページです。',
+'statistics-pages-desc' => 'ã\83\88ã\83¼ã\82¯ã\83\9aã\83¼ã\82¸ã\80\81転é\80\81ã\83\9aã\83¼ã\82¸ã\81ªã\81©ã\82\92å\90«ã\82\80ã\80\81ã\82¦ã\82£ã\82­å\86\85ã\81®すべてのページです。',
 'statistics-files' => 'アップロードされたファイル数',
 'statistics-edits' => '{{SITENAME}}の開設以降の編集回数の総計',
 'statistics-edits-average' => '1ページあたりの編集回数',
@@ -2185,7 +2198,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'double-redirect-fixer' => '転送修正係',
 
 'brokenredirects' => '迷子のリダイレクト',
-'brokenredirectstext' => '以ä¸\8bã\81®ã\83\9aã\83¼ã\82¸ã\81¯ã\80\81å­\98å\9c¨ã\81\97ã\81ªã\81\84ã\83\9aã\83¼ã\82¸ã\81¸ã\81®ã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81§ã\81\99ï¼\9a',
+'brokenredirectstext' => '以ä¸\8bã\81¯ã\80\81å­\98å\9c¨ã\81\97ã\81ªã\81\84ã\83\9aã\83¼ã\82¸ã\81¸ã\81®ã\83ªã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\81®ä¸\80覧ã\81§ã\81\99:',
 'brokenredirects-edit' => '編集',
 'brokenredirects-delete' => '削除',
 
@@ -2206,7 +2219,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'nviews' => '$1回の閲覧',
 'nimagelinks' => '$1ページで使用',
 'ntransclusions' => '$1ページで使用',
-'specialpage-empty' => '合致するものがありません。',
+'specialpage-empty' => '該当するものはありません。',
 'lonelypages' => '孤立しているページ',
 'lonelypagestext' => '以下のページは、{{SITENAME}}の他のページからリンクも参照読み込みもされていません。',
 'uncategorizedpages' => 'カテゴリ分類されていないページ',
@@ -2218,7 +2231,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'popularpages' => '人気のページ',
 'wantedcategories' => 'カテゴリページが存在しないカテゴリ',
 'wantedpages' => 'ページが存在しないリンク',
-'wantedpages-badtitle' => 'çµ\90æ\9e\9cã\81«æ­£ã\81\97ã\81\8fã\81ªã\81\84ã\83\9aã\83¼ã\82¸å\90\8dã\81\8cå\90«ã\81¾ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99ï¼\9a$1',
+'wantedpages-badtitle' => 'çµ\90æ\9e\9cã\81\8cã\80\81ç\84¡å\8a¹ã\81ªã\83\9aã\83¼ã\82¸å\90\8dã\82\92å\90«ã\82\93ã\81§ã\81\84ã\81¾ã\81\99$1',
 'wantedfiles' => 'ファイル情報ページが存在しないファイル',
 'wantedfiletext-cat' => '以下のファイルは使用されていますが存在しません。外部リポジトリ由来のファイルは、存在していてもここに列挙される場合があります。その場合は<del>取り消し線</del>が付きます。さらに、存在しないファイルを埋め込んでいるページは[[:$1]]に列挙されます。',
 'wantedfiletext-nocat' => '以下のファイルは使用されていますが存在しません。外部リポジトリ由来のファイルは、存在していてもここに列挙される場合があります。その場合は<del>取り消し線</del>が付きます。',
@@ -2276,7 +2289,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 
 # Special:Log
 'specialloguserlabel' => '実行者:',
-'speciallogtitlelabel' => '対象(ページまたは利用者):',
+'speciallogtitlelabel' => '対象 (ページまたは利用者):',
 'log' => '記録',
 'all-logs-page' => 'すべての公開記録',
 'alllogstext' => '{{SITENAME}}の取得できる記録をまとめて表示しています。
@@ -2288,13 +2301,13 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 # Special:AllPages
 'allpages' => '全ページ',
 'alphaindexline' => '$1から$2まで',
-'nextpage' => '次のページ($1)',
-'prevpage' => '前のページ($1)',
+'nextpage' => '次のページ ($1)',
+'prevpage' => '前のページ ($1)',
 'allpagesfrom' => '最初に表示するページ:',
 'allpagesto' => '最後に表示するページ:',
 'allarticles' => '全ページ',
-'allinnamespace' => '全ページ($1名前空間)',
-'allnotinnamespace' => '全ページ($1名前空間を除く)',
+'allinnamespace' => '全ページ ($1名前空間)',
+'allnotinnamespace' => '全ページ ($1名前空間以外)',
 'allpagesprev' => '前へ',
 'allpagesnext' => '次へ',
 'allpagessubmit' => '表示',
@@ -2405,7 +2418,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'emailccsubject' => '$1に送信したメールの控え:$2',
 'emailsent' => 'メールを送信しました',
 'emailsenttext' => 'メールを送信しました。',
-'emailuserfooter' => 'このメールは$1から$2へ、{{SITENAME}}の「利用者にメールを送信」機能でお送りしました。',
+'emailuserfooter' => 'このメールは$1から$2へ、{{SITENAME}}の「利用者にメールを送信」機能で送信されました。',
 
 # User Messenger
 'usermessage-summary' => 'システムメッセージを残す。',
@@ -2433,7 +2446,7 @@ contenttype/subtypeの形式で入力してください(例:<code>image/jpeg
 'watchnochange' => 'ウォッチリストに登録しているページで、指定期間内に編集されたものはありません。',
 'watchlist-details' => 'ウォッチリストには {{PLURAL:$1|$1 ページ}}が登録されています(トークページを除く)。',
 'wlheader-enotif' => '* メール通知が有効になっています',
-'wlheader-showupdated' => "* 最後に訪問したあとに変更されたページは、'''太字'''で表示されます",
+'wlheader-showupdated' => "* 最終訪問以降に変更されたページは、'''太字'''で表示されます",
 'watchmethod-recent' => '最近の更新内のウォッチされているページを確認中',
 'watchmethod-list' => 'ウォッチされているページ内の最近の更新を確認中',
 'watchlistcontains' => 'ウォッチリストには {{PLURAL:$1|$1 ページ}}が登録されています。',
@@ -2674,15 +2687,15 @@ $1',
 'tooltip-invert' => '選択した名前空間(チェックされている場合は、関連付けられた名前空間も)のページの変更を非表示にするには、このボックスにチェックを入れる',
 'namespace_association' => '対応付けられた名前空間',
 'tooltip-namespace_association' => '選択した名前空間に関連付けられているトークページまたは対象の名前空間も含めるには、このボックスにチェックを入れる',
-'blanknamespace' => '(標準)',
+'blanknamespace' => '(標準)',
 
 # Contributions
 'contributions' => '利用者の投稿記録',
 'contributions-title' => '$1の投稿記録',
 'mycontris' => '自分の投稿記録',
-'contribsub2' => '利用者:$1($2)',
+'contribsub2' => '利用者: $1 ($2)',
 'nocontribs' => 'これらの条件に一致する変更は見つかりませんでした。',
-'uctop' => '(最新)',
+'uctop' => '(最新)',
 'month' => 'これ以前の月:',
 'year' => 'これ以前の年:',
 
@@ -2717,7 +2730,7 @@ $1',
 'whatlinkshere-prev' => '{{PLURAL:$1|前|前の$1件}}',
 'whatlinkshere-next' => '{{PLURAL:$1|次|次の$1件}}',
 'whatlinkshere-links' => '← リンク',
-'whatlinkshere-hideredirs' => 'リダイレクトを$1',
+'whatlinkshere-hideredirs' => '転送ページを$1',
 'whatlinkshere-hidetrans' => '参照読み込みを$1',
 'whatlinkshere-hidelinks' => 'リンクを$1',
 'whatlinkshere-hideimages' => '画像リンクを$1',
@@ -2780,12 +2793,12 @@ $1',
 'ipblocklist' => 'ブロックされている利用者',
 'ipblocklist-legend' => 'ブロックされている利用者を検索',
 'blocklist-userblocks' => 'アカウントのブロックを非表示',
-'blocklist-tempblocks' => 'æ\9c\89æ\9c\9fブロックを非表示',
-'blocklist-addressblocks' => '単一IPのブロックを非表示',
+'blocklist-tempblocks' => 'æ\9c\9fé\99\90ä»\98ã\81\8dブロックを非表示',
+'blocklist-addressblocks' => '単一 IP のブロックを非表示',
 'blocklist-rangeblocks' => '範囲ブロックを非表示',
-'blocklist-timestamp' => 'æ\99\82å\88»å\8d°',
+'blocklist-timestamp' => 'æ\97¥æ\99\82',
 'blocklist-target' => '対象',
-'blocklist-expiry' => '期限',
+'blocklist-expiry' => 'æ\9c\89å\8a¹æ\9c\9fé\99\90',
 'blocklist-by' => 'ブロックした管理者',
 'blocklist-params' => 'ブロックのパラメーター',
 'blocklist-reason' => '理由',
@@ -2794,7 +2807,7 @@ $1',
 'ipblocklist-otherblocks' => 'その他の{{PLURAL:$1|ブロック}}',
 'infiniteblock' => '無期限',
 'expiringblock' => '$1$2に解除',
-'anononlyblock' => '匿名のみ',
+'anononlyblock' => '匿名利用者のみ',
 'noautoblockblock' => '自動ブロック無効',
 'createaccountblock' => 'アカウント作成のブロック',
 'emailblock' => 'メール送信のブロック',
@@ -2892,10 +2905,10 @@ hideuser権限を持っていないため、この利用者のブロックを閲
 よく閲覧されるページや、他の多くのページからリンクされているページを移動すると予期しない結果が起こるかもしれません。ページの移動に伴う影響をよく考えてから踏み切るようにしてください。",
 'movepagetext-noredirectfixer' => "下のフォームを使用すると、ページ名を変更でき、そのページの履歴も変更先に移動できます。
 移動元のページは移動先への転送ページになります。
-自動的な修正を選択しない場合は、[[Special:DoubleRedirects|二重リダイレクト]]や[[Special:BrokenRedirects|迷子のリダイレクト]]を確認する必要があります。
+自動的な修正を選択しない場合は、[[Special:DoubleRedirects|二重転送]]や[[Special:BrokenRedirects|迷子の転送ページ]]を確認する必要があります。
 つながるべき場所にリンクがつながるよう維持するのは移動した人の責任です。
 
-移動先が既に存在する場合は、そのページが空またはリダイレクトで、かつ過去の版を持たない場合を除いて移動'''できません'''。
+移動先が既に存在する場合は、そのページが空または転送ページで、かつ過去の版を持たない場合を除いて移動'''できません'''。
 つまり、間違えてページ名を変更した場合には元に戻せます。また移動によって既存のページを上書きしてしまうことはありません。
 
 '''警告!'''
@@ -2919,8 +2932,8 @@ hideuser権限を持っていないため、この利用者のブロックを閲
 'movepagebtn' => 'ページを移動',
 'pagemovedsub' => '移動に成功しました',
 'movepage-moved' => "'''「$1」は「$2」へ移動されました'''",
-'movepage-moved-redirect' => 'リダイレクトが作成されました。',
-'movepage-moved-noredirect' => 'リダイレクトは作成されませんでした。',
+'movepage-moved-redirect' => '転送ページを作成しました。',
+'movepage-moved-noredirect' => '転送ページを作成できませんでした。',
 'articleexists' => '指定された移動先には既にページが存在するか、名前が不適切です。
 別の名前を選択してください。',
 'cantmove-titleprotected' => '新しいページ名が作成保護されているため、この場所にページを移動できません',
@@ -2928,8 +2941,8 @@ hideuser権限を持っていないため、この利用者のブロックを閲
 手動で統合してください。'''",
 'movedto' => '移動先:',
 'movetalk' => '付随するトークページも移動',
-'move-subpages' => '下位ページも移動($1 件まで)',
-'move-talk-subpages' => 'トークページの下位ページも移動($1 件まで)',
+'move-subpages' => '下位ページも移動 ($1 件まで)',
+'move-talk-subpages' => 'トークページの下位ページも移動 ($1 件まで)',
 'movepage-page-exists' => 'ページ「$1」は既に存在するため、自動的な上書きはできませんでした。',
 'movepage-page-moved' => 'ページ「$1」は「$2」に移動しました。',
 'movepage-page-unmoved' => 'ページ「$1」は「$2」に移動できませんでした。',
@@ -2959,7 +2972,7 @@ hideuser権限を持っていないため、この利用者のブロックを閲
 'imagetypemismatch' => '新しいファイルの拡張子がファイルのタイプと一致していません',
 'imageinvalidfilename' => '対象ファイル名が無効です',
 'fix-double-redirects' => 'このページへのリダイレクトがあればそのリダイレクトを修正',
-'move-leave-redirect' => '移動元にリダイレクトを作成する',
+'move-leave-redirect' => '移動元に転送ページを作成する',
 'protectedpagemovewarning' => "'''警告:'''このページは保護されているため、管理者権限を持つ利用者のみが移動できます。
 参考として以下に最後の記録を表示します:",
 'semiprotectedpagemovewarning' => "'''注意:'''このページは保護されているため、登録利用者のみが移動できます。
@@ -3060,7 +3073,7 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 'import-parse-failure' => 'XMLの取り込み構文解析に失敗しました',
 'import-noarticle' => '取り込むページがありません!',
 'import-nonewrevisions' => 'すべての版は以前に取り込み済みです。',
-'xml-error-string' => '$1、$2行の$3文字目($4バイト目):$5',
+'xml-error-string' => '$1、$2 行の $3 文字目 ($4バイト目): $5',
 'import-upload' => 'XMLデータをアップロード',
 'import-token-mismatch' => 'セッションデータを損失しました。
 もう一度試してください。',
@@ -3150,8 +3163,8 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 'tooltip-ca-nstab-category' => 'カテゴリページを閲覧',
 'tooltip-minoredit' => 'この編集に細部の変更の印を付ける',
 'tooltip-save' => '変更を保存する',
-'tooltip-preview' => '変更をプレビューで確認できます。保存前に使用してください!',
-'tooltip-diff' => '文章中で変更した箇所を表示する',
+'tooltip-preview' => '変更内容をプレビューで確認できます。保存前に使用してください!',
+'tooltip-diff' => '文章への変更箇所を表示する',
 'tooltip-compareselectedversions' => '選択した2つの版の差分を表示する',
 'tooltip-watch' => 'このページをウォッチリストに追加する',
 'tooltip-watchlistedit-normal-submit' => 'ページを除去する',
@@ -3248,7 +3261,8 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 'pageinfo-edits' => '総編集回数',
 'pageinfo-authors' => '総投稿者数',
 'pageinfo-recent-edits' => '最近の編集回数 (過去 $1)',
-'pageinfo-restriction' => 'ページ保護 (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-recent-authors' => '最近の投稿者数',
+'pageinfo-restriction' => 'ページ保護 ({{lcfirst:$1}})',
 'pageinfo-magic-words' => 'マジック {{PLURAL:$1|ワード}} ($1)',
 'pageinfo-hidden-categories' => '隠し{{PLURAL:$1|カテゴリ}} ($1)',
 'pageinfo-templates' => '参照読み込みされた{{PLURAL:$1|テンプレート}} ($1)',
@@ -3281,7 +3295,7 @@ MediaWiki 全般のローカライズ(地域化)に貢献したい場合は
 'log-show-hide-patrol' => '巡回記録を$1',
 
 # Image deletion
-'deletedrevision' => '古い版$1を削除しました',
+'deletedrevision' => '古い版 $1 を削除しました',
 'filedeleteerror-short' => 'ファイル削除エラー:$1',
 'filedeleteerror-long' => 'ファイルの削除中にエラーが発生しました:
 
@@ -3326,7 +3340,7 @@ $1',
 'newimages-summary' => 'この特別ページでは、最近アップロードされたファイルを表示します。',
 'newimages-legend' => '絞り込み',
 'newimages-label' => 'ファイル名(またはその一部):',
-'showhidebots' => '(ボットを$1)',
+'showhidebots' => '(ボットを$1)',
 'noimages' => '表示できるものがありません。',
 'ilsubmit' => '検索',
 'bydate' => '日付順',
@@ -3460,7 +3474,7 @@ Variants for Chinese language
 'exif-compressedbitsperpixel' => '画像圧縮モード',
 'exif-pixelydimension' => '実効画像の幅',
 'exif-pixelxdimension' => '実効画像の高さ',
-'exif-usercomment' => 'ユーザコメント',
+'exif-usercomment' => 'ã\83¦ã\83¼ã\82¶ã\83¼ ã\82³ã\83¡ã\83³ã\83\88',
 'exif-relatedsoundfile' => '関連音声ファイル',
 'exif-datetimeoriginal' => '原画像データの生成日時',
 'exif-datetimedigitized' => 'デジタルデータの作成日時',
@@ -3947,7 +3961,7 @@ $5
 # Auto-summaries
 'autosumm-blank' => 'ページの白紙化',
 'autosumm-replace' => '内容を「$1」で置換',
-'autoredircomment' => '[[$1]]へのリダイレクト',
+'autoredircomment' => '[[$1]]への転送ページ',
 'autosumm-new' => 'ページの作成:「$1」',
 
 # Size units
@@ -4189,9 +4203,9 @@ MediaWikiは、有用であることを期待して配布されていますが
 'htmlform-select-badoption' => '指定した値は有効な選択肢ではありません。',
 'htmlform-int-invalid' => '指定した値は整数ではありません。',
 'htmlform-float-invalid' => '指定した値は数値ではありません。',
-'htmlform-int-toolow' => '指定した値は$1の最小値未満です',
-'htmlform-int-toohigh' => '指定した値は$1の最大値を超えています',
-'htmlform-required' => 'この値は必です',
+'htmlform-int-toolow' => '指定した値は、最小値 $1 より小さい値です',
+'htmlform-int-toohigh' => '指定した値は、最大値 $1 を超えています',
+'htmlform-required' => 'この値は必です',
 'htmlform-submit' => '送信',
 'htmlform-reset' => '変更を取り消す',
 'htmlform-selectorother-other' => 'その他',
@@ -4224,8 +4238,8 @@ MediaWikiは、有用であることを期待して配布されていますが
 'logentry-move-move-noredirect' => '$1 がページ「$3」を「$4」に、リダイレクトを残さずに移動しました',
 'logentry-move-move_redir' => '$1 がページ「$3」をリダイレクトの「$4」に移動しました',
 'logentry-move-move_redir-noredirect' => '$1 がページ「$3」をリダイレクトの「$4」に、リダイレクトを残さずに移動しました',
-'logentry-patrol-patrol' => '$1 がページ「$3」の版 $4 をパトロール済みとしました',
-'logentry-patrol-patrol-auto' => '$1 が自動的にページ「$3」の版 $4 をパトロール済みとしました',
+'logentry-patrol-patrol' => '$1 がページ「$3」の版 $4 を巡回済みとしました',
+'logentry-patrol-patrol-auto' => '$1 が自動的にページ「$3」の版 $4 を巡回済みとしました',
 'logentry-newusers-newusers' => '$1 が利用者アカウントを作成しました',
 'logentry-newusers-create' => '$1 が利用者アカウントを作成しました',
 'logentry-newusers-create2' => '$1 が利用者アカウント $3 を作成しました',
index 9393fac..83aa23e 100644 (file)
@@ -554,8 +554,10 @@ $1',
 'protectedpagetext' => 'ეს გვერდი დაბლოკილია რედაქტირებისთვის.',
 'viewsourcetext' => 'თქვენ შეგიძლიათ ნახოთ ამ გვერდის საწყისი ფაილი და მისი ასლი შექმნათ:',
 'viewyourtext' => "თქვენ შეგიძლიათ იხილოთ და დააკოპიროთ  '''თქვენი რედაქტირებების''' საწყისი ტექსტი ამ გვერდზე:",
-'protectedinterface' => 'ეს გვერდი პროგრამის ინტერფეისის ნაწილია და დაცულია ვანდალიზმის აღკვეთის მიზნით.',
-'editinginterface' => "'''ყურადღება:''' თქვენ რედაქტორობთ გვერდს, რომელიც პროგრამის ინტერფეისის ტექსტს შეიცავს. ამ გვერდზე განხორციელებული რედაქტირება გამოიწვევს სხვა მომხმარებელთა სამუშაო ინტერფეისის შეცვლასაც. თარგმანისათვის უმჯობესია გამოიყენოთ [//translatewiki.net/wiki/Main_Page?setlang=ka translatewiki.net], მედიავიკის ლოკალიზაციის პროექტი.",
+'protectedinterface' => 'ეს გვერდი წარმოადგენს ტექსტურ ინტერფეისს პროგრამული უზრუნველყოფისათვის და დაცულია ვანდალიზმის აღკვეთის მიზნით.',
+'editinginterface' => "'''ყურადღება:''' თქვენ რედაქტორობთ გვერდს, რომელიც პროგრამის ინტერფეისის ტექსტს შეიცავს. 
+ამ გვერდზე განხორციელებული რედაქტირება გამოიწვევს ამ ვიკის სხვა მომხმარებელთა სამუშაო ინტერფეისის შეცვლასაც. 
+იმისათვის, რომ დაამატოთ ან შეცვალოთ თარგმანები ყველა ვიკიში გთხოვთ, გამოიყენოთ მედიავიკის ლოკალიზაციის პროექტი [//translatewiki.net/ translatewiki.net].",
 'sqlhidden' => '(SQL მოთხოვნა გაუქმებულია)',
 'cascadeprotected' => 'ეს გვერდი რედაქტირებისგან დაცულია, რადგან იგი ჩართულია შემდეგ {{PLURAL:$1|გვერდში, რომლის |გვერდებში, რომელთა}} დასაცავადაც ჩართულია პარამეტრი "იერარქიული":
 $2',
@@ -937,7 +939,7 @@ $2
 'sectioneditnotsupported-text' => 'სექციის რედაქტირება გათიშულია ამ გვერდისთვის',
 'permissionserrors' => 'ნებართვის შეცდომა',
 'permissionserrorstext' => 'თქვენ არ გაქვთ ამის გაკეთების უფლება, შემდეგი {{PLURAL:$1|მიზეზის|მიზეზების}} გამო:',
-'permissionserrorstext-withaction' => 'თქვენ არ გაქვთ ამ მოქმედების - $2 განხორციელების ნებართვა შემდეგი $1 მიზეზის გამო:',
+'permissionserrorstext-withaction' => 'თქვენ არ გაქვთ ამ მოქმედების - „$2“ განხორციელების ნებართვა შემდეგი {{PLURAL:$1|მიზეზის|მიზეზის}} გამო:',
 'recreate-moveddeleted-warn' => "'''გაფრთხილება: თქვენ ხელახლა ქმნით გვერდს, რომელიც ადრე წაიშალა.'''
 
 გთხოვთ დაფიქრდეთ, მისაღები არის თუ არა ამ გვერდის რედაქტირების გაგრძელება.
@@ -974,6 +976,7 @@ $2
 'expansion-depth-exceeded-warning' => 'გვერდზე გადამეტებულია ჩადგმების ზღვარი',
 'parser-unstrip-loop-warning' => 'აღმოჩენილია ციკლური ბმული',
 'parser-unstrip-recursion-limit' => 'გადამეტებულია რეკურსიის ზღვარი ($1)',
+'converter-manual-rule-error' => 'შეცდომა ენის ხელით გარდაქმნის წესში',
 
 # "Undo" feature
 'undo-success' => 'რედაქტირების გაუქმება შესაძლებელია. გთხოვთ შეამოწმოთ განსხვავება ქვევით, რათა დარწმუნდეთ, რომ ეს ის არის რაც თქვენ გსურთ, შემდეგ კი შეინახეთ ცვლილებები რათა დაასრულოთ რედაქტირების გაუქმება.',
@@ -1110,8 +1113,8 @@ $1",
 'revdelete-reason-dropdown' => '*წაშლის გავრცელებული მიზეზები
 ** საავტორო უფლებების დარღვევა
 ** მიუღებელი პირადი ინფორმაცია
-** á\83\9eá\83\9dá\83¢á\83\94á\83\9cá\83ªá\83\98á\83£á\83 á\83\90á\83\93 á\83¦á\83\98á\83 á\83¡á\83\94á\83\91á\83\98á\83¡ á\83¨á\83\94á\83\9bá\83\9aá\83\90á\83®á\83\95á\83\94á\83\9aá\83\98 á\83\98á\83\9cá\83¤á\83\9dá\83 á\83\9bá\83\90á\83ªá\83\98á\83\90
-** á\83£á\83ªá\83\94á\83\9cá\83\96á\83£á\83 á\83\9d á\83¡á\83\98á\83¢á\83§á\83\95á\83\94á\83\91á\83\98á\83¡ á\83¨á\83\94á\83\9bá\83ªá\83\95á\83\94á\83\9aá\83\98 á\83¢á\83\94á\83¥á\83¡á\83¢á\83\98',
+** á\83\9bá\83\98á\83£á\83¦á\83\94á\83\91á\83\94á\83\9aá\83\98 á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\9aá\83\98á\83¡ á\83¡á\83\90á\83®á\83\94á\83\9aá\83\98
+** á\83\9eá\83\9dá\83¢á\83\94á\83\9cá\83ªá\83\98á\83£á\83 á\83\90á\83\93 á\83¦á\83\98á\83 á\83¡á\83\94á\83\91á\83\98á\83¡ á\83¨á\83\94á\83\9bá\83\9aá\83\90á\83®á\83\95á\83\94á\83\9aá\83\98 á\83\98á\83\9cá\83¤á\83\9dá\83 á\83\9bá\83\90á\83ªá\83\98á\83\90',
 'revdelete-otherreason' => 'სხვა/დამატებითი მიზეზი:',
 'revdelete-reasonotherlist' => 'სხვა მიზეზი',
 'revdelete-edit-reasonlist' => 'წაშლის მიზეზების რედაქტირება',
@@ -1716,7 +1719,7 @@ $1',
 'backend-fail-internal' => '"$1" საცავში მოხდა დაუდგენელი შეცდომა.',
 'backend-fail-contenttype' => 'ფაილის შემადგენლობის ტიპის დადგენა ვერ მოხერხდა, "$1"-ში შესანახად.',
 'backend-fail-batchsize' => 'საცავმა მიიღო {{PLURAL:$1|ფაილის ოპერაციის|ფაილების ოპერაციების}} ბლოკი $1-დან, შეზღუდვა შეადგენს $2 {{PLURAL:$1|ოპერაციას}}.',
-'backend-fail-usable' => 'Не удалось записать файлფაილი $1 ჩაწერა ვერ მოხერხდა უფლებების უკმარისობის ან საჭირო საქაღალდეების არქონის გამო.',
+'backend-fail-usable' => 'ფაილი $1 წაკითხვა ან ჩაწერა ვერ მოხერხდა უფლებების უკმარისობის ან საჭირო საქაღალდეების არქონის გამო.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'ჟურნალის მონაცემთა ბაზებთან დაკავშირება "$1" მონაცემთა შესანახად ვერ მოხერხდა.',
@@ -2013,7 +2016,7 @@ $1',
 'usercreated' => '{{GENDER:$3|შექმნილია}} $2-ზე $1-ში',
 'newpages' => 'ახალი გვერდები',
 'newpages-username' => 'მომხმარებლის სახელი:',
-'ancientpages' => 'á\83®á\83\90á\83\9cá\83\93á\83\90á\83\96á\83\9bá\83£á\83\9aი გვერდები',
+'ancientpages' => 'á\83£á\83«á\83\95á\83\94á\83\9aá\83\94á\83¡ი გვერდები',
 'move' => 'გადატანა',
 'movethispage' => 'ამ გვერდის გადატანა',
 'unusedimagestext' => 'ეს ფაილი არ გამოიყენება არც-ერთ გვერდზე.
@@ -2025,7 +2028,7 @@ $1',
 'nopagetitle' => 'ამგვარი სამიზნე გვერდი არ არსებობს',
 'nopagetext' => 'მოცემული სამიზნო გვერდი არ არის მიითებული.',
 'pager-newer-n' => '{{PLURAL:$1|უახლესი 1|უახლესი $1}}',
-'pager-older-n' => '{{PLURAL:$1|á\83®á\83\90á\83\9cá\83\93á\83\90á\83\96á\83\9bá\83£á\83\9aá\83\98 1|á\83®á\83\90á\83\9cá\83\93á\83\90á\83\96á\83\9bá\83£ლი $1}}',
+'pager-older-n' => '{{PLURAL:$1|á\83£á\83¤á\83 á\83\9d á\83«á\83\95á\83\94á\83\9aá\83\98 1|á\83£á\83¤á\83 á\83\9d á\83«á\83\95á\83\94ლი $1}}',
 'suppress' => 'დამალვა',
 'querypage-disabled' => 'ეს სპეცგვერდი გამორთულია წარმადობის გასაზრდელად.',
 
@@ -2105,7 +2108,7 @@ $1',
 # Special:ActiveUsers
 'activeusers' => 'აქტიურ მომხმარებელთა სია',
 'activeusers-intro' => 'ეს არის მომხმარებელთა სია, რომელთაც აქვს წვლილი უკანასკნელი $1 {{PLURAL:$1|დღის|დღის}} განმავლობაში.',
-'activeusers-count' => '$1 {{PLURAL:$1|á\83ªá\83\95á\83\98á\83\9aá\83\94á\83\91á\83\90\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\90}} {{PLURAL:$2|$3 á\83\93á\83¦á\83\94|$3 á\83\93á\83¦á\83\98á\83¡|$3 á\83\93á\83¦á\83\94á\83\94á\83\91ის}} განმავლობაში.',
+'activeusers-count' => '$1 {{PLURAL:$1|á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\90\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\90}} {{PLURAL:$2|$3 á\83\93á\83¦á\83\94|$3 á\83\93á\83¦ის}} განმავლობაში.',
 'activeusers-from' => 'მომხმარებელთა ჩვენება, დაწყებული:',
 'activeusers-hidebots' => 'რობოტების დამალვა',
 'activeusers-hidesysops' => 'ადმინისტრატორების დამალვა',
@@ -2311,7 +2314,7 @@ $UNWATCHURL
 'protectlogpage' => 'დაცვის ისტორია',
 'protectlogtext' => 'ქვემოთ წარმოდგენილია გვერდის დაცვის დონის ცვლილებების სია. 
 იხილეთ ასევე [[Special:ProtectedPages|დაცული გვერდების სია]] ამ მომენტისთვის.',
-'protectedarticle' => 'დაცულია „[[$1]]“',
+'protectedarticle' => 'დაცულია გვერდი: „[[$1]]“',
 'modifiedarticleprotection' => 'შეცვლილია დაცვის დონე გვერდისთვის „[[$1]]“',
 'unprotectedarticle' => '„[[$1]]“-დან დაცვა მოხსნილია',
 'movedarticleprotection' => 'დაცვის პარამეტრების გადატანა გვერდიდან „[[$2]]“ გვერდზე „[[$1]]“',
@@ -2351,9 +2354,9 @@ $UNWATCHURL
 'protect-otherreason-op' => 'სხვა/დამატებითი მიზეზი',
 'protect-dropdown' => '* დაცვის ტიპიური მიზეზები
 ** გადაჭარბებული ვანდალიზმი
-** სპამი
+** á\83\92á\83\90á\83\93á\83\90á\83­á\83\90á\83 á\83\91á\83\94á\83\91á\83£á\83\9aá\83\98 á\83¡á\83\9eá\83\90á\83\9bá\83\98
 ** რედაქტირებათა ომი
-** á\83\9eá\83\9dá\83\9eá\83£á\83\9aá\83\90á\83 á\83£á\83\9aá\83\98 გვერდი',
+** á\83\9bá\83\90á\83¦á\83\90á\83\9aá\83\98 á\83 á\83\98á\83¡á\83\99á\83\98á\83¡ გვერდი',
 'protect-edit-reasonlist' => 'დაცვის მიზეზთა რედაქტირება',
 'protect-expiry-options' => '1 საათი:1 hour,1 დღე:1 day,1 კვირა:1 week,2 კვირა:2 weeks,1 თვე:1 month,3 თვე:3 months,6 თვე:6 months,1 წელი:1 year,განუსაზღვრელი ვადით:infinite',
 'restriction-type' => 'უფლება',
@@ -2883,7 +2886,7 @@ $1',
 'tooltip-ca-nstab-help' => 'იხილეთ დახმარების გვერდი',
 'tooltip-ca-nstab-category' => 'გვერდის კატეგორიის ჩვენება',
 'tooltip-minoredit' => 'მონიშნე როგორც მცირე რედაქტირება [alt-i]',
-'tooltip-save' => 'á\83\93á\83\90á\83\90á\83\9bá\83\90á\83®á\83¡á\83\9dá\83\95á\83 á\83\94 á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\94á\83\91á\83\98',
+'tooltip-save' => 'á\83\97á\83¥á\83\95á\83\94á\83\9cá\83\98 á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\94á\83\91á\83\98á\83¡ á\83¨á\83\94á\83\9cá\83\90á\83®á\83\95á\83\90',
 'tooltip-preview' => 'წინასწარ გადახედე ცვლილებებს, გთხოვთ გამოიყენოთ ეს შენახვამდე! [alt-p]',
 'tooltip-diff' => 'ტექსტში შეტანილი ცვლილებების ჩვენება. [alt-v]',
 'tooltip-compareselectedversions' => 'იხილეთ ამ გვერდის  ორ შერჩეულ ვერსიას შორის განსხვავებები.',
@@ -2952,18 +2955,23 @@ $1',
 'pageinfo-length' => 'გვერდის სიგრძე (ბაიტებში)',
 'pageinfo-article-id' => 'გვერდის ID',
 'pageinfo-robot-policy' => 'საძიებო სისტემის სტატუსი',
+'pageinfo-robot-index' => 'ინდექსირდება',
+'pageinfo-robot-noindex' => 'არ ინდექსირდება',
 'pageinfo-views' => 'ხილვების რაოდენობა',
 'pageinfo-watchers' => 'გვერდის დამკვირვებელთა რაოდენობა',
 'pageinfo-redirects-name' => 'გადამისამართება ამ გვერდზე',
 'pageinfo-redirects-value' => '$1',
 'pageinfo-subpages-name' => 'ამ გვერდის ქვეგვერდები',
+'pageinfo-subpages-value' => '$1($2 {{PLURAL:$2|გადამისამართება|გადამისამართება}}; $3 {{PLURAL:$3|ჩვეულებრივი|ჩვეულებრივი}})',
 'pageinfo-firstuser' => 'გვერდის შემქნელი',
 'pageinfo-firsttime' => 'გვერდის შექმნის თარიღი',
 'pageinfo-lastuser' => 'ბოლო რედაქტორი',
 'pageinfo-lasttime' => 'ბოლო რედაქტირების თარიღი',
 'pageinfo-edits' => 'რედაქტირებების ჯამური რაოდენობა',
 'pageinfo-authors' => 'განსხვავებულ ავტორთა ჯამური რაოდენობა',
-'pageinfo-restriction' => 'გვერდის დაცვა (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-recent-edits' => 'ბოლო ცვლილებები (უკანასკნელი $1 განმავლობაში)',
+'pageinfo-recent-authors' => 'უნიკალური ავტორების უკანასკნელი რაოდენობა',
+'pageinfo-restriction' => 'გვერდის დაცვა ({{lcfirst:$1}})',
 'pageinfo-magic-words' => 'ჯადოსნური {{PLURAL:$1|სიტყვა|სიტყვა}} ($1)',
 'pageinfo-hidden-categories' => 'დამალული {{PLURAL:$1|კატეგორია|კატეგორია}} ($1)',
 'pageinfo-templates' => 'ინტეგრირებულია {{PLURAL:$1|თარგი|თარგი}} ($1)',
@@ -3853,10 +3861,10 @@ MediaWiki ვრცელდება იმ იმედით, რომ ი
 'sqlite-no-fts' => '$1 სრული ტექსტის ძიების მხარდაჭერის გარეშე',
 
 # New logging system
-'logentry-delete-delete' => '$1 წაშალა გვერდი: $3',
+'logentry-delete-delete' => '$1 წაშალა გვერდი: „$3“',
 'logentry-delete-restore' => '$1 აღადგინა გვერდი $3',
 'logentry-delete-event' => '$1 შეცვალა {{PLURAL:$5|ჟურნალის ჩანაწერის|$5 ჟურნალის ჩანაწერების}} ხილვადობა $3-ზე: $4',
-'logentry-delete-revision' => '$1 შეცვალა {{PLURAL:$5|$5 ვერსიის|$5 ვერსიის}} ხილვადობა $3 გვერდზე: $4',
+'logentry-delete-revision' => '$1 შეცვალა {{PLURAL:$5|$5 ვერსიის|$5 ვერსიის}} ხილვადობა გვერდისათვის $3: $4',
 'logentry-delete-event-legacy' => '$1 შეცვალა ჩანაწერების ჟურნალის ხილვადობა $3-ზე',
 'logentry-delete-revision-legacy' => '$1 შეცვალა რედაქტირების კომენტარი გვერდზე $3',
 'logentry-suppress-delete' => '$1 ჩაახშო $3 გვერდი',
index 28dec21..0bcf016 100644 (file)
@@ -1568,22 +1568,22 @@ $3 келтірілген себебі: ''$2''",
 'upload-tryagain' => 'Файл сипаттамасының өзгерістерін жөнелту',
 'uploadnologin' => 'Кірмегенсіз',
 'uploadnologintext' => 'Файлдарды жүктеу үшін  [[Special:UserLogin|кіруіңіз]] жөн.',
-'upload_directory_missing' => 'Қотарып бермек қалтасы ($1) жетіспейді және веб-сервер жарата алмайды.',
-'upload_directory_read_only' => 'Қотарып бермек қалтасына ($1) веб-сервер жаза алмайды.',
+'upload_directory_missing' => 'Жүктеу қалтасы ($1) жетіспейді және веб-сервер жарата алмайды.',
+'upload_directory_read_only' => 'Жүктеу қалтасына ($1) веб-сервер жаза алмайды.',
 'uploaderror' => 'Жүктеу қатесі',
-'uploadtext' => "Төмендегі пішінді файлдарды қотарып беру үшін қолданыңыз.
-Алдында қотарылып берілген файлдарды қарау не іздеу үшін [[{{#special:FileList}}|қотарып берілген файлдар тізіміне]] барыңыз, тағы да қотарып беруі мен жоюы  [[{{#special:Log}}/upload|қотарып беру журналына]] жазылып алынады.
+'uploadtext' => "Төмендегі пішінді файлдарды жүктеу үшін қолданыңыз.
+Алдында жүктелген файлдарды қарау не іздеу үшін [[Special:FileList|жүктелген файлдар тізіміне]] барыңыз. Сондай-ақ файлдардың жүктелуі [[Special:Log/upload|жүктелі журналына]], ал жойылған файлдар [[Special:Log/delete|жойылу журналына]] жазылады.
 
-СÑ\83Ñ\80еÑ\82Ñ\82Ñ\96 Ð±ÐµÑ\82ке ÐºÑ\96Ñ\80Ñ\96Ñ\81Ñ\82Ñ\96Ñ\80Ñ\83ге, Ñ\84айлÒ\93а Ñ\82Ñ\83Ñ\80а Ñ\81Ñ\96лÑ\82еÑ\83 Ò¯Ñ\88Ñ\96н Ð¼Ñ\8bна Ð¿Ñ\96Ñ\88Ñ\96ндегÑ\96 Ñ\81Ñ\96лÑ\82емені қолданыңыз:
-'''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki>''',
-'''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|балама мәтін]]</nowiki>''' не
-'''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki>'''.",
+СÑ\83Ñ\80еÑ\82Ñ\82Ñ\96 Ð¼Ð°Ò\9bалаÒ\93а Ò\9bоÑ\81Ñ\83 Ò¯Ñ\88Ñ\96н ÐºÐµÐ»ÐµÑ\81Ñ\96 Ñ\82Ó\99Ñ\81Ñ\96лдеÑ\80ді қолданыңыз:
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' файлдың толық нұсқасын орнату үшін;
+* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|сурет тақырыбы]]</nowiki></code>''' 200px кішірейтілген файлды тақырыбын қосып сол жаққа орналастыру;
+* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' тек файлға сілтеме жасау үшін.",
 'upload-permitted' => 'Рұқсат етілген файл түрлері: $1.',
 'upload-preferred' => 'Ұнамды файл түрлері $1.',
 'upload-prohibited' => 'Рұқсат етілмеген файл түрлері: $1.',
 'uploadlog' => 'жүктеу журналы',
 'uploadlogpage' => 'Жүктеу журналы',
-'uploadlogpagetext' => 'Төменде ең соңғы қотарып берілген файл тізімі.',
+'uploadlogpagetext' => 'Төменде ең соңғы жүктелген файлдар тізімі.',
 'filename' => 'Файл атауы',
 'filedesc' => 'Түйіндемесі',
 'fileuploadsummary' => 'Файл сипаттамасы:',
@@ -1592,7 +1592,7 @@ $3 келтірілген себебі: ''$2''",
 'filesource' => 'Қайнар көзі:',
 'uploadedfiles' => 'Жүктелген файлдар',
 'ignorewarning' => 'Құлақтандыруға елеме де файлды қалайда сақта.',
-'ignorewarnings' => 'Ð\9aез ÐºÐµÐ»Ð³ÐµÐ½ Ò\9bұлаÒ\9bÑ\82андÑ\8bÑ\80Ñ\83лаÑ\80Ò\93а ÐµÐ»ÐµÐ¼Ðµ',
+'ignorewarnings' => 'Ð\95Ñ\81кеÑ\80Ñ\82Ñ\83леÑ\80дÑ\96 ÐµÐ»ÐµÐ¼ÐµÑ\83',
 'minlength1' => 'Файл атауында ең кемінде бір әріп болуы жөн.',
 'illegalfilename' => '«$1» файл атауында бет тақырыбы атында рұқсат берілмеген таңбалар бар.
 Файлды қайта атаңыз да бұны қотарып беруді қайта байқап көріңіз.',
@@ -1616,9 +1616,9 @@ $3 келтірілген себебі: ''$2''",
 * Қотарып берілетін файл атауы: <strong>[[:$1]]</strong>
 * Бар болған файл атауы: <strong>[[:$2]]</strong>
 Өзге атауды таңдаңыз.',
-'fileexists-thumbnail-yes' => "Осы файл — мөлшері кішірітілген сурет ''(нобай)'' сияқты. [[$1|thumb]]
-Бұл <strong>[[:$1]]</strong> деген файлды сынап шығыңыз.
-Егер сыналған файл түпнұсқалы мөлшері бар дәлме-дәл сурет болса, қосысмша нобайды қотарып беру керегі жоқ.",
+'fileexists-thumbnail-yes' => 'Осы файл — мөлшері кішірітілген көшірмесі (нобай) сияқты. [[$1|thumb]]
+Өтініш, <strong>[[:$1]]</strong> деген файлды тексеріңіз.
+Егер көрсетілген файл дәл сіз жүктейін деп жатқан файл болса, онда оның кішірейтілген көшірмесін қайта жүктеудің қажеті жоқ.',
 'file-thumbnail-no' => "Файл атауы <strong>$1</strong> дегенмен басталады.
 Бұл — мөлшері кішірітілген сурет ''(нобай)'' сияқты.
 Егер бұл суреттің толық ажыратылымдығы болса, бұны қотарып беріңіз, әйтпесе файл атауын өзгертіңіз.",
@@ -1627,11 +1627,11 @@ $3 келтірілген себебі: ''$2''",
 'fileexists-shared-forbidden' => 'Осылай аталған файл ортақ қоймада алдақашан бар;
 кері қайтыңыз да, осы файлды жаңа атымен қотарып беріңіз. [[File:$1|thumb|center|$1]]',
 'file-exists-duplicate' => 'Бұл файл келесі {{PLURAL:$1|файлдың|файлдарының}} телнұсқасы:',
-'uploadwarning' => 'Қотарып беру жөнінде құлақтандыру',
+'uploadwarning' => 'Жүктеу жөнінде құлақтандыру',
 'savefile' => 'Файлды сақтау',
 'uploadedimage' => '«[[$1]]» файлын жүктеді',
 'overwroteimage' => '«[[$1]]» деген файлдың жаңа нұсқасын жүктеді',
-'uploaddisabled' => 'Қотарып беру өшірілген',
+'uploaddisabled' => 'Жүктеу өшірілген',
 'copyuploaddisabled' => 'URL арқылы жүктеу өшірілген.',
 'uploaddisabledtext' => '{{SITENAME}} жобасында файл қотарып беруі өшірілген.',
 'uploadscripted' => 'Бұл файлда веб шолғышты қателікпен талдатқызатын HTML не әмір коды бар.',
@@ -1639,26 +1639,25 @@ $3 келтірілген себебі: ''$2''",
 'upload-source' => 'Қайнар файл',
 'sourcefilename' => 'Қайнар файл атауы:',
 'sourceurl' => 'Қайнардың URL-мекенжайы:',
-'destfilename' => 'Ð\9dÑ\8bÑ\81ана Ñ\84айл атауы:',
+'destfilename' => 'Файл атауы:',
 'upload-maxfilesize' => 'Файлдың ең көп мүмкін мөлшері: $1',
 'upload-description' => 'Файл сипаттамасы',
 'upload-options' => 'Жүктеу баптаулары',
 'watchthisupload' => 'Осы файлды бақылау',
-'filewasdeleted' => 'Бұл атауы бар файл бұрын қотарып берілген де бері келе жойылған.
-Бұны қайта қотарып беру алдынан $1 дегенді тексеріп шығыңыз.',
+'filewasdeleted' => 'Бұндай атаумен файл бұрын жүктелген болатын, бірақ кейін жойылды. Бұны қайта жүктеу алдында $1 дегенді тексеріп шығыңыз.',
 'filename-bad-prefix' => "Қотарып бермек файлыңыздың атауы '''«$1» ''' деп басталады, мынадай сипаттаусыз атауды әдетте сандық камералар өздіктік береді.
 Файлыңызға сипаттылау атауды таңдаңыз.",
-'upload-success-subj' => 'Сәтті қотарып берілді',
+'upload-success-subj' => 'Сәтті жүктелді',
 'upload-failure-subj' => 'Жүктеу мәселесі',
 'upload-warning-subj' => 'Жүктеу кезіндегі ескерту',
 
 'upload-proto-error' => 'Бұрыс хаттама',
-'upload-proto-error-text' => 'Шеттен қотарып беру үшін URL жайлары <code>http://</code> немесе <code>ftp://</code> дегендерден басталу жөн.',
+'upload-proto-error-text' => 'Шеттен жүктеу үшін URL жайлары <code>http://</code> немесе <code>ftp://</code> дегендерден басталу жөн.',
 'upload-file-error' => 'Ішкі қате',
 'upload-file-error-text' => 'Серверде уақытша файл құрылуы ішкі қатесіне ұшырасты.
 Бұл жүйенің әкімшімен қатынасыңыз.',
-'upload-misc-error' => 'Қотарып беру кезіндегі белгісіз қате',
-'upload-misc-error-text' => 'Қотарып беру кезінде белгісіз қатеге ұшырасты.
+'upload-misc-error' => 'Жүктеу кезіндегі белгісіз қате',
+'upload-misc-error-text' => 'Жүктеу кезінде белгісіз қатеге ұшырасты.
 URL жарамды және қатынаулы екенін тексеріп шығыңыз да қайта байқап көріңіз.
 Егер бұл мәселе әлде де қалса, жүйе әкімшімен қатынасыңыз.',
 'upload-too-many-redirects' => 'URL шектен тыс жылжытуларға ие',
@@ -1671,7 +1670,7 @@ URL жарамды және қатынаулы екенін тексеріп ш
 'upload-curl-error6' => 'URL жетілмеді',
 'upload-curl-error6-text' => 'Келтірілген URL жетілмеді.
 URL дұрыс екендігін және торап істеп тұрғанын қос тексеріңіз.',
-'upload-curl-error28' => 'Қотарып беру уақыты бітті',
+'upload-curl-error28' => 'Жүктеу уақыты бітті',
 'upload-curl-error28-text' => 'Тораптың жауап беруі тым ұзақ уақытқа созылды.
 Бұл торап істе екенін тексеріп шығыңыз, азғана кідіре тұрыңыз да қайта байқап көріңіз.
 Талабыңызды қол тиген кезінде қайта байқап көруіңіз мүмкін.',
@@ -1717,7 +1716,7 @@ URL дұрыс екендігін және торап істеп тұрғаны
 'morelinkstoimage' => 'Бұл файлдың [[Special:WhatLinksHere/$1|көбірек сілтемелерін]] қарау.',
 'duplicatesoffile' => 'Келесі {{PLURAL:$1|файл бұл файлдың телнұсқасы|$1 файл бұл файлдың телнұсқалары}}:',
 'sharedupload' => 'Бұл файл ортақ қоймаға қотарып берілген сондықтан басқа жобаларда қолдануы мүмкін.',
-'uploadnewversion-linktext' => 'Бұл файлдың жаңа нұсқасын қотарып беру',
+'uploadnewversion-linktext' => 'Бұл файлдың жаңа нұсқасын жүктеу',
 
 # File reversion
 'filerevert' => '$1 дегенді қайтару',
@@ -2404,7 +2403,7 @@ $1 бұғаттауы үшін келтірілген себебі: «$2».',
 бет өзінің үстіне жылжытылмайды.',
 'imagenocrossnamespace' => 'Файл емес есім аясына файл жылжытылмайды',
 'imagetypemismatch' => 'Файлдың жаңа кеңейтімі бұның түріне сәйкес емес',
-'imageinvalidfilename' => 'Ð\9dÑ\8bÑ\81ана Ñ\84айл атауы жарамсыз',
+'imageinvalidfilename' => 'Файл атауы жарамсыз',
 'move-leave-redirect' => 'Ескі бетте айдату сілтемесін қалдыру',
 
 # Export
index c9c09ff..8946a7c 100644 (file)
@@ -2951,7 +2951,7 @@ $1',
 'pageinfo-authors' => 'ចំនួនអ្នកនិពន្ធសរុប',
 'pageinfo-recent-edits' => 'ចំនួនការកែប្រែថ្មីៗ (ក្នុងរយៈពេល $1 កន្លងទៅនេះ)',
 'pageinfo-recent-authors' => 'ចំនួនអ្នកនិពន្ធថ្មីៗនេះ',
-'pageinfo-restriction' => 'ការការពារទំព័រ (<code>{{$1}}</code>)',
+'pageinfo-restriction' => 'ការការពារទំព័រ ({{$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|ពាក្យ|ពាក្យ}} វេទមន្ត ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|ចំណាត់ថ្នាក់ក្រុម|ចំណាត់ថ្នាក់ក្រុម}}ដែលបានលាក់ ($1)',
 
index 68b3e9b..2306640 100644 (file)
@@ -373,8 +373,8 @@ $messages = array(
 'tog-shownumberswatching' => '주시 사용자 수 보기',
 'tog-oldsig' => '현재 서명:',
 'tog-fancysig' => '서명을 위키텍스트로 취급 (자동으로 링크를 걸지 않음)',
-'tog-externaleditor' => '외부 편집기를 기본 편집기로 사용 (숙련자용. 컴퓨터에 특별한 설정이 필요. [//www.mediawiki.org/wiki/Manual:External_editors 자세한 정보 보기])',
-'tog-externaldiff' => '외부 비교 도구를 기본 도구로 사용 (숙련자용. 컴퓨터에 특별한 설정이 필요. [//www.mediawiki.org/wiki/Manual:External_editors 자세한 설명 보기])',
+'tog-externaleditor' => '바깥 편집기를 기본 편집기로 사용 (숙련자용. 컴퓨터에 특별한 설정이 필요. [//www.mediawiki.org/wiki/Manual:External_editors 자세한 정보 보기])',
+'tog-externaldiff' => '바깥 비교 도구를 기본 도구로 사용 (숙련자용. 컴퓨터에 특별한 설정이 필요. [//www.mediawiki.org/wiki/Manual:External_editors 자세한 설명 보기])',
 'tog-showjumplinks' => '접근성을 위한 "이동" 링크 쓰기 (일부 스킨에서만 작동)',
 'tog-uselivepreview' => '실시간 미리 보기 사용하기 (자바스크립트 필요) (시험 기능)',
 'tog-forceeditsummary' => '편집 요약을 쓰지 않았을 때 알려주기',
@@ -611,7 +611,7 @@ $1',
 'youhavenewmessagesfromusers' => '{{PLURAL:$3|다른 사용자가|사용자 $3명이}} $1란에 글을 남겼습니다. ($2)',
 'youhavenewmessagesmanyusers' => '여러 사용자가 $1란에 글을 남겼습니다. ($2)',
 'newmessageslinkplural' => '{{PLURAL:$1|사용자 토론}}',
-'newmessagesdifflinkplural' => '최근 {{PLURAL:$1|바뀜}}',
+'newmessagesdifflinkplural' => '마지막 {{PLURAL:$1|바뀐 내용}}',
 'youhavenewmessagesmulti' => '다른 사용자가 $1란에 글을 남겼습니다.',
 'editsection' => '편집',
 'editold' => '편집',
@@ -724,10 +724,11 @@ $1',
 'protectedpagetext' => '이 문서는 편집할 수 없도록 보호되어 있습니다.',
 'viewsourcetext' => '문서의 원본을 보거나 복사할 수 있습니다:',
 'viewyourtext' => "당신은 이 문서에 남긴 '''당신의 편집''' 내용을 보거나 복사할 수 있습니다:",
-'protectedinterface' => '이 문서는 소프트웨어 인터페이스에 쓰이는 문서로, 잠겨 있습니다.',
-'editinginterface' => "'''경고''': 소프트웨어에서 사용하는 메시지 문서를 고치고 있습니다.
-이는 모든 사용자에게 영향을 끼칩니다.
-번역되지 않은 메시지를 번역하려는 경우에는 [//translatewiki.net/wiki/Main_Page?setlang=ko translatewiki.net]에 참여하면 메시지 번역을 미디어위키에 직접 반영할 수 있습니다.",
+'protectedinterface' => '이 문서는 이 위키의 소프트웨어 인터페이스에 쓰이는 문서로, 부정 행위를 막기 위해 보호되어 있습니다.
+모든 위키에 대한 번역을 추가하거나 바꾸려면 미디어위키 지역화 프로젝트인 [//translatewiki.net/wiki/Main_Page?setlang=ko translatewiki.net]에 참여하시기 바랍니다.',
+'editinginterface' => "'''경고''': 소프트웨어 인터페이스에 쓰이는 문서를 고치고 있습니다.
+이 문서에 있는 내용을 바꾸면 이 위키에 있는 모든 사용자에게 영향을 끼칩니다.
+모든 위키에 대한 번역을 추가하거나 바꾸려면 미디어위키 지역화 프로젝트인 [//translatewiki.net/wiki/Main_Page?setlang=ko translatewiki.net]에 참여하시기 바랍니다.",
 'sqlhidden' => '(SQL 쿼리 숨겨짐)',
 'cascadeprotected' => '이 문서는 연쇄 보호가 걸린 {{PLURAL:$1|문서}}에 포함되어 있어 함께 보호됩니다. 연쇄 보호된 문서:
 $2',
@@ -765,7 +766,7 @@ $2',
 'securelogin-stick-https' => '로그인 후에도 HTTPS 연결 상태를 유지합니다',
 'yourdomainname' => '도메인 이름:',
 'password-change-forbidden' => '이 위키에서 비밀번호를 바꿀 수 없습니다.',
-'externaldberror' => '외부 인증 데이터베이스에 오류가 있거나 외부 계정을 새로 고칠 권한이 없습니다.',
+'externaldberror' => '바깥 인증 데이터베이스에 오류가 있거나 바깥 계정을 새로 고칠 권한이 없습니다.',
 'login' => '로그인',
 'nav-login-createaccount' => '로그인 / 계정 만들기',
 'loginprompt' => '{{SITENAME}}에 로그인하려면 쿠키를 사용할 수 있어야 합니다.',
@@ -1015,13 +1016,12 @@ $1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대
 익명 사용자를 구별하기 위해서는 숫자로 된 IP 주소를 사용해야만 합니다.
 IP 주소는 여러 사용자가 공유할 수 있습니다.
 자신과 관계없는 의견이 자신에게 남겨져 있어 불쾌하다고 생각하는 익명 사용자는 [[Special:UserLogin/signup|계정을 만들고]] [[Special:UserLogin|로그인 하여]] 나중에 다른 익명 사용자에게 줄 혼란을 줄일 수 있습니다.',
-'noarticletext' => '이 문서가 존재하지 않습니다.
+'noarticletext' => '이 문서가 현재 존재하지 않습니다.
 이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|찾거나]],
 이 문서에 관련된 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인하거나,
 문서를 직접 [{{fullurl:{{FULLPAGENAME}}|action=edit}} 편집]</span>할 수 있습니다.',
-'noarticletext-nopermission' => '이 문서가 존재하지 않습니다.
-이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|찾거나]],
-이 문서에 관련된 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인할 수 있습니다.</span>',
+'noarticletext-nopermission' => '이 문서가 현재 존재하지 않습니다.
+이 문서와 제목이 비슷한 문서가 있는지 [[Special:Search/{{PAGENAME}}|찾거나]], 이 문서에 관련된 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 기록]을 확인할 수 있습니다.</span> 그러나 이 문서를 만들 수 있는 권한은 없습니다.',
 'missing-revision' => '"{{PAGENAME}}"이라는 문서의 #$1판이 존재하지 않습니다.
 
 이 문제는 주로 삭제된 문서를 가리키는 오래된 문서 역사 링크로 인해 발생합니다.
@@ -1191,8 +1191,8 @@ $2개 보다 적게 써야 하지만 지금은 $1개를 쓰고 있습니다.",
 설명: '''({{int:cur}})''' = 최신 판과 비교, '''({{int:last}})''' = 이전 판과 비교, '''{{int:minoreditletter}}'''= 사소한 편집",
 'history-fieldset-title' => '문서의 바뀜 내역 찾기',
 'history-show-deleted' => '삭제된 것만',
-'histfirst' => 'ì´\88기',
-'histlast' => '최신',
+'histfirst' => 'ì²\98ì\9d\8c',
+'histlast' => '마지막',
 'historysize' => '($1 바이트)',
 'historyempty' => '(비었음)',
 
@@ -1293,7 +1293,8 @@ $1",
 'revdelete-only-restricted' => '$1 $2 버전 숨기기 오류: 다른 숨기기 설정을 같이 설정하지 않고 관리자가 보지 못하도록 특정 판을 숨길 수 없습니다.',
 'revdelete-reason-dropdown' => '*일반적인 삭제 이유
 ** 저작권 침해
-** 부적절한 개인 정보
+** 부적절한 의견과 개인 정보
+** 부적절한 이름
 ** 잠재적인 비방 정보',
 'revdelete-otherreason' => '다른 이유/부가적인 이유',
 'revdelete-reasonotherlist' => '다른 이유',
@@ -1413,7 +1414,7 @@ $1",
 'powersearch-togglelabel' => '확인:',
 'powersearch-toggleall' => '모두 선택',
 'powersearch-togglenone' => '모두 선택하지 않음',
-'search-external' => '외부 찾기',
+'search-external' => '바깥 찾기',
 'searchdisabled' => '{{SITENAME}} 찾기 기능이 비활성화되어 있습니다.
 기능이 작동하지 않는 동안에는 구글(Google)을 이용해 찾을 수 있습니다.
 검색 엔진의 내용은 최신이 아닐 수 있다는 점을 주의해주세요.',
@@ -1492,7 +1493,7 @@ $1",
 'timezoneregion-indian' => '인도양',
 'timezoneregion-pacific' => '태평양',
 'allowemail' => '다른 사용자가 보낸 이메일을 받음',
-'prefs-searchoptions' => '찾기 설정',
+'prefs-searchoptions' => '찾기',
 'prefs-namespaces' => '이름공간',
 'defaultns' => '다음 이름공간에서 찾기:',
 'default' => '기본값',
@@ -1556,7 +1557,7 @@ HTML 태그를 확인하세요.',
 'userrights-lookup-user' => '사용자 권한 관리',
 'userrights-user-editname' => '사용자 이름 입력:',
 'editusergroup' => '사용자 그룹 편집',
-'editinguser' => "사용자 '''[[User:$1|$1]]''' $2의 권한 바꿈",
+'editinguser' => "'''[[User:$1|$1]]''' $2 사용자의 권한 바꾸기",
 'userrights-editusergroup' => '사용자 그룹 편집',
 'saveusergroups' => '사용자 권한 저장',
 'userrights-groupsmember' => '현재 권한:',
@@ -1930,7 +1931,7 @@ URL이 올바르고 접근 가능한지를 확인하고 다시 시도해주세
 'backend-fail-internal' => '"$1" 저장 백엔드에 알 수 없는 오류가 발생했습니다.',
 'backend-fail-contenttype' => '"$1"에 저장하기 위한 파일의 내용 유형을 판별하지 못했습니다.',
 'backend-fail-batchsize' => '저장 백엔드에서 파일 {{PLURAL:$1|작업}} $1개가 쌓여 있습니다. 한계는 $2개입니다.',
-'backend-fail-usable' => 'í\8c\8cì\9d¼ ì \80ì\9e¥ ê¶\8cí\95\9cì\9d´ ì\97\86ê±°ë\82\98 ì \80ì\9e¥ ì\9c\84ì¹\98ê°\80 ë¹ ì¡\8c기 ë\95\8c문ì\97\90 $1 í\8c\8cì\9d¼ì\9d\84 ì \80ì\9e¥í\95  수 없습니다.',
+'backend-fail-usable' => 'í\8c\8cì\9d¼ ì\9d½ê¸°/ì\93°ê¸° ê¶\8cí\95\9cì\9d´ ì\97\86ê±°ë\82\98 ì \80ì\9e¥ ì\9c\84ì¹\98ê°\80 ë¹ ì¡\8c기 ë\95\8c문ì\97\90 "$1" í\8c\8cì\9d¼ì\9d\84 ì\9d½ê±°ë\82\98 ì\93¸ 수 없습니다.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => '저장소 백엔드 "$1"에 대한 저널 데이터베이스에 연결할 수 없습니다.',
@@ -1963,7 +1964,7 @@ URL이 올바르고 접근 가능한지를 확인하고 다시 시도해주세
 'uploadstash-nofiles' => '임시 저장한 파일이 없습니다.',
 'uploadstash-badtoken' => '이 동작을 수행하는 데 실패했습니다. 편집 토큰이 만료되었을 가능성이 있습니다. 다시 시도하세요.',
 'uploadstash-errclear' => '파일을 제거하는 데 실패했습니다.',
-'uploadstash-refresh' => '파일 목록을 새로고침',
+'uploadstash-refresh' => '파일 목록을 새로 고침',
 'invalid-chunk-offset' => '청크 오프셋이 잘못되었습니다.',
 
 # img_auth script messages
@@ -1979,7 +1980,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization 을 참고하십시오
 'img-auth-isdir' => '"$1" 디렉토리에 접근을 시도했습니다.
 파일에만 접근할 수 있습니다.',
 'img-auth-streaming' => '"$1" 파일을 전송하는 중입니다.',
-'img-auth-public' => 'img_auth.php는 개인 위키 파일을 외부 사이트로 전송하는 기능입니다.
+'img-auth-public' => 'img_auth.php는 개인 위키 파일을 바깥 사이트로 전송하는 기능입니다.
 이 기능은 기본적으로 공개적인 위키에서 사용하도록 설계되어 있습니다.
 보안적인 문제로 기본적으로 img_auth.php 기능은 비활성화되어 있습니다.',
 'img-auth-noread' => '"$1" 파일을 볼 권한이 없습니다.',
@@ -2007,13 +2008,13 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'license' => '라이선스:',
 'license-header' => '라이선스',
 'nolicense' => '선택하지 않음',
-'license-nopreview' => '(미리보기 불가능)',
+'license-nopreview' => '(미리 보기 불가능)',
 'upload_source_url' => ' (유효하고, 모든 사람이 접근 가능한 URL)',
 'upload_source_file' => ' (당신의 컴퓨터에 있는 파일)',
 
 # Special:ListFiles
 'listfiles-summary' => '이 위키에 올라와 있는 모든 파일이 나열되어 있습니다.
-사용자별로 필터링했을 경우에는 사용자가 올린 가장 최신 버전만이 표시됩니다.',
+사용자별로 필터링했을 경우에는 사용자가 올린 가장 최신 버전만이 보여집니다.',
 'listfiles_search_for' => '다음 이름을 가진 미디어 찾기:',
 'imgfile' => '파일',
 'listfiles' => '파일 목록',
@@ -2198,8 +2199,8 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'wantedpages' => '필요한 문서 목록',
 'wantedpages-badtitle' => '문서 제목이 잘못되었습니다: $1',
 'wantedfiles' => '필요한 파일 목록',
-'wantedfiletext-cat' => '다음 파일은 쓰이고는 있지만 없는 파일입니다. 외부 저장소에 있는 파일은 실제로는 있지만 여기 올라 있을 수 있습니다. 그런 오류는 <del>삭제선</del>이 그어질 것입니다. 또한 없는 파일을 포함하고 있는 문서는 [[:$1]]에 올라 있습니다.',
-'wantedfiletext-nocat' => '다음 파일은 쓰이고는 있지만 없는 파일입니다. 외부 저장소에 있는 파일은 실제로는 있지만 여기 올라 있을 수 있습니다. 그런 오류는 <del>삭제선</del>이 그어질 것입니다.',
+'wantedfiletext-cat' => '다음 파일은 쓰이고는 있지만 없는 파일입니다. 바깥 저장소에 있는 파일은 실제로는 있지만 여기 올라 있을 수 있습니다. 그런 오류는 <del>삭제선</del>이 그어질 것입니다. 또한 없는 파일을 포함하고 있는 문서는 [[:$1]]에 올라 있습니다.',
+'wantedfiletext-nocat' => '다음 파일은 쓰이고는 있지만 없는 파일입니다. 바깥 저장소에 있는 파일은 실제로는 있지만 여기 올라 있을 수 있습니다. 그런 오류는 <del>삭제선</del>이 그어질 것입니다.',
 'wantedtemplates' => '필요한 틀 목록',
 'mostlinked' => '가장 많이 연결된 문서 목록',
 'mostlinkedcategories' => '가장 많이 연결된 분류 목록',
@@ -2248,7 +2249,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'booksources' => '책 찾기',
 'booksources-search-legend' => '책 찾기',
 'booksources-go' => '찾기',
-'booksources-text' => '아래의 목록은 새 책이나 중고 책을 판매하는 외부 사이트로, 원하는 책의 정보를 얻을 수 있습니다:',
+'booksources-text' => '아래의 목록은 새 책이나 중고 책을 판매하는 바깥 사이트로, 원하는 책의 정보를 얻을 수 있습니다:',
 'booksources-invalid-isbn' => '입력한 ISBN이 잘못된 것으로 보입니다. 원본과 대조해 보세요.',
 
 # Special:Log
@@ -2274,7 +2275,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'allnotinnamespace' => '$1 이름공간을 제외한 모든 문서',
 'allpagesprev' => '이전',
 'allpagesnext' => '다음',
-'allpagessubmit' => '표시',
+'allpagessubmit' => '보기',
 'allpagesprefix' => '다음으로 시작하는 문서 보기:',
 'allpagesbadtitle' => '문서 제목이 잘못되었거나 다른 사이트로 연결되는 인터위키를 가지고 있습니다.
 문서 제목에 사용할 수 없는 문자를 사용했을 수 있습니다.',
@@ -2408,7 +2409,7 @@ URL이 맞고 해당 웹사이트가 작동하는지 확인해주세요.',
 'watchnochange' => '주어진 기간 중에 바뀐 주시문서가 없습니다.',
 'watchlist-details' => '토론을 제외하고 문서 $1개를 주시하고 있습니다.',
 'wlheader-enotif' => '* 이메일 알림 기능이 활성화되었습니다.',
-'wlheader-showupdated' => "* 마지막으로 방문한 이후에 바뀐 문서는 '''굵은 글씨'''로 표시됩니다.",
+'wlheader-showupdated' => "* 마지막으로 방문한 이후에 바뀐 문서는 '''굵은 글씨'''로 보여집니다.",
 'watchmethod-recent' => '주시된 문서를 확인하고자 최근 편집을 확인',
 'watchmethod-list' => '최근 편집을 확인하고자 주시된 문서 확인',
 'watchlistcontains' => '문서 $1개를 주시하고 있습니다.',
@@ -2708,7 +2709,7 @@ $1',
 차단은 문서 훼손을 막기 위해, [[{{MediaWiki:Policy-url}}|정책]]에 의해서만 이루어져야 합니다.
 차단 이유를 같이 적어주세요(예: 특정 문서 훼손).',
 'ipadressorusername' => 'IP 주소 또는 사용자 이름:',
-'ipbexpiry' => '기:',
+'ipbexpiry' => '기:',
 'ipbreason' => '이유:',
 'ipbreasonotherlist' => '다른 이유',
 'ipbreason-dropdown' => '*일반적인 차단 이유
@@ -2757,7 +2758,7 @@ $1',
 'blocklist-tempblocks' => '기한이 정해진 차단을 숨기기',
 'blocklist-addressblocks' => '단일 IP 차단을 숨기기',
 'blocklist-rangeblocks' => '광역 차단을 숨기기',
-'blocklist-timestamp' => '날짜·시각',
+'blocklist-timestamp' => '시간 기록',
 'blocklist-target' => '차단 대상',
 'blocklist-expiry' => '차단 기한',
 'blocklist-by' => '차단한 관리자',
@@ -3081,7 +3082,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'tooltip-pt-anonlogin' => '꼭 필요한 것은 아니지만, 로그인을 하면 편리한 점이 많습니다.',
 'tooltip-pt-logout' => '로그아웃',
 'tooltip-ca-talk' => '문서의 내용에 대한 토론 문서',
-'tooltip-ca-edit' => '문서를 편집할 수 있습니다. 저장하기 전에 미리보기를 해 주세요.',
+'tooltip-ca-edit' => '문서를 편집할 수 있습니다. 저장하기 전에 미리 보기를 해 주세요.',
 'tooltip-ca-addsection' => '문단 추가하기',
 'tooltip-ca-viewsource' => '문서가 잠겨 있습니다.
 문서의 내용만 볼 수 있습니다.',
@@ -3135,7 +3136,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'tooltip-recreate' => '문서를 편집하는 중 삭제되어도 새로 만들기',
 'tooltip-upload' => '파일 올리기 시작',
 'tooltip-rollback' => '"되돌리기" 기능을 사용하면 이 문서에 대한 마지막 기여자의 편집을 모두 되돌릴 수 있습니다.',
-'tooltip-undo' => '"편집 취소" 기능을 사용하면 이 편집이 되돌려지고, 차이보기 기능이 미리보기 형식으로 나타납니다. 편집 요약에 이 편집을 왜 되돌리는지에 대한 이유를 쓸 수 있습니다.',
+'tooltip-undo' => '"편집 취소" 기능을 사용하면 이 편집이 되돌려지고 차이 보기 기능이 미리 보기 형식으로 나타납니다. 편집 요약에 이 편집을 왜 되돌리는지에 대한 이유를 쓸 수 있습니다.',
 'tooltip-preferences-save' => '환경 설정 저장하기',
 'tooltip-summary' => '짧은 편집 요약을 적어주세요',
 
@@ -3226,7 +3227,7 @@ $1 사용자가 차단된 이유는 다음과 같습니다: "$2"',
 'pageinfo-authors' => '총 서로 다른 편집자 수',
 'pageinfo-recent-edits' => '최근 편집 수 (지난 $1일 이내)',
 'pageinfo-recent-authors' => '최근 기여자 수',
-'pageinfo-restriction' => '문서 보호 (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => '문서 보호 ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '매직 {{PLURAL:$1|워드}} ($1개)',
 'pageinfo-hidden-categories' => '숨은 {{PLURAL:$1|분류}} ($1개)',
 'pageinfo-templates' => '포함한 {{PLURAL:$1|틀}} ($1개)',
@@ -3367,7 +3368,7 @@ Variants for Chinese language
 'exif-ycbcrpositioning' => 'Y와 C 위치',
 'exif-xresolution' => '수평 해상도',
 'exif-yresolution' => '수직 해상도',
-'exif-stripoffsets' => '이미지 데이터 위치',
+'exif-stripoffsets' => '그림 데이터 위치',
 'exif-rowsperstrip' => '스트립당 줄의 수',
 'exif-stripbytecounts' => '압축된 스트립당 바이트 수',
 'exif-jpeginterchangeformat' => 'JPEG SOI와의 차이',
@@ -3387,7 +3388,7 @@ Variants for Chinese language
 'exif-flashpixversion' => '지원하는 플래시픽스 버전',
 'exif-colorspace' => '색 공간',
 'exif-componentsconfiguration' => '각 구성 요소의 의미',
-'exif-compressedbitsperpixel' => '이미지 압축 방식',
+'exif-compressedbitsperpixel' => '그림 압축 방식',
 'exif-pixelydimension' => '그림 너비',
 'exif-pixelxdimension' => '그림 높이',
 'exif-usercomment' => '사용자 주',
@@ -3423,7 +3424,7 @@ Variants for Chinese language
 'exif-sensingmethod' => '감지 방식',
 'exif-filesource' => '파일 출처',
 'exif-scenetype' => '촬영 모드',
-'exif-customrendered' => '이미지 처리 방식',
+'exif-customrendered' => '그림 처리 방식',
 'exif-exposuremode' => '노출 방식',
 'exif-whitebalance' => '화이트 밸런스',
 'exif-digitalzoomratio' => '디지털 줌 비율',
@@ -3435,7 +3436,7 @@ Variants for Chinese language
 'exif-sharpness' => '선명도',
 'exif-devicesettingdescription' => '장치 설정에 대한 설명',
 'exif-subjectdistancerange' => '대상과의 거리 범위',
-'exif-imageuniqueid' => '이미지 고유 ID',
+'exif-imageuniqueid' => '그림 고유 ID',
 'exif-gpsversionid' => 'GPS 태그 버전',
 'exif-gpslatituderef' => '북위 또는 남위',
 'exif-gpslatitude' => '위도',
@@ -3452,8 +3453,8 @@ Variants for Chinese language
 'exif-gpsspeed' => 'GPS 수신기 속도',
 'exif-gpstrackref' => '이동 방향에 대한 정보',
 'exif-gpstrack' => '이동 방향',
-'exif-gpsimgdirectionref' => '이미지 방향에 대한 정보',
-'exif-gpsimgdirection' => '이미지 방향',
+'exif-gpsimgdirectionref' => '그림 방향에 대한 정보',
+'exif-gpsimgdirection' => '그림 방향',
 'exif-gpsmapdatum' => '측지 조사 데이처 사용',
 'exif-gpsdestlatituderef' => '목적지의 위도 정보',
 'exif-gpsdestlatitude' => '목적지의 위도',
@@ -3507,7 +3508,7 @@ Variants for Chinese language
 'exif-cameraownername' => '카메라 소유자',
 'exif-label' => '라벨',
 'exif-datetimemetadata' => '메타데이터 최종 수정일',
-'exif-nickname' => '이미지의 비공식적 이름',
+'exif-nickname' => '그림의 비공식적 이름',
 'exif-rating' => '평가 (5점 만점)',
 'exif-rightscertificate' => '권리 관리 인증서',
 'exif-copyrighted' => '저작권 정보',
@@ -3529,8 +3530,8 @@ Variants for Chinese language
 'exif-event' => '묘사된 사건',
 'exif-organisationinimage' => '묘사된 기관',
 'exif-personinimage' => '묘사된 사람',
-'exif-originalimageheight' => '자르기 전 이미지의 세로 길이',
-'exif-originalimagewidth' => '자르기 전 이미지의 가로 길이',
+'exif-originalimageheight' => '자르기 전 그림의 세로 길이',
+'exif-originalimagewidth' => '자르기 전 그림의 가로 길이',
 
 # EXIF attributes
 'exif-compression-1' => '압축되지 않음',
@@ -3624,9 +3625,9 @@ Variants for Chinese language
 'exif-sensingmethod-7' => '3선 센서',
 'exif-sensingmethod-8' => '순차적 색 공간 선형 센서',
 
-'exif-filesource-3' => 'ë\94\94ì§\80í\84¸ ì\8a¤í\8b¸ 카메라',
+'exif-filesource-3' => 'ë\94\94ì§\80í\84¸ ì \95ì§\80 카메라',
 
-'exif-scenetype-1' => '직접 촬영된 이미지',
+'exif-scenetype-1' => '직접 촬영한 그림',
 
 'exif-customrendered-0' => '일반',
 'exif-customrendered-1' => '사용자 정의',
@@ -3748,7 +3749,7 @@ Variants for Chinese language
 'exif-urgency-other' => '사용자 정의 ($1)',
 
 # External editor support
-'edit-externally' => '이 파일을 외부 프로그램을 사용해서 편집하기',
+'edit-externally' => '이 파일을 바깥 프로그램을 사용해서 편집하기',
 'edit-externally-help' => '(자세한 정보는 [//www.mediawiki.org/wiki/Manual:External_editors 설치 방법]을 참고하세요)',
 
 # 'all' in various places, this might be different for inflected languages
@@ -3998,7 +3999,7 @@ $5
 # External image whitelist
 'external_image_whitelist' => ' #이 줄은 그대로 두십시오<pre>
 #정규 표현식(// 사이에 있는 부분)을 아래에 입력하세요.
-#이 목록은 외부 이미지의 URL과 대조할 것입니다.
+#이 목록은 바깥 그림의 URL과 대조할 것입니다.
 #이 목록과 일치하는 것은 그림이 직접 보여지지만, 그렇지 않은 경우 그림을 가리키는 링크만 보이게 될 것입니다.
 # "#"으로 시작하는 줄은 주석으로 간주됩니다.
 #이 목록은 대소문자를 구별하지 않습니다.
@@ -4010,7 +4011,7 @@ $5
 'tag-filter' => '[[Special:Tags|태그]] 필터:',
 'tag-filter-submit' => '필터',
 'tags-title' => '태그',
-'tags-intro' => '이 페이지는 소프트웨어에서 편집에 대해 표시하는 태그와 그 의미를 설명하는 목록입니다.',
+'tags-intro' => '이 문서는 소프트웨어에서 편집에 대해 표시하는 태그와 그 의미를 설명하는 목록입니다.',
 'tags-tag' => '태그 이름',
 'tags-display-header' => '바뀜 목록의 모양',
 'tags-description-header' => '태그에 대한 설명',
index 87015da..73beeb4 100644 (file)
@@ -476,6 +476,10 @@ $1',
 'youhavenewmessages' => 'Do häs $1 ($2).',
 'newmessageslink' => 'neu Metdeilunge op Dinger Klaafsigg',
 'newmessagesdifflink' => 'Ungerscheid zor vürletzte Version',
+'youhavenewmessagesfromusers' => 'Do häs $1 vun {{PLURAL:$3|enem|$3|keinem}} andere Metmaacher ($2)',
+'youhavenewmessagesmanyusers' => 'Do häs $1 vun andere Metmaacher ($2)',
+'newmessageslinkplural' => '{{PLURAL:$1|en neuje Nohreesch|neu Nohreeschte|kein neuje Nohreeschte}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|läzde Änderong|läzde Änderonge|kein Änderonge}}',
 'youhavenewmessagesmulti' => 'Do häs neu Nachrichte op $1',
 'editsection' => 'Ändere',
 'editsection-brackets' => '[$1]',
@@ -528,12 +532,12 @@ Et künnt sesch och öm ene Fäähler en dä Sofware fum Wiki handelle.',
 # General errors
 'error' => 'Fähler',
 'databaseerror' => 'Fähler en de Daatebank',
-'dberrortext' => 'Enne Fääler es opjefalle en dä Süntax vun ennem Befääl för de Datebank.
-Dat künnd_enne Fääler em Wikki-Projamm sin.
-De läzde Date_Bank_Befääl eß jewääse:
+'dberrortext' => 'Enne Fähler es opjefalle en dä Süntax vun ennem Befähl för de Daatebangk.
+Dat künnd_enne Fähler em Wikki-Projamm sin.
+De läzde Befähl för de Daatebangk eß jewääse:
 <blockquote><code>$1</code></blockquote>
-uß dä Funkzjohn: „<code>$2</code>“.
-De Datebank mälldt dä Fääler: „<code>$3: $4</code>“.',
+uß dä Fongxjohn: „<code>$2</code>“.
+De Daatebangk mälldt dä Fähler: „<code>$3: $4</code>“.',
 'dberrortextcl' => 'En dä Syntax vun enem Befähl för de Daatebank es
 ene Fähler es opjefalle.
 Dä letzte Befähl för de Daatebank es jewäse:
@@ -643,6 +647,7 @@ Denk dran, Do künnts Der [[Special:Preferences|Ding Enstellunge heh för {{GRAM
 'remembermypassword' => 'Op Duur aanmelde (hält {{PLURAL:$1|för eine Daach|bes op $1 Dääsch|bloß för hück}})',
 'securelogin-stick-https' => 'Noh em Enlogge övver HTTPS verbonge blieve.',
 'yourdomainname' => 'Ding Domain',
+'password-change-forbidden' => 'Do kanns en heh däm Wiki kein Paßwööter ändere.',
 'externaldberror' => 'Do wor ene Fähler en de externe Daatebank, oder Do darfs Ding extern Daate nit ändere. Dat Aanmelde jingk jedenfalls donevve.',
 'login' => 'Enlogge',
 'nav-login-createaccount' => 'Enlogge, Aanmälde',
@@ -952,6 +957,10 @@ domet De dann donoh nit mieh met esu en Ömständ ze dun häs, wie de andere nam
 'noarticletext-nopermission' => 'Op dä Sigg es em Momang nix drop.
 Do kanns noh däm Tittel vun heh dä Sigg [[Special:Search/{{PAGENAME}}|em Tex op ander Sigge söhke]],
 udder en dä zopaß <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Logbööscher nohloore]</span>.',
+'missing-revision' => 'En Version $1 vun dä Sigg „{{PAGENAME}}“ jidd_et nit.
+
+Esu jät kütt för jewöhnlesch, wam_mer enem övverhollte Lengk ob en Sigg follesch, di zweschedren fottjeschmeße woode es.
+Mieh doh drövver fengk mer em [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Logbooch vum Sigge Fottschmiiße].',
 'userpage-userdoesnotexist' => 'Enne Metmaacher „<nowiki>$1</nowiki>“ hammer nit, beß De secher, dat De die Metmaachersigg ändere oder aanläje wellss?.',
 'userpage-userdoesnotexist-view' => 'Ene Metmaacher mem Naame „$1“ hät sesch noch nih aanjemeldt',
 'blocked-notice-logextract' => 'Dä Metmaacher es jraad jesperrt.
@@ -1102,6 +1111,7 @@ Ene Jrond weße mer nit.',
 'expansion-depth-exceeded-warning' => 'Heh di Sigg hät  the expansion depth övverschredde',
 'parser-unstrip-loop-warning' => 'Ene Befähl em Täx betrick sesch op sesch sellef.',
 'parser-unstrip-recursion-limit' => 'Ene Befähl em Täx es mieh wi {{PLURAL:$1|eijmohl|$1 Mohl|jaa nit}} met  sesch sellef verschachtelt.',
+'converter-manual-rule-error' => 'Doh es ene Fähler en ene händesche Önwandelongsrääjel zwesche de Schprooche.',
 
 # "Undo" feature
 'undo-success' => 'De Änderung könnte mer zeröck nämme. Beloor Der de Ungerscheid un dann donn di Sigg avspeichere, wann De dengks, et es en Oodenung esu.',
@@ -1238,7 +1248,8 @@ $1",
 Do kanns kein Enndrääsch vör de Wiki_Köbeße verschteijsche, der oohne noch en Zoot Verschteijsche dobei ußzewähle.',
 'revdelete-reason-dropdown' => '*Jewöhnlijje Jrönd för et Fottschmiiße
 ** Vershtüß jääje et Uerhävverrääsch.
-** Esu en päsöönlesche Enfomazjuhne sin nit aanjebraach, udder esujaa jääje der Dateschoz.',
+** Esu en päsöönlesche Enfomazjuhne sin nit aanjebraach, udder esujaa jääje der Dateschoz.
+** Künnd en Verleundong sin',
 'revdelete-otherreason' => 'Ene andere ov zohsäzlejje Jrund:',
 'revdelete-reasonotherlist' => 'Ene andere Jrund',
 'revdelete-edit-reasonlist' => 'De Jrönde för et Fottschmieße beärbeide',
@@ -1289,6 +1300,10 @@ Donn de Version makeere bes wohen (inklusive) dat övverdraare wäde sull. Donn
 'editundo' => 'De letzte Änderung zeröck nämme',
 'diff-multi' => '(Mer don hee {{PLURAL:$1|eij Version|$1 Versione|keij Version}} dozwesche beim Verjliesche översprenge. Di sin vun jesamp {{PLURAL:$2|einem Metmaacher|$2 Metmaachere|keinem Metmaacher}} jemaat woode)',
 'diff-multi-manyusers' => '({{PLURAL:$1|Ein Version|$1 Versione|kei Version}} dozwesche vun mieh wi {{PLURAL:$2|einem Metmaacher|$2 Metmaachere|keinem Metmaacher}} wääde nit jezeish)',
+'difference-missing-revision' => '{{PLURAL:$2|Ein Version|$2 Versione}} vun heh däm Verjlisch zwesche Versione ($1) {{PLURAL:$2|hammer}} nit jefonge.
+
+Esu jät kütt för jewöhnlesch, wam_mer enem övverhollte Lengk ob der Ongerscheid zwesche de Versione vun en Sigg follesch, di zweschedren fottjeschmeße woode es.
+Mieh doh drövver fengk mer em [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Logbooch vum Sigge Fottschmiiße].',
 
 # Search results
 'searchresults' => 'Wat beim Söke eruskom',
@@ -1307,7 +1322,7 @@ Donn de Version makeere bes wohen (inklusive) dat övverdraare wäde sull. Donn
 'nextn-title' => '{{PLURAL:$1|Et näähßte|De nähßte $1|Kütt nix mieh}}',
 'shown-title' => 'Zeisch {{PLURAL:$1|ein|$1|nix}} pro Sigg',
 'viewprevnext' => 'Bläddere: ($1 {{int:pipe-separator}} $2) ($3).',
-'searchmenu-legend' => 'Enstellunge för et Söhke',
+'searchmenu-legend' => 'Enschtällonge för et Söhke',
 'searchmenu-exists' => "*Sigg '''[[$1]]'''",
 'searchmenu-new' => "'''Donn de Sigg „[[:$1|$1]]“ hee em Wiki aanlääje'''",
 'searchhelp-url' => 'Help:Hölp',
@@ -1422,7 +1437,7 @@ dat dänne ihr Daate topaktuell sin,
 Wä dä Schlößel weiß, kann ding Oppaßleß lesse. Donn alsu ene seschere un jeheime Wäät doför nämme.
 Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <code>$1</code>',
 'savedprefs' => 'Ding Enstellunge sin jetz jesechert.',
-'timezonelegend' => 'Ziggzon:',
+'timezonelegend' => 'Ziggzohn:',
 'localtime' => 'De Zigg op Dingem Kompjuter:',
 'timezoneuseserverdefault' => 'Nemm däm Server sing Zigg ($1)',
 'timezoneuseoffset' => 'Söns jet, jiff dä Ungerscheid aan',
@@ -1440,7 +1455,7 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <cod
 'timezoneregion-indian' => 'De indesche Ozejan',
 'timezoneregion-pacific' => 'De shtelle Ozejan',
 'allowemail' => 'E-Mail vun andere Metmaacher zolooße',
-'prefs-searchoptions' => 'Enstellunge för et Sööke',
+'prefs-searchoptions' => 'Enschtällonge för et Söhke',
 'prefs-namespaces' => 'Appachtemangs',
 'defaultns' => 'Söns don en hee dä Appachtemengs söhke:',
 'default' => 'Standaad',
@@ -1566,6 +1581,7 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <cod
 'right-writeapi' => 'Darf de <tt>writeAPI</tt> bruche',
 'right-delete' => 'Sigge fottschmieße, die nit besönders vill ahle Versione han',
 'right-bigdelete' => 'Sigge fottschmiiße, och wann se ahle Versione ze baasch han',
+'right-deletelogentry' => 'Beschtemmpte Endrääsch em Logbooch fottschmiiße un zerök holle',
 'right-deleterevision' => 'Einzel Versione fun Sigge fottschmiiße un zeröck holle',
 'right-deletedhistory' => 'Fottjeschmeße Versione vun Sigge opleßte lohße — dat zeich ävver nit der Tex aan',
 'right-deletedtext' => 'Fotjeschmeße Täx un Ungerscheid zwesche de verschtoche Versione aanloore',
@@ -1647,7 +1663,7 @@ Ene zohfällesch ußjewörfelte Schlößel, dää De nämme künnß, wöhr: <cod
 'action-sendemail' => '<i lang="en">e-mails</i> ze verschecke',
 
 # Recent changes
-'nchanges' => '{{PLURAL:$1|Ein Änderung|$1 Änderunge|Kein Änderung}}',
+'nchanges' => '{{PLURAL:$1|Ein Änderong|$1 Änderonge|Kein Änderong}}',
 'recentchanges' => 'Neuste Änderunge',
 'recentchanges-legend' => 'Enstellunge',
 'recentchanges-summary' => 'Op dä Sigg hee sin de neuste Änderunge am Wiki opjeliss.',
@@ -1901,8 +1917,9 @@ Als Jrond es aanjejovve: „$2“',
 'lockmanager-fail-acquirelock' => 'Mer kunnte kein Schpärr för „$1“ krijje.',
 'lockmanager-fail-openlock' => 'Mer kunnte di Schpärdatei för „$1“ nit opmaache.',
 'lockmanager-fail-releaselock' => 'Mer kunnte di Schpärr för „$1“ nit ophävve.',
-'lockmanager-fail-db-bucket' => 'Mer kunnet nit met jenooch  <i lang="en">lock databases in bucket$1</i> en Verbendong opnämme.',
+'lockmanager-fail-db-bucket' => 'Mer kunnte nit met jenooch Datebangke för Schpärre pä Sammeloproof „$1“ en Verbendong opnämme.',
 'lockmanager-fail-db-release' => 'Mer kunnte di Schpärre för de Daatebangk „$1“ nit ophävve.',
+'lockmanager-fail-svr-acquire' => 'Mer kunnte kein Schpärre op däm ẞööver „$1“ krijje.',
 'lockmanager-fail-svr-release' => 'Mer kunnte di Schpärre för dä ẞööver „$1“ nit ophävve.',
 
 # ZipDirectoryReader
@@ -2023,6 +2040,7 @@ Velleisch sullts De dä [$2 Täx övver se doh]  aanpasse.',
 'shared-repo-from' => 'uß $1',
 'shared-repo' => 'ene jemeinsame Beshtand',
 'filepage.css' => '/* Heh dat CSS küdd op Sigge övver Dateije, och di vun ander Wikis jehollt woode sin. */',
+'upload-disallowed-here' => 'Onjlöklescherwies kanns De heh dat Beld nit övverschriive.',
 
 # File reversion
 'filerevert' => '„$1“ zerök holle',
@@ -2109,10 +2127,10 @@ All de Sigge em Wiki, och Klaafsigge, Ömleitunge, un esu jet',
 
 'disambiguations' => 'Sigge met Lengks dren op „(Wat ėß dat?)“-Sigge',
 'disambiguationspage' => 'Template:Disambig',
-'disambiguations-text' => 'En de Sigge hee noh sin Links dren, di op en „(Watt ėßß datt?)“-Sigg jonn.
+'disambiguations-text' => 'En dä Sigge onge sin Links dren, di op en „(Watt ėßß datt?)“-Sigg jonn.
 Esu en Links sollte eijentlesch op en Sigg jon, di tirek jemeint es.
 
-Ene Atikel jelld als en „(Watt ėßß datt?)“-Sigg, wann en dä Sigg [[MediaWiki:Disambiguationspage]] ene Link op en drop dren es. Alles wat keij Atikele sin, weed dobei jaa nit eez metjezallt.',
+Ene Atikel weed als en „(Watt ėßß datt?)“-Sigg jezallt, wann dä en Schablohn opröhf, op di ene Lenk en dä Sigg [[MediaWiki:Disambiguationspage]] dren es.',
 
 'doubleredirects' => 'Ömleitunge op Ömleitunge',
 'doubleredirectstext' => 'Hee fings De en jede Reih ene Link op de iertste un de zweite Ömleitung, donoh ene Link op de Sigg, wo de
@@ -2139,6 +2157,7 @@ Tipp: Merk Der dä Tittel vun dä Sigg dovör.',
 # Miscellaneous special pages
 'nbytes' => '$1 Byte{{PLURAL:$1||s|}}',
 'ncategories' => '{{PLURAL:$1| ein Saachjrupp | $1 Saachjruppe | keij Saachjruppe }}',
+'ninterwikis' => '{{PLURAL:$1|Eine Engerwikilengk|$1 Engerwikilengks|Keine Engerwikilengk}}',
 'nlinks' => '{{PLURAL:$1|eine Link|$1 Links}}',
 'nmembers' => 'met {{PLURAL:$1|ein Sigg|$1 Sigge}} dren',
 'nrevisions' => '{{PLURAL:$1|Ein Änderung|$1 Änderunge|Keij Änderung}}',
@@ -2172,6 +2191,7 @@ Di sin dann <del>dorschjeschtresche</del>.',
 'mostlinkedtemplates' => 'Schablone met de miehßte Lenks drop',
 'mostcategories' => 'Atikkele met de miehste Saachjruppe',
 'mostimages' => 'Dateie met de miehste Links drop',
+'mostinterwikis' => 'Atikkele met de miehste Engerwikilengks',
 'mostrevisions' => 'Atikkele met de miehste Änderunge',
 'prefixindex' => 'All Sigge, dänne ehr Name met enem bestemmte Wood oder Tex aanfängk',
 'prefixindex-namespace' => 'All Sigge med enem beschtemmpte Aanfang (Appachtemang $1 )',
@@ -2338,6 +2358,8 @@ Mieh övver de einzel Rääschte fenkt Er op de [[{{MediaWiki:Listgrouprights-he
 Adress en Dinge [[Special:Preferences|ming Enstellunge]] stonn han, öm en E-Mail aan andere Metmaacher ze
 schecke.',
 'emailuser' => 'E-mail aan dä Metmaacher',
+'emailuser-title-target' => '<i lang="en">E-mail</i> aan {{GENDER:$1|dä Metmaacher|di Metmaacherėn|dä Metmaacher|di Metmaacherėn|dä Metmaacher}} $1',
+'emailuser-title-notarget' => 'Verschegg en <i lang="en">e-mail</i> aan ene Metmaacher',
 'emailpage' => 'Verscheck <i lang="en">e-mail</i> aan ene Metmaacher',
 'emailpagetext' => 'Wann heh dä Metmaacher en Adräß för sing <i lang="en">e-mail</i> aanjejovve hätt en singe Enstellunge,
 un die deit et och, dann kanns De met däm Fomular hee unge en einzel <i lang="en">e-mail</i> aan dä Metmaacher schecke.
@@ -2489,6 +2511,8 @@ Do kanns hee noh Hölp luure:
 'rollback' => 'Em Letzte sing Änderunge zeröcknemme',
 'rollback_short' => 'Zeröcknemme',
 'rollbacklink' => 'All dem Letzte sing Änderunge zeröckdriehe',
+'rollbacklinkcount' => '{{PLURAL:$1|Ein Änderong|$1 Änderonge|Kein Änderonge}} schtantepee retuur nämme',
+'rollbacklinkcount-morethan' => '{{PLURAL:$1|Mieh wi ein Änderong|Övver $1 Änderonge|Kein Änderonge}} schtantepee retuur nämme',
 'rollbackfailed' => 'Dat Zeröcknemme jingk scheiv',
 'cantrollback' => 'De letzte Änderung zeröckzenemme es nit müjjelich. Dä letzte Schriever es dä einzije, dä aan dä Sigg hee jet jedon hät!',
 'alreadyrolled' => 'Mer künne de letzte Änderunge vun dä Sigg „[[:$1]]“ vum Metmaacher „[[User:$2|$2]]“ ([[User talk:$2|Klaaf]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) nimieh zeröcknemme, dat hät ene Andere enzwesche ald jedon, udder de Sigg ömjeändert.
@@ -2994,6 +3018,7 @@ All de Trans Wiki Emporte wääde em [[Special:Log/import|Emport_Logboch]] fassj
 'import-interwiki-templates' => 'All Schablone metnämme',
 'import-interwiki-submit' => 'Huhlade!',
 'import-interwiki-namespace' => 'Dun de Sigge emporteere en dat Appachtemeng:',
+'import-interwiki-rootpage' => 'De Aanfangssigg (kann läddesch bliive):',
 'import-upload-filename' => 'Dä Name fun dä Datei:',
 'import-comment' => 'Jrond:',
 'importtext' => 'Dun de Daate met däm „[[Special:Export|Export]]“ vun doh vun enem Wiki Exporteere un - etwa bei Dir om Rechner - avspeichere, un dann heh wider huhlade.',
@@ -3027,6 +3052,9 @@ Bes esu joot, un versök et noch ens.',
 'import-error-interwiki' => 'Di Sigg „$1“ weed nit empoteet, weil dä iehre Name för et Verlengke noh ußerhallef, pä Engerwiki-Lengk, jebruch weed.',
 'import-error-special' => 'Di Sigg „$1“ weed nit empoteet, weil dä iehre Name en enem besöndere Appachtemang litt, woh kein Sigge dren zohjelohße sin.',
 'import-error-invalid' => 'Di Sigg „$1“ weed nit empoteet, weil dä iehre Name nit jöltesch es.',
+'import-options-wrong' => '{{PLURAL:$2|En verkiehrte Aanjab|Verkiehrte Aanjabe|Kein verkiehrte Aanjabe}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Di aanjejovve Aanfangssigg hät keine jölteje Tittel.',
+'import-rootpage-nosubpage' => 'Em Appachtemang „$1“ vun dä Aanfangssig sin kein Ongersigge zohjelohße.',
 
 # Import log
 'importlogpage' => 'Logboch met emporteerte Sigge',
@@ -3179,11 +3207,34 @@ Esu kam_mer noch en Aanmerkung en „{{int:summary}}“ maache.',
 
 # Info page
 'pageinfo-title' => 'Övver di Sigg: „$1“',
+'pageinfo-header-basic' => 'Jrundlääje Aanjabe',
 'pageinfo-header-edits' => 'De Änderonge',
+'pageinfo-header-restrictions' => 'Siggeschoz',
+'pageinfo-header-properties' => 'De Eijeschaffte vun dä Sigg',
+'pageinfo-display-title' => 'De extra Övverschreff vun dä Sigg',
+'pageinfo-default-sort' => 'Shtandattmääßesch zottiere met däm Schlößel',
+'pageinfo-length' => 'Bytes en dä Sigg',
+'pageinfo-article-id' => 'Dä Sigg ier Nommer en dä Daatebangk',
+'pageinfo-robot-policy' => 'Eijeschaffte för de Söhkmaschiine',
+'pageinfo-robot-index' => 'kammer opnämme',
+'pageinfo-robot-noindex' => 'kammer nit opnämme',
 'pageinfo-views' => 'De Aanzahl Affroofe',
-'pageinfo-watchers' => 'De Aanzahl Oppaßer',
+'pageinfo-watchers' => 'De Aanzahl Oppaßer för di Sigg',
+'pageinfo-redirects-name' => 'Ömleidong(e) op heh di Sigg',
+'pageinfo-subpages-name' => 'Ongersigg(e) vun heh dä Sigg',
+'pageinfo-subpages-value' => '$1 (dovun {{PLURAL:$2|ein Ömleidong|$2 Ömleidonge|kein Ömleidong}} un {{PLURAL:$3|ein nomaale Sigg|$3 nomaale Sigge|kein nomaale Sigg}})',
+'pageinfo-firstuser' => 'Aanjelaat vun',
+'pageinfo-firsttime' => 'Aanjelaat aam',
+'pageinfo-lastuser' => 'Dä läzde Schriiver',
+'pageinfo-lasttime' => 'Et Dattom vun de läzde Änderong',
 'pageinfo-edits' => 'De Aanzahl Änderonge',
-'pageinfo-authors' => 'De Aanzahl ongerscheidlije Schriever',
+'pageinfo-authors' => 'De Aanzahl ongerscheidleje Schriever',
+'pageinfo-recent-edits' => 'De Aanzahl Änderonge en dä läzde Zik, ennerhallf vun $1',
+'pageinfo-recent-authors' => 'De Aanzahl ongerscheidleje Schriever en dä läzde Zik',
+'pageinfo-restriction' => 'Siggeschoz ({{lcfirst:$1}})',
+'pageinfo-magic-words' => '{{PLURAL:$1|Ei Zauberwoot|$1 Zauberwööter|Kein Zauberwööter}}',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Ein verstoche Saachjropp|$1 verstoche Saachjroppe|Kein verstoche Saachjropp}}',
+'pageinfo-templates' => '{{PLURAL:$1|Ein Schablohn|$1 Schablohne|Kein Schablohn}} opjerohfe',
 
 # Skin names
 'skinname-standard' => 'Klassesch',
@@ -3236,7 +3287,8 @@ $1',
 'file-info-size' => '{{PLURAL:$1|Ei Pixel|$1 Pixelle}} breed × {{PLURAL:$2|Ei Pixel|$2 Pixelle}} huh, de Datei hät $3, dä MIME-Typ es: <code>$4</code>',
 'file-info-size-pages' => '{{PLURAL:$1|Ei Pixel|$1 Pixelle}} breed × {{PLURAL:$2|Ei Pixel|$2 Pixelle}} huh, Ömfang:&nbsp;$3, <i lang="en">MIME</i> Zoot: $4, met {{PLURAL:$5|ein Sigg|$5 Sigge|kein Sigge}}',
 'file-nohires' => 'Mer han kein hüütere Oplösung vun däm Beld.',
-'svg-long-desc' => 'SVG-Datei, de Basis es {{PLURAL:$1|ei Pixel|$1 Pixelle}} breed × {{PLURAL:$2|ei Pixel|$2 Pixelle}} huh, dä Dateiömfang es $3',
+'svg-long-desc' => 'SVG-Datei, de Basis es {{PLURAL:$1|ei Pixel|$1 Pixelle|kei Pixel}} breed × {{PLURAL:$2|ei Pixel|$2 Pixelle|kei Pixel}} huh, dä Dateiömfang es $3',
+'svg-long-desc-animated' => 'SVG-Datei met Bewääjong, de Basis es {{PLURAL:$1|ei Pixel|$1 Pixelle|kei Pixel}} breed × {{PLURAL:$2|ei Pixel|$2 Pixelle|kei Pixel}} huh, dä Dateiömfang es $3',
 'show-big-image' => 'Jröößer Oplöösung',
 'show-big-image-preview' => 'Heh di Vör_Aanseesch es $1 jruuß.',
 'show-big-image-other' => '{{PLURAL:$2|Ander Oplühsung|Ander Oplühsunge|kein ander Oplühsunge}}: $1.',
@@ -3246,6 +3298,8 @@ $1',
 'file-info-png-looped' => 'läuf emmer widder vun vürre',
 'file-info-png-repeat' => 'weed {{PLURAL:$1|eijmohl|$1 Mohl|keimohl}} affjespellt',
 'file-info-png-frames' => '{{PLURAL:$1|ei einzel Beld|$1 einzel Belder|kei einzel Beld}}',
+'file-no-thumb-animation' => "'''Opjepaß: Mer han täschnesche Jränze, dröm sind Minibeldscher vun dä Dattei ohne Bewääjong.'''",
+'file-no-thumb-animation-gif' => "'''Opjepaß: Mer han täschnesche Jränze, dröm sind Minibeldscher vun GIF-Datteije met enhuhe Oplöösung, wie die heh, ohne Bewääjong.'''",
 
 # Special:NewFiles
 'newimages' => 'Neu Dateie als Jaleri',
@@ -3882,9 +3936,9 @@ Don de nomaale Vör-Ansich nemme.',
 'watchlistedit-noitems' => 'Ding Oppassliss es leddisch.',
 'watchlistedit-normal-title' => 'Oppassliss beärbeijde',
 'watchlistedit-normal-legend' => 'Titell uß de Oppassliss eruß lohße',
-'watchlistedit-normal-explain' => 'Dat sin de Endräch in Dinge Oppassliss.
-Om einzel Titelle loss ze wääde, don Hökche en de Kässjer nevve inne maache, un dann deuß De dä Knopp „{{int:watchlistedit-normal-submit}}“.
-De kanns Ding Oppassliss och [[Special:EditWatchlist/raw|en rüh beärbeide]].',
+'watchlistedit-normal-explain' => 'Dat sin de Endräsch en Dinge Oppaßleß.
+Öm einzel Titelle loßß ze wääde, don Hökche en de Kässjer nevve inne maache, un dann deuß De dä Knopp „{{int:watchlistedit-normal-submit}}“.
+Do kanns Ding Oppassleß och [[Special:EditWatchlist/raw|en rüh beärbeide]].',
 'watchlistedit-normal-submit' => 'Jangk de Titele met Hökche eruß schmieße',
 'watchlistedit-normal-done' => '{{PLURAL:$1|Eine Sigge-Tittel es|<strong>$1</strong> Sigge-Tittele sin|Keine Sigge-Tittel es}} us Dinge Opassliss erus jefloore:',
 'watchlistedit-raw-title' => 'Rüh Oppassliss beärbeide',
@@ -3990,7 +4044,7 @@ Die Datei weed jlich aanjezeig, odder med däm paßende Projramm op jemaat.",
 * <span class="mw-specialpagecached">Em Zwescheshpeisher jehallde {{int:nstab-special}}e. Di künnte ovverhollt sind.</span>',
 'specialpages-group-maintenance' => 'Waadungsleste',
 'specialpages-group-other' => 'Ander {{int:nstab-special}}e',
-'specialpages-group-login' => 'Aamelde',
+'specialpages-group-login' => 'Enlogge udder Aanmälde',
 'specialpages-group-changes' => 'Letzte Änderunge un Logböcher',
 'specialpages-group-media' => 'Dateie — Huhlaade un Opliste',
 'specialpages-group-users' => 'Metmaacher un denne ier Rääschte',
@@ -4027,7 +4081,7 @@ Die Datei weed jlich aanjezeig, odder med däm paßende Projramm op jemaat.",
 'tags-description-header' => 'Bedüggtening',
 'tags-hitcount-header' => 'Makeete Änderunge',
 'tags-edit' => 'ändere',
-'tags-hitcount' => '{{PLURAL:$1|Ein Änderung|$1 Änderunge|kein Änderunge}}',
+'tags-hitcount' => '{{PLURAL:$1|Ein Änderong|$1 Änderonge|kein Änderonge}}',
 
 # Special:ComparePages
 'comparepages' => 'Sigge verjliesche',
index 311aad5..f7c0735 100644 (file)
@@ -1052,7 +1052,7 @@ Sedema qedexekirina $3 ev e: ''$2''",
 'number_of_watching_users_pageview' => '[{{PLURAL:$1|bikarhênerek|$1 bikarhêner}} vê rûpelê {{PLURAL:$1|dişopîne|dişopînin}}.]',
 'rc_categories_any' => 'Hîç',
 'newsectionsummary' => '/* $1 */ beşeke nû',
-'rc-enhanced-expand' => 'Kitûmatan nîşan bide (JavaScript pêdivî ye)',
+'rc-enhanced-expand' => 'Hûragahiyan nîşan bide (JavaScript pêdivî ye)',
 'rc-enhanced-hide' => 'Kitûmatan veşêre',
 
 # Recent changes linked
@@ -1079,8 +1079,8 @@ anjî ji bo file'ên dengî '''<nowiki>[[</nowiki>{{ns:media}}:File.ogg<nowiki>]
 'upload-permitted' => 'Cureyên pelan yên tên qebûlkirin: $1.',
 'upload-preferred' => 'Cureyên pelan yên tên xwestin: $1.',
 'upload-prohibited' => 'Cureyên pelan yên qedexekirî: $1.',
-'uploadlog' => 'Têketina barkirinê',
-'uploadlogpage' => 'Têketina barkirinê',
+'uploadlog' => 'barkirina belgeyan',
+'uploadlogpage' => 'barkirina belgeyan',
 'filename' => 'Navê pelê',
 'filedesc' => 'Danasîn',
 'fileuploadsummary' => 'Kurte:',
@@ -1554,6 +1554,7 @@ Ger rûpeleke nû di dema jêbirinê de hatibe çêkirin, ew guherto wê were p
 
 Ji bo jêbirinan û çêkirinên nû, ji kerema xwe li [[{{ns:special}}:Log/delete|Jêbirina têketinê]] binêre.",
 'undelete-header' => 'Ji bo rûpelên dawî hatine jêbirin, li [[Special:Log/delete|Jêbirina têketinê]] binêre.',
+'undelete-search-title' => 'Li rûpelên jêbirî bigere',
 'undelete-search-box' => 'Li rûpelên jêbirî bigere',
 'undelete-search-prefix' => 'Rûpela nîşandanê bi vê destpêdike:',
 'undelete-search-submit' => 'Lêgerîn',
index 36efed7..f52d705 100644 (file)
@@ -559,8 +559,12 @@ Ufro: $2',
 'protectedpagetext' => 'Dës Säit ass fir Ännerunge gespaart.',
 'viewsourcetext' => 'Dir kënnt de Quelltext vun dëser Säit kucken a kopéieren:',
 'viewyourtext' => "Dir kënnt de Quelltext vun '''Ären Ännerungen''' op dëser Säit kucken a kopéieren:",
-'protectedinterface' => 'Op dëser Säit fannt Dir Text fir de Sprooch-Interface vun der Software an dofir ass si gespaart fir Mëssbrauch ze verhënneren.',
-'editinginterface' => "'''Opgepasst:''' Dir sidd am Gaang, eng Säit z'änneren, déi do ass, fir Interface-Text fir d'Software ze liwweren. Ännerungen op dëser Säit änneren den Interface-Text, jee no Kontext, op allen oder verschiddene Säiten, déi vun alle Benotzer gesi ginn. Fir d'Iwwersetzungen z'änneren invitéiere mir Iech de [//translatewiki.net/wiki/Main_Page?setlang=lb Projet translatewiki.net] vun den internationale Messagen ze benotzen.",
+'protectedinterface' => "Op dëser Säit fannt Dir Text fir de Sprooch-Interface vun der Software op dëser Wiki an dofir ass si gespaart fir Mëssbrauch ze verhënneren.
+
+Fir Iwwersetzungen fir all Wikien bäizesetzen oder z'änneren gitt w.e.g. op [//translatewiki.net/ translatewiki.net], de MediaWiki-Lokalisatiouns-Projet.",
+'editinginterface' => "'''Opgepasst:''' Dir sidd am Gaang, eng Säit z'änneren, déi do ass, fir Interface-Text fir d'Software ze liwweren. 
+Ännerungen op dëser Säit änneren den Interface-Text, jee no Kontext, op allen oder verschiddene Säiten, déi vun alle Benotzer op dëser Wiki gesi ginn. 
+Fir d'Iwwersetzungen fir all Wikien derbäizesetzen oder z'änneren gitt w.e.g. op [//translatewiki.net translatewiki.net], de MediaWiki-Lokalisatiouns-Projet.",
 'sqlhidden' => '(SQL-Offro verstoppt)',
 'cascadeprotected' => 'Dës Säit gouf fir Ännerunge gespaart, well se duerch Cascadeprotectioun vun {{PLURAL:$1|dëser Säit|dëse Säite}} gespaart ass mat der Cascadenoptioun:
 $2',
@@ -830,8 +834,7 @@ Wann Dir en anonyme Benotzer sidd an Dir irrelevant Kommentäre krut, [[Special:
 Dir kënnt op anere Säiten no [[Special:Search/{{PAGENAME}}|dësem Säitentitel sichen]],
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} an den entspriechende Logbicher nokucken] oder [{{fullurl:{{FULLPAGENAME}}|action=edit}} esou eng Säit uleeën]</span>.',
 'noarticletext-nopermission' => 'Elo ass keen Text op dëser Säit.
-Dir kënnt op anere Säiten [[Special:Search/{{PAGENAME}}|no dësem Sàitentitel sichen]],
-oder <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} an de Logbicher sichen]</span>.',
+Dir kënnt op anere Säiten [[Special:Search/{{PAGENAME}}|no dësem Sàitentitel sichen]], oder <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} an de Logbicher sichen]</span>, mä Dir hutt net déi néideg Rechter fir dës Säit unzeleeën.',
 'userpage-userdoesnotexist' => 'De Benotzerkont "<nowiki>$1</nowiki>" ass net registréiert.
 Iwwerpréift w.e.g. op Dir dës Säit uleeën/ännere wëllt.',
 'userpage-userdoesnotexist-view' => 'De Benotzerkont "$1" ass net registréiert.',
@@ -1079,8 +1082,10 @@ Dir hutt keen Zougang dozou.',
 Kuckt w.e.g. an de Logbicher no.",
 'revdelete-only-restricted' => 'Feler beim verstoppe vum Objet vum $2, $1: Dir kënnt keng Objete virun den Administrateure verstoppen ouni och eng vun den aneren Optiounen vum weisen erauszesichen.',
 'revdelete-reason-dropdown' => "* Generell Läschgrënn
-**Verletzung vun den Droits d'Auteur
-**Net ubruechte perséinlech Informatioun",
+** Verletzung vun den Droits d'Auteur
+** Net ubruechte perséinlech Informatioun
+** Inadequate Benotzernumm
+** Informatioun déi beleidege kann",
 'revdelete-otherreason' => 'Aneren/zousätzleche Grond:',
 'revdelete-reasonotherlist' => 'Anere Grond:',
 'revdelete-edit-reasonlist' => 'Läschgrënn änneren',
@@ -1274,7 +1279,7 @@ Hei ass een zoufälleg generéierte Wäert deen Dir benotze kënnt: $1',
 'timezoneregion-indian' => 'Indeschen Ozean',
 'timezoneregion-pacific' => 'Pazifeschen Ozean',
 'allowemail' => 'E-Maile vun anere Benotzer kréien.',
-'prefs-searchoptions' => 'Sichoptiounen',
+'prefs-searchoptions' => 'Sichen',
 'prefs-namespaces' => 'Nummraim',
 'defaultns' => 'Soss an dësen Nummraim sichen:',
 'default' => 'Standard',
@@ -2894,20 +2899,27 @@ Dëst warscheinlech duerch en externe Link den op der schwaarzer Lëscht (blackl
 'pageinfo-title' => 'Informatioun iwwer "$1"',
 'pageinfo-header-basic' => 'Basisinformatiounen',
 'pageinfo-header-edits' => 'Historique vun den Ännerungen',
+'pageinfo-header-restrictions' => 'Spär vun der Säit',
+'pageinfo-header-properties' => 'Eegeschafte vun der Säit',
 'pageinfo-display-title' => 'Titel dee gewise gëtt',
+'pageinfo-length' => 'Gréisst vun der Säit (a Bytes)',
+'pageinfo-article-id' => 'ID (Nummer) vun der Säit',
 'pageinfo-views' => 'Zuel vun de Kéieren déi dës Säit gekuckt gouf',
 'pageinfo-watchers' => "Zuel vun de Benotzer déi d'Säit iwwerwaachen",
 'pageinfo-redirects-name' => 'Viruleedungen op dës Säit',
 'pageinfo-subpages-name' => 'Ënnersäite vun dëser Säit',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|Viruleedung|Viruleedungen}}; $3 {{PLURAL:$3|Ënnersäit|Ënnersäiten}})',
 'pageinfo-firsttime' => 'Datum vum Uleeë vun der Säit',
 'pageinfo-lastuser' => 'Leschte Benotzer deen eppes geännert huet',
 'pageinfo-lasttime' => 'Datum vun der leschter Ännerung',
 'pageinfo-edits' => 'Gesamtzuel vun den Ännerungen',
 'pageinfo-authors' => 'Gesamtzuel vun de verschiddenen Auteuren',
 'pageinfo-recent-edits' => 'Zuel vun de rezenten Ännerungen (an de leschten $1)',
-'pageinfo-restriction' => 'Protectioun vun der Säit (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-recent-authors' => 'Zuel vun de verschiddenen Auteuren',
+'pageinfo-restriction' => 'Protectioun vun der Säit ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magescht Wuert|Magesch Wierder}} ($1)',
 'pageinfo-hidden-categories' => 'Verstoppte {{PLURAL:$1|Kategorie|Kategorien}} ($1)',
+'pageinfo-templates' => 'Agebonne {{PLURAL:$1|Schabloun|Schabloune}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Klassesch',
@@ -2961,6 +2973,7 @@ Duerch d'Opmaache vum Fichier kann Äre System beschiedegt ginn.",
 'file-info-size-pages' => '$1 × $2 Pixelen, Gréisst vum Fichier: $3, MIME Typ: $4, $5 {{PLURAL:$5|Säit|Säiten}}',
 'file-nohires' => 'Et gëtt keng méi héich Opléisung.',
 'svg-long-desc' => 'SVG-Fichier, Basisgréisst: $1 × $2 Pixel, Gréisst vum Fichier: $3',
+'svg-long-desc-animated' => 'Animéierten SVG-Fichier, Basisgréisst $1 x $2 Pixel, Gréisst vum Fichier: $3',
 'show-big-image' => 'Voll Opléisung',
 'show-big-image-preview' => 'Gréisst vun dësem Preview: $1.',
 'show-big-image-other' => 'Aner {{PLURAL:$2|Opléisung|Opléisungen}}: $1.',
@@ -2970,6 +2983,7 @@ Duerch d'Opmaache vum Fichier kann Äre System beschiedegt ginn.",
 'file-info-png-looped' => 'endlos Schleef',
 'file-info-png-repeat' => 'gouf $1 {{PLURAL:$1|mol|mol}} gespillt',
 'file-info-png-frames' => '$1 {{PLURAL:$1|Frame|Framen}}',
+'file-no-thumb-animation' => "''''Informatioun: Wéinst technesche Limitatioune sinn d'Miniatur-Biller vun dësem Fichier net animéiert.'''",
 
 # Special:NewFiles
 'newimages' => 'Gallerie vun den neie Biller',
@@ -3735,6 +3749,7 @@ Soss kënnt Dir den einfache Formulär hei drënner benotzen. Är Bemierkung gë
 'api-error-badtoken' => 'Interne Feeler: falschen Token.',
 'api-error-copyuploaddisabled' => "D'Eroplueden iwwer eng URL ass op dësem Server desaktivéiert.",
 'api-error-duplicate' => 'Et gëtt schonn {{PLURAL:$1|[$2 en anere Fichier]|[$2 aner Fichiere]}} mat dem selwechten Inhalt op dem Site',
+'api-error-duplicate-archive' => 'Et gouf schonn {{PLURAL:$1| [een anere Fichier]|[$2 aner Fichieren]}} op dem Site mat deemselwechten Inhalt, {{PLURAL:$1|e gouf was|se goufen}} awer geläscht.',
 'api-error-duplicate-archive-popup-title' => '{{PLURAL:$1|Duebele Fichier, dee scho geläscht gouf|Duebel Fichieren, déi scho geläscht goufen}}',
 'api-error-duplicate-popup-title' => '{{PLURAL:$1|Duebele Fichier|Duebel Fichieren}}',
 'api-error-empty-file' => 'De Fichier deen Dir geschéckt hutt war eidel.',
index 141c05e..67e530b 100644 (file)
@@ -7,6 +7,7 @@
  * @ingroup Language
  * @file
  *
+ * @author Erdemaslancan
  * @author Ohpuu
  * @author Warbola
  */
@@ -252,7 +253,7 @@ agā [{{fullurl:{{FULLPAGENAME}}|action=edit}} sīe līed īž lūodõ]</span>.'
 Sa võid [[Special:Search/{{PAGENAME}}|vȯtšõ pēļizkēra frāzõ]] mūšti lēḑist,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} vȯtšõ tämstõ log failidi],
 agā [{{fullurl:{{FULLPAGENAME}}|action=edit}} sīe līed īž lūodõ]</span>.',
-'previewnote' => "''' Algid undõgid, ku se um setku jedmõl-vaņtlimi!'''
+'previewnote' => "'''Algid undõgid, ku se um setku jedmõl-vaņtlimi!'''
 Sin redigīerimizt äb ūo vel sa-gläbdõd !",
 'editing' => 'Redigīerimiz pǟl um $1',
 'editingsection' => 'Redigīerimiz pǟl um $1 sektsij līedst',
@@ -306,7 +307,7 @@ Legend: '''({{int:cur}})''' = vaiţīd līdzinţõmizõks lǟndz redaktsijõks,,
 'revertmerge' => 'Kīeld jarā kubbõ vieddimi',
 
 # Diffs
-'history-title' => 'Līed "$1" mõitõkst istōrij',
+'history-title' => 'Līed mõitõkst istōrij "$1"',
 'lineno' => 'Rīnda $1:',
 'compareselectedversions' => 'Līdzinţ vēļdõt redaktsijḑi',
 'editundo' => 'kištānt jarā',
index 3a273c5..e9a3a25 100644 (file)
@@ -11,6 +11,7 @@
  * @author Justincheng12345
  * @author Omnipaedista
  * @author Shinjiman
+ * @author Super Wang
  */
 
 $specialPageAliases = array(
@@ -409,6 +410,8 @@ $1',
 'youhavenewmessages' => '子有$1($2)',
 'newmessageslink' => '新訊',
 'newmessagesdifflink' => '變更',
+'youhavenewmessagesfromusers' => '子有 $1 自 {{PLURAL:$3|another user|$3 簿戶也}} ($2)。',
+'youhavenewmessagesmanyusers' => '子有 $1 自多簿戶 ( $2 )',
 'youhavenewmessagesmulti' => '新訊於$1',
 'editsection' => '纂',
 'editold' => '纂',
@@ -507,6 +510,8 @@ $2',
 'namespaceprotected' => "子權未逮,莫能纂'''$1'''。",
 'ns-specialprotected' => '奇頁禁纂也。',
 'titleprotected' => "緘焉自[[User:$1|$1]]防建也。因''$2''也。",
+'invalidtitle-knownnamespace' => '無效卷題,含名域"$2"與文本"$3"',
+'exception-nologin' => '尚未登簿',
 
 # Virus scanner
 'virus-badscanner' => "壞設:不明之病掃:''$1''",
@@ -581,6 +586,7 @@ $2',
 'noemailprefs' => '郵驛設而用之。',
 'emailconfirmlink' => '惠考郵驛',
 'invalidemailaddress' => '驛址不格,惠正略之。',
+'cannotchangeemail' => '電郵地址不可改于此wiki',
 'accountcreated' => '簿增矣',
 'accountcreatedtext' => '$1簿增矣',
 'createaccount-title' => '於{{SITENAME}}增簿',
@@ -615,6 +621,10 @@ $2',
 爾或改符,或求新臨符。',
 'resetpass-temp-password' => '臨符節:',
 
+# Special:PasswordReset
+'passwordreset' => '重設符節',
+'passwordreset-legend' => '重設符節',
+
 # Edit page toolbar
 'bold_sample' => '粗體',
 'bold_tip' => '粗體',
@@ -706,6 +716,7 @@ $2',
 'updated' => '(新)',
 'note' => "'''註'''",
 'previewnote' => "'''此乃預覽,尚未儲焉。'''",
+'continue-editing' => '續纂',
 'session_fail_preview' => "'''歉哉有變,子纂未存焉,惠再之。如復不成,[[Special:UserLogout|重登]]再試也。'''",
 'session_fail_preview_html' => "'''歉哉有變,子纂未存焉'''
 
@@ -895,7 +906,9 @@ $1",
 'revdelete-only-restricted' => '藏期於 $1 $2 之項:爾無廢有秩見之項,而無選另廢項也。',
 'revdelete-reason-dropdown' => '*常因
 ** 侵權
-** 無合之人料',
+** 無合之人料
+** 無合之簿
+** 隱謗譏',
 'revdelete-otherreason' => '它附因:',
 'revdelete-reasonotherlist' => '它因',
 'revdelete-edit-reasonlist' => '纂刪因',
index a7f6209..752f7ec 100644 (file)
@@ -2652,7 +2652,7 @@ Efa misy ao amina petra-drakitra zaraina ny rakitra [[:$1]]. Raha ovaina anarana
 Anarana hafa omena.",
 
 # Export
-'export' => 'Hanondrana pejy',
+'export' => 'Hamoaka pejy',
 'exporttext' => "Afaka manondrana ny lahatsoratra miaraka amin'ny tantaram-panovana ny pejy na vondrom-pejy maromaro ianao.
 Aoriana dia mety hafaran'ny wiki iray mandeha amin'ny rindrankajy MediaWiki izany, na dia mbola tsy afaka
 atao aza izany amin'izao fotoana izao.
index b664588..4bc913f 100644 (file)
@@ -731,10 +731,11 @@ $1',
 'protectedpagetext' => 'Оваа страница е заклучена за уредувања.',
 'viewsourcetext' => 'Можете да го погледнете и копирате кодот на оваа страница:',
 'viewyourtext' => "Можете да го погледнете и копирате кодот на '''вашите уредувања''' на оваа страница:",
-'protectedinterface' => 'Оваа страница содржи текст од посредникот на програмот и е заклучена поради можна злоупотреба.',
-'editinginterface' => "'''Предупредување:''' Уредувате страница која е дел од корисничкиот посредник на програмската опрема на МедијаВики.
-Промените на оваа страница ќе предизвикаат промена на корисничкиот посредник кај останатите корисници.
-За превод, имајте го предвид [//translatewiki.net/wiki/Main_Page?setlang=mk translatewiki.net], проектот за локализација на МедијаВики.",
+'protectedinterface' => 'Оваа страница содржи текст од посредникот на софтверот на ова вики и е превентивно заштитена поради можна злоупотреба.
+За да додавате или менувате преводи на сите викија, појдете на [//translatewiki.net/wiki/Main_Page?uselang=mk translatewiki.net] - проектот за локализација на МедијаВики.',
+'editinginterface' => "'''Предупредување:''' Уредувате страница која е дел од корисничкиот посредник на МедијаВики софтверот.
+Промените на оваа страница ќе предизвикаат промени во корисничкиот посредник кај другите корисници на ова вики.
+За да додадете или измените превод на сите викија, појдете на [//translatewiki.net/wiki/Main_Page?setlang=mk translatewiki.net] - проектот за локализација на МедијаВики.",
 'sqlhidden' => '(Барањето до SQL е скриено)',
 'cascadeprotected' => 'Оваа страница е заштитена од уредувања бидејќи е вклучена во {{PLURAL:$1|следнава страница, којашто е заштитена|следниве страници, коишто се заштитени}} со можноста „каскадна заштита“:
 $2',
@@ -1027,8 +1028,7 @@ $2
 да ги <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} пребарате дневниците],
 или да [{{fullurl:{{FULLPAGENAME}}|action=edit}} ја создадете]</span>.',
 'noarticletext-nopermission' => 'Таква страница сè уште не постои.
-Можете да проверите [[Special:Search/{{PAGENAME}}|дали насловот се споменува]] во други статии,
-или да ги <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} пребарате дневниците]</span>.',
+Можете да проверите [[Special:Search/{{PAGENAME}}|дали насловот се споменува]] во други статии или пак да <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} пребарате поврзаните дневници]</span>, но немате дозвола да ја создадете страницата.',
 'missing-revision' => 'Не ја пронајдов ревизијата бр. $1 на страницата со наслов „{{PAGENAME}}“.
 
 Ова обично се должи на застарена врска за разлики што води кон избришана страница.
@@ -1294,7 +1294,9 @@ $1",
 'revdelete-only-restricted' => 'Грешка при сокривањето на записот од $2, $1: не можете да криете записи од администратори без воедно да изберете едно од другите нагодувања на видливоста.',
 'revdelete-reason-dropdown' => '*Вообичаени причини за бришење
 ** Прекршување на авторски права
-** Несоодветни лични информации',
+** Неумесни коментари или лични информации
+** Неумесно корисничко име
+** Потенцијално клеветнички информации',
 'revdelete-otherreason' => 'Друга/дополнителна причина:',
 'revdelete-reasonotherlist' => 'Друга причина',
 'revdelete-edit-reasonlist' => 'Уреди причини за бришење',
@@ -1493,7 +1495,7 @@ $1",
 'timezoneregion-indian' => 'Индиски Океан',
 'timezoneregion-pacific' => 'Тихи Океан',
 'allowemail' => 'Дозволи е-пошта од други корисници',
-'prefs-searchoptions' => 'Ð\9dагодÑ\83ваÑ\9aа Ð½Ð° Ð¿Ñ\80ебаÑ\80Ñ\83ваÑ\9aеÑ\82о',
+'prefs-searchoptions' => 'Ð\9fÑ\80ебаÑ\80Ñ\83ваÑ\9aе',
 'prefs-namespaces' => 'Именски простори',
 'defaultns' => 'Инаку пребарувај во овие именски простори:',
 'default' => 'по основно',
@@ -1712,7 +1714,7 @@ $1",
 'recentchanges-label-newpage' => 'Ова уредување создаде нова страница',
 'recentchanges-label-minor' => 'Ова е ситна промена',
 'recentchanges-label-bot' => 'Ова уредување е направено од бот',
-'recentchanges-label-unpatrolled' => 'Ð\9eва Ñ\83Ñ\80едÑ\83ваÑ\9aе Ñ\81è Ñ\83Ñ\88Ñ\82е Ð½Ðµ Ð±Ð¸Ð»Ð¾ патролирано',
+'recentchanges-label-unpatrolled' => 'Ð\9eва Ñ\83Ñ\80едÑ\83ваÑ\9aе Ñ\81è Ñ\83Ñ\88Ñ\82е Ð½Ðµ Ðµ Ð¸Ñ\81патролирано',
 'rcnote' => "Подолу {{PLURAL:$1|е прикажана '''1''' промена|се прикажани последните '''$1''' промени}} {{PLURAL:$2|за денес|во последниве '''$2''' дена}}, заклучно со $5, $4.",
 'rcnotefrom' => 'Подолу се промените од <b>$2</b> (се прикажуваат до <b>$1</b>).',
 'rclistfrom' => 'Прикажи нови промени почнувајќи од $1',
@@ -1927,7 +1929,7 @@ $1',
 'backend-fail-internal' => 'Се појави непозната грешка во складишната основа „$1“.',
 'backend-fail-contenttype' => 'Не можев да утврдам каква содржина има податотеката што треба да ја складирам во „$1“.',
 'backend-fail-batchsize' => 'Складишната основа доби блок од $1 податочна {{PLURAL:$1|операција|операции}}, а ограничувањето е $2 {{PLURAL:$2|операција|операции}}.',
-'backend-fail-usable' => 'Ð\9dе Ð¼Ð¾Ð¶ÐµÐ² Ð´Ð° Ñ\98а Ð·Ð°Ð¿Ð¸Ñ\88ам Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82екаÑ\82а $1 бидејќи немате доволно дозволи или поради тоа што недостасуваат именици/содржатели.',
+'backend-fail-usable' => 'Ð\9dе Ð¼Ð¾Ð¶ÐµÐ² Ð´Ð° Ñ\98а Ð¿Ñ\80оÑ\87иÑ\82ам Ð¸Ð»Ð¸ Ð·Ð°Ð¿Ð¸Ñ\88ам Ð¿Ð¾Ð´Ð°Ñ\82оÑ\82екаÑ\82а â\80\9e$1â\80\9c бидејќи немате доволно дозволи или поради тоа што недостасуваат именици/содржатели.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Не можев да се поврзам со дневничката база за складишната основа „$1“.',
@@ -3220,7 +3222,7 @@ $1',
 'pageinfo-authors' => 'Број на засебни автори',
 'pageinfo-recent-edits' => 'Број на скорешни уредувања (во последните $1)',
 'pageinfo-recent-authors' => 'Број на скорешни засебни автори',
-'pageinfo-restriction' => 'Заштита на страницата (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Заштита на страницата ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Волшебен збор|Волшебни зборови}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Скриена категорија|Скриени категории}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Превметнат шаблон|Превметнати шаблони}} ($1)',
@@ -3240,7 +3242,7 @@ $1',
 'markaspatrolleddiff' => 'Означи како проверена верзија',
 'markaspatrolledtext' => 'Означи ја верзијата како проверена',
 'markedaspatrolled' => 'Означено како проверено',
-'markedaspatrolledtext' => 'Избраната ревизија на [[:$1]]  е означена како патролирана.',
+'markedaspatrolledtext' => 'Ð\98збÑ\80анаÑ\82а Ñ\80евизиÑ\98а Ð½Ð° [[:$1]]  Ðµ Ð¾Ð·Ð½Ð°Ñ\87ена ÐºÐ°ÐºÐ¾ Ð¸Ñ\81паÑ\82Ñ\80олиÑ\80ана.',
 'rcpatroldisabled' => 'Оневозможено проверка на скорешни промени',
 'rcpatroldisabledtext' => 'Патролирањето на Скорешните промени е деактивирано.',
 'markedaspatrollederror' => 'Не можам да означам како проверена',
index f2f8323..a657896 100644 (file)
@@ -706,8 +706,10 @@ $1',
 'protectedpagetext' => 'ഈ താൾ തിരുത്തുവാൻ സാധിക്കാത്ത വിധം സംരക്ഷിക്കപ്പെട്ടിട്ടുള്ളതാണ്.',
 'viewsourcetext' => 'താങ്കൾക്ക് ഈ താളിന്റെ മൂലരൂപം കാണാനും പകർത്താനും സാധിക്കും:',
 'viewyourtext' => "താങ്കൾക്ക് ഈ താളിലെ '''താങ്കളുടെ തിരുത്തലുകളുടെ''' മൂലരൂപം കാണാനും പകർത്താനും സാധിക്കും:",
-'protectedinterface' => 'ഈ താൾ സോഫ്റ്റ്‌വെയറിന്റെ സമ്പർക്കമുഖ എഴുത്തുകൾ നൽകുന്നു, അതുകൊണ്ട് ദുരുപയോഗം തടയാൻ ബന്ധിക്കപ്പെട്ടിരിക്കുന്നു.',
-'editinginterface' => "'''മുന്നറിയിപ്പ്:''' സോഫ്റ്റ്‌വെയറിൽ സമ്പർക്കമുഖം നിലനിർത്തുന്ന താളാണു താങ്കൾ തിരുത്തുവാൻ പോകുന്നത്. ഈ താളിൽ താങ്കൾ വരുത്തുന്ന മാറ്റങ്ങൾ ഉപയോക്താവ് വിക്കി കാണുന്ന വിധത്തെ മാറ്റിമറിച്ചേക്കാം. മീഡിയവിക്കി സന്ദേശങ്ങളുടെ പരിഭാഷകൾക്ക് മീഡിയവിക്കി സന്ദേശങ്ങളുടെ പ്രാദേശികവത്കരണ സംരംഭം ആയ [//translatewiki.net/wiki/Main_Page?setlang=ml ബീറ്റാവിക്കി] ഉപയോഗിക്കുവാൻ താല്പര്യപ്പെടുന്നു.",
+'protectedinterface' => 'ഈ താൾ ഈ വിക്കിയുടെ സോഫ്റ്റ്‌വെയറിന്റെ സമ്പർക്കമുഖ എഴുത്തുകൾ നൽകുന്നു, അതുകൊണ്ട് ദുരുപയോഗം തടയാൻ ബന്ധിക്കപ്പെട്ടിരിക്കുന്നു. എല്ലാ വിക്കികൾക്കുമായി പരിഭാഷ കൂട്ടിച്ചേർക്കാനോ, പരിഭാഷയിൽ മാറ്റം വരുത്താനോ, ദയവായി മീഡിയവിക്കി പ്രാദേശീകരണ പദ്ധതിയായ [//translatewiki.net/ translatewiki.net] ഉപയോഗിക്കുക.',
+'editinginterface' => "'''മുന്നറിയിപ്പ്:''' സോഫ്റ്റ്‌വെയറിൽ സമ്പർക്കമുഖം നിലനിർത്തുന്ന താളാണു താങ്കൾ തിരുത്തുവാൻ പോകുന്നത്.
+ഈ താളിൽ താങ്കൾ വരുത്തുന്ന മാറ്റങ്ങൾ ഉപയോക്താക്കൾ വിക്കി കാണുന്ന വിധത്തെ മാറ്റിമറിച്ചേക്കാം.
+മീഡിയവിക്കി സന്ദേശങ്ങളുടെ പരിഭാഷകൾ കൂട്ടിച്ചേർക്കാനും മാറ്റംവരുത്താനും മീഡിയവിക്കി സന്ദേശങ്ങളുടെ പ്രാദേശികവത്കരണ പദ്ധതിയായ [//translatewiki.net/ translatewiki.net] ഉപയോഗിക്കുവാൻ താല്പര്യപ്പെടുന്നു.",
 'sqlhidden' => '(എസ്.ക്യു.എൽ. ക്വറി മറച്ചിരിക്കുന്നു)',
 'cascadeprotected' => 'നിർഝരിത (cascading) സൗകര്യം ഉപയോഗിച്ച് തിരുത്തൽ നടത്തുന്നതിനു സം‌രക്ഷണം ഏർപ്പെടുത്തിയിട്ടുള്ള {{PLURAL:$1|താഴെ കൊടുത്തിട്ടുള്ള താളിന്റെ|താഴെ കൊടുത്തിട്ടുള്ള താളുകളുടെ}} ഭാഗമാണ്‌ ഈ താൾ. അതിനാൽ ഈ താൾ തിരുത്തുവാൻ സാധിക്കില്ല:
 $2',
@@ -972,8 +974,7 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന
 'noarticletext' => 'ഈ താളിൽ ഇതുവരെ ഉള്ളടക്കം ആയിട്ടില്ല.
 താങ്കൾക്ക് മറ്റുതാളുകളിൽ [[Special:Search/{{PAGENAME}}|ഇതേക്കുറിച്ച് അന്വേഷിക്കുകയോ]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ബന്ധപ്പെട്ട രേഖകൾ പരിശോധിക്കുകയോ], [{{fullurl:{{FULLPAGENAME}}|action=edit}} ഈ താൾ തിരുത്തുകയോ ചെയ്യാവുന്നതാണ്]</span>.',
 'noarticletext-nopermission' => 'ഇപ്പോൾ ഈ താളിൽ എഴുത്തുകളൊന്നും ഇല്ല.
-താങ്കൾക്ക് മറ്റു താളുകളിൽ [[Special:Search/{{PAGENAME}}|ഈ താളിന്റെ തലക്കെട്ടിനായി തിരയാവുന്നതാണ്‌]],
-അല്ലെങ്കിൽ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ബന്ധപ്പെട്ട രേഖകൾ പരിശോധിക്കാവുന്നതാണ്‌]</span>.',
+താങ്കൾക്ക് മറ്റു താളുകളിൽ [[Special:Search/{{PAGENAME}}|ഈ താളിന്റെ തലക്കെട്ടിനായി തിരയാവുന്നതാണ്‌]], അല്ലെങ്കിൽ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ബന്ധപ്പെട്ട രേഖകൾ പരിശോധിക്കാവുന്നതാണ്‌]</span>. പക്ഷേ ഈ താൾ സൃഷ്ടിക്കാൻ താങ്കൾക്ക് അനുവാദമില്ല.',
 'missing-revision' => '"{{PAGENAME}}" എന്ന താളിന്റെ #$1 എന്ന നാൾപ്പതിപ്പ് നിലവിലില്ല.
 
 മായ്ക്കപ്പെട്ട താളിന്റെ കാലഹരണപ്പെട്ട നാൾവഴി കണ്ണി ഉപയോഗിച്ചാലാണ് സാധാരണ ഇങ്ങനെ സംഭവിക്കുക.
@@ -1094,6 +1095,7 @@ $1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്ന
 'node-count-exceeded-warning' => 'താൾ നോഡ്-എണ്ണം അധികരിച്ചിരിക്കുന്നു',
 'expansion-depth-exceeded-category' => 'വികസന ആഴം അധികരിച്ച താളുകൾ',
 'expansion-depth-exceeded-warning' => 'താളിന്റെ വികസന ആഴം അധികരിച്ചിരിക്കുന്നു',
+'converter-manual-rule-error' => 'മാനുഷികമായുള്ള ഭാഷാ പരിവർത്തന നിയമത്തിൽ പിഴവ് കണ്ടെത്തി',
 
 # "Undo" feature
 'undo-success' => 'ഈ തിരുത്തൽ താങ്കൾക്ക് തിരസ്ക്കരിക്കാവുന്നതാണ്‌. താഴെ കൊടുത്തിരിക്കുന്ന പതിപ്പുകൾ തമ്മിലുള്ള താരതമ്യം ഒന്നുകൂടി പരിശോധിച്ച് ഈ പ്രവൃത്തി ചെയ്യണോ എന്ന് ഒന്നുകൂടി ഉറപ്പാക്കുക. ഉറപ്പാണെങ്കിൽ തിരുത്തൽ തിരസ്ക്കരിക്കുവാൻ താൾ സേവ് ചെയ്യുക.',
@@ -1135,7 +1137,7 @@ $3 അതിനു കാണിച്ചിരിക്കുന്ന കാര
 # Revision feed
 'history-feed-title' => 'നാൾവഴി',
 'history-feed-description' => 'വിക്കിയിൽ ഈ താളിന്റെ നാൾവഴി',
-'history-feed-item-nocomment' => '$1 ൽ $2',
+'history-feed-item-nocomment' => '$2 സമയത്ത് $1',
 'history-feed-empty' => 'താങ്കൾ തിരഞ്ഞ താൾ നിലവിലില്ല.
 പ്രസ്തുത താൾ വിക്കിയിൽ നിന്നു ഒഴിവാക്കിയിരിക്കാനോ പുനർനാമകരണം ചെയ്തിരിക്കാനോ സാദ്ധ്യത ഉണ്ട്.
 ബന്ധപ്പെട്ട പുതിയ താളുകൾ കണ്ടെത്താൻ [[Special:Search|വിക്കിയിലെ തിരച്ചിൽ]] എന്ന താൾ ഉപയോഗിക്കുക.',
@@ -1231,7 +1233,8 @@ $1",
 'revdelete-only-restricted' => '$2, $1 തീയതിയിലെ ഇനം മറയ്ക്കുന്നതിൽ പിഴവ്: ഒതുക്കലിനുള്ള മറ്റ് ഐച്ഛികങ്ങളിലൊന്ന് തിരഞ്ഞെടുക്കാതെ ഇനങ്ങൾ കാര്യനിർവാഹകരുടെ ദൃഷ്ടിയിൽ നിന്നും ഒതുക്കാൻ താങ്കൾക്ക് കഴിയില്ല.',
 'revdelete-reason-dropdown' => '*മായ്ക്കാനുള്ള സാധാരണ കാരണങ്ങൾ
 **പകർപ്പവകാശ ലംഘനം
-**അനുയോജ്യമല്ലാത്ത വ്യക്തി വിവരങ്ങൾ
+**അനുയോജ്യമല്ലാത്ത കുറിപ്പ് അല്ലെങ്കിൽ വ്യക്തി വിവരങ്ങൾ
+**അനുയോജ്യമല്ലാത്ത ഉപയോക്തൃനാമം
 **അടിസ്ഥാനപരമായി ദോഷകരമാകുന്ന വിവരങ്ങൾ',
 'revdelete-otherreason' => 'മറ്റ്/കൂടുതൽ കാരണം:',
 'revdelete-reasonotherlist' => 'മറ്റ് കാരണം',
@@ -1426,7 +1429,7 @@ $1",
 'timezoneregion-indian' => 'ഇന്ത്യൻ മഹാസമുദ്രം',
 'timezoneregion-pacific' => 'ശാന്തസമുദ്രം',
 'allowemail' => 'എനിക്ക് എഴുത്തയക്കാൻ മറ്റുള്ളവരെ അനുവദിക്കുക',
-'prefs-searchoptions' => 'തിരà´\9aàµ\8dà´\9aിൽ à´\95àµ\8dà´°à´®àµ\80à´\95à´°à´£à´\99àµ\8dà´\99ൾ',
+'prefs-searchoptions' => 'തിരയàµ\81à´\95',
 'prefs-namespaces' => 'നാമമേഖലകൾ',
 'defaultns' => 'അല്ലെങ്കിൽ ഈ നാമമേഖലകളിൽ തിരയുക:',
 'default' => 'സ്വതേ',
@@ -1840,7 +1843,7 @@ $1',
 'backend-fail-internal' => '"$1" എന്ന സ്റ്റോറേജ് ബാക്കെൻഡിൽ അപരിചിതമായ പിഴവ് സംഭവിച്ചു.',
 'backend-fail-contenttype' => '"$1" എന്നതിൽ സംഭരിച്ചിരിക്കുന്ന പ്രമാണത്തിന്റെ ഉള്ളടക്ക തരം നിർണ്ണയിക്കാനായില്ല.',
 'backend-fail-batchsize' => 'ശേഖരണ ബാക്ക്എൻഡിൽ $1 ഫയൽ {{PLURAL:$1|പ്രവൃത്തി|പ്രവൃത്തികൾ}} ചെയ്യാൻ നൽകിയിരുന്നു; അതിന്റെ പരിധി $2 {{PLURAL:$2|പ്രവൃത്തി|പ്രവൃത്തികൾ}} ആണ്.',
-'backend-fail-usable' => 'ആവശ്യമായത്ര അനുമതിയില്ലാത്തതു കൊണ്ടോ ഡയറക്റ്ററികൾ/കണ്ടൈനറുകൾ ഇല്ലാത്തതു കൊണ്ടോ പ്രമാണം $1 എഴുതിച്ചേർക്കാൻ കഴിഞ്ഞില്ല.',
+'backend-fail-usable' => 'ആവശ്യമായ അനുമതിയില്ലാത്തതു കൊണ്ടോ ഡയറക്റ്ററികൾ/കണ്ടൈനറുകൾ ഇല്ലാത്തതു കൊണ്ടോ പ്രമാണം $1 എഴുതിച്ചേർക്കാൻ അല്ലെങ്കിൽ എടുക്കാൻ കഴിഞ്ഞില്ല.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => '"$1" എന്ന ശേഖരണ ബാക്ക്എൻഡിനായി ജേണൽ ഡേറ്റാബേസിനെ ബന്ധപ്പെടാൻ കഴിഞ്ഞില്ല.',
@@ -2295,7 +2298,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization കാണുക.',
 # Watchlist
 'watchlist' => 'ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക',
 'mywatchlist' => 'ഞാൻ ശ്രദ്ധിക്കുന്നവ',
-'watchlistfor2' => '$1 എന്ന ഉപയോക്താവ് $2.',
+'watchlistfor2' => 'ഉപയോക്താവ്:$1 $2',
 'nowatchlist' => 'താങ്കൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ ഇനങ്ങളൊന്നുമില്ല.',
 'watchlistanontext' => 'താങ്കൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക കാണുവാനോ തിരുത്തുവാനോ $1.',
 'watchnologin' => 'ലോഗിൻ ചെയ്തിട്ടില്ല',
@@ -2377,7 +2380,7 @@ $UNWATCHURL
 'delete-confirm' => '"$1" മായ്ക്കുക',
 'delete-legend' => 'മായ്ക്കുക',
 'historywarning' => "'''മുന്നറിയിപ്പ്''': താങ്കൾ മായ്ക്കുവാൻ പോകുന്ന താളിനു ഏകദേശം {{PLURAL:$1|ഒരു നാൾപ്പതിപ്പ്|$1 നാൾപ്പതിപ്പുകൾ}} ഉള്ള നാൾവഴി ഉണ്ട്:",
-'confirmdeletetext' => 'താà´\99àµ\8dà´\95ൾ à´\92à´°àµ\81 à´¤à´¾àµ¾ à´\85തിനàµ\8dà´±àµ\86 à´¤à´¿à´°àµ\81à´¤àµ\8dതൽ à´\9aà´°à´¿à´¤àµ\8dà´°à´®à´\9fà´\95àµ\8dà´\95à´\82 à´®à´¾à´¯àµ\8dà´\95àµ\8dà´\95àµ\81വാൻ à´ªàµ\8bà´µàµ\81à´\95യാണàµ\8d. à´¤à´¾à´\99àµ\8dà´\95ൾ à´\9aàµ\86à´¯àµ\8dà´¯àµ\81à´¨àµ\8dനതിനàµ\8dà´±àµ\86 à´ªà´°à´¿à´£à´¿à´¤à´«à´²à´\82 à´¤à´¾à´\99àµ\8dà´\95ൾà´\95àµ\8dà´\95റിയാമàµ\86à´¨àµ\8dà´¨àµ\81à´\82, à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´\88 à´®à´¾à´¯àµ\8dà´\95àµ\8dà´\95ൽ [[{{MediaWiki:Policy-url}}|വിക്കിയുടെ നയം]] അനുസരിച്ചാണു ചെയ്യുന്നതെന്നും ഉറപ്പാക്കുക.',
+'confirmdeletetext' => 'താà´\99àµ\8dà´\95ൾ à´\92à´°àµ\81 à´¤à´¾àµ¾ à´\85തിനàµ\8dà´±àµ\86 à´¨à´¾àµ¾à´µà´´à´¿à´¯à´\9fà´\95àµ\8dà´\95à´\82 à´®à´¾à´¯àµ\8dà´\95àµ\8dà´\95àµ\81വാൻ à´ªàµ\8bà´µàµ\81à´\95യാണàµ\8d. à´\88 à´\9aàµ\86à´¯àµ\8dതിയàµ\81à´\9fàµ\86 à´ªà´°à´¿à´£à´¤à´«à´²à´\82 à´¤à´¾à´\99àµ\8dà´\95ൾà´\95àµ\8dà´\95റിയാമàµ\86à´¨àµ\8dà´¨àµ\81à´\82, à´\88 à´¨à´\9fà´ªà´\9fà´¿ [[{{MediaWiki:Policy-url}}|വിക്കിയുടെ നയം]] അനുസരിച്ചാണു ചെയ്യുന്നതെന്നും ഉറപ്പാക്കുക.',
 'actioncomplete' => 'പ്രവൃത്തി പൂർത്തിയായിരിക്കുന്നു',
 'actionfailed' => 'പ്രവൃത്തി പരാജയപ്പെട്ടിരിക്കുന്നു',
 'deletedtext' => '"$1" മായ്ച്ചിരിക്കുന്നു. പുതിയതായി നടന്ന മായ്ക്കലുകളുടെ വിവരങ്ങൾ $2 ഉപയോഗിച്ച് കാണാം.',
@@ -3101,7 +3104,7 @@ $1',
 'pageinfo-authors' => 'ആകെ വ്യത്യസ്തരചയിതാക്കളുടെ എണ്ണം',
 'pageinfo-recent-edits' => 'സമീപകാലത്തെ തിരുത്തുകൾ (കഴിഞ്ഞ $1 കാലയളവിനുള്ളിൽ)',
 'pageinfo-recent-authors' => 'സമീപകാലത്തെ വ്യത്യസ്തരചയിതാക്കളുടെ എണ്ണം',
-'pageinfo-restriction' => 'താൾ സംരക്ഷണം (<code>$1</code>)',
+'pageinfo-restriction' => 'താൾ സംരക്ഷണം ($1)',
 'pageinfo-magic-words' => 'മാന്ത്രിക{{PLURAL:$1|വാക്ക്|വാക്കുകൾ}} ($1)',
 'pageinfo-hidden-categories' => 'മറഞ്ഞിരിക്കുന്ന {{PLURAL:$1|വർഗ്ഗം|വർഗ്ഗങ്ങൾ}} ($1)',
 'pageinfo-templates' => 'ഉൾപ്പെടുത്തിയിട്ടുള്ള {{PLURAL:$1|ഫലകം|ഫലകങ്ങൾ}} ($1)',
@@ -3374,7 +3377,7 @@ $1',
 'exif-rightscertificate' => 'അവകാശകൈകാര്യ യോഗ്യതാപത്രം',
 'exif-copyrighted' => 'പകർപ്പവകാശ സ്ഥിതി',
 'exif-copyrightowner' => 'പകർപ്പവകാശ ഉടമ',
-'exif-usageterms' => 'ഉപയോഗ നിബന്ധനകൾ',
+'exif-usageterms' => 'ഉപയോഗനിബന്ധനകൾ',
 'exif-webstatement' => 'ഓൺലൈൻ പകർപ്പവകാശക്കുറിപ്പ്',
 'exif-originaldocumentid' => 'യഥാർത്ഥ രേഖയുടെ അനന്യമായ ഐ.ഡി.',
 'exif-licenseurl' => 'പകർപ്പവകാശ അനുമതിയുടെ യൂ.ആർ.എൽ.',
index e6b5d5f..1ddb365 100644 (file)
@@ -65,7 +65,7 @@ $messages = array(
 'tog-previewontop' => 'Засварлах талбарын өмнө урьдчилж харсан байдлыг үзүүлэх',
 'tog-previewonfirst' => 'Эхний засварын үед урьдчилж харсан байдлыг үзүүлэх',
 'tog-nocache' => 'Вэб хөтөчийн хуудасны кешингийг болиулах',
-'tog-enotifwatchlistpages' => 'Миний хянах жагсаалт дахь хуудас өөрчлөгдөхөд и-мэйл явуулах',
+'tog-enotifwatchlistpages' => 'Миний хянах жагсаалт дахь хуудас өөрчлөгдсөн бол и-мэйл явуулах',
 'tog-enotifusertalkpages' => 'Миний хэлэлцүүлгийн хуудас өөрчлөгдөхөд и-мэйл явуулах',
 'tog-enotifminoredits' => 'Хуудсууд бага зэргээр засварлагдахад ч и-мэйл явуулах',
 'tog-enotifrevealaddr' => 'Мэдэгдлийн и-мэйлд миний мэйл хаягийг илчлэх',
@@ -2864,6 +2864,15 @@ $1',
 'exif-gpsareainformation' => 'GPS бүсийн нэр',
 'exif-gpsdatestamp' => 'GPS огноо',
 'exif-gpsdifferential' => 'GPS дифференциал засвар',
+'exif-source' => 'Эх сурвалж',
+'exif-languagecode' => 'Хэл',
+'exif-iimcategory' => 'Ангилал',
+'exif-cameraownername' => 'Камерын эзэн',
+'exif-label' => 'Шошго',
+'exif-datetimemetadata' => 'метадатаг хамгийн сүүлд өөрчилсөн огноо',
+'exif-copyrighted' => 'Зохиогчийн эрхийн байдал',
+'exif-copyrightowner' => 'Зохиогчийн эрх эзэмшигч',
+'exif-originaldocumentid' => 'Ориг баримтын ID',
 
 # EXIF attributes
 'exif-compression-1' => 'Шахагдаагүй',
@@ -2986,6 +2995,8 @@ $1',
 'exif-gpsdestdistance-m' => 'Милл',
 'exif-gpsdestdistance-n' => 'бээр',
 
+'exif-objectcycle-a' => 'Зөвхөн өглөө',
+'exif-objectcycle-p' => 'Зөвхөн орой',
 'exif-objectcycle-b' => 'Өдөр ч шөнө ч',
 
 # Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
@@ -3178,6 +3189,7 @@ $5
 'version-parserhooks' => 'Парсер хүүкүүд',
 'version-variables' => 'Хувьсагчууд',
 'version-antispam' => 'Спамаас сэргийлэх',
+'version-skins' => 'Арьс',
 'version-other' => 'Бусад',
 'version-mediahandlers' => 'Медиа боловсруулагч',
 'version-hooks' => 'Гогцоо',
@@ -3210,6 +3222,7 @@ $5
 'fileduplicatesearch-info' => '$1 × $2 пиксэл<br />Файлын хэмжээ: $3<br />MIME төрөл: $4',
 'fileduplicatesearch-result-1' => '"$1"-тай яг ижилхэн, давхардсан файл байхгүй байна.',
 'fileduplicatesearch-result-n' => '"$1" файлтай яг ижилхэн, давхардсан {{PLURAL:$2|1 файл|$2 файл}} байна.',
+'fileduplicatesearch-noresults' => '"$1" нэртэй файл олдсонгүй.',
 
 # Special:SpecialPages
 'specialpages' => 'Тусгай хуудсууд',
index da1ea47..c4d651e 100644 (file)
@@ -576,8 +576,10 @@ Pertanyaan: $2',
 'protectedpagetext' => 'Laman ini telah dikunci untuk menghalang penyuntingan.',
 'viewsourcetext' => 'Anda boleh melihat dan menyalin sumber bagi laman ini:',
 'viewyourtext' => "Anda boleh melihat dan menyalin sumber '''suntingan anda''' kepada laman ini:",
-'protectedinterface' => 'Laman ini menyediakan teks antara muka bagi perisian ini, akan tetapi dikunci untuk menghalang penyalahgunaan.',
-'editinginterface' => "'''Amaran:''' Anda sedang menyunting laman yang digunakan untuk menghasilkan teks antara muka bagi perisian ini. Sebarang perubahan terhadap laman ini akan menjejaskan rupa antara muka bagi pengguna-pengguna lain. Untuk melakukan penterjemahan, anda boleh menggunakan [//translatewiki.net/wiki/Main_Page?setlang=ms translatewiki.net], sebuah projek penyetempatan MediaWiki.",
+'protectedinterface' => 'Laman ini menyediakan teks antara muka bagi perisian ini, akan tetapi dikunci untuk menghalang penyalahgunaan.
+Untuk menambah atau menyunting terjemahan untuk semua wiki, sila gunakan projek penyetempatan MediaWiki, [//translatewiki.net/ translatewiki.net].',
+'editinginterface' => "'''Amaran:''' Anda sedang menyunting laman yang digunakan untuk menghasilkan teks antara muka bagi perisian ini. Sebarang perubahan terhadap laman ini akan menjejaskan rupa antara muka bagi pengguna-pengguna lain di wiki ini.
+Untuk menambah atau menyunting terjemahan untuk semua wiki, sila gunakan projek penyetempatan MediaWiki, [//translatewiki.net/ translatewiki.net].",
 'sqlhidden' => '(Pertanyaan SQL disorokkan)',
 'cascadeprotected' => 'Laman ini telah dilindungi daripada penyuntingan oleh pengguna selain penyelia, kerana ia termasuk dalam {{PLURAL:$1|laman|laman-laman}} berikut, yang dilindungi dengan secara "melata": $2',
 'namespaceprotected' => "Anda tidak mempunyai keizinan untuk menyunting laman dalam ruang nama '''$1'''.",
@@ -1105,10 +1107,11 @@ Anda tidak memiliki capaian padanya.',
 'revdelete-concurrent-change' => 'Ralat ketika mengubahsuai item bertarikh $2, $1: kelihatan statusnya telah diubah oleh orang lain ketika anda cuba untuk mengubahsuainya.
 Mohon semak log.',
 'revdelete-only-restricted' => 'Ralat menyembunyikan item bertarikh $2, $1: anda tidak boleh menyekat item-item dari pandangan pentadbir-pentadbir tanpa memilih juga salah satu pilihan pandangan lain.',
-'revdelete-reason-dropdown' => '*Sebab penghapusan biasa
+'revdelete-reason-dropdown' => '*Sebab penghapusan yang biasa
 ** Pencabulan hak cipta
-** Maklumat peribadi tidak sesuai
-** Maklumat berpotensi fitnah',
+** Ulasan atau maklumat peribadi tidak sesuai
+** Nama pengguna tidak sesuai
+** Maklumat berkemungkinan fitnah',
 'revdelete-otherreason' => 'Sebab lain/tambahan:',
 'revdelete-reasonotherlist' => 'Sebab lain',
 'revdelete-edit-reasonlist' => 'Ubah sebab-sebab hapus',
@@ -1305,7 +1308,7 @@ Di sini ada nilai yang dihasilkan secara rawak yang boleh anda guna: $1',
 'timezoneregion-indian' => 'Lautan Hindi',
 'timezoneregion-pacific' => 'Lautan Pasifik',
 'allowemail' => 'Benarkan e-mel daripada pengguna lain',
-'prefs-searchoptions' => 'Pilihan carian',
+'prefs-searchoptions' => 'Cari',
 'prefs-namespaces' => 'Ruang nama',
 'defaultns' => 'Jika tidak cari dalam ruang nama ini:',
 'default' => 'asali',
@@ -1726,7 +1729,7 @@ Sila hubungi [[Special:ListUsers/sysop|pentadbir sistem]].',
 'backend-fail-internal' => 'Berlakunya ralat yang tidak dikenali dalam backend storan "$1".',
 'backend-fail-contenttype' => 'Jenis kandungan fail untuk disimpan di "$1" tidak dapat ditentukan.',
 'backend-fail-batchsize' => 'Backend storan diberi $1 operasi fail dalam satu kelompok; hadnya ialah $2 operasi.',
-'backend-fail-usable' => 'Fail $1 tidak boleh ditulis kerana kebenaran tidak memadai atau tertinggal direktori/penyimpan.',
+'backend-fail-usable' => 'Fail "$1" tidak boleh dibaca atau ditulis kerana kebenaran tidak memadai atau tertinggal direktori/penyimpan.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Tidak dapat bersambung dengan pangkalan data jurnal untuk backend storan "$1".',
@@ -2976,7 +2979,7 @@ Simpan dalam komputer anda dan muat naiknya di sini.',
 'pageinfo-authors' => 'Jumlah pengarang yang berlainan',
 'pageinfo-recent-edits' => 'Bilangan suntingan terkini (dalam $1 yang lalu)',
 'pageinfo-recent-authors' => 'Bilangan pengarang berbeza yang terkini',
-'pageinfo-restriction' => 'Perlindungan halaman (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Perlindungan halaman ({{lcfirst:$1}})',
 'pageinfo-magic-words' => 'Kata sakti ($1)',
 'pageinfo-hidden-categories' => 'Kategori tersembunyi ($1)',
 'pageinfo-templates' => 'Templat tertransklusi ($1)',
index b1f60f1..b84edcf 100644 (file)
@@ -23,6 +23,7 @@
  * @author Haakon K
  * @author Harald Khan
  * @author Jeblad
+ * @author Jsoby
  * @author Jóna Þórunn
  * @author Kph
  * @author Kph-no
@@ -1439,7 +1440,7 @@ Her er et tilfeldig tall du kan bruke: $1',
 'timezoneregion-indian' => 'Indiahavet',
 'timezoneregion-pacific' => 'Stillehavet',
 'allowemail' => 'Tillat andre å sende meg e-post',
-'prefs-searchoptions' => 'Søkealternativ',
+'prefs-searchoptions' => 'Søk',
 'prefs-namespaces' => 'Navnerom',
 'defaultns' => 'Søk ellers i disse navnerommene:',
 'default' => 'standard',
@@ -1862,7 +1863,7 @@ Om problemet fortsetter, kontakt en [[Special:ListUsers/sysop|administrator]].',
 'backend-fail-internal' => 'En ukjent feil oppsto i filbackend «$1».',
 'backend-fail-contenttype' => 'Kunne ikke avgjøre innholdstypen til filen som skal lagres på «$1».',
 'backend-fail-batchsize' => 'Bakgrunnsprosesseringen belastet med {{PLURAL:$1|en filoperasjon|en samling av $1 filoperasjoner}}; grensen er $2.',
-'backend-fail-usable' => 'Kunne ikke skrive fila $1 på grunn av utilstrekkelige tillatelser eller manglende mapper/beholdere.',
+'backend-fail-usable' => 'Kunne ikke lese eller skrive fila «$1» på grunn av utilstrekkelige tillatelser eller manglende mapper/beholdere.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Kunne ikke koble til journaldatabasen for lagringssystemet «$1».',
@@ -2282,7 +2283,7 @@ Mer informasjon om de enkelte rettighetstypene kan finnes [[{{MediaWiki:Listgrou
 'emailpagetext' => 'Du kan bruke skjemaet nedenfor for å sende en e-post til denne brukeren.
 Den e-postadressen du har satt i [[Special:Preferences|innstillingene dine]] vil dukke opp i «fra»-feltet på denne e-posten, så mottakeren er i stand til å svare.',
 'usermailererror' => 'E-postobjekt returnerte feilen:',
-'defemailsubject' => '{{SITENAME}}-type e-post fra bruker "$1"',
+'defemailsubject' => 'E-post fra {{SITENAME}}-brukeren «$1»',
 'usermaildisabled' => 'Brukerepost deaktivert',
 'usermaildisabledtext' => 'Du kan ikke sende epost til andre brukere på denne wikien',
 'noemailtitle' => 'Ingen e-postadresse',
@@ -3105,7 +3106,7 @@ Dette er sannsynligvis forårsaket av en lenke til et svartelistet eksternt nett
 'pageinfo-authors' => 'Totalt antall forskjellige forfattere',
 'pageinfo-recent-edits' => 'Antall nylige redigeringer (innen siste $1)',
 'pageinfo-recent-authors' => 'Antall nylige forfattere',
-'pageinfo-restriction' => 'Sidebeskyttelse (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Sidebeskyttelse ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magisk|Magiske}} ord ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Skjult kategori|Skjulte kategorier}} ($1)',
 'pageinfo-templates' => 'Transkludert {{PLURAL:$1|mal|maler}} ($1)',
index 714892d..1e33586 100644 (file)
@@ -319,7 +319,7 @@ $messages = array(
 'tog-numberheadings' => 'Koppen vanzelf nummeren',
 'tog-showtoolbar' => 'Laot de warkbalke zien',
 'tog-editondblclick' => 'Mit dubbelklik bewarken (JavaScript)',
-'tog-editsection' => 'Mit bewarkgedeeltes',
+'tog-editsection' => 'Mit bewarkgedeelten',
 'tog-editsectiononrightclick' => 'Bewarkgedeelte mit rechtermuusknoppe bewarken (JavaScript)',
 'tog-showtoc' => 'Samenvatting laoten zien van de zaken die an bod koemen (mit meer as dree onderwarpen)',
 'tog-rememberpassword' => 'Vanzelf anmelden (hooguut $1 {{PLURAL:$1|dag|dagen}})',
@@ -433,8 +433,8 @@ $messages = array(
 'category-file-count' => 'In disse kategorie {{PLURAL:$2|steet t volgende bestaand|staon de volgende $1 bestaanden, van in totaal $2}}.',
 'category-file-count-limited' => 'In disse kategorie {{PLURAL:$1|steet t volgende bestaand|staon de volgende $1 bestaanden}}.',
 'listingcontinuesabbrev' => '(vervolg)',
-'index-category' => 'Spul wat al indexeerd is',
-'noindex-category' => 'Spul wat nog niet indexeerd is',
+'index-category' => 'Te indexeren ziejen',
+'noindex-category' => 'Niet te indexeren ziejen',
 'broken-file-category' => 'Ziejen mit verkeerde bestaandsverwiezingen',
 
 'about' => 'Informasie',
@@ -572,6 +572,10 @@ $1",
 'youhavenewmessages' => 'Je hebben $1 ($2).',
 'newmessageslink' => 'nieje berichten',
 'newmessagesdifflink' => 'verschil mit de veurige versie',
+'youhavenewmessagesfromusers' => 'Je hebben $1 van {{PLURAL:$3|n aandere gebruker|$3 gebrukers}} ($2).',
+'youhavenewmessagesmanyusers' => 'Je hebben $1 van n bulte gebrukers ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|n niej bericht|nieje berichten}}',
+'newmessagesdifflinkplural' => 'leste {{PLURAL:$1|wieziging|wiezigingen}}',
 'youhavenewmessagesmulti' => 'Je hebben nieje berichten op $1',
 'editsection' => 'bewark',
 'editold' => 'bewark',
@@ -628,9 +632,9 @@ De oorzake hiervan kan dujen op n fout in de programmatuur.
 Der is n syntaxisfout in t databankeverzeuk op-etrejen.
 t Kan ween dat der n fout in de programmatuur zit.
 De leste zeukpoging in de databanke was:
-<blockquote><tt>$1</tt></blockquote>
-vanuut de funksie "<tt>$2</tt>".
-De databanke gaf de volgende foutmelding "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+vanuut de funksie "<code>$2</code>".
+De databanke gaf de volgende foutmelding "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Der is n syntaxisfout in t databankeverzeuk op-etrejen.
 t Leste veurzeuk an de databanke was:
 "$1"
@@ -682,8 +686,9 @@ Zeukopdrachte: $2',
 'protectedpagetext' => 'Disse zied is beveiligd um bewarkingen te veurkoemen.',
 'viewsourcetext' => 'Je kunnen de brontekste van disse zied bewarken en bekieken:',
 'viewyourtext' => "Je kunnen '''joew bewarkingen''' an de brontekste van disse zied bekieken en kopiëren:",
-'protectedinterface' => 'Op disse zied steet n tekste die gebruukt wörden veur systeemteksten van de wiki. Allinnig beheerders kunnen disse zied bewarken.',
-'editinginterface' => "'''Waorschuwing:''' je bewarken n zied die gebruukt wörden deur de programmatuur. Wa'j hier wiezigen, is van invleud op de hele wiki. Overweeg veur vertalingen um [//translatewiki.net/wiki/Main_Page?setlang=nds-nl translatewiki.net] te gebruken, t vertalingsprojekt veur MediaWiki.",
+'protectedinterface' => "Op disse zied steet tekste die gebruukt wörden veur systeemteksten van disse wiki. Allinnig beheerders kunnen disse zied bewarken.
+Um vertalingen veur alle wiki's derbie te zetten of te wiezigen, gebruuk [//translatewiki.net/ translatewiki.net], t vertaalprojekt veur MediaWiki.",
+'editinginterface' => "'''Waorschuwing:''' je bewarken n zied die gebruukt wörden deur de programmatuur. Wa'j hier wiezigen, is van invleud op de hele wiki. Um vertalingen derbie te zetten of te wiezigen veur alle wiki's, gebruuk [//translatewiki.net/wiki/Main_Page?setlang=nds-nl translatewiki.net], t vertalingsprojekt veur MediaWiki.",
 'sqlhidden' => '(SQL-zeukopdrachte verbörgen)',
 'cascadeprotected' => 'Disse zied is beveiligd umdat t veurkömp in de volgende {{PLURAL:$1|zied|ziejen}}, die beveiligd {{PLURAL:$1|is|bin}} mit de "kaskade"-opsie:
 $2',
@@ -720,6 +725,7 @@ Vergeet niet joew [[Special:Preferences|veurkeuren veur {{SITENAME}}]] in te ste
 'remembermypassword' => 'Vanzelf anmelden (hooguut $1 {{PLURAL:$1|dag|dagen}})',
 'securelogin-stick-https' => "Verbunnen blieven via HTTPS naoda'j an-emeld bin",
 'yourdomainname' => 'Joew domein',
+'password-change-forbidden' => 'Je kunnen joew wachtwoord niet wiezigen op disse wiki.',
 'externaldberror' => 'Der gung iets fout bie de externe authentisering, of je maggen je gebrukersprofiel niet bewarken.',
 'login' => 'Anmelden',
 'nav-login-createaccount' => 'Anmelden',
@@ -964,7 +970,11 @@ Je kunnen [[Special:Search/{{PAGENAME}}|de titel opzeuken]] in aandere ziejen,
 of [{{fullurl:{{FULLPAGENAME}}|action=edit}} disse zied bewarken]</span>.',
 'noarticletext-nopermission' => 'Op disse zied steet gien tekste.
 Je kunnen [[Special:Search/{{PAGENAME}}|zeuken naor disse term]] in aandere ziejen of
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken deurzeuken]</span>.',
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken deurzeuken]</span>, mer je hebben gien rechten um disse zied an te maken.',
+'missing-revision' => 'De versie #$1 van de zied "{{PAGENAME}} besteet niet.
+
+Dit kömp meestentieds deur t volgen van n verouwerde verwiezing naor n zied die vortedaon is.
+Waorschienlik ku\'j der meer gegevens over vienen in t [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} vortdologboek].',
 'userpage-userdoesnotexist' => 'Je bewarken n gebrukerszied van n gebruker die niet besteet (gebruker "<nowiki>$1</nowiki>"). Kiek effen nao o\'j disse zied wel anmaken/bewarken willen.',
 'userpage-userdoesnotexist-view' => 'Gebruker "$1" steet hier niet in-eschreven',
 'blocked-notice-logextract' => 'Disse gebruker is op t moment eblokkeerd.
@@ -973,7 +983,6 @@ De leste regel uut t blokkeerlogboek steet hieronder as referensie:',
 *'''Firefox / Safari:''' drok op ''Shift'' terwiel je op ''verniejen'' klikken, of gebruuk ''Ctrl-F5'' of ''Ctrl-R'' (''⌘-R'' op n knipperkiste van Mac)
 * '''Google Chrome:''' drok op ''Ctrl-Shift-R'' (''⌘-Shift-R'' op n knipperkiste van Mac)
 *'''Internet Explorer:''' drok op ''Ctrl'' terwiel je op ''verniejen'' klikken of drok op ''Ctrl-F5''
-*'''Konqueror: '''klik op ''verniejen'' of drok op ''F5''
 *'''Opera:''' leeg t tussengeheugen in ''Extra → Voorkeuren\"",
 'usercssyoucanpreview' => "'''Tip:''' gebruuk de knoppe \"{{int:showpreview}}\" um joew nieje css/js nao te kieken veurda'j t opslaon.",
 'userjsyoucanpreview' => "'''Tip:''' gebruuk de knoppe \"{{int:showpreview}}\" um joew nieje css/js nao te kieken veurda'j t opslaon.",
@@ -1088,6 +1097,7 @@ Sommigen mallen wörden niet in-evoegd.',
 'expansion-depth-exceeded-warning' => 'Op disse zied staon te veule mallen',
 'parser-unstrip-loop-warning' => 'Der is n "unstrip"-lusse evunnen',
 'parser-unstrip-recursion-limit' => 'De rekursielimiet ($1) veur "unstrip" is overschrejen',
+'converter-manual-rule-error' => 'Der is n fout evunnen in n haandmaotig in-evoegden taalkonversieregel.',
 
 # "Undo" feature
 'undo-success' => 'De bewarking kan weerummedreid wörden. Kiek de vergelieking hieronder nao um der wisse van de ween dat alles goed is, en slao de de zied op um de bewarking weerumme te dreien.',
@@ -1218,7 +1228,8 @@ Kiek de logboeken nao.',
 'revdelete-only-restricted' => 'Der is n fout op-etrejen bie t verbargen van t objekt van $1, $2: je kunnen gien objekten onderdrokken uut t zich van beheerders zonder oek n van de aandere zichtbaorheidsopsies te selekteren.',
 'revdelete-reason-dropdown' => '*Veulveurkoemde redens veur t vortdoon
 ** Schenden van de auteursrechten
-** Ongeschikte persoonlike informasie
+** Ongepast kommentaar of ongepaste persoonlike informasie
+** Ongepaste gebrukersnaam
 ** Meugelik lasterlike informasie',
 'revdelete-otherreason' => 'Aandere reden:',
 'revdelete-reasonotherlist' => 'Aandere reden',
@@ -1269,6 +1280,10 @@ In de [[Special:BlockList|blokkeerlieste]] bin de blokkeringen, die noen van toe
 'editundo' => 'weerummedreien',
 'diff-multi' => '(Hier {{PLURAL:$1|zit nog 1 versie|zitten nog $1 versies}} van {{PLURAL:$2|1 gebruker|$2 gebrukers}} tussen die der niet bie staon.)',
 'diff-multi-manyusers' => '($1 tussenliggende {{PLURAL:$1|versie|versies}} deur meer as $2 {{PLURAL:$2|gebruker|gebrukers}} niet weeregeven)',
+'difference-missing-revision' => "{{PLURAL:$2|Eén versie|$2 versies}} van disse verschillen ($1) {{PLURAL:$2|is|bin}} niet evunnen.
+
+Dit kömp meestentieds deur t volgen van n verouwerde verwiezing naor n zied die vortedaon is.
+Waorschienlik ku'j der meer gegevens over vienen in t [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} vortdologboek].",
 
 # Search results
 'searchresults' => 'Zeukresultaoten',
@@ -1626,7 +1641,7 @@ Disse informasie is zichtbaor veur aandere gebrukers.',
 'recentchanges-label-minor' => 'Dit is n kleine wieziging',
 'recentchanges-label-bot' => 'Disse bewarking is uutevoerd deur n bot',
 'recentchanges-label-unpatrolled' => 'Disse bewarking is nog niet nao-ekeken',
-'rcnote' => "Hieronder {{PLURAL:$1|steet de leste bewarking|staon de leste '''$1''' bewarkingen}} van de aofeleupen {{PLURAL:$2|dag|'''$2''' dagen}} (stand: $5, $4).",
+'rcnote' => "Hieronder {{PLURAL:$1|steet de leste bewarking|staon de leste '''$1''' bewarkingen}} van de aofgeleupen {{PLURAL:$2|dag|'''$2''' dagen}} (per: $5, $4).",
 'rcnotefrom' => 'Dit bin de wiezigingen sinds <b>$2</b> (maximum van <b>$1</b> wiezigingen).',
 'rclistfrom' => 'Bekiek wiezigingen vanaof $1',
 'rcshowhideminor' => '$1 kleine wiezigingen',
@@ -1635,7 +1650,7 @@ Disse informasie is zichtbaor veur aandere gebrukers.',
 'rcshowhideanons' => '$1 anonieme gebrukers',
 'rcshowhidepatr' => '$1 nao-ekeken bewarkingen',
 'rcshowhidemine' => '$1 mien bewarkingen',
-'rclinks' => 'Bekiek de leste $1 wiezigingen van de aofeleupen $2 dagen<br />$3',
+'rclinks' => 'Bekiek de leste $1 wiezigingen van de aofgeleupen $2 dagen<br />$3',
 'diff' => 'wiezig',
 'hist' => 'gesch',
 'hide' => 'verbarg',
@@ -1682,7 +1697,7 @@ Bestaanden en media die nao t vortdoon opniej op-estuurd wörden ku'j in de smie
 
 Um t bestaand in te voegen in n zied ku'j één van de volgende kodes gebruken:
 * '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestaand.jpg]]</nowiki>'''
-* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestaand.png|alternetieve tekste]]</nowiki>'''
+* '''<nowiki>[[</nowiki>{{ns:file}}<nowiki>:Bestaand.png|alternatieve tekste]]</nowiki>'''
 * '''<nowiki>[[</nowiki>{{ns:media}}<nowiki>:Bestaand.ogg]]</nowiki>''' drekte verwiezing naor n bestaand.",
 'upload-permitted' => 'Toe-estaone bestaandstypes: $1.',
 'upload-preferred' => 'An-ewezen bestaandstypes: $1.',
@@ -1822,7 +1837,7 @@ As t probleem zo blif, neem dan kontakt op mit één van de [[Special:ListUsers/
 'backend-fail-internal' => 'Der is n onbekende fout op-etreden in t opslagbackend "$1".',
 'backend-fail-contenttype' => 'Kon t inhoudstype van t bestaand um op "$1" op te slaon niet bepaolen.',
 'backend-fail-batchsize' => 'Reeks van $1 bestaands{{PLURAL:$1|operasie|operasies}} in de opslagbackend; de limiet is $2 {{PLURAL:$2|operasie|operasies}}.',
-'backend-fail-usable' => 'Kon t bestaand $1 niet schrieven vanwegen te min rechten of niet-anwezige mappen of houwers.',
+'backend-fail-usable' => 'Kon t bestaand "$1" niet lezen of schrieven umda\'j niet genog rechten hebben of vanwegen niet-anwezige mappen of houwers.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Kon gien verbiending maken mit de journaaldatabanke veur t opslagbackend "$1".',
@@ -1952,6 +1967,7 @@ Je kunnen de [$2 zied mit de bestaandsbeschrieving] daor bewarken.',
 'uploadnewversion-linktext' => 'n Niejere versie van dit bestaand opsturen.',
 'shared-repo-from' => 'uut $1',
 'shared-repo' => 'n edeelden mediadatabanke',
+'upload-disallowed-here' => 'Je kunnen disse aofbeelding niet overschrieven.',
 
 # File reversion
 'filerevert' => '$1 weerummedreien',
@@ -2032,9 +2048,9 @@ Vergeet niet de verwiezingen nao te kieken veurda\'j de mal vortdoon.',
 
 'disambiguations' => 'Ziejen die verwiezen naor deurverwiesziejen',
 'disambiguationspage' => 'Template:Dv',
-'disambiguations-text' => "De onderstaonde ziejen verwiezen naor n '''deurverwieszied'''. Disse verwiezingen mutten eigenliks rechtstreeks verwiezen naor t juuste onderwarp.
-
-Ziejen wörden ezien as n deurverwieszied, as de mal gebruukt wörden die vermeld steet op [[MediaWiki:Disambiguationspage]]",
+'disambiguations-text' => "Hieronder staon ziejen mit tenminsten één verwiezing naor n '''deurverwieszied'''. 
+Feitelik mutten ze rechtstreeks verwiezen naor t juuste onderwarp.<br />
+Ziejen wörden ezien as n deurverwieszied, as de mal gebruukt wörden die vermeld steet op [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects' => 'Dubbele deurverwiezingen',
 'doubleredirectstext' => 'Op disse lieste staon alle ziejen die deurverwiezen naor aandere deurverwiezingen.
@@ -2059,6 +2075,7 @@ Meestentieds is leste zied de gewunste doelzied, waor oek de eerste zied heer zo
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|bytes}}',
 'ncategories' => '$1 {{PLURAL:$1|kategorie|kategorieën}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwikiverwiezing|interwikiverwiezingen}}',
 'nlinks' => '$1 {{PLURAL:$1|verwiezing|verwiezingen}}',
 'nmembers' => '$1 {{PLURAL:$1|onderwarp|onderwarpen}}',
 'nrevisions' => '$1 {{PLURAL:$1|versie|versies}}',
@@ -2087,6 +2104,7 @@ Meestentieds is leste zied de gewunste doelzied, waor oek de eerste zied heer zo
 'mostlinkedtemplates' => 'Meestgebruukten mallen',
 'mostcategories' => 'Artikels mit de meeste kategorieën',
 'mostimages' => 'Meestgebruukten bestaanden',
+'mostinterwikis' => "Pagina's mit de meeste interwikiverwiezingen",
 'mostrevisions' => 'Artikels mit de meeste bewarkingen',
 'prefixindex' => 'Alle ziejen op veurvoegsel',
 'prefixindex-namespace' => 'Alle ziejen mit t veurvoegsel (naamruumte $1)',
@@ -2201,8 +2219,8 @@ Ondersteunde protokollen: <code>$1</code> (zet t niet in joew zeukopdrachte).',
 
 # Special:ActiveUsers
 'activeusers' => 'Aktieve gebrukers',
-'activeusers-intro' => 'Dit is n lieste van gebrukers die de aofeleupen $1 {{PLURAL:$1|dag|dagen}} enigszins aktief ewes bin.',
-'activeusers-count' => '$1 leste {{PLURAL:$1|bewarking|bewarkingen}} in de aofeleupen {{PLURAL:$3|dag|$3 dagen}}',
+'activeusers-intro' => 'Dit is n lieste van gebrukers die de aofgeleupen $1 {{PLURAL:$1|dag|dagen}} enigszins aktief ewest hebben.',
+'activeusers-count' => '$1 leste {{PLURAL:$1|bewarking|bewarkingen}} in de aofgeleupen {{PLURAL:$3|dag|$3 dagen}}',
 'activeusers-from' => 'Laot gebrukers zien vanaof:',
 'activeusers-hidebots' => 'Bots verbargen',
 'activeusers-hidesysops' => 'Beheerders verbargen',
@@ -2235,6 +2253,8 @@ Meer informasie over de rechten ku'j [[{{MediaWiki:Listgrouprights-helppage}}|hi
 'mailnologin' => 'Niet an-emeld.',
 'mailnologintext' => 'Je mutten [[Special:UserLogin|an-emeld]] ween en n geldig e-mailadres in "[[Special:Preferences|mien veurkeuren]]" invoeren um disse funksie te kunnen gebruken.',
 'emailuser' => 'n Bericht sturen',
+'emailuser-title-target' => 'Disse {{GENDER:$1|gebruker}} n bericht sturen',
+'emailuser-title-notarget' => 'Gebruker n bericht sturen',
 'emailpage' => 'Gebruker n bericht sturen',
 'emailpagetext' => "Deur middel van dit formulier ku'j n bericht sturen naor disse gebruker.
 t Adres da'j op-egeven hebben bie [[Special:Preferences|joew veurkeuren]] zal as aofzender gebruukt wörden.
@@ -2294,7 +2314,7 @@ Toekomstige wiezigingen op disse zied en de overlegzied zullen hier vermeld wör
 'watchmethod-list' => 'Kik joew nao volglieste veur de leste wiezigingen',
 'watchlistcontains' => 'Der {{PLURAL:$1|steet 1 zied|staon $1 ziejen}} op joew volglieste.',
 'iteminvalidname' => "Verkeerde naam '$1'",
-'wlnote' => 'Hieronder {{PLURAL:$1|steet de leste wieziging|staon de leste $1 wiezigingen}} in {{PLURAL:$2|t aofeleupen ure|de leste $2 uren}} vanaof $3 um $4.',
+'wlnote' => 'Hieronder {{PLURAL:$1|steet de leste wieziging|staon de leste $1 wiezigingen}} in {{PLURAL:$2|t aofgeleupen ure|de leste $2 uren}} vanaof $3 um $4.',
 'wlshowlast' => 'Laot de veurbieje $1 uur $2 dagen $3 zien',
 'watchlist-options' => 'Opsies veur de volglieste',
 
@@ -2380,6 +2400,8 @@ Wees veurzichtig',
 'rollback' => 'Wiezigingen herstellen',
 'rollback_short' => 'Weerummedreien',
 'rollbacklink' => 'Weerummedreien',
+'rollbacklinkcount' => '{{PLURAL:$1|één bewarking|$1 bewarkingen}} weerummedreien',
+'rollbacklinkcount-morethan' => 'Meer as {{PLURAL:$1|één bewarking|$1 bewarkingen}} weerummedreien',
 'rollbackfailed' => 'Wieziging herstellen is mislokt',
 'cantrollback' => 'De wiezigingen konnen niet hersteld wörden; der is mer 1 auteur.',
 'alreadyrolled' => 'Kan de leste wieziging van de zied [[:$1]] deur [[User:$2|$2]] ([[User talk:$2|Overleg]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); niet weerummedreien.
@@ -2578,7 +2600,7 @@ De leste regel uut t blokkeerlogboek steet as referensie',
 'ipbreason' => 'Reden:',
 'ipbreasonotherlist' => 'aandere reden',
 'ipbreason-dropdown' => '*Algemene redens veur t blokkeren
-** valse informasie invoeren
+** verkeerde informasie invoeren
 ** ziejen leegmaken
 ** ongewunste verwiezingen plaotsen
 ** onzinteksten schrieven
@@ -2863,6 +2885,7 @@ Alle transwiki-invoerhaandelingen wörden op-esleugen in t [[Special:Log/import|
 'import-interwiki-templates' => 'Alle mallen opnemen',
 'import-interwiki-submit' => 'Invoeren',
 'import-interwiki-namespace' => 'Doelnaamruumte:',
+'import-interwiki-rootpage' => 'Baosiszied veur doel (opsioneel):',
 'import-upload-filename' => 'Bestaandsnaam:',
 'import-comment' => 'Opmarkingen:',
 'importtext' => 'Gebruuk de [[Special:Export|uutvoerfunksie]] in de wiki waor de informasie vandaon kömp.
@@ -2898,6 +2921,9 @@ De tiedelike map is niet anwezig.',
 'import-error-interwiki' => 'De zied "$1" is niet in-evoerd umdat disse naam ereserveerd is veur externe verwiezingen (interwiki).',
 'import-error-special' => 'Zied "$1" is niet in-evoerd umdat t eplaotst is in n spesiale naamruumte waor gien ziejen in eplaotst kunnen wörden.',
 'import-error-invalid' => 'De zied" "$1" is niet in-evoerd umdat de naam ongeldig is.',
+'import-options-wrong' => 'Verkeerde {{PLURAL:$2|opsie|opsies}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'De op-egeven baosiszied is ongeldig.',
+'import-rootpage-nosubpage' => 'In de naamruumte "$1" van de baosiszied is t anmaken van onderziejen niet meugelik.',
 
 # Import log
 'importlogpage' => 'Invoerlogboek',
@@ -3015,11 +3041,34 @@ Meestentieds kömp dit deur n uutgaonde verwiezing die op de zwarte lieste steet
 
 # Info page
 'pageinfo-title' => 'Informasie over "$1"',
-'pageinfo-header-edits' => 'Bewarkingen',
+'pageinfo-header-basic' => 'Baosisinformasie',
+'pageinfo-header-edits' => 'Bewarkingsgeschiedenisse',
+'pageinfo-header-restrictions' => 'Ziedbeveiliging',
+'pageinfo-header-properties' => 'Ziedeigenschappen',
+'pageinfo-display-title' => 'Weeregeven ziednaam',
+'pageinfo-default-sort' => 'Standard sorteerwieze',
+'pageinfo-length' => 'Ziedlengte (in bytes)',
+'pageinfo-article-id' => 'Zied-ID',
+'pageinfo-robot-policy' => 'Staotus veur de zeukmasine',
+'pageinfo-robot-index' => 'Indexeerbaor',
+'pageinfo-robot-noindex' => 'Niet indexeerbaor',
 'pageinfo-views' => 'Antal keer bekeken',
-'pageinfo-watchers' => 'Antal volgers',
-'pageinfo-edits' => 'Antal bewarkingen',
-'pageinfo-authors' => 'Antal verschillende auteurs',
+'pageinfo-watchers' => 'Antal ziedvolgers',
+'pageinfo-redirects-name' => 'Deurverwiezingen naor disse zied',
+'pageinfo-subpages-name' => 'Onderziejen van disse zied',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|deurverwiezing|deurverwiezingen}}; $3 {{PLURAL:$3|niet-deurverwiezing|niet-deurverwiezingen}})',
+'pageinfo-firstuser' => 'Gebruker die de zied an-emaakt hef',
+'pageinfo-firsttime' => 'Daotum waorop de zied an-emaakt is',
+'pageinfo-lastuser' => 'Leste bewarker',
+'pageinfo-lasttime' => 'Daotum van leste bewarking',
+'pageinfo-edits' => 'Totaal antal bewarkingen',
+'pageinfo-authors' => 'Totaal antal verschillende auteurs',
+'pageinfo-recent-edits' => 'Antal nieje bewarkingen (in de veurbieje $1).',
+'pageinfo-recent-authors' => 'Leste antal van verschillende auteurs',
+'pageinfo-restriction' => 'Ziedbeveiliging ({{lcfirst:$1}})',
+'pageinfo-magic-words' => '{{PLURAL:$1|Magies woord|Magiese woorden}} ($1)',
+'pageinfo-hidden-categories' => 'Verbörgen {{PLURAL:$1|kategorie|kategorieën}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Gebruukten mal|Gebruukten mallen}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Klassiek',
@@ -3073,6 +3122,7 @@ $1',
 'file-info-size-pages' => '$1 × $2 beeldpunten, bestaandsgrootte: $3, MIME-type: $4, $5 {{PLURAL:$5|zied|ziejen}}',
 'file-nohires' => 'Gien hogere resolusie beschikbaor.',
 'svg-long-desc' => 'SVG-bestaand, uutgangsgrootte $1 × $2 beeldpunten, bestaandsgrootte: $3',
+'svg-long-desc-animated' => 'Bewegend SVG-bestaand, uutgangsgrootte $1 × $2 beeldpunten, bestaandsgrootte: $3',
 'show-big-image' => 'Volle resolusie',
 'show-big-image-preview' => 'Grootte van disse weergave: $1.',
 'show-big-image-other' => 'Aandere {{PLURAL:$2|resolusie|resolusies}}: $1.',
@@ -3082,6 +3132,8 @@ $1',
 'file-info-png-looped' => 'herhaolend',
 'file-info-png-repeat' => '$1 {{PLURAL:$1|keer|keer}} aofespeuld',
 'file-info-png-frames' => '$1 {{PLURAL:$1|beeld|beelden}}',
+'file-no-thumb-animation' => "'''Opmarking: vanwegen techniese beparkingen, zie'j bie miniaturen de boel niet bewegen.''",
+'file-no-thumb-animation-gif' => "'''Opmarking: vanwegen techniese beparkingen, zie'j bie miniaturen van GIF-aofbeeldingen mit n hoge resolusie de boel niet bewegen.''",
 
 # Special:NewFiles
 'newimages' => 'Nieje bestaanden',
@@ -3881,7 +3933,7 @@ Aanders ku\'j oek t eenvoudige formulier hieronder gebruken. Joew opmarkingen zu
 'api-error-file-too-large' => "t Bestaand da'j op-estuurd hebben is te groot.",
 'api-error-filename-tooshort' => 'De bestaandsnaam is te kort.',
 'api-error-filetype-banned' => 'Dit bestaandstype is niet toe-estaon.',
-'api-error-filetype-banned-type' => '{{PLURAL:$4|t Bestaandstype $1 wordt|De bestandstypes $1 worden}} niet toegelaten. {{PLURAL:$3|t Toe-estaone bestaandstype is|De toe-estaone bestaandstypen bin}} $2.',
+'api-error-filetype-banned-type' => '{{PLURAL:$4|t Bestaandstype $1|De bestaandstypes $1}} wörden niet toe-eleuten. {{PLURAL:$3|t Toe-estaone bestaandstype is|De toe-estaone bestaandstypen bin}} $2.',
 'api-error-filetype-missing' => 't Bestaand hef gien extensie.',
 'api-error-hookaborted' => "De wieziging die'j proberen deur te voeren is aofebreuken deur n extra uutbreiding.",
 'api-error-http' => 'Interne fout: der kon gien verbiending emaakt wörden mit de server.',
index 30b0d2b..0e6ab45 100644 (file)
@@ -1302,7 +1302,7 @@ HTML ट्यागहरु जाँच्नुहोस् ।',
 'right-userrights' => 'प्रयोगकर्ताका अधिकारहरु सम्पादन गर्ने',
 'right-userrights-interwiki' => 'अरु विकिहरुमा प्रयोगकर्ताहरुको अधिकार सम्पादन गर्ने',
 'right-siteadmin' => 'डेटाबेसको ताल्चामार्ने र ताल्चाखोल्ने',
-'right-override-export-depth' => 'गहिराइ ५ सम्मको लिंकगरिएका पृष्ठहरु सहित निर्यात गर्ने',
+'right-override-export-depth' => 'गहिराइ ५ सम्मको लिंक गरिएका पृष्ठहरु सहित निर्यात गर्ने',
 'right-sendemail' => 'अन्य प्रयोगकर्ताहरुलाई इमेल गर्ने',
 'right-passwordreset' => 'पासवर्ड परिवर्तन गर्ने ईमेलहरु हेर्नुहोस',
 
index b30c2fb..291c5b8 100644 (file)
@@ -733,10 +733,11 @@ Probeer het over een aantal minuten opnieuw.',
 Bewerken is niet mogelijk.',
 'viewsourcetext' => 'U kunt de brontekst van deze pagina bekijken en kopiëren:',
 'viewyourtext' => "U kunt '''uw bewerkingen''' aan de brontekst van deze pagina bekijken en kopiëren:",
-'protectedinterface' => 'Deze pagina bevat tekst voor berichten van de software en is beveiligd om misbruik te voorkomen.',
+'protectedinterface' => "Deze pagina bevat tekst voor berichten van de software op deze wiki en is beveiligd om misbruik te voorkomen.
+Om vertalingen voor alle wiki's toe te voegen of te wijzigen, gebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki.",
 'editinginterface' => "'''Waarschuwing:''' u bewerkt een pagina die interfacetekst voor de software bevat.
-Bewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen.
-Overweeg voor vertalingen om [//translatewiki.net/wiki/Main_Page?setlang=nl translatewiki.net] te gebruiken, het vertaalproject voor MediaWiki.",
+Bewerkingen op deze pagina beïnvloeden de gebruikersinterface van iedereen op deze wiki.
+Om vertalingen toe te voegen of te wijzigen voor alle wiki's, gebruik [//translatewiki.net/ translatewiki.net], het vertaalproject voor MediaWiki.",
 'sqlhidden' => '(SQL-zoekopdracht verborgen)',
 'cascadeprotected' => "Deze pagina kan niet bewerkt worden, omdat die is opgenomen in de volgende {{PLURAL:$1|pagina|pagina's}} die beveiligd {{PLURAL:$1|is|zijn}} met de cascade-optie:
 $2",
@@ -1036,7 +1037,7 @@ Als u dat wilt voorkomen, [[Special:UserLogin/signup|registreer u]] of [[Special
 U kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina\'s, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken] of [{{fullurl:{{FULLPAGENAME}}|action=edit}} deze pagina bewerken]</span>.',
 'noarticletext-nopermission' => 'Deze pagina bevat geen tekst.
 U kunt [[Special:Search/{{PAGENAME}}|naar deze term zoeken]] in andere pagina\'s of
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken]</span>.',
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} de logboeken doorzoeken]</span>, maar u mag de pagina niet aanmaken.',
 'missing-revision' => 'De versie #$1 van de pagina "{{PAGENAME}} bestaat niet.
 
 Dit wordt meestal veroorzaakt door het volgen van een verouderde verwijzing naar een pagina die is verwijderd.
@@ -1309,7 +1310,8 @@ Controleer de logboeken.',
 'revdelete-only-restricted' => 'Er is een fout opgetreden bij het verbergen van het item van $1, $2: u kunt geen items onderdrukken uit het zicht van beheerders zonder ook een van de andere zichtbaarheidsopties te selecteren.',
 'revdelete-reason-dropdown' => '* Veel voorkomende redenen voor verwijderen
 ** Auteursrechtenschending
-** Onbetamelijke persoonlijke gegevens
+** Onbetamelijke reactie of persoonlijke gegevens
+** Onbetamelijke gebruikersnaam
 ** Potentieel lasterlijke gegevens',
 'revdelete-otherreason' => 'Andere reden:',
 'revdelete-reasonotherlist' => 'Andere reden',
@@ -1511,7 +1513,7 @@ Hier volgt een willekeurig gegenereerde waarde die u kunt gebruiken: $1',
 'timezoneregion-indian' => 'Indische Oceaan',
 'timezoneregion-pacific' => 'Stille Oceaan',
 'allowemail' => 'E-mail van andere gebruikers toestaan',
-'prefs-searchoptions' => 'Zoekinstellingen',
+'prefs-searchoptions' => 'Zoeken',
 'prefs-namespaces' => 'Naamruimten',
 'defaultns' => 'Anders in de volgende naamruimten zoeken:',
 'default' => 'standaard',
@@ -1763,7 +1765,7 @@ Als u deze opgeeft, kan deze naam gebruikt worden om u erkenning te geven voor u
 'recentchangeslinked-toolbox' => 'Verwante wijzigingen',
 'recentchangeslinked-title' => 'Wijzigingen verwant aan "$1"',
 'recentchangeslinked-noresult' => "Er zijn in de opgegeven periode geen bewerkingen geweest op de pagina's waarheen vanaf hier verwezen wordt.",
-'recentchangeslinked-summary' => "Deze speciale pagina geeft de laatste bewerkingen weer op pagina's waarheen verwezen wordt vanaf een aangegeven pagina of vanaf pagina's in een aangegeven pagina een categorie.
+'recentchangeslinked-summary' => "Deze speciale pagina geeft de laatste bewerkingen weer op pagina's waarheen verwezen wordt vanaf een aangegeven pagina of op pagina's in een aangegeven categorie.
 Pagina's die op [[Special:Watchlist|uw volglijst]] staan worden '''vet''' weergegeven.",
 'recentchangeslinked-page' => 'Paginanaam:',
 'recentchangeslinked-to' => "Wijzigingen aan pagina's met verwijzingen naar deze pagina bekijken",
@@ -1951,7 +1953,7 @@ Als het probleem aanhoudt, neem dan contact op met een [[Special:ListUsers/sysop
 'backend-fail-internal' => 'Er is een onbekende fout opgetreden in het opslagbackend "$1".',
 'backend-fail-contenttype' => 'Het inhoudstype van het bestand om in de opslag "$1" op te slaan kon niet bepaald worden.',
 'backend-fail-batchsize' => 'Taak met $1 {{PLURAL:$1|bestandshandeling|bestandshandelingen}} in het opslagbackend; de limiet is $2 {{PLURAL:$2|handeling|handelingen}}.',
-'backend-fail-usable' => 'Het was niet mogelijk naar het bestand $1 te schrijven vanwege onvoldoende rechten of niet-aanwezige mappen of containers.',
+'backend-fail-usable' => 'Het was niet mogelijk naar het bestand $1 te schrijven of eruit te lezen vanwege onvoldoende rechten of niet-aanwezige mappen of containers.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Het was niet mogelijk een verbinding te maken met de journaldatabase voor het opslagbackend "$1".',
@@ -3246,7 +3248,7 @@ Meestal wordt dit door een externe verwijzing op een zwarte lijst veroorzaakt.',
 'pageinfo-authors' => 'Totaal aantal verschillende auteurs',
 'pageinfo-recent-edits' => 'Recent aantal bewerkingen (binnen de afgelopen $1).',
 'pageinfo-recent-authors' => 'Recent aantal verschillende auteurs',
-'pageinfo-restriction' => 'Paginabeveiliging (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Paginabeveiliging ($1)',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magisch woord|Magische woorden}} ($1)',
 'pageinfo-hidden-categories' => 'Verborgen {{PLURAL:$1|categorie|categorieën}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Gebruikt sjabloon|Gebruikte sjablonen}} ($1)',
index b337715..3ba98e8 100644 (file)
@@ -317,7 +317,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Gøym patruljerte endringar i lista over siste endringar',
 'tog-newpageshidepatrolled' => 'Gøym patruljerte sider frå lista over nye sider',
 'tog-extendwatchlist' => 'Utvid overvakingslista til å vise alle endringane, ikkje berre dei siste',
-'tog-usenewrc' => 'Bruk utvida funksjonalitet på lista over siste endringar (krev JavaScript)',
+'tog-usenewrc' => 'Grupper endringar etter side i siste endringane og på overvakingslista mi (krev JavaScript)',
 'tog-numberheadings' => 'Vis nummererte overskrifter',
 'tog-showtoolbar' => 'Vis endringsknappar (JavaScript)',
 'tog-editondblclick' => 'Endre sider med dobbeltklikk (JavaScript)',
@@ -325,17 +325,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Endre avsnitt ved å høgreklikke på avsnittsoverskrift (JavaScript)',
 'tog-showtoc' => 'Vis innhaldsliste (for sider med meir enn tre bolkar)',
 'tog-rememberpassword' => 'Hugs innlogginga mi med denne nettlesaren (for høgst {{PLURAL:$1|éin dag|$1 dagar}})',
-'tog-watchcreations' => 'Legg til sidene eg opprettar på overvakingslista mi',
-'tog-watchdefault' => 'Legg til sidene eg endrar på overvakingslista mi',
-'tog-watchmoves' => 'Legg til sidene eg flyttar på overvakingslista mi',
-'tog-watchdeletion' => 'Legg til sidene eg slettar på overvakingslista mi',
+'tog-watchcreations' => 'Legg til sidene eg opprettar og filene eg lastar opp på overvakingslista mi',
+'tog-watchdefault' => 'Legg til sidene og filene eg endrar på overvakingslista mi',
+'tog-watchmoves' => 'Legg til sidene og filene eg flytter på overvakingslista mi',
+'tog-watchdeletion' => 'Legg til sidene og filene eg slettar på overvakingslista mi',
 'tog-minordefault' => 'Merk endringar som «småplukk» som standard',
 'tog-previewontop' => 'Vis førehandsvisinga før endringsboksen',
 'tog-previewonfirst' => 'Førehandsvis første endring',
 'tog-nocache' => 'Deaktiver nettlesaren sitt mellomlager («cache»)',
-'tog-enotifwatchlistpages' => 'Send e-post når dei overvaka sidene mine vert endra',
+'tog-enotifwatchlistpages' => 'Send meg ein e-post når ei side eller ei fil på overvakingslista mi vert endra',
 'tog-enotifusertalkpages' => 'Send e-post når brukarsida mi vert endra',
-'tog-enotifminoredits' => 'Send e-post også for småplukk',
+'tog-enotifminoredits' => 'Send meg e-post sjølv for mindre endringar på sider og filer',
 'tog-enotifrevealaddr' => 'Vis e-postadressa mi i endrings-e-post',
 'tog-shownumberswatching' => 'Vis kor mange som overvakar sida',
 'tog-oldsig' => 'Noverande signatur:',
@@ -347,7 +347,7 @@ $messages = array(
 'tog-uselivepreview' => 'Bruk levande førehandsvising (eksperimentelt JavaScript)',
 'tog-forceeditsummary' => 'Spør meg når eg ikkje har skrive noko i endringssamandraget',
 'tog-watchlisthideown' => 'Gøym endringane mine i overvakingslista',
-'tog-watchlisthidebots' => 'Gøym endringar gjort av robotar i overvakingslista',
+'tog-watchlisthidebots' => 'Gøym endringar gjorde av robotar i overvakingslista',
 'tog-watchlisthideminor' => 'Gøym småplukk i overvakingslista',
 'tog-watchlisthideliu' => 'Gøym endringar av innlogga brukarar i overvakingslista.',
 'tog-watchlisthideanons' => 'Gøym endringar av anonyme brukarar i overvakingslista.',
@@ -577,6 +577,10 @@ $1',
 'youhavenewmessages' => 'Du har $1 ($2).',
 'newmessageslink' => 'nye meldingar',
 'newmessagesdifflink' => 'sjå skilnad',
+'youhavenewmessagesfromusers' => 'Du har $1 frå {{PLURAL:$3|ein annan bruker| $3 brukarar}} ($2).',
+'youhavenewmessagesmanyusers' => 'Du har $1 frå mange brukarar ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|ei ny melding|nye meldingar}}',
+'newmessagesdifflinkplural' => 'siste {{PLURAL:$1|endringa|endringane}}',
 'youhavenewmessagesmulti' => 'Du har nye meldingar på $1',
 'editsection' => 'endre',
 'editold' => 'endre',
@@ -661,6 +665,8 @@ Meld gjerne problemet til ein [[Special:ListUsers/sysop|administrator]] og oppgj
 'cannotdelete' => 'Kunne ikkje slette sida eller fila «$1».
 Ho kan allereie vere sletta av andre.',
 'cannotdelete-title' => 'Kan ikkje sletta sida «$1»',
+'delete-hook-aborted' => 'Slettinga vart avbroten av ein funksjon.
+Funksjonen oppgav inga årsak.',
 'badtitle' => 'Feil i tittelen',
 'badtitletext' => 'Den ønskte tittelen var ulovleg, tom eller feillenkja frå ein annan wiki. Kanskje inneheld han eitt eller fleire teikn som ikkje kan brukast i sidetitlar.',
 'perfcached' => 'Dei følgjande dataa er frå mellomlageret åt tenaren og er ikkje utan vidare oppdatert. Høgst {{PLURAL:$1|eitt resultat er tilgjengeleg|$1 resultat er tilgjengelege}} i mellomlageret.',
@@ -674,8 +680,11 @@ Ho kan allereie vere sletta av andre.',
 'protectedpagetext' => 'Denne sida er verna for å hindre endring.',
 'viewsourcetext' => 'Du kan sjå og kopiere kjeldekoden til denne sida:',
 'viewyourtext' => "Du kan sjå og kopiera kjelda til '''endringane dine''' på sida:",
-'protectedinterface' => 'Denne sida inneheld tekst som er brukt av brukargrensesnittet for programvara, og er difor låst for å hindre hærverk.',
-'editinginterface' => "'''Åtvaring:''' Du endrar på ei side som inneheld tekst som er brukt av brukargrensesnittet for programvara. Endringar på denne sida påverkar utsjånaden til sida for dei andre brukarane. Dersom du ynskjer å setje om, ver venleg og vurder å bruke [//translatewiki.net/wiki/Main_Page?setlang=nn translatewiki.net], prosjektet for omsetjing av MediaWiki.",
+'protectedinterface' => 'Denne sida inneheld tekst nytta av brukargrensesnittet for programvara på wikien, og er låst for å hindra hærverk.
+For å leggja til eller endra omsetjingar for alle wikiar, gjer vel å nytta [//translatewiki.net/wiki/Main_Page?setlang=nn translatewiki.net], prosjektet for lokalisering av MediaWiki.',
+'editinginterface' => "'''Åtvaring:''' Du endrar på ei side som inneheld tekst nytta av brukargrensesnittet for programvara.
+Endringar på denne sida påverkar utsjånaden til brukargrensesnittet for dei andre brukarane av wikien.
+For å leggja til eller endra omsetjingar, gjer vel å nytta [//translatewiki.net/wiki/Main_Page?setlang=nn translatewiki.net], prosjektet for lokalisering av MediaWiki.",
 'sqlhidden' => '(SQL-førespurnaden er gøymd)',
 'cascadeprotected' => 'Denne sida er verna mot endring fordi ho er inkludert i {{PLURAL:$1|den opplista sida|dei opplista sidene}} som har djupvern slått på:
 $2',
@@ -685,8 +694,13 @@ $2',
 'ns-specialprotected' => 'Sider i {{ns:special}}-namnerommet kan ikkje endrast.',
 'titleprotected' => "Denne sidetittelen er verna mot oppretting av [[User:$1|$1]].
 Grunnen som er gjeven er: ''$2''.",
+'filereadonlyerror' => 'Kan ikkje endra fila «$1» av di filsamlinga «$2» er skriveverna.
+
+Administratoren som låste filsamlinga oppgav den fylgjande årsaka: «$3».',
 'invalidtitle-knownnamespace' => 'Ugyldig tittel med namnerommet «$2» og teksten «$3»',
 'invalidtitle-unknownnamespace' => 'Ugyldig tittel med ukjend namneromstal $1 og teksten «$2»',
+'exception-nologin' => 'Ikkje innlogga',
+'exception-nologin-text' => 'Sida eller handlinga krev at du er innlogga på wikien.',
 
 # Virus scanner
 'virus-badscanner' => "Dårleg konfigurasjon: ukjend virusskanner: ''$1''",
@@ -707,6 +721,7 @@ Hugs at du kan endre på [[Special:Preferences|innstillingane]] dine.',
 'remembermypassword' => 'Hugs innlogginga mi på denne datamaskinen (høgst {{PLURAL:$1|éin dag|$1 dagar}})',
 'securelogin-stick-https' => 'Fortset HTTPS-tilkopling etter innlogging.',
 'yourdomainname' => 'Domenet ditt',
+'password-change-forbidden' => 'Du kan ikkje endra passord på denne wikien.',
 'externaldberror' => 'Det var anten ein ekstern databasefeil i tilgjengekontrollen, eller du har ikkje løyve til å oppdatere den eksterne kontoen din.',
 'login' => 'Logg inn',
 'nav-login-createaccount' => 'Lag brukarkonto / logg inn',
@@ -816,16 +831,23 @@ Du kan allereie ha byta passordet, eller ha bede om å få eit nytt mellombels p
 'passwordreset-capture-help' => 'Huk av her dersom du vil sjå eposten (med førebels passord) i tillegg til at han blir sendt til brukaren.',
 'passwordreset-email' => '↓E-postadresse:',
 'passwordreset-emailtitle' => '↓Kontodetaljar på {{SITENAME}}',
-'passwordreset-emailtext-ip' => 'Nokon (sannsynleg deg, frå IP-adresse $1) ba om ei påminning om kontodetaljane dine for {{SITENAME}} ($4). Følgjane brukar {{PLURAL:$3|brukar|brukarar}} er assosiert med denne epost-adressa:
+'passwordreset-emailtext-ip' => 'Nokon (sannsynlegvis deg, frå IP-adressa $1) bad om ei påminning for kontodetaljane dine for {{SITENAME}} ($4). {{PLURAL:$3|Den fylgjande brukarkontoen|Dei fylgjande brukarkontoane}} er assosierte med denne e-postadressa:
+
+$2
+
+{{PLURAL:$3|Dette mellombels passordet|Desse mellombels passorda}} vil verta ugilde om {{PLURAL:$5|éin dag|$5 dagar}}.
+Du bør logga inn og velja eit nytt passord no. Om nokon andre enn deg bad om denne påminninga, eller du har kome i hug det opphavlege passordet og ikkje lenger ynskjer å endra det, kan du sjå bort frå denne meldinga og halda fram med å nytta det gamle passordet ditt.',
+'passwordreset-emailtext-user' => 'Brukaren $1 på {{SITENAME}} bad om ei påminning for kontodetaljane dine for {{SITENAME}} ($4). {{PLURAL:$3|Den fylgjande brukarkontoen|Dei fylgjande brukarkontoane}} er assosierte med denne e-postadressa:
 
 $2
 
-{{PLURAL:$3|Dette førebelse passordet|Desse førebelse passorda}} vil løpe ut om {{PLURAL:$5|ein dag|$5 dagar}}.
-Du bør logge inn og velje eit nytt passord no. Dersom nokon andre kom med denne førespurnaden, eller dersom du hugsar ditt opprinnelege passord, og du ikkje ynskjar å endre det, kan du ignorere denne eposten, og halde fram med å bruke ditt gamle passord.',
+{{PLURAL:$3|Dette mellombels passordet|Desse mellombels passorda}} vil verta ugilde om {{PLURAL:$5|éin dag|$5 dagar}}.
+Du bør logga inn og velja eit nytt passord no. Om nokon andre enn deg bad om denne påminninga, eller du har kome i hug det opphavlege passordet og ikkje lenger ynskjer å endra det, kan du sjå bort frå denne meldinga og halda fram med å nytta det gamle passordet ditt.',
 'passwordreset-emailelement' => '↓Brukarnamn: $1
 Mellombels passord: $2',
 'passwordreset-emailsent' => '↓Ei påminning har vorte sendt på e-post.',
 'passwordreset-emailsent-capture' => 'Eposten under er sendt ut som ei påminning.',
+'passwordreset-emailerror-capture' => 'Ein påminnings-e-post vart oppretta, og er vist nedanfor; men det lukkast ikkje å senda han til brukaren: $1',
 
 # Special:ChangeEmail
 'changeemail' => '↓Endre e-postadresse',
@@ -863,11 +885,11 @@ Mellombels passord: $2',
 'subject' => 'Emne/overskrift:',
 'minoredit' => 'Småplukk',
 'watchthis' => 'Overvak sida',
-'savearticle' => 'Lagre',
+'savearticle' => 'Lagra sida',
 'preview' => 'Førehandsvising',
 'showpreview' => 'Førehandsvis',
 'showlivepreview' => 'Levande førehandsvising',
-'showdiff' => 'Vis skilnad',
+'showdiff' => 'Vis skilnader',
 'anoneditwarning' => "'''Åtvaring:''' Du er ikkje innlogga. IP-adressa di vert lagra i historikken for sida.",
 'anonpreviewwarning' => "''Du er ikkje innlogga. Lagrar du vil IP-adressa di verta førd opp i endringshistorikken til denne sida.''",
 'missingsummary' => "'''Påminning:''' Du har ikkje skrive noko endringssamandrag. Dersom du trykkjer «Lagre» ein gong til, vert endringa di lagra utan.",
@@ -877,9 +899,9 @@ Dersom du trykkjer «{{int:savearticle}}» ein gong til, vert endringa di lagra
 'summary-preview' => 'Førehandsvising av endringssamandraget:',
 'subject-preview' => 'Førehandsvising av emne/overskrift:',
 'blockedtitle' => 'Brukaren er blokkert',
-'blockedtext' => "'''Brukarnamnet ditt eller IP-adressa di er blokkert frå endring'''
+'blockedtext' => "'''Brukarnamnet ditt eller IP-adressa di er blokkert'''
 
-Blokkeringa vart gjort av $1.
+Blokkeringa vart gjord av $1.
 Denne grunnen vart gjeven: ''$2''.
 
 * Blokkeringa byrja: $8
@@ -889,7 +911,7 @@ Denne grunnen vart gjeven: ''$2''.
 Du kan kontakte $1 eller ein annan [[{{MediaWiki:Grouppage-sysop}}|administrator]] for å diskutere blokkeringa.
 Ver merksam på at du ikkje kan bruke «send e-post til brukar»-funksjonen så lenge du ikkje har ei gyldig e-postadresse registrert i [[Special:Preferences|innstillingane dine]]. Du kan heller ikkje bruke funksjonen dersom du er blokkert frå å sende e-post.
 IP-adressa di er $3, og blokkeringsnummeret er $5.
-Ver venleg og opplys om dette ved eventuelle førespurnader.",
+Tak med alle opplysningane over ved eventuelle førespurnader.",
 'autoblockedtext' => "IP-adressa di er automatisk blokkert fordi ho vart brukt av ein annan brukar som vart blokkert av $1. Grunne til dette vart gjeve som: ''$2''.
 
 * Blokkeringa byrja: $8
@@ -922,11 +944,15 @@ Passordet for den nye kontoen kan verta endra på ''[[Special:ChangePassword|end
 'anontalkpagetext' => "----''Dette er ei diskusjonsside for ein anonym brukar som ikkje har oppretta konto eller ikkje har logga inn.
 Vi er difor nøydde til å bruke den numeriske IP-adressa til å identifisere brukaren. Same IP-adresse kan vere knytt til fleire brukarar. Om du er ein anonym brukar og meiner at du har fått irrelevante kommentarar på ei slik side, [[Special:UserLogin/signup|opprett ein brukarkonto]] eller [[Special:UserLogin|logg inn]] slik at vi unngår framtidige forvekslingar med andre anonyme brukarar.''",
 'noarticletext' => 'Det er nett no ikkje noko tekst på denne sida.
-Du kan [[Special:Search/{{PAGENAME}}|søkja etter denne sidetittelen]] i andre sider, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søkja i dei relaterte loggane]
+Du kan [[Special:Search/{{PAGENAME}}|søkja etter sidetittelen]] i andre sider, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søkja i dei relaterte loggane]
 eller [{{fullurl:{{FULLPAGENAME}}|action=edit}} endra denne sida]</span>.',
 'noarticletext-nopermission' => 'Der er nett no ikkje noko tekst på denne sida.
-Du kan [[Special:Search/{{PAGENAME}}|søkja etter tittelen på denne sida]] på andre sider,
-eller <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sjå loggføringar med tilknytting]</span>.',
+Du kan [[Special:Search/{{PAGENAME}}|søkja etter sidetittelen]] i andre sider
+eller <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} søkja i dei relaterte loggane]</span>, men du har ikkje løyve til å oppretta denne sida.',
+'missing-revision' => 'Versjonen #$1 av sida med namnet «{{PAGENAME}}» finst ikkje.
+
+Dette skriv seg som oftast frå at ei forelda historikklenkje vart fylgd til ei side som er sletta.
+Detaljar kan ein finna i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletteloggen].',
 'userpage-userdoesnotexist' => 'Brukarkontoen «<nowiki>$1</nowiki>» finst ikkje. Vil du verkeleg opprette/endre denne sida?',
 'userpage-userdoesnotexist-view' => 'Brukarkontoen «$1» er ikkje oppretta.',
 'blocked-notice-logextract' => 'Denne brukaren er for tida blokkert.
@@ -997,7 +1023,7 @@ Det siste loggelementet er oppgjeve under som referanse:",
 'titleprotectedwarning' => "'''Åtvaring: Denne sida er verna, så berre [[Special:ListGroupRights|nokre brukarar]] kan opprette henne.'''
 Det siste loggelementet er oppgjeve under som referanse:",
 'templatesused' => '{{PLURAL:$1|Mal|Malar}} som er brukte på denne sida:',
-'templatesusedpreview' => '{{PLURAL:$1|Mal|Malar}} som er brukte i denne førehandsvisinga:',
+'templatesusedpreview' => '{{PLURAL:$1|Mal som er brukt|Malar som er brukte}} i førehandsvisinga:',
 'templatesusedsection' => '{{PLURAL:$1|Mal|Malar}} som er brukte i denne bolken:',
 'template-protected' => '(verna)',
 'template-semiprotected' => '(delvis verna)',
@@ -1024,6 +1050,7 @@ Det ser ut til at ho er sletta.',
 'edit-conflict' => 'Endringskonflikt.',
 'edit-no-change' => 'Redigeringa di vart ignorert fordi det ikkje vart gjort endringar i teksten.',
 'edit-already-exists' => 'Kunne ikkje opprette ny side fordi ho alt eksisterer.',
+'defaultmessagetext' => 'Standard meldingstekst',
 
 # Parser/template warnings
 'expensive-parserfunction-warning' => 'Åtvaring: Denne sida inneheld for mange prosesskrevande parserfunksjonar.
@@ -1039,10 +1066,17 @@ Desse parameterane har vorte utelatne.',
 'parser-template-loop-warning' => 'Malløkka oppdaga: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Malen er inkludert for mange gonger ($1)',
 'language-converter-depth-warning' => 'Språkomformaren si djubdegrense vart overstege ($1)',
+'node-count-exceeded-category' => 'Sider der talet på knutepunkt er overskride',
+'node-count-exceeded-warning' => 'Sida har overskride talet på knutepunkt',
+'expansion-depth-exceeded-category' => 'Sider der utvidingsdjupna er overskriden',
+'expansion-depth-exceeded-warning' => 'Sida har overskride utvidingsdjupna',
+'parser-unstrip-loop-warning' => 'Det vart oppdaga ei løkke i Unstrip-funksjonen',
+'parser-unstrip-recursion-limit' => 'Rekursjonsgrensa for Unstrip-funksjonen er overskriden ($1)',
+'converter-manual-rule-error' => 'Det vart oppdaga ein feil i ein manuell språkkonverteringsregel',
 
 # "Undo" feature
 'undo-success' => 'Endringa kan attenderullast. Ver venleg og sjå over skilnadene nedanfor for å vere sikker på at du vil attenderulle. Deretter kan du lagre attenderullinga.',
-'undo-failure' => 'Endringa kunne ikkje attenderullast grunna konflikt med endringar som er gjort i mellomtida.',
+'undo-failure' => 'Endringa kunne ikkje attenderullast grunna konflikt med endringar som er gjorde i mellomtida.',
 'undo-norev' => 'Endringa kunne ikkje fjernast fordi han ikkje finst eller vart sletta',
 'undo-summary' => 'Rullar attende versjon $1 av [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusjon]])',
 
@@ -1363,7 +1397,7 @@ Her er det framlegg til eit tal som kan nyttast, tilfelleleg henta fram: $1',
 'timezoneregion-indian' => 'Indiahavet',
 'timezoneregion-pacific' => 'Stillehavet',
 'allowemail' => 'Tillat e-post frå andre brukarar',
-'prefs-searchoptions' => 'Søkjealternativ',
+'prefs-searchoptions' => 'Søk',
 'prefs-namespaces' => 'Namnerom',
 'defaultns' => 'Søk elles i desse namneromma:',
 'default' => 'standard',
@@ -1487,6 +1521,7 @@ Dette kan ikkje tilbakestillast.',
 'right-writeapi' => 'Redigere via API',
 'right-delete' => 'Slette sider',
 'right-bigdelete' => 'Slette sider med lange historikkar',
+'right-deletelogentry' => 'Sletta og attoppretta visse loggoppføringar',
 'right-deleterevision' => 'Slette og gjenopprette enkeltendringar av sider',
 'right-deletedhistory' => 'Sjå sletta sidehistorikk utan tilhøyrande sidetekst',
 'right-deletedtext' => 'Sjå sletta tekst og endringar i høve til sletta versjonar',
@@ -1506,7 +1541,7 @@ Dette kan ikkje tilbakestillast.',
 'right-editusercssjs' => 'Endre andre brukarar sine CSS- og JS-filer',
 'right-editusercss' => 'Endre andre brukarar sine CSS-filer',
 'right-edituserjs' => 'Endre andre brukarar sine JS-filer',
-'right-rollback' => 'Raskt tilbakestille den siste brukaren som har endra ei viss side',
+'right-rollback' => 'Snøgt rulla attende endringane til den siste brukaren som endra ei viss side',
 'right-markbotedits' => 'Markere tilbakerullingar som robotendringar',
 'right-noratelimit' => 'Vert ikkje påverka av snøggleiksgrenser',
 'right-import' => 'Importere sider frå andre wikiar',
@@ -1555,6 +1590,7 @@ Dette kan ikkje tilbakestillast.',
 'action-suppressionlog' => 'sjå denne private loggen',
 'action-block' => 'blokkere denne brukaren frå å gjere endringar',
 'action-protect' => 'endre vernenivået til sida',
+'action-rollback' => 'snøgt rulla attende endringane til den siste brukaren som endra ei viss side',
 'action-import' => 'importere denne sida frå ein annan wiki',
 'action-importupload' => 'importere denne sida frå ei opplasta fil',
 'action-patrol' => 'merke andre endringar av andre brukar som patruljert',
@@ -1576,7 +1612,7 @@ Dette kan ikkje tilbakestillast.',
 'recentchanges-label-minor' => 'Dette er ei mindre endring',
 'recentchanges-label-bot' => 'Denne endringa vart gjort av ein bot',
 'recentchanges-label-unpatrolled' => 'Denne endringa er ikkje patruljert enno',
-'rcnote' => "Nedanfor er {{PLURAL:$1|den siste endringa|dei siste '''$1''' endringane}} gjort {{PLURAL:$2|den siste dagen|dei siste '''$2''' dagane}}, for $4, kl. $5.",
+'rcnote' => "Nedanfor er {{PLURAL:$1|den siste endringa gjord|dei siste '''$1''' endringane gjorde}} {{PLURAL:$2|den siste dagen|dei siste '''$2''' dagane}}, for $4, kl. $5.",
 'rcnotefrom' => "Nedanfor vert opp til '''$1''' endringar sidan  ''' $2''' viste.",
 'rclistfrom' => 'Vis nye endringar sidan $1',
 'rcshowhideminor' => '$1 småplukk',
@@ -1596,6 +1632,7 @@ Dette kan ikkje tilbakestillast.',
 'number_of_watching_users_pageview' => '[{{PLURAL:$1|Éin brukar|$1 brukarar}} overvakar]',
 'rc_categories' => 'Avgrens til kategoriar (skilde med «|»)',
 'rc_categories_any' => 'Alle',
+'rc-change-size-new' => '$1 {{PLURAL:$1|byte}} etter endringa',
 'newsectionsummary' => '/* $1 */ ny bolk',
 'rc-enhanced-expand' => 'Vis detaljar (krev JavaScript)',
 'rc-enhanced-hide' => 'Skjul detaljar',
@@ -1607,7 +1644,7 @@ Dette kan ikkje tilbakestillast.',
 'recentchangeslinked-toolbox' => 'Relaterte endringar',
 'recentchangeslinked-title' => 'Endringar relaterte til «$1»',
 'recentchangeslinked-noresult' => 'Det er ikkje gjort endringar på sidene som var lenkja hit i den oppgjevne perioden.',
-'recentchangeslinked-summary' => "Denne spesialsida inneheld alle endringane som er gjort på sider som vert ''lenkja til'' frå denne (eller på sider i ein viss kategori). Dei av sidene du har på [[Special:Watchlist|overvakingslista]] di er '''utheva'''.",
+'recentchangeslinked-summary' => "Dette er ei liste over nylege endringar som er gjorde på sider som vert lenkja til frå ei oppgjeven side (eller på medlemer av ein oppgjeven kategori). Sider på [[Special:Watchlist|overvakingslista di]] er '''utheva'''.",
 'recentchangeslinked-page' => 'Sidenamn:',
 'recentchangeslinked-to' => 'Vis endringar på sider som lenkjer til den gitte sida i staden',
 
@@ -1655,19 +1692,19 @@ For å bruke ei fil på ei side, bruk ei lenkje på eit liknande format:
 'filetype-bad-ie-mime' => 'Kan ikkje lasta opp fila då Internet Explorer ville merka ho som "$1", ein ikkje-tillate og potensielt farleg filtype.',
 'filetype-unwanted-type' => "«'''.$1'''» er ein uynskt filtype.
 {{PLURAL:$3|Føretrekt filtype er|Føretrekte filtypar er}} $2.",
-'filetype-banned-type' => "«'''.$1'''» er ikkje ein tillaten filtype.
-{{PLURAL:$3|Tillaten filtype er|Tillatne filtypar er}} $2.",
+'filetype-banned-type' => "'''«.$1»''' er ikkje {{PLURAL:$4|ein tillaten filtype|tillatne filtypar}}.
+{{PLURAL:$3|Tillaten filtype|Tillatne filtypar}} er $2.",
 'filetype-missing' => 'Fila har inga ending (som t.d. «.jpg»).',
 'empty-file' => 'Fila du leverte var tom.',
 'file-too-large' => 'Fila du leverte var for stor.',
 'filename-tooshort' => 'Filnamnet er for kort.',
 'filetype-banned' => 'Denne filtypen er ikkje tillaten.',
 'verification-error' => 'Denne fila klarde ikkje verifiseringsprossesen.',
-'hookaborted' => "Endringane du prøvde gjere blei avbrotne av ei ''extension hook''.",
+'hookaborted' => 'Endringa du freista vart avbroten av ei utviding.',
 'illegal-filename' => 'Filnamnet er ikkje tillate.',
 'overwrite' => 'Det er ikkje tillate å skriva over ei eksisterande fil.',
 'unknown-error' => 'Det oppstod ein ukjend feil.',
-'tmp-create-error' => 'Kunne ikkje opprette midlertidig fil.',
+'tmp-create-error' => 'Kunne ikkje oppretta mellombels fil.',
 'tmp-write-error' => 'Feil ved skriving av midlertidig fil.',
 'large-file' => 'Det er tilrådd at filene ikkje er større enn $1, denne fila er $2.',
 'largefileserver' => 'Denne fila er større enn det tenaren tillèt.',
@@ -1749,9 +1786,32 @@ $1',
 'upload-http-error' => 'Ein HTTP-feil oppstod: $1',
 
 # File backend
+'backend-fail-stream' => 'Kunne ikkje strøyma fila «$1».',
+'backend-fail-backup' => 'Kunne ikkje tryggingskopiera fila «$1».',
+'backend-fail-notexists' => 'Fila $1 finst ikkje.',
+'backend-fail-notsame' => 'Ein ikkje-identisk fil finst alt på «$1».',
 'backend-fail-invalidpath' => '$1 er ikkje ein gyldig lagringsstig.',
 'backend-fail-delete' => 'Kunne ikkje sletta fila «$1».',
 'backend-fail-alreadyexists' => 'Fila $1 finst frå før.',
+'backend-fail-store' => 'Kunne ikkje lagra fila «$1» på «$2».',
+'backend-fail-copy' => 'Kunne ikkje kopiera fila «$1» til «$2».',
+'backend-fail-move' => 'Kunne ikkje flytta fila «$1» til «$2».',
+'backend-fail-opentemp' => 'Kunne ikkje opna mellombels fil.',
+'backend-fail-writetemp' => 'Kunne ikkje skriva til mellombels fil.',
+'backend-fail-closetemp' => 'Kunne ikkje lata att mellombels fil.',
+'backend-fail-read' => 'Kunne ikkje lesa fila «$1».',
+'backend-fail-create' => 'Kunne ikkje oppretta fila «$1».',
+
+# Lock manager
+'lockmanager-fail-releaselock' => 'Kunne ikkje løysa låsen for «$1».',
+
+# ZipDirectoryReader
+'zip-wrong-format' => 'Den oppgjevne fila var ikkje ei ZIP-fil',
+'zip-bad' => 'Fila er ei skadd eller på annan måte uleseleg ZIP-fil.
+Ho kan ikkje tryggingskontrollerast.',
+
+# Special:UploadStash
+'uploadstash-refresh' => 'Oppdater fillista',
 
 # img_auth script messages
 'img-auth-accessdenied' => 'Tilgjenge avslått',
@@ -1795,7 +1855,8 @@ For best tryggleik, er img_auth.php sett ut av funksjon.',
 'upload_source_file' => ' (ei fil på datamaskina di)',
 
 # Special:ListFiles
-'listfiles-summary' => 'Denne spesialsida viser alle opplasta filer. Dei sist opplasta filene vert viste på toppen som standard. Klikk på ei kolonneoverskrift for å byte sorteringsmetode.',
+'listfiles-summary' => 'Spesialsida viser alle opplasta filer.
+Når ho er filtrert etter brukar, vert berre filene der brukaren lasta opp den siste versjonen viste.',
 'listfiles_search_for' => 'Søk etter filnamn:',
 'imgfile' => 'fil',
 'listfiles' => 'Filliste',
@@ -1804,7 +1865,7 @@ For best tryggleik, er img_auth.php sett ut av funksjon.',
 'listfiles_name' => 'Namn',
 'listfiles_user' => 'Brukar',
 'listfiles_size' => 'Storleik',
-'listfiles_description' => 'Beskriving',
+'listfiles_description' => 'Skildring',
 'listfiles_count' => 'Versjonar',
 
 # File description page
@@ -1843,6 +1904,7 @@ Skildringa frå [$2 filskildringssida] der er vist nedanfor.',
 'uploadnewversion-linktext' => 'Last opp ny versjon av denne fila',
 'shared-repo-from' => 'frå $1',
 'shared-repo' => 'eit sams fillager',
+'upload-disallowed-here' => 'Diverre kan du ikkje overskriva dette biletet.',
 
 # File reversion
 'filerevert' => 'Rulla attende $1',
@@ -1921,7 +1983,9 @@ Skildringa frå [$2 filskildringssida] der er vist nedanfor.',
 
 'disambiguations' => 'Sider som lenkjer til fleirtydingssider',
 'disambiguationspage' => 'Template:Fleirtyding',
-'disambiguations-text' => "Sidene nedanfor har lenkje til ei '''fleirtydingsside'''. Dei bør ha lenkje til det rette oppslagsordet i staden for.<br />Sider vert handsama som fleirtydingssider dersom dei inneheld ein mal som har lenkje på [[MediaWiki:Disambiguationspage]].",
+'disambiguations-text' => "Dei fylgjande sidene inneheld minst éi lenkje til ei '''fleirtydingsside'''.
+Dei bør kan henda lenkja til ei meir passande side i staden.<br />
+Ei side vert handsama som ei fleirtydingsside om ho nyttar ein mal som er lenkja til frå [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects' => 'Doble omdirigeringar',
 'doubleredirectstext' => 'Kvar line inneheld lenkjer til den første og den andre omdirigeringa, og den første lina frå den andre omdirigeringsteksten. Det gjev som regel den «rette» målartikkelen, som den første omdirigeringa skulle ha peikt på. <del>Overstrykne</del> liner har vorte retta på.',
@@ -1944,13 +2008,14 @@ Skildringa frå [$2 filskildringssida] der er vist nedanfor.',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|byte}}',
 'ncategories' => '$1 {{PLURAL:$1|kategori|kategoriar}}',
+'ninterwikis' => '{{PLURAL:$1|éin interwiki|$1 interwikiar}}',
 'nlinks' => '{{PLURAL:$1|Éi lenkje|$1 lenkjer}}',
 'nmembers' => '$1 {{PLURAL:$1|medlem|medlemmer}}',
 'nrevisions' => '{{PLURAL:$1|Éin versjon|$1 versjonar}}',
 'nviews' => '{{PLURAL:$1|Éi vising|$1 visingar}}',
 'nimagelinks' => 'Brukt på $1 {{PLURAL:$1|side|sider}}',
 'ntransclusions' => 'brukt på $1 {{PLURAL:$1|side|sider}}',
-'specialpage-empty' => 'Denne sida er tom.',
+'specialpage-empty' => 'Det er ingen resultat for denne rapporten.',
 'lonelypages' => 'Foreldrelause sider',
 'lonelypagestext' => 'Følgjande sider er ikkje lenkja til på andre sider på {{SITENAME}}.',
 'uncategorizedpages' => 'Ukategoriserte sider',
@@ -1970,8 +2035,10 @@ Skildringa frå [$2 filskildringssida] der er vist nedanfor.',
 'mostlinkedtemplates' => 'Mest brukte malar',
 'mostcategories' => 'Sidene med flest kategoriar',
 'mostimages' => 'Mest brukte filer',
+'mostinterwikis' => 'Sidene med flest interwikiar',
 'mostrevisions' => 'Sidene med flest endringar',
 'prefixindex' => 'Alle sider med forstaving',
+'prefixindex-namespace' => 'Alle sider med førefeste ($1-namnerommet)',
 'shortpages' => 'Korte sider',
 'longpages' => 'Lange sider',
 'deadendpages' => 'Blindvegsider',
@@ -1994,7 +2061,7 @@ Skildringa frå [$2 filskildringssida] der er vist nedanfor.',
 'ancientpages' => 'Eldste sider',
 'move' => 'Flytt',
 'movethispage' => 'Flytt denne sida',
-'unusedimagestext' => 'Dei fylgjande filene finst, men vert ikkje nytta på noka sida.
+'unusedimagestext' => 'Dei fylgjande filene finst, men vert ikkje nytta på noka side.
 Merk at andre internettsider kan ha direkte lenkjer til filer, og difor kan filene vera nytta aktivt trass i at dei er lista opp her.',
 'unusedcategoriestext' => 'Dei følgjande kategorisidene er oppretta, sjølv om ingen artikkel eller kategori brukar dei.',
 'notargettitle' => 'Inkje mål',
@@ -2004,6 +2071,7 @@ Merk at andre internettsider kan ha direkte lenkjer til filer, og difor kan file
 'pager-newer-n' => '{{PLURAL:$1|nyare|nyare $1}}',
 'pager-older-n' => '{{PLURAL:$1|eldre|eldre $1}}',
 'suppress' => 'Historikkfjerning',
+'querypage-disabled' => 'Spesialsida er slegen av for skuld yting.',
 
 # Book sources
 'booksources' => 'Bokkjelder',
@@ -2025,12 +2093,12 @@ Merk at andre internettsider kan ha direkte lenkjer til filer, og difor kan file
 # Special:AllPages
 'allpages' => 'Alle sider',
 'alphaindexline' => '$1 til $2',
-'nextpage' => 'Neste sida ($1)',
+'nextpage' => 'Neste side ($1)',
 'prevpage' => 'Førre sida ($1)',
 'allpagesfrom' => 'Vis sider frå:',
 'allpagesto' => 'Vis sider til og med:',
 'allarticles' => 'Alle sider',
-'allinnamespace' => 'Alle sider ($1 namnerom)',
+'allinnamespace' => 'Alle sider ($1-namnerommet)',
 'allnotinnamespace' => 'Alle sider (ikkje i $1-namnerommet)',
 'allpagesprev' => 'Førre',
 'allpagesnext' => 'Neste',
@@ -2041,6 +2109,8 @@ Merk at andre internettsider kan ha direkte lenkjer til filer, og difor kan file
 'allpages-hide-redirects' => 'Gøym omdirigeringar',
 
 # SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Du ser på ei mellomlagra versjon av sida, som kan vera opp til $1 gamal.',
+'cachedspecial-viewing-cached-ts' => 'Du ser på ein mellomlagra versjon av sida, som ikkje tarv vera heilt oppdatert.',
 'cachedspecial-refresh-now' => 'Sjå siste.',
 
 # Special:Categories
@@ -2107,6 +2177,8 @@ Sjå òg [[Special:WantedCategories|ønska kategoriar]].',
 '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',
+'emailuser-title-target' => 'Send epost åt {{GENDER:$1|brukaren}}',
+'emailuser-title-notarget' => 'Send e-post åt brukar',
 'emailpage' => 'Send e-post åt brukar',
 'emailpagetext' => 'Du kan nytte skjemaet nedanfor til å sende ein e-post til denne brukaren.
 E-postadressa du har sett i [[Special:Preferences|innstillingane dine]] vil dukke opp i «frå»-feltet på denne e-posten, så mottakaren er i stand til å svare.',
@@ -2134,6 +2206,10 @@ E-postadressa du har sett i [[Special:Preferences|innstillingane dine]] vil dukk
 'emailsenttext' => 'E-posten er sendt.',
 'emailuserfooter' => 'E-posten vart sendt av $1 til $2 via «Send e-post»-funksjonen på {{SITENAME}}.',
 
+# User Messenger
+'usermessage-summary' => 'Lèt att ei systemmelding.',
+'usermessage-editor' => 'Systembodbringar',
+
 # Watchlist
 'watchlist' => 'Overvakingsliste',
 'mywatchlist' => 'Overvakingslista mi',
@@ -2245,11 +2321,11 @@ Tilbakemeldingar og anna hjelp:
 'rollbacklinkcount-morethan' => 'rulla attende meir enn {{PLURAL:$1|éi endring|$1 endringar}}',
 'rollbackfailed' => 'Kunne ikkje rulle attende',
 'cantrollback' => 'Kan ikkje rulle attende fordi den siste brukaren er den einaste forfattaren.',
-'alreadyrolled' => 'Kan ikkje rulle attende den siste endringa av [[$1]] gjort av [[User:$2|$2]] ([[User talk:$2|diskusjon]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) fordi nokon andre alt har endra sida att eller fjerna endringa.
+'alreadyrolled' => 'Kan ikkje rulla attende den siste endringa på [[:$1]] gjord av [[User:$2|$2]] ([[User talk:$2|diskusjon]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) av di nokon andre alt har endra eller attenderulla sida.
 
-Den siste endringa vart gjort av [[User:$3|$3]] ([[User talk:$3|brukardiskusjon]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
+Den siste endringa vart gjord av [[User:$3|$3]] ([[User talk:$3|brukardiskusjon]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).',
 'editcomment' => "Samandraget for endringa var: «''$1''».",
-'revertpage' => 'Attenderulla endring gjort av [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusjon]]) til tidlegare versjon endra av [[User:$1|$1]]',
+'revertpage' => 'Attenderulla endring gjord av [[Special:Contributions/$2|$2]] ([[User talk:$2|diskusjon]]) til siste versjonen av [[User:$1|$1]]',
 'revertpage-nouser' => 'Tilbakestilte endringar av (brukarnamn fjerna) til den siste versjonen av [[User:$1|$1]]',
 'rollback-success' => 'Rulla attende endringane av $1, tilbake til siste versjon av $2.',
 
@@ -2268,6 +2344,7 @@ Sjå [[Special:ProtectedPages|lista over verna sider]] for lista over vern som n
 'protect-title' => 'Vernar «$1»',
 'protect-title-notallowed' => 'Sjå vernenivået til «$1»',
 'prot_1movedto2' => '«[[$1]]» flytt til «[[$2]]»',
+'protect-badnamespace-title' => 'Namnerommet kan ikkje vernast',
 'protect-legend' => 'Stadfest vern',
 'protectcomment' => 'Grunngjeving:',
 'protectexpiry' => 'Endar:',
@@ -2469,6 +2546,7 @@ Sjå [[Special:BlockList|blokkeringslista]] for alle blokkeringane.',
 'unblockiptext' => 'Bruk skjemaet nedanfor for å oppheve blokkeringa av ein tidlegare blokkert brukar.',
 'ipusubmit' => 'Opphev blokkering',
 'unblocked' => 'Blokkeringa av [[User:$1|$1]] er oppheva',
+'unblocked-range' => '$1 vart avblokkert',
 'unblocked-id' => 'Blokkering $1 er oppheva',
 'blocklist' => 'Blokkerte brukarar',
 'ipblocklist' => 'Blokkerte IP-adresser og brukarnamn',
@@ -2481,6 +2559,7 @@ Sjå [[Special:BlockList|blokkeringslista]] for alle blokkeringane.',
 'blocklist-target' => 'Mål',
 'blocklist-expiry' => 'Endar',
 'blocklist-by' => 'Blokkerande admin',
+'blocklist-params' => 'Blokkeringsparametrar',
 'blocklist-reason' => 'Årsak',
 'ipblocklist-submit' => 'Søk',
 'ipblocklist-localblock' => 'Lokal blokkering',
@@ -2567,23 +2646,24 @@ IP-adresser som blir automatisk blokkerte er ikkje lista her. Sjå [[Special:Blo
 Merk at sida '''ikkje''' kan flyttast dersom det allereie finst ei side med den nye tittelen. Du kan likevel flytte ei side attende dit ho vart flytt frå dersom du gjer ein feil, så lenge den sida du flytter attende til ikkje er vorten endra sidan flyttinga.
 
 <b>ÅTVARING!</b> Dette kan vera ei drastisk og uventa endring for ei populær side; ver sikker på at du skjønner konsekvensane av dette før du fortset.",
-'movepagetext-noredirectfixer' => "Ved å bruke skjemaet under kan du få omdøypt ei side og flytt heile historikken til det nye namnet. 
-Den gamle tittelen vil omdirigere til den nye tittelen. 
-Pass på å sjekke for doble eller dårlege omdirigeringar. 
-Du er ansvarleg for at alle lenkjene stadig peiker dit det er meininga at dei skal peike.
+'movepagetext-noredirectfixer' => "Nyttar ein skjemaet under får ein døypt om ei side og flytt heile historikken til det nye namnet. 
+Den gamle tittelen vil verta ei omdirigeringsside for den nye tittelen. 
+Pass på å sjå etter [[Special:DoubleRedirects|doble]] eller [[Special:BrokenRedirects|uverksame]] omdirigeringar. 
+Du er ansvarleg for at alle lenkjene stadig peikar dit det er meininga at dei skal føra.
 
-Merk at sida '''ikkje''' kan flyttast dersom det allereie finst ei side med den nye tittelen, om ho då ikkje er ei omdirigeringsside utan endringshistorikk. Dette vil seie at du kan flytte ei side attende dit ho vart flytt frå dersom du gjer ein feil, og at du ikkje kan skriva over ei side som finst.
+Merk at sida '''ikkje''' vert flytt dersom det alt finst ei side med den nye tittelen, om ho då ikkje er tom eller ei omdirigeringsside utan endringshistorikk.
+Dette vil seia at du kan døypa om ei side til det gamle namnet hennar om du gjer ein feil, og dessutan at du ikkje kan skriva over ei side som finst.
 
-<b>ÅTVARING!</b>
+'''ÅTVARING!'''
 Dette kan vera ei drastisk og uventa endring for ei populær side;
-ver sikker på at du skjøner konsekvensane av dette før du fortset.",
-'movepagetalktext' => "Den tilhøyrande diskusjonssida, om ho finst, vil automatisk bli flytt med sida '''med mindre:'''
-*Du flytter sida til eit anna namnerom, eller
-*Du fjernar merkinga i boksen nedanfor.
+ver viss på at du skjøner konsekvensane av flyttinga før du held fram.",
+'movepagetalktext' => "Den tilhøyrande diskusjonssida, om ho finst, vert automatisk flytt med sida '''minder:'''
+*ei ikkje-tom diskusjonsside alt finst under det nye namnet, eller
+*du fjernar avhakinga i boksen nedanfor.
 
-I desse falla lyt du flytte eller flette saman sida manuelt.",
+I desse falla lyt du flytta eller fletta sida manuelt, om ynskeleg.",
 'movearticle' => 'Flytt side:',
-'moveuserpage-warning' => "'''Åtvaring:''' Du er i ferd med å flytta ei brukarside. Merk at berre sida vil verta flytt og at brukarnamnet '''ikkje''' vert endra.",
+'moveuserpage-warning' => "'''Åtvaring:''' Du er i ferd med å flytta ei brukarside. Merk at berre sida vert flytt og at brukarnamnet '''ikkje''' vert endra.",
 'movenologin' => 'Ikkje innlogga',
 'movenologintext' => 'Du lyt vera registrert brukar og vera [[Special:UserLogin|innlogga]] for å flytte ei side.',
 'movenotallowed' => 'Du har ikkje tilgang til å flytte sider.',
@@ -2650,6 +2730,7 @@ Dette kan så importerast til ein annan wiki som brukar MediaWiki-programvara gj
 For å eksportere sider, skriv inn titlar i tekstboksen under, ein tittel per linje, og velg om du vil ha berre noverande versjon, eller alle versjonar i historikken.
 
 Dersom du berre vil ha noverande versjon, kan du også bruke ei lenkje, til dømes [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] for sida «[[{{MediaWiki:Mainpage}}]]».',
+'exportall' => 'Eksporter alle sider',
 'exportcuronly' => 'Berre eksporter siste versjonen, ikkje med heile historikken.',
 'exportnohistory' => "----
 '''Merk:''' Å eksportere heile sidehistorikkar gjennom dette skjemaet er slått av grunna problem med ytinga.",
@@ -2686,6 +2767,8 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'thumbnail_error' => 'Feil ved oppretting av miniatyrbilete: $1',
 'djvu_page_error' => 'DjVu-sida er utanfor rekkjevidd',
 'djvu_no_xml' => 'Klarte ikkje hente inn XML for DjVu-fila',
+'thumbnail-temp-create' => 'Kan ikkje oppretta mellombels fil for miniatyrbilete',
+'thumbnail-dest-create' => 'Kunne ikkje lagra miniatyrbiletet til lagringsmålet',
 'thumbnail_invalid_params' => 'Ugyldige miniatyrparameterar',
 'thumbnail_dest_directory' => 'Klarte ikkje å opprette målmappe',
 'thumbnail_image-type' => 'Bilettypen er ikkje stødd',
@@ -2729,6 +2812,9 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'import-invalid-interwiki' => 'Kan ikkje importera frå den valde wikien.',
 'import-error-edit' => '«$1» blei ikkje importert av di du ikkje har løyve til å redigere henne.',
 'import-error-create' => 'Side $1 blei ikkje importert av di du ikkje har løyve til å redigere henne.',
+'import-error-interwiki' => 'Sida «$1» vart ikkje importert sidan namnet hennar er reservert for ekstern lenking (interwiki).',
+'import-error-special' => 'Sida «$1» vart ikkje importert sidan ho høyrer til eit spesialnamnerom som ikkje tillèt sider.',
+'import-error-invalid' => 'Sida «$1» vart ikkje importert sidan namnet er ugildt.',
 
 # Import log
 'importlogpage' => 'Importeringslogg',
@@ -2738,6 +2824,16 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'import-logentry-interwiki' => 'overførte $1 mellom wikiar',
 'import-logentry-interwiki-detail' => '{{PLURAL:$1|Éin versjon|$1 versjonar}} frå $2',
 
+# JavaScriptTest
+'javascripttest' => 'JavaScript-utrøyning',
+'javascripttest-disabled' => 'Funksjonen er ikkje påslegen på wikien.',
+'javascripttest-title' => 'Køyrer $1-utrøyningar',
+'javascripttest-pagetext-noframework' => 'Sida er reservert for køyring av JavaScript-utrøyningar.',
+'javascripttest-pagetext-unknownframework' => 'Ukjent utrøyningsrammeverk: «$1».',
+'javascripttest-pagetext-frameworks' => 'Vel eitt av dei fylgjande utrøyningsrammeverka: $1',
+'javascripttest-pagetext-skins' => 'Vel ei drakt som utrøyningane skal køyrast med:',
+'javascripttest-qunit-intro' => 'Sjå [$1 utrøyningsdokumentasjon] på mediawiki.org.',
+
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Brukarsida di',
 'tooltip-pt-anonuserpage' => 'Brukarsida for ip-adressa du endrar under',
@@ -2769,7 +2865,7 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'tooltip-n-mainpage-description' => 'Gå til hovudsida',
 'tooltip-n-portal' => 'Om prosjektet, kva du kan gjera, kvar du finn saker og ting',
 'tooltip-n-currentevents' => 'Aktuelt',
-'tooltip-n-recentchanges' => 'Liste over dei siste endringane som er gjort på wikien.',
+'tooltip-n-recentchanges' => 'Liste over dei siste endringane som er gjorde på wikien.',
 'tooltip-n-randompage' => 'Vis ei tilfeldig side',
 'tooltip-n-help' => 'Hjelp til å bruke alle funksjonane.',
 'tooltip-t-whatlinkshere' => 'Liste over alle wikisidene som har lenkjer hit',
@@ -2793,11 +2889,12 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'tooltip-ca-nstab-help' => 'Vis hjelpeside',
 'tooltip-ca-nstab-category' => 'Vis kategoriside',
 'tooltip-minoredit' => 'Merk dette som småplukk',
-'tooltip-save' => 'Lagre endringane dine',
+'tooltip-save' => 'Lagra endringane dine',
 'tooltip-preview' => 'Førehandsvis endringane dine, bruk denne funksjonen før du lagrar!',
-'tooltip-diff' => 'Vis skilnaden mellom din versjon og lagra versjon, utan å lagre.',
+'tooltip-diff' => 'Sjå kva endringar du gjorde i teksten',
 'tooltip-compareselectedversions' => 'Sjå endringane mellom dei valde versjonane av denne sida.',
 'tooltip-watch' => 'Legg sida til i overvakingslista di [alt-w]',
+'tooltip-watchlistedit-normal-submit' => 'Fjerna titlar',
 'tooltip-watchlistedit-raw-submit' => 'Oppdater overvakingslista',
 'tooltip-recreate' => 'Ved å trykkje på «Nyopprett» vert sida oppretta på nytt.',
 'tooltip-upload' => 'Start opplastinga',
@@ -2852,14 +2949,37 @@ Vitja [//www.mediawiki.org/wiki/Localisation MediaWiki Localisation] og [//trans
 'spambot_username' => 'MediaWiki si spamopprydding',
 'spam_reverting' => 'Attenderullar til siste versjon utan lenkje til $1',
 'spam_blanking' => 'Alle versjonar inneheldt lenkje til $1, tømmer sida',
+'spam_deleting' => 'Alle versjonane inneheldt lenkjer til $1, slettar.',
 
 # Info page
 'pageinfo-title' => 'Informasjon om «$1»',
-'pageinfo-header-edits' => 'Endringar',
+'pageinfo-header-basic' => 'Grunnleggjande informasjon',
+'pageinfo-header-edits' => 'Endringshistorikk',
+'pageinfo-header-restrictions' => 'Sidevern',
+'pageinfo-header-properties' => 'Sideeigenskapar',
+'pageinfo-display-title' => 'Visingstittel',
+'pageinfo-default-sort' => 'Standard sorteringsnykel',
+'pageinfo-length' => 'Sidelengd (i byte)',
+'pageinfo-article-id' => 'Side-ID',
+'pageinfo-robot-policy' => 'Søkjemotorstode',
+'pageinfo-robot-index' => 'Kan indekserast',
+'pageinfo-robot-noindex' => 'Kan ikkje indekserast',
 'pageinfo-views' => 'Tal på visningar',
-'pageinfo-watchers' => 'Antal overvakarar',
-'pageinfo-edits' => 'Tal på endringar',
-'pageinfo-authors' => 'Tal på forskjellege forfattarar',
+'pageinfo-watchers' => 'Tal på overvakarar av sida',
+'pageinfo-redirects-name' => 'Omdirigeringar til sida',
+'pageinfo-subpages-name' => 'Undersider av sida',
+'pageinfo-firstuser' => 'Sideopprettar',
+'pageinfo-firsttime' => 'Dato for opprettinga av sida',
+'pageinfo-lastuser' => 'Siste forfattaren',
+'pageinfo-lasttime' => 'Dato for siste endringa',
+'pageinfo-edits' => 'Totalt tal på endringar',
+'pageinfo-authors' => 'Totalt tal på ulike forfattarar',
+'pageinfo-recent-edits' => 'Tal på nylege endringar (innan dei siste $1)',
+'pageinfo-recent-authors' => 'Tal på nylege forfattarar',
+'pageinfo-restriction' => 'Sidevern ({{lcfirst:$1}})',
+'pageinfo-magic-words' => '{{PLURAL:$1|Trylleord}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Løynd kategori|Løynde kategoriar}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Inkludert mal|Inkluderte malar}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Klassisk',
@@ -2909,6 +3029,7 @@ $1',
 'widthheightpage' => '$1 × $2, {{PLURAL:$3|éi side|$3 sider}}',
 'file-info' => 'filstorleik: $1, MIME-type: $2',
 'file-info-size' => '$1 × $2 pikslar, filstorleik: $3, MIME-type: $4',
+'file-info-size-pages' => '$1 × $2 pikslar, filstorleik: $3, MIME-type: $4, {{PLURAL:$5|éi side|$5 sider}}',
 'file-nohires' => 'Høgare oppløysing er ikkje tilgjengeleg.',
 'svg-long-desc' => 'SVG-fil, standardoppløysing: $1 × $2 pikslar, filstorleik: $3',
 'show-big-image' => 'Full oppløysing',
@@ -3101,12 +3222,19 @@ Andre er gøymde som standard.
 'exif-headline' => 'Overskrift',
 'exif-credit' => 'Opphavrettseigar/filgjevar',
 'exif-source' => 'Kjelde',
+'exif-urgency' => 'Prioritet',
+'exif-objectcycle' => 'Tid på dagen mediet er meint for',
 'exif-writer' => 'Forfattar',
 'exif-languagecode' => 'Språk',
 'exif-iimversion' => 'IIM-versjon',
 'exif-iimcategory' => 'Kategori',
 'exif-lens' => 'Objektiv',
 'exif-cameraownername' => 'Eigar av kameraet',
+'exif-label' => 'Merkelapp',
+'exif-rating' => 'Vurdering (av 5)',
+'exif-copyrighted' => 'Opphavsrettsstode',
+'exif-copyrightowner' => 'Opphavsrettseigar',
+'exif-usageterms' => 'Bruksvilkår',
 'exif-pngfilecomment' => 'PNG-filkommentar',
 'exif-disclaimer' => 'Atterhald',
 'exif-contentwarning' => 'Innholdsåtvaring',
@@ -3208,6 +3336,8 @@ Andre er gøymde som standard.
 'exif-sensingmethod-7' => 'Trilinær sensor',
 'exif-sensingmethod-8' => 'Fargesekvensiell lineærsensor',
 
+'exif-filesource-3' => 'Digitalt stillbiletekamera',
+
 'exif-scenetype-1' => 'Direkte fotografert bilete',
 
 'exif-customrendered-0' => 'Normal prosess',
@@ -3276,18 +3406,31 @@ Andre er gøymde som standard.
 'exif-gpsdestdistance-m' => 'Miles',
 'exif-gpsdestdistance-n' => 'Nautiske mil',
 
+'exif-gpsdop-excellent' => 'Utmerkt ($1)',
 'exif-gpsdop-good' => 'God ($1)',
+'exif-gpsdop-moderate' => 'Moderat ($1)',
+'exif-gpsdop-poor' => 'Dårleg ($1)',
+
+'exif-objectcycle-a' => 'Berre morgon',
+'exif-objectcycle-p' => 'Berre kveld',
+'exif-objectcycle-b' => 'Både morgon og kveld',
 
 # Pseudotags used for GPSTrackRef, GPSImgDirectionRef and GPSDestBearingRef
 'exif-gpsdirection-t' => 'Verkeleg retning',
 'exif-gpsdirection-m' => 'Magnetisk retning',
 
+'exif-ycbcrpositioning-1' => 'Sentrert',
+
+'exif-dc-contributor' => 'Bidragsytarar',
 'exif-dc-date' => 'Dato(ar)',
 'exif-dc-publisher' => 'Utgjevar',
+'exif-dc-relation' => 'Skylde medium',
 'exif-dc-rights' => 'Rettar',
 'exif-dc-source' => 'Mediakilde',
 'exif-dc-type' => 'Mediatype',
 
+'exif-rating-rejected' => 'Avvist',
+
 'exif-isospeedratings-overflow' => 'Større enn 65535',
 
 'exif-iimcategory-ace' => 'Kunst, kultur og underhaldning',
@@ -3387,17 +3530,17 @@ Du må stadfeste at du verkeleg vil nyopprette denne sida.",
 
 # Multipage image navigation
 'imgmultipageprev' => '← førre sida',
-'imgmultipagenext' => 'neste sida →',
+'imgmultipagenext' => 'neste side →',
 'imgmultigo' => 'Gå!',
 'imgmultigoto' => 'Gå til sida $1',
 
 # Table pager
 'ascending_abbrev' => 'stigande',
 'descending_abbrev' => 'synkande',
-'table_pager_next' => 'Neste sida',
+'table_pager_next' => 'Neste side',
 'table_pager_prev' => 'Førre sida',
-'table_pager_first' => 'Fyrste side',
-'table_pager_last' => 'Siste side',
+'table_pager_first' => 'Fyrste sida',
+'table_pager_last' => 'Siste sida',
 'table_pager_limit' => 'Vis $1 element per side',
 'table_pager_limit_label' => 'Element per side:',
 'table_pager_limit_submit' => 'Gå',
@@ -3459,6 +3602,7 @@ Du kan òg [[Special:EditWatchlist|nytte standardverktøyet]].',
 'version-specialpages' => 'Spesialsider',
 'version-parserhooks' => 'Parsertillegg',
 'version-variables' => 'Variablar',
+'version-antispam' => 'Hindring av spam',
 'version-skins' => 'Draktar',
 'version-other' => 'Anna',
 'version-mediahandlers' => 'Mediahandsamarar',
@@ -3475,6 +3619,9 @@ Du kan òg [[Special:EditWatchlist|nytte standardverktøyet]].',
 'version-software' => 'Installert programvare',
 'version-software-product' => 'Produkt',
 'version-software-version' => 'Versjon',
+'version-entrypoints' => 'URL-ar til inngangspunkt',
+'version-entrypoints-header-entrypoint' => 'Inngangspunkt',
+'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
 'filepath' => 'Filsti',
@@ -3502,7 +3649,7 @@ Skriv inn filnamnet utan «{{ns:file}}:»-prefikset.',
 * <strong class="mw-specialpagerestricted">Spesialsider med avgrensa tilgang.</strong>',
 'specialpages-group-maintenance' => 'Vedlikehaldsrapportar',
 'specialpages-group-other' => 'Andre spesialsider',
-'specialpages-group-login' => 'Innlogging / registrering',
+'specialpages-group-login' => 'Logga inn / oppretta brukarkonto',
 'specialpages-group-changes' => 'Siste endringar og loggar',
 'specialpages-group-media' => 'Medierapportar og opplastingar',
 'specialpages-group-users' => 'Brukarar og brukartilgangar',
@@ -3548,6 +3695,9 @@ Skriv inn filnamnet utan «{{ns:file}}:»-prefikset.',
 'compare-rev1' => 'Versjon 1',
 'compare-rev2' => 'Versjon 2',
 'compare-submit' => 'Samanlikna',
+'compare-invalid-title' => 'Tittelen du oppgav er ugild.',
+'compare-title-not-exists' => 'Tittelen du oppgav finst ikkje.',
+'compare-revision-not-exists' => 'Versjonen du oppgav finst ikkje.',
 
 # Database error messages
 'dberr-header' => 'Denne wikien har eit problem',
@@ -3603,6 +3753,8 @@ Skriv inn filnamnet utan «{{ns:file}}:»-prefikset.',
 'newuserlog-byemail' => 'passordet er sendt på e-post',
 
 # Feedback
+'feedback-bugornote' => 'Er du klar til å skildra ein teknisk vanske i detalj, gjer vel å [$1 rapportera inn ein feil].
+Om ikkje kan du nytta det enkle skjemaet under. Merknaden din vert lagd til på sida «[$3 $2]», i lag med brukarnamnet ditt og kva for nettlesar du nyttar.',
 'feedback-subject' => 'Emne:',
 'feedback-message' => 'Melding:',
 'feedback-cancel' => 'Bryt av',
@@ -3613,9 +3765,13 @@ Skriv inn filnamnet utan «{{ns:file}}:»-prefikset.',
 'feedback-error3' => 'Feil: Saknar svar frå API',
 'feedback-thanks' => 'Takk! Attendemeldinga di er lagd inn på sida «[$2 $1]».',
 'feedback-close' => 'Gjort',
+'feedback-bugcheck' => 'Bra! No lyt du berre sjå etter om han er ein av dei [$1 kjende feila].',
+'feedback-bugnew' => 'Eg såg etter. Rapporter ein ny feil',
 
 # API errors
 'api-error-badaccess-groups' => 'Du har ikkje løyve til å lasta opp filer til wikien.',
+'api-error-badtoken' => 'Intern feil: ugild token.',
+'api-error-copyuploaddisabled' => 'Opplasting etter URL er avslege på tenaren.',
 'api-error-duplicate' => 'Det finst {{PLURAL:$1|[$2 ei anna fil]|[$2 andre filer]}} på nettstaden med same innhaldet.',
 'api-error-duplicate-archive' => 'Det fanst {{PLURAL:$1|[$2 ei anna fil]|[$2 andre filer]}} på nettstaden med det same innhaldet, men {{PLURAL:$1|ho|dei}} vart sletta.',
 'api-error-duplicate-archive-popup-title' => '{{PLURAL:$1|Tvifelt fil|Tvifelte filer}} som alt er sletta',
@@ -3623,19 +3779,27 @@ Skriv inn filnamnet utan «{{ns:file}}:»-prefikset.',
 'api-error-empty-file' => 'Fila du sende var tom.',
 'api-error-emptypage' => 'Det er ikkje tillate å oppretta nye tomme sider.',
 'api-error-fetchfileerror' => 'Intern feil: Noko gjekk gale då fila vart henta.',
+'api-error-fileexists-forbidden' => 'Ei fil med namnet «$1» finst alt, og kan ikkje skrivast over.',
+'api-error-fileexists-shared-forbidden' => 'Ei fil med namnet «$1» finst alt i den delte filsamlinga, og kan ikkje skrivast over.',
 'api-error-file-too-large' => 'Fila du sende var for stor.',
 'api-error-filename-tooshort' => 'Filnamnet er for stutt.',
 'api-error-filetype-banned' => 'Denne filtypen er ikkje tillaten.',
-'api-error-filetype-banned-type' => '$1 er ikkje ein tillaten filtype. {{PLURAL:$3|Tillaten filtype er|Tillatne filtypar er}} $2.',
+'api-error-filetype-banned-type' => '$1 er ikkje {{PLURAL:$4|ein tillaten filtype|tillatne filtypar}}. {{PLURAL:$3|Tillaten filtype|Tillatne filtypar}} er $2.',
 'api-error-filetype-missing' => 'Fila saknar ei ending.',
+'api-error-hookaborted' => 'Endringa du freista vart avbroten av ei utviding.',
 'api-error-http' => 'Intern feil: kan ikkje kopla til tenaren.',
 'api-error-illegal-filename' => 'Filnamnet er ikkje tillate.',
 'api-error-internal-error' => 'Intern feil: Noko gjekk gale med handsaminga av opplastinga di til wikien.',
 'api-error-invalid-file-key' => 'Intern feil: Fila vart ikkje funnen i mellombels lagringsplass.',
+'api-error-missingparam' => 'Intern feil: det saknar parametrar i førespurnaden.',
+'api-error-missingresult' => 'Intern feil: kunne ikkje avgjera om koperinga var vellukka.',
 'api-error-mustbeloggedin' => 'Du lyt vera innlogga for å lasta opp filer.',
+'api-error-mustbeposted' => 'Intern feil: førespurnad krev HTTP POST.',
 'api-error-noimageinfo' => 'Opplastinga gjekk greitt, men tenaren gav oss ikkje noko informasjon om fila.',
+'api-error-nomodule' => 'Intern feil: ingen opplastingsmodul er vald.',
 'api-error-ok-but-empty' => 'Intern feil: ikkje noko svar frå tenaren.',
 'api-error-overwrite' => 'Det er ikkje tillate å skriva over filer som alt finst.',
+'api-error-stashfailed' => 'Intern feil: tenaren greidde ikkje å lagra ei mellombels fil.',
 'api-error-timeout' => 'Tenaren svara ikkje innan tida svar var venta.',
 'api-error-unclassified' => 'Det oppstod ein ukjend feil.',
 'api-error-unknown-code' => 'Ukjend feil: «$1»',
index b5018e9..a1bd01b 100644 (file)
@@ -520,7 +520,9 @@ $1',
 'youhavenewmessages' => 'ଆପଣଙ୍କର $1 ($2).',
 'newmessageslink' => 'ନୂଆ ମେସେଜ',
 'newmessagesdifflink' => 'ଶେଷ ବଦଳ',
+'youhavenewmessagesfromusers' => 'ଆପଣଙ୍କର {{PLURAL:$3|another user|$3 users}} ($2)ରୁ $1 ଅଛି ।',
 'youhavenewmessagesmanyusers' => 'ଆପଣଙ୍କର ବହୁତ ବ୍ୟବହାରକାରୀ($2)ମାନଙ୍କଠାରୁ $1 ଅଛି ।',
+'newmessageslinkplural' => '{{PLURAL:$1|a new message|ନୂଆ ମେସେଜ}}',
 'newmessagesdifflinkplural' => 'ଶେଷ{{PLURAL:$1|change|changes}}',
 'youhavenewmessagesmulti' => '$1 ତାରିଖରେ ନୂଆ ଚିଠିଟିଏ ଆସିଛି',
 'editsection' => 'ସମ୍ପାଦନା',
@@ -573,12 +575,11 @@ $1',
 # General errors
 'error' => 'ଭୁଲ',
 'databaseerror' => 'ଡାଟାବେସରେ ଭୁଲ',
-'dberrortext' => 'ଡାଟାବେସ ପ୍ରଶ୍ନ ଖୋଜା ଭୁଲ ଟିଏ ହୋଇଅଛି ।
-ଏହା ଏହି ସଫ୍ଟବେରରେ ଭୁଲଟିଏକୁ ମଧ୍ୟ ସୂଚାଇପାରେ ।
-ଶେଷ ଥର ଖୋଜାଯାଇଥିବା ଡାଟାବେସ ପ୍ରଶ୍ନ ଖୋଜାଟି ଥିଲା:
-"<tt>$2</tt>" କାମ ଭିତରୁ
-<blockquote><tt>$1</tt></blockquote> ।
-ଡାଟାବେସ ଫେରନ୍ତା ଭୁଲ "<tt>$3: $4</tt>".',
+'dberrortext' => 'ଏହା ଏହି ସଫ୍ଟବେରରେ ଭୁଲଟିଏକୁ ମଧ୍ୟ ସୂଚାଇପାରେ ।
+ଶେଷଥର ଖୋଜାଯାଇଥିବା ଡାଟାବେସ ପ୍ରଶ୍ନଟି ଥିଲା:
+<blockquote><code>$1</code></blockquote>
+ ଯାହାକି "<code>$2</code>"ରୁ ଥିଲା
+ଡାଟାବେସରେ ହୋଇଥିବା ଭୁଲ ହେଉଛି "<samp>$3: $4</samp>"।',
 'dberrortextcl' => 'ଡାଟାବେସ ପ୍ରଶ୍ନ ଖୋଜା ଭୁଲଟିଏ ହୋଇଅଛି ।
 ଶେଷ ଖୋଜା ଡାଟାବେସ ପ୍ରଶ୍ନଟି ଥିଲା:
 "$1"
@@ -647,6 +648,11 @@ $2',
 'ns-specialprotected' => 'ବିଶେଷ ପୃଷ୍ଠାସବୁକୁ ବଦଳାଯାଇପାରିବ ନାହିଁ ।',
 'titleprotected' => 'ଏହି ନାମଟି [[User:$1|$1]]ଙ୍କ ଦେଇ ନୂଆ ତିଆରିହେବାରୁ କିଳାଯାଇଅଛି ।
 ଏହାର କାରଣ ହେଲା "\'\'$2\'\'" ।',
+'filereadonlyerror' => 'ଫାଇଲ ଧାରକ "$2"ଟି ଖାଲି ପଢିବା ହେବାଭଳି ରହିଥିବା ହେତୁ ଏଥିରେ ଥିବା $1 ପାଇଲଟିକୁ ବଦଳା ଯାଇପାରିବ ନାହିଁ ।
+
+ଯେଉଁ ପରିଚ୍ଛା ଏହାକୁ ବନ୍ଦ କରିଛନ୍ତି ସେ ଏହି ବିବରଣୀ ଦେଇଛନ୍ତି: "$3"',
+'invalidtitle-knownnamespace' => '"$2" ନେମ୍ସ୍ପେସ ଏବଂ "$3" ଲେଖାଥିବା ଅବୈଧ ଶୀର୍ଷକ ।',
+'invalidtitle-unknownnamespace' => '"$1" ନେମ୍ସ୍ପେସ ଏବଂ "$2" ଲେଖାଥିବା ଅବୈଧ ଶୀର୍ଷକ ।',
 'exception-nologin' => 'ଲଗ‌‌ ଇନ କରିନାହାନ୍ତି',
 'exception-nologin-text' => 'ଏହା କରିବାକୁ ହେଲେ ଆପଣଙ୍କୁ ଏହି ଉଇକିରେ ଲଗଇନ କରିବାକୁ ପଡିବ ।',
 
@@ -928,6 +934,10 @@ $1 ଦ୍ଵାରା ପ୍ରତିରୋଧ କରାଯାଇଛି
 ଆପଣ [[Special:Search/{{PAGENAME}}|ଏହି ଲେଖାଟିର ନାଆଁ]] ବାକି ପୃଷ୍ଠାମାନଙ୍କରେ ଖୋଜି ପାରନ୍ତି,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}ରେ ଯୋଡ଼ାଯାଇଥିବା ବାକି ପୃଷ୍ଠାସବୁକୁ ଖୋଜି ପାରନ୍ତି],
 କିମ୍ବା [{{fullurl:{{FULLPAGENAME}}|action=edit}} ଏହି ପୃଷ୍ଠାଟିକୁ ବଦଳାଇ ପାରନ୍ତି]</span> ।',
+'missing-revision' => '"{{PAGENAME}}" ନାମରେ ଥିବା ପୃଷ୍ଠାଟିର #$1 ପୁନରାବୃତ୍ତି ନାହିଁ ।
+
+ପୁରୁଣା ହୋଇଯାଇଥିବା ଇତିହାସ ଲିଙ୍କ ଯାହା ଏକ ଲିଭାଯାଇଥିବା ପୃଷ୍ଠାକୁ ଦିଆଯାଇଥିବାରୁ ଏହା ସାଧାରଣତଃ ହୋଇଥାଏ ।
+ଅଧିକ ବିବରଣୀ [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log]ରେ ମିଳିପାରିବ ।',
 'userpage-userdoesnotexist' => 'ଇଉଜର ଖାତା "$1" ଟି ତିଆରି କରାଯାଇନାହିଁ ।
 ଆପଣ ଏହି ପୃଷ୍ଠାଟିକୁ ତିଆରି କରିବାକୁ ଚାହାନ୍ତି କି ନାହିଁ ଦୟାକରି ପରଖି ନିଅନ୍ତୁ ।',
 'userpage-userdoesnotexist-view' => 'ଇଉଜର ନାମ "$1"ଟି ତିଆରି କରାଯାଇ ନାହିଁ ।',
@@ -937,7 +947,6 @@ $1 ଦ୍ଵାରା ପ୍ରତିରୋଧ କରାଯାଇଛି
 * '''Firefox / Safari:''' ''Reload'' କଲାବେଳେ ''Shift'' ଧରି, କିମ୍ବା ''Ctrl-F5'' ବା ''Ctrl-R'' (Macରେ ''⌘-R'') ଦବାନ୍ତୁ
 * '''Google Chrome:''' ''Ctrl-Shift-R'' (Macରେ ''⌘-Shift-R'') ଦବାନ୍ତୁ
 * '''Internet Explorer:'''  ''Refresh'' କଲାବେଳେ ''Ctrl'' ଦବାନ୍ତୁ, କିମ୍ବା ''Ctrl-F5'' ଦବାନ୍ତୁ
-* '''Konqueror:''' ''Reload'' ଦବାନ୍ତୁ କିମ୍ବା ''F5'' ଦବାନ୍ତୁ
 * '''Opera:''' ''Tools → Preferences''ରେ ଅସ୍ଥାୟୀ ସ୍ମୃତି ସଫା କରିଦିଅନ୍ତୁ",
 'usercssyoucanpreview' => "'''ଜାଣିବା କଥା:''' ଆପଣା ନୂଆ CSS ସାଇତିବା ଆଗରୁ \"{{int:showpreview}}\" ବ୍ୟବହାର କରି ପରଖି ନିଅନ୍ତୁ ।",
 'userjsyoucanpreview' => "'''ଜାଣିବା କଥା:''' ଆପଣା ନୂଆ ଜାଭାସ୍କ୍ରିପ୍ଟ (JavaScript) ସାଇତିବା ଆଗରୁ \"{{int:showpreview}}\" ବ୍ୟବହାର କରି ପରଖି ନିଅନ୍ତୁ ।",
@@ -1054,6 +1063,13 @@ $1 ଦ୍ଵାରା ପ୍ରତିରୋଧ କରାଯାଇଛି
 'parser-template-loop-warning' => 'ଛାଞ୍ଚ ଲୁପ (Template loop) ଦେଖିବାକୁ ମିଳିଲା: [[$1]]',
 'parser-template-recursion-depth-warning' => 'ଛାଞ୍ଚର ବାରମ୍ବାର ପ୍ରତୀତ ହେବା କ୍ଷମତା ପାର ହୋଇଅଛି ($1)',
 'language-converter-depth-warning' => 'ଭାଷା ରୂପାନ୍ତରଣ କ୍ଷମତା ସରିଯାଇଅଛି ($1)',
+'node-count-exceeded-category' => 'ପୃଷ୍ଠାଗୁଡିକ ଯେଉଁଠି ନୋଡ-ଗଣନା ଅତ୍ୟଧିକ ହୋଇଯାଇଛି',
+'node-count-exceeded-warning' => 'ପୃଷ୍ଠାଟି ନୋଡ-ଗଣନାରୁ ଅଧିକ ହୋଇଗଲା',
+'expansion-depth-exceeded-category' => 'ଯେଉଁ ପୃଷ୍ଠାଗୁଡିକରେ ବିସ୍ତ୍ରୁତ ଗଭୀରତା ଅତ୍ୟଧିକ ହୋଇଯାଇଛି',
+'expansion-depth-exceeded-warning' => 'ପୃଷ୍ଠାଟି ବିସ୍ତ୍ରୁତ ଗଭୀରତାରୁ ଅଧିକ ହୋଇଗଲା',
+'parser-unstrip-loop-warning' => 'ଅଜଣା ଲୁପ ଜଣାପଡିଲା',
+'parser-unstrip-recursion-limit' => 'ଅଜଣା ଚକ୍ରର ସୀମା ଅତ୍ୟଧିକ ହୋଇଗଲା ($1)',
+'converter-manual-rule-error' => 'ଆପେ ଆପେ ଭାଷା ପରିବର୍ତ୍ତନ ନିଯମରେ ଭୁଲ ଅଛି',
 
 # "Undo" feature
 'undo-success' => 'ଏହି ସମ୍ପାଦନା ପଛକୁ ଫେରାଯାଇପାରିବ ନାହିଁ ।
index 9f18071..02427e0 100644 (file)
@@ -355,6 +355,10 @@ $1',
 'youhavenewmessages' => 'Райстай $1 ($2).',
 'newmessageslink' => 'ног фыстæгтæ',
 'newmessagesdifflink' => 'фæстаг ивд',
+'youhavenewmessagesfromusers' => '{{PLURAL:$3|Æндæр архайæгæй|$3 архайæгæй}} дæм $1 æрцыд ($2).',
+'youhavenewmessagesmanyusers' => 'Бирæ архайæгæй дæм $1 æрцыдис ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|ног фыстæг|ног фыстæджытæ}}',
+'newmessagesdifflinkplural' => 'фæстаг {{PLURAL:$1|ивд|ивдтытæ}}',
 'youhavenewmessagesmulti' => 'Дæумæ æрцыдис ног фыстæджытæ {{grammar:genitive|$1}}',
 'editsection' => 'ивын',
 'editold' => 'ивын',
@@ -409,9 +413,9 @@ $1',
 'dberrortext' => 'Рарддонмæ домæны синтаксисы разындис рæдыд.
 Уый гæнæн ис нысан кæны рæдыд софты куысты.
 Фæстаг домæн рарддонмæ уыдис:
-<blockquote><tt>$1</tt></blockquote>
-сæвзæрдис "<tt>$2</tt>" функцийæ.
-Рарддон раздæхта ахæм рæдыд: "<tt>$3: $4</tt>".',
+<blockquote><code>$1</code></blockquote>
+сæвзæрдис "<code>$2</code>" функцийæ.
+Рарддон раздæхта ахæм рæдыд: "<samp>$3: $4</samp>".',
 'dberrortextcl' => 'Рарддонмæ домæны синтаксисы разындис рæдыд.
 Фæстаг домæн рарддонмæ уыдис:
 "$1"
@@ -468,10 +472,11 @@ $1',
 'protectedpagetext' => 'Ацы фарс у ивынæй æхгæд.',
 'viewsourcetext' => 'Ацы фарсы код фенæн æмæ халдих кæнæн ис:',
 'viewyourtext' => "Дæ бон у фенын æмæ скопи кæнын ацы фарсмæ '''цы ивдтытæ сарæзтай''', уыдон бындур текст :",
-'protectedinterface' => 'Ацы фарсы ис софты интерфейсы текст æмæ у æхгæд, цæмæй йæ фехалæн ма уа.',
-'editinginterface' => "'''Сындæг:''' Ды ивыс фарс, кæм ис софты интерфейсы текст.
-Ацы фарсы фæивд фæзындзæн алы архайæджы интерфейсыл дæр.
-Тæлмац кæнынæн, дæ хорзæхæй, фен [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], MediaWiki тæлмацгæнæн проект.",
+'protectedinterface' => 'Ацы фарсы ис ацы викийы софты интерфейсæн текст æмæ у æхгæд, цæмæй йæ фехалæн ма уа.
+Алы викийы тæлмæцтæ ивынæн, дæ хорзæхæй, архай [//translatewiki.net/ translatewiki.net-æй], кæцы у MediaWiki-йы локализацигæнæн проект.',
+'editinginterface' => "'''Сындæг:''' Ды ивыс ахæм фарс, кæм ис софты интерфейсы текст.
+Ацы фарсы фæивд фæзындзæн ацы викийы алы архайæджы интерфейсыл дæр.
+Алы викийы тæлмæцтæ ивынæн, дæ хорзæхæй, архай [//translatewiki.net/ translatewiki.net-æй], кæцы у MediaWiki-йы локализацигæнæн проект.",
 'sqlhidden' => '(SQL домæн æмбæхст у)',
 'cascadeprotected' => 'Ацы фарс ивынæй æхгæд у уымæн æмæ у æфтыд бындæр цы "каскадон" хъахъхъонд {{PLURAL:$1|фарс ис, уырдæм|фæрстæ сты, уыдонмæ}}:
 $2',
@@ -508,6 +513,7 @@ $2',
 'remembermypassword' => 'Бахъуыды мæ кæнæд ашы браузеры (максимум $1 {{PLURAL:$1|бонмæ|бонмæ}})',
 'securelogin-stick-https' => 'Дарддæр дæр HTTPS-ы уылты, бахизыны фæстæ',
 'yourdomainname' => 'Дæ домен:',
+'password-change-forbidden' => 'Дæ бон нæу пароль фæивын ацы викийы.',
 'externaldberror' => 'Кæнæ аутентификацийы рарддоны рæдыд æрцыдис, кæнæ та дæуæн нæй бар снæуæг кæнын дæ æддаг аккаунт.',
 'login' => 'Бахизын',
 'nav-login-createaccount' => 'Бахизын / срегистраци кæнын',
@@ -739,19 +745,26 @@ $2
 'loginreqlink' => 'бахизын',
 'loginreqpagetext' => 'Дæуæн хъæуы $1 цæмæй æндæр фæрстæ кæсай.',
 'accmailtitle' => 'Пароль рарвыст у.',
+'accmailtext' => "[[User talk:$1|{{grammar:dative|$1}}]] халæй ист пароль æрвыст æрцыд $2-мæ.
+
+Ацы ног аккаунты пароль гæнæн ис фæивын ''[[Special:ChangePassword|пароль ивæн варсыл]]'' бахизыны фæстæ.",
 'newarticle' => '(Ног)',
 'newarticletext' => 'Ды ныххæцыдтæ ахæм æрвитæныл, кæй фарс нырмæ нæй.
 Фарс бакæнынæн байдай фыссын дæлдæр цы къæртт ис, уым (кæс [[{{MediaWiki:Helppage}}|æххуысы фарс]] фылдæр базонынæн).',
+'anontalkpagetext' => "----''Ай у æнæном архайæджы ныхасы фарс. Ацы архайæг нырмæ нæ срегистраци кодта, кæнæ та йæ аккаунтæй нæ архайы.
+Уый тыххæй мах пайда кæнæм йæ IP адрисæй, цæмæй-иу æй бæрæг кæнæм.
+Ахæм IP адристæй гæнæн ис архайой цалдæр архайæджы.
+Кæд ды æнæном архайæг дæ æмæ дæм цыдæр зæгъæлы фыстæджытæ цæуы, уæд, дæ хорзæхæй, [[Special:UserLogin/signup|бакæн аккаунт]] кæнæ [[Special:UserLogin|бахиз системæмæ]], цæмæй дæ мауал хæццæ кæной æндæр æнæном архайджытимæ.''",
 'noarticletext' => 'Ацы фарсы нырмæ текст нæй.
 Дæ бон у [[Special:Search/{{PAGENAME}}|бацагурын ацы фарсы ном]] æндæр фæрсты,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} агурын йæ кой логты],
 кæнæ [{{fullurl:{{FULLPAGENAME}}|action=edit}} скæнын ацы фарс]</span>.',
 'noarticletext-nopermission' => 'Ацы фарсы нырмæ текст нæй.
-Дæ бон у [[Special:Search/{{PAGENAME}}|бацагурын ацы фарсы ном]] æндæр фæрсты
-кæнæ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} агурын йæ кой логты]</span>.',
+Дæ бон у [[Special:Search/{{PAGENAME}}|бацагурын ацы фарсы ном]] æндæр фæрсты, кæнæ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} агурын йæ кой логты]</span>, фæлæ дын йæ саразыны бар нæй.',
 'note' => "'''Бафиппай:'''",
 'previewnote' => "'''Зон æй, æмæ ай у æрмæстдæр разбакаст.'''
 Дæ ивдтытæ нырмæ æвæрд не рцыдысты!",
+'continue-editing' => 'Дарддæр ивын',
 'editing' => 'Ивд цæуы $1',
 'editingsection' => 'Ивыс $1 (фарсы хай)',
 'editconflict' => 'Ивыны конфликт: $1',
@@ -828,7 +841,7 @@ $2
 'revertmerge' => 'Ахицæн кæнын',
 
 # Diffs
-'history-title' => '"$1" фарсы фæлтæрты истори',
+'history-title' => '"$1", йæ фæлтæрты истори',
 'lineno' => 'Рæнхъ $1:',
 'compareselectedversions' => 'Абарын æвзæрст фæлтæртæ',
 'editundo' => 'раивын',
@@ -1596,6 +1609,10 @@ $3',
 'feedback-close' => 'Æххæст',
 
 # API errors
+'api-error-missingparam' => 'Мидæггаг рæдыд: Курдиаты параметртæ нæй.',
+'api-error-missingresult' => 'Мидæггаг рæдыд: Нæ рауадис сбæрæг кæнын къопи кæнын куыд бантыстис.',
+'api-error-mustbeloggedin' => 'Ды хъуамæ системæмæ хызт уай, цæмæй файлтæ æвгæнай.',
+'api-error-mustbeposted' => 'Мидæггаг рæдыд: Курдиат хъуамæ уа HTTP POST.',
 'api-error-noimageinfo' => 'Æвгæд æххæст у, фæлæ нын сервер ницыуал рабæрæг кодта файлы тыххæй.',
 'api-error-nomodule' => 'Мидæггаг рæдыд: Бавгæнæн модуль нæу æвæрд.',
 'api-error-ok-but-empty' => 'Мидæггаг рæдыд: Серверæй дзуапп нæй.',
index c4e0454..6e0857c 100644 (file)
@@ -95,10 +95,10 @@ $messages = array(
 'tog-editsectiononrightclick' => 'ਸੈਕਸ਼ਨ ਸਿਰਲੇਖਾਂ ਤੇ ਸੱਜੀ ਕਲਿੱਕ ਦੁਆਰਾ ਸੋਧ ਯੋਗ ਕਰੋ (ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ)',
 'tog-showtoc' => 'ਟੇਬਲ ਆਫ਼ ਕੰਨਟੈੱਟ ਵੇਖਾਓ (for pages with more than 3 headings)',
 'tog-rememberpassword' => 'ਇਸ ਬਰਾਊਜ਼ਰ ਉੱਤੇ ਮੇਰਾ ਲਾਗਇਨ ਯਾਦ ਰੱਖੋ ($1 {{PLURAL:$1|ਦਿਨ|ਦਿਨਾਂ}} ਲਈ ਵੱਧ ਤੋਂ ਵੱਧ)',
-'tog-watchcreations' => 'ਮà©\87ਰà©\87 à¨µà¨²à©\8bà¨\82 à¨¬à¨£à¨¾à¨\8f à¨\97à¨\8f à¨¨à¨µà©\87à¨\82 à¨¸à¨«à¨¼à©\87 à¨\85ਤà©\87 à¨\85ੱਪਲà©\8bਡ à¨\95à©\80ਤà©\80à¨\86à¨\82 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨®à©\87ਰà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿à©±à¨\9a à¨ªà¨¾à¨\93',
-'tog-watchdefault' => 'ਮà©\87ਰà©\87 à¨µà©±à¨²à©\8bà¨\82 à¨¸à©\8bਧà©\87 à¨¸à¨«à¨¼à©\87 à¨\85ਤà©\87 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨®à©\87ਰà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿à©±ਚ ਪਾਓ',
-'tog-watchmoves' => 'ਮà©\87ਰà©\87 à¨µà©±à¨²à©\8bà¨\82 à¨¬à¨¦à¨²à©\87 à¨¸à¨¿à¨°à¨²à©\87à¨\96ਾà¨\82 à¨µà¨¾à¨²à¨¼à©\87 à¨¸à¨«à¨¼à©\87 à¨\85ਤà©\87 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨®à©\87ਰà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿à©±à¨\9a à¨ªà¨¾à¨\93',
-'tog-watchdeletion' => 'ਮà©\87ਰà©\87 à¨µà¨²à©\8bà¨\82 à¨¹à¨\9fਾà¨\8f à¨\97à¨\8f à¨¸à¨«à¨¼à©\87 à¨®à©\87ਰà©\80 à¨µà¨¾à¨\9a-ਲਿਸà¨\9f à¨µà¨¿à©±ਚ ਪਾਓ',
+'tog-watchcreations' => 'ਮੇਰੇ ਵਲੋਂ ਬਣਾਏ ਗਏ ਨਵੇਂ ਸਫ਼ੇ ਅਤੇ ਅੱਪਲੋਡ ਕੀਤੀਆਂ ਫ਼ਾਈਲਾਂ ਮੇਰੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਪਾਓ',
+'tog-watchdefault' => 'ਮà©\87ਰà©\87 à¨µà©±à¨²à©\8bà¨\82 à¨¸à©\8bਧà©\87 à¨\97à¨\8f à¨¸à¨«à¨¼à©\87 à¨\85ਤà©\87 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨®à©\87ਰà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿ਚ ਪਾਓ',
+'tog-watchmoves' => 'ਮੇਰੇ ਵੱਲੋਂ ਬਦਲੇ ਸਿਰਲੇਖਾਂ ਵਾਲ਼ੇ ਸਫ਼ੇ ਅਤੇ ਫ਼ਾਈਲਾਂ ਮੇਰੀ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚ ਪਾਓ',
+'tog-watchdeletion' => 'ਮà©\87ਰà©\87 à¨µà¨²à©\8bà¨\82 à¨®à¨¿à¨\9fਾà¨\8f à¨\97à¨\8f à¨¸à¨«à¨¼à©\87 à¨\85ਤà©\87 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨®à©\87ਰà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿ਚ ਪਾਓ',
 'tog-minordefault' => 'ਸਾਰੇ ਫੇਰ-ਬਦਲਾਂ ’ਤੇ ਮੂਲ ਰੂਪ ਵਿਚ ਛੋਟੀਆਂ ਹੋਣ ਦਾ ਨਿਸ਼ਾਨ ਲਾਓ',
 'tog-previewontop' => 'ਐਡਿਟ ਬਕਸੇ ਤੋਂ ਪਹਿਲਾਂ ਝਲਕ ਵੇਖਾਓ',
 'tog-previewonfirst' => 'ਪਹਿਲੇ ਐਡਿਟ ਉੱਤੇ ਝਲਕ ਵੇਖਾਓ',
@@ -122,15 +122,15 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'tog-showjumplinks' => '"ਇਸ ਤੇ ਜਾਓ" ਦੇ ਲਿੰਕ ਦਿਖਾਣਾ ਸਮਰੱਥ ਕਰੋ',
 'tog-uselivepreview' => 'ਸਿੱਧੀ ਝਲਕ ਵਰਤੋ (ਜਾਵਾਸਕ੍ਰਿਪਟ ਲੋੜੀਂਦੀ ਹੈ) (ਤਜਰਬੇਕਾਰੀ)',
 'tog-forceeditsummary' => 'ਜਦੋਂ ਮੈਂ ਖ਼ਾਲੀ ਸੋਧ ਸਾਰ ਦਾਖ਼ਲ ਕਰਾਂ ਤਾਂ ਮੈਨੂੰ ਖ਼ਬਰਦਾਰ ਕਰੋ',
-'tog-watchlisthideown' => 'ਮà©\87ਰà©\80 à¨µà¨¾à¨\9a-ਲਿਸà¨\9f à¨µà¨¿à©±à¨\9aà©\8bà¨\82 à¨®à©\87ਰà©\80à¨\86à¨\82 à¨¸à©\8bਧਾà¨\82 à¨¹à¨\9fਾਓ',
-'tog-watchlisthidebots' => 'ਮà©\87ਰà©\80 à¨µà¨¾à¨\9a-ਲਿਸà¨\9f à¨µà¨¿à©±à¨\9aà©\8bà¨\82 à¨°à©\8bਬਾà¨\9f à¨¦à¨¿à¨\86à¨\82 à¨¸à©\8bਧਾà¨\82 à¨¹à¨\9fਾਓ',
-'tog-watchlisthideminor' => 'à¨\9bà©\8bà¨\9fà©\87 à¨¸à©\8bਧ à¨µà¨¾à¨\9a-ਲਿਸà¨\9f à¨¤à©\8bà¨\82 à¨\93ਹਲà©\87 à¨°à©±à¨\96à©\8b',
+'tog-watchlisthideown' => 'ਨਿà¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿à©±à¨\9aà©\8bà¨\82 à¨®à©\87ਰà©\87 à¨«à©\87ਰ-ਬਦਲ à¨²à©\81à¨\95ਾਓ',
+'tog-watchlisthidebots' => 'ਮà©\87ਰà©\80 à¨¨à¨¿à¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿à¨\9aà©\8bà¨\82 à¨¬à©\8bà¨\9fਾà¨\82 à¨¦à©\87 à¨«à©\87ਰ-ਬਦਲ à¨²à©\81à¨\95ਾਓ',
+'tog-watchlisthideminor' => 'ਨਿà¨\97ਰਾਨà©\80-ਲਿਸà¨\9f à¨µà¨¿à¨\9aà©\8bà¨\82 à¨\9bà©\8bà¨\9fà©\87 à¨«à©\87ਰ-ਬਦਲ à¨²à©\81à¨\95ਾà¨\93',
 'tog-watchlisthideliu' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚੋਂ ਲਾਗ ਇਨ ਮੈਂਬਰਾਂ ਦੇ ਕੀਤੇ ਫੇਰ-ਬਦਲ ਲੁਕਾਓ',
 'tog-watchlisthideanons' => 'ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚੋਂ ਗੁਮਨਾਮ ਮੈਂਬਰਾਂ ਦੇ ਕੀਤੇ ਫੇਰ-ਬਦਲ ਲੁਕਾਓ',
 'tog-watchlisthidepatrolled' => 'ਵੇਖੀਆਂ ਜਾ ਚੁੱਕੀਆਂ ਸੋਧਾਂ ਨਿਗਰਾਨੀ-ਲਿਸਟ ਵਿਚੋਂ ਲੁਕਾਓ',
 'tog-ccmeonemails' => 'ਜੋ ਈ-ਮੇਲਾਂ ਮੈਂ ਦੂਜੇ ਮੈਂਬਰਾਂ ਨੂੰ ਭੇਜਦਾ ਹਾਂ ਓਹਨਾਂ ਦੀਆਂ ਨਕਲਾਂ ਮੈਨੂੰ ਭੇਜੋ',
 'tog-diffonly' => 'ਫ਼ਰਕਾਂ ਤੋਂ ਹੇਠ ਸਫ਼ੇ ਦੀ ਸਮੱਗਰੀ ਨਾ ਵਖਾਓ',
-'tog-showhiddencats' => 'ਲà©\81à¨\95à©\80à¨\86à¨\82 à¨\95à©\88à¨\9fà©\87à¨\97ਰੀਆਂ ਵਖਾਓ',
+'tog-showhiddencats' => 'ਲà©\81à¨\95à©\80à¨\86à¨\82 à¨¸à¨¼à©\8dਰà©\87ਣੀਆਂ ਵਖਾਓ',
 'tog-norollbackdiff' => '"ਵਾਪਸ ਮੋੜੌ"ਅਮਲ ਵਿਚ ਲਿਆਣ ਬਾਦ ਫ਼ਰਕ ਨਾ ਦਿਖਾਓ',
 
 'underline-always' => 'ਹਮੇਸ਼ਾਂ',
@@ -197,43 +197,43 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'dec' => 'ਦਿਸੰਬਰ',
 
 # Categories related messages
-'pagecategories' => '{{PLURAL:$1|à¨\95à©\88à¨\9fਾà¨\97ਰà©\80|à¨\95à©\88à¨\9fਾਗਰੀਆਂ}}',
-'category_header' => 'à¨\95à©\88à¨\9fਾà¨\97ਰà©\80 "$1" à¨µà¨¿à©±ਚ ਲੇਖ',
-'subcategories' => 'ਸਬ-à¨\95à©\88à¨\9fਾਗਰੀਆਂ',
-'category-media-header' => 'à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 "$1" à¨µà¨¿à©±à¨\9a à¨®à©\80ਡà©\80à¨\86',
-'category-empty' => "''à¨\87ਸ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿à©±à¨\9a à¨\87ਸ à¨µà©\87ਲ਼à©\87 à¨\95à©\8bà¨\88 à¨µà©\80 à¨¸à¨«à¨¼à¨¾ à¨\9cਾà¨\82 à¨®à©\80ਡà©\80à¨\86 à¨¨à¨¹à©\80à¨\82 à¨¹à©\88।''",
-'hidden-categories' => '{{PLURAL:$1|ਲà©\81à¨\95à©\80ਵà©\80à¨\82 à¨¸à¨¼à©\8dਰà©\87ਣà©\80|ਲà©\81à¨\95ਵà©\80à¨\82à¨\86à¨\82 à¨¸à¨¼à©\8dਰà©\87ਣੀਆਂ}}',
+'pagecategories' => '{{PLURAL:$1|à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80|à¨\95à©\88à¨\9fà©\87ਗਰੀਆਂ}}',
+'category_header' => 'à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 "$1" à¨µà¨¿ਚ ਲੇਖ',
+'subcategories' => 'ਸਬ-à¨\95à©\88à¨\9fà©\87ਗਰੀਆਂ',
+'category-media-header' => 'ਕੈਟੇਗਰੀ "$1" ਵਿਚ ਮੀਡੀਆ',
+'category-empty' => "''ਇਸ ਕੈਟੇਗਰੀ ਵਿਚ ਇਸ ਵੇਲ਼ੇ ਕੋਈ ਵੀ ਸਫ਼ਾ ਜਾਂ ਮੀਡੀਆ ਨਹੀਂ ਹੈ।''",
+'hidden-categories' => '{{PLURAL:$1|ਲà©\81à¨\95ਵà©\80à¨\82 à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80|ਲà©\81à¨\95ਵà©\80à¨\82à¨\86à¨\82 à¨\95à©\88à¨\9fà©\87à¨\97ਰੀਆਂ}}',
 'hidden-category-category' => 'ਲੁਕੀਆਂ ਕੈਟੇਗਰੀਆਂ',
-'category-subcat-count' => '{{ਕੁੱਲ $2 ਸ਼੍ਰੇਣੀਆਂ ਵਿਚੋਂ, PLURAL:$2|ਇਸ ਸ਼੍ਰੇਣੀ ਵਿਚ ਸਿਰਫ਼ ਹੇਠ ਲਿਖੀ ਸ਼੍ਰੇਣੀ ਹੈ| ਇਸ ਸ਼੍ਰੇਣੀ ਵਿਚ {{PLURAL:$1|ਉਪ ਸ਼੍ਰੇਣੀ ਹੈ|$1 ਉਪ-ਸ਼੍ਰੇਣੀਆਂ ਹਨ}}}}',
-'category-subcat-count-limited' => 'à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à¨\9a {{PLURAL:$1|à¨\89ਪ-ਸ਼à©\8dਰà©\87ਣà©\80 à¨¹à©\88।|$1 à¨\89ਪ-ਸ਼à©\8dਰà©\87ਣà©\80à¨\86à¨\82 à¨¹à¨¨à¥¤}}',
-'category-article-count' => '{{PLURAL:$2|à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à¨\9a à¨¸à¨¿à¨°à¨«à¨¼ à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨¹à©\88|à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à¨\9a, à¨\95à©\81ੱਲ $2 à¨µà¨¿à¨\9aà©\8bà¨\82, à¨\87ਹ {{PLURAL:$1|ਸਫ਼ਾ à¨¹à©\88|$1 à¨¸à¨«à¨¼à©\87}} à¨¹à¨¨}}',
-'category-article-count-limited' => 'à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à¨\9a à¨\87ਹ {{PLURAL:$1|ਸਫ਼ਾ à¨¹à©\88|$1 à¨¸à¨«à¨¼à©\87 à¨¹à¨¨à¥¤}}',
-'category-file-count' => '{{PLURAL:$2|à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à¨\9a à¨¸à¨¿à¨°à¨«à¨¼ à¨\87ਹ à¨«à¨¼à¨¾à¨\88ਲ à¨¹à©\88।| à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à¨\9a {{PLURAL:$1|ਫ਼ਾà¨\88ਲ à¨¹à©\88|$1 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨¹à¨¨à¥¤}}}}',
-'category-file-count-limited' => 'à¨\87ਸ à¨¸à¨¼à©\8dਰà©\87ਣà©\80 à¨µà¨¿à¨\9a à¨\87ਹ {{PLURAL:$1|ਫ਼ਾà¨\88ਲ à¨¹à©\88|$1 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨¹à¨¨à¥¤}}',
+'category-subcat-count' => 'ਇਸ ਕੈਟੇਗਰੀ ਵਿਚ, ਕੁੱਲ $2 ਵਿਚੋਂ, {{PLURAL:$2|ਸਿਰਫ਼ ਇਹ ਸਬ-ਕੈਟੇਗਰੀ ਹੈ|ਇਹ {{PLURAL:$1|ਸਬ-ਕੈਟੇਗਰੀ ਹੈ|$1 ਸਬ-ਕੈਟੇਗਰੀਆਂ ਹਨ}}}}।',
+'category-subcat-count-limited' => 'à¨\87ਸ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿à¨\9a {{PLURAL:$1|ਸਬ-à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨¹à©\88|$1 à¨¸à¨¬-à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80à¨\86à¨\82 à¨¹à¨¨}}।',
+'category-article-count' => '{{PLURAL:$2|à¨\87ਸ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿à¨\9a à¨¸à¨¿à¨°à¨«à¨¼ à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨¹à©\88|à¨\87ਸ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿à¨\9a, à¨\95à©\81ੱਲ $2 à¨µà¨¿à¨\9aà©\8bà¨\82, à¨\87ਹ {{PLURAL:$1|ਸਫ਼ਾ à¨¹à©\88|$1 à¨¸à¨«à¨¼à©\87 à¨¹à¨¨}}}}।',
+'category-article-count-limited' => 'ਮà©\8cà¨\9cà©\82ਦਾ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿à¨\9a à¨\87ਹ {{PLURAL:$1|ਸਫ਼ਾ à¨¹à©\88|$1 à¨¸à¨«à¨¼à©\87 à¨¹à¨¨}}।',
+'category-file-count' => '{{PLURAL:$2|à¨\87ਸ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿à¨\9a à¨¸à¨¿à¨°à¨«à¨¼ à¨\87ਹ à¨«à¨¼à¨¾à¨\88ਲ à¨¹à©\88|à¨\87ਸ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿à¨\9a {{PLURAL:$1|ਫ਼ਾà¨\88ਲ à¨¹à©\88|$1 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨¹à¨¨}}}}।',
+'category-file-count-limited' => 'ਮà©\8cà¨\9cà©\82ਦਾ à¨\95à©\88à¨\9fà©\87à¨\97ਰà©\80 à¨µà¨¿à¨\9a à¨\87ਹ {{PLURAL:$1|ਫ਼ਾà¨\88ਲ à¨¹à©\88|$1 à¨«à¨¼à¨¾à¨\88ਲਾà¨\82 à¨¹à¨¨}}।',
 'listingcontinuesabbrev' => 'ਜਾਰੀ',
 'index-category' => 'ਤਤਕਰੇ ਵਾਲ਼ੇ ਸਫ਼ੇ',
-'noindex-category' => 'à¨\95à©\8dਰਮਸà©\82à¨\9aà©\80 à¨°à¨¹à¨¿à¨¤ ਸਫ਼ੇ',
+'noindex-category' => 'ਬਿਨਾà¨\82 à¨¤à¨¤à¨\95ਰà©\87 à¨µà¨¾à¨²à¨¼à©\87 ਸਫ਼ੇ',
 'broken-file-category' => 'ਟੁੱਟੇ ਹੋਏ ਫ਼ਾਈਲ ਜੋੜਾਂ ਵਾਲ਼ੇ ਸਫ਼ੇ',
 
 'about' => 'ਇਸ ਬਾਰੇ',
-'article' => 'ਸਮੱà¨\97ਰà©\80 à¨ªà©\87à¨\9c',
+'article' => 'ਸਮੱà¨\97ਰà©\80 à¨¸à¨«à¨¼à¨¾',
 'newwindow' => '(ਨਵੀਂ ਵਿੰਡੋ ਵਿੱਚ ਖੁੱਲ੍ਹਦੀ ਹੈ)',
 'cancel' => 'ਰੱਦ ਕਰੋ',
 'moredotdotdot' => 'ਹੋਰ...',
-'mypage' => 'ਮà©\87ਰਾ à¨ªà©\87à¨\9c',
-'mytalk' => 'ਮੇਰੀ ਗੱਲਬਾਤ',
-'anontalk' => 'à¨\87ਹ IP à¨²à¨\88 à¨\97ੱਲਬਾਤ',
+'mypage' => 'ਮà©\87ਰਾ à¨¸à¨«à¨¼à¨¾',
+'mytalk' => 'ਮੇਰੀ ਗੱਲ-ਬਾਤ',
+'anontalk' => 'à¨\87ਸ IP à¨²à¨\88 à¨\97ੱਲ-ਬਾਤ',
 'navigation' => 'ਰਹਿਨੁਮਾਈ',
 'and' => '&#32;ਅਤੇ',
 
 # Cologne Blue skin
-'qbfind' => 'ਖੋਜ',
+'qbfind' => 'ਖੋਜ',
 'qbbrowse' => 'ਬਰਾਊਜ਼',
 'qbedit' => 'ਸੋਧ',
-'qbpageoptions' => 'à¨\87ਹ à¨ªà©\87à¨\9c',
+'qbpageoptions' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾',
 'qbpageinfo' => 'ਭਾਗ',
-'qbmyoptions' => 'ਮà©\87ਰà©\87 à¨ªà©\87à¨\9c',
-'qbspecialpages' => 'à¨\96ਾਸ à¨ªà©\87à¨\9c',
+'qbmyoptions' => 'ਮà©\87ਰà©\87 à¨¸à¨«à¨¼à©\87',
+'qbspecialpages' => 'à¨\96਼ਾਸ à¨¸à¨«à¨¼à¨¾',
 'faq' => 'ਅਕਸਰ ਪੁੱਛੇ ਜਾਣ ਵਾਲ਼ੇ ਸਵਾਲ',
 'faqpage' => 'Project:ਸਵਾਲ-ਜਵਾਬ',
 
@@ -242,7 +242,7 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'vector-action-delete' => 'ਮਿਟਾਓ',
 'vector-action-move' => 'ਭੇਜੋ',
 'vector-action-protect' => 'ਸੁਰੱਖਿਅਤ ਕਰੋ',
-'vector-action-undelete' => 'ਹà¨\9fਾà¨\89ਣਾ à¨µà¨¾à¨ªà¨¸',
+'vector-action-undelete' => 'à¨\85ਣ-ਮਿà¨\9fਾà¨\89ਣਾ',
 'vector-action-unprotect' => 'ਸੁਰੱਖਿਆ ਬਦਲੋ',
 'vector-simplesearch-preference' => 'ਵਾਧੂ ਖੋਜ ਸਲਾਹਾਂ ਯੋਗ ਕਰੋ (ਸਿਰਫ਼ ਵਿਕਟਰ ਸਕਿੰਨ ਵਿਚ)',
 'vector-view-create' => 'ਬਣਾਓ',
@@ -264,47 +264,47 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 'searcharticle' => 'ਜਾਓ',
 'history' => 'ਸਫ਼ੇ ਦਾ ਅਤੀਤ',
 'history_short' => 'ਅਤੀਤ',
-'updatedmarker' => 'ਮà©\87ਰà©\87 à¨\86à¨\96ਰà©\80 à¨\96à©\8bਲà©\8dਹਣ à¨¬à¨¾à¨¦ à¨\85ੱਪਡà©\87à¨\9f',
+'updatedmarker' => 'ਮà©\87ਰà©\80 à¨\86à¨\96਼ਰà©\80 à¨«à©\87ਰà©\80 à¨¤à©\8bà¨\82 à¨¬à¨¾à¨\85ਦ à¨¬à¨¦à¨²à©\87 à¨\97à¨\8f',
 'printableversion' => 'ਛਪਣਯੋਗ ਵਰਜਨ',
 'permalink' => 'ਪੱਕਾ ਲਿੰਕ',
-'print' => 'ਪਰਿੰà¨\9f à¨\95ਰੋ',
+'print' => 'à¨\9bਾਪੋ',
 'view' => 'ਵੇਖੋ',
 'edit' => 'ਬਦਲੋ',
 'create' => 'ਬਣਾਓ',
-'editthispage' => 'à¨\87ਹ à¨ªà©\87à¨\9c ਸੋਧੋ',
+'editthispage' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ ਸੋਧੋ',
 'create-this-page' => 'ਇਹ ਸਫ਼ਾ ਬਣਾਓ',
 'delete' => 'ਮਿਟਾਓ',
-'deletethispage' => 'à¨\87ਹ à¨ªà©\87à¨\9c à¨¹ਟਾਓ',
-'undelete_short' => 'ਅਣ-ਹਟਾਓ {{PLURAL:$1|one edit|$1 edits}}',
+'deletethispage' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ à¨®à¨¿ਟਾਓ',
+'undelete_short' => '{{PLURAL:$1|ਇੱਕ ਸੋਧ|$1 ਸੋਧਾਂ}} ਅਣ-ਮਿਟਾਓ',
 'viewdeleted_short' => '{{PLURAL:$1|ਇਕ ਮਿਟਾਈ ਸੋਧ|$1 ਮਿਟਾਈਆਂ ਸੋਧਾਂ}} ਵੇਖੋ',
 'protect' => 'ਸੁਰੱਖਿਆ',
 'protect_change' => 'ਤਬਦੀਲੀ',
-'protectthispage' => 'à¨\87ਹ à¨ªà©\87à¨\9c ਸੁਰੱਖਿਅਤ ਕਰੋ',
+'protectthispage' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ ਸੁਰੱਖਿਅਤ ਕਰੋ',
 'unprotect' => 'ਸੁਰੱਖਿਆ ਬਦਲੋ',
-'unprotectthispage' => 'à¨\87ਹ à¨ªà©\87à¨\9c਼ ਦੀ ਸੁਰੱਖਿਆ ਬਦਲੋ',
+'unprotectthispage' => 'à¨\87ਹ à¨¸à¨«à¨¼à©\87 ਦੀ ਸੁਰੱਖਿਆ ਬਦਲੋ',
 'newpage' => 'ਨਵਾਂ ਸਫ਼ਾ',
-'talkpage' => 'à¨\87ਸ à¨ªà©\87à¨\9c à¨¬à¨¾à¨°à©\87 à¨\9aਰà¨\9aਾ',
-'talkpagelinktext' => 'ਗੱਲਬਾਤ',
-'specialpage' => 'à¨\96ਾਸ à¨ªà©\87à¨\9c',
+'talkpage' => 'à¨\87ਸ à¨¸à¨«à¨¼à©\87 à¨¬à¨¾à¨°à©\87 à¨\9aਰà¨\9aਾ à¨\95ਰà©\8b',
+'talkpagelinktext' => 'ਗੱਲ-ਬਾਤ',
+'specialpage' => 'à¨\96਼ਾਸ à¨¸à¨«à¨¼à¨¾',
 'personaltools' => 'ਨਿੱਜੀ ਸੰਦ',
-'postcomment' => 'ਨਵਾà¨\82 à¨­à¨¾à¨\97',
-'articlepage' => 'ਸਮੱà¨\97ਰà©\80 à¨ªà©\87à¨\9c ਵੇਖੋ',
+'postcomment' => 'ਨਵਾà¨\82 à¨¸à©\88à¨\95ਸ਼ਨ',
+'articlepage' => 'ਸਮੱà¨\97ਰà©\80 à¨¸à¨«à¨¼à¨¾ ਵੇਖੋ',
 'talk' => 'ਚਰਚਾ',
 'views' => 'ਵੇਖੋ',
 'toolbox' => 'ਸੰਦ ਬਕਸਾ',
-'userpage' => 'ਯà©\82à¨\9c਼ਰ à¨ªà©\87à¨\9c ਵੇਖੋ',
-'projectpage' => 'ਪਰà©\8bà¨\9cà©\88à¨\95à¨\9f à¨ªà©\87à¨\9c ਵੇਖੋ',
-'imagepage' => 'ਫਾà¨\87ਲ à¨ªà©\87à¨\9c ਵੇਖੋ',
+'userpage' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ à¨¸à¨«à¨¼à¨¾ ਵੇਖੋ',
+'projectpage' => 'ਪà©\8dਰà©\8bà¨\9cà©\88à¨\95à¨\9f à¨¸à¨«à¨¼à¨¾ ਵੇਖੋ',
+'imagepage' => 'ਫ਼ਾà¨\88ਲ à¨¸à¨«à¨¼à¨¾ ਵੇਖੋ',
 'mediawikipage' => 'ਸੁਨੇਹਾ ਪੇਜ ਵੇਖੋ',
-'templatepage' => 'à¨\9fà©\88ਪਲà©\87à¨\9f à¨ªà©\87à¨\9c ਵੇਖੋ',
-'viewhelppage' => 'ਮੱਦਦ à¨ªà©\87à¨\9c ਵੇਖੋ',
-'categorypage' => 'à¨\95à©\88à¨\9fਾà¨\97ਰà©\80 à¨ªà©\87à¨\9c ਵੇਖੋ',
+'templatepage' => 'ਫਰਮਾ à¨¸à¨«à¨¼à¨¾ ਵੇਖੋ',
+'viewhelppage' => 'ਮਦਦ à¨¸à¨«à¨¼à¨¾ ਵੇਖੋ',
+'categorypage' => 'à¨\95à©\88à¨\9fà©\88à¨\97ਰà©\80 à¨¸à¨«à¨¼à¨¾ ਵੇਖੋ',
 'viewtalkpage' => 'ਚਰਚਾ ਵੇਖੋ',
 'otherlanguages' => 'ਹੋਰ ਜ਼ਬਾਨਾਂ ਵਿਚ',
 'redirectedfrom' => '($1 ਤੋਂ ਰੀ-ਡਿਰੈਕਟ)',
-'redirectpagesub' => 'ਰੀ-ਡਿਰੈਕਟ ਪੇਜ',
+'redirectpagesub' => 'ਰੀਡਿਰੈਕਟ ਸਫ਼ਾ',
 'lastmodifiedat' => 'ਇਹ ਸਫ਼ਾ ਆਖ਼ਰੀ ਵਾਰ $1 ਨੂੰ $2 ’ਤੇ ਸੋਧਿਆ ਗਿਆ ਸੀ।',
-'viewcount' => 'à¨\87ਹ à¨ªà©\87à¨\9c à¨\85ਸà©\88ੱਸ à¨\95à©\80ਤਾ à¨\97ਿà¨\86 {{PLURAL:$1|à¨\87ੱà¨\95ਵਾਰ|$1 à¨µà¨¾à¨°}}.',
+'viewcount' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ {{PLURAL:$1|à¨\87ੱà¨\95 à¨µà¨¾à¨°|$1 à¨µà¨¾à¨°}} à¨µà©\87à¨\96ਿà¨\86 à¨\97ਿà¨\86।',
 'protectedpage' => 'ਸੁਰੱਖਿਅਤ ਪੇਜ',
 'jumpto' => 'ਇਸ ’ਤੇ ਜਾਓ:',
 'jumptonavigation' => 'ਰਹਿਨੁਮਾਈ',
@@ -315,7 +315,7 @@ Manual:External_editors ਹੋਰ ਜਾਣਕਾਰੀ।])',
 $1',
 'pool-timeout' => 'ਲੌਕ ਲਈ ਉਡੀਕ ਦਾ ਵਕਤ ਖ਼ਤਮ ਹੋ ਗਿਆ ਹੈ',
 'pool-queuefull' => 'ਪੂਲ ਕਤਾਰ ਪੂਰੀ ਲੱਦੀ ਹੈ',
-'pool-errorunknown' => 'ਅਣਜਾਣ ਗਲਤੀ',
+'pool-errorunknown' => 'à¨\85ਣà¨\9cਾਣ à¨\97਼ਲਤà©\80',
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
 'aboutsite' => '{{SITENAME}} ਬਾਰੇ',
@@ -350,15 +350,15 @@ $1',
 'youhavenewmessages' => 'ਤੁਹਾਡੇ ਲਈ $1। ($2)',
 'newmessageslink' => 'ਨਵੇਂ ਸੁਨੇਹੇ',
 'newmessagesdifflink' => 'ਆਖ਼ਰੀ ਤਬਦੀਲੀ',
-'youhavenewmessagesfromusers' => '{{PLURAL:$3|à¨\87à¨\95  à¨®à©\88à¨\82ਬਰ|$3 à¨®à©\88à¨\82ਬਰਾà¨\82}} à¨µà©±à¨²à©\8bà¨\82 à¨¤à©\81ਹਾਨà©\82à©° $1 ($2)',
-'youhavenewmessagesmanyusers' => 'à¨\95à¨\88 à¨®à©\88à¨\82ਬਰਾਂ ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।',
-'newmessageslinkplural' => '{{PLURAL:$1|ਇੱਕ ਨਵਾਂ ਸੁਨੇਹਾ|ਨਵੇਂ ਸੁਨੇਹੇ}}',
+'youhavenewmessagesfromusers' => '{{PLURAL:$3|à¨\87ੱà¨\95 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ|$3 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰਾà¨\82}} à¨µà©±à¨²à©\8bà¨\82 à¨¤à©\81ਹਾਨà©\82à©° $1 ($2)।',
+'youhavenewmessagesmanyusers' => 'à¨\95à¨\88 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰਾਂ ਵੱਲੋਂ ਤੁਹਾਨੂੰ $1 ($2)।',
+'newmessageslinkplural' => '{{PLURAL:$1|ਇੱਕ ਨਵਾਂ ਸੁਨੇਹਾ|ਨਵੇਂ ਸੁਨੇਹੇ}} {{PLURAL:$1|ਹੈ|ਹਨ}}',
 'newmessagesdifflinkplural' => 'ਆਖ਼ਰੀ {{PLURAL:$1|ਤਬਦੀਲੀ|ਤਬਦੀਲੀਆਂ}}',
-'youhavenewmessagesmulti' => 'ਤੁਹਾਨੂੰ ਨਵੇਂ ਸੁਨੇਹੇ $1 ਉੱਤੇ ਹਨ',
+'youhavenewmessagesmulti' => '$1 ’ਤੇ ਤੁਹਾਡੇ ਲਈ ਨਵੇਂ ਸੁਨੇਹੇ ਹਨ',
 'editsection' => 'ਸੋਧ',
 'editold' => 'ਸੋਧੋ',
 'viewsourceold' => 'ਸਰੋਤ ਵੇਖੋ',
-'editlink' => 'ਸੋਧ',
+'editlink' => 'ਸੋਧ',
 'viewsourcelink' => 'ਸਰੋਤ ਵੇਖੋ',
 'editsectionhint' => 'ਸ਼ੈਕਸ਼ਨ ਸੋਧ: $1',
 'toc' => 'ਲਿਸਟ',
@@ -366,11 +366,11 @@ $1',
 'hidetoc' => 'ਓਹਲੇ',
 'collapsible-collapse' => 'ਸਮੇਟੋ',
 'collapsible-expand' => 'ਫੈਲਾਓ',
-'thisisdeleted' => 'ਵੇਖੋ ਜਾਂ $1 ਰੀਸਟੋਰ?',
-'viewdeleted' => '$1 à¨µà©\87à¨\96ਣਾ?',
+'thisisdeleted' => '$1 ਵੇਖੋ ਜਾਂ ਮੁੜ ਬਹਾਲ ਕਰੋ',
+'viewdeleted' => '$1 à¨µà©\87à¨\96ਣà©\80à¨\86à¨\82 à¨¹à¨¨?',
 'restorelink' => '{{PLURAL:$1|ਇਕ ਮਿਟਾਈ ਹੋਈ ਸੋਧ|$1 ਮਿਟਾਈਆਂ ਹੋਈਆਂ ਸੋਧਾਂ}}',
 'feedlinks' => 'ਫੀਡ:',
-'feed-invalid' => 'ਸਬਸà¨\95à©\8dਰਿਪਸ਼ਨ à¨«à¨¼à©\80ਡ à¨¦à©\80 à¨\85ਵà©\88ਧ ਕਿਸਮ',
+'feed-invalid' => 'ਸਬਸà¨\95à©\8dਰਿਪਸ਼ਨ à¨«à¨¼à©\80ਡ à¨¦à©\80 à¨\97਼ਲਤ ਕਿਸਮ',
 'feed-unavailable' => 'ਸੰਸਥਾਵਾਂ  ਸਮੱਗਰੀ ਦਾ ਆਧੁਨਕੀਕਰਣ ਉਪਲਬਧ ਨਹੀਂ',
 'site-rss-feed' => '$1 RSS ਫੀਡ',
 'site-atom-feed' => '$1 ਐਟਮ ਫੀਡ',
@@ -382,29 +382,28 @@ $1',
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'ਲੇਖ',
-'nstab-user' => 'ਮà©\88à¨\82ਬਰ ਸਫ਼ਾ',
-'nstab-media' => 'ਮà©\80ਡਿà¨\86 à¨ªà©\87à¨\9c',
+'nstab-user' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ ਸਫ਼ਾ',
+'nstab-media' => 'ਮà©\80ਡà©\80à¨\86 à¨¸à¨«à¨¼à¨¾',
 'nstab-special' => 'ਖ਼ਾਸ ਸਫ਼ਾ',
 'nstab-project' => 'ਪ੍ਰੋਜੈਕਟ ਸਫ਼ਾ',
 'nstab-image' => 'ਫ਼ਾਈਲ',
 'nstab-mediawiki' => 'ਸੁਨੇਹਾ',
-'nstab-template' => 'ਸਾà¨\82à¨\9aਾ',
+'nstab-template' => 'ਫਰਮਾ',
 'nstab-help' => 'ਮੱਦਦ ਪੇਜ',
-'nstab-category' => 'à¨\95à©\88à¨\9fਾਗਰੀ',
+'nstab-category' => 'à¨\95à©\88à¨\9fà©\87ਗਰੀ',
 
 # Main script and global functions
-'nosuchaction' => 'à¨\95à©\8bà¨\88 à¨\87à©°à¨\9d à¨¦à¨¾ à¨\90à¨\95ਸ਼ਨ à¨¨à¨¹à©\80à¨\82',
+'nosuchaction' => 'à¨\90ਸਾ à¨\95à©\8bà¨\88 à¨\90à¨\95ਸ਼ਨ à¨¨à¨¹à©\80à¨\82 à¨¹à©\88',
 'nosuchactiontext' => 'URL ਦੁਆਰਾ ਦੱਸਿਆ ਕੰਮ ਗ਼ਲਤ ਹੈ।
 ਸ਼ਾਇਦ ਤੁਸੀਂ URL ਸਹੀ ਨਹੀਂ ਲਿਖਿਆ ਜਾਂ ਕਿਸੇ ਗ਼ਲਤ ਲਿੰਕ ਤੇ ਆਏ ਹੋ।
 ਇਹ ਵੀ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਇਹ {{SITENAME}} ਦੁਆਰੇ ਵਰਤੇ ਜਾਂਦੇ ਸਾਫ਼ਟਵੇਅਰ ਵਿਚਲੀ ਗ਼ਲਤੀ ਵੱਲ ਇਸ਼ਾਰਾ ਹੋਵੇ।',
-'nosuchspecialpage' => 'ਕੋਈ ਇੰਝ ਦਾ ਖਾਸ ਪੇਜ ਨਹੀਂ',
-'nospecialpagetext' => '<strong>ਤੁਸੀਂ ਇੱਕ ਅਵੈਧ ਖਾਸ ਪੇਜ ਦੀ ਮੰਗ ਕੀਤੀ ਹੈ।</strong>
-
-A list of valid special pages can be found at [[Special:SpecialPages]].',
+'nosuchspecialpage' => 'ਐਸਾ ਕੋਈ ਖ਼ਾਸ ਸਫ਼ਾ ਨਹੀਂ ਹੈ',
+'nospecialpagetext' => '<strong>ਤੁਸੀਂ ਇੱਕ ਗ਼ਲਤ ਖ਼ਾਸ ਸਫ਼ੇ ਲਈ ਬੇਨਤੀ ਕੀਤੀ ਹੈ।</strong>
+ਸਹੀ ਖ਼ਾਸ ਸਫ਼ਿਆਂ ਦੀ ਲਿਸਟ [[Special:SpecialPages|{{int:specialpages}}]] ’ਤੇ ਵੇਖੀ ਜਾ ਸਕਦੀ ਹੈ।',
 
 # General errors
-'error' => 'ਗਲਤੀ',
-'databaseerror' => 'ਡਾà¨\9fਾਬà©\87ਸ à¨\97ਲਤੀ',
+'error' => 'à¨\97਼ਲਤà©\80',
+'databaseerror' => 'ਡà©\88à¨\9fਾਬà©\87ਸ à¨\97਼ਲਤੀ',
 'dberrortext' => 'ਡੈਟਾਬੇਸ ਪੁ੍ਛ ਗਿੱਛ ਵਿਚ ਹਿਦਾਇਤਾਂ ਦੀ ਤਰੁੱਟੀ ਮਿਲੀ ਹੈ।
 ਹੋ ਸਕਦਾ ਹੈ ਇਹ ਤਰੁ੍ੱਟੀ ਸਾਫ਼ਟਵੇਅਰ ਦੀ ਹੋਵੇ।
 ਇਸ ਗਣਿਤਫ਼ਲ "<tt>$2</tt>" ਵਿਚੌਂ ਪਿਛਲੀ ਡੈਟਬਾਸ ਪੁੱਛ ਗਿੱਛ ਸੀ: <blockquote><tt>$1</tt></blockquote.
@@ -424,8 +423,8 @@ A list of valid special pages can be found at [[Special:SpecialPages]].',
 'missingarticle-rev' => '(ਬਦਲਾਅ#: $1)',
 'missingarticle-diff' => '(ਫ਼ਰਕ: $1, $2)',
 'readonly_lag' => 'ਜਦੌਂ ਤਕ ਅਧੀਨ ਡੇਟਾਬੇਸ ਸਰਵਰ ਸੁਤੰਤਰ ਡੈਟਾਬੇਸ ਸਰਵਰ ਦੀ ਪਕੜ ਵਿਚ ਨਹੀਂ ਆ ਜਾਂਦੇ ਡੈਟਾਬੇਸ ਸਵੈ ਜਕੜਿਆ ਗਿਆ ਹੈ।',
-'internalerror' => 'ਅੰਦਰੂਨੀ ਗਲਤੀ',
-'internalerror_info' => 'ਅੰਦਰੂਨੀ ਗਲਤੀ: $1',
+'internalerror' => 'à¨\85ੰਦਰà©\82ਨà©\80 à¨\97਼ਲਤà©\80',
+'internalerror_info' => 'à¨\85ੰਦਰà©\82ਨà©\80 à¨\97਼ਲਤà©\80: $1',
 'fileappenderrorread' => 'ਅੰਤਕਾ ਜੋੜਨ ਲਗਿਆਂ "$1"ਪੜ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ।',
 'fileappenderror' => "''$1'' ''$2'' ਨਾਲ਼ ਜੋੜਿਆ ਨਹੀ ਜਾ ਸਕਦਾ",
 'filecopyerror' => "'''$1''' ਫ਼ਾਈਲ '''$2''' ਵਿਚ ਨਕਲ ਨਹੀਂ ਹੋ ਸਕੀ।",
@@ -434,8 +433,8 @@ A list of valid special pages can be found at [[Special:SpecialPages]].',
 'directorycreateerror' => "''$1'' ਬਣਾਈ ਨਹੀਂ ਜਾ ਸਕੀ।",
 'filenotfound' => "ਫ਼ਾਈਲ ''$1'' ਲੱਭੀ ਨਹੀਂ ਜਾ ਸਕੀ।",
 'fileexistserror' => 'ਮਿਸਲ "$1" ਤੇ ਲਿਖ ਨਹੀਂ ਸਕਦੇ: ਮਿਸਲ ਹੌਂਦ ਵਿਚ ਹੈ।',
-'unexpected' => 'ਨਾ-ਸੰਭਾਵਿਤ à¨\97ਣਿਤਫ਼ਲ',
-'formerror' => 'ਦà©\8bਸ਼:ਫ਼ਾਰਮ ਪੇਸ਼ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ',
+'unexpected' => 'à¨\85ਣà¨\89ਮà©\80ਦਿà¨\86 à¨®à©\81ੱਲ: "$1"="$2"।',
+'formerror' => 'à¨\97਼ਲਤà©\80ਫ਼ਾਰਮ ਪੇਸ਼ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ',
 'badarticleerror' => 'ਇਹ ਕਾਰਵਾਈ ਇਸ ਸਫ਼ੇ ਤੇ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ।',
 'cannotdelete' => "ਫ਼ਾਈਲ ਜਾਂ ਸਫ਼ਾ ''$1'' ਨੂੰ ਮਿਟਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ।
 ਸ਼ਾਇਦ ਕੋਈ ਪਹਿਲਾਂ ਹੀ ਇਸਨੂੰ ਮਿਟਾ ਚੁੱਕਾ ਹੈ।",
@@ -445,20 +444,21 @@ A list of valid special pages can be found at [[Special:SpecialPages]].',
 'badtitle' => 'ਗ਼ਲਤ ਸਿਰਲੇਖ',
 'badtitletext' => 'ਤੁਹਾਡਾ ਦਰਖ਼ਾਸਤਸ਼ੁਦਾ ਸਿਰਲੇਖ ਨਾਕਾਬਿਲ, ਖ਼ਾਲੀ ਜਾਂ ਗ਼ਲਤ ਜੁੜਿਆ ਹੋਇਆ inter-languagd ਜਾਂ inter-wiki ਸਿਰਲੇਖ ਹੈ। ਇਹ ਵੀ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਇਸ ਵਿਚ ਇਕ-ਦੋ ਅੱਖਰ ਐਸੇ ਹੋਣ ਜੋ ਸਿਰਲੇਖ ਵਿਚ ਵਰਤੇ ਨਹੀਂ ਜਾ ਸਕਦੇ।',
 'viewsource' => 'ਸਰੋਤ ਵੇਖੋ',
-'protectedpagetext' => 'ਇਸ ਪੰਨੇ ਨੂੰ ਐਡਿਟ ਕਰਨ ਦੀ ਮਨਾਹੀ ਹੈ।',
-'viewsourcetext' => 'ਤੁਸੀਂ ਇਸ ਪੰਨੇ ਦਾ ਸੋਮਾ ਦੇਖ ਸਕਦੇ ਹੋ ਤੇ ਉਸ ਦਾ ਉਤਾਰਾ ਵੀ ਲੈ ਸਕਦੇ ਹੋ।',
-'viewyourtext' => 'ਤੁਸੀਂ ਇਸ ਪੰਨੇ ਬਾਰੇ " ਆਪਣੇ ਸੰਪਾਦਨਾਂ " ਨੂੰ ਦੇਖ ਸਕਦੇ ਹੋ ਤੇ ਉਨ੍ਹਾਂ ਦਾ ਉਤਾਰਾ ਵਿ ਲੈ ਸਕਦੇ ਹੋ।',
+'viewsource-title' => '$1 ਲਈ ਸਰੋਤ ਵੇਖੋ',
+'protectedpagetext' => 'ਇਹ ਸਫ਼ਾ ਫੇਰ-ਬਦਲ ਕਰਨ ਖ਼ਿਲਾਫ਼ ਸੁਰੱਖਿਅਤ ਹੈ।',
+'viewsourcetext' => 'ਤੁਸੀਂ ਇਸ ਸਫ਼ੇ ਦਾ ਸਰੋਤ ਵੇਖ ਅਤੇ ਨਕਲ ਕਰ ਸਕਦੇ ਹੋ:',
+'viewyourtext' => 'ਤੁਸੀਂ ਇਸ ਸਫ਼ੇ ’ਤੇ ਕੀਤੀਆਂ "ਆਪਣੀਆਂ ਸੋਧਾਂ" ਦਾ ਸਰੋਤ ਵੇਖ ਅਤੇ ਨਕਲ ਕਰ ਸਕਦੇ ਹੋ:',
 'protectedinterface' => 'ਇਹ ਪੰਨਾ ਸਾਫ਼ਟਵੇਅਰ ਇੰਟਰਫ਼ੇਸ ਦਾ ਮੂਲ ਪਾਠ ਹੈ ,ਅਤੇ ਦੁਰਵਰਤੌਂ ਤੌਂ ਬਚਾਅ ਲਈ ਰਾਖਵਾਂ ਕੀਤਾ ਗਿਆ ਹੈ।',
 'editinginterface' => "'''ਚਿਤਾਵਨੀ''' ਤੁਸੀਂ ਐਸੇ ਪੰਨੇ ਨੂੰ ਬਦਲ ਰਹੇ ਹੋ ਜੋ ਸਾਫ਼ਟਵੇਅਰ ਇੰਟਰਫ਼ੇਸ ਦੇ ਮੂਲ ਪਾਠ ਲਈ ਵਰਤਿਆ ਗਿਆ ਹੈ।
 ਇਸ ਪੰਨੇ ਦੇ ਬਦਲਾਅ ਦੁਸਰੇ ਵਰਤੋਂ ਕਰਣ ਵਾਲਿਆਂ ਲਈ ਵਰਤੇ ਜਾਣ ਵਾਲੇ ਇੰਟਰਫਲੇਸ ਦੀ ਸ਼ਕਲ ਤੇ ਅਸਰ ਪਾ ਦੇਣਗੇ।ਅਨੁਵਾਦ ਕਰਣ ਲਈ ,ਕਿਰਪਾ ਕਰਕੇ [//translatewiki.net/wiki/Main_Page?setlang=pa ਟ੍ਰਾਂਸਲੇਟਵਿਕੀ.ਨੈਟ] ਦੀ ਵਰਤੌਂ ਕਰੋ,ਇਹ ਮੀਡੀਆਵਿਕੀ ਦੀ ਸਥਾਨਕੀਕਰਣ ਯੋਜਨਾ ਹੈ।",
-'namespaceprotected' => "ਤà©\81ਹਾਨà©\82à©° '''$1''' à¨¥à¨¾à¨\82-ਨਾਮ à¨µà¨¾à¨²à¨¼à©\87 à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 à¨µà¨¿à¨\9a à¨¸à©\8bਧ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
+'namespaceprotected' => "ਤà©\81ਹਾਨà©\82à©° '''$1''' à¨¥à¨¾à¨\82-ਨਾਮ à¨µà¨¾à¨²à¨¼à©\87 à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 à¨µà¨¿à¨\9a à¨«à©\87ਰ-ਬਦਲ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।",
 'customcssprotected' => 'ਤੁਹਾਨੂੰ ਇਸ CSS ਸਫ਼ੇ ਵਿਚ ਸੋਧ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ ਕਿਉਂਕਿ ਇਸ ਵਿਚ ਕਿਸੇ ਹੋਰ ਮੈਂਬਰ ਦੀਆਂ ਨਿੱਜੀ ਸੈਟਿੰਗਾਂ ਹਨ।',
 'customjsprotected' => 'ਤੁਹਾਨੂੰ ਇਸ CSS ਸਫ਼ੇ ਵਿਚ ਸੋਧ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ ਕਿਉਂਕਿ ਇਸ ਵਿਚ ਕਿਸੇ ਹੋਰ ਮੈਂਬਰ ਦੀਆਂ ਨਿੱਜੀ ਸੈਟਿੰਗਾਂ ਹਨ।',
-'ns-specialprotected' => 'à¨\96਼ਾਸ à¨¸à¨«à¨¼à©\87 à¨¸à©\8bਧà©\87 à¨¨à¨¹à©\80à¨\82 à¨\9cਾ ਸਕਦੇ।',
+'ns-specialprotected' => 'à¨\96਼ਾਸ à¨¸à¨«à¨¼à¨¿à¨\86à¨\82 â\80\99à¨\9a à¨«à©\87ਰ-ਬਦਲ à¨¨à¨¹à©\80à¨\82 à¨¹à©\8b ਸਕਦੇ।',
 'titleprotected' => 'ਇਹ ਸਿਰਲੇਖ [[User:$1|$1]] ਵੱਲੋਂ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ ਹੈ ਅਤੇ ਵਰਤਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ। ਦਿੱਤਾ ਹੋਇਆ ਕਾਰਨ ਹੈ, "\'\'$2\'\'"।',
 'invalidtitle-knownnamespace' => 'ਥਾਂ-ਨਾਮ "$2" ਅਤੇ ਲਿਖਤ "$3" ਵਾਲ਼ਾ ਗ਼ਲਤ ਸਿਰਲੇਖ',
 'exception-nologin' => 'ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ',
-'exception-nologin-text' => 'ਇਹ ਸਫ਼ਾ ਜਾਂ ਕਾਰਵਾਈ ਤੁਹਾਡਾ ਇਸ ਵਿਕੀ ਤੇ ਲਾਗਇਨ ਹੋਣਾ ਲੋੜਦੀ ਹੈ।',
+'exception-nologin-text' => 'ਇਹ ਸਫ਼ਾ ਜਾਂ ਕਾਰਵਾਈ ਤੁਹਾਡਾ ਇਸ ਵਿਕੀ ’ਤੇ ਲਾਗਇਨ ਕੀਤਾ ਹੋਣਾ ਲੋੜਦੀ ਹੈ।',
 
 # Virus scanner
 'virus-unknownscanner' => 'ਅਣਪਛਾਤਾ ਐਂਟੀਵਾਇਰਸ:',
@@ -488,20 +488,20 @@ Note that some pages may continue to be displayed as if you were still logged in
 'nologin' => 'ਖਾਤਾ ਨਹੀਂ ਹੈ? $1।',
 'nologinlink' => 'ਖਾਤਾ ਬਣਾਓ',
 'createaccount' => 'ਖਾਤਾ ਬਣਾਓ',
-'gotaccount' => 'à¨\96ਾਤਾ à¨¹à©\88? $1।',
+'gotaccount' => 'à¨\96ਾਤਾ à¨ªà¨¹à¨¿à¨²à¨¾à¨\82 à¨¹à©\80 à¨¹à©\88? $1',
 'gotaccountlink' => 'ਲਾਗ ਇਨ',
 'userlogin-resetlink' => 'ਆਪਣੀ ਲਾਗਇਨ ਜਾਣਕਾਰੀ ਭੁੱਲ ਗਏ ਹੋ?',
-'createaccountmail' => 'ਈਮੇਲ ਨਾਲ',
+'createaccountmail' => 'ਈ-ਮੇਲ ਜ਼ਰੀਏ',
 'createaccountreason' => 'ਕਾਰਨ:',
 'badretype' => 'ਤੁਹਾਡੇ ਵਲੋਂ ਦਿੱਤੇ ਪਾਸਵਰਡ ਮਿਲਦੇ ਨਹੀਂ ਹਨ।',
 'userexists' => 'ਇਹ ਮੈਂਬਰ-ਨਾਮ ਪਹਿਲਾਂ ਹੀ ਵਰਤੋਂ ’ਚ ਹੈ।
 ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਵੱਖਰਾ ਮੈਂਬਰ-ਨਾਮ ਵਰਤੋਂ।',
-'loginerror' => 'ਲਾਗਇਨ ਗਲਤੀ',
-'createaccounterror' => 'à¨\85à¨\95ਾà¨\8aà¨\82à¨\9f ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ: $1',
+'loginerror' => 'ਲਾà¨\97à¨\87ਨ à¨\97਼ਲਤà©\80',
+'createaccounterror' => 'à¨\96ਾਤਾ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਿਆ: $1',
 'nocookiesnew' => 'ਯੂਜ਼ਰ ਅਕਾਊਂਟ ਬਣਾਇਆ ਗਿਆ ਹੈ, ਪਰ ਤੁਸੀਂ ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ ਹੈ।{{SITENAME}} uses cookies to log in users. You have cookies disabled. Please enable them, then log in with your new username and password.',
 'nocookieslogin' => '{{SITENAME}} ਯੂਜ਼ਰਾਂ ਨੂੰ ਲਾਗਇਨ ਕਰਨ ਲਈ ਕੂਕੀਜ਼ ਵਰਤਦੀ ਹੈ। ਤੁਹਾਡੇ ਕੂਕੀਜ਼ ਆਯੋਗ ਕੀਤੇ ਹੋਏ ਹਨ। ਉਨ੍ਹਾਂ ਨੂੰ ਯੋਗ ਕਰਕੇ ਮੁੜ ਟਰਾਈ ਕਰੋ।',
-'noname' => 'ਤà©\81ਸà©\80à¨\82 à¨\87ੱà¨\95 à¨µà©\88ਧ à¨¯à©\82à¨\9c਼ਰ ਨਾਂ ਨਹੀਂ ਦਿੱਤਾ ਹੈ।',
-'loginsuccesstitle' => 'ਲਾà¨\97à¨\87ਨ à¨¸à¨«à¨¼à¨² à¨°à¨¿à¨¹à¨¾',
+'noname' => 'ਤà©\81ਸà©\80à¨\82 à¨\87ੱà¨\95 à¨¸à¨¹à©\80 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ-ਨਾਂ ਨਹੀਂ ਦਿੱਤਾ ਹੈ।',
+'loginsuccesstitle' => 'ਲਾà¨\97à¨\87ਨ à¨\95ਾਮਯਾਬ',
 'loginsuccess' => "'''ਤੁਸੀਂ {{SITENAME}} ਉੱਤੇ \"\$1\" ਵਾਂਗ ਲਾਗਇਨ ਕਰ ਚੁੱਕੇ ਹੋ।'''",
 'nosuchuser' => '!"$1" ਨਾਂ ਨਾਲ ਕੋਈ ਯੂਜ਼ਰ ਨਹੀਂ ਹੈ। ਆਪਣੇ ਸ਼ਬਦ ਜੋੜ ਧਿਆਨ ਨਾਲ ਚੈਕ ਕਰੋ ਉਪਰ ਹੇਠਾਂ ਦਾ ਕੇਸ ਵਰਤਣ ਨਾਲ ਫ਼ਰਕ ਪੈਂਦਾ ਹੈ ਜਾਂ [[Special:UserLogin/signup|ਨਵਾਂ ਖਾਤਾ ਬਣਾਓ]]',
 'nosuchusershort' => '"$1" ਨਾਂ ਨਾਲ ਕੋਈ ਵੀ ਯੂਜ਼ਰ ਨਹੀਂ ਹੈ। ਆਪਣੇ ਸ਼ਬਦ ਧਿਆਨ ਨਾਲ ਚੈੱਕ ਕਰੋ।',
@@ -530,16 +530,18 @@ Note that some pages may continue to be displayed as if you were still logged in
 'throttled-mailpassword' => 'ਆਖ਼ਰੀ {{PLURAL:$1|ਇੱਕ ਘੰਟੇ|$1 ਘੰਟਿਆਂ}} ਵਿਚ ਇੱਕ ਪਾਸਵਰਡ ਯਾਦ-ਦਹਾਨੀ ਪਹਿਲਾਂ ਹੀ ਭੇਜੀ ਜਾ ਚੁੱਕੀ ਹੈ।
 ਗ਼ਲਤ ਵਰਤੋਂ ਤੋਂ ਬਚਣ ਲਈ, {{PLURAL:$1|ਇੱਕ ਘੰਟੇ|$1 ਘੰਟਿਆਂ}} ਵਿੱਚ ਸਿਰਫ਼ ਇੱਕ ਹੀ ਪਾਸਵਰਡ ਯਾਦ-ਦਹਾਨੀ ਭੇਜੀ ਜਾਂਦੀ ਹੈ।',
 'mailerror' => 'ਈਮੇਲ ਭੇਜਣ ਦੌਰਾਨ ਗਲਤੀ: $1',
-'acct_creation_throttle_hit' => 'ਅਫਸੋਸ ਹੈ, ਪਰ ਤੁਸੀਂ ਪਹਿਲਾਂ ਹੀ $1 ਅਕਾਊਂਟ ਬਣਾ ਚੁੱਕੇ ਹੋ। ਤੁਸੀਂ ਹੋਰ ਨਹੀਂ ਬਣਾ ਸਕਦੇ।',
-'emailauthenticated' => 'ਤੁਹਾਡਾ ਈਮੇਲ ਐਡਰੈੱਸ $1 ਉੱਤੇ ਪਰਮਾਣਿਤ ਕੀਤਾ ਗਿਆ ਹੈ।',
+'acct_creation_throttle_hit' => 'ਤੁਹਾਡਾ IP ਪਤਾ ਵਰਤ ਕੇ ਆਉਣ ਵਾਲ਼ਿਆਂ ਨੇ ਆਖ਼ਰੀ ਦਿਨਾਂ ਵਿਚ ਇਸ ਵਿਕੀ ’ਤੇ {{PLURAL:$1|੧ ਖਾਤਾ ਬਣਾਇਆ ਹੈ|$1 ਖਾਤੇ ਬਣਾਏ ਹਨ}} ਜੋ ਕਿ, ਹਾਲ ਦੀ ਘੜੀ, ਖਾਤੇ ਬਣਾਉਣ ਦੀ ਆਖ਼ਰੀ ਹੱਦ ਹੈ।
+ਨਤੀਜੇ ਵਜੋਂ ਇਸ IP ਪਤੇ ਨੂੰ ਵਰਤਣ ਵਾਲ਼ੇ ਫ਼ਿਲਹਾਲ ਹੋਰ ਖਾਤੇ ਨਹੀਂ ਬਣਾ ਸਕਦੇ।',
+'emailauthenticated' => 'ਤੁਹਾਡਾ ਈ-ਮੇਲ ਪਤਾ $2 ਨੂੰ $1 ’ਤੇ ਤਸਦੀਕ ਕੀਤਾ ਗਿਆ।',
 'emailnotauthenticated' => 'ਤੁਹਾਡਾ ਈਮੇਲ ਐਡਰੈੱਸ ਹਾਲੇ ਪਰਮਾਣਿਤ ਨਹੀਂ ਹੈ। ਹੇਠ ਦਿੱਤੇ ਫੀਚਰਾਂ ਲਈ ਕੋਈ ਵੀ ਈਮੇਲ ਨਹੀਂ ਭੇਜੀ ਜਾਵੇਗੀ।',
-'noemailprefs' => 'ਇਹ ਫੀਚਰ ਵਰਤਣ ਲਈ ਇੱਕ ਈਮੇਲ ਐਡਰੈੱਸ ਦਿਓ।।',
-'emailconfirmlink' => 'ਆਪਣਾ ਈ-ਮੇਲ ਐਡਰੈੱਸ ਕਨਫਰਮ ਕਰੋ।',
-'invalidemailaddress' => 'ਈਮੇਲ ਐਡਰੈੱਸ ਮਨਜ਼ੂਰ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ ਕਿਉਂਕਿ ਇਹ ਠੀਕ ਫਾਰਮੈਟ ਨਹੀਂ ਜਾਪਦਾ ਹੈ। ਇੱਕ ਠੀਕ ਫਾਰਮੈਟ ਵਿੱਚ ਦਿਓ ਜਾਂ ਇਹ ਖੇਤਰ ਖਾਲੀ ਛੱਡ ਦਿਓ।',
+'noemailprefs' => 'ਇਹਨਾਂ ਸਹੂਲਤਾਂ ਦੀ ਵਰਤੋਂ ਲਈ ਆਪਣੀਆਂ ਪਸੰਦਾਂ ਵਿਚ ਇਕ ਈ-ਮੇਲ ਪਤਾ ਦਿਓ।',
+'emailconfirmlink' => 'ਆਪਣਾ ਈ-ਮੇਲ ਪਤਾ ਤਸਦੀਕ ਕਰੋ',
+'invalidemailaddress' => 'ਈ-ਮੇਲ ਪਤਾ ਕਬੂਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ ਕਿਉਂਕਿ ਇਹ ਸਹੀ ਅੰਦਾਜ਼ ਵਿਚ ਲਿਖਿਆ ਨਹੀਂ ਜਾਪਦਾ ਹੈ।
+ਸਹੀ ਅੰਦਾਜ਼ ਵਿਚ ਦਿਓ ਜਾਂ ਇਹ ਖ਼ਾਨਾ ਖ਼ਾਲੀ ਛੱਡ ਦਿਓ।',
 'cannotchangeemail' => 'ਇਸ ਵਿਕੀ ਤੇ ਈ-ਮੇਲ ਪਤੇ ਬਦਲੇ ਨਹੀਂ ਜਾ ਸਕਦੇ।',
 'emaildisabled' => 'ਇਹ ਸਾਈਟ ਈ-ਮੇਲਾਂ ਨਹੀਂ ਭੇਜ ਸਕਦੀ।',
-'accountcreated' => 'à¨\85à¨\95ਾà¨\8aà¨\82à¨\9f ਬਣਾਇਆ',
-'accountcreatedtext' => '$1 à¨²à¨\88 à¨¯à©\82à¨\9c਼ਰ à¨\85à¨\95ਾà¨\8aà¨\82à¨\9f ਬਣਾਇਆ ਗਿਆ।',
+'accountcreated' => 'à¨\96ਾਤਾ ਬਣਾਇਆ',
+'accountcreatedtext' => '$1 à¨²à¨\88 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ à¨\96ਾਤਾ ਬਣਾਇਆ ਗਿਆ।',
 'createaccount-title' => '{{SITENAME}} ਲਈ ਅਕਾਊਂਟ ਬਣਾਉਣਾ',
 'createaccount-text' => 'ਕਿਸੇ ਨੇ "$2" ਮੈਂਬਰ-ਨਾਮ ਅਤੇ "$3" ਪਾਸਵਰਡ ਨਾਲ਼ {{SITENAME}} ($4) ਤੇ, ਤੁਹਾਡਾ ਈ-ਮੇਲ ਪਤਾ ਵਰਤਦੇ ਹੋਏ, ਖਾਤਾ ਬਣਾਇਆ ਹੈ।
 ਤੁਹਾਨੂੰ ਹੁਣੇ ਲਾਗਇਨ ਕਰਕੇ ਆਪਣਾ ਪਾਸਵਰਡ ਬਦਲਣਾ ਚਾਹੀਦਾ ਹੈ।
@@ -636,10 +638,10 @@ $2
 'anonpreviewwarning' => "''ਤੁਸੀਂ ਲਾਗਇਨ ਨਹੀਂ ਕੀਤਾ। ਤਬਦੀਲੀ ਸਾਂਭਣ ਨਾਲ਼ ਤੁਹਾਡਾ IP ਪਤਾ ਸਫ਼ੇ ਦੇ ਸੋਧ ਅਤੀਤ ਵਿਚ ਰਿਕਾਰਡ ਹੋ ਜਾਵੇਗਾ।''",
 'missingsummary' => "'''ਯਾਦ-ਦਹਾਨੀ:''' ਤੁਸੀਂ ਸੋਧ ਸਾਰ ਮੁਹੱਈਆ ਨਹੀਂ ਕਰਵਾਇਆ। ਜੇ ਤੁਸੀਂ \"{{int:savearticle}}\" ਤੇ ਦੁਬਾਰਾ ਕਲਿੱਕ ਕੀਤਾ ਤਾਂ ਤੁਹਾਡਾ ਸਫ਼ਾ ਇਸਦੇ ਬਿਨਾਂ ਹੀ ਸਾਂਭਿਆ ਜਾਵੇਗਾ।",
 'missingcommenttext' => 'ਹੇਠਾਂ ਇੱਕ ਟਿੱਪਣੀ ਦਿਓ।',
-'summary-preview' => 'ਸੰà¨\96à©\87ਪ ਝਲਕ:',
+'summary-preview' => 'ਸà©\8bਧ à¨¸à¨¾à¨° à¨¦à©\80 ਝਲਕ:',
 'subject-preview' => 'ਵਿਸ਼ਾ/ਹੈੱਡਲਾਈਨ ਝਲਕ:',
 'blockedtitle' => 'ਯੂਜ਼ਰ ਬਲਾਕ ਕੀਤਾ ਗਿਆ',
-'blockedtext' => "'''ਤà©\81ਹਾਡà©\87 à¨®à©\88à¨\82ਬਰ-ਨਾà¨\82 à¨\9cਾà¨\82 IP à¨ªà¨¤à©\87 à¨\89ੱਤੇ ਪਾਬੰਦੀ ਲੱਗ ਚੁੱਕੀ ਹੈ।'''
+'blockedtext' => "'''ਤà©\81ਹਾਡà©\87 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ à¨¨à¨¾à¨\82 à¨\9cਾà¨\82 IP à¨ªà¨¤à©\87 â\80\99ਤੇ ਪਾਬੰਦੀ ਲੱਗ ਚੁੱਕੀ ਹੈ।'''
 
 ਪਾਬੰਦੀ $1 ਨੇ ਲਾਈ ਹੈ।
 ਦਿੱਤਾ ਗਿਆ ਕਾਰਨ ਇਹ ਹੈ, ''$2''।
@@ -651,7 +653,7 @@ $2
 ਪਾਬੰਦੀ ਬਾਰੇ ਚਰਚਾ ਕਰਨ ਲਈ ਤੁਸੀਂ $1 ਜਾਂ ਕਿਸੇ ਹੋਰ
 [[{{MediaWiki:Grouppage-
 sysop}}|administrator]] ਨਾਲ਼ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ।
-ਤà©\81ਸà©\80à¨\82 'à¨\87ਸ à¨®à©\88à¨\82ਬਰ à¨¨à©\82à©° à¨\88-ਮà©\87ਲ à¨­à©\87à¨\9cà©\8b' à¨¸à¨¹à©\82ਲਤ à¨¦à©\80 à¨µà¨°à¨¤à©\8bà¨\82 à¨¨à¨¹à©\80à¨\82 à¨\95ਰ à¨¸à¨\95ਦà©\87 à¨\9cà©\87 à¨¤à©\81ਹਾਡà©\80à¨\86à¨\82 [[Special:Preferences|à¨\96ਾਤਾ à¨ªà¨¸à©°à¨¦à¨¾à¨\82]] à¨µà¨¿à¨\9a à¨\87ੱà¨\95 à¨¸à¨¹à©\80 à¨\88-ਮà©\87ਲ à¨ªà¨¤à¨¾ à¨¨à¨¹à©\80à¨\82 à¨¦à¨¿à©±à¨¤à¨¾ à¨\97ਿà¨\86 à¨\85ਤà©\87 ਜੇ ਤੁਹਾਡੇ ਇਸਨੂੰ ਵਰਤਣ ਤੇ ਪਾਬੰਦੀ ਹੈ।
+ਤà©\81ਸà©\80à¨\82 'à¨\87ਸ à¨®à©\88à¨\82ਬਰ à¨¨à©\82à©° à¨\88-ਮà©\87ਲ à¨­à©\87à¨\9cà©\8b' à¨¸à¨¹à©\82ਲਤ à¨¦à©\80 à¨µà¨°à¨¤à©\8bà¨\82 à¨¨à¨¹à©\80à¨\82 à¨\95ਰ à¨¸à¨\95ਦà©\87 à¨\9cà©\87 à¨¤à©\81ਹਾਡà©\80à¨\86à¨\82 [[Special:Preferences|à¨\96ਾਤਾ à¨ªà¨¸à©°à¨¦à¨¾à¨\82]] à¨µà¨¿à¨\9a à¨\87ੱà¨\95 à¨¸à¨¹à©\80 à¨\88-ਮà©\87ਲ à¨ªà¨¤à¨¾ à¨¨à¨¹à©\80à¨\82 à¨¦à¨¿à©±à¨¤à¨¾ à¨\97ਿà¨\86 à¨\9cਾà¨\82 ਜੇ ਤੁਹਾਡੇ ਇਸਨੂੰ ਵਰਤਣ ਤੇ ਪਾਬੰਦੀ ਹੈ।
 ਤੁਹਾਡਾ ਚਾਲੂ IP ਪਤਾ $3 ਹੈ,
 ਅਤੇ ਪਾਬੰਦੀ ਪਤਾ #$5 ਹੈ।
 ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਆਪਣੇ ਕਿਸੇ ਵੀ ਸਵਾਲ ਜਾਂ ਪੁੱਛ-ਗਿੱਛ ਵਿਚ ਇਹ ਉੱਪਰਲੀ ਤਫ਼ਸੀਲ ਜ਼ਰੂਰ ਸ਼ਾਮਲ ਕਰੋ।",
@@ -659,14 +661,15 @@ sysop}}|administrator]] ਨਾਲ਼ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ
 'whitelistedittext' => 'ਪੇਜ ਸੋਧਣ ਲਈ ਤੁਹਾਨੂੰ $1 ਕਰਨਾ ਪਵੇਗਾ।',
 'confirmedittext' => 'ਸਫ਼ਿਆਂ ਨੂੰ ਸੋਧਣ ਤੋਂ ਪਹਿਲਾਂ ਤੁਹਾਨੂੰ ਆਪਣਾ ਈ-ਮੇਲ ਪਤਾ ਤਸਦੀਕ ਕਰਨਾ ਪਵੇਗਾ।
 ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਆਪਣੀਆਂ [[Special:Preferences|ਖਾਤਾ ਪਸੰਦਾ]] ਜ਼ਰੀਏ ਸਹੀ ਈ-ਮੇਲ ਪਤਾ ਦਿਓ ਅਤੇ ਤਸਦੀਕ ਕਰੋ।',
-'nosuchsectiontitle' => 'à¨\87à©°à¨\9d à¨¦à¨¾ à¨\95à©\8bà¨\88 à¨¸à¨¼à©\88à¨\95ਸ਼ਨ à¨¨à¨¹à©\80à¨\82 à¨¹à©\88।',
+'nosuchsectiontitle' => 'ਸà©\88à¨\95ਸ਼ਨ à¨²à©±à¨­à¨¿à¨\86 à¨¨à¨¹à©\80à¨\82 à¨\9cਾ à¨¸à¨\95ਦਾ',
 'nosuchsectiontext' => 'ਤੁਸੀਂ ਨਾ-ਮੌਜੂਦ ਸੈਕਸ਼ਨ ਨੂੰ ਸੋਧਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਹੈ।
 ਸ਼ਾਇਦ ਤੁਹਾਡੇ ਸਫ਼ੇ ਨੂੰ ਵੇਖਣ ਦੇ ਦੌਰਾਨ ਇਹ ਮਿਟਾਇਆ ਜਾਂ ਇਸਦਾ ਸਿਰਲੇਖ ਬਦਲਿਆ ਜਾ ਚੁੱਕਾ ਹੈ।',
 'loginreqtitle' => 'ਲਾਗਇਨ ਚਾਹੀਦਾ ਹੈ',
 'loginreqlink' => 'ਲਾਗਇਨ',
 'loginreqpagetext' => 'ਹੋਰ ਪੇਜ ਵੇਖਣ ਲਈ ਤੁਹਾਨੂੰ $1 ਕਰਨਾ ਪਵੇਗਾ।',
 'accmailtitle' => 'ਪਾਸਵਰਡ ਭੇਜਿਆ।',
-'accmailtext' => '"$1" ਲਈ ਪਾਸਵਰਡ $2 ਨੂੰ ਭੇਜਿਆ ਗਿਆ।',
+'accmailtext' => "[[User talk:$1|$1]] ਲਈ ਰਲ਼ਵੇਂ ਤੌਰ ’ਤੇ ਬਣਿਆ ਪਾਸਵਰਡ $2 ਨੂੰ ਭੇਜਿਆ ਜਾ ਚੁੱਕਾ ਹੈ।
+ਇਸ ਨਵੇਂ ਖਾਤੇ ਲਈ ਲਾਗਇਨ ਕਰਨ ਤੋਂ ਬਾਅਦ ''[[Special:ChangePassword|ਪਾਸਵਰਡ ਬਦਲੋ]]'' ’ਤੇ ਜਾ ਕੇ ਪਾਸਵਰਡ ਬਦਲਿਆ ਜਾ ਸਕਦਾ ਹੈ।",
 'newarticle' => '(ਨਵਾਂ)',
 'newarticletext' => "ਤੁਸੀਂ ਕਿਸੇ ਐਸੇ ਸਫ਼ੇ ਦੇ ਲਿੰਕ ’ਤੇ ਹੋ ਜੋ ਹਾਲੇ ਬਣਾਇਆ ਨਹੀਂ ਗਿਆ।
 ਸਫ਼ਾ ਬਣਾਉਣ ਲਈ ਹੇਠ ਦਿੱਤੇ ਖ਼ਾਨੇ ਵਿਚ ਲਿਖਣਾ ਸ਼ੁਰੂ ਕਰੋ। (ਹੋਰ ਮਦਦ ਲਈ [[{{MediaWiki:Helppage}}|ਮਦਦ ਸਫ਼ਾ]] ਵੇਖੋ।)
@@ -700,7 +703,7 @@ sysop}}|administrator]] ਨਾਲ਼ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ
 'editing' => '$1 ਸੋਧਿਆ ਜਾ ਰਿਹਾ ਹੈ',
 'creating' => '$1 ਬਣਾ ਰਹੇ ਹੋ',
 'editingsection' => '$1 ਜ਼ੇਰੇ ਸੁਧਾਈ ਹੈ (ਸ਼ੈਕਸ਼ਨ)',
-'editingcomment' => '$1 (ਟਿੱਪਣੀ) ਸੋਧ',
+'editingcomment' => '$1 ਸੋਧ ਰਹੇ ਹੋ (ਨਵਾਂ ਸੈਕਸ਼ਨ)',
 'editconflict' => 'ਅਪਵਾਦ ਟਿੱਪਣੀ: $1',
 'yourtext' => 'ਤੁਹਾਡਾ ਟੈਕਸਟ',
 'storedversion' => 'ਸੰਭਾਲਿਆ ਵਰਜਨ',
@@ -722,8 +725,8 @@ sysop}}|administrator]] ਨਾਲ਼ ਰਾਬਤਾ ਕਰ ਸਕਦੇ ਹੋ
 'templatesusedsection' => 'ਇਹ ਸ਼ੈਕਸ਼ਨ ਵਿੱਚ ਟੈਪਲੇਟ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ:',
 'template-protected' => '(ਸੁਰੱਖਿਅਤ)',
 'template-semiprotected' => '(ਨੀਮ-ਸੁਰੱਖਿਅਤ)',
-'hiddencategories' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ {{PLURAL:$1|੧ à¨²à©\81à¨\95ਵà©\80à¨\82 à¨\95à©\88à¨\9fà©\87à¨\97ਰੀ|
-$1 à¨²à©\81à¨\95ਵà©\80à¨\86à¨\82 à¨\95à©\88à¨\9fà©\87à¨\97ਰੀਆਂ}} ਦਾ ਮੈਂਬਰ ਹੈ:',
+'hiddencategories' => 'à¨\87ਹ à¨¸à¨«à¨¼à¨¾ {{PLURAL:$1|੧ à¨²à©\81à¨\95ਵà©\80à¨\82 à¨¸à¨¼à©\8dਰà©\87ਣੀ|
+$1 à¨²à©\81à¨\95ਵà©\80à¨\86à¨\82 à¨¸à¨¼à©\8dਰà©\87ਣੀਆਂ}} ਦਾ ਮੈਂਬਰ ਹੈ:',
 'nocreatetitle' => 'ਸਫ਼ਾ ਬਣਾਉਣ ਦੀ ਹੱਦ ਹੈ',
 'nocreatetext' => '{{SITENAME}} ਨੇ ਨਵੇਂ ਸਫ਼ੇ ਬਣਾਉਣ ਤੇ ਰੋਕ ਲਾਈ ਹੋਈ ਹੈ।
 ਤੁਸੀਂ ਵਾਪਸ ਜਾ ਕੇ ਮੌਜੂਦਾ ਸਫ਼ੇ ਸੋਧ ਸਕਦੇ ਹੋ ਜਾਂ [[Special:UserLogin|ਲਾਗਇਨ ਜਾਂ ਖਾਤਾ ਬਣਾ]] ਸਕਦੇ ਹੋ।',
@@ -793,7 +796,7 @@ $3 ਨੇ ਕਾਰਨ ਇਹ ਦੱਸਿਆ ਹੈ, ''$2''",
 
 # Revision feed
 'history-feed-title' => 'ਰੀਵਿਜ਼ਨ ਅਤੀਤ',
-'history-feed-description' => 'ਵਿਕੀ ਤੇ ਇਸ ਸਫ਼ੇ ਦਾ ਰੀਵਿਜ਼ਨ ਅਤੀਤ',
+'history-feed-description' => 'ਵਿਕੀ ਤੇ ਇਸ ਸਫ਼ੇ ਦਾ ਰੀਵਿਜ਼ਨ ਅਤੀਤ',
 'history-feed-item-nocomment' => '$1 ਤੋਂ $2 ’ਤੇ',
 'history-feed-empty' => 'ਦਰਖ਼ਾਸਤਸ਼ੁਦਾ ਸਫ਼ਾ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।
 ਸ਼ਾਇਦ ਇਸਨੂੰ ਵਿਕੀ ਤੋਂ ਮਿਟਾ ਦਿੱਤਾ ਗਿਆ ਹੈ ਜਾਂ ਨਾਮ ਬਦਲ ਦਿੱਤਾ ਗਿਆ ਹੈ।
@@ -863,7 +866,9 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'mergehistory-from' => 'ਸਰੋਤ ਸਫ਼ਾ:',
 'mergehistory-list' => 'ਰਲ਼ਾਉਣਯੋਗ ਸੋਧ ਅਤੀਤ',
 'mergehistory-go' => 'ਰਲ਼ਾਉਣਯੋਗ ਸੋਧਾਂ ਵਖਾਓ',
+'mergehistory-submit' => 'ਰੀਵਿਜ਼ਨਾਂ ਰਲ਼ਾਓ',
 'mergehistory-empty' => 'ਕੋਈ ਰੀਵਿਜ਼ਨ ਰਲ਼ਾਈ ਨਹੀ ਜਾ ਸਕਦੀ।',
+'mergehistory-success' => '[[:$1]] {{PLURAL:|ਦੀ|ਦੀਆਂ}} $3 {{PLURAL:$3|ਰੀਵਿਜ਼ਨ|ਰੀਵਿਜ਼ਨਾਂ}} ਕਾਮਯਾਬੀ ਨਾਲ਼ [[:$2]] ਵਿਚ {{PLURAL:$3|ਰਲ਼ਾਈ|ਰਲ਼ਾਈਆਂ}}।',
 'mergehistory-no-source' => 'ਸਰੋਤ ਸਫ਼ਾ $1 ਮੌਜੂਦ ਨਹੀਂ ਹੈ।',
 'mergehistory-autocomment' => '[[:$1]] ਨੂੰ [[:$2]] ਵਿੱਚ ਰਲ਼ਾਇਆ',
 'mergehistory-comment' => '[[:$1]] ਨੂੰ [[:$2]] ਵਿੱਚ ਰਲ਼ਾਇਆ: $3',
@@ -877,7 +882,7 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'mergelogpagetext' => 'ਹੇਠਾਂ ਇੱਕ ਸਫ਼ੇ ਦੇ ਅਤੀਤ ਨੂੰ ਦੂਜੇ ਦੇ ਅਤੀਤ ਵਿਚ ਰਲ਼ਾਉਣ ਦੀ ਸਭ ਤੋਂ ਤਾਜ਼ਾ ਲਿਸਟ ਹੈ।',
 
 # Diffs
-'history-title' => '"$1" ਦੇ ਅਤੀਤ ਰੀਵਿਜ਼ਨ',
+'history-title' => '"$1" ਦੇ  ਸੁਧਾਰਾਂ ਦਾ ਅਤੀਤ',
 'difference-title' => '"$1" ਦੇ ਰੀਵਿਜ਼ਨਾਂ ਵਿਚ ਫ਼ਰਕ',
 'difference-title-multipage' => 'ਸਫ਼ਿਆਂ "$1" ਅਤੇ "$2" ਵਿਚ ਫ਼ਰਕ',
 'difference-multipage' => '(ਦੋ ਸਫ਼ਿਆਂ ਵਿਚਕਾਰ ਫ਼ਰਕ)',
@@ -919,7 +924,8 @@ page={{FULLPAGENAMEE}}}} ਜ਼ਬਤੀ ਦੇ ਚਿੱਠੇ] ਵਿਚ ਵ
 'searchprofile-everything-tooltip' => 'ਸਭ ਚੀਜ਼ਾਂ ਖੋਜੋ (ਗੱਲਬਾਤ ਸਫ਼ਿਆਂ ਸਮੇਤ)',
 'searchprofile-advanced-tooltip' => 'ਆਪਣੇ ਬਣਾਏ ਨਾਮ-ਥਾਂਵਾਂ ਵਿਚ ਖੋਜੋ',
 'search-result-size' => '$1 ({{PLURAL:$2|੧ ਸ਼ਬਦ|$2 ਸ਼ਬਦ}})',
-'search-result-category-size' => '{{PLURAL:$1|੧ ਮੈਂਬਰ|$1 ਮੈਂਬਰ}} ({{PLURAL:$2|੧ ਸਬ-ਕੈਟੇਗਰੀ|$2 ਸਬ-ਕੈਟੇਗਰੀਆਂ}}, {{PLURAL:$3|੧ ਫ਼ਾਈਲ|$3 ਫ਼ਾਈਲਾਂ}})',
+'search-result-category-size' => '{{PLURAL:$1|੧ ਮੈਂਬਰ|$1 ਮੈਂਬਰ}} ({{PLURAL:$2|੧ ਉਪ-ਸ਼੍ਰੇਣੀ|$2 ਉਪ-ਸ਼੍ਰੇਣੀਆਂ}}, {{PLURAL:$3|੧ ਫ਼ਾਈਲ|$3 ਫ਼ਾਈਲਾਂ}})',
+'search-result-score' => 'ਸਹੀ: $1%',
 'search-redirect' => '($1 ਰੀ-ਡਿਰੈਕਟ)',
 'search-section' => '(ਭਾਗ $1)',
 'search-suggest' => 'ਕੀ ਤੁਹਾਡਾ ਮਤਲਬ ਸੀ: $1',
@@ -958,7 +964,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'mypreferences' => 'ਮੇਰੀਆਂ ਪਸੰਦਾਂ',
 'prefs-edits' => 'ਸੋਧਾਂ ਦੀ ਗਿਣਤੀ:',
 'prefsnologin' => 'ਲਾਗਇਨ ਨਹੀਂ',
-'prefsnologintext' => 'ਯà©\82à¨\9c਼ਰ à¨ªà¨¸à©°à¨¦ à¨¸à©\88ੱà¨\9f à¨\95ਰਨ à¨²à¨\88 à¨¤à©\81ਹਾਨà©\82à©° [[Special:UserLogin|logged in]] ਕਰਨਾ ਪਵੇਗਾ।',
+'prefsnologintext' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ à¨ªà¨¸à©°à¨¦à¨¾à¨\82 à¨¸à©\88ੱà¨\9f à¨\95ਰਨ à¨²à¨\88 à¨¤à©\81ਹਾਨà©\82à©° <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} à¨²à¨¾à¨\97à¨\87ਨ]</span> ਕਰਨਾ ਪਵੇਗਾ।',
 'changepassword' => 'ਪਾਸਵਰਡ ਬਦਲੋ',
 'prefs-skin' => 'ਸਕਿਨ',
 'skin-preview' => 'ਝਲਕ',
@@ -994,7 +1000,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'timezonelegend' => 'ਸਮਾਂ ਖੇਤਰ:',
 'localtime' => 'ਲੋਕਲ ਸਮਾਂ:',
 'timezoneuseserverdefault' => 'ਸਰਵਰ ਡਿਫਾਲਟ ਵਰਤੋਂ',
-'servertime' => 'ਸਰਵਰ à¨\9fਾà¨\88ਮ',
+'servertime' => 'ਸਰਵਰ à¨¦à¨¾ à¨\9fਾà¨\88ਮ:',
 'guesstimezone' => 'ਬਰਾਊਜ਼ਰ ਤੋਂ ਭਰੋ',
 'timezoneregion-africa' => 'ਅਫ਼ਰੀਕਾ',
 'timezoneregion-america' => 'ਅਮਰੀਕਾ',
@@ -1007,7 +1013,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'timezoneregion-indian' => 'ਹਿੰਦ ਮਹਾਂਸਾਗਰ',
 'timezoneregion-pacific' => 'ਪ੍ਰਸ਼ਾਂਤ ਮਹਾਂਸਾਗਰ',
 'allowemail' => 'ਹੋਰ ਯੂਜ਼ਰਾਂ ਤੋਂ ਈਮੇਲ ਯੋਗ ਕਰੋ',
-'prefs-searchoptions' => 'ਖੋਜ ਇਖ਼ਤਿਆਰ',
+'prefs-searchoptions' => 'à¨\96à©\8bà¨\9c à¨¦à©\87 à¨\87à¨\96਼ਤਿà¨\86ਰ',
 'prefs-namespaces' => 'ਥਾਂ-ਨਾਮ',
 'defaultns' => 'ਨਹੀਂ ਤਾਂ ਇਹਨਾਂ ਥਾਂ-ਨਾਂਵਾਂ ਵਿਚ ਖੋਜੋ:',
 'default' => 'ਡਿਫਾਲਟ',
@@ -1017,11 +1023,13 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'youremail' => 'ਈ-ਮੇਲ:',
 'username' => 'ਯੂਜ਼ਰ ਨਾਂ:',
 'uid' => 'ਯੂਜ਼ਰ ID:',
+'prefs-memberingroups' => '{{PLURAL:$1|ਗਰੁੱਪ|ਗਰੁੱਪਾਂ}} ਦਾ ਮੈਂਬਰ:',
+'prefs-registration' => 'ਰਜਿਸਟ੍ਰੇਸ਼ਨ ਦਾ ਵਕਤ:',
 'yourrealname' => 'ਅਸਲੀ ਨਾਮ:',
 'yourlanguage' => 'ਭਾਸ਼ਾ:',
 'yournick' => 'ਛੋਟਾ ਨਾਂ:',
 'prefs-help-signature' => 'ਗੱਲ-ਬਾਤ ਸਫ਼ਿਆਂ ਉੱਤੇ ਟਿੱਪਣੀਆਂ ਦੇ ਆਖ਼ਰ ਵਿਚ "<nowiki>~~~~</nowiki>" ਲਾਓ ਜੋ ਤੁਹਾਡੇ ਦਸਤਖ਼ਤ ਅਤੇ ਵਕਤ ਦੀ ਮੋਹਰ ਵਿਚ ਤਬਦੀਲ ਹੋ ਜਾਵੇਗਾ।',
-'badsiglength' => 'à¨\9bà©\8bà¨\9fਾ à¨¨à¨¾à¨\82 (Nickname) à¨¬à¨¹à©\81ਤ à¨²à©°à¨®à¨¾ à¨¹à©\8b à¨\97ਿà¨\86 à¨¹à©\88, à¨\87ਹ $1 à¨\85ੱà¨\96ਰਾà¨\82 à¨¤à©\8bà¨\82 à¨\98ੱà¨\9f à¨\9aਾਹà©\80ਦਾ à¨¹à©\88।',
+'badsiglength' => 'ਦਸਤà¨\96਼ਤ à¨¬à¨¹à©\81ਤ à¨²à©°à¨¬à¨¾ à¨¹à©\8b à¨\97ਿà¨\86 à¨¹à©\88। à¨\87ਹ {{PLURAL:$1|à¨\85ੱà¨\96ਰ|à¨\85ੱà¨\96ਰਾà¨\82}} à¨¤à©\8bà¨\82 à¨²à©°à¨¬à¨¾ à¨¨à¨¹à©\80à¨\82 à¨¹à©\8bਣਾ à¨\9aਾਹà©\80ਦਾ।',
 'yourgender' => 'ਲਿੰਗ:',
 'gender-unknown' => 'ਜ਼ਾਹਿਰ ਨਹੀਂ ਕੀਤਾ',
 'gender-male' => 'ਮਰਦ',
@@ -1062,26 +1070,30 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 
 # Groups
 'group' => 'ਗਰੁੱਪ:',
-'group-user' => 'ਮà©\88à¨\82ਬਰ',
+'group-user' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ',
 'group-autoconfirmed' => 'ਖ਼ੁਦ-ਤਸਦੀਕਸ਼ੁਦਾ ਮੈਂਬਰ',
 'group-bot' => 'ਬੋਟ',
 'group-all' => '(ਸਭ)',
 
-'group-user-member' => 'ਮੈਂਬਰ',
+'group-user-member' => '{{GENDER:$1|ਵਰਤੋਂਕਾਰ}}',
+'group-bot-member' => 'ਬੋਟ',
 
 # Rights
 'right-read' => 'ਸਫ਼ੇ ਪੜ੍ਹਨਾ',
 'right-edit' => 'ਸਫ਼ੇ ਸੋਧ',
 'right-createpage' => 'ਸਫ਼ੇ ਬਣਾਉਣਾ (ਜੋ ਚਰਚਾ ਸਫ਼ੇ ਨਾ ਹੋਣ)',
 'right-createtalk' => 'ਚਰਚਾ ਸਫ਼ੇ ਬਣਾਉਣਾ',
+'right-createaccount' => 'ਨਵੇਂ ਖਾਤੇ ਬਣਾਉਣਾ',
 'right-minoredit' => 'ਸੋਧਾਂ ਦੇ ਛੋਟਾ ਹੋਣ ਲਈ ਨਿਸ਼ਾਨ ਲਾਉਣਾ',
 'right-move' => 'ਸਫ਼ੇ ਭੇਜਣਾ',
+'right-movefile' => 'ਫ਼ਾਈਲਾਂ ਦੇ ਨਾਂ ਬਦਲਣਾ',
 'right-upload' => 'ਫ਼ਾਈਲਾਂ ਅੱਪਲੋਡ ਕਰਨਾ',
 'right-autoconfirmed' => 'ਨੀਮ-ਸੁਰੱਖਿਅਤ ਸਫ਼ਿਆਂ ਨੂੰ ਸੋਧਣਾ',
 'right-delete' => 'ਸਫ਼ੇ ਹਟਾਓ',
 'right-bigdelete' => 'ਵੱਡੇ ਅਤੀਤਾਂ ਵਾਲ਼ੇ ਸਫ਼ੇ ਮਿਟਾਉਣੇ',
 'right-browsearchive' => 'ਮਿਟਾਏ ਗਏ ਸਫ਼ੇ ਖੋਜਣਾ',
 'right-undelete' => 'ਸਫ਼ੇ ਨੂੰ ਅਣ-ਮਿਟਾਇਆ ਕਰਨਾ',
+'right-suppressionlog' => 'ਪ੍ਰਾਈਵੇਟ ਚਿੱਠੇ ਵੇਖਣਾ',
 'right-block' => 'ਦੂਜੇ ਮੈਂਬਰਾਂ ਦੇ ਸੋਧ ਕਰਨ ਤੇ ਪਾਬੰਦੀ ਲਾਉਣੀ',
 'right-blockemail' => 'ਮੈਂਬਰ ਦੇ ਈ-ਮੇਲ ਭੇਜਣ ਤੇ ਪਾਬੰਦੀ ਲਾਉਣੀ',
 'right-hideuser' => 'ਮੈਂਬਰ-ਨਾਂ ਤੇ ਪਾਬੰਦੀ ਲਾਉਣੀ ਅਤੇ ਇਸਨੂੰ ਲੋਕਾਂ ਤੋਂ ਲੁਕਾਉਣਾ',
@@ -1123,13 +1135,13 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 'nchanges' => '$1 {{PLURAL:$1|ਤਬਦੀਲੀ|
 ਤਬਦੀਲੀਆਂ}}',
 'recentchanges' => 'ਤਾਜ਼ਾ ਤਬਦੀਲੀਆਂ',
-'recentchanges-legend' => 'ਤਾà¨\9c਼ਾ à¨¬à¨¦à¨²à¨¾à¨\85 à¨\9aà©\8bਣਾà¨\82',
-'recentchanges-summary' => 'ਇਸ ਵਿਕੀ ਪਰ ਹਾਲ ਵਿਚ ਹੋਏ ਬਦਲਾਅਦੇਖੇ ਜਾ ਸਕਦੇ ਹਨ।',
+'recentchanges-legend' => 'ਤਾà¨\9c਼ਾ à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82 à¨¦à©\87 à¨\87à¨\96਼ਤਿà¨\86ਰ',
+'recentchanges-summary' => 'ਇਸ ਵਿਕੀ ’ਤੇ ਹੋਈਆਂ ਸਭ ਤੋਂ ਨਵੀਆਂ ਤਬਦੀਲੀਆਂ ਇਸ ਸਫ਼ੇ ’ਤੇ ਵੇਖੋ।',
 'recentchanges-feed-description' => 'ਇਸ ਵਿਕੀ ’ਤੇ ਹਾਲ ਹੀ ਵਿਚ ਹੋਈਆਂ ਤਬਦੀਲੀਆਂ ਇਸ ਫ਼ੀਡ ’ਚ ਵੇਖੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ।',
 'recentchanges-label-newpage' => 'ਇਹ ਸੋਧ ਨੇ ਨਵਾਂ ਸਫ਼ਾ ਬਣਾਇਆ ਹੈ',
 'recentchanges-label-minor' => 'ਇਹ ਛੋਟੀ ਸੋਧ ਹੈ',
 'recentchanges-label-bot' => 'ਇਹ ਸੋਧ ਬੋਟ ਵਲੋਂ ਕੀਤੀ ਗਈ ਹੈ',
-'recentchanges-label-unpatrolled' => 'à¨\87ਸ à¨¸à©°à¨ªà¨¾à¨¦à¨¨ à¨¦à©\80 à¨\85à¨\9cà©\87 à¨¨à¨¿à¨\97ਰਾਨà©\80 à¨¨à¨¹à©\80à¨\82 à¨¹à©\8bà¨\88',
+'recentchanges-label-unpatrolled' => 'à¨\87ਹ à¨«à©\87ਰ-ਬਦਲ à¨¹à¨¾à¨²à©\87 à¨µà©\87à¨\96ਿà¨\86 à¨¨à¨¹à©\80à¨\82 à¨\97ਿà¨\86',
 'rcnote' => "$4, $5 ਤੱਕ ਆਖ਼ਰੀ {{PLURAL:$2|ਦਿਨ|'''$2''' ਦਿਨਾਂ}} ਵਿਚ {{PLURAL:$1|'''1''' ਤਬਦੀਲੀ ਹੋਈ ਹੈ।|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆਂ ਹਨ।}}",
 'rcnotefrom' => "'''$2''' ਤੱਕ ('''$1''' ਤੱਕ ਦਿੱਸਦੀਆਂ) ਤਬਦੀਲੀਆਂ ਹੇਠ ਦਿੱਤੀਆਂ ਹਨ।",
 'rclistfrom' => '$1 ਤੋਂ ਸ਼ੁਰੂ ਕਰਕੇ ਨਵੀਆਂ ਤਬਦੀਲੀਆਂ ਦਿਖਾਓ',
@@ -1153,7 +1165,7 @@ $3|'''1''' ਨਤੀਜਾ|'''$3''' ਨਤੀਜੇ}} ਵਖਾਓ।",
 
 # Recent changes linked
 'recentchangeslinked' => 'ਸਬੰਧਿਤ ਤਬਦੀਲੀਆਂ',
-'recentchangeslinked-feed' => 'ਸਬੰਧਿਤ à¨¬à¨¦à¨²à¨¾à¨\85',
+'recentchangeslinked-feed' => 'ਸਬੰਧਤ à¨¤à¨¬à¨¦à©\80ਲà©\80à¨\86à¨\82',
 'recentchangeslinked-toolbox' => 'ਸਬੰਧਿਤ ਤਬਦੀਲੀਆਂ',
 'recentchangeslinked-title' => '"$1" ਨਾਲ਼ ਸਬੰਧਿਤ ਤਬਦੀਲੀਆਂ',
 'recentchangeslinked-noresult' => 'ਜੁੜੇ ਸਫਿਆਂ ’ਤੇ, ਦਿੱਤੇ ਸਮੇਂ ’ਚ ਕੋਈ ਤਬਦੀਲੀ ਨਹੀਂ ਹੋਈ।',
@@ -1187,9 +1199,9 @@ to upload files.',
 'filename-tooshort' => 'ਫ਼ਾਈਲ ਬਹੁਤ ਛੋਟੀ ਹੈ।',
 'filetype-banned' => 'ਇਸ ਕਿਸਮ ਦੀ ਫ਼ਾਈਲ ਦੀ ਮਨਾਹੀ ਹੈ।',
 'illegal-filename' => 'ਇਸ ਫ਼ਾਈਲ-ਨਾਮ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।',
-'fileexists' => 'à¨\87ਹ à¨«à¨¾à¨\87ਲ à¨¨à¨¾à¨\82 à¨ªà¨¹à¨¿à¨²à¨¾à¨\82 à¨¹à©\80 à¨®à©\8cà¨\9cà©\82ਦ à¨¹à©\88। à¨\9cà©\87 à¨¤à©\81ਸà©\80à¨\82 à¨\87ਹ à¨¬à¨¦à¨²à¨£ à¨¬à¨¾à¨°à©\87 à¨\9cਾਣਦà©\87 ਨਹੀਂ ਹੋ ਤਾਂ  <strong>[[:$1]]</strong> ਵੇਖੋ ਜੀ। [[$1|thumb]]',
+'fileexists' => 'à¨\87ਹ à¨«à¨¾à¨\87ਲ à¨¨à¨¾à¨\82 à¨ªà¨¹à¨¿à¨²à¨¾à¨\82 à¨¹à©\80 à¨®à©\8cà¨\9cà©\82ਦ à¨¹à©\88। à¨\9cà©\87 à¨¤à©\81ਸà©\80à¨\82 à¨\87ਹ à¨¬à¨¦à¨²à¨£ à¨¬à¨¾à¨°à©\87 à¨¦à©\8dਰਿà©\9c ਨਹੀਂ ਹੋ ਤਾਂ  <strong>[[:$1]]</strong> ਵੇਖੋ ਜੀ। [[$1|thumb]]',
 'fileexists-extension' => 'ਇਸ ਨਾਂ ਨਾਲ ਰਲਦੀ ਫਾਇਲ ਮੌਜੂਦ ਹੈ: [[$2|thumb]]
-* ਅੱਪਲੋਡ ਕੀਤੀ ਫਾਇਲ ਦਾ ਨਾਂ: <strong>[[:$1]]</strong>
+* à¨\85ੱਪਲà©\8bਡ à¨\95à©\80ਤà©\80 à¨\9cਾà¨\82ਦà©\80 à¨«à¨¾à¨\87ਲ à¨¦à¨¾ à¨¨à¨¾à¨\82: <strong>[[:$1]]</strong>
 * ਮੌਜੂਦ ਫਾਇਲ ਦਾ ਨਾਂ: <strong>[[:$2]]</strong>
 ਇੱਕ ਵੱਖਰਾ ਨਾਂ ਚੁਣੋ ਜੀ',
 'file-exists-duplicate' => 'ਇਹ ਫ਼ਾਈਲ {{PLURAL:$1|ਇਸ ਫ਼ਾਈਲ|ਇਹਨਾਂ ਫ਼ਾਈਲਾਂ}} ਦੀ ਨਕਲ ਹੈ:',
@@ -1202,7 +1214,7 @@ to upload files.',
 'sourcefilename' => 'ਸੋਰਸ ਫਾਇਲ ਨਾਂ:',
 'upload-maxfilesize' => 'ਫ਼ਾਈਲ ਦਾ ਵੱਧ ਤੋਂ ਵੱਧ ਅਕਾਰ: $1',
 'upload-description' => 'ਫ਼ਾਈਲ ਦਾ ਵੇਰਵਾ',
-'watchthisupload' => 'à¨\87ਸ à¨«à¨¾à¨\87ਲ à¨¨à©\82à©° à¨µà¨¾à¨\9a à¨\95ਰੋ',
+'watchthisupload' => 'à¨\87ਸ à¨«à¨¼à¨¾à¨\88ਲ â\80\99ਤà©\87 à¨¨à¨\9c਼ਰ à¨°à©±à¨\96ੋ',
 'upload-success-subj' => 'ਠੀਕ ਤਰ੍ਹਾਂ ਅੱਪਲੋਡ',
 'upload-warning-subj' => 'ਅੱਪਲੋਡ ਚੇਤਾਵਨੀ',
 
@@ -1341,7 +1353,7 @@ to upload files.',
 'statistics-users-active-desc' => 'ਮੈਂਬਰ, ਜਿੰਨ੍ਹਾ ਨੇ ਆਖ਼ਰੀ {{PLURAL:$1|ਦਿਨ|$1 ਦਿਨਾਂ}} ਵਿਚ ਕੋਈ ਕੰਮ ਕੀਤਾ ਹੈ।',
 'statistics-mostpopular' => 'ਸਭ ਤੋਂ ਵੱਧ ਵੇਖੇ ਪੇਜ',
 
-'disambiguationspage' => 'Template:disambig',
+'disambiguationspage' => 'Template:ਗੁੰਝਲ ਖੋਲ੍ਹ',
 
 'doubleredirects' => 'ਦੋਹਰੇ ਰੀਡਿਰੈਕਟ',
 
@@ -1384,7 +1396,7 @@ to upload files.',
 'listusers' => 'ਯੂਜ਼ਰ ਲਿਸਟ',
 'usercreated' => '$1 ਨੂੰ $2 ’ਤੇ {{GENDER:$3|ਬਣਾਇਆ}}',
 'newpages' => 'ਨਵੇਂ ਸਫ਼ੇ',
-'newpages-username' => 'ਯà©\82à¨\9c਼ਰ ਨਾਂ:',
+'newpages-username' => 'ਵਰਤà©\8bà¨\82à¨\95ਾਰ-ਨਾਂ:',
 'ancientpages' => 'ਸਭ ਤੋਂ ਪੁਰਾਣੇ ਪੇਜ',
 'move' => 'ਭੇਜੋ',
 'movethispage' => 'ਇਹ ਪੇਜ ਭੇਜੋ',
@@ -1551,7 +1563,7 @@ $1|ਤਬਦੀਲੀ ਹੋਈ|'''$1''' ਤਬਦੀਲੀਆਂ ਹੋਈਆ
 'actionfailed' => 'ਕਾਰਵਾਈ ਨਾਕਾਮ',
 'deletedtext' => '"$1" ਮਿਟਾਇਆ ਜਾ ਚੁੱਕਾ ਹੈ।
 ਤਾਜ਼ੀਆਂ ਮਿਟਾਉਣਾਂ ਦੇ ਰਿਕਾਰਡ ਲਈ $2 ਵੇਖੋ।',
-'dellogpage' => 'ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ',
+'dellogpage' => 'ਮਿਟਾਉਣ ਦਾ ਚਿੱਠਾ',
 'dellogpagetext' => 'ਹੇਠਾਂ ਸਭ ਤੋਂ ਤਾਜ਼ਾ ਮਿਟਾਉਣਾਂ ਦੀ ਲਿਸਟ ਹੈ।',
 'deletionlog' => 'ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ',
 'deletecomment' => 'ਕਾਰਨ:',
@@ -1643,7 +1655,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 
 # Contributions
 'contributions' => 'ਮੈਂਬਰ ਯੋਗਦਾਨ',
-'contributions-title' => '$1 à¨²à¨\88 à¨®à©\88à¨\82ਬਰ ਯੋਗਦਾਨ',
+'contributions-title' => '$1 à¨¦à©\87 ਯੋਗਦਾਨ',
 'mycontris' => 'ਮੇਰਾ ਯੋਗਦਾਨ',
 'contribsub2' => '$1 ($2) ਲਈ',
 'uctop' => '(ਟੀਸੀ)',
@@ -1661,7 +1673,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'sp-contributions-blocked-notice-anon' => 'ਇਹ IP ਪਤਾ ਇਸ ਵੇਲ਼ੇ ਪਾਬੰਦੀਸ਼ੁਦਾ ਹੈ।
 ਪਾਬੰਦੀ ਚਿੱਠੇ ਦਾ ਤਾਜ਼ਾ ਦਾਖ਼ਲਾ ਹਵਾਲੇ ਲਈ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਹੈ:',
 'sp-contributions-search' => 'ਯੋਗਦਾਨ ਖੋਜੋ',
-'sp-contributions-username' => 'IP à¨ªà¨¤à¨¾ à¨\9cਾà¨\82 à¨¯à©\82à¨\9c਼ਰ ਨਾਮ:',
+'sp-contributions-username' => 'IP à¨ªà¨¤à¨¾ à¨\9cਾà¨\82 à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਨਾਮ:',
 'sp-contributions-toponly' => 'ਸਿਰਫ਼ ਉਹੀ ਸੋਧਾਂ ਵਖਾਓ ਜੋ ਸਭ ਤੋਂ ਨਵੀਂਆਂ ਹਨ',
 'sp-contributions-submit' => 'ਖੋਜੋ',
 
@@ -1760,7 +1772,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'move-page-legend' => 'ਪੇਜ ਮੂਵ ਕਰੋ',
 'movearticle' => 'ਸਫ਼ਾ ਭੇਜੋ:',
 'movenologin' => 'ਲਾਗਇਨ ਨਹੀਂ ਹੋ',
-'movenologintext' => 'à¨\87ੱà¨\95 à¨ªà©\87à¨\9c à¨®à©\82ਵ à¨\95ਰਨ à¨²à¨\88 à¨¤à©\81ਸà©\80à¨\82 à¨°à¨\9cਿਸà¨\9fਰਡ à¨®à©\88à¨\82ਬਰ à¨¹à©\8bਣà©\87 à¨\9aਾਹà©\80ਦà©\87 à¨¹à©\8b à¨\85ਤà©\87 [[Special:UserLogin|ਲਾà¨\97ਡ ਇਨ]] ਕੀਤਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।',
+'movenologintext' => 'à¨\87à¨\95 à¨¸à¨«à¨¼à©\87 à¨¦à¨¾ à¨¸à¨¿à¨°à¨²à©\87à¨\96 à¨¬à¨¦à¨²à¨£ à¨²à¨\88 à¨¤à©\81ਸà©\80à¨\82 à¨°à¨\9cਿਸà¨\9fਰਡ à¨®à©\88à¨\82ਬਰ à¨¹à©\8bਣà©\87 à¨\9aਾਹà©\80ਦà©\87 à¨¹à©\8b à¨\85ਤà©\87 [[Special:UserLogin|ਲਾà¨\97ਇਨ]] ਕੀਤਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।',
 'newtitle' => 'ਨਵੇਂ ਟਾਈਟਲ ਲਈ:',
 'move-watch' => 'ਸਰੋਤ ਤੇ ਟਾਰਗੇਟ ਸਫ਼ੇ ਉੱਤੇ ਨਿਗਰਾਨੀ ਰੱਖੋ',
 'movepagebtn' => 'ਸਫ਼ਾ ਭੇਜੋ',
@@ -1818,8 +1830,8 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'import-logentry-upload-detail' => '$1 ਰੀਵਿਜ਼ਨ',
 
 # Tooltip help for the actions
-'tooltip-pt-userpage' => 'ਤà©\81ਹਾਡਾ à¨®à©\88à¨\82ਬਰ ਸਫ਼ਾ',
-'tooltip-pt-mytalk' => 'ਤੁਹਾਡਾ ਗੱਲਬਾਤ ਸਫ਼ਾ',
+'tooltip-pt-userpage' => 'ਤà©\81ਹਾਡਾ à¨µà¨°à¨¤à©\8bà¨\82à¨\95ਾਰ ਸਫ਼ਾ',
+'tooltip-pt-mytalk' => 'ਤੁਹਾਡਾ ਗੱਲ-ਬਾਤ ਸਫ਼ਾ',
 'tooltip-pt-preferences' => 'ਤੁਹਾਡੀਆਂ ਪਸੰਦਾਂ',
 'tooltip-pt-watchlist' => 'ਓਹਨਾਂ ਸਫ਼ਿਆਂ ਦੀ ਲਿਸਟ ਜੋ ਤੁਸੀਂ ਤਬਦੀਲੀਆਂ ਲਈ ਵੇਖ ਰਹੇ ਹੋ',
 'tooltip-pt-mycontris' => 'ਤੁਹਾਡੇ ਯੋਗਦਾਨਾਂ ਦੀ ਲਿਸਟ',
@@ -1894,7 +1906,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 
 # Info page
 'pageinfo-header-edits' => 'ਸੋਧਾਂ ਦਾ ਅਤੀਤ',
-'pageinfo-watchers' => 'ਸਫ਼à©\87 â\80\99ਤà©\87 à¨¨à¨\9c਼ਰ à¨°à©±à¨\96ਣ à¨µà¨¾à¨²à¨¼à©\87',
+'pageinfo-watchers' => 'ਸਫ਼à©\87 â\80\99ਤà©\87 à¨¨à¨\9c਼ਰ à¨°à©±à¨\96ਣ à¨µà¨¾à¨²à¨¿à¨\86à¨\82 à¨¦à©\80 à¨\97ਿਣਤà©\80',
 'pageinfo-edits' => 'ਕੁੱਲ ਸੋਧਾਂ',
 
 # Skin names
@@ -1918,7 +1930,7 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'show-big-image' => 'ਪੂਰਾ ਰੈਜ਼ੋਲੇਸ਼ਨ',
 
 # Special:NewFiles
-'newimages' => 'ਨਵà©\80à¨\86à¨\82 à¨«à¨¾à¨\87ਲਾਂ ਦੀ ਗੈਲਰੀ',
+'newimages' => 'ਨਵà©\80à¨\86à¨\82 à¨«à¨¼à¨¾à¨\88ਲਾਂ ਦੀ ਗੈਲਰੀ',
 'noimages' => 'ਵੇਖਣ ਲਈ ਕੁਝ ਨਹੀਂ',
 'ilsubmit' => 'ਖੋਜ',
 'bydate' => 'ਮਿਤੀ ਨਾਲ',
@@ -1987,11 +1999,11 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'confirmemail_send' => 'ਇੱਕ ਪੁਸ਼ਟੀ ਕੋਡ ਭੇਜੋ',
 'confirmemail_sent' => 'ਪੁਸ਼ਟੀ ਈਮੇਲ ਭੇਜੀ ਗਈ।',
 'confirmemail_invalid' => 'ਗਲਤ ਪੁਸ਼ਟੀ ਕੋਡ ਹੈ। ਕੋਡ ਦੀ ਮਿਆਦ ਪੁੱਗੀ ਹੋ ਸਕਦੀ ਹੈ।',
-'confirmemail_loggedin' => 'ਹà©\81ਣ à¨¤à©\81ਹਾਡਾ à¨\88ਮà©\87ਲ à¨\90ਡਰà©\88ੱਸ à¨\9aà©\88ੱà¨\95 (confirmed) à¨¹à©\8b à¨\97ਿà¨\86 ਹੈ।',
+'confirmemail_loggedin' => 'ਤà©\81ਹਾਡਾ à¨\88-ਮà©\87ਲ à¨ªà¨¤à¨¾ à¨¹à©\81ਣ à¨¤à¨¸à¨¦à©\80à¨\95 à¨¹à©\8b à¨\9aà©\81ੱà¨\95ਾ ਹੈ।',
 'confirmemail_subject' => '{{SITENAME}} ਈਮੇਲ ਐਡਰੈੱਸ ਪੁਸ਼ਟੀ',
 
 # Scary transclusion
-'scarytranscludetoolong' => '[ਅਫਸੋਸ ਹੈ ਕਿ URL ਬਹੁਤ ਲੰਮਾ ਹੈ]',
+'scarytranscludetoolong' => '[URL ਬਹੁਤ ਲੰਬਾ ਹੈ]',
 
 # Delete conflict
 'recreate' => 'ਮੁੜ-ਬਣਾਓ',
@@ -2016,8 +2028,8 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 'table_pager_empty' => 'ਕੋਈ ਨਤੀਜਾ ਨਹੀਂ',
 
 # Auto-summaries
-'autosumm-blank' => 'ਪà©\87à¨\9c à¨¨à©\82à©° à¨\96ਾਲà©\80 à¨\95ਰ à¨¦à¨¿à©±ਤਾ',
-'autosumm-new' => '$1 ਨਾਲ ਪੇਜ ਬਣਾਇਆ',
+'autosumm-blank' => 'ਸਫ਼à©\87 à¨¨à©\82à©° à¨\96਼ਾਲà©\80 à¨\95à©\80ਤਾ',
+'autosumm-new' => '"$1" ਨਾਲ਼ ਸਫ਼ਾ ਬਣਾਇਆ',
 
 # Live preview
 'livepreview-loading' => 'ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…',
@@ -2038,10 +2050,10 @@ delete|ਮਿਟਾਉਣਾਂ ਦਾ ਚਿੱਠਾ]] ਵੇਖੋ।',
 
 # Special:SpecialPages
 'specialpages' => 'ਖ਼ਾਸ ਸਫ਼ੇ',
-'specialpages-group-login' => 'ਲਾਗ ਇਨ / ਅਕਾਊਂਟ ਬਣਾਓ',
+'specialpages-group-login' => 'ਲਾਗਇਨ / ਖਾਤਾ ਬਣਾਓ',
 
 # Special:BlankPage
-'blankpage' => 'à¨\96਼ਾਲà©\80 à¨ªà©\87à¨\9c',
+'blankpage' => 'à¨\96਼ਾਲà©\80 à¨¸à¨«à¨¼à¨¾',
 
 # External image whitelist
 'external_image_whitelist' => " #ਇਸ ਲਾਈਨ ਨੂੰ ਇੰਝ ਹੀ ਰਹਿਣ ਦਿਓ <pre>
index 5c454f2..73f80a5 100644 (file)
@@ -671,10 +671,11 @@ Zapytanie: $2',
 'protectedpagetext' => 'Wyłączono możliwość edycji tej strony.',
 'viewsourcetext' => 'Tekst źródłowy strony można podejrzeć i skopiować.',
 'viewyourtext' => "Tekst źródłowy '''zmodyfikowanej''' przez Ciebie strony możesz podejrzeć i skopiować",
-'protectedinterface' => 'Ta strona zawiera tekst interfejsu oprogramowania, dlatego możliwość jej edycji została zablokowana.',
+'protectedinterface' => 'Ta strona zawiera tekst interfejsu oprogramowania wiki i jest zabezpieczona przed nadużyciami.
+By dodać lub zmienić tłumaczenia wszystkich serwisów wiki, użyj [//translatewiki.net/ translatewiki.net], projektu lokalizacji MediaWiki.',
 'editinginterface' => "'''Ostrzeżenie:''' Edytujesz stronę, która zawiera tekst interfejsu oprogramowania.
-Zmiany na tej stronie zmienią wygląd interfejsu dla innych użytkowników.
-Rozważ wykonanie tłumaczenia na [//translatewiki.net/wiki/Main_Page?setlang=pl translatewiki.net], specjalizowanym projekcie lokalizacji oprogramowania MediaWiki.",
+Zmiany na tej stronie zmienią wygląd interfejsu dla innych użytkowników tej wiki.
+By dodać lub zmienić tłumaczenia wszystkich wiki, użyj [//translatewiki.net/wiki/Main_Page?setlang=pl translatewiki.net], specjalizowany projekt lokalizacji oprogramowania MediaWiki.",
 'sqlhidden' => '(ukryto zapytanie SQL)',
 'cascadeprotected' => 'Ta strona została zabezpieczona przed edycją, ponieważ jest ona zawarta na {{PLURAL:$1|następującej stronie, która została zabezpieczona|następujących stronach, które zostały zabezpieczone}} z włączoną opcją dziedziczenia:
 $2',
@@ -960,9 +961,9 @@ Jeśli jesteś anonimowym użytkownikiem i uważasz, że zamieszczone tu komenta
 'noarticletext' => 'Brak strony o tym tytule.
 Możesz [[Special:Search/{{PAGENAME}}|poszukać „{{PAGENAME}}” na innych stronach]],
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} przeszukać log] lub [{{fullurl:{{FULLPAGENAME}}|action=edit}} utworzyć tę stronę]</span>.',
-'noarticletext-nopermission' => 'Na tej stronie nie ma jeszcze artykułu.
+'noarticletext-nopermission' => 'Ta strona nie posiada jeszcze zawartości.
 Możesz [[Special:Search/{{PAGENAME}}|wyszukać ten tytuł]] w treści innych stron
-lub <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} przeszukać powiązane logi].</span>',
+lub <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} przeszukać powiązane dzienniki]</span>, ale nie masz uprawnień do utworzenia tej strony',
 'missing-revision' => 'Wersja #$1 strony "{{PAGENAME}}" nie istnieje.
 
 Zazwyczaj jest to spowodowane przestarzałym linkiem do usuniętej strony. Powód usunięcia znajduje się w [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejestrze].',
@@ -1226,7 +1227,9 @@ Proszę sprawdzić rejestr operacji.',
 'revdelete-only-restricted' => 'Nie można ukryć elementu z $2, $1 przed administratorami bez określenia jednej z pozostałych opcji ukrywania.',
 'revdelete-reason-dropdown' => '* Najczęstsze powody usunięcia
 ** Naruszenie praw autorskich
-** Informacja naruszająca prywatność',
+** Niestosowny komentarz lub informacja naruszająca prywatność
+** Niestosowna nazwa użytkownika
+** Potencjalnie oszczercza informacja',
 'revdelete-otherreason' => 'Inny lub dodatkowy powód:',
 'revdelete-reasonotherlist' => 'Inny powód',
 'revdelete-edit-reasonlist' => 'Edycja listy powodów usunięcia pliku',
@@ -1423,7 +1426,7 @@ Wygenerowany losowo klucz, którego możesz użyć to $1',
 'timezoneregion-indian' => 'Ocean Indyjski',
 'timezoneregion-pacific' => 'Ocean Spokojny',
 'allowemail' => 'Zgadzam się, by inni użytkownicy mogli przesyłać do mnie e‐maile',
-'prefs-searchoptions' => 'Opcje wyszukiwania',
+'prefs-searchoptions' => 'Szukaj',
 'prefs-namespaces' => 'Przestrzenie nazw',
 'defaultns' => 'Albo przeszukuj przestrzenie nazw:',
 'default' => 'domyślnie',
@@ -1854,7 +1857,7 @@ Jeśli problem będzie się powtarzał, skontaktuj się z [[Special:ListUsers/sy
 'backend-fail-internal' => 'Wystąpił nieznany błąd w wewnętrznych funkcjach magazynowania "$1".',
 'backend-fail-contenttype' => 'Nie można określić typ zawartości pliku do przechowywania w "$1".',
 'backend-fail-batchsize' => 'Wewnętrzne funkcje magazynowania otrzymały $1 {{PLURAL:$1|operację|operacje|operacji}} na pliku; limit to $2 {{PLURAL:$2|operacja|operacje|operacji}}.',
-'backend-fail-usable' => 'Nie można zapisać pliku $1 ze względu na niewystarczające uprawnienia lub brak katalogów/kontenerów.',
+'backend-fail-usable' => 'Nie można zapisać lub czytać z pliku "$1" ze względu na niewystarczające uprawnienia lub brak katalogów/kontenerów.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Nie można połączyć się z bazą danych dziennika dla backendu magazynowania "$1".',
@@ -3100,11 +3103,11 @@ Najprawdopodobniej zostało to spowodowane przez link do zewnętrznej strony int
 'pageinfo-header-edits' => 'Historia edycji',
 'pageinfo-header-restrictions' => 'Zmień zabezpieczenie',
 'pageinfo-header-properties' => 'Właściwości strony',
-'pageinfo-display-title' => 'Wyświetl tytuł',
+'pageinfo-display-title' => 'Wyświetlany tytuł',
 'pageinfo-default-sort' => 'Domyślny klucz sortowania',
 'pageinfo-length' => 'Długość strony (w bajtach)',
 'pageinfo-article-id' => 'Identyfikator strony',
-'pageinfo-robot-policy' => 'Stan wyszukiwarki',
+'pageinfo-robot-policy' => 'Status w wyszukiwarce',
 'pageinfo-robot-index' => 'Indeksowalne',
 'pageinfo-robot-noindex' => 'Nieindeksowalne',
 'pageinfo-views' => 'Odsłon',
@@ -3120,10 +3123,10 @@ Najprawdopodobniej zostało to spowodowane przez link do zewnętrznej strony int
 'pageinfo-authors' => 'Całkowita liczba autorów',
 'pageinfo-recent-edits' => 'Liczba ostatnich edycji (w przeciągu $1)',
 'pageinfo-recent-authors' => 'Liczba ostatnich autorów',
-'pageinfo-restriction' => 'Zabezpieczenie strony (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Zabezpieczenie strony – {{lcfirst:$1}}',
 'pageinfo-magic-words' => 'Magiczne {{PLURAL:$1|słowo|słowa|słowa}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Ukryta kategoria|Ukryte kategorie|Ukryte kategorie}} ($1)',
-'pageinfo-templates' => 'Transkludowan{{PLURAL:$1|y szablon|e szablony}} ($1)',
+'pageinfo-templates' => 'Wykorzystywan{{PLURAL:$1|y szablon|e szablony}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Standardowa',
index fac2da2..eb40fa2 100644 (file)
@@ -959,7 +959,9 @@ It peule pa vëddlo.',
 'revdelete-only-restricted' => "Eror an stërmand l'element datà $2, $1: it peule pa vieté la vista d'element a j'aministrator sensa ëdcò selessioné un-a dj'àutre opsion ëd visibilità.",
 'revdelete-reason-dropdown' => "*Rason sòlite dë scancelassion
 ** Violassion dël drit d'autor
-** Anformassion përsonaj pa aproprià",
+** Coment o anformassion përsonaj pa aproprià
+** Nòm utent pa aproprià
+** Anformassion potensialment difamatòria",
 'revdelete-otherreason' => 'Àutra rason o adissional:',
 'revdelete-reasonotherlist' => 'Àutra rason',
 'revdelete-edit-reasonlist' => 'Modifiché la rason ëd lë scancelament',
@@ -2808,11 +2810,11 @@ Sòn a l'é motobin belfé che a sia rivà përchè a-i era n'anliura a un sit e
 'spamprotectionmatch' => "Cost-sì a l'é ël test che a l'é restà ciapà andrinta al filtror dla rumenta: $1",
 'spambot_username' => 'MediaWiki - trigomiro che a-j dà deuit a la rumenta',
 'spam_reverting' => "Butà andaré a l'ùltima version che a l'avèissa pa andrinta dj'anliure a $1",
-'spam_blanking' => "Pàgina dësveujdà, che tute le version a l'avìo andrinta dj'anliure a $1",
-'spam_deleting' => 'Tute le revision a contnisìo dle liure a $1, scancelament',
+'spam_blanking' => "Pàgina dësvujdà, che tute le version a l'avìo andrinta dj'anliure a $1",
+'spam_deleting' => 'Scancelà, dagià che tute le revision a contnisìo dle liure a $1',
 
 # Info page
-'pageinfo-title' => 'Anformassion për "$1"',
+'pageinfo-title' => 'Anformassion për «$1»',
 'pageinfo-header-basic' => 'Anformassion ëd base',
 'pageinfo-header-edits' => 'Modìfiche',
 'pageinfo-header-restrictions' => 'Protession ëd la pàgina',
@@ -2825,7 +2827,7 @@ Sòn a l'é motobin belfé che a sia rivà përchè a-i era n'anliura a un sit e
 'pageinfo-robot-index' => 'Indesàbil',
 'pageinfo-robot-noindex' => 'Nen indesàbil',
 'pageinfo-views' => 'Nùmer ëd vìsite',
-'pageinfo-watchers' => "Vàire ch'a ten-o sot-euj la pàgina",
+'pageinfo-watchers' => "Vàire utent ch'a ten-o sot-euj la pàgina",
 'pageinfo-redirects-name' => 'Ridiression a sta pàgina-sì',
 'pageinfo-subpages-name' => 'Sot-pàgine ëd costa pàgina',
 'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|ridiression|ridiression}}; $3 {{PLURAL:$3|nen ridiression|nen ridiression}})',
@@ -2837,77 +2839,77 @@ Sòn a l'é motobin belfé che a sia rivà përchè a-i era n'anliura a un sit e
 'pageinfo-authors' => "Nùmer d'autor diferent",
 'pageinfo-recent-edits' => "Nùmer ëd modìfiche recente (ant j'ùltim $1)",
 'pageinfo-recent-authors' => "Nùmer d'autor diferent recent",
-'pageinfo-restriction' => 'Protession ëd la pàgina (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Protession ëd la pàgina ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Paròla màgica|Paròle màgiche}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categorìa|Categorìe}} stërmà ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|stamp contnù|stamp contnù}} ($1)',
 
 # Patrolling
-'markaspatrolleddiff' => 'Marca coma verificà',
-'markaspatrolledtext' => "Marca st'artìcol-sì coma verificà",
+'markaspatrolleddiff' => 'Marc coma verificà',
+'markaspatrolledtext' => 'Marché costa pàgina coma verificà',
 'markedaspatrolled' => 'Marca dla verìfica butà',
 'markedaspatrolledtext' => "La version selessionà ëd [[:$1]] a l'é staita marcà coma verificà.",
 'rcpatroldisabled' => "Verìfica dj'ùltime modìfiche disabilità",
 'rcpatroldisabledtext' => "La possibilità ëd verifichè j'ùltime modìfiche a l'é disabilità.",
-'markedaspatrollederror' => 'As peul pa marchè verificà',
-'markedaspatrollederrortext' => 'A venta che a specìfica che version che a veul marchè verificà.',
-'markedaspatrollederror-noautopatrol' => 'A l\'ha nen ël përmess dë marchesse soe modìfiche coma "controlà".',
+'markedaspatrollederror' => 'As peul pa marché coma verificà',
+'markedaspatrollederrortext' => 'A venta che a spessìfica che version che a veul marchè coma verificà.',
+'markedaspatrollederror-noautopatrol' => "A l'ha nen ël përmess dë marchesse soe modìfiche coma «controlà».",
 
 # Patrol log
 'patrol-log-page' => 'Registr dij contròj',
-'patrol-log-header' => "Sto sì a l'é un registr ëd le revision verificà.",
+'patrol-log-header' => "Cost-sì a l'é un registr ëd le revision controlà.",
 'log-show-hide-patrol' => '$1 registr verificà',
 
 # Image deletion
 'deletedrevision' => 'Veja version scancelà $1',
 'filedeleteerror-short' => "Eror ën scanceland l'archivi: $1",
-'filedeleteerror-long' => "A son ësta-ie dj'eror ën scanceland l'archivi:
+'filedeleteerror-long' => "A-i son ësta-ie dj'eror ën scanceland l'archivi:
 
 $1",
-'filedelete-missing' => 'L\'archivi "$1" as peul pa dëscancelesse, për via ch\'a-i é nen.',
-'filedelete-old-unregistered' => 'La revision d\'archivi specificà "$1" ant la base dat a-i é nen.',
-'filedelete-current-unregistered' => 'Ant la base dat l\'archivi "$1" ch\'a l\'é specificasse a-i é pa.',
-'filedelete-archive-read-only' => 'Ël servent dla Ragnà a peul pa scriv-ie ant ël dossié dj\'archivi "$1".',
+'filedelete-missing' => "L'archivi «$1» as peul pa dëscancelesse, për via ch'a-i é nen.",
+'filedelete-old-unregistered' => "La revision d'archivi specificà «$1» ant la base dij dat a-i é nen.",
+'filedelete-current-unregistered' => "Ant la base dij dat l'archivi «$1» ch'a l'é specificasse a-i é pa.",
+'filedelete-archive-read-only' => "Ël servent dla Ragnà a peul pa scriv-ie ant ël dossié d'archiviassion «$1».",
 
 # Browsing diffs
-'previousdiff' => '← Diferensa pì veja',
-'nextdiff' => 'Modìfica pì neuva →',
+'previousdiff' => '← Modìfica precedenta',
+'nextdiff' => 'Modìfica apress →',
 
 # Media information
 'mediawarning' => "'''Atension!''': st'archivi-sì a podrìa avèj andrinta dël còdes butà-lì da cheidun për fé ëd darmagi.
-An fasend-lo travajé ansima a sò ordinator chiel a podrìa porteje ëd dann a sò sistema.",
-'imagemaxsize' => "Lìmit ëd la dimension ëd la figura:<br /> ''(për pàgine ëd descrission dij file)''",
+An fasend-lo marcé ansima a sò ordinator chiel a podrìa porteje ëd dann a sò sistema.",
+'imagemaxsize' => "Lìmit ëd la dimension ëd le plance:<br /> ''(për le pàgine ëd descrission dj'archivi)''",
 'thumbsize' => 'Amzura dle figurin-e:',
 'widthheightpage' => '$1 × $2, $3 {{PLURAL:$3|pàgina|pàgine}}',
 'file-info' => "amzura dl'archivi: $1, sòrt MIME: $2",
-'file-info-size' => '$1 × $2 pixel, amzure: $3, sòrt MIME: $4',
+'file-info-size' => '$1 × $2 pontin, amzure: $3, sòrt MIME: $4',
 'file-info-size-pages' => "$1 × $2 pontin, dimension ëd l'archivi: $3, sòrt MIME: $4, $5 {{PLURAL:$5|pàgina|pàgine}}",
 'file-nohires' => 'Gnun-a risolussion pì bela disponìbil.',
-'svg-long-desc' => "archivi an forma SVG, amzure nominaj $1 × $2 pixel, amzura dl'archivi: $3",
+'svg-long-desc' => "archivi an forma SVG, amzure nominaj $1 × $2 pontin, amzura dl'archivi: $3",
 'svg-long-desc-animated' => "Archivi SVG animà, dimension $1 × $2 pontin, amzura dl'archivi: $3",
-'show-big-image' => 'Version a amzura pijn-a',
+'show-big-image' => 'Version a arzolussion pien-a',
 'show-big-image-preview' => 'Amzure dë sta preuva: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Àutra arzolussion|Àutre arzolussion}}: $1.',
 'show-big-image-size' => '$1 × $2 pontin',
-'file-info-gif-looped' => 'ciclà',
-'file-info-gif-frames' => '$1 {{PLURAL:$1|fnesta|fneste}}',
+'file-info-gif-looped' => 'an sicl',
+'file-info-gif-frames' => '$1 {{PLURAL:$1|quàder|quàder}}',
 'file-info-png-looped' => 'an sìrcol',
-'file-info-png-repeat' => 'sonà $1 {{PLURAL:$1|vira|vire}}',
+'file-info-png-repeat' => 'fàit andé $1 {{PLURAL:$1|vira|vire}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|quàder|quàder}}',
 'file-no-thumb-animation' => "'''Nòta: Për dle limitassion técniche, le miniadure ëd s'archivi a saran pa animà.'''",
 'file-no-thumb-animation-gif' => "'''Nòta: Për limitassion técniche, le miniadure ëd figure GIF a àuta arzolussion com costa a saran pa animà.'''",
 
 # Special:NewFiles
-'newimages' => 'Galerìa ëd figure e son neuv',
-'imagelisttext' => "Ambelessì sota a-i é {{PLURAL:$1|l'ùnica figura che a-i sia|na lista ëd '''$1''' figure, ordinà për $2}}.",
+'newimages' => 'Galarìa ëd figure e son neuv',
+'imagelisttext' => "Ambelessì-sota a-i é {{PLURAL:$1|l'ùnica figura che a-i sia|na lista ëd '''$1''' figure, ordinà $2}}.",
 'newimages-summary' => "Sta pàgina special-sì a la smon j'ùltim archivi carià.",
 'newimages-legend' => 'Filtror',
-'newimages-label' => 'Nòm dël file (o ëd part dël file):',
+'newimages-label' => "Nòm ëd l'archivi (o na soa part):",
 'showhidebots' => '($1 trigomiro)',
 'noimages' => 'Pa gnente da vëdde.',
-'ilsubmit' => 'Sërca',
+'ilsubmit' => 'Arserché',
 'bydate' => 'për data',
-'sp-newimages-showfrom' => "Smon j'ùltim archivi multimojen a anandiesse da $2 dël $1",
+'sp-newimages-showfrom' => "Smon-e j'ùltim archivi multimojen a anandiesse da $2 dël $1",
 
 # Video information, used by Language::formatTimePeriod() to format lengths in the above messages
 'seconds' => '{{PLURAL:$1|un second|$1 second}}',
@@ -2919,14 +2921,14 @@ An fasend-lo travajé ansima a sò ordinator chiel a podrìa porteje ëd dann a
 # Bad image list
 'bad_image_list' => "La forma a l'é costa-sì:
 
-As ten-o bon-e mach le liste pontà (cole faite ëd righe ch'as ancamin-o për *). La prima anliura ëd minca riga a l'ha da mné a n'archivi multimojen nen bon.
+As ten-o bon-e mach le liste pontà (cole fàite ëd righe ch'as ancamin-o për *). La prima anliura ëd minca riga a l'ha da mné a n'archivi multimojen nen bon.
 J'anliure ch'a-i ven-o dapress, ant sla midema riga, as conto për ecession (visadì, për pàgine andova st'archivi as peul butesse).",
 
 # Metadata
 'metadata' => 'Dat adissionaj',
-'metadata-help' => "Costi-sì a son dij dat adissionaj, che a l'é belfé che a sio stait giontà da la màchina fotogràfica digital ò pura da lë scanner che a l'é stiat dovrà për creé la figura digital. Se la figura a fussa mai staita modificà da 'nt soa forma original, a podrìa ëdcò riveje che chèich detaj a fussa ancò butà coma ant l'original, donca sensa pa ten-e cont ëd le modìfiche.",
-'metadata-expand' => 'Most-me tùit ij dat',
-'metadata-collapse' => 'Stërma ij dat adissionaj',
+'metadata-help' => "St'archivi a conten dj'anformassion adissionaj, che a l'é belfé che a sio stait giontà da la màchina fotogràfica digital ò pura dal digitalisatorr che a l'é stàit dovrà për creé la figura digital. Se la figura a fussa mai stàita modificà da 'nt soa forma original, a podrìa ëdcò riveje che chèich detaj a fusso ancor butà coma ant l'original, donca sensa ten-e cont ëd le modìfiche.",
+'metadata-expand' => 'Smon-e ij dat adissionaj',
+'metadata-collapse' => 'Stërmé ij dat adissionaj',
 'metadata-fields' => "Ij camp dij metadat ëd la figura listà ant ës messagi-sì a saran ësmonù ant la visualisassion ëd la pàgina dla figura quand la tàula dij metadat a l'é stërmà.
 J'àutri a saran stërmà coma stàndard.
 * make
@@ -2948,13 +2950,13 @@ J'àutri a saran stërmà coma stàndard.
 'exif-imagelength' => 'Autëssa',
 'exif-bitspersample' => 'Bit për campion',
 'exif-compression' => 'Schema ëd compression',
-'exif-photometricinterpretation' => 'Composission dij pixel',
+'exif-photometricinterpretation' => 'Composission dij pontin',
 'exif-orientation' => 'Orientament',
 'exif-samplesperpixel' => 'Nùmer ëd component',
 'exif-planarconfiguration' => 'Sistemassion dij dat',
 'exif-ycbcrsubsampling' => 'Rapòrt ëd campionament antra Y e C',
 'exif-ycbcrpositioning' => 'Posissionament Y e C',
-'exif-xresolution' => 'Risolussion orizontal',
+'exif-xresolution' => 'Risolussion orisontal',
 'exif-yresolution' => 'Risolussion vertical',
 'exif-stripoffsets' => 'Posission dij dat dla figura',
 'exif-rowsperstrip' => 'Nùmer ëd righe për banda',
@@ -2963,8 +2965,8 @@ J'àutri a saran stërmà coma stàndard.
 'exif-jpeginterchangeformatlength' => 'Byte ëd dat an formà JPEG',
 'exif-whitepoint' => 'Pont cromàtich dël bianch',
 'exif-primarychromaticities' => 'Coordinà cromàtiche dij color primari',
-'exif-ycbcrcoefficients' => 'Coeficent dla matriss ëd trasformassion dlë spassi color',
-'exif-referenceblackwhite' => "Pàira ëd valor d'arferiment për bianch e nèir",
+'exif-ycbcrcoefficients' => 'Coefissient dla matris ëd trasformassion dlë spassi dij color',
+'exif-referenceblackwhite' => "Cobia ëd valor d'arferiment për bianch e nèir",
 'exif-datetime' => 'Data e ora dle modìfiche',
 'exif-imagedescription' => 'Tìtol dla figura',
 'exif-make' => 'Fabricant dla màchina fotogràfica ò videocàmera',
@@ -2974,7 +2976,7 @@ J'àutri a saran stërmà coma stàndard.
 'exif-copyright' => "Titolar dël drit d'autor",
 'exif-exifversion' => 'Version dël formà Exif',
 'exif-flashpixversion' => 'A riva a la version Flashpix',
-'exif-colorspace' => 'Spassi color',
+'exif-colorspace' => 'Spassi dij color',
 'exif-componentsconfiguration' => 'Sust ëd vira component',
 'exif-compressedbitsperpixel' => 'Sistema ëd compression dle figure',
 'exif-pixelydimension' => 'Larghëssa dla figura',
index d49080b..03e5454 100644 (file)
@@ -439,6 +439,7 @@ $1',
 'site-atom-feed' => '$1 د اټوم کتنه',
 'page-rss-feed' => '"$1" د آر اس اس کتنه',
 'page-atom-feed' => 'د "$1" د اټوم کتنې',
+'feed-atom' => 'اټوم',
 'feed-rss' => 'آر اس اس',
 'red-link-title' => '$1 (تر اوسه پورې نه شته)',
 'sort-descending' => 'مخښکته اوډل',
@@ -499,6 +500,8 @@ $1',
 'badtitle' => 'ناسم سرليک',
 'badtitletext' => 'ستاسې د غوښتل شوي مخ سرليک سم نه وو، يا مو د سرليک ځای تش وو او يا هم د ژبو خپلمنځي تړنې څخه يا د ويکي ګانو خپلمنځي سرليکونو څخه يو ناسم توری مو پکې کارولی وي.
 کېدای شي چې ستاسې په ورکړ شوي سرليک کې يو يا څو داسې توري وي چې د سرليک په توګه بايد و نه کارېږي.',
+'querypage-no-updates' => 'د دې مخ اوسمهالېدنې ناچارن شوي.
+په ښکاره توګه د دې ځای اومتوک به نه وي تازه شوي.',
 'viewsource' => 'سرچينه کتل',
 'viewsource-title' => 'د $1 سرچينه کتل',
 'actionthrottled' => 'د دې کړنې مخنيوی وشو',
@@ -596,8 +599,8 @@ $1',
 'mailerror' => 'د برېښليک د لېږلو ستونزه: $1',
 'acct_creation_throttle_hit' => 'د همدې ويکي کارنانو په وروستيو ورځو کې ستاسې د IP پتې په کارولو سره {{PLURAL:$1|1 ګڼون|$1 ګڼونونه}} جوړ کړي، چې دا په همدې مودې کې د ګڼونونو د جوړولو تر ټولو ډېر شمېر دی چې اجازه يې ورکړ شوې.
 نو په همدې خاطر د اوس لپاره د همدې IP پتې کارنان نه شي کولای چې نور ګڼونونه جوړ کړي.',
-'emailauthenticated' => 'ستاسو برېښليک پته په $2 نېټه په $3 بجو د منلو وړ وګرځېده.',
-'emailnotauthenticated' => 'ستاسو د برېښليک پته لا تر اوسه پورې د منلو وړ نه ده ګرځېدلې. د اړوندو بېلوونکو نښو په هکله تاسو ته هېڅ کوم برېښليک نه لېږل کېږي.',
+'emailauthenticated' => 'ستاسې برېښليک پته په $2 نېټه په $3 بجو د منلو وړ وګرځېده.',
+'emailnotauthenticated' => 'لا تر اوسه ستاسې برېښليک پته د منلو وړ نه ده ګرځېدلې. د لاندې ځانګړتياو لپاره به تاسې ته هېڅ کوم برېښليک و نه لېږل شي.',
 'noemailprefs' => 'ددې لپاره چې دا کړنې کار وکړي نو تاسو يو برېښليک وټاکۍ.',
 'emailconfirmlink' => 'د خپل د برېښليک پتې پخلی وکړی',
 'invalidemailaddress' => 'دا برېښليک پته نه منل کېږي، دا ځکه چې دا پته يوه ناکره بڼه لري.
@@ -633,6 +636,7 @@ $1',
 'passwordreset' => 'پټنوم بياپرځايول',
 'passwordreset-text' => 'د دې لپاره چې ستاسې د ګڼون بشپړې څرګندنې دربرېښليک شي نو دا فورمه ډکه کړۍ.',
 'passwordreset-legend' => 'پټنوم بياپرځايول',
+'passwordreset-pretext' => '{{PLURAL:$1||د لاندې اومتوک يوه برخه مالومات وليکۍ}}',
 'passwordreset-username' => 'کارن-نوم:',
 'passwordreset-domain' => 'شپول:',
 'passwordreset-capture' => 'د پايلې برېښليک کتل غواړې؟',
@@ -713,7 +717,7 @@ $1',
 ستاسې IP پته $3 ده او ستاسې د بنديز پېژند #$5 دی.
 د بنديز اړونده د اړيکو نيولو په وخت کې لطفاً د پورتني مالوماتو يادونه وکړۍ.',
 'blockednoreason' => 'هېڅ سبب نه دی ورکړ شوی',
-'whitelistedittext' => 'ددې لپاره چې سمادول ترسره کړی تاسو بايد $1.',
+'whitelistedittext' => 'د مخونو د سمون لپاره بايد $1 کېښکاږۍ.',
 'nosuchsectiontitle' => 'برخه و نه موندل شوه',
 'nosuchsectiontext' => 'تاسې د يوې داسې برخې د سمون هڅه کړې چې تر اوسه پورې نشته.
 کېدای هغه مهال چې تاسې د دې مخ نه کتنه کوله، همدا برخه کوم بل ځای ته لېږدل شوې او يا هم ړنګه شوې وي.',
@@ -755,7 +759,7 @@ $1',
 ستاسې لخوا ترسره شوي بدلونونه لا تر اوسه پورې نه دي خوندي شوي!!",
 'editing' => 'د $1 سمونه',
 'creating' => '$1 جوړېدنې کې دی',
-'editingsection' => 'سمونه $1 (برخه)',
+'editingsection' => '$1 (برخه) په سمېدنې کې دی',
 'editingcomment' => 'د $1 سمون (نوې برخه)',
 'editconflict' => 'په سمادولو کې خنډ: $1',
 'yourtext' => 'ستاسو متن',
@@ -876,7 +880,7 @@ $1',
 'revdelete-reason-dropdown' => '*د ړنګولو ټولګړي سببونه
 ** د خپرېدو د رښتو سرغړونه
 ** ناسم شخصي مالومات
-** Potentially libelous information',
+** پارونکي او بلواګر مالومات',
 'revdelete-otherreason' => 'بل/اضافي سبب:',
 'revdelete-reasonotherlist' => 'بل سبب',
 'revdelete-edit-reasonlist' => 'د ړنګولو سببونه سمول',
@@ -927,7 +931,7 @@ $1',
 'searchhelp-url' => 'Help:لړليک',
 'searchprofile-articles' => 'مېنځپانګيز مخونه',
 'searchprofile-project' => 'د لارښود او پروژې مخونه',
-'searchprofile-images' => 'Multimedia',
+'searchprofile-images' => 'ګڼرسنۍ',
 'searchprofile-everything' => 'هرڅه',
 'searchprofile-advanced' => 'پرمختللی',
 'searchprofile-articles-tooltip' => 'په $1 کې پلټل',
@@ -951,10 +955,11 @@ $1',
 'searcheverything-enable' => 'په ټولو نوم-تشيالونو کې پلټل',
 'searchrelated' => 'اړونده',
 'searchall' => 'ټول',
+'showingresults' => "دلته لاندې تر {{PLURAL:$1|'''1''' پايله|'''$1''' پايلې}} ښکاره شوي پيل له #'''$2''' شوی.",
 'showingresultsheader' => "د «'''$4'''» لپاره {{PLURAL:$5|له '''$1''' نه تر '''$3''' پايله|له '''$1 نه تر $2''' پايلې، ټولې پايلې '''$3''' }}",
 'nonefound' => "'''يادښت''': يوازې يو څو نوم-تشيالونو په تلواليزه توګه پلټل کېږي.
 د ''ټول:'' مختاړي په کارولو سره به ستاسې د پلټنې لپاره، په ټوله مېنځپانګه کې پلټنه وشي (د خبرواترو، کينډۍ او نورو مخونو په ګډون), او يا هم د خپلې خوښې نوم-تشيال د مختاړي په توګه وکاروۍ.",
-'search-nonefound' => 'د ØºÙ\88Ú\9aتÙ\86Û\90 Ø³Ø±Ù\87 Ø³Ù\85 اړونده پايلې و نه موندل شوې.',
+'search-nonefound' => 'ستاسÛ\90 Ø¯ØºÙ\88Ú\9aتÙ\86Û\90 اړونده پايلې و نه موندل شوې.',
 'powersearch' => 'ژوره پلټنه',
 'powersearch-legend' => 'ژوره پلټنه',
 'powersearch-ns' => 'په نوم-تشيالونو کې پلټنه:',
@@ -1222,7 +1227,7 @@ $1',
 'upload' => 'دوتنه پورته کول',
 'uploadbtn' => 'دوتنه پورته کول',
 'uploadnologin' => 'غونډال کې نه ياست ننوتي',
-'uploadnologintext' => 'ددې لپاره چې دوتنې پورته کړای شۍ، تاسو ته پکار ده چې لومړی غونډال کې [[Special:UserLogin|ننوتنه]] ترسره کړی.',
+'uploadnologintext' => 'د دوتنو د پورته کولو لپاره بايد غونډال کې [[Special:Userlogin|ننوځۍ]].',
 'uploaderror' => 'د پورته کولو ستونزه',
 'uploadtext' => "د دوتنې د پورته کېدو لپاره لاندينی چوکاټ وکاروۍ.
 که چېرته د پخونيو پورته شويو دوتنو کتل او پلټل غواړۍ نو [[Special:FileList|د پورته شويو دوتنو لړليک]] ته ورشۍ، [[Special:Log/upload|د (بيا) پورته شويو دوتنو يادښتونه]] او [[Special:Log/delete|د ړنګېدو يادښتونه]] هم کتلای شی.
@@ -1272,6 +1277,7 @@ $1',
 'savefile' => 'دوتنه خوندي کړه',
 'uploadedimage' => '"[[$1]]" پورته شوه',
 'uploaddisabled' => 'پورته کول ناچارن شوي',
+'uploaddisabledtext' => 'د دوتنې پورته کولو آسانتياوې ناچارن شوي.',
 'uploadvirus' => 'دا دوتنه ويروس لري! تفصيل: $1',
 'upload-source' => 'سرچينيزه دوتنه',
 'sourcefilename' => 'د سرچينيزې دوتنې نوم:',
@@ -1365,6 +1371,7 @@ $1',
 # File deletion
 'filedelete' => '$1 ړنګول',
 'filedelete-legend' => 'دوتنه ړنګول',
+'filedelete-intro' => "تاسې د '''[[Media:$1|$1]]''' دوتنې او د ورسره ټول پېښليک د ړنګولو په حال کې ياست.",
 'filedelete-comment' => 'سبب:',
 'filedelete-submit' => 'ړنګول',
 'filedelete-success' => "'''$1''' ړنګ شو.",
@@ -1413,6 +1420,7 @@ $1',
 'statistics-views-total' => 'ټولټال کتنې',
 'statistics-users' => 'ثبت شوي [[Special:ListUsers|کارنان]]',
 'statistics-users-active' => 'فعاله کارنان',
+'statistics-users-active-desc' => 'هغه کارنان چې په {{PLURAL:$1|وروستۍ ورځ|وروستيو $1 ورځو}} کې فعاله ونډه لرلې',
 'statistics-mostpopular' => 'تر ټولو ډېر کتل شوي مخونه',
 
 'disambiguations' => 'د مبهمو مخونو سره تړلي مخونه',
@@ -1425,6 +1433,7 @@ $1',
 'brokenredirects-delete' => 'ړنګول',
 
 'withoutinterwiki' => 'د ژبې د تړنو بې برخې مخونه',
+'withoutinterwiki-summary' => 'لانديني مخونه د نورو ژبو بڼو سره تړنې نه لري.',
 'withoutinterwiki-legend' => 'مختاړی',
 'withoutinterwiki-submit' => 'ښکاره کول',
 
@@ -1457,6 +1466,7 @@ $1',
 'mostlinkedtemplates' => 'د ډېرو تړنو کينډۍ',
 'mostcategories' => 'د ګڼو وېشنيزو مخونه',
 'mostimages' => 'د ډېرو تړنو انځورونه',
+'mostinterwikis' => 'د ډېرو خپلمنځي تړنو مخونه',
 'mostrevisions' => 'ډېر کتلي مخونه',
 'prefixindex' => 'د مختاړيو ټول مخونه',
 'prefixindex-namespace' => 'د مختاړي ټول مخونه ($1 نومتشيال)',
@@ -1468,7 +1478,7 @@ $1',
 'protectedpages-indef' => 'يوازې بې پايه ژغورنې',
 'protectedpages-cascade' => 'يوازې ځوړاوبيزې ژغورنې',
 'protectedtitles' => 'ژغورلي سرليکونه',
-'listusers' => 'د کارن لړليک',
+'listusers' => 'کارن لړليک',
 'listusers-editsonly' => 'يوازې هغه کارنان چې سمونونه يې کړي ښکاره کول',
 'listusers-creationsort' => 'د جوړېدو د نېټې له مخې اوډل',
 'usereditcount' => '{{PLURAL:$1|سمون|سمونونه}}',
@@ -1478,6 +1488,7 @@ $1',
 'ancientpages' => 'تر ټولو زاړه مخونه',
 'move' => 'لېږدول',
 'movethispage' => 'دا مخ ولېږدوه',
+'unusedimagestext' => 'دا لاندينۍ دوتنې په هېڅ کوم مخ کې نه دي ټومبېدلي. لطفاً په پام کې وساتۍ چې نور وېبځايونه به د دغو دوتنو له يو دوتنې سره يو راسن يو آر ال (URL) ولري او لا تر اوسه به دوتنه د فعالې کارېدنې سره سره دلته پرته وي.',
 'notargettitle' => 'بې موخې',
 'pager-newer-n' => '{{PLURAL:$1|نوی 1|نوي $1}}',
 'pager-older-n' => '{{PLURAL:$1|زوړ 1|زاړه $1}}',
@@ -1524,8 +1535,8 @@ $1',
 'special-categories-sort-abc' => 'د ابېڅو له مخې اوډل',
 
 # Special:DeletedContributions
-'deletedcontributions' => 'د کارونکي ونډې ړنګې شوې',
-'deletedcontributions-title' => 'د کارونکي ونډې ړنګې شوې',
+'deletedcontributions' => 'ړنګې شوې ونډې',
+'deletedcontributions-title' => 'ړنګې شوې ونډې',
 'sp-deletedcontributions-contribs' => 'ونډې',
 
 # Special:LinkSearch
@@ -1543,6 +1554,7 @@ $1',
 
 # Special:ActiveUsers
 'activeusers' => 'د فعالو کارنانو لړليک',
+'activeusers-intro' => 'دا د هغو کارنانو لړليک دی چې په {{PLURAL:$1|تېرې|تېرو}} $1 {{PLURAL:$1|ورځ|ورځو}} کې يې ونډې ترسره کړي.',
 'activeusers-count' => 'په {{PLURAL:$2|تېرې|تېرو}} {{PLURAL:$3|ورځ|$3 ورځو}} کې $1 {{PLURAL:$1|سمون|سمونونه}}',
 'activeusers-from' => 'هغه کارنان کتل چې نومونه يې پېلېږي په:',
 'activeusers-hidebots' => 'روباټونه پټول',
@@ -1593,7 +1605,7 @@ $1',
 'emailccsubject' => '$1 ته ستاسو د پيغام لمېسه: $2',
 'emailsent' => 'برېښليک مو ولېږل شو',
 'emailsenttext' => 'ستاسو برېښليکي پيغام ولېږل شو.',
-'emailuserfooter' => 'همدا برېښليک د $1 لخوا $2 ته د {{SITENAME}} په وېبځي کې د "همدې کارونکي ته برېښليک لېږل" د کړنې په مرسته لېږل شوی دی.',
+'emailuserfooter' => 'دا برېښليک د $1 لخوا $2 ته د {{SITENAME}} په وېبځي کې د "کارن ته برېښليک لېږل" د کړنې په مرسته لېږل شوی.',
 
 # User Messenger
 'usermessage-summary' => 'د غونډال پيغام پرېښودل.',
@@ -1606,7 +1618,7 @@ $1',
 'nowatchlist' => 'ستاسو په کتلي لړليک کې هېڅ نه شته.',
 'watchlistanontext' => 'د خپل کتنلړ د توکو د سمولو او کتلو لپاره $1 ترسره کړۍ.',
 'watchnologin' => 'غونډال کې نه ياست ننوتي.',
-'watchnologintext' => 'ددÛ\90 Ù\84پارÙ\87 Ú\86Û\90 Ø®Ù¾Ù\84 Ú©ØªÙ\84 Ø´Ù\88Ù\8a Ù\84Ú\93Ù\84Ù\8aÚ© Ú©Û\90 Ø¨Ø¯Ù\84Ù\88Ù\86 Ø±Ø§Ù\88Ù\84Û\8c Ù\86Ù\88 ØªØ§Ø³Ù\88 ØªÙ\87 Ù¾Ú©Ø§Ø± Ø¯Ù\87 Ú\86Û\90 Ù\84Ù\88Ù\85Ú\93Û\8c ØºÙ\88Ù\86Ú\89اÙ\84 Ú©Û\90 [[Special:UserLogin|Ù\86Ù\86Ù\88تÙ\86Ù\87]] ØªØ±Ø³Ø±Ù\87 Ú©Ú\93Û\8c.',
+'watchnologintext' => 'ددÛ\90 Ù\84پارÙ\87 Ú\86Û\90 Ø®Ù¾Ù\84 Ú©ØªÙ\86Ù\84Ú\93 Ú©Û\90 Ø¨Ø¯Ù\84Ù\88Ù\86 Ø±Ø§Ù\88Ù\84Û\8c Ù\86Ù\88 ØªØ§Ø³Ù\88 ØªÙ\87 Ù¾Ú©Ø§Ø± Ø¯Ù\87 Ú\86Û\90 Ù\84Ù\88Ù\85Ú\93Û\8c ØºÙ\88Ù\86Ú\89اÙ\84 Ú©Û\90 [[Special:UserLogin|Ù\88رÙ\86Ù\86Ù\88Ú\81Û\8d]].',
 'addwatch' => 'کتنلړ کې ورګډول',
 'addedwatchtext' => "د \"[[:\$1]]\" په نوم يو مخ ستاسې [[Special:Watchlist|کتنلړ]] کې ورګډ شو.
 په راتلونکې کې چې په دغه مخ او د ده د خبرواترو مخ کې کوم بدلونونه راځي نو هغه به ستاسې کتنلړ کې ښکاره شي،
@@ -1765,6 +1777,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'undeleteinvert' => 'ټاکنې سرچپه کول',
 'undeletecomment' => 'سبب:',
 'undeletedfiles' => '{{PLURAL:$1|1 دوتنه بيازېرمه شوه|$1 دوتنې بيازېرمه شوې}}',
+'undelete-header' => 'د وروستيو ړنګو شوو مخونو لپاره [[Special:Log/delete|د ړنګولو يادښت]] وګورۍ.',
 'undelete-search-box' => 'ړنګ شوي مخونه لټول',
 'undelete-search-prefix' => 'هغه مخونه ښکاره کړه چې پېلېږي په:',
 'undelete-search-submit' => 'پلټل',
@@ -1788,7 +1801,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'sp-contributions-newbies' => 'د نوو ګڼونونو ونډې ښکاره کول',
 'sp-contributions-newbies-sub' => 'د نوو ګڼونونو لپاره',
 'sp-contributions-blocklog' => 'د بنديز يادښت',
-'sp-contributions-deleted' => 'د کارن ونډې ړنګې شوې',
+'sp-contributions-deleted' => 'ړنګې شوې ونډې',
 'sp-contributions-uploads' => 'پورته کېدنې',
 'sp-contributions-logs' => 'يادښتونه',
 'sp-contributions-talk' => 'خبرې اترې',
@@ -1881,7 +1894,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'contribslink' => 'ونډې',
 'emaillink' => 'برېښليک لېږل',
 'autoblocker' => 'په اتوماتيک ډول ستاسو مخنيوی شوی دا ځکه چې ستاسو IP پته وروستی ځل د "[[User:$1|$1]]" له خوا کارېدلې. او د $1 د مخنيوي سبب دا دی: "$2"',
-'blocklogpage' => 'د مخنيوي يادښت',
+'blocklogpage' => 'د بنديز يادښت',
 'blocklogentry' => 'په [[$1]] بنديز لګېدلی چې د بنديز د پای وخت يې $2 $3 دی',
 'unblocklogentry' => 'بنديز ليرې شو $1',
 'block-log-flags-anononly' => 'يواځې ورکنومي کارنان',
@@ -2062,6 +2075,9 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'tooltip-preferences-save' => 'غوره توبونه خوندي کول',
 'tooltip-summary' => 'يو لنډ لنډيز کښل',
 
+# Scripts
+'vector.js' => '/* د جاوا هر يو سکرېپټ چې دلته ځای پر ځای کېږي هغه به د وېکټور د پوښ ټولو کارنانو لپاره کار کوي */',
+
 # Attribution
 'anonymous' => 'د {{SITENAME}} {{PLURAL:$1|ورکنومی کارن|ورکنومي کارنان}}',
 'siteuser' => 'د {{SITENAME}} کارن $1',
@@ -2173,7 +2189,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 'exif-colorspace' => 'رنګ تشيال',
 'exif-pixelydimension' => 'د انځور سور',
 'exif-pixelxdimension' => 'د انځور جګوالی',
-'exif-usercomment' => 'د Ú©Ø§Ø±Ù\88Ù\86Ú©Ù\8a تبصرې',
+'exif-usercomment' => 'د Ú©Ø§Ø±Ù\86 تبصرې',
 'exif-relatedsoundfile' => 'اړونده غږيزه دوتنه',
 'exif-datetimedigitized' => 'د ګڼياليز کېدنې وخت او نېټه',
 'exif-fnumber' => 'F شمېره',
@@ -2339,7 +2355,7 @@ $UNWATCHURL  نه ليدنه وکړۍ
 
 # E-mail address confirmation
 'confirmemail' => 'د برېښليک پتې پخلی وکړی',
-'confirmemail_noemail' => 'تاسو يوه سمه برېښناليک پته نه ده ثبته کړې مهرباني وکړی [[Special:Preferences|د کارونکي غوره توبونه]] کې مو بدلون راولی.',
+'confirmemail_noemail' => 'تاسې يوه سمه برېښليک پته نه ده ثبته کړې مهرباني وکړی [[Special:Preferences|د کارن غوره توبونه]] مو بدل کړۍ.',
 'confirmemail_send' => 'يو تاييدي کوډ لېږل',
 'confirmemail_sent' => 'تاييدي برېښليک ولېږل شو.',
 'confirmemail_oncreate' => 'ستاسو د برېښناليک پتې ته يو تاييدي کوډ درولېږل شو.
@@ -2518,9 +2534,11 @@ $5
 * نورماله ځانګړي مخونه.
 * <strong class="mw-specialpagerestricted">محدوده ځانګړي مخونه.</strong>
 * <span class="mw-specialpagecached">رانيولي ځانګړي مخونه (کېدای شي منسوخ شوی وي).</span>',
+'specialpages-group-maintenance' => 'د څارنې راپورونه',
 'specialpages-group-other' => 'نور ځانګړي مخونه',
 'specialpages-group-login' => 'ننوتل / ګڼون جوړول',
 'specialpages-group-changes' => 'وروستي بدلونونه او يادښتونه',
+'specialpages-group-media' => 'د رسنۍ راپورونه او پورته کېدنې',
 'specialpages-group-users' => 'کارنان او رښتې',
 'specialpages-group-highuse' => 'ډېر کارېدونکي مخونه',
 'specialpages-group-pages' => 'د مخونو لړليک',
index 8417e8c..dc9cd65 100644 (file)
@@ -987,12 +987,10 @@ Verifique se deseja realmente criar ou editar esta página, por favor.',
 'userpage-userdoesnotexist-view' => 'A conta de utilizador "$1" não está registada.',
 'blocked-notice-logextract' => 'Este utilizador encontra-se actualmente bloqueado.
 Para referência, o último registo de bloqueio é apresentado abaixo:',
-'clearyourcache' => "'''Nota:''' Após gravar, terá de limpar a ''cache'' do seu browser para ver as alterações.'''
-
+'clearyourcache' => "'''Nota:''' Após gravar, terá de limpar a ''cache'' do seu browser para ver as alterações.
 *'''Firefox / Safari:''' Pressione ''Shift'' enquanto clica ''Recarregar'', ou pressione ''Ctrl-F5'' ou ''Ctrl-R'' (''⌘-R'' no Mac)
 *'''Google Chrome:''' Pressione ''Ctrl-Shift-R'' (''⌘-Shift-R'' no Mac)
 *'''Internet Explorer:''' Pressione ''Ctrl'' enquanto clica ''Recarregar'', ou pressione ''Ctrl-F5''
-*'''Konqueror:''' Clique ''Recarregar'' ou pressione ''F5''
 *'''Opera:''' Limpe a ''cache'' em ''Ferramentas → Preferências'' (''Tools → Preferences'')",
 'usercssyoucanpreview' => "'''Dica:''' Use o botão \"{{int:showpreview}}\" para testar o seu novo CSS antes de gravar.",
 'userjsyoucanpreview' => "'''Dica:''' Use o botão \"{{int:showpreview}}\" para testar o seu novo JavaScript antes de gravar.",
@@ -1254,7 +1252,8 @@ Verifique os registos, por favor.',
 'revdelete-only-restricted' => 'Erro ao ocultar o item de $2 às $1: não pode impedir que os itens sejam vistos pelos administradores sem seleccionar também uma das outras opções de visibilidade.',
 'revdelete-reason-dropdown' => '*Razões comuns para eliminação
 ** Violação de direitos de autor
-** Informações pessoais inapropriadas
+** Comentário ou informações pessoais inapropriados
+** Nome de utilizador inapropriado
 ** Informações potencialmente difamatórias',
 'revdelete-otherreason' => 'Outro/motivo adicional:',
 'revdelete-reasonotherlist' => 'Outro motivo',
@@ -2507,7 +2506,7 @@ Pode alterar o nível de protecção desta página, mas isso não afectará a pr
 'protect-summary-cascade' => 'em cascata',
 'protect-expiring' => 'expira a $1 (UTC)',
 'protect-expiring-local' => 'expira a $1',
-'protect-expiry-indefinite' => 'infinito',
+'protect-expiry-indefinite' => 'tempo indefinido',
 'protect-cascade' => 'Proteja quaisquer páginas que estejam incluídas nesta (protecção em cascata)',
 'protect-cantedit' => 'Não pode alterar o nível de protecção desta página, porque não tem permissão para editá-la.',
 'protect-othertime' => 'Outra duração:',
@@ -2983,6 +2982,7 @@ Não há um directório temporário.',
 'import-error-interwiki' => 'A página "$1" não pode ser importada pois seu nome está reservado para um link externo (interwiki).',
 'import-error-special' => 'A página "$1" não pode ser importada porque ela pertence a um espaço nominal especial que não permite páginas.',
 'import-error-invalid' => 'A página "$1" não pode ser importada porque seu nome é inválido.',
+'import-options-wrong' => '{{PLURAL:$2|Opção errada|Opções erradas}}: <nowiki>$1</nowiki>',
 
 # Import log
 'importlogpage' => 'Registo de importações',
@@ -3127,11 +3127,32 @@ Este bloqueio foi provavelmente causado por um link para um site externo que con
 
 # Info page
 'pageinfo-title' => 'Informações sobre "$1"',
-'pageinfo-header-edits' => 'Edições',
+'pageinfo-header-basic' => 'Informação básica',
+'pageinfo-header-edits' => 'Histórico de edições',
+'pageinfo-header-restrictions' => 'Proteção da página',
+'pageinfo-header-properties' => 'Propriedades da página',
+'pageinfo-display-title' => 'Exibir título',
+'pageinfo-length' => 'Tamanho da página (em bytes)',
+'pageinfo-article-id' => 'ID da página',
+'pageinfo-robot-policy' => 'Status do mecanismo de pesquisa',
+'pageinfo-robot-index' => 'Indexável',
+'pageinfo-robot-noindex' => 'Não indexável',
 'pageinfo-views' => 'Número de visitas',
-'pageinfo-watchers' => 'Número de vigilantes',
-'pageinfo-edits' => 'Número de edições',
-'pageinfo-authors' => 'Número de autores individuais',
+'pageinfo-watchers' => 'Número de vigilantes da página',
+'pageinfo-redirects-name' => 'Redireciona para esta página',
+'pageinfo-subpages-name' => 'Subpáginas desta página',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redirecionamento|redirecionamentos}}; $3 {{PLURAL:$3|não-redirecionamento|não-redirecionamentos}})',
+'pageinfo-firstuser' => 'Criador da página',
+'pageinfo-firsttime' => 'Data de criação da página',
+'pageinfo-lastuser' => 'Último editor',
+'pageinfo-lasttime' => 'Data da última edição',
+'pageinfo-edits' => 'Número total de edições',
+'pageinfo-authors' => 'Número total de autores distintos',
+'pageinfo-recent-edits' => 'Número de edições recentes (nos últimos $1)',
+'pageinfo-recent-authors' => 'Número recente de autores distintos',
+'pageinfo-restriction' => 'Proteção da página ({{lcfirst:$1}})',
+'pageinfo-magic-words' => '{{PLURAL:$1|Palavra mágica|Palavras mágicas}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Categoria oculta|Categorias ocultas}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Clássico',
@@ -3866,7 +3887,7 @@ Imagens serão apresentadas pelo browser na resolução máxima; ficheiros de ou
 * <span class="mw-specialpagerestricted">Páginas especiais restritas.</span>',
 'specialpages-group-maintenance' => 'Relatórios de manutenção',
 'specialpages-group-other' => 'Outras páginas especiais',
-'specialpages-group-login' => 'Entrar / registar-se',
+'specialpages-group-login' => 'Entrar / criar conta',
 'specialpages-group-changes' => 'Mudanças e registos recentes',
 'specialpages-group-media' => 'Listas e carregamento de ficheiros',
 'specialpages-group-users' => 'Utilizadores e privilégios',
index 4b52538..f109d93 100644 (file)
@@ -329,16 +329,16 @@ $messages = array(
 'tog-showtoc' => 'Mostrar Tabela de Conteúdos (para páginas com mais de três cabeçalhos)',
 'tog-rememberpassword' => 'Recordar os meus dados neste navegador (por no máximo $1 {{PLURAL:$1|dia|dias}})',
 'tog-watchcreations' => 'Adicionar as páginas e arquivos que eu criar às minhas páginas vigiadas',
-'tog-watchdefault' => 'Adicionar páginas editadas por mim à minha lista de páginas vigiadas',
-'tog-watchmoves' => 'Adicionar páginas movidas por mim à minha lista de páginas vigiadas',
-'tog-watchdeletion' => 'Adicionar páginas eliminadas por mim à minha lista de páginas vigiadas',
+'tog-watchdefault' => 'Adicionar as páginas e arquivos que eu editar às minhas páginas vigiadas',
+'tog-watchmoves' => 'Adicionar as páginas e arquivos que eu mover às minhas páginas vigiadas',
+'tog-watchdeletion' => 'Adicionar as páginas e arquivos que eu eliminar às minhas páginas vigiadas',
 'tog-minordefault' => 'Marcar todas as edições como secundárias, por padrão',
 'tog-previewontop' => 'Mostrar previsão antes da caixa de edição',
 'tog-previewonfirst' => 'Mostrar previsão na primeira edição',
 'tog-nocache' => 'Desativar o cache de páginas do navegador',
-'tog-enotifwatchlistpages' => 'Receber e-mail quando uma página da minha lista de páginas vigiadas for alterada',
+'tog-enotifwatchlistpages' => 'Notificar-me por e-mail quando uma página ou arquivo vigiado for alterado',
 'tog-enotifusertalkpages' => 'Receber e-mail quando a minha página de discussão for editada',
-'tog-enotifminoredits' => 'Enviar-me um email também quando forem edições menores',
+'tog-enotifminoredits' => 'Notificar-me por e-mail também sobre edições menores de páginas ou arquivos',
 'tog-enotifrevealaddr' => 'Revelar o meu endereço de email nas notificações',
 'tog-shownumberswatching' => 'Mostrar o número de usuários que estão vigiando',
 'tog-oldsig' => 'Assinatura existente:',
@@ -1235,9 +1235,10 @@ Você não tem acesso a ele.',
 'revdelete-concurrent-change' => 'Erro ao modificar o item datado de $2, $1: o seu estado parece ter sido alterado por outra pessoa enquanto você tentava modificá-lo.
 Por favor, verifique os registros.',
 'revdelete-only-restricted' => 'Erro ao ocultar o item de $2 às $1: você não pode impedir que itens sejam visualizados por administradores sem também selecionar uma das outras opções de visibilidade.',
-'revdelete-reason-dropdown' => '*Motivos comuns para eliminação
-** Violação de direitos autorais
-** Informação pessoal inapropriada
+'revdelete-reason-dropdown' => '*Razões comuns para eliminação
+** Violação de direitos de autor
+** Comentário ou informação pessoal inapropriada
+** Nome de usuário impróprio
 ** Informação potencialmente difamatória',
 'revdelete-otherreason' => 'Outro motivo/motivo adicional:',
 'revdelete-reasonotherlist' => 'Outro motivo',
@@ -2112,6 +2113,7 @@ Entradas <del>riscadas</del> foram resolvidas.',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|byte|bytes}}',
 'ncategories' => '$1 {{PLURAL:$1|categoria|categorias}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki|Interwikis}}',
 'nlinks' => '$1 {{PLURAL:$1|link|links}}',
 'nmembers' => '$1 {{PLURAL:$1|membro|membros}}',
 'nrevisions' => '$1 {{PLURAL:$1|revisão|revisões}}',
@@ -2140,6 +2142,7 @@ Entradas <del>riscadas</del> foram resolvidas.',
 'mostlinkedtemplates' => 'Predefinições com mais afluentes',
 'mostcategories' => 'Páginas de conteúdo com mais categorias',
 'mostimages' => 'Imagens com mais afluentes',
+'mostinterwikis' => 'Páginas com mais interwikis',
 'mostrevisions' => 'Páginas de conteúdo com mais revisões',
 'prefixindex' => 'Todas as páginas com prefixo',
 'prefixindex-namespace' => 'Todas as páginas com prefixo (espaço nominal $1)',
@@ -2431,6 +2434,8 @@ prossiga com cuidado.',
 'rollback' => 'Reverter edições',
 'rollback_short' => 'Reverter',
 'rollbacklink' => 'reverter',
+'rollbacklinkcount' => 'reverter $1 {{PLURAL:$1|edição|edições}}',
+'rollbacklinkcount-morethan' => 'reverter mais de $1 {{PLURAL:$1|edição|edições}}',
 'rollbackfailed' => 'A reversão falhou',
 'cantrollback' => 'Não foi possível reverter a edição; o último contribuidor é o único autor desta página',
 'alreadyrolled' => 'Não foi possível reverter a última edição de [[:$1]] por [[User:$2|$2]] ([[User talk:$2|discussão]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]);
@@ -2481,7 +2486,7 @@ Esta é a configuração atual para a página '''$1''':",
 'protect-summary-cascade' => 'p. progressiva',
 'protect-expiring' => 'expira em $1 (UTC)',
 'protect-expiring-local' => 'expira $1',
-'protect-expiry-indefinite' => 'indefinido',
+'protect-expiry-indefinite' => 'tempo indefinido',
 'protect-cascade' => '"Proteção progressiva" - proteja quaisquer páginas que estejam incluídas nesta.',
 'protect-cantedit' => 'Você não pode alterar o nível de proteção desta página uma vez que você não se encontra habilitado a editá-la.',
 'protect-othertime' => 'Outra duração:',
@@ -2914,6 +2919,7 @@ Todas as ações de importação transwiki são registradas no [[Special:Log/imp
 'import-interwiki-templates' => 'Incluir todas as predefinições',
 'import-interwiki-submit' => 'Importar',
 'import-interwiki-namespace' => 'Domínio de destino:',
+'import-interwiki-rootpage' => 'Página raiz de destino (opcional):',
 'import-upload-filename' => 'Nome do arquivo:',
 'import-comment' => 'Comentário:',
 'importtext' => 'Por favor, exporte o arquivo do wiki de origem utilizando a página especial [[Special:Export|exportação de páginas]].
@@ -2946,6 +2952,7 @@ Salve o arquivo no seu computador e importe-o aqui.',
 'import-error-interwiki' => 'A página "$1" não pôde ser importada pois seu nome está reservado para um link interwik.',
 'import-error-special' => 'A página "$1" não pôde ser importada porque ela pertence a um espaço nominal especial que não suporta páginas.',
 'import-error-invalid' => 'A página "$1" não pôde ser importada por seu nome ser inválido.',
+'import-rootpage-invalid' => 'A página raiz dada é um título inválido.',
 
 # Import log
 'importlogpage' => 'Registro de importações',
@@ -3080,11 +3087,30 @@ Tal bloqueio foi provavelmente causado por uma ligação para um ''website'' ext
 
 # Info page
 'pageinfo-title' => 'Informações sobre "$1"',
+'pageinfo-header-basic' => 'Informação básica',
 'pageinfo-header-edits' => 'Histórico de edições',
+'pageinfo-header-restrictions' => 'Proteção da página',
+'pageinfo-header-properties' => 'Propriedades da página',
+'pageinfo-display-title' => 'Exibir título',
+'pageinfo-length' => 'Tamanho da página (em bytes)',
+'pageinfo-article-id' => 'ID da página',
+'pageinfo-robot-policy' => 'Status do mecanismo de pesquisa',
+'pageinfo-robot-index' => 'Indexável',
+'pageinfo-robot-noindex' => 'Não indexável',
 'pageinfo-views' => 'Número de visitas',
-'pageinfo-watchers' => 'Número de pessoas vigiando',
-'pageinfo-edits' => 'Número de edições',
-'pageinfo-authors' => 'Número de autores individuais',
+'pageinfo-watchers' => 'Número de vigilantes da página',
+'pageinfo-redirects-name' => 'Redireciona para esta página',
+'pageinfo-subpages-name' => 'Subpáginas desta página',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|redirecionamento|redirecionamentos}}; $3 {{PLURAL:$3|não-redirecionamento|não-redirecionamentos}})',
+'pageinfo-firstuser' => 'Criador da página',
+'pageinfo-firsttime' => 'Data de criação da página',
+'pageinfo-lastuser' => 'Último editor',
+'pageinfo-lasttime' => 'Data da última edição',
+'pageinfo-edits' => 'Número total de edições',
+'pageinfo-authors' => 'Número total de autores distintos',
+'pageinfo-recent-edits' => 'Número de edições recentes (nos últimos $1)',
+'pageinfo-recent-authors' => 'Número recente de autores distintos',
+'pageinfo-restriction' => 'Proteção da página ({{lcfirst:$1}})',
 
 # Skin names
 'skinname-standard' => 'Clássico',
index 01d7c01..d20b731 100644 (file)
@@ -82,6 +82,8 @@
  * @author Nemo bis
  * @author Niels
  * @author Nike
+ * @author Njardarlogar
+ * @author Nnemo
  * @author Node ue
  * @author Octahedron80
  * @author Od1n
@@ -463,7 +465,8 @@ Also used as title of [[Special:Search]] page in [[Special:SpecialPages]].
 'toolbox' => 'The title of the toolbox below the search menu.',
 'otherlanguages' => 'This message is shown under the toolbox. It is used if there are interwiki links added to the page, like <tt><nowiki>[[</nowiki>en:Interwiki article]]</tt>.
 {{Identical|Otherlanguages}}',
-'redirectedfrom' => 'The text displayed when a certain page is redirected to another page. Variable <tt>$1</tt> contains the name of the page user came from.',
+'redirectedfrom' => 'The text displayed when a certain page is redirected to another page.
+*<tt>$1</tt> contains the name of the page user came from.',
 'redirectpagesub' => 'Displayed under the page title of a page which is a redirect to another page, see [{{fullurl:Project:Translators|redirect=no}} Project:Translators] for example.
 
 {{Identical|Redirect page}}',
@@ -704,8 +707,12 @@ $1 is a filename, I think.',
 * $1: the protection type, e.g. "protect" for fully protected pages',
 'viewsourcetext' => 'The text shown when displaying the source of a page that the user has no permission to edit',
 'viewyourtext' => 'Same as {{msg-mw|viewsourcetext}} but when showing the text submitted by the user, this happens e.g. when the user was blocked while he is editing the page',
-'protectedinterface' => 'Message shown if a user without the "editinterface" right tries to edit a page in the MediaWiki namespace.',
-'editinginterface' => "A message shown when editing pages in the namespace MediaWiki:. In the [http://translatewiki.net/wiki/Main_Page?setlang=en URL], '''change \"setlang=en\" to your own language code.'''",
+'protectedinterface' => 'Message shown if a user without the "editinterface" right tries to edit a page in the MediaWiki namespace.
+
+See also {{msg-mw|editinginterface}}.',
+'editinginterface' => 'A message shown when editing pages in the namespace MediaWiki:.
+
+See also {{msg-mw|protectedinterface}}.',
 'ns-specialprotected' => 'Error message displayed when trying to edit a page in the Special namespace',
 'titleprotected' => 'Use $1 for GENDER.',
 'invalidtitle-knownnamespace' => 'Displayed when an invalid title was encountered (generally in a list), but the namespace number is known to exist.
@@ -792,7 +799,7 @@ $1 is the minimum number of characters in the password.',
 'mailmypassword' => 'Shown at [[Special:UserLogin]]',
 'passwordremindertitle' => 'Title of e-mail which contains temporary password',
 'passwordremindertext' => 'This text is used in an e-mail sent when a user requests a new temporary password (he has forgotten his password) or when an sysop creates a new user account choosing to have password and username sent to the new user by e-mail.
-* $1 is an IP addres. Example: 123.123.123.123
+* $1 is an IP address. Example: 123.123.123.123
 * $2 is a username. Example: Joe
 * $3 is a password. Example: er##@fdas!
 * $4 is a URL. Example: http://wiki.example.com
@@ -1404,8 +1411,11 @@ This is a search result (and I guess search engine) dependent messages. I do not
 
 This is a search result (and I guess search engine) dependent messages. I do not know how to trigger the feature. The message is displayed if the search result contains information that related pages can also be provided from the search engine. I assume this is "More Like This" functionality. Microsoft glossary defines MLT as "A way to refine search by identifying the right set of documents and then locating similar documents. This allows the searcher to control the direction of the search and focus on the most fruitful lines of inquiry."[http://www.microsoft.com/enterprisesearch/en/us/search-glossary.aspx]',
 'searchall' => '{{Identical|All}}',
-'showingresults' => "This message is used on some special pages such as 'Wanted categories'. $1 is the total number of results in the batch shown and $2 is the number of the first item listed.",
-'showingresultsnum' => '$3 is the number of results on the page and $2 is the first number in the batch of results.',
+'showingresults' => "This message is used on some special pages such as 'Wanted categories'.
+*$1 is the total number of results in the batch shown.
+*$2 is the number of the first item listed.",
+'showingresultsnum' => '*$3 is the number of results on the page.
+*$2 is the first number in the batch of results.',
 'showingresultsheader' => 'Used in search results of [[Special:Search]].',
 'nonefound' => 'This message appears on the search results page if no results are found.
 {{doc-important|Do not translate "all:".}}',
@@ -1926,7 +1936,7 @@ Does not work under $wgMiserMode ([[mwr:48986|r48986]]).',
 
 {{Identical|Upload file}}',
 'uploadnologin' => '{{Identical|Not logged in}}',
-'uploadtext' => "{{doc-important|''thumb'' and ''left'' are magic words. Leave it untranslated!}}
+'uploadtext' => "{{doc-important|''thumb'' and ''left'' are magic words. Leave them untranslated!}}
 Text displayed when uploading a file using [[Special:Upload]].",
 'upload-permitted' => 'Used in [[Special:Upload]].',
 'upload-preferred' => 'Used in [[Special:Upload]].',
@@ -3490,7 +3500,7 @@ See also {{msg-mw|Anonuser}} and {{msg-mw|Siteusers}}.',
 'pageinfo-recent-edits' => 'The number of times the page has been edited recently. $1 is a localised duration (e.g. 9 days).',
 'pageinfo-recent-authors' => 'The number of users who have edited the page recently.',
 'pageinfo-restriction' => 'Parameters:
-* $1 is the type of page protection (message restriction-$type, preferably in lowercase). If your language doesn\'t have small and capital letters, you can simply write <nowiki><code>$1</code></nowiki>.',
+* $1 is the type of page protection (message restriction-$type, preferably in lowercase). If your language doesn\'t have small and capital letters, you can simply write <nowiki>$1</nowiki>.',
 'pageinfo-magic-words' => 'The list of magic words on the page. Parameters:
 * $1 is the number of magic words on the page.',
 'pageinfo-hidden-categories' => 'The list of hidden categories on the page. Parameters:
@@ -3552,7 +3562,10 @@ Parameters:
 'svg-long-desc' => 'Displayed under an SVG image at the image description page. Note that argument 3 is a string that includes the file size unit symbol. See for example [[:File:Yes check.svg]].
 
 Start with a lowercase letter, unless the first word is “SVG”.',
-'svg-long-desc-animated' => 'Displayed under an SVG image at the image description page if the image is animated. Non-animated images use {{msg-mw|svg-long-desc}}. $1 is width, $2 is height, and $3 is file size, including unit (for example "10 KB").
+'svg-long-desc-animated' => 'Displayed under an SVG image at the image description page if the image is animated. Non-animated images use {{msg-mw|svg-long-desc}}.
+* $1 is the width in pixels
+* $2 is the height in pixels, and 
+* $3 is the file size including a unit (for example "10 KB").
 
 Start with a lowercase letter, unless the first word is “SVG”.',
 'show-big-image' => 'Displayed under an image at the image description page, when it is displayed smaller there than it was uploaded.',
@@ -4607,7 +4620,8 @@ This is being used in [[Special:Version]], preceeding the subversion revision nu
 'version-software-product' => 'Shown in [[Special:Version]]',
 'version-software-version' => '{{Identical|Version}}',
 'version-entrypoints' => 'Header on [[Special:Version]] above a table that lists the URLs of various entry points in this MediaWiki installation. Entry points are the "places" where the wiki\'s content and information can be accessed in various ways, for instance the standard index.php which shows normal pages, histories etc.',
-'version-entrypoints-header-entrypoint' => 'ପ୍ରବେଶ ବିନ୍ଦୁ',
+'version-entrypoints-header-entrypoint' => 'Header for the first column in the entry points table on [[Special:Version]].
+See also {{msg-mw|Version-entrypoints}}',
 'version-entrypoints-header-url' => 'Header for the second column in the entry points table on [[Special:Version]].',
 'version-entrypoints-articlepath' => 'A short description of the article path entry point. Links to the mediawiki.org documentation page for $wgArticlePath.',
 'version-entrypoints-scriptpath' => 'A short description of the script path entry point. Links to the mediawiki.org documentation page for $wgScriptPath.',
index beed6e8..5b7afb9 100644 (file)
@@ -682,10 +682,11 @@ Vă rugăm să încercați din nou în câteva minute.',
 'protectedpagetext' => 'Această pagină este protejată împotriva modificărilor.',
 'viewsourcetext' => 'Se poate vizualiza și copia conținutul acestei pagini:',
 'viewyourtext' => "Se poate vizualiza și copia conținutul '''modificărilor dumneavoastră''' efectuate asupra acestei pagini:",
-'protectedinterface' => 'Această pagină asigură textul interfeței pentru software și este protejată pentru a preveni abuzurile.',
+'protectedinterface' => 'Această pagină asigură textul interfeței pentru software și este protejată pentru a preveni abuzurile.
+Pentru a adăuga sau modifica traduceri corespunzătoare tuturor wikiurilor, utilizați [//translatewiki.net/ translatewiki.net], proiectul MediaWiki de localizare.',
 'editinginterface' => "'''Avertizare''': Modificați o pagină care este folosită pentru a furniza textul interfeței software.
-Modificările aduse acestei pagini vor afecta aspectul interfeței pentru alți utilizatori.
-Pentru traduceri, considerați utilizarea [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], proiectul MediaWiki de localizare.",
+Modificările aduse acestei pagini vor afecta aspectul interfeței pentru alți utilizatori ai acestui wiki.
+Pentru a adăuga sau modifica traduceri corespunzătoare tuturor wikiurilor, utilizați [//translatewiki.net/ translatewiki.net], proiectul MediaWiki de localizare.",
 'sqlhidden' => '(interogare SQL ascunsă)',
 'cascadeprotected' => 'Această pagină a fost protejată la scriere deoarece este inclusă în {{PLURAL:$1|următoarea pagină|următoarele pagini}}, care {{PLURAL:$1|este protejată|sunt protejate}} în cascadă:
 $2',
@@ -961,8 +962,7 @@ Puteți [[Special:Search/{{PAGENAME}}|căuta acest titlu]] în alte pagini,
 puteți <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} căuta înregistrări în jurnale] 
 sau puteți [{{fullurl:{{FULLPAGENAME}}|action=edit}} crea această pagină]</span>.',
 'noarticletext-nopermission' => 'Actualmente, această pagină este lipsită de conținut.
-Puteți [[Special:Search/{{PAGENAME}}|căuta acest titlu]] în alte pagini
-sau puteți <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} căuta înregistrări în jurnale]</span>.',
+Puteți [[Special:Search/{{PAGENAME}}|căuta acest titlu]] în alte pagini sau puteți <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} căuta înregistrări în jurnale]</span>; nu aveți însă permisiunea de a crea această pagină.',
 'missing-revision' => 'Versiunea nr. $1 a paginii „{{PAGENAME}}” nu există.
 
 Acest lucru se întâmplă de obicei atunci când se accesează o legătură expirată către istoricul unei pagini șterse.
@@ -1228,10 +1228,10 @@ Nu ai acces asupra lui.',
 'revdelete-no-change' => "'''Atenție:''' elementul datat $2, $1 are deja aplicată vizibilitatea cerută.",
 'revdelete-concurrent-change' => 'Eroare la modificarea elementului datat $2, $1: statutul său a fost modificat de altcineva în timpul acestei modificări.',
 'revdelete-only-restricted' => 'Eroare în timpul suprimării elementului datat $1, $2: nu puteți suprima elemente la vizualizarea de către administratori fără a marca una din celelalte opțiuni de suprimare.',
-'revdelete-reason-dropdown' => '*Motive de ascundere
+'revdelete-reason-dropdown' => '*Motive generale de ștergere
 ** Violarea drepturilor de autor
-** Informații personale
-** Obscenități
+** Comentarii inadecvate sau informații personale
+** Nume de utilizator inadecvat
 ** Atacuri la persoană',
 'revdelete-otherreason' => 'Motiv suplimentar, detalii',
 'revdelete-reasonotherlist' => 'Alt motiv',
@@ -1429,7 +1429,7 @@ Aici se află o combinație generată întâmplător pe care o puteți folosi: $
 'timezoneregion-indian' => 'Oceanul Indian',
 'timezoneregion-pacific' => 'Oceanul Pacific',
 'allowemail' => 'Acceptă e-mail de la alți utilizatori',
-'prefs-searchoptions' => 'Opțiuni de căutare',
+'prefs-searchoptions' => 'Căutare',
 'prefs-namespaces' => 'Spații de nume',
 'defaultns' => 'Altfel, caută în aceste spații de nume:',
 'default' => 'standard',
@@ -1844,7 +1844,7 @@ Dacă problema persistă, contactați un [[Special:ListUsers/sysop|administrator
 'backend-fail-internal' => 'O eroare necunoscută s-a produs în suportul de stocare „$1”.',
 'backend-fail-contenttype' => 'Nu s-a putut determina tipul de conținut al fișierului de stocat la „$1”.',
 'backend-fail-batchsize' => 'Suportul de stocare a furnizat un lot de $1 {{PLURAL:$1|operațiune|operațiuni|de operațiuni}} de fișier; limita este $2 {{PLURAL:$2|operațiune|operațiuni|de operațiuni}}.',
-'backend-fail-usable' => 'Imposibil de scris fișierul $1 din cauza permisiunilor insuficiente sau din cauza directoarelor/containerelor lipsă.',
+'backend-fail-usable' => 'Imposibil de citit sau scris fișierul „$1” din cauza permisiunilor insuficiente sau din cauza directoarelor/containerelor lipsă.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Imposibil de conectat la baza de date a jurnalului pentru terminatul de stocare „$1”.',
@@ -2253,7 +2253,7 @@ Protocoale suportate: <code>$1</code> (nu adăugați niciunul dintre acestea în
 
 # Special:ListGroupRights
 'listgrouprights' => 'Permisiuni grupuri de utilizatori',
-'listgrouprights-summary' => 'Mai jos se află o listă a grupurilor de utilizatori definită în aceast wiki, împreună cu permisiunile de acces asociate.
+'listgrouprights-summary' => 'Mai jos se află o listă a grupurilor de utilizatori definite în acest wiki, împreună cu permisiunile de acces asociate.
 Pot exista [[{{MediaWiki:Listgrouprights-helppage}}|informații suplimentare]] despre permisiuni individuale.',
 'listgrouprights-key' => '* <span class="listgrouprights-granted">Drept acordat</span>
 * <span class="listgrouprights-revoked">Drept revocat</span>',
@@ -3111,7 +3111,7 @@ Permite adăugarea unui motiv în descrierea modificărilor',
 'pageinfo-authors' => 'Număr total de autori distincți',
 'pageinfo-recent-edits' => 'Număr de modificări recente (în ultima perioadă de $1)',
 'pageinfo-recent-authors' => 'Număr de autori distincți recenți',
-'pageinfo-restriction' => 'Protecție pagină (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Protecție pagină ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Cuvânt magic|Cuvinte magice}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Categorie ascunsă|Categorii ascunse}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Format inclus|Formate incluse}} ($1)',
index 8d1a093..cfbc010 100644 (file)
@@ -416,7 +416,8 @@ Pe piacere prueve cchiù tarde.",
 'protectedpagetext' => 'Sta pàgene ha state prutette pe no fa fà cangiaminde a uecchje.',
 'viewsourcetext' => "Tu puè vedè e cupià 'a sorgente de sta pàgene:",
 'viewyourtext' => "Tu puè vedè e copià 'a sorgende de '''le cangiaminde tune''' a sta pàgene:",
-'protectedinterface' => "Sta pàgene te dè l'inderfacce de teste pìu software e jè blocchete pe prevenì l'abbuse.",
+'protectedinterface' => "Sta pàgene dèje 'nu teste de l'inderfacce pu software de sta uicchi, e jè prutette pe prevenìe l'abbuse.
+Pe aggiungere o cangià le traduziune pe tutte le uicchi, pe piacere ause [//translatewiki.net/ translatewiki.net], 'u proggette de localizzazzione de MediaUicchi.",
 'editinginterface' => "'''Fà attenziò:'''  Tu ste cange 'na pàgene ca jè ausete pe dà 'n'inderfacce de teste p'u software.
 Le cangiaminde de sta pàgene vonne a mettene mane sus a l'inderfacce utende pe l'otre utinde.
 Pe traduziune, pe piacere vide ce ause [//translatewiki.net/wiki/Main_Page?setlang=roa-tara translatewiki.net], 'u pruggette de localizzazione de MediaUicchi.",
@@ -986,7 +987,9 @@ Pe piacere condrolle l'archivije.",
 'revdelete-only-restricted' => "Errore scunnènne l'artichele datate $2, $1: tu non ge puè sopprimere l'artichele da 'a viste de le amministrature senze ca scacchie pure une de le otre opziune de soppressione.",
 'revdelete-reason-dropdown' => "*Mutive comune pa scangellazzione
 ** Violazione d'u copyright
-** 'Mbormaziune personale inappropriate",
+** 'Mbormaziune personale o commende inappropriate
+** Nome utende inappropriate
+** 'Mbormaziune potenzialmende diffamatorie",
 'revdelete-otherreason' => 'Otre/addizionale mutive:',
 'revdelete-reasonotherlist' => 'Otre mutive',
 'revdelete-edit-reasonlist' => "Mutive d'a scangellazione d'u cangiamende",
@@ -1186,7 +1189,7 @@ Aqquà ste 'nu valore generate a uecchije ca tu puè ausà: $1",
 'timezoneregion-indian' => 'Oceano Indiane',
 'timezoneregion-pacific' => 'Oceano Pacifiche',
 'allowemail' => "Abbilite l'e-mail da l'otre utinde",
-'prefs-searchoptions' => 'Opzione de ricerche',
+'prefs-searchoptions' => 'Cirche',
 'prefs-namespaces' => 'Namespaces',
 'defaultns' => "Cirche jndr'à chiste namespace:",
 'default' => 'defolt',
@@ -1625,7 +1628,7 @@ Ce 'u probbleme angore jè presende, condatte 'n'[[Special:ListUsers/sysop|ammin
 'backend-fail-internal' => "'N'errore scanusciute s'à verificate jndr'à l'archivije de rrete \"\$1\".",
 'backend-fail-contenttype' => 'Non ge pozze capìe \'u tipe de condenute d\'u file da reggistrà sus a "$1".',
 'backend-fail-batchsize' => "L'archivije de rrete ha date 'nu processe de $1 {{PLURAL:$1|operazione|operaziune}} sus a le file; 'u limite jè $2 {{PLURAL:$2|operazione|operaziune}}.",
-'backend-fail-usable' => 'Non ge pozze scrivere \'u file "$1" purcé mangane le permesse sufficiende o non g\'esiste \'a cartelle/contenitore.',
+'backend-fail-usable' => 'Non ge pozze leggere o scrivere \'u file "$1" purcé mangane le permesse sufficiende o non g\'esiste \'a cartelle/condenitore.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Non ge pozze collegà a l\'archivije d\'u database pe memorizzà \'u rrete "$1".',
@@ -2712,6 +2715,7 @@ Tutte le aziune de 'mbortaziune 'mbrà le Uicchi sonde reggistrate jndr'à l'[[S
 'import-interwiki-templates' => 'Inglude tutte le template',
 'import-interwiki-submit' => "'Mborte",
 'import-interwiki-namespace' => 'Namespace de destinazione:',
+'import-interwiki-rootpage' => 'Pàgena prengepàale de destinazione (opzionale):',
 'import-upload-filename' => "Nome d'u file:",
 'import-comment' => 'Commende:',
 'importtext' => "Pe piacere esporte 'u file da 'a Uicchi sorgende ausanne l'[[Special:Export|utilità de esportazione]].
@@ -2748,6 +2752,8 @@ Reggistrele sus a 'u combiuter tune e carechele aqquà.",
 'import-error-special' => "'A pagena \"\$1\" non g'ha state 'mbortate purcé apponde a 'nu namespace speciale ca non g'è permesse a le pàggene normale.",
 'import-error-invalid' => "'A pàgene \"\$1\" non g'ha state 'mbortate purcé 'u nome jè invalide.",
 'import-options-wrong' => '{{PLURAL:$2|opzione|opziune}} sbagliate: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => "'A pàgene radice date tène 'nu titole invalide.",
+'import-rootpage-nosubpage' => 'Namespace "$1" d\'a pàgene prengepàle non ge permette le sottopàggene.',
 
 # Import log
 'importlogpage' => "Archivie de le 'mbortaziune",
@@ -2917,6 +2923,7 @@ Stu fatte ha state causate da 'nu collegamende a 'nu site esterne ca appartene a
 'pageinfo-redirects-name' => 'Redirezionaminde a sta pàgene',
 'pageinfo-redirects-value' => '$1',
 'pageinfo-subpages-name' => 'Sottopàggene de sta pàgene',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|ridirezionate|ridirezionate}}; $3 {{PLURAL:$3|none ridirezionate|none ridirezionate}})',
 'pageinfo-firstuser' => "Ccrejatore d'a pàgene",
 'pageinfo-firsttime' => "Date d'a ccrejazione d'a pàgene",
 'pageinfo-lastuser' => 'Urteme cangiatore',
@@ -2925,7 +2932,10 @@ Stu fatte ha state causate da 'nu collegamende a 'nu site esterne ca appartene a
 'pageinfo-authors' => 'Numere Totale de autore diverse',
 'pageinfo-recent-edits' => "Numere de le urteme cangiaminde ('mbonde a $1)",
 'pageinfo-recent-authors' => 'Numere de le urteme autore diverse',
+'pageinfo-restriction' => "Protezione d'a pàgene ({{lcfirst:$1}})",
 'pageinfo-magic-words' => '{{PLURAL:$1|Parole|Parole}} maggiche ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Categorije|Categorije}} scunnute ($1)',
+'pageinfo-templates' => 'Esclude {{PLURAL:$1|template|template}} ($1)',
 
 # Skin names
 'skinname-standard' => 'Classeche',
@@ -2991,6 +3001,8 @@ Ce l'esegue sus a 'u sisteme tue pò essere ca se combromette.",
 'file-info-png-looped' => 'infinite',
 'file-info-png-repeat' => 'eseguite $1 {{PLURAL:$1|vote|vote}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|frame|frame}}',
+'file-no-thumb-animation' => "'''Vide bbuène: Pe limitaziune tecniche, miniature de ste file non ge ponne essere animate.'''",
+'file-no-thumb-animation-gif' => "'''Vide bbuène: Pe limitaziune tecniche, miniature de resoluzione ierte de immaggine GIF cumme a queste non ge ponne essere animate.'''",
 
 # Special:NewFiles
 'newimages' => 'Gallerie de le fail nuève',
index be9b03d..1dd909d 100644 (file)
@@ -773,10 +773,11 @@ $1',
 'protectedpagetext' => 'Эта страница закрыта для редактирования.',
 'viewsourcetext' => 'Вы можете просмотреть и скопировать исходный текст этой страницы:',
 'viewyourtext' => "Вы можете просмотреть и скопировать исходный текст '''ваших правок''' на этой странице:",
-'protectedinterface' => 'Эта страница содержит интерфейсное сообщение программного обеспечения. Во избежание вандализма её изменение запрещено.',
+'protectedinterface' => 'Эта страница содержит интерфейсное сообщение программного обеспечения. Во избежание вандализма её изменение запрещено.
+Чтобы добавить или изменить перевод этого сообщения во всех вики, пожалуйста, используйте сайт локализации MediaWiki [//translatewiki.net/ translatewiki.net]',
 'editinginterface' => "'''Внимание:''' Вы редактируете страницу, содержащую текст интерфейса программного обеспечения.
-Её изменение повлияет на внешний вид интерфейса для других пользователей.
\94лÑ\8f Ð¿ÐµÑ\80еводов Ð»Ñ\83Ñ\87Ñ\88е Ð¸Ñ\81полÑ\8cзоваÑ\82Ñ\8c [//translatewiki.net/wiki/Main_Page?setlang=ru translatewiki.net], Ð¿Ñ\80оекÑ\82 Ð¿Ð¾ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ\86ии MediaWiki.",
+Её изменение повлияет на внешний вид интерфейса для других пользователей этой вики.
§Ñ\82обÑ\8b Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ\82Ñ\8c Ð¸Ð»Ð¸ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ\82Ñ\8c Ð¿ÐµÑ\80евод Ñ\8dÑ\82ого Ñ\81ообÑ\89ениÑ\8f, Ð¿Ð¾Ð¶Ð°Ð»Ñ\83йÑ\81Ñ\82а, Ð¸Ñ\81полÑ\8cзÑ\83йÑ\82е Ñ\81айÑ\82 Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ\86ии MediaWiki [//translatewiki.net/ translatewiki.net].",
 'sqlhidden' => '(SQL запрос скрыт)',
 'cascadeprotected' => 'Страница защищена от изменений, поскольку она включена в {{PLURAL:$1|следующую страницу, для которой|следующие страницы, для которых}} включена каскадная защита:
 $2',
@@ -1067,8 +1068,8 @@ $2
 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов],
 или '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} создать страницу с таким названием]'''</span>.",
 'noarticletext-nopermission' => 'В настоящее время на этой странице нет текста.
\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е [[Special:Search/{{PAGENAME}}|найÑ\82и Ñ\83поминание Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ\8f]] Ð² Ð´Ñ\80Ñ\83гиÑ\85 Ñ\81Ñ\82аÑ\82Ñ\8cÑ\8fх,
-или <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов].</span>',
\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е [[Special:Search/{{PAGENAME}}|найÑ\82и Ñ\83поминание Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ\8f]] Ð½Ð° Ð´Ñ\80Ñ\83гиÑ\85 Ñ\81Ñ\82Ñ\80аниÑ\86ах,
+или <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов].</span> У вас нет разрешения создать данную страницу.',
 'missing-revision' => 'Версия $1 страницы «{{PAGENAME}}» не существует.
 
 Это обычно бывает, если последовать по устаревшей ссылке на страницу, которая была удалена.
@@ -1333,9 +1334,10 @@ $1",
 'revdelete-concurrent-change' => 'Ошибка изменения записи от $2, $1: её статус был изменён кем-то другим, пока вы пытались изменить его.
 Пожалуйста, проверьте журналы.',
 'revdelete-only-restricted' => 'Ошибка сокрытия записи от $2 $1: вы не можете скрыть запись от просмотра администраторами без выбора одной из других настроек сокрытия.',
-'revdelete-reason-dropdown' => 'Стандартные причины удаления
+'revdelete-reason-dropdown' => 'Стандартные причины удаления
 ** Нарушение авторских прав
-** Неуместные личные сведения',
+** Неуместные личные сведения
+** Потенциально клеветнические сведения',
 'revdelete-otherreason' => 'Другая/дополнительная причина:',
 'revdelete-reasonotherlist' => 'Другая причина',
 'revdelete-edit-reasonlist' => 'Править список причин',
@@ -1529,7 +1531,7 @@ $1",
 'timezoneregion-indian' => 'Индийский океан',
 'timezoneregion-pacific' => 'Тихий океан',
 'allowemail' => 'Разрешить приём электронной почты от других участников',
-'prefs-searchoptions' => 'Ð\9dаÑ\81Ñ\82Ñ\80ойки Ð¿Ð¾Ð¸Ñ\81ка',
+'prefs-searchoptions' => 'Ð\9fоиÑ\81к',
 'prefs-namespaces' => 'Пространства имён',
 'defaultns' => 'Иначе искать в следующих пространствах имён:',
 'default' => 'по умолчанию',
@@ -1955,7 +1957,7 @@ $1',
 'backend-fail-internal' => 'Произошла неизвестная ошибка в хранилище «$1».',
 'backend-fail-contenttype' => 'Не удалось определить тип содержимого файла, чтобы сохранить его в «$1».',
 'backend-fail-batchsize' => 'Хранилище получило блок из $1 {{PLURAL:$1|файловой операции|файловых операций|файловых операций}}, ограничение составляет $2 {{PLURAL:$1|операцию|операции|файловых операций}}.',
-'backend-fail-usable' => 'Ð\9dе Ñ\83далоÑ\81Ñ\8c Ð·Ð°Ð¿Ð¸Ñ\81аÑ\82Ñ\8c Ñ\84айл $1 из-за нехватки прав или отсутствия нужных папок.',
+'backend-fail-usable' => 'Ð\9dе Ñ\83далоÑ\81Ñ\8c Ð¿Ñ\80оÑ\87иÑ\82аÑ\82Ñ\8c Ð¸Ð»Ð¸ Ð·Ð°Ð¿Ð¸Ñ\81аÑ\82Ñ\8c Ñ\84айл Â«$1» из-за нехватки прав или отсутствия нужных папок.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Не удалось подключиться к базе данных журнала для хранилища «$1».',
@@ -3225,7 +3227,7 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-authors' => 'Общее число различных авторов',
 'pageinfo-recent-edits' => 'Правок за последнее время (в течение $1)',
 'pageinfo-recent-authors' => 'Уникальных авторов за последнее время',
-'pageinfo-restriction' => 'Защита страницы (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Защита страницы ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Магическое слово|Магические слова}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Скрытая категория|Скрытых категорий}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Шаблон|Шаблонов}} ($1)',
index 6d3ac8a..b952907 100644 (file)
@@ -383,7 +383,7 @@ $1',
 'newmessagesdifflink' => 'послїдня зміна',
 'youhavenewmessagesfromusers' => 'Мате $1 од {{PLURAL:$3|іншого хоснователя|$3 іншых хоснователїв}} ($2).',
 'youhavenewmessagesmanyusers' => 'Мате $1 од много далшых хоснователїв ($2).',
-'newmessageslinkplural' => '{{PLURAL:$1|ное повідомлїня|новы повідомлїня}}',
+'newmessageslinkplural' => '{{PLURAL:$1|нове Ð¿Ð¾Ð²Ñ\96домлÑ\97нÑ\8f|новÑ\8b Ð¿Ð¾Ð²Ñ\96домлÑ\97нÑ\8f}}',
 'newmessagesdifflinkplural' => 'остатня {{PLURAL:$1|зміна|зміны|змін}}',
 'youhavenewmessagesmulti' => 'Маєте новы ознамы на $1',
 'editsection' => 'едіт.',
index 8ffb44f..6e42444 100644 (file)
@@ -2991,7 +2991,7 @@ $2 इति प्रकारस्य अवरोधं कर्तुं 
 'pageinfo-authors' => 'प्रत्येककर्तॄणां समग्रा सङ्ख्या ।',
 'pageinfo-recent-edits' => 'सद्योजातसम्पादनानां सङ्ख्या (गतेषु $1 दिनेषु)',
 'pageinfo-recent-authors' => 'प्रत्येककर्तॄणां सद्यःकालीना सङ्ख्या ।',
-'pageinfo-restriction' => 'पृष्ठसंरक्षणम्  (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'पृष्ठसंरक्षणम्  ({{lcfirst:$1}})',
 'pageinfo-magic-words' => 'मान्त्रिक{{PLURAL:$1|शब्दः|शब्दाः}} ($1)',
 'pageinfo-hidden-categories' => 'गोपित{{PLURAL:$1|वर्गः|वर्गाः}} ($1)',
 'pageinfo-templates' => 'समायोजित{{PLURAL:$1|फलकम्|फलकानि}} ($1)',
index 8829a0b..f25c1fb 100644 (file)
@@ -125,7 +125,6 @@ $messages = array(
 'tog-watchlisthideown' => 'Čiega mu iežan rievdadusaid',
 'tog-watchlisthidebots' => 'Čiega bot-prográmmaid rievdadusaid',
 'tog-watchlisthideminor' => 'Čiega unna rievdadusaid',
-'tog-nolangconversion' => 'Ále daga rievdadusaid giellavariánttaid gaskal',
 'tog-ccmeonemails' => 'Sádde munnje kopiija e-poasttain, maid sádden eará geavaheddjiide',
 
 'underline-always' => 'Álo',
index 9b3eb3e..a11933a 100644 (file)
@@ -215,7 +215,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Sakrij patrolirane izmjene u nedavnim promjenama',
 'tog-newpageshidepatrolled' => 'Sakrij patrolirane stranice sa spiska novih stranica',
 'tog-extendwatchlist' => 'Proširi spisak praćenja za pogled svih izmjena, ne samo nedavnih',
-'tog-usenewrc' => 'Korištenje poboljšanog spiska nedavnih izmjena (zahtijeva JavaScript)',
+'tog-usenewrc' => 'Promene u grupi po stranici u spisku nedavnih izmhena i nadgledanih stranica (zahtijeva JavaScript)',
 'tog-numberheadings' => 'Automatski numeriši podnaslove',
 'tog-showtoolbar' => 'Pokaži alatnu traku (potreban JavaScript)',
 'tog-editondblclick' => 'Izmijeni stranice dvostrukim klikom (potreban JavaScript)',
@@ -223,17 +223,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Uključite uređivanje odjeljka sa pritiskom na desno dugme miša u naslovu odjeljka (JavaScript)',
 'tog-showtoc' => 'Prikaži sadržaj (u svim stranicama sa više od tri podnaslova)',
 'tog-rememberpassword' => 'Upamti moju prijavu za ovaj preglednik (za maksimum od $1 {{PLURAL:$1|dan|dana}})',
-'tog-watchcreations' => 'Dodaj stranice koje sam napravio u moj spisak praćenja',
-'tog-watchdefault' => 'Dodaj stranice koje uređujem u moj spisak praćenja',
-'tog-watchmoves' => 'Dodaj stranice koje premještam u moj spisak praćenja',
-'tog-watchdeletion' => 'Stranice koje brišem dodaj na moj spisak praćenja',
+'tog-watchcreations' => 'Dodaj stranice koje sam stvorio i dadtoteke koje sam poslao u moj spisak praćenih stranica',
+'tog-watchdefault' => 'Dodaj stranice i datoteke koje izmijenim u spisak praćenja',
+'tog-watchmoves' => 'Dodaj stranice i datoteke koje premjestim na moj spisak praćenja',
+'tog-watchdeletion' => 'Dodaj stranice i datoteke koje izbrišem na moj spisak praćenja',
 'tog-minordefault' => 'Označi da su sve izmjene u pravilu manje',
 'tog-previewontop' => 'Prikaži pretpregled prije kutije za uređivanje',
 'tog-previewonfirst' => 'Prikaži pretpregled na prvoj izmjeni',
 'tog-nocache' => 'Onemogući keš (cache) stranica u pregledniku',
-'tog-enotifwatchlistpages' => 'Pošalji mi e-poštu kad se promijeni stranica na mom spisku praćenja',
+'tog-enotifwatchlistpages' => 'Pošalji mi e-mail kada se promijeni stranica ili datoteka na mom spisku praćenja',
 'tog-enotifusertalkpages' => 'Pošalji mi e-poštu kad se promijeni moja korisnička stranica za razgovor',
-'tog-enotifminoredits' => 'Pošalji mi e-poštu takođe za male izmjene stranica',
+'tog-enotifminoredits' => 'Pošalji mi e-mail i kod manjih izmjena stranica i datoteka',
 'tog-enotifrevealaddr' => 'Otkrij adresu moje e-pošte u porukama obaviještenja',
 'tog-shownumberswatching' => 'Prikaži broj korisnika koji prate',
 'tog-oldsig' => 'Postojeći potpis:',
@@ -471,6 +471,10 @@ $1',
 'youhavenewmessages' => 'Imate $1 ($2).',
 'newmessageslink' => 'novih promjena',
 'newmessagesdifflink' => 'posljednja promjena',
+'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}}',
 'youhavenewmessagesmulti' => 'Imate nove poruke na $1',
 'editsection' => 'uredi',
 'editold' => 'uredi',
@@ -522,12 +526,12 @@ Lista valjanih posebnih stranica se može naći na [[Special:SpecialPages|{{int:
 # General errors
 'error' => 'Greška',
 'databaseerror' => 'Greška u bazi podataka',
-'dberrortext' => 'Desila se sintaksna greška upita baze.
-Ovo se desilo zbog moguće greške u softveru.
-Posljednji pokušani upit je bio:
-<blockquote><tt>$1</tt></blockquote>
-iz funkcije "<tt>$2</tt>".
-MySQL je vratio grešku "<tt>$3: $4</tt>".',
+'dberrortext' => 'Došlo je do sintaktičke greške u bazi.
+Možda se radi o grešci u softveru.
+Posljednji pokušaj upita je glasio:
+<blockquote><code>$1</code></blockquote>
+unutar funkcije „<code>$2</code>“.
+Baza podataka je prijavila grešku „<samp>$3: $4</samp>“.',
 'dberrortextcl' => 'Desila se sintaksna greška upita baze.
 Posljednji pokušani upit je bio:
 "$1"
@@ -564,6 +568,8 @@ Molimo Vas da ovo prijavite [[Special:ListUsers/sysop|administratoru]] sa navođ
 'cannotdelete' => 'Ne može se obrisati stranica ili datoteka "$1".
 Moguć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).
+Nema obrazloženja ili poruke o grešci.',
 'badtitle' => 'Loš naslov',
 'badtitletext' => 'Zatražena stranica je bila nevaljana, prazna ili neispravno povezana s među-jezičkim ili inter-wiki naslovom.
 Može sadržavati jedno ili više slova koja se ne mogu koristiti u naslovima.',
@@ -581,10 +587,10 @@ Pretraga: $2',
 'protectedpagetext' => 'Ova stranica je zaključana da bi se spriječilo uređivanje.',
 'viewsourcetext' => 'Možete vidjeti i kopirati izvorni tekst ove stranice:',
 'viewyourtext' => "Možete da pogledate i kopirate izvor '''vaših izmjena''' na ovoj stranici:",
-'protectedinterface' => 'Ova stranica sadrži tekst interfejsa za softver, pa je zaključana kako bi se spriječile zloupotrebe.',
+'protectedinterface' => 'Ova stranica sadrži tekst interfejsa za softver na ovoj wiki, pa je zaključana kako bi se spriječile zloupotrebe. Kako bi dodali ili promijenili prijevode za sve wikije, molimo koristite [//translatewiki.net/ translatewiki.net], projekt lokalizacije MediaWikija.',
 'editinginterface' => "'''Upozorenje:''' Mijenjate stranicu koja se koristi za tekst interfejsa za softver.
-Promjene na ovoj stranici dovode i do promjena interfejsa za druge korisnike.
-Za prijevode, molimo Vas koristite [//translatewiki.net/wiki/Main_Page?setlang=bs translatewiki.net], projekt prijevoda za MediaWiki.",
+Promjene na ovoj stranici će izazvati promjene korisničkog interfejsa za druge korisnike na ovoj wiki.
+Za prijevode, molimo Vas koristite [//translatewiki.net/wiki/Main_Page?setlang=bs translatewiki.net], projekt lokalizacije MediaWiki.",
 'sqlhidden' => '(SQL pretraga sakrivena)',
 'cascadeprotected' => 'Ova stranica je zaštićena od uređivanja, jer je uključena u {{PLURAL:$1|stranicu zaštićenu|stranice zaštićene}} od uređivanja sa uključenom kaskadnom opcijom:
 $2',
@@ -597,6 +603,10 @@ Kao razlog je naveden "\'\'$2\'\'".',
 'filereadonlyerror' => 'Ne mogu da izmenim datoteku „$1“ jer je riznica „$2“ u režimu za čitanje.
 
 Administrator koji ju je zaključao ponudio je sledeće objašnjenje: „$3“.',
+'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.',
 
 # Virus scanner
 'virus-badscanner' => "Loša konfiguracija: nepoznati anti-virus program: ''$1''",
@@ -617,6 +627,7 @@ Ne zaboravite izmijeniti vlastite [[Special:Preferences|{{SITENAME}} postavke]].
 'remembermypassword' => 'Upamti moju lozinku na ovom kompjuteru (za maksimum od $1 {{PLURAL:$1|dan|dana}})',
 'securelogin-stick-https' => 'Ostanite povezani na HTTPS nakon prijave',
 'yourdomainname' => 'Vaš domen:',
+'password-change-forbidden' => 'Ne možete da promenite lozinku na ovom vikiju.',
 'externaldberror' => 'Došlo je do greške pri vanjskoj autorizaciji baze podataka ili vam nije dopušteno osvježavanje Vašeg vanjskog korisničkog računa.',
 'login' => 'Prijavi se',
 'nav-login-createaccount' => 'Prijavi se / Registruj se',
@@ -872,17 +883,20 @@ Možete [[Special:Search/{{PAGENAME}}|tražiti naslov ove stranice]] u drugim st
 ili [{{fullurl:{{FULLPAGENAME}}|action=edit}} urediti ovu stranicu]</span>.',
 'noarticletext-nopermission' => 'Trenutno nema teksta na ovoj stranici.
 Možete [[Special:Search/{{PAGENAME}}|tražiti ovaj naslov stranice]] na drugim stranicama ili <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti povezane registre]</span>.',
+'missing-revision' => 'Ne mogu da pronađem izmenu br. $1 na stranici pod nazivom „{{PAGENAME}}“.
+
+Ovo se obično dešava kada pratite zastarjelu vezu do stranice koja je obrisana.
+Više informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].',
 'userpage-userdoesnotexist' => 'Korisnički račun "<nowiki>$1</nowiki>" nije registrovan.
 Molimo provjerite da li želite napraviti/izmijeniti ovu stranicu.',
 'userpage-userdoesnotexist-view' => 'Korisnički račun "$1" nije registrovan.',
 'blocked-notice-logextract' => 'Ovaj korisnik je trenutno blokiran.
 Posljednje stavke evidencije blokiranja možete pogledati ispod:',
-'clearyourcache' => "'''Napomena:''' nakon čuvanja, možda ćete morati da očistite keš pregledača.
-*'''Firefox / Safari::''' držite ''Shift'' i kliknite na ''Osveži'', ili pritisnite ''Ctrl-F5'' ili Ctrl-R (''⌘-R'' na Makintošu)
-*'''Google Chrome:''' pritisnite ''Ctrl-Shift-R'' (''⌘-Shift-R'' na Makintošu)
-*'''Internet Explorer: '''držite ''Ctrl'' i kliknite na ''Osveži'', ili pritisnite ''Ctrl-F5''
-*'''Konqueror: '''kliknite na ''Osveži'' ili pritisnite ''F5''
-*'''Opera:''' očistite privremenu memoriju preko menija ''Alatke → Postavke''.",
+'clearyourcache' => "'''Napomena:''' Nakon snimanja možda ćete trebate očistiti cache svog preglednika kako biste vidjeli promjene.
+* '''Firefox / Safari:''' držite ''Shift'' i pritisnite ''Reload'', ili pritisnite bilo ''Ctrl-F5'' ili ''Ctrl-R'' (''Command-R'' na Macu)
+* '''Google Chrome:''' pritisnite ''Ctrl-Shift-R'' (''Command-Shift-R'' na Macu)
+* '''Internet Explorer:''' držite ''Ctrl'' i kliknite ''Refresh'', ili pritisnite ''Ctrl-F5''
+* '''Opera:''' očistite međuspremnik u ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''Sugestija:''' Koristite 'Prikaži izgled' dugme da testirate svoj novi CSS prije nego što ga snimite.",
 'userjsyoucanpreview' => "'''Sugestija:''' Koristite 'Prikaži izgled' dugme da testirate svoj novi JS prije nego što ga snimite.",
 'usercsspreview' => "'''Zapamtite ovo je samo izgled Vašeg CSS-a.'''
@@ -995,6 +1009,13 @@ Ovakvi argumenti se trebaju izbjegavati.",
 'parser-template-loop-warning' => 'Otkrivena kružna greška u šablonu: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Dubina uključivanja šablona prekoračena ($1)',
 'language-converter-depth-warning' => 'Prekoračena granica dubine jezičkog pretvarača ($1)',
+'node-count-exceeded-category' => 'Stranice sa prekoračenim brojem čvorova',
+'node-count-exceeded-warning' => 'Stranica u kojoj je prekoračen broj čvorova',
+'expansion-depth-exceeded-category' => 'Stranice koje su prekoračile dubinu proširenja',
+'expansion-depth-exceeded-warning' => 'Na ovoj stranici dubina proširenja je prevelika',
+'parser-unstrip-loop-warning' => 'Utvrđena je petlja',
+'parser-unstrip-recursion-limit' => 'Dosegnuto je ograničenje rekurzije ($1)',
+'converter-manual-rule-error' => 'Pronađena je greška u pravilu za ručno pretvaranje jezika',
 
 # "Undo" feature
 'undo-success' => 'Izmjena se može vratiti.
@@ -1131,7 +1152,8 @@ Molimo provjerite zapise.',
 'revdelete-only-restricted' => 'Greška pri sakrivanju stavke od dana $2, $1: ne možete ukloniti stavke od pregledavanja administratora bez da odaberete neku od drugih opcija za uklanjanje.',
 'revdelete-reason-dropdown' => '*Uobičajeni razlozi brisanja
 ** Kršenje autorskih prava
-** Neadekvatni lični podaci
+** Neprimjereni komentari ili lični podaci
+** Neprimjereno korisničko ime
 ** Potencijalno klevetničke informacije',
 'revdelete-otherreason' => 'Ostali/dodatni razlog:',
 'revdelete-reasonotherlist' => 'Ostali razlozi',
@@ -1175,6 +1197,8 @@ Korištenje navigacionih linkova će resetovati ovaj stupac.',
 
 # Diffs
 'history-title' => 'Historija izmjena stranice "$1"',
+'difference-title' => 'Razlike između izmjena na stranici "$1"',
+'difference-title-multipage' => 'Razlika između stranica "$1" i "$2"',
 'difference-multipage' => '(Razlika između stranica)',
 'lineno' => 'Linija $1:',
 'compareselectedversions' => 'Uporedite označene verzije',
@@ -1182,6 +1206,10 @@ Korištenje navigacionih linkova će resetovati ovaj stupac.',
 'editundo' => 'ukloni ovu izmjenu',
 'diff-multi' => '({{PLURAL:$1|Nije prikazana jedna međuverzija|Nisu prikazane $1 međuverzije|Nije prikazano $1 međuverzija}}) od strane {{PLURAL:$2|korisnika|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).
+
+Ovo se obično dešava kada pratite zastarjelu vezu do stranice koja je obrisana.
+Više informacija možete pronaći u [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} evidenciji brisanja].',
 
 # Search results
 'searchresults' => 'Rezultati pretrage',
@@ -1272,6 +1300,7 @@ Uzmite u obzir da njegovi indeksi za ovu Wiki ne moraju biti ažurirani.',
 'prefs-beta' => 'Beta mogućnosti',
 'prefs-datetime' => 'Datum i vrijeme',
 'prefs-labs' => 'Eksperimentalne mogućnosti',
+'prefs-user-pages' => 'Korisničke stranice',
 'prefs-personal' => 'Korisnički profil',
 'prefs-rc' => 'Podešavanje nedavnih izmjena',
 'prefs-watchlist' => 'Praćene stranice',
@@ -1452,6 +1481,7 @@ Ako izaberete da date ime, biće korišteno za pripisivanje Vašeg rada.',
 'right-writeapi' => "Korištenje opcije ''write API''",
 'right-delete' => 'Brisanje stranica',
 'right-bigdelete' => 'Brisanje stranica sa velikom historijom',
+'right-deletelogentry' => 'Brisanje i vraćanje određenih stavki u registru',
 'right-deleterevision' => 'Brisanje i vraćanje određenih revizija stranice',
 'right-deletedhistory' => 'Pregled stavki obrisane historije, bez povezanog teksta',
 'right-deletedtext' => 'Pregled obrisanog teksta i izmjena između obrisanih revizija',
@@ -1734,14 +1764,19 @@ Ako se problem ne riješi, kontaktirajte [[Special:ListUsers/sysop|administrator
 'backend-fail-writetemp' => 'Ne mogu da pišem u privremenoj datoteci.',
 'backend-fail-closetemp' => 'Ne mogu da zatvorim privremenu datoteku.',
 'backend-fail-read' => 'Ne mogu da pročitam datoteku $1.',
-'backend-fail-create' => 'Ne mogu da napravim datoteku $1.',
-'backend-fail-maxsize' => 'Ne mogu da napravim datoteku $1 jer je veća od {{PLURAL:$2|$2 bajta|$2 bajta|$2 bajtova}}.',
+'backend-fail-create' => 'Ne mogu snimiti datoteku $1.',
+'backend-fail-maxsize' => 'Ne mogu snimiti datoteku $1 jer je veća od {{PLURAL:$2|$2 bajta|$2 bajta|$2 bajtova}}.',
 'backend-fail-readonly' => 'Skladišna osnova „$1“ trenutno ne može da se zapisuje. Navedeni razlog glasi: „$2“',
 'backend-fail-synced' => 'Datoteka „$1“ je nedosledna između unutrašnjih skladišnih osnova',
 'backend-fail-connect' => 'Ne mogu da se povežem sa skladišnom osnovom „$1“.',
 'backend-fail-internal' => 'Došlo je do nepoznate greške u skladišnoj osnovi „$1“.',
 'backend-fail-contenttype' => 'Ne mogu da utvrdim kakav sadržaj ima datoteka koju treba da smestim u „$1“.',
 'backend-fail-batchsize' => 'Skladišna osnova je dobila blokadu od $1 {{PLURAL:$1|operacije|operacije|operacija}}; ograničenje je $2 {{PLURAL:$2|operacija|operacije|operacija}}.',
+'backend-fail-usable' => 'Ne mogu pročitati ni snimiti datoteku $1 zbog nedovoljno dozvola ili nedostattnih direktorija/sadržaoca.',
+
+# File journal errors
+'filejournal-fail-dbconnect' => 'Ne mogu da se povežem s novinarskom bazom za skladišnu osnovu „$1“.',
+'filejournal-fail-dbquery' => 'Ne mogu da ažuriram novinarsku bazu za skladišnu osnovu „$1“.',
 
 # Lock manager
 'lockmanager-notlocked' => 'Ne mogu da otključam „$1“ jer nije zaključan.',
@@ -1752,6 +1787,7 @@ Ako se problem ne riješi, kontaktirajte [[Special:ListUsers/sysop|administrator
 'lockmanager-fail-releaselock' => 'Ne mogu da oslobodim katanac za „$1“.',
 'lockmanager-fail-db-bucket' => 'Ne mogu da kontaktiram s dovoljno katanaca u kanti $1.',
 'lockmanager-fail-db-release' => 'Ne mogu da oslobodim katance u bazi $1.',
+'lockmanager-fail-svr-acquire' => 'Ne mogu da dobijem katance na serveru $1.',
 'lockmanager-fail-svr-release' => 'Ne mogu da oslobodim katance na serveru $1.',
 
 # ZipDirectoryReader
@@ -1871,6 +1907,7 @@ Njen opis možete da izmenite na [$2 odgovarajućoj stranici].',
 'uploadnewversion-linktext' => 'Postavite novu verziju ove datoteke/fajla',
 'shared-repo-from' => 'iz $1',
 'shared-repo' => 'zajednička ostava',
+'upload-disallowed-here' => 'Nažalost, ne možete da zamenite ovu sliku.',
 
 # File reversion
 'filerevert' => 'Vrati $1',
@@ -1953,7 +1990,7 @@ Prije brisanja provjerite da li druge stranice vode na te šablone.',
 'disambiguations' => 'Stranice do višeznačnih odrednica',
 'disambiguationspage' => 'Template:Višeznačna odrednica',
 'disambiguations-text' => "Slijedeće stranice su povezane sa '''stranicom za razvrstavanje'''.
-Po pravilu, one se trebaju povezati sa konkretnim člankom.<br />
+One se možda moraju povezati sa konkretnim člankom.<br />
 Stranica se smatra stranicom za razvrstavanje, ukoliko koristi šablon koji je povezan sa spiskom [[MediaWiki:Disambiguationspage|stranica za razvrstavanje]]",
 
 'doubleredirects' => 'Dvostruka preusmjerenja',
@@ -1979,6 +2016,7 @@ Svaki red sadrži veze na prvo i drugo preusmjerenje, kao i na prvu liniju tekst
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bajt|bajtova}}',
 'ncategories' => '$1 {{PLURAL:$1|kategorija|kategorije}}',
+'ninterwikis' => '$1 {{PLURAL:$1|međuviki|međuvikija|međuvikija}}',
 'nlinks' => '$1 {{PLURAL:$1|link|linka|linkova}}',
 'nmembers' => '$1 {{PLURAL:$1|član|članova}}',
 'nrevisions' => '$1 {{PLURAL:$1|revizija|revizije|revizija}}',
@@ -2007,6 +2045,7 @@ Svaki red sadrži veze na prvo i drugo preusmjerenje, kao i na prvu liniju tekst
 'mostlinkedtemplates' => 'Šabloni sa najviše linkova',
 'mostcategories' => 'Stranice sa najviše kategorija',
 'mostimages' => 'Datoteke sa najviše linkova',
+'mostinterwikis' => 'Stranice s najviše međuwiki poveznica',
 'mostrevisions' => 'Stranice sa najviše izmjena',
 'prefixindex' => 'Sve stranice sa prefiksom',
 'prefixindex-namespace' => 'Sve stranice s predmetkom (imenski prostor $1)',
@@ -2061,6 +2100,7 @@ na kome bi se izvela ova funkcija.',
 Možete specificirati prikaz izabiranjem specifičnog spiska, korisničkog imena ili promjenjenog članka (razlikovati velika slova).',
 'logempty' => 'Ne postoji takav zapis.',
 'log-title-wildcard' => 'Traži naslove koji počinju s ovim tekstom',
+'showhideselectedlogentries' => 'Prikaži/sakrij izabrane zapise u evidenciji',
 
 # Special:AllPages
 'allpages' => 'Sve stranice',
@@ -2081,6 +2121,11 @@ Možda sadrži jedan ili više znakova koji se ne mogu koristiti u naslovima.',
 'allpages-bad-ns' => '{{SITENAME}} nema imenski prostor "$1".',
 'allpages-hide-redirects' => 'Sakrij preusmerenja',
 
+# SpecialCachedPage
+'cachedspecial-viewing-cached-ttl' => 'Gledate keširanu verziju ove stranice, koja može biti stara i do $1.',
+'cachedspecial-viewing-cached-ts' => 'Gledate keširanu verziju ove stranice, koja možda nije potpuno aktualna.',
+'cachedspecial-refresh-now' => 'Pogledaj najnoviju.',
+
 # Special:Categories
 'categories' => 'Kategorije',
 'categoriespagetext' => '{{PLURAL:$1|Slijedeća kategorija sadrži|Slijedeće kategorije sadrže}} stranice ili multimedijalne datoteke.
@@ -2148,6 +2193,8 @@ O svakoj od njih postoje i [[{{MediaWiki:Listgrouprights-helppage}}|dodatne info
 'mailnologin' => 'Nema adrese za slanje',
 'mailnologintext' => 'Morate biti [[Special:UserLogin|prijavljeni]] i imati ispravnu adresu e-pošte u vašim [[Special:Preferences|podešavanjima]] da biste slali e-poštu drugim korisnicima.',
 'emailuser' => 'Pošalji E-mail ovom korisniku',
+'emailuser-title-target' => 'Slanje e-maila {{GENDER:$1|korisniku|korisnici|korisniku}}',
+'emailuser-title-notarget' => 'Slanje e-maila korisniku',
 'emailpage' => 'Pošalji e-mail ovom korisniku',
 'emailpagetext' => 'Možete korisiti formu ispod za slanje e-mail poruka ovom korisniku.
 E-mail adresa koju ste unijeli u [[Special:Preferences|Vašim korisničkim postavkama]] će biti prikazana kao adresa pošiljaoca, tako da će primaoc poruke moći da Vam odgovori.',
@@ -2294,6 +2341,8 @@ nastavite s oprezom.',
 'rollback' => 'Vrati izmjene',
 'rollback_short' => 'Vrati',
 'rollbacklink' => 'vrati',
+'rollbacklinkcount' => 'vrati $1 {{PLURAL:$1|izmjenu|izmjene|izmjena}}',
+'rollbacklinkcount-morethan' => 'vrati više od $1 {{PLURAL:$1|izmjene|izmjene|izmjena}}',
 'rollbackfailed' => 'Vraćanje nije uspjelo',
 'cantrollback' => 'Nemoguće je vratiti izmjenu;
 posljednji kontributor je jedini na ovoj stranici.',
@@ -2525,8 +2574,8 @@ Unesite konkretan razlog ispod (na primjer, navodeći koje konkretne stranice su
 'ipb-confirm' => 'Potvrdite blokiranje',
 'badipaddress' => 'Nevaljana IP adresa',
 'blockipsuccesssub' => 'Blokiranje je uspjelo',
-'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] je blokiran.
-<br />Pogledajte [[Special:BlockList|IP spisak blokiranih korisnika]] za pregled blokiranja.',
+'blockipsuccesstext' => '[[Special:Contributions/$1|$1]] je {{GENDER:$1|blokiran|blokirana|blokiran}}.<br />
+Blokiranja možete da pogledate [[Special:BlockList|ovde]].',
 'ipb-blockingself' => 'Ovom akcijom ćete blokirati sebe! Da li ste sigurni da to želite?',
 'ipb-confirmhideuser' => "Upravo ćete blokirati korisnika sa uključenom opcijom ''sakrij korisnika''. Ovim će korisničko ime biti sakriveno u svim spiskovima i stavkama zapisnika. Da li ste sigurni da to želite?",
 'ipb-edit-dropdown' => 'Uredi razloge blokiranja',
@@ -2798,6 +2847,7 @@ Sve akcije vezane uz transwiki uvoz su zabilježene u [[Special:Log/import|regis
 'import-interwiki-templates' => 'Uključi sve šablone',
 'import-interwiki-submit' => 'Uvoz',
 'import-interwiki-namespace' => 'Odredišni imenski prostor:',
+'import-interwiki-rootpage' => 'Odredišna osnovna stranica (neobavezno):',
 'import-upload-filename' => 'Naziv datoteke:',
 'import-comment' => 'Komentar:',
 'importtext' => 'Molimo Vas da izvezete datoteku iz izvornog wikija koristeći [[Special:Export|alat za izvoz]].
@@ -2834,6 +2884,9 @@ Molimo pokušajte ponovno.',
 'import-error-interwiki' => 'Ne mogu da uvezem stranicu „$1“ jer je njen naziv rezervisan za spoljno povezivanje (interwiki).',
 'import-error-special' => 'Ne mogu da uvezem stranicu „$1“ jer ona pripada posebnom imenskom prostoru koje ne prihvata stranice.',
 'import-error-invalid' => 'Ne mogu da uvezem stranicu „$1“ jer je njen naziv neispravan.',
+'import-options-wrong' => '{{PLURAL:$2|Pogrešna opcija|Pogrešne opcije}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Navedena osnovna stranica ima neispravan naslov.',
+'import-rootpage-nosubpage' => 'Imenski prostor „$1“ osnovne stranice ne dozvoljava podstranice.',
 
 # Import log
 'importlogpage' => 'Registar uvoza',
@@ -2949,14 +3002,38 @@ Ovo je vjerovatno izazvano vezom ka vanjskoj nepoželjnoj stranici.',
 'spambot_username' => 'MediaWiki čišćenje spama',
 'spam_reverting' => 'Vraćanje na zadnju verziju koja ne sadrži linkove ka $1',
 'spam_blanking' => 'Sve revizije koje sadrže linkove ka $1, očisti',
+'spam_deleting' => 'Sve izmene sadrže veze do $1. Brišem',
 
 # Info page
 'pageinfo-title' => 'Informacije za "$1"',
-'pageinfo-header-edits' => 'Izmjene',
+'pageinfo-header-basic' => 'Osnovne informacije',
+'pageinfo-header-edits' => 'Historija izmjena',
+'pageinfo-header-restrictions' => 'Zaštita stranice',
+'pageinfo-header-properties' => 'Svojstva stranice',
+'pageinfo-display-title' => 'Prikaži naslov',
+'pageinfo-default-sort' => 'Podrazumijevani ključ sortiranja',
+'pageinfo-length' => 'Dužina stranice (u bajtovima)',
+'pageinfo-article-id' => 'ID stranice',
+'pageinfo-robot-policy' => 'Status tražilice',
+'pageinfo-robot-index' => 'Stranicu je moguće indeksirati',
+'pageinfo-robot-noindex' => 'Ne može se indeksirati',
 'pageinfo-views' => 'Broj pregleda',
-'pageinfo-watchers' => 'Broj onih koji pregledaju',
-'pageinfo-edits' => 'Broj izmjena',
-'pageinfo-authors' => 'Broj specifičnih autora',
+'pageinfo-watchers' => 'Broj pratitelja stranice',
+'pageinfo-redirects-name' => 'Preusmjeravanja na ovu stranicu',
+'pageinfo-subpages-name' => 'Podstranice ove stranice',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|preusmjerenje|preusmjerenja|preusmjerenja}}; $3 {{PLURAL:$3|nepreusmjerenje|nepreusmjerenja|nepreusmjerenja}})',
+'pageinfo-firstuser' => 'Tvorac stranice',
+'pageinfo-firsttime' => 'Datum stvaranja stranice',
+'pageinfo-lastuser' => 'Posljednji urednik',
+'pageinfo-lasttime' => 'Datum posljednje izmjene',
+'pageinfo-edits' => 'Ukupni broj uređivanja',
+'pageinfo-authors' => 'Ukupni broj specifičnih autora',
+'pageinfo-recent-edits' => 'Broj nedavnih izmjena (u posljednjih $1)',
+'pageinfo-recent-authors' => 'Broj nedavnih specifičnih autora',
+'pageinfo-restriction' => 'Zaštita stranice ({{lcfirst:$1}})',
+'pageinfo-magic-words' => '{{PLURAL:$1|Magična riječ|Magične riječi}} ($1)',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Uključeni šablon|Uključeni šabloni}} ($1)',
 
 # Patrolling
 'markaspatrolleddiff' => 'Označi kao patrolirano',
@@ -3000,6 +3077,7 @@ Njegovim izvršavanjem možete da ugrozite Vaš sistem.",
 'file-info-size-pages' => '$1 × $2 piksela, veličina datoteke: $3, MIME vrsta: $4, $5 {{PLURAL:$5|stranica|stranice|stranica}}',
 'file-nohires' => 'Veća rezolucija nije dostupna.',
 'svg-long-desc' => 'SVG fajl, nominalno $1 × $2 piksela, veličina fajla: $3',
+'svg-long-desc-animated' => 'Animirana SVG datoteka, nominalno: $1 × $2 piksela, veličina: $3',
 'show-big-image' => 'Puna rezolucija',
 'show-big-image-preview' => 'Veličina ovog prikaza: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Druga rezolucija|Druge rezolucije}}: $1.',
@@ -3009,6 +3087,8 @@ Njegovim izvršavanjem možete da ugrozite Vaš sistem.",
 'file-info-png-looped' => 'stalno iznova',
 'file-info-png-repeat' => 'pregledano $1 {{PLURAL:$1|put|puta}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|sličica|sličice|sličica}}',
+'file-no-thumb-animation' => "'''Napomena: zbog tehničkih ograničenja, minijature ove datoteke se neće animirati.'''",
+'file-no-thumb-animation-gif' => "'''Napomena: zbog tehničkih ograničenja, minijature GIF slika visoke rezolucije kao što je ova neće se animirati.'''",
 
 # Special:NewFiles
 'newimages' => 'Galerija novih slika',
@@ -3647,6 +3727,8 @@ Trebali biste dobiti [{{SERVER}}{{SCRIPTPATH}}/KOPIJU GNU opće javne licence] z
 'version-software' => 'Instalirani softver',
 'version-software-product' => 'Proizvod',
 'version-software-version' => 'Verzija',
+'version-entrypoints' => 'URL adresa instalacije',
+'version-entrypoints-header-entrypoint' => 'Ulazna tačka',
 'version-entrypoints-header-url' => 'URL',
 
 # Special:FilePath
@@ -3809,10 +3891,12 @@ U suprotnom, poslužite se jednostavnim obrascem ispod. Vaš komentar će stajat
 'api-error-empty-file' => 'Datoteka koju ste poslali je bila prazna.',
 'api-error-emptypage' => 'Stvaranje novih praznih stranica nije dozvoljeno.',
 'api-error-fetchfileerror' => 'Unutrašnja greška: pojavio se neki problem pri dobijanju podataka o datoteci.',
+'api-error-fileexists-forbidden' => 'Već postoji datoteka s imenom „$1“ i ne može da se zamijeni.',
+'api-error-fileexists-shared-forbidden' => 'Već postoji datoteka s imenom „$1“ u zajedničkoj riznici i ne može da se zamijeni.',
 'api-error-file-too-large' => 'Datoteka koju ste poslali je bila prevelika.',
 'api-error-filename-tooshort' => 'Ime datoteke je prekratko.',
 'api-error-filetype-banned' => 'Ova vrsta datoteke je zabranjena.',
-'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|nije dopušten tip datoteke|nisu dopušteni tipovi datoteka}}. {{PLURAL:$3|Dopuštena vrsta datoteke je|Dopuštene vrste datoteka su}} $2.',
+'api-error-filetype-banned-type' => '$1 {{PLURAL:$4|je zabranjena vrsta datoteke|su zabranjene vrste datoteka}}. {{PLURAL:$3|Dozvoljena je|Dozvoljene su}} $2.',
 'api-error-filetype-missing' => 'Datoteci nedostaje nastavak.',
 'api-error-hookaborted' => 'Izmjena koji ste pokušali načiniti je otkazana preko "kuke" proširenja mediawiki softvera.',
 'api-error-http' => 'Unutrašnja greška: ne može se spojiti na server.',
index 972e2ef..ae34184 100644 (file)
@@ -517,8 +517,8 @@ $1",
 # General errors
 'error' => 'දෝෂය',
 'databaseerror' => 'දත්ත-ගබඩා දෝෂය',
-'dberrortext' => 'දත්තසංචිත විමසුම් කාරක-රීති දෝෂයක් (syntax erro)සිදුවී ඇත.
-මෙය මෘදුකාංගයේ bugදෝෂයක් හඟවන්නක් විය හැක.
+'dberrortext' => 'දත්තසංචිත විමසුම් කාරක-රීති දෝෂයක් සිදුවී ඇත.
+මෙය මෘදුකාංගයේ දෝෂයක් හඟවන්නක් විය හැක.
 අවසන් වරට උත්සාහ කල දත්ත-ගබඩා විමසුම:
 "<tt>$2</tt>" ශ්‍රිතය අනුසාරයෙන්
 <blockquote><tt>$1</tt></blockquote> විය.
@@ -1307,7 +1307,7 @@ $1",
 'timezoneregion-indian' => 'ඉන්දියානු සාගරය',
 'timezoneregion-pacific' => 'පැසිපික් සාගරය',
 'allowemail' => 'අනෙකුත් පරිශීලකයන්ගෙන් විද්‍යුත්-තැපෑල ලැබීම සක්‍රීය කරන්න',
-'prefs-searchoptions' => 'à\9cà·\80à·\9aà·\82ණ à·\80à·\92à¶\9aලà·\8aපයනà·\8a',
+'prefs-searchoptions' => 'à·\83à·\9cයනà·\8aන',
 'prefs-namespaces' => 'නාමඅවකාශ',
 'defaultns' => 'පෙරනිමියෙන් මෙම නාමඅවකාශයන්හි ගවේෂණය කරන්න:',
 'default' => 'පෙරනිමි',
index 50e5730..757c47d 100644 (file)
@@ -545,6 +545,10 @@ $1',
 'youhavenewmessages' => 'Máte $1 ($2).',
 'newmessageslink' => 'nové správy',
 'newmessagesdifflink' => 'posledná zmena',
+'youhavenewmessagesfromusers' => 'Máte $1 od {{PLURAL:$3|iného používateľa|$3 iných používateľov}} ($2).',
+'youhavenewmessagesmanyusers' => 'Máte $1 od viacerých ďalších používateľov ($2).',
+'newmessageslinkplural' => '{{PLURAL:$1|novú správu|nové správy|nových správ}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|posledná zmena|posledné zmeny}}',
 'youhavenewmessagesmulti' => 'Máte nové správy na $1',
 'editsection' => 'upraviť',
 'editold' => 'upraviť',
@@ -596,9 +600,9 @@ Zoznam platných špeciálnych stránok nájdete na [[Special:SpecialPages|{{int
 # General errors
 'error' => 'Chyba',
 'databaseerror' => 'Chyba v databáze',
-'dberrortext' => 'Nastala syntaktická chyba v príkaze na prehľadávanie databázy.
-To môže značiť chybu v softvéri.
-Posledná požiadavka na databázu bola:
+'dberrortext' => 'V databázovom dopyte sa vyskytla syntaktická chyba.
+Príčinou môže byť chyba v softvéri.
+Posledný dopyt bol:
 <blockquote><tt>$1</tt></blockquote>
 z funkcie „<tt>$2</tt>“.
 Databáza vrátila chybu „<tt>$3: $4</tt>“.',
@@ -956,10 +960,9 @@ Podrobnosti nájdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}
 'blocked-notice-logextract' => 'Tento používateľ je momentálne zablokovaný.
 Dolu je pre informáciu posledná položka zo záznamu blokovaní:',
 'clearyourcache' => "'''Poznámka:''' Aby sa zmeny prejavili, po uložení musíte vymazať vyrovnávaciu pamäť vášho prehliadača.
-* '''Mozilla Firefox / Safari:''' Držte stlačený ''Shift'' a kliknite na ''Reload'' alebo stlačte buď ''Ctrl-F5'' alebo ''Ctrl-R'' (''⌘-R'' na Mac)
+* '''Mozilla Firefox / Safari:''' Držte stlačený ''Shift'' a kliknite na ''Reload'' alebo stlačte buď ''Ctrl-F5'' alebo ''Ctrl-R'' (''⌘-R'' na Mac)
 * '''Google Chrome:''' Stlačte ''Ctrl-Shift-R'' (''⌘-Shift-R'' na Mac)
 * '''Internet Explorer:''' Držte ''Ctrl'' a kliknite na ''Refresh'' alebo stlačte ''Ctrl-F5''
-* '''Konqueror:''' Kliknite na tlačidlo ''Reload'' alebo stlačte ''F5''
 * '''Opera:''' Vymazať vyrovnávaciu pamäť prehliadača v ponuke ''Tools→Preferences''",
 'usercssyoucanpreview' => "'''Tip:''' Váš nový CSS pred uložením otestujete stlačením tlačidla „{{int:showpreview}}“.",
 'userjsyoucanpreview' => "'''Tip:''' Váš nový JS pred uložením otestujete stlačením tlačidla „{{int:showpreview}}“.",
@@ -1208,9 +1211,11 @@ Nemáte k nej prístup.',
 'revdelete-concurrent-change' => 'Chyba pri zmene položky s dátumom $2, $1: zdá sa, že kým ste ju menili vykonal zmenu niekto iný.
 Pozrite sa prosím do záznamov.',
 'revdelete-only-restricted' => 'Chyba pri skrývaní položky s dátumom $2, $1: nemôžete skryť položku pred správcami bez toho, aby ste vybrali aj jednu z ďalších možností viditeľnosti.',
-'revdelete-reason-dropdown' => '*Bežné dôvody zmazania
+'revdelete-reason-dropdown' => '*Obvyklé dôvody zmazania
 ** Porušenie autorských práv
-** Nevhodné osobné informácie',
+** Nevhodné komentáre alebo osobné informácie
+** Nevhodné meno používateľa
+** Potenciálne hanlivé alebo ohováračské údaje',
 'revdelete-otherreason' => 'Ďalšie dôvody:',
 'revdelete-reasonotherlist' => 'Iný dôvod',
 'revdelete-edit-reasonlist' => 'Upraviť dôvody zmazania',
@@ -1827,7 +1832,7 @@ Ak problém pretrváva, kontaktujte [[Special:ListUsers/sysop|správcu systému]
 'backend-fail-internal' => 'Vyskytla sa neznáma chyba v úložisku „$1“.',
 'backend-fail-contenttype' => 'Nebolo možné určiť typ obsahu súboru, ktorý sa má uložiť na „$1“.',
 'backend-fail-batchsize' => 'Do úložiska bola zaslaná dávka s $1 {{PLURAL:$1|operáciou|operáciami}}; limit je $2 {{PLURAL:$2|operácia|operácie|operácií}}.',
-'backend-fail-usable' => 'Nie je možné zapísať súbor  $1  kvôli nedostatočným povoleniam alebo chýbajúcim adresárom/kontajnerom.',
+'backend-fail-usable' => 'Nie je možné čítať alebo zapísať súbor  $1  kvôli nedostatočným povoleniam alebo chýbajúcim adresárom/kontajnerom.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Nepodarilo sa pripojiť k žurnálovej databáze úložiska „$1“.',
@@ -1956,6 +1961,7 @@ Možno chcete upraviť popis na jeho [$2 popisnej stránke súboru] tam.',
 'uploadnewversion-linktext' => 'Nahrať novú verziu tohto súboru',
 'shared-repo-from' => 'z $1',
 'shared-repo' => 'zdieľané úložisko',
+'upload-disallowed-here' => 'Ľutujeme, tento súbor nie je možné prepísať.',
 
 # File reversion
 'filerevert' => 'Obnoviť $1',
@@ -2062,6 +2068,7 @@ Každý riadok obsahuje odkaz na prvé a druhé presmerovanie a tiež prvý riad
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|bajt|bajty|bajtov}}',
 'ncategories' => '$1 {{PLURAL:$1|kategória|kategórie|kategórií}}',
+'ninterwikis' => '$1 {{PLURAL:$1|interwiki odkaz|interwiki odkazy|interwiki odkazov}}',
 'nlinks' => '$1 {{PLURAL:$1|odkaz|odkazy|odkazov}}',
 'nmembers' => '$1 {{PLURAL:$1|člen|členovia|členov}}',
 'nrevisions' => '$1 {{PLURAL:$1|revízia|revízie|revízií}}',
@@ -2090,6 +2097,7 @@ Každý riadok obsahuje odkaz na prvé a druhé presmerovanie a tiež prvý riad
 'mostlinkedtemplates' => 'Najčastejšie odkazované šablóny',
 'mostcategories' => 'Stránky s najväčším počtom kategórií',
 'mostimages' => 'Najčastejšie odkazované súbory',
+'mostinterwikis' => 'Stránky s najväčším počtom interwiki odkazov',
 'mostrevisions' => 'Stránky s najväčším počtom úprav',
 'prefixindex' => 'Všetky stránky s predponou',
 'prefixindex-namespace' => 'Všetky stránky s predponou (menný priestor $1)',
@@ -2236,6 +2244,8 @@ Môžete si prečítať [[{{MediaWiki:Listgrouprights-helppage}}|ďalšie inform
 'mailnologin' => 'Žiadna adresa na zaslanie',
 'mailnologintext' => 'Musíte byť [[Special:UserLogin|prihlásený]] a mať platnú e-mailovú adresu vo vašich [[Special:Preferences|nastaveniach]], aby ste mohli iným používateľom posielať e-maily.',
 'emailuser' => 'E-mail tomuto používateľovi',
+'emailuser-title-target' => 'E-mail {{GENDER:$1|tomuto používateľovi|tejto používateľke}}',
+'emailuser-title-notarget' => 'E-mail používateľovi',
 'emailpage' => 'E-mail používateľovi',
 'emailpagetext' => 'Ak tento používateľ zadal platnú emailovú adresu vo svojich nastaveniach,
 môžete mu pomocou nasledovného formulára poslať email.
@@ -3063,11 +3073,14 @@ Pravdepodobne to spôsobil odkaz na externú internetovú lokalitu, ktorá sa na
 
 # Info page
 'pageinfo-title' => 'Informácie o „$1“',
-'pageinfo-header-edits' => 'Úpravy',
+'pageinfo-header-basic' => 'Základné údaje',
+'pageinfo-header-edits' => 'História úprav',
+'pageinfo-article-id' => 'ID stránky',
 'pageinfo-views' => 'Počet zobrazení',
 'pageinfo-watchers' => 'Počet sledovateľov',
-'pageinfo-edits' => 'Počet úprav',
-'pageinfo-authors' => 'Počet rôznych autorov',
+'pageinfo-lasttime' => 'Dátum poslednej úpravy',
+'pageinfo-edits' => 'Celkový počet úprav',
+'pageinfo-authors' => 'Celkový počet autorov',
 
 # Skin names
 'skinname-standard' => 'Klasický',
index 7f173aa..e148828 100644 (file)
@@ -448,7 +448,10 @@ $1',
 'youhavenewmessages' => 'Imate $1 ($2)',
 'newmessageslink' => 'nova sporočila',
 'newmessagesdifflink' => 'zadnja sprememba',
+'youhavenewmessagesfromusers' => 'Imate $1 od {{PLURAL:$3|drugega uporabnika|$3 uporabnikov}} ($2).',
+'youhavenewmessagesmanyusers' => 'Imate $1 od veliko uporabnikov ($2).',
 'newmessageslinkplural' => '{{PLURAL:$1|novo sporočilo|nova sporočila}}',
+'newmessagesdifflinkplural' => '{{PLURAL:$1|zadnja sprememba|zadnji spremembi|zadnje spremembe}}',
 'youhavenewmessagesmulti' => 'Na $1 imate novo sporočilo',
 'editsection' => 'uredi',
 'editold' => 'spremeni',
@@ -501,11 +504,11 @@ Seznam vseh prepoznanih posebnih strani je na razpolago na strani [[Special:Spec
 'error' => 'Napaka',
 'databaseerror' => 'Napaka zbirke podatkov',
 'dberrortext' => 'Prišlo je do napake podatkovne zbirke.
-Vzrok bi lahko bil nesprejemljiv iskalni niz ali programski hrošč.
-Zadnje poskušano iskanje:
-<blockquote><tt>$1</tt></blockquote>
-znotraj funkcije »<tt>$2</tt>«.
-Podatkovna zbirka je vrnila napako »<tt>$3: $4</tt>«.',
+Vzrok je lahko programski hrošč v programju.
+Zadnja poskušana poizvedba po zbirki podatkov:
+<blockquote><code>$1</code></blockquote>
+znotraj funkcije »<code>$2</code>«.
+Zbirka podatkov je vrnila napako »<samp>$3: $4</samp>«.',
 'dberrortextcl' => 'Pri iskanju v podatkoovni zbirki je prišlo do skladenjske napake.
 Zadnje iskanje v zbirki podatkov:
 »$1«
@@ -561,10 +564,12 @@ Prosimo, poskusite znova čez nekaj minut.',
 'protectedpagetext' => 'Ta stran je bila zaklenjena za preprečitev urejanja.',
 'viewsourcetext' => 'Lahko si ogledate in kopirate vsebino te strani:',
 'viewyourtext' => "Lahko si ogledate in kopirate vsebino '''vaših urejanj''' te strani:",
-'protectedinterface' => 'Prikazana stran vsebuje besedilo vmesnika programja in je zaradi preprečevanja zlorabe zaščitena.',
+'protectedinterface' => 'Prikazana stran vsebuje besedilo vmesnika programja na tem wikiju in je zaradi preprečevanja zlorab zaščitena.
+
+Za dodajanje ali spreminjanje prevodov vseh wikijev uporabite [//translatewiki.net/ translatewiki.net], projekt za lokalizacijo MediaWiki.',
 'editinginterface' => "'''Opozorilo:''' Urejate stran, ki vsebuje besedilo ali drug element uporabniškega vmesnika programja.
-Spremembe te strani bodo vplivale na podobo uporabniškega vmesnika.
-Za prevajanje vmesnika se prijavite na [//translatewiki.net/wiki/Main_Page?setlang=sl&useskin=monobook translatewiki.net].",
+Spremembe te strani bodo vplivale na podobo uporabniškega vmesnika ostalih uporabnikov na tem wikiju.
+Za dodajanje ali spreminjanje prevodov vseh wikijev uporabite [//translatewiki.net/ translatewiki.net], projekt za lokalizacijo MediaWiki.",
 'sqlhidden' => '(Poizvedba SQL je skrita)',
 'cascadeprotected' => 'Ta stran je bila zaščitena pred urejanji, ker je vključena na {{PLURAL:$1|sledečo stran, ki je bila zaščitena|sledeči strani, ki sta bili zaščiteni|sledeče strani, ki so bile zaščitene}} z vključeno kaskadno možnostjo:
 $2',
@@ -854,8 +859,8 @@ Da bi stran ustvarili, vnesite v spodnji obrazec besedilo
 Če ste sem prišli po pomoti, v svojem brskalniku kliknite gumb ''Nazaj''.",
 'anontalkpagetext' => "---- ''To je pogovorna stran brezimnega uporabnika, ki si še ni ustvaril računa ali pa ga ne uporablja. Zaradi tega moramo uporabiti IP-naslov za njegovo/njeno ugotavljanje istovetnosti. Takšen IP-naslov si lahko deli več uporabnikov. Če ste brezimni uporabnik in menite, da so nepomembne pripombe namenjene vam, prosimo [[Special:UserLogin|ustvarite račun]] ali pa se [[Special:UserLogin/signup|vpišite]], da preprečite zmedo z drugimi nepodpisanimi uporabniki.''",
 'noarticletext' => 'Na tej strani ni trenutno nobenega besedila. Naslov strani lahko poskusite [[Special:Search/{{PAGENAME}}|poiskati]] na drugih straneh, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} v dnevniških zapisih] ali pa [{{fullurl:{{FULLPAGENAME}}|action=edit}} stran uredite]</span>.',
-'noarticletext-nopermission' => 'Na tej strani ni trenutno nobenega besedila.
-Lahko poskusite [[Special:Search/{{PAGENAME}}|poiskati naslov te strani]] v drugih straneh, ali <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} poiskati v povezanih dnevniških zapisih]</span>.',
+'noarticletext-nopermission' => 'Na strani trenutno ni nobenega besedila.
+Lahko poskusite [[Special:Search/{{PAGENAME}}|poiskati naslov strani]] na drugih straneh ali <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} v povezanih dnevniških zapisih]</span>, vendar za ustvarjanje strani nimate zadostnih dovoljenj.',
 'userpage-userdoesnotexist' => 'Uporabniški račun »<nowiki>$1</nowiki>« ni registriran.
 Prosimo preverite, ali res želite ustvariti/urediti to stran.',
 'userpage-userdoesnotexist-view' => 'Uporabniški račun »$1« ni registriran.',
@@ -865,7 +870,6 @@ Najnovejši vnos v dnevniku blokad je prikazan spodaj:',
 * '''Firefox/Safari:''' Držite ''Shift'' in kliknite ''Ponovno naloži'' (''Reload'') ali pritisnite ''Ctrl-Shift-R'' ali ''Ctrl-R'' (''⌘-R'' na sistemu Mac)
 * '''Internet Explorer:''' Držite ''Ctrl-F5'' in kliknite ''Osveži'' (''Refresh'') ali pritisnite ''Ctrl-F5''
 * '''Google Chrome:''' Pritisnite ''Ctrl-Shift-R'' (''⌘-Shift-R'' na sistemu Mac)
-* '''Konqueror:''' Kliknite ''Ponovno naloži'' (''Reload'') ali pritisnite ''F5''.
 * '''Opera:''' Počistite predpomnilnik v ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''Nasvet:''' Za preizkušanje svojega novega CSS pred shranjevanjem uporabite gumb »{{int:showpreview}}«.",
 'userjsyoucanpreview' => "'''Nasvet:''' Za preizkušanje svojega novega JavaScripta pred shranjevanjem uporabite gumb »{{int:showpreview}}«.",
@@ -948,7 +952,7 @@ Lahko se vrnete nazaj in urejate že obstoječe strani, ali pa se [[Special:User
 'sectioneditnotsupported-text' => 'Urejanje razdelkov ni podprto na tej strani.',
 'permissionserrors' => 'Napake dovoljenj',
 'permissionserrorstext' => 'Nimate dovoljenja za izvedbo dejanja zaradi {{PLURAL:$1|naslednjega razloga|naslednjih razlogov|naslednjih razlogov|naslednjih razlogov|naslednjih razlogov}}:',
-'permissionserrorstext-withaction' => 'Nimate dovoljenja za $2, zaradi {{PLURAL:$1|naslednjega razloga|naslednjih $1 razlogov|naslednjih $1 razlogov|naslednjih $1 razlogov}}:',
+'permissionserrorstext-withaction' => 'Nimate dovoljenja za $2 zaradi {{PLURAL:$1|naslednjega razloga|naslednjih $1 razlogov|naslednjih $1 razlogov|naslednjih $1 razlogov}}:',
 'recreate-moveddeleted-warn' => "'''Opozorilo: Pišete stran, ki je bila nekoč že izbrisana.'''
 
 Premislite preden nadaljujete s pisanjem, morda bo stran zaradi istih razlogov ponovno odstranjena.
@@ -984,6 +988,7 @@ Naslednji argumenti so bili izpuščeni.",
 'expansion-depth-exceeded-warning' => 'Stran je prekoračila globino razširitve',
 'parser-unstrip-loop-warning' => 'Zaznal sem odvezano zanko',
 'parser-unstrip-recursion-limit' => 'Presežena je omejitev odvezane rekurzije ($1)',
+'converter-manual-rule-error' => 'Odkril sem napako v ročnem pravilu pretvorbe jezikov',
 
 # "Undo" feature
 'undo-success' => 'Urejanje ste razveljavili. Prosim, potrdite in nato shranite spodnje spremembe.',
@@ -1118,7 +1123,8 @@ Prosimo, preverite dnevnik.',
 'revdelete-only-restricted' => 'Napaka pri skrivanju predmeta z dne $1, $2: ne morete spremeniti vidnosti predmeta pred administratorji brez izbire ene od drugih možnosti vidnosti.',
 'revdelete-reason-dropdown' => '* Pogosti razlogi za izbris
 ** Kršitev avtorskih pravic
-** Neprimerni osebni podatki
+** Neprimerna pripomba ali osebni podatki
+** Neprimerno uporabniško ime
 ** Morebitni žaljivi podatki',
 'revdelete-otherreason' => 'Drug/dodaten razlog:',
 'revdelete-reasonotherlist' => 'Drug razlog',
@@ -1313,7 +1319,7 @@ Tukaj je naključno ustvarjena vrednost, ki jo lahko uporabite: $1',
 'timezoneregion-indian' => 'Indijski ocean',
 'timezoneregion-pacific' => 'Tihi ocean',
 'allowemail' => 'Drugim uporabnikom omogoči pošiljanje e-pošte',
-'prefs-searchoptions' => 'Možnosti iskanja',
+'prefs-searchoptions' => 'Iskanje',
 'prefs-namespaces' => 'Imenski prostori',
 'defaultns' => 'Navadno išči v naslednjih imenskih prostorih:',
 'default' => 'privzeto',
@@ -1749,7 +1755,7 @@ Prosimo, preverite veljavnost in dostopnost naslova URL ter poskusite ponovno.
 'backend-fail-internal' => 'V skladiščnem zaledju »$1« je prišlo do neznane napake.',
 'backend-fail-contenttype' => 'Ne morem določiti vrsto vsebine datoteke za shranjevanje pri »$1«.',
 'backend-fail-batchsize' => 'Skladiščnemu zaledju je dana vrsta $1 {{PLURAL:$1|datotečne operacije|datotečnih operacij}}; omejitev {{PLURAL:$2|je $2 operacija|sta $2 operaciji|so $2 operacije|je $2 operacij}}.',
-'backend-fail-usable' => 'Ne morem zapisati datoteke $1 zaradi nezadostnih dovoljenj ali manjkajočega imenika/vsebnika.',
+'backend-fail-usable' => 'Ne morem prebrati ali zapisati datoteke »$1« zaradi nezadostnih dovoljenj ali manjkajočega imenika/vsebnika.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Ne morem se povezati z listovno zbirko podatkov za skladiščno zaledje »$1«.',
@@ -1885,6 +1891,7 @@ Morda želite urediti njeno opisno stran na tamkajšnji [$2 opisni strani datote
 'shared-repo-from' => 'iz $1',
 'shared-repo' => 'skupno skladišče',
 'shared-repo-name-wikimediacommons' => 'Wikimedijina Zbirka',
+'upload-disallowed-here' => 'Slike žal ne morete prepisati.',
 
 # File reversion
 'filerevert' => 'Vrni $1',
@@ -1994,6 +2001,7 @@ Sedaj je preusmeritev na [[$2]].',
 # Miscellaneous special pages
 'nbytes' => '$1 {{PLURAL:$1|zlog|zloga|zlogi|zlogov|zlogov}}',
 'ncategories' => '$1 {{PLURAL:$1|kategorija|kategoriji|kategorije|kategorij}}',
+'ninterwikis' => '$1 {{PLURAL:$1|medjezikovna povezava|medjezikovni povezavi|medjezikovne povezave|medjezikovnih povezav}}',
 'nlinks' => '$1 {{PLURAL:$1|povezava|povezavi|povezave|povezav|povezav}}',
 'nmembers' => '$1 {{PLURAL:$1|element|elementa|elementi|elementov|elementov}}',
 'nrevisions' => '$1 {{PLURAL:$1|redakcija|redakciji|redakcije|redakcij|redakcij}}',
@@ -2022,6 +2030,7 @@ Sedaj je preusmeritev na [[$2]].',
 'mostlinkedtemplates' => 'Najbolj uporabljane predloge',
 'mostcategories' => 'Članki z največ kategorijami',
 'mostimages' => 'Najbolj uporabljane datoteke',
+'mostinterwikis' => 'Strani z največ medjezikovnimi povezavami',
 'mostrevisions' => 'Največkrat urejane strani',
 'prefixindex' => 'Vse strani s predpono',
 'prefixindex-namespace' => 'Vse strani s predpono (imenski prostor $1)',
@@ -2167,6 +2176,8 @@ Na voljo so morda [[{{MediaWiki:Listgrouprights-helppage}}|dodatne informacije]]
 'mailnologin' => 'Manjka naslov pošiljatelja',
 'mailnologintext' => 'Za pošiljanje e-pošte drugim uporabnikom se [[Special:UserLogin|prijavite]] in v [[Special:Preferences|nastavitvah]] vpišite veljaven e-poštni naslov.',
 'emailuser' => 'Pošlji uporabniku e-pismo',
+'emailuser-title-target' => 'Pošlji {{GENDER:$1|uporabniku|uporabnici}} e-pošto',
+'emailuser-title-notarget' => 'Pošlji uporabniku e-pismo',
 'emailpage' => 'Pošlji uporabniku e-pismo',
 'emailpagetext' => 'S spodnjim obrazcem lahko uporabniku pošljete e-poštno sporočilo.
 E-poštni naslov, ki ste ga vpisali v [[Special:Preferences|uporabniških nastavitvah]], bo v e-sporočilu naveden kot naslov »Od:«, tako da bo prejemnik lahko odgovoril neposredno vam.',
@@ -2818,6 +2829,7 @@ Vsi uvozi med wikiji so zabeleženi v [[Special:Log/import|dnevniku uvozov]].',
 'import-interwiki-templates' => 'Vključi vse predloge',
 'import-interwiki-submit' => 'Uvozi',
 'import-interwiki-namespace' => 'Prenesi strani v imenski prostor:',
+'import-interwiki-rootpage' => 'Ciljna korenska stran (neobvezno):',
 'import-upload-filename' => 'Ime datoteke:',
 'import-comment' => 'Komentar:',
 'importtext' => 'Prosimo, izvozite datoteko z izvornega wikija s pomočjo [[Special:Export|orodja za izvoz]].
@@ -2854,6 +2866,9 @@ Prosimo, poskusite znova.',
 'import-error-interwiki' => 'Strani »$1« nismo uvozili, ker je njeno ime rezervirano za zunanje povezovanje (interwiki).',
 'import-error-special' => 'Strani »$1« nismo uvozili, ker spada k posebnemu imenskemu prostoru, ki ne dovoljuje strani.',
 'import-error-invalid' => 'Strani »$1« nismo uvozili, ker njeno ime ni veljavno.',
+'import-options-wrong' => '{{PLURAL:$2|Napačna možnost|Napačni možnosti|Napačne možnosti}}: <nowiki>$1</nowiki>',
+'import-rootpage-invalid' => 'Podana korenska stran ni veljaven naslov.',
+'import-rootpage-nosubpage' => 'Imenski prostor »$1« korenske strani ne dovoli podstrani.',
 
 # Import log
 'importlogpage' => 'Dnevnik uvozov',
@@ -2970,11 +2985,33 @@ Omogoča vnos pojasnila v povzetku urejanja.',
 
 # Info page
 'pageinfo-title' => 'Informacije o »$1«',
-'pageinfo-header-edits' => 'Urejanja',
+'pageinfo-header-basic' => 'Osnovni podatki',
+'pageinfo-header-edits' => 'Zgodovina urejanja',
+'pageinfo-header-restrictions' => 'Zaščita strani',
+'pageinfo-header-properties' => 'Lastnosti strani',
+'pageinfo-display-title' => 'Naslov za prikaz',
+'pageinfo-default-sort' => 'Privzeti ključ za razvrščanje',
+'pageinfo-length' => 'Dolžina strani (v bajtih)',
+'pageinfo-article-id' => 'ID strani',
+'pageinfo-robot-policy' => 'Status iskalnega pogona',
+'pageinfo-robot-index' => 'Na voljo za indeksiranje',
+'pageinfo-robot-noindex' => 'Ni na voljo za indeksiranje',
 'pageinfo-views' => 'Število ogledov',
-'pageinfo-watchers' => 'Število spremljevalcev',
-'pageinfo-edits' => 'Število urejanj',
-'pageinfo-authors' => 'Število različnih avtorjev',
+'pageinfo-watchers' => 'Število spremljevalcev strani',
+'pageinfo-redirects-name' => 'Preusmeritve na stran',
+'pageinfo-subpages-name' => 'Podstrani strani',
+'pageinfo-subpages-value' => '$1 ($2 {{PLURAL:$2|preusmeritev|preusmeritvi|preusmeritve|preusmeritev}}; $3 {{PLURAL:$3|nepreusmeritev|nepreusmeritvi|nepreusmeritve|nepreusmeritev}})',
+'pageinfo-firstuser' => 'Ustvarjalec strani',
+'pageinfo-firsttime' => 'Datum ustvarjanja strani',
+'pageinfo-lastuser' => 'Zadnji urejevalec',
+'pageinfo-lasttime' => 'Datum zadnjega urejanja',
+'pageinfo-edits' => 'Skupno število urejanj',
+'pageinfo-authors' => 'Skupno število različnih avtorjev',
+'pageinfo-recent-edits' => 'Nedavno število urejanj (zadnjih $1)',
+'pageinfo-recent-authors' => 'Nedavno število različnih avtorjev',
+'pageinfo-restriction' => 'Zaščita strani ({{lcfirst:$1}})',
+'pageinfo-hidden-categories' => '{{PLURAL:$1|Skrita kategorija|Skriti kategoriji|Skrite kategorije}} ($1)',
+'pageinfo-templates' => '{{PLURAL:$1|Vključena predloga|Vključeni predlogi|Vključene predloge}} ($1)',
 
 # Patrolling
 'markaspatrolleddiff' => 'Označite kot nadzorovano',
@@ -3019,6 +3056,7 @@ Z njenim zagonom lahko ogrozite vaš sistem.",
 'file-info-size-pages' => '$1 × $2 točk, velikost datoteke: $3, vrsta MIME: $4, $5 {{PLURAL:$5|stran|strani}}',
 'file-nohires' => 'Slika višje ločljivosti ni na voljo.',
 'svg-long-desc' => 'datoteka SVG, v izvirniku $1 × $2 slikovnih točk, velikost datoteke: $3',
+'svg-long-desc-animated' => 'animirana datoteka SVG, v izvirniku $1 × $2 slikovnih točk, velikost datoteke: $3',
 'show-big-image' => 'Slika v višji ločljivosti',
 'show-big-image-preview' => 'Velikost predogleda: $1.',
 'show-big-image-other' => '{{PLURAL:$2|Druga resolucija|Drugi resoluciji|Druge resolucije}}: $1.',
@@ -3028,6 +3066,8 @@ Z njenim zagonom lahko ogrozite vaš sistem.",
 'file-info-png-looped' => 'ponavljajoče',
 'file-info-png-repeat' => 'predvajano {{PLURAL:$1|$1-krat}}',
 'file-info-png-frames' => '$1 {{PLURAL:$1|sličica|sličici|sličice|sličic}}',
+'file-no-thumb-animation' => "'''Opozorilo: Sličica te datoteke zaradi tehničnih omejitev ne bo animirana.'''",
+'file-no-thumb-animation-gif' => "'''Opozorilo: Sličice visokoločljivostnih slik GIF, kot je ta, zaradi tehničnih omejitev ne bodo animirane.'''",
 
 # Special:NewFiles
 'newimages' => 'Galerija novih datotek',
index cc1894a..809a2b5 100644 (file)
@@ -783,10 +783,11 @@ $1',
 'protectedpagetext' => 'Ова страница је закључана за уређивања.',
 'viewsourcetext' => 'Можете да погледате и умножите изворни текст ове странице:',
 'viewyourtext' => "Можете да погледате и умножите извор '''ваших измена''' на овој страници:",
-'protectedinterface' => 'Ова страница је заштићена јер садржи текст корисничког сучеља програма.',
+'protectedinterface' => 'Ова страница садржи текст корисничког окружења за софтвер на овом викију и заштићена је ради спречавања злоупотребе.
+Да бисте додали или изменили преводе свих викија, посетите [//translatewiki.net/ Транслејтвики], пројекат за локализацију Медијавикија.',
 'editinginterface' => "'''Упозорење:''' уређујете страницу која се користи за приказивање текста корисничког окружења.
-Измене на овој страници ће утицати на све кориснике.
\9fоÑ\81еÑ\82иÑ\82е [//translatewiki.net/wiki/Main_Page?setlang=sr_ec Ð¢Ñ\80анÑ\81леÑ\98Ñ\82вики], Ð¿Ñ\80оÑ\98екаÑ\82 Ð½Ð°Ð¼ÐµÑ\9aен Ð·Ð° Ð¿Ñ\80евоÑ\92еÑ\9aе Медијавикија.",
+Измене на овој страници ће утицати на све кориснике овог викија.
\94а Ð±Ð¸Ñ\81Ñ\82е Ð´Ð¾Ð´Ð°Ð»Ð¸ Ð¸Ð»Ð¸ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ð»Ð¸ Ð¿Ñ\80еводе Ñ\81виÑ\85 Ð²Ð¸ÐºÐ¸Ñ\98а, Ð¿Ð¾Ñ\81еÑ\82иÑ\82е [//translatewiki.net/wiki/Main_Page?setlang=sr_ec Ð¢Ñ\80анÑ\81леÑ\98Ñ\82вики], Ð¿Ñ\80оÑ\98екаÑ\82 Ð·Ð° Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ\86иÑ\98Ñ\83 Медијавикија.",
 'sqlhidden' => '(SQL упит је сакривен)',
 'cascadeprotected' => 'Ова страница је закључана јер садржи {{PLURAL:$1|следећу страницу која је заштићена|следеће странице које су заштићене}} „преносивом“ заштитом:
 $2',
@@ -1074,7 +1075,7 @@ $2
 Можете [[Special:Search/{{PAGENAME}}|потражити овај наслов]] на другим страницама,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} претражити сродне извештаје] или [{{fullurl:{{FULLPAGENAME}}|action=edit}} уредити страницу]</span>.',
 'noarticletext-nopermission' => 'На овој страници тренутно нема садржаја.
\9cожеÑ\82е [[Special:Search/{{PAGENAME}}|поÑ\82Ñ\80ажиÑ\82и Ð¾Ð²Ð°Ñ\98 Ð½Ð°Ñ\81лов]] Ð½Ð° Ð´Ñ\80Ñ\83гим Ñ\81Ñ\82Ñ\80аниÑ\86ама Ð¸Ð»Ð¸ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Ð¿Ñ\80еÑ\82Ñ\80ажиÑ\82и Ñ\81Ñ\80одне Ð¸Ð·Ð²ÐµÑ\88Ñ\82аÑ\98е]</span>.',
\9cожеÑ\82е [[Special:Search/{{PAGENAME}}|поÑ\82Ñ\80ажиÑ\82и Ð¾Ð²Ð°Ñ\98 Ð½Ð°Ñ\81лов]] Ð½Ð° Ð´Ñ\80Ñ\83гим Ñ\81Ñ\82Ñ\80аниÑ\86ама Ð¸Ð»Ð¸ <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} Ð¿Ñ\80еÑ\82Ñ\80ажиÑ\82и Ñ\81Ñ\80одне Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÐµ]</span>, Ð°Ð»Ð¸ Ð½ÐµÐ¼Ð°Ñ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð´Ð° Ð½Ð°Ð¿Ñ\80авиÑ\82е Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83.',
 'missing-revision' => 'Не могу да пронађем измену бр. $1 на страници под називом „{{PAGENAME}}“.
 
 Ово се обично дешава када пратите застарелу везу до странице која је обрисана.
@@ -1347,7 +1348,8 @@ $1",
 'revdelete-only-restricted' => 'Грешка при сакривању ставке од $1, $2: не можете сакрити ставке од администратора без избора других могућности видљивости.',
 'revdelete-reason-dropdown' => '*Уобичајени разлози за брисање
 ** Кршење ауторског права
-** Неодговарајући лични подаци
+** Неприкладан коментар или лични подаци
+** Неприкладно корисничко име
 ** Увредљиви подаци',
 'revdelete-otherreason' => 'Други/додатни разлог:',
 'revdelete-reasonotherlist' => 'Други разлог',
@@ -1989,7 +1991,7 @@ $1',
 'backend-fail-internal' => 'Дошло је до непознате грешке у складишној основи „$1“.',
 'backend-fail-contenttype' => 'Не могу да утврдим какав садржај има датотека коју треба да сместим у „$1“.',
 'backend-fail-batchsize' => 'Складишна основа је добила блокаду од $1 {{PLURAL:$1|операције|операције|операција}}; ограничење је $2 {{PLURAL:$2|операција|операције|операција}}.',
-'backend-fail-usable' => 'Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð·Ð°Ð¿Ð¸Ñ\88ем Ð´Ð°Ñ\82оÑ\82екÑ\83 $1 јер немате довољно дозвола или вам недостају фасцикле/садржаоци.',
+'backend-fail-usable' => 'Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð¿Ñ\80оÑ\87иÑ\82ам Ð¸Ð»Ð¸ Ð·Ð°Ð¿Ð¸Ñ\88ем Ð´Ð°Ñ\82оÑ\82екÑ\83 â\80\9e$1â\80\9c јер немате довољно дозвола или вам недостају фасцикле/садржаоци.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Не могу да се повежем с новинарском базом за складишну основу „$1“.',
@@ -3288,7 +3290,7 @@ $1',
 'pageinfo-authors' => 'Број засебних аутора',
 'pageinfo-recent-edits' => 'Број скорашњих измена (у последњих $1)',
 'pageinfo-recent-authors' => 'Број скорашњих засебних аутора',
-'pageinfo-restriction' => 'Заштита странице (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Заштита странице ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Магична реч|Магичне речи}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Сакривена категорија|Сакривене категорије}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Укључени шаблон|Укључени шаблони}} ($1)',
index 93234fa..5190466 100644 (file)
@@ -692,10 +692,11 @@ Upit: $2',
 'protectedpagetext' => 'Ova stranica je zaključana za uređivanja.',
 'viewsourcetext' => 'Možete da pogledate i umnožite izvorni tekst ove stranice:',
 'viewyourtext' => "Možete da pogledate i umnožite izvor '''vaših izmena''' na ovoj stranici:",
-'protectedinterface' => 'Ova stranica je zaštićena jer sadrži tekst korisničkog sučelja programa.',
+'protectedinterface' => 'Ova stranica sadrži tekst korisničkog okruženja za softver na ovom vikiju i zaštićena je radi sprečavanja zloupotrebe.
+Da biste dodali ili izmenili prevode svih vikija, posetite [//translatewiki.net/ Translejtviki], projekat za lokalizaciju Medijavikija.',
 'editinginterface' => "'''Upozorenje:''' uređujete stranicu koja se koristi za prikazivanje teksta korisničkog okruženja.
-Izmene na ovoj stranici će uticati na sve korisnike.
-Posetite [//translatewiki.net/wiki/Main_Page?setlang=sr_ec Translejtviki], projekat namenjen za prevođenje Medijavikija.",
+Izmene na ovoj stranici će uticati na sve korisnike ovog vikija.
+Da biste dodali ili izmenili prevode svih vikija, posetite [//translatewiki.net/wiki/Main_Page?setlang=sr_ec Translejtviki], projekat za lokalizaciju Medijavikija.",
 'sqlhidden' => '(SQL upit je sakriven)',
 'cascadeprotected' => 'Ova stranica je zaključana jer sadrži {{PLURAL:$1|sledeću stranicu koja je zaštićena|sledeće stranice koje su zaštićene}} „prenosivom“ zaštitom:
 $2',
@@ -983,7 +984,7 @@ Ako ste anonimni korisnik i mislite da su vam upućene primedbe, [[Special:UserL
 Možete [[Special:Search/{{PAGENAME}}|potražiti ovaj naslov]] na drugim stranicama,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti srodne izveštaje] ili [{{fullurl:{{FULLPAGENAME}}|action=edit}} urediti stranicu]</span>.',
 'noarticletext-nopermission' => 'Na ovoj stranici trenutno nema sadržaja.
-Možete [[Special:Search/{{PAGENAME}}|potražiti ovaj naslov]] na drugim stranicama ili <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti srodne izveštaje]</span>.',
+Možete [[Special:Search/{{PAGENAME}}|potražiti ovaj naslov]] na drugim stranicama ili <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pretražiti srodne dnevnike]</span>, ali nemate dozvolu da napravite ovu stranicu.',
 'missing-revision' => 'Ne mogu da pronađem izmenu br. $1 na stranici pod nazivom „{{PAGENAME}}“.
 
 Ovo se obično dešava kada pratite zastarelu vezu do stranice koja je obrisana.
@@ -1256,7 +1257,8 @@ Pogledajte istoriju.',
 'revdelete-only-restricted' => 'Greška pri sakrivanju stavke od $1, $2: ne možete sakriti stavke od administratora bez izbora drugih mogućnosti vidljivosti.',
 'revdelete-reason-dropdown' => '*Uobičajeni razlozi za brisanje
 ** Kršenje autorskog prava
-** Neodgovarajući lični podaci
+** Neprikladan komentar ili lični podaci
+** Neprikladno korisničko ime
 ** Uvredljivi podaci',
 'revdelete-otherreason' => 'Drugi/dodatni razlog:',
 'revdelete-reasonotherlist' => 'Drugi razlog',
@@ -1898,7 +1900,7 @@ Ako se problem ne reši, kontaktirajte [[Special:ListUsers/sysop|administratora]
 'backend-fail-internal' => 'Došlo je do nepoznate greške u skladišnoj osnovi „$1“.',
 'backend-fail-contenttype' => 'Ne mogu da utvrdim kakav sadržaj ima datoteka koju treba da smestim u „$1“.',
 'backend-fail-batchsize' => 'Skladišna osnova je dobila blokadu od $1 {{PLURAL:$1|operacije|operacije|operacija}}; ograničenje je $2 {{PLURAL:$2|operacija|operacije|operacija}}.',
-'backend-fail-usable' => 'Ne mogu da zapišem datoteku $1 jer nemate dovoljno dozvola ili vam nedostaju fascikle/sadržaoci.',
+'backend-fail-usable' => 'Ne mogu da pročitam ili zapišem datoteku „$1“ jer nemate dovoljno dozvola ili vam nedostaju fascikle/sadržaoci.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Ne mogu da se povežem s novinarskom bazom za skladišnu osnovu „$1“.',
@@ -3197,7 +3199,7 @@ Ovo je verovatno izazvano vezom do spoljašnjeg sajta koji se nalazi na crnoj li
 'pageinfo-authors' => 'Broj zasebnih autora',
 'pageinfo-recent-edits' => 'Broj skorašnjih izmena (u poslednjih $1)',
 'pageinfo-recent-authors' => 'Broj skorašnjih zasebnih autora',
-'pageinfo-restriction' => 'Zaštita stranice (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Zaštita stranice ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magična reč|Magične reči}} ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Uključeni šablon|Uključeni šabloni}} ($1)',
index 9635ba4..c83e826 100644 (file)
@@ -774,7 +774,7 @@ Kontrollera din stavning, eller [[Special:UserLogin/signup|skapa ett nytt konto]
 'nosuchusershort' => 'Det finns ingen användare som heter "$1". Kontrollera att du stavat rätt.',
 'nouserspecified' => 'Du måste ange ett användarnamn.',
 'login-userblocked' => 'Denna användare är blockerad. Login inte tillåtet.',
-'wrongpassword' => 'Lösenordet du angav är felaktigt. Försök igen',
+'wrongpassword' => 'Lösenordet du angav är felaktigt. Försök igen.',
 'wrongpasswordempty' => 'Lösenordet som angavs var blankt. Var god försök igen.',
 'passwordtooshort' => 'Lösenord måste innehålla minst {{PLURAL:$1|$1 tecken}}.',
 'password-name-match' => 'Ditt lösenord måste vara olikt ditt användarnamn.',
@@ -1241,7 +1241,8 @@ Vänligen kontrollera loggarna.',
 'revdelete-only-restricted' => 'Fel vid döljning av objekt daterat $2, $1: du kan inte undanhålla objekt från att visas för administratörer utan att också välja en av de övriga visningsalternativen.',
 'revdelete-reason-dropdown' => '*Vanliga orsaker till radering
 ** Brott mot copyright
-** Opassande personupplysningar
+** Opassande kommentar eller personupplysningar
+** Opassande användarnamn
 ** Möjligt ärekränkande uppgifter',
 'revdelete-otherreason' => 'Annan/ytterligare anledning:',
 'revdelete-reasonotherlist' => 'Annan anledning',
@@ -3130,7 +3131,7 @@ Detta orsakades troligen av en länk till en svartlistad webbplats.',
 'pageinfo-authors' => 'Totalt antal olika författare',
 'pageinfo-recent-edits' => 'Antal nyliga redigeringar (inom de senaste $1)',
 'pageinfo-recent-authors' => 'Antal nyliga olika författare',
-'pageinfo-restriction' => 'Sidskydd (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Sidskydd ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Magiskt|Magiska}} ord ($1)',
 'pageinfo-hidden-categories' => '{{PLURAL:$1|Dold kategori|Dolda kategorier}} ($1)',
 
index c4e2b29..9ea67af 100644 (file)
@@ -2286,7 +2286,7 @@ Andika sababu ya kuzuia chini (kwa mfano, kwa kutaja mifano ya kurasa zilizohari
 'blockipsuccesssub' => 'Kulifaulu kumzuia',
 'ipb-edit-dropdown' => 'Hariri sababu za kuzuia',
 'ipb-unblock-addr' => 'Acha kumzuia $1',
-'ipb-unblock' => 'Acha kumzuia mtumiaji au anwani wa IP',
+'ipb-unblock' => 'Acha kumzuia mtumiaji au anwani ya IP',
 'ipb-blocklist-contribs' => 'Michango ya $1',
 'unblockip' => 'Acha kuzuia mtumiaji',
 'blocklist' => 'Watumiaji waliozuiliwa',
@@ -2297,7 +2297,7 @@ Andika sababu ya kuzuia chini (kwa mfano, kwa kutaja mifano ya kurasa zilizohari
 'blocklist-expiry' => 'Itakwisha',
 'blocklist-reason' => 'Sababu',
 'ipblocklist-submit' => 'Tafuta',
-'ipblocklist-otherblocks' => ' {{PLURAL:$1|Uzuio mwingine|Zuio zingine}}',
+'ipblocklist-otherblocks' => '{{PLURAL:$1|Uzuio mwingine|Zuio zingine}}',
 'infiniteblock' => 'milele',
 'expiringblock' => 'inakwisha tarehe $1 saa $2',
 'emailblock' => 'barua pepe imezuiliwa',
@@ -2480,7 +2480,7 @@ Ulihafadhie katika tarakalishi yako, halafu ulipakie hapa.',
 'importbadinterwiki' => 'Kiungo kibovu kati za wiki',
 'importnotext' => 'Tupu au bila maandishi',
 'importsuccess' => 'Kuleta kumekamilishwa!',
-'import-noarticle' => 'Hakuna kurasa za kuleta!',
+'import-noarticle' => 'Hakuna kurasa ya kuingiza!',
 'import-token-mismatch' => 'Data ya kipindi zilipotelewa.
 Tafadhali jaribu tena.',
 
index e8e584b..ac40d29 100644 (file)
@@ -2006,7 +2006,7 @@ $1',
 'notanarticle' => 'ஒரு கட்டுரைப் பக்கமல்ல',
 'notvisiblerev' => 'திருத்தம் நீக்கப்பட்டுள்ளது',
 'watchnochange' => 'காட்சிப்படுத்தப்பட்ட கால இடைவெளியில், கவனிப்பிலுள்ள, உங்கள் விடயமெதுவும் தொகுக்கப்பட்டிருக்கவில்லை.',
-'watchlist-details' => 'பà¯\87à®\9aà¯\8dà®\9aà¯\81பà¯\8d à®ªà®\95à¯\8dà®\95à®\99à¯\8dà®\95ளà¯\88à®\95் தவிர்த்து, {{PLURAL:$1|$1 பக்கம் கவனிக்கப்பட்டது.|$1 பக்கங்கள் கவனிக்கப்பட்டன.}}',
+'watchlist-details' => 'பà¯\87à®\9aà¯\8dà®\9aà¯\81பà¯\8d à®ªà®\95à¯\8dà®\95à®\99à¯\8dà®\95ளà¯\88த் தவிர்த்து, {{PLURAL:$1|$1 பக்கம் கவனிக்கப்பட்டது.|$1 பக்கங்கள் கவனிக்கப்பட்டன.}}',
 'wlheader-enotif' => '* மின்னஞ்சல் அறிவித்தல்கள் செயல்படுத்தப்பட்டுள்ளன.',
 'wlheader-showupdated' => "* உமது கடைசி வருகைக்குப் பின்னர் மாற்றங்கள் செய்யப்பட்ட பக்கங்கள் '''தடித்த எழுத்துக்களால்''' காட்டப்பட்டுள்ளன",
 'watchmethod-recent' => 'கவனிக்கப்படுகின்ற பக்கங்களுக்காக, அண்மைய தொகுப்புகள் தேடிப் பார்க்கப்படுகிறன',
index 95d9f23..9cd12cb 100644 (file)
@@ -1259,7 +1259,7 @@ $1",
 'prefs-help-email-others' => 'మీ వాడుకరి లేదా చర్చా పేజీలలో ఉండే లంకె ద్వారా ఇతరులు మిమ్మల్ని ఈ-మెయిలు ద్వారా సంప్రదించే వీలుకల్పించవచ్చు.
 ఇతరులు మిమ్మల్ని సంప్రదించినప్పుడు మీ ఈ-మెయిలు చిరునామా బహిర్గతమవదు.',
 'prefs-help-email-required' => 'ఈ-మెయిలు చిరునామా తప్పనిసరి.',
-'prefs-info' => 'à°ªà±\8dరాధమిక సమాచారం',
+'prefs-info' => 'à°ªà±\8dరాథమిక సమాచారం',
 'prefs-i18n' => 'అంతర్జాతీయీకరణ',
 'prefs-signature' => 'సంతకం',
 'prefs-dateformat' => 'తేదీ ఆకృతి',
@@ -2021,7 +2021,7 @@ https://www.mediawiki.org/wiki/Manual:Image_Authorization చూడండి.',
 'mywatchlist' => 'నా వీక్షణ జాబితా',
 'watchlistfor2' => '$1 కొరకు $2',
 'nowatchlist' => 'మీ వీక్షణ జాబితా ఖాళీగా ఉంది.',
-'watchlistanontext' => 'మీ వీక్షణ జాబితా లోని అంశాలను చూసేందుకు లేదా మార్చేందుకు మీరు $1 ఉండాలి.',
+'watchlistanontext' => 'మీ వీక్షణ జాబితా లోని అంశాలను చూసేందుకు లేదా మార్చేందుకు మీరు $1.',
 'watchnologin' => 'లాగిన్‌ అయిలేరు',
 'watchnologintext' => 'మీ వీక్షణ జాబితాను మార్చడానికి మీరు [[Special:UserLogin|లాగిన్‌]] అయి ఉండాలి.',
 'addwatch' => 'వీక్షణ జాబితాలో చేర్చు',
@@ -2735,6 +2735,7 @@ $UNWATCHURL కి వెళ్ళండి.
 
 # Info page
 'pageinfo-title' => '"$1" గురించి సమాచారం',
+'pageinfo-header-basic' => 'ప్రాథమిక సమాచారం',
 'pageinfo-header-edits' => 'మార్పుల చరిత్ర',
 'pageinfo-views' => 'వీక్షణల సంఖ్య',
 'pageinfo-watchers' => 'పేజీ వీక్షకుల సంఖ్య',
index eea0dee..c15b40b 100644 (file)
@@ -213,7 +213,7 @@ $messages = array(
 'thursday' => 'Huwebes',
 'friday' => 'Biyernes',
 'saturday' => 'Sabado',
-'sun' => 'Lin',
+'sun' => 'Ling',
 'mon' => 'Lun',
 'tue' => 'Mar',
 'wed' => 'Miy',
@@ -360,7 +360,7 @@ $messages = array(
 'projectpage' => 'Tingnan ang pahina ng proyekto',
 'imagepage' => 'Tingnan ang pahina ng talaksan',
 'mediawikipage' => 'Tingnan ang pahina ng mensahe',
-'templatepage' => 'Tingnan ang pahina ng suleras',
+'templatepage' => 'Tingnan ang pahina ng padron',
 'viewhelppage' => 'Tingnan ang pahina ng tulong',
 'categorypage' => 'Tingnan ang pahina ng kategorya',
 'viewtalkpage' => 'Tingnan ang usapan',
@@ -426,9 +426,9 @@ Tingnan ang [[Special:Version|pahina ng bersiyon]].',
 'editsection' => 'baguhin',
 'editsection-brackets' => '[$1]',
 'editold' => 'baguhin',
-'viewsourceold' => 'tingnan ang pinagmulan',
+'viewsourceold' => 'tingnan ang batayan',
 'editlink' => 'baguhin',
-'viewsourcelink' => 'tingnan ang pinagmulan',
+'viewsourcelink' => 'tingnan ang batayan',
 'editsectionhint' => 'Baguhin ang seksiyon: $1',
 'toc' => 'Mga nilalaman',
 'showtoc' => 'ipakita',
@@ -438,13 +438,13 @@ Tingnan ang [[Special:Version|pahina ng bersiyon]].',
 'thisisdeleted' => 'Tingnan o ibalik ang $1?',
 'viewdeleted' => 'Tingnan ang $1?',
 'restorelink' => '{{PLURAL:$1|isang binurang pagbabago|$1 binurang pagbabago}}',
-'feedlinks' => 'Subo/Karga:',
+'feedlinks' => 'Karga:',
 'feed-invalid' => 'Hindi tanggap na uri ng serbisyo ng pagpaparating.',
 'feed-unavailable' => 'Walang serbisyo mula sa sindikasyong pangpaglalathala',
-'site-rss-feed' => '$1 kargang RSS',
-'site-atom-feed' => '$1 kargang Atom',
-'page-rss-feed' => '"$1" kargang RSS',
-'page-atom-feed' => '"$1" kargang Atom',
+'site-rss-feed' => 'Kargang RSS ng $1',
+'site-atom-feed' => 'Kargang Atom ng $1',
+'page-rss-feed' => 'Kargang RSS ng "$1"',
+'page-atom-feed' => 'Kargang Atom ng "$1"',
 'feed-atom' => 'Atom',
 'feed-rss' => 'RSS',
 'red-link-title' => '$1 (hindi umiiral ang pahina)',
@@ -459,7 +459,7 @@ Tingnan ang [[Special:Version|pahina ng bersiyon]].',
 'nstab-project' => 'Pahina ng proyekto',
 'nstab-image' => 'Talaksan',
 'nstab-mediawiki' => 'Mensahe',
-'nstab-template' => 'Suleras',
+'nstab-template' => 'Padron',
 'nstab-help' => 'Pahina ng tulong',
 'nstab-category' => 'Kategorya',
 
@@ -608,8 +608,8 @@ Paki-andar mo po ang mga ito, pagkatapos ay lumagda na gamit ang bago mong panga
 'nocookieslogin' => "Gumagamit ang {{SITENAME}} ng mga kuki (''cookies'') para mailagda ang mga tagagamit.
 Hindi mo pinagagana ang mga kuki.
 Paki-andar mo ang mga ito at sumubok uli.",
-'nocookiesfornew' => 'Hindi nalikha ang akawnt ng tagagamit, dahil hindi namin matiyak ang pinagmulan nito.
-Tiyaking mayroon kang pinagaganang mga otap, ikargang muli ang pahinang ito at subuking muli.',
+'nocookiesfornew' => 'Hindi nalikha ang kuwenta ng tagagamit, dahil hindi namin matiyak ang pinagmulan nito.
+Tiyaking mayroon kang pinagaganang mga kuki, ikarga muli ang pahinang ito at subukan muli.',
 'nocookiesforlogin' => '{{int:nocookieslogin}}',
 'noname' => 'Hindi mo tinukoy ang isang tanggap na pangalan ng tagagamit.',
 'loginsuccesstitle' => 'Matagumpay ang paglagda',
@@ -640,19 +640,19 @@ Kung ibang tao ang humiling nito, o kung naalala mo na ang iyong hudyat,
 at hindi mo na ibig pang baguhin ito, maaari mong huwag pansinin ang mensaheng ito at
 magpatuloy sa paggamit ng iyong lumang hudyat.',
 'noemail' => 'Walang nakatalang adres ng e-liham para sa tagagamit na "$1".',
-'noemailcreate' => 'Kailangan mong magbigay ng may-bisang adres ng e-liham',
+'noemailcreate' => 'Kailangan mong magbigay ng may-bisang direksiyong e-liham',
 'passwordsent' => 'Isang bagong hudyat ang ipinadala sa adres ng e-liham na nakatala para kay "$1".
 Lumagda/Tumala lang po muli pagkaraan mong matanggap ito.',
 'blocked-mailpassword' => 'Hinarangan sa paggawa ng mga pagbabago ang iyong adres ng IP, at kaya hindi rin pinapahintulutang gumamit ng tungkuling makabawi ng hudyat para maiwasan ang pangaabuso.',
-'eauthentsent' => 'Nagpadala ng isang e-liham na pangkompirmasyon doon sa iniharap na adres ng e-liham.
+'eauthentsent' => 'Nagpadala ng isang e-liham na pangkompirmasyon doon sa iniharap na direksiyong e-liham.
 Bago magpadala ng iba pang e-liham sa kuwenta, kailangan mong sundin ang mga tagubiling nasa loob ng e-liham, para mapatunayang iyo talaga ang kuwenta.',
 'throttled-mailpassword' => 'Nagpadala na ng isang paalalang panghudyat, nitong huling {{PLURAL:$1|oras|$1 oras}}.
 Para maiwasin ang pangaabuso, isang paalalang panghudyat lang ang ipapadala bawat {{PLURAL:$1|oras|$1 oras}}.',
 'mailerror' => 'Kamalian sa pagpapadala ng liham: $1',
-'acct_creation_throttle_hit' => 'Ang mga panauhin sa wiking ito na gumagamit ng adres ng IP mo ay nakalikha na ng {{PLURAL:$1|1 kuwenta|$1 kuwenta}} sa loob ng huling araw, na siyang pinakamataas na pinapahintulutan sa loob ng sakop ng panahong ito.
-Bilang kinalabasan, ang mga panauhing gumagamit ng ganitong adres ng IP ay hindi na muna makakalikha ng anumang karagdagang kuwenta sa ngayon.',
+'acct_creation_throttle_hit' => 'Ang mga panauhin sa wiking ito na gumagamit ng direksiyong IP mo ay nakalikha na ng {{PLURAL:$1|1 kuwenta|$1 kuwenta}} sa loob ng huling araw, na siyang pinakamataas na pinapahintulutan sa loob ng sakop ng panahong ito.
+Bilang kinalabasan, ang mga panauhing gumagamit ng ganitong direksiyong IP ay hindi na muna makakalikha ng anumang karagdagang kuwenta sa ngayon.',
 'emailauthenticated' => 'Napatunayan na ang iyong direksiyong e-liham sa $2 noong $3.',
-'emailnotauthenticated' => 'Hindi pa napapatunayan ang iyong adres ng e-liham.
+'emailnotauthenticated' => 'Hindi pa napapatunayan ang iyong direksiyong e-liham.
 Walang e-liham na ipapadala para sa anumang sumusunod na tampok na kasangkapang-katangian.',
 'noemailprefs' => 'Tumukoy ng isang direksiyong e-liham sa loob ng mga nais mo upang gumana ang mga kasangkapang-katangiang ito.',
 'emailconfirmlink' => 'Pakikompirma ang iyong direksiyong e-liham.',
@@ -793,7 +793,7 @@ Maaari kang makipag-ugnayan kay $1 o sa ibang [[{{MediaWiki:Grouppage-sysop}}|ta
 Hindi mo magagamit ang kasangkapang-katangiang 'magpadala ng e-liham sa tagagamit' hangga't hindi tinutukoy ang isang tanggap na direksiyong e-liham sa iyong [[Special:Preferences|mga kagustuhan]] at hindi ka pa hinaharangan/hinahadlangan sa paggamit nito.
 Ang kasalukuyan mong direksiyong IP ay $3, at ang ID ng pagharang/paghadlang ay #$5.
 Pakisama ang lahat ng mga detalye sa anumang mga pagtatanong na ginagawa/gagawin mo.",
-'autoblockedtext' => 'Kusang hinadlangan/hinarang ang adres ng IP mo dahil ginamit ito ng ibang tagagamit, na hinadlangan/hinarang ni $1.
+'autoblockedtext' => 'Kusang hinadlangan/hinarang ang direksiyong IP mo dahil ginamit ito ng ibang tagagamit, na hinadlangan/hinarang ni $1.
 Ang ibinigay na dahilan ay:
 
 :\'\'$2\'\'
@@ -804,9 +804,9 @@ Ang ibinigay na dahilan ay:
 
 Maaari kang makipagugnayan kay $1 o sa isa sa iba pang [[{{MediaWiki:Grouppage-sysop}}|mga tagapangasiwa]] para pagusapan ang paghadlang/pagharang.
 
-Pakitandaang hindi mo maaaring gamitin ang kasangkapang-katangiang "padalhan ng e-liham ang tagagamit na ito" maliban na lamang kung mayroon kang nakatalang tanggap na adres ng e-liham sa iyong [[Special:Preferences|mga kagustuhan]] at hindi ka hinadlangan sa paggamit nito.
+Pakitandaang hindi mo maaaring gamitin ang kasangkapang-katangiang "padalhan ng e-liham ang tagagamit na ito" maliban na lamang kung mayroon kang nakatalang tanggap na direksiyong e-liham sa iyong [[Special:Preferences|mga kagustuhan]] at hindi ka hinadlangan sa paggamit nito.
 
-Ang pangkasalukuyang adres mo ng IP ay $3, at ang ID ng pagharang ay #$5.
+Ang kasalukuyan mong direksiyong IP ay $3, at ang ID ng pagharang ay #$5.
 Pakisama ang lahat ng mga detalyeng nasa itaas sa anumang pagtatanong na gagawin mo.',
 'blockednoreason' => 'walang binigay na dahilan',
 'whitelistedittext' => 'Kailangan mong $1 para makapagbago ng mga pahina.',
@@ -919,7 +919,7 @@ Ang pinakahuling entrada sa talaan ay ibinigay sa baba para sa iyong pagsasanggu
 'cascadeprotectedwarning' => "'''Babala:''' Ikinandado ang pahinang ito upang tanging mga tagagamit na may mga karapatang pang-''sysop'' lamang ang makapagbago nito, dahil kabilang ito sa sumusunod na mga {{PLURAL:$1|pahinang|mga pahinang}} may baita-baitang na panananggalang:",
 'titleprotectedwarning' => "'''Babala:  Ikinandado ang pahinang ito upang [[Special:ListGroupRights|partikular na mga karapatan]] ang kakailanganin upang mailikha ito.'''
 Ang pinakahuling entrada sa talaan ay ibinigay sa baba para sa inyong pagsasangguni:",
-'templatesused' => '{{PLURAL:$1|Suleras|Mga suleras}} na ginagamit sa pahinang ito:',
+'templatesused' => '{{PLURAL:$1|Padron|Mga padron}} na ginagamit sa pahinang ito:',
 'templatesusedpreview' => '{{PLURAL:$1|Suleras|Mga suleras}} na ginagamit sa paunang-tinging ito:',
 'templatesusedsection' => '{{PLURAL:$1|Suleras|Mga suleras}} na ginamit sa seksyong ito:',
 'template-protected' => '(nakasanggalang)',
@@ -958,11 +958,11 @@ Umiiral na ito.',
 
 Dapat na mayroon itong mas mababa sa $2 {{PLURAL:$2|tawag|mga tawag}}, mayroon {{PLURAL:$1|ngayong $1 isang tawag|ngayong $1 mga tawag}}.',
 'expensive-parserfunction-category' => "Mga pahinang may napakaraming mga mamahaling tawag na pantungkulin ng banghay (''parser'')",
-'post-expand-template-inclusion-warning' => 'Babala: Napakalaki ng sukat ng saklaw ng suleras.
-Hindi isasama ang ilang mga suleras.',
-'post-expand-template-inclusion-category' => 'Mga pahina kung saan lumabis ang sukat ng saklaw ng suleras',
-'post-expand-template-argument-warning' => 'Babala: Naglalamang ang pahinang ito ng kahit isang pagaalitan ng suleras na napakalaki ng sukat ng paglawak.  Tinanggal ang mga alitang ito.',
-'post-expand-template-argument-category' => 'Mga pahinang naglalaman ng mga tinanggal na mga alitan ng suleras',
+'post-expand-template-inclusion-warning' => "'''Babala''': Napakalaki ng sukat ng saklaw ng padron.
+Hindi isasama ang ilang mga padron.",
+'post-expand-template-inclusion-category' => 'Mga pahina kung saan lumabis ang sukat ng saklaw ng padron',
+'post-expand-template-argument-warning' => 'Babala: Naglalamang ang pahinang ito ng kahit isang pagaalitan ng padron na napakalaki ng sukat ng paglawak.  Tinanggal ang mga alitang ito.',
+'post-expand-template-argument-category' => 'Mga pahinang naglalaman ng mga tinanggal na mga alitan ng padron',
 'parser-template-loop-warning' => 'Nadiskubreng silo ng suleras: [[$1]]',
 'parser-template-recursion-depth-warning' => 'Lumabis na sa nakatakdang lalim ng rekursyon (pormula) ng suleras ($1)',
 'language-converter-depth-warning' => 'Lumampas sa ($1) ang hangganan ng lalim ng pampalit ng wika',
@@ -1105,9 +1105,10 @@ Hindi mo ito mapupuntahan.',
 'revdelete-concurrent-change' => 'May mali sa pagbabago ng bagay na may petsang $2, $1: ang katayuan nito ay tila nagpapakitang binago ng ibang tao habang sinubukan mong baguhin ito.
 Pakitingnan ang mga talaan.',
 'revdelete-only-restricted' => 'May mali sa pagtatago ng bagay na may petsang $2, $1: hindi mo mapipigil ang mga bagay na matingnan ng mga tagapangasiwa na hindi rin pipili ng isa sa mga pagpipiliang kaugnay ng antas ng pagpapakita.',
-'revdelete-reason-dropdown' => '*Mga karaniwang dahilan sa pagbubura
+'revdelete-reason-dropdown' => '*Mga karaniwang dahilan ng pagbura
 ** Paglabag sa karapatang-ari (kopirayt)
 ** Hindi nararapat na personal na impormasyon
+** Hindi nararapat na pangalan ng tagagamit
 ** Impormasyong maaaring mapanirang-puri',
 'revdelete-otherreason' => 'Iba/karagdagang dahilan:',
 'revdelete-reasonotherlist' => 'Ibang dahilan',
@@ -2908,7 +2909,7 @@ Sagipin mo ito sa iyong kompyuter at papaitaas na ikarga ito rito.',
 'tooltip-ca-nstab-project' => 'Tingnan ang pahina ng proyekto',
 'tooltip-ca-nstab-image' => 'Tingnan ang pahina ng talaksan',
 'tooltip-ca-nstab-mediawiki' => 'Tingnan ang mensahe ng sistema',
-'tooltip-ca-nstab-template' => 'Tingnan ang suleras',
+'tooltip-ca-nstab-template' => 'Tingnan ang padron',
 'tooltip-ca-nstab-help' => 'Tingnan ang pahina ng tulong',
 'tooltip-ca-nstab-category' => 'Tingnan ang pahina ng kaurian/kategorya',
 'tooltip-minoredit' => 'Tandaan ito bilang isang maliit na pagbabago',
@@ -3013,7 +3014,7 @@ Maaaring dahil ito sa isang kawing sa isang nakatalang hinarang dahil di-kinaisn
 'pageinfo-authors' => 'Kabuuang bilang ng magkakabukod na mga may-akda',
 'pageinfo-recent-edits' => 'Kamakailang bilang ng mga pamamatnugot (sa loob ng huling $1)',
 'pageinfo-recent-authors' => 'Kamakailang bilang ng magkakabukod na mga may-akda',
-'pageinfo-restriction' => 'Pruteksiyon ng pahina (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Pruteksiyon ng pahina ({{lcfirst:$1}})',
 'pageinfo-magic-words' => '{{PLURAL:$1|Salita|Mga salita}}ng mahiwaga ($1)',
 'pageinfo-hidden-categories' => 'Nakatagong {{PLURAL:$1|kategorya|mga kategorya}} ($1)',
 'pageinfo-templates' => '{{PLURAL:$1|Suleras|Mga suleras}} ($1) na nasa transklusyon (kasama sa maraming mga lugar)',
index 05b2808..e68c60b 100644 (file)
@@ -246,6 +246,7 @@ $messages = array(
 'listingcontinuesabbrev' => '(дәвом)',
 'index-category' => 'Индекс быә сәһифон.',
 'noindex-category' => 'Индекс нибыә саһифон',
+'broken-file-category' => 'Сәһифон де ко ныкардә фајлинә сәбонон',
 
 'about' => 'Тәсвир',
 'article' => 'Мәғолә',
@@ -360,7 +361,7 @@ $messages = array(
 'privacy' => 'Мәхфијәти сијосәт',
 'privacypage' => 'Project:Мәхфијәти сијосәт',
 
-'badaccess' => 'Ð\98ҹазÓ\99 Ñ\85Ó\99Ñ\82а.',
+'badaccess' => 'Ð\94аÑ\81Ñ\82Ñ\80Ó\99Ñ\81и Ò\93Ó\99лÓ\99Ñ\82',
 'badaccess-group0' => 'Ын фәалијјәти ичра карде әзынишон.',
 
 'ok' => 'OK',
@@ -368,6 +369,7 @@ $messages = array(
 'youhavenewmessages' => 'Шымә сәјоне $1 ($2).',
 'newmessageslink' => 'нујә хәбон',
 'newmessagesdifflink' => 'охонә дәгиши',
+'newmessagesdifflinkplural' => '$1 {{PLURAL:$1|охонә дәгиши|охонә дәгишон}}',
 'editsection' => 'Сәрост кардеј',
 'editold' => 'Сәрост кардеј',
 'viewsourceold' => 'бешемонә коди дијә кардеј',
@@ -405,15 +407,16 @@ $messages = array(
 Хаһиш кардәмон че сәһифә URL-и бә [[Special:ListUsers/sysop|администратори]] бывғандәнән.',
 'missingarticle-rev' => '(рәвојәт#: $1)',
 'missingarticle-diff' => '(Фәрг: $1, $2)',
-'internalerror' => 'Дахили хәта',
-'internalerror_info' => 'Дахили хәта: $1',
-'fileappenderrorread' => 'Ó\98лавон Ð³ејд карде быәдә"$1" һанде ныбе.',
-'formerror' => 'Ð¥Ó\99Ñ\82а: Ð§Ðµ Ñ\84оÑ\80мÓ\99 Ð¼Ó\99лÑ\83моÑ\82он Ó\99кÑ\81 ÐºÐ°Ñ\80де Ò\93еÑ\80Ñ\80и Ð¼Ñ\83мкуне.',
+'internalerror' => 'Дыләтонә ғәләт',
+'internalerror_info' => 'Дыләтонә ғәләт: $1',
+'fileappenderrorread' => 'Ó\98ловон Ò\93ејд карде быәдә"$1" һанде ныбе.',
+'formerror' => 'СÓ\99һв: Ð§Ðµ Ñ\84оÑ\80мÓ\99 Ð¼Ó\99лÑ\83моÑ\82он Ó\99кÑ\81 ÐºÐ°Ñ\80де Ò\93еÑ\80Ñ\80и Ð¼Ñ\8bмкуне.',
 'cannotdelete-title' => 'Сәһифә әбыни рәдд кардеј "$1"',
 'badtitle' => 'Роныдоә ном',
 'badtitletext' => 'Ахтар кардә быә сәһифә ном сәһве, тәјлије, јаанки сәрост доә быәнин мијонзывонон ја мијонвики номон.
 Бе бәзне ки кали рәмзон сәрловһәдә око дој әбыни.',
 'viewsource' => 'Дијә кардеј',
+'exception-nologin' => 'Ыштәни едаштәнијоне',
 
 # Login and logout pages
 'yourname' => 'Иштирокәкә ном:',
@@ -435,6 +438,7 @@ $messages = array(
 'gotaccountlink' => 'Ыштәни едаштеј',
 'userlogin-resetlink' => 'Бә системә дәше мәлумоти јодәдә бекардәјоне?',
 'createaccountmail' => 'бә е-номә',
+'createaccountreason' => 'Сәбәб:',
 'mailmypassword' => 'Нујә парол вығандеј бә Е-номә.',
 'loginlanguagelabel' => 'Зывон: $1',
 
@@ -498,7 +502,7 @@ $messages = array(
 јаанки '''[{{fullurl:{{FULLPAGENAME}}|action=edit}}де жыго номи сәһифә офәјеј ]'''</span>.",
 'noarticletext-nopermission' => 'Есәт бы сәһифәдә мәтн ни. 
 Шымә бәзынејон [[Special:Search/{{PAGENAME}}|пәјдо кардеј конҹо ым ном һесте]] бә ҹо мәғолонәдә,
-јаанки <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} журналон ујғунә нывыштәјон пәјдо кардеј].</span>',
+јаанки <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} журналон ујғунә нывыштәјон пәјдо кардеј].</span>, интаси шымәку изн ни ым сәһифә офәје.',
 'previewnote' => "'''Јодәдә огәтән ки ым һәлә сыфтәнә нишо доје.'''
 Шымә дәгишон һәлә огәтә быәнин!",
 'editing' => 'Редәктә кардеј $1',
@@ -556,6 +560,7 @@ $messages = array(
 'revdelete-show-file-submit' => 'Бәле',
 'revdelete-radio-set' => 'Бәле',
 'revdelete-radio-unset' => 'Не',
+'revdelete-log' => 'Сәбәб:',
 'revdel-restore' => 'Винде дәрәҹә дәгиш карде',
 'revdel-restore-deleted' => 'Рәдд кардә быә рәвојәтон',
 'revdel-restore-visible' => 'Чијә рәвојәтон',
@@ -605,7 +610,7 @@ $messages = array(
 'powersearch-toggleall' => 'Һәммәј',
 
 # Preferences page
-'preferences' => 'ЧиÑ\87Ñ\81Ó\99 Ð¿ÐµÑ\87Ñ\8bниÑ\98е',
+'preferences' => 'Ð\9aÑ\83кон',
 'mypreferences' => 'Кукон',
 'prefsnologin' => 'Ыштәни едаштәнијоне',
 'prefsnologintext' => 'Шымә бәбе <span class="plainlinks">[{{fullurl:{{#Special:UserLogin}}|returnto=$1}} ыштәни едәштән]</span> бо иштирокәкә пеғәндон дәгиш кардеј.',
@@ -614,7 +619,9 @@ $messages = array(
 'prefs-user-pages' => 'Иштирокәкә сәһифон',
 'prefs-rc' => 'Ән нујә дәгишон',
 'prefs-changeemail' => 'Е-номә дәгиш кардеј',
+'prefs-email' => 'Е-номә кукон',
 'saveprefs' => 'Огәтеј',
+'rows' => 'Сәтырон:',
 'searchresultshead' => 'Нәве',
 'timezoneregion-america' => 'Америка',
 'timezoneregion-europe' => 'Авропа',
@@ -630,6 +637,12 @@ $messages = array(
 'prefs-help-email' => 'Е-номә унвони нывыштеј һукман ни, интаси ав бә шымә гәрәк бәбе гирам шымә пароли виро бебәкардејон.',
 'prefs-help-email-others' => 'Комәг бәка бә ҹо иштироәкон шымә е-номә унвони оныкарде, че шымә шәхси сәһифәдә быә линки де шымә әлогә огәтеј.',
 
+# User rights
+'userrights-reason' => 'Сәбәб:',
+
+# Groups
+'group-user' => 'Иштирокәкон',
+
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'Ым сәһифә сәрост кардеј',
 
@@ -713,6 +726,10 @@ $messages = array(
 'sharedupload-desc-here' => 'Ым фајл чыјо пегәтә быә $1 ијән бәзыне истифодә бе бә ҹо нәхшонәдә.
 Мәлумот чн әчәј [$2 тәсвири сәһифәку] бә жиј доә быә.',
 
+# File deletion
+'filedelete-comment' => 'Сәбәб:',
+'filedelete-submit' => 'Рәдд кардеј',
+
 # Random page
 'randompage' => 'Рајрастә мәғолә',
 
@@ -774,6 +791,7 @@ $messages = array(
 'actioncomplete' => 'Һәрәкәт иҹро кардә быә',
 'actionfailed' => 'Һәрәкәт иҹро кардә бәни',
 'dellogpage' => 'Рәдд кардә быә чијон журнал',
+'deletecomment' => 'Сәбәб:',
 
 # Rollback
 'rollbacklink' => 'Окырнијеј',
@@ -781,10 +799,12 @@ $messages = array(
 # Protect
 'protectlogpage' => 'Мыдофијә журнал',
 'protectedarticle' => 'мыдофијә быә "[[$1]]"',
+'protectcomment' => 'Сәбәб:',
 
 # Undelete
 'undeletelink' => 'чәшику дәвонијеј/бәрпо кардеј',
 'undeleteviewlink' => 'тәмшо кардеј',
+'undeletecomment' => 'Сәбәб:',
 'undelete-search-submit' => 'Нәве',
 'undelete-show-file-submit' => 'Бәле',
 
@@ -831,8 +851,12 @@ $messages = array(
 'whatlinkshere-filters' => 'Филтрон',
 
 # Block/unblock
+'ipbreason' => 'Сәбәб:',
 'ipboptions' => '2 саат:2 hours,1 руж:1 day,3 руж:3 days,1 һафтә:1 week,2 һафтә:2 weeks,1 манг:1 month,3 манг:3 months,6 манг:6 months,1 сор:1 year,бемыһләт:infinite',
+'ipbotheroption' => 'ҹо',
 'ipblocklist' => 'Бастә быә иштирокәкон',
+'blocklist-reason' => 'Сәбәб',
+'ipblocklist-submit' => 'Нәве',
 'blocklink' => 'Бә гырд гәтеј',
 'unblocklink' => 'Ошко кардеј',
 'change-blocklink' => 'Блок быә ҹо дәгиш кардеј',
@@ -851,11 +875,12 @@ $messages = array(
 # Export
 'export' => 'Сәһифон ихроҹ кардеј',
 'export-addcat' => 'Зијод кардеј',
+'export-addns' => 'Зијод кардеј',
 
 # Namespace 8 related
 'allmessagesname' => 'Хәбә',
 'allmessagesdefault' => 'Иминә огәтә быә мәтн',
-'allmessages-filter-all' => 'Һаммај',
+'allmessages-filter-all' => 'Һәммәј',
 'allmessages-filter-submit' => 'Давард',
 
 # Thumbnails
@@ -920,7 +945,7 @@ $messages = array(
 'tooltip-summary' => 'Кыртә тәсвир бынывыштән',
 
 # Info page
-'pageinfo-header-edits' => 'СÓ\99Ñ\80оÑ\81Ñ\82 ÐºÐ°Ñ\80деÑ\98',
+'pageinfo-header-edits' => 'Ð\94Ó\99гиÑ\88 ÐºÐ°Ñ\80дÓ\99 Ð±Ñ\8bÓ\99 Ñ\87иÑ\98он Ñ\82аÑ\80Ñ\8bÑ\85',
 
 # Browsing diffs
 'previousdiff' => '← Навынәни дәгиши',
@@ -1020,5 +1045,6 @@ $messages = array(
 
 # Special:Tags
 'tag-filter' => '[[Special:Tags|нышонон]] филтр:',
+'tags-title' => 'Нышонон',
 
 );
index 00e4e5b..216ac48 100644 (file)
@@ -207,8 +207,10 @@ $messages = array(
 'create-this-page' => 'Kirapim dispela pes',
 'delete' => 'Rausim',
 'deletethispage' => 'Rausim dispela pes',
+'viewdeleted_short' => '{{PLURAL:$1|wanpela senis i raus pinis|$1 senis i raus pinis}}',
 'protect' => 'Tambuim',
 'protect_change' => 'senisim',
+'protectthispage' => 'Tambuim dispela pes',
 'newpage' => 'Nupela pes',
 'talkpage' => 'Toktok bilong dispela pes',
 'talkpagelinktext' => 'Toktok',
@@ -294,6 +296,9 @@ $messages = array(
 # Login and logout pages
 'yourname' => 'Yusanem:',
 'yourpassword' => 'Paswot:',
+'remembermypassword' => 'Holim yusanem bilong mi long dispela komputa (holim pas longpela taim $1 {{PLURAL:$1|de|de}})',
+'login' => 'Log in',
+'userloginnocreate' => 'Log in',
 'logout' => 'Logaut',
 'userlogout' => 'Logaut',
 'gotaccountlink' => 'Log in',
@@ -507,6 +512,7 @@ Na tu yu tok tru nau olsem yu raitim dispela yu yet, o yu kisim long wanpela hap
 'uploaderror' => 'Salim i kranki',
 'uploadlogpage' => 'Ripot long salim',
 'filename' => 'Nem bilong fail',
+'filedesc' => 'Liklik toksave bilong senis',
 'filesource' => 'As:',
 'watchthisupload' => 'Lukautim dispela fail',
 
index eb0155c..6aaa52e 100644 (file)
@@ -1294,7 +1294,7 @@ Gezinti bağlantılarının bu sütunu sıfırlayacağını unutmayın.',
 'prevn-title' => 'Önceki $1 {{PLURAL:$1|sonuç|sonuç}}',
 'nextn-title' => 'Sonraki $1 {{PLURAL:$1|sonuç|sonuç}}',
 'shown-title' => 'Sayfa başına $1 {{PLURAL:$1|sonuç|sonuç}} göster',
-'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3)',
+'viewprevnext' => '($1 {{int:pipe-separator}} $2) ($3) gör',
 'searchmenu-legend' => 'Arama seçenekleri',
 'searchmenu-exists' => "'''Bu vikide \"[[:\$1]]\" adında bir sayfa mevcut'''",
 'searchmenu-new' => "'''Bu vikide \"[[:\$1]]\" sayfasını oluştur!'''",
@@ -2096,8 +2096,8 @@ Lütfen unutmayın ki, diğer web siteleri bir dosyaya doğrudan bir URL ile ba
 'notargettext' => 'Bu fonksiyonu uygulamak için bir hedef sayfası ya da kullanıcısı belirtmediniz.',
 'nopagetitle' => 'Böyle bir hedef sayfası yok',
 'nopagetext' => 'Belirttiğiniz hedef sayfası mevcut değil.',
-'pager-newer-n' => '{{PLURAL:$1|1 daha yeni|$1 daha yeni}}',
-'pager-older-n' => '{{PLURAL:$1|1 daha eski|$1 daha eski}}',
+'pager-newer-n' => '$1 daha yeni',
+'pager-older-n' => '$1 daha eski',
 'suppress' => 'Gözetim',
 'querypage-disabled' => 'Bu özel sayfa, performansa dayalı nedenlerle devre dışı bırakılır.',
 
index e1213f4..fc56655 100644 (file)
@@ -737,7 +737,7 @@ $1',
 'viewsourcetext' => 'Ви можете переглянути та скопіювати початковий текст цієї сторінки:',
 'viewyourtext' => "Ви можете переглянути та скопіювати текст '''ваших редагувань''' на цій сторінці:",
 'protectedinterface' => 'Ця сторінка є частиною інтерфейсу програмного забезпечення і її можуть редагувати лише адміністратори проекту.',
-'editinginterface' => "'''Увага:''' Ви редагуєте сторінку, що є частиною текстового інтерфейсу. Зміни цієї сторінки викличуть зміну інтерфейсу для інших користувачів. Для перекладу повідомлення використовуйте [//translatewiki.net/wiki/Main_Page?setlang=uk translatewiki.net] — проект, що займається локалізацією MediaWiki.",
+'editinginterface' => "'''Увага:''' Ви редагуєте сторінку, що є частиною текстового інтерфейсу. Зміни цієї сторінки спричинять зміну інтерфейсу для інших користувачів. Для перекладу повідомлення використовуйте [//translatewiki.net/wiki/Main_Page?setlang=uk translatewiki.net] — проект, що займається локалізацією MediaWiki.",
 'sqlhidden' => '(SQL запит приховано)',
 'cascadeprotected' => 'Сторінка захищена від змін, оскільки її включено до {{PLURAL:$1|сторінки, для якої|наступних сторінок, для яких}} установлено каскадний захист: $2',
 'namespaceprotected' => 'У вас нема дозволу редагувати сторінки в просторі назв «$1».',
@@ -1915,7 +1915,7 @@ $1',
 'backend-fail-internal' => 'Сталася невідома помилка у сховищі рушія "$1".',
 'backend-fail-contenttype' => 'Не вдалося визначити тип вмісту файла, щоб зберегти його в "$1".',
 'backend-fail-batchsize' => 'Серверна частина отримала блок із $1 {{PLURAL:$1|файлової операції|файлових операцій}}; обмеження складає $2 {{PLURAL:$2|файлову операцію|файлові операції|файлових операцій}}.',
-'backend-fail-usable' => 'Файл $1 не може бути записано через недостатні повноваження чи відсутність каталогів (контейнерів).',
+'backend-fail-usable' => 'Файл «$1» не може бути прочитано чи записано через недостатні повноваження або відсутність каталогів (контейнерів).',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Не вдалося підключитися до бази даних журналу для сховища «$1».',
@@ -2052,6 +2052,7 @@ $1',
 'shared-repo' => 'спільного сховища',
 'shared-repo-name-wikimediacommons' => 'Вікісховища',
 'filepage.css' => '/* Розміщений тут CSS-код розміщений на сторінці опису файла, також і для іноземних користувачів вікі */',
+'upload-disallowed-here' => 'На жаль, Ви не можете перезаписати це зображення',
 
 # File reversion
 'filerevert' => 'Повернення до старої версії $1',
@@ -2184,6 +2185,7 @@ $1',
 'mostlinkedtemplates' => 'Найуживаніші шаблони',
 'mostcategories' => 'Статті з найбільшою кількістю категорій',
 'mostimages' => 'Найуживаніші зображення',
+'mostinterwikis' => 'Сторінки з найбільшою кількістю інтервікі-посилань',
 'mostrevisions' => 'Статті з найбільшою кількістю редагувань',
 'prefixindex' => 'Покажчик за початком назв сторінок',
 'prefixindex-namespace' => 'Усі сторінки з префіксом (простір назв $1)',
@@ -2332,6 +2334,8 @@ $1',
 'mailnologin' => 'Відсутня адреса для відправки',
 'mailnologintext' => 'Ви повинні [[Special:UserLogin|ввійти до системи]] і мати підтверджену адресу електронної пошти у ваших [[Special:Preferences|налаштуваннях]], щоб мати змогу надсилати електронну пошту іншим користувачам.',
 'emailuser' => 'Надіслати листа',
+'emailuser-title-target' => 'Надіслати електронного листа користувачеві',
+'emailuser-title-notarget' => 'Надіслати електронного листа користувачеві',
 'emailpage' => 'Лист користувачеві',
 'emailpagetext' => 'Заповнивши наведену нижче форму, можна надіслати повідомлення цьому користувачу.
 Електронна адреса, яку ви зазначили у [[Special:Preferences|своїх налаштуваннях]], буде зазначена в полі «Від кого» листа, тому одержувач матиме можливість відповісти безпосередньо вам.',
@@ -3165,6 +3169,9 @@ The wiki server can't provide data in a format your client can read.",
 'pageinfo-header-edits' => 'Історія редагувань',
 'pageinfo-views' => 'Кількість переглядів',
 'pageinfo-watchers' => 'Кількість спостерігачів',
+'pageinfo-firsttime' => 'Дата створення сторінки',
+'pageinfo-lastuser' => 'Останній редактор',
+'pageinfo-lasttime' => 'Дата останньої правки',
 'pageinfo-edits' => 'Загальна кількість редагувань',
 'pageinfo-authors' => 'Загальна кількість унікальних авторів',
 
index 1aa0f86..7ed810b 100644 (file)
@@ -10,6 +10,7 @@
  * @author Abdulla
  * @author Behzod Saidov <behzodsaidov@gmail.com>
  * @author Casual
+ * @author CoderSI
  * @author Lyncos
  * @author Sociologist
  * @author Urhixidur
@@ -53,18 +54,27 @@ $linkTrail = '/^([a-zʻʼ“»]+)(.*)$/sDu';
 
 $messages = array(
 # User preference toggles
-'tog-hideminor' => 'Yangi oʻzgarishlardagi kichik tahrirlani yashir',
+'tog-underline' => 'Havolalarning tagiga chizish:',
+'tog-justify' => "Matnni sahifaning eni bo'yicha tekislash",
+'tog-hideminor' => "Yangi oʻzgarishlar ro'yxatida kichik tahrirlarni yashirish",
+'tog-hidepatrolled' => 'Yangi oʻzgarishlar roʻyxatida patrullangan tahrirlarni yashirish',
+'tog-newpageshidepatrolled' => "Yangi sahifalar ro'yxatida patrullangan sahifalarni yashirish",
+'tog-numberheadings' => 'Sarlavhalarni avtomatik tarzda raqamlash',
+'tog-showtoolbar' => "Tahrirlash vaqtida yuqorigi unsurlar darchasini ko'rsatish (JavaScript)",
 'tog-rememberpassword' => 'Hisob ma’lumotlarini ushbu kompyuterda eslab qolish (eng ko‘pi bilan $1 {{PLURAL:$1|kunga|kunga}})',
 'tog-watchcreations' => 'Men yaratgan sahifalarni va yuklagan fayllarni kuzatuv roʻyxatimga qoʻsh',
 'tog-watchdefault' => 'Men tahrirlagan sahifa va fayllarni kuzatuv roʻyxatimga qoʻsh',
 'tog-watchmoves' => 'Men koʻchirgan sahifa va fayllarni kuzatuv roʻyxatimga qoʻsh',
 'tog-watchdeletion' => 'Men yoʻqotgan sahifa va fayllarni kuzatuv roʻyxatimga qoʻsh',
+'tog-minordefault' => "Boshlang'ich holatga barcha tahrirlarni kamahamiyatli qilib belgilash",
+'tog-previewontop' => "Oldindan ko'rishni tahrirlash oynasi oldiga joylashtirish",
 'tog-enotifwatchlistpages' => 'Kuzatuv roʻyxatimdagi sahifa yoki fayllar oʻzgartirilsa, e-pochtamga bu haqda xat yuborilsin',
 'tog-enotifusertalkpages' => 'Munozara sahifam oʻzgartirilsa, e-pochtamga bu haqda xat yuborilsin',
-'tog-oldsig' => 'Mavjud imzo:',
+'tog-oldsig' => 'Joriy imzo:',
 'tog-fancysig' => 'Imzoni wikimatn sifatida qara (avtomatik ishoratsiz)',
 'tog-ccmeonemails' => 'Men boshqa foydalanuvchilarga yuborayotgan xatnig nusxasi oʻzimning e-pochtamga ham yuborilsin',
 'tog-showhiddencats' => 'Yashirin turkumlarni koʻrsat',
+'tog-noconvertlink' => "Sarlavhaga aylantirish dastagini o'chirib qo'yish",
 
 'underline-always' => 'Har doim',
 'underline-never' => 'Hech qachon',
@@ -129,35 +139,52 @@ $messages = array(
 'pagecategories' => '{{PLURAL:$1|Turkum|Turkumlar}}',
 'category_header' => '"$1" turkumidagi maqolalar.',
 'subcategories' => 'Ostturkumlar',
+'category-media-header' => '"$1" turkumidagi fayllar',
 'category-empty' => "''Ushbu turkumda hozircha sahifa yoki fayllar yoʻq.''",
 'hidden-categories' => '{{PLURAL:$1|Yashirin turkum|Yashirin turkumlar}}',
 'hidden-category-category' => 'Yashirin turkumlar',
 'category-subcat-count' => '{{PLURAL:$2|Ushbu turkumda faqat bitta ostturkum mavjud.|Ushbu turkumda quyidagi {{PLURAL:$1|ostturkum|$1 ostturkumlar}}, hammasi boʻlib $2 ta ostturkum mavjud.}}',
 'category-article-count' => '{{PLURAL:$2|Ushbu turkumda faqat bitta sahifa mavjud.|Ushbu turkumda quyidagi {{PLURAL:$1|sahifa|$1 sahifalar}}, hammasi boʻlib $2 ta sahifa mavjud.}}',
+'category-file-count' => "{{PLURAL:$2|Ushbu turkum faqat bitta faylga ega.|Ushbu turkumdagi $2 ta fayldan quyidagi $1 tasi ko'rsatildi.}}",
 'listingcontinuesabbrev' => 'davomi',
+'index-category' => 'Indekslanadigan sahifalar',
+'noindex-category' => 'Indekslanmaydigan sahifalar',
+'broken-file-category' => 'Ishlamaydigan fayl havolalariga ega sahifalar',
 
 'linkprefix' => '/^(.*?)([a-zA-Z\\x80-\\xffʻʼ«„]+)$/sDu',
 
 'about' => 'Haqida',
+'article' => 'Sahifa',
 'newwindow' => '(yangi oynada ochiladi)',
-'cancel' => 'Voz kechish',
+'cancel' => 'Bekor qilish',
 'moredotdotdot' => 'Batafsil...',
+'mypage' => 'Shaxsiy sahifa',
 'mytalk' => 'Suhbatim',
 'anontalk' => 'Bu IP uchun suhbat',
 'navigation' => 'Saytda harakatlanish',
 'and' => '&#32;va',
 
 # Cologne Blue skin
+'qbfind' => 'Qidiruv',
+'qbbrowse' => "Ko'rish",
 'qbedit' => 'Tahrirlash',
+'qbpageoptions' => 'Ushbu sahifa',
+'qbpageinfo' => "Sahifa haqida ma'lumot",
+'qbmyoptions' => 'Mening sahifalarim',
 'qbspecialpages' => 'Maxsus sahifalar',
 'faq' => 'TSS',
+'faqpage' => 'Project:FAQ',
 
 # Vector skin
-'vector-action-addsection' => 'Mavzuni qoʻsh',
+'vector-action-addsection' => 'Mavzu qoʻshish',
 'vector-action-delete' => 'O‘chirish',
 'vector-action-move' => 'Ko‘chirish',
+'vector-action-protect' => 'Himoyalash',
+'vector-action-undelete' => 'Tiklash',
+'vector-action-unprotect' => "Himoyani o'zgartirish",
+'vector-simplesearch-preference' => 'Kengaytirilgan qidiruv takliflarini yoqish (Faqat Vektor rasmiylashtirish uchun)',
 'vector-view-create' => 'Yarat',
-'vector-view-edit' => 'Tahrirla',
+'vector-view-edit' => 'Tahrirlash',
 'vector-view-history' => 'Tarix',
 'vector-view-view' => 'Mutolaa',
 'vector-view-viewsource' => 'Manbasini koʻrsat',
@@ -169,12 +196,13 @@ $messages = array(
 'returnto' => '$1 sahifasiga qaytish.',
 'tagline' => '{{SITENAME}} dan',
 'help' => 'Yordam',
-'search' => 'Qidirish',
+'search' => 'Qidiruv',
 'searchbutton' => 'Qidirish',
 'go' => "O'tish",
 'searcharticle' => 'O‘tish',
 'history' => 'Sahifa tarixi',
 'history_short' => 'Tarix',
+'updatedmarker' => 'mening oxirgi tashrifimdan keyin yangilandi',
 'printableversion' => 'Bosma uchun versiya',
 'permalink' => 'Doimiy ishorat',
 'print' => 'Chop et',
@@ -185,19 +213,29 @@ $messages = array(
 'create-this-page' => 'Bu sahifani yarat',
 'delete' => 'O‘chirish',
 'deletethispage' => 'Bu sahifani oʻchir',
+'undelete_short' => '{{PLURAL:$1|tahrir|$1 tahrirlar}}ni tiklash',
+'viewdeleted_short' => "{{PLURAL:$1|o'chirilgan tahrir|$1 o'chirilgan tahrirlar}}ni ko'rish",
 'protect' => 'Himoyalash',
 'protect_change' => 'o‘zgartirish',
 'protectthispage' => 'Ushbu sahifani himoyalash',
 'unprotect' => 'Himoyadan chiqarish',
+'unprotectthispage' => "Ushbu sahifaning himoyasini o'zgaritish",
 'newpage' => 'Yangi sahifa',
 'talkpage' => 'Bu sahifa haqida munozara',
 'talkpagelinktext' => 'Munozara',
 'specialpage' => 'Maxsus sahifa',
 'personaltools' => 'Shaxsiy uskunalar',
 'postcomment' => 'Yangi boʻlim',
+'articlepage' => 'Sahifani ko‘rish',
 'talk' => 'Munozara',
 'views' => 'Ko‘rinishlar',
 'toolbox' => 'Asboblar',
+'userpage' => "Foydalanuvchi sahifasini ko'rish",
+'projectpage' => "Loyiha sahifasini ko'rish",
+'imagepage' => "Fayl sahifasini ko'rish",
+'mediawikipage' => "Xabar sahifasini ko'rsatish",
+'templatepage' => "Andoza sahifasini ko'rish",
+'viewhelppage' => 'Yordam olish',
 'categorypage' => 'Turkum sahifasi',
 'viewtalkpage' => 'Munozara',
 'otherlanguages' => 'Boshqa tillarda',
@@ -208,7 +246,10 @@ $messages = array(
 'protectedpage' => 'Himoyalangan sahifa',
 'jumpto' => 'Oʻtish:',
 'jumptonavigation' => 'foydalanish',
-'jumptosearch' => 'Qidir',
+'jumptosearch' => 'qidiruv',
+'pool-timeout' => "Muhosara (to'sish) ni kutish vaqti tugadi",
+'pool-queuefull' => "So'rovlar jamlanmasi to'ldi",
+'pool-errorunknown' => "Noma'lum xato",
 
 # All link text and link target definitions of links into project namespace that get used by other message strings, with the exception of user group pages (see grouppage) and the disambiguation template definition (see disambiguations).
 'aboutsite' => '{{SITENAME}} haqida',
@@ -224,33 +265,43 @@ $messages = array(
 'helppage' => 'Help:Mundarija',
 'mainpage' => 'Bosh sahifa',
 'mainpage-description' => 'Bosh sahifa',
+'policy-url' => 'Project:Qoida',
 'portal' => 'Jamoa portali',
 'portal-url' => 'Project:Jamoa portali',
 'privacy' => 'Konfidensiallik siyosati',
 'privacypage' => 'Project:Konfidensiallik siyosati',
 
+'badaccess' => 'Ruxsatlilik xatosi',
+'badaccess-groups' => "So'ralgan amallarni kamida $1 {{PLURAL:$2|guruhi|guruhlari}} foydalanuvchilarigina amalga oshirishi mumkin.",
+
 'ok' => 'OK',
 'retrievedfrom' => ' "$1" dan olindi',
 'youhavenewmessages' => 'Sizga $1 keldi ($2).',
 'newmessageslink' => 'yangi xabarlar',
 'newmessagesdifflink' => 'soʻnggi oʻzgarish',
-'youhavenewmessagesmulti' => 'Sizga yangi xat keldi: $1',
+'newmessagesdifflinkplural' => "oxirgi {{PLURAL:$1|o'zgarish|o'zgarishlar}}",
+'youhavenewmessagesmulti' => 'Siz $1ga yangi xat oldingiz',
 'editsection' => 'tahrirlash',
-'editold' => 'tahrir',
-'editlink' => 'tahrirla',
-'viewsourcelink' => 'manbasini koʻr',
+'editold' => 'tahrirlash',
+'viewsourceold' => 'manbasini koʻrish',
+'editlink' => 'tahrirlash',
+'viewsourcelink' => 'manbasini koʻrish',
 'editsectionhint' => 'Boʻlimni tahrirlash: $1',
 'toc' => 'Mundarija',
 'showtoc' => 'koʻrsatish',
 'hidetoc' => 'yashirish',
-'collapsible-collapse' => 'Yashir',
-'collapsible-expand' => 'Koʻrsat',
+'collapsible-collapse' => "Yig'ish",
+'collapsible-expand' => 'Yoyish',
+'site-atom-feed' => '$1 — Atom-tasma',
 'page-atom-feed' => '«$1» — Atom-lenta',
 'red-link-title' => '$1 (sahifa yaratilmagan)',
+'sort-descending' => "Kamayish bo'yicha tartiblash",
+'sort-ascending' => "O'sish bo'yicha tartiblash",
 
 # Short words for each namespace, by default used in the namespace tab in monobook
 'nstab-main' => 'Maqola',
 'nstab-user' => 'Foydalanuvchi sahifasi',
+'nstab-media' => 'Media sahifasi',
 'nstab-special' => 'Maxsus sahifa',
 'nstab-project' => 'Vikipediya',
 'nstab-image' => 'Fayl',
@@ -259,15 +310,34 @@ $messages = array(
 'nstab-help' => 'Yordam sahifasi',
 'nstab-category' => 'Turkum',
 
+# Main script and global functions
+'nosuchaction' => "Bunday amal yo'q",
+'nosuchspecialpage' => "Bunday maxsus sahifa yo'q",
+
 # General errors
 'error' => 'Xato',
+'laggedslavemode' => "'''Diqqat:''' sahifa oxirgi yangilashlarga ega bo'lmasligi mumkin.",
+'readonly' => "Ma'lumotlar bazasiga yozish to'sildi",
+'missingarticle-rev' => '(versiya №: $1)',
+'internalerror' => 'Ichki xato',
+'internalerror_info' => 'Ichki xato: $1',
 'badtitle' => 'Notoʻgʻri sarlavha',
 'viewsource' => 'Manbasini koʻrish',
+'viewsource-title' => "$1 sahifasining manbasini ko'rish",
+'actionthrottled' => "Tezlik bo'yicha cheklov",
 'protectedpagetext' => 'Bu sahifa tahrirlashdan saqlanish maqsadida qulflangan.',
 'viewsourcetext' => "Siz bu sahifaning manbasini ko'rishingiz va uni nusxasini olishingiz mumkin:",
 'namespaceprotected' => "Sizda '''$1''' nomfazosi sahifalarini tahrirlash huquqi yoʻq",
 'customcssprotected' => 'Sizda uchbu CSS sahifani tahrirlash huquqi yoʻq, chunki bu yerda boshqa foydalanuvchining shaxsiy moslamalari saqlanadi.',
 'customjsprotected' => 'Sizda uchbu JavaScript sahifani tahrirlash huquqi yoʻq, chunki bu yerda boshqa foydalanuvchining shaxsiy moslamalari saqlanadi.',
+'ns-specialprotected' => '"{{ns:special}}" nomfazosi sahifalari tahrirlanishi mumkin emas.',
+'exception-nologin' => "Siz tizimda o'zingizni tanitmadingiz",
+'exception-nologin-text' => "Bu sahifani ko'rish yoki so'ralgan amalni bajarish uchun o'zingizni tizimda tanitishingiz zarur.",
+
+# Virus scanner
+'virus-badscanner' => "Moslamada xato. Noma'lum virus aniqlovchi: ''$1''",
+'virus-scanfailed' => 'tekshirishda xatolik (kod $1)',
+'virus-unknownscanner' => "noma'lum antivirus:",
 
 # Login and logout pages
 'logouttext' => "'''Siz saytdan muvaffaqiyatli chiqdingiz.'''
@@ -281,6 +351,9 @@ Siz yangi hisob yaratdingiz.
 'yourpassword' => 'Maxfiy soʻz',
 'yourpasswordagain' => 'Maxfiy so‘zni qayta kiriting:',
 'remembermypassword' => 'Hisob ma’lumotlarini ushbu kompyuterda eslab qolish (eng ko‘pi bilan $1 {{PLURAL:$1|kun|kun}} uchun)',
+'securelogin-stick-https' => "Kirgandan keyin HTTPS bo'yicha ulanishni davom ettirish",
+'yourdomainname' => 'Sizning domeningiz:',
+'password-change-forbidden' => "Siz bu vikida maxfiy so'zni o'zgartira olmaysiz.",
 'login' => 'Kirish',
 'nav-login-createaccount' => 'Kirish / Hisob yaratish',
 'loginprompt' => "{{SITENAME}}ga kirish uchun kukilar yoqilgan bo'lishi kerak.",
@@ -288,26 +361,62 @@ Siz yangi hisob yaratdingiz.
 'userloginnocreate' => 'Kirish',
 'logout' => 'Chiqish',
 'userlogout' => 'Chiqish',
-'notloggedin' => 'Kirish amalga oshirilmadi',
+'notloggedin' => "Siz tizimda o'zingizni tanitmadingiz",
 'nologin' => "Hisobingiz yoʻqmi? '''$1'''.",
 'nologinlink' => 'Hisob yaratish',
 'createaccount' => 'Hisob yaratish',
 'gotaccount' => "Hisobingiz bormi? '''$1'''.",
 'gotaccountlink' => 'Kirish',
 'userlogin-resetlink' => 'Kirish maʻlumotlaringiz esdan chiqdimi?',
+'createaccountmail' => "E-mail orqali maxfiy so'zni jo'natish",
+'createaccountreason' => 'Sabab:',
+'badretype' => "Siz tomondan kiritilgan maxfiy so'zlar mos kelmayapti.",
+'loginerror' => 'Foydalanuvchini aniqlashda xato',
+'createaccounterror' => "Hisob yozuvini yaratishning iloji yo'q: $1",
 'loginsuccesstitle' => 'Kirish muvaffaqiyatli amalga oshdi',
 'loginsuccess' => "'''{{SITENAME}}ga \"\$1\" foydalanuvchi nomi bilan kirdingiz.'''",
 'nosuchusershort' => '"$1" ismli ishtirokchi yoʻq.
 Xatosiz yozishga urinib koʻring.',
+'nouserspecified' => "Siz foydalanuvchining ismini ko'rsatishingiz lozim.",
+'login-userblocked' => "Bu foydalanuvchi muhosara qilingan. Tizimga kirishga ruxsat yo'q.",
 'wrongpassword' => 'Kiritgan mahfiy soʻzingiz notoʻgʻri. Iltimos, qaytadan kiritib koʻring.',
-'mailmypassword' => 'Yangi parolni e-mail qil',
+'wrongpasswordempty' => "Iltimos, bo'sh bo'lmagan maxfiy so'z kiriting.",
+'mailmypassword' => "Elektron pochta orqali yangi maxfiy so'zni jo'natish",
+'passwordremindertitle' => "{{SITENAME}} uchun vaqtinchalik yangi maxfiy so'z",
 'emailauthenticated' => 'Sizning e-mail manzilingiz $2, $3 da tasdiqlangan.',
+'emailconfirmlink' => 'Sizning elektron pochtangizni tasdiqlash',
+'emaildisabled' => 'Bu sayt elektron pochta xatlarini yubora olmaydi.',
+'accountcreated' => 'Hisob yozuvi yaratildi',
+'login-abort-generic' => 'Tizimga kirishga mufavvaqiyatsiz urinish',
 'loginlanguagelabel' => 'Til: $1',
 
 # Change password dialog
 'resetpass' => 'Maxfiy soʻzni oʻzgartirish',
+'resetpass_header' => "Hisob mahfiy so'zini o'zgartirish",
+'oldpassword' => "Eski mahfiy so'z:",
+'newpassword' => "Yangi mahfiy so'z:",
 'retypenew' => 'Yangi mahfiy soʻzni qayta tering:',
+'resetpass_submit' => "Maxfiy so'zni o'rnatish va kirish",
+'resetpass_forbidden' => "Maxfiy so'z o'zgartirilishi mumkin emas",
 'resetpass-submit-loggedin' => 'Maxfiy soʻzni oʻzgartirish',
+'resetpass-submit-cancel' => 'Bekor',
+
+# Special:PasswordReset
+'passwordreset-legend' => "Maxfiy so'zni yo'q qilish",
+'passwordreset-username' => 'Ishtirokchi nomi:',
+'passwordreset-domain' => 'Domen:',
+'passwordreset-email' => 'Elektron pochta manzili:',
+'passwordreset-emailelement' => "Foydalanuvchi ismi: $1
+Vaqtinchalik maxfiy so'z: $2",
+
+# Special:ChangeEmail
+'changeemail' => "Elektron pochta manzilini o'zgartirish",
+'changeemail-header' => "Elektron pochta manzilini o'zgaritish",
+'changeemail-oldemail' => 'Joriy elektron pochta manzili',
+'changeemail-newemail' => 'Elektron pochtaning yangi manzili',
+'changeemail-none' => "(yo'q)",
+'changeemail-submit' => "Manzilni o'zgartirish",
+'changeemail-cancel' => 'Bekor',
 
 # Edit page toolbar
 'bold_sample' => 'Qalin matn',
@@ -319,19 +428,26 @@ Xatosiz yozishga urinib koʻring.',
 'extlink_sample' => 'http://www.example.com ishorat nomi',
 'extlink_tip' => 'Tashqi ishorat (http:// prefiksini unutmang)',
 'headline_sample' => 'Sarlavha',
+'headline_tip' => '2-darajadagi sarlavha',
+'nowiki_sample' => "Bu yerga formatlash zarur bo'lmagan matnni qo'ying",
+'nowiki_tip' => "Viki-formatlashga e'tibor qilmaslik",
 'image_tip' => 'Qoʻshilgan tasvir',
-'media_tip' => 'Faylga ishorat',
+'media_tip' => 'Faylga havola',
 'sig_tip' => 'Imzoingiz va sana',
+'hr_tip' => "Yotiq (gorizontal) chiziq (ko'p ishlatmang)",
 
 # Edit pages
 'summary' => 'Qisqa izoh:',
+'subject' => 'Mavzu/sarlavha',
 'minoredit' => 'Bu kichik tahrir',
 'watchthis' => 'Sahifani kuzatish',
 'savearticle' => 'Saqlash',
 'preview' => 'Ko‘rib chiqish',
 'showpreview' => 'Ko‘rib chiqish',
+'showlivepreview' => "Tezkor ko'rib chiqish",
 'showdiff' => 'O‘zgarishlarni ko‘rsatish',
 'anoneditwarning' => "'''Diqqat:''' Siz tizimga kirmagansiz. Ushbu sahifa tarixida Sizning IP manzilingiz yozib qolinadi.",
+'blockedtitle' => 'Foydalanuvchi muhosara qilindi',
 'blockedtext' => "'''Siz (foydalanuvchi ismingiz yoki IP manzilingiz) tahrir qilishdan chetlashtirildingiz.'''
 
 Sizni $1 chetlashtirdi. Bunga sabab: ''$2''.
@@ -342,6 +458,13 @@ Sizni $1 chetlashtirdi. Bunga sabab: ''$2''.
 Siz $1 yoki boshqa [[{{MediaWiki:Grouppage-sysop}}|administrator]] bilan bogʻlanib, arz qilishingiz mumkin.
 You cannot use the 'e-mail this user' feature unless a valid e-mail address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.
 Sizning hozirgi IP manzilingiz - $3, chetlashtirish raqamingiz - #$5. Arizaga bularni ilova qilishingiz mumkin.",
+'blockednoreason' => "sabab ko'rsatilmadi",
+'whitelistedittext' => "Siz sahifalarni o'zgartirish uchun $1.",
+'nosuchsectiontitle' => "Bo'imni topishning iloji yo'q",
+'loginreqtitle' => 'Shaxsiyatni aniqlash talab etiladi',
+'loginreqlink' => 'Kirish',
+'loginreqpagetext' => "Boshqa sahifalarni ko'rish uchun $1",
+'accmailtitle' => "Mahfiy so'z jo'natildi.",
 'newarticle' => '(Yangi)',
 'newarticletext' => "Bu sahifa hali mavjud emas.
 Sahifani yaratish uchun quyida matn kiritishingiz mumkin (qo'shimcha axborot uchun [[{{MediaWiki:Helppage}}|yordam sahifasini]] ko'ring).
@@ -349,6 +472,8 @@ Agar bu sahifaga xatolik sabab kelgan bo'lsangiz brauzeringizning '''orqaga''' t
 'noarticletext' => 'Bu sahifada hozircha hech qanday matn yoʻq. Siz bu sarlavhani boshqa sahifalardan [[Special:Search/{{PAGENAME}}|qidirishingiz]], <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tegishli loglarga qarashingiz] yoki bu sahifani [{{fullurl:{{FULLPAGENAME}}|action=edit}} tahrirlashingiz]</span> mumkin.',
 'clearyourcache' => "'''Etibor bering:''' O'zgartirishlaringiz ko'rish uchun, yangi moslamalaringizning saqlashdan keyin, brauser keshini tozalash kerak:<br />
 '''Mozilla / Firefox:''' ''Ctrl+Shift+R'', '''IE:''' ''Ctrl+F5'', '''Safari:''' ''Cmd+Shift+R'', '''Konqueror:''' ''F5'', '''Opera:''' ''Tools → Preferences'' orqali keshni tozalang.",
+'updated' => '(Yangilandi)',
+'note' => "'''Izoh:'''",
 'previewnote' => "'''Bu shunchaki ko‘rib chiqish. O‘zgartirishlar hali saqlangani yo‘q!'''",
 'editing' => '$1 tahrirlanmoqda',
 'editingsection' => '$1 (boʻlim) tahrirlanmoqda',
@@ -360,20 +485,45 @@ Siz shuningdek bu yozganlaringiz sizniki yoki erkin litsenziya ostida ekanligini
 Bundan tashqari, siz ushbu ma'lumotlarni o'zingiz yozgan bo'lishingiz yoki ruxsat berilgan internet manzilidan yoki shu kabi erkin resursdan nusxa olgan bo'lishingiz lozim (Qo'shimcha ma'lumotlar ushun $1 sahifasiga murojaat qiling).
 '''MUALLIFLIK HUQUQI QO'YILGAN ISHLARNI RUXSATSIZ BU YERGA JOYLASHTIRMANG!'''",
 'templatesused' => 'Ushbu sahifada foydalanilgan {{PLURAL:$1|andoza|andozalar}}:',
+'templatesusedpreview' => "Ushbu ko'rib chiqilayotgan sahifada foydalanilgan {{PLURAL:$1|andoza|andozalar}}:",
+'templatesusedsection' => "Ushbu bo'limda foydalanilgan {{PLURAL:$1|andoza|andozalar}}:",
 'template-protected' => '(himoyalangan)',
 'template-semiprotected' => '(yarim-himoyalangan)',
-'nocreatetext' => 'Ushbu sayt yangi sahifa yaratishni taqiqlagan.
+'hiddencategories' => 'Ushbu sahifa {{PLURAL:$1|1 yashirin turkum|$1 yashirin turkumlar}}ga kiradi:',
+'nocreatetitle' => 'Sahifalarni yaratish cheklangan',
+'nocreatetext' => 'Ushbu saytda yangi sahifalar yaratish taqiqlagan.
 Ortga qaytib, mavjud sahifani tahrirlashingiz yoki [[Special:UserLogin|tizimga kirishingiz]] mumkin.',
+'nocreate-loggedin' => "Sizda yangi sahifalar yaratishga ruxsat yo'q.",
+'sectioneditnotsupported-title' => "Bo'limlarni tahrirlash imkoniyati yo'q",
+'sectioneditnotsupported-text' => "Ushbu sahifada bo'limlarni tahrirlash imkoniyati yo'q.",
+'permissionserrors' => 'Ruxsat huquqida xato',
+'permissionserrorstext-withaction' => "Sizda quyidagi {{PLURAL:$1|sabab|sabablar}}ga ko'ra '''$2'''ga ruxsat mavjud emas:",
 'recreate-moveddeleted-warn' => "'''Diqqat: Siz avval yoʻqotilgan sahifani yana yaratmoqchisiz.'''
 
 Bu sahifani yaratishda davom etishdan avval uning nega avval yoʻqotilgani bilan qiziqib koʻring.
 Qulaylik uchun quyida yoʻqotilish qaydlari keltirilgan:",
+'moveddeleted-notice' => "Bu sahifa o'chirilgan.
+Ma'lumot uchun quyida o'chirishlar va qayta nomlashlar bo'yicha jurnallardan mos yozuvlar keltirilgan.",
+'log-fulllog' => "Qaydlarni to'liq ko'rish",
+'edit-conflict' => "Tashrirlash to'qnashuvi.",
+'defaultmessagetext' => "Boshlang'ich matn",
+
+# Parser/template warnings
+'post-expand-template-inclusion-warning' => "'''Diqqat:''' Qo'llanilayotgan andozalarning jami hajmi juda katta.
+Ayrim andozalar qo'shilmaydi.",
+'post-expand-template-inclusion-category' => "Qo'llaniladigan andozalarning mumkin bo'lgan miqdoridan oshgan sahifalar",
+'post-expand-template-argument-category' => "Andozalarning to'ldirilmagan o'zgaruvchilariga ega sahifalar",
+
+# "Undo" feature
+'undo-summary' => '[[Special:Contributions/$2|$2]] tomonidan qilingan $1 tahriri qaytarildi ([[User talk:$2|mun.]])',
 
 # History pages
 'viewpagelogs' => 'Ushbu sahifaga doir qaydlarni koʻrsat',
+'nohistory' => "Ushbu sahifa uchun o'zgarishlar tarixi mavjud emas.",
 'currentrev' => 'Hozirgi koʻrinishi',
 'currentrev-asof' => '$1dagi, joriy koʻrinishi',
 'revisionasof' => '$1 paytdagi koʻrinishi',
+'revision-info' => '$1; $2 dagi versiya',
 'previousrevision' => '←Avvalgi koʻrinishi',
 'nextrevision' => 'Yangiroq koʻrinishi→',
 'currentrevisionlink' => 'Hozirgi koʻrinishi',
@@ -393,20 +543,50 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'historyempty' => '(boʻsh)',
 
 # Revision feed
+'history-feed-title' => "O'zgarishlar tarixi",
+'history-feed-description' => "Vikidagi mazkur sahifaning o'zgarishlar tarixi",
 'history-feed-item-nocomment' => '$1 $2 da',
 
 # Revision deletion
-'rev-delundel' => 'koʻrsat/yashir',
+'rev-delundel' => 'koʻrsatish/yashirish',
 'rev-showdeleted' => 'koʻrsatish',
+'revdelete-show-file-submit' => 'Ha',
+'revdelete-hide-text' => 'Sahifaning ushbu versiyasi matnini yashirish',
+'revdelete-radio-same' => "(o'zgartirilmasin)",
+'revdelete-radio-set' => 'Ha',
+'revdelete-radio-unset' => "Yo'q",
 'revdelete-log' => 'Sabab:',
+'revdel-restore' => "Ko'rinuvchanlikni o'zgartirish",
+'revdel-restore-deleted' => "o'chirilgan versiyalar",
+'revdel-restore-visible' => "ko'rinuvchan versiyalar",
 'revdelete-otherreason' => 'Boshqa/qoʻshimcha sabab:',
 'revdelete-reasonotherlist' => 'Boshqa sabab',
 
+# History merging
+'mergehistory' => 'Tahrirlar tarixlarini birlashtirish',
+'mergehistory-box' => 'Ikkita sahifa tahrirlari tarixini birlashtirish:',
+'mergehistory-from' => 'Manba sahifa:',
+'mergehistory-into' => "Mo'ljal sahifa:",
+'mergehistory-list' => 'Birlashtiriladigan tahrirlar tarixi',
+'mergehistory-go' => "Birlashtiriladigan tahrirlarni ko'rsatish",
+'mergehistory-submit' => 'Tahrirlarni birlashtirish',
+'mergehistory-reason' => 'Sabab:',
+
+# Merge log
+'mergelog' => 'Birlashtirishlar qaydlari',
+'pagemerge-logentry' => "[[$1]] va [[$2]]lar birlashtirildi ($3 gacha bo'lgan versiyalar)",
+'revertmerge' => "Bo'lish",
+
 # Diffs
-'history-title' => '"$1"ning tarixi',
+'history-title' => "$1 - o'zgarishlar tarixi",
+'difference-title' => '$1 — versiyalar orasidagi farq',
+'difference-title-multipage' => '"$1" va "$2" sahifalar orasidagi farq',
+'difference-multipage' => '(Sahifalar orasidagi farq)',
 'lineno' => 'Qator $1:',
 'compareselectedversions' => 'Tanlangan versiyalarni solishtir',
-'editundo' => 'qaytar',
+'showhideselectedversions' => "Tanlangan versiyalarni ko'rsatish/yashirish",
+'editundo' => 'qaytarish',
+'diff-multi' => "({{PLURAL:$2|$2 ta foydalanuvching}} {{PLURAL:$1|$1 ta oraliq versiyasi|$1 ta oraliq versiyalari}} ko'rsatilmadi)",
 
 # Search results
 'searchresults' => 'Qidiruv natijalari',
@@ -414,71 +594,112 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'searchresulttext' => "{{SITENAME}}da qidirish haqida qo'shimcha ma'lumotga ega bo'lishini xoxlasangiz, [[{{MediaWiki:Helppage}}|{{SITENAME}}da qidiruv]] sahifasini o'qing.",
 'searchsubtitle' => '\'\'\'[[:$1]]\'\'\'ni qidirdingiz ([[Special:Prefixindex/$1|"$1" bilan boshlanadigan sahifalar]]{{int:pipe-separator}}[[Special:WhatLinksHere/$1|"$1"ga bogʻlangan sahifalar]])',
 'searchsubtitleinvalid' => "'''$1'''ni qidirdingiz",
+'toomanymatches' => "Juda ko'p o'xshashliklar topildi, iltimos, boshqa so'rov bilan urinib ko'ring",
+'titlematches' => 'Sahifalar nomlaridagi mos kelishlar',
 'notitlematches' => 'Bunday sarlavha topilmadi',
+'textmatches' => 'Sahifalar matnlaridagi mos kelishlar',
 'notextmatches' => 'Bunday matn topilmadi',
-'prevn' => 'oldingi $1',
+'prevn' => 'oldingi {{PLURAL:$1|$1}}',
 'nextn' => 'keyingi {{PLURAL:$1|$1}}',
 'prevn-title' => 'Avvalgi $1 {{PLURAL:$1|natija|natijalar}}',
 'nextn-title' => 'Keyingi $1 {{PLURAL:$1|natija|natijalar}}',
-'shown-title' => 'Har sahifada $1 natija koʻrsat',
+'shown-title' => 'Sahifada $1 ta {{PLURAL:$1|natija}} koʻrsatish',
 'viewprevnext' => 'Koʻrish ($1 {{int:pipe-separator}} $2) ($3).',
 'searchmenu-legend' => 'Qidiruv shartlari',
 'searchmenu-exists' => "'''Ushbu vikida \"[[:\$1]]\" nomli sahifa mavjud.'''",
-'searchmenu-new' => "'''Ushbu vikida \"[[:\$1]]\" sahifani yarat!'''",
+'searchmenu-new' => "'''Ushbu vikida \"[[:\$1]]\" sahifasini yarat!'''",
 'searchhelp-url' => 'Help:Mundarija',
+'searchmenu-prefix' => "[[Special:PrefixIndex/$1|Ushbu prefiks mavjud bo'lgan sahifalarni ko'rsatish]]",
 'searchprofile-articles' => 'Asosiy sahifalar',
-'searchprofile-project' => 'Yordam va proekt sahifalari.',
+'searchprofile-project' => 'Yordam va Loyiha sahifalari',
 'searchprofile-images' => 'Multimediya',
 'searchprofile-everything' => 'Har yerda',
 'searchprofile-advanced' => 'Kengaytirilgan',
-'searchprofile-articles-tooltip' => '$1da qidir',
-'searchprofile-project-tooltip' => '$1da qidir',
+'searchprofile-articles-tooltip' => '$1da qidirish',
+'searchprofile-project-tooltip' => '$1da qidirish',
 'searchprofile-images-tooltip' => 'Fayllarni qidir',
-'search-result-size' => '$1 ({{PLURAL:$2|1 soʻz|$2 soʻz}})',
+'searchprofile-everything-tooltip' => "Barcha sahifalardan (munozara sahifalarini qo'shgan holda) qidirish",
+'searchprofile-advanced-tooltip' => 'Belgilangan nomfazolardan qidirish',
+'search-result-size' => '$1 ({{PLURAL:$2|1 ta soʻz|$2 ta soʻz}})',
+'search-result-category-size' => "$1 {{PLURAL:$1|a'zo|a'zolar}} ($2 {{PLURAL:$2|ostturkum|ostturkumlar}}, $3 {{PLURAL:$3|fayl|fayllar}}).",
+'search-result-score' => 'Relavantlik: $1%.',
 'search-redirect' => '(yoʻnaltirish $1)',
 'search-section' => '($1 boʻlimi)',
 'search-suggest' => 'Balki buni nazarda tutgandirsiz: $1',
+'search-interwiki-caption' => 'Aloqador loyihalar',
 'search-interwiki-default' => '$1 natijalar:',
+'search-interwiki-more' => '(yana)',
+'search-mwsuggest-enabled' => 'takliflar bilan',
+'search-mwsuggest-disabled' => 'takliflarsiz',
+'search-relatedarticle' => "Bog'liq",
+'mwsuggest-disable' => "AJAX-takliflarini o'chirish",
 'searcheverything-enable' => 'Barcha nomfazolarda qidir',
+'searchrelated' => "bog'langan",
 'searchall' => 'barchasi',
-'showingresults' => "#<b>$2</b> boshlanayotgan <b>$1</b> natijalar ko'rsatilyapti.",
+'showingresults' => "Quyida №'''$2'''dan boshlab '''$1''' ta {{PLURAL:$1|natija}} ko'rsatildi.",
+'showingresultsnum' => "Quyida №'''$2'''dan boshlab '''$1''' ta {{PLURAL:$1|natija}} ko'rsatildi.",
 'showingresultsheader' => "$4 uchun {{PLURAL:$5|'''$3'''dan '''$1''' natija|'''$3'''dan '''$1 - $2''' natijalar}}",
 'search-nonefound' => 'Talabga javob beradigan natija topilmadi.',
 'powersearch' => 'Qidiruv',
 'powersearch-legend' => 'Kengaytirilgan qidiruv',
 'powersearch-ns' => 'Bu nom-fazolarda izla:',
 'powersearch-redir' => 'Yoʻnaltirishlarni koʻrsat',
-'powersearch-field' => 'Qidir',
+'powersearch-field' => 'Qidiruv',
+'powersearch-togglelabel' => 'Belgilash:',
+'powersearch-toggleall' => 'Hammasini',
+'powersearch-togglenone' => 'Hech qaysini',
+'search-external' => 'Tashqi qidiruv',
+
+# Quickbar
+'qbsettings' => 'Saytda harakatlanish darchasi',
+'qbsettings-none' => "Ko'rsatmaslik",
+'qbsettings-fixedleft' => "Qo'zg'almas chap",
+'qbsettings-fixedright' => "Qo'zg'almas o'ng",
+'qbsettings-floatingleft' => 'Suzuvchi chap',
+'qbsettings-floatingright' => "Suzuvchi o'ng",
 
 # Preferences page
 'preferences' => 'Moslamalar',
 'mypreferences' => 'Moslamalarim',
 'prefs-edits' => 'Tahrirlar soni',
+'prefsnologin' => "Siz tizimda o'zingizni tanitmadingiz",
 'changepassword' => 'Maxfiy soʻzni oʻzgartirish',
 'prefs-skin' => 'Tashqi ko‘rinishi',
+'skin-preview' => 'Ko‘rib chiqish',
 'datedefault' => 'Farqi yoʻq',
+'prefs-beta' => 'Beta-imkoniyatlar',
 'prefs-datetime' => 'Sana va vaqt',
+'prefs-labs' => 'Tajribaviy imkoniyatlar',
+'prefs-user-pages' => 'Foydalanuvchi sahifalari',
 'prefs-personal' => 'Shaxsiy ma’lumotlar',
 'prefs-rc' => 'Yangi o‘zgartirishlar',
 'prefs-watchlist' => "Kuzatuv ro'yxati",
-'prefs-watchlist-days-max' => 'Eng ko‘pi $1 {{PLURAL:$1|kun|kun}}',
+'prefs-watchlist-days' => 'Kunlar soni:',
+'prefs-watchlist-days-max' => 'Eng ko‘pi bilan $1 {{PLURAL:$1|kun}}',
+'prefs-watchlist-edits-max' => 'Eng katta son: 1000',
 'prefs-misc' => 'Boshqa moslamalar',
 'prefs-resetpass' => 'Maxfiy soʻzni oʻzgartirish',
 'prefs-changeemail' => 'E-mail manzilingizni o‘zgartirish',
+'prefs-email' => 'Elektron pochta moslamalari',
 'prefs-rendering' => 'Tashqi ko‘rinishi',
 'saveprefs' => 'Saqlash',
 'resetprefs' => 'Bekor qilish',
-'restoreprefs' => 'Barcha moslamalarni dastlabki holiga qaytar',
+'restoreprefs' => 'Barcha moslamalarni dastlabki holatiga qaytarish',
 'prefs-editing' => 'Tahrirlash',
 'prefs-edit-boxsize' => 'Tahrir oynasining oʻlchami',
 'rows' => 'Qatorlar soni:',
 'columns' => 'Ustunlar soni:',
-'searchresultshead' => 'Qidiruv natijalari',
+'searchresultshead' => 'Qidiruv',
+'stub-threshold-disabled' => "O'chirib qo'yilgan",
 'recentchangesdays-max' => 'Eng koʻpi $1 kun',
 'recentchangescount' => 'Sukut boʻyicha koʻrsatiladigan tahrirlar soni',
 'timezonelegend' => 'Vaqt mintaqangiz:',
 'localtime' => 'Mahalliy vaqt:',
+'timezoneuseserverdefault' => 'Server moslamalaridan foydalanish ($1)',
+'timezoneuseoffset' => "Boshqa (siljishni ko'rsating)",
+'timezoneoffset' => 'Siljish¹:',
 'servertime' => 'Server vaqti:',
+'guesstimezone' => "Brauzerdan to'ldirish",
 'timezoneregion-africa' => 'Afrika',
 'timezoneregion-america' => 'Amerika',
 'timezoneregion-antarctica' => 'Antarktika',
@@ -490,9 +711,10 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'timezoneregion-indian' => 'Hind okeani',
 'timezoneregion-pacific' => 'Tinch okeani',
 'allowemail' => 'Boshqa foydalanuvchilardan elektron xat olishga ruxsat berish',
-'prefs-searchoptions' => 'Qidiruv shartlari',
+'prefs-searchoptions' => 'Qidiruv',
 'prefs-namespaces' => 'Nomfazolar',
-'defaultns' => 'Aks holda quyidagi nomfazolarda qidir:',
+'defaultns' => 'Aks holda quyidagi nomfazolardan qidirish:',
+'default' => "boshlang'ich",
 'prefs-files' => 'Fayllar',
 'prefs-emailconfirm-label' => 'Elektron pochta manzilini tasdiqlash:',
 'prefs-textboxsize' => 'Tahrir oynasining oʻlchami',
@@ -503,15 +725,22 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'prefs-registration' => 'Hisob ochilgan vaqt',
 'yourrealname' => 'Haqiqiy ism *:',
 'yourlanguage' => 'Til:',
+'yourvariant' => 'Tarkib tili varianti',
 'yournick' => 'Yangi imzo',
 'prefs-help-signature' => 'Munozara sahifalarida imzo "<nowiki>~~~~</nowiki>" orqali qoʻyiladi (u sizning imzoingiz va joriy vaqtga aylantiriladi).',
 'yourgender' => 'Jinsi:',
 'gender-unknown' => 'Koʻrsatilmagan',
 'gender-male' => 'Erkak',
 'gender-female' => 'Ayol',
+'prefs-help-gender' => "Ixtiyoriy: Foydalanuvching jinsiga bog'liq bo'lgan loyihaning ayrim xabarlarida foydalaniladi.
+Ushbu axborot ommaviy xususiyatga ega bo'ladi.",
 'email' => 'E-mail:',
+'prefs-help-realname' => "Haqiqiy ism (ixtiyoriy maydon).
+Agar siz uni ko'rsatsangiz, undan sahifa tahriri kim tomonidan kiritilganligini ko'rsatish uchun foydalaniladi.",
+'prefs-help-email' => "Elektron pochta manzilini ko'rsatish majburiy emas, lekin u siz maxfiy so'zni unutib qo'ysangiz kerak bo'lishi mumkin.",
 'prefs-help-email-required' => 'E-mail manzilni koʻrsatish shart emas',
 'prefs-info' => 'Asosiy maʼlumot',
+'prefs-i18n' => 'Internatsionallashtirish',
 'prefs-signature' => 'Imzo',
 'prefs-dateformat' => 'Sana formati',
 'prefs-timeoffset' => 'Vaqt farqi',
@@ -520,10 +749,16 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'prefs-advancedrendering' => 'Qoʻshimcha moslamalar',
 'prefs-advancedsearchoptions' => 'Qoʻshimcha moslamalar',
 'prefs-advancedwatchlist' => 'Qoʻshimcha moslamalar',
+'prefs-displayrc' => 'Tasvirlash moslamalari',
+'prefs-displaysearchoptions' => 'Tasvirlash moslamalari',
+'prefs-displaywatchlist' => 'Tasvirlash moslamalari',
+'prefs-diffs' => 'Versiyalar farqi',
 
 # User rights
 'userrights-groupsmember' => 'Aʼzolik:',
+'userrights-groupsmember-auto' => "Noaniq a'zo",
 'userrights-reason' => 'Sabab:',
+'userrights-changeable-col' => "Siz o'zgartirishingiz mumkin bo'lgan guruhlar",
 
 # Groups
 'group' => 'Guruh',
@@ -533,6 +768,7 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'group-sysop' => 'Administratorlar',
 'group-bureaucrat' => 'Rasmiyatchilar',
 'group-suppress' => 'Tekshiruvchilar',
+'group-all' => '(hamma)',
 
 'grouppage-user' => '{{ns:project}}:Foydalanuvchilar',
 'grouppage-autoconfirmed' => '{{ns:project}}:Tasdiqlangan foydalanuvchilar',
@@ -541,19 +777,28 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'grouppage-bureaucrat' => '{{ns:project}}:Rasmiyatchilar',
 'grouppage-suppress' => '{{ns:project}}:Tekshiruvchilar',
 
+# User rights log
+'rightslog' => "Ishtirokchi huquqlari bo'yicha qaydlar",
+'rightslogentry' => "ishtirokchi $1ning guruhlardagi a'zoligini $2dan $3ga o'zgartirdi",
+
 # Associated actions - in the sentence "You do not have permission to X"
 'action-edit' => 'ushbu sahifani tahrirlash',
 'action-move' => 'bu sahifani koʻchir',
 'action-move-subpages' => 'Bu sahifani va uning ostsahifalarini koʻchir',
+'action-sendemail' => "elektron xatlar jo'natish",
 
 # Recent changes
+'nchanges' => "$1 {{PLURAL:$1|o'zgarish|o'zgarishlar}}",
 'recentchanges' => 'Yangi o‘zgartirishlar',
+'recentchanges-legend' => 'Yangi tahrirlar moslamalari',
 'recentchanges-summary' => "Bu sahifada siz oxirgi o'zgartirishlarni ko'rishingiz mumkin.",
+'recentchanges-feed-description' => "Vikida mazkur oqimdagi oxirgi o'zgarishlarni kuzatish",
 'recentchanges-label-newpage' => 'Bu tahrir orqali yangi sahifa yaratildi',
 'recentchanges-label-minor' => 'Bu kichik tahrir',
 'recentchanges-label-bot' => 'Bu tahrirni bot bajardi',
 'recentchanges-label-unpatrolled' => 'Bu tahrir hali tekshirilmagan',
 'rcnote' => "Quyida $5, $4ga koʻra oxirgi {{PLURAL:$2|kun|'''$2''' kun}} davomida sodir boʻlgan {{PLURAL:$1|'''1''' oʻzgartirish|'''$1''' oʻzgartirishlar}} koʻrsatilgan.",
+'rcnotefrom' => "Quyida <strong>$2</strong> dan (<strong>$1</strong> gacha) bo'lgan o'zgarishlar keltirilgan.",
 'rclistfrom' => "$1dan boshlab yangi o'zgartirishlarni ko'rsat.",
 'rcshowhideminor' => 'Kichik tahrirlarni $1',
 'rcshowhidebots' => '$1 ta bot',
@@ -568,6 +813,7 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'show' => 'koʻrsat',
 'minoreditletter' => 'k',
 'newpageletter' => 'Y',
+'boteditletter' => 'b',
 'rc-enhanced-expand' => 'Tasfilotlarni koʻrsat (JavaScript talab qilinadi)',
 'rc-enhanced-hide' => 'Tafsilotlolarni yashir',
 
@@ -579,6 +825,7 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'recentchangeslinked-noresult' => 'Berilgan davrda bogʻlangan sahifalarda oʻzgarishlar boʻlmagan.',
 'recentchangeslinked-summary' => "Ushbu maxsus sahifa unga bogʻlangan sahifalardagi soʻnggi oʻzgarishlarni koʻrsatadi. [[Special:Watchlist|Kuzatuv roʻyxatingizdagi]] sahifalar '''qalin''' qilib koʻrsatilgan.",
 'recentchangeslinked-page' => 'Sahifa nomi:',
+'recentchangeslinked-to' => "Teskarisiga, ko'rsatilgan sahifaga yo'naltirilgan sahifalardagi o'zgarishlarni ko'rish",
 
 # Upload
 'upload' => 'Fayl yuklash',
@@ -590,6 +837,9 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'filesource' => 'Manba:',
 'uploadedimage' => '"[[$1]]" yuklandi',
 
+'license' => 'Litsenziyalash:',
+'license-header' => 'Litsenziyalash',
+
 # Special:ListFiles
 'imgfile' => 'fayl',
 'listfiles' => 'Fayllar roʻyxati',
@@ -607,6 +857,7 @@ Bu yerda: (joriy) = hozirgi koʻrinish bilan farq,
 'filehist-current' => 'joriy',
 'filehist-datetime' => 'Sana/Vaqt',
 'filehist-thumb' => 'Miniatyura',
+'filehist-thumbtext' => '$1 dagi versiya uchun tasvir',
 'filehist-user' => 'Foydalanuvchi',
 'filehist-dimensions' => 'Oʻlchamlari',
 'filehist-filesize' => 'Fayl hajmi',
@@ -638,8 +889,9 @@ Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
 'disambiguationspage' => '{{ns:template}}:Disambig',
 
 # Miscellaneous special pages
-'nbytes' => '$1 bayt',
+'nbytes' => '$1 {{PLURAL:$1|bayt}}',
 'ncategories' => '$1 {{PLURAL:$1|turkum|turkumlar}}',
+'nmembers' => "$1 {{PLURAL:$1|ta a'zo}}",
 'lonelypages' => 'Yetim sahifalar',
 'uncategorizedpages' => 'Turkumlashtirilmagan sahifalar',
 'uncategorizedcategories' => 'Turkumlashtirilmagan turkumlar',
@@ -649,8 +901,10 @@ Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
 'unusedimages' => 'Ishlatilinmagan fayllar',
 'wantedcategories' => 'Talab qilinayotgan turkumlar',
 'mostcategories' => 'Eng koʻp turkumli sahifalar',
+'prefixindex' => 'Prefiksli barcha sahifalar',
 'protectedpages' => 'Himoyalangan sahifalar',
 'listusers' => 'Foydalanuvchilar roʻyxati',
+'usercreated' => "$1 $2da {{GENDER:$3|ro'yxatdan o'tdi}}",
 'newpages' => 'Yangi sahifalar',
 'move' => 'Ko‘chirish',
 'movethispage' => 'Bu sahifani koʻchir',
@@ -659,11 +913,15 @@ Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
 
 # Book sources
 'booksources' => 'Kitob manbaʻlar',
+'booksources-search-legend' => "Kitob haqida ma'lumot qidirish",
 'booksources-go' => 'O‘tish',
 
 # Special:Log
+'specialloguserlabel' => 'Ijrochi:',
+'speciallogtitlelabel' => "Mo'ljal (nom yoki ishtirokchi):",
 'log' => 'Qaydlar',
-'all-logs-page' => 'Barcha qaydlar',
+'all-logs-page' => 'Barcha ochiq qaydlar',
+'log-title-wildcard' => 'Shu matndan boshlanuvchi sarlavhalarni izlash',
 
 # Special:AllPages
 'allpages' => 'Barcha sahifalar',
@@ -673,7 +931,7 @@ Uning [$2 fayl tavsifi sahifasidan] olingan tavsifi quyida keltirilgan.',
 'allpagesfrom' => 'Sahifalarni koʻrsat:',
 'allarticles' => 'Barcha sahifalar',
 'allpagesnext' => 'Keyingi',
-'allpagessubmit' => 'Oʻt',
+'allpagessubmit' => 'Oʻtish',
 'allpagesprefix' => 'Bunday prefiksli sahifalarni koʻrsat:',
 
 # Special:Categories
@@ -688,10 +946,14 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Special:LinkSearch
 'linksearch-ns' => 'Nomfazo:',
 'linksearch-ok' => 'Qidirish',
+'linksearch-line' => '$2 ichidan $1 ga havola',
 
 # Special:ListUsers
 'listusers-submit' => 'Koʻrsat',
 
+# Special:Log/newusers
+'newuserlogpage' => "Ishtirokchilarni ro'yxatga olish qaydlari",
+
 # Special:ListGroupRights
 'listgrouprights-group' => 'Guruh',
 'listgrouprights-rights' => 'Huquqlar',
@@ -705,6 +967,7 @@ Also see [[Special:WantedCategories|wanted categories]].',
 # Watchlist
 'watchlist' => 'Kuzatuv roʻyxatim',
 'mywatchlist' => 'Kuzatuv roʻyxatim',
+'watchlistfor2' => '$1 $2 uchun',
 'nowatchlist' => "Kuzatuv ro'yxatingizda hech narsa yo'q.",
 'addedwatchtext' => "\"[[:\$1]]\" sahifasi sizning [[Special:Watchlist|kuzatuv ro'yxatingizga]] qo'shildi. Bu sahifada va unga mos munozara sahifasida bo'ladigan kelajakdagi o'zgarishlar bu yerda ro'yxatga olinadi, hamda bu sahifa topish qulay bo'lishi uchun [[Special:RecentChanges|yangi o'zgarishlar ro'yxati]]da '''qalin''' harflar bilan ko'rsatiladi.
 
@@ -713,8 +976,10 @@ Agar siz bu sahifani kuzatuv ro'yxatingizdan o'chirmoqchi bo'lsangiz \"Kuzatmasl
 'watch' => 'kuzatish',
 'watchthispage' => 'Sahifani kuzatish',
 'unwatch' => 'kuzatmaslik',
+'watchlist-details' => "Sizning kuzatuv ro'yxatingizda $1 {{PLURAL:$1|ta sahifa}} (munozara sahifalarini hisobga olmaganda)",
 'wlnote' => "Below {{PLURAL:$1|is the last change|are the last '''$1''' changes}} in the last {{PLURAL:$2|hour|'''$2''' hours}}, as of $3, $4.",
 'wlshowlast' => 'Oxirgi $1 soatdagi $2 kundagi tahrirlarni ko‘rsatish. $3 tahrirlarni ko‘rsatish',
+'watchlist-options' => "Kuzatuv ro'yxati moslamalari",
 
 # Delete
 'actioncomplete' => 'Bajarildi',
@@ -728,35 +993,76 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 
 # Rollback
 'rollbacklink' => 'eski holiga keltir',
+'revertpage' => '[[Special:Contributions/$2|$2]] ([[User talk:$2|munozara]]) tahrirlari [[User:$1|$1]] versiyasiga qaytarildi',
 
 # Protect
 'protectlogpage' => 'Himoyalash qaydlari',
+'protectedarticle' => '"[[$1]]" sahifasi himoyalandi',
 'protect-level-sysop' => 'Faqat administratorlar uchun',
-'protect-expiry-options' => '2 soat:2 hours,1 kun:1 day,1 hafta:1 week,2 hafta:2 weeks,1 oy:1 month,3 oy:3 months,6 oy:6 months,1 yil:1 year,cheksiz:infinite',
+'protect-edit-reasonlist' => "Sabablar ro'yxatini tahrirlash",
+'protect-expiry-options' => '1 soat:1 hours,1 kun:1 day,1 hafta:1 week,2 hafta:2 weeks,1 oy:1 month,3 oy:3 months,6 oy:6 months,1 yil:1 year,cheksiz:infinite',
+'restriction-type' => 'Huquqlar:',
+'restriction-level' => 'Ruxsat etilganlik darajasi:',
+'minimum-size' => 'Eng kichik hajm',
+'maximum-size' => 'Eng katta hajm:',
+'pagesize' => '(bayt)',
 
 # Restrictions (nouns)
 'restriction-edit' => 'Tahrirlash',
+'restriction-move' => "Ko'chirish",
+'restriction-create' => 'Yaratish',
+'restriction-upload' => 'Yuklash',
+
+# Restriction levels
+'restriction-level-sysop' => "to'liq himoya",
+'restriction-level-autoconfirmed' => 'qisman himoya',
+'restriction-level-all' => 'barcha darajalar',
 
 # Undelete
-'undeletebtn' => 'Qayta tikla',
+'undelete' => "O'chirilgan sahifalarni ko'rish",
+'undeletepage' => "O'chirilgan sahifalarni ko'rish va tiklash",
+'viewdeletedpage' => "O'chirilgan sahifalarni ko'rish",
+'undelete-nodiff' => 'Oldingi versiya topilmadi.',
+'undeletebtn' => 'Tiklash',
 'undeletelink' => 'ko‘rib chiqish/tiklash',
 'undeleteviewlink' => "ko'rib chiqish",
+'undeletereset' => 'Tozalash',
+'undeleteinvert' => 'Tanlash tartibini almashtirish',
+'undeletecomment' => 'Sabab:',
+'undelete-search-title' => "O'chirilgan sahifalarni qidirish",
+'undelete-search-box' => "O'chirilgan sahifalarni qidirish",
+'undelete-search-prefix' => "Bundan boshlangan sahifalarni ko'rsatish:",
+'undelete-search-submit' => 'Qidirish',
+'undelete-show-file-submit' => 'Ha',
 
 # Namespace form on various pages
 'namespace' => 'Soha:',
 'invert' => 'Tanlash tartibini almashtirish',
+'namespace_association' => "Bog'liq nomfazo",
 'blanknamespace' => '(asosiy)',
 
 # Contributions
 'contributions' => 'Foydalanuvchining hissasi',
+'contributions-title' => '$1 {{GENDER:$1|foydalanuvchisining}} hissasi',
 'mycontris' => 'Hissam',
 'contribsub2' => '$1 uchun ($2)',
+'nocontribs' => "Belgilangan shartlarga muvofiq o'zgarishlar topilmadi",
+'uctop' => '(oxirgi)',
+'month' => 'Oydan (va avvalroq)',
+'year' => 'Yildan (va avvalroq)',
 
 'sp-contributions-newbies' => 'Faqatgina yangi foydalanuvchilarning hissalarini koʻrsat',
+'sp-contributions-newbies-sub' => 'Yangi hisob yozuvlaridan',
+'sp-contributions-newbies-title' => 'Yangi hisob yozuvlarining hissalari',
 'sp-contributions-blocklog' => 'Chetlashtirish qaydlari',
+'sp-contributions-deleted' => "o'chirilgan tahrirlar",
+'sp-contributions-uploads' => 'yuklanmalar',
+'sp-contributions-logs' => 'qaydlar',
 'sp-contributions-talk' => 'munozara',
-'sp-contributions-search' => 'Hissalarni qidir',
-'sp-contributions-username' => 'IP manzil yoki foydalanuvchi ismi:',
+'sp-contributions-userrights' => 'foydalanuvchining huquqlarini boshqarish',
+'sp-contributions-search' => 'Hissalarni qidirish',
+'sp-contributions-username' => 'IP-manzil yoki foydalanuvchi nomi:',
+'sp-contributions-toponly' => "Faqat oxirgi versiya hisoblangan tahrirlarni ko'rsatish",
 'sp-contributions-submit' => 'Qidir',
 
 # What links here
@@ -767,16 +1073,43 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'nolinkshere' => "'''[[:$1]]''' sahifasiga hech qaysi sahifa bog‘lanmagan.",
 'isredirect' => 'yoʻnaltiruvchi sahifa',
 'istemplate' => 'qoʻshimcha',
+'isimage' => 'faylli havola',
+'whatlinkshere-prev' => '{{PLURAL:$1|oldingi}} $1',
+'whatlinkshere-next' => '{{PLURAL:$1|keyingi}} $1',
 'whatlinkshere-links' => '← ishoratlar',
+'whatlinkshere-hideredirs' => "$1 qayta yo'naltirishlar",
+'whatlinkshere-hidetrans' => '$1 kiritmalar',
+'whatlinkshere-hidelinks' => '$1 havolalar',
+'whatlinkshere-hideimages' => '$1 rasmlar uchun havolalar',
 'whatlinkshere-filters' => 'Filtrlar',
 
 # Block/unblock
+'block' => 'Foydalanuvchini muhosara qilish',
+'unblock' => "Foydalanuvchiga yo'l ochish",
 'blockip' => 'Foydalanuvchini chetlashtir',
+'blockip-title' => 'Foydalanuvchini muhosara qilish',
+'blockip-legend' => 'Foydalanuvchini muhosara qilish',
+'ipadressorusername' => 'IP-manzil yoki foydalanuvchi nomi:',
+'ipbexpiry' => 'Tugaydi:',
+'ipbreason' => 'Sabab:',
+'ipbreasonotherlist' => 'Boshqa sabab',
+'ipbreason-dropdown' => "* Chetlashtirishning andazaviy sabablari
+** Yolg'on axborot kiritish
+** Sahifa matnini o'chirish
+** Tashqi saytlarga spam-yo'llanmalar
+** Ma'nosiz matn/axlat qo'shish
+** Tahdid, ishtirokchilarni ta'qib qilish
+** Bir necha hisob yozuvlaridan o'z manfaatlarida foydalanish
+** Ishtirokchining nomaqbul ismi",
+'ipbother' => 'Boshqa vaqt:',
 'ipboptions' => '2 soat:2 hours,1 kun:1 day,3 kun:3 days,1 hafta:1 week,2 hafta:2 weeks,1 oy:1 month,3 oy:3 months,6 oy:6 months,1 yil:1 year,cheksiz:infinite',
 'ipblocklist' => 'Chetlashtirilgan IP manzillari va foydalanuvchilar',
 'blocklink' => 'chetlashtir',
+'unblocklink' => "muhosarani (to'sishni) bekor qilish",
+'change-blocklink' => "Muhosarani (to'siqni) o'zgartirmoq",
 'contribslink' => 'hissasi',
 'blocklogpage' => 'Chetlashtirish qaydlari',
+'blocklogentry' => '$2 $3 davrga [[$1]]ni chetlashtirdi',
 'block-log-flags-nocreate' => 'hisob ochish toʻxtatilgan',
 
 # Move page
@@ -793,9 +1126,12 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 
 # Namespace 8 related
 'allmessagesname' => 'Ism',
+'allmessagesdefault' => "Boshlang'ich matn",
+'allmessagescurrent' => 'Joriy xabar matni',
 
 # Thumbnails
 'thumbnail-more' => 'Kattalashtir',
+'thumbnail_error' => 'Tasvir yaratishda xatolik: $1',
 
 # Tooltip help for the actions
 'tooltip-pt-userpage' => 'Foydalanuvchi sahifangiz',
@@ -819,7 +1155,7 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'tooltip-ca-move' => 'Bu sahifani koʻchir',
 'tooltip-ca-watch' => "Bu sahifani kuzatuv ro'yxatingizga qo'shish",
 'tooltip-ca-unwatch' => "Bu sahifani kuzatuv ro'yxatingizga o'chirish",
-'tooltip-search' => '{{SITENAME}}da qidirish',
+'tooltip-search' => '{{SITENAME}}dan qidirish',
 'tooltip-search-go' => 'Xuddi shu nomli sahifa bor boʻlsa, uni och',
 'tooltip-search-fulltext' => 'Sahifalarda ushbu matnni izlash',
 'tooltip-p-logo' => 'Bosh sahifaga o‘tish',
@@ -947,19 +1283,29 @@ Yaqinda sodir etilgan yoʻqotishlar uchun $2ni koʻring.',
 'autoredircomment' => '[[$1]]ga yoʻnaltirildi',
 'autosumm-new' => '"$1" yozuvi orqali yangi sahifa yaratildi',
 
+# Size units
+'size-bytes' => '$1 bayt',
+
 # Watchlist editing tools
+'watchlisttools-view' => "Muhim o'zgarishlarni ko'rish",
 'watchlisttools-edit' => 'Kuzatuv roʻyxatimni koʻrish/oʻzgartirish',
 'watchlisttools-raw' => 'Kuzatuv roʻyxatimni tahrirlash',
 
 # Signatures
 'signature' => '[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|munozara]])',
 
+# Core parser functions
+'duplicate-defaultsort' => "'''Diqqat:''' \"\$2\" boshlang'ich saralash kaliti oldingi \"\$1\" boshlang'ich saralash kalitini qayta aniqlayapti.",
+
 # Special:Version
 'version-specialpages' => 'Maxsus sahifalar',
 
 # Special:SpecialPages
 'specialpages' => 'Maxsus sahifalar',
 
+# Special:Tags
+'tag-filter' => '[[Special:Tags|nishonlar]] filtri:',
+
 # HTML forms
 'htmlform-reset' => 'Oʻzgarishlarni bekor qilish',
 
index 632f2fa..0484319 100644 (file)
@@ -414,11 +414,11 @@ $messages = array(
 'category-empty' => "''Thể loại này hiện không có trang hay tập tin nào.''",
 'hidden-categories' => '{{PLURAL:$1|Thể loại ẩn|Thể loại ẩn}}',
 'hidden-category-category' => 'Thể loại ẩn',
-'category-subcat-count' => 'Thể loại này  {{PLURAL:$2|tiểu thể loại sau|{{PLURAL:$1||$1}} tiểu thể loại sau, trên tổng số $2 tiểu thể loại}}.',
-'category-subcat-count-limited' => 'Thể loại này có {{PLURAL:$1||$1}} tiểu thể loại sau.',
+'category-subcat-count' => 'Thể loại này gồm {{PLURAL:$2|tiểu thể loại sau|{{PLURAL:$1||$1}} tiểu thể loại sau, trên tổng số $2 tiểu thể loại}}.',
+'category-subcat-count-limited' => 'Thể loại này gồm {{PLURAL:$1|tiểu thể loại|$1 tiểu thể loại}} sau.',
 'category-article-count' => '{{PLURAL:$2|Thể loại này gồm trang sau.|{{PLURAL:$1|Trang|$1 trang}} sau nằm trong thể loại này, trên tổng số $2 trang.}}',
 'category-article-count-limited' => '{{PLURAL:$1|Trang|$1 trang}} sau nằm trong thể loại hiện hành.',
-'category-file-count' => '{{PLURAL:$2|Thể loại này  tập tin sau.|{{PLURAL:$1|Tập tin|$1 tập tin}} sau nằm trong thể loại này, trong tổng số $2 tập tin.}}',
+'category-file-count' => '{{PLURAL:$2|Thể loại này gồm tập tin sau.|{{PLURAL:$1|Tập tin|$1 tập tin}} sau nằm trong thể loại này, trong tổng số $2 tập tin.}}',
 'category-file-count-limited' => '{{PLURAL:$1|Tập tin|$1 tập tin}} sau nằm trong thể loại hiện hành.',
 'listingcontinuesabbrev' => '(tiếp theo)',
 'index-category' => 'Trang được ghi chỉ mục',
@@ -674,8 +674,8 @@ Truy vấn: $2',
 'protectedpagetext' => 'Trang này đã bị khóa không cho sửa đổi.',
 'viewsourcetext' => 'Bạn vẫn có thể xem và chép xuống mã nguồn của trang này:',
 'viewyourtext' => "Bạn vẫn có thể xem và chép xuống mã nguồn '''các sửa đổi của bạn''' tại trang này:",
-'protectedinterface' => 'Trang này cung cấp một thông báo trong giao diện phần mềm, và bị khóa để tránh phá hoại.',
-'editinginterface' => "'''Lưu ý:''' Bạn đang sửa chữa một trang dùng để cung cấp thông báo giao diện cho phần mềm. Những thay đổi tại trang này sẽ ảnh hưởng đến giao diện của rất nhiều người dùng website này. Để dịch thuật, hãy xem xét sử dụng [//translatewiki.net/wiki/Main_Page?setlang=vi translatewiki.net], dự án bản địa hóa của MediaWiki.",
+'protectedinterface' => 'Trang này cung cấp một thông báo trong giao diện phần mềm, và bị khóa để tránh phá hoại. Để bổ sung hoặc thay đổi bản dịch ở bất cứ wiki nào, xin vui lòng đóng góp vào [//translatewiki.net/wiki/Main_Page?setlang=vi translatewiki.net], dự án bản địa hóa của MediaWiki.',
+'editinginterface' => "'''Lưu ý:''' Bạn đang sửa chữa một trang dùng để cung cấp thông báo giao diện cho phần mềm. Những thay đổi tại trang này sẽ ảnh hưởng đến giao diện của rất nhiều người dùng wiki này. Để bổ sung hoặc thay đổi bản dịch ở bất cứ wiki nào, xin vui lòng đóng góp vào [//translatewiki.net/wiki/Main_Page?setlang=vi translatewiki.net], dự án bản địa hóa của MediaWiki.",
 'sqlhidden' => '(đã giấu truy vấn SQL)',
 'cascadeprotected' => 'Trang này đã bị khóa không cho sửa đổi, vì nó được nhúng vào {{PLURAL:$1|trang|những trang}} đã bị khóa với tùy chọn “khóa theo tầng” được kích hoạt:
 $2',
@@ -951,8 +951,7 @@ Nếu bạn là một thành viên vô danh và cảm thấy rằng có những
 Bạn có thể [[Special:Search/{{PAGENAME}}|tìm kiếm tựa trang này]] trong các trang khác, <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tìm trong các nhật trình liên quan],
 hoặc [{{fullurl:{{FULLPAGENAME}}|action=edit}} sửa đổi trang này]</span>.',
 'noarticletext-nopermission' => 'Trang này hiện đang trống.
-Bạn có thể [[Special:Search/{{PAGENAME}}|tìm kiếm tựa trang này]] tại các trang khác,
-hoặc <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tìm kiếm các nhật trình liên quan]</span>.',
+Bạn có thể [[Special:Search/{{PAGENAME}}|tìm kiếm tựa trang này]] tại các trang khác, hoặc <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} tìm kiếm các nhật trình liên quan]</span>, nhưng bạn không có phép tạo trang này.',
 'missing-revision' => 'Phiên bản #$1 của trang có tên “{{PAGENAME}}” không tồn tại.
 
 Lỗi này thường xuất hiện đối khi theo dõi liên kết lỗi thời đến phiên bản cũ của một trang đã bị xóa.
@@ -1216,7 +1215,9 @@ Xin hãy kiểm tra nhật trình.',
 'revdelete-only-restricted' => 'Có lỗi khi ẩn mục vào $2, $1: nếu ẩn mục để cho bảo quản viên khỏi nhìn thấy được thì cũng cần chọn một trong những tùy chọn ẩn khác.',
 'revdelete-reason-dropdown' => '*Các lý do thường gặp khi xóa
 ** Vi phạm bản quyền
-** Thông tin cá nhân không thích hợp',
+** Bình luận hoặc thông tin cá nhân không thích hợp
+** Tên người dùng không thích hợp
+** Thông tin có thể bôi nhọ người khác',
 'revdelete-otherreason' => 'Lý do khác/bổ sung:',
 'revdelete-reasonotherlist' => 'Lý do khác',
 'revdelete-edit-reasonlist' => 'Sửa lý do xóa',
@@ -1837,7 +1838,7 @@ Nếu vẫn còn bị lỗi, xin hãy liên hệ với một [[Special:ListUsers
 'backend-fail-internal' => 'Lỗi không rõ xuất hiện trong phía sau lưu trữ “$1”.',
 'backend-fail-contenttype' => 'Không thể xác định kiểu nội dung của tập tin để lưu giữ tại “$1”.',
 'backend-fail-batchsize' => 'Phía sau lưu trữ đã nhận một loạt $1 thao tác tập tin; mức hạn là $2 thao tác.',
-'backend-fail-usable' => 'Không thể ghi tập tin $1 vì không có đủ quyền hoặc những thư mục hay nơi đựng bị thiếu.',
+'backend-fail-usable' => 'Không thể đọc/ghi tập tin “$1” vì không có đủ quyền hoặc những thư mục hay nơi đựng bị thiếu.',
 
 # File journal errors
 'filejournal-fail-dbconnect' => 'Không thể kết nối với cơ sở dữ liệu nhật ký của phía sau lưu trữ “$1”.',
@@ -3102,7 +3103,7 @@ Lưu nó vào máy tính của bạn rồi tải nó lên đây.',
 'pageinfo-authors' => 'Tổng số tác giả riêng',
 'pageinfo-recent-edits' => 'Số lần sửa đổi gần đây (trong $1 qua)',
 'pageinfo-recent-authors' => 'Số người dùng sửa đổi gần đây',
-'pageinfo-restriction' => 'Mức khóa trang (<code>{{lcfirst:$1}}</code>)',
+'pageinfo-restriction' => 'Mức khóa trang ({{lcfirst:$1}})',
 'pageinfo-magic-words' => 'Từ thần chú ($1)',
 'pageinfo-hidden-categories' => 'Thể loại ẩn ($1)',
 'pageinfo-templates' => 'Bản mẫu được nhúng ($1)',
index d968f4e..887596e 100644 (file)
@@ -546,9 +546,9 @@ Kun pidliton mo an \"{{int:savearticle}}\" utro, an imo ginliwat in matitipig bi
 Puyde hi ikaw [[Special:Search/{{PAGENAME}}|magbiling para han ngaran hini nga pakli]] ha iba nga mga pakli,
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} binga an mga nanginginlabot nga mga log],
 o [{{fullurl:{{FULLPAGENAME}}|action=edit}} igliwat ini nga pakli]</span>.',
-'noarticletext-nopermission' => 'Ha yana waray surat ini nga pakli.
-Puydi nimo [[Special:Search/{{PAGENAME}}|pamilngon ini nga titulo han pakli]] ha iba nga mga pakli,
-o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pamilngon ha mga kasumpay nga talaan]</span>.',
+'noarticletext-nopermission' => 'Waray yana nahasurat hini nga pakli
+Puyde hi ikaw [[Special:Search/{{PAGENAME}}|magbiling han ngaran hini nga pakli]] ha iba nga mga pakli,
+o <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mamiling han mga nanginginlabot nga mga talaan]</span>, kundi diri ka gintutugotan hin paghímò hini nga pakli.',
 'userpage-userdoesnotexist-view' => "An akawnt han gumaramit ni ''$1'' in diri nakarehistro.",
 'updated' => '(Ginbag-ohan)',
 'note' => "'''Pahibaro:'''",
index 0f1744c..c8f6948 100644 (file)
@@ -566,9 +566,10 @@ $1',
 'protectedpagetext' => 'דער בלאט איז פארשפארט צו אפהאלטן ענדערונגן.',
 'viewsourcetext' => 'איר קענט זען און קאפירן דעם מקור פון דעם בלאַט:',
 'viewyourtext' => "איר קענט באקוקן דעם מקור פון '''אייערע רעדאקטירונגען''' צו דעם בלאט:",
-'protectedinterface' => 'דער בלאַט שטעלט צו אינטערפֿייס טעקסט פֿאַרן װײכװאַרג, און איז פֿאַרשפּאַרט כּדי צו פֿאַרמײַדן װאַנדאַליזם.',
-'editinginterface' => "'''ווארענונג:''' איר באַאַרבעט א בלאט וואס איז געניצט צוצושטעלן אינטערפֿייס טעקסט פאר דער ווייכווארג. ענדערונגען אין דעם בלאַט וועלן טוישן די אויסזען פון דער סיסטעם מודעות פאר אלע אנדערע באניצערס.
-פֿאַר איבערזעצן, באַטראַכטס באַניצן [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], דער מעדיעוויקי לאקאַליזאציע פראיעקט.",
+'protectedinterface' => 'דער בלאַט שטעלט צו באניצער־אויבערפלאך טעקסט פֿאַרן װײכװאַרג אויף דער דאזיקער וויקי, און איז פֿאַרשפּאַרט כּדי צו פֿאַרמײַדן װאַנדאַליזם.
+כדי צולייגן אדער ענדערן איבערזעצונגען פאר אלע וויקיס, זייט אזוי גוט ניצן [//translatewiki.net/ translatewiki.net], דער מעדיעוויקי לאקאליזאציע פראיעקט.',
+'editinginterface' => "'''ווארענונג:''' איר באַאַרבעט א בלאט וואס איז געניצט צוצושטעלן אינטערפֿייס טעקסט פאר דער ווייכווארג. ענדערונגען אין דעם בלאַט וועלן טוישן דאס אויסזען פון די סיסטעם מודעות פאר אלע אנדערע באניצער אויף דער וויקי.
+כדי צולייגן אדער ענדערן איבערזעצונגען, באַטראַכטס באַניצן [//translatewiki.net/ translatewiki.net], דער מעדיעוויקי לאקאַליזאציע פראיעקט.",
 'sqlhidden' => '(SQL פארלאנג באהאלטן)',
 'cascadeprotected' => 'דער בלאט איז פארשפארט צום ענדערן וויבאלד ער איז איינגעשלאסן אין איינע פון די פאלגנדע {{PLURAL:$1|בלאט, וואס איז|בלעטער, וואס זענען}} באשיצט מיט דער קאסקייד אפציע:
 
@@ -854,7 +855,7 @@ $2
 אדער [{{fullurl:{{FULLPAGENAME}}|action=edit}} רעדאַקטירן דעם בלאט]</span>.',
 'noarticletext-nopermission' => 'דערווײַל איז נישט פאַראַן קיין שום טעקסט אין דעם בלאַט.
 איר קענט [[Special:Search/{{PAGENAME}}| זוכן דעם בלאט טיטל]] אין אנדערע בלעטער,
-אדער <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} נאָכזוכן די רעלעוואנטע לאגביכער]</span>.',
+אדער <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} נאָכזוכן די רעלעוואנטע לאגביכער]</span>., אבער איר זענט נישט ערלויבט צו שאפֿן דעם בלאט.',
 'missing-revision' => 'די רעוויזיע #$1 פונעם בלאט "{{PAGENAME}}" עקזיסטירט נישט.
 
 דאס געשעט געוויינלעך פון פאלגן א פארעלטערטן היסטאריע לינק צו א בלאט וואס איז געווארן אויסגעמעקט.
@@ -982,6 +983,7 @@ $2
 'parser-template-loop-warning' => 'מוסטער שלייף געטראפן: [[$1]]',
 'parser-template-recursion-depth-warning' => 'מוסטער רעקורסיע טיף מאקסימום איבערגעשטיגן ($1)',
 'language-converter-depth-warning' => 'אַריבער דעם שפּראַך קאַנווערטער טיף לימיט ($1)',
+'converter-manual-rule-error' => 'געטראפן א גרײַז אין האנטלעכן שפראך־קאנווערטירן כלל',
 
 # "Undo" feature
 'undo-success' => 'די ענדערונג קען ווערן מבוטל. ביטע נאכקוקן די פארגלייך פון אונטן צו זיין זיכער אז דאס איז וואס איר ווילט טאן, און דערנאך היט-אפ די ענדערונגן פון אונטן צו ענדיגן דאס בטל מאכן די ענדערונג.',
@@ -1117,7 +1119,8 @@ $1",
 'revdelete-only-restricted' => 'פֿעלער בײַם באַהאַלטן דאס איינסל פֿון  $2, $1: איר קענט נישט באהאלטן פרטים פון אַדמיניסטראטורן נאר אויב איר וויילט אויס איינע פון די אַנדערע באַהאַלטן ברירות.',
 'revdelete-reason-dropdown' => '*אלגעמיינע אויסמעקן סיבות
 ** קאפירעכט ברעכן
-** פערזענלעכע אינפֿארמאַציע
+** נישט פאַסנדיקע הערה אדער פערזענלעכע אינפֿארמאַציע
+** נישט פאַסנדיקער באַניצער נאמען
 ** אינפֿארמאַציע מעגלעך צו זיין לשון הרע',
 'revdelete-otherreason' => 'אנדער/צוגעגעבענע סיבה:',
 'revdelete-reasonotherlist' => 'אנדער סיבה',
@@ -1305,7 +1308,7 @@ $1",
 'timezoneregion-indian' => 'אינדישער אקעאן',
 'timezoneregion-pacific' => 'פאציפישער אקעאן',
 'allowemail' => 'ערלויבן אנדערע צו שיקן אײַך ע־פאסט',
-'prefs-searchoptions' => '×\91ר×\99ר×\95ת ×¤×\90ר ×\96×\95×\9b×\9f',
+'prefs-searchoptions' => 'זוכן',
 'prefs-namespaces' => 'נאָמענטיילן',
 'defaultns' => 'אנדערשט זוך אין די נאמענטיילן:',
 'default' => 'גרונטלעך',
@@ -1429,6 +1432,7 @@ $1",
 'right-writeapi' => 'ניצן דעם שרײַבן API',
 'right-delete' => 'מעקן בלעטער',
 'right-bigdelete' => 'אויסמעקן בלעטער מיט לאַנגע היסטאריעס',
+'right-deletelogentry' => 'אויסמען און צוריקשטעלן געוויסע לאגבוך אקציעס',
 'right-deleterevision' => 'מעקן און צוריקשטעלן ספעציפישע רעוויזיעס פון בלעטער',
 'right-deletedhistory' => 'אײַערע אויסגעמעקטע היסטאריע פֿאַרשרײַבונגען, אן זייער אסאציאירטן טעקסט',
 'right-deletedtext' => 'באַקוקן אויסגעמעקטן טעקסט און ענדערונגען צווישן אויסגעמעקטע ווערסיעס',
@@ -1664,10 +1668,14 @@ $1",
 'upload-warning-msg' => 'געווען א פראבלעם מיט אײַער ארויפֿלאָד פֿון [$2]. איר קענט צוריקקערן צום [[Special:Upload/stash/$1|ארויפֿלאָדן פֿארעם]] צו פֿאררעכטן דעם פראבלעם.',
 
 'upload-proto-error' => 'פֿאלשער פראטאקאל',
+'upload-proto-error-text' => 'ביי א ווייטן ארויפלאד דארף דער URL אנהייבן מיט <code>http://</code> אדער <code>ftp://</code>.',
 'upload-file-error' => 'אינערליכער פֿעלער',
 'upload-file-error-text' => 'אן אינערלעכע פֿעלער האט פאסירט ביים פרובירן צו שאפֿן א פראוויזארישע טעקע אויפֿן סארווער.
 ביטע פֿארבינדט זיך מיט א [[Special:ListUsers/sysop|סיסאפ]].',
 'upload-misc-error' => 'אומבאַוואוסטער ארויפֿלאָדן גרײַז',
+'upload-misc-error-text' => 'אן אומבאקאנטער גרייז האט פאסירט בשעת דעם ארויפלאד.
+ביטע באשטעטיקט אז דער  URL איז גילטיק און דערגרייכבאר און פרובירט נאכאמאל.
+ווען דער פראבלעם בלייבט ווייטער, קאנטאקטירט  א [[Special:ListUsers/sysop|סיסאפ]].',
 'upload-too-many-redirects' => 'דער URL אַנטהאַלט צופֿיל ווײַטערפֿירונגען.',
 'upload-unknown-size' => 'אומוויסנדע גרייס',
 'upload-http-error' => 'א HTTP גרײַז האט פאַסירט: $1',
@@ -1690,6 +1698,7 @@ $1",
 
 # Lock manager
 'lockmanager-notlocked' => 'מ\'קען נישט אויפֿשליסן "$1"; ער איז נישט פֿארשלאסן.',
+'lockmanager-fail-deletelock' => 'נישט מעגלעך אויסמעקן שלאס טעקע פאר "$1".',
 
 # ZipDirectoryReader
 'zip-wrong-format' => 'ספעציפירטע טעקע איז נישט קיין ZIP טעקע.',
@@ -2316,6 +2325,7 @@ $UNWATCHURL
 'undelete-search-box' => 'זוכן אויסגעמעקטע בלעטער',
 'undelete-search-prefix' => 'ווײַז בלעטער וואס הייבן אן מיט:',
 'undelete-search-submit' => 'זוכן',
+'undelete-error' => 'גרייז ביים צוריקשטעלן בלאט',
 'undelete-error-short' => 'טעות ביים צוריקשטעלן טעקע: $1',
 'undelete-error-long' => 'גרײַזן געטראפֿן בײַם ווידערשטעלן די טעקע:
 
@@ -2519,6 +2529,8 @@ $1',
 'locknoconfirm' => 'איר האט נישט אָנגעצייכנט דאָס באַשטעטיקונג קעסטל.',
 'lockdbsuccesssub' => 'דאַטנבאַזע פֿאַרשפאַרט מיט הצלחה',
 'unlockdbsuccesssub' => 'דאטנבאזע שלאס אראפגענומען',
+'lockdbsuccesstext' => 'די דאטנבאזע איז געשלאסן .<br />
+געדענקט [[Special:UnlockDB|אוועקנעמען דעם שלאס ]] ווען אייער אויפהאלטונד איז געענדיקט.',
 'unlockdbsuccesstext' => 'די דאַטנבאַזע איז געווארן אויפֿגעשלאסן',
 'databasenotlocked' => 'די דאַטנבאַזע איז נישט פֿאַרשלאסן.',
 'lockedbyandtime' => '(דורך $1 אום $2 בײַ $3)',
@@ -2856,7 +2868,7 @@ $1',
 'pageinfo-authors' => 'סה"כ צאָל באַזונדערע שרײַבער',
 'pageinfo-recent-edits' => 'לעצטיקע צאל רעדאקטירונגען (במשך די לעצטע $1)',
 'pageinfo-recent-authors' => 'לעצטיקע צאָל באַזונדערע שרײַבער',
-'pageinfo-restriction' => 'בלאט שוץ (<code>$1</code>)',
+'pageinfo-restriction' => 'בלאט שוץ ($1)',
 'pageinfo-magic-words' => '{{PLURAL:$1|מאגיש ווארט|מאגישע ווערטער}} ($1)',
 'pageinfo-hidden-categories' => 'באהאלטענע {{PLURAL:$1|קאטעגאריע|קאטעגאריעס}} ($1)',
 'pageinfo-templates' => ' {{PLURAL:$1|אריבערגעשלאסענער מוסטער|אריבערגשלאסענע מוסטערן}} ($1)',
index 87aa016..de1cf47 100644 (file)
@@ -60,7 +60,7 @@ $messages = array(
 'tog-hidepatrolled' => 'Ìbòmọ́lẹ̀ àwọn àtúnṣe oníìṣọ́ nínú àwọn àtúnṣe tuntun',
 'tog-newpageshidepatrolled' => 'Ìbòmọ́lẹ̀ àwọn ojúewé oníìṣọ́ lọ́dọ̀ àtòjọ ojúewé tuntun',
 'tog-extendwatchlist' => "Ìfẹ̀ àmójútó láti ṣ'àfihàn gbogbo àtúnṣe, kìí ṣe tuntun nìkan",
-'tog-usenewrc' => 'Ìlò áwọn àtúnṣe tuntun aláàmúdára (JavaScript pọndandan)',
+'tog-usenewrc' => 'Ìtò àwọn àtúnṣe gẹ́gẹ́bí ojúewé nínú àwọn àtúnṣe tuntun àti ìmújútó (JavaScript pọndandan)',
 'tog-numberheadings' => 'Àwọn àkọlé nọmba-araẹni',
 'tog-showtoolbar' => 'Ìfihàn pẹpẹ irinṣẹ́ àtúnṣe (JavaScript pọndandan)',
 'tog-editondblclick' => "Ṣ'àtúnṣe àwọn ojúewé ní kíkàn lẹ́mẹjì (JavaScript)",
@@ -68,17 +68,17 @@ $messages = array(
 'tog-editsectiononrightclick' => 'Ìgbàláyè àtúnṣe abala nípa klííkì ọ̀tún lórí àkọlé abala (JavaScript pọndandan)',
 'tog-showtoc' => 'Ìfihàn tábìlì àkóónú (fún àwọn ojúewé tó ní ju orí ọ̀rọ̀ 3 lọ)',
 'tog-rememberpassword' => "Ṣè'rántí àkọọ́lẹ̀ ìwọlé mi lórí agbétàkùn yìí (fún {{PLURAL:$1|ọjọ́|ọjọ́}} $1 pípẹ́jùlọ)",
-'tog-watchcreations' => "Ṣ'àfikún ojúewé tí mo dá mọ́ ìmójútó mi",
-'tog-watchdefault' => "S'àfikún ojúewé tí mo s'àtúnse mọ́ ìmójútó mi",
-'tog-watchmoves' => "S'àfikún ojúewé tí mo yípò mọ́ ìmójútó mi",
-'tog-watchdeletion' => "S'àfikún ojúewé tí mo parẹ́ mọ́ ìmójútó mi",
+'tog-watchcreations' => "Ṣ'àfikún ojúewé tí mo dá àti àwọn fáìlì tí mo rùsókè mọ́ ìmójútó mi",
+'tog-watchdefault' => "Ṣ'àfikún àwọn ojúewé àti fáìlì tí mo ṣ'àtúnse mọ́ ìmójútó mi",
+'tog-watchmoves' => "Ṣ'àfikún àwọn ojúewé ati fáìlì tí mo yípò mọ́ ìmójútó mi",
+'tog-watchdeletion' => "Ṣ'àfikún àwọn ojúewé àti fáìlì tí mo parẹ́ mọ́ ìmójútó mi",
 'tog-minordefault' => "Se àmì sí gbogbo àtúnse gẹ́gẹ́ bi kékeré lát'ìbẹ̀rẹ̀.",
 'tog-previewontop' => "Se àyẹ̀wò kí ẹ tó s'àtúnṣe",
 'tog-previewonfirst' => "S'àfihàn àgbéwò fún àtúnse àkọ́kọ́",
 'tog-nocache' => 'Ìdínà fífi ojúewé pamọ́ sínú cache',
-'tog-enotifwatchlistpages' => 'Fi e-mail ránṣẹ́ sími tí ojúewé tí mò ún mójútó bá yípadà',
+'tog-enotifwatchlistpages' => 'Fi e-mail ránṣẹ́ sí mi tí ojúewé tàbí fáìlì tí mò ún mójútó bá yípadà',
 'tog-enotifusertalkpages' => 'Fi e-mail ránṣẹ́ sími tí ojúewé oníṣe mi bá yípadà',
-'tog-enotifminoredits' => 'Fi e-mail ránṣẹ́ sími bákannà fún àtúnṣe kékékèé sí ojúewé',
+'tog-enotifminoredits' => 'Fi e-mail ránṣẹ́ sí mi bákannà fún àtúnṣe kékékèé sí àwọn ojúewé àti fáìlì',
 'tog-enotifrevealaddr' => "Ṣ'àfihàn àdírẹ́ẹ̀sì e-mail mi nínú àwọn ìránṣẹ́ e-mail",
 'tog-shownumberswatching' => "S'àfihàn iye àwọn oníṣe tí wọn tẹjú mọ́ọ",
 'tog-oldsig' => 'Ìtọwọ́bọ̀wé tówà:',
@@ -371,9 +371,9 @@ $1',
 'dberrortext' => 'Àṣìṣe ìsoọ̀rọ̀pọ̀ ìtọrọ ibùdó-dátà kan ti ṣẹlẹ̀.
 Ó lè jẹ́ nítorí àṣìṣe inú atòlànà.
 Ìgbìyànjú ìtọrọ ibùdó-dátà ṣẹlẹ̀ jẹ́: 
-<blockquote><tt>$1</tt></blockquote>
-láti inú ìmúṣiṣẹ́ "<tt>$2</tt>".
-Ibùdó-dátà mú àṣìṣe "<tt>$3: $4</tt>" padà.',
+<blockquote><code>$1</code></blockquote>
+láti inú ìmúṣiṣẹ́ "<code>$2</code>".
+Ibùdó-dátà mú àṣìṣe "<samp>$3: $4</samp>" padà.',
 'dberrortextcl' => 'Àṣìṣe ìsoọ̀rọ̀pọ̀ ìtọrọ ibùdó-dátà kan ti ṣẹlẹ̀.
 Ìgbìyànjú ìtọrọ ibùdó-dátà ṣẹlẹ̀ jẹ́: 
 "$1"
@@ -428,10 +428,10 @@ Oníṣe mìíràn le ti paárẹ́.',
 'protectedpagetext' => 'Ojúewé yìí tijẹ́ títìpa. Ẹ kò le se àtúnṣe.',
 'viewsourcetext' => 'Ẹ lè wo ati ẹ lè se àwòkọ ọ̀rọ̀àmì ojúewé yi:',
 'viewyourtext' => "Ẹ le wò bẹ́ẹ̀sìni ẹ le ṣe àwòkọ orísun '''àwọn àtúnṣe yín''' sí ojúewé yìí:",
-'protectedinterface' => 'Ojúewé yìí n pèsè ìfojúkojú ìkọ̀wé fún software, a ti dínà si láti mọ́ gba ìlòkulò ní ààyè.',
+'protectedinterface' => 'Ojúewé yìí únpèsè ìfojúkojú ìkọ̀wé fún atòlànà, ó ti jẹ́ dídáàbòbò láti dínà ìlòkulò.',
 'editinginterface' => "'''Ìkìlọ̀:''' Ẹ ún ṣàtúnṣe ojúewé tó jẹ́ lílò láti pèsè ìkọ ìfojúkojú fún àtòlànà kọ̀mpútà.
-Àwọn ìyípadà sí ojúewé yìí yíò kan ìhànsí ìfojúkojú oníṣe fún àwọn oníṣe míràn.
-Fún ìyédèpadà, ẹ jọ̀wọ́ ẹ lo [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], iṣẹ́-ọwọ́ ìṣọdìbílẹ̀ MediaWiki.",
+Àwọn ìyípadà sí ojúewé yìí yíò kan ìhànsí ìfojúkojú oníṣe fún àwọn oníṣe míràn lọ́rí wiki yìí.
+Láti ṣ'àfikún tàbí ṣ'àyípadà àwọn ìyédèpadà fún gbogbo àwọn wiki, ẹ jọ̀wọ́ ẹ lo [//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net], iṣẹ́-ọwọ́ ìṣọdìbílẹ̀ MediaWiki.",
 'sqlhidden' => '(bíbòmọ́lẹ̀ ìbéèrè SQL)',
 'cascadeprotected' => 'Ojúewé yìí ti jẹ́ dídáàbòbò sí àtùnṣe, nítorípé ó wà nínú {{PLURAL:$1|ojúewé ìsàlẹ̀ yìí, tó jẹ́|àwọn ojúewé ìsàlẹ̀ wọ̀nyí, tí wọ́n jẹ́}} dídáàbòbò pẹ̀lú ìyàn "ajámọ́ra" ní títàn: $2',
 'namespaceprotected' => "A kò gbàyín ní ààyè láti ṣ'àtúnṣe àwọn ojúewé tó wà nínú orúkọàyè '''$1'''.",
@@ -610,7 +610,7 @@ $2
 'changeemail-no-info' => 'Ẹ gbódọ̀ wọlé láti bósí ojúewé yìí tààrà.',
 'changeemail-oldemail' => 'Àdírẹ̀sì E-mail ìsinsìnyí:',
 'changeemail-newemail' => 'Àdírẹ̀sì E-mail tuntun:',
-'changeemail-none' => '(kósí)',
+'changeemail-none' => '(kòsí)',
 'changeemail-submit' => 'Ìyípadà E-mail',
 'changeemail-cancel' => 'Fagilé',
 
@@ -709,7 +709,7 @@ Tó bá jẹ́ pé oníṣe aláìlórúkọ ni yín, tí ẹ sì ri pé wọ́n
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} wá àkọọ́lẹ̀ rẹ̀], tàbí [{{fullurl:{{FULLPAGENAME}}|action=edit}} kí ẹ ṣ\'àtúnṣe ojúewé òún]</span>.',
 'noarticletext-nopermission' => 'Lọ́wọ́lọ́wọ́ kò sí ìkọ̀ nínú ojúewé yìí.
 Ẹ le [[Special:Search/{{PAGENAME}}|wá àkọlé ojúewé yìí]] nínú àwọn ojúewé mìíràn, tàbí
-<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} wá àwọn àkọọ́lẹ̀ tó bámu]</span>.',
+<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} wá àwọn àkọọ́lẹ̀ tó bámu]</span>, sùgbọ́n ẹ kò ní àṣẹ láti ṣ\'ẹ̀dá ojúewé yìí.',
 'userpage-userdoesnotexist' => 'Àkópamọ́ oníṣe "<nowiki>$1</nowiki>" kò tíì jẹ́ fíforúkọsílẹ̀.
 Ẹjọ̀wọ́ ẹ ṣ\'àgbéyẹ̀wò bóyá ẹ fẹ́ dá/ṣàtúnṣe ojúewé yìí.',
 'userpage-userdoesnotexist-view' => 'Àpamọ́ oníṣe "$1" kò jẹ́ fífilórúkọsílẹ̀.',
@@ -719,7 +719,6 @@ Tó bá jẹ́ pé oníṣe aláìlórúkọ ni yín, tí ẹ sì ri pé wọ́n
 * '''Firefox / Safari:''' Ẹ di ''Shift'' mú bí ẹ ṣe ún tẹ ''Reload'', tàbí kí ẹ tẹ ''Ctrl-F5'' tàbí ''Ctrl-R'' (''⌘-R'' lórí Mac)
 * '''Google Chrome:''' Ẹ tẹ ''Ctrl-Shift-R'' (''⌘-Shift-R'' lórí Mac)
 * '''Internet Explorer:''' Ẹ di ''Ctrl'' mú bí ẹ ṣe ún tẹ ''Refresh,'' tàbí kí ẹ tẹ ''Ctrl-F5''
-* '''Konqueror: '''Ẹ tẹ ''Reload'' tàbí kí ẹ tẹ ''F5''
 * '''Opera:''' Ẹ pa cache rẹ́ nínú ''Tools → Preferences''",
 'usercssyoucanpreview' => "'''Ìrànlọ́wọ́:''' Ẹ lo bọ́tìnì \"{{int:showpreview}}\" fún dídánwò CSS tuntun yín kí ẹ tó múupamọ́.",
 'userjsyoucanpreview' => "'''Ìrànlọ́wọ́:''' Ẹ lo bọ́tìnì \"{{int:showpreview}}\" fún dídánwò JavaScript tuntun yín kí ẹ tó múupamọ́.",
@@ -965,10 +964,11 @@ Kò ṣe é bòmọ́lẹ̀.',
 'revdelete-concurrent-change' => 'Àsìṣe ìṣàtúnṣe ohun ọjọ́ọdún $2, $1: Ó dà bíi pé ẹ̀lòmíràn ti yí ibi-ipò rẹ̀ padà lásìkò kannáà tí ẹ̀yin ṣàtúnṣe rẹ̀.
 Ẹ jọ̀wọ́ ẹ yẹ àwọn àkọọ́lẹ̀ wò.',
 'revdelete-only-restricted' => 'Àsìṣe ìbòmọ́lẹ̀ ohun ọjọ́ọdún $2, $1: Ẹ kò le fi àwọn ohun sílẹ̀ láti wò lọ́wọ́ àwọn olùmójútó láì ṣe ìsàyàn ìkan nínú àwọn àṣàyàn ìhàn míràn.',
-'revdelete-reason-dropdown' => '*Àwọn ìdí ìdarẹ́ awọ́pọ̀
+'revdelete-reason-dropdown' => '*Àwọn ìdí tọ́ únsábà fa ìparẹ́ 
 ** Àìtẹ̀lé ẹ̀tọ́àwòkọ
-** Ìwífún taraẹni aláìyẹ
-** Ìwífún tó le fa ẹjọ́',
+** Àwísọ tí kò tọ́ tàbí àròyé àdáni
+** Orúkọ oníṣe tí kò tọ́
+** Àròyé tó le fa ẹjọ́ wá',
 'revdelete-otherreason' => 'Ìdíẹ̀ míràn/àfikún',
 'revdelete-reasonotherlist' => 'Ìdí míràn',
 'revdelete-edit-reasonlist' => 'Àtúnṣe àwọn ìdí ìparẹ́',
@@ -1157,7 +1157,7 @@ Ní báyìí ná ẹ le ṣàwárí lọ́dọ̀ Google.
 'timezoneregion-indian' => 'Òkun India',
 'timezoneregion-pacific' => 'Òkun Pàsífíkì',
 'allowemail' => 'Ìgbàláyè e-mail látọ̀dọ̀ àwọn oníṣe mìíràn',
-'prefs-searchoptions' => 'Àwọn àṣàyàn àwáàrí',
+'prefs-searchoptions' => 'Ṣàwárí',
 'prefs-namespaces' => 'Àwọn orúkọàyè',
 'defaultns' => 'Bíbẹ́ẹ̀kọ́ ṣe àwárí nínú àwọn orúkọàyè yìí:',
 'default' => 'níbẹ̀rẹ̀',
@@ -1325,7 +1325,7 @@ Tí ẹ bá fisílẹ̀ a ó lòó láti tóka iṣẹ́ yín fún yín.',
 'rightslogtext' => 'Èyì ni àkọọ́lẹ̀ kan àwọn àtúnṣe sí àwọn ẹ̀tọ́ oníṣe.',
 'rightslogentry' => 'yí ẹgbẹ́ tí $1 wà kúrò láti $2 sí $3',
 'rightslogentry-autopromote' => 'jẹ́ gbígbéga láláraẹni láti $2 sí $3',
-'rightsnone' => '(kósí)',
+'rightsnone' => '(kòsí)',
 
 # Associated actions - in the sentence "You do not have permission to X"
 'action-read' => 'wo ojúewé yìí',
@@ -1771,9 +1771,9 @@ Tó bá jẹ́ jíjọ̀ gẹ́gẹ́bí oníṣe, àwọn fáìlì tí oníṣe
 
 'disambiguations' => 'Àwọn ojúewé tó jápọ̀ mọ́ àwọn ojúewé ìṣeojútùú',
 'disambiguationspage' => 'Template:ojútùú',
-'disambiguations-text' => "Àwọn ojúewé ìsàlẹ̀ yìí jápọ̀ sí '''ojúewé ìṣeojúùtú'''.
-Ó yẹ kí wọn ó jápọ̀ sí oríọ̀rọ̀ tó yẹ wọ́n.<br />
-Ojúewé kan jẹ́ ṣíṣe bíi ojúewé ìṣeojúùtú tí ó bá lo àdàkọ tó jápọ̀ láti [[MediaWiki:Disambiguationspage]]",
+'disambiguations-text' => "Àwọn ojúewé ìsàlẹ̀ yìí, ó kéréjù ní àjápọ̀ kan sí '''ojúewé ìṣeojúùtú'''.
+Ó yẹ kí wọn ó jápọ̀ sí ojúewé tó yẹ wọ́n.<br />
+Ojúewé kan jẹ́ ṣíṣe bíi ojúewé ìṣeojúùtú tí ó bá lo àdàkọ tó jápọ̀ láti [[MediaWiki:Disambiguationspage]].",
 
 'doubleredirects' => 'Àwọn àtúnjúwe ẹ̀mẹjì',
 'double-redirect-fixed-move' => '[[$1]] ti yípò padà.
@@ -2288,6 +2288,14 @@ $1',
 'ipbexpiry' => 'Ìwásópin:',
 'ipbreason' => 'Ìdíẹ̀:',
 'ipbreasonotherlist' => 'Ìdí mìíràn',
+'ipbreason-dropdown' => '*Àwọn ìdí fún ìdínà
+** Àròyé tí kò jẹ́ òtítọ́
+** Yíyọ àkóónú kúrò nínú ojúewé
+** Kíkọ àjápọ̀ sí àwọn ibi tí kò ní ìbámu mọ́ ojúewé
+** Ìkọkúkọ sínú ojúewé
+** Iwùwà ìpayà sí ẹlòmíràn
+** Ìlòkulò ọ̀pọ̀lọpọ̀ àpamọ́
+** Lílo orúkọ oníṣe tí kò tọ́',
 'ipb-hardblock' => 'Ìdínà àwọn oníṣe agbàwọlé láti ṣàtúnṣe láti ibi àdírẹ́ẹ̀sì IP yìí',
 'ipbcreateaccount' => 'Ìdínà dídá àpamọ́',
 'ipbemailban' => 'Ìdínà oníṣe láti fi e-mail ránṣẹ́',
@@ -2328,6 +2336,7 @@ $1',
 'blocklist-timestamp' => 'Àmì àsìkò',
 'blocklist-target' => 'Afojúsùn',
 'blocklist-expiry' => 'Ìparí',
+'blocklist-by' => 'Olùmójútó tó ṣe ìdínà',
 'blocklist-reason' => 'Ìdíẹ̀',
 'ipblocklist-submit' => 'Ṣàwárí',
 'ipblocklist-localblock' => 'Ìdínà abẹ́lé',
@@ -2618,11 +2627,11 @@ kò le yípò ojúewé padà sí ara rẹ̀.',
 
 # Info page
 'pageinfo-title' => 'Àròyé fún "$1"',
-'pageinfo-header-edits' => 'Ã\80wá»\8dn àtúnṣe',
+'pageinfo-header-edits' => 'Ã\8ctàn àtúnṣe',
 'pageinfo-views' => 'Iye àwọn ìwò',
-'pageinfo-watchers' => 'Iye àwọn aláàbójúwò',
-'pageinfo-edits' => 'Iye àwọn àtúnṣe',
-'pageinfo-authors' => 'Iye àwọn olùdá ọ̀tọ̀ọ̀tọ̀',
+'pageinfo-watchers' => 'Iye àwọn olùṣọ́ ojúewé',
+'pageinfo-edits' => 'Àpapọ̀ iye àwọn àtúnṣe',
+'pageinfo-authors' => 'Àpapọ̀ iye àwọn olùdá ọ̀tọ̀ọ̀tọ̀',
 
 # Patrolling
 'markaspatrolleddiff' => 'Ìṣààmí sí bíi sísọ́',
@@ -2647,6 +2656,7 @@ kò le yípò ojúewé padà sí ara rẹ̀.',
 'file-nohires' => 'Kò sí ìgbéhàn gíga jù báun lọ.',
 'svg-long-desc' => 'faili SVG, pẹ̀lú $1 × $2 pixels, ìtòbi faili: $3',
 'show-big-image' => 'Pẹ̀lú ìgbéhàn gíga',
+'show-big-image-other' => '{{PLURAL:$2|Ìgbéhàn|Àwọn ìgbéhàn}} míràn: $1.',
 'show-big-image-size' => '$1 × $2 pixels',
 'file-info-gif-looped' => 'lílọ́po',
 'file-info-png-looped' => 'lílọ́po',
@@ -2876,6 +2886,7 @@ Tóbájẹ́pé fáìlì ọ̀hún ti jẹ́ títúnṣe sí bóṣewà ní bẹ
 # Special:Version
 'version' => 'Àtẹ̀jáde',
 'version-specialpages' => 'Àwọn ojúewé pàtàkì',
+'version-variables' => 'Ayàtọ̀',
 'version-skins' => 'Skin (Àwọ̀)',
 'version-other' => 'Òmíràn',
 'version-version' => '(Àtẹ̀jáde $1)',
@@ -2900,7 +2911,7 @@ Tóbájẹ́pé fáìlì ọ̀hún ti jẹ́ títúnṣe sí bóṣewà ní bẹ
 'specialpages' => 'Àwọn ojúewé pàtàkì',
 'specialpages-group-maintenance' => 'Àwọn ìjábọ̀ ìtọ́jú',
 'specialpages-group-other' => 'Àwọn ojúewé pàtàkì míràn',
-'specialpages-group-login' => 'Ìwọlé / ìforúkọsílẹ́',
+'specialpages-group-login' => 'Ìwọlé / ìdá àpamọ́',
 'specialpages-group-users' => 'Àwọn oníṣe àti àwọn ẹ̀tọ́ wọn',
 'specialpages-group-pages' => 'Àkójọ àwọn ojúewé',
 'specialpages-group-pagetools' => 'Àwọn irinṣẹ́ ojúewé',
index b067087..d5e806d 100644 (file)
@@ -630,7 +630,7 @@ $1',
 'unexpected' => '非正常值:“$1”=“$2”。',
 'formerror' => '错误:无法提交表单',
 'badarticleerror' => '无法在此页进行该操作。',
-'cannotdelete' => '无法删除页面或图像 "$1"
+'cannotdelete' => '无法删除页面或图像“$1”
 它可能已被其他人删除了。',
 'cannotdelete-title' => '无法删除“$1”',
 'delete-hook-aborted' => '删除被扩展钩子取消。钩子并没有给出解释。',
@@ -907,7 +907,6 @@ $2
 * '''火狐(Firefox)/Safari:'''按住“Shift”,同时单击“刷新”,或按“Ctrl-F5”或“Ctrl-R”(Mac为“⌘-R”)
 * '''谷歌浏览器(Google Chrome):'''按“Ctrl-Shift-R”(Mac为“⌘-Shift-R”)
 * '''Internet Explorer:'''按住“Ctrl”,同时单击“刷新”,或按“Ctrl-F5”
-* '''Konqueror:'''点击“刷新”或按“F5”
 * '''Opera:'''在“工具→首选项”中清除缓存",
 'usercssyoucanpreview' => "'''提示:''' 在保存前请用“{{int:showpreview}}”按钮来测试您新的 CSS 。",
 'userjsyoucanpreview' => "'''提示:''' 在保存前请用“{{int:showpreview}}”按钮来测试您新的 JavaScript 。",
@@ -1137,7 +1136,8 @@ $1",
 'revdelete-only-restricted' => '在隐藏$1 $2的项目时发生错误:您不能在选择了另一可见性选项后废止管理员查看该项目。',
 'revdelete-reason-dropdown' => '*常用删除理由
 ** 侵犯版权
-** 不合适的个人资料',
+** 不合适的个人资料
+** 潜在毁谤性信息',
 'revdelete-otherreason' => '其他/附加原因:',
 'revdelete-reasonotherlist' => '其他原因',
 'revdelete-edit-reasonlist' => '编辑删除埋由',
@@ -1729,7 +1729,7 @@ $1',
 'backend-fail-internal' => '存储后端“$1”发生了一个未知错误。',
 'backend-fail-contenttype' => '无法判断文件的内容类型来储存于“$1”。',
 'backend-fail-batchsize' => '存储后端被给予了一批$1个文件{{PLURAL:$1|操作|操作}};限值为$2个{{PLURAL:$2|操作|操作}}。',
-'backend-fail-usable' => '权限不足或缺少目录/贮存器,无法写入文件$1。',
+'backend-fail-usable' => '权限不足或缺少目录/贮存器,无法读取或写入文件“$1”。',
 
 # File journal errors
 'filejournal-fail-dbconnect' => '无法连接到后端存储的日志数据库“$1”。',
@@ -1962,6 +1962,7 @@ $1',
 # Miscellaneous special pages
 'nbytes' => '$1字节',
 'ncategories' => '$1个分类',
+'ninterwikis' => '$1个跨语言链接',
 'nlinks' => '$1个链接',
 'nmembers' => '$1个成员',
 'nrevisions' => '$1个版本',
@@ -1990,6 +1991,7 @@ $1',
 'mostlinkedtemplates' => '最多链接模板',
 'mostcategories' => '最多分类页面',
 'mostimages' => '最多链接文件',
+'mostinterwikis' => '跨语言链接最多的页面',
 'mostrevisions' => '最多版本页面',
 'prefixindex' => '所有有前缀的页面',
 'prefixindex-namespace' => '所有有前缀的页面($1名字空间)',
@@ -2134,6 +2136,8 @@ $1',
 'mailnologin' => '无电邮地址',
 'mailnologintext' => '你必须[[Special:UserLogin|登录]]并在你的[[Special:Preferences|系统设置]]中拥有有效的电子邮件地址才能向其他用户发送电子邮件。',
 'emailuser' => '电邮联系',
+'emailuser-title-target' => '电邮联系该{{GENDER:$1|用户}}',
+'emailuser-title-notarget' => '电邮联系',
 'emailpage' => '电邮联系',
 'emailpagetext' => '你可以使用下面的表格向该用户发送电子邮件信息。你在[[Special:Preferences|你的系统设置]]中输入的电子邮件地址将显示为邮件的“发件人”地址,所以该用户将可以直接回复你。',
 'usermailererror' => 'Mail 对象返回错误:',
@@ -2783,6 +2787,8 @@ $1被封禁的理由是:“$2”',
 'import-error-special' => '页面“$1”未导入,因为它需要使用一个不能创建页面的特殊名字空间。',
 'import-error-invalid' => '页面“$1”未能导入,因为它的名字无效。',
 'import-options-wrong' => '{{PLURAL:$2|选项}}出错:<nowiki>$1</nowiki>',
+'import-rootpage-invalid' => '根页面的标题无效。',
+'import-rootpage-nosubpage' => '名字空间为“$1”的根页面不允许子页面。',
 
 # Import log
 'importlogpage' => '导入日志',
@@ -2930,11 +2936,34 @@ $1被封禁的理由是:“$2”',
 
 # Info page
 'pageinfo-title' => '"$1" 的信息',
-'pageinfo-header-edits' => '编辑',
+'pageinfo-header-basic' => '基本信息',
+'pageinfo-header-edits' => '编辑历史',
+'pageinfo-header-restrictions' => '页面保护',
+'pageinfo-header-properties' => '页面属性',
+'pageinfo-display-title' => '显示的标题',
+'pageinfo-default-sort' => '默认排序键',
+'pageinfo-length' => '页面长度(字节)',
+'pageinfo-article-id' => '页面ID',
+'pageinfo-robot-policy' => '搜索引擎状态',
+'pageinfo-robot-index' => '可索引',
+'pageinfo-robot-noindex' => '不可索引',
 'pageinfo-views' => '视图的数量',
-'pageinfo-watchers' => '监视者数目',
-'pageinfo-edits' => '编辑数量',
-'pageinfo-authors' => '作者数量',
+'pageinfo-watchers' => '页面监视者人数',
+'pageinfo-redirects-name' => '重定向到本页',
+'pageinfo-subpages-name' => '本页的子页面',
+'pageinfo-subpages-value' => '$1 ($2个重定向;$3个非重定向)',
+'pageinfo-firstuser' => '页面创建者',
+'pageinfo-firsttime' => '页面创建日期',
+'pageinfo-lastuser' => '最近的编者',
+'pageinfo-lasttime' => '最后编辑的日期',
+'pageinfo-edits' => '总编辑次数',
+'pageinfo-authors' => '不同编者总计',
+'pageinfo-recent-edits' => '最近的编辑数 ($1天内)',
+'pageinfo-recent-authors' => '最近的不同编者数',
+'pageinfo-restriction' => '页面保护 ({{lcfirst:$1}})',
+'pageinfo-magic-words' => '魔术字 ($1)',
+'pageinfo-hidden-categories' => '隐藏分类 ($1)',
+'pageinfo-templates' => '使用的模板 ($1)',
 
 # Skin names
 'skinname-standard' => '标准',
@@ -2977,7 +3006,7 @@ $1',
 # Media information
 'mediawarning' => "'''警告''':该文件类型可能包含恶意代码。
 运行它可能对您的系统带来危险。",
-'imagemaxsize' => "图像大小限制:<br />''(文件说明页面)''",
+'imagemaxsize' => '图像大小限制:<br /><u>(文件描述页)</u>',
 'thumbsize' => '缩略图大小:',
 'widthheightpage' => '$1×$2,$3页',
 'file-info' => '文件大小:$1,MIME类型:$2',
@@ -2985,6 +3014,7 @@ $1',
 'file-info-size-pages' => '$1×$2像素,文件大小:$3,MIME类型:$4,$5页',
 'file-nohires' => '没有更高的分辨率。',
 'svg-long-desc' => 'SVG文件,图像大小:$1 × $2像素,文件大小:$3',
+'svg-long-desc-animated' => '动画SVG文件,图像大小为$1 × $2像素,文件大小:$3',
 'show-big-image' => '完全分辨率',
 'show-big-image-preview' => '本预览的大小:$1。',
 'show-big-image-other' => '其他{{PLURAL:$2|分辨率}}:$1。',
@@ -2994,6 +3024,8 @@ $1',
 'file-info-png-looped' => '循环',
 'file-info-png-repeat' => '已播放$1遍',
 'file-info-png-frames' => '$1帧',
+'file-no-thumb-animation' => "'''注意:由于技术限制,该文件的缩略图无法进行动画处理。'''",
+'file-no-thumb-animation-gif' => "'''注意:由于技术限制,高分辨率GIF图像的缩略图无法进行动画处理。'''",
 
 # Special:NewFiles
 'newimages' => '新文件库',
index 27f19e8..62f778f 100644 (file)
@@ -569,7 +569,7 @@ $1',
 'unexpected' => '不正常值:"$1"="$2"。',
 'formerror' => '錯誤:無法提交表單',
 'badarticleerror' => '無法在此頁進行該操作。',
-'cannotdelete' => '無法刪除頁面或圖片"$1"
+'cannotdelete' => '無法刪除頁面或圖片“$1”
 它可能已經被其他人刪除了。',
 'cannotdelete-title' => '無法刪除“$1”',
 'delete-hook-aborted' => '刪除被勾點中止。
@@ -589,8 +589,11 @@ $1',
 'protectedpagetext' => '該頁面已被保護以防止編輯。',
 'viewsourcetext' => '{{GENDER:|你|妳|你}}可以檢視並複製本頁面的原始碼。',
 'viewyourtext' => "您可以查看並複製'''您對此頁面作出編輯後'''的源代碼:",
-'protectedinterface' => '該頁提供了軟體的介面文字,它已被保護以防止隨意的修改。',
-'editinginterface' => "'''警告:''' 您正在編輯的頁面是用於提供軟體的介面文字。改變此頁將影響其他用戶的介面外觀。如要翻譯,請考慮使用[//translatewiki.net/wiki/Main_Page?setlang=zh-hant translatewiki.net],一個用來為MediaWiki軟件本地化的計劃。",
+'protectedinterface' => '該頁提供此wiki軟體的介面文字,它已被保護以防止惡意修改。
+如欲修改所有wiki的翻譯,請到[//translatewiki.net/ translatewiki.net]上的MediaWiki本地化計畫。',
+'editinginterface' => "'''警告:''' 您正在編輯的頁面是用於提供軟體的介面文字。
+改變此頁將影響其他在此wiki上的用戶介面外觀。
+如欲修改所有wiki的翻譯,請到[//translatewiki.net/ translatewiki.net]上的MediaWiki本地化計畫。",
 'sqlhidden' => '(隱藏SQL查詢)',
 'cascadeprotected' => '這個頁面已經被保護,因為這個頁面被以下已標註"聯鎖保護"的{{PLURAL:$1|一個|多個}}被保護頁面包含:
 $2',
@@ -852,8 +855,8 @@ $2
 'noarticletext' => '此頁目前沒有內容,您可以在其它頁[[Special:Search/{{PAGENAME}}|搜索此頁標題]],
 <span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索有關日誌],
 或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 編輯此頁]</span>。',
-'noarticletext-nopermission' => '此頁目前沒有內容,您可以在其它頁[[Special:Search/{{PAGENAME}}|搜索此頁標題]],
\88\96<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} æ\90\9cç´¢æ\9c\89é\97\9cæ\97¥èª\8c]</span>。',
+'noarticletext-nopermission' => '此頁目前沒有內容
\82¨å\8f¯ä»¥å\9c¨å\85¶å®\83é \81[[Special:Search/{{PAGENAME}}|æ\90\9cå°\8bæ­¤é \81æ¨\99é¡\8c]]ï¼\8cæ\88\96<span class="plainlinks">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} æ\90\9cå°\8bæ\9c\89é\97\9cæ\97¥èª\8c]</span>ï¼\8cä½\86æ\82¨æ²\92æ\9c\89æ¬\8aé\99\90建ç«\8bæ­¤é \81。',
 'missing-revision' => '「{{PAGENAME}}」的#$1修訂版本不存在。
 
 這通常是因為過時的頁面歷史鏈接被刪除。
@@ -1102,7 +1105,9 @@ $1",
 'revdelete-only-restricted' => '在隱藏$1 $2的項目時發生錯誤:您不能在選擇了另一可見性選項後廢止管理員查看該項目。',
 'revdelete-reason-dropdown' => '*常用刪除理由
 ** 侵犯版權
-** 不合適的個人資料',
+** 不合適的評論或個人資料
+** 不當的用戶名
+** 潛在誹謗的資料',
 'revdelete-otherreason' => '其它/附加的理由:',
 'revdelete-reasonotherlist' => '其它理由',
 'revdelete-edit-reasonlist' => '編輯刪除埋由',
@@ -1295,7 +1300,7 @@ $1",
 'timezoneregion-indian' => '印度洋',
 'timezoneregion-pacific' => '太平洋',
 'allowemail' => '接受來自其他用戶的郵件',
-'prefs-searchoptions' => '搜尋選項',
+'prefs-searchoptions' => '搜尋',
 'prefs-namespaces' => '頁面名稱空間',
 'defaultns' => '否則在這些名字空間搜尋:',
 'default' => '預設',
@@ -1699,7 +1704,7 @@ $1',
 'backend-fail-internal' => '存儲後方“$1”發生了一個未知錯誤。',
 'backend-fail-contenttype' => '無法確定檔案的內容類型以存儲於“$1”。',
 'backend-fail-batchsize' => '存儲後端被給予了$1次檔𣗈 {{PLURAL:$1|操作|操作}} ;限制是$2次{{PLURAL:$2|操作|操作}}。',
-'backend-fail-usable' => '由於沒有足夠的權限或缺少路徑/容器,所以無法寫å\85¥æª\94ð£\97\88 $1 ã\80\82',
+'backend-fail-usable' => '由於沒有足夠的權限或缺少路徑/容器,所以無法è®\80å\8f\96æ\88\96寫å\85¥æª\94æ¡\88 $1 ã\80\82',
 
 # File journal errors
 'filejournal-fail-dbconnect' => '無法連接到後端存儲的日誌資料庫" $1 "。',
@@ -2965,7 +2970,7 @@ $1被封禁的理由是“$2”',
 'pageinfo-authors' => '作者總數',
 'pageinfo-recent-edits' => '最近編輯次數 (過去 $1 內)',
 'pageinfo-recent-authors' => '最近作者數目',
-'pageinfo-restriction' => '保護頁面 ( <code>{{lcfirst:$1}}</code> )',
+'pageinfo-restriction' => '保護頁面 ( {{lcfirst:$1}} )',
 'pageinfo-magic-words' => '魔術{{PLURAL:$1|字|字}} ( $1 )',
 'pageinfo-hidden-categories' => '隱藏{{PLURAL:$1|分類|分類}} ( $1 )',
 'pageinfo-templates' => '被引用的{{PLURAL:$1|模版|模版}} ( $1 )',
index 69d1131..c00d7a6 100644 (file)
@@ -482,19 +482,11 @@ abstract class Maintenance {
                        $this->error( 'Cannot get command line arguments, register_argc_argv is set to false', true );
                }
 
-               if ( version_compare( phpversion(), '5.2.4' ) >= 0 ) {
-                       // Send PHP warnings and errors to stderr instead of stdout.
-                       // This aids in diagnosing problems, while keeping messages
-                       // out of redirected output.
-                       if ( ini_get( 'display_errors' ) ) {
-                               ini_set( 'display_errors', 'stderr' );
-                       }
-
-                       // Don't touch the setting on earlier versions of PHP,
-                       // as setting it would disable output if you'd wanted it.
-
-                       // Note that exceptions are also sent to stderr when
-                       // command-line mode is on, regardless of PHP version.
+               // Send PHP warnings and errors to stderr instead of stdout.
+               // This aids in diagnosing problems, while keeping messages
+               // out of redirected output.
+               if ( ini_get( 'display_errors' ) ) {
+                       ini_set( 'display_errors', 'stderr' );
                }
 
                $this->loadParamsAndArgs();
@@ -1068,7 +1060,7 @@ abstract class Maintenance {
         */
        private function lockSearchindex( &$db ) {
                $write = array( 'searchindex' );
-               $read = array( 'page', 'revision', 'text', 'interwiki', 'l10n_cache' );
+               $read = array( 'page', 'revision', 'text', 'interwiki', 'l10n_cache', 'user' );
                $db->lockTables( $read, $write, __CLASS__ . '::' . __METHOD__ );
        }
 
diff --git a/maintenance/archives/patch-cat_hidden.sql b/maintenance/archives/patch-cat_hidden.sql
new file mode 100644 (file)
index 0000000..933188c
--- /dev/null
@@ -0,0 +1,3 @@
+-- cat_hidden is no longer used, delete it
+
+ALTER TABLE /*$wgDBprefix*/category DROP COLUMN cat_hidden;
index 9901b37..c198e0f 100644 (file)
@@ -53,11 +53,11 @@ abstract class Benchmarker extends Maintenance {
                        }
 
                        $bench_number++;
-                       $start = wfTime();
+                       $start = microtime( true );
                        for( $i=0; $i<$count; $i++ ) {
                                call_user_func_array( $bench['function'], $bench['args'] );
                        }
-                       $delta = wfTime() - $start;
+                       $delta = microtime( true ) - $start;
 
                        // function passed as a callback
                        if( is_array( $bench['function'] ) ) {
index a8e4627..d974149 100644 (file)
@@ -46,24 +46,24 @@ class BenchmarkDeleteTruncate extends Benchmarker {
 
                $this->insertData( $dbw );
 
-               $start = wfTime();
+               $start = microtime( true );
 
                $this->delete( $dbw );
 
-               $end = wfTime();
+               $end = microtime( true );
 
-               echo "Delete: " . $end - $start;
+               echo "Delete: " . sprintf( "%6.3fms", ( $end - $start ) * 1000 );
                echo "\r\n";
 
                $this->insertData( $dbw );
 
-               $start = wfTime();
+               $start = microtime( true );
 
                $this->truncate( $dbw );
 
-               $end = wfTime();
+               $end = microtime( true );
 
-               echo "Truncate: " . $end - $start;
+               echo "Truncate: " . sprintf( "%6.3fms", ( $end - $start ) * 1000 );
                echo "\r\n";
 
                $dbw->dropTable( 'test' );
index 9d11601..fdb016f 100644 (file)
@@ -65,14 +65,14 @@ class BenchmarkHooks extends Benchmarker {
         * @return string
         */
        private function benchHooks( $trials = 10 ) {
-               $start = wfTime();
+               $start = microtime( true );
                for ( $i = 0; $i < $trials; $i++ ) {
                        wfRunHooks( 'Test' );
                }
-               $delta = wfTime() - $start;
+               $delta = microtime( true ) - $start;
                $pertrial = $delta / $trials;
-               return sprintf( "Took %6.2fs",
-                       $pertrial );
+               return sprintf( "Took %6.3fms",
+                       $pertrial * 1000 );
        }
 
        /**
index 7ef2116..ec686b2 100644 (file)
@@ -62,11 +62,11 @@ class BenchmarkPurge extends Benchmarker {
         * @return string
         */
        private function benchSquid( $urls, $trials = 1 ) {
-               $start = wfTime();
+               $start = microtime( true );
                for ( $i = 0; $i < $trials; $i++ ) {
                        SquidUpdate::purge( $urls );
                }
-               $delta = wfTime() - $start;
+               $delta = microtime( true ) - $start;
                $pertrial = $delta / $trials;
                $pertitle = $pertrial / count( $urls );
                return sprintf( "%4d titles in %6.2fms (%6.2fms each)",
index 95bb1fa..ac96f45 100644 (file)
@@ -1,7 +1,25 @@
 <?php
-
-# Router for the php cli-server built-in webserver
-# http://ca2.php.net/manual/en/features.commandline.webserver.php
+/**
+ * Router for the php cli-server built-in webserver.
+ * http://www.php.net/manual/en/features.commandline.webserver.php
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
 
 if ( php_sapi_name() != 'cli-server' ) {
        die( "This script can only be run by php's cli-server sapi." );
index 501bcfc..d98cfe3 100644 (file)
@@ -40,7 +40,8 @@ class TestFileOpPerformance extends Maintenance {
                $this->addOption( 'b2', 'Backend 2', false, true );
                $this->addOption( 'srcdir', 'File source directory', true, true );
                $this->addOption( 'maxfiles', 'Max files', false, true );
-               $this->addOption( 'quick', 'Avoid operation pre-checks' );
+               $this->addOption( 'quick', 'Avoid operation pre-checks (use doQuickOperations())' );
+               $this->addOption( 'parallelize', '"parallelize" flag for doOperations()', false, true );
        }
 
        public function execute() {
@@ -95,8 +96,13 @@ class TestFileOpPerformance extends Maintenance {
 
                $method = $this->hasOption( 'quick' ) ? 'doQuickOperations' : 'doOperations';
 
+               $opts = array( 'force' => 1 );
+               if ( $this->hasOption( 'parallelize' ) ) {
+                       $opts['parallelize'] = ( $this->getOption( 'parallelize' ) === 'true' );
+               }
+
                $start = microtime( true );
-               $status = $backend->$method( $ops1, array( 'force' => 1 ) );
+               $status = $backend->$method( $ops1, $opts );
                $e = ( microtime( true ) - $start ) * 1000;
                if ( $status->getErrorsArray() ) {
                        print_r( $status->getErrorsArray() );
@@ -105,7 +111,7 @@ class TestFileOpPerformance extends Maintenance {
                $this->output( $backend->getName() . ": Stored " . count( $ops1 ) . " files in $e ms.\n" );
 
                $start = microtime( true );
-               $backend->$method( $ops2, array( 'force' => 1 ) );
+               $backend->$method( $ops2, $opts );
                $e = ( microtime( true ) - $start ) * 1000;
                if ( $status->getErrorsArray() ) {
                        print_r( $status->getErrorsArray() );
@@ -114,7 +120,7 @@ class TestFileOpPerformance extends Maintenance {
                $this->output( $backend->getName() . ": Copied " . count( $ops2 ) . " files in $e ms.\n" );
 
                $start = microtime( true );
-               $backend->$method( $ops3, array( 'force' => 1 ) );
+               $backend->$method( $ops3, $opts );
                $e = ( microtime( true ) - $start ) * 1000;
                if ( $status->getErrorsArray() ) {
                        print_r( $status->getErrorsArray() );
@@ -123,7 +129,7 @@ class TestFileOpPerformance extends Maintenance {
                $this->output( $backend->getName() . ": Moved " . count( $ops3 ) . " files in $e ms.\n" );
 
                $start = microtime( true );
-               $backend->$method( $ops4, array( 'force' => 1 ) );
+               $backend->$method( $ops4, $opts );
                $e = ( microtime( true ) - $start ) * 1000;
                if ( $status->getErrorsArray() ) {
                        print_r( $status->getErrorsArray() );
@@ -132,7 +138,7 @@ class TestFileOpPerformance extends Maintenance {
                $this->output( $backend->getName() . ": Deleted " . count( $ops4 ) . " files in $e ms.\n" );
 
                $start = microtime( true );
-               $backend->$method( $ops5, array( 'force' => 1 ) );
+               $backend->$method( $ops5, $opts );
                $e = ( microtime( true ) - $start ) * 1000;
                if ( $status->getErrorsArray() ) {
                        print_r( $status->getErrorsArray() );
index b537f9b..8caf867 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup MaintenanceLanguage
  */
 
 require_once( __DIR__ . '/../Maintenance.php' );
 
+/**
+ * Maintenance script that gets all messages as defined by the
+ * English language file.
+ *
+ * @ingroup MaintenanceLanguage
+ */
 class AllTrans extends Maintenance {
        public function __construct() {
                parent::__construct();
index 1888c4c..6abf7b4 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * Script to print out duplicates in message array
+ * Print out duplicates in message array
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index d37d22e..5058a54 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup MaintenanceLanguage
  */
 
 require_once( __DIR__ . '/../Maintenance.php' );
 
+/**
+ * Maintenance script that counts how many messages we have defined
+ * for each language.
+ *
+ * @ingroup MaintenanceLanguage
+ */
 class CountMessages extends Maintenance {
        public function __construct() {
                parent::__construct();
index 505cb57..ed12b78 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup MaintenanceLanguage
  */
 
 require_once( __DIR__ . '/../Maintenance.php' );
 
+/**
+ * Maintenance script that tests various language time and date functions.
+ *
+ * @ingroup MaintenanceLanguage
+ */
 class DateFormats extends Maintenance {
 
        private $ts = '20010115123456';
index 7e729b4..9d4cbe7 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Check digit transformation
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup MaintenanceLanguage
  */
 
 require_once( __DIR__ . '/../Maintenance.php' );
 
+/**
+ * Maintenance script that check digit transformation.
+ *
+ * @ingroup MaintenanceLanguage
+ */
 class Digit2Html extends Maintenance {
 
        # A list of unicode numerals is available at:
index 9292ce3..0292d31 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup MaintenanceLanguage
- * @todo Make this more useful, right now just dumps $wgContentLang
+ * @todo Make this more useful, right now just dumps $wgContLang
  */
 
 require_once( __DIR__ . '/../Maintenance.php' );
 
+/**
+ * Maintenance script that dumps an entire language, using the keys from English.
+ *
+ * @ingroup MaintenanceLanguage
+ */
 class DumpMessages extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->mDescription = "Dump an entire language, using the keys from English";
        }
-       
+
        public function execute() {
                global $wgVersion;
 
index c4a8e54..e34d9a1 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
- * @ingroup Maintenance
  * @file
+ * @ingroup MaintenanceLanguage
  */
 
 require_once( __DIR__ .'/../Maintenance.php' );
 
 /**
  * Generate first letter data files for Collation.php
+ *
+ * @ingroup MaintenanceLanguage
  */
 class GenerateCollationData extends Maintenance {
        /** The directory with source data files in it */
index f3cc568..54dfa39 100644 (file)
@@ -28,6 +28,8 @@ require_once( __DIR__ . '/../../includes/normal/UtfNormalUtil.php' );
 /**
  * Generates normalizer data files for Arabic and Malayalam.
  * For NFC see includes/normal.
+ *
+ * @ingroup MaintenanceLanguage
  */
 class GenerateNormalizerData extends Maintenance {
        var $dataFile;
index 2323638..ad29efb 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 /**
- * Dumb program that tries to get the memory usage
- * for each language file.
+ * Dumb program that tries to get the memory usage for each language file.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -18,6 +17,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup MaintenanceLanguage
  */
 
 require_once( __DIR__ . '/../Maintenance.php' );
 require_once( __DIR__ . '/languages.inc' );
 
+/**
+ * Maintenance script that tries to get the memory usage for each language file.
+ *
+ * @ingroup MaintenanceLanguage
+ */
 class LangMemUsage extends Maintenance {
 
        public function __construct() {
@@ -41,7 +46,7 @@ class LangMemUsage extends Maintenance {
                $memlast = $memstart = memory_get_usage();
 
                $this->output( "Base memory usage: $memstart\n" );
-       
+
                foreach ( $langtool->getLanguages() as $langcode ) {
                        Language::factory( $langcode );
                        $memstep = memory_get_usage();
index 689c930..f45525c 100644 (file)
@@ -39,6 +39,8 @@ LockServerDaemon::init(
 
 /**
  * Simple lock server daemon that accepts lock/unlock requests
+ *
+ * @ingroup LockManager Maintenance
  */
 class LockServerDaemon {
        /** @var resource */
index e222314..a46c5e1 100644 (file)
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance
  */
 
 /**
  * When using shared tables that are referenced by foreign keys on local
  * tables you have to change the constraints on local tables.
- * 
+ *
  * The shared tables have to have GRANT REFERENCE on shared tables to local schema
  * i.e.: GRANT REFERENCES (user_id) ON mwuser TO hubclient;
  */
@@ -40,12 +41,12 @@ class AlterSharedConstraints extends Maintenance {
 
        public function execute() {
                global $wgSharedDB, $wgSharedTables, $wgSharedPrefix, $wgDBprefix;
-               
+
                if ( $wgSharedDB == null ) {
                        $this->output( "Database sharing is not enabled\n" );
                        return;
                }
-               
+
                $dbw = wfGetDB( DB_MASTER );
                foreach ( $wgSharedTables as $table ) {
                        $stable = $dbw->tableNameInternal($table);
@@ -54,7 +55,7 @@ class AlterSharedConstraints extends Maintenance {
                        } else {
                                $ltable = "{$wgDBprefix}{$stable}" ;
                        }
-                       
+
                        $result = $dbw->query( "SELECT uc.constraint_name, uc.table_name, ucc.column_name, uccpk.table_name pk_table_name, uccpk.column_name pk_column_name, uc.delete_rule, uc.deferrable, uc.deferred
                                          FROM user_constraints uc, user_cons_columns ucc, user_cons_columns uccpk
                                         WHERE uc.constraint_type = 'R'
@@ -62,9 +63,9 @@ class AlterSharedConstraints extends Maintenance {
                                           AND uccpk.constraint_name = uc.r_constraint_name
                                           AND uccpk.table_name = '$ltable'" );
                        while (($row = $result->fetchRow()) !== false) {
-                               
+
                                        $this->output( "Altering {$row['constraint_name']} ...");
-                                       
+
                                        try {
                                                $dbw->query( "ALTER TABLE {$row['table_name']} DROP CONSTRAINT {$wgDBprefix}{$row['constraint_name']}" );
                                        } catch (DBQueryError $exdb) {
@@ -72,13 +73,13 @@ class AlterSharedConstraints extends Maintenance {
                                                        throw $exdb;
                                                }
                                        }
-                                       
+
                                        $deleteRule = $row['delete_rule'] == 'NO ACTION' ? '' : "ON DELETE {$row['delete_rule']}";
-                                       $dbw->query( "ALTER TABLE {$row['table_name']} ADD CONSTRAINT {$wgDBprefix}{$row['constraint_name']} 
-                                               FOREIGN KEY ({$row['column_name']}) 
-                                               REFERENCES {$wgSharedDB}.$stable({$row['pk_column_name']}) 
+                                       $dbw->query( "ALTER TABLE {$row['table_name']} ADD CONSTRAINT {$wgDBprefix}{$row['constraint_name']}
+                                               FOREIGN KEY ({$row['column_name']})
+                                               REFERENCES {$wgSharedDB}.$stable({$row['pk_column_name']})
                                                {$deleteRule} {$row['deferrable']} INITIALLY {$row['deferred']}" );
-                                       
+
                                        $this->output( "DONE\n" );
                        }
                }
diff --git a/maintenance/purgeStaleMemcachedText.php b/maintenance/purgeStaleMemcachedText.php
deleted file mode 100644 (file)
index 225400f..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-/**
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Maintenance Memcached
- */
-
-require_once( __DIR__ . '/commandLine.inc' );
-
-function purgeStaleMemcachedText() {
-       global $wgMemc, $wgDBname;
-       $db = wfGetDB( DB_MASTER );
-       $maxTextId = $db->selectField( 'text', 'max(old_id)' );
-       $latestReplicatedTextId = $db->selectField( array( 'recentchanges', 'revision' ), 'rev_text_id', 
-               array( 'rev_id = rc_this_oldid', "rc_timestamp < '20101225183000'"),  'purgeStaleMemcachedText', 
-               array( 'ORDER BY' => 'rc_timestamp DESC' ) );
-       $latestReplicatedTextId -= 100; # A bit of paranoia
-
-       echo "Going to purge text entries from $latestReplicatedTextId to $maxTextId in $wgDBname\n";
-
-       for ( $i = $latestReplicatedTextId; $i < $maxTextId; $i++ ) {
-               $key = wfMemcKey( 'revisiontext', 'textid', $i );
-               
-               while (1) {
-                       if (! $wgMemc->delete( $key ) ) {
-                               echo "Memcache delete for $key returned false\n";
-                       }
-                       if ( $wgMemc->get( $key ) ) {
-                               echo "There's still content in $key!\n";
-                       } else {
-                               break;
-                       }
-               }
-               
-       }
-}
-
-purgeStaleMemcachedText();
-
diff --git a/maintenance/refreshImageCount.php b/maintenance/refreshImageCount.php
deleted file mode 100644 (file)
index be6bd18..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-/**
- * Quickie hack; patch-ss_images.sql uses variables which don't
- * replicate properly.
- *
- * 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
- *
- * @ingroup Maintenance
- */
-
-require_once( __DIR__ . '/Maintenance.php' );
-
-class RefreshImageCount extends Maintenance {
-       public function __construct() {
-               parent::__construct();
-               $this->mDescription = "Resets ss_image count, forcing slaves to pick it up.";
-       }
-
-       public function execute() {
-               $dbw = wfGetDB( DB_MASTER );
-
-               // Load the current value from the master
-               $count = $dbw->selectField( 'site_stats', 'ss_images' );
-
-               $this->output( wfWikiID() . ": forcing ss_images to $count\n" );
-
-               // First set to NULL so that it changes on the master
-               $dbw->update( 'site_stats',
-                       array( 'ss_images' => null ),
-                       array( 'ss_row_id' => 1 ) );
-
-               // Now this update will be forced to go out
-               $dbw->update( 'site_stats',
-                       array( 'ss_images' => $count ),
-                       array( 'ss_row_id' => 1 ) );
-                       }
-}
-
-$maintClass = "RefreshImageCount";
-require_once( RUN_MAINTENANCE_IF_MAIN );
-
diff --git a/maintenance/sqlite/archives/patch-cat_hidden.sql b/maintenance/sqlite/archives/patch-cat_hidden.sql
new file mode 100644 (file)
index 0000000..272b8ef
--- /dev/null
@@ -0,0 +1,20 @@
+-- cat_hidden is no longer used, delete it
+
+CREATE TABLE /*_*/category_tmp (
+  cat_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  cat_title varchar(255) binary NOT NULL,
+  cat_pages int signed NOT NULL default 0,
+  cat_subcats int signed NOT NULL default 0,
+  cat_files int signed NOT NULL default 0
+) /*$wgDBTableOptions*/;
+
+INSERT INTO /*_*/category_tmp
+       SELECT cat_id, cat_title, cat_pages, cat_subcats, cat_files
+               FROM /*_*/category;
+
+DROP TABLE /*_*/category;
+
+ALTER TABLE /*_*/category_tmp RENAME TO /*_*/category;
+
+CREATE UNIQUE INDEX /*i*/cat_title ON /*_*/category (cat_title);
+CREATE INDEX /*i*/cat_pages ON /*_*/category (cat_pages);
index 6c669bf..5797a6c 100644 (file)
@@ -38,6 +38,8 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 // ----------------------------------------------------------------------------------
 
 /**
+ * Maintenance script to do various checks on external storage.
+ *
  * @ingroup Maintenance ExternalStorage
  */
 class CheckStorage {
index 4594db7..951ab1a 100644 (file)
 
 require_once( __DIR__ . '/../Maintenance.php' );
 
+/**
+ * Maintenance script that compress the text of a wiki.
+ *
+ * @ingroup Maintenance ExternalStorage
+ */
 class CompressOld extends Maintenance {
        /**
         * @todo document
index 6020f22..39f08f9 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Get the text of a revision, resolving external storage if needed.
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance ExternalStorage
  */
 
 require_once( __DIR__ . '/../Maintenance.php' );
 
+/**
+ * Maintenance script that gets the text of a revision,
+ * resolving external storage if needed.
+ *
+ * @ingroup Maintenance ExternalStorage
+ */
 class DumpRev extends Maintenance {
        public function __construct() {
                parent::__construct();
index 52ee825..21a4957 100644 (file)
 
 require_once( __DIR__ . '/../Maintenance.php' );
 
+/**
+ * Maintenance script to fix bug 20757.
+ *
+ * @ingroup Maintenance ExternalStorage
+ */
 class FixBug20757 extends Maintenance {
        var $batchSize = 10000;
        var $mapCache = array();
index 82ee135..4e24628 100644 (file)
@@ -1,7 +1,6 @@
 <?php
-
 /**
- * Show some statistics on the blob_orphans table, created with trackBlobs.php
+ * Show some statistics on the blob_orphans table, created with trackBlobs.php.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  * http://www.gnu.org/copyleft/gpl.html
  *
+ * @file
  * @ingroup Maintenance ExternalStorage
  */
+
 require_once( __DIR__ . '/../Maintenance.php' );
 
+/**
+ * Maintenance script that shows some statistics on the blob_orphans table,
+ * created with trackBlobs.php.
+ *
+ * @ingroup Maintenance ExternalStorage
+ */
 class OrphanStats extends Maintenance {
        public function __construct() {
                parent::__construct();
index 4098077..f770681 100644 (file)
@@ -42,6 +42,12 @@ Options:
 $job = RecompressTracked::newFromCommandLine( $args, $options );
 $job->execute();
 
+/**
+ * Maintenance script that moves blobs indexed by trackBlobs.php to a specified
+ * list of destination clusters, and recompresses them in the process.
+ *
+ * @ingroup Maintenance ExternalStorage
+ */
 class RecompressTracked {
        var $destClusters;
        var $batchSize = 1000;
index 7e288e1..0f5cd2b 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
- * Script to convert history stubs that point to an external row to direct
- * external pointers.
+ * Convert history stubs that point to an external row to direct external
+ * pointers.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 998ebe4..58b0847 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 /**
+ * Test revision text compression and decompression.
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -16,8 +18,7 @@
  * http://www.gnu.org/copyleft/gpl.html
  *
  * @file
- * @ingroup Maintenance
- * @see wfWaitForSlaves()
+ * @ingroup Maintenance ExternalStorage
  */
 
 $optionsWithArgs = array( 'start', 'limit', 'type' );
index 2e1d1c3..a29647b 100644 (file)
@@ -209,7 +209,11 @@ class SyncFileBackend extends Maintenance {
                }
 
                $t_start = microtime( true );
-               $status->merge( $dst->doQuickOperations( $ops, array( 'bypassReadOnly' => 1 ) ) );
+               $status = $dst->doQuickOperations( $ops, array( 'bypassReadOnly' => 1 ) );
+               if ( !$status->isOK() ) {
+                       sleep( 10 ); // wait and retry copy again
+                       $status = $dst->doQuickOperations( $ops, array( 'bypassReadOnly' => 1 ) );
+               }
                $ellapsed_ms = floor( ( microtime( true ) - $t_start ) * 1000 );
                if ( $status->isOK() && $this->getOption( 'verbose' ) ) {
                        $this->output( "Synchronized these file(s) [{$ellapsed_ms}ms]:\n" .
index 0a5b2fb..062052f 100644 (file)
@@ -571,10 +571,7 @@ CREATE TABLE /*_*/category (
   -- ing is not.
   cat_pages int signed NOT NULL default 0,
   cat_subcats int signed NOT NULL default 0,
-  cat_files int signed NOT NULL default 0,
-
-  -- Reserved for future use
-  cat_hidden tinyint unsigned NOT NULL default 0
+  cat_files int signed NOT NULL default 0
 ) /*$wgDBTableOptions*/;
 
 CREATE UNIQUE INDEX /*i*/cat_title ON /*_*/category (cat_title);
index 5156dd0..a0761fc 100644 (file)
@@ -626,6 +626,8 @@ return array(
                'dependencies' => array(
                        'jquery.cookie',
                        'mediawiki.api',
+                       'user.options',
+                       'user.tokens',
                ),
        ),
        'mediawiki.util' => array(
@@ -660,7 +662,10 @@ return array(
        ),
        'mediawiki.action.view.dblClickEdit' => array(
                'scripts' => 'resources/mediawiki.action/mediawiki.action.view.dblClickEdit.js',
-               'dependencies' => 'mediawiki.util',
+               'dependencies' => array(
+                       'mediawiki.util',
+                       'mediawiki.page.startup',
+               ),
        ),
        'mediawiki.action.view.metadata' => array(
                'scripts' => 'resources/mediawiki.action/mediawiki.action.view.metadata.js',
@@ -682,52 +687,19 @@ return array(
        'mediawiki.language' => array(
                'scripts' => 'resources/mediawiki.language/mediawiki.language.js',
                'languageScripts' => array(
-                       'am' => 'resources/mediawiki.language/languages/am.js',
-                       'bat-smg' => 'resources/mediawiki.language/languages/bat-smg.js',
-                       'be' => 'resources/mediawiki.language/languages/be.js',
-                       'be-tarask' => 'resources/mediawiki.language/languages/be-tarask.js',
-                       'bh' => 'resources/mediawiki.language/languages/bh.js',
                        'bs' => 'resources/mediawiki.language/languages/bs.js',
-                       'cs' => 'resources/mediawiki.language/languages/cs.js',
-                       'cu' => 'resources/mediawiki.language/languages/cu.js',
-                       'cy' => 'resources/mediawiki.language/languages/cy.js',
                        'dsb' => 'resources/mediawiki.language/languages/dsb.js',
                        'fi' => 'resources/mediawiki.language/languages/fi.js',
-                       'fr' => 'resources/mediawiki.language/languages/fr.js',
                        'ga' => 'resources/mediawiki.language/languages/ga.js',
-                       'gd' => 'resources/mediawiki.language/languages/gd.js',
-                       'gv' => 'resources/mediawiki.language/languages/gv.js',
                        'he' => 'resources/mediawiki.language/languages/he.js',
-                       'hr' => 'resources/mediawiki.language/languages/hr.js',
                        'hsb' => 'resources/mediawiki.language/languages/hsb.js',
                        'hu' => 'resources/mediawiki.language/languages/hu.js',
                        'hy' => 'resources/mediawiki.language/languages/hy.js',
-                       'ksh' => 'resources/mediawiki.language/languages/ksh.js',
                        'la' => 'resources/mediawiki.language/languages/la.js',
-                       'ln' => 'resources/mediawiki.language/languages/ln.js',
-                       'lt' => 'resources/mediawiki.language/languages/lt.js',
-                       'lv' => 'resources/mediawiki.language/languages/lv.js',
-                       'mg' => 'resources/mediawiki.language/languages/mg.js',
-                       'mk' => 'resources/mediawiki.language/languages/mk.js',
-                       'mo' => 'resources/mediawiki.language/languages/mo.js',
-                       'mt' => 'resources/mediawiki.language/languages/mt.js',
-                       'nso' => 'resources/mediawiki.language/languages/nso.js',
                        'os' => 'resources/mediawiki.language/languages/os.js',
-                       'pl' => 'resources/mediawiki.language/languages/pl.js',
-                       'ro' => 'resources/mediawiki.language/languages/ro.js',
                        'ru' => 'resources/mediawiki.language/languages/ru.js',
-                       'se' => 'resources/mediawiki.language/languages/se.js',
-                       'sh' => 'resources/mediawiki.language/languages/sh.js',
-                       'sk' => 'resources/mediawiki.language/languages/sk.js',
                        'sl' => 'resources/mediawiki.language/languages/sl.js',
-                       'sma' => 'resources/mediawiki.language/languages/sma.js',
-                       'sr-ec' => 'resources/mediawiki.language/languages/sr-ec.js',
-                       'sr-el' => 'resources/mediawiki.language/languages/sr-el.js',
-                       'sr' => 'resources/mediawiki.language/languages/sr.js',
-                       'ti' => 'resources/mediawiki.language/languages/ti.js',
-                       'tl' => 'resources/mediawiki.language/languages/tl.js',
                        'uk' => 'resources/mediawiki.language/languages/uk.js',
-                       'wa' => 'resources/mediawiki.language/languages/wa.js',
                ),
                'dependencies' => array(
                                'mediawiki.language.data',
diff --git a/resources/jquery/images/spinner-large.gif b/resources/jquery/images/spinner-large.gif
new file mode 100644 (file)
index 0000000..72203fd
Binary files /dev/null and b/resources/jquery/images/spinner-large.gif differ
index 37d3a43..6146be4 100644 (file)
Binary files a/resources/jquery/images/spinner.gif and b/resources/jquery/images/spinner.gif differ
index 95959cf..6ca21b5 100644 (file)
@@ -3,12 +3,9 @@
  * Simple local storage wrapper to save data on the browser side, supporting
  * all major browsers - IE6+, Firefox2+, Safari4+, Chrome4+ and Opera 10.5+
  *
- * Copyright (c) 2010 Andris Reinman, andris.reinman@gmail.com
+ * Copyright (c) 2010 - 2012 Andris Reinman, andris.reinman@gmail.com
  * Project homepage: www.jstorage.info
  *
- * Taken from Github with slight modifications by Hoo man
- * https://raw.github.com/andris9/jStorage/master/jstorage.js
- *
  * Licensed under MIT-style license:
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * SOFTWARE.
  */
 
-/**
- * $.jStorage
- *
- * USAGE:
- *
- * jStorage requires Prototype, MooTools or jQuery! If jQuery is used, then
- * jQuery-JSON (http://code.google.com/p/jquery-json/) is also needed.
- * (jQuery-JSON needs to be loaded BEFORE jStorage!)
- *
- * Methods:
- *
- * -set(key, value[, options])
- * $.jStorage.set(key, value) -> saves a value
- *
- * -get(key[, default])
- * value = $.jStorage.get(key [, default]) ->
- *    retrieves value if key exists, or default if it doesn't
- *
- * -deleteKey(key)
- * $.jStorage.deleteKey(key) -> removes a key from the storage
- *
- * -flush()
- * $.jStorage.flush() -> clears the cache
- *
- * -storageObj()
- * $.jStorage.storageObj() -> returns a read-ony copy of the actual storage
- *
- * -storageSize()
- * $.jStorage.storageSize() -> returns the size of the storage in bytes
- *
- * -index()
- * $.jStorage.index() -> returns the used keys as an array
- *
- * -storageAvailable()
- * $.jStorage.storageAvailable() -> returns true if storage is available
- *
- * -reInit()
- * $.jStorage.reInit() -> reloads the data from browser storage
- *
- * <value> can be any JSON-able value, including objects and arrays.
- *
- **/
+ (function(){
+    var
+        /* jStorage version */
+        JSTORAGE_VERSION = "0.3.0",
+
+        /* detect a dollar object or create one if not found */
+        $ = window.jQuery || window.$ || (window.$ = {}),
 
-(function($){
-    if(!$ || !($.toJSON || Object.toJSON || window.JSON)){
-        throw new Error("jQuery, MooTools or Prototype needs to be loaded before jStorage!");
+        /* check for a JSON handling support */
+        JSON = {
+            parse:
+                window.JSON && (window.JSON.parse || window.JSON.decode) ||
+                String.prototype.evalJSON && function(str){return String(str).evalJSON();} ||
+                $.parseJSON ||
+                $.evalJSON,
+            stringify:
+                Object.toJSON ||
+                window.JSON && (window.JSON.stringify || window.JSON.encode) ||
+                $.toJSON
+        };
+
+    // Break if no JSON support was found
+    if(!JSON.parse || !JSON.stringify){
+        throw new Error("No JSON support found, include //cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js to page");
     }
 
     var
         /* How much space does the storage take */
         _storage_size = 0,
 
-        /* function to encode objects to JSON strings */
-        json_encode = $.toJSON || Object.toJSON || (window.JSON && (JSON.encode || JSON.stringify)),
-
-        /* function to decode objects from JSON strings */
-        json_decode = $.evalJSON || (window.JSON && (JSON.decode || JSON.parse)) || function(str){
-            return String(str).evalJSON();
-        },
-
         /* which backend is currently used */
         _backend = false,
 
+        /* onchange observers */
+        _observers = {},
+
+        /* timeout to wait after onchange event */
+        _observer_timeout = false,
+
+        /* last update time */
+        _observer_update = 0,
+
+        /* pubsub observers */
+        _pubsub_observers = {},
+
+        /* skip published items older than current timestamp */
+        _pubsub_last = +new Date(), 
+
         /* Next check for TTL */
         _ttl_timeout,
 
+        /* crc32 table */
+        _crc32Table = "00000000 77073096 EE0E612C 990951BA 076DC419 706AF48F E963A535 9E6495A3 "+
+             "0EDB8832 79DCB8A4 E0D5E91E 97D2D988 09B64C2B 7EB17CBD E7B82D07 90BF1D91 1DB71064 "+
+             "6AB020F2 F3B97148 84BE41DE 1ADAD47D 6DDDE4EB F4D4B551 83D385C7 136C9856 646BA8C0 "+
+             "FD62F97A 8A65C9EC 14015C4F 63066CD9 FA0F3D63 8D080DF5 3B6E20C8 4C69105E D56041E4 "+
+             "A2677172 3C03E4D1 4B04D447 D20D85FD A50AB56B 35B5A8FA 42B2986C DBBBC9D6 ACBCF940 "+
+             "32D86CE3 45DF5C75 DCD60DCF ABD13D59 26D930AC 51DE003A C8D75180 BFD06116 21B4F4B5 "+
+             "56B3C423 CFBA9599 B8BDA50F 2802B89E 5F058808 C60CD9B2 B10BE924 2F6F7C87 58684C11 "+
+             "C1611DAB B6662D3D 76DC4190 01DB7106 98D220BC EFD5102A 71B18589 06B6B51F 9FBFE4A5 "+
+             "E8B8D433 7807C9A2 0F00F934 9609A88E E10E9818 7F6A0DBB 086D3D2D 91646C97 E6635C01 "+
+             "6B6B51F4 1C6C6162 856530D8 F262004E 6C0695ED 1B01A57B 8208F4C1 F50FC457 65B0D9C6 "+
+             "12B7E950 8BBEB8EA FCB9887C 62DD1DDF 15DA2D49 8CD37CF3 FBD44C65 4DB26158 3AB551CE "+
+             "A3BC0074 D4BB30E2 4ADFA541 3DD895D7 A4D1C46D D3D6F4FB 4369E96A 346ED9FC AD678846 "+
+             "DA60B8D0 44042D73 33031DE5 AA0A4C5F DD0D7CC9 5005713C 270241AA BE0B1010 C90C2086 "+
+             "5768B525 206F85B3 B966D409 CE61E49F 5EDEF90E 29D9C998 B0D09822 C7D7A8B4 59B33D17 "+
+             "2EB40D81 B7BD5C3B C0BA6CAD EDB88320 9ABFB3B6 03B6E20C 74B1D29A EAD54739 9DD277AF "+
+             "04DB2615 73DC1683 E3630B12 94643B84 0D6D6A3E 7A6A5AA8 E40ECF0B 9309FF9D 0A00AE27 "+
+             "7D079EB1 F00F9344 8708A3D2 1E01F268 6906C2FE F762575D 806567CB 196C3671 6E6B06E7 "+
+             "FED41B76 89D32BE0 10DA7A5A 67DD4ACC F9B9DF6F 8EBEEFF9 17B7BE43 60B08ED5 D6D6A3E8 "+
+             "A1D1937E 38D8C2C4 4FDFF252 D1BB67F1 A6BC5767 3FB506DD 48B2364B D80D2BDA AF0A1B4C "+
+             "36034AF6 41047A60 DF60EFC3 A867DF55 316E8EEF 4669BE79 CB61B38C BC66831A 256FD2A0 "+
+             "5268E236 CC0C7795 BB0B4703 220216B9 5505262F C5BA3BBE B2BD0B28 2BB45A92 5CB36A04 "+
+             "C2D7FFA7 B5D0CF31 2CD99E8B 5BDEAE1D 9B64C2B0 EC63F226 756AA39C 026D930A 9C0906A9 "+
+             "EB0E363F 72076785 05005713 95BF4A82 E2B87A14 7BB12BAE 0CB61B38 92D28E9B E5D5BE0D "+
+             "7CDCEFB7 0BDBDF21 86D3D2D4 F1D4E242 68DDB3F8 1FDA836E 81BE16CD F6B9265B 6FB077E1 "+
+             "18B74777 88085AE6 FF0F6A70 66063BCA 11010B5C 8F659EFF F862AE69 616BFFD3 166CCF45 "+
+             "A00AE278 D70DD2EE 4E048354 3903B3C2 A7672661 D06016F7 4969474D 3E6E77DB AED16A4A "+
+             "D9D65ADC 40DF0B66 37D83BF0 A9BCAE53 DEBB9EC5 47B2CF7F 30B5FFE9 BDBDF21C CABAC28A "+
+             "53B39330 24B4A3A6 BAD03605 CDD70693 54DE5729 23D967BF B3667A2E C4614AB8 5D681B02 "+
+             "2A6F2B94 B40BBE37 C30C8EA1 5A05DF1B 2D02EF8D",
+
         /**
          * XML encoding and decoding as XML nodes can't be JSON'ized
          * XML nodes are encoded and decoded if the node is the value to be saved
                 resultXML = dom_parser.call("DOMParser" in window && (new DOMParser()) || window, xmlString, 'text/xml');
                 return this.isXML(resultXML)?resultXML:false;
             }
-        };
+        },
+
+        _localStoragePolyfillSetKey = function(){};
+
 
     ////////////////////////// PRIVATE METHODS ////////////////////////
 
     /**
      * Initialization function. Detects if the browser supports DOM Storage
      * or userData behavior and behaves accordingly.
-     * @returns undefined
      */
     function _init(){
         /* Check if browser supports localStorage */
                 // QUOTA_EXCEEDED_ERRROR DOM Exception 22.
             }
         }
+
         if(localStorageReallyWorks){
             try {
                 if(window.localStorage) {
                     _storage_service = window.localStorage;
                     _backend = "localStorage";
+                    _observer_update = _storage_service.jStorage_update;
                 }
             } catch(E3) {/* Firefox fails when touching localStorage and cookies are disabled */}
         }
                 if(window.globalStorage) {
                     _storage_service = window.globalStorage[window.location.hostname];
                     _backend = "globalStorage";
+                    _observer_update = _storage_service.jStorage_update;
                 }
             } catch(E4) {/* Firefox fails when touching localStorage and cookies are disabled */}
         }
                 /* userData element needs to be inserted into the DOM! */
                 document.getElementsByTagName('head')[0].appendChild(_storage_elm);
 
-                _storage_elm.load("jStorage");
+                try{
+                    _storage_elm.load("jStorage");
+                }catch(E){
+                    // try to reset cache
+                    _storage_elm.setAttribute("jStorage", "{}");
+                    _storage_elm.save("jStorage");
+                    _storage_elm.load("jStorage");
+                }
+
                 var data = "{}";
                 try{
                     data = _storage_elm.getAttribute("jStorage");
                 }catch(E5){}
+
+                try{
+                    _observer_update = _storage_elm.getAttribute("jStorage_update");
+                }catch(E6){}
+
                 _storage_service.jStorage = data;
                 _backend = "userDataBehavior";
             }else{
             }
         }
 
+        // Load data from storage
+        _load_storage();
+
+        // remove dead keys
+        _handleTTL();
+
+        // create localStorage and sessionStorage polyfills if needed
+        _createPolyfillStorage("local");
+        _createPolyfillStorage("session");
+
+        // start listening for changes
+        _setupObserver();
+
+        // initialize publish-subscribe service
+        _handlePubSub();
+
+        // handle cached navigation
+        if("addEventListener" in window){
+            window.addEventListener("pageshow", function(event){
+                if(event.persisted){
+                    _storageObserver();
+                }
+            }, false);
+        }
+    }
+
+    /**
+     * Create a polyfill for localStorage (type="local") or sessionStorage (type="session")
+     *
+     * @param {String} type Either "local" or "session"
+     * @param {Boolean} forceCreate If set to true, recreate the polyfill (needed with flush)
+     */
+    function _createPolyfillStorage(type, forceCreate){
+        var _skipSave = false,
+            _length = 0,
+            i, 
+            storage,
+            storage_source = {};
+
+            var rand = Math.random();
+
+        if(!forceCreate && typeof window[type+"Storage"] != "undefined"){
+            return;
+        }
+
+        // Use globalStorage for localStorage if available
+        if(type == "local" && window.globalStorage){
+            localStorage = window.globalStorage[window.location.hostname];
+            return;
+        }
+
+        // only IE6/7 from this point on 
+        if(_backend != "userDataBehavior"){
+            return;
+        }
+
+        // Remove existing storage element if available
+        if(forceCreate && window[type+"Storage"] && window[type+"Storage"].parentNode){
+            window[type+"Storage"].parentNode.removeChild(window[type+"Storage"]);
+        }
+
+        storage = document.createElement("button");
+        document.getElementsByTagName('head')[0].appendChild(storage);
+
+        if(type == "local"){
+            storage_source = _storage;
+        }else if(type == "session"){
+            _sessionStoragePolyfillUpdate();
+        }
+
+        for(i in storage_source){
+
+            if(storage_source.hasOwnProperty(i) && i != "__jstorage_meta" && i != "length" && typeof storage_source[i] != "undefined"){
+                if(!(i in storage)){
+                    _length++;
+                }
+                storage[i] = storage_source[i];
+            }
+        }
+        
+        // Polyfill API
+
+        /**
+         * Indicates how many keys are stored in the storage
+         */
+        storage.length = _length;
+
+        /**
+         * Returns the key of the nth stored value
+         * 
+         * @param {Number} n Index position
+         * @return {String} Key name of the nth stored value
+         */
+        storage.key = function(n){
+            var count = 0, i;
+            _sessionStoragePolyfillUpdate();
+            for(i in storage_source){
+                if(storage_source.hasOwnProperty(i) && i != "__jstorage_meta" && i!="length" && typeof storage_source[i] != "undefined"){
+                    if(count == n){
+                        return i;
+                    }
+                    count++;
+                }
+            }
+        }
+
+        /**
+         * Returns the current value associated with the given key
+         *
+         * @param {String} key key name
+         * @return {Mixed} Stored value
+         */
+        storage.getItem = function(key){
+            _sessionStoragePolyfillUpdate();
+            if(type == "session"){
+                return storage_source[key];
+            }
+            return $.jStorage.get(key);
+        }
+
+        /**
+         * Sets or updates value for a give key
+         *
+         * @param {String} key Key name to be updated
+         * @param {String} value String value to be stored 
+         */
+        storage.setItem = function(key, value){
+            if(typeof value == "undefined"){
+                return;
+            }
+            storage[key] = (value || "").toString();
+        }
+
+        /**
+         * Removes key from the storage
+         *
+         * @param {String} key Key name to be removed
+         */
+        storage.removeItem = function(key){
+            if(type == "local"){
+                return $.jStorage.deleteKey(key);
+            }
+
+            storage[key] = undefined;
+            
+            _skipSave = true;
+            if(key in storage){
+                storage.removeAttribute(key);
+            }
+            _skipSave = false;
+        }
+
+        /**
+         * Clear storage
+         */
+        storage.clear = function(){
+            if(type == "session"){
+                window.name = "";
+                _createPolyfillStorage("session", true);
+                return;
+            }
+            $.jStorage.flush();
+        }
+
+        if(type == "local"){
+
+            _localStoragePolyfillSetKey = function(key, value){
+                if(key == "length"){
+                    return;
+                }
+                _skipSave = true;
+                if(typeof value == "undefined"){
+                    if(key in storage){
+                        _length--;
+                        storage.removeAttribute(key);
+                    }
+                }else{
+                    if(!(key in storage)){
+                        _length++;
+                    }
+                    storage[key] = (value || "").toString();
+                }
+                storage.length = _length;
+                _skipSave = false;
+            }
+        }
+
+        function _sessionStoragePolyfillUpdate(){
+                if(type != "session"){
+                    return;
+                }
+                try{
+                    storage_source = JSON.parse(window.name || "{}");
+                }catch(E){
+                    storage_source = {};
+                }
+            }
+
+        function _sessionStoragePolyfillSave(){
+            if(type != "session"){
+                return;
+            }
+            window.name = JSON.stringify(storage_source);
+        };
+
+        storage.attachEvent("onpropertychange", function(e){
+            if(e.propertyName == "length"){
+                return;
+            }
+
+            if(_skipSave || e.propertyName == "length"){
+                return;
+            }
+
+            if(type == "local"){
+                if(!(e.propertyName in storage_source) && typeof storage[e.propertyName] != "undefined"){
+                    _length ++;
+                }
+            }else if(type == "session"){
+                _sessionStoragePolyfillUpdate();
+                if(typeof storage[e.propertyName] != "undefined" && !(e.propertyName in storage_source)){
+                    storage_source[e.propertyName] = storage[e.propertyName];
+                    _length++;
+                }else if(typeof storage[e.propertyName] == "undefined" && e.propertyName in storage_source){
+                    delete storage_source[e.propertyName];
+                    _length--;
+                }else{
+                    storage_source[e.propertyName] = storage[e.propertyName];
+                }
+
+                _sessionStoragePolyfillSave();
+                storage.length = _length;
+                return;
+            }
+
+            $.jStorage.set(e.propertyName, storage[e.propertyName]);
+            storage.length = _length;
+        });
+
+        window[type+"Storage"] = storage;
+    }
+
+    /**
+     * Reload data from storage when needed
+     */
+    function _reloadData(){
+        var data = "{}";
+
+        if(_backend == "userDataBehavior"){
+            _storage_elm.load("jStorage");
+
+            try{
+                data = _storage_elm.getAttribute("jStorage");
+            }catch(E5){}
+
+            try{
+                _observer_update = _storage_elm.getAttribute("jStorage_update");
+            }catch(E6){}
+
+            _storage_service.jStorage = data;
+        }
+
         _load_storage();
 
         // remove dead keys
         _handleTTL();
+
+        _handlePubSub();
+    }
+
+    /**
+     * Sets up a storage change observer
+     */
+    function _setupObserver(){
+        if(_backend == "localStorage" || _backend == "globalStorage"){
+            if("addEventListener" in window){
+                window.addEventListener("storage", _storageObserver, false);
+            }else{
+                document.attachEvent("onstorage", _storageObserver);
+            }
+        }else if(_backend == "userDataBehavior"){
+            setInterval(_storageObserver, 1000);
+        }
+    }
+
+    /**
+     * Fired on any kind of data change, needs to check if anything has
+     * really been changed
+     */
+    function _storageObserver(){
+        var updateTime;
+        // cumulate change notifications with timeout
+        clearTimeout(_observer_timeout);
+        _observer_timeout = setTimeout(function(){
+
+            if(_backend == "localStorage" || _backend == "globalStorage"){
+                updateTime = _storage_service.jStorage_update;
+            }else if(_backend == "userDataBehavior"){
+                _storage_elm.load("jStorage");
+                try{
+                    updateTime = _storage_elm.getAttribute("jStorage_update");
+                }catch(E5){}
+            }
+
+            if(updateTime && updateTime != _observer_update){
+                _observer_update = updateTime;
+                _checkUpdatedKeys();
+            }
+
+        }, 25);
+    }
+
+    /**
+     * Reloads the data and checks if any keys are changed
+     */
+    function _checkUpdatedKeys(){
+        var oldCrc32List = JSON.parse(JSON.stringify(_storage.__jstorage_meta.CRC32)),
+            newCrc32List;
+
+        _reloadData();
+        newCrc32List = JSON.parse(JSON.stringify(_storage.__jstorage_meta.CRC32));
+
+        var key,
+            updated = [],
+            removed = [];
+
+        for(key in oldCrc32List){
+            if(oldCrc32List.hasOwnProperty(key)){
+                if(!newCrc32List[key]){
+                    removed.push(key);
+                    continue;
+                }
+                if(oldCrc32List[key] != newCrc32List[key]){
+                    updated.push(key);
+                }
+            }
+        }
+
+        for(key in newCrc32List){
+            if(newCrc32List.hasOwnProperty(key)){
+                if(!oldCrc32List[key]){
+                    updated.push(key);
+                }
+            }
+        }
+
+        _fireObservers(updated, "updated");
+        _fireObservers(removed, "deleted");
+    }
+
+    /**
+     * Fires observers for updated keys
+     *
+     * @param {Array|String} keys Array of key names or a key
+     * @param {String} action What happened with the value (updated, deleted, flushed)
+     */
+    function _fireObservers(keys, action){
+        keys = [].concat(keys || []);
+        if(action == "flushed"){
+            keys = [];
+            for(var key in _observers){
+                if(_observers.hasOwnProperty(key)){
+                    keys.push(key);
+                }
+            }
+            action = "deleted";
+        }
+        for(var i=0, len = keys.length; i<len; i++){
+            if(_observers[keys[i]]){
+                for(var j=0, jlen = _observers[keys[i]].length; j<jlen; j++){
+                    _observers[keys[i]][j](keys[i], action);
+                }
+            }
+        }
+    }
+
+    /**
+     * Publishes key change to listeners
+     */
+    function _publishChange(){
+        var updateTime = (+new Date()).toString();
+
+        if(_backend == "localStorage" || _backend == "globalStorage"){
+            _storage_service.jStorage_update = updateTime;
+        }else if(_backend == "userDataBehavior"){
+            _storage_elm.setAttribute("jStorage_update", updateTime);
+            _storage_elm.save("jStorage");
+        }
+
+        _storageObserver();
     }
 
     /**
      * Loads the data from the storage based on the supported mechanism
-     * @returns undefined
      */
     function _load_storage(){
         /* if jStorage string is retrieved, then decode it */
         if(_storage_service.jStorage){
             try{
-                _storage = json_decode(String(_storage_service.jStorage));
+                _storage = JSON.parse(String(_storage_service.jStorage));
             }catch(E6){_storage_service.jStorage = "{}";}
         }else{
             _storage_service.jStorage = "{}";
         }
         _storage_size = _storage_service.jStorage?String(_storage_service.jStorage).length:0;
+
+        if(!_storage.__jstorage_meta){
+            _storage.__jstorage_meta = {};
+        }
+        if(!_storage.__jstorage_meta.CRC32){
+            _storage.__jstorage_meta.CRC32 = {};
+        }
     }
 
     /**
      * This functions provides the "save" mechanism to store the jStorage object
-     * @returns undefined
      */
     function _save(){
+        _dropOldEvents(); // remove expired events
         try{
-            _storage_service.jStorage = json_encode(_storage);
+            _storage_service.jStorage = JSON.stringify(_storage);
             // If userData is used as the storage engine, additional
             if(_storage_elm) {
                 _storage_elm.setAttribute("jStorage",_storage_service.jStorage);
 
     /**
      * Function checks if a key is set and is string or numberic
+     *
+     * @param {String} key Key name
      */
     function _checkKey(key){
-        if(!key || (typeof key !== "string" && typeof key !== "number")){
+        if(!key || (typeof key != "string" && typeof key != "number")){
             throw new TypeError('Key name must be string or numeric');
         }
-        if(key === "__jstorage_meta"){
+        if(key == "__jstorage_meta"){
             throw new TypeError('Reserved key name');
         }
         return true;
      * Removes expired keys
      */
     function _handleTTL(){
-        var curtime, i, TTL, nextExpire = Infinity, changed = false;
+        var curtime, i, TTL, CRC32, nextExpire = Infinity, changed = false, deleted = [];
 
         clearTimeout(_ttl_timeout);
 
-        if(!_storage.__jstorage_meta || typeof _storage.__jstorage_meta.TTL !== "object"){
+        if(!_storage.__jstorage_meta || typeof _storage.__jstorage_meta.TTL != "object"){
             // nothing to do here
             return;
         }
 
         curtime = +new Date();
         TTL = _storage.__jstorage_meta.TTL;
+
+        CRC32 = _storage.__jstorage_meta.CRC32;
         for(i in TTL){
             if(TTL.hasOwnProperty(i)){
                 if(TTL[i] <= curtime){
                     delete TTL[i];
+                    delete CRC32[i];
                     delete _storage[i];
                     changed = true;
+                    deleted.push(i);
                 }else if(TTL[i] < nextExpire){
                     nextExpire = TTL[i];
                 }
         // save changes
         if(changed){
             _save();
+            _publishChange();
+            _fireObservers(deleted, "deleted");
         }
     }
 
+    /**
+     * Checks if there's any events on hold to be fired to listeners
+     */
+    function _handlePubSub(){
+        if(!_storage.__jstorage_meta.PubSub){
+            return;
+        }
+        var pubelm,
+            _pubsubCurrent = _pubsub_last;
+
+        for(var i=len=_storage.__jstorage_meta.PubSub.length-1; i>=0; i--){
+            pubelm = _storage.__jstorage_meta.PubSub[i];
+            if(pubelm[0] > _pubsub_last){
+                _pubsubCurrent = pubelm[0];
+                _fireSubscribers(pubelm[1], pubelm[2]);
+            }
+        }
+
+        _pubsub_last = _pubsubCurrent;
+    }
+
+    /**
+     * Fires all subscriber listeners for a pubsub channel
+     *
+     * @param {String} channel Channel name
+     * @param {Mixed} payload Payload data to deliver
+     */
+    function _fireSubscribers(channel, payload){
+        if(_pubsub_observers[channel]){
+            for(var i=0, len = _pubsub_observers[channel].length; i<len; i++){
+                // send immutable data that can't be modified by listeners
+                _pubsub_observers[channel][i](channel, JSON.parse(JSON.stringify(payload)));
+            }
+        }
+    }
+
+    /**
+     * Remove old events from the publish stream (at least 2sec old)
+     */
+    function _dropOldEvents(){
+        if(!_storage.__jstorage_meta.PubSub){
+            return;
+        }
+
+        var retire = +new Date() - 2000;
+
+        for(var i=0, len = _storage.__jstorage_meta.PubSub.length; i<len; i++){
+            if(_storage.__jstorage_meta.PubSub[i][0] <= retire){
+                // deleteCount is needed for IE6
+                _storage.__jstorage_meta.PubSub.splice(i, _storage.__jstorage_meta.PubSub.length - i);
+                break;
+            }
+        }
+
+        if(!_storage.__jstorage_meta.PubSub.length){
+            delete _storage.__jstorage_meta.PubSub;
+        }
+
+    }
+
+    /**
+     * Publish payload to a channel
+     *
+     * @param {String} channel Channel name
+     * @param {Mixed} payload Payload to send to the subscribers
+     */
+    function _publish(channel, payload){
+        if(!_storage.__jstorage_meta){
+            _storage.__jstorage_meta = {};
+        }
+        if(!_storage.__jstorage_meta.PubSub){
+            _storage.__jstorage_meta.PubSub = [];
+        }
+        
+        _storage.__jstorage_meta.PubSub.unshift([+new Date, channel, payload]);
+
+        _save();
+        _publishChange();
+    }
+
+    /**
+     * CRC32 calculation based on http://noteslog.com/post/crc32-for-javascript/
+     *
+     * @param {String} str String to be hashed
+     * @param {Number} [crc] Last crc value in case of streams
+     */
+    function _crc32(str, crc){
+        crc = crc || 0;
+
+        var n = 0, //a number between 0 and 255
+            x = 0; //an hex number
+        crc = crc ^ (-1);
+        for(var i = 0, len = str.length; i < len; i++){
+            n = (crc ^ str.charCodeAt(i)) & 0xFF;
+            x = "0x" + _crc32Table.substr(n * 9, 8);
+            crc = (crc >>> 8)^x;
+        }
+        return crc^(-1);
+    }
+
     ////////////////////////// PUBLIC INTERFACE /////////////////////////
 
     $.jStorage = {
         /* Version number */
-        version: "0.1.7.0",
+        version: JSTORAGE_VERSION,
 
         /**
          * Sets a key's value.
          *
-         * @param {String} key Key to set. If this value is not set or not
+         * @param {String} key Key to set. If this value is not set or not
          *              a string an exception is raised.
-         * @param {Mixed} value Value to set. This can be any value that is JSON
+         * @param {Mixed} value Value to set. This can be any value that is JSON
          *              compatible (Numbers, Strings, Objects etc.).
          * @param {Object} [options] - possible options to use
          * @param {Number} [options.TTL] - optional TTL value
-         * @returns the used value
+         * @return {Mixed} the used value
          */
         set: function(key, value, options){
             _checkKey(key);
 
             options = options || {};
 
+            // undefined values are deleted automatically
+            if(typeof value == "undefined"){
+                this.deleteKey(key);
+                return value;
+            }
+
             if(_XMLService.isXML(value)){
                 value = {_is_xml:true,xml:_XMLService.encode(value)};
-            }else if(typeof value === "function"){
-                value = null; // functions can't be saved!
-            }else if(value && typeof value === "object"){
+            }else if(typeof value == "function"){
+                return undefined; // functions can't be saved!
+            }else if(value && typeof value == "object"){
                 // clone the object before saving to _storage tree
-                value = json_decode(json_encode(value));
+                value = JSON.parse(JSON.stringify(value));
             }
+
             _storage[key] = value;
 
-            if(!isNaN(options.TTL)){
-                this.setTTL(key, options.TTL);
-                // also handles saving
-            }else{
-                _save();
-            }
+            _storage.__jstorage_meta.CRC32[key] = _crc32(JSON.stringify(value));
+
+            this.setTTL(key, options.TTL || 0); // also handles saving and _publishChange
+
+            _localStoragePolyfillSetKey(key, value);
+
+            _fireObservers(key, "updated");
             return value;
         },
 
          *
          * @param {String} key - Key to look up.
          * @param {mixed} def - Default value to return, if key didn't exist.
-         * @returns the key value, default value or <null>
+         * @return {Mixed} the key value, default value or null
          */
         get: function(key, def){
             _checkKey(key);
             if(key in _storage){
-                if(_storage[key] && typeof _storage[key] === "object" &&
+                if(_storage[key] && typeof _storage[key] == "object" &&
                         _storage[key]._is_xml &&
                             _storage[key]._is_xml){
                     return _XMLService.decode(_storage[key].xml);
                     return _storage[key];
                 }
             }
-            return typeof(def) === 'undefined' ? null : def;
+            return typeof(def) == 'undefined' ? null : def;
         },
 
         /**
          * Deletes a key from cache.
          *
          * @param {String} key - Key to delete.
-         * @returns true if key existed or false if it didn't
+         * @return {Boolean} true if key existed or false if it didn't
          */
         deleteKey: function(key){
             _checkKey(key);
             if(key in _storage){
                 delete _storage[key];
                 // remove from TTL list
-                if(_storage.__jstorage_meta &&
-                  typeof _storage.__jstorage_meta.TTL === "object" &&
+                if(typeof _storage.__jstorage_meta.TTL == "object" &&
                   key in _storage.__jstorage_meta.TTL){
                     delete _storage.__jstorage_meta.TTL[key];
                 }
+
+                delete _storage.__jstorage_meta.CRC32[key];
+                _localStoragePolyfillSetKey(key, undefined);
+
                 _save();
+                _publishChange();
+                _fireObservers(key, "deleted");
                 return true;
             }
             return false;
          *
          * @param {String} key - key to set the TTL for
          * @param {Number} ttl - TTL timeout in milliseconds
-         * @returns true if key existed or false if it didn't
+         * @return {Boolean} true if key existed or false if it didn't
          */
         setTTL: function(key, ttl){
             var curtime = +new Date();
             ttl = Number(ttl) || 0;
             if(key in _storage){
 
-                if(!_storage.__jstorage_meta){
-                    _storage.__jstorage_meta = {};
-                }
                 if(!_storage.__jstorage_meta.TTL){
                     _storage.__jstorage_meta.TTL = {};
                 }
                 _save();
 
                 _handleTTL();
+
+                _publishChange();
                 return true;
             }
             return false;
         },
 
+        /**
+         * Gets remaining TTL (in milliseconds) for a key or 0 when no TTL has been set
+         *
+         * @param {String} key Key to check
+         * @return {Number} Remaining TTL in milliseconds
+         */
+        getTTL: function(key){
+            var curtime = +new Date(), ttl;
+            _checkKey(key);
+            if(key in _storage && _storage.__jstorage_meta.TTL && _storage.__jstorage_meta.TTL[key]){
+                ttl = _storage.__jstorage_meta.TTL[key] - curtime;
+                return ttl || 0;
+            }
+            return 0;
+        },
+
         /**
          * Deletes everything in cache.
          *
-         * @return true
+         * @return {Boolean} Always true
          */
         flush: function(){
-            _storage = {};
+            _storage = {__jstorage_meta:{CRC32:{}}};
+            _createPolyfillStorage("local", true);
             _save();
+            _publishChange();
+            _fireObservers(null, "flushed");
             return true;
         },
 
         /**
          * Returns a read-only copy of _storage
          *
-         * @returns Object
+         * @return {Object} Read-only copy of _storage
         */
         storageObj: function(){
             function F() {}
          * Returns an index of all used keys as an array
          * ['key1', 'key2',..'keyN']
          *
-         * @returns Array
+         * @return {Array} Used keys
         */
         index: function(){
             var index = [], i;
             for(i in _storage){
-                if(_storage.hasOwnProperty(i) && i !== "__jstorage_meta"){
+                if(_storage.hasOwnProperty(i) && i != "__jstorage_meta"){
                     index.push(i);
                 }
             }
         /**
          * How much space in bytes does the storage take?
          *
-         * @returns Number
+         * @return {Number} Storage size in chars (not the same as in bytes,
+         *                  since some chars may take several bytes)
          */
         storageSize: function(){
             return _storage_size;
         /**
          * Which backend is currently in use?
          *
-         * @returns String
+         * @return {String} Backend name
          */
         currentBackend: function(){
             return _backend;
         /**
          * Test if storage is available
          *
-         * @returns Boolean
+         * @return {Boolean} True if storage can be used
          */
         storageAvailable: function(){
             return !!_backend;
         },
 
         /**
-         * Reloads the data from browser storage
+         * Register change listeners
          *
-         * @returns undefined
+         * @param {String} key Key name
+         * @param {Function} callback Function to run when the key changes
          */
-        reInit: function(){
-            var new_storage_elm, data;
-            if(_storage_elm && _storage_elm.addBehavior){
-                new_storage_elm = document.createElement('link');
+        listenKeyChange: function(key, callback){
+            _checkKey(key);
+            if(!_observers[key]){
+                _observers[key] = [];
+            }
+            _observers[key].push(callback);
+        },
 
-                _storage_elm.parentNode.replaceChild(new_storage_elm, _storage_elm);
-                _storage_elm = new_storage_elm;
+        /**
+         * Remove change listeners
+         *
+         * @param {String} key Key name to unregister listeners against
+         * @param {Function} [callback] If set, unregister the callback, if not - unregister all
+         */
+        stopListening: function(key, callback){
+            _checkKey(key);
 
-                /* Use a DOM element to act as userData storage */
-                _storage_elm.style.behavior = 'url(#default#userData)';
+            if(!_observers[key]){
+                return;
+            }
 
-                /* userData element needs to be inserted into the DOM! */
-                document.getElementsByTagName('head')[0].appendChild(_storage_elm);
+            if(!callback){
+                delete _observers[key];
+                return;
+            }
 
-                _storage_elm.load("jStorage");
-                data = "{}";
-                try{
-                    data = _storage_elm.getAttribute("jStorage");
-                }catch(E5){}
-                _storage_service.jStorage = data;
-                _backend = "userDataBehavior";
+            for(var i = _observers[key].length - 1; i>=0; i--){
+                if(_observers[key][i] == callback){
+                    _observers[key].splice(i,1);
+                }
             }
+        },
+
+        /**
+         * Subscribe to a Publish/Subscribe event stream
+         *
+         * @param {String} channel Channel name
+         * @param {Function} callback Function to run when the something is published to the channel
+         */
+        subscribe: function(channel, callback){
+            channel = (channel || "").toString();
+            if(!channel){
+                throw new TypeError('Channel not defined');
+            }
+            if(!_pubsub_observers[channel]){
+                _pubsub_observers[channel] = [];
+            }
+            _pubsub_observers[channel].push(callback);
+        },
 
-            _load_storage();
+        /**
+         * Publish data to an event stream
+         *
+         * @param {String} channel Channel name
+         * @param {Mixed} payload Payload to deliver
+         */
+        publish: function(channel, payload){
+            channel = (channel || "").toString();
+            if(!channel){
+                throw new TypeError('Channel not defined');
+            }
+
+            _publish(channel, payload);
+        },
+
+        /**
+         * Reloads the data from browser storage
+         */
+        reInit: function(){
+            _reloadData();
         }
     };
 
     // Initialize jStorage
     _init();
 
-})(window.$ || window.jQuery);
+})();
index b7dd119..973ef3d 100644 (file)
 /*!
- * jQuery JavaScript Library v1.7.2
+ * jQuery JavaScript Library v1.8.1
  * http://jquery.com/
  *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
  * Includes Sizzle.js
  * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
  *
- * Date: Wed Mar 21 12:46:34 2012 -0700
+ * Copyright 2012 jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: Thu Aug 30 2012 17:17:22 GMT-0400 (Eastern Daylight Time)
  */
 (function( window, undefined ) {
+var
+       // A central reference to the root jQuery(document)
+       rootjQuery,
+
+       // The deferred used on DOM ready
+       readyList,
+
+       // Use the correct document accordingly with window argument (sandbox)
+       document = window.document,
+       location = window.location,
+       navigator = window.navigator,
+
+       // Map over jQuery in case of overwrite
+       _jQuery = window.jQuery,
+
+       // Map over the $ in case of overwrite
+       _$ = window.$,
+
+       // Save a reference to some core methods
+       core_push = Array.prototype.push,
+       core_slice = Array.prototype.slice,
+       core_indexOf = Array.prototype.indexOf,
+       core_toString = Object.prototype.toString,
+       core_hasOwn = Object.prototype.hasOwnProperty,
+       core_trim = String.prototype.trim,
+
+       // Define a local copy of jQuery
+       jQuery = function( selector, context ) {
+               // The jQuery object is actually just the init constructor 'enhanced'
+               return new jQuery.fn.init( selector, context, rootjQuery );
+       },
+
+       // Used for matching numbers
+       core_pnum = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,
+
+       // Used for detecting and trimming whitespace
+       core_rnotwhite = /\S/,
+       core_rspace = /\s+/,
+
+       // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
+       rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+       // A simple way to check for HTML strings
+       // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+       rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
+
+       // Match a standalone tag
+       rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
+
+       // JSON RegExp
+       rvalidchars = /^[\],:{}\s]*$/,
+       rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+       rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
+       rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,
+
+       // Matches dashed string for camelizing
+       rmsPrefix = /^-ms-/,
+       rdashAlpha = /-([\da-z])/gi,
+
+       // Used by jQuery.camelCase as callback to replace()
+       fcamelCase = function( all, letter ) {
+               return ( letter + "" ).toUpperCase();
+       },
+
+       // The ready event handler and self cleanup method
+       DOMContentLoaded = function() {
+               if ( document.addEventListener ) {
+                       document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+                       jQuery.ready();
+               } else if ( document.readyState === "complete" ) {
+                       // we're here because readyState === "complete" in oldIE
+                       // which is good enough for us to call the dom ready!
+                       document.detachEvent( "onreadystatechange", DOMContentLoaded );
+                       jQuery.ready();
+               }
+       },
 
-// Use the correct document accordingly with window argument (sandbox)
-       var document = window.document,
-               navigator = window.navigator,
-               location = window.location;
-       var jQuery = (function() {
-
-// Define a local copy of jQuery
-               var jQuery = function( selector, context ) {
-                               // The jQuery object is actually just the init constructor 'enhanced'
-                               return new jQuery.fn.init( selector, context, rootjQuery );
-                       },
-
-               // Map over jQuery in case of overwrite
-                       _jQuery = window.jQuery,
-
-               // Map over the $ in case of overwrite
-                       _$ = window.$,
-
-               // A central reference to the root jQuery(document)
-                       rootjQuery,
-
-               // A simple way to check for HTML strings or ID strings
-               // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
-                       quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
-
-               // Check if a string has a non-whitespace character in it
-                       rnotwhite = /\S/,
-
-               // Used for trimming whitespace
-                       trimLeft = /^\s+/,
-                       trimRight = /\s+$/,
-
-               // Match a standalone tag
-                       rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-
-               // JSON RegExp
-                       rvalidchars = /^[\],:{}\s]*$/,
-                       rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
-                       rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
-                       rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
-
-               // Useragent RegExp
-                       rwebkit = /(webkit)[ \/]([\w.]+)/,
-                       ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
-                       rmsie = /(msie) ([\w.]+)/,
-                       rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
+       // [[Class]] -> type pairs
+       class2type = {};
 
-               // Matches dashed string for camelizing
-                       rdashAlpha = /-([a-z]|[0-9])/ig,
-                       rmsPrefix = /^-ms-/,
+jQuery.fn = jQuery.prototype = {
+       constructor: jQuery,
+       init: function( selector, context, rootjQuery ) {
+               var match, elem, ret, doc;
 
-               // Used by jQuery.camelCase as callback to replace()
-                       fcamelCase = function( all, letter ) {
-                               return ( letter + "" ).toUpperCase();
-                       },
+               // Handle $(""), $(null), $(undefined), $(false)
+               if ( !selector ) {
+                       return this;
+               }
 
-               // Keep a UserAgent string for use with jQuery.browser
-                       userAgent = navigator.userAgent,
+               // Handle $(DOMElement)
+               if ( selector.nodeType ) {
+                       this.context = this[0] = selector;
+                       this.length = 1;
+                       return this;
+               }
 
-               // For matching the engine and version of the browser
-                       browserMatch,
+               // Handle HTML strings
+               if ( typeof selector === "string" ) {
+                       if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+                               // Assume that strings that start and end with <> are HTML and skip the regex check
+                               match = [ null, selector, null ];
 
-               // The deferred used on DOM ready
-                       readyList,
+                       } else {
+                               match = rquickExpr.exec( selector );
+                       }
 
-               // The ready event handler
-                       DOMContentLoaded,
+                       // Match html or make sure no context is specified for #id
+                       if ( match && (match[1] || !context) ) {
 
-               // Save a reference to some core methods
-                       toString = Object.prototype.toString,
-                       hasOwn = Object.prototype.hasOwnProperty,
-                       push = Array.prototype.push,
-                       slice = Array.prototype.slice,
-                       trim = String.prototype.trim,
-                       indexOf = Array.prototype.indexOf,
+                               // HANDLE: $(html) -> $(array)
+                               if ( match[1] ) {
+                                       context = context instanceof jQuery ? context[0] : context;
+                                       doc = ( context && context.nodeType ? context.ownerDocument || context : document );
 
-               // [[Class]] -> type pairs
-                       class2type = {};
+                                       // scripts is true for back-compat
+                                       selector = jQuery.parseHTML( match[1], doc, true );
+                                       if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+                                               this.attr.call( selector, context, true );
+                                       }
 
-               jQuery.fn = jQuery.prototype = {
-                       constructor: jQuery,
-                       init: function( selector, context, rootjQuery ) {
-                               var match, elem, ret, doc;
+                                       return jQuery.merge( this, selector );
 
-                               // Handle $(""), $(null), or $(undefined)
-                               if ( !selector ) {
-                                       return this;
-                               }
+                               // HANDLE: $(#id)
+                               } else {
+                                       elem = document.getElementById( match[2] );
+
+                                       // Check parentNode to catch when Blackberry 4.6 returns
+                                       // nodes that are no longer in the document #6963
+                                       if ( elem && elem.parentNode ) {
+                                               // Handle the case where IE and Opera return items
+                                               // by name instead of ID
+                                               if ( elem.id !== match[2] ) {
+                                                       return rootjQuery.find( selector );
+                                               }
 
-                               // Handle $(DOMElement)
-                               if ( selector.nodeType ) {
-                                       this.context = this[0] = selector;
-                                       this.length = 1;
-                                       return this;
-                               }
+                                               // Otherwise, we inject the element directly into the jQuery object
+                                               this.length = 1;
+                                               this[0] = elem;
+                                       }
 
-                               // The body element only exists once, optimize finding it
-                               if ( selector === "body" && !context && document.body ) {
                                        this.context = document;
-                                       this[0] = document.body;
                                        this.selector = selector;
-                                       this.length = 1;
                                        return this;
                                }
 
-                               // Handle HTML strings
-                               if ( typeof selector === "string" ) {
-                                       // Are we dealing with HTML string or an ID?
-                                       if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
-                                               // Assume that strings that start and end with <> are HTML and skip the regex check
-                                               match = [ null, selector, null ];
+                       // HANDLE: $(expr, $(...))
+                       } else if ( !context || context.jquery ) {
+                               return ( context || rootjQuery ).find( selector );
 
-                                       } else {
-                                               match = quickExpr.exec( selector );
-                                       }
+                       // HANDLE: $(expr, context)
+                       // (which is just equivalent to: $(context).find(expr)
+                       } else {
+                               return this.constructor( context ).find( selector );
+                       }
 
-                                       // Verify a match, and that no context was specified for #id
-                                       if ( match && (match[1] || !context) ) {
+               // HANDLE: $(function)
+               // Shortcut for document ready
+               } else if ( jQuery.isFunction( selector ) ) {
+                       return rootjQuery.ready( selector );
+               }
 
-                                               // HANDLE: $(html) -> $(array)
-                                               if ( match[1] ) {
-                                                       context = context instanceof jQuery ? context[0] : context;
-                                                       doc = ( context ? context.ownerDocument || context : document );
+               if ( selector.selector !== undefined ) {
+                       this.selector = selector.selector;
+                       this.context = selector.context;
+               }
 
-                                                       // If a single string is passed in and it's a single tag
-                                                       // just do a createElement and skip the rest
-                                                       ret = rsingleTag.exec( selector );
+               return jQuery.makeArray( selector, this );
+       },
 
-                                                       if ( ret ) {
-                                                               if ( jQuery.isPlainObject( context ) ) {
-                                                                       selector = [ document.createElement( ret[1] ) ];
-                                                                       jQuery.fn.attr.call( selector, context, true );
+       // Start with an empty selector
+       selector: "",
 
-                                                               } else {
-                                                                       selector = [ doc.createElement( ret[1] ) ];
-                                                               }
+       // The current version of jQuery being used
+       jquery: "1.8.1",
 
-                                                       } else {
-                                                               ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
-                                                               selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;
-                                                       }
+       // The default length of a jQuery object is 0
+       length: 0,
 
-                                                       return jQuery.merge( this, selector );
+       // The number of elements contained in the matched element set
+       size: function() {
+               return this.length;
+       },
 
-                                                       // HANDLE: $("#id")
-                                               } else {
-                                                       elem = document.getElementById( match[2] );
-
-                                                       // Check parentNode to catch when Blackberry 4.6 returns
-                                                       // nodes that are no longer in the document #6963
-                                                       if ( elem && elem.parentNode ) {
-                                                               // Handle the case where IE and Opera return items
-                                                               // by name instead of ID
-                                                               if ( elem.id !== match[2] ) {
-                                                                       return rootjQuery.find( selector );
-                                                               }
+       toArray: function() {
+               return core_slice.call( this );
+       },
 
-                                                               // Otherwise, we inject the element directly into the jQuery object
-                                                               this.length = 1;
-                                                               this[0] = elem;
-                                                       }
+       // Get the Nth element in the matched element set OR
+       // Get the whole matched element set as a clean array
+       get: function( num ) {
+               return num == null ?
 
-                                                       this.context = document;
-                                                       this.selector = selector;
-                                                       return this;
-                                               }
+                       // Return a 'clean' array
+                       this.toArray() :
 
-                                               // HANDLE: $(expr, $(...))
-                                       } else if ( !context || context.jquery ) {
-                                               return ( context || rootjQuery ).find( selector );
+                       // Return just the object
+                       ( num < 0 ? this[ this.length + num ] : this[ num ] );
+       },
 
-                                               // HANDLE: $(expr, context)
-                                               // (which is just equivalent to: $(context).find(expr)
-                                       } else {
-                                               return this.constructor( context ).find( selector );
-                                       }
+       // Take an array of elements and push it onto the stack
+       // (returning the new matched element set)
+       pushStack: function( elems, name, selector ) {
 
-                                       // HANDLE: $(function)
-                                       // Shortcut for document ready
-                               } else if ( jQuery.isFunction( selector ) ) {
-                                       return rootjQuery.ready( selector );
-                               }
+               // Build a new jQuery matched element set
+               var ret = jQuery.merge( this.constructor(), elems );
 
-                               if ( selector.selector !== undefined ) {
-                                       this.selector = selector.selector;
-                                       this.context = selector.context;
-                               }
+               // Add the old object onto the stack (as a reference)
+               ret.prevObject = this;
 
-                               return jQuery.makeArray( selector, this );
-                       },
+               ret.context = this.context;
 
-                       // Start with an empty selector
-                       selector: "",
+               if ( name === "find" ) {
+                       ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
+               } else if ( name ) {
+                       ret.selector = this.selector + "." + name + "(" + selector + ")";
+               }
 
-                       // The current version of jQuery being used
-                       jquery: "1.7.2",
+               // Return the newly-formed element set
+               return ret;
+       },
+
+       // Execute a callback for every element in the matched set.
+       // (You can seed the arguments with an array of args, but this is
+       // only used internally.)
+       each: function( callback, args ) {
+               return jQuery.each( this, callback, args );
+       },
+
+       ready: function( fn ) {
+               // Add the callback
+               jQuery.ready.promise().done( fn );
+
+               return this;
+       },
+
+       eq: function( i ) {
+               i = +i;
+               return i === -1 ?
+                       this.slice( i ) :
+                       this.slice( i, i + 1 );
+       },
+
+       first: function() {
+               return this.eq( 0 );
+       },
+
+       last: function() {
+               return this.eq( -1 );
+       },
+
+       slice: function() {
+               return this.pushStack( core_slice.apply( this, arguments ),
+                       "slice", core_slice.call(arguments).join(",") );
+       },
+
+       map: function( callback ) {
+               return this.pushStack( jQuery.map(this, function( elem, i ) {
+                       return callback.call( elem, i, elem );
+               }));
+       },
+
+       end: function() {
+               return this.prevObject || this.constructor(null);
+       },
+
+       // For internal use only.
+       // Behaves like an Array's method, not like a jQuery method.
+       push: core_push,
+       sort: [].sort,
+       splice: [].splice
+};
 
-                       // The default length of a jQuery object is 0
-                       length: 0,
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+       var options, name, src, copy, copyIsArray, clone,
+               target = arguments[0] || {},
+               i = 1,
+               length = arguments.length,
+               deep = false;
+
+       // Handle a deep copy situation
+       if ( typeof target === "boolean" ) {
+               deep = target;
+               target = arguments[1] || {};
+               // skip the boolean and the target
+               i = 2;
+       }
 
-                       // The number of elements contained in the matched element set
-                       size: function() {
-                               return this.length;
-                       },
+       // Handle case when target is a string or something (possible in deep copy)
+       if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+               target = {};
+       }
 
-                       toArray: function() {
-                               return slice.call( this, 0 );
-                       },
+       // extend jQuery itself if only one argument is passed
+       if ( length === i ) {
+               target = this;
+               --i;
+       }
 
-                       // Get the Nth element in the matched element set OR
-                       // Get the whole matched element set as a clean array
-                       get: function( num ) {
-                               return num == null ?
+       for ( ; i < length; i++ ) {
+               // Only deal with non-null/undefined values
+               if ( (options = arguments[ i ]) != null ) {
+                       // Extend the base object
+                       for ( name in options ) {
+                               src = target[ name ];
+                               copy = options[ name ];
 
-                                       // Return a 'clean' array
-                                       this.toArray() :
+                               // Prevent never-ending loop
+                               if ( target === copy ) {
+                                       continue;
+                               }
 
-                                       // Return just the object
-                                       ( num < 0 ? this[ this.length + num ] : this[ num ] );
-                       },
+                               // Recurse if we're merging plain objects or arrays
+                               if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+                                       if ( copyIsArray ) {
+                                               copyIsArray = false;
+                                               clone = src && jQuery.isArray(src) ? src : [];
 
-                       // Take an array of elements and push it onto the stack
-                       // (returning the new matched element set)
-                       pushStack: function( elems, name, selector ) {
-                               // Build a new jQuery matched element set
-                               var ret = this.constructor();
+                                       } else {
+                                               clone = src && jQuery.isPlainObject(src) ? src : {};
+                                       }
 
-                               if ( jQuery.isArray( elems ) ) {
-                                       push.apply( ret, elems );
+                                       // Never move original objects, clone them
+                                       target[ name ] = jQuery.extend( deep, clone, copy );
 
-                               } else {
-                                       jQuery.merge( ret, elems );
+                               // Don't bring in undefined values
+                               } else if ( copy !== undefined ) {
+                                       target[ name ] = copy;
                                }
+                       }
+               }
+       }
 
-                               // Add the old object onto the stack (as a reference)
-                               ret.prevObject = this;
+       // Return the modified object
+       return target;
+};
 
-                               ret.context = this.context;
+jQuery.extend({
+       noConflict: function( deep ) {
+               if ( window.$ === jQuery ) {
+                       window.$ = _$;
+               }
 
-                               if ( name === "find" ) {
-                                       ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
-                               } else if ( name ) {
-                                       ret.selector = this.selector + "." + name + "(" + selector + ")";
-                               }
+               if ( deep && window.jQuery === jQuery ) {
+                       window.jQuery = _jQuery;
+               }
 
-                               // Return the newly-formed element set
-                               return ret;
-                       },
+               return jQuery;
+       },
 
-                       // Execute a callback for every element in the matched set.
-                       // (You can seed the arguments with an array of args, but this is
-                       // only used internally.)
-                       each: function( callback, args ) {
-                               return jQuery.each( this, callback, args );
-                       },
+       // Is the DOM ready to be used? Set to true once it occurs.
+       isReady: false,
 
-                       ready: function( fn ) {
-                               // Attach the listeners
-                               jQuery.bindReady();
+       // A counter to track how many items to wait for before
+       // the ready event fires. See #6781
+       readyWait: 1,
 
-                               // Add the callback
-                               readyList.add( fn );
+       // Hold (or release) the ready event
+       holdReady: function( hold ) {
+               if ( hold ) {
+                       jQuery.readyWait++;
+               } else {
+                       jQuery.ready( true );
+               }
+       },
 
-                               return this;
-                       },
+       // Handle when the DOM is ready
+       ready: function( wait ) {
 
-                       eq: function( i ) {
-                               i = +i;
-                               return i === -1 ?
-                                       this.slice( i ) :
-                                       this.slice( i, i + 1 );
-                       },
+               // Abort if there are pending holds or we're already ready
+               if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+                       return;
+               }
 
-                       first: function() {
-                               return this.eq( 0 );
-                       },
+               // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+               if ( !document.body ) {
+                       return setTimeout( jQuery.ready, 1 );
+               }
 
-                       last: function() {
-                               return this.eq( -1 );
-                       },
+               // Remember that the DOM is ready
+               jQuery.isReady = true;
 
-                       slice: function() {
-                               return this.pushStack( slice.apply( this, arguments ),
-                                       "slice", slice.call(arguments).join(",") );
-                       },
+               // If a normal DOM Ready event fired, decrement, and wait if need be
+               if ( wait !== true && --jQuery.readyWait > 0 ) {
+                       return;
+               }
 
-                       map: function( callback ) {
-                               return this.pushStack( jQuery.map(this, function( elem, i ) {
-                                       return callback.call( elem, i, elem );
-                               }));
-                       },
+               // If there are functions bound, to execute
+               readyList.resolveWith( document, [ jQuery ] );
 
-                       end: function() {
-                               return this.prevObject || this.constructor(null);
-                       },
+               // Trigger any bound ready events
+               if ( jQuery.fn.trigger ) {
+                       jQuery( document ).trigger("ready").off("ready");
+               }
+       },
+
+       // See test/unit/core.js for details concerning isFunction.
+       // Since version 1.3, DOM methods and functions like alert
+       // aren't supported. They return false on IE (#2968).
+       isFunction: function( obj ) {
+               return jQuery.type(obj) === "function";
+       },
+
+       isArray: Array.isArray || function( obj ) {
+               return jQuery.type(obj) === "array";
+       },
+
+       isWindow: function( obj ) {
+               return obj != null && obj == obj.window;
+       },
+
+       isNumeric: function( obj ) {
+               return !isNaN( parseFloat(obj) ) && isFinite( obj );
+       },
+
+       type: function( obj ) {
+               return obj == null ?
+                       String( obj ) :
+                       class2type[ core_toString.call(obj) ] || "object";
+       },
+
+       isPlainObject: function( obj ) {
+               // Must be an Object.
+               // Because of IE, we also have to check the presence of the constructor property.
+               // Make sure that DOM nodes and window objects don't pass through, as well
+               if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+                       return false;
+               }
 
-                       // For internal use only.
-                       // Behaves like an Array's method, not like a jQuery method.
-                       push: push,
-                       sort: [].sort,
-                       splice: [].splice
-               };
+               try {
+                       // Not own constructor property must be Object
+                       if ( obj.constructor &&
+                               !core_hasOwn.call(obj, "constructor") &&
+                               !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+                               return false;
+                       }
+               } catch ( e ) {
+                       // IE8,9 Will throw exceptions on certain host objects #9897
+                       return false;
+               }
 
-// Give the init function the jQuery prototype for later instantiation
-               jQuery.fn.init.prototype = jQuery.fn;
+               // Own properties are enumerated firstly, so to speed up,
+               // if last one is own, then all properties are own.
 
-               jQuery.extend = jQuery.fn.extend = function() {
-                       var options, name, src, copy, copyIsArray, clone,
-                               target = arguments[0] || {},
-                               i = 1,
-                               length = arguments.length,
-                               deep = false;
+               var key;
+               for ( key in obj ) {}
 
-                       // Handle a deep copy situation
-                       if ( typeof target === "boolean" ) {
-                               deep = target;
-                               target = arguments[1] || {};
-                               // skip the boolean and the target
-                               i = 2;
-                       }
+               return key === undefined || core_hasOwn.call( obj, key );
+       },
 
-                       // Handle case when target is a string or something (possible in deep copy)
-                       if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
-                               target = {};
-                       }
+       isEmptyObject: function( obj ) {
+               var name;
+               for ( name in obj ) {
+                       return false;
+               }
+               return true;
+       },
+
+       error: function( msg ) {
+               throw new Error( msg );
+       },
+
+       // data: string of html
+       // context (optional): If specified, the fragment will be created in this context, defaults to document
+       // scripts (optional): If true, will include scripts passed in the html string
+       parseHTML: function( data, context, scripts ) {
+               var parsed;
+               if ( !data || typeof data !== "string" ) {
+                       return null;
+               }
+               if ( typeof context === "boolean" ) {
+                       scripts = context;
+                       context = 0;
+               }
+               context = context || document;
 
-                       // extend jQuery itself if only one argument is passed
-                       if ( length === i ) {
-                               target = this;
-                               --i;
-                       }
+               // Single tag
+               if ( (parsed = rsingleTag.exec( data )) ) {
+                       return [ context.createElement( parsed[1] ) ];
+               }
 
-                       for ( ; i < length; i++ ) {
-                               // Only deal with non-null/undefined values
-                               if ( (options = arguments[ i ]) != null ) {
-                                       // Extend the base object
-                                       for ( name in options ) {
-                                               src = target[ name ];
-                                               copy = options[ name ];
-
-                                               // Prevent never-ending loop
-                                               if ( target === copy ) {
-                                                       continue;
-                                               }
+               parsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] );
+               return jQuery.merge( [],
+                       (parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes );
+       },
 
-                                               // Recurse if we're merging plain objects or arrays
-                                               if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
-                                                       if ( copyIsArray ) {
-                                                               copyIsArray = false;
-                                                               clone = src && jQuery.isArray(src) ? src : [];
+       parseJSON: function( data ) {
+               if ( !data || typeof data !== "string") {
+                       return null;
+               }
 
-                                                       } else {
-                                                               clone = src && jQuery.isPlainObject(src) ? src : {};
-                                                       }
+               // Make sure leading/trailing whitespace is removed (IE can't handle it)
+               data = jQuery.trim( data );
 
-                                                       // Never move original objects, clone them
-                                                       target[ name ] = jQuery.extend( deep, clone, copy );
+               // Attempt to parse using the native JSON parser first
+               if ( window.JSON && window.JSON.parse ) {
+                       return window.JSON.parse( data );
+               }
 
-                                                       // Don't bring in undefined values
-                                               } else if ( copy !== undefined ) {
-                                                       target[ name ] = copy;
-                                               }
-                                       }
-                               }
-                       }
+               // Make sure the incoming data is actual JSON
+               // Logic borrowed from http://json.org/json2.js
+               if ( rvalidchars.test( data.replace( rvalidescape, "@" )
+                       .replace( rvalidtokens, "]" )
+                       .replace( rvalidbraces, "")) ) {
 
-                       // Return the modified object
-                       return target;
-               };
+                       return ( new Function( "return " + data ) )();
 
-               jQuery.extend({
-                       noConflict: function( deep ) {
-                               if ( window.$ === jQuery ) {
-                                       window.$ = _$;
-                               }
+               }
+               jQuery.error( "Invalid JSON: " + data );
+       },
 
-                               if ( deep && window.jQuery === jQuery ) {
-                                       window.jQuery = _jQuery;
-                               }
+       // Cross-browser xml parsing
+       parseXML: function( data ) {
+               var xml, tmp;
+               if ( !data || typeof data !== "string" ) {
+                       return null;
+               }
+               try {
+                       if ( window.DOMParser ) { // Standard
+                               tmp = new DOMParser();
+                               xml = tmp.parseFromString( data , "text/xml" );
+                       } else { // IE
+                               xml = new ActiveXObject( "Microsoft.XMLDOM" );
+                               xml.async = "false";
+                               xml.loadXML( data );
+                       }
+               } catch( e ) {
+                       xml = undefined;
+               }
+               if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+                       jQuery.error( "Invalid XML: " + data );
+               }
+               return xml;
+       },
+
+       noop: function() {},
+
+       // Evaluates a script in a global context
+       // Workarounds based on findings by Jim Driscoll
+       // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+       globalEval: function( data ) {
+               if ( data && core_rnotwhite.test( data ) ) {
+                       // We use execScript on Internet Explorer
+                       // We use an anonymous function so that context is window
+                       // rather than jQuery in Firefox
+                       ( window.execScript || function( data ) {
+                               window[ "eval" ].call( window, data );
+                       } )( data );
+               }
+       },
 
-                               return jQuery;
-                       },
+       // Convert dashed to camelCase; used by the css and data modules
+       // Microsoft forgot to hump their vendor prefix (#9572)
+       camelCase: function( string ) {
+               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+       },
 
-                       // Is the DOM ready to be used? Set to true once it occurs.
-                       isReady: false,
+       nodeName: function( elem, name ) {
+               return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+       },
 
-                       // A counter to track how many items to wait for before
-                       // the ready event fires. See #6781
-                       readyWait: 1,
+       // args is for internal usage only
+       each: function( obj, callback, args ) {
+               var name,
+                       i = 0,
+                       length = obj.length,
+                       isObj = length === undefined || jQuery.isFunction( obj );
 
-                       // Hold (or release) the ready event
-                       holdReady: function( hold ) {
-                               if ( hold ) {
-                                       jQuery.readyWait++;
-                               } else {
-                                       jQuery.ready( true );
+               if ( args ) {
+                       if ( isObj ) {
+                               for ( name in obj ) {
+                                       if ( callback.apply( obj[ name ], args ) === false ) {
+                                               break;
+                                       }
                                }
-                       },
-
-                       // Handle when the DOM is ready
-                       ready: function( wait ) {
-                               // Either a released hold or an DOMready/load event and not yet ready
-                               if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
-                                       // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-                                       if ( !document.body ) {
-                                               return setTimeout( jQuery.ready, 1 );
+                       } else {
+                               for ( ; i < length; ) {
+                                       if ( callback.apply( obj[ i++ ], args ) === false ) {
+                                               break;
                                        }
+                               }
+                       }
 
-                                       // Remember that the DOM is ready
-                                       jQuery.isReady = true;
-
-                                       // If a normal DOM Ready event fired, decrement, and wait if need be
-                                       if ( wait !== true && --jQuery.readyWait > 0 ) {
-                                               return;
+               // A special, fast, case for the most common use of each
+               } else {
+                       if ( isObj ) {
+                               for ( name in obj ) {
+                                       if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) {
+                                               break;
                                        }
-
-                                       // If there are functions bound, to execute
-                                       readyList.fireWith( document, [ jQuery ] );
-
-                                       // Trigger any bound ready events
-                                       if ( jQuery.fn.trigger ) {
-                                               jQuery( document ).trigger( "ready" ).off( "ready" );
+                               }
+                       } else {
+                               for ( ; i < length; ) {
+                                       if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {
+                                               break;
                                        }
                                }
-                       },
+                       }
+               }
 
-                       bindReady: function() {
-                               if ( readyList ) {
-                                       return;
-                               }
+               return obj;
+       },
+
+       // Use native String.trim function wherever possible
+       trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
+               function( text ) {
+                       return text == null ?
+                               "" :
+                               core_trim.call( text );
+               } :
 
-                               readyList = jQuery.Callbacks( "once memory" );
+               // Otherwise use our own trimming functionality
+               function( text ) {
+                       return text == null ?
+                               "" :
+                               text.toString().replace( rtrim, "" );
+               },
 
-                               // Catch cases where $(document).ready() is called after the
-                               // browser event has already occurred.
-                               if ( document.readyState === "complete" ) {
-                                       // Handle it asynchronously to allow scripts the opportunity to delay ready
-                                       return setTimeout( jQuery.ready, 1 );
-                               }
+       // results is for internal usage only
+       makeArray: function( arr, results ) {
+               var type,
+                       ret = results || [];
 
-                               // Mozilla, Opera and webkit nightlies currently support this event
-                               if ( document.addEventListener ) {
-                                       // Use the handy event callback
-                                       document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+               if ( arr != null ) {
+                       // The window, strings (and functions) also have 'length'
+                       // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+                       type = jQuery.type( arr );
 
-                                       // A fallback to window.onload, that will always work
-                                       window.addEventListener( "load", jQuery.ready, false );
+                       if ( arr.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( arr ) ) {
+                               core_push.call( ret, arr );
+                       } else {
+                               jQuery.merge( ret, arr );
+                       }
+               }
 
-                                       // If IE event model is used
-                               } else if ( document.attachEvent ) {
-                                       // ensure firing before onload,
-                                       // maybe late but safe also for iframes
-                                       document.attachEvent( "onreadystatechange", DOMContentLoaded );
+               return ret;
+       },
 
-                                       // A fallback to window.onload, that will always work
-                                       window.attachEvent( "onload", jQuery.ready );
+       inArray: function( elem, arr, i ) {
+               var len;
 
-                                       // If IE and not a frame
-                                       // continually check to see if the document is ready
-                                       var toplevel = false;
+               if ( arr ) {
+                       if ( core_indexOf ) {
+                               return core_indexOf.call( arr, elem, i );
+                       }
 
-                                       try {
-                                               toplevel = window.frameElement == null;
-                                       } catch(e) {}
+                       len = arr.length;
+                       i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
 
-                                       if ( document.documentElement.doScroll && toplevel ) {
-                                               doScrollCheck();
-                                       }
+                       for ( ; i < len; i++ ) {
+                               // Skip accessing in sparse arrays
+                               if ( i in arr && arr[ i ] === elem ) {
+                                       return i;
                                }
-                       },
-
-                       // See test/unit/core.js for details concerning isFunction.
-                       // Since version 1.3, DOM methods and functions like alert
-                       // aren't supported. They return false on IE (#2968).
-                       isFunction: function( obj ) {
-                               return jQuery.type(obj) === "function";
-                       },
+                       }
+               }
 
-                       isArray: Array.isArray || function( obj ) {
-                               return jQuery.type(obj) === "array";
-                       },
+               return -1;
+       },
 
-                       isWindow: function( obj ) {
-                               return obj != null && obj == obj.window;
-                       },
+       merge: function( first, second ) {
+               var l = second.length,
+                       i = first.length,
+                       j = 0;
 
-                       isNumeric: function( obj ) {
-                               return !isNaN( parseFloat(obj) ) && isFinite( obj );
-                       },
+               if ( typeof l === "number" ) {
+                       for ( ; j < l; j++ ) {
+                               first[ i++ ] = second[ j ];
+                       }
 
-                       type: function( obj ) {
-                               return obj == null ?
-                                       String( obj ) :
-                                       class2type[ toString.call(obj) ] || "object";
-                       },
+               } else {
+                       while ( second[j] !== undefined ) {
+                               first[ i++ ] = second[ j++ ];
+                       }
+               }
 
-                       isPlainObject: function( obj ) {
-                               // Must be an Object.
-                               // Because of IE, we also have to check the presence of the constructor property.
-                               // Make sure that DOM nodes and window objects don't pass through, as well
-                               if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
-                                       return false;
-                               }
+               first.length = i;
 
-                               try {
-                                       // Not own constructor property must be Object
-                                       if ( obj.constructor &&
-                                               !hasOwn.call(obj, "constructor") &&
-                                               !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
-                                               return false;
-                                       }
-                               } catch ( e ) {
-                                       // IE8,9 Will throw exceptions on certain host objects #9897
-                                       return false;
-                               }
+               return first;
+       },
 
-                               // Own properties are enumerated firstly, so to speed up,
-                               // if last one is own, then all properties are own.
+       grep: function( elems, callback, inv ) {
+               var retVal,
+                       ret = [],
+                       i = 0,
+                       length = elems.length;
+               inv = !!inv;
 
-                               var key;
-                               for ( key in obj ) {}
+               // Go through the array, only saving the items
+               // that pass the validator function
+               for ( ; i < length; i++ ) {
+                       retVal = !!callback( elems[ i ], i );
+                       if ( inv !== retVal ) {
+                               ret.push( elems[ i ] );
+                       }
+               }
 
-                               return key === undefined || hasOwn.call( obj, key );
-                       },
+               return ret;
+       },
 
-                       isEmptyObject: function( obj ) {
-                               for ( var name in obj ) {
-                                       return false;
-                               }
-                               return true;
-                       },
+       // arg is for internal usage only
+       map: function( elems, callback, arg ) {
+               var value, key,
+                       ret = [],
+                       i = 0,
+                       length = elems.length,
+                       // jquery objects are treated as arrays
+                       isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
 
-                       error: function( msg ) {
-                               throw new Error( msg );
-                       },
+               // Go through the array, translating each of the items to their
+               if ( isArray ) {
+                       for ( ; i < length; i++ ) {
+                               value = callback( elems[ i ], i, arg );
 
-                       parseJSON: function( data ) {
-                               if ( typeof data !== "string" || !data ) {
-                                       return null;
+                               if ( value != null ) {
+                                       ret[ ret.length ] = value;
                                }
+                       }
 
-                               // Make sure leading/trailing whitespace is removed (IE can't handle it)
-                               data = jQuery.trim( data );
+               // Go through every key on the object,
+               } else {
+                       for ( key in elems ) {
+                               value = callback( elems[ key ], key, arg );
 
-                               // Attempt to parse using the native JSON parser first
-                               if ( window.JSON && window.JSON.parse ) {
-                                       return window.JSON.parse( data );
+                               if ( value != null ) {
+                                       ret[ ret.length ] = value;
                                }
+                       }
+               }
 
-                               // Make sure the incoming data is actual JSON
-                               // Logic borrowed from http://json.org/json2.js
-                               if ( rvalidchars.test( data.replace( rvalidescape, "@" )
-                                       .replace( rvalidtokens, "]" )
-                                       .replace( rvalidbraces, "")) ) {
+               // Flatten any nested arrays
+               return ret.concat.apply( [], ret );
+       },
 
-                                       return ( new Function( "return " + data ) )();
+       // A global GUID counter for objects
+       guid: 1,
 
-                               }
-                               jQuery.error( "Invalid JSON: " + data );
-                       },
+       // Bind a function to a context, optionally partially applying any
+       // arguments.
+       proxy: function( fn, context ) {
+               var tmp, args, proxy;
 
-                       // Cross-browser xml parsing
-                       parseXML: function( data ) {
-                               if ( typeof data !== "string" || !data ) {
-                                       return null;
-                               }
-                               var xml, tmp;
-                               try {
-                                       if ( window.DOMParser ) { // Standard
-                                               tmp = new DOMParser();
-                                               xml = tmp.parseFromString( data , "text/xml" );
-                                       } else { // IE
-                                               xml = new ActiveXObject( "Microsoft.XMLDOM" );
-                                               xml.async = "false";
-                                               xml.loadXML( data );
-                                       }
-                               } catch( e ) {
-                                       xml = undefined;
-                               }
-                               if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
-                                       jQuery.error( "Invalid XML: " + data );
-                               }
-                               return xml;
-                       },
+               if ( typeof context === "string" ) {
+                       tmp = fn[ context ];
+                       context = fn;
+                       fn = tmp;
+               }
 
-                       noop: function() {},
-
-                       // Evaluates a script in a global context
-                       // Workarounds based on findings by Jim Driscoll
-                       // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
-                       globalEval: function( data ) {
-                               if ( data && rnotwhite.test( data ) ) {
-                                       // We use execScript on Internet Explorer
-                                       // We use an anonymous function so that context is window
-                                       // rather than jQuery in Firefox
-                                       ( window.execScript || function( data ) {
-                                               window[ "eval" ].call( window, data );
-                                       } )( data );
-                               }
-                       },
+               // Quick check to determine if target is callable, in the spec
+               // this throws a TypeError, but we will just return undefined.
+               if ( !jQuery.isFunction( fn ) ) {
+                       return undefined;
+               }
 
-                       // Convert dashed to camelCase; used by the css and data modules
-                       // Microsoft forgot to hump their vendor prefix (#9572)
-                       camelCase: function( string ) {
-                               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
-                       },
+               // Simulated bind
+               args = core_slice.call( arguments, 2 );
+               proxy = function() {
+                       return fn.apply( context, args.concat( core_slice.call( arguments ) ) );
+               };
 
-                       nodeName: function( elem, name ) {
-                               return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
-                       },
+               // Set the guid of unique handler to the same of original handler, so it can be removed
+               proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
 
-                       // args is for internal usage only
-                       each: function( object, callback, args ) {
-                               var name, i = 0,
-                                       length = object.length,
-                                       isObj = length === undefined || jQuery.isFunction( object );
+               return proxy;
+       },
 
-                               if ( args ) {
-                                       if ( isObj ) {
-                                               for ( name in object ) {
-                                                       if ( callback.apply( object[ name ], args ) === false ) {
-                                                               break;
-                                                       }
-                                               }
-                                       } else {
-                                               for ( ; i < length; ) {
-                                                       if ( callback.apply( object[ i++ ], args ) === false ) {
-                                                               break;
-                                                       }
-                                               }
-                                       }
+       // Multifunctional method to get and set values of a collection
+       // The value/s can optionally be executed if it's a function
+       access: function( elems, fn, key, value, chainable, emptyGet, pass ) {
+               var exec,
+                       bulk = key == null,
+                       i = 0,
+                       length = elems.length;
+
+               // Sets many values
+               if ( key && typeof key === "object" ) {
+                       for ( i in key ) {
+                               jQuery.access( elems, fn, i, key[i], 1, emptyGet, value );
+                       }
+                       chainable = 1;
+
+               // Sets one value
+               } else if ( value !== undefined ) {
+                       // Optionally, function values get executed if exec is true
+                       exec = pass === undefined && jQuery.isFunction( value );
+
+                       if ( bulk ) {
+                               // Bulk operations only iterate when executing function values
+                               if ( exec ) {
+                                       exec = fn;
+                                       fn = function( elem, key, value ) {
+                                               return exec.call( jQuery( elem ), value );
+                                       };
 
-                                       // A special, fast, case for the most common use of each
+                               // Otherwise they run against the entire set
                                } else {
-                                       if ( isObj ) {
-                                               for ( name in object ) {
-                                                       if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
-                                                               break;
-                                                       }
-                                               }
-                                       } else {
-                                               for ( ; i < length; ) {
-                                                       if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
-                                                               break;
-                                                       }
-                                               }
-                                       }
+                                       fn.call( elems, value );
+                                       fn = null;
                                }
+                       }
 
-                               return object;
-                       },
+                       if ( fn ) {
+                               for (; i < length; i++ ) {
+                                       fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+                               }
+                       }
 
-                       // Use native String.trim function wherever possible
-                       trim: trim ?
-                               function( text ) {
-                                       return text == null ?
-                                               "" :
-                                               trim.call( text );
-                               } :
-
-                               // Otherwise use our own trimming functionality
-                               function( text ) {
-                                       return text == null ?
-                                               "" :
-                                               text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
-                               },
+                       chainable = 1;
+               }
 
-                       // results is for internal usage only
-                       makeArray: function( array, results ) {
-                               var ret = results || [];
+               return chainable ?
+                       elems :
 
-                               if ( array != null ) {
-                                       // The window, strings (and functions) also have 'length'
-                                       // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
-                                       var type = jQuery.type( array );
+                       // Gets
+                       bulk ?
+                               fn.call( elems ) :
+                               length ? fn( elems[0], key ) : emptyGet;
+       },
 
-                                       if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
-                                               push.call( ret, array );
-                                       } else {
-                                               jQuery.merge( ret, array );
-                                       }
-                               }
+       now: function() {
+               return ( new Date() ).getTime();
+       }
+});
 
-                               return ret;
-                       },
+jQuery.ready.promise = function( obj ) {
+       if ( !readyList ) {
 
-                       inArray: function( elem, array, i ) {
-                               var len;
+               readyList = jQuery.Deferred();
 
-                               if ( array ) {
-                                       if ( indexOf ) {
-                                               return indexOf.call( array, elem, i );
-                                       }
+               // Catch cases where $(document).ready() is called after the browser event has already occurred.
+               // we once tried to use readyState "interactive" here, but it caused issues like the one
+               // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+               if ( document.readyState === "complete" ) {
+                       // Handle it asynchronously to allow scripts the opportunity to delay ready
+                       setTimeout( jQuery.ready, 1 );
 
-                                       len = array.length;
-                                       i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+               // Standards-based browsers support DOMContentLoaded
+               } else if ( document.addEventListener ) {
+                       // Use the handy event callback
+                       document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
 
-                                       for ( ; i < len; i++ ) {
-                                               // Skip accessing in sparse arrays
-                                               if ( i in array && array[ i ] === elem ) {
-                                                       return i;
-                                               }
-                                       }
-                               }
+                       // A fallback to window.onload, that will always work
+                       window.addEventListener( "load", jQuery.ready, false );
 
-                               return -1;
-                       },
+               // If IE event model is used
+               } else {
+                       // Ensure firing before onload, maybe late but safe also for iframes
+                       document.attachEvent( "onreadystatechange", DOMContentLoaded );
 
-                       merge: function( first, second ) {
-                               var i = first.length,
-                                       j = 0;
+                       // A fallback to window.onload, that will always work
+                       window.attachEvent( "onload", jQuery.ready );
 
-                               if ( typeof second.length === "number" ) {
-                                       for ( var l = second.length; j < l; j++ ) {
-                                               first[ i++ ] = second[ j ];
-                                       }
+                       // If IE and not a frame
+                       // continually check to see if the document is ready
+                       var top = false;
 
-                               } else {
-                                       while ( second[j] !== undefined ) {
-                                               first[ i++ ] = second[ j++ ];
-                                       }
-                               }
-
-                               first.length = i;
-
-                               return first;
-                       },
-
-                       grep: function( elems, callback, inv ) {
-                               var ret = [], retVal;
-                               inv = !!inv;
-
-                               // Go through the array, only saving the items
-                               // that pass the validator function
-                               for ( var i = 0, length = elems.length; i < length; i++ ) {
-                                       retVal = !!callback( elems[ i ], i );
-                                       if ( inv !== retVal ) {
-                                               ret.push( elems[ i ] );
-                                       }
-                               }
-
-                               return ret;
-                       },
-
-                       // arg is for internal usage only
-                       map: function( elems, callback, arg ) {
-                               var value, key, ret = [],
-                                       i = 0,
-                                       length = elems.length,
-                               // jquery objects are treated as arrays
-                                       isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
-
-                               // Go through the array, translating each of the items to their
-                               if ( isArray ) {
-                                       for ( ; i < length; i++ ) {
-                                               value = callback( elems[ i ], i, arg );
-
-                                               if ( value != null ) {
-                                                       ret[ ret.length ] = value;
-                                               }
-                                       }
-
-                                       // Go through every key on the object,
-                               } else {
-                                       for ( key in elems ) {
-                                               value = callback( elems[ key ], key, arg );
-
-                                               if ( value != null ) {
-                                                       ret[ ret.length ] = value;
-                                               }
-                                       }
-                               }
-
-                               // Flatten any nested arrays
-                               return ret.concat.apply( [], ret );
-                       },
-
-                       // A global GUID counter for objects
-                       guid: 1,
-
-                       // Bind a function to a context, optionally partially applying any
-                       // arguments.
-                       proxy: function( fn, context ) {
-                               if ( typeof context === "string" ) {
-                                       var tmp = fn[ context ];
-                                       context = fn;
-                                       fn = tmp;
-                               }
-
-                               // Quick check to determine if target is callable, in the spec
-                               // this throws a TypeError, but we will just return undefined.
-                               if ( !jQuery.isFunction( fn ) ) {
-                                       return undefined;
-                               }
-
-                               // Simulated bind
-                               var args = slice.call( arguments, 2 ),
-                                       proxy = function() {
-                                               return fn.apply( context, args.concat( slice.call( arguments ) ) );
-                                       };
-
-                               // Set the guid of unique handler to the same of original handler, so it can be removed
-                               proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
-
-                               return proxy;
-                       },
-
-                       // Mutifunctional method to get and set values to a collection
-                       // The value/s can optionally be executed if it's a function
-                       access: function( elems, fn, key, value, chainable, emptyGet, pass ) {
-                               var exec,
-                                       bulk = key == null,
-                                       i = 0,
-                                       length = elems.length;
+                       try {
+                               top = window.frameElement == null && document.documentElement;
+                       } catch(e) {}
 
-                               // Sets many values
-                               if ( key && typeof key === "object" ) {
-                                       for ( i in key ) {
-                                               jQuery.access( elems, fn, i, key[i], 1, emptyGet, value );
-                                       }
-                                       chainable = 1;
-
-                                       // Sets one value
-                               } else if ( value !== undefined ) {
-                                       // Optionally, function values get executed if exec is true
-                                       exec = pass === undefined && jQuery.isFunction( value );
-
-                                       if ( bulk ) {
-                                               // Bulk operations only iterate when executing function values
-                                               if ( exec ) {
-                                                       exec = fn;
-                                                       fn = function( elem, key, value ) {
-                                                               return exec.call( jQuery( elem ), value );
-                                                       };
-
-                                                       // Otherwise they run against the entire set
-                                               } else {
-                                                       fn.call( elems, value );
-                                                       fn = null;
-                                               }
-                                       }
+                       if ( top && top.doScroll ) {
+                               (function doScrollCheck() {
+                                       if ( !jQuery.isReady ) {
 
-                                       if ( fn ) {
-                                               for (; i < length; i++ ) {
-                                                       fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+                                               try {
+                                                       // Use the trick by Diego Perini
+                                                       // http://javascript.nwbox.com/IEContentLoaded/
+                                                       top.doScroll("left");
+                                               } catch(e) {
+                                                       return setTimeout( doScrollCheck, 50 );
                                                }
-                                       }
-
-                                       chainable = 1;
-                               }
-
-                               return chainable ?
-                                       elems :
-
-                                       // Gets
-                                       bulk ?
-                                               fn.call( elems ) :
-                                               length ? fn( elems[0], key ) : emptyGet;
-                       },
-
-                       now: function() {
-                               return ( new Date() ).getTime();
-                       },
-
-                       // Use of jQuery.browser is frowned upon.
-                       // More details: http://docs.jquery.com/Utilities/jQuery.browser
-                       uaMatch: function( ua ) {
-                               ua = ua.toLowerCase();
-
-                               var match = rwebkit.exec( ua ) ||
-                                       ropera.exec( ua ) ||
-                                       rmsie.exec( ua ) ||
-                                       ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
-                                       [];
 
-                               return { browser: match[1] || "", version: match[2] || "0" };
-                       },
-
-                       sub: function() {
-                               function jQuerySub( selector, context ) {
-                                       return new jQuerySub.fn.init( selector, context );
-                               }
-                               jQuery.extend( true, jQuerySub, this );
-                               jQuerySub.superclass = this;
-                               jQuerySub.fn = jQuerySub.prototype = this();
-                               jQuerySub.fn.constructor = jQuerySub;
-                               jQuerySub.sub = this.sub;
-                               jQuerySub.fn.init = function init( selector, context ) {
-                                       if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
-                                               context = jQuerySub( context );
+                                               // and execute any waiting functions
+                                               jQuery.ready();
                                        }
-
-                                       return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
-                               };
-                               jQuerySub.fn.init.prototype = jQuerySub.fn;
-                               var rootjQuerySub = jQuerySub(document);
-                               return jQuerySub;
-                       },
-
-                       browser: {}
-               });
-
-// Populate the class2type map
-               jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
-                       class2type[ "[object " + name + "]" ] = name.toLowerCase();
-               });
-
-               browserMatch = jQuery.uaMatch( userAgent );
-               if ( browserMatch.browser ) {
-                       jQuery.browser[ browserMatch.browser ] = true;
-                       jQuery.browser.version = browserMatch.version;
-               }
-
-// Deprecated, use jQuery.browser.webkit instead
-               if ( jQuery.browser.webkit ) {
-                       jQuery.browser.safari = true;
-               }
-
-// IE doesn't match non-breaking spaces with \s
-               if ( rnotwhite.test( "\xA0" ) ) {
-                       trimLeft = /^[\s\xA0]+/;
-                       trimRight = /[\s\xA0]+$/;
-               }
-
-// All jQuery objects should point back to these
-               rootjQuery = jQuery(document);
-
-// Cleanup functions for the document ready method
-               if ( document.addEventListener ) {
-                       DOMContentLoaded = function() {
-                               document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-                               jQuery.ready();
-                       };
-
-               } else if ( document.attachEvent ) {
-                       DOMContentLoaded = function() {
-                               // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-                               if ( document.readyState === "complete" ) {
-                                       document.detachEvent( "onreadystatechange", DOMContentLoaded );
-                                       jQuery.ready();
-                               }
-                       };
-               }
-
-// The DOM ready check for Internet Explorer
-               function doScrollCheck() {
-                       if ( jQuery.isReady ) {
-                               return;
-                       }
-
-                       try {
-                               // If IE is used, use the trick by Diego Perini
-                               // http://javascript.nwbox.com/IEContentLoaded/
-                               document.documentElement.doScroll("left");
-                       } catch(e) {
-                               setTimeout( doScrollCheck, 1 );
-                               return;
+                               })();
                        }
-
-                       // and execute any waiting functions
-                       jQuery.ready();
                }
+       }
+       return readyList.promise( obj );
+};
 
-               return jQuery;
-
-       })();
-
-
-// String to Object flags format cache
-       var flagsCache = {};
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+       class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
 
-// Convert String-formatted flags into Object-formatted ones and store in cache
-       function createFlags( flags ) {
-               var object = flagsCache[ flags ] = {},
-                       i, length;
-               flags = flags.split( /\s+/ );
-               for ( i = 0, length = flags.length; i < length; i++ ) {
-                       object[ flags[i] ] = true;
-               }
-               return object;
-       }
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+// String to Object options format cache
+var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+function createOptions( options ) {
+       var object = optionsCache[ options ] = {};
+       jQuery.each( options.split( core_rspace ), function( _, flag ) {
+               object[ flag ] = true;
+       });
+       return object;
+}
 
-       /*
       * Create a callback list using the following parameters:
       *
       *      flags:  an optional list of space-separated flags that will change how
-        *                      the callback list behaves
       *
       * By default a callback list will act like an event callback list and can be
       * "fired" multiple times.
       *
       * Possible flags:
       *
       *      once:                   will ensure the callback list can only be fired once (like a Deferred)
       *
       *      memory:                 will keep track of previous values and will call any callback added
       *                                      after the list has been fired right away with the latest "memorized"
       *                                      values (like a Deferred)
       *
       *      unique:                 will ensure a callback can only be added once (no duplicate in the list)
       *
       *      stopOnFalse:    interrupt callings when a callback returns false
       *
       */
-       jQuery.Callbacks = function( flags ) {
+/*
+ * Create a callback list using the following parameters:
+ *
*     options: an optional list of space-separated options that will change how
+ *                     the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
* Possible options:
+ *
*     once:                   will ensure the callback list can only be fired once (like a Deferred)
+ *
*     memory:                 will keep track of previous values and will call any callback added
*                                     after the list has been fired right away with the latest "memorized"
*                                     values (like a Deferred)
+ *
*     unique:                 will ensure a callback can only be added once (no duplicate in the list)
+ *
*     stopOnFalse:    interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
 
-               // Convert flags from String-formatted to Object-formatted
-               // (we check in cache first)
-               flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
+       // Convert options from String-formatted to Object-formatted if needed
+       // (we check in cache first)
+       options = typeof options === "string" ?
+               ( optionsCache[ options ] || createOptions( options ) ) :
+               jQuery.extend( {}, options );
 
-               var // Actual callback list
-                       list = [],
-               // Stack of fire calls for repeatable lists
-                       stack = [],
-               // Last fire value (for non-forgettable lists)
-                       memory,
+       var // Last fire value (for non-forgettable lists)
+               memory,
                // Flag to know if list was already fired
-                       fired,
+               fired,
                // Flag to know if list is currently firing
-                       firing,
+               firing,
                // First callback to fire (used internally by add and fireWith)
-                       firingStart,
+               firingStart,
                // End of the loop when firing
-                       firingLength,
+               firingLength,
                // Index of currently firing callback (modified by remove if needed)
-                       firingIndex,
-               // Add one or several callbacks to the list
-                       add = function( args ) {
-                               var i,
-                                       length,
-                                       elem,
-                                       type,
-                                       actual;
-                               for ( i = 0, length = args.length; i < length; i++ ) {
-                                       elem = args[ i ];
-                                       type = jQuery.type( elem );
-                                       if ( type === "array" ) {
-                                               // Inspect recursively
-                                               add( elem );
-                                       } else if ( type === "function" ) {
-                                               // Add if not in unique mode and callback is not in
-                                               if ( !flags.unique || !self.has( elem ) ) {
-                                                       list.push( elem );
-                                               }
-                                       }
-                               }
-                       },
+               firingIndex,
+               // Actual callback list
+               list = [],
+               // Stack of fire calls for repeatable lists
+               stack = !options.once && [],
                // Fire callbacks
-                       fire = function( context, args ) {
-                               args = args || [];
-                               memory = !flags.memory || [ context, args ];
-                               fired = true;
-                               firing = true;
-                               firingIndex = firingStart || 0;
-                               firingStart = 0;
-                               firingLength = list.length;
-                               for ( ; list && firingIndex < firingLength; firingIndex++ ) {
-                                       if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
-                                               memory = true; // Mark as halted
-                                               break;
+               fire = function( data ) {
+                       memory = options.memory && data;
+                       fired = true;
+                       firingIndex = firingStart || 0;
+                       firingStart = 0;
+                       firingLength = list.length;
+                       firing = true;
+                       for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+                               if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+                                       memory = false; // To prevent further calls using add
+                                       break;
+                               }
+                       }
+                       firing = false;
+                       if ( list ) {
+                               if ( stack ) {
+                                       if ( stack.length ) {
+                                               fire( stack.shift() );
                                        }
+                               } else if ( memory ) {
+                                       list = [];
+                               } else {
+                                       self.disable();
                                }
-                               firing = false;
+                       }
+               },
+               // Actual Callbacks object
+               self = {
+                       // Add a callback or a collection of callbacks to the list
+                       add: function() {
                                if ( list ) {
-                                       if ( !flags.once ) {
-                                               if ( stack && stack.length ) {
-                                                       memory = stack.shift();
-                                                       self.fireWith( memory[ 0 ], memory[ 1 ] );
-                                               }
-                                       } else if ( memory === true ) {
-                                               self.disable();
-                                       } else {
-                                               list = [];
+                                       // First, we save the current length
+                                       var start = list.length;
+                                       (function add( args ) {
+                                               jQuery.each( args, function( _, arg ) {
+                                                       var type = jQuery.type( arg );
+                                                       if ( type === "function" && ( !options.unique || !self.has( arg ) ) ) {
+                                                               list.push( arg );
+                                                       } else if ( arg && arg.length && type !== "string" ) {
+                                                               // Inspect recursively
+                                                               add( arg );
+                                                       }
+                                               });
+                                       })( arguments );
+                                       // Do we need to add the callbacks to the
+                                       // current firing batch?
+                                       if ( firing ) {
+                                               firingLength = list.length;
+                                       // With memory, if we're not firing then
+                                       // we should call right away
+                                       } else if ( memory ) {
+                                               firingStart = start;
+                                               fire( memory );
                                        }
                                }
+                               return this;
                        },
-               // Actual Callbacks object
-                       self = {
-                               // Add a callback or a collection of callbacks to the list
-                               add: function() {
-                                       if ( list ) {
-                                               var length = list.length;
-                                               add( arguments );
-                                               // Do we need to add the callbacks to the
-                                               // current firing batch?
-                                               if ( firing ) {
-                                                       firingLength = list.length;
-                                                       // With memory, if we're not firing then
-                                                       // we should call right away, unless previous
-                                                       // firing was halted (stopOnFalse)
-                                               } else if ( memory && memory !== true ) {
-                                                       firingStart = length;
-                                                       fire( memory[ 0 ], memory[ 1 ] );
-                                               }
-                                       }
-                                       return this;
-                               },
-                               // Remove a callback from the list
-                               remove: function() {
-                                       if ( list ) {
-                                               var args = arguments,
-                                                       argIndex = 0,
-                                                       argLength = args.length;
-                                               for ( ; argIndex < argLength ; argIndex++ ) {
-                                                       for ( var i = 0; i < list.length; i++ ) {
-                                                               if ( args[ argIndex ] === list[ i ] ) {
-                                                                       // Handle firingIndex and firingLength
-                                                                       if ( firing ) {
-                                                                               if ( i <= firingLength ) {
-                                                                                       firingLength--;
-                                                                                       if ( i <= firingIndex ) {
-                                                                                               firingIndex--;
-                                                                                       }
-                                                                               }
-                                                                       }
-                                                                       // Remove the element
-                                                                       list.splice( i--, 1 );
-                                                                       // If we have some unicity property then
-                                                                       // we only need to do this once
-                                                                       if ( flags.unique ) {
-                                                                               break;
-                                                                       }
+                       // Remove a callback from the list
+                       remove: function() {
+                               if ( list ) {
+                                       jQuery.each( arguments, function( _, arg ) {
+                                               var index;
+                                               while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+                                                       list.splice( index, 1 );
+                                                       // Handle firing indexes
+                                                       if ( firing ) {
+                                                               if ( index <= firingLength ) {
+                                                                       firingLength--;
+                                                               }
+                                                               if ( index <= firingIndex ) {
+                                                                       firingIndex--;
                                                                }
                                                        }
                                                }
+                                       });
+                               }
+                               return this;
+                       },
+                       // Control if a given callback is in the list
+                       has: function( fn ) {
+                               return jQuery.inArray( fn, list ) > -1;
+                       },
+                       // Remove all callbacks from the list
+                       empty: function() {
+                               list = [];
+                               return this;
+                       },
+                       // Have the list do nothing anymore
+                       disable: function() {
+                               list = stack = memory = undefined;
+                               return this;
+                       },
+                       // Is it disabled?
+                       disabled: function() {
+                               return !list;
+                       },
+                       // Lock the list in its current state
+                       lock: function() {
+                               stack = undefined;
+                               if ( !memory ) {
+                                       self.disable();
+                               }
+                               return this;
+                       },
+                       // Is it locked?
+                       locked: function() {
+                               return !stack;
+                       },
+                       // Call all callbacks with the given context and arguments
+                       fireWith: function( context, args ) {
+                               args = args || [];
+                               args = [ context, args.slice ? args.slice() : args ];
+                               if ( list && ( !fired || stack ) ) {
+                                       if ( firing ) {
+                                               stack.push( args );
+                                       } else {
+                                               fire( args );
                                        }
-                                       return this;
-                               },
-                               // Control if a given callback is in the list
-                               has: function( fn ) {
-                                       if ( list ) {
-                                               var i = 0,
-                                                       length = list.length;
-                                               for ( ; i < length; i++ ) {
-                                                       if ( fn === list[ i ] ) {
-                                                               return true;
-                                                       }
-                                               }
-                                       }
-                                       return false;
-                               },
-                               // Remove all callbacks from the list
-                               empty: function() {
-                                       list = [];
-                                       return this;
-                               },
-                               // Have the list do nothing anymore
-                               disable: function() {
-                                       list = stack = memory = undefined;
-                                       return this;
-                               },
-                               // Is it disabled?
-                               disabled: function() {
-                                       return !list;
-                               },
-                               // Lock the list in its current state
-                               lock: function() {
-                                       stack = undefined;
-                                       if ( !memory || memory === true ) {
-                                               self.disable();
-                                       }
-                                       return this;
-                               },
-                               // Is it locked?
-                               locked: function() {
-                                       return !stack;
+                               }
+                               return this;
+                       },
+                       // Call all the callbacks with the given arguments
+                       fire: function() {
+                               self.fireWith( this, arguments );
+                               return this;
+                       },
+                       // To know if the callbacks have already been called at least once
+                       fired: function() {
+                               return !!fired;
+                       }
+               };
+
+       return self;
+};
+jQuery.extend({
+
+       Deferred: function( func ) {
+               var tuples = [
+                               // action, add listener, listener list, final state
+                               [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+                               [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+                               [ "notify", "progress", jQuery.Callbacks("memory") ]
+                       ],
+                       state = "pending",
+                       promise = {
+                               state: function() {
+                                       return state;
                                },
-                               // Call all callbacks with the given context and arguments
-                               fireWith: function( context, args ) {
-                                       if ( stack ) {
-                                               if ( firing ) {
-                                                       if ( !flags.once ) {
-                                                               stack.push( [ context, args ] );
-                                                       }
-                                               } else if ( !( flags.once && memory ) ) {
-                                                       fire( context, args );
-                                               }
-                                       }
+                               always: function() {
+                                       deferred.done( arguments ).fail( arguments );
                                        return this;
                                },
-                               // Call all the callbacks with the given arguments
-                               fire: function() {
-                                       self.fireWith( this, arguments );
-                                       return this;
+                               then: function( /* fnDone, fnFail, fnProgress */ ) {
+                                       var fns = arguments;
+                                       return jQuery.Deferred(function( newDefer ) {
+                                               jQuery.each( tuples, function( i, tuple ) {
+                                                       var action = tuple[ 0 ],
+                                                               fn = fns[ i ];
+                                                       // deferred[ done | fail | progress ] for forwarding actions to newDefer
+                                                       deferred[ tuple[1] ]( jQuery.isFunction( fn ) ?
+                                                               function() {
+                                                                       var returned = fn.apply( this, arguments );
+                                                                       if ( returned && jQuery.isFunction( returned.promise ) ) {
+                                                                               returned.promise()
+                                                                                       .done( newDefer.resolve )
+                                                                                       .fail( newDefer.reject )
+                                                                                       .progress( newDefer.notify );
+                                                                       } else {
+                                                                               newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
+                                                                       }
+                                                               } :
+                                                               newDefer[ action ]
+                                                       );
+                                               });
+                                               fns = null;
+                                       }).promise();
                                },
-                               // To know if the callbacks have already been called at least once
-                               fired: function() {
-                                       return !!fired;
+                               // Get a promise for this deferred
+                               // If obj is provided, the promise aspect is added to the object
+                               promise: function( obj ) {
+                                       return typeof obj === "object" ? jQuery.extend( obj, promise ) : promise;
                                }
-                       };
+                       },
+                       deferred = {};
 
-               return self;
-       };
+               // Keep pipe for back-compat
+               promise.pipe = promise.then;
 
+               // Add list-specific methods
+               jQuery.each( tuples, function( i, tuple ) {
+                       var list = tuple[ 2 ],
+                               stateString = tuple[ 3 ];
 
+                       // promise[ done | fail | progress ] = list.add
+                       promise[ tuple[1] ] = list.add;
+
+                       // Handle state
+                       if ( stateString ) {
+                               list.add(function() {
+                                       // state = [ resolved | rejected ]
+                                       state = stateString;
 
+                               // [ reject_list | resolve_list ].disable; progress_list.lock
+                               }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+                       }
 
-       var // Static reference to slice
-               sliceDeferred = [].slice;
+                       // deferred[ resolve | reject | notify ] = list.fire
+                       deferred[ tuple[0] ] = list.fire;
+                       deferred[ tuple[0] + "With" ] = list.fireWith;
+               });
 
-       jQuery.extend({
+               // Make the deferred a promise
+               promise.promise( deferred );
 
-               Deferred: function( func ) {
-                       var doneList = jQuery.Callbacks( "once memory" ),
-                               failList = jQuery.Callbacks( "once memory" ),
-                               progressList = jQuery.Callbacks( "memory" ),
-                               state = "pending",
-                               lists = {
-                                       resolve: doneList,
-                                       reject: failList,
-                                       notify: progressList
-                               },
-                               promise = {
-                                       done: doneList.add,
-                                       fail: failList.add,
-                                       progress: progressList.add,
-
-                                       state: function() {
-                                               return state;
-                                       },
-
-                                       // Deprecated
-                                       isResolved: doneList.fired,
-                                       isRejected: failList.fired,
-
-                                       then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
-                                               deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
-                                               return this;
-                                       },
-                                       always: function() {
-                                               deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
-                                               return this;
-                                       },
-                                       pipe: function( fnDone, fnFail, fnProgress ) {
-                                               return jQuery.Deferred(function( newDefer ) {
-                                                       jQuery.each( {
-                                                               done: [ fnDone, "resolve" ],
-                                                               fail: [ fnFail, "reject" ],
-                                                               progress: [ fnProgress, "notify" ]
-                                                       }, function( handler, data ) {
-                                                               var fn = data[ 0 ],
-                                                                       action = data[ 1 ],
-                                                                       returned;
-                                                               if ( jQuery.isFunction( fn ) ) {
-                                                                       deferred[ handler ](function() {
-                                                                               returned = fn.apply( this, arguments );
-                                                                               if ( returned && jQuery.isFunction( returned.promise ) ) {
-                                                                                       returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
-                                                                               } else {
-                                                                                       newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
-                                                                               }
-                                                                       });
-                                                               } else {
-                                                                       deferred[ handler ]( newDefer[ action ] );
-                                                               }
-                                                       });
-                                               }).promise();
-                                       },
-                                       // Get a promise for this deferred
-                                       // If obj is provided, the promise aspect is added to the object
-                                       promise: function( obj ) {
-                                               if ( obj == null ) {
-                                                       obj = promise;
-                                               } else {
-                                                       for ( var key in promise ) {
-                                                               obj[ key ] = promise[ key ];
-                                                       }
-                                               }
-                                               return obj;
-                                       }
-                               },
-                               deferred = promise.promise({}),
-                               key;
+               // Call given func if any
+               if ( func ) {
+                       func.call( deferred, deferred );
+               }
 
-                       for ( key in lists ) {
-                               deferred[ key ] = lists[ key ].fire;
-                               deferred[ key + "With" ] = lists[ key ].fireWith;
-                       }
+               // All done!
+               return deferred;
+       },
 
-                       // Handle state
-                       deferred.done( function() {
-                               state = "resolved";
-                       }, failList.disable, progressList.lock ).fail( function() {
-                                       state = "rejected";
-                               }, doneList.disable, progressList.lock );
+       // Deferred helper
+       when: function( subordinate /* , ..., subordinateN */ ) {
+               var i = 0,
+                       resolveValues = core_slice.call( arguments ),
+                       length = resolveValues.length,
 
-                       // Call given func if any
-                       if ( func ) {
-                               func.call( deferred, deferred );
-                       }
+                       // the count of uncompleted subordinates
+                       remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
 
-                       // All done!
-                       return deferred;
-               },
+                       // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+                       deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
 
-               // Deferred helper
-               when: function( firstParam ) {
-                       var args = sliceDeferred.call( arguments, 0 ),
-                               i = 0,
-                               length = args.length,
-                               pValues = new Array( length ),
-                               count = length,
-                               pCount = length,
-                               deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
-                                       firstParam :
-                                       jQuery.Deferred(),
-                               promise = deferred.promise();
-                       function resolveFunc( i ) {
+                       // Update function for both resolve and progress values
+                       updateFunc = function( i, contexts, values ) {
                                return function( value ) {
-                                       args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
-                                       if ( !( --count ) ) {
-                                               deferred.resolveWith( deferred, args );
+                                       contexts[ i ] = this;
+                                       values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
+                                       if( values === progressValues ) {
+                                               deferred.notifyWith( contexts, values );
+                                       } else if ( !( --remaining ) ) {
+                                               deferred.resolveWith( contexts, values );
                                        }
                                };
-                       }
-                       function progressFunc( i ) {
-                               return function( value ) {
-                                       pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
-                                       deferred.notifyWith( promise, pValues );
-                               };
-                       }
-                       if ( length > 1 ) {
-                               for ( ; i < length; i++ ) {
-                                       if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
-                                               args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
-                                       } else {
-                                               --count;
-                                       }
-                               }
-                               if ( !count ) {
-                                       deferred.resolveWith( deferred, args );
+                       },
+
+                       progressValues, progressContexts, resolveContexts;
+
+               // add listeners to Deferred subordinates; treat others as resolved
+               if ( length > 1 ) {
+                       progressValues = new Array( length );
+                       progressContexts = new Array( length );
+                       resolveContexts = new Array( length );
+                       for ( ; i < length; i++ ) {
+                               if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+                                       resolveValues[ i ].promise()
+                                               .done( updateFunc( i, resolveContexts, resolveValues ) )
+                                               .fail( deferred.reject )
+                                               .progress( updateFunc( i, progressContexts, progressValues ) );
+                               } else {
+                                       --remaining;
                                }
-                       } else if ( deferred !== firstParam ) {
-                               deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
                        }
-                       return promise;
                }
-       });
-
-
 
+               // if we're not waiting on anything, resolve the master
+               if ( !remaining ) {
+                       deferred.resolveWith( resolveContexts, resolveValues );
+               }
 
-       jQuery.support = (function() {
+               return deferred.promise();
+       }
+});
+jQuery.support = (function() {
+
+       var support,
+               all,
+               a,
+               select,
+               opt,
+               input,
+               fragment,
+               eventName,
+               i,
+               isSupported,
+               clickFn,
+               div = document.createElement("div");
+
+       // Preliminary tests
+       div.setAttribute( "className", "t" );
+       div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+
+       all = div.getElementsByTagName("*");
+       a = div.getElementsByTagName("a")[ 0 ];
+       a.style.cssText = "top:1px;float:left;opacity:.5";
+
+       // Can't get basic test support
+       if ( !all || !all.length || !a ) {
+               return {};
+       }
 
-               var support,
-                       all,
-                       a,
-                       select,
-                       opt,
-                       input,
-                       fragment,
-                       tds,
-                       events,
-                       eventName,
-                       i,
-                       isSupported,
-                       div = document.createElement( "div" ),
-                       documentElement = document.documentElement;
-
-               // Preliminary tests
-               div.setAttribute("className", "t");
-               div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-
-               all = div.getElementsByTagName( "*" );
-               a = div.getElementsByTagName( "a" )[ 0 ];
-
-               // Can't get basic test support
-               if ( !all || !all.length || !a ) {
-                       return {};
-               }
-
-               // First batch of supports tests
-               select = document.createElement( "select" );
-               opt = select.appendChild( document.createElement("option") );
-               input = div.getElementsByTagName( "input" )[ 0 ];
-
-               support = {
-                       // IE strips leading whitespace when .innerHTML is used
-                       leadingWhitespace: ( div.firstChild.nodeType === 3 ),
-
-                       // Make sure that tbody elements aren't automatically inserted
-                       // IE will insert them into empty tables
-                       tbody: !div.getElementsByTagName("tbody").length,
-
-                       // Make sure that link elements get serialized correctly by innerHTML
-                       // This requires a wrapper element in IE
-                       htmlSerialize: !!div.getElementsByTagName("link").length,
-
-                       // Get the style information from getAttribute
-                       // (IE uses .cssText instead)
-                       style: /top/.test( a.getAttribute("style") ),
-
-                       // Make sure that URLs aren't manipulated
-                       // (IE normalizes it by default)
-                       hrefNormalized: ( a.getAttribute("href") === "/a" ),
-
-                       // Make sure that element opacity exists
-                       // (IE uses filter instead)
-                       // Use a regex to work around a WebKit issue. See #5145
-                       opacity: /^0.55/.test( a.style.opacity ),
-
-                       // Verify style float existence
-                       // (IE uses styleFloat instead of cssFloat)
-                       cssFloat: !!a.style.cssFloat,
-
-                       // Make sure that if no value is specified for a checkbox
-                       // that it defaults to "on".
-                       // (WebKit defaults to "" instead)
-                       checkOn: ( input.value === "on" ),
-
-                       // Make sure that a selected-by-default option has a working selected property.
-                       // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
-                       optSelected: opt.selected,
-
-                       // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
-                       getSetAttribute: div.className !== "t",
-
-                       // Tests for enctype support on a form(#6743)
-                       enctype: !!document.createElement("form").enctype,
-
-                       // Makes sure cloning an html5 element does not cause problems
-                       // Where outerHTML is undefined, this still works
-                       html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
-
-                       // Will be defined later
-                       submitBubbles: true,
-                       changeBubbles: true,
-                       focusinBubbles: false,
-                       deleteExpando: true,
-                       noCloneEvent: true,
-                       inlineBlockNeedsLayout: false,
-                       shrinkWrapBlocks: false,
-                       reliableMarginRight: true,
-                       pixelMargin: true
-               };
+       // First batch of supports tests
+       select = document.createElement("select");
+       opt = select.appendChild( document.createElement("option") );
+       input = div.getElementsByTagName("input")[ 0 ];
+
+       support = {
+               // IE strips leading whitespace when .innerHTML is used
+               leadingWhitespace: ( div.firstChild.nodeType === 3 ),
+
+               // Make sure that tbody elements aren't automatically inserted
+               // IE will insert them into empty tables
+               tbody: !div.getElementsByTagName("tbody").length,
+
+               // Make sure that link elements get serialized correctly by innerHTML
+               // This requires a wrapper element in IE
+               htmlSerialize: !!div.getElementsByTagName("link").length,
+
+               // Get the style information from getAttribute
+               // (IE uses .cssText instead)
+               style: /top/.test( a.getAttribute("style") ),
+
+               // Make sure that URLs aren't manipulated
+               // (IE normalizes it by default)
+               hrefNormalized: ( a.getAttribute("href") === "/a" ),
+
+               // Make sure that element opacity exists
+               // (IE uses filter instead)
+               // Use a regex to work around a WebKit issue. See #5145
+               opacity: /^0.5/.test( a.style.opacity ),
+
+               // Verify style float existence
+               // (IE uses styleFloat instead of cssFloat)
+               cssFloat: !!a.style.cssFloat,
+
+               // Make sure that if no value is specified for a checkbox
+               // that it defaults to "on".
+               // (WebKit defaults to "" instead)
+               checkOn: ( input.value === "on" ),
+
+               // Make sure that a selected-by-default option has a working selected property.
+               // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+               optSelected: opt.selected,
+
+               // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+               getSetAttribute: div.className !== "t",
+
+               // Tests for enctype support on a form(#6743)
+               enctype: !!document.createElement("form").enctype,
+
+               // Makes sure cloning an html5 element does not cause problems
+               // Where outerHTML is undefined, this still works
+               html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
+
+               // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
+               boxModel: ( document.compatMode === "CSS1Compat" ),
+
+               // Will be defined later
+               submitBubbles: true,
+               changeBubbles: true,
+               focusinBubbles: false,
+               deleteExpando: true,
+               noCloneEvent: true,
+               inlineBlockNeedsLayout: false,
+               shrinkWrapBlocks: false,
+               reliableMarginRight: true,
+               boxSizingReliable: true,
+               pixelPosition: false
+       };
 
-               // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead
-               jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat");
+       // Make sure checked status is properly cloned
+       input.checked = true;
+       support.noCloneChecked = input.cloneNode( true ).checked;
 
-               // Make sure checked status is properly cloned
-               input.checked = true;
-               support.noCloneChecked = input.cloneNode( true ).checked;
+       // Make sure that the options inside disabled selects aren't marked as disabled
+       // (WebKit marks them as disabled)
+       select.disabled = true;
+       support.optDisabled = !opt.disabled;
 
-               // Make sure that the options inside disabled selects aren't marked as disabled
-               // (WebKit marks them as disabled)
-               select.disabled = true;
-               support.optDisabled = !opt.disabled;
+       // Test to see if it's possible to delete an expando from an element
+       // Fails in Internet Explorer
+       try {
+               delete div.test;
+       } catch( e ) {
+               support.deleteExpando = false;
+       }
 
-               // Test to see if it's possible to delete an expando from an element
-               // Fails in Internet Explorer
-               try {
-                       delete div.test;
-               } catch( e ) {
-                       support.deleteExpando = false;
-               }
+       if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
+               div.attachEvent( "onclick", clickFn = function() {
+                       // Cloning a node shouldn't copy over any
+                       // bound event handlers (IE does this)
+                       support.noCloneEvent = false;
+               });
+               div.cloneNode( true ).fireEvent("onclick");
+               div.detachEvent( "onclick", clickFn );
+       }
 
-               if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
-                       div.attachEvent( "onclick", function() {
-                               // Cloning a node shouldn't copy over any
-                               // bound event handlers (IE does this)
-                               support.noCloneEvent = false;
-                       });
-                       div.cloneNode( true ).fireEvent( "onclick" );
-               }
-
-               // Check if a radio maintains its value
-               // after being appended to the DOM
-               input = document.createElement("input");
-               input.value = "t";
-               input.setAttribute("type", "radio");
-               support.radioValue = input.value === "t";
-
-               input.setAttribute("checked", "checked");
-
-               // #11217 - WebKit loses check when the name is after the checked attribute
-               input.setAttribute( "name", "t" );
-
-               div.appendChild( input );
-               fragment = document.createDocumentFragment();
-               fragment.appendChild( div.lastChild );
-
-               // WebKit doesn't clone checked state correctly in fragments
-               support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
-               // Check if a disconnected checkbox will retain its checked
-               // value of true after appended to the DOM (IE6/7)
-               support.appendChecked = input.checked;
-
-               fragment.removeChild( input );
-               fragment.appendChild( div );
-
-               // Technique from Juriy Zaytsev
-               // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
-               // We only care about the case where non-standard event systems
-               // are used, namely in IE. Short-circuiting here helps us to
-               // avoid an eval call (in setAttribute) which can cause CSP
-               // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
-               if ( div.attachEvent ) {
-                       for ( i in {
-                               submit: 1,
-                               change: 1,
-                               focusin: 1
-                       }) {
-                               eventName = "on" + i;
-                               isSupported = ( eventName in div );
-                               if ( !isSupported ) {
-                                       div.setAttribute( eventName, "return;" );
-                                       isSupported = ( typeof div[ eventName ] === "function" );
-                               }
-                               support[ i + "Bubbles" ] = isSupported;
-                       }
+       // Check if a radio maintains its value
+       // after being appended to the DOM
+       input = document.createElement("input");
+       input.value = "t";
+       input.setAttribute( "type", "radio" );
+       support.radioValue = input.value === "t";
+
+       input.setAttribute( "checked", "checked" );
+
+       // #11217 - WebKit loses check when the name is after the checked attribute
+       input.setAttribute( "name", "t" );
+
+       div.appendChild( input );
+       fragment = document.createDocumentFragment();
+       fragment.appendChild( div.lastChild );
+
+       // WebKit doesn't clone checked state correctly in fragments
+       support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+       // Check if a disconnected checkbox will retain its checked
+       // value of true after appended to the DOM (IE6/7)
+       support.appendChecked = input.checked;
+
+       fragment.removeChild( input );
+       fragment.appendChild( div );
+
+       // Technique from Juriy Zaytsev
+       // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
+       // We only care about the case where non-standard event systems
+       // are used, namely in IE. Short-circuiting here helps us to
+       // avoid an eval call (in setAttribute) which can cause CSP
+       // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
+       if ( div.attachEvent ) {
+               for ( i in {
+                       submit: true,
+                       change: true,
+                       focusin: true
+               }) {
+                       eventName = "on" + i;
+                       isSupported = ( eventName in div );
+                       if ( !isSupported ) {
+                               div.setAttribute( eventName, "return;" );
+                               isSupported = ( typeof div[ eventName ] === "function" );
+                       }
+                       support[ i + "Bubbles" ] = isSupported;
                }
+       }
 
-               fragment.removeChild( div );
-
-               // Null elements to avoid leaks in IE
-               fragment = select = opt = div = input = null;
-
-               // Run tests that need a body at doc ready
-               jQuery(function() {
-                       var container, outer, inner, table, td, offsetSupport,
-                               marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight,
-                               paddingMarginBorderVisibility, paddingMarginBorder,
-                               body = document.getElementsByTagName("body")[0];
+       // Run tests that need a body at doc ready
+       jQuery(function() {
+               var container, div, tds, marginDiv,
+                       divReset = "padding:0;margin:0;border:0;display:block;overflow:hidden;",
+                       body = document.getElementsByTagName("body")[0];
 
-                       if ( !body ) {
-                               // Return for frameset docs that don't have a body
-                               return;
-                       }
+               if ( !body ) {
+                       // Return for frameset docs that don't have a body
+                       return;
+               }
 
-                       conMarginTop = 1;
-                       paddingMarginBorder = "padding:0;margin:0;border:";
-                       positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;";
-                       paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;";
-                       style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;";
-                       html = "<div " + style + "display:block;'><div style='" + paddingMarginBorder + "0;display:block;overflow:hidden;'></div></div>" +
-                               "<table " + style + "' cellpadding='0' cellspacing='0'>" +
-                               "<tr><td></td></tr></table>";
-
-                       container = document.createElement("div");
-                       container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
-                       body.insertBefore( container, body.firstChild );
-
-                       // Construct the test element
-                       div = document.createElement("div");
-                       container.appendChild( div );
-
-                       // Check if table cells still have offsetWidth/Height when they are set
-                       // to display:none and there are still other visible table cells in a
-                       // table row; if so, offsetWidth/Height are not reliable for use when
-                       // determining if an element has been hidden directly using
-                       // display:none (it is still safe to use offsets if a parent element is
-                       // hidden; don safety goggles and see bug #4512 for more information).
-                       // (only IE 8 fails this test)
-                       div.innerHTML = "<table><tr><td style='" + paddingMarginBorder + "0;display:none'></td><td>t</td></tr></table>";
-                       tds = div.getElementsByTagName( "td" );
-                       isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
-                       tds[ 0 ].style.display = "";
-                       tds[ 1 ].style.display = "none";
-
-                       // Check if empty table cells still have offsetWidth/Height
-                       // (IE <= 8 fail this test)
-                       support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+               container = document.createElement("div");
+               container.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px";
+               body.insertBefore( container, body.firstChild );
+
+               // Construct the test element
+               div = document.createElement("div");
+               container.appendChild( div );
+
+               // Check if table cells still have offsetWidth/Height when they are set
+               // to display:none and there are still other visible table cells in a
+               // table row; if so, offsetWidth/Height are not reliable for use when
+               // determining if an element has been hidden directly using
+               // display:none (it is still safe to use offsets if a parent element is
+               // hidden; don safety goggles and see bug #4512 for more information).
+               // (only IE 8 fails this test)
+               div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
+               tds = div.getElementsByTagName("td");
+               tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
+               isSupported = ( tds[ 0 ].offsetHeight === 0 );
+
+               tds[ 0 ].style.display = "";
+               tds[ 1 ].style.display = "none";
+
+               // Check if empty table cells still have offsetWidth/Height
+               // (IE <= 8 fail this test)
+               support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
+
+               // Check box-sizing and margin behavior
+               div.innerHTML = "";
+               div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
+               support.boxSizing = ( div.offsetWidth === 4 );
+               support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
+
+               // NOTE: To any future maintainer, we've window.getComputedStyle
+               // because jsdom on node.js will break without it.
+               if ( window.getComputedStyle ) {
+                       support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
+                       support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
 
                        // Check if div with explicit width and no margin-right incorrectly
                        // gets computed margin-right based on width of container. For more
                        // info see bug #3333
                        // Fails in WebKit before Feb 2011 nightlies
                        // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-                       if ( window.getComputedStyle ) {
-                               div.innerHTML = "";
-                               marginDiv = document.createElement( "div" );
-                               marginDiv.style.width = "0";
-                               marginDiv.style.marginRight = "0";
-                               div.style.width = "2px";
-                               div.appendChild( marginDiv );
-                               support.reliableMarginRight =
-                                       ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
-                       }
-
-                       if ( typeof div.style.zoom !== "undefined" ) {
-                               // Check if natively block-level elements act like inline-block
-                               // elements when setting their display to 'inline' and giving
-                               // them layout
-                               // (IE < 8 does this)
-                               div.innerHTML = "";
-                               div.style.width = div.style.padding = "1px";
-                               div.style.border = 0;
-                               div.style.overflow = "hidden";
-                               div.style.display = "inline";
-                               div.style.zoom = 1;
-                               support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
-
-                               // Check if elements with layout shrink-wrap their children
-                               // (IE 6 does this)
-                               div.style.display = "block";
-                               div.style.overflow = "visible";
-                               div.innerHTML = "<div style='width:5px;'></div>";
-                               support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
-                       }
-
-                       div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility;
-                       div.innerHTML = html;
-
-                       outer = div.firstChild;
-                       inner = outer.firstChild;
-                       td = outer.nextSibling.firstChild.firstChild;
-
-                       offsetSupport = {
-                               doesNotAddBorder: ( inner.offsetTop !== 5 ),
-                               doesAddBorderForTableAndCells: ( td.offsetTop === 5 )
-                       };
+                       marginDiv = document.createElement("div");
+                       marginDiv.style.cssText = div.style.cssText = divReset;
+                       marginDiv.style.marginRight = marginDiv.style.width = "0";
+                       div.style.width = "1px";
+                       div.appendChild( marginDiv );
+                       support.reliableMarginRight =
+                               !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
+               }
 
-                       inner.style.position = "fixed";
-                       inner.style.top = "20px";
+               if ( typeof div.style.zoom !== "undefined" ) {
+                       // Check if natively block-level elements act like inline-block
+                       // elements when setting their display to 'inline' and giving
+                       // them layout
+                       // (IE < 8 does this)
+                       div.innerHTML = "";
+                       div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
+                       support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
+
+                       // Check if elements with layout shrink-wrap their children
+                       // (IE 6 does this)
+                       div.style.display = "block";
+                       div.style.overflow = "visible";
+                       div.innerHTML = "<div></div>";
+                       div.firstChild.style.width = "5px";
+                       support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
+
+                       container.style.zoom = 1;
+               }
 
-                       // safari subtracts parent border width here which is 5px
-                       offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );
-                       inner.style.position = inner.style.top = "";
+               // Null elements to avoid leaks in IE
+               body.removeChild( container );
+               container = div = tds = marginDiv = null;
+       });
 
-                       outer.style.overflow = "hidden";
-                       outer.style.position = "relative";
-
-                       offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );
-                       offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
-
-                       if ( window.getComputedStyle ) {
-                               div.style.marginTop = "1%";
-                               support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%";
-                       }
-
-                       if ( typeof container.style.zoom !== "undefined" ) {
-                               container.style.zoom = 1;
-                       }
-
-                       body.removeChild( container );
-                       marginDiv = div = container = null;
-
-                       jQuery.extend( support, offsetSupport );
-               });
-
-               return support;
-       })();
+       // Null elements to avoid leaks in IE
+       fragment.removeChild( div );
+       all = a = select = opt = input = fragment = div = null;
 
+       return support;
+})();
+var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
+       rmultiDash = /([A-Z])/g;
 
+jQuery.extend({
+       cache: {},
 
+       deletedIds: [],
 
-       var rbrace = /^(?:\{.*\}|\[.*\])$/,
-               rmultiDash = /([A-Z])/g;
+       // Please use with caution
+       uuid: 0,
 
-       jQuery.extend({
-               cache: {},
+       // Unique for each copy of jQuery on the page
+       // Non-digits removed to match rinlinejQuery
+       expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
 
-               // Please use with caution
-               uuid: 0,
+       // The following elements throw uncatchable exceptions if you
+       // attempt to add expando properties to them.
+       noData: {
+               "embed": true,
+               // Ban all objects except for Flash (which handle expandos)
+               "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+               "applet": true
+       },
 
-               // Unique for each copy of jQuery on the page
-               // Non-digits removed to match rinlinejQuery
-               expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
+       hasData: function( elem ) {
+               elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+               return !!elem && !isEmptyDataObject( elem );
+       },
 
-               // The following elements throw uncatchable exceptions if you
-               // attempt to add expando properties to them.
-               noData: {
-                       "embed": true,
-                       // Ban all objects except for Flash (which handle expandos)
-                       "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
-                       "applet": true
-               },
-
-               hasData: function( elem ) {
-                       elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
-                       return !!elem && !isEmptyDataObject( elem );
-               },
-
-               data: function( elem, name, data, pvt /* Internal Use Only */ ) {
-                       if ( !jQuery.acceptData( elem ) ) {
-                               return;
-                       }
+       data: function( elem, name, data, pvt /* Internal Use Only */ ) {
+               if ( !jQuery.acceptData( elem ) ) {
+                       return;
+               }
 
-                       var privateCache, thisCache, ret,
-                               internalKey = jQuery.expando,
-                               getByName = typeof name === "string",
+               var thisCache, ret,
+                       internalKey = jQuery.expando,
+                       getByName = typeof name === "string",
 
                        // We have to handle DOM nodes and JS objects differently because IE6-7
                        // can't GC object references properly across the DOM-JS boundary
-                               isNode = elem.nodeType,
+                       isNode = elem.nodeType,
 
                        // Only DOM nodes need the global jQuery cache; JS object data is
                        // attached directly to the object so GC can occur automatically
-                               cache = isNode ? jQuery.cache : elem,
+                       cache = isNode ? jQuery.cache : elem,
 
                        // Only defining an ID for JS objects if its cache already exists allows
                        // the code to shortcut on the same path as a DOM node with no cache
-                               id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,
-                               isEvents = name === "events";
-
-                       // Avoid doing any more work than we need to when trying to get data on an
-                       // object that has no data at all
-                       if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {
-                               return;
-                       }
-
-                       if ( !id ) {
-                               // Only DOM nodes need a new unique ID for each element since their data
-                               // ends up in the global cache
-                               if ( isNode ) {
-                                       elem[ internalKey ] = id = ++jQuery.uuid;
-                               } else {
-                                       id = internalKey;
-                               }
-                       }
-
-                       if ( !cache[ id ] ) {
-                               cache[ id ] = {};
-
-                               // Avoids exposing jQuery metadata on plain JS objects when the object
-                               // is serialized using JSON.stringify
-                               if ( !isNode ) {
-                                       cache[ id ].toJSON = jQuery.noop;
-                               }
-                       }
-
-                       // An object can be passed to jQuery.data instead of a key/value pair; this gets
-                       // shallow copied over onto the existing cache
-                       if ( typeof name === "object" || typeof name === "function" ) {
-                               if ( pvt ) {
-                                       cache[ id ] = jQuery.extend( cache[ id ], name );
-                               } else {
-                                       cache[ id ].data = jQuery.extend( cache[ id ].data, name );
-                               }
-                       }
-
-                       privateCache = thisCache = cache[ id ];
-
-                       // jQuery data() is stored in a separate object inside the object's internal data
-                       // cache in order to avoid key collisions between internal data and user-defined
-                       // data.
-                       if ( !pvt ) {
-                               if ( !thisCache.data ) {
-                                       thisCache.data = {};
-                               }
-
-                               thisCache = thisCache.data;
-                       }
-
-                       if ( data !== undefined ) {
-                               thisCache[ jQuery.camelCase( name ) ] = data;
-                       }
-
-                       // Users should not attempt to inspect the internal events object using jQuery.data,
-                       // it is undocumented and subject to change. But does anyone listen? No.
-                       if ( isEvents && !thisCache[ name ] ) {
-                               return privateCache.events;
-                       }
-
-                       // Check for both converted-to-camel and non-converted data property names
-                       // If a data property was specified
-                       if ( getByName ) {
-
-                               // First Try to find as-is property data
-                               ret = thisCache[ name ];
-
-                               // Test for null|undefined property data
-                               if ( ret == null ) {
-
-                                       // Try to find the camelCased property
-                                       ret = thisCache[ jQuery.camelCase( name ) ];
-                               }
-                       } else {
-                               ret = thisCache;
-                       }
-
-                       return ret;
-               },
-
-               removeData: function( elem, name, pvt /* Internal Use Only */ ) {
-                       if ( !jQuery.acceptData( elem ) ) {
-                               return;
-                       }
-
-                       var thisCache, i, l,
-
-                       // Reference to internal data cache key
-                               internalKey = jQuery.expando,
-
-                               isNode = elem.nodeType,
-
-                       // See jQuery.data for more information
-                               cache = isNode ? jQuery.cache : elem,
-
-                       // See jQuery.data for more information
-                               id = isNode ? elem[ internalKey ] : internalKey;
-
-                       // If there is already no cache entry for this object, there is no
-                       // purpose in continuing
-                       if ( !cache[ id ] ) {
-                               return;
-                       }
-
-                       if ( name ) {
-
-                               thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
-                               if ( thisCache ) {
-
-                                       // Support array or space separated string names for data keys
-                                       if ( !jQuery.isArray( name ) ) {
-
-                                               // try the string as a key before any manipulation
-                                               if ( name in thisCache ) {
-                                                       name = [ name ];
-                                               } else {
-
-                                                       // split the camel cased version by spaces unless a key with the spaces exists
-                                                       name = jQuery.camelCase( name );
-                                                       if ( name in thisCache ) {
-                                                               name = [ name ];
-                                                       } else {
-                                                               name = name.split( " " );
-                                                       }
-                                               }
-                                       }
-
-                                       for ( i = 0, l = name.length; i < l; i++ ) {
-                                               delete thisCache[ name[i] ];
-                                       }
-
-                                       // If there is no data left in the cache, we want to continue
-                                       // and let the cache object itself get destroyed
-                                       if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
-                                               return;
-                                       }
-                               }
-                       }
-
-                       // See jQuery.data for more information
-                       if ( !pvt ) {
-                               delete cache[ id ].data;
-
-                               // Don't destroy the parent cache unless the internal data object
-                               // had been the only thing left in it
-                               if ( !isEmptyDataObject(cache[ id ]) ) {
-                                       return;
-                               }
-                       }
-
-                       // Browsers that fail expando deletion also refuse to delete expandos on
-                       // the window, but it will allow it on all other JS objects; other browsers
-                       // don't care
-                       // Ensure that `cache` is not a window object #10080
-                       if ( jQuery.support.deleteExpando || !cache.setInterval ) {
-                               delete cache[ id ];
-                       } else {
-                               cache[ id ] = null;
-                       }
-
-                       // We destroyed the cache and need to eliminate the expando on the node to avoid
-                       // false lookups in the cache for entries that no longer exist
-                       if ( isNode ) {
-                               // IE does not allow us to delete expando properties from nodes,
-                               // nor does it have a removeAttribute function on Document nodes;
-                               // we must handle all of these cases
-                               if ( jQuery.support.deleteExpando ) {
-                                       delete elem[ internalKey ];
-                               } else if ( elem.removeAttribute ) {
-                                       elem.removeAttribute( internalKey );
-                               } else {
-                                       elem[ internalKey ] = null;
-                               }
-                       }
-               },
-
-               // For internal use only.
-               _data: function( elem, name, data ) {
-                       return jQuery.data( elem, name, data, true );
-               },
-
-               // A method for determining if a DOM node can handle the data expando
-               acceptData: function( elem ) {
-                       if ( elem.nodeName ) {
-                               var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
-
-                               if ( match ) {
-                                       return !(match === true || elem.getAttribute("classid") !== match);
-                               }
-                       }
-
-                       return true;
-               }
-       });
-
-       jQuery.fn.extend({
-               data: function( key, value ) {
-                       var parts, part, attr, name, l,
-                               elem = this[0],
-                               i = 0,
-                               data = null;
-
-                       // Gets all values
-                       if ( key === undefined ) {
-                               if ( this.length ) {
-                                       data = jQuery.data( elem );
-
-                                       if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
-                                               attr = elem.attributes;
-                                               for ( l = attr.length; i < l; i++ ) {
-                                                       name = attr[i].name;
-
-                                                       if ( name.indexOf( "data-" ) === 0 ) {
-                                                               name = jQuery.camelCase( name.substring(5) );
-
-                                                               dataAttr( elem, name, data[ name ] );
-                                                       }
-                                               }
-                                               jQuery._data( elem, "parsedAttrs", true );
-                                       }
-                               }
-
-                               return data;
-                       }
-
-                       // Sets multiple values
-                       if ( typeof key === "object" ) {
-                               return this.each(function() {
-                                       jQuery.data( this, key );
-                               });
-                       }
-
-                       parts = key.split( ".", 2 );
-                       parts[1] = parts[1] ? "." + parts[1] : "";
-                       part = parts[1] + "!";
-
-                       return jQuery.access( this, function( value ) {
-
-                               if ( value === undefined ) {
-                                       data = this.triggerHandler( "getData" + part, [ parts[0] ] );
-
-                                       // Try to fetch any internally stored data first
-                                       if ( data === undefined && elem ) {
-                                               data = jQuery.data( elem, key );
-                                               data = dataAttr( elem, key, data );
-                                       }
-
-                                       return data === undefined && parts[1] ?
-                                               this.data( parts[0] ) :
-                                               data;
-                               }
+                       id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
 
-                               parts[1] = value;
-                               this.each(function() {
-                                       var self = jQuery( this );
-
-                                       self.triggerHandler( "setData" + part, parts );
-                                       jQuery.data( this, key, value );
-                                       self.triggerHandler( "changeData" + part, parts );
-                               });
-                       }, null, value, arguments.length > 1, null, false );
-               },
-
-               removeData: function( key ) {
-                       return this.each(function() {
-                               jQuery.removeData( this, key );
-                       });
+               // Avoid doing any more work than we need to when trying to get data on an
+               // object that has no data at all
+               if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
+                       return;
                }
-       });
-
-       function dataAttr( elem, key, data ) {
-               // If nothing was found internally, try to fetch any
-               // data from the HTML5 data-* attribute
-               if ( data === undefined && elem.nodeType === 1 ) {
-
-                       var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
-                       data = elem.getAttribute( name );
-
-                       if ( typeof data === "string" ) {
-                               try {
-                                       data = data === "true" ? true :
-                                               data === "false" ? false :
-                                                       data === "null" ? null :
-                                                               jQuery.isNumeric( data ) ? +data :
-                                                                       rbrace.test( data ) ? jQuery.parseJSON( data ) :
-                                                                               data;
-                               } catch( e ) {}
-
-                               // Make sure we set the data so it isn't changed later
-                               jQuery.data( elem, key, data );
 
+               if ( !id ) {
+                       // Only DOM nodes need a new unique ID for each element since their data
+                       // ends up in the global cache
+                       if ( isNode ) {
+                               elem[ internalKey ] = id = jQuery.deletedIds.pop() || ++jQuery.uuid;
                        } else {
-                               data = undefined;
-                       }
-               }
-
-               return data;
-       }
-
-// checks a cache object for emptiness
-       function isEmptyDataObject( obj ) {
-               for ( var name in obj ) {
-
-                       // if the public data object is empty, the private is still empty
-                       if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
-                               continue;
-                       }
-                       if ( name !== "toJSON" ) {
-                               return false;
-                       }
-               }
-
-               return true;
-       }
-
-
-
-
-       function handleQueueMarkDefer( elem, type, src ) {
-               var deferDataKey = type + "defer",
-                       queueDataKey = type + "queue",
-                       markDataKey = type + "mark",
-                       defer = jQuery._data( elem, deferDataKey );
-               if ( defer &&
-                       ( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
-                       ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
-                       // Give room for hard-coded callbacks to fire first
-                       // and eventually mark/queue something else on the element
-                       setTimeout( function() {
-                               if ( !jQuery._data( elem, queueDataKey ) &&
-                                       !jQuery._data( elem, markDataKey ) ) {
-                                       jQuery.removeData( elem, deferDataKey, true );
-                                       defer.fire();
-                               }
-                       }, 0 );
-               }
-       }
-
-       jQuery.extend({
-
-               _mark: function( elem, type ) {
-                       if ( elem ) {
-                               type = ( type || "fx" ) + "mark";
-                               jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
-                       }
-               },
-
-               _unmark: function( force, elem, type ) {
-                       if ( force !== true ) {
-                               type = elem;
-                               elem = force;
-                               force = false;
-                       }
-                       if ( elem ) {
-                               type = type || "fx";
-                               var key = type + "mark",
-                                       count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
-                               if ( count ) {
-                                       jQuery._data( elem, key, count );
-                               } else {
-                                       jQuery.removeData( elem, key, true );
-                                       handleQueueMarkDefer( elem, type, "mark" );
-                               }
-                       }
-               },
-
-               queue: function( elem, type, data ) {
-                       var q;
-                       if ( elem ) {
-                               type = ( type || "fx" ) + "queue";
-                               q = jQuery._data( elem, type );
-
-                               // Speed up dequeue by getting out quickly if this is just a lookup
-                               if ( data ) {
-                                       if ( !q || jQuery.isArray(data) ) {
-                                               q = jQuery._data( elem, type, jQuery.makeArray(data) );
-                                       } else {
-                                               q.push( data );
-                                       }
-                               }
-                               return q || [];
-                       }
-               },
-
-               dequeue: function( elem, type ) {
-                       type = type || "fx";
-
-                       var queue = jQuery.queue( elem, type ),
-                               fn = queue.shift(),
-                               hooks = {};
-
-                       // If the fx queue is dequeued, always remove the progress sentinel
-                       if ( fn === "inprogress" ) {
-                               fn = queue.shift();
-                       }
-
-                       if ( fn ) {
-                               // Add a progress sentinel to prevent the fx queue from being
-                               // automatically dequeued
-                               if ( type === "fx" ) {
-                                       queue.unshift( "inprogress" );
-                               }
-
-                               jQuery._data( elem, type + ".run", hooks );
-                               fn.call( elem, function() {
-                                       jQuery.dequeue( elem, type );
-                               }, hooks );
-                       }
-
-                       if ( !queue.length ) {
-                               jQuery.removeData( elem, type + "queue " + type + ".run", true );
-                               handleQueueMarkDefer( elem, type, "queue" );
+                               id = internalKey;
                        }
                }
-       });
-
-       jQuery.fn.extend({
-               queue: function( type, data ) {
-                       var setter = 2;
-
-                       if ( typeof type !== "string" ) {
-                               data = type;
-                               type = "fx";
-                               setter--;
-                       }
-
-                       if ( arguments.length < setter ) {
-                               return jQuery.queue( this[0], type );
-                       }
 
-                       return data === undefined ?
-                               this :
-                               this.each(function() {
-                                       var queue = jQuery.queue( this, type, data );
+               if ( !cache[ id ] ) {
+                       cache[ id ] = {};
 
-                                       if ( type === "fx" && queue[0] !== "inprogress" ) {
-                                               jQuery.dequeue( this, type );
-                                       }
-                               });
-               },
-               dequeue: function( type ) {
-                       return this.each(function() {
-                               jQuery.dequeue( this, type );
-                       });
-               },
-               // Based off of the plugin by Clint Helfers, with permission.
-               // http://blindsignals.com/index.php/2009/07/jquery-delay/
-               delay: function( time, type ) {
-                       time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
-                       type = type || "fx";
-
-                       return this.queue( type, function( next, hooks ) {
-                               var timeout = setTimeout( next, time );
-                               hooks.stop = function() {
-                                       clearTimeout( timeout );
-                               };
-                       });
-               },
-               clearQueue: function( type ) {
-                       return this.queue( type || "fx", [] );
-               },
-               // Get a promise resolved when queues of a certain type
-               // are emptied (fx is the type by default)
-               promise: function( type, object ) {
-                       if ( typeof type !== "string" ) {
-                               object = type;
-                               type = undefined;
-                       }
-                       type = type || "fx";
-                       var defer = jQuery.Deferred(),
-                               elements = this,
-                               i = elements.length,
-                               count = 1,
-                               deferDataKey = type + "defer",
-                               queueDataKey = type + "queue",
-                               markDataKey = type + "mark",
-                               tmp;
-                       function resolve() {
-                               if ( !( --count ) ) {
-                                       defer.resolveWith( elements, [ elements ] );
-                               }
-                       }
-                       while( i-- ) {
-                               if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
-                                       ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
-                                               jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
-                                               jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
-                                       count++;
-                                       tmp.add( resolve );
-                               }
+                       // Avoids exposing jQuery metadata on plain JS objects when the object
+                       // is serialized using JSON.stringify
+                       if ( !isNode ) {
+                               cache[ id ].toJSON = jQuery.noop;
                        }
-                       resolve();
-                       return defer.promise( object );
                }
-       });
-
-
-
-
-       var rclass = /[\n\t\r]/g,
-               rspace = /\s+/,
-               rreturn = /\r/g,
-               rtype = /^(?:button|input)$/i,
-               rfocusable = /^(?:button|input|object|select|textarea)$/i,
-               rclickable = /^a(?:rea)?$/i,
-               rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
-               getSetAttribute = jQuery.support.getSetAttribute,
-               nodeHook, boolHook, fixSpecified;
 
-       jQuery.fn.extend({
-               attr: function( name, value ) {
-                       return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
-               },
-
-               removeAttr: function( name ) {
-                       return this.each(function() {
-                               jQuery.removeAttr( this, name );
-                       });
-               },
-
-               prop: function( name, value ) {
-                       return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
-               },
-
-               removeProp: function( name ) {
-                       name = jQuery.propFix[ name ] || name;
-                       return this.each(function() {
-                               // try/catch handles cases where IE balks (such as removing a property on window)
-                               try {
-                                       this[ name ] = undefined;
-                                       delete this[ name ];
-                               } catch( e ) {}
-                       });
-               },
-
-               addClass: function( value ) {
-                       var classNames, i, l, elem,
-                               setClass, c, cl;
-
-                       if ( jQuery.isFunction( value ) ) {
-                               return this.each(function( j ) {
-                                       jQuery( this ).addClass( value.call(this, j, this.className) );
-                               });
-                       }
-
-                       if ( value && typeof value === "string" ) {
-                               classNames = value.split( rspace );
-
-                               for ( i = 0, l = this.length; i < l; i++ ) {
-                                       elem = this[ i ];
-
-                                       if ( elem.nodeType === 1 ) {
-                                               if ( !elem.className && classNames.length === 1 ) {
-                                                       elem.className = value;
-
-                                               } else {
-                                                       setClass = " " + elem.className + " ";
-
-                                                       for ( c = 0, cl = classNames.length; c < cl; c++ ) {
-                                                               if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
-                                                                       setClass += classNames[ c ] + " ";
-                                                               }
-                                                       }
-                                                       elem.className = jQuery.trim( setClass );
-                                               }
-                                       }
-                               }
-                       }
-
-                       return this;
-               },
-
-               removeClass: function( value ) {
-                       var classNames, i, l, elem, className, c, cl;
-
-                       if ( jQuery.isFunction( value ) ) {
-                               return this.each(function( j ) {
-                                       jQuery( this ).removeClass( value.call(this, j, this.className) );
-                               });
-                       }
-
-                       if ( (value && typeof value === "string") || value === undefined ) {
-                               classNames = ( value || "" ).split( rspace );
-
-                               for ( i = 0, l = this.length; i < l; i++ ) {
-                                       elem = this[ i ];
-
-                                       if ( elem.nodeType === 1 && elem.className ) {
-                                               if ( value ) {
-                                                       className = (" " + elem.className + " ").replace( rclass, " " );
-                                                       for ( c = 0, cl = classNames.length; c < cl; c++ ) {
-                                                               className = className.replace(" " + classNames[ c ] + " ", " ");
-                                                       }
-                                                       elem.className = jQuery.trim( className );
-
-                                               } else {
-                                                       elem.className = "";
-                                               }
-                                       }
-                               }
-                       }
-
-                       return this;
-               },
-
-               toggleClass: function( value, stateVal ) {
-                       var type = typeof value,
-                               isBool = typeof stateVal === "boolean";
-
-                       if ( jQuery.isFunction( value ) ) {
-                               return this.each(function( i ) {
-                                       jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
-                               });
-                       }
-
-                       return this.each(function() {
-                               if ( type === "string" ) {
-                                       // toggle individual class names
-                                       var className,
-                                               i = 0,
-                                               self = jQuery( this ),
-                                               state = stateVal,
-                                               classNames = value.split( rspace );
-
-                                       while ( (className = classNames[ i++ ]) ) {
-                                               // check each className given, space seperated list
-                                               state = isBool ? state : !self.hasClass( className );
-                                               self[ state ? "addClass" : "removeClass" ]( className );
-                                       }
-
-                               } else if ( type === "undefined" || type === "boolean" ) {
-                                       if ( this.className ) {
-                                               // store className if set
-                                               jQuery._data( this, "__className__", this.className );
-                                       }
-
-                                       // toggle whole className
-                                       this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
-                               }
-                       });
-               },
-
-               hasClass: function( selector ) {
-                       var className = " " + selector + " ",
-                               i = 0,
-                               l = this.length;
-                       for ( ; i < l; i++ ) {
-                               if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
-                                       return true;
-                               }
-                       }
-
-                       return false;
-               },
-
-               val: function( value ) {
-                       var hooks, ret, isFunction,
-                               elem = this[0];
-
-                       if ( !arguments.length ) {
-                               if ( elem ) {
-                                       hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
-                                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
-                                               return ret;
-                                       }
-
-                                       ret = elem.value;
-
-                                       return typeof ret === "string" ?
-                                               // handle most common string cases
-                                               ret.replace(rreturn, "") :
-                                               // handle cases where value is null/undef or number
-                                               ret == null ? "" : ret;
-                               }
-
-                               return;
-                       }
-
-                       isFunction = jQuery.isFunction( value );
-
-                       return this.each(function( i ) {
-                               var self = jQuery(this), val;
-
-                               if ( this.nodeType !== 1 ) {
-                                       return;
-                               }
-
-                               if ( isFunction ) {
-                                       val = value.call( this, i, self.val() );
-                               } else {
-                                       val = value;
-                               }
-
-                               // Treat null/undefined as ""; convert numbers to string
-                               if ( val == null ) {
-                                       val = "";
-                               } else if ( typeof val === "number" ) {
-                                       val += "";
-                               } else if ( jQuery.isArray( val ) ) {
-                                       val = jQuery.map(val, function ( value ) {
-                                               return value == null ? "" : value + "";
-                                       });
-                               }
-
-                               hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
-                               // If set returns undefined, fall back to normal setting
-                               if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
-                                       this.value = val;
-                               }
-                       });
-               }
-       });
-
-       jQuery.extend({
-               valHooks: {
-                       option: {
-                               get: function( elem ) {
-                                       // attributes.value is undefined in Blackberry 4.7 but
-                                       // uses .value. See #6932
-                                       var val = elem.attributes.value;
-                                       return !val || val.specified ? elem.value : elem.text;
-                               }
-                       },
-                       select: {
-                               get: function( elem ) {
-                                       var value, i, max, option,
-                                               index = elem.selectedIndex,
-                                               values = [],
-                                               options = elem.options,
-                                               one = elem.type === "select-one";
-
-                                       // Nothing was selected
-                                       if ( index < 0 ) {
-                                               return null;
-                                       }
-
-                                       // Loop through all the selected options
-                                       i = one ? index : 0;
-                                       max = one ? index + 1 : options.length;
-                                       for ( ; i < max; i++ ) {
-                                               option = options[ i ];
-
-                                               // Don't return options that are disabled or in a disabled optgroup
-                                               if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
-                                                       (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
-
-                                                       // Get the specific value for the option
-                                                       value = jQuery( option ).val();
-
-                                                       // We don't need an array for one selects
-                                                       if ( one ) {
-                                                               return value;
-                                                       }
-
-                                                       // Multi-Selects return an array
-                                                       values.push( value );
-                                               }
-                                       }
-
-                                       // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
-                                       if ( one && !values.length && options.length ) {
-                                               return jQuery( options[ index ] ).val();
-                                       }
-
-                                       return values;
-                               },
-
-                               set: function( elem, value ) {
-                                       var values = jQuery.makeArray( value );
-
-                                       jQuery(elem).find("option").each(function() {
-                                               this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
-                                       });
-
-                                       if ( !values.length ) {
-                                               elem.selectedIndex = -1;
-                                       }
-                                       return values;
-                               }
-                       }
-               },
-
-               attrFn: {
-                       val: true,
-                       css: true,
-                       html: true,
-                       text: true,
-                       data: true,
-                       width: true,
-                       height: true,
-                       offset: true
-               },
-
-               attr: function( elem, name, value, pass ) {
-                       var ret, hooks, notxml,
-                               nType = elem.nodeType;
-
-                       // don't get/set attributes on text, comment and attribute nodes
-                       if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-                               return;
-                       }
-
-                       if ( pass && name in jQuery.attrFn ) {
-                               return jQuery( elem )[ name ]( value );
-                       }
-
-                       // Fallback to prop when attributes are not supported
-                       if ( typeof elem.getAttribute === "undefined" ) {
-                               return jQuery.prop( elem, name, value );
-                       }
-
-                       notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-                       // All attributes are lowercase
-                       // Grab necessary hook if one is defined
-                       if ( notxml ) {
-                               name = name.toLowerCase();
-                               hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
-                       }
-
-                       if ( value !== undefined ) {
-
-                               if ( value === null ) {
-                                       jQuery.removeAttr( elem, name );
-                                       return;
-
-                               } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
-                                       return ret;
-
-                               } else {
-                                       elem.setAttribute( name, "" + value );
-                                       return value;
-                               }
-
-                       } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
-                               return ret;
-
-                       } else {
-
-                               ret = elem.getAttribute( name );
-
-                               // Non-existent attributes return null, we normalize to undefined
-                               return ret === null ?
-                                       undefined :
-                                       ret;
-                       }
-               },
-
-               removeAttr: function( elem, value ) {
-                       var propName, attrNames, name, l, isBool,
-                               i = 0;
-
-                       if ( value && elem.nodeType === 1 ) {
-                               attrNames = value.toLowerCase().split( rspace );
-                               l = attrNames.length;
-
-                               for ( ; i < l; i++ ) {
-                                       name = attrNames[ i ];
-
-                                       if ( name ) {
-                                               propName = jQuery.propFix[ name ] || name;
-                                               isBool = rboolean.test( name );
-
-                                               // See #9699 for explanation of this approach (setting first, then removal)
-                                               // Do not do this for boolean attributes (see #10870)
-                                               if ( !isBool ) {
-                                                       jQuery.attr( elem, name, "" );
-                                               }
-                                               elem.removeAttribute( getSetAttribute ? name : propName );
-
-                                               // Set corresponding property to false for boolean attributes
-                                               if ( isBool && propName in elem ) {
-                                                       elem[ propName ] = false;
-                                               }
-                                       }
-                               }
-                       }
-               },
-
-               attrHooks: {
-                       type: {
-                               set: function( elem, value ) {
-                                       // We can't allow the type property to be changed (since it causes problems in IE)
-                                       if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
-                                               jQuery.error( "type property can't be changed" );
-                                       } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
-                                               // Setting the type on a radio button after the value resets the value in IE6-9
-                                               // Reset value to it's default in case type is set after value
-                                               // This is for element creation
-                                               var val = elem.value;
-                                               elem.setAttribute( "type", value );
-                                               if ( val ) {
-                                                       elem.value = val;
-                                               }
-                                               return value;
-                                       }
-                               }
-                       },
-                       // Use the value property for back compat
-                       // Use the nodeHook for button elements in IE6/7 (#1954)
-                       value: {
-                               get: function( elem, name ) {
-                                       if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
-                                               return nodeHook.get( elem, name );
-                                       }
-                                       return name in elem ?
-                                               elem.value :
-                                               null;
-                               },
-                               set: function( elem, value, name ) {
-                                       if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
-                                               return nodeHook.set( elem, value, name );
-                                       }
-                                       // Does not return so that setAttribute is also used
-                                       elem.value = value;
-                               }
-                       }
-               },
-
-               propFix: {
-                       tabindex: "tabIndex",
-                       readonly: "readOnly",
-                       "for": "htmlFor",
-                       "class": "className",
-                       maxlength: "maxLength",
-                       cellspacing: "cellSpacing",
-                       cellpadding: "cellPadding",
-                       rowspan: "rowSpan",
-                       colspan: "colSpan",
-                       usemap: "useMap",
-                       frameborder: "frameBorder",
-                       contenteditable: "contentEditable"
-               },
-
-               prop: function( elem, name, value ) {
-                       var ret, hooks, notxml,
-                               nType = elem.nodeType;
-
-                       // don't get/set properties on text, comment and attribute nodes
-                       if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-                               return;
-                       }
-
-                       notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-                       if ( notxml ) {
-                               // Fix name and attach hooks
-                               name = jQuery.propFix[ name ] || name;
-                               hooks = jQuery.propHooks[ name ];
-                       }
-
-                       if ( value !== undefined ) {
-                               if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
-                                       return ret;
-
-                               } else {
-                                       return ( elem[ name ] = value );
-                               }
-
-                       } else {
-                               if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
-                                       return ret;
-
-                               } else {
-                                       return elem[ name ];
-                               }
-                       }
-               },
-
-               propHooks: {
-                       tabIndex: {
-                               get: function( elem ) {
-                                       // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
-                                       // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
-                                       var attributeNode = elem.getAttributeNode("tabindex");
-
-                                       return attributeNode && attributeNode.specified ?
-                                               parseInt( attributeNode.value, 10 ) :
-                                               rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
-                                                       0 :
-                                                       undefined;
-                               }
-                       }
-               }
-       });
-
-// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
-       jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
-
-// Hook for boolean attributes
-       boolHook = {
-               get: function( elem, name ) {
-                       // Align boolean attributes with corresponding properties
-                       // Fall back to attribute presence where some booleans are not supported
-                       var attrNode,
-                               property = jQuery.prop( elem, name );
-                       return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
-                               name.toLowerCase() :
-                               undefined;
-               },
-               set: function( elem, value, name ) {
-                       var propName;
-                       if ( value === false ) {
-                               // Remove boolean attributes when set to false
-                               jQuery.removeAttr( elem, name );
-                       } else {
-                               // value is true since we know at this point it's type boolean and not false
-                               // Set boolean attributes to the same name and set the DOM property
-                               propName = jQuery.propFix[ name ] || name;
-                               if ( propName in elem ) {
-                                       // Only set the IDL specifically if it already exists on the element
-                                       elem[ propName ] = true;
-                               }
-
-                               elem.setAttribute( name, name.toLowerCase() );
-                       }
-                       return name;
-               }
-       };
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-       if ( !getSetAttribute ) {
-
-               fixSpecified = {
-                       name: true,
-                       id: true,
-                       coords: true
-               };
-
-               // Use this for any attribute in IE6/7
-               // This fixes almost every IE6/7 issue
-               nodeHook = jQuery.valHooks.button = {
-                       get: function( elem, name ) {
-                               var ret;
-                               ret = elem.getAttributeNode( name );
-                               return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
-                                       ret.nodeValue :
-                                       undefined;
-                       },
-                       set: function( elem, value, name ) {
-                               // Set the existing or create a new attribute node
-                               var ret = elem.getAttributeNode( name );
-                               if ( !ret ) {
-                                       ret = document.createAttribute( name );
-                                       elem.setAttributeNode( ret );
-                               }
-                               return ( ret.nodeValue = value + "" );
-                       }
-               };
-
-               // Apply the nodeHook to tabindex
-               jQuery.attrHooks.tabindex.set = nodeHook.set;
-
-               // Set width and height to auto instead of 0 on empty string( Bug #8150 )
-               // This is for removals
-               jQuery.each([ "width", "height" ], function( i, name ) {
-                       jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-                               set: function( elem, value ) {
-                                       if ( value === "" ) {
-                                               elem.setAttribute( name, "auto" );
-                                               return value;
-                                       }
-                               }
-                       });
-               });
-
-               // Set contenteditable to false on removals(#10429)
-               // Setting to empty string throws an error as an invalid value
-               jQuery.attrHooks.contenteditable = {
-                       get: nodeHook.get,
-                       set: function( elem, value, name ) {
-                               if ( value === "" ) {
-                                       value = "false";
-                               }
-                               nodeHook.set( elem, value, name );
-                       }
-               };
-       }
-
-
-// Some attributes require a special call on IE
-       if ( !jQuery.support.hrefNormalized ) {
-               jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
-                       jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-                               get: function( elem ) {
-                                       var ret = elem.getAttribute( name, 2 );
-                                       return ret === null ? undefined : ret;
-                               }
-                       });
-               });
-       }
-
-       if ( !jQuery.support.style ) {
-               jQuery.attrHooks.style = {
-                       get: function( elem ) {
-                               // Return undefined in the case of empty string
-                               // Normalize to lowercase since IE uppercases css property names
-                               return elem.style.cssText.toLowerCase() || undefined;
-                       },
-                       set: function( elem, value ) {
-                               return ( elem.style.cssText = "" + value );
-                       }
-               };
-       }
-
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-       if ( !jQuery.support.optSelected ) {
-               jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
-                       get: function( elem ) {
-                               var parent = elem.parentNode;
-
-                               if ( parent ) {
-                                       parent.selectedIndex;
-
-                                       // Make sure that it also works with optgroups, see #5701
-                                       if ( parent.parentNode ) {
-                                               parent.parentNode.selectedIndex;
-                                       }
-                               }
-                               return null;
-                       }
-               });
-       }
-
-// IE6/7 call enctype encoding
-       if ( !jQuery.support.enctype ) {
-               jQuery.propFix.enctype = "encoding";
-       }
-
-// Radios and checkboxes getter/setter
-       if ( !jQuery.support.checkOn ) {
-               jQuery.each([ "radio", "checkbox" ], function() {
-                       jQuery.valHooks[ this ] = {
-                               get: function( elem ) {
-                                       // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
-                                       return elem.getAttribute("value") === null ? "on" : elem.value;
-                               }
-                       };
-               });
-       }
-       jQuery.each([ "radio", "checkbox" ], function() {
-               jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
-                       set: function( elem, value ) {
-                               if ( jQuery.isArray( value ) ) {
-                                       return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
-                               }
-                       }
-               });
-       });
-
-
-
-
-       var rformElems = /^(?:textarea|input|select)$/i,
-               rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
-               rhoverHack = /(?:^|\s)hover(\.\S+)?\b/,
-               rkeyEvent = /^key/,
-               rmouseEvent = /^(?:mouse|contextmenu)|click/,
-               rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
-               rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
-               quickParse = function( selector ) {
-                       var quick = rquickIs.exec( selector );
-                       if ( quick ) {
-                               //   0  1    2   3
-                               // [ _, tag, id, class ]
-                               quick[1] = ( quick[1] || "" ).toLowerCase();
-                               quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" );
-                       }
-                       return quick;
-               },
-               quickIs = function( elem, m ) {
-                       var attrs = elem.attributes || {};
-                       return (
-                               (!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
-                                       (!m[2] || (attrs.id || {}).value === m[2]) &&
-                                       (!m[3] || m[3].test( (attrs[ "class" ] || {}).value ))
-                               );
-               },
-               hoverHack = function( events ) {
-                       return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
-               };
-
-       /*
-        * Helper functions for managing events -- not part of the public interface.
-        * Props to Dean Edwards' addEvent library for many of the ideas.
-        */
-       jQuery.event = {
-
-               add: function( elem, types, handler, data, selector ) {
-
-                       var elemData, eventHandle, events,
-                               t, tns, type, namespaces, handleObj,
-                               handleObjIn, quick, handlers, special;
-
-                       // Don't attach events to noData or text/comment nodes (allow plain objects tho)
-                       if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
-                               return;
-                       }
-
-                       // Caller can pass in an object of custom data in lieu of the handler
-                       if ( handler.handler ) {
-                               handleObjIn = handler;
-                               handler = handleObjIn.handler;
-                               selector = handleObjIn.selector;
-                       }
-
-                       // Make sure that the handler has a unique ID, used to find/remove it later
-                       if ( !handler.guid ) {
-                               handler.guid = jQuery.guid++;
-                       }
-
-                       // Init the element's event structure and main handler, if this is the first
-                       events = elemData.events;
-                       if ( !events ) {
-                               elemData.events = events = {};
-                       }
-                       eventHandle = elemData.handle;
-                       if ( !eventHandle ) {
-                               elemData.handle = eventHandle = function( e ) {
-                                       // Discard the second event of a jQuery.event.trigger() and
-                                       // when an event is called after a page has unloaded
-                                       return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
-                                               jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
-                                               undefined;
-                               };
-                               // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
-                               eventHandle.elem = elem;
-                       }
-
-                       // Handle multiple events separated by a space
-                       // jQuery(...).bind("mouseover mouseout", fn);
-                       types = jQuery.trim( hoverHack(types) ).split( " " );
-                       for ( t = 0; t < types.length; t++ ) {
-
-                               tns = rtypenamespace.exec( types[t] ) || [];
-                               type = tns[1];
-                               namespaces = ( tns[2] || "" ).split( "." ).sort();
-
-                               // If event changes its type, use the special event handlers for the changed type
-                               special = jQuery.event.special[ type ] || {};
-
-                               // If selector defined, determine special event api type, otherwise given type
-                               type = ( selector ? special.delegateType : special.bindType ) || type;
-
-                               // Update special based on newly reset type
-                               special = jQuery.event.special[ type ] || {};
-
-                               // handleObj is passed to all event handlers
-                               handleObj = jQuery.extend({
-                                       type: type,
-                                       origType: tns[1],
-                                       data: data,
-                                       handler: handler,
-                                       guid: handler.guid,
-                                       selector: selector,
-                                       quick: selector && quickParse( selector ),
-                                       namespace: namespaces.join(".")
-                               }, handleObjIn );
-
-                               // Init the event handler queue if we're the first
-                               handlers = events[ type ];
-                               if ( !handlers ) {
-                                       handlers = events[ type ] = [];
-                                       handlers.delegateCount = 0;
-
-                                       // Only use addEventListener/attachEvent if the special events handler returns false
-                                       if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-                                               // Bind the global event handler to the element
-                                               if ( elem.addEventListener ) {
-                                                       elem.addEventListener( type, eventHandle, false );
-
-                                               } else if ( elem.attachEvent ) {
-                                                       elem.attachEvent( "on" + type, eventHandle );
-                                               }
-                                       }
-                               }
-
-                               if ( special.add ) {
-                                       special.add.call( elem, handleObj );
-
-                                       if ( !handleObj.handler.guid ) {
-                                               handleObj.handler.guid = handler.guid;
-                                       }
-                               }
-
-                               // Add to the element's handler list, delegates in front
-                               if ( selector ) {
-                                       handlers.splice( handlers.delegateCount++, 0, handleObj );
-                               } else {
-                                       handlers.push( handleObj );
-                               }
-
-                               // Keep track of which events have ever been used, for event optimization
-                               jQuery.event.global[ type ] = true;
-                       }
-
-                       // Nullify elem to prevent memory leaks in IE
-                       elem = null;
-               },
-
-               global: {},
-
-               // Detach an event or set of events from an element
-               remove: function( elem, types, handler, selector, mappedTypes ) {
-
-                       var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
-                               t, tns, type, origType, namespaces, origCount,
-                               j, events, special, handle, eventType, handleObj;
-
-                       if ( !elemData || !(events = elemData.events) ) {
-                               return;
-                       }
-
-                       // Once for each type.namespace in types; type may be omitted
-                       types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
-                       for ( t = 0; t < types.length; t++ ) {
-                               tns = rtypenamespace.exec( types[t] ) || [];
-                               type = origType = tns[1];
-                               namespaces = tns[2];
-
-                               // Unbind all events (on this namespace, if provided) for the element
-                               if ( !type ) {
-                                       for ( type in events ) {
-                                               jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
-                                       }
-                                       continue;
-                               }
-
-                               special = jQuery.event.special[ type ] || {};
-                               type = ( selector? special.delegateType : special.bindType ) || type;
-                               eventType = events[ type ] || [];
-                               origCount = eventType.length;
-                               namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
-
-                               // Remove matching events
-                               for ( j = 0; j < eventType.length; j++ ) {
-                                       handleObj = eventType[ j ];
-
-                                       if ( ( mappedTypes || origType === handleObj.origType ) &&
-                                               ( !handler || handler.guid === handleObj.guid ) &&
-                                               ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
-                                               ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
-                                               eventType.splice( j--, 1 );
-
-                                               if ( handleObj.selector ) {
-                                                       eventType.delegateCount--;
-                                               }
-                                               if ( special.remove ) {
-                                                       special.remove.call( elem, handleObj );
-                                               }
-                                       }
-                               }
-
-                               // Remove generic event handler if we removed something and no more handlers exist
-                               // (avoids potential for endless recursion during removal of special event handlers)
-                               if ( eventType.length === 0 && origCount !== eventType.length ) {
-                                       if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
-                                               jQuery.removeEvent( elem, type, elemData.handle );
-                                       }
-
-                                       delete events[ type ];
-                               }
-                       }
-
-                       // Remove the expando if it's no longer used
-                       if ( jQuery.isEmptyObject( events ) ) {
-                               handle = elemData.handle;
-                               if ( handle ) {
-                                       handle.elem = null;
-                               }
-
-                               // removeData also checks for emptiness and clears the expando if empty
-                               // so use it instead of delete
-                               jQuery.removeData( elem, [ "events", "handle" ], true );
-                       }
-               },
-
-               // Events that are safe to short-circuit if no handlers are attached.
-               // Native DOM events should not be added, they may have inline handlers.
-               customEvent: {
-                       "getData": true,
-                       "setData": true,
-                       "changeData": true
-               },
-
-               trigger: function( event, data, elem, onlyHandlers ) {
-                       // Don't do events on text and comment nodes
-                       if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
-                               return;
-                       }
-
-                       // Event object or event type
-                       var type = event.type || event,
-                               namespaces = [],
-                               cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
-
-                       // focus/blur morphs to focusin/out; ensure we're not firing them right now
-                       if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
-                               return;
-                       }
-
-                       if ( type.indexOf( "!" ) >= 0 ) {
-                               // Exclusive events trigger only for the exact event (no namespaces)
-                               type = type.slice(0, -1);
-                               exclusive = true;
-                       }
-
-                       if ( type.indexOf( "." ) >= 0 ) {
-                               // Namespaced trigger; create a regexp to match event type in handle()
-                               namespaces = type.split(".");
-                               type = namespaces.shift();
-                               namespaces.sort();
-                       }
-
-                       if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
-                               // No jQuery handlers for this event type, and it can't have inline handlers
-                               return;
-                       }
-
-                       // Caller can pass in an Event, Object, or just an event type string
-                       event = typeof event === "object" ?
-                               // jQuery.Event object
-                               event[ jQuery.expando ] ? event :
-                                       // Object literal
-                                       new jQuery.Event( type, event ) :
-                               // Just the event type (string)
-                               new jQuery.Event( type );
-
-                       event.type = type;
-                       event.isTrigger = true;
-                       event.exclusive = exclusive;
-                       event.namespace = namespaces.join( "." );
-                       event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
-                       ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
-
-                       // Handle a global trigger
-                       if ( !elem ) {
-
-                               // TODO: Stop taunting the data cache; remove global events and always attach to document
-                               cache = jQuery.cache;
-                               for ( i in cache ) {
-                                       if ( cache[ i ].events && cache[ i ].events[ type ] ) {
-                                               jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
-                                       }
-                               }
-                               return;
-                       }
-
-                       // Clean up the event in case it is being reused
-                       event.result = undefined;
-                       if ( !event.target ) {
-                               event.target = elem;
-                       }
-
-                       // Clone any incoming data and prepend the event, creating the handler arg list
-                       data = data != null ? jQuery.makeArray( data ) : [];
-                       data.unshift( event );
-
-                       // Allow special events to draw outside the lines
-                       special = jQuery.event.special[ type ] || {};
-                       if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
-                               return;
-                       }
-
-                       // Determine event propagation path in advance, per W3C events spec (#9951)
-                       // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
-                       eventPath = [[ elem, special.bindType || type ]];
-                       if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
-                               bubbleType = special.delegateType || type;
-                               cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
-                               old = null;
-                               for ( ; cur; cur = cur.parentNode ) {
-                                       eventPath.push([ cur, bubbleType ]);
-                                       old = cur;
-                               }
-
-                               // Only add window if we got to document (e.g., not plain obj or detached DOM)
-                               if ( old && old === elem.ownerDocument ) {
-                                       eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
-                               }
-                       }
-
-                       // Fire handlers on the event path
-                       for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
-
-                               cur = eventPath[i][0];
-                               event.type = eventPath[i][1];
-
-                               handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
-                               if ( handle ) {
-                                       handle.apply( cur, data );
-                               }
-                               // Note that this is a bare JS function and not a jQuery handler
-                               handle = ontype && cur[ ontype ];
-                               if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
-                                       event.preventDefault();
-                               }
-                       }
-                       event.type = type;
-
-                       // If nobody prevented the default action, do it now
-                       if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
-                               if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
-                                       !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
-
-                                       // Call a native DOM method on the target with the same name name as the event.
-                                       // Can't use an .isFunction() check here because IE6/7 fails that test.
-                                       // Don't do default actions on window, that's where global variables be (#6170)
-                                       // IE<9 dies on focus/blur to hidden element (#1486)
-                                       if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
-
-                                               // Don't re-trigger an onFOO event when we call its FOO() method
-                                               old = elem[ ontype ];
-
-                                               if ( old ) {
-                                                       elem[ ontype ] = null;
-                                               }
-
-                                               // Prevent re-triggering of the same event, since we already bubbled it above
-                                               jQuery.event.triggered = type;
-                                               elem[ type ]();
-                                               jQuery.event.triggered = undefined;
-
-                                               if ( old ) {
-                                                       elem[ ontype ] = old;
-                                               }
-                                       }
-                               }
-                       }
-
-                       return event.result;
-               },
-
-               dispatch: function( event ) {
-
-                       // Make a writable jQuery.Event from the native event object
-                       event = jQuery.event.fix( event || window.event );
-
-                       var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
-                               delegateCount = handlers.delegateCount,
-                               args = [].slice.call( arguments, 0 ),
-                               run_all = !event.exclusive && !event.namespace,
-                               special = jQuery.event.special[ event.type ] || {},
-                               handlerQueue = [],
-                               i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;
-
-                       // Use the fix-ed jQuery.Event rather than the (read-only) native event
-                       args[0] = event;
-                       event.delegateTarget = this;
-
-                       // Call the preDispatch hook for the mapped type, and let it bail if desired
-                       if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
-                               return;
-                       }
-
-                       // Determine handlers that should run if there are delegated events
-                       // Avoid non-left-click bubbling in Firefox (#3861)
-                       if ( delegateCount && !(event.button && event.type === "click") ) {
-
-                               // Pregenerate a single jQuery object for reuse with .is()
-                               jqcur = jQuery(this);
-                               jqcur.context = this.ownerDocument || this;
-
-                               for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
-
-                                       // Don't process events on disabled elements (#6911, #8165)
-                                       if ( cur.disabled !== true ) {
-                                               selMatch = {};
-                                               matches = [];
-                                               jqcur[0] = cur;
-                                               for ( i = 0; i < delegateCount; i++ ) {
-                                                       handleObj = handlers[ i ];
-                                                       sel = handleObj.selector;
-
-                                                       if ( selMatch[ sel ] === undefined ) {
-                                                               selMatch[ sel ] = (
-                                                                       handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )
-                                                                       );
-                                                       }
-                                                       if ( selMatch[ sel ] ) {
-                                                               matches.push( handleObj );
-                                                       }
-                                               }
-                                               if ( matches.length ) {
-                                                       handlerQueue.push({ elem: cur, matches: matches });
-                                               }
-                                       }
-                               }
-                       }
-
-                       // Add the remaining (directly-bound) handlers
-                       if ( handlers.length > delegateCount ) {
-                               handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
-                       }
-
-                       // Run delegates first; they may want to stop propagation beneath us
-                       for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
-                               matched = handlerQueue[ i ];
-                               event.currentTarget = matched.elem;
-
-                               for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
-                                       handleObj = matched.matches[ j ];
-
-                                       // Triggered event must either 1) be non-exclusive and have no namespace, or
-                                       // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
-                                       if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
-
-                                               event.data = handleObj.data;
-                                               event.handleObj = handleObj;
-
-                                               ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
-                                                       .apply( matched.elem, args );
-
-                                               if ( ret !== undefined ) {
-                                                       event.result = ret;
-                                                       if ( ret === false ) {
-                                                               event.preventDefault();
-                                                               event.stopPropagation();
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-
-                       // Call the postDispatch hook for the mapped type
-                       if ( special.postDispatch ) {
-                               special.postDispatch.call( this, event );
-                       }
-
-                       return event.result;
-               },
-
-               // Includes some event props shared by KeyEvent and MouseEvent
-               // *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
-               props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
-               fixHooks: {},
-
-               keyHooks: {
-                       props: "char charCode key keyCode".split(" "),
-                       filter: function( event, original ) {
-
-                               // Add which for key events
-                               if ( event.which == null ) {
-                                       event.which = original.charCode != null ? original.charCode : original.keyCode;
-                               }
-
-                               return event;
-                       }
-               },
-
-               mouseHooks: {
-                       props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
-                       filter: function( event, original ) {
-                               var eventDoc, doc, body,
-                                       button = original.button,
-                                       fromElement = original.fromElement;
-
-                               // Calculate pageX/Y if missing and clientX/Y available
-                               if ( event.pageX == null && original.clientX != null ) {
-                                       eventDoc = event.target.ownerDocument || document;
-                                       doc = eventDoc.documentElement;
-                                       body = eventDoc.body;
-
-                                       event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
-                                       event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
-                               }
-
-                               // Add relatedTarget, if necessary
-                               if ( !event.relatedTarget && fromElement ) {
-                                       event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
-                               }
-
-                               // Add which for click: 1 === left; 2 === middle; 3 === right
-                               // Note: button is not normalized, so don't use it
-                               if ( !event.which && button !== undefined ) {
-                                       event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
-                               }
-
-                               return event;
-                       }
-               },
-
-               fix: function( event ) {
-                       if ( event[ jQuery.expando ] ) {
-                               return event;
-                       }
-
-                       // Create a writable copy of the event object and normalize some properties
-                       var i, prop,
-                               originalEvent = event,
-                               fixHook = jQuery.event.fixHooks[ event.type ] || {},
-                               copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
-                       event = jQuery.Event( originalEvent );
-
-                       for ( i = copy.length; i; ) {
-                               prop = copy[ --i ];
-                               event[ prop ] = originalEvent[ prop ];
-                       }
-
-                       // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
-                       if ( !event.target ) {
-                               event.target = originalEvent.srcElement || document;
-                       }
-
-                       // Target should not be a text node (#504, Safari)
-                       if ( event.target.nodeType === 3 ) {
-                               event.target = event.target.parentNode;
-                       }
-
-                       // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
-                       if ( event.metaKey === undefined ) {
-                               event.metaKey = event.ctrlKey;
-                       }
-
-                       return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
-               },
-
-               special: {
-                       ready: {
-                               // Make sure the ready event is setup
-                               setup: jQuery.bindReady
-                       },
-
-                       load: {
-                               // Prevent triggered image.load events from bubbling to window.load
-                               noBubble: true
-                       },
-
-                       focus: {
-                               delegateType: "focusin"
-                       },
-                       blur: {
-                               delegateType: "focusout"
-                       },
-
-                       beforeunload: {
-                               setup: function( data, namespaces, eventHandle ) {
-                                       // We only want to do this special case on windows
-                                       if ( jQuery.isWindow( this ) ) {
-                                               this.onbeforeunload = eventHandle;
-                                       }
-                               },
-
-                               teardown: function( namespaces, eventHandle ) {
-                                       if ( this.onbeforeunload === eventHandle ) {
-                                               this.onbeforeunload = null;
-                                       }
-                               }
-                       }
-               },
-
-               simulate: function( type, elem, event, bubble ) {
-                       // Piggyback on a donor event to simulate a different one.
-                       // Fake originalEvent to avoid donor's stopPropagation, but if the
-                       // simulated event prevents default then we do the same on the donor.
-                       var e = jQuery.extend(
-                               new jQuery.Event(),
-                               event,
-                               { type: type,
-                                       isSimulated: true,
-                                       originalEvent: {}
-                               }
-                       );
-                       if ( bubble ) {
-                               jQuery.event.trigger( e, null, elem );
-                       } else {
-                               jQuery.event.dispatch.call( elem, e );
-                       }
-                       if ( e.isDefaultPrevented() ) {
-                               event.preventDefault();
-                       }
-               }
-       };
-
-// Some plugins are using, but it's undocumented/deprecated and will be removed.
-// The 1.7 special event interface should provide all the hooks needed now.
-       jQuery.event.handle = jQuery.event.dispatch;
-
-       jQuery.removeEvent = document.removeEventListener ?
-               function( elem, type, handle ) {
-                       if ( elem.removeEventListener ) {
-                               elem.removeEventListener( type, handle, false );
-                       }
-               } :
-               function( elem, type, handle ) {
-                       if ( elem.detachEvent ) {
-                               elem.detachEvent( "on" + type, handle );
-                       }
-               };
-
-       jQuery.Event = function( src, props ) {
-               // Allow instantiation without the 'new' keyword
-               if ( !(this instanceof jQuery.Event) ) {
-                       return new jQuery.Event( src, props );
-               }
-
-               // Event object
-               if ( src && src.type ) {
-                       this.originalEvent = src;
-                       this.type = src.type;
-
-                       // Events bubbling up the document may have been marked as prevented
-                       // by a handler lower down the tree; reflect the correct value.
-                       this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
-                               src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
-
-                       // Event type
-               } else {
-                       this.type = src;
-               }
-
-               // Put explicitly provided properties onto the event object
-               if ( props ) {
-                       jQuery.extend( this, props );
-               }
-
-               // Create a timestamp if incoming event doesn't have one
-               this.timeStamp = src && src.timeStamp || jQuery.now();
-
-               // Mark it as fixed
-               this[ jQuery.expando ] = true;
-       };
-
-       function returnFalse() {
-               return false;
-       }
-       function returnTrue() {
-               return true;
-       }
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-       jQuery.Event.prototype = {
-               preventDefault: function() {
-                       this.isDefaultPrevented = returnTrue;
-
-                       var e = this.originalEvent;
-                       if ( !e ) {
-                               return;
-                       }
-
-                       // if preventDefault exists run it on the original event
-                       if ( e.preventDefault ) {
-                               e.preventDefault();
-
-                               // otherwise set the returnValue property of the original event to false (IE)
-                       } else {
-                               e.returnValue = false;
-                       }
-               },
-               stopPropagation: function() {
-                       this.isPropagationStopped = returnTrue;
-
-                       var e = this.originalEvent;
-                       if ( !e ) {
-                               return;
-                       }
-                       // if stopPropagation exists run it on the original event
-                       if ( e.stopPropagation ) {
-                               e.stopPropagation();
-                       }
-                       // otherwise set the cancelBubble property of the original event to true (IE)
-                       e.cancelBubble = true;
-               },
-               stopImmediatePropagation: function() {
-                       this.isImmediatePropagationStopped = returnTrue;
-                       this.stopPropagation();
-               },
-               isDefaultPrevented: returnFalse,
-               isPropagationStopped: returnFalse,
-               isImmediatePropagationStopped: returnFalse
-       };
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-       jQuery.each({
-               mouseenter: "mouseover",
-               mouseleave: "mouseout"
-       }, function( orig, fix ) {
-               jQuery.event.special[ orig ] = {
-                       delegateType: fix,
-                       bindType: fix,
-
-                       handle: function( event ) {
-                               var target = this,
-                                       related = event.relatedTarget,
-                                       handleObj = event.handleObj,
-                                       selector = handleObj.selector,
-                                       ret;
-
-                               // For mousenter/leave call the handler if related is outside the target.
-                               // NB: No relatedTarget if the mouse left/entered the browser window
-                               if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
-                                       event.type = handleObj.origType;
-                                       ret = handleObj.handler.apply( this, arguments );
-                                       event.type = fix;
-                               }
-                               return ret;
-                       }
-               };
-       });
-
-// IE submit delegation
-       if ( !jQuery.support.submitBubbles ) {
-
-               jQuery.event.special.submit = {
-                       setup: function() {
-                               // Only need this for delegated form submit events
-                               if ( jQuery.nodeName( this, "form" ) ) {
-                                       return false;
-                               }
-
-                               // Lazy-add a submit handler when a descendant form may potentially be submitted
-                               jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
-                                       // Node name check avoids a VML-related crash in IE (#9807)
-                                       var elem = e.target,
-                                               form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
-                                       if ( form && !form._submit_attached ) {
-                                               jQuery.event.add( form, "submit._submit", function( event ) {
-                                                       event._submit_bubble = true;
-                                               });
-                                               form._submit_attached = true;
-                                       }
-                               });
-                               // return undefined since we don't need an event listener
-                       },
-
-                       postDispatch: function( event ) {
-                               // If form was submitted by the user, bubble the event up the tree
-                               if ( event._submit_bubble ) {
-                                       delete event._submit_bubble;
-                                       if ( this.parentNode && !event.isTrigger ) {
-                                               jQuery.event.simulate( "submit", this.parentNode, event, true );
-                                       }
-                               }
-                       },
-
-                       teardown: function() {
-                               // Only need this for delegated form submit events
-                               if ( jQuery.nodeName( this, "form" ) ) {
-                                       return false;
-                               }
-
-                               // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
-                               jQuery.event.remove( this, "._submit" );
-                       }
-               };
-       }
-
-// IE change delegation and checkbox/radio fix
-       if ( !jQuery.support.changeBubbles ) {
-
-               jQuery.event.special.change = {
-
-                       setup: function() {
-
-                               if ( rformElems.test( this.nodeName ) ) {
-                                       // IE doesn't fire change on a check/radio until blur; trigger it on click
-                                       // after a propertychange. Eat the blur-change in special.change.handle.
-                                       // This still fires onchange a second time for check/radio after blur.
-                                       if ( this.type === "checkbox" || this.type === "radio" ) {
-                                               jQuery.event.add( this, "propertychange._change", function( event ) {
-                                                       if ( event.originalEvent.propertyName === "checked" ) {
-                                                               this._just_changed = true;
-                                                       }
-                                               });
-                                               jQuery.event.add( this, "click._change", function( event ) {
-                                                       if ( this._just_changed && !event.isTrigger ) {
-                                                               this._just_changed = false;
-                                                               jQuery.event.simulate( "change", this, event, true );
-                                                       }
-                                               });
-                                       }
-                                       return false;
-                               }
-                               // Delegated event; lazy-add a change handler on descendant inputs
-                               jQuery.event.add( this, "beforeactivate._change", function( e ) {
-                                       var elem = e.target;
-
-                                       if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
-                                               jQuery.event.add( elem, "change._change", function( event ) {
-                                                       if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
-                                                               jQuery.event.simulate( "change", this.parentNode, event, true );
-                                                       }
-                                               });
-                                               elem._change_attached = true;
-                                       }
-                               });
-                       },
-
-                       handle: function( event ) {
-                               var elem = event.target;
-
-                               // Swallow native change events from checkbox/radio, we already triggered them above
-                               if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
-                                       return event.handleObj.handler.apply( this, arguments );
-                               }
-                       },
-
-                       teardown: function() {
-                               jQuery.event.remove( this, "._change" );
-
-                               return rformElems.test( this.nodeName );
-                       }
-               };
-       }
-
-// Create "bubbling" focus and blur events
-       if ( !jQuery.support.focusinBubbles ) {
-               jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
-                       // Attach a single capturing handler while someone wants focusin/focusout
-                       var attaches = 0,
-                               handler = function( event ) {
-                                       jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
-                               };
-
-                       jQuery.event.special[ fix ] = {
-                               setup: function() {
-                                       if ( attaches++ === 0 ) {
-                                               document.addEventListener( orig, handler, true );
-                                       }
-                               },
-                               teardown: function() {
-                                       if ( --attaches === 0 ) {
-                                               document.removeEventListener( orig, handler, true );
-                                       }
-                               }
-                       };
-               });
-       }
-
-       jQuery.fn.extend({
-
-               on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
-                       var origFn, type;
-
-                       // Types can be a map of types/handlers
-                       if ( typeof types === "object" ) {
-                               // ( types-Object, selector, data )
-                               if ( typeof selector !== "string" ) { // && selector != null
-                                       // ( types-Object, data )
-                                       data = data || selector;
-                                       selector = undefined;
-                               }
-                               for ( type in types ) {
-                                       this.on( type, selector, data, types[ type ], one );
-                               }
-                               return this;
-                       }
-
-                       if ( data == null && fn == null ) {
-                               // ( types, fn )
-                               fn = selector;
-                               data = selector = undefined;
-                       } else if ( fn == null ) {
-                               if ( typeof selector === "string" ) {
-                                       // ( types, selector, fn )
-                                       fn = data;
-                                       data = undefined;
-                               } else {
-                                       // ( types, data, fn )
-                                       fn = data;
-                                       data = selector;
-                                       selector = undefined;
-                               }
-                       }
-                       if ( fn === false ) {
-                               fn = returnFalse;
-                       } else if ( !fn ) {
-                               return this;
-                       }
-
-                       if ( one === 1 ) {
-                               origFn = fn;
-                               fn = function( event ) {
-                                       // Can use an empty set, since event contains the info
-                                       jQuery().off( event );
-                                       return origFn.apply( this, arguments );
-                               };
-                               // Use same guid so caller can remove using origFn
-                               fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
-                       }
-                       return this.each( function() {
-                               jQuery.event.add( this, types, fn, data, selector );
-                       });
-               },
-               one: function( types, selector, data, fn ) {
-                       return this.on( types, selector, data, fn, 1 );
-               },
-               off: function( types, selector, fn ) {
-                       if ( types && types.preventDefault && types.handleObj ) {
-                               // ( event )  dispatched jQuery.Event
-                               var handleObj = types.handleObj;
-                               jQuery( types.delegateTarget ).off(
-                                       handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
-                                       handleObj.selector,
-                                       handleObj.handler
-                               );
-                               return this;
-                       }
-                       if ( typeof types === "object" ) {
-                               // ( types-object [, selector] )
-                               for ( var type in types ) {
-                                       this.off( type, selector, types[ type ] );
-                               }
-                               return this;
-                       }
-                       if ( selector === false || typeof selector === "function" ) {
-                               // ( types [, fn] )
-                               fn = selector;
-                               selector = undefined;
-                       }
-                       if ( fn === false ) {
-                               fn = returnFalse;
-                       }
-                       return this.each(function() {
-                               jQuery.event.remove( this, types, fn, selector );
-                       });
-               },
-
-               bind: function( types, data, fn ) {
-                       return this.on( types, null, data, fn );
-               },
-               unbind: function( types, fn ) {
-                       return this.off( types, null, fn );
-               },
-
-               live: function( types, data, fn ) {
-                       jQuery( this.context ).on( types, this.selector, data, fn );
-                       return this;
-               },
-               die: function( types, fn ) {
-                       jQuery( this.context ).off( types, this.selector || "**", fn );
-                       return this;
-               },
-
-               delegate: function( selector, types, data, fn ) {
-                       return this.on( types, selector, data, fn );
-               },
-               undelegate: function( selector, types, fn ) {
-                       // ( namespace ) or ( selector, types [, fn] )
-                       return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
-               },
-
-               trigger: function( type, data ) {
-                       return this.each(function() {
-                               jQuery.event.trigger( type, data, this );
-                       });
-               },
-               triggerHandler: function( type, data ) {
-                       if ( this[0] ) {
-                               return jQuery.event.trigger( type, data, this[0], true );
-                       }
-               },
-
-               toggle: function( fn ) {
-                       // Save reference to arguments for access in closure
-                       var args = arguments,
-                               guid = fn.guid || jQuery.guid++,
-                               i = 0,
-                               toggler = function( event ) {
-                                       // Figure out which function to execute
-                                       var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
-                                       jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
-                                       // Make sure that clicks stop
-                                       event.preventDefault();
-
-                                       // and execute the function
-                                       return args[ lastToggle ].apply( this, arguments ) || false;
-                               };
-
-                       // link all the functions, so any of them can unbind this click handler
-                       toggler.guid = guid;
-                       while ( i < args.length ) {
-                               args[ i++ ].guid = guid;
-                       }
-
-                       return this.click( toggler );
-               },
-
-               hover: function( fnOver, fnOut ) {
-                       return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-               }
-       });
-
-       jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
-               "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
-               "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
-
-               // Handle event binding
-               jQuery.fn[ name ] = function( data, fn ) {
-                       if ( fn == null ) {
-                               fn = data;
-                               data = null;
-                       }
-
-                       return arguments.length > 0 ?
-                               this.on( name, null, data, fn ) :
-                               this.trigger( name );
-               };
-
-               if ( jQuery.attrFn ) {
-                       jQuery.attrFn[ name ] = true;
-               }
-
-               if ( rkeyEvent.test( name ) ) {
-                       jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
-               }
-
-               if ( rmouseEvent.test( name ) ) {
-                       jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
-               }
-       });
-
-
-
-       /*!
-        * Sizzle CSS Selector Engine
-        *  Copyright 2011, The Dojo Foundation
-        *  Released under the MIT, BSD, and GPL Licenses.
-        *  More information: http://sizzlejs.com/
-        */
-       (function(){
-
-               var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-                       expando = "sizcache" + (Math.random() + '').replace('.', ''),
-                       done = 0,
-                       toString = Object.prototype.toString,
-                       hasDuplicate = false,
-                       baseHasDuplicate = true,
-                       rBackslash = /\\/g,
-                       rReturn = /\r\n/g,
-                       rNonWord = /\W/;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-//   Thus far that includes Google Chrome.
-               [0, 0].sort(function() {
-                       baseHasDuplicate = false;
-                       return 0;
-               });
-
-               var Sizzle = function( selector, context, results, seed ) {
-                       results = results || [];
-                       context = context || document;
-
-                       var origContext = context;
-
-                       if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
-                               return [];
-                       }
-
-                       if ( !selector || typeof selector !== "string" ) {
-                               return results;
-                       }
-
-                       var m, set, checkSet, extra, ret, cur, pop, i,
-                               prune = true,
-                               contextXML = Sizzle.isXML( context ),
-                               parts = [],
-                               soFar = selector;
-
-                       // Reset the position of the chunker regexp (start from head)
-                       do {
-                               chunker.exec( "" );
-                               m = chunker.exec( soFar );
-
-                               if ( m ) {
-                                       soFar = m[3];
-
-                                       parts.push( m[1] );
-
-                                       if ( m[2] ) {
-                                               extra = m[3];
-                                               break;
-                                       }
-                               }
-                       } while ( m );
-
-                       if ( parts.length > 1 && origPOS.exec( selector ) ) {
-
-                               if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
-                                       set = posProcess( parts[0] + parts[1], context, seed );
-
-                               } else {
-                                       set = Expr.relative[ parts[0] ] ?
-                                               [ context ] :
-                                               Sizzle( parts.shift(), context );
-
-                                       while ( parts.length ) {
-                                               selector = parts.shift();
-
-                                               if ( Expr.relative[ selector ] ) {
-                                                       selector += parts.shift();
-                                               }
-
-                                               set = posProcess( selector, set, seed );
-                                       }
-                               }
-
-                       } else {
-                               // Take a shortcut and set the context if the root selector is an ID
-                               // (but not if it'll be faster if the inner selector is an ID)
-                               if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
-                                       Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
-
-                                       ret = Sizzle.find( parts.shift(), context, contextXML );
-                                       context = ret.expr ?
-                                               Sizzle.filter( ret.expr, ret.set )[0] :
-                                               ret.set[0];
-                               }
-
-                               if ( context ) {
-                                       ret = seed ?
-                                       { expr: parts.pop(), set: makeArray(seed) } :
-                                               Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
-
-                                       set = ret.expr ?
-                                               Sizzle.filter( ret.expr, ret.set ) :
-                                               ret.set;
-
-                                       if ( parts.length > 0 ) {
-                                               checkSet = makeArray( set );
-
-                                       } else {
-                                               prune = false;
-                                       }
-
-                                       while ( parts.length ) {
-                                               cur = parts.pop();
-                                               pop = cur;
-
-                                               if ( !Expr.relative[ cur ] ) {
-                                                       cur = "";
-                                               } else {
-                                                       pop = parts.pop();
-                                               }
-
-                                               if ( pop == null ) {
-                                                       pop = context;
-                                               }
-
-                                               Expr.relative[ cur ]( checkSet, pop, contextXML );
-                                       }
-
-                               } else {
-                                       checkSet = parts = [];
-                               }
-                       }
-
-                       if ( !checkSet ) {
-                               checkSet = set;
-                       }
-
-                       if ( !checkSet ) {
-                               Sizzle.error( cur || selector );
-                       }
-
-                       if ( toString.call(checkSet) === "[object Array]" ) {
-                               if ( !prune ) {
-                                       results.push.apply( results, checkSet );
-
-                               } else if ( context && context.nodeType === 1 ) {
-                                       for ( i = 0; checkSet[i] != null; i++ ) {
-                                               if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
-                                                       results.push( set[i] );
-                                               }
-                                       }
-
-                               } else {
-                                       for ( i = 0; checkSet[i] != null; i++ ) {
-                                               if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
-                                                       results.push( set[i] );
-                                               }
-                                       }
-                               }
-
-                       } else {
-                               makeArray( checkSet, results );
-                       }
-
-                       if ( extra ) {
-                               Sizzle( extra, origContext, results, seed );
-                               Sizzle.uniqueSort( results );
-                       }
-
-                       return results;
-               };
-
-               Sizzle.uniqueSort = function( results ) {
-                       if ( sortOrder ) {
-                               hasDuplicate = baseHasDuplicate;
-                               results.sort( sortOrder );
-
-                               if ( hasDuplicate ) {
-                                       for ( var i = 1; i < results.length; i++ ) {
-                                               if ( results[i] === results[ i - 1 ] ) {
-                                                       results.splice( i--, 1 );
-                                               }
-                                       }
-                               }
-                       }
-
-                       return results;
-               };
-
-               Sizzle.matches = function( expr, set ) {
-                       return Sizzle( expr, null, null, set );
-               };
-
-               Sizzle.matchesSelector = function( node, expr ) {
-                       return Sizzle( expr, null, null, [node] ).length > 0;
-               };
-
-               Sizzle.find = function( expr, context, isXML ) {
-                       var set, i, len, match, type, left;
-
-                       if ( !expr ) {
-                               return [];
-                       }
-
-                       for ( i = 0, len = Expr.order.length; i < len; i++ ) {
-                               type = Expr.order[i];
-
-                               if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
-                                       left = match[1];
-                                       match.splice( 1, 1 );
-
-                                       if ( left.substr( left.length - 1 ) !== "\\" ) {
-                                               match[1] = (match[1] || "").replace( rBackslash, "" );
-                                               set = Expr.find[ type ]( match, context, isXML );
-
-                                               if ( set != null ) {
-                                                       expr = expr.replace( Expr.match[ type ], "" );
-                                                       break;
-                                               }
-                                       }
-                               }
-                       }
-
-                       if ( !set ) {
-                               set = typeof context.getElementsByTagName !== "undefined" ?
-                                       context.getElementsByTagName( "*" ) :
-                                       [];
-                       }
-
-                       return { set: set, expr: expr };
-               };
-
-               Sizzle.filter = function( expr, set, inplace, not ) {
-                       var match, anyFound,
-                               type, found, item, filter, left,
-                               i, pass,
-                               old = expr,
-                               result = [],
-                               curLoop = set,
-                               isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
-
-                       while ( expr && set.length ) {
-                               for ( type in Expr.filter ) {
-                                       if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
-                                               filter = Expr.filter[ type ];
-                                               left = match[1];
-
-                                               anyFound = false;
-
-                                               match.splice(1,1);
-
-                                               if ( left.substr( left.length - 1 ) === "\\" ) {
-                                                       continue;
-                                               }
-
-                                               if ( curLoop === result ) {
-                                                       result = [];
-                                               }
-
-                                               if ( Expr.preFilter[ type ] ) {
-                                                       match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
-                                                       if ( !match ) {
-                                                               anyFound = found = true;
-
-                                                       } else if ( match === true ) {
-                                                               continue;
-                                                       }
-                                               }
-
-                                               if ( match ) {
-                                                       for ( i = 0; (item = curLoop[i]) != null; i++ ) {
-                                                               if ( item ) {
-                                                                       found = filter( item, match, i, curLoop );
-                                                                       pass = not ^ found;
-
-                                                                       if ( inplace && found != null ) {
-                                                                               if ( pass ) {
-                                                                                       anyFound = true;
-
-                                                                               } else {
-                                                                                       curLoop[i] = false;
-                                                                               }
-
-                                                                       } else if ( pass ) {
-                                                                               result.push( item );
-                                                                               anyFound = true;
-                                                                       }
-                                                               }
-                                                       }
-                                               }
-
-                                               if ( found !== undefined ) {
-                                                       if ( !inplace ) {
-                                                               curLoop = result;
-                                                       }
-
-                                                       expr = expr.replace( Expr.match[ type ], "" );
-
-                                                       if ( !anyFound ) {
-                                                               return [];
-                                                       }
-
-                                                       break;
-                                               }
-                                       }
-                               }
-
-                               // Improper expression
-                               if ( expr === old ) {
-                                       if ( anyFound == null ) {
-                                               Sizzle.error( expr );
-
-                                       } else {
-                                               break;
-                                       }
-                               }
-
-                               old = expr;
-                       }
-
-                       return curLoop;
-               };
-
-               Sizzle.error = function( msg ) {
-                       throw new Error( "Syntax error, unrecognized expression: " + msg );
-               };
-
-               /**
-                * Utility function for retreiving the text value of an array of DOM nodes
-                * @param {Array|Element} elem
-                */
-               var getText = Sizzle.getText = function( elem ) {
-                       var i, node,
-                               nodeType = elem.nodeType,
-                               ret = "";
-
-                       if ( nodeType ) {
-                               if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
-                                       // Use textContent || innerText for elements
-                                       if ( typeof elem.textContent === 'string' ) {
-                                               return elem.textContent;
-                                       } else if ( typeof elem.innerText === 'string' ) {
-                                               // Replace IE's carriage returns
-                                               return elem.innerText.replace( rReturn, '' );
-                                       } else {
-                                               // Traverse it's children
-                                               for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
-                                                       ret += getText( elem );
-                                               }
-                                       }
-                               } else if ( nodeType === 3 || nodeType === 4 ) {
-                                       return elem.nodeValue;
-                               }
+               // An object can be passed to jQuery.data instead of a key/value pair; this gets
+               // shallow copied over onto the existing cache
+               if ( typeof name === "object" || typeof name === "function" ) {
+                       if ( pvt ) {
+                               cache[ id ] = jQuery.extend( cache[ id ], name );
                        } else {
+                               cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+                       }
+               }
 
-                               // If no nodeType, this is expected to be an array
-                               for ( i = 0; (node = elem[i]); i++ ) {
-                                       // Do not traverse comment nodes
-                                       if ( node.nodeType !== 8 ) {
-                                               ret += getText( node );
-                                       }
-                               }
-                       }
-                       return ret;
-               };
-
-               var Expr = Sizzle.selectors = {
-                       order: [ "ID", "NAME", "TAG" ],
-
-                       match: {
-                               ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
-                               CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
-                               NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
-                               ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
-                               TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
-                               CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
-                               POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
-                               PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
-                       },
-
-                       leftMatch: {},
-
-                       attrMap: {
-                               "class": "className",
-                               "for": "htmlFor"
-                       },
-
-                       attrHandle: {
-                               href: function( elem ) {
-                                       return elem.getAttribute( "href" );
-                               },
-                               type: function( elem ) {
-                                       return elem.getAttribute( "type" );
-                               }
-                       },
-
-                       relative: {
-                               "+": function(checkSet, part){
-                                       var isPartStr = typeof part === "string",
-                                               isTag = isPartStr && !rNonWord.test( part ),
-                                               isPartStrNotTag = isPartStr && !isTag;
-
-                                       if ( isTag ) {
-                                               part = part.toLowerCase();
-                                       }
-
-                                       for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
-                                               if ( (elem = checkSet[i]) ) {
-                                                       while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
-                                                       checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
-                                                               elem || false :
-                                                               elem === part;
-                                               }
-                                       }
-
-                                       if ( isPartStrNotTag ) {
-                                               Sizzle.filter( part, checkSet, true );
-                                       }
-                               },
-
-                               ">": function( checkSet, part ) {
-                                       var elem,
-                                               isPartStr = typeof part === "string",
-                                               i = 0,
-                                               l = checkSet.length;
-
-                                       if ( isPartStr && !rNonWord.test( part ) ) {
-                                               part = part.toLowerCase();
-
-                                               for ( ; i < l; i++ ) {
-                                                       elem = checkSet[i];
-
-                                                       if ( elem ) {
-                                                               var parent = elem.parentNode;
-                                                               checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
-                                                       }
-                                               }
-
-                                       } else {
-                                               for ( ; i < l; i++ ) {
-                                                       elem = checkSet[i];
-
-                                                       if ( elem ) {
-                                                               checkSet[i] = isPartStr ?
-                                                                       elem.parentNode :
-                                                                       elem.parentNode === part;
-                                                       }
-                                               }
-
-                                               if ( isPartStr ) {
-                                                       Sizzle.filter( part, checkSet, true );
-                                               }
-                                       }
-                               },
-
-                               "": function(checkSet, part, isXML){
-                                       var nodeCheck,
-                                               doneName = done++,
-                                               checkFn = dirCheck;
-
-                                       if ( typeof part === "string" && !rNonWord.test( part ) ) {
-                                               part = part.toLowerCase();
-                                               nodeCheck = part;
-                                               checkFn = dirNodeCheck;
-                                       }
-
-                                       checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
-                               },
-
-                               "~": function( checkSet, part, isXML ) {
-                                       var nodeCheck,
-                                               doneName = done++,
-                                               checkFn = dirCheck;
-
-                                       if ( typeof part === "string" && !rNonWord.test( part ) ) {
-                                               part = part.toLowerCase();
-                                               nodeCheck = part;
-                                               checkFn = dirNodeCheck;
-                                       }
-
-                                       checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
-                               }
-                       },
-
-                       find: {
-                               ID: function( match, context, isXML ) {
-                                       if ( typeof context.getElementById !== "undefined" && !isXML ) {
-                                               var m = context.getElementById(match[1]);
-                                               // Check parentNode to catch when Blackberry 4.6 returns
-                                               // nodes that are no longer in the document #6963
-                                               return m && m.parentNode ? [m] : [];
-                                       }
-                               },
-
-                               NAME: function( match, context ) {
-                                       if ( typeof context.getElementsByName !== "undefined" ) {
-                                               var ret = [],
-                                                       results = context.getElementsByName( match[1] );
-
-                                               for ( var i = 0, l = results.length; i < l; i++ ) {
-                                                       if ( results[i].getAttribute("name") === match[1] ) {
-                                                               ret.push( results[i] );
-                                                       }
-                                               }
-
-                                               return ret.length === 0 ? null : ret;
-                                       }
-                               },
-
-                               TAG: function( match, context ) {
-                                       if ( typeof context.getElementsByTagName !== "undefined" ) {
-                                               return context.getElementsByTagName( match[1] );
-                                       }
-                               }
-                       },
-                       preFilter: {
-                               CLASS: function( match, curLoop, inplace, result, not, isXML ) {
-                                       match = " " + match[1].replace( rBackslash, "" ) + " ";
-
-                                       if ( isXML ) {
-                                               return match;
-                                       }
-
-                                       for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
-                                               if ( elem ) {
-                                                       if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
-                                                               if ( !inplace ) {
-                                                                       result.push( elem );
-                                                               }
-
-                                                       } else if ( inplace ) {
-                                                               curLoop[i] = false;
-                                                       }
-                                               }
-                                       }
-
-                                       return false;
-                               },
-
-                               ID: function( match ) {
-                                       return match[1].replace( rBackslash, "" );
-                               },
-
-                               TAG: function( match, curLoop ) {
-                                       return match[1].replace( rBackslash, "" ).toLowerCase();
-                               },
-
-                               CHILD: function( match ) {
-                                       if ( match[1] === "nth" ) {
-                                               if ( !match[2] ) {
-                                                       Sizzle.error( match[0] );
-                                               }
-
-                                               match[2] = match[2].replace(/^\+|\s*/g, '');
-
-                                               // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
-                                               var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
-                                                       match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
-                                                               !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
-                                               // calculate the numbers (first)n+(last) including if they are negative
-                                               match[2] = (test[1] + (test[2] || 1)) - 0;
-                                               match[3] = test[3] - 0;
-                                       }
-                                       else if ( match[2] ) {
-                                               Sizzle.error( match[0] );
-                                       }
+               thisCache = cache[ id ];
 
-                                       // TODO: Move to normal caching system
-                                       match[0] = done++;
+               // jQuery data() is stored in a separate object inside the object's internal data
+               // cache in order to avoid key collisions between internal data and user-defined
+               // data.
+               if ( !pvt ) {
+                       if ( !thisCache.data ) {
+                               thisCache.data = {};
+                       }
 
-                                       return match;
-                               },
+                       thisCache = thisCache.data;
+               }
 
-                               ATTR: function( match, curLoop, inplace, result, not, isXML ) {
-                                       var name = match[1] = match[1].replace( rBackslash, "" );
+               if ( data !== undefined ) {
+                       thisCache[ jQuery.camelCase( name ) ] = data;
+               }
 
-                                       if ( !isXML && Expr.attrMap[name] ) {
-                                               match[1] = Expr.attrMap[name];
-                                       }
+               // Check for both converted-to-camel and non-converted data property names
+               // If a data property was specified
+               if ( getByName ) {
 
-                                       // Handle if an un-quoted value was used
-                                       match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
+                       // First Try to find as-is property data
+                       ret = thisCache[ name ];
 
-                                       if ( match[2] === "~=" ) {
-                                               match[4] = " " + match[4] + " ";
-                                       }
+                       // Test for null|undefined property data
+                       if ( ret == null ) {
 
-                                       return match;
-                               },
+                               // Try to find the camelCased property
+                               ret = thisCache[ jQuery.camelCase( name ) ];
+                       }
+               } else {
+                       ret = thisCache;
+               }
 
-                               PSEUDO: function( match, curLoop, inplace, result, not ) {
-                                       if ( match[1] === "not" ) {
-                                               // If we're dealing with a complex expression, or a simple one
-                                               if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
-                                                       match[3] = Sizzle(match[3], null, null, curLoop);
+               return ret;
+       },
 
-                                               } else {
-                                                       var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+       removeData: function( elem, name, pvt /* Internal Use Only */ ) {
+               if ( !jQuery.acceptData( elem ) ) {
+                       return;
+               }
 
-                                                       if ( !inplace ) {
-                                                               result.push.apply( result, ret );
-                                                       }
+               var thisCache, i, l,
 
-                                                       return false;
-                                               }
+                       isNode = elem.nodeType,
 
-                                       } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
-                                               return true;
-                                       }
+                       // See jQuery.data for more information
+                       cache = isNode ? jQuery.cache : elem,
+                       id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
 
-                                       return match;
-                               },
+               // If there is already no cache entry for this object, there is no
+               // purpose in continuing
+               if ( !cache[ id ] ) {
+                       return;
+               }
 
-                               POS: function( match ) {
-                                       match.unshift( true );
+               if ( name ) {
 
-                                       return match;
-                               }
-                       },
+                       thisCache = pvt ? cache[ id ] : cache[ id ].data;
 
-                       filters: {
-                               enabled: function( elem ) {
-                                       return elem.disabled === false && elem.type !== "hidden";
-                               },
+                       if ( thisCache ) {
 
-                               disabled: function( elem ) {
-                                       return elem.disabled === true;
-                               },
+                               // Support array or space separated string names for data keys
+                               if ( !jQuery.isArray( name ) ) {
 
-                               checked: function( elem ) {
-                                       return elem.checked === true;
-                               },
+                                       // try the string as a key before any manipulation
+                                       if ( name in thisCache ) {
+                                               name = [ name ];
+                                       } else {
 
-                               selected: function( elem ) {
-                                       // Accessing this property makes selected-by-default
-                                       // options in Safari work properly
-                                       if ( elem.parentNode ) {
-                                               elem.parentNode.selectedIndex;
+                                               // split the camel cased version by spaces unless a key with the spaces exists
+                                               name = jQuery.camelCase( name );
+                                               if ( name in thisCache ) {
+                                                       name = [ name ];
+                                               } else {
+                                                       name = name.split(" ");
+                                               }
                                        }
+                               }
 
-                                       return elem.selected === true;
-                               },
-
-                               parent: function( elem ) {
-                                       return !!elem.firstChild;
-                               },
+                               for ( i = 0, l = name.length; i < l; i++ ) {
+                                       delete thisCache[ name[i] ];
+                               }
 
-                               empty: function( elem ) {
-                                       return !elem.firstChild;
-                               },
+                               // If there is no data left in the cache, we want to continue
+                               // and let the cache object itself get destroyed
+                               if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
+                                       return;
+                               }
+                       }
+               }
 
-                               has: function( elem, i, match ) {
-                                       return !!Sizzle( match[3], elem ).length;
-                               },
+               // See jQuery.data for more information
+               if ( !pvt ) {
+                       delete cache[ id ].data;
 
-                               header: function( elem ) {
-                                       return (/h\d/i).test( elem.nodeName );
-                               },
+                       // Don't destroy the parent cache unless the internal data object
+                       // had been the only thing left in it
+                       if ( !isEmptyDataObject( cache[ id ] ) ) {
+                               return;
+                       }
+               }
 
-                               text: function( elem ) {
-                                       var attr = elem.getAttribute( "type" ), type = elem.type;
-                                       // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
-                                       // use getAttribute instead to test this case
-                                       return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
-                               },
+               // Destroy the cache
+               if ( isNode ) {
+                       jQuery.cleanData( [ elem ], true );
 
-                               radio: function( elem ) {
-                                       return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
-                               },
+               // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+               } else if ( jQuery.support.deleteExpando || cache != cache.window ) {
+                       delete cache[ id ];
 
-                               checkbox: function( elem ) {
-                                       return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
-                               },
+               // When all else fails, null
+               } else {
+                       cache[ id ] = null;
+               }
+       },
 
-                               file: function( elem ) {
-                                       return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
-                               },
+       // For internal use only.
+       _data: function( elem, name, data ) {
+               return jQuery.data( elem, name, data, true );
+       },
 
-                               password: function( elem ) {
-                                       return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
-                               },
+       // A method for determining if a DOM node can handle the data expando
+       acceptData: function( elem ) {
+               var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
 
-                               submit: function( elem ) {
-                                       var name = elem.nodeName.toLowerCase();
-                                       return (name === "input" || name === "button") && "submit" === elem.type;
-                               },
+               // nodes accept data unless otherwise specified; rejection can be conditional
+               return !noData || noData !== true && elem.getAttribute("classid") === noData;
+       }
+});
 
-                               image: function( elem ) {
-                                       return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
-                               },
+jQuery.fn.extend({
+       data: function( key, value ) {
+               var parts, part, attr, name, l,
+                       elem = this[0],
+                       i = 0,
+                       data = null;
 
-                               reset: function( elem ) {
-                                       var name = elem.nodeName.toLowerCase();
-                                       return (name === "input" || name === "button") && "reset" === elem.type;
-                               },
+               // Gets all values
+               if ( key === undefined ) {
+                       if ( this.length ) {
+                               data = jQuery.data( elem );
 
-                               button: function( elem ) {
-                                       var name = elem.nodeName.toLowerCase();
-                                       return name === "input" && "button" === elem.type || name === "button";
-                               },
+                               if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+                                       attr = elem.attributes;
+                                       for ( l = attr.length; i < l; i++ ) {
+                                               name = attr[i].name;
 
-                               input: function( elem ) {
-                                       return (/input|select|textarea|button/i).test( elem.nodeName );
-                               },
+                                               if ( name.indexOf( "data-" ) === 0 ) {
+                                                       name = jQuery.camelCase( name.substring(5) );
 
-                               focus: function( elem ) {
-                                       return elem === elem.ownerDocument.activeElement;
+                                                       dataAttr( elem, name, data[ name ] );
+                                               }
+                                       }
+                                       jQuery._data( elem, "parsedAttrs", true );
                                }
-                       },
-                       setFilters: {
-                               first: function( elem, i ) {
-                                       return i === 0;
-                               },
-
-                               last: function( elem, i, match, array ) {
-                                       return i === array.length - 1;
-                               },
+                       }
 
-                               even: function( elem, i ) {
-                                       return i % 2 === 0;
-                               },
+                       return data;
+               }
 
-                               odd: function( elem, i ) {
-                                       return i % 2 === 1;
-                               },
+               // Sets multiple values
+               if ( typeof key === "object" ) {
+                       return this.each(function() {
+                               jQuery.data( this, key );
+                       });
+               }
 
-                               lt: function( elem, i, match ) {
-                                       return i < match[3] - 0;
-                               },
+               parts = key.split( ".", 2 );
+               parts[1] = parts[1] ? "." + parts[1] : "";
+               part = parts[1] + "!";
 
-                               gt: function( elem, i, match ) {
-                                       return i > match[3] - 0;
-                               },
+               return jQuery.access( this, function( value ) {
 
-                               nth: function( elem, i, match ) {
-                                       return match[3] - 0 === i;
-                               },
+                       if ( value === undefined ) {
+                               data = this.triggerHandler( "getData" + part, [ parts[0] ] );
 
-                               eq: function( elem, i, match ) {
-                                       return match[3] - 0 === i;
+                               // Try to fetch any internally stored data first
+                               if ( data === undefined && elem ) {
+                                       data = jQuery.data( elem, key );
+                                       data = dataAttr( elem, key, data );
                                }
-                       },
-                       filter: {
-                               PSEUDO: function( elem, match, i, array ) {
-                                       var name = match[1],
-                                               filter = Expr.filters[ name ];
 
-                                       if ( filter ) {
-                                               return filter( elem, i, match, array );
+                               return data === undefined && parts[1] ?
+                                       this.data( parts[0] ) :
+                                       data;
+                       }
 
-                                       } else if ( name === "contains" ) {
-                                               return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
+                       parts[1] = value;
+                       this.each(function() {
+                               var self = jQuery( this );
 
-                                       } else if ( name === "not" ) {
-                                               var not = match[3];
+                               self.triggerHandler( "setData" + part, parts );
+                               jQuery.data( this, key, value );
+                               self.triggerHandler( "changeData" + part, parts );
+                       });
+               }, null, value, arguments.length > 1, null, false );
+       },
 
-                                               for ( var j = 0, l = not.length; j < l; j++ ) {
-                                                       if ( not[j] === elem ) {
-                                                               return false;
-                                                       }
-                                               }
+       removeData: function( key ) {
+               return this.each(function() {
+                       jQuery.removeData( this, key );
+               });
+       }
+});
 
-                                               return true;
+function dataAttr( elem, key, data ) {
+       // If nothing was found internally, try to fetch any
+       // data from the HTML5 data-* attribute
+       if ( data === undefined && elem.nodeType === 1 ) {
 
-                                       } else {
-                                               Sizzle.error( name );
-                                       }
-                               },
+               var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
 
-                               CHILD: function( elem, match ) {
-                                       var first, last,
-                                               doneName, parent, cache,
-                                               count, diff,
-                                               type = match[1],
-                                               node = elem;
-
-                                       switch ( type ) {
-                                               case "only":
-                                               case "first":
-                                                       while ( (node = node.previousSibling) ) {
-                                                               if ( node.nodeType === 1 ) {
-                                                                       return false;
-                                                               }
-                                                       }
+               data = elem.getAttribute( name );
 
-                                                       if ( type === "first" ) {
-                                                               return true;
-                                                       }
+               if ( typeof data === "string" ) {
+                       try {
+                               data = data === "true" ? true :
+                               data === "false" ? false :
+                               data === "null" ? null :
+                               // Only convert to a number if it doesn't change the string
+                               +data + "" === data ? +data :
+                               rbrace.test( data ) ? jQuery.parseJSON( data ) :
+                                       data;
+                       } catch( e ) {}
+
+                       // Make sure we set the data so it isn't changed later
+                       jQuery.data( elem, key, data );
 
-                                                       node = elem;
+               } else {
+                       data = undefined;
+               }
+       }
 
-                                               /* falls through */
-                                               case "last":
-                                                       while ( (node = node.nextSibling) ) {
-                                                               if ( node.nodeType === 1 ) {
-                                                                       return false;
-                                                               }
-                                                       }
+       return data;
+}
 
-                                                       return true;
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+       var name;
+       for ( name in obj ) {
 
-                                               case "nth":
-                                                       first = match[2];
-                                                       last = match[3];
+               // if the public data object is empty, the private is still empty
+               if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+                       continue;
+               }
+               if ( name !== "toJSON" ) {
+                       return false;
+               }
+       }
 
-                                                       if ( first === 1 && last === 0 ) {
-                                                               return true;
-                                                       }
+       return true;
+}
+jQuery.extend({
+       queue: function( elem, type, data ) {
+               var queue;
 
-                                                       doneName = match[0];
-                                                       parent = elem.parentNode;
+               if ( elem ) {
+                       type = ( type || "fx" ) + "queue";
+                       queue = jQuery._data( elem, type );
 
-                                                       if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
-                                                               count = 0;
+                       // Speed up dequeue by getting out quickly if this is just a lookup
+                       if ( data ) {
+                               if ( !queue || jQuery.isArray(data) ) {
+                                       queue = jQuery._data( elem, type, jQuery.makeArray(data) );
+                               } else {
+                                       queue.push( data );
+                               }
+                       }
+                       return queue || [];
+               }
+       },
 
-                                                               for ( node = parent.firstChild; node; node = node.nextSibling ) {
-                                                                       if ( node.nodeType === 1 ) {
-                                                                               node.nodeIndex = ++count;
-                                                                       }
-                                                               }
+       dequeue: function( elem, type ) {
+               type = type || "fx";
 
-                                                               parent[ expando ] = doneName;
-                                                       }
+               var queue = jQuery.queue( elem, type ),
+                       startLength = queue.length,
+                       fn = queue.shift(),
+                       hooks = jQuery._queueHooks( elem, type ),
+                       next = function() {
+                               jQuery.dequeue( elem, type );
+                       };
 
-                                                       diff = elem.nodeIndex - last;
+               // If the fx queue is dequeued, always remove the progress sentinel
+               if ( fn === "inprogress" ) {
+                       fn = queue.shift();
+                       startLength--;
+               }
 
-                                                       if ( first === 0 ) {
-                                                               return diff === 0;
+               if ( fn ) {
 
-                                                       } else {
-                                                               return ( diff % first === 0 && diff / first >= 0 );
-                                                       }
-                                       }
-                               },
+                       // Add a progress sentinel to prevent the fx queue from being
+                       // automatically dequeued
+                       if ( type === "fx" ) {
+                               queue.unshift( "inprogress" );
+                       }
 
-                               ID: function( elem, match ) {
-                                       return elem.nodeType === 1 && elem.getAttribute("id") === match;
-                               },
+                       // clear up the last queue stop function
+                       delete hooks.stop;
+                       fn.call( elem, next, hooks );
+               }
 
-                               TAG: function( elem, match ) {
-                                       return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
-                               },
+               if ( !startLength && hooks ) {
+                       hooks.empty.fire();
+               }
+       },
+
+       // not intended for public consumption - generates a queueHooks object, or returns the current one
+       _queueHooks: function( elem, type ) {
+               var key = type + "queueHooks";
+               return jQuery._data( elem, key ) || jQuery._data( elem, key, {
+                       empty: jQuery.Callbacks("once memory").add(function() {
+                               jQuery.removeData( elem, type + "queue", true );
+                               jQuery.removeData( elem, key, true );
+                       })
+               });
+       }
+});
 
-                               CLASS: function( elem, match ) {
-                                       return (" " + (elem.className || elem.getAttribute("class")) + " ")
-                                               .indexOf( match ) > -1;
-                               },
+jQuery.fn.extend({
+       queue: function( type, data ) {
+               var setter = 2;
 
-                               ATTR: function( elem, match ) {
-                                       var name = match[1],
-                                               result = Sizzle.attr ?
-                                                       Sizzle.attr( elem, name ) :
-                                                       Expr.attrHandle[ name ] ?
-                                                               Expr.attrHandle[ name ]( elem ) :
-                                                               elem[ name ] != null ?
-                                                                       elem[ name ] :
-                                                                       elem.getAttribute( name ),
-                                               value = result + "",
-                                               type = match[2],
-                                               check = match[4];
-
-                                       return result == null ?
-                                               type === "!=" :
-                                               !type && Sizzle.attr ?
-                                                       result != null :
-                                                       type === "=" ?
-                                                               value === check :
-                                                               type === "*=" ?
-                                                                       value.indexOf(check) >= 0 :
-                                                                       type === "~=" ?
-                                                                               (" " + value + " ").indexOf(check) >= 0 :
-                                                                               !check ?
-                                                                                       value && result !== false :
-                                                                                       type === "!=" ?
-                                                                                               value !== check :
-                                                                                               type === "^=" ?
-                                                                                                       value.indexOf(check) === 0 :
-                                                                                                       type === "$=" ?
-                                                                                                               value.substr(value.length - check.length) === check :
-                                                                                                               type === "|=" ?
-                                                                                                                       value === check || value.substr(0, check.length + 1) === check + "-" :
-                                                                                                                       false;
-                               },
+               if ( typeof type !== "string" ) {
+                       data = type;
+                       type = "fx";
+                       setter--;
+               }
 
-                               POS: function( elem, match, i, array ) {
-                                       var name = match[2],
-                                               filter = Expr.setFilters[ name ];
+               if ( arguments.length < setter ) {
+                       return jQuery.queue( this[0], type );
+               }
 
-                                       if ( filter ) {
-                                               return filter( elem, i, match, array );
-                                       }
-                               }
-                       }
-               };
+               return data === undefined ?
+                       this :
+                       this.each(function() {
+                               var queue = jQuery.queue( this, type, data );
 
-               var origPOS = Expr.match.POS,
-                       fescape = function(all, num){
-                               return "\\" + (num - 0 + 1);
+                               // ensure a hooks for this queue
+                               jQuery._queueHooks( this, type );
+
+                               if ( type === "fx" && queue[0] !== "inprogress" ) {
+                                       jQuery.dequeue( this, type );
+                               }
+                       });
+       },
+       dequeue: function( type ) {
+               return this.each(function() {
+                       jQuery.dequeue( this, type );
+               });
+       },
+       // Based off of the plugin by Clint Helfers, with permission.
+       // http://blindsignals.com/index.php/2009/07/jquery-delay/
+       delay: function( time, type ) {
+               time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+               type = type || "fx";
+
+               return this.queue( type, function( next, hooks ) {
+                       var timeout = setTimeout( next, time );
+                       hooks.stop = function() {
+                               clearTimeout( timeout );
+                       };
+               });
+       },
+       clearQueue: function( type ) {
+               return this.queue( type || "fx", [] );
+       },
+       // Get a promise resolved when queues of a certain type
+       // are emptied (fx is the type by default)
+       promise: function( type, obj ) {
+               var tmp,
+                       count = 1,
+                       defer = jQuery.Deferred(),
+                       elements = this,
+                       i = this.length,
+                       resolve = function() {
+                               if ( !( --count ) ) {
+                                       defer.resolveWith( elements, [ elements ] );
+                               }
                        };
 
-               for ( var type in Expr.match ) {
-                       Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
-                       Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
+               if ( typeof type !== "string" ) {
+                       obj = type;
+                       type = undefined;
                }
-// Expose origPOS
-// "global" as in regardless of relation to brackets/parens
-               Expr.match.globalPOS = origPOS;
+               type = type || "fx";
 
-               var makeArray = function( array, results ) {
-                       array = Array.prototype.slice.call( array, 0 );
-
-                       if ( results ) {
-                               results.push.apply( results, array );
-                               return results;
+               while( i-- ) {
+                       tmp = jQuery._data( elements[ i ], type + "queueHooks" );
+                       if ( tmp && tmp.empty ) {
+                               count++;
+                               tmp.empty.add( resolve );
                        }
+               }
+               resolve();
+               return defer.promise( obj );
+       }
+});
+var nodeHook, boolHook, fixSpecified,
+       rclass = /[\t\r\n]/g,
+       rreturn = /\r/g,
+       rtype = /^(?:button|input)$/i,
+       rfocusable = /^(?:button|input|object|select|textarea)$/i,
+       rclickable = /^a(?:rea|)$/i,
+       rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+       getSetAttribute = jQuery.support.getSetAttribute;
+
+jQuery.fn.extend({
+       attr: function( name, value ) {
+               return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
+       },
+
+       removeAttr: function( name ) {
+               return this.each(function() {
+                       jQuery.removeAttr( this, name );
+               });
+       },
 
-                       return array;
-               };
+       prop: function( name, value ) {
+               return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
+       },
 
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-// Also verifies that the returned array holds DOM nodes
-// (which is not the case in the Blackberry browser)
-               try {
-                       Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+       removeProp: function( name ) {
+               name = jQuery.propFix[ name ] || name;
+               return this.each(function() {
+                       // try/catch handles cases where IE balks (such as removing a property on window)
+                       try {
+                               this[ name ] = undefined;
+                               delete this[ name ];
+                       } catch( e ) {}
+               });
+       },
 
-// Provide a fallback method if it does not work
-               } catch( e ) {
-                       makeArray = function( array, results ) {
-                               var i = 0,
-                                       ret = results || [];
+       addClass: function( value ) {
+               var classNames, i, l, elem,
+                       setClass, c, cl;
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each(function( j ) {
+                               jQuery( this ).addClass( value.call(this, j, this.className) );
+                       });
+               }
 
-                               if ( toString.call(array) === "[object Array]" ) {
-                                       Array.prototype.push.apply( ret, array );
+               if ( value && typeof value === "string" ) {
+                       classNames = value.split( core_rspace );
 
-                               } else {
-                                       if ( typeof array.length === "number" ) {
-                                               for ( var l = array.length; i < l; i++ ) {
-                                                       ret.push( array[i] );
-                                               }
+                       for ( i = 0, l = this.length; i < l; i++ ) {
+                               elem = this[ i ];
+
+                               if ( elem.nodeType === 1 ) {
+                                       if ( !elem.className && classNames.length === 1 ) {
+                                               elem.className = value;
 
                                        } else {
-                                               for ( ; array[i]; i++ ) {
-                                                       ret.push( array[i] );
+                                               setClass = " " + elem.className + " ";
+
+                                               for ( c = 0, cl = classNames.length; c < cl; c++ ) {
+                                                       if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
+                                                               setClass += classNames[ c ] + " ";
+                                                       }
                                                }
+                                               elem.className = jQuery.trim( setClass );
                                        }
                                }
-
-                               return ret;
-                       };
+                       }
                }
 
-               var sortOrder, siblingCheck;
+               return this;
+       },
 
-               if ( document.documentElement.compareDocumentPosition ) {
-                       sortOrder = function( a, b ) {
-                               if ( a === b ) {
-                                       hasDuplicate = true;
-                                       return 0;
-                               }
+       removeClass: function( value ) {
+               var removes, className, elem, c, cl, i, l;
 
-                               if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
-                                       return a.compareDocumentPosition ? -1 : 1;
-                               }
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each(function( j ) {
+                               jQuery( this ).removeClass( value.call(this, j, this.className) );
+                       });
+               }
+               if ( (value && typeof value === "string") || value === undefined ) {
+                       removes = ( value || "" ).split( core_rspace );
 
-                               return a.compareDocumentPosition(b) & 4 ? -1 : 1;
-                       };
+                       for ( i = 0, l = this.length; i < l; i++ ) {
+                               elem = this[ i ];
+                               if ( elem.nodeType === 1 && elem.className ) {
 
-               } else {
-                       sortOrder = function( a, b ) {
-                               // The nodes are identical, we can exit early
-                               if ( a === b ) {
-                                       hasDuplicate = true;
-                                       return 0;
-
-                                       // Fallback to using sourceIndex (in IE) if it's available on both nodes
-                               } else if ( a.sourceIndex && b.sourceIndex ) {
-                                       return a.sourceIndex - b.sourceIndex;
+                                       className = (" " + elem.className + " ").replace( rclass, " " );
+
+                                       // loop over each item in the removal list
+                                       for ( c = 0, cl = removes.length; c < cl; c++ ) {
+                                               // Remove until there is nothing to remove,
+                                               while ( className.indexOf(" " + removes[ c ] + " ") > -1 ) {
+                                                       className = className.replace( " " + removes[ c ] + " " , " " );
+                                               }
+                                       }
+                                       elem.className = value ? jQuery.trim( className ) : "";
                                }
+                       }
+               }
+
+               return this;
+       },
 
-                               var al, bl,
-                                       ap = [],
-                                       bp = [],
-                                       aup = a.parentNode,
-                                       bup = b.parentNode,
-                                       cur = aup;
+       toggleClass: function( value, stateVal ) {
+               var type = typeof value,
+                       isBool = typeof stateVal === "boolean";
 
-                               // If the nodes are siblings (or identical) we can do a quick check
-                               if ( aup === bup ) {
-                                       return siblingCheck( a, b );
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each(function( i ) {
+                               jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+                       });
+               }
 
-                                       // If no parents were found then the nodes are disconnected
-                               } else if ( !aup ) {
-                                       return -1;
+               return this.each(function() {
+                       if ( type === "string" ) {
+                               // toggle individual class names
+                               var className,
+                                       i = 0,
+                                       self = jQuery( this ),
+                                       state = stateVal,
+                                       classNames = value.split( core_rspace );
 
-                               } else if ( !bup ) {
-                                       return 1;
+                               while ( (className = classNames[ i++ ]) ) {
+                                       // check each className given, space separated list
+                                       state = isBool ? state : !self.hasClass( className );
+                                       self[ state ? "addClass" : "removeClass" ]( className );
                                }
 
-                               // Otherwise they're somewhere else in the tree so we need
-                               // to build up a full list of the parentNodes for comparison
-                               while ( cur ) {
-                                       ap.unshift( cur );
-                                       cur = cur.parentNode;
+                       } else if ( type === "undefined" || type === "boolean" ) {
+                               if ( this.className ) {
+                                       // store className if set
+                                       jQuery._data( this, "__className__", this.className );
                                }
 
-                               cur = bup;
+                               // toggle whole className
+                               this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+                       }
+               });
+       },
 
-                               while ( cur ) {
-                                       bp.unshift( cur );
-                                       cur = cur.parentNode;
-                               }
+       hasClass: function( selector ) {
+               var className = " " + selector + " ",
+                       i = 0,
+                       l = this.length;
+               for ( ; i < l; i++ ) {
+                       if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+                               return true;
+                       }
+               }
 
-                               al = ap.length;
-                               bl = bp.length;
+               return false;
+       },
 
-                               // Start walking down the tree looking for a discrepancy
-                               for ( var i = 0; i < al && i < bl; i++ ) {
-                                       if ( ap[i] !== bp[i] ) {
-                                               return siblingCheck( ap[i], bp[i] );
-                                       }
-                               }
+       val: function( value ) {
+               var hooks, ret, isFunction,
+                       elem = this[0];
 
-                               // We ended someplace up the tree so do a sibling check
-                               return i === al ?
-                                       siblingCheck( a, bp[i], -1 ) :
-                                       siblingCheck( ap[i], b, 1 );
-                       };
+               if ( !arguments.length ) {
+                       if ( elem ) {
+                               hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
 
-                       siblingCheck = function( a, b, ret ) {
-                               if ( a === b ) {
+                               if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
                                        return ret;
                                }
 
-                               var cur = a.nextSibling;
-
-                               while ( cur ) {
-                                       if ( cur === b ) {
-                                               return -1;
-                                       }
+                               ret = elem.value;
 
-                                       cur = cur.nextSibling;
-                               }
+                               return typeof ret === "string" ?
+                                       // handle most common string cases
+                                       ret.replace(rreturn, "") :
+                                       // handle cases where value is null/undef or number
+                                       ret == null ? "" : ret;
+                       }
 
-                               return 1;
-                       };
+                       return;
                }
 
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-               (function(){
-                       // We're going to inject a fake input element with a specified name
-                       var form = document.createElement("div"),
-                               id = "script" + (new Date()).getTime(),
-                               root = document.documentElement;
+               isFunction = jQuery.isFunction( value );
 
-                       form.innerHTML = "<a name='" + id + "'/>";
+               return this.each(function( i ) {
+                       var val,
+                               self = jQuery(this);
 
-                       // Inject it into the root element, check its status, and remove it quickly
-                       root.insertBefore( form, root.firstChild );
-
-                       // The workaround has to do additional checks after a getElementById
-                       // Which slows things down for other browsers (hence the branching)
-                       if ( document.getElementById( id ) ) {
-                               Expr.find.ID = function( match, context, isXML ) {
-                                       if ( typeof context.getElementById !== "undefined" && !isXML ) {
-                                               var m = context.getElementById(match[1]);
-
-                                               return m ?
-                                                       m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
-                                                               [m] :
-                                                               undefined :
-                                                       [];
-                                       }
-                               };
+                       if ( this.nodeType !== 1 ) {
+                               return;
+                       }
 
-                               Expr.filter.ID = function( elem, match ) {
-                                       var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+                       if ( isFunction ) {
+                               val = value.call( this, i, self.val() );
+                       } else {
+                               val = value;
+                       }
 
-                                       return elem.nodeType === 1 && node && node.nodeValue === match;
-                               };
+                       // Treat null/undefined as ""; convert numbers to string
+                       if ( val == null ) {
+                               val = "";
+                       } else if ( typeof val === "number" ) {
+                               val += "";
+                       } else if ( jQuery.isArray( val ) ) {
+                               val = jQuery.map(val, function ( value ) {
+                                       return value == null ? "" : value + "";
+                               });
                        }
 
-                       root.removeChild( form );
+                       hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
 
-                       // release memory in IE
-                       root = form = null;
-               })();
+                       // If set returns undefined, fall back to normal setting
+                       if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+                               this.value = val;
+                       }
+               });
+       }
+});
 
-               (function(){
-                       // Check to see if the browser returns only elements
-                       // when doing getElementsByTagName("*")
+jQuery.extend({
+       valHooks: {
+               option: {
+                       get: function( elem ) {
+                               // attributes.value is undefined in Blackberry 4.7 but
+                               // uses .value. See #6932
+                               var val = elem.attributes.value;
+                               return !val || val.specified ? elem.value : elem.text;
+                       }
+               },
+               select: {
+                       get: function( elem ) {
+                               var value, i, max, option,
+                                       index = elem.selectedIndex,
+                                       values = [],
+                                       options = elem.options,
+                                       one = elem.type === "select-one";
+
+                               // Nothing was selected
+                               if ( index < 0 ) {
+                                       return null;
+                               }
 
-                       // Create a fake element
-                       var div = document.createElement("div");
-                       div.appendChild( document.createComment("") );
+                               // Loop through all the selected options
+                               i = one ? index : 0;
+                               max = one ? index + 1 : options.length;
+                               for ( ; i < max; i++ ) {
+                                       option = options[ i ];
 
-                       // Make sure no comments are found
-                       if ( div.getElementsByTagName("*").length > 0 ) {
-                               Expr.find.TAG = function( match, context ) {
-                                       var results = context.getElementsByTagName( match[1] );
+                                       // Don't return options that are disabled or in a disabled optgroup
+                                       if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
+                                                       (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
 
-                                       // Filter out possible comments
-                                       if ( match[1] === "*" ) {
-                                               var tmp = [];
+                                               // Get the specific value for the option
+                                               value = jQuery( option ).val();
 
-                                               for ( var i = 0; results[i]; i++ ) {
-                                                       if ( results[i].nodeType === 1 ) {
-                                                               tmp.push( results[i] );
-                                                       }
+                                               // We don't need an array for one selects
+                                               if ( one ) {
+                                                       return value;
                                                }
 
-                                               results = tmp;
+                                               // Multi-Selects return an array
+                                               values.push( value );
                                        }
+                               }
 
-                                       return results;
-                               };
-                       }
+                               // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
+                               if ( one && !values.length && options.length ) {
+                                       return jQuery( options[ index ] ).val();
+                               }
 
-                       // Check to see if an attribute returns normalized href attributes
-                       div.innerHTML = "<a href='#'></a>";
+                               return values;
+                       },
 
-                       if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
-                               div.firstChild.getAttribute("href") !== "#" ) {
+                       set: function( elem, value ) {
+                               var values = jQuery.makeArray( value );
 
-                               Expr.attrHandle.href = function( elem ) {
-                                       return elem.getAttribute( "href", 2 );
-                               };
-                       }
+                               jQuery(elem).find("option").each(function() {
+                                       this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+                               });
 
-                       // release memory in IE
-                       div = null;
-               })();
+                               if ( !values.length ) {
+                                       elem.selectedIndex = -1;
+                               }
+                               return values;
+                       }
+               }
+       },
 
-               if ( document.querySelectorAll ) {
-                       (function(){
-                               var oldSizzle = Sizzle,
-                                       div = document.createElement("div"),
-                                       id = "__sizzle__";
+       // Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9
+       attrFn: {},
 
-                               div.innerHTML = "<p class='TEST'></p>";
+       attr: function( elem, name, value, pass ) {
+               var ret, hooks, notxml,
+                       nType = elem.nodeType;
 
-                               // Safari can't handle uppercase or unicode characters when
-                               // in quirks mode.
-                               if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
-                                       return;
-                               }
+               // don't get/set attributes on text, comment and attribute nodes
+               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+                       return;
+               }
 
-                               Sizzle = function( query, context, extra, seed ) {
-                                       context = context || document;
+               if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) {
+                       return jQuery( elem )[ name ]( value );
+               }
 
-                                       // Only use querySelectorAll on non-XML documents
-                                       // (ID selectors don't work in non-HTML documents)
-                                       if ( !seed && !Sizzle.isXML(context) ) {
-                                               // See if we find a selector to speed up
-                                               var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
+               // Fallback to prop when attributes are not supported
+               if ( typeof elem.getAttribute === "undefined" ) {
+                       return jQuery.prop( elem, name, value );
+               }
 
-                                               if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
-                                                       // Speed-up: Sizzle("TAG")
-                                                       if ( match[1] ) {
-                                                               return makeArray( context.getElementsByTagName( query ), extra );
+               notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
 
-                                                               // Speed-up: Sizzle(".CLASS")
-                                                       } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
-                                                               return makeArray( context.getElementsByClassName( match[2] ), extra );
-                                                       }
-                                               }
+               // All attributes are lowercase
+               // Grab necessary hook if one is defined
+               if ( notxml ) {
+                       name = name.toLowerCase();
+                       hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
+               }
 
-                                               if ( context.nodeType === 9 ) {
-                                                       // Speed-up: Sizzle("body")
-                                                       // The body element only exists once, optimize finding it
-                                                       if ( query === "body" && context.body ) {
-                                                               return makeArray( [ context.body ], extra );
-
-                                                               // Speed-up: Sizzle("#ID")
-                                                       } else if ( match && match[3] ) {
-                                                               var elem = context.getElementById( match[3] );
-
-                                                               // Check parentNode to catch when Blackberry 4.6 returns
-                                                               // nodes that are no longer in the document #6963
-                                                               if ( elem && elem.parentNode ) {
-                                                                       // Handle the case where IE and Opera return items
-                                                                       // by name instead of ID
-                                                                       if ( elem.id === match[3] ) {
-                                                                               return makeArray( [ elem ], extra );
-                                                                       }
+               if ( value !== undefined ) {
 
-                                                               } else {
-                                                                       return makeArray( [], extra );
-                                                               }
-                                                       }
+                       if ( value === null ) {
+                               jQuery.removeAttr( elem, name );
+                               return;
 
-                                                       try {
-                                                               return makeArray( context.querySelectorAll(query), extra );
-                                                       } catch(qsaError) {}
-
-                                                       // qSA works strangely on Element-rooted queries
-                                                       // We can work around this by specifying an extra ID on the root
-                                                       // and working up from there (Thanks to Andrew Dupont for the technique)
-                                                       // IE 8 doesn't work on object elements
-                                               } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
-                                                       var oldContext = context,
-                                                               old = context.getAttribute( "id" ),
-                                                               nid = old || id,
-                                                               hasParent = context.parentNode,
-                                                               relativeHierarchySelector = /^\s*[+~]/.test( query );
-
-                                                       if ( !old ) {
-                                                               context.setAttribute( "id", nid );
-                                                       } else {
-                                                               nid = nid.replace( /'/g, "\\$&" );
-                                                       }
-                                                       if ( relativeHierarchySelector && hasParent ) {
-                                                               context = context.parentNode;
-                                                       }
+                       } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
+                               return ret;
 
-                                                       try {
-                                                               if ( !relativeHierarchySelector || hasParent ) {
-                                                                       return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
-                                                               }
+                       } else {
+                               elem.setAttribute( name, "" + value );
+                               return value;
+                       }
 
-                                                       } catch(pseudoError) {
-                                                       } finally {
-                                                               if ( !old ) {
-                                                                       oldContext.removeAttribute( "id" );
-                                                               }
-                                                       }
-                                               }
-                                       }
+               } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
+                       return ret;
 
-                                       return oldSizzle(query, context, extra, seed);
-                               };
+               } else {
 
-                               for ( var prop in oldSizzle ) {
-                                       Sizzle[ prop ] = oldSizzle[ prop ];
-                               }
+                       ret = elem.getAttribute( name );
 
-                               // release memory in IE
-                               div = null;
-                       })();
+                       // Non-existent attributes return null, we normalize to undefined
+                       return ret === null ?
+                               undefined :
+                               ret;
                }
+       },
 
-               (function(){
-                       var html = document.documentElement,
-                               matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
+       removeAttr: function( elem, value ) {
+               var propName, attrNames, name, isBool,
+                       i = 0;
 
-                       if ( matches ) {
-                               // Check to see if it's possible to do matchesSelector
-                               // on a disconnected node (IE 9 fails this)
-                               var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
-                                       pseudoWorks = false;
+               if ( value && elem.nodeType === 1 ) {
 
-                               try {
-                                       // This should fail with an exception
-                                       // Gecko does not error, returns false instead
-                                       matches.call( document.documentElement, "[test!='']:sizzle" );
+                       attrNames = value.split( core_rspace );
 
-                               } catch( pseudoError ) {
-                                       pseudoWorks = true;
-                               }
+                       for ( ; i < attrNames.length; i++ ) {
+                               name = attrNames[ i ];
 
-                               Sizzle.matchesSelector = function( node, expr ) {
-                                       // Make sure that attribute selectors are quoted
-                                       expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+                               if ( name ) {
+                                       propName = jQuery.propFix[ name ] || name;
+                                       isBool = rboolean.test( name );
 
-                                       if ( !Sizzle.isXML( node ) ) {
-                                               try {
-                                                       if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
-                                                               var ret = matches.call( node, expr );
-
-                                                               // IE 9's matchesSelector returns false on disconnected nodes
-                                                               if ( ret || !disconnectedMatch ||
-                                                                       // As well, disconnected nodes are said to be in a document
-                                                                       // fragment in IE 9, so check for that
-                                                                       node.document && node.document.nodeType !== 11 ) {
-                                                                       return ret;
-                                                               }
-                                                       }
-                                               } catch(e) {}
+                                       // See #9699 for explanation of this approach (setting first, then removal)
+                                       // Do not do this for boolean attributes (see #10870)
+                                       if ( !isBool ) {
+                                               jQuery.attr( elem, name, "" );
                                        }
+                                       elem.removeAttribute( getSetAttribute ? name : propName );
 
-                                       return Sizzle(expr, null, null, [node]).length > 0;
-                               };
+                                       // Set corresponding property to false for boolean attributes
+                                       if ( isBool && propName in elem ) {
+                                               elem[ propName ] = false;
+                                       }
+                               }
+                       }
+               }
+       },
+
+       attrHooks: {
+               type: {
+                       set: function( elem, value ) {
+                               // We can't allow the type property to be changed (since it causes problems in IE)
+                               if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
+                                       jQuery.error( "type property can't be changed" );
+                               } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+                                       // Setting the type on a radio button after the value resets the value in IE6-9
+                                       // Reset value to it's default in case type is set after value
+                                       // This is for element creation
+                                       var val = elem.value;
+                                       elem.setAttribute( "type", value );
+                                       if ( val ) {
+                                               elem.value = val;
+                                       }
+                                       return value;
+                               }
+                       }
+               },
+               // Use the value property for back compat
+               // Use the nodeHook for button elements in IE6/7 (#1954)
+               value: {
+                       get: function( elem, name ) {
+                               if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+                                       return nodeHook.get( elem, name );
+                               }
+                               return name in elem ?
+                                       elem.value :
+                                       null;
+                       },
+                       set: function( elem, value, name ) {
+                               if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
+                                       return nodeHook.set( elem, value, name );
+                               }
+                               // Does not return so that setAttribute is also used
+                               elem.value = value;
                        }
-               })();
+               }
+       },
+
+       propFix: {
+               tabindex: "tabIndex",
+               readonly: "readOnly",
+               "for": "htmlFor",
+               "class": "className",
+               maxlength: "maxLength",
+               cellspacing: "cellSpacing",
+               cellpadding: "cellPadding",
+               rowspan: "rowSpan",
+               colspan: "colSpan",
+               usemap: "useMap",
+               frameborder: "frameBorder",
+               contenteditable: "contentEditable"
+       },
+
+       prop: function( elem, name, value ) {
+               var ret, hooks, notxml,
+                       nType = elem.nodeType;
+
+               // don't get/set properties on text, comment and attribute nodes
+               if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+                       return;
+               }
 
-               (function(){
-                       var div = document.createElement("div");
+               notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
 
-                       div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+               if ( notxml ) {
+                       // Fix name and attach hooks
+                       name = jQuery.propFix[ name ] || name;
+                       hooks = jQuery.propHooks[ name ];
+               }
 
-                       // Opera can't find a second classname (in 9.6)
-                       // Also, make sure that getElementsByClassName actually exists
-                       if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
-                               return;
+               if ( value !== undefined ) {
+                       if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+                               return ret;
+
+                       } else {
+                               return ( elem[ name ] = value );
                        }
 
-                       // Safari caches class attributes, doesn't catch changes (in 3.2)
-                       div.lastChild.className = "e";
+               } else {
+                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+                               return ret;
 
-                       if ( div.getElementsByClassName("e").length === 1 ) {
-                               return;
+                       } else {
+                               return elem[ name ];
                        }
+               }
+       },
 
-                       Expr.order.splice(1, 0, "CLASS");
-                       Expr.find.CLASS = function( match, context, isXML ) {
-                               if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
-                                       return context.getElementsByClassName(match[1]);
-                               }
-                       };
+       propHooks: {
+               tabIndex: {
+                       get: function( elem ) {
+                               // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+                               // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+                               var attributeNode = elem.getAttributeNode("tabindex");
+
+                               return attributeNode && attributeNode.specified ?
+                                       parseInt( attributeNode.value, 10 ) :
+                                       rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+                                               0 :
+                                               undefined;
+                       }
+               }
+       }
+});
 
-                       // release memory in IE
-                       div = null;
-               })();
+// Hook for boolean attributes
+boolHook = {
+       get: function( elem, name ) {
+               // Align boolean attributes with corresponding properties
+               // Fall back to attribute presence where some booleans are not supported
+               var attrNode,
+                       property = jQuery.prop( elem, name );
+               return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
+                       name.toLowerCase() :
+                       undefined;
+       },
+       set: function( elem, value, name ) {
+               var propName;
+               if ( value === false ) {
+                       // Remove boolean attributes when set to false
+                       jQuery.removeAttr( elem, name );
+               } else {
+                       // value is true since we know at this point it's type boolean and not false
+                       // Set boolean attributes to the same name and set the DOM property
+                       propName = jQuery.propFix[ name ] || name;
+                       if ( propName in elem ) {
+                               // Only set the IDL specifically if it already exists on the element
+                               elem[ propName ] = true;
+                       }
 
-               function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-                       for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-                               var elem = checkSet[i];
+                       elem.setAttribute( name, name.toLowerCase() );
+               }
+               return name;
+       }
+};
 
-                               if ( elem ) {
-                                       var match = false;
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
 
-                                       elem = elem[dir];
+       fixSpecified = {
+               name: true,
+               id: true,
+               coords: true
+       };
 
-                                       while ( elem ) {
-                                               if ( elem[ expando ] === doneName ) {
-                                                       match = checkSet[elem.sizset];
-                                                       break;
-                                               }
+       // Use this for any attribute in IE6/7
+       // This fixes almost every IE6/7 issue
+       nodeHook = jQuery.valHooks.button = {
+               get: function( elem, name ) {
+                       var ret;
+                       ret = elem.getAttributeNode( name );
+                       return ret && ( fixSpecified[ name ] ? ret.value !== "" : ret.specified ) ?
+                               ret.value :
+                               undefined;
+               },
+               set: function( elem, value, name ) {
+                       // Set the existing or create a new attribute node
+                       var ret = elem.getAttributeNode( name );
+                       if ( !ret ) {
+                               ret = document.createAttribute( name );
+                               elem.setAttributeNode( ret );
+                       }
+                       return ( ret.value = value + "" );
+               }
+       };
 
-                                               if ( elem.nodeType === 1 && !isXML ){
-                                                       elem[ expando ] = doneName;
-                                                       elem.sizset = i;
-                                               }
+       // Set width and height to auto instead of 0 on empty string( Bug #8150 )
+       // This is for removals
+       jQuery.each([ "width", "height" ], function( i, name ) {
+               jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+                       set: function( elem, value ) {
+                               if ( value === "" ) {
+                                       elem.setAttribute( name, "auto" );
+                                       return value;
+                               }
+                       }
+               });
+       });
 
-                                               if ( elem.nodeName.toLowerCase() === cur ) {
-                                                       match = elem;
-                                                       break;
-                                               }
+       // Set contenteditable to false on removals(#10429)
+       // Setting to empty string throws an error as an invalid value
+       jQuery.attrHooks.contenteditable = {
+               get: nodeHook.get,
+               set: function( elem, value, name ) {
+                       if ( value === "" ) {
+                               value = "false";
+                       }
+                       nodeHook.set( elem, value, name );
+               }
+       };
+}
 
-                                               elem = elem[dir];
-                                       }
 
-                                       checkSet[i] = match;
-                               }
+// Some attributes require a special call on IE
+if ( !jQuery.support.hrefNormalized ) {
+       jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
+               jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
+                       get: function( elem ) {
+                               var ret = elem.getAttribute( name, 2 );
+                               return ret === null ? undefined : ret;
                        }
+               });
+       });
+}
+
+if ( !jQuery.support.style ) {
+       jQuery.attrHooks.style = {
+               get: function( elem ) {
+                       // Return undefined in the case of empty string
+                       // Normalize to lowercase since IE uppercases css property names
+                       return elem.style.cssText.toLowerCase() || undefined;
+               },
+               set: function( elem, value ) {
+                       return ( elem.style.cssText = "" + value );
                }
+       };
+}
 
-               function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-                       for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-                               var elem = checkSet[i];
+// Safari mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !jQuery.support.optSelected ) {
+       jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
+               get: function( elem ) {
+                       var parent = elem.parentNode;
 
-                               if ( elem ) {
-                                       var match = false;
+                       if ( parent ) {
+                               parent.selectedIndex;
 
-                                       elem = elem[dir];
+                               // Make sure that it also works with optgroups, see #5701
+                               if ( parent.parentNode ) {
+                                       parent.parentNode.selectedIndex;
+                               }
+                       }
+                       return null;
+               }
+       });
+}
 
-                                       while ( elem ) {
-                                               if ( elem[ expando ] === doneName ) {
-                                                       match = checkSet[elem.sizset];
-                                                       break;
-                                               }
+// IE6/7 call enctype encoding
+if ( !jQuery.support.enctype ) {
+       jQuery.propFix.enctype = "encoding";
+}
 
-                                               if ( elem.nodeType === 1 ) {
-                                                       if ( !isXML ) {
-                                                               elem[ expando ] = doneName;
-                                                               elem.sizset = i;
-                                                       }
+// Radios and checkboxes getter/setter
+if ( !jQuery.support.checkOn ) {
+       jQuery.each([ "radio", "checkbox" ], function() {
+               jQuery.valHooks[ this ] = {
+                       get: function( elem ) {
+                               // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+                               return elem.getAttribute("value") === null ? "on" : elem.value;
+                       }
+               };
+       });
+}
+jQuery.each([ "radio", "checkbox" ], function() {
+       jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
+               set: function( elem, value ) {
+                       if ( jQuery.isArray( value ) ) {
+                               return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+                       }
+               }
+       });
+});
+var rformElems = /^(?:textarea|input|select)$/i,
+       rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/,
+       rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,
+       rkeyEvent = /^key/,
+       rmouseEvent = /^(?:mouse|contextmenu)|click/,
+       rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+       hoverHack = function( events ) {
+               return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
+       };
 
-                                                       if ( typeof cur !== "string" ) {
-                                                               if ( elem === cur ) {
-                                                                       match = true;
-                                                                       break;
-                                                               }
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
 
-                                                       } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
-                                                               match = elem;
-                                                               break;
-                                                       }
-                                               }
+       add: function( elem, types, handler, data, selector ) {
 
-                                               elem = elem[dir];
-                                       }
+               var elemData, eventHandle, events,
+                       t, tns, type, namespaces, handleObj,
+                       handleObjIn, handlers, special;
 
-                                       checkSet[i] = match;
-                               }
-                       }
+               // Don't attach events to noData or text/comment nodes (allow plain objects tho)
+               if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
+                       return;
                }
 
-               if ( document.documentElement.contains ) {
-                       Sizzle.contains = function( a, b ) {
-                               return a !== b && (a.contains ? a.contains(b) : true);
-                       };
+               // Caller can pass in an object of custom data in lieu of the handler
+               if ( handler.handler ) {
+                       handleObjIn = handler;
+                       handler = handleObjIn.handler;
+                       selector = handleObjIn.selector;
+               }
 
-               } else if ( document.documentElement.compareDocumentPosition ) {
-                       Sizzle.contains = function( a, b ) {
-                               return !!(a.compareDocumentPosition(b) & 16);
-                       };
+               // Make sure that the handler has a unique ID, used to find/remove it later
+               if ( !handler.guid ) {
+                       handler.guid = jQuery.guid++;
+               }
 
-               } else {
-                       Sizzle.contains = function() {
-                               return false;
+               // Init the element's event structure and main handler, if this is the first
+               events = elemData.events;
+               if ( !events ) {
+                       elemData.events = events = {};
+               }
+               eventHandle = elemData.handle;
+               if ( !eventHandle ) {
+                       elemData.handle = eventHandle = function( e ) {
+                               // Discard the second event of a jQuery.event.trigger() and
+                               // when an event is called after a page has unloaded
+                               return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
+                                       jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+                                       undefined;
                        };
+                       // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+                       eventHandle.elem = elem;
                }
 
-               Sizzle.isXML = function( elem ) {
-                       // documentElement is verified for cases where it doesn't yet exist
-                       // (such as loading iframes in IE - #4833)
-                       var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+               // Handle multiple events separated by a space
+               // jQuery(...).bind("mouseover mouseout", fn);
+               types = jQuery.trim( hoverHack(types) ).split( " " );
+               for ( t = 0; t < types.length; t++ ) {
 
-                       return documentElement ? documentElement.nodeName !== "HTML" : false;
-               };
-
-               var posProcess = function( selector, context, seed ) {
-                       var match,
-                               tmpSet = [],
-                               later = "",
-                               root = context.nodeType ? [context] : context;
+                       tns = rtypenamespace.exec( types[t] ) || [];
+                       type = tns[1];
+                       namespaces = ( tns[2] || "" ).split( "." ).sort();
 
-                       // Position selectors must be done after the filter
-                       // And so must :not(positional) so we move all PSEUDOs to the end
-                       while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
-                               later += match[0];
-                               selector = selector.replace( Expr.match.PSEUDO, "" );
-                       }
+                       // If event changes its type, use the special event handlers for the changed type
+                       special = jQuery.event.special[ type ] || {};
 
-                       selector = Expr.relative[selector] ? selector + "*" : selector;
+                       // If selector defined, determine special event api type, otherwise given type
+                       type = ( selector ? special.delegateType : special.bindType ) || type;
 
-                       for ( var i = 0, l = root.length; i < l; i++ ) {
-                               Sizzle( selector, root[i], tmpSet, seed );
-                       }
+                       // Update special based on newly reset type
+                       special = jQuery.event.special[ type ] || {};
 
-                       return Sizzle.filter( later, tmpSet );
-               };
+                       // handleObj is passed to all event handlers
+                       handleObj = jQuery.extend({
+                               type: type,
+                               origType: tns[1],
+                               data: data,
+                               handler: handler,
+                               guid: handler.guid,
+                               selector: selector,
+                               namespace: namespaces.join(".")
+                       }, handleObjIn );
 
-// EXPOSE
-// Override sizzle attribute retrieval
-               Sizzle.attr = jQuery.attr;
-               Sizzle.selectors.attrMap = {};
-               jQuery.find = Sizzle;
-               jQuery.expr = Sizzle.selectors;
-               jQuery.expr[":"] = jQuery.expr.filters;
-               jQuery.unique = Sizzle.uniqueSort;
-               jQuery.text = Sizzle.getText;
-               jQuery.isXMLDoc = Sizzle.isXML;
-               jQuery.contains = Sizzle.contains;
-
-
-       })();
-
-
-       var runtil = /Until$/,
-               rparentsprev = /^(?:parents|prevUntil|prevAll)/,
-       // Note: This RegExp should be improved, or likely pulled from Sizzle
-               rmultiselector = /,/,
-               isSimple = /^.[^:#\[\.,]*$/,
-               slice = Array.prototype.slice,
-               POS = jQuery.expr.match.globalPOS,
-       // methods guaranteed to produce a unique set when starting from a unique set
-               guaranteedUnique = {
-                       children: true,
-                       contents: true,
-                       next: true,
-                       prev: true
-               };
+                       // Init the event handler queue if we're the first
+                       handlers = events[ type ];
+                       if ( !handlers ) {
+                               handlers = events[ type ] = [];
+                               handlers.delegateCount = 0;
 
-       jQuery.fn.extend({
-               find: function( selector ) {
-                       var self = this,
-                               i, l;
+                               // Only use addEventListener/attachEvent if the special events handler returns false
+                               if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+                                       // Bind the global event handler to the element
+                                       if ( elem.addEventListener ) {
+                                               elem.addEventListener( type, eventHandle, false );
 
-                       if ( typeof selector !== "string" ) {
-                               return jQuery( selector ).filter(function() {
-                                       for ( i = 0, l = self.length; i < l; i++ ) {
-                                               if ( jQuery.contains( self[ i ], this ) ) {
-                                                       return true;
-                                               }
+                                       } else if ( elem.attachEvent ) {
+                                               elem.attachEvent( "on" + type, eventHandle );
                                        }
-                               });
+                               }
                        }
 
-                       var ret = this.pushStack( "", "find", selector ),
-                               length, n, r;
+                       if ( special.add ) {
+                               special.add.call( elem, handleObj );
 
-                       for ( i = 0, l = this.length; i < l; i++ ) {
-                               length = ret.length;
-                               jQuery.find( selector, this[i], ret );
-
-                               if ( i > 0 ) {
-                                       // Make sure that the results are unique
-                                       for ( n = length; n < ret.length; n++ ) {
-                                               for ( r = 0; r < length; r++ ) {
-                                                       if ( ret[r] === ret[n] ) {
-                                                               ret.splice(n--, 1);
-                                                               break;
-                                                       }
-                                               }
-                                       }
+                               if ( !handleObj.handler.guid ) {
+                                       handleObj.handler.guid = handler.guid;
                                }
                        }
 
-                       return ret;
-               },
-
-               has: function( target ) {
-                       var targets = jQuery( target );
-                       return this.filter(function() {
-                               for ( var i = 0, l = targets.length; i < l; i++ ) {
-                                       if ( jQuery.contains( this, targets[i] ) ) {
-                                               return true;
-                                       }
-                               }
-                       });
-               },
+                       // Add to the element's handler list, delegates in front
+                       if ( selector ) {
+                               handlers.splice( handlers.delegateCount++, 0, handleObj );
+                       } else {
+                               handlers.push( handleObj );
+                       }
 
-               not: function( selector ) {
-                       return this.pushStack( winnow(this, selector, false), "not", selector);
-               },
+                       // Keep track of which events have ever been used, for event optimization
+                       jQuery.event.global[ type ] = true;
+               }
 
-               filter: function( selector ) {
-                       return this.pushStack( winnow(this, selector, true), "filter", selector );
-               },
+               // Nullify elem to prevent memory leaks in IE
+               elem = null;
+       },
 
-               is: function( selector ) {
-                       return !!selector && (
-                               typeof selector === "string" ?
-                                       // If this is a positional selector, check membership in the returned set
-                                       // so $("p:first").is("p:last") won't return true for a doc with two "p".
-                                       POS.test( selector ) ?
-                                               jQuery( selector, this.context ).index( this[0] ) >= 0 :
-                                               jQuery.filter( selector, this ).length > 0 :
-                                       this.filter( selector ).length > 0 );
-               },
+       global: {},
 
-               closest: function( selectors, context ) {
-                       var ret = [], i, l, cur = this[0];
+       // Detach an event or set of events from an element
+       remove: function( elem, types, handler, selector, mappedTypes ) {
 
-                       // Array (deprecated as of jQuery 1.7)
-                       if ( jQuery.isArray( selectors ) ) {
-                               var level = 1;
+               var t, tns, type, origType, namespaces, origCount,
+                       j, events, special, eventType, handleObj,
+                       elemData = jQuery.hasData( elem ) && jQuery._data( elem );
 
-                               while ( cur && cur.ownerDocument && cur !== context ) {
-                                       for ( i = 0; i < selectors.length; i++ ) {
+               if ( !elemData || !(events = elemData.events) ) {
+                       return;
+               }
 
-                                               if ( jQuery( cur ).is( selectors[ i ] ) ) {
-                                                       ret.push({ selector: selectors[ i ], elem: cur, level: level });
-                                               }
-                                       }
+               // Once for each type.namespace in types; type may be omitted
+               types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
+               for ( t = 0; t < types.length; t++ ) {
+                       tns = rtypenamespace.exec( types[t] ) || [];
+                       type = origType = tns[1];
+                       namespaces = tns[2];
 
-                                       cur = cur.parentNode;
-                                       level++;
+                       // Unbind all events (on this namespace, if provided) for the element
+                       if ( !type ) {
+                               for ( type in events ) {
+                                       jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
                                }
-
-                               return ret;
+                               continue;
                        }
 
-                       // String
-                       var pos = POS.test( selectors ) || typeof selectors !== "string" ?
-                               jQuery( selectors, context || this.context ) :
-                               0;
+                       special = jQuery.event.special[ type ] || {};
+                       type = ( selector? special.delegateType : special.bindType ) || type;
+                       eventType = events[ type ] || [];
+                       origCount = eventType.length;
+                       namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
 
-                       for ( i = 0, l = this.length; i < l; i++ ) {
-                               cur = this[i];
+                       // Remove matching events
+                       for ( j = 0; j < eventType.length; j++ ) {
+                               handleObj = eventType[ j ];
 
-                               while ( cur ) {
-                                       if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
-                                               ret.push( cur );
-                                               break;
+                               if ( ( mappedTypes || origType === handleObj.origType ) &&
+                                        ( !handler || handler.guid === handleObj.guid ) &&
+                                        ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
+                                        ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+                                       eventType.splice( j--, 1 );
 
-                                       } else {
-                                               cur = cur.parentNode;
-                                               if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
-                                                       break;
-                                               }
+                                       if ( handleObj.selector ) {
+                                               eventType.delegateCount--;
+                                       }
+                                       if ( special.remove ) {
+                                               special.remove.call( elem, handleObj );
                                        }
                                }
                        }
 
-                       ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
+                       // Remove generic event handler if we removed something and no more handlers exist
+                       // (avoids potential for endless recursion during removal of special event handlers)
+                       if ( eventType.length === 0 && origCount !== eventType.length ) {
+                               if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+                                       jQuery.removeEvent( elem, type, elemData.handle );
+                               }
 
-                       return this.pushStack( ret, "closest", selectors );
-               },
+                               delete events[ type ];
+                       }
+               }
 
-               // Determine the position of an element within
-               // the matched set of elements
-               index: function( elem ) {
+               // Remove the expando if it's no longer used
+               if ( jQuery.isEmptyObject( events ) ) {
+                       delete elemData.handle;
 
-                       // No argument, return index in parent
-                       if ( !elem ) {
-                               return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
-                       }
+                       // removeData also checks for emptiness and clears the expando if empty
+                       // so use it instead of delete
+                       jQuery.removeData( elem, "events", true );
+               }
+       },
+
+       // Events that are safe to short-circuit if no handlers are attached.
+       // Native DOM events should not be added, they may have inline handlers.
+       customEvent: {
+               "getData": true,
+               "setData": true,
+               "changeData": true
+       },
+
+       trigger: function( event, data, elem, onlyHandlers ) {
+               // Don't do events on text and comment nodes
+               if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
+                       return;
+               }
 
-                       // index in selector
-                       if ( typeof elem === "string" ) {
-                               return jQuery.inArray( this[0], jQuery( elem ) );
-                       }
+               // Event object or event type
+               var cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType,
+                       type = event.type || event,
+                       namespaces = [];
 
-                       // Locate the position of the desired element
-                       return jQuery.inArray(
-                               // If it receives a jQuery object, the first element is used
-                               elem.jquery ? elem[0] : elem, this );
-               },
+               // focus/blur morphs to focusin/out; ensure we're not firing them right now
+               if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+                       return;
+               }
 
-               add: function( selector, context ) {
-                       var set = typeof selector === "string" ?
-                                       jQuery( selector, context ) :
-                                       jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
-                               all = jQuery.merge( this.get(), set );
+               if ( type.indexOf( "!" ) >= 0 ) {
+                       // Exclusive events trigger only for the exact event (no namespaces)
+                       type = type.slice(0, -1);
+                       exclusive = true;
+               }
 
-                       return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
-                               all :
-                               jQuery.unique( all ) );
-               },
+               if ( type.indexOf( "." ) >= 0 ) {
+                       // Namespaced trigger; create a regexp to match event type in handle()
+                       namespaces = type.split(".");
+                       type = namespaces.shift();
+                       namespaces.sort();
+               }
 
-               andSelf: function() {
-                       return this.add( this.prevObject );
+               if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
+                       // No jQuery handlers for this event type, and it can't have inline handlers
+                       return;
                }
-       });
 
-// A painfully simple check to see if an element is disconnected
-// from a document (should be improved, where feasible).
-       function isDisconnected( node ) {
-               return !node || !node.parentNode || node.parentNode.nodeType === 11;
-       }
+               // Caller can pass in an Event, Object, or just an event type string
+               event = typeof event === "object" ?
+                       // jQuery.Event object
+                       event[ jQuery.expando ] ? event :
+                       // Object literal
+                       new jQuery.Event( type, event ) :
+                       // Just the event type (string)
+                       new jQuery.Event( type );
 
-       jQuery.each({
-               parent: function( elem ) {
-                       var parent = elem.parentNode;
-                       return parent && parent.nodeType !== 11 ? parent : null;
-               },
-               parents: function( elem ) {
-                       return jQuery.dir( elem, "parentNode" );
-               },
-               parentsUntil: function( elem, i, until ) {
-                       return jQuery.dir( elem, "parentNode", until );
-               },
-               next: function( elem ) {
-                       return jQuery.nth( elem, 2, "nextSibling" );
-               },
-               prev: function( elem ) {
-                       return jQuery.nth( elem, 2, "previousSibling" );
-               },
-               nextAll: function( elem ) {
-                       return jQuery.dir( elem, "nextSibling" );
-               },
-               prevAll: function( elem ) {
-                       return jQuery.dir( elem, "previousSibling" );
-               },
-               nextUntil: function( elem, i, until ) {
-                       return jQuery.dir( elem, "nextSibling", until );
-               },
-               prevUntil: function( elem, i, until ) {
-                       return jQuery.dir( elem, "previousSibling", until );
-               },
-               siblings: function( elem ) {
-                       return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
-               },
-               children: function( elem ) {
-                       return jQuery.sibling( elem.firstChild );
-               },
-               contents: function( elem ) {
-                       return jQuery.nodeName( elem, "iframe" ) ?
-                               elem.contentDocument || elem.contentWindow.document :
-                               jQuery.makeArray( elem.childNodes );
+               event.type = type;
+               event.isTrigger = true;
+               event.exclusive = exclusive;
+               event.namespace = namespaces.join( "." );
+               event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
+               ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
+
+               // Handle a global trigger
+               if ( !elem ) {
+
+                       // TODO: Stop taunting the data cache; remove global events and always attach to document
+                       cache = jQuery.cache;
+                       for ( i in cache ) {
+                               if ( cache[ i ].events && cache[ i ].events[ type ] ) {
+                                       jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
+                               }
+                       }
+                       return;
+               }
+
+               // Clean up the event in case it is being reused
+               event.result = undefined;
+               if ( !event.target ) {
+                       event.target = elem;
+               }
+
+               // Clone any incoming data and prepend the event, creating the handler arg list
+               data = data != null ? jQuery.makeArray( data ) : [];
+               data.unshift( event );
+
+               // Allow special events to draw outside the lines
+               special = jQuery.event.special[ type ] || {};
+               if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
+                       return;
                }
-       }, function( name, fn ) {
-               jQuery.fn[ name ] = function( until, selector ) {
-                       var ret = jQuery.map( this, fn, until );
 
-                       if ( !runtil.test( name ) ) {
-                               selector = until;
+               // Determine event propagation path in advance, per W3C events spec (#9951)
+               // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+               eventPath = [[ elem, special.bindType || type ]];
+               if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+                       bubbleType = special.delegateType || type;
+                       cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
+                       for ( old = elem; cur; cur = cur.parentNode ) {
+                               eventPath.push([ cur, bubbleType ]);
+                               old = cur;
                        }
 
-                       if ( selector && typeof selector === "string" ) {
-                               ret = jQuery.filter( selector, ret );
+                       // Only add window if we got to document (e.g., not plain obj or detached DOM)
+                       if ( old === (elem.ownerDocument || document) ) {
+                               eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
                        }
+               }
+
+               // Fire handlers on the event path
+               for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
 
-                       ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
+                       cur = eventPath[i][0];
+                       event.type = eventPath[i][1];
 
-                       if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
-                               ret = ret.reverse();
+                       handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+                       if ( handle ) {
+                               handle.apply( cur, data );
+                       }
+                       // Note that this is a bare JS function and not a jQuery handler
+                       handle = ontype && cur[ ontype ];
+                       if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
+                               event.preventDefault();
                        }
+               }
+               event.type = type;
 
-                       return this.pushStack( ret, name, slice.call( arguments ).join(",") );
-               };
-       });
+               // If nobody prevented the default action, do it now
+               if ( !onlyHandlers && !event.isDefaultPrevented() ) {
 
-       jQuery.extend({
-               filter: function( expr, elems, not ) {
-                       if ( not ) {
-                               expr = ":not(" + expr + ")";
-                       }
+                       if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
+                               !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
 
-                       return elems.length === 1 ?
-                               jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
-                               jQuery.find.matches(expr, elems);
-               },
+                               // Call a native DOM method on the target with the same name name as the event.
+                               // Can't use an .isFunction() check here because IE6/7 fails that test.
+                               // Don't do default actions on window, that's where global variables be (#6170)
+                               // IE<9 dies on focus/blur to hidden element (#1486)
+                               if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
 
-               dir: function( elem, dir, until ) {
-                       var matched = [],
-                               cur = elem[ dir ];
+                                       // Don't re-trigger an onFOO event when we call its FOO() method
+                                       old = elem[ ontype ];
 
-                       while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
-                               if ( cur.nodeType === 1 ) {
-                                       matched.push( cur );
-                               }
-                               cur = cur[dir];
-                       }
-                       return matched;
-               },
+                                       if ( old ) {
+                                               elem[ ontype ] = null;
+                                       }
 
-               nth: function( cur, result, dir, elem ) {
-                       result = result || 1;
-                       var num = 0;
+                                       // Prevent re-triggering of the same event, since we already bubbled it above
+                                       jQuery.event.triggered = type;
+                                       elem[ type ]();
+                                       jQuery.event.triggered = undefined;
 
-                       for ( ; cur; cur = cur[dir] ) {
-                               if ( cur.nodeType === 1 && ++num === result ) {
-                                       break;
+                                       if ( old ) {
+                                               elem[ ontype ] = old;
+                                       }
                                }
                        }
+               }
 
-                       return cur;
-               },
+               return event.result;
+       },
+
+       dispatch: function( event ) {
+
+               // Make a writable jQuery.Event from the native event object
+               event = jQuery.event.fix( event || window.event );
+
+               var i, j, cur, ret, selMatch, matched, matches, handleObj, sel, related,
+                       handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
+                       delegateCount = handlers.delegateCount,
+                       args = [].slice.call( arguments ),
+                       run_all = !event.exclusive && !event.namespace,
+                       special = jQuery.event.special[ event.type ] || {},
+                       handlerQueue = [];
 
-               sibling: function( n, elem ) {
-                       var r = [];
+               // Use the fix-ed jQuery.Event rather than the (read-only) native event
+               args[0] = event;
+               event.delegateTarget = this;
 
-                       for ( ; n; n = n.nextSibling ) {
-                               if ( n.nodeType === 1 && n !== elem ) {
-                                       r.push( n );
+               // Call the preDispatch hook for the mapped type, and let it bail if desired
+               if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+                       return;
+               }
+
+               // Determine handlers that should run if there are delegated events
+               // Avoid non-left-click bubbling in Firefox (#3861)
+               if ( delegateCount && !(event.button && event.type === "click") ) {
+
+                       for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
+
+                               // Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764)
+                               if ( cur.disabled !== true || event.type !== "click" ) {
+                                       selMatch = {};
+                                       matches = [];
+                                       for ( i = 0; i < delegateCount; i++ ) {
+                                               handleObj = handlers[ i ];
+                                               sel = handleObj.selector;
+
+                                               if ( selMatch[ sel ] === undefined ) {
+                                                       selMatch[ sel ] = jQuery( sel, this ).index( cur ) >= 0;
+                                               }
+                                               if ( selMatch[ sel ] ) {
+                                                       matches.push( handleObj );
+                                               }
+                                       }
+                                       if ( matches.length ) {
+                                               handlerQueue.push({ elem: cur, matches: matches });
+                                       }
                                }
                        }
+               }
 
-                       return r;
+               // Add the remaining (directly-bound) handlers
+               if ( handlers.length > delegateCount ) {
+                       handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
                }
-       });
 
-// Implement the identical functionality for filter and not
-       function winnow( elements, qualifier, keep ) {
+               // Run delegates first; they may want to stop propagation beneath us
+               for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
+                       matched = handlerQueue[ i ];
+                       event.currentTarget = matched.elem;
 
-               // Can't pass null or undefined to indexOf in Firefox 4
-               // Set to 0 to skip string check
-               qualifier = qualifier || 0;
+                       for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
+                               handleObj = matched.matches[ j ];
 
-               if ( jQuery.isFunction( qualifier ) ) {
-                       return jQuery.grep(elements, function( elem, i ) {
-                               var retVal = !!qualifier.call( elem, i, elem );
-                               return retVal === keep;
-                       });
+                               // Triggered event must either 1) be non-exclusive and have no namespace, or
+                               // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+                               if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
 
-               } else if ( qualifier.nodeType ) {
-                       return jQuery.grep(elements, function( elem, i ) {
-                               return ( elem === qualifier ) === keep;
-                       });
+                                       event.data = handleObj.data;
+                                       event.handleObj = handleObj;
 
-               } else if ( typeof qualifier === "string" ) {
-                       var filtered = jQuery.grep(elements, function( elem ) {
-                               return elem.nodeType === 1;
-                       });
+                                       ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+                                                       .apply( matched.elem, args );
 
-                       if ( isSimple.test( qualifier ) ) {
-                               return jQuery.filter(qualifier, filtered, !keep);
-                       } else {
-                               qualifier = jQuery.filter( qualifier, filtered );
+                                       if ( ret !== undefined ) {
+                                               event.result = ret;
+                                               if ( ret === false ) {
+                                                       event.preventDefault();
+                                                       event.stopPropagation();
+                                               }
+                                       }
+                               }
                        }
                }
 
-               return jQuery.grep(elements, function( elem, i ) {
-                       return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
-               });
-       }
+               // Call the postDispatch hook for the mapped type
+               if ( special.postDispatch ) {
+                       special.postDispatch.call( this, event );
+               }
 
+               return event.result;
+       },
 
+       // Includes some event props shared by KeyEvent and MouseEvent
+       // *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
+       props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
 
+       fixHooks: {},
 
-       function createSafeFragment( document ) {
-               var list = nodeNames.split( "|" ),
-                       safeFrag = document.createDocumentFragment();
+       keyHooks: {
+               props: "char charCode key keyCode".split(" "),
+               filter: function( event, original ) {
 
-               if ( safeFrag.createElement ) {
-                       while ( list.length ) {
-                               safeFrag.createElement(
-                                       list.pop()
-                               );
+                       // Add which for key events
+                       if ( event.which == null ) {
+                               event.which = original.charCode != null ? original.charCode : original.keyCode;
                        }
+
+                       return event;
                }
-               return safeFrag;
-       }
+       },
 
-       var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
-                       "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
-               rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
-               rleadingWhitespace = /^\s+/,
-               rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
-               rtagName = /<([\w:]+)/,
-               rtbody = /<tbody/i,
-               rhtml = /<|&#?\w+;/,
-               rnoInnerhtml = /<(?:script|style)/i,
-               rnocache = /<(?:script|object|embed|option|style)/i,
-               rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
-       // checked="checked" or checked
-               rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
-               rscriptType = /\/(java|ecma)script/i,
-               rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
-               wrapMap = {
-                       option: [ 1, "<select multiple='multiple'>", "</select>" ],
-                       legend: [ 1, "<fieldset>", "</fieldset>" ],
-                       thead: [ 1, "<table>", "</table>" ],
-                       tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-                       td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-                       col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
-                       area: [ 1, "<map>", "</map>" ],
-                       _default: [ 0, "", "" ]
-               },
-               safeFragment = createSafeFragment( document );
+       mouseHooks: {
+               props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+               filter: function( event, original ) {
+                       var eventDoc, doc, body,
+                               button = original.button,
+                               fromElement = original.fromElement;
 
-       wrapMap.optgroup = wrapMap.option;
-       wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-       wrapMap.th = wrapMap.td;
+                       // Calculate pageX/Y if missing and clientX/Y available
+                       if ( event.pageX == null && original.clientX != null ) {
+                               eventDoc = event.target.ownerDocument || document;
+                               doc = eventDoc.documentElement;
+                               body = eventDoc.body;
 
-// IE can't serialize <link> and <script> tags normally
-       if ( !jQuery.support.htmlSerialize ) {
-               wrapMap._default = [ 1, "div<div>", "</div>" ];
-       }
+                               event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+                               event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+                       }
 
-       jQuery.fn.extend({
-               text: function( value ) {
-                       return jQuery.access( this, function( value ) {
-                               return value === undefined ?
-                                       jQuery.text( this ) :
-                                       this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
-                       }, null, value, arguments.length );
-               },
+                       // Add relatedTarget, if necessary
+                       if ( !event.relatedTarget && fromElement ) {
+                               event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+                       }
 
-               wrapAll: function( html ) {
-                       if ( jQuery.isFunction( html ) ) {
-                               return this.each(function(i) {
-                                       jQuery(this).wrapAll( html.call(this, i) );
-                               });
+                       // Add which for click: 1 === left; 2 === middle; 3 === right
+                       // Note: button is not normalized, so don't use it
+                       if ( !event.which && button !== undefined ) {
+                               event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
                        }
 
-                       if ( this[0] ) {
-                               // The elements to wrap the target around
-                               var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+                       return event;
+               }
+       },
 
-                               if ( this[0].parentNode ) {
-                                       wrap.insertBefore( this[0] );
-                               }
+       fix: function( event ) {
+               if ( event[ jQuery.expando ] ) {
+                       return event;
+               }
 
-                               wrap.map(function() {
-                                       var elem = this;
+               // Create a writable copy of the event object and normalize some properties
+               var i, prop,
+                       originalEvent = event,
+                       fixHook = jQuery.event.fixHooks[ event.type ] || {},
+                       copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
 
-                                       while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
-                                               elem = elem.firstChild;
-                                       }
+               event = jQuery.Event( originalEvent );
 
-                                       return elem;
-                               }).append( this );
-                       }
+               for ( i = copy.length; i; ) {
+                       prop = copy[ --i ];
+                       event[ prop ] = originalEvent[ prop ];
+               }
 
-                       return this;
-               },
+               // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
+               if ( !event.target ) {
+                       event.target = originalEvent.srcElement || document;
+               }
 
-               wrapInner: function( html ) {
-                       if ( jQuery.isFunction( html ) ) {
-                               return this.each(function(i) {
-                                       jQuery(this).wrapInner( html.call(this, i) );
-                               });
-                       }
+               // Target should not be a text node (#504, Safari)
+               if ( event.target.nodeType === 3 ) {
+                       event.target = event.target.parentNode;
+               }
 
-                       return this.each(function() {
-                               var self = jQuery( this ),
-                                       contents = self.contents();
+               // For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8)
+               event.metaKey = !!event.metaKey;
 
-                               if ( contents.length ) {
-                                       contents.wrapAll( html );
+               return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
+       },
 
-                               } else {
-                                       self.append( html );
-                               }
-                       });
+       special: {
+               load: {
+                       // Prevent triggered image.load events from bubbling to window.load
+                       noBubble: true
                },
 
-               wrap: function( html ) {
-                       var isFunction = jQuery.isFunction( html );
-
-                       return this.each(function(i) {
-                               jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
-                       });
+               focus: {
+                       delegateType: "focusin"
                },
-
-               unwrap: function() {
-                       return this.parent().each(function() {
-                               if ( !jQuery.nodeName( this, "body" ) ) {
-                                       jQuery( this ).replaceWith( this.childNodes );
-                               }
-                       }).end();
+               blur: {
+                       delegateType: "focusout"
                },
 
-               append: function() {
-                       return this.domManip(arguments, true, function( elem ) {
-                               if ( this.nodeType === 1 ) {
-                                       this.appendChild( elem );
+               beforeunload: {
+                       setup: function( data, namespaces, eventHandle ) {
+                               // We only want to do this special case on windows
+                               if ( jQuery.isWindow( this ) ) {
+                                       this.onbeforeunload = eventHandle;
                                }
-                       });
-               },
+                       },
 
-               prepend: function() {
-                       return this.domManip(arguments, true, function( elem ) {
-                               if ( this.nodeType === 1 ) {
-                                       this.insertBefore( elem, this.firstChild );
+                       teardown: function( namespaces, eventHandle ) {
+                               if ( this.onbeforeunload === eventHandle ) {
+                                       this.onbeforeunload = null;
                                }
-                       });
-               },
-
-               before: function() {
-                       if ( this[0] && this[0].parentNode ) {
-                               return this.domManip(arguments, false, function( elem ) {
-                                       this.parentNode.insertBefore( elem, this );
-                               });
-                       } else if ( arguments.length ) {
-                               var set = jQuery.clean( arguments );
-                               set.push.apply( set, this.toArray() );
-                               return this.pushStack( set, "before", arguments );
-                       }
-               },
-
-               after: function() {
-                       if ( this[0] && this[0].parentNode ) {
-                               return this.domManip(arguments, false, function( elem ) {
-                                       this.parentNode.insertBefore( elem, this.nextSibling );
-                               });
-                       } else if ( arguments.length ) {
-                               var set = this.pushStack( this, "after", arguments );
-                               set.push.apply( set, jQuery.clean(arguments) );
-                               return set;
                        }
-               },
-
-               // keepData is for internal use only--do not document
-               remove: function( selector, keepData ) {
-                       for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
-                               if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
-                                       if ( !keepData && elem.nodeType === 1 ) {
-                                               jQuery.cleanData( elem.getElementsByTagName("*") );
-                                               jQuery.cleanData( [ elem ] );
-                                       }
+               }
+       },
+
+       simulate: function( type, elem, event, bubble ) {
+               // Piggyback on a donor event to simulate a different one.
+               // Fake originalEvent to avoid donor's stopPropagation, but if the
+               // simulated event prevents default then we do the same on the donor.
+               var e = jQuery.extend(
+                       new jQuery.Event(),
+                       event,
+                       { type: type,
+                               isSimulated: true,
+                               originalEvent: {}
+                       }
+               );
+               if ( bubble ) {
+                       jQuery.event.trigger( e, null, elem );
+               } else {
+                       jQuery.event.dispatch.call( elem, e );
+               }
+               if ( e.isDefaultPrevented() ) {
+                       event.preventDefault();
+               }
+       }
+};
 
-                                       if ( elem.parentNode ) {
-                                               elem.parentNode.removeChild( elem );
-                                       }
-                               }
-                       }
+// Some plugins are using, but it's undocumented/deprecated and will be removed.
+// The 1.7 special event interface should provide all the hooks needed now.
+jQuery.event.handle = jQuery.event.dispatch;
 
-                       return this;
-               },
+jQuery.removeEvent = document.removeEventListener ?
+       function( elem, type, handle ) {
+               if ( elem.removeEventListener ) {
+                       elem.removeEventListener( type, handle, false );
+               }
+       } :
+       function( elem, type, handle ) {
+               var name = "on" + type;
 
-               empty: function() {
-                       for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
-                               // Remove element nodes and prevent memory leaks
-                               if ( elem.nodeType === 1 ) {
-                                       jQuery.cleanData( elem.getElementsByTagName("*") );
-                               }
+               if ( elem.detachEvent ) {
 
-                               // Remove any remaining nodes
-                               while ( elem.firstChild ) {
-                                       elem.removeChild( elem.firstChild );
-                               }
+                       // #8545, #7054, preventing memory leaks for custom events in IE6-8 –
+                       // detachEvent needed property on element, by name of that event, to properly expose it to GC
+                       if ( typeof elem[ name ] === "undefined" ) {
+                               elem[ name ] = null;
                        }
 
-                       return this;
-               },
+                       elem.detachEvent( name, handle );
+               }
+       };
 
-               clone: function( dataAndEvents, deepDataAndEvents ) {
-                       dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
-                       deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+jQuery.Event = function( src, props ) {
+       // Allow instantiation without the 'new' keyword
+       if ( !(this instanceof jQuery.Event) ) {
+               return new jQuery.Event( src, props );
+       }
 
-                       return this.map( function () {
-                               return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
-                       });
-               },
+       // Event object
+       if ( src && src.type ) {
+               this.originalEvent = src;
+               this.type = src.type;
 
-               html: function( value ) {
-                       return jQuery.access( this, function( value ) {
-                               var elem = this[0] || {},
-                                       i = 0,
-                                       l = this.length;
+               // Events bubbling up the document may have been marked as prevented
+               // by a handler lower down the tree; reflect the correct value.
+               this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
+                       src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
 
-                               if ( value === undefined ) {
-                                       return elem.nodeType === 1 ?
-                                               elem.innerHTML.replace( rinlinejQuery, "" ) :
-                                               null;
-                               }
+       // Event type
+       } else {
+               this.type = src;
+       }
 
+       // Put explicitly provided properties onto the event object
+       if ( props ) {
+               jQuery.extend( this, props );
+       }
 
-                               if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
-                                       ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
-                                       !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
+       // Create a timestamp if incoming event doesn't have one
+       this.timeStamp = src && src.timeStamp || jQuery.now();
 
-                                       value = value.replace( rxhtmlTag, "<$1></$2>" );
+       // Mark it as fixed
+       this[ jQuery.expando ] = true;
+};
 
-                                       try {
-                                               for (; i < l; i++ ) {
-                                                       // Remove element nodes and prevent memory leaks
-                                                       elem = this[i] || {};
-                                                       if ( elem.nodeType === 1 ) {
-                                                               jQuery.cleanData( elem.getElementsByTagName( "*" ) );
-                                                               elem.innerHTML = value;
-                                                       }
-                                               }
+function returnFalse() {
+       return false;
+}
+function returnTrue() {
+       return true;
+}
 
-                                               elem = 0;
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+       preventDefault: function() {
+               this.isDefaultPrevented = returnTrue;
 
-                                               // If using innerHTML throws an exception, use the fallback method
-                                       } catch(e) {}
-                               }
+               var e = this.originalEvent;
+               if ( !e ) {
+                       return;
+               }
 
-                               if ( elem ) {
-                                       this.empty().append( value );
-                               }
-                       }, null, value, arguments.length );
-               },
+               // if preventDefault exists run it on the original event
+               if ( e.preventDefault ) {
+                       e.preventDefault();
 
-               replaceWith: function( value ) {
-                       if ( this[0] && this[0].parentNode ) {
-                               // Make sure that the elements are removed from the DOM before they are inserted
-                               // this can help fix replacing a parent with child elements
-                               if ( jQuery.isFunction( value ) ) {
-                                       return this.each(function(i) {
-                                               var self = jQuery(this), old = self.html();
-                                               self.replaceWith( value.call( this, i, old ) );
-                                       });
-                               }
+               // otherwise set the returnValue property of the original event to false (IE)
+               } else {
+                       e.returnValue = false;
+               }
+       },
+       stopPropagation: function() {
+               this.isPropagationStopped = returnTrue;
 
-                               if ( typeof value !== "string" ) {
-                                       value = jQuery( value ).detach();
-                               }
+               var e = this.originalEvent;
+               if ( !e ) {
+                       return;
+               }
+               // if stopPropagation exists run it on the original event
+               if ( e.stopPropagation ) {
+                       e.stopPropagation();
+               }
+               // otherwise set the cancelBubble property of the original event to true (IE)
+               e.cancelBubble = true;
+       },
+       stopImmediatePropagation: function() {
+               this.isImmediatePropagationStopped = returnTrue;
+               this.stopPropagation();
+       },
+       isDefaultPrevented: returnFalse,
+       isPropagationStopped: returnFalse,
+       isImmediatePropagationStopped: returnFalse
+};
 
-                               return this.each(function() {
-                                       var next = this.nextSibling,
-                                               parent = this.parentNode;
+// Create mouseenter/leave events using mouseover/out and event-time checks
+jQuery.each({
+       mouseenter: "mouseover",
+       mouseleave: "mouseout"
+}, function( orig, fix ) {
+       jQuery.event.special[ orig ] = {
+               delegateType: fix,
+               bindType: fix,
+
+               handle: function( event ) {
+                       var ret,
+                               target = this,
+                               related = event.relatedTarget,
+                               handleObj = event.handleObj,
+                               selector = handleObj.selector;
+
+                       // For mousenter/leave call the handler if related is outside the target.
+                       // NB: No relatedTarget if the mouse left/entered the browser window
+                       if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+                               event.type = handleObj.origType;
+                               ret = handleObj.handler.apply( this, arguments );
+                               event.type = fix;
+                       }
+                       return ret;
+               }
+       };
+});
 
-                                       jQuery( this ).remove();
+// IE submit delegation
+if ( !jQuery.support.submitBubbles ) {
 
-                                       if ( next ) {
-                                               jQuery(next).before( value );
-                                       } else {
-                                               jQuery(parent).append( value );
-                                       }
-                               });
-                       } else {
-                               return this.length ?
-                                       this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
-                                       this;
+       jQuery.event.special.submit = {
+               setup: function() {
+                       // Only need this for delegated form submit events
+                       if ( jQuery.nodeName( this, "form" ) ) {
+                               return false;
                        }
-               },
 
-               detach: function( selector ) {
-                       return this.remove( selector, true );
+                       // Lazy-add a submit handler when a descendant form may potentially be submitted
+                       jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+                               // Node name check avoids a VML-related crash in IE (#9807)
+                               var elem = e.target,
+                                       form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+                               if ( form && !jQuery._data( form, "_submit_attached" ) ) {
+                                       jQuery.event.add( form, "submit._submit", function( event ) {
+                                               event._submit_bubble = true;
+                                       });
+                                       jQuery._data( form, "_submit_attached", true );
+                               }
+                       });
+                       // return undefined since we don't need an event listener
                },
 
-               domManip: function( args, table, callback ) {
-                       var results, first, fragment, parent,
-                               value = args[0],
-                               scripts = [];
-
-                       // We can't cloneNode fragments that contain checked, in WebKit
-                       if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
-                               return this.each(function() {
-                                       jQuery(this).domManip( args, table, callback, true );
-                               });
+               postDispatch: function( event ) {
+                       // If form was submitted by the user, bubble the event up the tree
+                       if ( event._submit_bubble ) {
+                               delete event._submit_bubble;
+                               if ( this.parentNode && !event.isTrigger ) {
+                                       jQuery.event.simulate( "submit", this.parentNode, event, true );
+                               }
                        }
+               },
 
-                       if ( jQuery.isFunction(value) ) {
-                               return this.each(function(i) {
-                                       var self = jQuery(this);
-                                       args[0] = value.call(this, i, table ? self.html() : undefined);
-                                       self.domManip( args, table, callback );
-                               });
+               teardown: function() {
+                       // Only need this for delegated form submit events
+                       if ( jQuery.nodeName( this, "form" ) ) {
+                               return false;
                        }
 
-                       if ( this[0] ) {
-                               parent = value && value.parentNode;
-
-                               // If we're in a fragment, just use that instead of building a new one
-                               if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
-                                       results = { fragment: parent };
-
-                               } else {
-                                       results = jQuery.buildFragment( args, this, scripts );
-                               }
+                       // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+                       jQuery.event.remove( this, "._submit" );
+               }
+       };
+}
 
-                               fragment = results.fragment;
+// IE change delegation and checkbox/radio fix
+if ( !jQuery.support.changeBubbles ) {
 
-                               if ( fragment.childNodes.length === 1 ) {
-                                       first = fragment = fragment.firstChild;
-                               } else {
-                                       first = fragment.firstChild;
-                               }
+       jQuery.event.special.change = {
 
-                               if ( first ) {
-                                       table = table && jQuery.nodeName( first, "tr" );
-
-                                       for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
-                                               callback.call(
-                                                       table ?
-                                                               root(this[i], first) :
-                                                               this[i],
-                                                       // Make sure that we do not leak memory by inadvertently discarding
-                                                       // the original fragment (which might have attached data) instead of
-                                                       // using it; in addition, use the original fragment object for the last
-                                                       // item instead of first because it can end up being emptied incorrectly
-                                                       // in certain situations (Bug #8070).
-                                                       // Fragments from the fragment cache must always be cloned and never used
-                                                       // in place.
-                                                       results.cacheable || ( l > 1 && i < lastIndex ) ?
-                                                               jQuery.clone( fragment, true, true ) :
-                                                               fragment
-                                               );
-                                       }
-                               }
+               setup: function() {
 
-                               if ( scripts.length ) {
-                                       jQuery.each( scripts, function( i, elem ) {
-                                               if ( elem.src ) {
-                                                       jQuery.ajax({
-                                                               type: "GET",
-                                                               global: false,
-                                                               url: elem.src,
-                                                               async: false,
-                                                               dataType: "script"
-                                                       });
-                                               } else {
-                                                       jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
+                       if ( rformElems.test( this.nodeName ) ) {
+                               // IE doesn't fire change on a check/radio until blur; trigger it on click
+                               // after a propertychange. Eat the blur-change in special.change.handle.
+                               // This still fires onchange a second time for check/radio after blur.
+                               if ( this.type === "checkbox" || this.type === "radio" ) {
+                                       jQuery.event.add( this, "propertychange._change", function( event ) {
+                                               if ( event.originalEvent.propertyName === "checked" ) {
+                                                       this._just_changed = true;
                                                }
-
-                                               if ( elem.parentNode ) {
-                                                       elem.parentNode.removeChild( elem );
+                                       });
+                                       jQuery.event.add( this, "click._change", function( event ) {
+                                               if ( this._just_changed && !event.isTrigger ) {
+                                                       this._just_changed = false;
                                                }
+                                               // Allow triggered, simulated change events (#11500)
+                                               jQuery.event.simulate( "change", this, event, true );
                                        });
                                }
+                               return false;
                        }
+                       // Delegated event; lazy-add a change handler on descendant inputs
+                       jQuery.event.add( this, "beforeactivate._change", function( e ) {
+                               var elem = e.target;
 
-                       return this;
-               }
-       });
+                               if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) {
+                                       jQuery.event.add( elem, "change._change", function( event ) {
+                                               if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+                                                       jQuery.event.simulate( "change", this.parentNode, event, true );
+                                               }
+                                       });
+                                       jQuery._data( elem, "_change_attached", true );
+                               }
+                       });
+               },
 
-       function root( elem, cur ) {
-               return jQuery.nodeName(elem, "table") ?
-                       (elem.getElementsByTagName("tbody")[0] ||
-                               elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
-                       elem;
-       }
+               handle: function( event ) {
+                       var elem = event.target;
+
+                       // Swallow native change events from checkbox/radio, we already triggered them above
+                       if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+                               return event.handleObj.handler.apply( this, arguments );
+                       }
+               },
 
-       function cloneCopyEvent( src, dest ) {
+               teardown: function() {
+                       jQuery.event.remove( this, "._change" );
 
-               if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
-                       return;
+                       return !rformElems.test( this.nodeName );
                }
+       };
+}
 
-               var type, i, l,
-                       oldData = jQuery._data( src ),
-                       curData = jQuery._data( dest, oldData ),
-                       events = oldData.events;
+// Create "bubbling" focus and blur events
+if ( !jQuery.support.focusinBubbles ) {
+       jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
 
-               if ( events ) {
-                       delete curData.handle;
-                       curData.events = {};
+               // Attach a single capturing handler while someone wants focusin/focusout
+               var attaches = 0,
+                       handler = function( event ) {
+                               jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+                       };
 
-                       for ( type in events ) {
-                               for ( i = 0, l = events[ type ].length; i < l; i++ ) {
-                                       jQuery.event.add( dest, type, events[ type ][ i ] );
+               jQuery.event.special[ fix ] = {
+                       setup: function() {
+                               if ( attaches++ === 0 ) {
+                                       document.addEventListener( orig, handler, true );
+                               }
+                       },
+                       teardown: function() {
+                               if ( --attaches === 0 ) {
+                                       document.removeEventListener( orig, handler, true );
                                }
                        }
-               }
-
-               // make the cloned public data object a copy from the original
-               if ( curData.data ) {
-                       curData.data = jQuery.extend( {}, curData.data );
-               }
-       }
-
-       function cloneFixAttributes( src, dest ) {
-               var nodeName;
-
-               // We do not need to do anything for non-Elements
-               if ( dest.nodeType !== 1 ) {
-                       return;
-               }
-
-               // clearAttributes removes the attributes, which we don't want,
-               // but also removes the attachEvent events, which we *do* want
-               if ( dest.clearAttributes ) {
-                       dest.clearAttributes();
-               }
-
-               // mergeAttributes, in contrast, only merges back on the
-               // original attributes, not the events
-               if ( dest.mergeAttributes ) {
-                       dest.mergeAttributes( src );
-               }
+               };
+       });
+}
 
-               nodeName = dest.nodeName.toLowerCase();
+jQuery.fn.extend({
 
-               // IE6-8 fail to clone children inside object elements that use
-               // the proprietary classid attribute value (rather than the type
-               // attribute) to identify the type of content to display
-               if ( nodeName === "object" ) {
-                       dest.outerHTML = src.outerHTML;
+       on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+               var origFn, type;
 
-               } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
-                       // IE6-8 fails to persist the checked state of a cloned checkbox
-                       // or radio button. Worse, IE6-7 fail to give the cloned element
-                       // a checked appearance if the defaultChecked value isn't also set
-                       if ( src.checked ) {
-                               dest.defaultChecked = dest.checked = src.checked;
+               // Types can be a map of types/handlers
+               if ( typeof types === "object" ) {
+                       // ( types-Object, selector, data )
+                       if ( typeof selector !== "string" ) { // && selector != null
+                               // ( types-Object, data )
+                               data = data || selector;
+                               selector = undefined;
                        }
-
-                       // IE6-7 get confused and end up setting the value of a cloned
-                       // checkbox/radio button to an empty string instead of "on"
-                       if ( dest.value !== src.value ) {
-                               dest.value = src.value;
+                       for ( type in types ) {
+                               this.on( type, selector, data, types[ type ], one );
                        }
-
-                       // IE6-8 fails to return the selected option to the default selected
-                       // state when cloning options
-               } else if ( nodeName === "option" ) {
-                       dest.selected = src.defaultSelected;
-
-                       // IE6-8 fails to set the defaultValue to the correct value when
-                       // cloning other types of input fields
-               } else if ( nodeName === "input" || nodeName === "textarea" ) {
-                       dest.defaultValue = src.defaultValue;
-
-                       // IE blanks contents when cloning scripts
-               } else if ( nodeName === "script" && dest.text !== src.text ) {
-                       dest.text = src.text;
+                       return this;
                }
 
-               // Event data gets referenced instead of copied if the expando
-               // gets copied too
-               dest.removeAttribute( jQuery.expando );
-
-               // Clear flags for bubbling special change/submit events, they must
-               // be reattached when the newly cloned events are first activated
-               dest.removeAttribute( "_submit_attached" );
-               dest.removeAttribute( "_change_attached" );
-       }
-
-       jQuery.buildFragment = function( args, nodes, scripts ) {
-               var fragment, cacheable, cacheresults, doc,
-                       first = args[ 0 ];
-
-               // nodes may contain either an explicit document object,
-               // a jQuery collection or context object.
-               // If nodes[0] contains a valid object to assign to doc
-               if ( nodes && nodes[0] ) {
-                       doc = nodes[0].ownerDocument || nodes[0];
+               if ( data == null && fn == null ) {
+                       // ( types, fn )
+                       fn = selector;
+                       data = selector = undefined;
+               } else if ( fn == null ) {
+                       if ( typeof selector === "string" ) {
+                               // ( types, selector, fn )
+                               fn = data;
+                               data = undefined;
+                       } else {
+                               // ( types, data, fn )
+                               fn = data;
+                               data = selector;
+                               selector = undefined;
+                       }
                }
-
-               // Ensure that an attr object doesn't incorrectly stand in as a document object
-               // Chrome and Firefox seem to allow this to occur and will throw exception
-               // Fixes #8950
-               if ( !doc.createDocumentFragment ) {
-                       doc = document;
+               if ( fn === false ) {
+                       fn = returnFalse;
+               } else if ( !fn ) {
+                       return this;
                }
 
-               // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
-               // Cloning options loses the selected state, so don't cache them
-               // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
-               // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
-               // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
-               if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
-                       first.charAt(0) === "<" && !rnocache.test( first ) &&
-                       (jQuery.support.checkClone || !rchecked.test( first )) &&
-                       (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
-
-                       cacheable = true;
-
-                       cacheresults = jQuery.fragments[ first ];
-                       if ( cacheresults && cacheresults !== 1 ) {
-                               fragment = cacheresults;
+               if ( one === 1 ) {
+                       origFn = fn;
+                       fn = function( event ) {
+                               // Can use an empty set, since event contains the info
+                               jQuery().off( event );
+                               return origFn.apply( this, arguments );
+                       };
+                       // Use same guid so caller can remove using origFn
+                       fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+               }
+               return this.each( function() {
+                       jQuery.event.add( this, types, fn, data, selector );
+               });
+       },
+       one: function( types, selector, data, fn ) {
+               return this.on( types, selector, data, fn, 1 );
+       },
+       off: function( types, selector, fn ) {
+               var handleObj, type;
+               if ( types && types.preventDefault && types.handleObj ) {
+                       // ( event )  dispatched jQuery.Event
+                       handleObj = types.handleObj;
+                       jQuery( types.delegateTarget ).off(
+                               handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+                               handleObj.selector,
+                               handleObj.handler
+                       );
+                       return this;
+               }
+               if ( typeof types === "object" ) {
+                       // ( types-object [, selector] )
+                       for ( type in types ) {
+                               this.off( type, selector, types[ type ] );
                        }
+                       return this;
                }
-
-               if ( !fragment ) {
-                       fragment = doc.createDocumentFragment();
-                       jQuery.clean( args, doc, fragment, scripts );
+               if ( selector === false || typeof selector === "function" ) {
+                       // ( types [, fn] )
+                       fn = selector;
+                       selector = undefined;
                }
-
-               if ( cacheable ) {
-                       jQuery.fragments[ first ] = cacheresults ? fragment : 1;
+               if ( fn === false ) {
+                       fn = returnFalse;
                }
+               return this.each(function() {
+                       jQuery.event.remove( this, types, fn, selector );
+               });
+       },
+
+       bind: function( types, data, fn ) {
+               return this.on( types, null, data, fn );
+       },
+       unbind: function( types, fn ) {
+               return this.off( types, null, fn );
+       },
+
+       live: function( types, data, fn ) {
+               jQuery( this.context ).on( types, this.selector, data, fn );
+               return this;
+       },
+       die: function( types, fn ) {
+               jQuery( this.context ).off( types, this.selector || "**", fn );
+               return this;
+       },
+
+       delegate: function( selector, types, data, fn ) {
+               return this.on( types, selector, data, fn );
+       },
+       undelegate: function( selector, types, fn ) {
+               // ( namespace ) or ( selector, types [, fn] )
+               return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
+       },
+
+       trigger: function( type, data ) {
+               return this.each(function() {
+                       jQuery.event.trigger( type, data, this );
+               });
+       },
+       triggerHandler: function( type, data ) {
+               if ( this[0] ) {
+                       return jQuery.event.trigger( type, data, this[0], true );
+               }
+       },
 
-               return { fragment: fragment, cacheable: cacheable };
-       };
-
-       jQuery.fragments = {};
-
-       jQuery.each({
-               appendTo: "append",
-               prependTo: "prepend",
-               insertBefore: "before",
-               insertAfter: "after",
-               replaceAll: "replaceWith"
-       }, function( name, original ) {
-               jQuery.fn[ name ] = function( selector ) {
-                       var ret = [],
-                               insert = jQuery( selector ),
-                               parent = this.length === 1 && this[0].parentNode;
-
-                       if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
-                               insert[ original ]( this[0] );
-                               return this;
+       toggle: function( fn ) {
+               // Save reference to arguments for access in closure
+               var args = arguments,
+                       guid = fn.guid || jQuery.guid++,
+                       i = 0,
+                       toggler = function( event ) {
+                               // Figure out which function to execute
+                               var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+                               jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
 
-                       } else {
-                               for ( var i = 0, l = insert.length; i < l; i++ ) {
-                                       var elems = ( i > 0 ? this.clone(true) : this ).get();
-                                       jQuery( insert[i] )[ original ]( elems );
-                                       ret = ret.concat( elems );
-                               }
+                               // Make sure that clicks stop
+                               event.preventDefault();
 
-                               return this.pushStack( ret, name, insert.selector );
-                       }
-               };
-       });
+                               // and execute the function
+                               return args[ lastToggle ].apply( this, arguments ) || false;
+                       };
 
-       function getAll( elem ) {
-               if ( typeof elem.getElementsByTagName !== "undefined" ) {
-                       return elem.getElementsByTagName( "*" );
+               // link all the functions, so any of them can unbind this click handler
+               toggler.guid = guid;
+               while ( i < args.length ) {
+                       args[ i++ ].guid = guid;
+               }
 
-               } else if ( typeof elem.querySelectorAll !== "undefined" ) {
-                       return elem.querySelectorAll( "*" );
+               return this.click( toggler );
+       },
 
-               } else {
-                       return [];
-               }
+       hover: function( fnOver, fnOut ) {
+               return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
        }
+});
 
-// Used in clean, fixes the defaultChecked property
-       function fixDefaultChecked( elem ) {
-               if ( elem.type === "checkbox" || elem.type === "radio" ) {
-                       elem.defaultChecked = elem.checked;
-               }
-       }
-// Finds all inputs and passes them to fixDefaultChecked
-       function findInputs( elem ) {
-               var nodeName = ( elem.nodeName || "" ).toLowerCase();
-               if ( nodeName === "input" ) {
-                       fixDefaultChecked( elem );
-                       // Skip scripts, get other children
-               } else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
-                       jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+       "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+       "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+       // Handle event binding
+       jQuery.fn[ name ] = function( data, fn ) {
+               if ( fn == null ) {
+                       fn = data;
+                       data = null;
                }
-       }
 
-// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js
-       function shimCloneNode( elem ) {
-               var div = document.createElement( "div" );
-               safeFragment.appendChild( div );
+               return arguments.length > 0 ?
+                       this.on( name, null, data, fn ) :
+                       this.trigger( name );
+       };
 
-               div.innerHTML = elem.outerHTML;
-               return div.firstChild;
+       if ( rkeyEvent.test( name ) ) {
+               jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
        }
 
-       jQuery.extend({
-               clone: function( elem, dataAndEvents, deepDataAndEvents ) {
-                       var srcElements,
-                               destElements,
-                               i,
-                       // IE<=8 does not properly clone detached, unknown element nodes
-                               clone = jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ?
-                                       elem.cloneNode( true ) :
-                                       shimCloneNode( elem );
-
-                       if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
-                               (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-                               // IE copies events bound via attachEvent when using cloneNode.
-                               // Calling detachEvent on the clone will also remove the events
-                               // from the original. In order to get around this, we use some
-                               // proprietary methods to clear the events. Thanks to MooTools
-                               // guys for this hotness.
-
-                               cloneFixAttributes( elem, clone );
+       if ( rmouseEvent.test( name ) ) {
+               jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
+       }
+});
+/*!\r
+ * Sizzle CSS Selector Engine\r
+ *  Copyright 2012 jQuery Foundation and other contributors\r
+ *  Released under the MIT license\r
+ *  http://sizzlejs.com/\r
+ */\r
+(function( window, undefined ) {\r
+\r
+var dirruns,\r
+       cachedruns,\r
+       assertGetIdNotName,\r
+       Expr,\r
+       getText,\r
+       isXML,\r
+       contains,\r
+       compile,\r
+       sortOrder,\r
+       hasDuplicate,\r
+\r
+       baseHasDuplicate = true,\r
+       strundefined = "undefined",\r
+\r
+       expando = ( "sizcache" + Math.random() ).replace( ".", "" ),\r
+\r
+       document = window.document,\r
+       docElem = document.documentElement,\r
+       done = 0,\r
+       slice = [].slice,\r
+       push = [].push,\r
+\r
+       // Augment a function for special use by Sizzle\r
+       markFunction = function( fn, value ) {\r
+               fn[ expando ] = value || true;\r
+               return fn;\r
+       },\r
+\r
+       createCache = function() {\r
+               var cache = {},\r
+                       keys = [];\r
+\r
+               return markFunction(function( key, value ) {\r
+                       // Only keep the most recent entries\r
+                       if ( keys.push( key ) > Expr.cacheLength ) {\r
+                               delete cache[ keys.shift() ];\r
+                       }\r
+\r
+                       return (cache[ key ] = value);\r
+               }, cache );\r
+       },\r
+\r
+       classCache = createCache(),\r
+       tokenCache = createCache(),\r
+       compilerCache = createCache(),\r
+\r
+       // Regex\r
+\r
+       // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace\r
+       whitespace = "[\\x20\\t\\r\\n\\f]",\r
+       // http://www.w3.org/TR/css3-syntax/#characters\r
+       characterEncoding = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",\r
+\r
+       // Loosely modeled on CSS identifier characters\r
+       // An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors)\r
+       // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\r
+       identifier = characterEncoding.replace( "w", "w#" ),\r
+\r
+       // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors\r
+       operators = "([*^$|!~]?=)",\r
+       attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +\r
+               "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",\r
+\r
+       // Prefer arguments not in parens/brackets,\r
+       //   then attribute selectors and non-pseudos (denoted by :),\r
+       //   then anything else\r
+       // These preferences are here to reduce the number of selectors\r
+       //   needing tokenize in the PSEUDO preFilter\r
+       pseudos = ":(" + characterEncoding + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + attributes + ")|[^:]|\\\\.)*|.*))\\)|)",\r
+\r
+       // For matchExpr.POS and matchExpr.needsContext\r
+       pos = ":(nth|eq|gt|lt|first|last|even|odd)(?:\\(((?:-\\d)?\\d*)\\)|)(?=[^-]|$)",\r
+\r
+       // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\r
+       rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),\r
+\r
+       rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),\r
+       rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),\r
+       rpseudo = new RegExp( pseudos ),\r
+\r
+       // Easily-parseable/retrievable ID or TAG or CLASS selectors\r
+       rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,\r
+\r
+       rnot = /^:not/,\r
+       rsibling = /[\x20\t\r\n\f]*[+~]/,\r
+       rendsWithNot = /:not\($/,\r
+\r
+       rheader = /h\d/i,\r
+       rinputs = /input|select|textarea|button/i,\r
+\r
+       rbackslash = /\\(?!\\)/g,\r
+\r
+       matchExpr = {\r
+               "ID": new RegExp( "^#(" + characterEncoding + ")" ),\r
+               "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),\r
+               "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),\r
+               "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),\r
+               "ATTR": new RegExp( "^" + attributes ),\r
+               "PSEUDO": new RegExp( "^" + pseudos ),\r
+               "CHILD": new RegExp( "^:(only|nth|last|first)-child(?:\\(" + whitespace +\r
+                       "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +\r
+                       "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),\r
+               "POS": new RegExp( pos, "ig" ),\r
+               // For use in libraries implementing .is()\r
+               "needsContext": new RegExp( "^" + whitespace + "*[>+~]|" + pos, "i" )\r
+       },\r
+\r
+       // Support\r
+\r
+       // Used for testing something on an element\r
+       assert = function( fn ) {\r
+               var div = document.createElement("div");\r
+\r
+               try {\r
+                       return fn( div );\r
+               } catch (e) {\r
+                       return false;\r
+               } finally {\r
+                       // release memory in IE\r
+                       div = null;\r
+               }\r
+       },\r
+\r
+       // Check if getElementsByTagName("*") returns only elements\r
+       assertTagNameNoComments = assert(function( div ) {\r
+               div.appendChild( document.createComment("") );\r
+               return !div.getElementsByTagName("*").length;\r
+       }),\r
+\r
+       // Check if getAttribute returns normalized href attributes\r
+       assertHrefNotNormalized = assert(function( div ) {\r
+               div.innerHTML = "<a href='#'></a>";\r
+               return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&\r
+                       div.firstChild.getAttribute("href") === "#";\r
+       }),\r
+\r
+       // Check if attributes should be retrieved by attribute nodes\r
+       assertAttributes = assert(function( div ) {\r
+               div.innerHTML = "<select></select>";\r
+               var type = typeof div.lastChild.getAttribute("multiple");\r
+               // IE8 returns a string for some attributes even when not present\r
+               return type !== "boolean" && type !== "string";\r
+       }),\r
+\r
+       // Check if getElementsByClassName can be trusted\r
+       assertUsableClassName = assert(function( div ) {\r
+               // Opera can't find a second classname (in 9.6)\r
+               div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";\r
+               if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {\r
+                       return false;\r
+               }\r
+\r
+               // Safari 3.2 caches class attributes and doesn't catch changes\r
+               div.lastChild.className = "e";\r
+               return div.getElementsByClassName("e").length === 2;\r
+       }),\r
+\r
+       // Check if getElementById returns elements by name\r
+       // Check if getElementsByName privileges form controls or returns elements by ID\r
+       assertUsableName = assert(function( div ) {\r
+               // Inject content\r
+               div.id = expando + 0;\r
+               div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";\r
+               docElem.insertBefore( div, docElem.firstChild );\r
+\r
+               // Test\r
+               var pass = document.getElementsByName &&\r
+                       // buggy browsers will return fewer than the correct 2\r
+                       document.getElementsByName( expando ).length === 2 +\r
+                       // buggy browsers will return more than the correct 0\r
+                       document.getElementsByName( expando + 0 ).length;\r
+               assertGetIdNotName = !document.getElementById( expando );\r
+\r
+               // Cleanup\r
+               docElem.removeChild( div );\r
+\r
+               return pass;\r
+       });\r
+\r
+// If slice is not available, provide a backup\r
+try {\r
+       slice.call( docElem.childNodes, 0 )[0].nodeType;\r
+} catch ( e ) {\r
+       slice = function( i ) {\r
+               var elem, results = [];\r
+               for ( ; (elem = this[i]); i++ ) {\r
+                       results.push( elem );\r
+               }\r
+               return results;\r
+       };\r
+}\r
+\r
+function Sizzle( selector, context, results, seed ) {\r
+       results = results || [];\r
+       context = context || document;\r
+       var match, elem, xml, m,\r
+               nodeType = context.nodeType;\r
+\r
+       if ( nodeType !== 1 && nodeType !== 9 ) {\r
+               return [];\r
+       }\r
+\r
+       if ( !selector || typeof selector !== "string" ) {\r
+               return results;\r
+       }\r
+\r
+       xml = isXML( context );\r
+\r
+       if ( !xml && !seed ) {\r
+               if ( (match = rquickExpr.exec( selector )) ) {\r
+                       // Speed-up: Sizzle("#ID")\r
+                       if ( (m = match[1]) ) {\r
+                               if ( nodeType === 9 ) {\r
+                                       elem = context.getElementById( m );\r
+                                       // Check parentNode to catch when Blackberry 4.6 returns\r
+                                       // nodes that are no longer in the document #6963\r
+                                       if ( elem && elem.parentNode ) {\r
+                                               // Handle the case where IE, Opera, and Webkit return items\r
+                                               // by name instead of ID\r
+                                               if ( elem.id === m ) {\r
+                                                       results.push( elem );\r
+                                                       return results;\r
+                                               }\r
+                                       } else {\r
+                                               return results;\r
+                                       }\r
+                               } else {\r
+                                       // Context is not a document\r
+                                       if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&\r
+                                               contains( context, elem ) && elem.id === m ) {\r
+                                               results.push( elem );\r
+                                               return results;\r
+                                       }\r
+                               }\r
+\r
+                       // Speed-up: Sizzle("TAG")\r
+                       } else if ( match[2] ) {\r
+                               push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );\r
+                               return results;\r
+\r
+                       // Speed-up: Sizzle(".CLASS")\r
+                       } else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) {\r
+                               push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );\r
+                               return results;\r
+                       }\r
+               }\r
+       }\r
+\r
+       // All others\r
+       return select( selector, context, results, seed, xml );\r
+}\r
+\r
+Sizzle.matches = function( expr, elements ) {\r
+       return Sizzle( expr, null, null, elements );\r
+};\r
+\r
+Sizzle.matchesSelector = function( elem, expr ) {\r
+       return Sizzle( expr, null, null, [ elem ] ).length > 0;\r
+};\r
+\r
+// Returns a function to use in pseudos for input types\r
+function createInputPseudo( type ) {\r
+       return function( elem ) {\r
+               var name = elem.nodeName.toLowerCase();\r
+               return name === "input" && elem.type === type;\r
+       };\r
+}\r
+\r
+// Returns a function to use in pseudos for buttons\r
+function createButtonPseudo( type ) {\r
+       return function( elem ) {\r
+               var name = elem.nodeName.toLowerCase();\r
+               return (name === "input" || name === "button") && elem.type === type;\r
+       };\r
+}\r
+\r
+/**\r
+ * Utility function for retrieving the text value of an array of DOM nodes\r
+ * @param {Array|Element} elem\r
+ */\r
+getText = Sizzle.getText = function( elem ) {\r
+       var node,\r
+               ret = "",\r
+               i = 0,\r
+               nodeType = elem.nodeType;\r
+\r
+       if ( nodeType ) {\r
+               if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\r
+                       // Use textContent for elements\r
+                       // innerText usage removed for consistency of new lines (see #11153)\r
+                       if ( typeof elem.textContent === "string" ) {\r
+                               return elem.textContent;\r
+                       } else {\r
+                               // Traverse its children\r
+                               for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\r
+                                       ret += getText( elem );\r
+                               }\r
+                       }\r
+               } else if ( nodeType === 3 || nodeType === 4 ) {\r
+                       return elem.nodeValue;\r
+               }\r
+               // Do not include comment or processing instruction nodes\r
+       } else {\r
+\r
+               // If no nodeType, this is expected to be an array\r
+               for ( ; (node = elem[i]); i++ ) {\r
+                       // Do not traverse comment nodes\r
+                       ret += getText( node );\r
+               }\r
+       }\r
+       return ret;\r
+};\r
+\r
+isXML = Sizzle.isXML = function isXML( elem ) {\r
+       // documentElement is verified for cases where it doesn't yet exist\r
+       // (such as loading iframes in IE - #4833)\r
+       var documentElement = elem && (elem.ownerDocument || elem).documentElement;\r
+       return documentElement ? documentElement.nodeName !== "HTML" : false;\r
+};\r
+\r
+// Element contains another\r
+contains = Sizzle.contains = docElem.contains ?\r
+       function( a, b ) {\r
+               var adown = a.nodeType === 9 ? a.documentElement : a,\r
+                       bup = b && b.parentNode;\r
+               return a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) );\r
+       } :\r
+       docElem.compareDocumentPosition ?\r
+       function( a, b ) {\r
+               return b && !!( a.compareDocumentPosition( b ) & 16 );\r
+       } :\r
+       function( a, b ) {\r
+               while ( (b = b.parentNode) ) {\r
+                       if ( b === a ) {\r
+                               return true;\r
+                       }\r
+               }\r
+               return false;\r
+       };\r
+\r
+Sizzle.attr = function( elem, name ) {\r
+       var attr,\r
+               xml = isXML( elem );\r
+\r
+       if ( !xml ) {\r
+               name = name.toLowerCase();\r
+       }\r
+       if ( Expr.attrHandle[ name ] ) {\r
+               return Expr.attrHandle[ name ]( elem );\r
+       }\r
+       if ( assertAttributes || xml ) {\r
+               return elem.getAttribute( name );\r
+       }\r
+       attr = elem.getAttributeNode( name );\r
+       return attr ?\r
+               typeof elem[ name ] === "boolean" ?\r
+                       elem[ name ] ? name : null :\r
+                       attr.specified ? attr.value : null :\r
+               null;\r
+};\r
+\r
+Expr = Sizzle.selectors = {\r
+\r
+       // Can be adjusted by the user\r
+       cacheLength: 50,\r
+\r
+       createPseudo: markFunction,\r
+\r
+       match: matchExpr,\r
+\r
+       order: new RegExp( "ID|TAG" +\r
+               (assertUsableName ? "|NAME" : "") +\r
+               (assertUsableClassName ? "|CLASS" : "")\r
+       ),\r
+\r
+       // IE6/7 return a modified href\r
+       attrHandle: assertHrefNotNormalized ?\r
+               {} :\r
+               {\r
+                       "href": function( elem ) {\r
+                               return elem.getAttribute( "href", 2 );\r
+                       },\r
+                       "type": function( elem ) {\r
+                               return elem.getAttribute("type");\r
+                       }\r
+               },\r
+\r
+       find: {\r
+               "ID": assertGetIdNotName ?\r
+                       function( id, context, xml ) {\r
+                               if ( typeof context.getElementById !== strundefined && !xml ) {\r
+                                       var m = context.getElementById( id );\r
+                                       // Check parentNode to catch when Blackberry 4.6 returns\r
+                                       // nodes that are no longer in the document #6963\r
+                                       return m && m.parentNode ? [m] : [];\r
+                               }\r
+                       } :\r
+                       function( id, context, xml ) {\r
+                               if ( typeof context.getElementById !== strundefined && !xml ) {\r
+                                       var m = context.getElementById( id );\r
+\r
+                                       return m ?\r
+                                               m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?\r
+                                                       [m] :\r
+                                                       undefined :\r
+                                               [];\r
+                               }\r
+                       },\r
+\r
+               "TAG": assertTagNameNoComments ?\r
+                       function( tag, context ) {\r
+                               if ( typeof context.getElementsByTagName !== strundefined ) {\r
+                                       return context.getElementsByTagName( tag );\r
+                               }\r
+                       } :\r
+                       function( tag, context ) {\r
+                               var results = context.getElementsByTagName( tag );\r
+\r
+                               // Filter out possible comments\r
+                               if ( tag === "*" ) {\r
+                                       var elem,\r
+                                               tmp = [],\r
+                                               i = 0;\r
+\r
+                                       for ( ; (elem = results[i]); i++ ) {\r
+                                               if ( elem.nodeType === 1 ) {\r
+                                                       tmp.push( elem );\r
+                                               }\r
+                                       }\r
+\r
+                                       return tmp;\r
+                               }\r
+                               return results;\r
+                       },\r
+\r
+               "NAME": function( tag, context ) {\r
+                       if ( typeof context.getElementsByName !== strundefined ) {\r
+                               return context.getElementsByName( name );\r
+                       }\r
+               },\r
+\r
+               "CLASS": function( className, context, xml ) {\r
+                       if ( typeof context.getElementsByClassName !== strundefined && !xml ) {\r
+                               return context.getElementsByClassName( className );\r
+                       }\r
+               }\r
+       },\r
+\r
+       relative: {\r
+               ">": { dir: "parentNode", first: true },\r
+               " ": { dir: "parentNode" },\r
+               "+": { dir: "previousSibling", first: true },\r
+               "~": { dir: "previousSibling" }\r
+       },\r
+\r
+       preFilter: {\r
+               "ATTR": function( match ) {\r
+                       match[1] = match[1].replace( rbackslash, "" );\r
+\r
+                       // Move the given value to match[3] whether quoted or unquoted\r
+                       match[3] = ( match[4] || match[5] || "" ).replace( rbackslash, "" );\r
+\r
+                       if ( match[2] === "~=" ) {\r
+                               match[3] = " " + match[3] + " ";\r
+                       }\r
+\r
+                       return match.slice( 0, 4 );\r
+               },\r
+\r
+               "CHILD": function( match ) {\r
+                       /* matches from matchExpr.CHILD\r
+                               1 type (only|nth|...)\r
+                               2 argument (even|odd|\d*|\d*n([+-]\d+)?|...)\r
+                               3 xn-component of xn+y argument ([+-]?\d*n|)\r
+                               4 sign of xn-component\r
+                               5 x of xn-component\r
+                               6 sign of y-component\r
+                               7 y of y-component\r
+                       */\r
+                       match[1] = match[1].toLowerCase();\r
+\r
+                       if ( match[1] === "nth" ) {\r
+                               // nth-child requires argument\r
+                               if ( !match[2] ) {\r
+                                       Sizzle.error( match[0] );\r
+                               }\r
+\r
+                               // numeric x and y parameters for Expr.filter.CHILD\r
+                               // remember that false/true cast respectively to 0/1\r
+                               match[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === "even" || match[2] === "odd" ) );\r
+                               match[4] = +( ( match[6] + match[7] ) || match[2] === "odd" );\r
+\r
+                       // other types prohibit arguments\r
+                       } else if ( match[2] ) {\r
+                               Sizzle.error( match[0] );\r
+                       }\r
+\r
+                       return match;\r
+               },\r
+\r
+               "PSEUDO": function( match, context, xml ) {\r
+                       var unquoted, excess;\r
+                       if ( matchExpr["CHILD"].test( match[0] ) ) {\r
+                               return null;\r
+                       }\r
+\r
+                       if ( match[3] ) {\r
+                               match[2] = match[3];\r
+                       } else if ( (unquoted = match[4]) ) {\r
+                               // Only check arguments that contain a pseudo\r
+                               if ( rpseudo.test(unquoted) &&\r
+                                       // Get excess from tokenize (recursively)\r
+                                       (excess = tokenize( unquoted, context, xml, true )) &&\r
+                                       // advance to the next closing parenthesis\r
+                                       (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {\r
+\r
+                                       // excess is a negative index\r
+                                       unquoted = unquoted.slice( 0, excess );\r
+                                       match[0] = match[0].slice( 0, excess );\r
+                               }\r
+                               match[2] = unquoted;\r
+                       }\r
+\r
+                       // Return only captures needed by the pseudo filter method (type and argument)\r
+                       return match.slice( 0, 3 );\r
+               }\r
+       },\r
+\r
+       filter: {\r
+               "ID": assertGetIdNotName ?\r
+                       function( id ) {\r
+                               id = id.replace( rbackslash, "" );\r
+                               return function( elem ) {\r
+                                       return elem.getAttribute("id") === id;\r
+                               };\r
+                       } :\r
+                       function( id ) {\r
+                               id = id.replace( rbackslash, "" );\r
+                               return function( elem ) {\r
+                                       var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");\r
+                                       return node && node.value === id;\r
+                               };\r
+                       },\r
+\r
+               "TAG": function( nodeName ) {\r
+                       if ( nodeName === "*" ) {\r
+                               return function() { return true; };\r
+                       }\r
+                       nodeName = nodeName.replace( rbackslash, "" ).toLowerCase();\r
+\r
+                       return function( elem ) {\r
+                               return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\r
+                       };\r
+               },\r
+\r
+               "CLASS": function( className ) {\r
+                       var pattern = classCache[ expando ][ className ];\r
+                       if ( !pattern ) {\r
+                               pattern = classCache( className, new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)") );\r
+                       }\r
+                       return function( elem ) {\r
+                               return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );\r
+                       };\r
+               },\r
+\r
+               "ATTR": function( name, operator, check ) {\r
+                       if ( !operator ) {\r
+                               return function( elem ) {\r
+                                       return Sizzle.attr( elem, name ) != null;\r
+                               };\r
+                       }\r
+\r
+                       return function( elem ) {\r
+                               var result = Sizzle.attr( elem, name ),\r
+                                       value = result + "";\r
+\r
+                               if ( result == null ) {\r
+                                       return operator === "!=";\r
+                               }\r
+\r
+                               switch ( operator ) {\r
+                                       case "=":\r
+                                               return value === check;\r
+                                       case "!=":\r
+                                               return value !== check;\r
+                                       case "^=":\r
+                                               return check && value.indexOf( check ) === 0;\r
+                                       case "*=":\r
+                                               return check && value.indexOf( check ) > -1;\r
+                                       case "$=":\r
+                                               return check && value.substr( value.length - check.length ) === check;\r
+                                       case "~=":\r
+                                               return ( " " + value + " " ).indexOf( check ) > -1;\r
+                                       case "|=":\r
+                                               return value === check || value.substr( 0, check.length + 1 ) === check + "-";\r
+                               }\r
+                       };\r
+               },\r
+\r
+               "CHILD": function( type, argument, first, last ) {\r
+\r
+                       if ( type === "nth" ) {\r
+                               var doneName = done++;\r
+\r
+                               return function( elem ) {\r
+                                       var parent, diff,\r
+                                               count = 0,\r
+                                               node = elem;\r
+\r
+                                       if ( first === 1 && last === 0 ) {\r
+                                               return true;\r
+                                       }\r
+\r
+                                       parent = elem.parentNode;\r
+\r
+                                       if ( parent && (parent[ expando ] !== doneName || !elem.sizset) ) {\r
+                                               for ( node = parent.firstChild; node; node = node.nextSibling ) {\r
+                                                       if ( node.nodeType === 1 ) {\r
+                                                               node.sizset = ++count;\r
+                                                               if ( node === elem ) {\r
+                                                                       break;\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+\r
+                                               parent[ expando ] = doneName;\r
+                                       }\r
+\r
+                                       diff = elem.sizset - last;\r
+\r
+                                       if ( first === 0 ) {\r
+                                               return diff === 0;\r
+\r
+                                       } else {\r
+                                               return ( diff % first === 0 && diff / first >= 0 );\r
+                                       }\r
+                               };\r
+                       }\r
+\r
+                       return function( elem ) {\r
+                               var node = elem;\r
+\r
+                               switch ( type ) {\r
+                                       case "only":\r
+                                       case "first":\r
+                                               while ( (node = node.previousSibling) ) {\r
+                                                       if ( node.nodeType === 1 ) {\r
+                                                               return false;\r
+                                                       }\r
+                                               }\r
+\r
+                                               if ( type === "first" ) {\r
+                                                       return true;\r
+                                               }\r
+\r
+                                               node = elem;\r
+\r
+                                               /* falls through */\r
+                                       case "last":\r
+                                               while ( (node = node.nextSibling) ) {\r
+                                                       if ( node.nodeType === 1 ) {\r
+                                                               return false;\r
+                                                       }\r
+                                               }\r
+\r
+                                               return true;\r
+                               }\r
+                       };\r
+               },\r
+\r
+               "PSEUDO": function( pseudo, argument, context, xml ) {\r
+                       // pseudo-class names are case-insensitive\r
+                       // http://www.w3.org/TR/selectors/#pseudo-classes\r
+                       // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\r
+                       var args,\r
+                               fn = Expr.pseudos[ pseudo ] || Expr.pseudos[ pseudo.toLowerCase() ];\r
+\r
+                       if ( !fn ) {\r
+                               Sizzle.error( "unsupported pseudo: " + pseudo );\r
+                       }\r
+\r
+                       // The user may use createPseudo to indicate that\r
+                       // arguments are needed to create the filter function\r
+                       // just as Sizzle does\r
+                       if ( !fn[ expando ] ) {\r
+                               if ( fn.length > 1 ) {\r
+                                       args = [ pseudo, pseudo, "", argument ];\r
+                                       return function( elem ) {\r
+                                               return fn( elem, 0, args );\r
+                                       };\r
+                               }\r
+                               return fn;\r
+                       }\r
+\r
+                       return fn( argument, context, xml );\r
+               }\r
+       },\r
+\r
+       pseudos: {\r
+               "not": markFunction(function( selector, context, xml ) {\r
+                       // Trim the selector passed to compile\r
+                       // to avoid treating leading and trailing\r
+                       // spaces as combinators\r
+                       var matcher = compile( selector.replace( rtrim, "$1" ), context, xml );\r
+                       return function( elem ) {\r
+                               return !matcher( elem );\r
+                       };\r
+               }),\r
+\r
+               "enabled": function( elem ) {\r
+                       return elem.disabled === false;\r
+               },\r
+\r
+               "disabled": function( elem ) {\r
+                       return elem.disabled === true;\r
+               },\r
+\r
+               "checked": function( elem ) {\r
+                       // In CSS3, :checked should return both checked and selected elements\r
+                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\r
+                       var nodeName = elem.nodeName.toLowerCase();\r
+                       return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);\r
+               },\r
+\r
+               "selected": function( elem ) {\r
+                       // Accessing this property makes selected-by-default\r
+                       // options in Safari work properly\r
+                       if ( elem.parentNode ) {\r
+                               elem.parentNode.selectedIndex;\r
+                       }\r
+\r
+                       return elem.selected === true;\r
+               },\r
+\r
+               "parent": function( elem ) {\r
+                       return !Expr.pseudos["empty"]( elem );\r
+               },\r
+\r
+               "empty": function( elem ) {\r
+                       // http://www.w3.org/TR/selectors/#empty-pseudo\r
+                       // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),\r
+                       //   not comment, processing instructions, or others\r
+                       // Thanks to Diego Perini for the nodeName shortcut\r
+                       //   Greater than "@" means alpha characters (specifically not starting with "#" or "?")\r
+                       var nodeType;\r
+                       elem = elem.firstChild;\r
+                       while ( elem ) {\r
+                               if ( elem.nodeName > "@" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) {\r
+                                       return false;\r
+                               }\r
+                               elem = elem.nextSibling;\r
+                       }\r
+                       return true;\r
+               },\r
+\r
+               "contains": markFunction(function( text ) {\r
+                       return function( elem ) {\r
+                               return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\r
+                       };\r
+               }),\r
+\r
+               "has": markFunction(function( selector ) {\r
+                       return function( elem ) {\r
+                               return Sizzle( selector, elem ).length > 0;\r
+                       };\r
+               }),\r
+\r
+               "header": function( elem ) {\r
+                       return rheader.test( elem.nodeName );\r
+               },\r
+\r
+               "text": function( elem ) {\r
+                       var type, attr;\r
+                       // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)\r
+                       // use getAttribute instead to test this case\r
+                       return elem.nodeName.toLowerCase() === "input" &&\r
+                               (type = elem.type) === "text" &&\r
+                               ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === type );\r
+               },\r
+\r
+               // Input types\r
+               "radio": createInputPseudo("radio"),\r
+               "checkbox": createInputPseudo("checkbox"),\r
+               "file": createInputPseudo("file"),\r
+               "password": createInputPseudo("password"),\r
+               "image": createInputPseudo("image"),\r
+\r
+               "submit": createButtonPseudo("submit"),\r
+               "reset": createButtonPseudo("reset"),\r
+\r
+               "button": function( elem ) {\r
+                       var name = elem.nodeName.toLowerCase();\r
+                       return name === "input" && elem.type === "button" || name === "button";\r
+               },\r
+\r
+               "input": function( elem ) {\r
+                       return rinputs.test( elem.nodeName );\r
+               },\r
+\r
+               "focus": function( elem ) {\r
+                       var doc = elem.ownerDocument;\r
+                       return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href);\r
+               },\r
+\r
+               "active": function( elem ) {\r
+                       return elem === elem.ownerDocument.activeElement;\r
+               }\r
+       },\r
+\r
+       setFilters: {\r
+               "first": function( elements, argument, not ) {\r
+                       return not ? elements.slice( 1 ) : [ elements[0] ];\r
+               },\r
+\r
+               "last": function( elements, argument, not ) {\r
+                       var elem = elements.pop();\r
+                       return not ? elements : [ elem ];\r
+               },\r
+\r
+               "even": function( elements, argument, not ) {\r
+                       var results = [],\r
+                               i = not ? 1 : 0,\r
+                               len = elements.length;\r
+                       for ( ; i < len; i = i + 2 ) {\r
+                               results.push( elements[i] );\r
+                       }\r
+                       return results;\r
+               },\r
+\r
+               "odd": function( elements, argument, not ) {\r
+                       var results = [],\r
+                               i = not ? 0 : 1,\r
+                               len = elements.length;\r
+                       for ( ; i < len; i = i + 2 ) {\r
+                               results.push( elements[i] );\r
+                       }\r
+                       return results;\r
+               },\r
+\r
+               "lt": function( elements, argument, not ) {\r
+                       return not ? elements.slice( +argument ) : elements.slice( 0, +argument );\r
+               },\r
+\r
+               "gt": function( elements, argument, not ) {\r
+                       return not ? elements.slice( 0, +argument + 1 ) : elements.slice( +argument + 1 );\r
+               },\r
+\r
+               "eq": function( elements, argument, not ) {\r
+                       var elem = elements.splice( +argument, 1 );\r
+                       return not ? elements : elem;\r
+               }\r
+       }\r
+};\r
+\r
+function siblingCheck( a, b, ret ) {\r
+       if ( a === b ) {\r
+               return ret;\r
+       }\r
+\r
+       var cur = a.nextSibling;\r
+\r
+       while ( cur ) {\r
+               if ( cur === b ) {\r
+                       return -1;\r
+               }\r
+\r
+               cur = cur.nextSibling;\r
+       }\r
+\r
+       return 1;\r
+}\r
+\r
+sortOrder = docElem.compareDocumentPosition ?\r
+       function( a, b ) {\r
+               if ( a === b ) {\r
+                       hasDuplicate = true;\r
+                       return 0;\r
+               }\r
+\r
+               return ( !a.compareDocumentPosition || !b.compareDocumentPosition ?\r
+                       a.compareDocumentPosition :\r
+                       a.compareDocumentPosition(b) & 4\r
+               ) ? -1 : 1;\r
+       } :\r
+       function( a, b ) {\r
+               // The nodes are identical, we can exit early\r
+               if ( a === b ) {\r
+                       hasDuplicate = true;\r
+                       return 0;\r
+\r
+               // Fallback to using sourceIndex (in IE) if it's available on both nodes\r
+               } else if ( a.sourceIndex && b.sourceIndex ) {\r
+                       return a.sourceIndex - b.sourceIndex;\r
+               }\r
+\r
+               var al, bl,\r
+                       ap = [],\r
+                       bp = [],\r
+                       aup = a.parentNode,\r
+                       bup = b.parentNode,\r
+                       cur = aup;\r
+\r
+               // If the nodes are siblings (or identical) we can do a quick check\r
+               if ( aup === bup ) {\r
+                       return siblingCheck( a, b );\r
+\r
+               // If no parents were found then the nodes are disconnected\r
+               } else if ( !aup ) {\r
+                       return -1;\r
+\r
+               } else if ( !bup ) {\r
+                       return 1;\r
+               }\r
+\r
+               // Otherwise they're somewhere else in the tree so we need\r
+               // to build up a full list of the parentNodes for comparison\r
+               while ( cur ) {\r
+                       ap.unshift( cur );\r
+                       cur = cur.parentNode;\r
+               }\r
+\r
+               cur = bup;\r
+\r
+               while ( cur ) {\r
+                       bp.unshift( cur );\r
+                       cur = cur.parentNode;\r
+               }\r
+\r
+               al = ap.length;\r
+               bl = bp.length;\r
+\r
+               // Start walking down the tree looking for a discrepancy\r
+               for ( var i = 0; i < al && i < bl; i++ ) {\r
+                       if ( ap[i] !== bp[i] ) {\r
+                               return siblingCheck( ap[i], bp[i] );\r
+                       }\r
+               }\r
+\r
+               // We ended someplace up the tree so do a sibling check\r
+               return i === al ?\r
+                       siblingCheck( a, bp[i], -1 ) :\r
+                       siblingCheck( ap[i], b, 1 );\r
+       };\r
+\r
+// Always assume the presence of duplicates if sort doesn't\r
+// pass them to our comparison function (as in Google Chrome).\r
+[0, 0].sort( sortOrder );\r
+baseHasDuplicate = !hasDuplicate;\r
+\r
+// Document sorting and removing duplicates\r
+Sizzle.uniqueSort = function( results ) {\r
+       var elem,\r
+               i = 1;\r
+\r
+       hasDuplicate = baseHasDuplicate;\r
+       results.sort( sortOrder );\r
+\r
+       if ( hasDuplicate ) {\r
+               for ( ; (elem = results[i]); i++ ) {\r
+                       if ( elem === results[ i - 1 ] ) {\r
+                               results.splice( i--, 1 );\r
+                       }\r
+               }\r
+       }\r
+\r
+       return results;\r
+};\r
+\r
+Sizzle.error = function( msg ) {\r
+       throw new Error( "Syntax error, unrecognized expression: " + msg );\r
+};\r
+\r
+function tokenize( selector, context, xml, parseOnly ) {\r
+       var matched, match, tokens, type,\r
+               soFar, groups, group, i,\r
+               preFilters, filters,\r
+               checkContext = !xml && context !== document,\r
+               // Token cache should maintain spaces\r
+               key = ( checkContext ? "<s>" : "" ) + selector.replace( rtrim, "$1<s>" ),\r
+               cached = tokenCache[ expando ][ key ];\r
+\r
+       if ( cached ) {\r
+               return parseOnly ? 0 : slice.call( cached, 0 );\r
+       }\r
+\r
+       soFar = selector;\r
+       groups = [];\r
+       i = 0;\r
+       preFilters = Expr.preFilter;\r
+       filters = Expr.filter;\r
+\r
+       while ( soFar ) {\r
+\r
+               // Comma and first run\r
+               if ( !matched || (match = rcomma.exec( soFar )) ) {\r
+                       if ( match ) {\r
+                               soFar = soFar.slice( match[0].length );\r
+                               tokens.selector = group;\r
+                       }\r
+                       groups.push( tokens = [] );\r
+                       group = "";\r
+\r
+                       // Need to make sure we're within a narrower context if necessary\r
+                       // Adding a descendant combinator will generate what is needed\r
+                       if ( checkContext ) {\r
+                               soFar = " " + soFar;\r
+                       }\r
+               }\r
+\r
+               matched = false;\r
+\r
+               // Combinators\r
+               if ( (match = rcombinators.exec( soFar )) ) {\r
+                       group += match[0];\r
+                       soFar = soFar.slice( match[0].length );\r
+\r
+                       // Cast descendant combinators to space\r
+                       matched = tokens.push({\r
+                               part: match.pop().replace( rtrim, " " ),\r
+                               string: match[0],\r
+                               captures: match\r
+                       });\r
+               }\r
+\r
+               // Filters\r
+               for ( type in filters ) {\r
+                       if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\r
+                               ( match = preFilters[ type ](match, context, xml) )) ) {\r
+\r
+                               group += match[0];\r
+                               soFar = soFar.slice( match[0].length );\r
+                               matched = tokens.push({\r
+                                       part: type,\r
+                                       string: match.shift(),\r
+                                       captures: match\r
+                               });\r
+                       }\r
+               }\r
+\r
+               if ( !matched ) {\r
+                       break;\r
+               }\r
+       }\r
+\r
+       // Attach the full group as a selector\r
+       if ( group ) {\r
+               tokens.selector = group;\r
+       }\r
+\r
+       // Return the length of the invalid excess\r
+       // if we're just parsing\r
+       // Otherwise, throw an error or return tokens\r
+       return parseOnly ?\r
+               soFar.length :\r
+               soFar ?\r
+                       Sizzle.error( selector ) :\r
+                       // Cache the tokens\r
+                       slice.call( tokenCache(key, groups), 0 );\r
+}\r
+\r
+function addCombinator( matcher, combinator, context, xml ) {\r
+       var dir = combinator.dir,\r
+               doneName = done++;\r
+\r
+       if ( !matcher ) {\r
+               // If there is no matcher to check, check against the context\r
+               matcher = function( elem ) {\r
+                       return elem === context;\r
+               };\r
+       }\r
+       return combinator.first ?\r
+               function( elem ) {\r
+                       while ( (elem = elem[ dir ]) ) {\r
+                               if ( elem.nodeType === 1 ) {\r
+                                       return matcher( elem ) && elem;\r
+                               }\r
+                       }\r
+               } :\r
+               xml ?\r
+                       function( elem ) {\r
+                               while ( (elem = elem[ dir ]) ) {\r
+                                       if ( elem.nodeType === 1 ) {\r
+                                               if ( matcher( elem ) ) {\r
+                                                       return elem;\r
+                                               }\r
+                                       }\r
+                               }\r
+                       } :\r
+                       function( elem ) {\r
+                               var cache,\r
+                                       dirkey = doneName + "." + dirruns,\r
+                                       cachedkey = dirkey + "." + cachedruns;\r
+                               while ( (elem = elem[ dir ]) ) {\r
+                                       if ( elem.nodeType === 1 ) {\r
+                                               if ( (cache = elem[ expando ]) === cachedkey ) {\r
+                                                       return elem.sizset;\r
+                                               } else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) {\r
+                                                       if ( elem.sizset ) {\r
+                                                               return elem;\r
+                                                       }\r
+                                               } else {\r
+                                                       elem[ expando ] = cachedkey;\r
+                                                       if ( matcher( elem ) ) {\r
+                                                               elem.sizset = true;\r
+                                                               return elem;\r
+                                                       }\r
+                                                       elem.sizset = false;\r
+                                               }\r
+                                       }\r
+                               }\r
+                       };\r
+}\r
+\r
+function addMatcher( higher, deeper ) {\r
+       return higher ?\r
+               function( elem ) {\r
+                       var result = deeper( elem );\r
+                       return result && higher( result === true ? elem : result );\r
+               } :\r
+               deeper;\r
+}\r
+\r
+// ["TAG", ">", "ID", " ", "CLASS"]\r
+function matcherFromTokens( tokens, context, xml ) {\r
+       var token, matcher,\r
+               i = 0;\r
+\r
+       for ( ; (token = tokens[i]); i++ ) {\r
+               if ( Expr.relative[ token.part ] ) {\r
+                       matcher = addCombinator( matcher, Expr.relative[ token.part ], context, xml );\r
+               } else {\r
+                       matcher = addMatcher( matcher, Expr.filter[ token.part ].apply(null, token.captures.concat( context, xml )) );\r
+               }\r
+       }\r
+\r
+       return matcher;\r
+}\r
+\r
+function matcherFromGroupMatchers( matchers ) {\r
+       return function( elem ) {\r
+               var matcher,\r
+                       j = 0;\r
+               for ( ; (matcher = matchers[j]); j++ ) {\r
+                       if ( matcher(elem) ) {\r
+                               return true;\r
+                       }\r
+               }\r
+               return false;\r
+       };\r
+}\r
+\r
+compile = Sizzle.compile = function( selector, context, xml ) {\r
+       var group, i, len,\r
+               cached = compilerCache[ expando ][ selector ];\r
+\r
+       // Return a cached group function if already generated (context dependent)\r
+       if ( cached && cached.context === context ) {\r
+               return cached;\r
+       }\r
+\r
+       // Generate a function of recursive functions that can be used to check each element\r
+       group = tokenize( selector, context, xml );\r
+       for ( i = 0, len = group.length; i < len; i++ ) {\r
+               group[i] = matcherFromTokens(group[i], context, xml);\r
+       }\r
+\r
+       // Cache the compiled function\r
+       cached = compilerCache( selector, matcherFromGroupMatchers(group) );\r
+       cached.context = context;\r
+       cached.runs = cached.dirruns = 0;\r
+       return cached;\r
+};\r
+\r
+function multipleContexts( selector, contexts, results, seed ) {\r
+       var i = 0,\r
+               len = contexts.length;\r
+       for ( ; i < len; i++ ) {\r
+               Sizzle( selector, contexts[i], results, seed );\r
+       }\r
+}\r
+\r
+function handlePOSGroup( selector, posfilter, argument, contexts, seed, not ) {\r
+       var results,\r
+               fn = Expr.setFilters[ posfilter.toLowerCase() ];\r
+\r
+       if ( !fn ) {\r
+               Sizzle.error( posfilter );\r
+       }\r
+\r
+       if ( selector || !(results = seed) ) {\r
+               multipleContexts( selector || "*", contexts, (results = []), seed );\r
+       }\r
+\r
+       return results.length > 0 ? fn( results, argument, not ) : [];\r
+}\r
+\r
+function handlePOS( groups, context, results, seed ) {\r
+       var group, part, j, groupLen, token, selector,\r
+               anchor, elements, match, matched,\r
+               lastIndex, currentContexts, not,\r
+               i = 0,\r
+               len = groups.length,\r
+               rpos = matchExpr["POS"],\r
+               // This is generated here in case matchExpr["POS"] is extended\r
+               rposgroups = new RegExp( "^" + rpos.source + "(?!" + whitespace + ")", "i" ),\r
+               // This is for making sure non-participating\r
+               // matching groups are represented cross-browser (IE6-8)\r
+               setUndefined = function() {\r
+                       var i = 1,\r
+                               len = arguments.length - 2;\r
+                       for ( ; i < len; i++ ) {\r
+                               if ( arguments[i] === undefined ) {\r
+                                       match[i] = undefined;\r
+                               }\r
+                       }\r
+               };\r
+\r
+       for ( ; i < len; i++ ) {\r
+               group = groups[i];\r
+               part = "";\r
+               elements = seed;\r
+               for ( j = 0, groupLen = group.length; j < groupLen; j++ ) {\r
+                       token = group[j];\r
+                       selector = token.string;\r
+                       if ( token.part === "PSEUDO" ) {\r
+                               // Reset regex index to 0\r
+                               rpos.exec("");\r
+                               anchor = 0;\r
+                               while ( (match = rpos.exec( selector )) ) {\r
+                                       matched = true;\r
+                                       lastIndex = rpos.lastIndex = match.index + match[0].length;\r
+                                       if ( lastIndex > anchor ) {\r
+                                               part += selector.slice( anchor, match.index );\r
+                                               anchor = lastIndex;\r
+                                               currentContexts = [ context ];\r
+\r
+                                               if ( rcombinators.test(part) ) {\r
+                                                       if ( elements ) {\r
+                                                               currentContexts = elements;\r
+                                                       }\r
+                                                       elements = seed;\r
+                                               }\r
+\r
+                                               if ( (not = rendsWithNot.test( part )) ) {\r
+                                                       part = part.slice( 0, -5 ).replace( rcombinators, "$&*" );\r
+                                                       anchor++;\r
+                                               }\r
+\r
+                                               if ( match.length > 1 ) {\r
+                                                       match[0].replace( rposgroups, setUndefined );\r
+                                               }\r
+                                               elements = handlePOSGroup( part, match[1], match[2], currentContexts, elements, not );\r
+                                       }\r
+                                       part = "";\r
+                               }\r
+\r
+                       }\r
+\r
+                       if ( !matched ) {\r
+                               part += selector;\r
+                       }\r
+                       matched = false;\r
+               }\r
+\r
+               if ( part ) {\r
+                       if ( rcombinators.test(part) ) {\r
+                               multipleContexts( part, elements || [ context ], results, seed );\r
+                       } else {\r
+                               Sizzle( part, context, results, seed ? seed.concat(elements) : elements );\r
+                       }\r
+               } else {\r
+                       push.apply( results, elements );\r
+               }\r
+       }\r
+\r
+       // Do not sort if this is a single filter\r
+       return len === 1 ? results : Sizzle.uniqueSort( results );\r
+}\r
+\r
+function select( selector, context, results, seed, xml ) {\r
+       // Remove excessive whitespace\r
+       selector = selector.replace( rtrim, "$1" );\r
+       var elements, matcher, cached, elem,\r
+               i, tokens, token, lastToken, findContext, type,\r
+               match = tokenize( selector, context, xml ),\r
+               contextNodeType = context.nodeType;\r
+\r
+       // POS handling\r
+       if ( matchExpr["POS"].test(selector) ) {\r
+               return handlePOS( match, context, results, seed );\r
+       }\r
+\r
+       if ( seed ) {\r
+               elements = slice.call( seed, 0 );\r
+\r
+       // To maintain document order, only narrow the\r
+       // set if there is one group\r
+       } else if ( match.length === 1 ) {\r
+\r
+               // Take a shortcut and set the context if the root selector is an ID\r
+               if ( (tokens = slice.call( match[0], 0 )).length > 2 &&\r
+                               (token = tokens[0]).part === "ID" &&\r
+                               contextNodeType === 9 && !xml &&\r
+                               Expr.relative[ tokens[1].part ] ) {\r
+\r
+                       context = Expr.find["ID"]( token.captures[0].replace( rbackslash, "" ), context, xml )[0];\r
+                       if ( !context ) {\r
+                               return results;\r
+                       }\r
+\r
+                       selector = selector.slice( tokens.shift().string.length );\r
+               }\r
+\r
+               findContext = ( (match = rsibling.exec( tokens[0].string )) && !match.index && context.parentNode ) || context;\r
+\r
+               // Reduce the set if possible\r
+               lastToken = "";\r
+               for ( i = tokens.length - 1; i >= 0; i-- ) {\r
+                       token = tokens[i];\r
+                       type = token.part;\r
+                       lastToken = token.string + lastToken;\r
+                       if ( Expr.relative[ type ] ) {\r
+                               break;\r
+                       }\r
+                       if ( Expr.order.test(type) ) {\r
+                               elements = Expr.find[ type ]( token.captures[0].replace( rbackslash, "" ), findContext, xml );\r
+                               if ( elements == null ) {\r
+                                       continue;\r
+                               } else {\r
+                                       selector = selector.slice( 0, selector.length - lastToken.length ) +\r
+                                               lastToken.replace( matchExpr[ type ], "" );\r
+\r
+                                       if ( !selector ) {\r
+                                               push.apply( results, slice.call(elements, 0) );\r
+                                       }\r
+\r
+                                       break;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       // Only loop over the given elements once\r
+       if ( selector ) {\r
+               matcher = compile( selector, context, xml );\r
+               dirruns = matcher.dirruns++;\r
+               if ( elements == null ) {\r
+                       elements = Expr.find["TAG"]( "*", (rsibling.test( selector ) && context.parentNode) || context );\r
+               }\r
+\r
+               for ( i = 0; (elem = elements[i]); i++ ) {\r
+                       cachedruns = matcher.runs++;\r
+                       if ( matcher(elem) ) {\r
+                               results.push( elem );\r
+                       }\r
+               }\r
+       }\r
+\r
+       return results;\r
+}\r
+\r
+if ( document.querySelectorAll ) {\r
+       (function() {\r
+               var disconnectedMatch,\r
+                       oldSelect = select,\r
+                       rescape = /'|\\/g,\r
+                       rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,\r
+                       rbuggyQSA = [],\r
+                       // matchesSelector(:active) reports false when true (IE9/Opera 11.5)\r
+                       // A support test would require too much code (would include document ready)\r
+                       // just skip matchesSelector for :active\r
+                       rbuggyMatches = [":active"],\r
+                       matches = docElem.matchesSelector ||\r
+                               docElem.mozMatchesSelector ||\r
+                               docElem.webkitMatchesSelector ||\r
+                               docElem.oMatchesSelector ||\r
+                               docElem.msMatchesSelector;\r
+\r
+               // Build QSA regex\r
+               // Regex strategy adopted from Diego Perini\r
+               assert(function( div ) {\r
+                       // Select is set to empty string on purpose\r
+                       // This is to test IE's treatment of not explictly\r
+                       // setting a boolean content attribute,\r
+                       // since its presence should be enough\r
+                       // http://bugs.jquery.com/ticket/12359\r
+                       div.innerHTML = "<select><option selected=''></option></select>";\r
+\r
+                       // IE8 - Some boolean attributes are not treated correctly\r
+                       if ( !div.querySelectorAll("[selected]").length ) {\r
+                               rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );\r
+                       }\r
+\r
+                       // Webkit/Opera - :checked should return selected option elements\r
+                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\r
+                       // IE8 throws error here (do not put tests after this one)\r
+                       if ( !div.querySelectorAll(":checked").length ) {\r
+                               rbuggyQSA.push(":checked");\r
+                       }\r
+               });\r
+\r
+               assert(function( div ) {\r
+\r
+                       // Opera 10-12/IE9 - ^= $= *= and empty values\r
+                       // Should not select anything\r
+                       div.innerHTML = "<p test=''></p>";\r
+                       if ( div.querySelectorAll("[test^='']").length ) {\r
+                               rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );\r
+                       }\r
+\r
+                       // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\r
+                       // IE8 throws error here (do not put tests after this one)\r
+                       div.innerHTML = "<input type='hidden'/>";\r
+                       if ( !div.querySelectorAll(":enabled").length ) {\r
+                               rbuggyQSA.push(":enabled", ":disabled");\r
+                       }\r
+               });\r
+\r
+               rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );\r
+\r
+               select = function( selector, context, results, seed, xml ) {\r
+                       // Only use querySelectorAll when not filtering,\r
+                       // when this is not xml,\r
+                       // and when no QSA bugs apply\r
+                       if ( !seed && !xml && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\r
+                               if ( context.nodeType === 9 ) {\r
+                                       try {\r
+                                               push.apply( results, slice.call(context.querySelectorAll( selector ), 0) );\r
+                                               return results;\r
+                                       } catch(qsaError) {}\r
+                               // qSA works strangely on Element-rooted queries\r
+                               // We can work around this by specifying an extra ID on the root\r
+                               // and working up from there (Thanks to Andrew Dupont for the technique)\r
+                               // IE 8 doesn't work on object elements\r
+                               } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {\r
+                                       var groups, i, len,\r
+                                               old = context.getAttribute("id"),\r
+                                               nid = old || expando,\r
+                                               newContext = rsibling.test( selector ) && context.parentNode || context;\r
+\r
+                                       if ( old ) {\r
+                                               nid = nid.replace( rescape, "\\$&" );\r
+                                       } else {\r
+                                               context.setAttribute( "id", nid );\r
+                                       }\r
+\r
+                                       groups = tokenize(selector, context, xml);\r
+                                       // Trailing space is unnecessary\r
+                                       // There is always a context check\r
+                                       nid = "[id='" + nid + "']";\r
+                                       for ( i = 0, len = groups.length; i < len; i++ ) {\r
+                                               groups[i] = nid + groups[i].selector;\r
+                                       }\r
+                                       try {\r
+                                               push.apply( results, slice.call( newContext.querySelectorAll(\r
+                                                       groups.join(",")\r
+                                               ), 0 ) );\r
+                                               return results;\r
+                                       } catch(qsaError) {\r
+                                       } finally {\r
+                                               if ( !old ) {\r
+                                                       context.removeAttribute("id");\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       return oldSelect( selector, context, results, seed, xml );\r
+               };\r
+\r
+               if ( matches ) {\r
+                       assert(function( div ) {\r
+                               // Check to see if it's possible to do matchesSelector\r
+                               // on a disconnected node (IE 9)\r
+                               disconnectedMatch = matches.call( div, "div" );\r
+\r
+                               // This should fail with an exception\r
+                               // Gecko does not error, returns false instead\r
+                               try {\r
+                                       matches.call( div, "[test!='']:sizzle" );\r
+                                       rbuggyMatches.push( matchExpr["PSEUDO"].source, matchExpr["POS"].source, "!=" );\r
+                               } catch ( e ) {}\r
+                       });\r
+\r
+                       // rbuggyMatches always contains :active, so no need for a length check\r
+                       rbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join("|") );\r
+\r
+                       Sizzle.matchesSelector = function( elem, expr ) {\r
+                               // Make sure that attribute selectors are quoted\r
+                               expr = expr.replace( rattributeQuotes, "='$1']" );\r
+\r
+                               // rbuggyMatches always contains :active, so no need for an existence check\r
+                               if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && (!rbuggyQSA || !rbuggyQSA.test( expr )) ) {\r
+                                       try {\r
+                                               var ret = matches.call( elem, expr );\r
+\r
+                                               // IE 9's matchesSelector returns false on disconnected nodes\r
+                                               if ( ret || disconnectedMatch ||\r
+                                                               // As well, disconnected nodes are said to be in a document\r
+                                                               // fragment in IE 9\r
+                                                               elem.document && elem.document.nodeType !== 11 ) {\r
+                                                       return ret;\r
+                                               }\r
+                                       } catch(e) {}\r
+                               }\r
+\r
+                               return Sizzle( expr, null, null, [ elem ] ).length > 0;\r
+                       };\r
+               }\r
+       })();\r
+}\r
+\r
+// Deprecated\r
+Expr.setFilters["nth"] = Expr.setFilters["eq"];\r
+\r
+// Back-compat\r
+Expr.filters = Expr.pseudos;\r
+\r
+// Override sizzle attribute retrieval
+Sizzle.attr = jQuery.attr;
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+\r
+\r
+})( window );\r
+var runtil = /Until$/,
+       rparentsprev = /^(?:parents|prev(?:Until|All))/,
+       isSimple = /^.[^:#\[\.,]*$/,
+       rneedsContext = jQuery.expr.match.needsContext,
+       // methods guaranteed to produce a unique set when starting from a unique set
+       guaranteedUnique = {
+               children: true,
+               contents: true,
+               next: true,
+               prev: true
+       };
 
-                               // Using Sizzle here is crazy slow, so we use getElementsByTagName instead
-                               srcElements = getAll( elem );
-                               destElements = getAll( clone );
+jQuery.fn.extend({
+       find: function( selector ) {
+               var i, l, length, n, r, ret,
+                       self = this;
 
-                               // Weird iteration because IE will replace the length property
-                               // with an element if you are cloning the body and one of the
-                               // elements on the page has a name or id of "length"
-                               for ( i = 0; srcElements[i]; ++i ) {
-                                       // Ensure that the destination node is not null; Fixes #9587
-                                       if ( destElements[i] ) {
-                                               cloneFixAttributes( srcElements[i], destElements[i] );
+               if ( typeof selector !== "string" ) {
+                       return jQuery( selector ).filter(function() {
+                               for ( i = 0, l = self.length; i < l; i++ ) {
+                                       if ( jQuery.contains( self[ i ], this ) ) {
+                                               return true;
                                        }
                                }
-                       }
+                       });
+               }
 
-                       // Copy the events from the original to the clone
-                       if ( dataAndEvents ) {
-                               cloneCopyEvent( elem, clone );
+               ret = this.pushStack( "", "find", selector );
 
-                               if ( deepDataAndEvents ) {
-                                       srcElements = getAll( elem );
-                                       destElements = getAll( clone );
+               for ( i = 0, l = this.length; i < l; i++ ) {
+                       length = ret.length;
+                       jQuery.find( selector, this[i], ret );
 
-                                       for ( i = 0; srcElements[i]; ++i ) {
-                                               cloneCopyEvent( srcElements[i], destElements[i] );
+                       if ( i > 0 ) {
+                               // Make sure that the results are unique
+                               for ( n = length; n < ret.length; n++ ) {
+                                       for ( r = 0; r < length; r++ ) {
+                                               if ( ret[r] === ret[n] ) {
+                                                       ret.splice(n--, 1);
+                                                       break;
+                                               }
                                        }
                                }
                        }
+               }
 
-                       srcElements = destElements = null;
-
-                       // Return the cloned set
-                       return clone;
-               },
-
-               clean: function( elems, context, fragment, scripts ) {
-                       var checkScriptType, script, j,
-                               ret = [];
+               return ret;
+       },
 
-                       context = context || document;
+       has: function( target ) {
+               var i,
+                       targets = jQuery( target, this ),
+                       len = targets.length;
 
-                       // !context.createElement fails in IE with an error but returns typeof 'object'
-                       if ( typeof context.createElement === "undefined" ) {
-                               context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+               return this.filter(function() {
+                       for ( i = 0; i < len; i++ ) {
+                               if ( jQuery.contains( this, targets[i] ) ) {
+                                       return true;
+                               }
                        }
+               });
+       },
+
+       not: function( selector ) {
+               return this.pushStack( winnow(this, selector, false), "not", selector);
+       },
+
+       filter: function( selector ) {
+               return this.pushStack( winnow(this, selector, true), "filter", selector );
+       },
+
+       is: function( selector ) {
+               return !!selector && (
+                       typeof selector === "string" ?
+                               // If this is a positional/relative selector, check membership in the returned set
+                               // so $("p:first").is("p:last") won't return true for a doc with two "p".
+                               rneedsContext.test( selector ) ?
+                                       jQuery( selector, this.context ).index( this[0] ) >= 0 :
+                                       jQuery.filter( selector, this ).length > 0 :
+                               this.filter( selector ).length > 0 );
+       },
+
+       closest: function( selectors, context ) {
+               var cur,
+                       i = 0,
+                       l = this.length,
+                       ret = [],
+                       pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+                               jQuery( selectors, context || this.context ) :
+                               0;
 
-                       for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-                               if ( typeof elem === "number" ) {
-                                       elem += "";
-                               }
+               for ( ; i < l; i++ ) {
+                       cur = this[i];
 
-                               if ( !elem ) {
-                                       continue;
+                       while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
+                               if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+                                       ret.push( cur );
+                                       break;
                                }
+                               cur = cur.parentNode;
+                       }
+               }
 
-                               // Convert html string into DOM nodes
-                               if ( typeof elem === "string" ) {
-                                       if ( !rhtml.test( elem ) ) {
-                                               elem = context.createTextNode( elem );
-                                       } else {
-                                               // Fix "XHTML"-style tags in all browsers
-                                               elem = elem.replace(rxhtmlTag, "<$1></$2>");
-
-                                               // Trim whitespace, otherwise indexOf won't work as expected
-                                               var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
-                                                       wrap = wrapMap[ tag ] || wrapMap._default,
-                                                       depth = wrap[0],
-                                                       div = context.createElement("div"),
-                                                       safeChildNodes = safeFragment.childNodes,
-                                                       remove;
-
-                                               // Append wrapper element to unknown element safe doc fragment
-                                               if ( context === document ) {
-                                                       // Use the fragment we've already created for this document
-                                                       safeFragment.appendChild( div );
-                                               } else {
-                                                       // Use a fragment created with the owner document
-                                                       createSafeFragment( context ).appendChild( div );
-                                               }
+               ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
 
-                                               // Go to html and back, then peel off extra wrappers
-                                               div.innerHTML = wrap[1] + elem + wrap[2];
+               return this.pushStack( ret, "closest", selectors );
+       },
 
-                                               // Move to the right depth
-                                               while ( depth-- ) {
-                                                       div = div.lastChild;
-                                               }
+       // Determine the position of an element within
+       // the matched set of elements
+       index: function( elem ) {
 
-                                               // Remove IE's autoinserted <tbody> from table fragments
-                                               if ( !jQuery.support.tbody ) {
+               // No argument, return index in parent
+               if ( !elem ) {
+                       return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
+               }
 
-                                                       // String was a <table>, *may* have spurious <tbody>
-                                                       var hasBody = rtbody.test(elem),
-                                                               tbody = tag === "table" && !hasBody ?
-                                                                       div.firstChild && div.firstChild.childNodes :
+               // index in selector
+               if ( typeof elem === "string" ) {
+                       return jQuery.inArray( this[0], jQuery( elem ) );
+               }
 
-                                                                       // String was a bare <thead> or <tfoot>
-                                                                       wrap[1] === "<table>" && !hasBody ?
-                                                                               div.childNodes :
-                                                                               [];
+               // Locate the position of the desired element
+               return jQuery.inArray(
+                       // If it receives a jQuery object, the first element is used
+                       elem.jquery ? elem[0] : elem, this );
+       },
+
+       add: function( selector, context ) {
+               var set = typeof selector === "string" ?
+                               jQuery( selector, context ) :
+                               jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
+                       all = jQuery.merge( this.get(), set );
+
+               return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+                       all :
+                       jQuery.unique( all ) );
+       },
+
+       addBack: function( selector ) {
+               return this.add( selector == null ?
+                       this.prevObject : this.prevObject.filter(selector)
+               );
+       }
+});
 
-                                                       for ( j = tbody.length - 1; j >= 0 ; --j ) {
-                                                               if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
-                                                                       tbody[ j ].parentNode.removeChild( tbody[ j ] );
-                                                               }
-                                                       }
-                                               }
+jQuery.fn.andSelf = jQuery.fn.addBack;
 
-                                               // IE completely kills leading whitespace when innerHTML is used
-                                               if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
-                                                       div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
-                                               }
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+       return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+function sibling( cur, dir ) {
+       do {
+               cur = cur[ dir ];
+       } while ( cur && cur.nodeType !== 1 );
+
+       return cur;
+}
+
+jQuery.each({
+       parent: function( elem ) {
+               var parent = elem.parentNode;
+               return parent && parent.nodeType !== 11 ? parent : null;
+       },
+       parents: function( elem ) {
+               return jQuery.dir( elem, "parentNode" );
+       },
+       parentsUntil: function( elem, i, until ) {
+               return jQuery.dir( elem, "parentNode", until );
+       },
+       next: function( elem ) {
+               return sibling( elem, "nextSibling" );
+       },
+       prev: function( elem ) {
+               return sibling( elem, "previousSibling" );
+       },
+       nextAll: function( elem ) {
+               return jQuery.dir( elem, "nextSibling" );
+       },
+       prevAll: function( elem ) {
+               return jQuery.dir( elem, "previousSibling" );
+       },
+       nextUntil: function( elem, i, until ) {
+               return jQuery.dir( elem, "nextSibling", until );
+       },
+       prevUntil: function( elem, i, until ) {
+               return jQuery.dir( elem, "previousSibling", until );
+       },
+       siblings: function( elem ) {
+               return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+       },
+       children: function( elem ) {
+               return jQuery.sibling( elem.firstChild );
+       },
+       contents: function( elem ) {
+               return jQuery.nodeName( elem, "iframe" ) ?
+                       elem.contentDocument || elem.contentWindow.document :
+                       jQuery.merge( [], elem.childNodes );
+       }
+}, function( name, fn ) {
+       jQuery.fn[ name ] = function( until, selector ) {
+               var ret = jQuery.map( this, fn, until );
 
-                                               elem = div.childNodes;
+               if ( !runtil.test( name ) ) {
+                       selector = until;
+               }
 
-                                               // Clear elements from DocumentFragment (safeFragment or otherwise)
-                                               // to avoid hoarding elements. Fixes #11356
-                                               if ( div ) {
-                                                       div.parentNode.removeChild( div );
+               if ( selector && typeof selector === "string" ) {
+                       ret = jQuery.filter( selector, ret );
+               }
 
-                                                       // Guard against -1 index exceptions in FF3.6
-                                                       if ( safeChildNodes.length > 0 ) {
-                                                               remove = safeChildNodes[ safeChildNodes.length - 1 ];
+               ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
 
-                                                               if ( remove && remove.parentNode ) {
-                                                                       remove.parentNode.removeChild( remove );
-                                                               }
-                                                       }
-                                               }
-                                       }
-                               }
+               if ( this.length > 1 && rparentsprev.test( name ) ) {
+                       ret = ret.reverse();
+               }
 
-                               // Resets defaultChecked for any radios and checkboxes
-                               // about to be appended to the DOM in IE 6/7 (#8060)
-                               var len;
-                               if ( !jQuery.support.appendChecked ) {
-                                       if ( elem[0] && typeof (len = elem.length) === "number" ) {
-                                               for ( j = 0; j < len; j++ ) {
-                                                       findInputs( elem[j] );
-                                               }
-                                       } else {
-                                               findInputs( elem );
-                                       }
-                               }
+               return this.pushStack( ret, name, core_slice.call( arguments ).join(",") );
+       };
+});
 
-                               if ( elem.nodeType ) {
-                                       ret.push( elem );
-                               } else {
-                                       ret = jQuery.merge( ret, elem );
-                               }
-                       }
+jQuery.extend({
+       filter: function( expr, elems, not ) {
+               if ( not ) {
+                       expr = ":not(" + expr + ")";
+               }
 
-                       if ( fragment ) {
-                               checkScriptType = function( elem ) {
-                                       return !elem.type || rscriptType.test( elem.type );
-                               };
-                               for ( i = 0; ret[i]; i++ ) {
-                                       script = ret[i];
-                                       if ( scripts && jQuery.nodeName( script, "script" ) && (!script.type || rscriptType.test( script.type )) ) {
-                                               scripts.push( script.parentNode ? script.parentNode.removeChild( script ) : script );
+               return elems.length === 1 ?
+                       jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+                       jQuery.find.matches(expr, elems);
+       },
 
-                                       } else {
-                                               if ( script.nodeType === 1 ) {
-                                                       var jsTags = jQuery.grep( script.getElementsByTagName( "script" ), checkScriptType );
+       dir: function( elem, dir, until ) {
+               var matched = [],
+                       cur = elem[ dir ];
 
-                                                       ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
-                                               }
-                                               fragment.appendChild( script );
-                                       }
-                               }
+               while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+                       if ( cur.nodeType === 1 ) {
+                               matched.push( cur );
                        }
+                       cur = cur[dir];
+               }
+               return matched;
+       },
 
-                       return ret;
-               },
+       sibling: function( n, elem ) {
+               var r = [];
+
+               for ( ; n; n = n.nextSibling ) {
+                       if ( n.nodeType === 1 && n !== elem ) {
+                               r.push( n );
+                       }
+               }
 
-               cleanData: function( elems ) {
-                       var data, id,
-                               cache = jQuery.cache,
-                               special = jQuery.event.special,
-                               deleteExpando = jQuery.support.deleteExpando;
+               return r;
+       }
+});
 
-                       for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-                               if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
-                                       continue;
-                               }
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
 
-                               id = elem[ jQuery.expando ];
+       // Can't pass null or undefined to indexOf in Firefox 4
+       // Set to 0 to skip string check
+       qualifier = qualifier || 0;
 
-                               if ( id ) {
-                                       data = cache[ id ];
+       if ( jQuery.isFunction( qualifier ) ) {
+               return jQuery.grep(elements, function( elem, i ) {
+                       var retVal = !!qualifier.call( elem, i, elem );
+                       return retVal === keep;
+               });
 
-                                       if ( data && data.events ) {
-                                               for ( var type in data.events ) {
-                                                       if ( special[ type ] ) {
-                                                               jQuery.event.remove( elem, type );
+       } else if ( qualifier.nodeType ) {
+               return jQuery.grep(elements, function( elem, i ) {
+                       return ( elem === qualifier ) === keep;
+               });
 
-                                                               // This is a shortcut to avoid jQuery.event.remove's overhead
-                                                       } else {
-                                                               jQuery.removeEvent( elem, type, data.handle );
-                                                       }
-                                               }
+       } else if ( typeof qualifier === "string" ) {
+               var filtered = jQuery.grep(elements, function( elem ) {
+                       return elem.nodeType === 1;
+               });
 
-                                               // Null the DOM reference to avoid IE6/7/8 leak (#7054)
-                                               if ( data.handle ) {
-                                                       data.handle.elem = null;
-                                               }
-                                       }
+               if ( isSimple.test( qualifier ) ) {
+                       return jQuery.filter(qualifier, filtered, !keep);
+               } else {
+                       qualifier = jQuery.filter( qualifier, filtered );
+               }
+       }
 
-                                       if ( deleteExpando ) {
-                                               delete elem[ jQuery.expando ];
+       return jQuery.grep(elements, function( elem, i ) {
+               return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
+       });
+}
+function createSafeFragment( document ) {
+       var list = nodeNames.split( "|" ),
+       safeFrag = document.createDocumentFragment();
+
+       if ( safeFrag.createElement ) {
+               while ( list.length ) {
+                       safeFrag.createElement(
+                               list.pop()
+                       );
+               }
+       }
+       return safeFrag;
+}
+
+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+               "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+       rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
+       rleadingWhitespace = /^\s+/,
+       rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+       rtagName = /<([\w:]+)/,
+       rtbody = /<tbody/i,
+       rhtml = /<|&#?\w+;/,
+       rnoInnerhtml = /<(?:script|style|link)/i,
+       rnocache = /<(?:script|object|embed|option|style)/i,
+       rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+       rcheckableType = /^(?:checkbox|radio)$/,
+       // checked="checked" or checked
+       rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+       rscriptType = /\/(java|ecma)script/i,
+       rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,
+       wrapMap = {
+               option: [ 1, "<select multiple='multiple'>", "</select>" ],
+               legend: [ 1, "<fieldset>", "</fieldset>" ],
+               thead: [ 1, "<table>", "</table>" ],
+               tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+               td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+               col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+               area: [ 1, "<map>", "</map>" ],
+               _default: [ 0, "", "" ]
+       },
+       safeFragment = createSafeFragment( document ),
+       fragmentDiv = safeFragment.appendChild( document.createElement("div") );
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+// unless wrapped in a div with non-breaking characters in front of it.
+if ( !jQuery.support.htmlSerialize ) {
+       wrapMap._default = [ 1, "X<div>", "</div>" ];
+}
+
+jQuery.fn.extend({
+       text: function( value ) {
+               return jQuery.access( this, function( value ) {
+                       return value === undefined ?
+                               jQuery.text( this ) :
+                               this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
+               }, null, value, arguments.length );
+       },
+
+       wrapAll: function( html ) {
+               if ( jQuery.isFunction( html ) ) {
+                       return this.each(function(i) {
+                               jQuery(this).wrapAll( html.call(this, i) );
+                       });
+               }
 
-                                       } else if ( elem.removeAttribute ) {
-                                               elem.removeAttribute( jQuery.expando );
-                                       }
+               if ( this[0] ) {
+                       // The elements to wrap the target around
+                       var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
 
-                                       delete cache[ id ];
-                               }
+                       if ( this[0].parentNode ) {
+                               wrap.insertBefore( this[0] );
                        }
-               }
-       });
 
+                       wrap.map(function() {
+                               var elem = this;
 
+                               while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+                                       elem = elem.firstChild;
+                               }
 
+                               return elem;
+                       }).append( this );
+               }
 
-       var ralpha = /alpha\([^)]*\)/i,
-               ropacity = /opacity=([^)]*)/,
-       // fixed for IE9, see #8346
-               rupper = /([A-Z]|^ms)/g,
-               rnum = /^[\-+]?(?:\d*\.)?\d+$/i,
-               rnumnonpx = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,
-               rrelNum = /^([\-+])=([\-+.\de]+)/,
-               rmargin = /^margin/,
+               return this;
+       },
 
-               cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+       wrapInner: function( html ) {
+               if ( jQuery.isFunction( html ) ) {
+                       return this.each(function(i) {
+                               jQuery(this).wrapInner( html.call(this, i) );
+                       });
+               }
 
-       // order is important!
-               cssExpand = [ "Top", "Right", "Bottom", "Left" ],
+               return this.each(function() {
+                       var self = jQuery( this ),
+                               contents = self.contents();
 
-               curCSS,
+                       if ( contents.length ) {
+                               contents.wrapAll( html );
 
-               getComputedStyle,
-               currentStyle;
+                       } else {
+                               self.append( html );
+                       }
+               });
+       },
 
-       jQuery.fn.css = function( name, value ) {
-               return jQuery.access( this, function( elem, name, value ) {
-                       return value !== undefined ?
-                               jQuery.style( elem, name, value ) :
-                               jQuery.css( elem, name );
-               }, name, value, arguments.length > 1 );
-       };
+       wrap: function( html ) {
+               var isFunction = jQuery.isFunction( html );
 
-       jQuery.extend({
-               // Add in style property hooks for overriding the default
-               // behavior of getting and setting a style property
-               cssHooks: {
-                       opacity: {
-                               get: function( elem, computed ) {
-                                       if ( computed ) {
-                                               // We should always get a number back from opacity
-                                               var ret = curCSS( elem, "opacity" );
-                                               return ret === "" ? "1" : ret;
+               return this.each(function(i) {
+                       jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+               });
+       },
 
-                                       } else {
-                                               return elem.style.opacity;
-                                       }
-                               }
+       unwrap: function() {
+               return this.parent().each(function() {
+                       if ( !jQuery.nodeName( this, "body" ) ) {
+                               jQuery( this ).replaceWith( this.childNodes );
                        }
-               },
-
-               // Exclude the following css properties to add px
-               cssNumber: {
-                       "fillOpacity": true,
-                       "fontWeight": true,
-                       "lineHeight": true,
-                       "opacity": true,
-                       "orphans": true,
-                       "widows": true,
-                       "zIndex": true,
-                       "zoom": true
-               },
+               }).end();
+       },
 
-               // Add in properties whose names you wish to fix before
-               // setting or getting the value
-               cssProps: {
-                       // normalize float css property
-                       "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
-               },
+       append: function() {
+               return this.domManip(arguments, true, function( elem ) {
+                       if ( this.nodeType === 1 || this.nodeType === 11 ) {
+                               this.appendChild( elem );
+                       }
+               });
+       },
 
-               // Get and set the style property on a DOM Node
-               style: function( elem, name, value, extra ) {
-                       // Don't set styles on text and comment nodes
-                       if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
-                               return;
+       prepend: function() {
+               return this.domManip(arguments, true, function( elem ) {
+                       if ( this.nodeType === 1 || this.nodeType === 11 ) {
+                               this.insertBefore( elem, this.firstChild );
                        }
+               });
+       },
 
-                       // Make sure that we're working with the right name
-                       var ret, type, origName = jQuery.camelCase( name ),
-                               style = elem.style, hooks = jQuery.cssHooks[ origName ];
+       before: function() {
+               if ( !isDisconnected( this[0] ) ) {
+                       return this.domManip(arguments, false, function( elem ) {
+                               this.parentNode.insertBefore( elem, this );
+                       });
+               }
 
-                       name = jQuery.cssProps[ origName ] || origName;
+               if ( arguments.length ) {
+                       var set = jQuery.clean( arguments );
+                       return this.pushStack( jQuery.merge( set, this ), "before", this.selector );
+               }
+       },
 
-                       // Check if we're setting a value
-                       if ( value !== undefined ) {
-                               type = typeof value;
+       after: function() {
+               if ( !isDisconnected( this[0] ) ) {
+                       return this.domManip(arguments, false, function( elem ) {
+                               this.parentNode.insertBefore( elem, this.nextSibling );
+                       });
+               }
 
-                               // convert relative number strings (+= or -=) to relative numbers. #7345
-                               if ( type === "string" && (ret = rrelNum.exec( value )) ) {
-                                       value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
-                                       // Fixes bug #9237
-                                       type = "number";
-                               }
+               if ( arguments.length ) {
+                       var set = jQuery.clean( arguments );
+                       return this.pushStack( jQuery.merge( this, set ), "after", this.selector );
+               }
+       },
 
-                               // Make sure that NaN and null values aren't set. See: #7116
-                               if ( value == null || type === "number" && isNaN( value ) ) {
-                                       return;
-                               }
+       // keepData is for internal use only--do not document
+       remove: function( selector, keepData ) {
+               var elem,
+                       i = 0;
 
-                               // If a number was passed in, add 'px' to the (except for certain CSS properties)
-                               if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
-                                       value += "px";
+               for ( ; (elem = this[i]) != null; i++ ) {
+                       if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+                               if ( !keepData && elem.nodeType === 1 ) {
+                                       jQuery.cleanData( elem.getElementsByTagName("*") );
+                                       jQuery.cleanData( [ elem ] );
                                }
 
-                               // If a hook was provided, use that value, otherwise just set the specified value
-                               if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
-                                       // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
-                                       // Fixes bug #5509
-                                       try {
-                                               style[ name ] = value;
-                                       } catch(e) {}
+                               if ( elem.parentNode ) {
+                                       elem.parentNode.removeChild( elem );
                                }
+                       }
+               }
 
-                       } else {
-                               // If a hook was provided get the non-computed value from there
-                               if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
-                                       return ret;
-                               }
+               return this;
+       },
+
+       empty: function() {
+               var elem,
+                       i = 0;
 
-                               // Otherwise just get the value from the style object
-                               return style[ name ];
+               for ( ; (elem = this[i]) != null; i++ ) {
+                       // Remove element nodes and prevent memory leaks
+                       if ( elem.nodeType === 1 ) {
+                               jQuery.cleanData( elem.getElementsByTagName("*") );
                        }
-               },
 
-               css: function( elem, name, extra ) {
-                       var ret, hooks;
+                       // Remove any remaining nodes
+                       while ( elem.firstChild ) {
+                               elem.removeChild( elem.firstChild );
+                       }
+               }
 
-                       // Make sure that we're working with the right name
-                       name = jQuery.camelCase( name );
-                       hooks = jQuery.cssHooks[ name ];
-                       name = jQuery.cssProps[ name ] || name;
+               return this;
+       },
 
-                       // cssFloat needs a special treatment
-                       if ( name === "cssFloat" ) {
-                               name = "float";
-                       }
+       clone: function( dataAndEvents, deepDataAndEvents ) {
+               dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+               deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
 
-                       // If a hook was provided get the computed value from there
-                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
-                               return ret;
+               return this.map( function () {
+                       return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+               });
+       },
+
+       html: function( value ) {
+               return jQuery.access( this, function( value ) {
+                       var elem = this[0] || {},
+                               i = 0,
+                               l = this.length;
 
-                               // Otherwise, if a way to get the computed value exists, use that
-                       } else if ( curCSS ) {
-                               return curCSS( elem, name );
+                       if ( value === undefined ) {
+                               return elem.nodeType === 1 ?
+                                       elem.innerHTML.replace( rinlinejQuery, "" ) :
+                                       undefined;
                        }
-               },
 
-               // A method for quickly swapping in/out CSS properties to get correct calculations
-               swap: function( elem, options, callback ) {
-                       var old = {},
-                               ret, name;
+                       // See if we can take a shortcut and just use innerHTML
+                       if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+                               ( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&
+                               ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+                               !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
 
-                       // Remember the old values, and insert the new ones
-                       for ( name in options ) {
-                               old[ name ] = elem.style[ name ];
-                               elem.style[ name ] = options[ name ];
+                               value = value.replace( rxhtmlTag, "<$1></$2>" );
+
+                               try {
+                                       for (; i < l; i++ ) {
+                                               // Remove element nodes and prevent memory leaks
+                                               elem = this[i] || {};
+                                               if ( elem.nodeType === 1 ) {
+                                                       jQuery.cleanData( elem.getElementsByTagName( "*" ) );
+                                                       elem.innerHTML = value;
+                                               }
+                                       }
+
+                                       elem = 0;
+
+                               // If using innerHTML throws an exception, use the fallback method
+                               } catch(e) {}
+                       }
+
+                       if ( elem ) {
+                               this.empty().append( value );
                        }
+               }, null, value, arguments.length );
+       },
 
-                       ret = callback.call( elem );
+       replaceWith: function( value ) {
+               if ( !isDisconnected( this[0] ) ) {
+                       // Make sure that the elements are removed from the DOM before they are inserted
+                       // this can help fix replacing a parent with child elements
+                       if ( jQuery.isFunction( value ) ) {
+                               return this.each(function(i) {
+                                       var self = jQuery(this), old = self.html();
+                                       self.replaceWith( value.call( this, i, old ) );
+                               });
+                       }
 
-                       // Revert the old values
-                       for ( name in options ) {
-                               elem.style[ name ] = old[ name ];
+                       if ( typeof value !== "string" ) {
+                               value = jQuery( value ).detach();
                        }
 
-                       return ret;
+                       return this.each(function() {
+                               var next = this.nextSibling,
+                                       parent = this.parentNode;
+
+                               jQuery( this ).remove();
+
+                               if ( next ) {
+                                       jQuery(next).before( value );
+                               } else {
+                                       jQuery(parent).append( value );
+                               }
+                       });
                }
-       });
 
-// DEPRECATED in 1.3, Use jQuery.css() instead
-       jQuery.curCSS = jQuery.css;
+               return this.length ?
+                       this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
+                       this;
+       },
+
+       detach: function( selector ) {
+               return this.remove( selector, true );
+       },
 
-       if ( document.defaultView && document.defaultView.getComputedStyle ) {
-               getComputedStyle = function( elem, name ) {
-                       var ret, defaultView, computedStyle, width,
-                               style = elem.style;
+       domManip: function( args, table, callback ) {
 
-                       name = name.replace( rupper, "-$1" ).toLowerCase();
+               // Flatten any nested arrays
+               args = [].concat.apply( [], args );
 
-                       if ( (defaultView = elem.ownerDocument.defaultView) &&
-                               (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
+               var results, first, fragment, iNoClone,
+                       i = 0,
+                       value = args[0],
+                       scripts = [],
+                       l = this.length;
+
+               // We can't cloneNode fragments that contain checked, in WebKit
+               if ( !jQuery.support.checkClone && l > 1 && typeof value === "string" && rchecked.test( value ) ) {
+                       return this.each(function() {
+                               jQuery(this).domManip( args, table, callback );
+                       });
+               }
+
+               if ( jQuery.isFunction(value) ) {
+                       return this.each(function(i) {
+                               var self = jQuery(this);
+                               args[0] = value.call( this, i, table ? self.html() : undefined );
+                               self.domManip( args, table, callback );
+                       });
+               }
 
-                               ret = computedStyle.getPropertyValue( name );
-                               if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
-                                       ret = jQuery.style( elem, name );
+               if ( this[0] ) {
+                       results = jQuery.buildFragment( args, this, scripts );
+                       fragment = results.fragment;
+                       first = fragment.firstChild;
+
+                       if ( fragment.childNodes.length === 1 ) {
+                               fragment = first;
+                       }
+
+                       if ( first ) {
+                               table = table && jQuery.nodeName( first, "tr" );
+
+                               // Use the original fragment for the last item instead of the first because it can end up
+                               // being emptied incorrectly in certain situations (#8070).
+                               // Fragments from the fragment cache must always be cloned and never used in place.
+                               for ( iNoClone = results.cacheable || l - 1; i < l; i++ ) {
+                                       callback.call(
+                                               table && jQuery.nodeName( this[i], "table" ) ?
+                                                       findOrAppend( this[i], "tbody" ) :
+                                                       this[i],
+                                               i === iNoClone ?
+                                                       fragment :
+                                                       jQuery.clone( fragment, true, true )
+                                       );
                                }
                        }
 
-                       // A tribute to the "awesome hack by Dean Edwards"
-                       // WebKit uses "computed value (percentage if specified)" instead of "used value" for margins
-                       // which is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
-                       if ( !jQuery.support.pixelMargin && computedStyle && rmargin.test( name ) && rnumnonpx.test( ret ) ) {
-                               width = style.width;
-                               style.width = ret;
-                               ret = computedStyle.width;
-                               style.width = width;
+                       // Fix #11809: Avoid leaking memory
+                       fragment = first = null;
+
+                       if ( scripts.length ) {
+                               jQuery.each( scripts, function( i, elem ) {
+                                       if ( elem.src ) {
+                                               if ( jQuery.ajax ) {
+                                                       jQuery.ajax({
+                                                               url: elem.src,
+                                                               type: "GET",
+                                                               dataType: "script",
+                                                               async: false,
+                                                               global: false,
+                                                               "throws": true
+                                                       });
+                                               } else {
+                                                       jQuery.error("no ajax");
+                                               }
+                                       } else {
+                                               jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "" ) );
+                                       }
+
+                                       if ( elem.parentNode ) {
+                                               elem.parentNode.removeChild( elem );
+                                       }
+                               });
                        }
+               }
 
-                       return ret;
-               };
+               return this;
        }
+});
 
-       if ( document.documentElement.currentStyle ) {
-               currentStyle = function( elem, name ) {
-                       var left, rsLeft, uncomputed,
-                               ret = elem.currentStyle && elem.currentStyle[ name ],
-                               style = elem.style;
+function findOrAppend( elem, tag ) {
+       return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
+}
 
-                       // Avoid setting ret to empty string here
-                       // so we don't default to auto
-                       if ( ret == null && style && (uncomputed = style[ name ]) ) {
-                               ret = uncomputed;
-                       }
-
-                       // From the awesome hack by Dean Edwards
-                       // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+function cloneCopyEvent( src, dest ) {
 
-                       // If we're not dealing with a regular pixel number
-                       // but a number that has a weird ending, we need to convert it to pixels
-                       if ( rnumnonpx.test( ret ) ) {
+       if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+               return;
+       }
 
-                               // Remember the original values
-                               left = style.left;
-                               rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
+       var type, i, l,
+               oldData = jQuery._data( src ),
+               curData = jQuery._data( dest, oldData ),
+               events = oldData.events;
 
-                               // Put in the new values to get a computed value out
-                               if ( rsLeft ) {
-                                       elem.runtimeStyle.left = elem.currentStyle.left;
-                               }
-                               style.left = name === "fontSize" ? "1em" : ret;
-                               ret = style.pixelLeft + "px";
+       if ( events ) {
+               delete curData.handle;
+               curData.events = {};
 
-                               // Revert the changed values
-                               style.left = left;
-                               if ( rsLeft ) {
-                                       elem.runtimeStyle.left = rsLeft;
-                               }
+               for ( type in events ) {
+                       for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+                               jQuery.event.add( dest, type, events[ type ][ i ] );
                        }
+               }
+       }
 
-                       return ret === "" ? "auto" : ret;
-               };
+       // make the cloned public data object a copy from the original
+       if ( curData.data ) {
+               curData.data = jQuery.extend( {}, curData.data );
        }
+}
 
-       curCSS = getComputedStyle || currentStyle;
+function cloneFixAttributes( src, dest ) {
+       var nodeName;
 
-       function getWidthOrHeight( elem, name, extra ) {
+       // We do not need to do anything for non-Elements
+       if ( dest.nodeType !== 1 ) {
+               return;
+       }
 
-               // Start with offset property
-               var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
-                       i = name === "width" ? 1 : 0,
-                       len = 4;
+       // clearAttributes removes the attributes, which we don't want,
+       // but also removes the attachEvent events, which we *do* want
+       if ( dest.clearAttributes ) {
+               dest.clearAttributes();
+       }
 
-               if ( val > 0 ) {
-                       if ( extra !== "border" ) {
-                               for ( ; i < len; i += 2 ) {
-                                       if ( !extra ) {
-                                               val -= parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0;
-                                       }
-                                       if ( extra === "margin" ) {
-                                               val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ] ) ) || 0;
-                                       } else {
-                                               val -= parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
-                                       }
-                               }
-                       }
+       // mergeAttributes, in contrast, only merges back on the
+       // original attributes, not the events
+       if ( dest.mergeAttributes ) {
+               dest.mergeAttributes( src );
+       }
 
-                       return val + "px";
-               }
+       nodeName = dest.nodeName.toLowerCase();
 
-               // Fall back to computed then uncomputed css if necessary
-               val = curCSS( elem, name );
-               if ( val < 0 || val == null ) {
-                       val = elem.style[ name ];
+       if ( nodeName === "object" ) {
+               // IE6-10 improperly clones children of object elements using classid.
+               // IE10 throws NoModificationAllowedError if parent is null, #12132.
+               if ( dest.parentNode ) {
+                       dest.outerHTML = src.outerHTML;
                }
 
-               // Computed unit is not pixels. Stop here and return.
-               if ( rnumnonpx.test(val) ) {
-                       return val;
+               // This path appears unavoidable for IE9. When cloning an object
+               // element in IE9, the outerHTML strategy above is not sufficient.
+               // If the src has innerHTML and the destination does not,
+               // copy the src.innerHTML into the dest.innerHTML. #10324
+               if ( jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML)) ) {
+                       dest.innerHTML = src.innerHTML;
                }
 
-               // Normalize "", auto, and prepare for extra
-               val = parseFloat( val ) || 0;
+       } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+               // IE6-8 fails to persist the checked state of a cloned checkbox
+               // or radio button. Worse, IE6-7 fail to give the cloned element
+               // a checked appearance if the defaultChecked value isn't also set
 
-               // Add padding, border, margin
-               if ( extra ) {
-                       for ( ; i < len; i += 2 ) {
-                               val += parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0;
-                               if ( extra !== "padding" ) {
-                                       val += parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
-                               }
-                               if ( extra === "margin" ) {
-                                       val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ]) ) || 0;
-                               }
-                       }
+               dest.defaultChecked = dest.checked = src.checked;
+
+               // IE6-7 get confused and end up setting the value of a cloned
+               // checkbox/radio button to an empty string instead of "on"
+               if ( dest.value !== src.value ) {
+                       dest.value = src.value;
                }
 
-               return val + "px";
-       }
+       // IE6-8 fails to return the selected option to the default selected
+       // state when cloning options
+       } else if ( nodeName === "option" ) {
+               dest.selected = src.defaultSelected;
 
-       jQuery.each([ "height", "width" ], function( i, name ) {
-               jQuery.cssHooks[ name ] = {
-                       get: function( elem, computed, extra ) {
-                               if ( computed ) {
-                                       if ( elem.offsetWidth !== 0 ) {
-                                               return getWidthOrHeight( elem, name, extra );
-                                       } else {
-                                               return jQuery.swap( elem, cssShow, function() {
-                                                       return getWidthOrHeight( elem, name, extra );
-                                               });
-                                       }
-                               }
-                       },
+       // IE6-8 fails to set the defaultValue to the correct value when
+       // cloning other types of input fields
+       } else if ( nodeName === "input" || nodeName === "textarea" ) {
+               dest.defaultValue = src.defaultValue;
 
-                       set: function( elem, value ) {
-                               return rnum.test( value ) ?
-                                       value + "px" :
-                                       value;
-                       }
-               };
-       });
+       // IE blanks contents when cloning scripts
+       } else if ( nodeName === "script" && dest.text !== src.text ) {
+               dest.text = src.text;
+       }
 
-       if ( !jQuery.support.opacity ) {
-               jQuery.cssHooks.opacity = {
-                       get: function( elem, computed ) {
-                               // IE uses filters for opacity
-                               return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
-                                       ( parseFloat( RegExp.$1 ) / 100 ) + "" :
-                                       computed ? "1" : "";
-                       },
+       // Event data gets referenced instead of copied if the expando
+       // gets copied too
+       dest.removeAttribute( jQuery.expando );
+}
+
+jQuery.buildFragment = function( args, context, scripts ) {
+       var fragment, cacheable, cachehit,
+               first = args[ 0 ];
+
+       // Set context from what may come in as undefined or a jQuery collection or a node
+       // Updated to fix #12266 where accessing context[0] could throw an exception in IE9/10 &
+       // also doubles as fix for #8950 where plain objects caused createDocumentFragment exception
+       context = context || document;
+       context = !context.nodeType && context[0] || context;
+       context = context.ownerDocument || context;
+
+       // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
+       // Cloning options loses the selected state, so don't cache them
+       // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+       // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+       // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
+       if ( args.length === 1 && typeof first === "string" && first.length < 512 && context === document &&
+               first.charAt(0) === "<" && !rnocache.test( first ) &&
+               (jQuery.support.checkClone || !rchecked.test( first )) &&
+               (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
+
+               // Mark cacheable and look for a hit
+               cacheable = true;
+               fragment = jQuery.fragments[ first ];
+               cachehit = fragment !== undefined;
+       }
 
-                       set: function( elem, value ) {
-                               var style = elem.style,
-                                       currentStyle = elem.currentStyle,
-                                       opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
-                                       filter = currentStyle && currentStyle.filter || style.filter || "";
+       if ( !fragment ) {
+               fragment = context.createDocumentFragment();
+               jQuery.clean( args, context, fragment, scripts );
 
-                               // IE has trouble with opacity if it does not have layout
-                               // Force it by setting the zoom level
-                               style.zoom = 1;
+               // Update the cache, but only store false
+               // unless this is a second parsing of the same content
+               if ( cacheable ) {
+                       jQuery.fragments[ first ] = cachehit && fragment;
+               }
+       }
 
-                               // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
-                               if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
+       return { fragment: fragment, cacheable: cacheable };
+};
 
-                                       // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
-                                       // if "filter:" is present at all, clearType is disabled, we want to avoid this
-                                       // style.removeAttribute is IE Only, but so apparently is this code path...
-                                       style.removeAttribute( "filter" );
+jQuery.fragments = {};
 
-                                       // if there there is no filter style applied in a css rule, we are done
-                                       if ( currentStyle && !currentStyle.filter ) {
-                                               return;
-                                       }
-                               }
+jQuery.each({
+       appendTo: "append",
+       prependTo: "prepend",
+       insertBefore: "before",
+       insertAfter: "after",
+       replaceAll: "replaceWith"
+}, function( name, original ) {
+       jQuery.fn[ name ] = function( selector ) {
+               var elems,
+                       i = 0,
+                       ret = [],
+                       insert = jQuery( selector ),
+                       l = insert.length,
+                       parent = this.length === 1 && this[0].parentNode;
 
-                               // otherwise, set new filter values
-                               style.filter = ralpha.test( filter ) ?
-                                       filter.replace( ralpha, opacity ) :
-                                       filter + " " + opacity;
+               if ( (parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1 ) {
+                       insert[ original ]( this[0] );
+                       return this;
+               } else {
+                       for ( ; i < l; i++ ) {
+                               elems = ( i > 0 ? this.clone(true) : this ).get();
+                               jQuery( insert[i] )[ original ]( elems );
+                               ret = ret.concat( elems );
                        }
-               };
-       }
 
-       jQuery(function() {
-               // This hook cannot be added until DOM ready because the support test
-               // for it is not run until after DOM ready
-               if ( !jQuery.support.reliableMarginRight ) {
-                       jQuery.cssHooks.marginRight = {
-                               get: function( elem, computed ) {
-                                       // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-                                       // Work around by temporarily setting element display to inline-block
-                                       return jQuery.swap( elem, { "display": "inline-block" }, function() {
-                                               if ( computed ) {
-                                                       return curCSS( elem, "margin-right" );
-                                               } else {
-                                                       return elem.style.marginRight;
-                                               }
-                                       });
-                               }
-                       };
+                       return this.pushStack( ret, name, insert.selector );
                }
-       });
+       };
+});
 
-       if ( jQuery.expr && jQuery.expr.filters ) {
-               jQuery.expr.filters.hidden = function( elem ) {
-                       var width = elem.offsetWidth,
-                               height = elem.offsetHeight;
+function getAll( elem ) {
+       if ( typeof elem.getElementsByTagName !== "undefined" ) {
+               return elem.getElementsByTagName( "*" );
 
-                       return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
-               };
+       } else if ( typeof elem.querySelectorAll !== "undefined" ) {
+               return elem.querySelectorAll( "*" );
 
-               jQuery.expr.filters.visible = function( elem ) {
-                       return !jQuery.expr.filters.hidden( elem );
-               };
+       } else {
+               return [];
        }
+}
 
-// These hooks are used by animate to expand properties
-       jQuery.each({
-               margin: "",
-               padding: "",
-               border: "Width"
-       }, function( prefix, suffix ) {
+// Used in clean, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+       if ( rcheckableType.test( elem.type ) ) {
+               elem.defaultChecked = elem.checked;
+       }
+}
 
-               jQuery.cssHooks[ prefix + suffix ] = {
-                       expand: function( value ) {
-                               var i,
+jQuery.extend({
+       clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+               var srcElements,
+                       destElements,
+                       i,
+                       clone;
 
-                               // assumes a single number if not a string
-                                       parts = typeof value === "string" ? value.split(" ") : [ value ],
-                                       expanded = {};
+               if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
+                       clone = elem.cloneNode( true );
 
-                               for ( i = 0; i < 4; i++ ) {
-                                       expanded[ prefix + cssExpand[ i ] + suffix ] =
-                                               parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
-                               }
+               // IE<=8 does not properly clone detached, unknown element nodes
+               } else {
+                       fragmentDiv.innerHTML = elem.outerHTML;
+                       fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
+               }
 
-                               return expanded;
-                       }
-               };
-       });
+               if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
+                               (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+                       // IE copies events bound via attachEvent when using cloneNode.
+                       // Calling detachEvent on the clone will also remove the events
+                       // from the original. In order to get around this, we use some
+                       // proprietary methods to clear the events. Thanks to MooTools
+                       // guys for this hotness.
 
+                       cloneFixAttributes( elem, clone );
 
+                       // Using Sizzle here is crazy slow, so we use getElementsByTagName instead
+                       srcElements = getAll( elem );
+                       destElements = getAll( clone );
 
+                       // Weird iteration because IE will replace the length property
+                       // with an element if you are cloning the body and one of the
+                       // elements on the page has a name or id of "length"
+                       for ( i = 0; srcElements[i]; ++i ) {
+                               // Ensure that the destination node is not null; Fixes #9587
+                               if ( destElements[i] ) {
+                                       cloneFixAttributes( srcElements[i], destElements[i] );
+                               }
+                       }
+               }
 
-       var r20 = /%20/g,
-               rbracket = /\[\]$/,
-               rCRLF = /\r?\n/g,
-               rhash = /#.*$/,
-               rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
-               rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
-       // #7653, #8125, #8152: local protocol detection
-               rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
-               rnoContent = /^(?:GET|HEAD)$/,
-               rprotocol = /^\/\//,
-               rquery = /\?/,
-               rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
-               rselectTextarea = /^(?:select|textarea)/i,
-               rspacesAjax = /\s+/,
-               rts = /([?&])_=[^&]*/,
-               rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
+               // Copy the events from the original to the clone
+               if ( dataAndEvents ) {
+                       cloneCopyEvent( elem, clone );
 
-       // Keep a copy of the old load method
-               _load = jQuery.fn.load,
+                       if ( deepDataAndEvents ) {
+                               srcElements = getAll( elem );
+                               destElements = getAll( clone );
 
-       /* Prefilters
-        * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
-        * 2) These are called:
-        *    - BEFORE asking for a transport
-        *    - AFTER param serialization (s.data is a string if s.processData is true)
-        * 3) key is the dataType
-        * 4) the catchall symbol "*" can be used
-        * 5) execution will start with transport dataType and THEN continue down to "*" if needed
-        */
-               prefilters = {},
+                               for ( i = 0; srcElements[i]; ++i ) {
+                                       cloneCopyEvent( srcElements[i], destElements[i] );
+                               }
+                       }
+               }
 
-       /* Transports bindings
-        * 1) key is the dataType
-        * 2) the catchall symbol "*" can be used
-        * 3) selection will start with transport dataType and THEN go to "*" if needed
-        */
-               transports = {},
+               srcElements = destElements = null;
 
-       // Document location
-               ajaxLocation,
+               // Return the cloned set
+               return clone;
+       },
 
-       // Document location segments
-               ajaxLocParts,
+       clean: function( elems, context, fragment, scripts ) {
+               var i, j, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags,
+                       safe = context === document && safeFragment,
+                       ret = [];
 
-       // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
-               allTypes = ["*/"] + ["*"];
+               // Ensure that context is a document
+               if ( !context || typeof context.createDocumentFragment === "undefined" ) {
+                       context = document;
+               }
 
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-       try {
-               ajaxLocation = location.href;
-       } catch( e ) {
-               // Use the href attribute of an A element
-               // since IE will modify it given document.location
-               ajaxLocation = document.createElement( "a" );
-               ajaxLocation.href = "";
-               ajaxLocation = ajaxLocation.href;
-       }
+               // Use the already-created safe fragment if context permits
+               for ( i = 0; (elem = elems[i]) != null; i++ ) {
+                       if ( typeof elem === "number" ) {
+                               elem += "";
+                       }
 
-// Segment location into parts
-       ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+                       if ( !elem ) {
+                               continue;
+                       }
 
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-       function addToPrefiltersOrTransports( structure ) {
+                       // Convert html string into DOM nodes
+                       if ( typeof elem === "string" ) {
+                               if ( !rhtml.test( elem ) ) {
+                                       elem = context.createTextNode( elem );
+                               } else {
+                                       // Ensure a safe container in which to render the html
+                                       safe = safe || createSafeFragment( context );
+                                       div = context.createElement("div");
+                                       safe.appendChild( div );
 
-               // dataTypeExpression is optional and defaults to "*"
-               return function( dataTypeExpression, func ) {
+                                       // Fix "XHTML"-style tags in all browsers
+                                       elem = elem.replace(rxhtmlTag, "<$1></$2>");
 
-                       if ( typeof dataTypeExpression !== "string" ) {
-                               func = dataTypeExpression;
-                               dataTypeExpression = "*";
-                       }
+                                       // Go to html and back, then peel off extra wrappers
+                                       tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
+                                       wrap = wrapMap[ tag ] || wrapMap._default;
+                                       depth = wrap[0];
+                                       div.innerHTML = wrap[1] + elem + wrap[2];
 
-                       if ( jQuery.isFunction( func ) ) {
-                               var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
-                                       i = 0,
-                                       length = dataTypes.length,
-                                       dataType,
-                                       list,
-                                       placeBefore;
-
-                               // For each dataType in the dataTypeExpression
-                               for ( ; i < length; i++ ) {
-                                       dataType = dataTypes[ i ];
-                                       // We control if we're asked to add before
-                                       // any existing element
-                                       placeBefore = /^\+/.test( dataType );
-                                       if ( placeBefore ) {
-                                               dataType = dataType.substr( 1 ) || "*";
+                                       // Move to the right depth
+                                       while ( depth-- ) {
+                                               div = div.lastChild;
                                        }
-                                       list = structure[ dataType ] = structure[ dataType ] || [];
-                                       // then we add to the structure accordingly
-                                       list[ placeBefore ? "unshift" : "push" ]( func );
-                               }
-                       }
-               };
-       }
 
-// Base inspection function for prefilters and transports
-       function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
-                                               dataType /* internal */, inspected /* internal */ ) {
+                                       // Remove IE's autoinserted <tbody> from table fragments
+                                       if ( !jQuery.support.tbody ) {
 
-               dataType = dataType || options.dataTypes[ 0 ];
-               inspected = inspected || {};
+                                               // String was a <table>, *may* have spurious <tbody>
+                                               hasBody = rtbody.test(elem);
+                                                       tbody = tag === "table" && !hasBody ?
+                                                               div.firstChild && div.firstChild.childNodes :
 
-               inspected[ dataType ] = true;
+                                                               // String was a bare <thead> or <tfoot>
+                                                               wrap[1] === "<table>" && !hasBody ?
+                                                                       div.childNodes :
+                                                                       [];
 
-               var list = structure[ dataType ],
-                       i = 0,
-                       length = list ? list.length : 0,
-                       executeOnly = ( structure === prefilters ),
-                       selection;
-
-               for ( ; i < length && ( executeOnly || !selection ); i++ ) {
-                       selection = list[ i ]( options, originalOptions, jqXHR );
-                       // If we got redirected to another dataType
-                       // we try there if executing only and not done already
-                       if ( typeof selection === "string" ) {
-                               if ( !executeOnly || inspected[ selection ] ) {
-                                       selection = undefined;
-                               } else {
-                                       options.dataTypes.unshift( selection );
-                                       selection = inspectPrefiltersOrTransports(
-                                               structure, options, originalOptions, jqXHR, selection, inspected );
+                                               for ( j = tbody.length - 1; j >= 0 ; --j ) {
+                                                       if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+                                                               tbody[ j ].parentNode.removeChild( tbody[ j ] );
+                                                       }
+                                               }
+                                       }
+
+                                       // IE completely kills leading whitespace when innerHTML is used
+                                       if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+                                               div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+                                       }
+
+                                       elem = div.childNodes;
+
+                                       // Take out of fragment container (we need a fresh div each time)
+                                       div.parentNode.removeChild( div );
                                }
                        }
+
+                       if ( elem.nodeType ) {
+                               ret.push( elem );
+                       } else {
+                               jQuery.merge( ret, elem );
+                       }
                }
-               // If we're only executing or nothing was selected
-               // we try the catchall dataType if not done already
-               if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
-                       selection = inspectPrefiltersOrTransports(
-                               structure, options, originalOptions, jqXHR, "*", inspected );
+
+               // Fix #11356: Clear elements from safeFragment
+               if ( div ) {
+                       elem = div = safe = null;
                }
-               // unnecessary when only executing (prefilters)
-               // but it'll be ignored by the caller in that case
-               return selection;
-       }
 
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-       function ajaxExtend( target, src ) {
-               var key, deep,
-                       flatOptions = jQuery.ajaxSettings.flatOptions || {};
-               for ( key in src ) {
-                       if ( src[ key ] !== undefined ) {
-                               ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+               // Reset defaultChecked for any radios and checkboxes
+               // about to be appended to the DOM in IE 6/7 (#8060)
+               if ( !jQuery.support.appendChecked ) {
+                       for ( i = 0; (elem = ret[i]) != null; i++ ) {
+                               if ( jQuery.nodeName( elem, "input" ) ) {
+                                       fixDefaultChecked( elem );
+                               } else if ( typeof elem.getElementsByTagName !== "undefined" ) {
+                                       jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
+                               }
                        }
                }
-               if ( deep ) {
-                       jQuery.extend( true, target, deep );
-               }
-       }
 
-       jQuery.fn.extend({
-               load: function( url, params, callback ) {
-                       if ( typeof url !== "string" && _load ) {
-                               return _load.apply( this, arguments );
+               // Append elements to a provided document fragment
+               if ( fragment ) {
+                       // Special handling of each script element
+                       handleScript = function( elem ) {
+                               // Check if we consider it executable
+                               if ( !elem.type || rscriptType.test( elem.type ) ) {
+                                       // Detach the script and store it in the scripts array (if provided) or the fragment
+                                       // Return truthy to indicate that it has been handled
+                                       return scripts ?
+                                               scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :
+                                               fragment.appendChild( elem );
+                               }
+                       };
 
-                               // Don't do a request if no elements are being requested
-                       } else if ( !this.length ) {
-                               return this;
-                       }
+                       for ( i = 0; (elem = ret[i]) != null; i++ ) {
+                               // Check if we're done after handling an executable script
+                               if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) {
+                                       // Append to fragment and handle embedded scripts
+                                       fragment.appendChild( elem );
+                                       if ( typeof elem.getElementsByTagName !== "undefined" ) {
+                                               // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration
+                                               jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript );
 
-                       var off = url.indexOf( " " );
-                       if ( off >= 0 ) {
-                               var selector = url.slice( off, url.length );
-                               url = url.slice( 0, off );
+                                               // Splice the scripts into ret after their former ancestor and advance our index beyond them
+                                               ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+                                               i += jsTags.length;
+                                       }
+                               }
                        }
+               }
 
-                       // Default to a GET request
-                       var type = "GET";
+               return ret;
+       },
 
-                       // If the second parameter was provided
-                       if ( params ) {
-                               // If it's a function
-                               if ( jQuery.isFunction( params ) ) {
-                                       // We assume that it's the callback
-                                       callback = params;
-                                       params = undefined;
+       cleanData: function( elems, /* internal */ acceptData ) {
+               var data, id, elem, type,
+                       i = 0,
+                       internalKey = jQuery.expando,
+                       cache = jQuery.cache,
+                       deleteExpando = jQuery.support.deleteExpando,
+                       special = jQuery.event.special;
 
-                                       // Otherwise, build a param string
-                               } else if ( typeof params === "object" ) {
-                                       params = jQuery.param( params, jQuery.ajaxSettings.traditional );
-                                       type = "POST";
-                               }
-                       }
+               for ( ; (elem = elems[i]) != null; i++ ) {
 
-                       var self = this;
+                       if ( acceptData || jQuery.acceptData( elem ) ) {
 
-                       // Request the remote document
-                       jQuery.ajax({
-                               url: url,
-                               type: type,
-                               dataType: "html",
-                               data: params,
-                               // Complete callback (responseText is used internally)
-                               complete: function( jqXHR, status, responseText ) {
-                                       // Store the response as specified by the jqXHR object
-                                       responseText = jqXHR.responseText;
-                                       // If successful, inject the HTML into all the matched elements
-                                       if ( jqXHR.isResolved() ) {
-                                               // #4825: Get the actual response in case
-                                               // a dataFilter is present in ajaxSettings
-                                               jqXHR.done(function( r ) {
-                                                       responseText = r;
-                                               });
-                                               // See if a selector was specified
-                                               self.html( selector ?
-                                                       // Create a dummy div to hold the results
-                                                       jQuery("<div>")
-                                                               // inject the contents of the document in, removing the scripts
-                                                               // to avoid any 'Permission Denied' errors in IE
-                                                               .append(responseText.replace(rscript, ""))
-
-                                                               // Locate the specified elements
-                                                               .find(selector) :
-
-                                                       // If not, just inject the full result
-                                                       responseText );
+                               id = elem[ internalKey ];
+                               data = id && cache[ id ];
+
+                               if ( data ) {
+                                       if ( data.events ) {
+                                               for ( type in data.events ) {
+                                                       if ( special[ type ] ) {
+                                                               jQuery.event.remove( elem, type );
+
+                                                       // This is a shortcut to avoid jQuery.event.remove's overhead
+                                                       } else {
+                                                               jQuery.removeEvent( elem, type, data.handle );
+                                                       }
+                                               }
                                        }
 
-                                       if ( callback ) {
-                                               self.each( callback, [ responseText, status, jqXHR ] );
+                                       // Remove cache only if it was not already removed by jQuery.event.remove
+                                       if ( cache[ id ] ) {
+
+                                               delete cache[ id ];
+
+                                               // IE does not allow us to delete expando properties from nodes,
+                                               // nor does it have a removeAttribute function on Document nodes;
+                                               // we must handle all of these cases
+                                               if ( deleteExpando ) {
+                                                       delete elem[ internalKey ];
+
+                                               } else if ( elem.removeAttribute ) {
+                                                       elem.removeAttribute( internalKey );
+
+                                               } else {
+                                                       elem[ internalKey ] = null;
+                                               }
+
+                                               jQuery.deletedIds.push( id );
                                        }
                                }
-                       });
+                       }
+               }
+       }
+});
+// Limit scope pollution from any deprecated API
+(function() {
+
+var matched, browser;
+
+// Use of jQuery.browser is frowned upon.
+// More details: http://api.jquery.com/jQuery.browser
+// jQuery.uaMatch maintained for back-compat
+jQuery.uaMatch = function( ua ) {
+       ua = ua.toLowerCase();
+
+       var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
+               /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
+               /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
+               /(msie) ([\w.]+)/.exec( ua ) ||
+               ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
+               [];
+
+       return {
+               browser: match[ 1 ] || "",
+               version: match[ 2 ] || "0"
+       };
+};
 
-                       return this;
-               },
+matched = jQuery.uaMatch( navigator.userAgent );
+browser = {};
 
-               serialize: function() {
-                       return jQuery.param( this.serializeArray() );
-               },
+if ( matched.browser ) {
+       browser[ matched.browser ] = true;
+       browser.version = matched.version;
+}
 
-               serializeArray: function() {
-                       return this.map(function(){
-                               return this.elements ? jQuery.makeArray( this.elements ) : this;
-                       })
-                               .filter(function(){
-                                       return this.name && !this.disabled &&
-                                               ( this.checked || rselectTextarea.test( this.nodeName ) ||
-                                                       rinput.test( this.type ) );
-                               })
-                               .map(function( i, elem ){
-                                       var val = jQuery( this ).val();
-
-                                       return val == null ?
-                                               null :
-                                               jQuery.isArray( val ) ?
-                                                       jQuery.map( val, function( val, i ){
-                                                               return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-                                                       }) :
-                                               { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-                               }).get();
+// Chrome is Webkit, but Webkit is also Safari.
+if ( browser.chrome ) {
+       browser.webkit = true;
+} else if ( browser.webkit ) {
+       browser.safari = true;
+}
+
+jQuery.browser = browser;
+
+jQuery.sub = function() {
+       function jQuerySub( selector, context ) {
+               return new jQuerySub.fn.init( selector, context );
+       }
+       jQuery.extend( true, jQuerySub, this );
+       jQuerySub.superclass = this;
+       jQuerySub.fn = jQuerySub.prototype = this();
+       jQuerySub.fn.constructor = jQuerySub;
+       jQuerySub.sub = this.sub;
+       jQuerySub.fn.init = function init( selector, context ) {
+               if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+                       context = jQuerySub( context );
                }
-       });
 
-// Attach a bunch of functions for handling common AJAX events
-       jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
-               jQuery.fn[ o ] = function( f ){
-                       return this.on( o, f );
-               };
-       });
+               return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+       };
+       jQuerySub.fn.init.prototype = jQuerySub.fn;
+       var rootjQuerySub = jQuerySub(document);
+       return jQuerySub;
+};
+
+})();
+var curCSS, iframe, iframeDoc,
+       ralpha = /alpha\([^)]*\)/i,
+       ropacity = /opacity=([^)]*)/,
+       rposition = /^(top|right|bottom|left)$/,
+       // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+       // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+       rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+       rmargin = /^margin/,
+       rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
+       rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
+       rrelNum = new RegExp( "^([-+])=(" + core_pnum + ")", "i" ),
+       elemdisplay = {},
+
+       cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+       cssNormalTransform = {
+               letterSpacing: 0,
+               fontWeight: 400
+       },
+
+       cssExpand = [ "Top", "Right", "Bottom", "Left" ],
+       cssPrefixes = [ "Webkit", "O", "Moz", "ms" ],
+
+       eventsToggle = jQuery.fn.toggle;
+
+// return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( style, name ) {
+
+       // shortcut for names that are not vendor prefixed
+       if ( name in style ) {
+               return name;
+       }
 
-       jQuery.each( [ "get", "post" ], function( i, method ) {
-               jQuery[ method ] = function( url, data, callback, type ) {
-                       // shift arguments if data argument was omitted
-                       if ( jQuery.isFunction( data ) ) {
-                               type = type || callback;
-                               callback = data;
-                               data = undefined;
-                       }
+       // check for vendor prefixed names
+       var capName = name.charAt(0).toUpperCase() + name.slice(1),
+               origName = name,
+               i = cssPrefixes.length;
 
-                       return jQuery.ajax({
-                               type: method,
-                               url: url,
-                               data: data,
-                               success: callback,
-                               dataType: type
-                       });
-               };
-       });
+       while ( i-- ) {
+               name = cssPrefixes[ i ] + capName;
+               if ( name in style ) {
+                       return name;
+               }
+       }
 
-       jQuery.extend({
+       return origName;
+}
 
-               getScript: function( url, callback ) {
-                       return jQuery.get( url, undefined, callback, "script" );
-               },
+function isHidden( elem, el ) {
+       elem = el || elem;
+       return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+}
 
-               getJSON: function( url, data, callback ) {
-                       return jQuery.get( url, data, callback, "json" );
-               },
+function showHide( elements, show ) {
+       var elem, display,
+               values = [],
+               index = 0,
+               length = elements.length;
 
-               // Creates a full fledged settings object into target
-               // with both ajaxSettings and settings fields.
-               // If target is omitted, writes into ajaxSettings.
-               ajaxSetup: function( target, settings ) {
-                       if ( settings ) {
-                               // Building a settings object
-                               ajaxExtend( target, jQuery.ajaxSettings );
-                       } else {
-                               // Extending ajaxSettings
-                               settings = target;
-                               target = jQuery.ajaxSettings;
+       for ( ; index < length; index++ ) {
+               elem = elements[ index ];
+               if ( !elem.style ) {
+                       continue;
+               }
+               values[ index ] = jQuery._data( elem, "olddisplay" );
+               if ( show ) {
+                       // Reset the inline display of this element to learn if it is
+                       // being hidden by cascaded rules or not
+                       if ( !values[ index ] && elem.style.display === "none" ) {
+                               elem.style.display = "";
                        }
-                       ajaxExtend( target, settings );
-                       return target;
-               },
-
-               ajaxSettings: {
-                       url: ajaxLocation,
-                       isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
-                       global: true,
-                       type: "GET",
-                       contentType: "application/x-www-form-urlencoded; charset=UTF-8",
-                       processData: true,
-                       async: true,
-                       /*
-                        timeout: 0,
-                        data: null,
-                        dataType: null,
-                        username: null,
-                        password: null,
-                        cache: null,
-                        traditional: false,
-                        headers: {},
-                        */
-
-                       accepts: {
-                               xml: "application/xml, text/xml",
-                               html: "text/html",
-                               text: "text/plain",
-                               json: "application/json, text/javascript",
-                               "*": allTypes
-                       },
 
-                       contents: {
-                               xml: /xml/,
-                               html: /html/,
-                               json: /json/
-                       },
+                       // Set elements which have been overridden with display: none
+                       // in a stylesheet to whatever the default browser style is
+                       // for such an element
+                       if ( elem.style.display === "" && isHidden( elem ) ) {
+                               values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
+                       }
+               } else {
+                       display = curCSS( elem, "display" );
 
-                       responseFields: {
-                               xml: "responseXML",
-                               text: "responseText"
-                       },
+                       if ( !values[ index ] && display !== "none" ) {
+                               jQuery._data( elem, "olddisplay", display );
+                       }
+               }
+       }
 
-                       // List of data converters
-                       // 1) key format is "source_type destination_type" (a single space in-between)
-                       // 2) the catchall symbol "*" can be used for source_type
-                       converters: {
+       // Set the display of most of the elements in a second loop
+       // to avoid the constant reflow
+       for ( index = 0; index < length; index++ ) {
+               elem = elements[ index ];
+               if ( !elem.style ) {
+                       continue;
+               }
+               if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+                       elem.style.display = show ? values[ index ] || "" : "none";
+               }
+       }
 
-                               // Convert anything to text
-                               "* text": window.String,
+       return elements;
+}
 
-                               // Text to html (true = no transformation)
-                               "text html": true,
+jQuery.fn.extend({
+       css: function( name, value ) {
+               return jQuery.access( this, function( elem, name, value ) {
+                       return value !== undefined ?
+                               jQuery.style( elem, name, value ) :
+                               jQuery.css( elem, name );
+               }, name, value, arguments.length > 1 );
+       },
+       show: function() {
+               return showHide( this, true );
+       },
+       hide: function() {
+               return showHide( this );
+       },
+       toggle: function( state, fn2 ) {
+               var bool = typeof state === "boolean";
+
+               if ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) {
+                       return eventsToggle.apply( this, arguments );
+               }
 
-                               // Evaluate text as a json expression
-                               "text json": jQuery.parseJSON,
+               return this.each(function() {
+                       if ( bool ? state : isHidden( this ) ) {
+                               jQuery( this ).show();
+                       } else {
+                               jQuery( this ).hide();
+                       }
+               });
+       }
+});
 
-                               // Parse text as xml
-                               "text xml": jQuery.parseXML
-                       },
+jQuery.extend({
+       // Add in style property hooks for overriding the default
+       // behavior of getting and setting a style property
+       cssHooks: {
+               opacity: {
+                       get: function( elem, computed ) {
+                               if ( computed ) {
+                                       // We should always get a number back from opacity
+                                       var ret = curCSS( elem, "opacity" );
+                                       return ret === "" ? "1" : ret;
 
-                       // For options that shouldn't be deep extended:
-                       // you can add your own custom options here if
-                       // and when you create one that shouldn't be
-                       // deep extended (see ajaxExtend)
-                       flatOptions: {
-                               context: true,
-                               url: true
+                               }
                        }
-               },
+               }
+       },
+
+       // Exclude the following css properties to add px
+       cssNumber: {
+               "fillOpacity": true,
+               "fontWeight": true,
+               "lineHeight": true,
+               "opacity": true,
+               "orphans": true,
+               "widows": true,
+               "zIndex": true,
+               "zoom": true
+       },
+
+       // Add in properties whose names you wish to fix before
+       // setting or getting the value
+       cssProps: {
+               // normalize float css property
+               "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+       },
+
+       // Get and set the style property on a DOM Node
+       style: function( elem, name, value, extra ) {
+               // Don't set styles on text and comment nodes
+               if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+                       return;
+               }
 
-               ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
-               ajaxTransport: addToPrefiltersOrTransports( transports ),
+               // Make sure that we're working with the right name
+               var ret, type, hooks,
+                       origName = jQuery.camelCase( name ),
+                       style = elem.style;
 
-               // Main method
-               ajax: function( url, options ) {
+               name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
 
-                       // If url is an object, simulate pre-1.5 signature
-                       if ( typeof url === "object" ) {
-                               options = url;
-                               url = undefined;
-                       }
+               // gets hook for the prefixed version
+               // followed by the unprefixed version
+               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
 
-                       // Force options to be an object
-                       options = options || {};
+               // Check if we're setting a value
+               if ( value !== undefined ) {
+                       type = typeof value;
 
-                       var // Create the final options object
-                               s = jQuery.ajaxSetup( {}, options ),
-                       // Callbacks context
-                               callbackContext = s.context || s,
-                       // Context for global events
-                       // It's the callbackContext if one was provided in the options
-                       // and if it's a DOM node or a jQuery collection
-                               globalEventContext = callbackContext !== s &&
-                                       ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
-                                       jQuery( callbackContext ) : jQuery.event,
-                       // Deferreds
-                               deferred = jQuery.Deferred(),
-                               completeDeferred = jQuery.Callbacks( "once memory" ),
-                       // Status-dependent callbacks
-                               statusCode = s.statusCode || {},
-                       // ifModified key
-                               ifModifiedKey,
-                       // Headers (they are sent all at once)
-                               requestHeaders = {},
-                               requestHeadersNames = {},
-                       // Response headers
-                               responseHeadersString,
-                               responseHeaders,
-                       // transport
-                               transport,
-                       // timeout handle
-                               timeoutTimer,
-                       // Cross-domain detection vars
-                               parts,
-                       // The jqXHR state
-                               state = 0,
-                       // To know if global events are to be dispatched
-                               fireGlobals,
-                       // Loop variable
-                               i,
-                       // Fake xhr
-                               jqXHR = {
+                       // convert relative number strings (+= or -=) to relative numbers. #7345
+                       if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+                               value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+                               // Fixes bug #9237
+                               type = "number";
+                       }
 
-                                       readyState: 0,
+                       // Make sure that NaN and null values aren't set. See: #7116
+                       if ( value == null || type === "number" && isNaN( value ) ) {
+                               return;
+                       }
 
-                                       // Caches the header
-                                       setRequestHeader: function( name, value ) {
-                                               if ( !state ) {
-                                                       var lname = name.toLowerCase();
-                                                       name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
-                                                       requestHeaders[ name ] = value;
-                                               }
-                                               return this;
-                                       },
-
-                                       // Raw string
-                                       getAllResponseHeaders: function() {
-                                               return state === 2 ? responseHeadersString : null;
-                                       },
-
-                                       // Builds headers hashtable if needed
-                                       getResponseHeader: function( key ) {
-                                               var match;
-                                               if ( state === 2 ) {
-                                                       if ( !responseHeaders ) {
-                                                               responseHeaders = {};
-                                                               while( ( match = rheaders.exec( responseHeadersString ) ) ) {
-                                                                       responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
-                                                               }
-                                                       }
-                                                       match = responseHeaders[ key.toLowerCase() ];
-                                               }
-                                               return match === undefined ? null : match;
-                                       },
+                       // If a number was passed in, add 'px' to the (except for certain CSS properties)
+                       if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+                               value += "px";
+                       }
 
-                                       // Overrides response content-type header
-                                       overrideMimeType: function( type ) {
-                                               if ( !state ) {
-                                                       s.mimeType = type;
-                                               }
-                                               return this;
-                                       },
-
-                                       // Cancel the request
-                                       abort: function( statusText ) {
-                                               statusText = statusText || "abort";
-                                               if ( transport ) {
-                                                       transport.abort( statusText );
-                                               }
-                                               done( 0, statusText );
-                                               return this;
-                                       }
-                               };
+                       // If a hook was provided, use that value, otherwise just set the specified value
+                       if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+                               // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+                               // Fixes bug #5509
+                               try {
+                                       style[ name ] = value;
+                               } catch(e) {}
+                       }
 
-                       // Callback for when everything is done
-                       // It is defined here because jslint complains if it is declared
-                       // at the end of the function (which would be more logical and readable)
-                       function done( status, nativeStatusText, responses, headers ) {
+               } else {
+                       // If a hook was provided get the non-computed value from there
+                       if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+                               return ret;
+                       }
 
-                               // Called once
-                               if ( state === 2 ) {
-                                       return;
-                               }
+                       // Otherwise just get the value from the style object
+                       return style[ name ];
+               }
+       },
 
-                               // State is "done" now
-                               state = 2;
+       css: function( elem, name, numeric, extra ) {
+               var val, num, hooks,
+                       origName = jQuery.camelCase( name );
 
-                               // Clear timeout if it exists
-                               if ( timeoutTimer ) {
-                                       clearTimeout( timeoutTimer );
-                               }
+               // Make sure that we're working with the right name
+               name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
 
-                               // Dereference transport for early garbage collection
-                               // (no matter how long the jqXHR object will be used)
-                               transport = undefined;
+               // gets hook for the prefixed version
+               // followed by the unprefixed version
+               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
 
-                               // Cache response headers
-                               responseHeadersString = headers || "";
+               // If a hook was provided get the computed value from there
+               if ( hooks && "get" in hooks ) {
+                       val = hooks.get( elem, true, extra );
+               }
 
-                               // Set readyState
-                               jqXHR.readyState = status > 0 ? 4 : 0;
+               // Otherwise, if a way to get the computed value exists, use that
+               if ( val === undefined ) {
+                       val = curCSS( elem, name );
+               }
 
-                               var isSuccess,
-                                       success,
-                                       error,
-                                       statusText = nativeStatusText,
-                                       response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
-                                       lastModified,
-                                       etag;
+               //convert "normal" to computed value
+               if ( val === "normal" && name in cssNormalTransform ) {
+                       val = cssNormalTransform[ name ];
+               }
 
-                               // If successful, handle type chaining
-                               if ( status >= 200 && status < 300 || status === 304 ) {
+               // Return, converting to number if forced or a qualifier was provided and val looks numeric
+               if ( numeric || extra !== undefined ) {
+                       num = parseFloat( val );
+                       return numeric || jQuery.isNumeric( num ) ? num || 0 : val;
+               }
+               return val;
+       },
+
+       // A method for quickly swapping in/out CSS properties to get correct calculations
+       swap: function( elem, options, callback ) {
+               var ret, name,
+                       old = {};
+
+               // Remember the old values, and insert the new ones
+               for ( name in options ) {
+                       old[ name ] = elem.style[ name ];
+                       elem.style[ name ] = options[ name ];
+               }
 
-                                       // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-                                       if ( s.ifModified ) {
+               ret = callback.call( elem );
 
-                                               if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
-                                                       jQuery.lastModified[ ifModifiedKey ] = lastModified;
-                                               }
-                                               if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
-                                                       jQuery.etag[ ifModifiedKey ] = etag;
-                                               }
-                                       }
+               // Revert the old values
+               for ( name in options ) {
+                       elem.style[ name ] = old[ name ];
+               }
 
-                                       // If not modified
-                                       if ( status === 304 ) {
+               return ret;
+       }
+});
 
-                                               statusText = "notmodified";
-                                               isSuccess = true;
+// NOTE: To any future maintainer, we've window.getComputedStyle
+// because jsdom on node.js will break without it.
+if ( window.getComputedStyle ) {
+       curCSS = function( elem, name ) {
+               var ret, width, minWidth, maxWidth,
+                       computed = window.getComputedStyle( elem, null ),
+                       style = elem.style;
 
-                                               // If we have data
-                                       } else {
+               if ( computed ) {
 
-                                               try {
-                                                       success = ajaxConvert( s, response );
-                                                       statusText = "success";
-                                                       isSuccess = true;
-                                               } catch(e) {
-                                                       // We have a parsererror
-                                                       statusText = "parsererror";
-                                                       error = e;
-                                               }
-                                       }
-                               } else {
-                                       // We extract error from statusText
-                                       // then normalize statusText and status for non-aborts
-                                       error = statusText;
-                                       if ( !statusText || status ) {
-                                               statusText = "error";
-                                               if ( status < 0 ) {
-                                                       status = 0;
-                                               }
-                                       }
-                               }
+                       ret = computed[ name ];
+                       if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+                               ret = jQuery.style( elem, name );
+                       }
+
+                       // A tribute to the "awesome hack by Dean Edwards"
+                       // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
+                       // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+                       // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+                       if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+                               width = style.width;
+                               minWidth = style.minWidth;
+                               maxWidth = style.maxWidth;
 
-                               // Set data for the fake xhr object
-                               jqXHR.status = status;
-                               jqXHR.statusText = "" + ( nativeStatusText || statusText );
+                               style.minWidth = style.maxWidth = style.width = ret;
+                               ret = computed.width;
 
-                               // Success/Error
-                               if ( isSuccess ) {
-                                       deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
-                               } else {
-                                       deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
-                               }
+                               style.width = width;
+                               style.minWidth = minWidth;
+                               style.maxWidth = maxWidth;
+                       }
+               }
+
+               return ret;
+       };
+} else if ( document.documentElement.currentStyle ) {
+       curCSS = function( elem, name ) {
+               var left, rsLeft,
+                       ret = elem.currentStyle && elem.currentStyle[ name ],
+                       style = elem.style;
+
+               // Avoid setting ret to empty string here
+               // so we don't default to auto
+               if ( ret == null && style && style[ name ] ) {
+                       ret = style[ name ];
+               }
 
-                               // Status-dependent callbacks
-                               jqXHR.statusCode( statusCode );
-                               statusCode = undefined;
+               // From the awesome hack by Dean Edwards
+               // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
 
-                               if ( fireGlobals ) {
-                                       globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
-                                               [ jqXHR, s, isSuccess ? success : error ] );
-                               }
+               // If we're not dealing with a regular pixel number
+               // but a number that has a weird ending, we need to convert it to pixels
+               // but not position css attributes, as those are proportional to the parent element instead
+               // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
+               if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
 
-                               // Complete
-                               completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+                       // Remember the original values
+                       left = style.left;
+                       rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
 
-                               if ( fireGlobals ) {
-                                       globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
-                                       // Handle the global AJAX counter
-                                       if ( !( --jQuery.active ) ) {
-                                               jQuery.event.trigger( "ajaxStop" );
-                                       }
-                               }
+                       // Put in the new values to get a computed value out
+                       if ( rsLeft ) {
+                               elem.runtimeStyle.left = elem.currentStyle.left;
                        }
+                       style.left = name === "fontSize" ? "1em" : ret;
+                       ret = style.pixelLeft + "px";
 
-                       // Attach deferreds
-                       deferred.promise( jqXHR );
-                       jqXHR.success = jqXHR.done;
-                       jqXHR.error = jqXHR.fail;
-                       jqXHR.complete = completeDeferred.add;
+                       // Revert the changed values
+                       style.left = left;
+                       if ( rsLeft ) {
+                               elem.runtimeStyle.left = rsLeft;
+                       }
+               }
 
-                       // Status-dependent callbacks
-                       jqXHR.statusCode = function( map ) {
-                               if ( map ) {
-                                       var tmp;
-                                       if ( state < 2 ) {
-                                               for ( tmp in map ) {
-                                                       statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
-                                               }
-                                       } else {
-                                               tmp = map[ jqXHR.status ];
-                                               jqXHR.then( tmp, tmp );
-                                       }
-                               }
-                               return this;
-                       };
+               return ret === "" ? "auto" : ret;
+       };
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+       var matches = rnumsplit.exec( value );
+       return matches ?
+                       Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+                       value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox ) {
+       var i = extra === ( isBorderBox ? "border" : "content" ) ?
+               // If we already have the right measurement, avoid augmentation
+               4 :
+               // Otherwise initialize for horizontal or vertical properties
+               name === "width" ? 1 : 0,
+
+               val = 0;
+
+       for ( ; i < 4; i += 2 ) {
+               // both box models exclude margin, so add it if we want it
+               if ( extra === "margin" ) {
+                       // we use jQuery.css instead of curCSS here
+                       // because of the reliableMarginRight CSS hook!
+                       val += jQuery.css( elem, extra + cssExpand[ i ], true );
+               }
 
-                       // Remove hash character (#7531: and string promotion)
-                       // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
-                       // We also use the url parameter if available
-                       s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
-                       // Extract dataTypes list
-                       s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
-
-                       // Determine if a cross-domain request is in order
-                       if ( s.crossDomain == null ) {
-                               parts = rurl.exec( s.url.toLowerCase() );
-                               s.crossDomain = !!( parts &&
-                                       ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
-                                               ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
-                                                       ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
-                                       );
+               // From this point on we use curCSS for maximum performance (relevant in animations)
+               if ( isBorderBox ) {
+                       // border-box includes padding, so remove it if we want content
+                       if ( extra === "content" ) {
+                               val -= parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0;
                        }
 
-                       // Convert data if not already a string
-                       if ( s.data && s.processData && typeof s.data !== "string" ) {
-                               s.data = jQuery.param( s.data, s.traditional );
+                       // at this point, extra isn't border nor margin, so remove border
+                       if ( extra !== "margin" ) {
+                               val -= parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
                        }
+               } else {
+                       // at this point, extra isn't content, so add padding
+                       val += parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0;
 
-                       // Apply prefilters
-                       inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
-                       // If request was aborted inside a prefilter, stop there
-                       if ( state === 2 ) {
-                               return false;
+                       // at this point, extra isn't content nor padding, so add border
+                       if ( extra !== "padding" ) {
+                               val += parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
                        }
+               }
+       }
 
-                       // We can fire global events as of now if asked to
-                       fireGlobals = s.global;
+       return val;
+}
 
-                       // Uppercase the type
-                       s.type = s.type.toUpperCase();
+function getWidthOrHeight( elem, name, extra ) {
 
-                       // Determine if request has content
-                       s.hasContent = !rnoContent.test( s.type );
+       // Start with offset property, which is equivalent to the border-box value
+       var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+               valueIsBorderBox = true,
+               isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box";
 
-                       // Watch for a new set of requests
-                       if ( fireGlobals && jQuery.active++ === 0 ) {
-                               jQuery.event.trigger( "ajaxStart" );
-                       }
+       // some non-html elements return undefined for offsetWidth, so check for null/undefined
+       // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+       // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+       if ( val <= 0 || val == null ) {
+               // Fall back to computed then uncomputed css if necessary
+               val = curCSS( elem, name );
+               if ( val < 0 || val == null ) {
+                       val = elem.style[ name ];
+               }
 
-                       // More options handling for requests with no content
-                       if ( !s.hasContent ) {
+               // Computed unit is not pixels. Stop here and return.
+               if ( rnumnonpx.test(val) ) {
+                       return val;
+               }
 
-                               // If data is available, append data to url
-                               if ( s.data ) {
-                                       s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
-                                       // #9682: remove data so that it's not used in an eventual retry
-                                       delete s.data;
-                               }
+               // we need the check for style in case a browser which returns unreliable values
+               // for getComputedStyle silently falls back to the reliable elem.style
+               valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
 
-                               // Get ifModifiedKey before adding the anti-cache parameter
-                               ifModifiedKey = s.url;
+               // Normalize "", auto, and prepare for extra
+               val = parseFloat( val ) || 0;
+       }
 
-                               // Add anti-cache in url if needed
-                               if ( s.cache === false ) {
+       // use the active box-sizing model to add/subtract irrelevant styles
+       return ( val +
+               augmentWidthOrHeight(
+                       elem,
+                       name,
+                       extra || ( isBorderBox ? "border" : "content" ),
+                       valueIsBorderBox
+               )
+       ) + "px";
+}
+
+
+// Try to determine the default display value of an element
+function css_defaultDisplay( nodeName ) {
+       if ( elemdisplay[ nodeName ] ) {
+               return elemdisplay[ nodeName ];
+       }
 
-                                       var ts = jQuery.now(),
-                                       // try replacing _= if it is there
-                                               ret = s.url.replace( rts, "$1_=" + ts );
+       var elem = jQuery( "<" + nodeName + ">" ).appendTo( document.body ),
+               display = elem.css("display");
+       elem.remove();
+
+       // If the simple way fails,
+       // get element's real default display by attaching it to a temp iframe
+       if ( display === "none" || display === "" ) {
+               // Use the already-created iframe if possible
+               iframe = document.body.appendChild(
+                       iframe || jQuery.extend( document.createElement("iframe"), {
+                               frameBorder: 0,
+                               width: 0,
+                               height: 0
+                       })
+               );
+
+               // Create a cacheable copy of the iframe document on first call.
+               // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
+               // document to it; WebKit & Firefox won't allow reusing the iframe document.
+               if ( !iframeDoc || !iframe.createElement ) {
+                       iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
+                       iframeDoc.write("<!doctype html><html><body>");
+                       iframeDoc.close();
+               }
 
-                                       // if nothing was replaced, add timestamp to the end
-                                       s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
-                               }
-                       }
+               elem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) );
 
-                       // Set the correct header, if data is being sent
-                       if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
-                               jqXHR.setRequestHeader( "Content-Type", s.contentType );
-                       }
+               display = curCSS( elem, "display" );
+               document.body.removeChild( iframe );
+       }
 
-                       // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-                       if ( s.ifModified ) {
-                               ifModifiedKey = ifModifiedKey || s.url;
-                               if ( jQuery.lastModified[ ifModifiedKey ] ) {
-                                       jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
-                               }
-                               if ( jQuery.etag[ ifModifiedKey ] ) {
-                                       jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
+       // Store the correct default display
+       elemdisplay[ nodeName ] = display;
+
+       return display;
+}
+
+jQuery.each([ "height", "width" ], function( i, name ) {
+       jQuery.cssHooks[ name ] = {
+               get: function( elem, computed, extra ) {
+                       if ( computed ) {
+                               // certain elements can have dimension info if we invisibly show them
+                               // however, it must have a current display style that would benefit from this
+                               if ( elem.offsetWidth === 0 && rdisplayswap.test( curCSS( elem, "display" ) ) ) {
+                                       return jQuery.swap( elem, cssShow, function() {
+                                               return getWidthOrHeight( elem, name, extra );
+                                       });
+                               } else {
+                                       return getWidthOrHeight( elem, name, extra );
                                }
                        }
+               },
 
-                       // Set the Accepts header for the server, depending on the dataType
-                       jqXHR.setRequestHeader(
-                               "Accept",
-                               s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
-                                       s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
-                                       s.accepts[ "*" ]
+               set: function( elem, value, extra ) {
+                       return setPositiveNumber( elem, value, extra ?
+                               augmentWidthOrHeight(
+                                       elem,
+                                       name,
+                                       extra,
+                                       jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box"
+                               ) : 0
                        );
+               }
+       };
+});
+
+if ( !jQuery.support.opacity ) {
+       jQuery.cssHooks.opacity = {
+               get: function( elem, computed ) {
+                       // IE uses filters for opacity
+                       return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+                               ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
+                               computed ? "1" : "";
+               },
 
-                       // Check for headers option
-                       for ( i in s.headers ) {
-                               jqXHR.setRequestHeader( i, s.headers[ i ] );
-                       }
+               set: function( elem, value ) {
+                       var style = elem.style,
+                               currentStyle = elem.currentStyle,
+                               opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+                               filter = currentStyle && currentStyle.filter || style.filter || "";
 
-                       // Allow custom headers/mimetypes and early abort
-                       if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
-                               // Abort if not done already
-                               jqXHR.abort();
-                               return false;
+                       // IE has trouble with opacity if it does not have layout
+                       // Force it by setting the zoom level
+                       style.zoom = 1;
 
-                       }
+                       // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+                       if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
+                               style.removeAttribute ) {
 
-                       // Install callbacks on deferreds
-                       for ( i in { success: 1, error: 1, complete: 1 } ) {
-                               jqXHR[ i ]( s[ i ] );
+                               // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+                               // if "filter:" is present at all, clearType is disabled, we want to avoid this
+                               // style.removeAttribute is IE Only, but so apparently is this code path...
+                               style.removeAttribute( "filter" );
+
+                               // if there there is no filter style applied in a css rule, we are done
+                               if ( currentStyle && !currentStyle.filter ) {
+                                       return;
+                               }
                        }
 
-                       // Get transport
-                       transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+                       // otherwise, set new filter values
+                       style.filter = ralpha.test( filter ) ?
+                               filter.replace( ralpha, opacity ) :
+                               filter + " " + opacity;
+               }
+       };
+}
 
-                       // If no transport, we auto-abort
-                       if ( !transport ) {
-                               done( -1, "No Transport" );
-                       } else {
-                               jqXHR.readyState = 1;
-                               // Send global event
-                               if ( fireGlobals ) {
-                                       globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
-                               }
-                               // Timeout
-                               if ( s.async && s.timeout > 0 ) {
-                                       timeoutTimer = setTimeout( function(){
-                                               jqXHR.abort( "timeout" );
-                                       }, s.timeout );
-                               }
+// These hooks cannot be added until DOM ready because the support test
+// for it is not run until after DOM ready
+jQuery(function() {
+       if ( !jQuery.support.reliableMarginRight ) {
+               jQuery.cssHooks.marginRight = {
+                       get: function( elem, computed ) {
+                               // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+                               // Work around by temporarily setting element display to inline-block
+                               return jQuery.swap( elem, { "display": "inline-block" }, function() {
+                                       if ( computed ) {
+                                               return curCSS( elem, "marginRight" );
+                                       }
+                               });
+                       }
+               };
+       }
 
-                               try {
-                                       state = 1;
-                                       transport.send( requestHeaders, done );
-                               } catch (e) {
-                                       // Propagate exception as error if not done
-                                       if ( state < 2 ) {
-                                               done( -1, e );
-                                               // Simply rethrow otherwise
-                                       } else {
-                                               throw e;
+       // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+       // getComputedStyle returns percent when specified for top/left/bottom/right
+       // rather than make the css module depend on the offset module, we just check for it here
+       if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
+               jQuery.each( [ "top", "left" ], function( i, prop ) {
+                       jQuery.cssHooks[ prop ] = {
+                               get: function( elem, computed ) {
+                                       if ( computed ) {
+                                               var ret = curCSS( elem, prop );
+                                               // if curCSS returns percentage, fallback to offset
+                                               return rnumnonpx.test( ret ) ? jQuery( elem ).position()[ prop ] + "px" : ret;
                                        }
                                }
-                       }
+                       };
+               });
+       }
 
-                       return jqXHR;
-               },
+});
 
-               // Serialize an array of form elements or a set of
-               // key/values into a query string
-               param: function( a, traditional ) {
-                       var s = [],
-                               add = function( key, value ) {
-                                       // If value is a function, invoke it and return its value
-                                       value = jQuery.isFunction( value ) ? value() : value;
-                                       s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
-                               };
+if ( jQuery.expr && jQuery.expr.filters ) {
+       jQuery.expr.filters.hidden = function( elem ) {
+               return ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || curCSS( elem, "display" )) === "none");
+       };
 
-                       // Set traditional to true for jQuery <= 1.3.2 behavior.
-                       if ( traditional === undefined ) {
-                               traditional = jQuery.ajaxSettings.traditional;
-                       }
+       jQuery.expr.filters.visible = function( elem ) {
+               return !jQuery.expr.filters.hidden( elem );
+       };
+}
 
-                       // If an array was passed in, assume that it is an array of form elements.
-                       if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-                               // Serialize the form elements
-                               jQuery.each( a, function() {
-                                       add( this.name, this.value );
-                               });
+// These hooks are used by animate to expand properties
+jQuery.each({
+       margin: "",
+       padding: "",
+       border: "Width"
+}, function( prefix, suffix ) {
+       jQuery.cssHooks[ prefix + suffix ] = {
+               expand: function( value ) {
+                       var i,
 
-                       } else {
-                               // If traditional, encode the "old" way (the way 1.3.2 or older
-                               // did it), otherwise encode params recursively.
-                               for ( var prefix in a ) {
-                                       buildParams( prefix, a[ prefix ], traditional, add );
-                               }
+                               // assumes a single number if not a string
+                               parts = typeof value === "string" ? value.split(" ") : [ value ],
+                               expanded = {};
+
+                       for ( i = 0; i < 4; i++ ) {
+                               expanded[ prefix + cssExpand[ i ] + suffix ] =
+                                       parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
                        }
 
-                       // Return the resulting serialization
-                       return s.join( "&" ).replace( r20, "+" );
+                       return expanded;
                }
-       });
+       };
 
-       function buildParams( prefix, obj, traditional, add ) {
-               if ( jQuery.isArray( obj ) ) {
-                       // Serialize array item.
-                       jQuery.each( obj, function( i, v ) {
-                               if ( traditional || rbracket.test( prefix ) ) {
-                                       // Treat each array item as a scalar.
-                                       add( prefix, v );
+       if ( !rmargin.test( prefix ) ) {
+               jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+       }
+});
+var r20 = /%20/g,
+       rbracket = /\[\]$/,
+       rCRLF = /\r?\n/g,
+       rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+       rselectTextarea = /^(?:select|textarea)/i;
+
+jQuery.fn.extend({
+       serialize: function() {
+               return jQuery.param( this.serializeArray() );
+       },
+       serializeArray: function() {
+               return this.map(function(){
+                       return this.elements ? jQuery.makeArray( this.elements ) : this;
+               })
+               .filter(function(){
+                       return this.name && !this.disabled &&
+                               ( this.checked || rselectTextarea.test( this.nodeName ) ||
+                                       rinput.test( this.type ) );
+               })
+               .map(function( i, elem ){
+                       var val = jQuery( this ).val();
+
+                       return val == null ?
+                               null :
+                               jQuery.isArray( val ) ?
+                                       jQuery.map( val, function( val, i ){
+                                               return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+                                       }) :
+                                       { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+               }).get();
+       }
+});
+
+//Serialize an array of form elements or a set of
+//key/values into a query string
+jQuery.param = function( a, traditional ) {
+       var prefix,
+               s = [],
+               add = function( key, value ) {
+                       // If value is a function, invoke it and return its value
+                       value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+                       s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+               };
 
-                               } else {
-                                       // If array item is non-scalar (array or object), encode its
-                                       // numeric index to resolve deserialization ambiguity issues.
-                                       // Note that rack (as of 1.0.0) can't currently deserialize
-                                       // nested arrays properly, and attempting to do so may cause
-                                       // a server error. Possible fixes are to modify rack's
-                                       // deserialization algorithm or to provide an option or flag
-                                       // to force array serialization to be shallow.
-                                       buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
-                               }
-                       });
+       // Set traditional to true for jQuery <= 1.3.2 behavior.
+       if ( traditional === undefined ) {
+               traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+       }
 
-               } else if ( !traditional && jQuery.type( obj ) === "object" ) {
-                       // Serialize object item.
-                       for ( var name in obj ) {
-                               buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
-                       }
+       // If an array was passed in, assume that it is an array of form elements.
+       if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+               // Serialize the form elements
+               jQuery.each( a, function() {
+                       add( this.name, this.value );
+               });
 
-               } else {
-                       // Serialize scalar item.
-                       add( prefix, obj );
+       } else {
+               // If traditional, encode the "old" way (the way 1.3.2 or older
+               // did it), otherwise encode params recursively.
+               for ( prefix in a ) {
+                       buildParams( prefix, a[ prefix ], traditional, add );
                }
        }
 
-// This is still on the jQuery object... for now
-// Want to move this to jQuery.ajax some day
-       jQuery.extend({
+       // Return the resulting serialization
+       return s.join( "&" ).replace( r20, "+" );
+};
 
-               // Counter for holding the number of active queries
-               active: 0,
+function buildParams( prefix, obj, traditional, add ) {
+       var name;
 
-               // Last-Modified header cache for next request
-               lastModified: {},
-               etag: {}
+       if ( jQuery.isArray( obj ) ) {
+               // Serialize array item.
+               jQuery.each( obj, function( i, v ) {
+                       if ( traditional || rbracket.test( prefix ) ) {
+                               // Treat each array item as a scalar.
+                               add( prefix, v );
 
-       });
+                       } else {
+                               // If array item is non-scalar (array or object), encode its
+                               // numeric index to resolve deserialization ambiguity issues.
+                               // Note that rack (as of 1.0.0) can't currently deserialize
+                               // nested arrays properly, and attempting to do so may cause
+                               // a server error. Possible fixes are to modify rack's
+                               // deserialization algorithm or to provide an option or flag
+                               // to force array serialization to be shallow.
+                               buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+                       }
+               });
+
+       } else if ( !traditional && jQuery.type( obj ) === "object" ) {
+               // Serialize object item.
+               for ( name in obj ) {
+                       buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+               }
+
+       } else {
+               // Serialize scalar item.
+               add( prefix, obj );
+       }
+}
+var // Document location
+       ajaxLocation,
+       // Document location segments
+       ajaxLocParts,
+
+       rhash = /#.*$/,
+       rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+       // #7653, #8125, #8152: local protocol detection
+       rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
+       rnoContent = /^(?:GET|HEAD)$/,
+       rprotocol = /^\/\//,
+       rquery = /\?/,
+       rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+       rts = /([?&])_=[^&]*/,
+       rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
 
-       /* Handles responses to an ajax request:
-        * - sets all responseXXX fields accordingly
-        * - finds the right dataType (mediates between content-type and expected dataType)
-        * - returns the corresponding response
+       // Keep a copy of the old load method
+       _load = jQuery.fn.load,
+
+       /* Prefilters
+        * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+        * 2) These are called:
+        *    - BEFORE asking for a transport
+        *    - AFTER param serialization (s.data is a string if s.processData is true)
+        * 3) key is the dataType
+        * 4) the catchall symbol "*" can be used
+        * 5) execution will start with transport dataType and THEN continue down to "*" if needed
         */
-       function ajaxHandleResponses( s, jqXHR, responses ) {
+       prefilters = {},
 
-               var contents = s.contents,
-                       dataTypes = s.dataTypes,
-                       responseFields = s.responseFields,
-                       ct,
-                       type,
-                       finalDataType,
-                       firstDataType;
+       /* Transports bindings
+        * 1) key is the dataType
+        * 2) the catchall symbol "*" can be used
+        * 3) selection will start with transport dataType and THEN go to "*" if needed
+        */
+       transports = {},
 
-               // Fill responseXXX fields
-               for ( type in responseFields ) {
-                       if ( type in responses ) {
-                               jqXHR[ responseFields[type] ] = responses[ type ];
-                       }
-               }
+       // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+       allTypes = ["*/"] + ["*"];
 
-               // Remove auto dataType and get content-type in the process
-               while( dataTypes[ 0 ] === "*" ) {
-                       dataTypes.shift();
-                       if ( ct === undefined ) {
-                               ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
-                       }
-               }
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+       ajaxLocation = location.href;
+} catch( e ) {
+       // Use the href attribute of an A element
+       // since IE will modify it given document.location
+       ajaxLocation = document.createElement( "a" );
+       ajaxLocation.href = "";
+       ajaxLocation = ajaxLocation.href;
+}
 
-               // Check if we're dealing with a known content-type
-               if ( ct ) {
-                       for ( type in contents ) {
-                               if ( contents[ type ] && contents[ type ].test( ct ) ) {
-                                       dataTypes.unshift( type );
-                                       break;
-                               }
-                       }
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+       // dataTypeExpression is optional and defaults to "*"
+       return function( dataTypeExpression, func ) {
+
+               if ( typeof dataTypeExpression !== "string" ) {
+                       func = dataTypeExpression;
+                       dataTypeExpression = "*";
                }
 
-               // Check to see if we have a response for the expected dataType
-               if ( dataTypes[ 0 ] in responses ) {
-                       finalDataType = dataTypes[ 0 ];
-               } else {
-                       // Try convertible dataTypes
-                       for ( type in responses ) {
-                               if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
-                                       finalDataType = type;
-                                       break;
-                               }
-                               if ( !firstDataType ) {
-                                       firstDataType = type;
+               var dataType, list, placeBefore,
+                       dataTypes = dataTypeExpression.toLowerCase().split( core_rspace ),
+                       i = 0,
+                       length = dataTypes.length;
+
+               if ( jQuery.isFunction( func ) ) {
+                       // For each dataType in the dataTypeExpression
+                       for ( ; i < length; i++ ) {
+                               dataType = dataTypes[ i ];
+                               // We control if we're asked to add before
+                               // any existing element
+                               placeBefore = /^\+/.test( dataType );
+                               if ( placeBefore ) {
+                                       dataType = dataType.substr( 1 ) || "*";
                                }
+                               list = structure[ dataType ] = structure[ dataType ] || [];
+                               // then we add to the structure accordingly
+                               list[ placeBefore ? "unshift" : "push" ]( func );
                        }
-                       // Or just use first one
-                       finalDataType = finalDataType || firstDataType;
                }
+       };
+}
 
-               // If we found a dataType
-               // We add the dataType to the list if needed
-               // and return the corresponding response
-               if ( finalDataType ) {
-                       if ( finalDataType !== dataTypes[ 0 ] ) {
-                               dataTypes.unshift( finalDataType );
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
+               dataType /* internal */, inspected /* internal */ ) {
+
+       dataType = dataType || options.dataTypes[ 0 ];
+       inspected = inspected || {};
+
+       inspected[ dataType ] = true;
+
+       var selection,
+               list = structure[ dataType ],
+               i = 0,
+               length = list ? list.length : 0,
+               executeOnly = ( structure === prefilters );
+
+       for ( ; i < length && ( executeOnly || !selection ); i++ ) {
+               selection = list[ i ]( options, originalOptions, jqXHR );
+               // If we got redirected to another dataType
+               // we try there if executing only and not done already
+               if ( typeof selection === "string" ) {
+                       if ( !executeOnly || inspected[ selection ] ) {
+                               selection = undefined;
+                       } else {
+                               options.dataTypes.unshift( selection );
+                               selection = inspectPrefiltersOrTransports(
+                                               structure, options, originalOptions, jqXHR, selection, inspected );
                        }
-                       return responses[ finalDataType ];
                }
        }
+       // If we're only executing or nothing was selected
+       // we try the catchall dataType if not done already
+       if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
+               selection = inspectPrefiltersOrTransports(
+                               structure, options, originalOptions, jqXHR, "*", inspected );
+       }
+       // unnecessary when only executing (prefilters)
+       // but it'll be ignored by the caller in that case
+       return selection;
+}
 
-// Chain conversions given the request and the original response
-       function ajaxConvert( s, response ) {
-
-               // Apply the dataFilter if provided
-               if ( s.dataFilter ) {
-                       response = s.dataFilter( response, s.dataType );
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+       var key, deep,
+               flatOptions = jQuery.ajaxSettings.flatOptions || {};
+       for ( key in src ) {
+               if ( src[ key ] !== undefined ) {
+                       ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
                }
+       }
+       if ( deep ) {
+               jQuery.extend( true, target, deep );
+       }
+}
 
-               var dataTypes = s.dataTypes,
-                       converters = {},
-                       i,
-                       key,
-                       length = dataTypes.length,
-                       tmp,
-               // Current and previous dataTypes
-                       current = dataTypes[ 0 ],
-                       prev,
-               // Conversion expression
-                       conversion,
-               // Conversion function
-                       conv,
-               // Conversion functions (transitive conversion)
-                       conv1,
-                       conv2;
-
-               // For each dataType in the chain
-               for ( i = 1; i < length; i++ ) {
-
-                       // Create converters map
-                       // with lowercased keys
-                       if ( i === 1 ) {
-                               for ( key in s.converters ) {
-                                       if ( typeof key === "string" ) {
-                                               converters[ key.toLowerCase() ] = s.converters[ key ];
-                                       }
-                               }
-                       }
-
-                       // Get the dataTypes
-                       prev = current;
-                       current = dataTypes[ i ];
+jQuery.fn.load = function( url, params, callback ) {
+       if ( typeof url !== "string" && _load ) {
+               return _load.apply( this, arguments );
+       }
 
-                       // If current is auto dataType, update it to prev
-                       if ( current === "*" ) {
-                               current = prev;
-                               // If no auto and dataTypes are actually different
-                       } else if ( prev !== "*" && prev !== current ) {
+       // Don't do a request if no elements are being requested
+       if ( !this.length ) {
+               return this;
+       }
 
-                               // Get the converter
-                               conversion = prev + " " + current;
-                               conv = converters[ conversion ] || converters[ "* " + current ];
+       var selector, type, response,
+               self = this,
+               off = url.indexOf(" ");
 
-                               // If there is no direct converter, search transitively
-                               if ( !conv ) {
-                                       conv2 = undefined;
-                                       for ( conv1 in converters ) {
-                                               tmp = conv1.split( " " );
-                                               if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
-                                                       conv2 = converters[ tmp[1] + " " + current ];
-                                                       if ( conv2 ) {
-                                                               conv1 = converters[ conv1 ];
-                                                               if ( conv1 === true ) {
-                                                                       conv = conv2;
-                                                               } else if ( conv2 === true ) {
-                                                                       conv = conv1;
-                                                               }
-                                                               break;
-                                                       }
-                                               }
-                                       }
-                               }
-                               // If we found no converter, dispatch an error
-                               if ( !( conv || conv2 ) ) {
-                                       jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
-                               }
-                               // If found converter is not an equivalence
-                               if ( conv !== true ) {
-                                       // Convert with 1 or 2 converters accordingly
-                                       response = conv ? conv( response ) : conv2( conv1(response) );
-                               }
-                       }
-               }
-               return response;
+       if ( off >= 0 ) {
+               selector = url.slice( off, url.length );
+               url = url.slice( 0, off );
        }
 
+       // If it's a function
+       if ( jQuery.isFunction( params ) ) {
 
+               // We assume that it's the callback
+               callback = params;
+               params = undefined;
 
+       // Otherwise, build a param string
+       } else if ( params && typeof params === "object" ) {
+               type = "POST";
+       }
 
-       var jsc = jQuery.now(),
-               jsre = /(\=)\?(&|$)|\?\?/i;
+       // Request the remote document
+       jQuery.ajax({
+               url: url,
 
-// Default jsonp settings
-       jQuery.ajaxSetup({
-               jsonp: "callback",
-               jsonpCallback: function() {
-                       return jQuery.expando + "_" + ( jsc++ );
+               // if "type" variable is undefined, then "GET" method will be used
+               type: type,
+               dataType: "html",
+               data: params,
+               complete: function( jqXHR, status ) {
+                       if ( callback ) {
+                               self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
+                       }
                }
-       });
+       }).done(function( responseText ) {
 
-// Detect, normalize options and install callbacks for jsonp requests
-       jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
-               var inspectData = ( typeof s.data === "string" ) && /^application\/x\-www\-form\-urlencoded/.test( s.contentType );
-
-               if ( s.dataTypes[ 0 ] === "jsonp" ||
-                       s.jsonp !== false && ( jsre.test( s.url ) ||
-                               inspectData && jsre.test( s.data ) ) ) {
-
-                       var responseContainer,
-                               jsonpCallback = s.jsonpCallback =
-                                       jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
-                               previous = window[ jsonpCallback ],
-                               url = s.url,
-                               data = s.data,
-                               replace = "$1" + jsonpCallback + "$2";
-
-                       if ( s.jsonp !== false ) {
-                               url = url.replace( jsre, replace );
-                               if ( s.url === url ) {
-                                       if ( inspectData ) {
-                                               data = data.replace( jsre, replace );
-                                       }
-                                       if ( s.data === data ) {
-                                               // Add callback manually
-                                               url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
-                                       }
-                               }
-                       }
+               // Save response for use in complete callback
+               response = arguments;
 
-                       s.url = url;
-                       s.data = data;
+               // See if a selector was specified
+               self.html( selector ?
 
-                       // Install callback
-                       window[ jsonpCallback ] = function( response ) {
-                               responseContainer = [ response ];
-                       };
+                       // Create a dummy div to hold the results
+                       jQuery("<div>")
 
-                       // Clean-up function
-                       jqXHR.always(function() {
-                               // Set callback back to previous value
-                               window[ jsonpCallback ] = previous;
-                               // Call if it was a function and we have a response
-                               if ( responseContainer && jQuery.isFunction( previous ) ) {
-                                       window[ jsonpCallback ]( responseContainer[ 0 ] );
-                               }
-                       });
+                               // inject the contents of the document in, removing the scripts
+                               // to avoid any 'Permission Denied' errors in IE
+                               .append( responseText.replace( rscript, "" ) )
 
-                       // Use data converter to retrieve json after script execution
-                       s.converters["script json"] = function() {
-                               if ( !responseContainer ) {
-                                       jQuery.error( jsonpCallback + " was not called" );
-                               }
-                               return responseContainer[ 0 ];
-                       };
+                               // Locate the specified elements
+                               .find( selector ) :
 
-                       // force json dataType
-                       s.dataTypes[ 0 ] = "json";
+                       // If not, just inject the full result
+                       responseText );
 
-                       // Delegate to script
-                       return "script";
-               }
        });
 
+       return this;
+};
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
+       jQuery.fn[ o ] = function( f ){
+               return this.on( o, f );
+       };
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+       jQuery[ method ] = function( url, data, callback, type ) {
+               // shift arguments if data argument was omitted
+               if ( jQuery.isFunction( data ) ) {
+                       type = type || callback;
+                       callback = data;
+                       data = undefined;
+               }
+
+               return jQuery.ajax({
+                       type: method,
+                       url: url,
+                       data: data,
+                       success: callback,
+                       dataType: type
+               });
+       };
+});
 
+jQuery.extend({
 
+       getScript: function( url, callback ) {
+               return jQuery.get( url, undefined, callback, "script" );
+       },
+
+       getJSON: function( url, data, callback ) {
+               return jQuery.get( url, data, callback, "json" );
+       },
+
+       // Creates a full fledged settings object into target
+       // with both ajaxSettings and settings fields.
+       // If target is omitted, writes into ajaxSettings.
+       ajaxSetup: function( target, settings ) {
+               if ( settings ) {
+                       // Building a settings object
+                       ajaxExtend( target, jQuery.ajaxSettings );
+               } else {
+                       // Extending ajaxSettings
+                       settings = target;
+                       target = jQuery.ajaxSettings;
+               }
+               ajaxExtend( target, settings );
+               return target;
+       },
+
+       ajaxSettings: {
+               url: ajaxLocation,
+               isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+               global: true,
+               type: "GET",
+               contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+               processData: true,
+               async: true,
+               /*
+               timeout: 0,
+               data: null,
+               dataType: null,
+               username: null,
+               password: null,
+               cache: null,
+               throws: false,
+               traditional: false,
+               headers: {},
+               */
 
-// Install script dataType
-       jQuery.ajaxSetup({
                accepts: {
-                       script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+                       xml: "application/xml, text/xml",
+                       html: "text/html",
+                       text: "text/plain",
+                       json: "application/json, text/javascript",
+                       "*": allTypes
                },
+
                contents: {
-                       script: /javascript|ecmascript/
+                       xml: /xml/,
+                       html: /html/,
+                       json: /json/
+               },
+
+               responseFields: {
+                       xml: "responseXML",
+                       text: "responseText"
                },
+
+               // List of data converters
+               // 1) key format is "source_type destination_type" (a single space in-between)
+               // 2) the catchall symbol "*" can be used for source_type
                converters: {
-                       "text script": function( text ) {
-                               jQuery.globalEval( text );
-                               return text;
-                       }
-               }
-       });
 
-// Handle cache's special case and global
-       jQuery.ajaxPrefilter( "script", function( s ) {
-               if ( s.cache === undefined ) {
-                       s.cache = false;
-               }
-               if ( s.crossDomain ) {
-                       s.type = "GET";
-                       s.global = false;
-               }
-       });
+                       // Convert anything to text
+                       "* text": window.String,
 
-// Bind script tag hack transport
-       jQuery.ajaxTransport( "script", function(s) {
+                       // Text to html (true = no transformation)
+                       "text html": true,
 
-               // This transport only deals with cross domain requests
-               if ( s.crossDomain ) {
+                       // Evaluate text as a json expression
+                       "text json": jQuery.parseJSON,
 
-                       var script,
-                               head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
+                       // Parse text as xml
+                       "text xml": jQuery.parseXML
+               },
 
-                       return {
+               // For options that shouldn't be deep extended:
+               // you can add your own custom options here if
+               // and when you create one that shouldn't be
+               // deep extended (see ajaxExtend)
+               flatOptions: {
+                       context: true,
+                       url: true
+               }
+       },
+
+       ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+       ajaxTransport: addToPrefiltersOrTransports( transports ),
 
-                               send: function( _, callback ) {
+       // Main method
+       ajax: function( url, options ) {
 
-                                       script = document.createElement( "script" );
+               // If url is an object, simulate pre-1.5 signature
+               if ( typeof url === "object" ) {
+                       options = url;
+                       url = undefined;
+               }
+
+               // Force options to be an object
+               options = options || {};
+
+               var // ifModified key
+                       ifModifiedKey,
+                       // Response headers
+                       responseHeadersString,
+                       responseHeaders,
+                       // transport
+                       transport,
+                       // timeout handle
+                       timeoutTimer,
+                       // Cross-domain detection vars
+                       parts,
+                       // To know if global events are to be dispatched
+                       fireGlobals,
+                       // Loop variable
+                       i,
+                       // Create the final options object
+                       s = jQuery.ajaxSetup( {}, options ),
+                       // Callbacks context
+                       callbackContext = s.context || s,
+                       // Context for global events
+                       // It's the callbackContext if one was provided in the options
+                       // and if it's a DOM node or a jQuery collection
+                       globalEventContext = callbackContext !== s &&
+                               ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
+                                               jQuery( callbackContext ) : jQuery.event,
+                       // Deferreds
+                       deferred = jQuery.Deferred(),
+                       completeDeferred = jQuery.Callbacks( "once memory" ),
+                       // Status-dependent callbacks
+                       statusCode = s.statusCode || {},
+                       // Headers (they are sent all at once)
+                       requestHeaders = {},
+                       requestHeadersNames = {},
+                       // The jqXHR state
+                       state = 0,
+                       // Default abort message
+                       strAbort = "canceled",
+                       // Fake xhr
+                       jqXHR = {
 
-                                       script.async = "async";
+                               readyState: 0,
 
-                                       if ( s.scriptCharset ) {
-                                               script.charset = s.scriptCharset;
+                               // Caches the header
+                               setRequestHeader: function( name, value ) {
+                                       if ( !state ) {
+                                               var lname = name.toLowerCase();
+                                               name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+                                               requestHeaders[ name ] = value;
                                        }
+                                       return this;
+                               },
 
-                                       script.src = s.url;
-
-                                       // Attach handlers for all browsers
-                                       script.onload = script.onreadystatechange = function( _, isAbort ) {
-
-                                               if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
-                                                       // Handle memory leak in IE
-                                                       script.onload = script.onreadystatechange = null;
-
-                                                       // Remove the script
-                                                       if ( head && script.parentNode ) {
-                                                               head.removeChild( script );
-                                                       }
-
-                                                       // Dereference the script
-                                                       script = undefined;
+                               // Raw string
+                               getAllResponseHeaders: function() {
+                                       return state === 2 ? responseHeadersString : null;
+                               },
 
-                                                       // Callback if not abort
-                                                       if ( !isAbort ) {
-                                                               callback( 200, "success" );
+                               // Builds headers hashtable if needed
+                               getResponseHeader: function( key ) {
+                                       var match;
+                                       if ( state === 2 ) {
+                                               if ( !responseHeaders ) {
+                                                       responseHeaders = {};
+                                                       while( ( match = rheaders.exec( responseHeadersString ) ) ) {
+                                                               responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
                                                        }
                                                }
-                                       };
-                                       // Use insertBefore instead of appendChild  to circumvent an IE6 bug.
-                                       // This arises when a base node is used (#2709 and #4378).
-                                       head.insertBefore( script, head.firstChild );
+                                               match = responseHeaders[ key.toLowerCase() ];
+                                       }
+                                       return match === undefined ? null : match;
                                },
 
-                               abort: function() {
-                                       if ( script ) {
-                                               script.onload( 0, 1 );
+                               // Overrides response content-type header
+                               overrideMimeType: function( type ) {
+                                       if ( !state ) {
+                                               s.mimeType = type;
                                        }
+                                       return this;
+                               },
+
+                               // Cancel the request
+                               abort: function( statusText ) {
+                                       statusText = statusText || strAbort;
+                                       if ( transport ) {
+                                               transport.abort( statusText );
+                                       }
+                                       done( 0, statusText );
+                                       return this;
                                }
                        };
-               }
-       });
 
+               // Callback for when everything is done
+               // It is defined here because jslint complains if it is declared
+               // at the end of the function (which would be more logical and readable)
+               function done( status, nativeStatusText, responses, headers ) {
+                       var isSuccess, success, error, response, modified,
+                               statusText = nativeStatusText;
 
+                       // Called once
+                       if ( state === 2 ) {
+                               return;
+                       }
 
+                       // State is "done" now
+                       state = 2;
 
-       var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
-               xhrOnUnloadAbort = window.ActiveXObject ? function() {
-                       // Abort all pending requests
-                       for ( var key in xhrCallbacks ) {
-                               xhrCallbacks[ key ]( 0, 1 );
+                       // Clear timeout if it exists
+                       if ( timeoutTimer ) {
+                               clearTimeout( timeoutTimer );
                        }
-               } : false,
-               xhrId = 0,
-               xhrCallbacks;
 
-// Functions to create xhrs
-       function createStandardXHR() {
-               try {
-                       return new window.XMLHttpRequest();
-               } catch( e ) {}
-       }
+                       // Dereference transport for early garbage collection
+                       // (no matter how long the jqXHR object will be used)
+                       transport = undefined;
 
-       function createActiveXHR() {
-               try {
-                       return new window.ActiveXObject( "Microsoft.XMLHTTP" );
-               } catch( e ) {}
-       }
+                       // Cache response headers
+                       responseHeadersString = headers || "";
 
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-       jQuery.ajaxSettings.xhr = window.ActiveXObject ?
-               /* Microsoft failed to properly
-                * implement the XMLHttpRequest in IE7 (can't request local files),
-                * so we use the ActiveXObject when it is available
-                * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
-                * we need a fallback.
-                */
-               function() {
-                       return !this.isLocal && createStandardXHR() || createActiveXHR();
-               } :
-               // For all other browsers, use the standard XMLHttpRequest object
-               createStandardXHR;
+                       // Set readyState
+                       jqXHR.readyState = status > 0 ? 4 : 0;
 
-// Determine support properties
-       (function( xhr ) {
-               jQuery.extend( jQuery.support, {
-                       ajax: !!xhr,
-                       cors: !!xhr && ( "withCredentials" in xhr )
-               });
-       })( jQuery.ajaxSettings.xhr() );
+                       // Get response data
+                       if ( responses ) {
+                               response = ajaxHandleResponses( s, jqXHR, responses );
+                       }
 
-// Create transport if the browser can provide an xhr
-       if ( jQuery.support.ajax ) {
+                       // If successful, handle type chaining
+                       if ( status >= 200 && status < 300 || status === 304 ) {
 
-               jQuery.ajaxTransport(function( s ) {
-                       // Cross domain only allowed if supported through XMLHttpRequest
-                       if ( !s.crossDomain || jQuery.support.cors ) {
+                               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+                               if ( s.ifModified ) {
 
-                               var callback;
+                                       modified = jqXHR.getResponseHeader("Last-Modified");
+                                       if ( modified ) {
+                                               jQuery.lastModified[ ifModifiedKey ] = modified;
+                                       }
+                                       modified = jqXHR.getResponseHeader("Etag");
+                                       if ( modified ) {
+                                               jQuery.etag[ ifModifiedKey ] = modified;
+                                       }
+                               }
 
-                               return {
-                                       send: function( headers, complete ) {
+                               // If not modified
+                               if ( status === 304 ) {
 
-                                               // Get a new xhr
-                                               var xhr = s.xhr(),
-                                                       handle,
-                                                       i;
+                                       statusText = "notmodified";
+                                       isSuccess = true;
 
-                                               // Open the socket
-                                               // Passing null username, generates a login popup on Opera (#2865)
-                                               if ( s.username ) {
-                                                       xhr.open( s.type, s.url, s.async, s.username, s.password );
-                                               } else {
-                                                       xhr.open( s.type, s.url, s.async );
-                                               }
+                               // If we have data
+                               } else {
 
-                                               // Apply custom fields if provided
-                                               if ( s.xhrFields ) {
-                                                       for ( i in s.xhrFields ) {
-                                                               xhr[ i ] = s.xhrFields[ i ];
-                                                       }
-                                               }
+                                       isSuccess = ajaxConvert( s, response );
+                                       statusText = isSuccess.state;
+                                       success = isSuccess.data;
+                                       error = isSuccess.error;
+                                       isSuccess = !error;
+                               }
+                       } else {
+                               // We extract error from statusText
+                               // then normalize statusText and status for non-aborts
+                               error = statusText;
+                               if ( !statusText || status ) {
+                                       statusText = "error";
+                                       if ( status < 0 ) {
+                                               status = 0;
+                                       }
+                               }
+                       }
 
-                                               // Override mime type if needed
-                                               if ( s.mimeType && xhr.overrideMimeType ) {
-                                                       xhr.overrideMimeType( s.mimeType );
-                                               }
+                       // Set data for the fake xhr object
+                       jqXHR.status = status;
+                       jqXHR.statusText = "" + ( nativeStatusText || statusText );
 
-                                               // X-Requested-With header
-                                               // For cross-domain requests, seeing as conditions for a preflight are
-                                               // akin to a jigsaw puzzle, we simply never set it to be sure.
-                                               // (it can always be set on a per-request basis or even using ajaxSetup)
-                                               // For same-domain requests, won't change header if already provided.
-                                               if ( !s.crossDomain && !headers["X-Requested-With"] ) {
-                                                       headers[ "X-Requested-With" ] = "XMLHttpRequest";
-                                               }
+                       // Success/Error
+                       if ( isSuccess ) {
+                               deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+                       } else {
+                               deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+                       }
 
-                                               // Need an extra try/catch for cross domain requests in Firefox 3
-                                               try {
-                                                       for ( i in headers ) {
-                                                               xhr.setRequestHeader( i, headers[ i ] );
-                                                       }
-                                               } catch( _ ) {}
-
-                                               // Do send the request
-                                               // This may raise an exception which is actually
-                                               // handled in jQuery.ajax (so no try/catch here)
-                                               xhr.send( ( s.hasContent && s.data ) || null );
-
-                                               // Listener
-                                               callback = function( _, isAbort ) {
-
-                                                       var status,
-                                                               statusText,
-                                                               responseHeaders,
-                                                               responses,
-                                                               xml;
-
-                                                       // Firefox throws exceptions when accessing properties
-                                                       // of an xhr when a network error occured
-                                                       // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
-                                                       try {
-
-                                                               // Was never called and is aborted or complete
-                                                               if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
-                                                                       // Only called once
-                                                                       callback = undefined;
-
-                                                                       // Do not keep as active anymore
-                                                                       if ( handle ) {
-                                                                               xhr.onreadystatechange = jQuery.noop;
-                                                                               if ( xhrOnUnloadAbort ) {
-                                                                                       delete xhrCallbacks[ handle ];
-                                                                               }
-                                                                       }
+                       // Status-dependent callbacks
+                       jqXHR.statusCode( statusCode );
+                       statusCode = undefined;
 
-                                                                       // If it's an abort
-                                                                       if ( isAbort ) {
-                                                                               // Abort it manually if needed
-                                                                               if ( xhr.readyState !== 4 ) {
-                                                                                       xhr.abort();
-                                                                               }
-                                                                       } else {
-                                                                               status = xhr.status;
-                                                                               responseHeaders = xhr.getAllResponseHeaders();
-                                                                               responses = {};
-                                                                               xml = xhr.responseXML;
-
-                                                                               // Construct response list
-                                                                               if ( xml && xml.documentElement /* #4958 */ ) {
-                                                                                       responses.xml = xml;
-                                                                               }
-
-                                                                               // When requesting binary data, IE6-9 will throw an exception
-                                                                               // on any attempt to access responseText (#11426)
-                                                                               try {
-                                                                                       responses.text = xhr.responseText;
-                                                                               } catch( _ ) {
-                                                                               }
-
-                                                                               // Firefox throws an exception when accessing
-                                                                               // statusText for faulty cross-domain requests
-                                                                               try {
-                                                                                       statusText = xhr.statusText;
-                                                                               } catch( e ) {
-                                                                                       // We normalize with Webkit giving an empty statusText
-                                                                                       statusText = "";
-                                                                               }
-
-                                                                               // Filter status for non standard behaviors
-
-                                                                               // If the request is local and we have data: assume a success
-                                                                               // (success with no data won't get notified, that's the best we
-                                                                               // can do given current implementations)
-                                                                               if ( !status && s.isLocal && !s.crossDomain ) {
-                                                                                       status = responses.text ? 200 : 404;
-                                                                                       // IE - #1450: sometimes returns 1223 when it should be 204
-                                                                               } else if ( status === 1223 ) {
-                                                                                       status = 204;
-                                                                               }
-                                                                       }
-                                                               }
-                                                       } catch( firefoxAccessException ) {
-                                                               if ( !isAbort ) {
-                                                                       complete( -1, firefoxAccessException );
-                                                               }
-                                                       }
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
+                                               [ jqXHR, s, isSuccess ? success : error ] );
+                       }
 
-                                                       // Call complete if needed
-                                                       if ( responses ) {
-                                                               complete( status, statusText, responses, responseHeaders );
-                                                       }
-                                               };
+                       // Complete
+                       completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
 
-                                               // if we're in sync mode or it's in cache
-                                               // and has been retrieved directly (IE6 & IE7)
-                                               // we need to manually fire the callback
-                                               if ( !s.async || xhr.readyState === 4 ) {
-                                                       callback();
-                                               } else {
-                                                       handle = ++xhrId;
-                                                       if ( xhrOnUnloadAbort ) {
-                                                               // Create the active xhrs callbacks list if needed
-                                                               // and attach the unload handler
-                                                               if ( !xhrCallbacks ) {
-                                                                       xhrCallbacks = {};
-                                                                       jQuery( window ).unload( xhrOnUnloadAbort );
-                                                               }
-                                                               // Add to list of active xhrs callbacks
-                                                               xhrCallbacks[ handle ] = callback;
-                                                       }
-                                                       xhr.onreadystatechange = callback;
-                                               }
-                                       },
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+                               // Handle the global AJAX counter
+                               if ( !( --jQuery.active ) ) {
+                                       jQuery.event.trigger( "ajaxStop" );
+                               }
+                       }
+               }
 
-                                       abort: function() {
-                                               if ( callback ) {
-                                                       callback(0,1);
-                                               }
+               // Attach deferreds
+               deferred.promise( jqXHR );
+               jqXHR.success = jqXHR.done;
+               jqXHR.error = jqXHR.fail;
+               jqXHR.complete = completeDeferred.add;
+
+               // Status-dependent callbacks
+               jqXHR.statusCode = function( map ) {
+                       if ( map ) {
+                               var tmp;
+                               if ( state < 2 ) {
+                                       for ( tmp in map ) {
+                                               statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
                                        }
-                               };
+                               } else {
+                                       tmp = map[ jqXHR.status ];
+                                       jqXHR.always( tmp );
+                               }
                        }
-               });
-       }
+                       return this;
+               };
 
+               // Remove hash character (#7531: and string promotion)
+               // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+               // We also use the url parameter if available
+               s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+               // Extract dataTypes list
+               s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( core_rspace );
+
+               // Determine if a cross-domain request is in order
+               if ( s.crossDomain == null ) {
+                       parts = rurl.exec( s.url.toLowerCase() );
+                       s.crossDomain = !!( parts &&
+                               ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
+                                       ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
+                                               ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
+                       );
+               }
 
+               // Convert data if not already a string
+               if ( s.data && s.processData && typeof s.data !== "string" ) {
+                       s.data = jQuery.param( s.data, s.traditional );
+               }
 
+               // Apply prefilters
+               inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
 
-       var elemdisplay = {},
-               iframe, iframeDoc,
-               rfxtypes = /^(?:toggle|show|hide)$/,
-               rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
-               timerId,
-               fxAttrs = [
-                       // height animations
-                       [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
-                       // width animations
-                       [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
-                       // opacity animations
-                       [ "opacity" ]
-               ],
-               fxNow;
+               // If request was aborted inside a prefilter, stop there
+               if ( state === 2 ) {
+                       return jqXHR;
+               }
 
-       jQuery.fn.extend({
-               show: function( speed, easing, callback ) {
-                       var elem, display;
+               // We can fire global events as of now if asked to
+               fireGlobals = s.global;
 
-                       if ( speed || speed === 0 ) {
-                               return this.animate( genFx("show", 3), speed, easing, callback );
+               // Uppercase the type
+               s.type = s.type.toUpperCase();
 
-                       } else {
-                               for ( var i = 0, j = this.length; i < j; i++ ) {
-                                       elem = this[ i ];
+               // Determine if request has content
+               s.hasContent = !rnoContent.test( s.type );
 
-                                       if ( elem.style ) {
-                                               display = elem.style.display;
+               // Watch for a new set of requests
+               if ( fireGlobals && jQuery.active++ === 0 ) {
+                       jQuery.event.trigger( "ajaxStart" );
+               }
 
-                                               // Reset the inline display of this element to learn if it is
-                                               // being hidden by cascaded rules or not
-                                               if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
-                                                       display = elem.style.display = "";
-                                               }
+               // More options handling for requests with no content
+               if ( !s.hasContent ) {
 
-                                               // Set elements which have been overridden with display: none
-                                               // in a stylesheet to whatever the default browser style is
-                                               // for such an element
-                                               if ( (display === "" && jQuery.css(elem, "display") === "none") ||
-                                                       !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
-                                                       jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
-                                               }
-                                       }
-                               }
+                       // If data is available, append data to url
+                       if ( s.data ) {
+                               s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
+                               // #9682: remove data so that it's not used in an eventual retry
+                               delete s.data;
+                       }
 
-                               // Set the display of most of the elements in a second loop
-                               // to avoid the constant reflow
-                               for ( i = 0; i < j; i++ ) {
-                                       elem = this[ i ];
+                       // Get ifModifiedKey before adding the anti-cache parameter
+                       ifModifiedKey = s.url;
 
-                                       if ( elem.style ) {
-                                               display = elem.style.display;
+                       // Add anti-cache in url if needed
+                       if ( s.cache === false ) {
 
-                                               if ( display === "" || display === "none" ) {
-                                                       elem.style.display = jQuery._data( elem, "olddisplay" ) || "";
-                                               }
-                                       }
-                               }
+                               var ts = jQuery.now(),
+                                       // try replacing _= if it is there
+                                       ret = s.url.replace( rts, "$1_=" + ts );
 
-                               return this;
+                               // if nothing was replaced, add timestamp to the end
+                               s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
                        }
-               },
-
-               hide: function( speed, easing, callback ) {
-                       if ( speed || speed === 0 ) {
-                               return this.animate( genFx("hide", 3), speed, easing, callback);
+               }
 
-                       } else {
-                               var elem, display,
-                                       i = 0,
-                                       j = this.length;
+               // Set the correct header, if data is being sent
+               if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+                       jqXHR.setRequestHeader( "Content-Type", s.contentType );
+               }
 
-                               for ( ; i < j; i++ ) {
-                                       elem = this[i];
-                                       if ( elem.style ) {
-                                               display = jQuery.css( elem, "display" );
+               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+               if ( s.ifModified ) {
+                       ifModifiedKey = ifModifiedKey || s.url;
+                       if ( jQuery.lastModified[ ifModifiedKey ] ) {
+                               jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
+                       }
+                       if ( jQuery.etag[ ifModifiedKey ] ) {
+                               jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
+                       }
+               }
 
-                                               if ( display !== "none" && !jQuery._data( elem, "olddisplay" ) ) {
-                                                       jQuery._data( elem, "olddisplay", display );
-                                               }
-                                       }
-                               }
+               // Set the Accepts header for the server, depending on the dataType
+               jqXHR.setRequestHeader(
+                       "Accept",
+                       s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+                               s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+                               s.accepts[ "*" ]
+               );
+
+               // Check for headers option
+               for ( i in s.headers ) {
+                       jqXHR.setRequestHeader( i, s.headers[ i ] );
+               }
 
-                               // Set the display of the elements in a second loop
-                               // to avoid the constant reflow
-                               for ( i = 0; i < j; i++ ) {
-                                       if ( this[i].style ) {
-                                               this[i].style.display = "none";
-                                       }
-                               }
+               // Allow custom headers/mimetypes and early abort
+               if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+                               // Abort if not done already and return
+                               return jqXHR.abort();
 
-                               return this;
-                       }
-               },
+               }
 
-               // Save the old toggle function
-               _toggle: jQuery.fn.toggle,
+               // aborting is no longer a cancellation
+               strAbort = "abort";
 
-               toggle: function( fn, fn2, callback ) {
-                       var bool = typeof fn === "boolean";
+               // Install callbacks on deferreds
+               for ( i in { success: 1, error: 1, complete: 1 } ) {
+                       jqXHR[ i ]( s[ i ] );
+               }
 
-                       if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
-                               this._toggle.apply( this, arguments );
+               // Get transport
+               transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
 
-                       } else if ( fn == null || bool ) {
-                               this.each(function() {
-                                       var state = bool ? fn : jQuery(this).is(":hidden");
-                                       jQuery(this)[ state ? "show" : "hide" ]();
-                               });
+               // If no transport, we auto-abort
+               if ( !transport ) {
+                       done( -1, "No Transport" );
+               } else {
+                       jqXHR.readyState = 1;
+                       // Send global event
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+                       }
+                       // Timeout
+                       if ( s.async && s.timeout > 0 ) {
+                               timeoutTimer = setTimeout( function(){
+                                       jqXHR.abort( "timeout" );
+                               }, s.timeout );
+                       }
 
-                       } else {
-                               this.animate(genFx("toggle", 3), fn, fn2, callback);
+                       try {
+                               state = 1;
+                               transport.send( requestHeaders, done );
+                       } catch (e) {
+                               // Propagate exception as error if not done
+                               if ( state < 2 ) {
+                                       done( -1, e );
+                               // Simply rethrow otherwise
+                               } else {
+                                       throw e;
+                               }
                        }
+               }
 
-                       return this;
-               },
+               return jqXHR;
+       },
 
-               fadeTo: function( speed, to, easing, callback ) {
-                       return this.filter(":hidden").css("opacity", 0).show().end()
-                               .animate({opacity: to}, speed, easing, callback);
-               },
+       // Counter for holding the number of active queries
+       active: 0,
 
-               animate: function( prop, speed, easing, callback ) {
-                       var optall = jQuery.speed( speed, easing, callback );
+       // Last-Modified header cache for next request
+       lastModified: {},
+       etag: {}
 
-                       if ( jQuery.isEmptyObject( prop ) ) {
-                               return this.each( optall.complete, [ false ] );
-                       }
+});
 
-                       // Do not change referenced properties as per-property easing will be lost
-                       prop = jQuery.extend( {}, prop );
+/* Handles responses to an ajax request:
+ * - sets all responseXXX fields accordingly
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
 
-                       function doAnimation() {
-                               // XXX 'this' does not always have a nodeName when running the
-                               // test suite
+       var ct, type, finalDataType, firstDataType,
+               contents = s.contents,
+               dataTypes = s.dataTypes,
+               responseFields = s.responseFields;
 
-                               if ( optall.queue === false ) {
-                                       jQuery._mark( this );
-                               }
+       // Fill responseXXX fields
+       for ( type in responseFields ) {
+               if ( type in responses ) {
+                       jqXHR[ responseFields[type] ] = responses[ type ];
+               }
+       }
 
-                               var opt = jQuery.extend( {}, optall ),
-                                       isElement = this.nodeType === 1,
-                                       hidden = isElement && jQuery(this).is(":hidden"),
-                                       name, val, p, e, hooks, replace,
-                                       parts, start, end, unit,
-                                       method;
-
-                               // will store per property easing and be used to determine when an animation is complete
-                               opt.animatedProperties = {};
-
-                               // first pass over propertys to expand / normalize
-                               for ( p in prop ) {
-                                       name = jQuery.camelCase( p );
-                                       if ( p !== name ) {
-                                               prop[ name ] = prop[ p ];
-                                               delete prop[ p ];
-                                       }
+       // Remove auto dataType and get content-type in the process
+       while( dataTypes[ 0 ] === "*" ) {
+               dataTypes.shift();
+               if ( ct === undefined ) {
+                       ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
+               }
+       }
 
-                                       if ( ( hooks = jQuery.cssHooks[ name ] ) && "expand" in hooks ) {
-                                               replace = hooks.expand( prop[ name ] );
-                                               delete prop[ name ];
+       // Check if we're dealing with a known content-type
+       if ( ct ) {
+               for ( type in contents ) {
+                       if ( contents[ type ] && contents[ type ].test( ct ) ) {
+                               dataTypes.unshift( type );
+                               break;
+                       }
+               }
+       }
 
-                                               // not quite $.extend, this wont overwrite keys already present.
-                                               // also - reusing 'p' from above because we have the correct "name"
-                                               for ( p in replace ) {
-                                                       if ( ! ( p in prop ) ) {
-                                                               prop[ p ] = replace[ p ];
-                                                       }
-                                               }
-                                       }
-                               }
+       // Check to see if we have a response for the expected dataType
+       if ( dataTypes[ 0 ] in responses ) {
+               finalDataType = dataTypes[ 0 ];
+       } else {
+               // Try convertible dataTypes
+               for ( type in responses ) {
+                       if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+                               finalDataType = type;
+                               break;
+                       }
+                       if ( !firstDataType ) {
+                               firstDataType = type;
+                       }
+               }
+               // Or just use first one
+               finalDataType = finalDataType || firstDataType;
+       }
 
-                               for ( name in prop ) {
-                                       val = prop[ name ];
-                                       // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
-                                       if ( jQuery.isArray( val ) ) {
-                                               opt.animatedProperties[ name ] = val[ 1 ];
-                                               val = prop[ name ] = val[ 0 ];
-                                       } else {
-                                               opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
-                                       }
+       // If we found a dataType
+       // We add the dataType to the list if needed
+       // and return the corresponding response
+       if ( finalDataType ) {
+               if ( finalDataType !== dataTypes[ 0 ] ) {
+                       dataTypes.unshift( finalDataType );
+               }
+               return responses[ finalDataType ];
+       }
+}
 
-                                       if ( val === "hide" && hidden || val === "show" && !hidden ) {
-                                               return opt.complete.call( this );
-                                       }
+// Chain conversions given the request and the original response
+function ajaxConvert( s, response ) {
+
+       var conv, conv2, current, tmp,
+               // Work with a copy of dataTypes in case we need to modify it for conversion
+               dataTypes = s.dataTypes.slice(),
+               prev = dataTypes[ 0 ],
+               converters = {},
+               i = 0;
+
+       // Apply the dataFilter if provided
+       if ( s.dataFilter ) {
+               response = s.dataFilter( response, s.dataType );
+       }
+
+       // Create converters map with lowercased keys
+       if ( dataTypes[ 1 ] ) {
+               for ( conv in s.converters ) {
+                       converters[ conv.toLowerCase() ] = s.converters[ conv ];
+               }
+       }
 
-                                       if ( isElement && ( name === "height" || name === "width" ) ) {
-                                               // Make sure that nothing sneaks out
-                                               // Record all 3 overflow attributes because IE does not
-                                               // change the overflow attribute when overflowX and
-                                               // overflowY are set to the same value
-                                               opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
+       // Convert to each sequential dataType, tolerating list modification
+       for ( ; (current = dataTypes[++i]); ) {
 
-                                               // Set display property to inline-block for height/width
-                                               // animations on inline elements that are having width/height animated
-                                               if ( jQuery.css( this, "display" ) === "inline" &&
-                                                       jQuery.css( this, "float" ) === "none" ) {
+               // There's only work to do if current dataType is non-auto
+               if ( current !== "*" ) {
 
-                                                       // inline-level elements accept inline-block;
-                                                       // block-level elements need to be inline with layout
-                                                       if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
-                                                               this.style.display = "inline-block";
+                       // Convert response if prev dataType is non-auto and differs from current
+                       if ( prev !== "*" && prev !== current ) {
 
-                                                       } else {
-                                                               this.style.zoom = 1;
+                               // Seek a direct converter
+                               conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+                               // If none found, seek a pair
+                               if ( !conv ) {
+                                       for ( conv2 in converters ) {
+
+                                               // If conv2 outputs current
+                                               tmp = conv2.split(" ");
+                                               if ( tmp[ 1 ] === current ) {
+
+                                                       // If prev can be converted to accepted input
+                                                       conv = converters[ prev + " " + tmp[ 0 ] ] ||
+                                                               converters[ "* " + tmp[ 0 ] ];
+                                                       if ( conv ) {
+                                                               // Condense equivalence converters
+                                                               if ( conv === true ) {
+                                                                       conv = converters[ conv2 ];
+
+                                                               // Otherwise, insert the intermediate dataType
+                                                               } else if ( converters[ conv2 ] !== true ) {
+                                                                       current = tmp[ 0 ];
+                                                                       dataTypes.splice( i--, 0, current );
+                                                               }
+
+                                                               break;
                                                        }
                                                }
                                        }
                                }
 
-                               if ( opt.overflow != null ) {
-                                       this.style.overflow = "hidden";
+                               // Apply converter (if not an equivalence)
+                               if ( conv !== true ) {
+
+                                       // Unless errors are allowed to bubble, catch and return them
+                                       if ( conv && s["throws"] ) {
+                                               response = conv( response );
+                                       } else {
+                                               try {
+                                                       response = conv( response );
+                                               } catch ( e ) {
+                                                       return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+                                               }
+                                       }
                                }
+                       }
 
-                               for ( p in prop ) {
-                                       e = new jQuery.fx( this, opt, p );
-                                       val = prop[ p ];
+                       // Update prev for next iteration
+                       prev = current;
+               }
+       }
 
-                                       if ( rfxtypes.test( val ) ) {
+       return { state: "success", data: response };
+}
+var oldCallbacks = [],
+       rquestion = /\?/,
+       rjsonp = /(=)\?(?=&|$)|\?\?/,
+       nonce = jQuery.now();
 
-                                               // Tracks whether to show or hide based on private
-                                               // data attached to the element
-                                               method = jQuery._data( this, "toggle" + p ) || ( val === "toggle" ? hidden ? "show" : "hide" : 0 );
-                                               if ( method ) {
-                                                       jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
-                                                       e[ method ]();
-                                               } else {
-                                                       e[ val ]();
-                                               }
+// Default jsonp settings
+jQuery.ajaxSetup({
+       jsonp: "callback",
+       jsonpCallback: function() {
+               var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+               this[ callback ] = true;
+               return callback;
+       }
+});
 
-                                       } else {
-                                               parts = rfxnum.exec( val );
-                                               start = e.cur();
-
-                                               if ( parts ) {
-                                                       end = parseFloat( parts[2] );
-                                                       unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
-
-                                                       // We need to compute starting value
-                                                       if ( unit !== "px" ) {
-                                                               jQuery.style( this, p, (end || 1) + unit);
-                                                               start = ( (end || 1) / e.cur() ) * start;
-                                                               jQuery.style( this, p, start + unit);
-                                                       }
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+       var callbackName, overwritten, responseContainer,
+               data = s.data,
+               url = s.url,
+               hasCallback = s.jsonp !== false,
+               replaceInUrl = hasCallback && rjsonp.test( url ),
+               replaceInData = hasCallback && !replaceInUrl && typeof data === "string" &&
+                       !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") &&
+                       rjsonp.test( data );
+
+       // Handle iff the expected data type is "jsonp" or we have a parameter to set
+       if ( s.dataTypes[ 0 ] === "jsonp" || replaceInUrl || replaceInData ) {
+
+               // Get callback name, remembering preexisting value associated with it
+               callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+                       s.jsonpCallback() :
+                       s.jsonpCallback;
+               overwritten = window[ callbackName ];
+
+               // Insert callback into url or form data
+               if ( replaceInUrl ) {
+                       s.url = url.replace( rjsonp, "$1" + callbackName );
+               } else if ( replaceInData ) {
+                       s.data = data.replace( rjsonp, "$1" + callbackName );
+               } else if ( hasCallback ) {
+                       s.url += ( rquestion.test( url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+               }
 
-                                                       // If a +=/-= token was provided, we're doing a relative animation
-                                                       if ( parts[1] ) {
-                                                               end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
-                                                       }
+               // Use data converter to retrieve json after script execution
+               s.converters["script json"] = function() {
+                       if ( !responseContainer ) {
+                               jQuery.error( callbackName + " was not called" );
+                       }
+                       return responseContainer[ 0 ];
+               };
 
-                                                       e.custom( start, end, unit );
+               // force json dataType
+               s.dataTypes[ 0 ] = "json";
 
-                                               } else {
-                                                       e.custom( start, val, "" );
-                                               }
-                                       }
-                               }
+               // Install callback
+               window[ callbackName ] = function() {
+                       responseContainer = arguments;
+               };
 
-                               // For JS strict compliance
-                               return true;
-                       }
+               // Clean-up function (fires after converters)
+               jqXHR.always(function() {
+                       // Restore preexisting value
+                       window[ callbackName ] = overwritten;
 
-                       return optall.queue === false ?
-                               this.each( doAnimation ) :
-                               this.queue( optall.queue, doAnimation );
-               },
+                       // Save back as free
+                       if ( s[ callbackName ] ) {
+                               // make sure that re-using the options doesn't screw things around
+                               s.jsonpCallback = originalSettings.jsonpCallback;
 
-               stop: function( type, clearQueue, gotoEnd ) {
-                       if ( typeof type !== "string" ) {
-                               gotoEnd = clearQueue;
-                               clearQueue = type;
-                               type = undefined;
+                               // save the callback name for future use
+                               oldCallbacks.push( callbackName );
                        }
-                       if ( clearQueue && type !== false ) {
-                               this.queue( type || "fx", [] );
+
+                       // Call if it was a function and we have a response
+                       if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+                               overwritten( responseContainer[ 0 ] );
                        }
 
-                       return this.each(function() {
-                               var index,
-                                       hadTimers = false,
-                                       timers = jQuery.timers,
-                                       data = jQuery._data( this );
-
-                               // clear marker counters if we know they won't be
-                               if ( !gotoEnd ) {
-                                       jQuery._unmark( true, this );
-                               }
+                       responseContainer = overwritten = undefined;
+               });
 
-                               function stopQueue( elem, data, index ) {
-                                       var hooks = data[ index ];
-                                       jQuery.removeData( elem, index, true );
-                                       hooks.stop( gotoEnd );
-                               }
+               // Delegate to script
+               return "script";
+       }
+});
+// Install script dataType
+jQuery.ajaxSetup({
+       accepts: {
+               script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+       },
+       contents: {
+               script: /javascript|ecmascript/
+       },
+       converters: {
+               "text script": function( text ) {
+                       jQuery.globalEval( text );
+                       return text;
+               }
+       }
+});
 
-                               if ( type == null ) {
-                                       for ( index in data ) {
-                                               if ( data[ index ] && data[ index ].stop && index.indexOf(".run") === index.length - 4 ) {
-                                                       stopQueue( this, data, index );
-                                               }
-                                       }
-                               } else if ( data[ index = type + ".run" ] && data[ index ].stop ){
-                                       stopQueue( this, data, index );
-                               }
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+       if ( s.cache === undefined ) {
+               s.cache = false;
+       }
+       if ( s.crossDomain ) {
+               s.type = "GET";
+               s.global = false;
+       }
+});
 
-                               for ( index = timers.length; index--; ) {
-                                       if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
-                                               if ( gotoEnd ) {
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
 
-                                                       // force the next step to be the last
-                                                       timers[ index ]( true );
-                                               } else {
-                                                       timers[ index ].saveState();
-                                               }
-                                               hadTimers = true;
-                                               timers.splice( index, 1 );
-                                       }
-                               }
+       // This transport only deals with cross domain requests
+       if ( s.crossDomain ) {
 
-                               // start the next in the queue if the last step wasn't forced
-                               // timers currently will call their complete callbacks, which will dequeue
-                               // but only if they were gotoEnd
-                               if ( !( gotoEnd && hadTimers ) ) {
-                                       jQuery.dequeue( this, type );
-                               }
-                       });
-               }
+               var script,
+                       head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
 
-       });
+               return {
 
-// Animations created synchronously will run synchronously
-       function createFxNow() {
-               setTimeout( clearFxNow, 0 );
-               return ( fxNow = jQuery.now() );
-       }
+                       send: function( _, callback ) {
 
-       function clearFxNow() {
-               fxNow = undefined;
-       }
+                               script = document.createElement( "script" );
 
-// Generate parameters to create a standard animation
-       function genFx( type, num ) {
-               var obj = {};
+                               script.async = "async";
 
-               jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
-                       obj[ this ] = type;
-               });
+                               if ( s.scriptCharset ) {
+                                       script.charset = s.scriptCharset;
+                               }
 
-               return obj;
-       }
+                               script.src = s.url;
 
-// Generate shortcuts for custom animations
-       jQuery.each({
-               slideDown: genFx( "show", 1 ),
-               slideUp: genFx( "hide", 1 ),
-               slideToggle: genFx( "toggle", 1 ),
-               fadeIn: { opacity: "show" },
-               fadeOut: { opacity: "hide" },
-               fadeToggle: { opacity: "toggle" }
-       }, function( name, props ) {
-               jQuery.fn[ name ] = function( speed, easing, callback ) {
-                       return this.animate( props, speed, easing, callback );
-               };
-       });
+                               // Attach handlers for all browsers
+                               script.onload = script.onreadystatechange = function( _, isAbort ) {
 
-       jQuery.extend({
-               speed: function( speed, easing, fn ) {
-                       var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
-                               complete: fn || !fn && easing ||
-                                       jQuery.isFunction( speed ) && speed,
-                               duration: speed,
-                               easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
-                       };
+                                       if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
 
-                       opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
-                               opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+                                               // Handle memory leak in IE
+                                               script.onload = script.onreadystatechange = null;
 
-                       // normalize opt.queue - true/undefined/null -> "fx"
-                       if ( opt.queue == null || opt.queue === true ) {
-                               opt.queue = "fx";
-                       }
+                                               // Remove the script
+                                               if ( head && script.parentNode ) {
+                                                       head.removeChild( script );
+                                               }
 
-                       // Queueing
-                       opt.old = opt.complete;
+                                               // Dereference the script
+                                               script = undefined;
 
-                       opt.complete = function( noUnmark ) {
-                               if ( jQuery.isFunction( opt.old ) ) {
-                                       opt.old.call( this );
-                               }
+                                               // Callback if not abort
+                                               if ( !isAbort ) {
+                                                       callback( 200, "success" );
+                                               }
+                                       }
+                               };
+                               // Use insertBefore instead of appendChild  to circumvent an IE6 bug.
+                               // This arises when a base node is used (#2709 and #4378).
+                               head.insertBefore( script, head.firstChild );
+                       },
 
-                               if ( opt.queue ) {
-                                       jQuery.dequeue( this, opt.queue );
-                               } else if ( noUnmark !== false ) {
-                                       jQuery._unmark( this );
+                       abort: function() {
+                               if ( script ) {
+                                       script.onload( 0, 1 );
                                }
-                       };
+                       }
+               };
+       }
+});
+var xhrCallbacks,
+       // #5280: Internet Explorer will keep connections alive if we don't abort on unload
+       xhrOnUnloadAbort = window.ActiveXObject ? function() {
+               // Abort all pending requests
+               for ( var key in xhrCallbacks ) {
+                       xhrCallbacks[ key ]( 0, 1 );
+               }
+       } : false,
+       xhrId = 0;
 
-                       return opt;
-               },
+// Functions to create xhrs
+function createStandardXHR() {
+       try {
+               return new window.XMLHttpRequest();
+       } catch( e ) {}
+}
 
-               easing: {
-                       linear: function( p ) {
-                               return p;
-                       },
-                       swing: function( p ) {
-                               return ( -Math.cos( p*Math.PI ) / 2 ) + 0.5;
-                       }
-               },
+function createActiveXHR() {
+       try {
+               return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+       } catch( e ) {}
+}
 
-               timers: [],
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject ?
+       /* Microsoft failed to properly
+        * implement the XMLHttpRequest in IE7 (can't request local files),
+        * so we use the ActiveXObject when it is available
+        * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+        * we need a fallback.
+        */
+       function() {
+               return !this.isLocal && createStandardXHR() || createActiveXHR();
+       } :
+       // For all other browsers, use the standard XMLHttpRequest object
+       createStandardXHR;
 
-               fx: function( elem, options, prop ) {
-                       this.options = options;
-                       this.elem = elem;
-                       this.prop = prop;
+// Determine support properties
+(function( xhr ) {
+       jQuery.extend( jQuery.support, {
+               ajax: !!xhr,
+               cors: !!xhr && ( "withCredentials" in xhr )
+       });
+})( jQuery.ajaxSettings.xhr() );
 
-                       options.orig = options.orig || {};
-               }
+// Create transport if the browser can provide an xhr
+if ( jQuery.support.ajax ) {
 
-       });
+       jQuery.ajaxTransport(function( s ) {
+               // Cross domain only allowed if supported through XMLHttpRequest
+               if ( !s.crossDomain || jQuery.support.cors ) {
 
-       jQuery.fx.prototype = {
-               // Simple function for setting a style value
-               update: function() {
-                       if ( this.options.step ) {
-                               this.options.step.call( this.elem, this.now, this );
-                       }
+                       var callback;
 
-                       ( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );
-               },
+                       return {
+                               send: function( headers, complete ) {
 
-               // Get the current size
-               cur: function() {
-                       if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
-                               return this.elem[ this.prop ];
-                       }
+                                       // Get a new xhr
+                                       var handle, i,
+                                               xhr = s.xhr();
 
-                       var parsed,
-                               r = jQuery.css( this.elem, this.prop );
-                       // Empty strings, null, undefined and "auto" are converted to 0,
-                       // complex values such as "rotate(1rad)" are returned as is,
-                       // simple values such as "10px" are parsed to Float.
-                       return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
-               },
+                                       // Open the socket
+                                       // Passing null username, generates a login popup on Opera (#2865)
+                                       if ( s.username ) {
+                                               xhr.open( s.type, s.url, s.async, s.username, s.password );
+                                       } else {
+                                               xhr.open( s.type, s.url, s.async );
+                                       }
 
-               // Start an animation from one number to another
-               custom: function( from, to, unit ) {
-                       var self = this,
-                               fx = jQuery.fx;
-
-                       this.startTime = fxNow || createFxNow();
-                       this.end = to;
-                       this.now = this.start = from;
-                       this.pos = this.state = 0;
-                       this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
-
-                       function t( gotoEnd ) {
-                               return self.step( gotoEnd );
-                       }
-
-                       t.queue = this.options.queue;
-                       t.elem = this.elem;
-                       t.saveState = function() {
-                               if ( jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
-                                       if ( self.options.hide ) {
-                                               jQuery._data( self.elem, "fxshow" + self.prop, self.start );
-                                       } else if ( self.options.show ) {
-                                               jQuery._data( self.elem, "fxshow" + self.prop, self.end );
+                                       // Apply custom fields if provided
+                                       if ( s.xhrFields ) {
+                                               for ( i in s.xhrFields ) {
+                                                       xhr[ i ] = s.xhrFields[ i ];
+                                               }
                                        }
-                               }
-                       };
 
-                       if ( t() && jQuery.timers.push(t) && !timerId ) {
-                               timerId = setInterval( fx.tick, fx.interval );
-                       }
-               },
+                                       // Override mime type if needed
+                                       if ( s.mimeType && xhr.overrideMimeType ) {
+                                               xhr.overrideMimeType( s.mimeType );
+                                       }
 
-               // Simple 'show' function
-               show: function() {
-                       var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );
+                                       // X-Requested-With header
+                                       // For cross-domain requests, seeing as conditions for a preflight are
+                                       // akin to a jigsaw puzzle, we simply never set it to be sure.
+                                       // (it can always be set on a per-request basis or even using ajaxSetup)
+                                       // For same-domain requests, won't change header if already provided.
+                                       if ( !s.crossDomain && !headers["X-Requested-With"] ) {
+                                               headers[ "X-Requested-With" ] = "XMLHttpRequest";
+                                       }
 
-                       // Remember where we started, so that we can go back to it later
-                       this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
-                       this.options.show = true;
+                                       // Need an extra try/catch for cross domain requests in Firefox 3
+                                       try {
+                                               for ( i in headers ) {
+                                                       xhr.setRequestHeader( i, headers[ i ] );
+                                               }
+                                       } catch( _ ) {}
 
-                       // Begin the animation
-                       // Make sure that we start at a small width/height to avoid any flash of content
-                       if ( dataShow !== undefined ) {
-                               // This show is picking up where a previous hide or show left off
-                               this.custom( this.cur(), dataShow );
-                       } else {
-                               this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
-                       }
+                                       // Do send the request
+                                       // This may raise an exception which is actually
+                                       // handled in jQuery.ajax (so no try/catch here)
+                                       xhr.send( ( s.hasContent && s.data ) || null );
 
-                       // Start by showing the element
-                       jQuery( this.elem ).show();
-               },
+                                       // Listener
+                                       callback = function( _, isAbort ) {
 
-               // Simple 'hide' function
-               hide: function() {
-                       // Remember where we started, so that we can go back to it later
-                       this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
-                       this.options.hide = true;
+                                               var status,
+                                                       statusText,
+                                                       responseHeaders,
+                                                       responses,
+                                                       xml;
 
-                       // Begin the animation
-                       this.custom( this.cur(), 0 );
-               },
+                                               // Firefox throws exceptions when accessing properties
+                                               // of an xhr when a network error occurred
+                                               // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
+                                               try {
 
-               // Each step of an animation
-               step: function( gotoEnd ) {
-                       var p, n, complete,
-                               t = fxNow || createFxNow(),
-                               done = true,
-                               elem = this.elem,
-                               options = this.options;
+                                                       // Was never called and is aborted or complete
+                                                       if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
 
-                       if ( gotoEnd || t >= options.duration + this.startTime ) {
-                               this.now = this.end;
-                               this.pos = this.state = 1;
-                               this.update();
+                                                               // Only called once
+                                                               callback = undefined;
 
-                               options.animatedProperties[ this.prop ] = true;
+                                                               // Do not keep as active anymore
+                                                               if ( handle ) {
+                                                                       xhr.onreadystatechange = jQuery.noop;
+                                                                       if ( xhrOnUnloadAbort ) {
+                                                                               delete xhrCallbacks[ handle ];
+                                                                       }
+                                                               }
 
-                               for ( p in options.animatedProperties ) {
-                                       if ( options.animatedProperties[ p ] !== true ) {
-                                               done = false;
-                                       }
-                               }
+                                                               // If it's an abort
+                                                               if ( isAbort ) {
+                                                                       // Abort it manually if needed
+                                                                       if ( xhr.readyState !== 4 ) {
+                                                                               xhr.abort();
+                                                                       }
+                                                               } else {
+                                                                       status = xhr.status;
+                                                                       responseHeaders = xhr.getAllResponseHeaders();
+                                                                       responses = {};
+                                                                       xml = xhr.responseXML;
+
+                                                                       // Construct response list
+                                                                       if ( xml && xml.documentElement /* #4958 */ ) {
+                                                                               responses.xml = xml;
+                                                                       }
 
-                               if ( done ) {
-                                       // Reset the overflow
-                                       if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
+                                                                       // When requesting binary data, IE6-9 will throw an exception
+                                                                       // on any attempt to access responseText (#11426)
+                                                                       try {
+                                                                               responses.text = xhr.responseText;
+                                                                       } catch( _ ) {
+                                                                       }
 
-                                               jQuery.each( [ "", "X", "Y" ], function( index, value ) {
-                                                       elem.style[ "overflow" + value ] = options.overflow[ index ];
-                                               });
-                                       }
+                                                                       // Firefox throws an exception when accessing
+                                                                       // statusText for faulty cross-domain requests
+                                                                       try {
+                                                                               statusText = xhr.statusText;
+                                                                       } catch( e ) {
+                                                                               // We normalize with Webkit giving an empty statusText
+                                                                               statusText = "";
+                                                                       }
 
-                                       // Hide the element if the "hide" operation was done
-                                       if ( options.hide ) {
-                                               jQuery( elem ).hide();
-                                       }
+                                                                       // Filter status for non standard behaviors
 
-                                       // Reset the properties, if the item has been hidden or shown
-                                       if ( options.hide || options.show ) {
-                                               for ( p in options.animatedProperties ) {
-                                                       jQuery.style( elem, p, options.orig[ p ] );
-                                                       jQuery.removeData( elem, "fxshow" + p, true );
-                                                       // Toggle data is no longer needed
-                                                       jQuery.removeData( elem, "toggle" + p, true );
+                                                                       // If the request is local and we have data: assume a success
+                                                                       // (success with no data won't get notified, that's the best we
+                                                                       // can do given current implementations)
+                                                                       if ( !status && s.isLocal && !s.crossDomain ) {
+                                                                               status = responses.text ? 200 : 404;
+                                                                       // IE - #1450: sometimes returns 1223 when it should be 204
+                                                                       } else if ( status === 1223 ) {
+                                                                               status = 204;
+                                                                       }
+                                                               }
+                                                       }
+                                               } catch( firefoxAccessException ) {
+                                                       if ( !isAbort ) {
+                                                               complete( -1, firefoxAccessException );
+                                                       }
                                                }
-                                       }
 
-                                       // Execute the complete function
-                                       // in the event that the complete function throws an exception
-                                       // we must ensure it won't be called twice. #5684
+                                               // Call complete if needed
+                                               if ( responses ) {
+                                                       complete( status, statusText, responses, responseHeaders );
+                                               }
+                                       };
 
-                                       complete = options.complete;
-                                       if ( complete ) {
+                                       if ( !s.async ) {
+                                               // if we're in sync mode we fire the callback
+                                               callback();
+                                       } else if ( xhr.readyState === 4 ) {
+                                               // (IE6 & IE7) if it's in cache and has been
+                                               // retrieved directly we need to fire the callback
+                                               setTimeout( callback, 0 );
+                                       } else {
+                                               handle = ++xhrId;
+                                               if ( xhrOnUnloadAbort ) {
+                                                       // Create the active xhrs callbacks list if needed
+                                                       // and attach the unload handler
+                                                       if ( !xhrCallbacks ) {
+                                                               xhrCallbacks = {};
+                                                               jQuery( window ).unload( xhrOnUnloadAbort );
+                                                       }
+                                                       // Add to list of active xhrs callbacks
+                                                       xhrCallbacks[ handle ] = callback;
+                                               }
+                                               xhr.onreadystatechange = callback;
+                                       }
+                               },
 
-                                               options.complete = false;
-                                               complete.call( elem );
+                               abort: function() {
+                                       if ( callback ) {
+                                               callback(0,1);
                                        }
                                }
+                       };
+               }
+       });
+}
+var fxNow, timerId,
+       rfxtypes = /^(?:toggle|show|hide)$/,
+       rfxnum = new RegExp( "^(?:([-+])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
+       rrun = /queueHooks$/,
+       animationPrefilters = [ defaultPrefilter ],
+       tweeners = {
+               "*": [function( prop, value ) {
+                       var end, unit, prevScale,
+                               tween = this.createTween( prop, value ),
+                               parts = rfxnum.exec( value ),
+                               target = tween.cur(),
+                               start = +target || 0,
+                               scale = 1;
+
+                       if ( parts ) {
+                               end = +parts[2];
+                               unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+
+                               // We need to compute starting value
+                               if ( unit !== "px" && start ) {
+                                       // Iteratively approximate from a nonzero starting point
+                                       // Prefer the current property, because this process will be trivial if it uses the same units
+                                       // Fallback to end or a simple constant
+                                       start = jQuery.css( tween.elem, prop, true ) || end || 1;
+
+                                       do {
+                                               // If previous iteration zeroed out, double until we get *something*
+                                               // Use a string for doubling factor so we don't accidentally see scale as unchanged below
+                                               prevScale = scale = scale || ".5";
+
+                                               // Adjust and apply
+                                               start = start / scale;
+                                               jQuery.style( tween.elem, prop, start + unit );
+
+                                               // Update scale, tolerating zeroes from tween.cur()
+                                               scale = tween.cur() / target;
+
+                                       // Stop looping if we've hit the mark or scale is unchanged
+                                       } while ( scale !== 1 && scale !== prevScale );
+                               }
+
+                               tween.unit = unit;
+                               tween.start = start;
+                               // If a +=/-= token was provided, we're doing a relative animation
+                               tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;
+                       }
+                       return tween;
+               }]
+       };
 
+// Animations created synchronously will run synchronously
+function createFxNow() {
+       setTimeout(function() {
+               fxNow = undefined;
+       }, 0 );
+       return ( fxNow = jQuery.now() );
+}
+
+function createTweens( animation, props ) {
+       jQuery.each( props, function( prop, value ) {
+               var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+                       index = 0,
+                       length = collection.length;
+               for ( ; index < length; index++ ) {
+                       if ( collection[ index ].call( animation, prop, value ) ) {
+
+                               // we're done with this property
+                               return;
+                       }
+               }
+       });
+}
+
+function Animation( elem, properties, options ) {
+       var result,
+               index = 0,
+               tweenerIndex = 0,
+               length = animationPrefilters.length,
+               deferred = jQuery.Deferred().always( function() {
+                       // don't match elem in the :animated selector
+                       delete tick.elem;
+               }),
+               tick = function() {
+                       var currentTime = fxNow || createFxNow(),
+                               remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+                               percent = 1 - ( remaining / animation.duration || 0 ),
+                               index = 0,
+                               length = animation.tweens.length;
+
+                       for ( ; index < length ; index++ ) {
+                               animation.tweens[ index ].run( percent );
+                       }
+
+                       deferred.notifyWith( elem, [ animation, percent, remaining ]);
+
+                       if ( percent < 1 && length ) {
+                               return remaining;
+                       } else {
+                               deferred.resolveWith( elem, [ animation ] );
                                return false;
+                       }
+               },
+               animation = deferred.promise({
+                       elem: elem,
+                       props: jQuery.extend( {}, properties ),
+                       opts: jQuery.extend( true, { specialEasing: {} }, options ),
+                       originalProperties: properties,
+                       originalOptions: options,
+                       startTime: fxNow || createFxNow(),
+                       duration: options.duration,
+                       tweens: [],
+                       createTween: function( prop, end, easing ) {
+                               var tween = jQuery.Tween( elem, animation.opts, prop, end,
+                                               animation.opts.specialEasing[ prop ] || animation.opts.easing );
+                               animation.tweens.push( tween );
+                               return tween;
+                       },
+                       stop: function( gotoEnd ) {
+                               var index = 0,
+                                       // if we are going to the end, we want to run all the tweens
+                                       // otherwise we skip this part
+                                       length = gotoEnd ? animation.tweens.length : 0;
 
-                       } else {
-                               // classical easing cannot be used with an Infinity duration
-                               if ( options.duration == Infinity ) {
-                                       this.now = t;
-                               } else {
-                                       n = t - this.startTime;
-                                       this.state = n / options.duration;
+                               for ( ; index < length ; index++ ) {
+                                       animation.tweens[ index ].run( 1 );
+                               }
 
-                                       // Perform the easing function, defaults to swing
-                                       this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
-                                       this.now = this.start + ( (this.end - this.start) * this.pos );
+                               // resolve when we played the last frame
+                               // otherwise, reject
+                               if ( gotoEnd ) {
+                                       deferred.resolveWith( elem, [ animation, gotoEnd ] );
+                               } else {
+                                       deferred.rejectWith( elem, [ animation, gotoEnd ] );
                                }
-                               // Perform the next step of the animation
-                               this.update();
+                               return this;
                        }
+               }),
+               props = animation.props;
 
-                       return true;
-               }
-       };
-
-       jQuery.extend( jQuery.fx, {
-               tick: function() {
-                       var timer,
-                               timers = jQuery.timers,
-                               i = 0;
+       propFilter( props, animation.opts.specialEasing );
 
-                       for ( ; i < timers.length; i++ ) {
-                               timer = timers[ i ];
-                               // Checks the timer has not already been removed
-                               if ( !timer() && timers[ i ] === timer ) {
-                                       timers.splice( i--, 1 );
-                               }
-                       }
+       for ( ; index < length ; index++ ) {
+               result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+               if ( result ) {
+                       return result;
+               }
+       }
 
-                       if ( !timers.length ) {
-                               jQuery.fx.stop();
-                       }
-               },
+       createTweens( animation, props );
 
-               interval: 13,
+       if ( jQuery.isFunction( animation.opts.start ) ) {
+               animation.opts.start.call( elem, animation );
+       }
 
-               stop: function() {
-                       clearInterval( timerId );
-                       timerId = null;
-               },
+       jQuery.fx.timer(
+               jQuery.extend( tick, {
+                       anim: animation,
+                       queue: animation.opts.queue,
+                       elem: elem
+               })
+       );
+
+       // attach callbacks from options
+       return animation.progress( animation.opts.progress )
+               .done( animation.opts.done, animation.opts.complete )
+               .fail( animation.opts.fail )
+               .always( animation.opts.always );
+}
+
+function propFilter( props, specialEasing ) {
+       var index, name, easing, value, hooks;
+
+       // camelCase, specialEasing and expand cssHook pass
+       for ( index in props ) {
+               name = jQuery.camelCase( index );
+               easing = specialEasing[ name ];
+               value = props[ index ];
+               if ( jQuery.isArray( value ) ) {
+                       easing = value[ 1 ];
+                       value = props[ index ] = value[ 0 ];
+               }
 
-               speeds: {
-                       slow: 600,
-                       fast: 200,
-                       // Default speed
-                       _default: 400
-               },
+               if ( index !== name ) {
+                       props[ name ] = value;
+                       delete props[ index ];
+               }
 
-               step: {
-                       opacity: function( fx ) {
-                               jQuery.style( fx.elem, "opacity", fx.now );
-                       },
+               hooks = jQuery.cssHooks[ name ];
+               if ( hooks && "expand" in hooks ) {
+                       value = hooks.expand( value );
+                       delete props[ name ];
 
-                       _default: function( fx ) {
-                               if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
-                                       fx.elem.style[ fx.prop ] = fx.now + fx.unit;
-                               } else {
-                                       fx.elem[ fx.prop ] = fx.now;
+                       // not quite $.extend, this wont overwrite keys already present.
+                       // also - reusing 'index' from above because we have the correct "name"
+                       for ( index in value ) {
+                               if ( !( index in props ) ) {
+                                       props[ index ] = value[ index ];
+                                       specialEasing[ index ] = easing;
                                }
                        }
+               } else {
+                       specialEasing[ name ] = easing;
                }
-       });
+       }
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+       tweener: function( props, callback ) {
+               if ( jQuery.isFunction( props ) ) {
+                       callback = props;
+                       props = [ "*" ];
+               } else {
+                       props = props.split(" ");
+               }
+
+               var prop,
+                       index = 0,
+                       length = props.length;
+
+               for ( ; index < length ; index++ ) {
+                       prop = props[ index ];
+                       tweeners[ prop ] = tweeners[ prop ] || [];
+                       tweeners[ prop ].unshift( callback );
+               }
+       },
 
-// Ensure props that can't be negative don't go there on undershoot easing
-       jQuery.each( fxAttrs.concat.apply( [], fxAttrs ), function( i, prop ) {
-               // exclude marginTop, marginLeft, marginBottom and marginRight from this list
-               if ( prop.indexOf( "margin" ) ) {
-                       jQuery.fx.step[ prop ] = function( fx ) {
-                               jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );
+       prefilter: function( callback, prepend ) {
+               if ( prepend ) {
+                       animationPrefilters.unshift( callback );
+               } else {
+                       animationPrefilters.push( callback );
+               }
+       }
+});
+
+function defaultPrefilter( elem, props, opts ) {
+       var index, prop, value, length, dataShow, tween, hooks, oldfire,
+               anim = this,
+               style = elem.style,
+               orig = {},
+               handled = [],
+               hidden = elem.nodeType && isHidden( elem );
+
+       // handle queue: false promises
+       if ( !opts.queue ) {
+               hooks = jQuery._queueHooks( elem, "fx" );
+               if ( hooks.unqueued == null ) {
+                       hooks.unqueued = 0;
+                       oldfire = hooks.empty.fire;
+                       hooks.empty.fire = function() {
+                               if ( !hooks.unqueued ) {
+                                       oldfire();
+                               }
                        };
                }
-       });
+               hooks.unqueued++;
 
-       if ( jQuery.expr && jQuery.expr.filters ) {
-               jQuery.expr.filters.animated = function( elem ) {
-                       return jQuery.grep(jQuery.timers, function( fn ) {
-                               return elem === fn.elem;
-                       }).length;
-               };
+               anim.always(function() {
+                       // doing this makes sure that the complete handler will be called
+                       // before this completes
+                       anim.always(function() {
+                               hooks.unqueued--;
+                               if ( !jQuery.queue( elem, "fx" ).length ) {
+                                       hooks.empty.fire();
+                               }
+                       });
+               });
        }
 
-// Try to restore the default display value of an element
-       function defaultDisplay( nodeName ) {
+       // height/width overflow pass
+       if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+               // Make sure that nothing sneaks out
+               // Record all 3 overflow attributes because IE does not
+               // change the overflow attribute when overflowX and
+               // overflowY are set to the same value
+               opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
 
-               if ( !elemdisplay[ nodeName ] ) {
+               // Set display property to inline-block for height/width
+               // animations on inline elements that are having width/height animated
+               if ( jQuery.css( elem, "display" ) === "inline" &&
+                               jQuery.css( elem, "float" ) === "none" ) {
 
-                       var body = document.body,
-                               elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
-                               display = elem.css( "display" );
-                       elem.remove();
+                       // inline-level elements accept inline-block;
+                       // block-level elements need to be inline with layout
+                       if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
+                               style.display = "inline-block";
 
-                       // If the simple way fails,
-                       // get element's real default display by attaching it to a temp iframe
-                       if ( display === "none" || display === "" ) {
-                               // No iframe to use yet, so create it
-                               if ( !iframe ) {
-                                       iframe = document.createElement( "iframe" );
-                                       iframe.frameBorder = iframe.width = iframe.height = 0;
-                               }
+                       } else {
+                               style.zoom = 1;
+                       }
+               }
+       }
 
-                               body.appendChild( iframe );
+       if ( opts.overflow ) {
+               style.overflow = "hidden";
+               if ( !jQuery.support.shrinkWrapBlocks ) {
+                       anim.done(function() {
+                               style.overflow = opts.overflow[ 0 ];
+                               style.overflowX = opts.overflow[ 1 ];
+                               style.overflowY = opts.overflow[ 2 ];
+                       });
+               }
+       }
 
-                               // Create a cacheable copy of the iframe document on first call.
-                               // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
-                               // document to it; WebKit & Firefox won't allow reusing the iframe document.
-                               if ( !iframeDoc || !iframe.createElement ) {
-                                       iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
-                                       iframeDoc.write( ( jQuery.support.boxModel ? "<!doctype html>" : "" ) + "<html><body>" );
-                                       iframeDoc.close();
-                               }
 
-                               elem = iframeDoc.createElement( nodeName );
+       // show/hide pass
+       for ( index in props ) {
+               value = props[ index ];
+               if ( rfxtypes.exec( value ) ) {
+                       delete props[ index ];
+                       if ( value === ( hidden ? "hide" : "show" ) ) {
+                               continue;
+                       }
+                       handled.push( index );
+               }
+       }
 
-                               iframeDoc.body.appendChild( elem );
+       length = handled.length;
+       if ( length ) {
+               dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
+               if ( hidden ) {
+                       jQuery( elem ).show();
+               } else {
+                       anim.done(function() {
+                               jQuery( elem ).hide();
+                       });
+               }
+               anim.done(function() {
+                       var prop;
+                       jQuery.removeData( elem, "fxshow", true );
+                       for ( prop in orig ) {
+                               jQuery.style( elem, prop, orig[ prop ] );
+                       }
+               });
+               for ( index = 0 ; index < length ; index++ ) {
+                       prop = handled[ index ];
+                       tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );
+                       orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );
 
-                               display = jQuery.css( elem, "display" );
-                               body.removeChild( iframe );
+                       if ( !( prop in dataShow ) ) {
+                               dataShow[ prop ] = tween.start;
+                               if ( hidden ) {
+                                       tween.end = tween.start;
+                                       tween.start = prop === "width" || prop === "height" ? 1 : 0;
+                               }
                        }
+               }
+       }
+}
+
+function Tween( elem, options, prop, end, easing ) {
+       return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+       constructor: Tween,
+       init: function( elem, options, prop, end, easing, unit ) {
+               this.elem = elem;
+               this.prop = prop;
+               this.easing = easing || "swing";
+               this.options = options;
+               this.start = this.now = this.cur();
+               this.end = end;
+               this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+       },
+       cur: function() {
+               var hooks = Tween.propHooks[ this.prop ];
+
+               return hooks && hooks.get ?
+                       hooks.get( this ) :
+                       Tween.propHooks._default.get( this );
+       },
+       run: function( percent ) {
+               var eased,
+                       hooks = Tween.propHooks[ this.prop ];
+
+               if ( this.options.duration ) {
+                       this.pos = eased = jQuery.easing[ this.easing ](
+                               percent, this.options.duration * percent, 0, 1, this.options.duration
+                       );
+               } else {
+                       this.pos = eased = percent;
+               }
+               this.now = ( this.end - this.start ) * eased + this.start;
 
-                       // Store the correct default display
-                       elemdisplay[ nodeName ] = display;
+               if ( this.options.step ) {
+                       this.options.step.call( this.elem, this.now, this );
                }
 
-               return elemdisplay[ nodeName ];
+               if ( hooks && hooks.set ) {
+                       hooks.set( this );
+               } else {
+                       Tween.propHooks._default.set( this );
+               }
+               return this;
        }
+};
 
+Tween.prototype.init.prototype = Tween.prototype;
 
+Tween.propHooks = {
+       _default: {
+               get: function( tween ) {
+                       var result;
 
+                       if ( tween.elem[ tween.prop ] != null &&
+                               (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+                               return tween.elem[ tween.prop ];
+                       }
 
-       var getOffset,
-               rtable = /^t(?:able|d|h)$/i,
-               rroot = /^(?:body|html)$/i;
+                       // passing any value as a 4th parameter to .css will automatically
+                       // attempt a parseFloat and fallback to a string if the parse fails
+                       // so, simple values such as "10px" are parsed to Float.
+                       // complex values such as "rotate(1rad)" are returned as is.
+                       result = jQuery.css( tween.elem, tween.prop, false, "" );
+                       // Empty strings, null, undefined and "auto" are converted to 0.
+                       return !result || result === "auto" ? 0 : result;
+               },
+               set: function( tween ) {
+                       // use step hook for back compat - use cssHook if its there - use .style if its
+                       // available and use plain properties where available
+                       if ( jQuery.fx.step[ tween.prop ] ) {
+                               jQuery.fx.step[ tween.prop ]( tween );
+                       } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+                               jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+                       } else {
+                               tween.elem[ tween.prop ] = tween.now;
+                       }
+               }
+       }
+};
 
-       if ( "getBoundingClientRect" in document.documentElement ) {
-               getOffset = function( elem, doc, docElem, box ) {
-                       try {
-                               box = elem.getBoundingClientRect();
-                       } catch(e) {}
+// Remove in 2.0 - this supports IE8's panic based approach
+// to setting things on disconnected nodes
 
-                       // Make sure we're not dealing with a disconnected DOM node
-                       if ( !box || !jQuery.contains( docElem, elem ) ) {
-                               return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
-                       }
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+       set: function( tween ) {
+               if ( tween.elem.nodeType && tween.elem.parentNode ) {
+                       tween.elem[ tween.prop ] = tween.now;
+               }
+       }
+};
+
+jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+       var cssFn = jQuery.fn[ name ];
+       jQuery.fn[ name ] = function( speed, easing, callback ) {
+               return speed == null || typeof speed === "boolean" ||
+                       // special check for .toggle( handler, handler, ... )
+                       ( !i && jQuery.isFunction( speed ) && jQuery.isFunction( easing ) ) ?
+                       cssFn.apply( this, arguments ) :
+                       this.animate( genFx( name, true ), speed, easing, callback );
+       };
+});
 
-                       var body = doc.body,
-                               win = getWindow( doc ),
-                               clientTop  = docElem.clientTop  || body.clientTop  || 0,
-                               clientLeft = docElem.clientLeft || body.clientLeft || 0,
-                               scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
-                               scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
-                               top  = box.top  + scrollTop  - clientTop,
-                               left = box.left + scrollLeft - clientLeft;
+jQuery.fn.extend({
+       fadeTo: function( speed, to, easing, callback ) {
 
-                       return { top: top, left: left };
-               };
+               // show any hidden elements after setting opacity to 0
+               return this.filter( isHidden ).css( "opacity", 0 ).show()
 
-       } else {
-               getOffset = function( elem, doc, docElem ) {
-                       var computedStyle,
-                               offsetParent = elem.offsetParent,
-                               prevOffsetParent = elem,
-                               body = doc.body,
-                               defaultView = doc.defaultView,
-                               prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
-                               top = elem.offsetTop,
-                               left = elem.offsetLeft;
-
-                       while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
-                               if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
-                                       break;
+                       // animate to the value specified
+                       .end().animate({ opacity: to }, speed, easing, callback );
+       },
+       animate: function( prop, speed, easing, callback ) {
+               var empty = jQuery.isEmptyObject( prop ),
+                       optall = jQuery.speed( speed, easing, callback ),
+                       doAnimation = function() {
+                               // Operate on a copy of prop so per-property easing won't be lost
+                               var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+                               // Empty animations resolve immediately
+                               if ( empty ) {
+                                       anim.stop( true );
                                }
+                       };
 
-                               computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
-                               top  -= elem.scrollTop;
-                               left -= elem.scrollLeft;
+               return empty || optall.queue === false ?
+                       this.each( doAnimation ) :
+                       this.queue( optall.queue, doAnimation );
+       },
+       stop: function( type, clearQueue, gotoEnd ) {
+               var stopQueue = function( hooks ) {
+                       var stop = hooks.stop;
+                       delete hooks.stop;
+                       stop( gotoEnd );
+               };
 
-                               if ( elem === offsetParent ) {
-                                       top  += elem.offsetTop;
-                                       left += elem.offsetLeft;
+               if ( typeof type !== "string" ) {
+                       gotoEnd = clearQueue;
+                       clearQueue = type;
+                       type = undefined;
+               }
+               if ( clearQueue && type !== false ) {
+                       this.queue( type || "fx", [] );
+               }
 
-                                       if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
-                                               top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-                                               left += parseFloat( computedStyle.borderLeftWidth ) || 0;
-                                       }
+               return this.each(function() {
+                       var dequeue = true,
+                               index = type != null && type + "queueHooks",
+                               timers = jQuery.timers,
+                               data = jQuery._data( this );
 
-                                       prevOffsetParent = offsetParent;
-                                       offsetParent = elem.offsetParent;
+                       if ( index ) {
+                               if ( data[ index ] && data[ index ].stop ) {
+                                       stopQueue( data[ index ] );
                                }
-
-                               if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
-                                       top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-                                       left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+                       } else {
+                               for ( index in data ) {
+                                       if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+                                               stopQueue( data[ index ] );
+                                       }
                                }
-
-                               prevComputedStyle = computedStyle;
                        }
 
-                       if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
-                               top  += body.offsetTop;
-                               left += body.offsetLeft;
+                       for ( index = timers.length; index--; ) {
+                               if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+                                       timers[ index ].anim.stop( gotoEnd );
+                                       dequeue = false;
+                                       timers.splice( index, 1 );
+                               }
                        }
 
-                       if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
-                               top  += Math.max( docElem.scrollTop, body.scrollTop );
-                               left += Math.max( docElem.scrollLeft, body.scrollLeft );
+                       // start the next in the queue if the last step wasn't forced
+                       // timers currently will call their complete callbacks, which will dequeue
+                       // but only if they were gotoEnd
+                       if ( dequeue || !gotoEnd ) {
+                               jQuery.dequeue( this, type );
                        }
+               });
+       }
+});
 
-                       return { top: top, left: left };
-               };
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+       var which,
+               attrs = { height: type },
+               i = 0;
+
+       // if we include width, step value is 1 to do all cssExpand values,
+       // if we don't include width, step value is 2 to skip over Left and Right
+       includeWidth = includeWidth? 1 : 0;
+       for( ; i < 4 ; i += 2 - includeWidth ) {
+               which = cssExpand[ i ];
+               attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
        }
 
-       jQuery.fn.offset = function( options ) {
-               if ( arguments.length ) {
-                       return options === undefined ?
-                               this :
-                               this.each(function( i ) {
-                                       jQuery.offset.setOffset( this, options, i );
-                               });
-               }
+       if ( includeWidth ) {
+               attrs.opacity = attrs.width = type;
+       }
 
-               var elem = this[0],
-                       doc = elem && elem.ownerDocument;
+       return attrs;
+}
 
-               if ( !doc ) {
-                       return null;
-               }
+// Generate shortcuts for custom animations
+jQuery.each({
+       slideDown: genFx("show"),
+       slideUp: genFx("hide"),
+       slideToggle: genFx("toggle"),
+       fadeIn: { opacity: "show" },
+       fadeOut: { opacity: "hide" },
+       fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+       jQuery.fn[ name ] = function( speed, easing, callback ) {
+               return this.animate( props, speed, easing, callback );
+       };
+});
+
+jQuery.speed = function( speed, easing, fn ) {
+       var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+               complete: fn || !fn && easing ||
+                       jQuery.isFunction( speed ) && speed,
+               duration: speed,
+               easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+       };
+
+       opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+               opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
 
-               if ( elem === doc.body ) {
-                       return jQuery.offset.bodyOffset( elem );
+       // normalize opt.queue - true/undefined/null -> "fx"
+       if ( opt.queue == null || opt.queue === true ) {
+               opt.queue = "fx";
+       }
+
+       // Queueing
+       opt.old = opt.complete;
+
+       opt.complete = function() {
+               if ( jQuery.isFunction( opt.old ) ) {
+                       opt.old.call( this );
                }
 
-               return getOffset( elem, doc, doc.documentElement );
+               if ( opt.queue ) {
+                       jQuery.dequeue( this, opt.queue );
+               }
        };
 
-       jQuery.offset = {
+       return opt;
+};
 
-               bodyOffset: function( body ) {
-                       var top = body.offsetTop,
-                               left = body.offsetLeft;
+jQuery.easing = {
+       linear: function( p ) {
+               return p;
+       },
+       swing: function( p ) {
+               return 0.5 - Math.cos( p*Math.PI ) / 2;
+       }
+};
+
+jQuery.timers = [];
+jQuery.fx = Tween.prototype.init;
+jQuery.fx.tick = function() {
+       var timer,
+               timers = jQuery.timers,
+               i = 0;
+
+       for ( ; i < timers.length; i++ ) {
+               timer = timers[ i ];
+               // Checks the timer has not already been removed
+               if ( !timer() && timers[ i ] === timer ) {
+                       timers.splice( i--, 1 );
+               }
+       }
 
-                       if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
-                               top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
-                               left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
-                       }
+       if ( !timers.length ) {
+               jQuery.fx.stop();
+       }
+};
 
-                       return { top: top, left: left };
-               },
+jQuery.fx.timer = function( timer ) {
+       if ( timer() && jQuery.timers.push( timer ) && !timerId ) {
+               timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+       }
+};
+
+jQuery.fx.interval = 13;
+
+jQuery.fx.stop = function() {
+       clearInterval( timerId );
+       timerId = null;
+};
+
+jQuery.fx.speeds = {
+       slow: 600,
+       fast: 200,
+       // Default speed
+       _default: 400
+};
+
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+       jQuery.expr.filters.animated = function( elem ) {
+               return jQuery.grep(jQuery.timers, function( fn ) {
+                       return elem === fn.elem;
+               }).length;
+       };
+}
+var rroot = /^(?:body|html)$/i;
+
+jQuery.fn.offset = function( options ) {
+       if ( arguments.length ) {
+               return options === undefined ?
+                       this :
+                       this.each(function( i ) {
+                               jQuery.offset.setOffset( this, options, i );
+                       });
+       }
 
-               setOffset: function( elem, options, i ) {
-                       var position = jQuery.css( elem, "position" );
+       var box, docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft, top, left,
+               elem = this[ 0 ],
+               doc = elem && elem.ownerDocument;
 
-                       // set position first, in-case top/left are set even on static elem
-                       if ( position === "static" ) {
-                               elem.style.position = "relative";
-                       }
+       if ( !doc ) {
+               return;
+       }
 
-                       var curElem = jQuery( elem ),
-                               curOffset = curElem.offset(),
-                               curCSSTop = jQuery.css( elem, "top" ),
-                               curCSSLeft = jQuery.css( elem, "left" ),
-                               calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
-                               props = {}, curPosition = {}, curTop, curLeft;
+       if ( (body = doc.body) === elem ) {
+               return jQuery.offset.bodyOffset( elem );
+       }
 
-                       // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
-                       if ( calculatePosition ) {
-                               curPosition = curElem.position();
-                               curTop = curPosition.top;
-                               curLeft = curPosition.left;
-                       } else {
-                               curTop = parseFloat( curCSSTop ) || 0;
-                               curLeft = parseFloat( curCSSLeft ) || 0;
-                       }
+       docElem = doc.documentElement;
 
-                       if ( jQuery.isFunction( options ) ) {
-                               options = options.call( elem, i, curOffset );
-                       }
+       // Make sure we're not dealing with a disconnected DOM node
+       if ( !jQuery.contains( docElem, elem ) ) {
+               return { top: 0, left: 0 };
+       }
 
-                       if ( options.top != null ) {
-                               props.top = ( options.top - curOffset.top ) + curTop;
-                       }
-                       if ( options.left != null ) {
-                               props.left = ( options.left - curOffset.left ) + curLeft;
-                       }
+       box = elem.getBoundingClientRect();
+       win = getWindow( doc );
+       clientTop  = docElem.clientTop  || body.clientTop  || 0;
+       clientLeft = docElem.clientLeft || body.clientLeft || 0;
+       scrollTop  = win.pageYOffset || docElem.scrollTop;
+       scrollLeft = win.pageXOffset || docElem.scrollLeft;
+       top  = box.top  + scrollTop  - clientTop;
+       left = box.left + scrollLeft - clientLeft;
 
-                       if ( "using" in options ) {
-                               options.using.call( elem, props );
-                       } else {
-                               curElem.css( props );
-                       }
+       return { top: top, left: left };
+};
+
+jQuery.offset = {
+
+       bodyOffset: function( body ) {
+               var top = body.offsetTop,
+                       left = body.offsetLeft;
+
+               if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
+                       top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
+                       left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
                }
-       };
 
+               return { top: top, left: left };
+       },
 
-       jQuery.fn.extend({
+       setOffset: function( elem, options, i ) {
+               var position = jQuery.css( elem, "position" );
 
-               position: function() {
-                       if ( !this[0] ) {
-                               return null;
-                       }
+               // set position first, in-case top/left are set even on static elem
+               if ( position === "static" ) {
+                       elem.style.position = "relative";
+               }
 
-                       var elem = this[0],
+               var curElem = jQuery( elem ),
+                       curOffset = curElem.offset(),
+                       curCSSTop = jQuery.css( elem, "top" ),
+                       curCSSLeft = jQuery.css( elem, "left" ),
+                       calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
+                       props = {}, curPosition = {}, curTop, curLeft;
+
+               // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+               if ( calculatePosition ) {
+                       curPosition = curElem.position();
+                       curTop = curPosition.top;
+                       curLeft = curPosition.left;
+               } else {
+                       curTop = parseFloat( curCSSTop ) || 0;
+                       curLeft = parseFloat( curCSSLeft ) || 0;
+               }
 
-                       // Get *real* offsetParent
-                               offsetParent = this.offsetParent(),
+               if ( jQuery.isFunction( options ) ) {
+                       options = options.call( elem, i, curOffset );
+               }
 
-                       // Get correct offsets
-                               offset       = this.offset(),
-                               parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+               if ( options.top != null ) {
+                       props.top = ( options.top - curOffset.top ) + curTop;
+               }
+               if ( options.left != null ) {
+                       props.left = ( options.left - curOffset.left ) + curLeft;
+               }
 
-                       // Subtract element margins
-                       // note: when an element has margin: auto the offsetLeft and marginLeft
-                       // are the same in Safari causing offset.left to incorrectly be 0
-                       offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
-                       offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+               if ( "using" in options ) {
+                       options.using.call( elem, props );
+               } else {
+                       curElem.css( props );
+               }
+       }
+};
 
-                       // Add offsetParent borders
-                       parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
-                       parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
 
-                       // Subtract the two offsets
-                       return {
-                               top:  offset.top  - parentOffset.top,
-                               left: offset.left - parentOffset.left
-                       };
-               },
+jQuery.fn.extend({
 
-               offsetParent: function() {
-                       return this.map(function() {
-                               var offsetParent = this.offsetParent || document.body;
-                               while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
-                                       offsetParent = offsetParent.offsetParent;
-                               }
-                               return offsetParent;
-                       });
+       position: function() {
+               if ( !this[0] ) {
+                       return;
                }
-       });
 
+               var elem = this[0],
 
-// Create scrollLeft and scrollTop methods
-       jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
-               var top = /Y/.test( prop );
-
-               jQuery.fn[ method ] = function( val ) {
-                       return jQuery.access( this, function( elem, method, val ) {
-                               var win = getWindow( elem );
-
-                               if ( val === undefined ) {
-                                       return win ? (prop in win) ? win[ prop ] :
-                                               jQuery.support.boxModel && win.document.documentElement[ method ] ||
-                                                       win.document.body[ method ] :
-                                               elem[ method ];
-                               }
+               // Get *real* offsetParent
+               offsetParent = this.offsetParent(),
 
-                               if ( win ) {
-                                       win.scrollTo(
-                                               !top ? val : jQuery( win ).scrollLeft(),
-                                               top ? val : jQuery( win ).scrollTop()
-                                       );
+               // Get correct offsets
+               offset       = this.offset(),
+               parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
 
-                               } else {
-                                       elem[ method ] = val;
-                               }
-                       }, method, val, arguments.length, null );
+               // Subtract element margins
+               // note: when an element has margin: auto the offsetLeft and marginLeft
+               // are the same in Safari causing offset.left to incorrectly be 0
+               offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
+               offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+
+               // Add offsetParent borders
+               parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
+               parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
+
+               // Subtract the two offsets
+               return {
+                       top:  offset.top  - parentOffset.top,
+                       left: offset.left - parentOffset.left
                };
-       });
+       },
 
-       function getWindow( elem ) {
-               return jQuery.isWindow( elem ) ?
-                       elem :
-                       elem.nodeType === 9 ?
-                               elem.defaultView || elem.parentWindow :
-                               false;
+       offsetParent: function() {
+               return this.map(function() {
+                       var offsetParent = this.offsetParent || document.body;
+                       while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+                               offsetParent = offsetParent.offsetParent;
+                       }
+                       return offsetParent || document.body;
+               });
        }
+});
 
 
+// Create scrollLeft and scrollTop methods
+jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
+       var top = /Y/.test( prop );
 
+       jQuery.fn[ method ] = function( val ) {
+               return jQuery.access( this, function( elem, method, val ) {
+                       var win = getWindow( elem );
 
-// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
-       jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
-               var clientProp = "client" + name,
-                       scrollProp = "scroll" + name,
-                       offsetProp = "offset" + name;
+                       if ( val === undefined ) {
+                               return win ? (prop in win) ? win[ prop ] :
+                                       win.document.documentElement[ method ] :
+                                       elem[ method ];
+                       }
 
-               // innerHeight and innerWidth
-               jQuery.fn[ "inner" + name ] = function() {
-                       var elem = this[0];
-                       return elem ?
-                               elem.style ?
-                                       parseFloat( jQuery.css( elem, type, "padding" ) ) :
-                                       this[ type ]() :
-                               null;
-               };
+                       if ( win ) {
+                               win.scrollTo(
+                                       !top ? val : jQuery( win ).scrollLeft(),
+                                        top ? val : jQuery( win ).scrollTop()
+                               );
 
-               // outerHeight and outerWidth
-               jQuery.fn[ "outer" + name ] = function( margin ) {
-                       var elem = this[0];
-                       return elem ?
-                               elem.style ?
-                                       parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
-                                       this[ type ]() :
-                               null;
-               };
+                       } else {
+                               elem[ method ] = val;
+                       }
+               }, method, val, arguments.length, null );
+       };
+});
+
+function getWindow( elem ) {
+       return jQuery.isWindow( elem ) ?
+               elem :
+               elem.nodeType === 9 ?
+                       elem.defaultView || elem.parentWindow :
+                       false;
+}
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+       jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
+               // margin is only for outerHeight, outerWidth
+               jQuery.fn[ funcName ] = function( margin, value ) {
+                       var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+                               extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
 
-               jQuery.fn[ type ] = function( value ) {
                        return jQuery.access( this, function( elem, type, value ) {
-                               var doc, docElemProp, orig, ret;
+                               var doc;
 
                                if ( jQuery.isWindow( elem ) ) {
-                                       // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
-                                       doc = elem.document;
-                                       docElemProp = doc.documentElement[ clientProp ];
-                                       return jQuery.support.boxModel && docElemProp ||
-                                               doc.body && doc.body[ clientProp ] || docElemProp;
+                                       // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+                                       // isn't a whole lot we can do. See pull request at this URL for discussion:
+                                       // https://github.com/jquery/jquery/pull/764
+                                       return elem.document.documentElement[ "client" + name ];
                                }
 
                                // Get document width or height
                                if ( elem.nodeType === 9 ) {
-                                       // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
                                        doc = elem.documentElement;
 
-                                       // when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height]
-                                       // so we can't use max, as it'll choose the incorrect offset[Width/Height]
-                                       // instead we use the correct client[Width/Height]
-                                       // support:IE6
-                                       if ( doc[ clientProp ] >= doc[ scrollProp ] ) {
-                                               return doc[ clientProp ];
-                                       }
-
+                                       // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
+                                       // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
                                        return Math.max(
-                                               elem.body[ scrollProp ], doc[ scrollProp ],
-                                               elem.body[ offsetProp ], doc[ offsetProp ]
+                                               elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+                                               elem.body[ "offset" + name ], doc[ "offset" + name ],
+                                               doc[ "client" + name ]
                                        );
                                }
 
-                               // Get width or height on the element
-                               if ( value === undefined ) {
-                                       orig = jQuery.css( elem, type );
-                                       ret = parseFloat( orig );
-                                       return jQuery.isNumeric( ret ) ? ret : orig;
-                               }
+                               return value === undefined ?
+                                       // Get width or height on the element, requesting but not forcing parseFloat
+                                       jQuery.css( elem, type, value, extra ) :
 
-                               // Set the width or height on the element
-                               jQuery( elem ).css( type, value );
-                       }, type, value, arguments.length, null );
+                                       // Set width or height on the element
+                                       jQuery.style( elem, type, value, extra );
+                       }, type, chainable ? margin : undefined, chainable, null );
                };
        });
-
-
-
-
+});
 // Expose jQuery to the global object
-       window.jQuery = window.$ = jQuery;
+window.jQuery = window.$ = jQuery;
 
 // Expose jQuery as an AMD module, but only for AMD loaders that
 // understand the issues with loading multiple versions of jQuery
 // file names, and jQuery is normally delivered in a lowercase file name.
 // Do this after creating the global so that if an AMD module wants to call
 // noConflict to hide this version of jQuery, it will work.
-       if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
-               define( "jquery", [], function () { return jQuery; } );
-       }
-
-
+if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
+       define( "jquery", [], function () { return jQuery; } );
+}
 
 })( window );
index 33f8752..0a4d364 100644 (file)
 $.fn.makeCollapsible = function () {
 
        return this.each(function () {
-               var lpx = 'jquery.makeCollapsible> ';
 
                // Define reused variables and functions
                var $toggle,
+                       lpx = 'jquery.makeCollapsible> ',
                        $that = $(this).addClass( 'mw-collapsible' ), // case: $( '#myAJAXelement' ).makeCollapsible()
                        that = this,
                        collapsetext = $(this).attr( 'data-collapsetext' ),
@@ -230,7 +230,7 @@ $.fn.makeCollapsible = function () {
                                .parent()
                                .prepend( '&nbsp;[' )
                                .append( ']&nbsp;' )
-                               .bind( 'click.mw-collapse', function (e) {
+                               .on( 'click.mw-collapse', function ( e ) {
                                        toggleLinkDefault( this, e );
                                } );
 
@@ -252,7 +252,7 @@ $.fn.makeCollapsible = function () {
 
                        // Double check that there is actually a customtoggle link
                        if ( $customTogglers.length ) {
-                               $customTogglers.bind( 'click.mw-collapse', function ( e ) {
+                               $customTogglers.on( 'click.mw-collapse', function ( e ) {
                                        toggleLinkCustom( $(this), e, $that );
                                } );
                        } else {
@@ -279,7 +279,7 @@ $.fn.makeCollapsible = function () {
                                if ( !$toggle.length ) {
                                        $firstRowCells.eq(-1).prepend( $toggleLink );
                                } else {
-                                       $toggleLink = $toggle.unbind( 'click.mw-collapse' ).bind( 'click.mw-collapse', function ( e ) {
+                                       $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e ) {
                                                toggleLinkPremade( $toggle, e );
                                        } );
                                }
@@ -300,7 +300,7 @@ $.fn.makeCollapsible = function () {
                                        }
                                        $that.prepend( $toggleLink.wrap( '<li class="mw-collapsible-toggle-li"></li>' ).parent() );
                                } else {
-                                       $toggleLink = $toggle.unbind( 'click.mw-collapse' ).bind( 'click.mw-collapse', function ( e ) {
+                                       $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e ) {
                                                toggleLinkPremade( $toggle, e );
                                        } );
                                }
@@ -319,7 +319,7 @@ $.fn.makeCollapsible = function () {
                                if ( !$toggle.length ) {
                                        $that.prepend( $toggleLink );
                                } else {
-                                       $toggleLink = $toggle.unbind( 'click.mw-collapse' ).bind( 'click.mw-collapse', function ( e ) {
+                                       $toggleLink = $toggle.off( 'click.mw-collapse' ).on( 'click.mw-collapse', function ( e ) {
                                                toggleLinkPremade( $toggle, e );
                                        } );
                                }
index aa356c4..7badb11 100644 (file)
@@ -40,7 +40,7 @@
                                // Hide on focus
                                // Also listen for other events in case $input was
                                // already focused when the events were bound
-                               .bind( 'focus drop keydown paste', function ( e ) {
+                               .on( 'focus drop keydown paste', function ( e ) {
                                        if ( $input.hasClass( 'placeholder' ) ) {
                                                if ( e.type === 'drop' && e.originalEvent.dataTransfer ) {
                                                        // Support for drag&drop. Instead of inserting the dropped
index 150a51b..4a77528 100644 (file)
@@ -1,12 +1,40 @@
 .mw-spinner {
+       background-color: transparent;
+       background-position: center center;
+       background-repeat: no-repeat;
+}
+
+.mw-spinner-small {
        /* @embed */
-       background: transparent url(images/spinner.gif);
+       background-image: url(images/spinner.gif);
        height: 20px;
        width: 20px;
+       /* Avoid issues with .mw-spinner-block when floated without width. */
+       min-width: 20px;
+}
+
+.mw-spinner-large {
+       /* @embed */
+       background-image: url(images/spinner-large.gif);
+       height: 32px;
+       width: 32px;
+       /* Avoid issues with .mw-spinner-block when floated without width. */
+       min-width: 32px;
+}
+
+.mw-spinner-block {
+       display: block;
+       /* This overrides width from .mw-spinner-large / .mw-spinner-small,
+        * This is where the min-width kicks in.
+        */
+       width: 100%;
+}
+
+.mw-spinner-inline {
        display: inline-block;
        vertical-align: middle;
        
-       /* IE < 8 Hacks */
+       /* IE < 8 */
        zoom: 1;
        *display: inline;
-}
\ No newline at end of file
+}
index e8b683e..93e30b9 100644 (file)
@@ -5,40 +5,91 @@
  */
 ( function ( $ ) {
 
-       $.extend( {
+       // Default options for new spinners,
+       // stored outside the function to share between calls.
+       var defaults = {
+               id: undefined,
+               size: 'small',
+               type: 'inline'
+       };
+
+       $.extend({
                /**
                 * Creates a spinner element.
                 *
-                * @param id {String} id of the spinner
-                * @return {jQuery} spinner
+                * The argument is an object with options used to construct the spinner. These can be:
+                *
+                * It is a good practice to keep a reference to the created spinner to be able to remove it later.
+                * Alternatively one can use the id option and removeSpinner() (but make sure to choose an id
+                * that's unlikely to cause conflicts, e.g. with extensions, gadgets or user scripts).
+                *
+                * CSS classes used:
+                *   .mw-spinner for every spinner
+                *   .mw-spinner-small / .mw-spinner-large for size
+                *   .mw-spinner-block / .mw-spinner-inline for display types
+                *
+                * @example
+                *   // Create a large spinner reserving all available horizontal space.
+                *   var $spinner = $.createSpinner({ size: 'large', type: 'block' });
+                *   // Insert above page content.
+                *   $( '#mw-content-text' ).prepend( $spinner );
+                * @example
+                *   // Place a small inline spinner next to the "Save" button
+                *   var $spinner = $.createSpinner({ size: 'small', type: 'inline' });
+                *   // Alternatively, just `$.createSpinner();` as these are the default options.
+                *   $( '#wpSave' ).after( $spinner );
+                * @example
+                *   // The following two are equivalent:
+                *   $.createSpinner( 'magic' );
+                *   $.createSpinner({ id: 'magic' });
+                *
+                * @param {Object|String} opts [optional] ID string or options:
+                *  - id: If given, spinner will be given an id of "mw-spinner-<id>"
+                *  - size: 'small' (default) or 'large' for a 20-pixel or 32-pixel spinner
+                *  - type: 'inline' (default) or 'block'. Inline creates an inline-block with width and
+                *    height equal to spinner size. Block is a block-level element with width 100%, height
+                *    equal to spinner size.
+                * @return {jQuery}
                 */
-               createSpinner: function ( id ) {
-                       return $( '<div>' ).attr( {
-                               id: 'mw-spinner-' + id,
-                               'class': 'mw-spinner',
-                               title: '...'
-                       } );
+               createSpinner: function ( opts ) {
+                       if ( opts !== undefined && $.type( opts ) !== 'object' ) {
+                               opts = {
+                                       id: opts
+                               };
+                       }
+
+                       opts = $.extend( {}, defaults, opts );
+
+                       var $spinner = $( '<div>', { 'class': 'mw-spinner', 'title': '...' } );
+                       if ( opts.id !== undefined ) {
+                               $spinner.attr( 'id', 'mw-spinner-' + opts.id );
+                       }
+
+                       $spinner.addClass( opts.size === 'large' ? 'mw-spinner-large' : 'mw-spinner-small' );
+                       $spinner.addClass( opts.type === 'block' ? 'mw-spinner-block' : 'mw-spinner-inline' );
+
+                       return $spinner;
                },
 
                /**
                 * Removes a spinner element.
                 *
-                * @param id {String}
-                * @return {jQuery} spinner
+                * @param {String} id [optional] Id of the spinner, as passed to createSpinner.
+                * @return {jQuery} The (now detached) spinner.
                 */
                removeSpinner: function ( id ) {
                        return $( '#mw-spinner-' + id ).remove();
                }
-       } );
+       });
 
        /**
-        * Injects a spinner after the elements in the jQuery collection.
+        * Injects a spinner after the elements in the jQuery collection
+        * (as siblings, not children). Collection contents remain unchanged.
         *
-        * @param id String id of the spinner
+        * @param {Object|String} opts See createSpinner() for description.
         * @return {jQuery}
         */
-       $.fn.injectSpinner = function ( id ) {
-               return this.after( $.createSpinner( id ) );
+       $.fn.injectSpinner = function ( opts ) {
+               return this.after( $.createSpinner( opts ) );
        };
-
 }( jQuery ) );
index caf9a9f..d02d432 100644 (file)
@@ -1,24 +1,30 @@
 /*
- * JavaScript to enable right click edit functionality
+ * JavaScript to enable right click edit functionality.
+ * When the user right-clicks in a heading, it will open the
+ * edit screen.
  */
-jQuery( function( $ ) {
+jQuery( function ( $ ) {
        // Select all h1-h6 elements that contain editsection links
-       $( 'h1:has(.editsection a), ' +
-               'h2:has(.editsection a), ' +
-               'h3:has(.editsection a), ' +
-               'h4:has(.editsection a), ' +
-               'h5:has(.editsection a), ' +
-               'h6:has(.editsection a)'
-       ).live( 'contextmenu', function( e ) {
-               // Get href of the [edit] link
-               var href = $(this).find( '.editsection a' ).attr( 'href' );
-               // Check if target is the anchor link itself. If so, don't suppress the context menu; this
-               // way the reader can still do things like copy URL, open in new tab etc.
-               var $target = $( e.target );
-               if ( !$target.is( 'a' ) && !$target.parent().is( '.editsection' ) ){
+       // Don't use the ":has:(.editsection a)" selector because it performs very bad.
+       // http://jsperf.com/jq-1-7-2-vs-jq-1-8-1-performance-of-mw-has/2
+       $( document ).on( 'contextmenu', 'h1, h2, h3, h4, h5, h6', function ( e ) {
+               var $edit, href;
+
+               $edit = $( this ).find( '.editsection a' );
+               if ( !$edit.length ) {
+                       return;
+               }
+
+               // Get href of the editsection link
+               href = $edit.prop( 'href' );
+
+               // Headings can contain rich text.
+               // Make sure to not block contextmenu events on (other) anchor tags
+               // inside the heading (e.g. to do things like copy URL, open in new tab, ..).
+               // e.target can be the heading, but it can also be anything inside the heading.
+               if ( href && e.target.nodeName.toLowerCase() !== 'a' ) {
                        window.location = href;
                        e.preventDefault();
-                       return false;
                }
        } );
 } );
diff --git a/resources/mediawiki.language/languages/am.js b/resources/mediawiki.language/languages/am.js
deleted file mode 100644 (file)
index fa5d3c5..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Amharic (አማርኛ) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( count <= 1 ) ? forms[0] : forms[1];
-};
diff --git a/resources/mediawiki.language/languages/bat-smg.js b/resources/mediawiki.language/languages/bat-smg.js
deleted file mode 100644 (file)
index 6e3f4cc..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Samogitian (Žemaitėška) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 4 );
-       count = Math.abs( count );
-       if ( count === 0 || ( count % 100 === 0 || ( count % 100 >= 10 && count % 100 < 20 ) ) ) {
-               return forms[2];
-       }
-       if ( count % 10 === 1 ) {
-               return forms[0];
-       }
-       if ( count % 10 === 2 ) {
-               return forms[1];
-       }
-       return forms[3];
-};
diff --git a/resources/mediawiki.language/languages/be-tarask.js b/resources/mediawiki.language/languages/be-tarask.js
deleted file mode 100644 (file)
index c19f47d..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Belarusian in Taraskievica orthography (Беларуская (тарашкевіца)) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       if ( forms.length === 2 ) {
-               return count == 1 ? forms[0] : forms[1];
-       }
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
diff --git a/resources/mediawiki.language/languages/be.js b/resources/mediawiki.language/languages/be.js
deleted file mode 100644 (file)
index 97ceee3..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Belarusian normative (Беларуская) language functions
- */
-
-mediaWiki.language.convertPlural = function convertPlural( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
diff --git a/resources/mediawiki.language/languages/bh.js b/resources/mediawiki.language/languages/bh.js
deleted file mode 100644 (file)
index abbf8bd..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Bihari (भोजपुरी) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( count <= 1 ) ? forms[0] : forms[1];
-};
index 9affcf0..c0c77aa 100644 (file)
@@ -2,23 +2,6 @@
  * Bosnian (bosanski) language functions
  */
 
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
-
 mediaWiki.language.convertGrammar = function( word, form ) {
        var grammarForms = mw.language.getData( 'bs', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
diff --git a/resources/mediawiki.language/languages/cs.js b/resources/mediawiki.language/languages/cs.js
deleted file mode 100644 (file)
index 04dda99..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Czech (čeština [subst.], český [adj.], česky [adv.]) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       switch ( count ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
diff --git a/resources/mediawiki.language/languages/cu.js b/resources/mediawiki.language/languages/cu.js
deleted file mode 100644 (file)
index 35a5473..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Old Church Slavonic (Словѣ́ньскъ / ⰔⰎⰑⰂⰡⰐⰠⰔⰍⰟ) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 4 );
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-                       return forms[1];
-               case 3:
-               case 4:
-                       return forms[2];
-               default:
-                       return forms[3];
-       }
-};
diff --git a/resources/mediawiki.language/languages/cy.js b/resources/mediawiki.language/languages/cy.js
deleted file mode 100644 (file)
index 333d956..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- * Welsh (Cymraeg) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 6 );
-       count = Math.abs( count );
-       if ( count >= 0 && count <= 3 ) {
-               return forms[count];
-       }
-       if ( count == 6 ) {
-               return forms[4];
-       }
-       return forms[5];
-};
index e3c5808..a42a8f7 100644 (file)
@@ -2,21 +2,6 @@
  * Lower Sorbian (Dolnoserbski) language functions
  */
 
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 4 );
-       switch ( Math.abs( count ) % 100 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-                       return forms[1];
-               case 3:
-               case 4:
-                       return forms[2];
-               default:
-                       return forms[3];
-       }
-};
-
 mediaWiki.language.convertGrammar = function( word, form ) {
        var grammarForms = mw.language.getData( 'dsb', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
diff --git a/resources/mediawiki.language/languages/fr.js b/resources/mediawiki.language/languages/fr.js
deleted file mode 100644 (file)
index bfb52d2..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * French (Français) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( count <= 1 ) ? forms[0] : forms[1];
-};
index 51fce35..a27b489 100644 (file)
@@ -2,18 +2,6 @@
  * Irish (Gaeilge) language functions
  */
 
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       if ( count == 2 ) {
-               return forms[1];
-       }
-       return forms[2];
-};
-
-
 mediaWiki.language.convertGrammar = function( word, form ) {
        var grammarForms = mw.language.getData( 'ga', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
diff --git a/resources/mediawiki.language/languages/gd.js b/resources/mediawiki.language/languages/gd.js
deleted file mode 100644 (file)
index 5ac2007..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Scots Gaelic (Gàidhlig) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 4 );
-       count = Math.abs( count );
-       if ( count === 1 ) {
-               return forms[0];
-       }
-       if ( count === 2 ) {
-               return forms[1];
-       }
-       if ( count >= 3 && count <= 10 ) {
-               return forms[2];
-       }
-       return forms[3];
-};
diff --git a/resources/mediawiki.language/languages/gv.js b/resources/mediawiki.language/languages/gv.js
deleted file mode 100644 (file)
index afc2b5d..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Manx (Gaelg) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 4 );
-       if ( count > 0 && ( count % 20 ) === 0 ) {
-               return forms[0];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[1];
-               case 2:
-                       return forms[2];
-               default:
-                       return forms[3];
-       }
-};
diff --git a/resources/mediawiki.language/languages/hr.js b/resources/mediawiki.language/languages/hr.js
deleted file mode 100644 (file)
index e3ce291..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Croatian (hrvatski) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
index 6aa993c..211d67b 100644 (file)
@@ -2,22 +2,6 @@
  * Upper Sorbian (Hornjoserbsce) language functions
  */
 
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 4 );
-       switch ( Math.abs( count ) % 100 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-                       return forms[1];
-               case 3:
-               case 4:
-                       return forms[2];
-               default:
-                       return forms[3];
-       }
-};
-
-
 mediaWiki.language.convertGrammar = function( word, form ) {
        var grammarForms =mw.language.getData( 'hsb', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
index b51b2b6..215e750 100644 (file)
@@ -2,11 +2,6 @@
  * Armenian (Հայերեն) language functions
  */
 
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( Math.abs( count ) <= 1 ) ? forms[0] : forms[1];
-};
-
 mediaWiki.language.convertGrammar = function( word, form ) {
        var grammarForms = mw.language.getData( 'hy', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
diff --git a/resources/mediawiki.language/languages/ksh.js b/resources/mediawiki.language/languages/ksh.js
deleted file mode 100644 (file)
index ed90732..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * Ripuarian (Ripoarƒósh) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       if ( count == 0 ) {
-               return forms[2];
-       }
-       return forms[1];
-};
diff --git a/resources/mediawiki.language/languages/ln.js b/resources/mediawiki.language/languages/ln.js
deleted file mode 100644 (file)
index 9b9e456..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Lingala (Lingála) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( count <= 1 ) ? forms[0] : forms[1];
-};
diff --git a/resources/mediawiki.language/languages/lt.js b/resources/mediawiki.language/languages/lt.js
deleted file mode 100644 (file)
index 04964af..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Lithuanian (Lietuvių) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       // if the number is not mentioned in message, then use $form[0] for singular and $form[1] for plural or zero
-       if ( forms.length == 2 ) {
-               return count == 1 ? forms[0] : forms[1];
-       }
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count % 10 == 1 && count % 100 != 11 ) {
-               return forms[0];
-       }
-       if ( count % 10 >= 2 && ( count % 100 < 10 || count % 100 >= 20 ) ) {
-               return forms[1];
-       }
-       return forms[2];
-};
diff --git a/resources/mediawiki.language/languages/lv.js b/resources/mediawiki.language/languages/lv.js
deleted file mode 100644 (file)
index d4bec44..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Latvian (Latviešu) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );        
-       return ( ( count % 10 == 1 ) && ( count % 100 != 11 ) ) ? forms[0] : forms[1];
-};
diff --git a/resources/mediawiki.language/languages/mg.js b/resources/mediawiki.language/languages/mg.js
deleted file mode 100644 (file)
index b65e96e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Malagasy (Malagasy) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( count <= 1 ) ? forms[0] : forms[1];
-};
diff --git a/resources/mediawiki.language/languages/mk.js b/resources/mediawiki.language/languages/mk.js
deleted file mode 100644 (file)
index c89bbac..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Macedonian (Македонски) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( ( count % 10 === 1 ) && ( count % 100 !== 11 ) ) ? forms[0] : forms[1];
-};
diff --git a/resources/mediawiki.language/languages/mo.js b/resources/mediawiki.language/languages/mo.js
deleted file mode 100644 (file)
index 0c4b696..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * Moldavian (Молдовеняскэ) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       if ( count == 0 || count % 100 < 20 ) {
-               return forms[1];
-       }
-       return forms[2];
-};
diff --git a/resources/mediawiki.language/languages/mt.js b/resources/mediawiki.language/languages/mt.js
deleted file mode 100644 (file)
index 44c7bff..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Maltese (Malti) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 4 );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       if ( count == 0 || ( count % 100 > 1 && count % 100 < 11 ) ) {
-               return forms[1];
-       }
-       if ( count % 100 > 10 && count % 100 < 20 ) {
-               return forms[2];
-       }
-       return forms[3];
-};
diff --git a/resources/mediawiki.language/languages/nso.js b/resources/mediawiki.language/languages/nso.js
deleted file mode 100644 (file)
index 30cf189..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Northern Sotho (Sesotho sa Leboa) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( count <= 1 ) ? forms[0] : forms[1];
-};
diff --git a/resources/mediawiki.language/languages/pl.js b/resources/mediawiki.language/languages/pl.js
deleted file mode 100644 (file)
index 03e0d84..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * Polish (polski) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       count = Math.abs( count );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       switch ( count % 10 ) {
-               case 2:
-               case 3:
-               case 4:
-                       if ( count / 10 % 10 != 1 ) {
-                               return forms[1];
-                       }
-               default:
-                       return forms[2];
-       }
-};
diff --git a/resources/mediawiki.language/languages/ro.js b/resources/mediawiki.language/languages/ro.js
deleted file mode 100644 (file)
index 42610fe..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * Romanian (Română) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       if ( count == 0 || count % 100 < 20 ) {
-               return forms[1];
-       }
-       return forms[2];
-};
index 42be4f9..cfdbfc3 100644 (file)
@@ -2,26 +2,6 @@
  * Russian (Русский) language functions
  */
 
-mediaWiki.language.convertPlural = function( count, forms ) {
-       if ( forms.length === 2 ) {
-               return count == 1 ? forms[0] : forms[1];                
-       }
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
-
 mediaWiki.language.convertGrammar = function( word, form ) {
        var grammarForms = mw.language.getData( 'ru', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
diff --git a/resources/mediawiki.language/languages/se.js b/resources/mediawiki.language/languages/se.js
deleted file mode 100644 (file)
index e1ae5b9..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Northern Sami (Sámegiella) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       if ( !forms || forms.length === 0 ) {
-                       return '';
-       }
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       if ( count == 2 ) {
-               return forms[1];
-       }
-       return forms[2];
-};
diff --git a/resources/mediawiki.language/languages/sh.js b/resources/mediawiki.language/languages/sh.js
deleted file mode 100644 (file)
index 719b0c5..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Serbo-Croatian (Srpskohrvatski / Српскохрватски) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       if ( forms.length === 2 ) {
-               return count == 1 ? forms[0] : forms[1];
-       }
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
diff --git a/resources/mediawiki.language/languages/sk.js b/resources/mediawiki.language/languages/sk.js
deleted file mode 100644 (file)
index 21a22b2..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * Slovak (Slovenƒçina) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       if ( count == 2 || count == 3 || count == 4 ) {
-               return forms[1];
-       }
-       return forms[2];
-};
index cfb5781..acd00bf 100644 (file)
@@ -2,23 +2,6 @@
  * Slovenian (Slovenščina) language functions
  */
 
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 5 );
-       if ( count % 100 == 1 ) {
-               return forms[0];
-       }
-       if ( count % 100 == 2 ) {
-               return forms[1];
-       }
-       if ( count % 100 == 3 || count % 100 == 4 ) {
-               return forms[2];
-       }
-       if ( count != 0 ) {
-               return forms[3];
-       }
-       return forms[4];
-};
-
 mediaWiki.language.convertGrammar = function( word, form ) {
        var grammarForms = mw.language.getData( 'sl', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
diff --git a/resources/mediawiki.language/languages/sma.js b/resources/mediawiki.language/languages/sma.js
deleted file mode 100644 (file)
index 8163c42..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Southern Sami (Åarjelsaemien) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       if ( !forms || forms.length === 0 ) {
-                       return '';
-       }
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count == 1 ) {
-               return forms[0];
-       }
-       if ( count == 2 ) {
-               return forms[1];
-       }
-       return forms[2];
-};
diff --git a/resources/mediawiki.language/languages/sr-ec.js b/resources/mediawiki.language/languages/sr-ec.js
deleted file mode 100644 (file)
index af48eb0..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Serbian (cyrillic script) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
diff --git a/resources/mediawiki.language/languages/sr-el.js b/resources/mediawiki.language/languages/sr-el.js
deleted file mode 100644 (file)
index fd6ca01..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Serbian (latin script) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
diff --git a/resources/mediawiki.language/languages/sr.js b/resources/mediawiki.language/languages/sr.js
deleted file mode 100644 (file)
index 25cdc8a..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Serbian (Српски / Srpski) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       if ( forms.length === 2 ) {
-               return ( count == 1 ) ? forms[0] : forms[1];
-       }
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
diff --git a/resources/mediawiki.language/languages/ti.js b/resources/mediawiki.language/languages/ti.js
deleted file mode 100644 (file)
index 69b6d9b..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Tigrinya (ትግርኛ) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural(forms, 2);
-       return (count <= 1) ? forms[0] : forms[1];
-};
diff --git a/resources/mediawiki.language/languages/tl.js b/resources/mediawiki.language/languages/tl.js
deleted file mode 100644 (file)
index 29219fd..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * Tagalog (Tagalog) language functions
- */
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( count <= 1 ) ? forms[0] : forms[1];
-};
index 372d441..ee110b0 100644 (file)
@@ -2,26 +2,6 @@
  * Ukrainian (Українська) language functions
  */
 
-mediaWiki.language.convertPlural = function( count, forms ) {
-       if ( forms.length === 2 ) {
-               return count == 1 ? forms[0] : forms[1];                
-       }
-       forms = mediaWiki.language.preConvertPlural( forms, 3 );
-       if ( count > 10 && Math.floor( ( count % 100 ) / 10 ) == 1 ) {
-               return forms[2];
-       }
-       switch ( count % 10 ) {
-               case 1:
-                       return forms[0];
-               case 2:
-               case 3:
-               case 4:
-                       return forms[1];
-               default:
-                       return forms[2];
-       }
-};
-
 mediaWiki.language.convertGrammar = function( word, form ) {
        var grammarForms = mw.language.getData( 'uk', 'grammarForms' );
        if ( grammarForms && grammarForms[form] ) {
@@ -29,7 +9,7 @@ mediaWiki.language.convertGrammar = function( word, form ) {
        }
        switch ( form ) {
                case 'genitive': // родовий відмінок
-                       if ( (  word.substr( word.length - 4 ) == 'вікі' ) || (  word.substr( word.length - 4 ) == 'Вікі' ) ) {
+                       if ( ( word.substr( word.length - 4 ) == 'вікі' ) || ( word.substr( word.length - 4 ) == 'Вікі' ) ) {
                        }
                        else if ( word.substr( word.length - 1 ) == 'ь' )
                                word = word.substr(0, word.length - 1 ) + 'я';
@@ -37,7 +17,7 @@ mediaWiki.language.convertGrammar = function( word, form ) {
                                word = word.substr(0, word.length - 2 ) + 'ії';
                        else if ( word.substr( word.length - 2 ) == 'ка' )
                                word = word.substr(0, word.length - 2 ) + 'ки';
-                       else if ( word.substr( word.length - 2 )  == 'ти' )
+                       else if ( word.substr( word.length - 2 ) == 'ти' )
                                word = word.substr(0, word.length - 2 ) + 'тей';
                        else if ( word.substr( word.length - 2 ) == 'ды' )
                                word = word.substr(0, word.length - 2 ) + 'дов';
@@ -45,7 +25,7 @@ mediaWiki.language.convertGrammar = function( word, form ) {
                                word = word.substr(0, word.length - 3 ) + 'ника';
                        break;
                case 'accusative': // знахідний відмінок
-                       if ( (  word.substr( word.length - 4 ) == 'вікі' ) || (  word.substr( word.length - 4 ) == 'Вікі' ) ) {
+                       if ( ( word.substr( word.length - 4 ) == 'вікі' ) || ( word.substr( word.length - 4 ) == 'Вікі' ) ) {
                        }
                        else if ( word.substr( word.length - 2 ) == 'ія' )
                                word = word.substr(0, word.length - 2 ) + 'ію';
diff --git a/resources/mediawiki.language/languages/wa.js b/resources/mediawiki.language/languages/wa.js
deleted file mode 100644 (file)
index e177375..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Walloon (Walon) language functions
- */
-
-mediaWiki.language.convertPlural = function( count, forms ) {
-       forms = mediaWiki.language.preConvertPlural( forms, 2 );
-       return ( count <= 1 ) ? forms[0] : forms[1];
-};
index 8d2ffae..30307a3 100644 (file)
@@ -33,7 +33,7 @@
                 */
                getData: function ( langCode, dataKey ) {
                        var langData = language.data;
-                       if ( langData[langCode] instanceof mw.Map ) {
+                       if ( langData && langData[langCode] instanceof mw.Map ) {
                                return langData[langCode].get( dataKey );
                        }
                        return undefined;
index bb1491d..441bc91 100644 (file)
@@ -207,6 +207,7 @@ function pluralRuleParser(rule, number) {
        }
 
        function range() {
+               var i;
                var result = sequence([digits, _range_, digits]);
                if (result !== null) {
                        debug(" -- passed range");
@@ -275,7 +276,15 @@ function pluralRuleParser(rule, number) {
 
        var condition = choice([and, or, relation]);
 
+       function isInt(n) {
+               return parseFloat(n) % 1 === 0;
+       }
+
+
        function start() {
+               if (!isInt(number)) {
+                       return false;
+               }
                var result = condition();
                return result;
        }
index 149e1bf..513cb84 100644 (file)
@@ -1,6 +1,5 @@
 .mw-debug {
        width: 100%;
-       text-align: left;
        background-color: #eee;
        border-top: 1px solid #aaa;
 }
index 1ad1a62..88af3c6 100644 (file)
@@ -96,7 +96,7 @@
                buildHtml: function () {
                        var $container, $bits, panes, id, gitInfo;
 
-                       $container = $( '<div id="mw-debug-toolbar" class="mw-debug"></div>' );
+                       $container = $( '<div id="mw-debug-toolbar" class="mw-debug" lang="en" dir="ltr"></div>' );
 
                        $bits = $( '<div class="mw-debug-bits"></div>' );
 
                                .text( 'Time: ' + this.data.time.toFixed( 5 ) );
 
                        bitDiv( 'memory' )
-                               .text( 'Memory: ' + this.data.memory )
-                               .append( $( '<span title="Peak usage"></span>' ).text( ' (' + this.data.memoryPeak + ')' ) );
-                               
+                               .text( 'Memory: ' + this.data.memory + ' (Peak: ' + this.data.memoryPeak + ')' );
 
                        $bits.appendTo( $container );
 
index df62105..a4753b9 100644 (file)
@@ -31,8 +31,8 @@ $.fn.goOut = function ( instantToggle ) {
 
 /**
  * Bind a function to the jQuery object via live(), and also immediately trigger
- * the function on the objects with an 'instant' paramter set to true
- * @param callback function taking one paramter, which is Bool true when the event
+ * the function on the objects with an 'instant' parameter set to true
+ * @param callback function taking one parameter, which is Bool true when the event
  *     is called immediately, and the EventArgs object when triggered from an event
  */
 $.fn.liveAndTestAtStart = function ( callback ){
index def1225..86af31f 100644 (file)
                 * @return {String} selected pluralized form according to current language
                 */
                plural: function ( nodes ) {
-                       var count = parseInt( this.language.convertNumber( nodes[0], true ), 10 );
+                       var count = parseFloat( this.language.convertNumber( nodes[0], true ) );
                        var forms = nodes.slice(1);
                        return forms.length ? this.language.convertPlural( count, forms ) : '';
                },
index 913c19b..1342611 100644 (file)
@@ -80,13 +80,13 @@ class CologneBlueTemplate extends LegacyTemplate {
                $mainPageObj = Title::newMainPage();
 
                $s = "\n<div id='content'>\n<div id='topbar'>" .
-                 '<table width="100%" border="0" cellspacing="0" cellpadding="8"><tr>';
+                 '<table style="width: 100%;" cellspacing="0" cellpadding="8"><tr>';
 
                $s .= '<td class="top" nowrap="nowrap">';
                $s .= '<a href="' . htmlspecialchars( $mainPageObj->getLocalURL() ) . '">';
                $s .= '<span id="sitetitle">' . wfMessage( 'sitetitle' )->escaped() . '</span></a>';
 
-               $s .= '</td><td class="top" id="top-syslinks" width="100%">';
+               $s .= '</td><td class="top" id="top-syslinks" style="width: 100%;">';
                $s .= $this->sysLinks();
                $s .= '</td></tr><tr><td class="top-subheader">';
 
@@ -122,7 +122,7 @@ class CologneBlueTemplate extends LegacyTemplate {
                $s = "\n</div><br clear='all' />\n";
 
                $s .= "\n<div id='footer'>";
-               $s .= '<table width="98%" border="0" cellspacing="0"><tr>';
+               $s .= '<table style="width: 98%;" cellspacing="0"><tr>';
 
                $s .= '<td class="bottom">';
 
index 5461309..de11639 100644 (file)
@@ -62,7 +62,7 @@ class StandardTemplate extends LegacyTemplate {
 
                $s = "\n</div><br style=\"clear:both\" />\n";
                $s .= "\n<div id='footer'>";
-               $s .= '<table border="0" cellspacing="0"><tr>';
+               $s .= '<table cellspacing="0"><tr>';
 
                wfProfileOut( __METHOD__ . '-1' );
                wfProfileIn( __METHOD__ . '-2' );
index cf602ea..48dd943 100644 (file)
@@ -319,7 +319,7 @@ td.diff-context {
  */
 table.wikitable,
 table.mw_metadata {
-       margin: 1em 1em 1em 0;
+       margin: 1em 0;
        border: 1px #aaa solid;
        background: white;
        border-collapse: collapse;
index 23f7302..b1e28ab 100644 (file)
@@ -1,6 +1,17 @@
-(function( $ ) {
-       $( document ).ready( function() {
+( function ( $ ) {
+       $( document ).ready( function () {
+               var $label, labelText;
 
+               function syncText() {
+                       var value = $(this).val()
+                               .replace( /[\[\]\{\}|#<>%+? ]/g, '_' )
+                               .replace( /&/, '&amp;' )
+                               .replace( /__+/g, '_' )
+                               .replace( /^_+/, '' )
+                               .replace( /_+$/, '' );
+                       value = value.substr( 0, 1 ).toUpperCase() + value.substr( 1 );
+                       $label.text( labelText.replace( '$1', value ) );
+               }
 
                // Set up the help system
                $( '.mw-help-field-data' )
@@ -8,7 +19,7 @@
                        .closest( '.mw-help-field-container' )
                                .find( '.mw-help-field-hint' )
                                        .show()
-                                       .click( function() {
+                                       .click( function () {
                                                $(this)
                                                        .closest( '.mw-help-field-container' )
                                                                .find( '.mw-help-field-data' )
                
                // Show/hide code for DB-specific options
                // FIXME: Do we want slow, fast, or even non-animated (instantaneous) showing/hiding here?
-               $( '.dbRadio' ).each( function() { $( '#' + $(this).attr( 'rel' ) ).hide(); } );
-               $( '#' + $( '.dbRadio:checked' ).attr( 'rel' ) ).show();
-               $( '.dbRadio' ).click( function() {
-                       var $checked = $( '.dbRadio:checked' );
-                       var $wrapper = $( '#' + $checked.attr( 'rel' ) );
-                       if ( !$wrapper.is( ':visible' ) ) {
+               $( '.dbRadio' ).each( function () {
+                       $( document.getElementById( $(this).attr( 'rel' ) ) ).hide();
+               } );
+               $( document.getElementById( $( '.dbRadio:checked' ).attr( 'rel' ) ) ).show();
+               $( '.dbRadio' ).click( function () {
+                       var $checked = $( '.dbRadio:checked' ),
+                               $wrapper = $( document.getElementById( $checked.attr( 'rel' ) ) );
+                       if ( $wrapper.is( ':hidden' ) ) {
                                $( '.dbWrapper' ).hide( 'slow' );
                                $wrapper.show( 'slow' );
                        }
                } );
                
                // Scroll to the bottom of upgrade log
-               $( '#config-live-log' ).find( '> textarea' ).each( function() { this.scrollTop = this.scrollHeight; } );
+               $( '#config-live-log' ).children( 'textarea' ).each( function () {
+                       this.scrollTop = this.scrollHeight;
+               } );
                
                // Show/hide Creative Commons thingy
-               $( '.licenseRadio' ).click( function() {
+               $( '.licenseRadio' ).click( function () {
                        var $wrapper = $( '#config-cc-wrapper' );
                        if ( $( '#config__LicenseCode_cc-choose' ).is( ':checked' ) ) {
                                $wrapper.show( 'slow' );
@@ -42,7 +57,7 @@
                } );
                
                // Show/hide random stuff (email, upload)
-               $( '.showHideRadio' ).click( function() {
+               $( '.showHideRadio' ).click( function () {
                        var $wrapper = $( '#' + $(this).attr( 'rel' ) );
                        if ( $(this).is( ':checked' ) ) {
                                $wrapper.show( 'slow' );
@@ -50,7 +65,7 @@
                                $wrapper.hide( 'slow' );
                        }
                } );
-               $( '.hideShowRadio' ).click( function() {
+               $( '.hideShowRadio' ).click( function () {
                        var $wrapper = $( '#' + $(this).attr( 'rel' ) );
                        if ( $(this).is( ':checked' ) ) {
                                $wrapper.hide( 'slow' );
                $( '.enabledByOther' ).closest( '.config-block' ).hide();
 
                // Enable/disable "other" textboxes
-               $( '.enableForOther' ).click( function() {
-                       var $textbox = $( '#' + $(this).attr( 'rel' ) );
-                       if ( $(this).val() == 'other' ) { // FIXME: Ugh, this is ugly
+               $( '.enableForOther' ).click( function () {
+                       var $textbox = $( document.getElementById( $(this).attr( 'rel' ) ) );
+                       // FIXME: Ugh, this is ugly
+                       if ( $(this).val() === 'other' ) {
                                $textbox.removeProp( 'readonly' ).closest( '.config-block' ).slideDown( 'fast' );
                        } else {
                                $textbox.prop( 'readonly', true ).closest( '.config-block' ).slideUp( 'fast' );
                $label = $( 'label[for=config__NamespaceType_site-name]' );
                labelText = $label.text();
                $label.text( labelText.replace( '$1', '' ) );
-               $( '#config_wgSitename' ).bind( 'keyup change', syncText ).each( syncText );
-               function syncText() {
-                       var value = $(this).val()
-                               .replace( /[\[\]\{\}|#<>%+? ]/g, '_' )
-                               .replace( /&/, '&amp;' )
-                               .replace( /__+/g, '_' )
-                               .replace( /^_+/, '' )
-                               .replace( /_+$/, '' );
-                       value = value.substr( 0, 1 ).toUpperCase() + value.substr( 1 );
-                       $label.text( labelText.replace( '$1', value ) );
-               }
+               $( '#config_wgSitename' ).on( 'keyup change', syncText ).each( syncText );
 
                // Show/Hide memcached servers when needed
-               $("input[name$='config_wgMainCacheType']").change( function() {
+               $( 'input[name$="config_wgMainCacheType"]' ).change( function () {
                        var $memc = $( "#config-memcachewrapper" );
-                       if( $( "input[name$='config_wgMainCacheType']:checked" ).val() == 'memcached' ) {
+                       if( $( 'input[name$="config_wgMainCacheType"]:checked' ).val() === 'memcached' ) {
                                $memc.show( 'slow' );
                        } else {
                                $memc.hide( 'slow' );
                        }
                } );
        } );
-})(jQuery);
+}( jQuery ) );
index c88272d..5b5a3c6 100644 (file)
                // (mw.loader takes care of stuff if they happen to be loaded already)
                mw.loader.load( 'mediawiki.action.history.diff' );
 
-               $( '#wpPreview, #wpDiff' ).click( doLivePreview );
+               $( document.body ).on( 'click', '#wpPreview, #wpDiff', doLivePreview );
        } );
 } )( mediaWiki, jQuery );
index 4cc0ad3..8f771e9 100644 (file)
@@ -250,7 +250,7 @@ tr.mw-htmlform-vertical-label td.mw-label {
 
 input#wpSummary {
        width: 80%;
-       margin: 1em 0;
+       margin-bottom: 1em;
 }
 
 /**
@@ -473,7 +473,7 @@ a.feedlink {
  * keep in sync with commonPrint.css
  */
 table.wikitable {
-       margin: 1em 1em 1em 0;
+       margin: 1em 0;
        background-color: #f9f9f9;
        border: 1px #aaa solid;
        border-collapse: collapse;
index 563bd74..cae08af 100644 (file)
@@ -515,7 +515,7 @@ window.redirectToFragment = function( fragment ) {
  * Add a cute little box at the top of the screen to inform the user of
  * something, replacing any preexisting message.
  *
- * @deprecated since 1.17 Use mw.util.notify instead.
+ * @deprecated since 1.17 Use the 'mediawiki.notify' module instead.
  * @param {String|HTMLElement} message To be put inside the message box.
  */
 window.jsMsg = function () {
index cb5ca36..42f5f68 100644 (file)
@@ -17,7 +17,7 @@ $wgAutoloadClasses += array(
        //API
        'ApiFormatTestBase' => "$testFolder/phpunit/includes/api/format/ApiFormatTestBase.php",
        'ApiTestCase' => "$testFolder/phpunit/includes/api/ApiTestCase.php",
-       'ApiTestUser' => "$testFolder/phpunit/includes/api/ApiTestUser.php",
+       'TestUser' => "$testFolder/phpunit/includes/TestUser.php",
        'MockApi' => "$testFolder/phpunit/includes/api/ApiTestCase.php",
        'RandomImageGenerator' => "$testFolder/phpunit/includes/api/RandomImageGenerator.php",
        'UserWrapper' => "$testFolder/phpunit/includes/api/ApiTestCase.php",
index 4301587..840da96 100644 (file)
@@ -8,13 +8,13 @@
  * which can be used with the JasmineBDD framework. This specification can then be used by simply including it into
  * the SpecRunner.html file.
  *
- * This is similar to Michael Dale (mdale@mediawiki.org)'s parser tests, except that it doesn't look up the 
+ * This is similar to Michael Dale (mdale@mediawiki.org)'s parser tests, except that it doesn't look up the
  * API results while doing the test, so the Jasmine run is much faster(at the cost of being out of date in rare
  * circumstances. But mostly the parsing that we are doing in Javascript doesn't change much.)
  *
- */ 
+ */
 
-$maintenanceDir = dirname( dirname( dirname( dirname( __DIR__ ) ) ) ) . '/maintenance';
+$maintenanceDir = dirname( dirname( dirname( __DIR__ ) ) ) . '/maintenance';
 
 require( "$maintenanceDir/Maintenance.php" );
 
@@ -51,27 +51,22 @@ class MakeLanguageSpec extends Maintenance {
        private function getMessagesAndTests() {
                $messages = array();
                $tests = array();
-               $wfMsgExtOptions = array( 'parsemag' );
                foreach ( array( 'en', 'fr', 'ar', 'jp', 'zh' ) as $languageCode ) {
-                       $wfMsgExtOptions['language'] = $languageCode;
                        foreach ( self::$keyToTestArgs as $key => $testArgs ) {
                                foreach ($testArgs as $args) {
                                        // get the raw template, without any transformations
                                        $template = wfMessage( $key )->inLanguage( $languageCode )->plain();
 
-                                       // get the magic-parsed version with args
-                                       $wfMsgExtArgs = array_merge( array( $key, $wfMsgExtOptions ), $args );
-                                       // @todo FIXME: Use Message class.
-                                       $result = call_user_func_array( 'wfMsgExt', $wfMsgExtArgs ); 
+                                       $result = wfMessage( $key, $args )->inLanguage( $languageCode )->text();
 
                                        // record the template, args, language, and expected result
-                                       // fake multiple languages by flattening them together  
+                                       // fake multiple languages by flattening them together
                                        $langKey = $languageCode . '_' . $key;
                                        $messages[ $langKey ] = $template;
-                                       $tests[] = array( 
+                                       $tests[] = array(
                                                'name' => $languageCode . " " . $key . " " . join( ",", $args ),
                                                'key' => $langKey,
-                                               'args' => $args, 
+                                               'args' => $args,
                                                'result' => $result,
                                                'lang' => $languageCode
                                        );
index c418116..43d4271 100644 (file)
@@ -510,7 +510,7 @@ Comment test 1
 !! end
 
 !! test
-Comment test 2
+Comment test 2a
 !! input
 asdf
 <!-- comment 1 -->
@@ -521,6 +521,19 @@ jkl
 </p>
 !! end
 
+!! test
+Comment test 2b
+!! input
+asdf
+<!-- comment 1 -->
+
+jkl
+!! result
+<p>asdf
+</p><p>jkl
+</p>
+!! end
+
 !! test
 Comment test 3
 !! input
@@ -633,6 +646,74 @@ b
 </p>
 !! end
 
+!! test
+Comment on its own line post-expand with non-significant whitespace
+!! input
+a
+ {{blank}} <!----> 
+b
+!! result
+<p>a
+</p><p>b
+</p>
+!! end
+
+###
+### paragraph wraping tests
+###
+!! test
+No block tags
+!! input
+a
+
+b
+!! result
+<p>a
+</p><p>b
+</p>
+!! end
+!! test
+Block tag on one line
+!! input
+a <div>foo</div>
+
+b
+!! result
+a <div>foo</div>
+<p>b
+</p>
+!! end
+
+!! test
+Block tag on both lines
+!! input
+a <div>foo</div>
+
+b <div>foo</div>
+!! result
+a <div>foo</div>
+b <div>foo</div>
+
+!! end
+
+!! test
+Multiple lines without block tags
+!! input
+<div>foo</div> a
+b
+c
+d<!--foo--> e
+x <div>foo</div> z
+!! result
+<div>foo</div> a
+<p>b
+c
+d e
+</p>
+x <div>foo</div> z
+
+!! end
+
 ###
 ### Preformatted text
 ###
@@ -7035,7 +7116,7 @@ Special page transclusion
 !! input
 {{Special:Prefixindex/Xyzzyx}}
 !! result
-<table border="0" id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
+<table id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
 
 !! end
 
@@ -7046,8 +7127,8 @@ Special page transclusion twice (bug 5021)
 {{Special:Prefixindex/Xyzzyx}}
 {{Special:Prefixindex/Xyzzyx}}
 !! result
-<table border="0" id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
-<table border="0" id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
+<table id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
+<table id="mw-prefixindex-list-table"><tr><td><a href="/wiki/Xyzzyx" title="Xyzzyx">Xyzzyx</a></td></tr></table>
 
 !! end
 
index bfad334..f9e9f77 100644 (file)
@@ -5,6 +5,11 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        public $regex = '';
        public $runDisabled = false;
 
+       /**
+        * @var Array of TestUser
+        */
+       public static $users;
+
        /**
         * @var DatabaseBase
         */
@@ -497,4 +502,46 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                }
        }
 
+       /**
+        * Asserts that the provided variable is of the specified
+        * internal type or equals the $value argument. This is useful
+        * for testing return types of functions that return a certain
+        * type or *value* when not set or on error.
+        *
+        * @since 1.20
+        *
+        * @param string $type
+        * @param mixed $actual
+        * @param mixed $value
+        * @param string $message
+        */
+       protected function assertTypeOrValue( $type, $actual, $value = false, $message = '' ) {
+               if ( $actual === $value ) {
+                       $this->assertTrue( true, $message );
+               }
+               else {
+                       $this->assertType( $type, $actual, $message );
+               }
+       }
+
+       /**
+        * Asserts the type of the provided value. This can be either
+        * in internal type such as boolean or integer, or a class or
+        * interface the value extends or implements.
+        *
+        * @since 1.20
+        *
+        * @param string $type
+        * @param mixed $actual
+        * @param string $message
+        */
+       protected function assertType( $type, $actual, $message = '' ) {
+               if ( class_exists( $type ) || interface_exists( $type ) ) {
+                       $this->assertInstanceOf( $type, $actual, $message );
+               }
+               else {
+                       $this->assertInternalType( $type, $actual, $message );
+               }
+       }
+
 }
index 0dd85c1..a18f792 100644 (file)
@@ -365,4 +365,204 @@ class HtmlTest extends MediaWikiTestCase {
                );
        }
 
+       /**
+        * @dataProvider providesHtml5InputTypes
+        */
+       function testHtmlElementAcceptsNewHtml5TypesInHtml5Mode( $HTML5InputType ) {
+               $this->enableHTML5();
+               $this->assertEquals(
+                       '<input type="' . $HTML5InputType . '" />',
+                       HTML::element( 'input', array( 'type' => $HTML5InputType ) ),
+                       'In HTML5, HTML::element() should accept type="' . $HTML5InputType . '"'
+               );
+       }
+
+       /**
+        * List of input element types values introduced by HTML5
+        * Full list at http://www.w3.org/TR/html-markup/input.html
+        */
+       function providesHtml5InputTypes() {
+               $types = array(
+                       'datetime',
+                       'datetime-local',
+                       'date',
+                       'month',
+                       'time',
+                       'week',
+                       'number',
+                       'range',
+                       'email',
+                       'url',
+                       'search',
+                       'tel',
+                       'color',
+               );
+               $cases = array();
+               foreach( $types as $type ) {
+                       $cases[] = array( $type );
+               }
+               return $cases;
+       }
+
+       /**
+        * Test out Html::element drops default value
+        * @cover Html::dropDefaults
+        * @dataProvider provideElementsWithAttributesHavingDefaultValues
+        */
+       function testDropDefaults( $expected, $element, $message = '' ) {
+               $this->enableHTML5();
+               $this->assertEquals( $expected, $element, $message );
+       }
+
+       function provideElementsWithAttributesHavingDefaultValues() {
+               # Use cases in a concise format:
+               # <expected>, <element name>, <array of attributes> [, <message>]
+               # Will be mapped to Html::element()
+               $cases = array();
+
+               ### Generic cases, match $attribDefault static array
+               $cases[] = array( '<area />',
+                       'area', array( 'shape' => 'rect' )
+               );
+
+               $cases[] = array( '<button></button>',
+                       'button', array( 'formaction' => 'GET' )
+               );
+               $cases[] = array( '<button></button>',
+                       'button', array( 'formenctype' => 'application/x-www-form-urlencoded' )
+               );
+               $cases[] = array( '<button></button>',
+                       'button', array( 'type' => 'submit' )
+               );
+
+               $cases[] = array( '<canvas></canvas>',
+                       'canvas', array( 'height' => '150' )
+               );
+               $cases[] = array( '<canvas></canvas>',
+                       'canvas', array( 'width' => '300' )
+               );
+               # Also check with numeric values
+               $cases[] = array( '<canvas></canvas>',
+                       'canvas', array( 'height' => 150 )
+               );
+               $cases[] = array( '<canvas></canvas>',
+                       'canvas', array( 'width' => 300 )
+               );
+
+               $cases[] = array( '<command />',
+                       'command', array( 'type' => 'command' )
+               );
+
+               $cases[] = array( '<form></form>',
+                       'form', array( 'action' => 'GET' )
+               );
+               $cases[] = array( '<form></form>',
+                       'form', array( 'autocomplete' => 'on' )
+               );
+               $cases[] = array( '<form></form>',
+                       'form', array( 'enctype' => 'application/x-www-form-urlencoded' )
+               );
+
+               $cases[] = array( '<input />',
+                       'input', array( 'formaction' => 'GET' )
+               );
+               $cases[] = array( '<input />',
+                       'input', array( 'type' => 'text' )
+               );
+
+               $cases[] = array( '<keygen />',
+                       'keygen', array( 'keytype' => 'rsa' )
+               );
+
+               $cases[] = array( '<link />',
+                       'link', array( 'media' => 'all' )
+               );
+
+               $cases[] = array( '<menu></menu>',
+                       'menu', array( 'type' => 'list' )
+               );
+
+               $cases[] = array( '<script></script>',
+                       'script', array( 'type' => 'text/javascript' )
+               );
+
+               $cases[] = array( '<style></style>',
+                       'style', array( 'media' => 'all' )
+               );
+               $cases[] = array( '<style></style>',
+                       'style', array( 'type' => 'text/css' )
+               );
+
+               $cases[] = array( '<textarea></textarea>',
+                       'textarea', array( 'wrap' => 'soft' )
+               );
+
+               ### SPECIFIC CASES
+
+               # <link type="text/css" />
+               $cases[] = array( '<link />',
+                       'link', array( 'type' => 'text/css' )
+               );
+
+               # <input /> specific handling
+               $cases[] = array( '<input type="checkbox" />',
+                       'input', array( 'type' => 'checkbox', 'value' => 'on' ),
+                       'Default value "on" is stripped of checkboxes',
+               );
+               $cases[] = array( '<input type="radio" />',
+                       'input', array( 'type' => 'radio', 'value' => 'on' ),
+                       'Default value "on" is stripped of radio buttons',
+               );
+               $cases[] = array( '<input type="submit" value="Submit" />',
+                       'input', array( 'type' => 'submit', 'value' => 'Submit' ),
+                       'Default value "Submit" is kept on submit buttons (for possible l10n issues)',
+               );
+               $cases[] = array( '<input type="color" />',
+                       'input', array( 'type' => 'color', 'value' => '' ),
+               );
+               $cases[] = array( '<input type="range" />',
+                       'input', array( 'type' => 'range', 'value' => '' ),
+               );
+
+               # <select /> specifc handling
+               $cases[] = array( '<select multiple=""></select>',
+                       'select', array( 'size' => '4', 'multiple' => true ),
+               );
+               # .. with numeric value
+               $cases[] = array( '<select multiple=""></select>',
+                       'select', array( 'size' => 4, 'multiple' => true ),
+               );
+               $cases[] = array( '<select></select>',
+                       'select', array( 'size' => '1', 'multiple' => false ),
+               );
+               # .. with numeric value
+               $cases[] = array( '<select></select>',
+                       'select', array( 'size' => 1, 'multiple' => false ),
+               );
+
+               # Passing an array as value
+               $cases[] = array( '<a class="css-class-one css-class-two"></a>',
+                       'a', array( 'class' => array( 'css-class-one', 'css-class-two' ) ),
+                       "dropDefaults accepts values given as an array"
+               );
+
+               # FIXME: doDropDefault should remove defaults given in an array
+               # Expected should be '<a></a>'
+               $cases[] = array( '<a class=""></a>',
+                       'a', array( 'class' => array( '', '' ) ),
+                       "dropDefaults accepts values given as an array"
+               );
+
+
+               # Craft the Html elements
+               $ret = array();
+               foreach( $cases as $case ) {
+                       $ret[] = array(
+                               $case[0],
+                               Html::element( $case[1], $case[2] )
+                       );
+               }
+               return $ret;
+       }
+
 }
index 356db87..b34847a 100644 (file)
@@ -5,15 +5,15 @@ class LocalisationCacheTest extends MediaWikiTestCase {
                $cache = Language::getLocalisationCache();
 
                $this->assertEquals(
-                       $cache->getItem( 'ru', 'pluralRules' ),
-                       $cache->getItem( 'os', 'pluralRules' ),
-                       'os plural rules (undefined) fallback to ru (defined)'
+                       $cache->getItem( 'ar', 'pluralRules' ),
+                       $cache->getItem( 'arz', 'pluralRules' ),
+                       'arz plural rules (undefined) fallback to ar (defined)'
                );
 
                $this->assertEquals(
-                       $cache->getItem( 'ru', 'compiledPluralRules' ),
-                       $cache->getItem( 'os', 'compiledPluralRules' ),
-                       'os compiled plural rules (undefined) fallback to ru (defined)'
+                       $cache->getItem( 'ar', 'compiledPluralRules' ),
+                       $cache->getItem( 'arz', 'compiledPluralRules' ),
+                       'arz compiled plural rules (undefined) fallback to ar (defined)'
                );
 
                $this->assertNotEquals(
index 664f04a..0e12317 100644 (file)
@@ -1,25 +1,24 @@
 <?php
 
 class PreferencesTest extends MediaWikiTestCase {
-
        /** Array of User objects */
-       private $users ;
-       private $context ;
+       private $prefUsers;
+       private $context;
 
        function __construct() {
                parent::__construct();
                global $wgEnableEmail;
 
-               $this->users['noemail'] = new User;
+               $this->prefUsers['noemail'] = new User;
 
-               $this->users['notauth'] = new User;
-               $this->users['notauth']
+               $this->prefUsers['notauth'] = new User;
+               $this->prefUsers['notauth']
                        ->setEmail( 'noauth@example.org' );
 
-               $this->users['auth']    = new User;
-               $this->users['auth']
+               $this->prefUsers['auth']    = new User;
+               $this->prefUsers['auth']
                        ->setEmail( 'noauth@example.org' );
-               $this->users['auth']
+               $this->prefUsers['auth']
                        ->setEmailAuthenticationTimestamp( 1330946623 );
 
                $this->context = new RequestContext;
@@ -63,16 +62,14 @@ class PreferencesTest extends MediaWikiTestCase {
                $this->assertEquals( 'mw-email-authenticated', $prefs['emailaddress']['cssclass'] );
        }
 
-
        /** Helper */
        function prefsFor( $user_key ) {
                $preferences = array();
                Preferences::profilePreferences(
-                       $this->users[$user_key]
+                       $this->prefUsers[$user_key]
                        , $this->context
                        , $preferences
                );
                return $preferences;
        }
-
 }
index 6d82d0c..8a7face 100644 (file)
@@ -5,6 +5,9 @@
  *
  * @group Database
  * ^--- important, causes temporary tables to be used instead of the real database
+ *
+ * @group medium
+ * ^--- important, causes tests not to fail with timeout
  */
 class RevisionStorageTest extends MediaWikiTestCase {
 
@@ -306,4 +309,100 @@ class RevisionStorageTest extends MediaWikiTestCase {
                $this->assertEquals( $orig->getTextId(), $rev->getTextId(), 'new null revision shold have the same text id as the original revision' );
                $this->assertEquals( 'some testing text', $rev->getText() );
        }
+
+       public function dataUserWasLastToEdit() {
+               return array(
+                       array( #0
+                               3, true, # actually the last edit
+                       ),
+                       array( #1
+                               2, true, # not the current edit, but still by this user
+                       ),
+                       array( #2
+                               1, false, # edit by another user
+                       ),
+                       array( #3
+                               0, false, # first edit, by this user, but another user edited in the mean time
+                       ),
+               );
+       }
+
+       /**
+        * @dataProvider dataUserWasLastToEdit
+        */
+       public function testUserWasLastToEdit( $sinceIdx, $expectedLast ) {
+               $userA = \User::newFromName( "RevisionStorageTest_userA" );
+               $userB = \User::newFromName( "RevisionStorageTest_userB" );
+
+               if ( $userA->getId() === 0 ) {
+                       $userA = \User::createNew( $userA->getName() );
+               }
+
+               if ( $userB->getId() === 0 ) {
+                       $userB = \User::createNew( $userB->getName() );
+               }
+
+               $dbw = wfGetDB( DB_MASTER );
+               $revisions = array();
+
+               // create revisions -----------------------------
+               $page = WikiPage::factory( Title::newFromText( 'RevisionStorageTest_testUserWasLastToEdit' ) );
+
+               # zero
+               $revisions[0] = new Revision( array(
+                       'page' => $page->getId(),
+                       'timestamp' => '20120101000000',
+                       'user' => $userA->getId(),
+                       'text' => 'zero',
+                       'summary' => 'edit zero'
+               ) );
+               $revisions[0]->insertOn( $dbw );
+
+               # one
+               $revisions[1] = new Revision( array(
+                       'page' => $page->getId(),
+                       'timestamp' => '20120101000100',
+                       'user' => $userA->getId(),
+                       'text' => 'one',
+                       'summary' => 'edit one'
+               ) );
+               $revisions[1]->insertOn( $dbw );
+
+               # two
+               $revisions[2] = new Revision( array(
+                       'page' => $page->getId(),
+                       'timestamp' => '20120101000200',
+                       'user' => $userB->getId(),
+                       'text' => 'two',
+                       'summary' => 'edit two'
+               ) );
+               $revisions[2]->insertOn( $dbw );
+
+               # three
+               $revisions[3] = new Revision( array(
+                       'page' => $page->getId(),
+                       'timestamp' => '20120101000300',
+                       'user' => $userA->getId(),
+                       'text' => 'three',
+                       'summary' => 'edit three'
+               ) );
+               $revisions[3]->insertOn( $dbw );
+
+               # four
+               $revisions[4] = new Revision( array(
+                       'page' => $page->getId(),
+                       'timestamp' => '20120101000200',
+                       'user' => $userA->getId(),
+                       'text' => 'zero',
+                       'summary' => 'edit four'
+               ) );
+               $revisions[4]->insertOn( $dbw );
+
+               // test it ---------------------------------
+               $since = $revisions[ $sinceIdx ]->getTimestamp();
+
+               $wasLast = Revision::userWasLastToEdit( $dbw, $page->getId(), $userA->getId(), $since );
+
+               $this->assertEquals( $expectedLast, $wasLast );
+       }
 }
index c929989..d67f905 100644 (file)
@@ -136,10 +136,26 @@ class SanitizerTest extends MediaWikiTestCase {
                        array( 'nowrap=""', 'td', ' style="white-space: nowrap;"', 'nowrap="" is considered true, not false' ),
                        array( 'NOWRAP="true"', 'td', ' style="white-space: nowrap;"', 'nowrap attribute works when uppercase.' ),
                        array( 'NoWrAp="true"', 'td', ' style="white-space: nowrap;"', 'nowrap attribute works when mixed-case.' ),
-                       array( 'align="right"', 'td', ' style="text-align: right;"', 'align on table cells gets converted to text-align' ),
-                       array( 'align="center"', 'td', ' style="text-align: center;"', 'align on table cells gets converted to text-align' ),
-                       array( 'align="left"', 'div', ' style="float: left;"', 'align=(left|right) on non-cells gets converted to float' ),
-                       array( 'align="center"', 'div', ' style="margin-left: auto; margin-right: auto;"', 'align="center" on non-cells' ),
+                       array( 'align="right"', 'td', ' style="text-align: right;"'   , 'align on table cells gets converted to text-align' ),
+                       array( 'align="center"', 'td', ' style="text-align: center;"' , 'align on table cells gets converted to text-align' ),
+                       array( 'align="left"'  , 'div', ' style="text-align: left;"'  , 'align=(left|right) on div elements gets converted to text-align' ),
+                       array( 'align="center"', 'div', ' style="text-align: center;"', 'align="center" on div elements gets converted to text-align' ),
+                       array( 'align="left"'  , 'p',   ' style="text-align: left;"'  , 'align on p elements gets converted to text-align' ),
+                       array( 'align="left"'  , 'h1',  ' style="text-align: left;"'  , 'align on h1 elements gets converted to text-align' ),
+                       array( 'align="left"'  , 'h1',  ' style="text-align: left;"'  , 'align on h1 elements gets converted to text-align' ),
+                       array( 'align="left"'  , 'caption',' style="text-align: left;"','align on caption elements gets converted to text-align' ),
+                       array( 'align="left"'  , 'tfoot',' style="text-align: left;"' , 'align on tfoot elements gets converted to text-align' ),
+                       array( 'align="left"'  , 'tbody',' style="text-align: left;"' , 'align on tbody elements gets converted to text-align' ),
+
+                       # <tr>
+                       array( 'align="right"' , 'tr', ' style="text-align: right;"' , 'align on table row get converted to text-align' ),
+                       array( 'align="center"', 'tr', ' style="text-align: center;"', 'align on table row get converted to text-align' ),
+                       array( 'align="left"'  , 'tr', ' style="text-align: left;"'  , 'align on table row get converted to text-align' ),
+
+                       #table
+                       array( 'align="left"'  , 'table', ' style="float: left;"'    , 'align on table converted to float' ),
+                       array( 'align="center"', 'table', ' style="margin-left: auto; margin-right: auto;"', 'align center on table converted to margins' ),
+                       array( 'align="right"' , 'table', ' style="float: right;"'   , 'align on table converted to float' ),
                );
        }
 
diff --git a/tests/phpunit/includes/TestUser.php b/tests/phpunit/includes/TestUser.php
new file mode 100644 (file)
index 0000000..c4d8945
--- /dev/null
@@ -0,0 +1,58 @@
+<?php
+
+/* Wraps the user object, so we can also retain full access to properties like password if we log in via the API */
+class TestUser {
+       public $username;
+       public $password;
+       public $email;
+       public $groups;
+       public $user;
+
+       function __construct( $username, $realname = 'Real Name', $email = 'sample@example.com', $groups = array() ) {
+               $this->username = $username;
+               $this->realname = $realname;
+               $this->email = $email;
+               $this->groups = $groups;
+
+               // don't allow user to hardcode or select passwords -- people sometimes run tests
+               // on live wikis. Sometimes we create sysop users in these tests. A sysop user with
+               // a known password would be a Bad Thing.
+               $this->password = User::randomPassword();
+
+               $this->user = User::newFromName( $this->username );
+               $this->user->load();
+
+               // In an ideal world we'd have a new wiki (or mock data store) for every single test.
+               // But for now, we just need to create or update the user with the desired properties.
+               // we particularly need the new password, since we just generated it randomly.
+               // In core MediaWiki, there is no functionality to delete users, so this is the best we can do.
+               if ( !$this->user->getID() ) {
+                       // create the user
+                       $this->user = User::createNew(
+                               $this->username, array(
+                                       "email" => $this->email,
+                                       "real_name" => $this->realname
+                               )
+                       );
+                       if ( !$this->user ) {
+                               throw new Exception( "error creating user" );
+                       }
+               }
+
+               // update the user to use the new random password and other details
+               $this->user->setPassword( $this->password );
+               $this->user->setEmail( $this->email );
+               $this->user->setRealName( $this->realname );
+               // remove all groups, replace with any groups specified
+               foreach ( $this->user->getGroups() as $group ) {
+                       $this->user->removeGroup( $group );
+               }
+               if ( count( $this->groups ) ) {
+                       foreach ( $this->groups as $group ) {
+                               $this->user->addGroup( $group );
+                       }
+               }
+               $this->user->saveSettings();
+
+       }
+}
index 93ed3dc..7f25f58 100644 (file)
@@ -37,7 +37,7 @@ class XmlTest extends MediaWikiTestCase {
        public function tearDown() {
                global $wgLang, $wgContLang;
                $wgLang = self::$oldLang;
-               
+
                $wgContLang->setNamespaces( self::$oldNamespaces );
        }
 
@@ -112,9 +112,6 @@ class XmlTest extends MediaWikiTestCase {
                $this->assertEquals( '</element>', Xml::closeElement( 'element' ), 'closeElement() shortcut' );
        }
 
-       /**
-        * @group Broken
-        */
        public function testDateMenu( ) {
                $curYear   = intval(gmdate('Y'));
                $prevYear  = $curYear - 1;
@@ -126,7 +123,7 @@ class XmlTest extends MediaWikiTestCase {
                if( $nextMonth == 13 ) { $nextMonth = 1; }
 
                $this->assertEquals(
-                       '<label for="year">From year (and earlier):</label> <input name="year" size="4" value="2011" id="year" maxlength="4" /> <label for="month">From month (and earlier):</label> <select id="month" name="month" class="mw-month-selector"><option value="-1">all</option>' . "\n" .
+                       '<label for="year">From year (and earlier):</label> <input id="year" maxlength="4" size="7" type="number" value="2011" name="year" /> <label for="month">From month (and earlier):</label> <select id="month" name="month" class="mw-month-selector"><option value="-1">all</option>' . "\n" .
 '<option value="1">January</option>' . "\n" .
 '<option value="2" selected="">February</option>' . "\n" .
 '<option value="3">March</option>' . "\n" .
@@ -143,7 +140,7 @@ class XmlTest extends MediaWikiTestCase {
                        "Date menu for february 2011"
                );
                $this->assertEquals(
-                       '<label for="year">From year (and earlier):</label> <input name="year" size="4" value="2011" id="year" maxlength="4" /> <label for="month">From month (and earlier):</label> <select id="month" name="month" class="mw-month-selector"><option value="-1">all</option>' . "\n" .
+                       '<label for="year">From year (and earlier):</label> <input id="year" maxlength="4" size="7" type="number" value="2011" name="year" /> <label for="month">From month (and earlier):</label> <select id="month" name="month" class="mw-month-selector"><option value="-1">all</option>' . "\n" .
 '<option value="1">January</option>' . "\n" .
 '<option value="2">February</option>' . "\n" .
 '<option value="3">March</option>' . "\n" .
@@ -165,17 +162,15 @@ class XmlTest extends MediaWikiTestCase {
                        "Date menu year is the current one when not specified"
                );
 
-               // @todo FIXME: next month can be in the next year
-               // test failing because it is now december
+               $wantedYear = $nextMonth == 1 ? $curYear : $prevYear;
                $this->assertEquals(
-                       Xml::dateMenu( $prevYear, $nextMonth ),
+                       Xml::dateMenu( $wantedYear, $nextMonth ),
                        Xml::dateMenu( '', $nextMonth ),
                        "Date menu next month is 11 months ago"
                );
 
-               # @todo FIXME: Please note there is no year there!
                $this->assertEquals(
-                       '<label for="year">From year (and earlier):</label> <input name="year" size="4" value="" id="year" maxlength="4" /> <label for="month">From month (and earlier):</label> <select id="month" name="month" class="mw-month-selector"><option value="-1">all</option>' . "\n" .
+                       '<label for="year">From year (and earlier):</label> <input id="year" maxlength="4" size="7" type="number" name="year" /> <label for="month">From month (and earlier):</label> <select id="month" name="month" class="mw-month-selector"><option value="-1">all</option>' . "\n" .
 '<option value="1">January</option>' . "\n" .
 '<option value="2">February</option>' . "\n" .
 '<option value="3">March</option>' . "\n" .
index 8acdc1c..d54d7df 100644 (file)
@@ -5,7 +5,7 @@
  */
 class ApiOptionsTest extends MediaWikiLangTestCase {
 
-       private $mTested, $mApiMainMock, $mUserMock, $mContext, $mSession;
+       private $mTested, $mUserMock, $mContext, $mSession;
 
        private static $Success = array( 'options' => 'success' );
 
@@ -16,27 +16,16 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                        ->disableOriginalConstructor()
                        ->getMock();
 
-               $this->mApiMainMock = $this->getMockBuilder( 'ApiBase' )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-
                // Create a new context
                $this->mContext = new DerivativeContext( new RequestContext() );
                $this->mContext->setUser( $this->mUserMock );
 
-               $this->mApiMainMock->expects( $this->any() )
-                       ->method( 'getContext' )
-                       ->will( $this->returnValue( $this->mContext ) );
-
-               $this->mApiMainMock->expects( $this->any() )
-                       ->method( 'getResult' )
-                       ->will( $this->returnValue( new ApiResult( $this->mApiMainMock ) ) );
-
+               $main = new ApiMain( $this->mContext );
 
                // Empty session
                $this->mSession = array();
 
-               $this->mTested = new ApiOptions( $this->mApiMainMock, 'options' );
+               $this->mTested = new ApiOptions( $main, 'options' );
        }
 
        private function getSampleRequest( $custom = array() ) {
index d6c48cb..3cec99a 100644 (file)
@@ -1,10 +1,6 @@
 <?php 
 
 abstract class ApiTestCase extends MediaWikiLangTestCase {
-       /**
-        * @var Array of ApiTestUser
-        */
-       public static $users;
        protected static $apiUrl;
 
        /**
@@ -22,14 +18,16 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
                $wgAuth = new StubObject( 'wgAuth', 'AuthPlugin' );
                $wgRequest = new FauxRequest( array() );
 
+               ApiQueryInfo::resetTokenCache(); // tokens are invalid because we cleared the session
+
                self::$users = array(
-                       'sysop' => new ApiTestUser(
+                       'sysop' => new TestUser(
                                'Apitestsysop',
                                'Api Test Sysop',
                                'api_test_sysop@example.com',
                                array( 'sysop' )
                        ),
-                       'uploader' => new ApiTestUser(
+                       'uploader' => new TestUser(
                                'Apitestuser',
                                'Api Test User',
                                'api_test_user@example.com',
diff --git a/tests/phpunit/includes/api/ApiTestUser.php b/tests/phpunit/includes/api/ApiTestUser.php
deleted file mode 100644 (file)
index 8d5f61a..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/* Wraps the user object, so we can also retain full access to properties like password if we log in via the API */
-class ApiTestUser {
-       public $username;
-       public $password;
-       public $email;
-       public $groups;
-       public $user;
-
-       function __construct( $username, $realname = 'Real Name', $email = 'sample@example.com', $groups = array() ) {
-               $this->username = $username;
-               $this->realname = $realname;
-               $this->email = $email;
-               $this->groups = $groups;
-
-               // don't allow user to hardcode or select passwords -- people sometimes run tests
-               // on live wikis. Sometimes we create sysop users in these tests. A sysop user with
-               // a known password would be a Bad Thing.
-               $this->password = User::randomPassword();
-
-               $this->user = User::newFromName( $this->username );
-               $this->user->load();
-
-               // In an ideal world we'd have a new wiki (or mock data store) for every single test.
-               // But for now, we just need to create or update the user with the desired properties.
-               // we particularly need the new password, since we just generated it randomly.
-               // In core MediaWiki, there is no functionality to delete users, so this is the best we can do.
-               if ( !$this->user->getID() ) {
-                       // create the user
-                       $this->user = User::createNew(
-                               $this->username, array(
-                                       "email" => $this->email,
-                                       "real_name" => $this->realname
-                               )
-                       );
-                       if ( !$this->user ) {
-                               throw new Exception( "error creating user" );
-                       }
-               }
-
-               // update the user to use the new random password and other details
-               $this->user->setPassword( $this->password );
-               $this->user->setEmail( $this->email );
-               $this->user->setRealName( $this->realname );
-               // remove all groups, replace with any groups specified
-               foreach ( $this->user->getGroups() as $group ) {
-                       $this->user->removeGroup( $group );
-               }
-               if ( count( $this->groups ) ) {
-                       foreach ( $this->groups as $group ) {
-                               $this->user->addGroup( $group );
-                       }
-               }
-               $this->user->saveSettings();
-
-       }
-
-}
index 379ffb1..dc12ba5 100644 (file)
@@ -190,9 +190,6 @@ class DatabaseTest extends MediaWikiTestCase {
                        $sql );
        }
 
-       /**
-        * @group Broken
-        */
        function testStoredFunctions() {
                if ( !in_array( wfGetDB( DB_MASTER )->getType(), array( 'mysql', 'postgres' ) ) ) {
                        $this->markTestSkipped( 'MySQL or Postgres required' );
index b604d59..88f87ef 100644 (file)
@@ -76,7 +76,6 @@ class BitmapMetadataHandlerTest extends MediaWikiTestCase {
        /**
         * File has an invalid time (+ one valid but really weird time)
         * that shouldn't be included
-        * @expectedException TimestampException
         */
        public function testIPTCDatesInvalid() {
                $meta = BitmapMetadataHandler::Jpeg( $this->filePath .
index dc1c2ac..66fafaa 100644 (file)
@@ -16,13 +16,13 @@ class UploadStashTest extends MediaWikiTestCase {
                file_put_contents( $this->bug29408File, "\x00" );
 
                self::$users = array(
-                       'sysop' => new ApiTestUser(
+                       'sysop' => new TestUser(
                                'Uploadstashtestsysop',
                                'Upload Stash Test Sysop',
                                'upload_stash_test_sysop@example.com',
                                array( 'sysop' )
                        ),
-                       'uploader' => new ApiTestUser(
+                       'uploader' => new TestUser(
                                'Uploadstashtestuser',
                                'Upload Stash Test User',
                                'upload_stash_test_user@example.com',
diff --git a/tests/phpunit/languages/LanguageHuTest.php b/tests/phpunit/languages/LanguageHuTest.php
new file mode 100644 (file)
index 0000000..adbd37e
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+/**
+ * @author Santhosh Thottingal
+ * @copyright Copyright © 2012, Santhosh Thottingal
+ * @file
+ */
+
+/** Tests for MediaWiki languages/LanguageHu.php */
+class LanguageHuTest extends MediaWikiTestCase {
+       private $lang;
+
+       function setUp() {
+               $this->lang = Language::factory( 'Hu' );
+       }
+       function tearDown() {
+               unset( $this->lang );
+       }
+
+       /** @dataProvider providePlural */
+       function testPlural( $result, $value ) {
+               $forms = array( 'one', 'other' );
+               $this->assertEquals( $result, $this->lang->convertPlural( $value, $forms ) );
+       }
+
+       function providePlural() {
+               return array (
+                       array( 'other', 0 ),
+                       array( 'one', 1 ),
+                       array( 'other', 2 ),
+                       array( 'other', 200 ),
+               );
+       }
+
+}
index f669b26..a0bbadf 100644 (file)
@@ -250,9 +250,9 @@ class TextPassDumperTest extends DumpTestCase {
                        $dumper->stderr = $stderr;
 
                        // The actual dump and taking time
-                       $ts_before = wfTime();
+                       $ts_before = microtime( true );
                        $dumper->dump( WikiExporter::FULL, WikiExporter::TEXT );
-                       $ts_after = wfTime();
+                       $ts_after = microtime( true );
                        $lastDuration = $ts_after - $ts_before;
 
                        // Handling increasing the iteration count for the stubs
index 09a11b0..e2c6668 100644 (file)
@@ -1,21 +1,25 @@
-module( 'mediawiki.cldr' );
-
-test( '-- Initial check', function() {
-       expect( 1 );
-       ok( mw.cldr, 'mw.cldr defined' );
-} );
+QUnit.module( 'mediawiki.cldr', QUnit.newMwEnvironment() );
 
 var pluralTestcases = {
        /*
         * Sample:
-        *"languagecode" : [
-        *      [ number, [ "form1", "form2", ... ],  "expected", "description" ],
-        * ]
+        * "languagecode" : [
+        *   [ number, [ "form1", "form2", ... ],  "expected", "description" ]
+        * ];
         */
        "en": [
                [ 0, [ "one", "other" ], "other", "English plural test- 0 is other" ],
                [ 1, [ "one", "other" ], "one", "English plural test- 1 is one" ]
        ],
+       "fa": [
+               [ 0, [ "one", "other" ], "other", "Persian plural test- 0 is other" ],
+               [ 1, [ "one", "other" ], "one", "Persian plural test- 1 is one" ],
+               [ 2, [ "one", "other" ], "other", "Persian plural test- 2 is other" ]
+       ],
+       "fr": [
+               [ 0, [ "one", "other" ], "other", "French plural test- 0 is other" ],
+               [ 1, [ "one", "other" ], "one", "French plural test- 1 is one" ]
+       ],
        "hi": [
                [ 0, [ "one", "other" ], "one", "Hindi plural test- 0 is one" ],
                [ 1, [ "one", "other" ], "one", "Hindi plural test- 1 is one" ],
@@ -27,6 +31,11 @@ var pluralTestcases = {
                [ 2, [ "one", "other" ], "other", "Hebrew plural test- 2 is other with 2 forms" ],
                [ 2, [ "one", "dual", "other" ], "dual", "Hebrew plural test- 2 is dual with 3 forms" ]
        ],
+       "hu": [
+               [ 0, [ "one", "other" ], "other", "Hungarian plural test- 0 is other" ],
+               [ 1, [ "one", "other" ], "one", "Hungarian plural test- 1 is one" ],
+               [ 2, [ "one", "other" ], "other", "Hungarian plural test- 2 is other" ]
+       ],
        "ar": [
                [ 0, [ "zero", "one", "two", "few", "many", "other" ], "zero", "Arabic plural test - 0 is zero" ],
                [ 1, [ "zero", "one", "two", "few", "many", "other" ], "one", "Arabic plural test - 1 is one" ],
@@ -41,26 +50,24 @@ var pluralTestcases = {
                [ 9999, [ "zero", "one", "two", "few", "many", "other" ], "many", "Arabic plural test - 9999 is many" ],
                [ 100, [ "zero", "one", "two", "few", "many", "other" ], "other", "Arabic plural test - 100 is other" ],
                [ 102, [ "zero", "one", "two", "few", "many", "other" ], "other", "Arabic plural test - 102 is other" ],
-               [ 1000, [ "zero", "one", "two", "few", "many", "other" ], "other", "Arabic plural test - 1000 is other" ]
-               // FIXME plural rules for decimal numbers does not work
-               // [ 1.7, [ "zero", "one", "two", "few", "many", "other" ], "other", "Arabic plural test - 1.7 is other" ],
+               [ 1000, [ "zero", "one", "two", "few", "many", "other" ], "other", "Arabic plural test - 1000 is other" ],
+               [ 1.7, [ "zero", "one", "two", "few", "many", "other" ], "other", "Arabic plural test - 1.7 is other" ]
        ]
 };
 
 function pluralTest( langCode, tests ) {
-       QUnit.test('-- Plural Test for ' + langCode, function( assert ) {
-               QUnit.expect( tests.length );
+       QUnit.test( 'Plural Test for ' + langCode, tests.length, function ( assert ) {
                for ( var i = 0; i < tests.length; i++ ) {
                        assert.equal(
                                mw.language.convertPlural( tests[i][0], tests[i][1] ),
-                               tests[i][2], // Expected plural form
-                               tests[i][3] // Description
+                               tests[i][2],
+                               tests[i][3]
                        );
                }
        } );
 }
 
-$.each( pluralTestcases, function( langCode, tests ) {
+$.each( pluralTestcases, function ( langCode, tests ) {
        if ( langCode === mw.config.get( 'wgUserLanguage' ) ) {
                pluralTest( langCode, tests );
        }
index 5d67a6e..3fa2b09 100644 (file)
@@ -1,12 +1,11 @@
-var liveLangData = mw.language.data.values;
 QUnit.module( 'mediawiki.language', QUnit.newMwEnvironment({
        setup: function () {
-               // New independent copy for this test
-               mw.language.data = $.extend( {}, liveLangData, true );
+               this.liveLangData = mw.language.data.values;
+               mw.language.data.values = $.extend( true, {}, this.liveLangData );
        },
        teardown: function () {
-               // Restore original
-               mw.language.data = liveLangData;
+               // Restore
+               mw.language.data.values = this.liveLangData;
        }
 }) );
 
index 8fc868d..068ec01 100644 (file)
--- a/thumb.php
+++ b/thumb.php
@@ -96,6 +96,7 @@ function wfThumbHandle404() {
  * @return void
  */
 function wfStreamThumb( array $params ) {
+       global $wgVaryOnXFP;
        wfProfileIn( __METHOD__ );
 
        $headers = array(); // HTTP headers to send
@@ -125,7 +126,15 @@ function wfStreamThumb( array $params ) {
        $fileName = strtr( $fileName, '\\/', '__' );
 
        // Actually fetch the image. Method depends on whether it is archived or not.
-       if ( $isOld ) {
+       if ( $isTemp ) {
+               $repo = RepoGroup::singleton()->getLocalRepo()->getTempRepo();
+               $img = new UnregisteredLocalFile( null, $repo,
+                       # Temp files are hashed based on the name without the timestamp.
+                       # The thumbnails will be hashed based on the entire name however.
+                       # @TODO: fix this convention to actually be reasonable.
+                       $repo->getZonePath( 'public' ) . '/' . $repo->getTempHashPath( $fileName ) . $fileName
+               );
+       } elseif ( $isOld ) {
                // Format is <timestamp>!<name>
                $bits = explode( '!', $fileName, 2 );
                if ( count( $bits ) != 2 ) {
@@ -140,25 +149,12 @@ function wfStreamThumb( array $params ) {
                        return;
                }
                $img = RepoGroup::singleton()->getLocalRepo()->newFromArchiveName( $title, $fileName );
-       } elseif ( $isTemp ) {
-               $repo = RepoGroup::singleton()->getLocalRepo()->getTempRepo();
-               // Format is <timestamp>!<name> or just <name>
-               $bits = explode( '!', $fileName, 2 );
-               // Get the name without the timestamp so hash paths are correctly computed
-               $title = Title::makeTitleSafe( NS_FILE, isset( $bits[1] ) ? $bits[1] : $fileName );
-               if ( !$title ) {
-                       wfThumbError( 404, wfMessage( 'badtitletext' )->text() );
-                       wfProfileOut( __METHOD__ );
-                       return;
-               }
-               $img = new UnregisteredLocalFile( $title, $repo,
-                       $repo->getZonePath( 'public' ) . '/' . $repo->getTempHashPath( $fileName ) . $fileName
-               );
        } else {
                $img = wfLocalFile( $fileName );
        }
 
        // Check permissions if there are read restrictions
+       $varyHeader = array();
        if ( !in_array( 'read', User::getGroupPermissions( array( '*' ) ), true ) ) {
                if ( !$img->getTitle() || !$img->getTitle()->userCan( 'read' ) ) {
                        wfThumbError( 403, 'Access denied. You do not have permission to access ' .
@@ -167,7 +163,7 @@ function wfStreamThumb( array $params ) {
                        return;
                }
                $headers[] = 'Cache-Control: private';
-               $headers[] = 'Vary: Cookie';
+               $varyHeader[] = 'Cookie';
        }
 
        // Check the source file storage path
@@ -217,19 +213,40 @@ function wfStreamThumb( array $params ) {
 
        // Stream the file if it exists already...
        try {
+               $thumbName2 = $img->thumbName( $params, File::THUMB_FULL_NAME ); // b/c; "long" style
                // For 404 handled thumbnails, we only use the the base name of the URI
                // for the thumb params and the parent directory for the source file name.
                // Check that the zone relative path matches up so squid caches won't pick
                // up thumbs that would not be purged on source file deletion (bug 34231).
-               if ( isset( $params['rel404'] ) // thumbnail was handled via 404
-                       && urldecode( $params['rel404'] ) !== $img->getThumbRel( $thumbName ) )
-               {
-                       wfThumbError( 404, 'The source file for the specified thumbnail does not exist.' );
-                       wfProfileOut( __METHOD__ );
-                       return;
+               if ( isset( $params['rel404'] ) ) { // thumbnail was handled via 404
+                       if ( urldecode( $params['rel404'] ) === $img->getThumbRel( $thumbName ) ) {
+                               // Request for the canonical thumbnail name
+                       } elseif ( urldecode( $params['rel404'] ) === $img->getThumbRel( $thumbName2 ) ) {
+                               // Request for the "long" thumbnail name; redirect to canonical name
+                               $response = RequestContext::getMain()->getRequest()->response();
+                               $response->header( "HTTP/1.1 301 " . HttpStatus::getMessage( 301 ) );
+                               $response->header( 'Location: ' . wfExpandUrl( $img->getThumbUrl( $thumbName ), PROTO_CURRENT ) );
+                               $response->header( 'Expires: ' .
+                                       gmdate( 'D, d M Y H:i:s', time() + 7*86400 ) . ' GMT' );
+                               if ( $wgVaryOnXFP ) {
+                                       $varyHeader[] = 'X-Forwarded-Proto';
+                               }
+                               if ( count( $varyHeader ) ) {
+                                       $response->header( 'Vary: ' . implode( ', ', $varyHeader ) );
+                               }
+                               wfProfileOut( __METHOD__ );
+                               return;
+                       } else {
+                               wfThumbError( 404, 'The given path of the specified thumbnail is incorrect.' );
+                               wfProfileOut( __METHOD__ );
+                               return;
+                       }
                }
                $thumbPath = $img->getThumbPath( $thumbName );
                if ( $img->getRepo()->fileExists( $thumbPath ) ) {
+                       if ( count( $varyHeader ) ) {
+                               $headers[] = 'Vary: ' . implode( ', ', $varyHeader );
+                       }
                        $img->getRepo()->streamFile( $thumbPath, $headers );
                        wfProfileOut( __METHOD__ );
                        return;
@@ -240,6 +257,10 @@ function wfStreamThumb( array $params ) {
                return;
        }
 
+       if ( count( $varyHeader ) ) {
+               $headers[] = 'Vary: ' . implode( ', ', $varyHeader );
+       }
+
        // Thumbnail isn't already there, so create the new thumbnail...
        try {
                $thumb = $img->transform( $params, File::RENDER_NOW );
@@ -282,51 +303,55 @@ function wfStreamThumb( array $params ) {
 function wfExtractThumbParams( $uriPath ) {
        $repo = RepoGroup::singleton()->getLocalRepo();
 
+       // Zone URL might be relative ("/images") or protocol-relative ("//lang.site/image")
        $zoneUriPath = $repo->getZoneHandlerUrl( 'thumb' )
                ? $repo->getZoneHandlerUrl( 'thumb' ) // custom URL
                : $repo->getZoneUrl( 'thumb' ); // default to main URL
-       // URL might be relative ("/images") or protocol-relative ("//lang.site/image")
        $bits = wfParseUrl( wfExpandUrl( $zoneUriPath, PROTO_INTERNAL ) );
        if ( $bits && isset( $bits['path'] ) ) {
                $zoneUriPath = $bits['path'];
        } else {
-               return null;
+               return null; // not a valid thumbnail URL
        }
 
-       $hashDirRegex = $subdirRegex = '';
+       $hashDirReg = $subdirReg = '';
        for ( $i = 0; $i < $repo->getHashLevels(); $i++ ) {
-               $subdirRegex .= '[0-9a-f]';
-               $hashDirRegex .= "$subdirRegex/";
+               $subdirReg .= '[0-9a-f]';
+               $hashDirReg .= "$subdirReg/";
+       }
+       $zoneReg = preg_quote( $zoneUriPath ); // regex for thumb zone URI
+
+       // Check if this is a thumbnail of an original in the local file repo
+       if ( preg_match( "!^$zoneReg/((archive/)?$hashDirReg([^/]*)/([^/]*))$!", $uriPath, $m ) ) {
+               list( /*all*/, $rel, $archOrTemp, $filename, $thumbname ) = $m;
+       // Check if this is a thumbnail of an temp file in the local file repo
+       } elseif ( preg_match( "!^$zoneReg/(temp/)($hashDirReg([^/]*)/([^/]*))$!", $uriPath, $m ) ) {
+               list( /*all*/, $archOrTemp, $rel, $filename, $thumbname ) = $m;
+       } else {
+               return null; // not a valid looking thumbnail request
        }
 
-       $thumbPathRegex = "!^" . preg_quote( $zoneUriPath ) .
-               "/((archive/|temp/)?$hashDirRegex([^/]*)/([^/]*))$!";
-
-       // Check if this is a valid looking thumbnail request...
-       if ( preg_match( $thumbPathRegex, $uriPath, $matches ) ) {
-               list( /* all */, $rel, $archOrTemp, $filename, $thumbname ) = $matches;
-               $filename = urldecode( $filename );
-               $thumbname = urldecode( $thumbname );
+       $filename = urldecode( $filename );
+       $thumbname = urldecode( $thumbname );
 
-               $params = array( 'f' => $filename, 'rel404' => $rel );
-               if ( $archOrTemp == 'archive/' ) {
-                       $params['archived'] = 1;
-               } elseif ( $archOrTemp == 'temp/' ) {
-                       $params['temp'] = 1;
-               }
+       $params = array( 'f' => $filename, 'rel404' => $rel );
+       if ( $archOrTemp === 'archive/' ) {
+               $params['archived'] = 1;
+       } elseif ( $archOrTemp === 'temp/' ) {
+               $params['temp'] = 1;
+       }
 
-               // Check if the parameters can be extracted from the thumbnail name...
-               if ( preg_match( '!^(page(\d*)-)*(\d*)px-[^/]*$!', $thumbname, $matches ) ) {
-                       list( /* all */, $pagefull, $pagenum, $size ) = $matches;
-                       $params['width'] = $size;
-                       if ( $pagenum ) {
-                               $params['page'] = $pagenum;
-                       }
-                       return $params; // valid thumbnail URL
-               // Hooks return false if they manage to *resolve* the parameters
-               } elseif ( !wfRunHooks( 'ExtractThumbParameters', array( $thumbname, &$params ) ) ) {
-                       return $params; // valid thumbnail URL (via extension or config)
+       // Check if the parameters can be extracted from the thumbnail name...
+       if ( preg_match( '!^(page(\d*)-)*(\d*)px-[^/]*$!', $thumbname, $matches ) ) {
+               list( /* all */, $pagefull, $pagenum, $size ) = $matches;
+               $params['width'] = $size;
+               if ( $pagenum ) {
+                       $params['page'] = $pagenum;
                }
+               return $params; // valid thumbnail URL
+       // Hooks return false if they manage to *resolve* the parameters
+       } elseif ( !wfRunHooks( 'ExtractThumbParameters', array( $thumbname, &$params ) ) ) {
+               return $params; // valid thumbnail URL (via extension or config)
        }
 
        return null; // not a valid thumbnail URL