Merge "Add more tests for GlobalVarConfig"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sat, 23 Aug 2014 11:20:23 +0000 (11:20 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sat, 23 Aug 2014 11:20:23 +0000 (11:20 +0000)
163 files changed:
RELEASE-NOTES-1.24
includes/AutoLoader.php
includes/CategoryViewer.php
includes/DefaultSettings.php
includes/EditPage.php
includes/Import.php
includes/OutputPage.php
includes/Title.php
includes/actions/HistoryAction.php
includes/api/ApiBase.php
includes/api/ApiQueryIWLinks.php
includes/api/ApiQuerySiteinfo.php
includes/cache/LinkBatch.php
includes/cache/LinkCache.php
includes/cache/MapCacheLRU.php
includes/changes/ChangesList.php
includes/changes/EnhancedChangesList.php
includes/changes/OldChangesList.php
includes/config/ConfigFactory.php
includes/context/RequestContext.php
includes/db/Database.php
includes/db/DatabaseUtility.php
includes/db/LoadMonitor.php
includes/deferred/DeferredUpdates.php
includes/filerepo/FileRepo.php
includes/filerepo/file/LocalFile.php
includes/gallery/ImageGalleryBase.php
includes/installer/i18n/ko.json
includes/installer/i18n/nl.json
includes/installer/i18n/sc.json
includes/objectcache/MemcachedBagOStuff.php
includes/page/Article.php
includes/parser/CoreParserFunctions.php
includes/parser/LinkHolderArray.php
includes/parser/MWTidy.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderLanguageDataModule.php
includes/revisiondelete/RevDelItem.php [new file with mode: 0644]
includes/revisiondelete/RevDelList.php [new file with mode: 0644]
includes/revisiondelete/RevisionDeleteAbstracts.php [deleted file]
includes/skins/Skin.php
includes/skins/SkinFactory.php
includes/skins/SkinFallback.php
includes/specialpage/ImageQueryPage.php
includes/specials/SpecialNewimages.php
includes/specials/SpecialUpload.php
languages/Language.php
languages/i18n/ar.json
languages/i18n/az.json
languages/i18n/bcc.json
languages/i18n/bcl.json
languages/i18n/be-tarask.json
languages/i18n/be.json
languages/i18n/bg.json
languages/i18n/bho.json
languages/i18n/bn.json
languages/i18n/br.json
languages/i18n/ca.json
languages/i18n/cdo.json
languages/i18n/ce.json
languages/i18n/ckb.json
languages/i18n/cs.json
languages/i18n/de.json
languages/i18n/egl.json
languages/i18n/el.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/haw.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hsb.json
languages/i18n/hu.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/ka.json
languages/i18n/kk-cyrl.json
languages/i18n/kn.json
languages/i18n/ko.json
languages/i18n/la.json
languages/i18n/lb.json
languages/i18n/lrc.json
languages/i18n/lt.json
languages/i18n/lv.json
languages/i18n/lzh.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/ms.json
languages/i18n/myv.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nl.json
languages/i18n/oc.json
languages/i18n/or.json
languages/i18n/pa.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/ru.json
languages/i18n/sa.json
languages/i18n/sc.json
languages/i18n/si.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/sw.json
languages/i18n/ta.json
languages/i18n/te.json
languages/i18n/th.json
languages/i18n/tr.json
languages/i18n/yi.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/findHooks.php
maintenance/showJobs.php
maintenance/sqlite.inc
resources/Resources.php
resources/lib/oojs-ui/oojs-ui-agora.css
resources/lib/oojs-ui/oojs-ui-apex.css
resources/lib/oojs-ui/oojs-ui.js
resources/lib/oojs-ui/oojs-ui.svg.css
resources/lib/oojs/oojs.jquery.js
resources/src/mediawiki.action/mediawiki.action.view.redirect.js [new file with mode: 0644]
resources/src/mediawiki.action/mediawiki.action.view.redirectToFragment.js [deleted file]
resources/src/mediawiki.language/mediawiki.language.fallback.js [new file with mode: 0644]
resources/src/mediawiki.language/mediawiki.language.init.js
resources/src/mediawiki.ui/components/inputs.less
skins/common/images/button_template.png [deleted file]
tests/parser/parserTest.inc
tests/parser/parserTests.txt
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/StatusTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/api/ApiModuleManagerTest.php
tests/phpunit/includes/api/ApiTestCase.php
tests/phpunit/includes/api/RandomImageGenerator.php
tests/phpunit/includes/api/format/ApiFormatNoneTest.php [new file with mode: 0644]
tests/phpunit/includes/api/query/ApiQueryContinueTestBase.php
tests/phpunit/includes/content/ContentHandlerTest.php
tests/phpunit/includes/db/ORMRowTest.php
tests/phpunit/includes/deferred/DeferredUpdatesTest.php [new file with mode: 0644]
tests/phpunit/includes/diff/DifferenceEngineTest.php
tests/phpunit/includes/media/MediaWikiMediaTestCase.php
tests/phpunit/includes/parser/TidyTest.php
tests/phpunit/includes/skins/SkinFactoryTest.php
tests/phpunit/includes/specials/ImageListPagerTest.php [new file with mode: 0644]
tests/phpunit/includes/specials/SpecialListFilesTest.php [deleted file]
tests/phpunit/includes/specials/SpecialSearchTest.php
tests/phpunit/languages/LanguageTest.php
tests/phpunit/maintenance/backupTextPassTest.php
tests/phpunit/structure/ResourcesTest.php

index b354cc0..32ce12b 100644 (file)
@@ -60,6 +60,9 @@ production.
   specifying subprojects on the interwiki map of the target wiki, or a mix of
   the two. Existing configurations will still work.
 * Users must be able to edit through a page's protection to be able to delete it.
+* The default thumb size ($wgDefaultUserOptions['thumbsize']) is now 300px, up from
+  180px. If you have altered the number of entries in $wgThumbLimits for your wiki, you
+  may need to adjust your default user settings to compensate for the index change.
 
 === New features in 1.24 ===
 * Added a new hook, "WhatLinksHereProps", to allow extensions to annotate
@@ -163,6 +166,9 @@ production.
   log in, rather than being shown a page asking them to log in and having to click
   another link to actually get to the login page.
 * A JSONContent and JSONContentHandler were added for extensions to extend.
+* (bug 35045) Redirects to sections will now update the URL in browser's address
+  bar using the HTML5 History API. When [[Dog]] redirects to [[Animals#Dog]],
+  the user will now see "Animals#Dog" in their browser instead of "Dog#Dog".
 
 === Bug fixes in 1.24 ===
 * (bug 50572) MediaWiki:Blockip should support gender
@@ -193,6 +199,8 @@ production.
 * (bug 67870) wfShellExec() cuts off stdout at multiples of 8192 bytes.
 * $wgRunJobsAsync now works with private wikis (e.g. read requires login).
 * (bugs 57238, 65206) Blank pages can now be directly created.
+* (bug 69789) Title::getContentModel() now loads from the database when
+  necessary instead of incorrectly returning the default content model.
 
 === Web API changes in 1.24 ===
 * action=parse API now supports prop=modules, which provides the list of
@@ -235,6 +243,8 @@ production.
 * action=paraminfo now indicates when a parameter is specifying a submodule.
   Internally, a new param type 'submodule' is available to indicate this which
   automatically queries the list of submodule names from the ApiModuleManager.
+* The iwurl parameter to prop=iwlinks is deprecated in favor of iwprop=url, for
+  parallelism with prop=langlinks.
 
 === Languages updated in 1.24 ===
 
index f7f4c59..38e92b6 100644 (file)
@@ -893,8 +893,8 @@ $wgAutoloadLocalClasses = array(
        'RevDelArchiveList' => 'includes/revisiondelete/RevDelArchiveList.php',
        'RevDelFileItem' => 'includes/revisiondelete/RevDelFileItem.php',
        'RevDelFileList' => 'includes/revisiondelete/RevDelFileList.php',
-       'RevDelItem' => 'includes/revisiondelete/RevisionDeleteAbstracts.php',
-       'RevDelList' => 'includes/revisiondelete/RevisionDeleteAbstracts.php',
+       'RevDelItem' => 'includes/revisiondelete/RevDelItem.php',
+       'RevDelList' => 'includes/revisiondelete/RevDelList.php',
        'RevDelLogItem' => 'includes/revisiondelete/RevDelLogItem.php',
        'RevDelLogList' => 'includes/revisiondelete/RevDelLogList.php',
        'RevDelRevisionItem' => 'includes/revisiondelete/RevDelRevisionItem.php',
index 22eb3d1..ec8efae 100644 (file)
@@ -154,14 +154,13 @@ class CategoryViewer extends ContextSource {
                        // Note that null for mode is taken to mean use default.
                        $mode = $this->getRequest()->getVal( 'gallerymode', null );
                        try {
-                               $this->gallery = ImageGalleryBase::factory( $mode );
+                               $this->gallery = ImageGalleryBase::factory( $mode, $this->getContext() );
                        } catch ( MWException $e ) {
                                // User specified something invalid, fallback to default.
-                               $this->gallery = ImageGalleryBase::factory();
+                               $this->gallery = ImageGalleryBase::factory( false, $this->getContext() );
                        }
 
                        $this->gallery->setHideBadImages();
-                       $this->gallery->setContext( $this->getContext() );
                } else {
                        $this->imgsNoGallery = array();
                        $this->imgsNoGallery_start_char = array();
index fd26cfe..14799c6 100644 (file)
@@ -3446,12 +3446,14 @@ $wgResourceLoaderValidateStaticJS = false;
 $wgResourceLoaderExperimentalAsyncLoading = false;
 
 /**
- * Global LESS variables. An associative array binding variable names to CSS
- * string values.
+ * Global LESS variables. An associative array binding variable names to
+ * LESS code snippets representing their values.
  *
- * Because the hashed contents of this array are used to construct the cache key
- * that ResourceLoader uses to look up LESS compilation results, updating this
- * array can be used to deliberately invalidate the set of cached results.
+ * Adding an item here is equivalent to writing `@variable: value;`
+ * at the beginning of all your .less files, with all the consequences.
+ * In particular, string values must be escaped and quoted.
+ *
+ * Changes to LESS variables do not trigger cache invalidation.
  *
  * @par Example:
  * @code
@@ -3469,10 +3471,7 @@ $wgResourceLoaderLESSVars = array();
  * Custom LESS functions. An associative array mapping function name to PHP
  * callable.
  *
- * Changes to LESS functions do not trigger cache invalidation. If you update
- * the behavior of a LESS function and need to invalidate stale compilation
- * results, you can touch one of values in $wgResourceLoaderLESSVars, as
- * documented above.
+ * Changes to LESS functions do not trigger cache invalidation.
  *
  * @since 1.22
  */
@@ -4248,7 +4247,7 @@ $wgDefaultUserOptions = array(
        'showtoolbar' => 1,
        'skin' => false,
        'stubthreshold' => 0,
-       'thumbsize' => 2,
+       'thumbsize' => 5,
        'underline' => 2,
        'uselivepreview' => 0,
        'usenewrc' => 0,
index 145eae2..70eb909 100644 (file)
@@ -3553,11 +3553,6 @@ HTML
                 * inserted between the two when no selection is highlighted
                 * and.  The tip text is shown when the user moves the mouse
                 * over the button.
-                *
-                * Also here: accesskeys (key), which are not used yet until
-                * someone can figure out a way to make them work in
-                * IE. However, we should make sure these keys are not defined
-                * on the edit page.
                 */
                $toolarray = array(
                        array(
@@ -3567,7 +3562,6 @@ HTML
                                'close'  => '\'\'\'',
                                'sample' => wfMessage( 'bold_sample' )->text(),
                                'tip'    => wfMessage( 'bold_tip' )->text(),
-                               'key'    => 'B'
                        ),
                        array(
                                'image'  => $wgLang->getImageFile( 'button-italic' ),
@@ -3576,7 +3570,6 @@ HTML
                                'close'  => '\'\'',
                                'sample' => wfMessage( 'italic_sample' )->text(),
                                'tip'    => wfMessage( 'italic_tip' )->text(),
-                               'key'    => 'I'
                        ),
                        array(
                                'image'  => $wgLang->getImageFile( 'button-link' ),
@@ -3585,7 +3578,6 @@ HTML
                                'close'  => ']]',
                                'sample' => wfMessage( 'link_sample' )->text(),
                                'tip'    => wfMessage( 'link_tip' )->text(),
-                               'key'    => 'L'
                        ),
                        array(
                                'image'  => $wgLang->getImageFile( 'button-extlink' ),
@@ -3594,7 +3586,6 @@ HTML
                                'close'  => ']',
                                'sample' => wfMessage( 'extlink_sample' )->text(),
                                'tip'    => wfMessage( 'extlink_tip' )->text(),
-                               'key'    => 'X'
                        ),
                        array(
                                'image'  => $wgLang->getImageFile( 'button-headline' ),
@@ -3603,7 +3594,6 @@ HTML
                                'close'  => " ==\n",
                                'sample' => wfMessage( 'headline_sample' )->text(),
                                'tip'    => wfMessage( 'headline_tip' )->text(),
-                               'key'    => 'H'
                        ),
                        $imagesAvailable ? array(
                                'image'  => $wgLang->getImageFile( 'button-image' ),
@@ -3612,7 +3602,6 @@ HTML
                                'close'  => ']]',
                                'sample' => wfMessage( 'image_sample' )->text(),
                                'tip'    => wfMessage( 'image_tip' )->text(),
-                               'key'    => 'D',
                        ) : false,
                        $imagesAvailable ? array(
                                'image'  => $wgLang->getImageFile( 'button-media' ),
@@ -3621,7 +3610,6 @@ HTML
                                'close'  => ']]',
                                'sample' => wfMessage( 'media_sample' )->text(),
                                'tip'    => wfMessage( 'media_tip' )->text(),
-                               'key'    => 'M'
                        ) : false,
                        array(
                                'image'  => $wgLang->getImageFile( 'button-nowiki' ),
@@ -3630,7 +3618,6 @@ HTML
                                'close'  => "</nowiki>",
                                'sample' => wfMessage( 'nowiki_sample' )->text(),
                                'tip'    => wfMessage( 'nowiki_tip' )->text(),
-                               'key'    => 'N'
                        ),
                        array(
                                'image'  => $wgLang->getImageFile( 'button-sig' ),
@@ -3639,7 +3626,6 @@ HTML
                                'close'  => '',
                                'sample' => '',
                                'tip'    => wfMessage( 'sig_tip' )->text(),
-                               'key'    => 'Y'
                        ),
                        array(
                                'image'  => $wgLang->getImageFile( 'button-hr' ),
@@ -3648,7 +3634,6 @@ HTML
                                'close'  => '',
                                'sample' => '',
                                'tip'    => wfMessage( 'hr_tip' )->text(),
-                               'key'    => 'R'
                        )
                );
 
index e6b5dc2..3880e25 100644 (file)
@@ -429,53 +429,12 @@ class WikiImporter {
                return '';
        }
 
-       # --------------
-
-       /** Left in for debugging */
-       private function dumpElement() {
-               static $lookup = null;
-               if ( !$lookup ) {
-                       $xmlReaderConstants = array(
-                               "NONE",
-                               "ELEMENT",
-                               "ATTRIBUTE",
-                               "TEXT",
-                               "CDATA",
-                               "ENTITY_REF",
-                               "ENTITY",
-                               "PI",
-                               "COMMENT",
-                               "DOC",
-                               "DOC_TYPE",
-                               "DOC_FRAGMENT",
-                               "NOTATION",
-                               "WHITESPACE",
-                               "SIGNIFICANT_WHITESPACE",
-                               "END_ELEMENT",
-                               "END_ENTITY",
-                               "XML_DECLARATION",
-                       );
-                       $lookup = array();
-
-                       foreach ( $xmlReaderConstants as $name ) {
-                               $lookup[constant( "XmlReader::$name" )] = $name;
-                       }
-               }
-
-               print var_dump(
-                       $lookup[$this->reader->nodeType],
-                       $this->reader->name,
-                       $this->reader->value
-               ) . "\n\n";
-       }
-
        /**
         * Primary entry point
         * @throws MWException
         * @return bool
         */
        public function doImport() {
-
                // Calls to reader->read need to be wrapped in calls to
                // libxml_disable_entity_loader() to avoid local file
                // inclusion attacks (bug 46932).
index 6ea4953..f3b8c98 100644 (file)
@@ -1240,7 +1240,7 @@ class OutputPage extends ContextSource {
         * @param array $categories Mapping category name => sort key
         */
        public function addCategoryLinks( array $categories ) {
-               global $wgContLang;
+               global $wgContLang, $wgContentHandlerUseDB;
 
                if ( !is_array( $categories ) || count( $categories ) == 0 ) {
                        return;
@@ -1253,9 +1253,15 @@ class OutputPage extends ContextSource {
 
                # Fetch existence plus the hiddencat property
                $dbr = wfGetDB( DB_SLAVE );
+               $fields = array( 'page_id', 'page_namespace', 'page_title', 'page_len',
+                       'page_is_redirect', 'page_latest', 'pp_value' );
+
+               if ( $wgContentHandlerUseDB ) {
+                       $fields[] = 'page_content_model';
+               }
+
                $res = $dbr->select( array( 'page', 'page_props' ),
-                       array( 'page_id', 'page_namespace', 'page_title', 'page_len',
-                               'page_is_redirect', 'page_latest', 'pp_value' ),
+                       $fields,
                        $lb->constructSet( 'page', $dbr ),
                        __METHOD__,
                        array(),
@@ -2673,7 +2679,7 @@ $templates
         */
        public function getResourceLoader() {
                if ( is_null( $this->mResourceLoader ) ) {
-                       $this->mResourceLoader = new ResourceLoader();
+                       $this->mResourceLoader = new ResourceLoader( $this->getConfig() );
                }
                return $this->mResourceLoader;
        }
index 15ff216..bcf9cbd 100644 (file)
@@ -944,10 +944,12 @@ class Title {
         * Get the page's content model id, see the CONTENT_MODEL_XXX constants.
         *
         * @throws MWException
+        * @param int $flags A bit field; may be Title::GAID_FOR_UPDATE to select for update
         * @return string Content model id
         */
-       public function getContentModel() {
-               if ( !$this->mContentModel ) {
+       public function getContentModel( $flags = 0 ) {
+               # Calling getArticleID() loads the field from cache as needed
+               if ( !$this->mContentModel && $this->getArticleID( $flags ) ) {
                        $linkCache = LinkCache::singleton();
                        $this->mContentModel = $linkCache->getGoodLinkFieldObj( $this, 'model' );
                }
@@ -3321,8 +3323,8 @@ class Title {
                        // @note: splitTitleString() is a temporary hack to allow MediaWikiTitleCodec to share
                        //        the parsing code with Title, while avoiding massive refactoring.
                        // @todo: get rid of secureAndSplit, refactor parsing code.
-                       $parser = self::getTitleParser();
-                       $parts = $parser->splitTitleString( $dbkey, $this->getDefaultNamespace() );
+                       $titleParser = self::getTitleParser();
+                       $parts = $titleParser->splitTitleString( $dbkey, $this->getDefaultNamespace() );
                } catch ( MalformedTitleException $ex ) {
                        return false;
                }
index 66ea245..523da68 100644 (file)
@@ -472,7 +472,6 @@ class HistoryPager extends ReverseChronologicalPager {
         * @return string HTML output
         */
        function getStartBody() {
-               global $wgUseMediaWikiUIEverywhere;
                $this->lastRow = false;
                $this->counter = 1;
                $this->oldIdChecked = 0;
@@ -486,7 +485,7 @@ class HistoryPager extends ReverseChronologicalPager {
                // Button container stored in $this->buttons for re-use in getEndBody()
                $this->buttons = '<div>';
                $className = 'historysubmit mw-history-compareselectedversions-button';
-               if ( $wgUseMediaWikiUIEverywhere ) {
+               if ( $this->getConfig()->get( 'UseMediaWikiUIEverywhere' ) ) {
                        $className .= ' mw-ui-button mw-ui-constructive';
                }
                $this->buttons .= $this->submitButton( $this->msg( 'compareselectedversions' )->text(),
index 23a3867..fc87a47 100644 (file)
@@ -2242,11 +2242,11 @@ abstract class ApiBase extends ContextSource {
         */
        protected function logFeatureUsage( $feature ) {
                $request = $this->getRequest();
-               $s = $feature .
-                       ' ' . wfUrlencode( str_replace( ' ', '_', $this->getUser()->getName() ) ) .
-                       ' ' . $request->getIP() .
-                       ' "' . $request->getHeader( 'Referer' ) . '"' .
-                       ' "' . $request->getHeader( 'User-agent' ) . '"';
+               $s = '"' . addslashes( $feature ) . '"' .
+                       ' "' . wfUrlencode( str_replace( ' ', '_', $this->getUser()->getName() ) ) . '"' .
+                       ' "' . $request->getIP() . '"' .
+                       ' "' . addslashes( $request->getHeader( 'Referer' ) ) . '"' .
+                       ' "' . addslashes( $request->getHeader( 'User-agent' ) ) . '"';
                wfDebugLog( 'api-feature-usage', $s, 'private' );
        }
 }
index bb388cd..a185ee2 100644 (file)
@@ -42,11 +42,19 @@ class ApiQueryIWLinks extends ApiQueryBase {
                }
 
                $params = $this->extractRequestParams();
+               $prop = array_flip( (array)$params['prop'] );
 
                if ( isset( $params['title'] ) && !isset( $params['prefix'] ) ) {
                        $this->dieUsageMsg( array( 'missingparam', 'prefix' ) );
                }
 
+               // Handle deprecated param
+               $this->requireMaxOneParameter( $params, 'url', 'prop' );
+               if ( $params['url'] ) {
+                       $this->logFeatureUsage( 'prop=iwlinks&iwurl' );
+                       $prop = array( 'url' => 1 );
+               }
+
                $this->addFields( array(
                        'iwl_from',
                        'iwl_prefix',
@@ -114,7 +122,7 @@ class ApiQueryIWLinks extends ApiQueryBase {
                        }
                        $entry = array( 'prefix' => $row->iwl_prefix );
 
-                       if ( $params['url'] ) {
+                       if ( isset( $prop['url'] ) ) {
                                $title = Title::newFromText( "{$row->iwl_prefix}:{$row->iwl_title}" );
                                if ( $title ) {
                                        $entry['url'] = wfExpandUrl( $title->getFullURL(), PROTO_CURRENT );
@@ -139,7 +147,16 @@ class ApiQueryIWLinks extends ApiQueryBase {
 
        public function getAllowedParams() {
                return array(
-                       'url' => false,
+                       'url' => array(
+                               ApiBase::PARAM_DFLT => false,
+                               ApiBase::PARAM_DEPRECATED => true,
+                       ),
+                       'prop' => array(
+                               ApiBase::PARAM_ISMULTI => true,
+                               ApiBase::PARAM_TYPE => array(
+                                       'url',
+                               )
+                       ),
                        'limit' => array(
                                ApiBase::PARAM_DFLT => 10,
                                ApiBase::PARAM_TYPE => 'limit',
@@ -162,7 +179,11 @@ class ApiQueryIWLinks extends ApiQueryBase {
 
        public function getParamDescription() {
                return array(
-                       'url' => 'Whether to get the full URL',
+                       'prop' => array(
+                               'Which additional properties to get for each interlanguage link',
+                               ' url      - Adds the full URL',
+                       ),
+                       'url' => "Whether to get the full URL (Cannot be used with {$this->getModulePrefix()}prop)",
                        'limit' => 'How many interwiki links to return',
                        'continue' => 'When more results are available, use this to continue',
                        'prefix' => 'Prefix for the interwiki',
index 90683a9..f17ac29 100644 (file)
@@ -393,7 +393,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        $prefix = $row['iw_prefix'];
                        $val = array();
                        $val['prefix'] = $prefix;
-                       if ( $row['iw_local'] == '1' ) {
+                       if ( isset( $row['iw_local'] ) && $row['iw_local'] == '1' ) {
                                $val['local'] = '';
                        }
                        if ( $row['iw_trans'] == '1' ) {
index 76cc583..48c063f 100644 (file)
@@ -180,6 +180,8 @@ class LinkBatch {
         * @return bool|ResultWrapper
         */
        public function doQuery() {
+               global $wgContentHandlerUseDB;
+
                if ( $this->isEmpty() ) {
                        return false;
                }
@@ -190,6 +192,11 @@ class LinkBatch {
                $table = 'page';
                $fields = array( 'page_id', 'page_namespace', 'page_title', 'page_len',
                        'page_is_redirect', 'page_latest' );
+
+               if ( $wgContentHandlerUseDB ) {
+                       $fields[] = 'page_content_model';
+               }
+
                $conds = $this->constructSet( 'page', $dbr );
 
                // Do query
index e80dfb3..6925df9 100644 (file)
@@ -129,10 +129,10 @@ class LinkCache {
         * @param int $len Text's length
         * @param int $redir Whether the page is a redirect
         * @param int $revision Latest revision's ID
-        * @param int $model Latest revision's content model ID
+        * @param string|null $model Latest revision's content model ID
         */
        public function addGoodLinkObj( $id, $title, $len = -1, $redir = null,
-               $revision = 0, $model = 0
+               $revision = 0, $model = null
        ) {
                $dbkey = $title->getPrefixedDBkey();
                $this->mGoodLinks[$dbkey] = (int)$id;
@@ -140,7 +140,7 @@ class LinkCache {
                        'length' => (int)$len,
                        'redirect' => (int)$redir,
                        'revision' => (int)$revision,
-                       'model' => (int)$model
+                       'model' => $model ? (string)$model : null,
                );
        }
 
index a22d802..95e3af7 100644 (file)
@@ -57,7 +57,7 @@ class MapCacheLRU {
         * @return void
         */
        public function set( $key, $value ) {
-               if ( isset( $this->cache[$key] ) ) {
+               if ( array_key_exists( $key, $this->cache ) ) {
                        $this->ping( $key ); // push to top
                } elseif ( count( $this->cache ) >= $this->maxCacheKeys ) {
                        reset( $this->cache );
@@ -74,7 +74,7 @@ class MapCacheLRU {
         * @return bool
         */
        public function has( $key ) {
-               return isset( $this->cache[$key] );
+               return array_key_exists( $key, $this->cache );
        }
 
        /**
@@ -86,7 +86,7 @@ class MapCacheLRU {
         * @return mixed
         */
        public function get( $key ) {
-               if ( isset( $this->cache[$key] ) ) {
+               if ( array_key_exists( $key, $this->cache ) ) {
                        $this->ping( $key ); // push to top
                        return $this->cache[$key];
                } else {
index 9b9c102..d3c44af 100644 (file)
@@ -110,9 +110,8 @@ class ChangesList extends ContextSource {
         * @return string
         */
        public function recentChangesFlags( $flags, $nothing = '&#160;' ) {
-               global $wgRecentChangesFlags;
                $f = '';
-               foreach ( array_keys( $wgRecentChangesFlags ) as $flag ) {
+               foreach ( array_keys( $this->getConfig()->get( 'RecentChangesFlags' ) ) as $flag ) {
                        $f .= isset( $flags[$flag] ) && $flags[$flag]
                                ? self::flag( $flag )
                                : $nothing;
@@ -188,8 +187,6 @@ class ChangesList extends ContextSource {
         * @return string
         */
        public static function showCharacterDifference( $old, $new, IContextSource $context = null ) {
-               global $wgRCChangedSizeThreshold, $wgMiserMode;
-
                if ( !$context ) {
                        $context = RequestContext::getMain();
                }
@@ -199,10 +196,11 @@ class ChangesList extends ContextSource {
                $szdiff = $new - $old;
 
                $lang = $context->getLanguage();
+               $config = $context->getConfig();
                $code = $lang->getCode();
                static $fastCharDiff = array();
                if ( !isset( $fastCharDiff[$code] ) ) {
-                       $fastCharDiff[$code] = $wgMiserMode || $context->msg( 'rc-change-size' )->plain() === '$1';
+                       $fastCharDiff[$code] = $config->get( 'MiserMode' ) || $context->msg( 'rc-change-size' )->plain() === '$1';
                }
 
                $formattedSize = $lang->formatNum( $szdiff );
@@ -211,7 +209,7 @@ class ChangesList extends ContextSource {
                        $formattedSize = $context->msg( 'rc-change-size', $formattedSize )->text();
                }
 
-               if ( abs( $szdiff ) > abs( $wgRCChangedSizeThreshold ) ) {
+               if ( abs( $szdiff ) > abs( $config->get( 'RCChangedSizeThreshold' ) ) ) {
                        $tag = 'strong';
                } else {
                        $tag = 'span';
index 82e36d9..4ab7729 100644 (file)
@@ -160,8 +160,6 @@ class EnhancedChangesList extends ChangesList {
         * @return string
         */
        protected function recentChangesBlockGroup( $block ) {
-               global $wgRCShowChangedSize;
-
                wfProfileIn( __METHOD__ );
 
                # Add the namespace and title of the block as part of the class
@@ -191,6 +189,7 @@ class EnhancedChangesList extends ChangesList {
                $namehidden = true;
                $allLogs = true;
                $oldid = '';
+               $RCShowChangedSize = $this->getConfig()->get( 'RCShowChangedSize' );
                foreach ( $block as $rcObj ) {
                        $oldid = $rcObj->mAttribs['rc_last_oldid'];
                        if ( $rcObj->mAttribs['rc_type'] == RC_NEW ) {
@@ -364,7 +363,7 @@ class EnhancedChangesList extends ChangesList {
                $r .= ' <span class="mw-changeslist-separator">. .</span> ';
 
                # Character difference (does not apply if only log items)
-               if ( $wgRCShowChangedSize && !$allLogs ) {
+               if ( $RCShowChangedSize && !$allLogs ) {
                        $last = 0;
                        $first = count( $block ) - 1;
                        # Some events (like logs) have an "empty" size, so we need to skip those...
@@ -442,7 +441,7 @@ class EnhancedChangesList extends ChangesList {
                        $r .= ' <span class="mw-changeslist-separator">. .</span> ';
 
                        # Character diff
-                       if ( $wgRCShowChangedSize ) {
+                       if ( $RCShowChangedSize ) {
                                $cd = $this->formatCharacterDifference( $rcObj );
                                if ( $cd !== '' ) {
                                        $r .= $cd . ' <span class="mw-changeslist-separator">. .</span> ';
@@ -481,8 +480,6 @@ class EnhancedChangesList extends ChangesList {
         * @return string A HTML formatted line (generated using $r)
         */
        protected function recentChangesBlockLine( $rcObj ) {
-               global $wgRCShowChangedSize;
-
                wfProfileIn( __METHOD__ );
                $query['curid'] = $rcObj->mAttribs['rc_cur_id'];
 
@@ -533,7 +530,7 @@ class EnhancedChangesList extends ChangesList {
                }
                $r .= ' <span class="mw-changeslist-separator">. .</span> ';
                # Character diff
-               if ( $wgRCShowChangedSize ) {
+               if ( $this->getConfig()->get( 'RCShowChangedSize' ) ) {
                        $cd = $this->formatCharacterDifference( $rcObj );
                        if ( $cd !== '' ) {
                                $r .= $cd . ' <span class="mw-changeslist-separator">. .</span> ';
index d590ff6..17c5b6e 100644 (file)
@@ -31,7 +31,6 @@ class OldChangesList extends ChangesList {
         * @return string|bool
         */
        public function recentChangesLine( &$rc, $watched = false, $linenumber = null ) {
-               global $wgRCShowChangedSize;
                wfProfileIn( __METHOD__ );
 
                # Should patrol-related stuff be shown?
@@ -80,7 +79,7 @@ class OldChangesList extends ChangesList {
                # Edit/log timestamp
                $this->insertTimestamp( $s, $rc );
                # Bytes added or removed
-               if ( $wgRCShowChangedSize ) {
+               if ( $this->getConfig()->get( 'RCShowChangedSize' ) ) {
                        $cd = $this->formatCharacterDifference( $rc );
                        if ( $cd !== '' ) {
                                $s .= $cd . '  <span class="mw-changeslist-separator">. .</span> ';
index 312d461..12b0c39 100644 (file)
@@ -61,6 +61,7 @@ class ConfigFactory {
         * Destroy the default instance
         * Should only be called inside unit tests
         * @throws MWException
+        * @codeCoverageIgnore
         */
        public static function destroyDefaultInstance() {
                if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
index 00733d8..5178189 100644 (file)
@@ -123,10 +123,10 @@ class RequestContext implements IContextSource {
        /**
         * Set the Title object
         *
-        * @param Title $t
+        * @param Title $title
         */
-       public function setTitle( Title $t ) {
-               $this->title = $t;
+       public function setTitle( Title $title ) {
+               $this->title = $title;
                // Erase the WikiPage so a new one with the new title gets created.
                $this->wikipage = null;
        }
@@ -421,6 +421,20 @@ class RequestContext implements IContextSource {
                return self::$instance;
        }
 
+       /**
+        * Get the RequestContext object associated with the main request
+        * and gives a warning to the log, to find places, where a context maybe is missing.
+        *
+        * @return RequestContext
+        * @since 1.24
+        */
+       public static function getMainAndWarn( $func = __METHOD__ ) {
+               wfDebug( $func . ' called without context. ' .
+                       "Using RequestContext::getMain() for sanity\n" );
+
+               return self::getMain();
+       }
+
        /**
         * Resets singleton returned by getMain(). Should be called only from unit tests.
         */
index 62d64eb..65ae444 100644 (file)
@@ -1130,7 +1130,9 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                        $this->mTrxIdleCallbacks = array(); // bug 65263
                        $this->mTrxPreCommitCallbacks = array(); // bug 65263
                        wfDebug( "Connection lost, reconnecting...\n" );
-
+                       # Stash the last error values since ping() might clear them
+                       $lastError = $this->lastError();
+                       $lastErrno = $this->lastErrno();
                        if ( $this->ping() ) {
                                global $wgRequestTime;
                                wfDebug( "Reconnected\n" );
@@ -1145,6 +1147,7 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                                if ( $hadTrx ) {
                                        # Leave $ret as false and let an error be reported.
                                        # Callers may catch the exception and continue to use the DB.
+                                       $this->reportQueryError( $lastError, $lastErrno, $sql, $fname, $tempIgnore );
                                } else {
                                        # Should be safe to silently retry (no trx and thus no callbacks)
                                        $ret = $this->doQuery( $commentedSql );
index 7ec3b4a..c1e80d3 100644 (file)
@@ -192,7 +192,7 @@ class ResultWrapper implements Iterator {
        }
 
        /**
-        * @return stdClass|array|false
+        * @return stdClass|array|bool
         */
        function current() {
                if ( is_null( $this->currentRow ) ) {
@@ -281,7 +281,7 @@ class FakeResultWrapper extends ResultWrapper {
 
        /**
         * Callers want to be able to access fields with $this->fieldName
-        * @return false|stdClass
+        * @return bool|stdClass
         */
        function fetchObject() {
                $this->fetchRow();
@@ -298,7 +298,7 @@ class FakeResultWrapper extends ResultWrapper {
        }
 
        /**
-        * @return false|stdClass
+        * @return bool|stdClass
         */
        function next() {
                return $this->fetchObject();
index fa2dd99..7281485 100644 (file)
@@ -74,9 +74,14 @@ class LoadMonitorNull implements LoadMonitor {
 class LoadMonitorMySQL implements LoadMonitor {
        /** @var LoadBalancer */
        public $parent;
+       /** @var BagOStuff */
+       protected $cache;
 
        public function __construct( $parent ) {
+               global $wgMemc;
+
                $this->parent = $parent;
+               $this->cache = $wgMemc ?: wfGetMainCache();
        }
 
        public function scaleLoads( &$loads, $group = false, $wiki = false ) {
@@ -93,14 +98,10 @@ class LoadMonitorMySQL implements LoadMonitor {
                $expiry = 5;
                $requestRate = 10;
 
-               global $wgMemc;
-               if ( empty( $wgMemc ) ) {
-                       $wgMemc = wfGetMainCache();
-               }
-
+               $cache = $this->cache;
                $masterName = $this->parent->getServerName( 0 );
                $memcKey = wfMemcKey( 'lag_times', $masterName );
-               $times = $wgMemc->get( $memcKey );
+               $times = $cache->get( $memcKey );
                if ( is_array( $times ) ) {
                        # Randomly recache with probability rising over $expiry
                        $elapsed = time() - $times['timestamp'];
@@ -116,10 +117,10 @@ class LoadMonitorMySQL implements LoadMonitor {
                }
 
                # Cache key missing or expired
-               if ( $wgMemc->add( "$memcKey:lock", 1, 10 ) ) {
+               if ( $cache->add( "$memcKey:lock", 1, 10 ) ) {
                        # Let this process alone update the cache value
-                       $unlocker = new ScopedCallback( function () use ( $wgMemc, $memcKey ) {
-                               $wgMemc->delete( $memcKey );
+                       $unlocker = new ScopedCallback( function () use ( $cache, $memcKey ) {
+                               $cache->delete( $memcKey );
                        } );
                } elseif ( is_array( $times ) ) {
                        # Could not acquire lock but an old cache exists, so use it
@@ -136,12 +137,17 @@ class LoadMonitorMySQL implements LoadMonitor {
                                $times[$i] = $conn->getLag();
                        } elseif ( false !== ( $conn = $this->parent->openConnection( $i, $wiki ) ) ) {
                                $times[$i] = $conn->getLag();
+                               // Close the connection to avoid sleeper connections piling up.
+                               // Note that the caller will pick one of these DBs and reconnect,
+                               // which is slightly inefficient, but this only matters for the lag
+                               // time cache miss cache, which is far less common that cache hits.
+                               $this->parent->closeConnection( $conn );
                        }
                }
 
                # Add a timestamp key so we know when it was cached
                $times['timestamp'] = time();
-               $wgMemc->set( $memcKey, $times, $expiry + 10 );
+               $cache->set( $memcKey, $times, $expiry + 10 );
                unset( $times['timestamp'] ); // hide from caller
 
                return $times;
index 2178281..b0c1899 100644 (file)
@@ -99,25 +99,29 @@ class DeferredUpdates {
                        $dbw = wfGetDB( DB_MASTER );
                }
 
-               /** @var DeferrableUpdate $update */
-               foreach ( $updates as $update ) {
-                       try {
-                               $update->doUpdate();
+               while ( $updates ) {
+                       self::clearPendingUpdates();
 
-                               if ( $doCommit && $dbw->trxLevel() ) {
-                                       $dbw->commit( __METHOD__, 'flush' );
-                               }
-                       } catch ( MWException $e ) {
-                               // We don't want exceptions thrown during deferred updates to
-                               // be reported to the user since the output is already sent.
-                               // Instead we just log them.
-                               if ( !$e instanceof ErrorPageError ) {
-                                       MWExceptionHandler::logException( $e );
+                       /** @var DeferrableUpdate $update */
+                       foreach ( $updates as $update ) {
+                               try {
+                                       $update->doUpdate();
+
+                                       if ( $doCommit && $dbw->trxLevel() ) {
+                                               $dbw->commit( __METHOD__, 'flush' );
+                                       }
+                               } catch ( MWException $e ) {
+                                       // We don't want exceptions thrown during deferred updates to
+                                       // be reported to the user since the output is already sent.
+                                       // Instead we just log them.
+                                       if ( !$e instanceof ErrorPageError ) {
+                                               MWExceptionHandler::logException( $e );
+                                       }
                                }
                        }
+                       $updates = array_merge( $wgDeferredUpdateList, self::$updates );
                }
 
-               self::clearPendingUpdates();
                wfProfileOut( __METHOD__ );
        }
 
index 25a06d2..5929525 100644 (file)
@@ -1346,13 +1346,16 @@ class FileRepo {
         * Checks existence of an array of files.
         *
         * @param array $files Virtual URLs (or storage paths) of files to check
-        * @return array|bool Either array of files and existence flags, or false
+        * @return array Map of files and existence flags, or false
         */
        public function fileExistsBatch( array $files ) {
+               $paths = array_map( array( $this, 'resolveToStoragePath' ), $files );
+               $this->backend->preloadFileStat( array( 'srcs' => $paths ) );
+
                $result = array();
                foreach ( $files as $key => $file ) {
-                       $file = $this->resolveToStoragePath( $file );
-                       $result[$key] = $this->backend->fileExists( array( 'src' => $file ) );
+                       $path = $this->resolveToStoragePath( $file );
+                       $result[$key] = $this->backend->fileExists( array( 'src' => $path ) );
                }
 
                return $result;
index 07f1f09..8824b66 100644 (file)
@@ -2284,7 +2284,12 @@ class LocalFileDeleteBatch {
                $this->doDBInserts();
 
                // Removes non-existent file from the batch, so we don't get errors.
-               $this->deletionBatch = $this->removeNonexistentFiles( $this->deletionBatch );
+               $checkStatus = $this->removeNonexistentFiles( $this->deletionBatch );
+               if ( !$checkStatus->isGood() ) {
+                       $this->status->merge( $checkStatus );
+                       return $this->status;
+               }
+               $this->deletionBatch = $checkStatus->value;
 
                // Execute the file deletion batch
                $status = $this->file->repo->deleteBatch( $this->deletionBatch );
@@ -2316,7 +2321,7 @@ class LocalFileDeleteBatch {
        /**
         * Removes non-existent files from a deletion batch.
         * @param array $batch
-        * @return array
+        * @return Status
         */
        function removeNonexistentFiles( $batch ) {
                $files = $newBatch = array();
@@ -2327,6 +2332,10 @@ class LocalFileDeleteBatch {
                }
 
                $result = $this->file->repo->fileExistsBatch( $files );
+               if ( in_array( null, $result, true ) ) {
+                       return Status::newFatal( 'backend-fail-internal',
+                               $this->file->repo->getBackend()->getName() );
+               }
 
                foreach ( $batch as $batchItem ) {
                        if ( $result[$batchItem[0]] ) {
@@ -2334,7 +2343,7 @@ class LocalFileDeleteBatch {
                        }
                }
 
-               return $newBatch;
+               return Status::newGood( $newBatch );
        }
 }
 
@@ -2575,7 +2584,12 @@ class LocalFileRestoreBatch {
                }
 
                // Remove missing files from batch, so we don't get errors when undeleting them
-               $storeBatch = $this->removeNonexistentFiles( $storeBatch );
+               $checkStatus = $this->removeNonexistentFiles( $storeBatch );
+               if ( !$checkStatus->isGood() ) {
+                       $status->merge( $checkStatus );
+                       return $status;
+               }
+               $storeBatch = $checkStatus->value;
 
                // Run the store batch
                // Use the OVERWRITE_SAME flag to smooth over a common error
@@ -2635,7 +2649,7 @@ class LocalFileRestoreBatch {
        /**
         * Removes non-existent files from a store batch.
         * @param array $triplets
-        * @return array
+        * @return Status
         */
        function removeNonexistentFiles( $triplets ) {
                $files = $filteredTriplets = array();
@@ -2644,6 +2658,10 @@ class LocalFileRestoreBatch {
                }
 
                $result = $this->file->repo->fileExistsBatch( $files );
+               if ( in_array( null, $result, true ) ) {
+                       return Status::newFatal( 'backend-fail-internal',
+                               $this->file->repo->getBackend()->getName() );
+               }
 
                foreach ( $triplets as $file ) {
                        if ( $result[$file[0]] ) {
@@ -2651,7 +2669,7 @@ class LocalFileRestoreBatch {
                        }
                }
 
-               return $filteredTriplets;
+               return Status::newGood( $filteredTriplets );
        }
 
        /**
@@ -2824,7 +2842,12 @@ class LocalFileMoveBatch {
                $status = $repo->newGood();
 
                $triplets = $this->getMoveTriplets();
-               $triplets = $this->removeNonexistentFiles( $triplets );
+               $checkStatus = $this->removeNonexistentFiles( $triplets );
+               if ( !$checkStatus->isGood() ) {
+                       $status->merge( $checkStatus );
+                       return $status;
+               }
+               $triplets = $checkStatus->value;
                $destFile = wfLocalFile( $this->target );
 
                $this->file->lock(); // begin
@@ -2951,7 +2974,7 @@ class LocalFileMoveBatch {
        /**
         * Removes non-existent files from move batch.
         * @param array $triplets
-        * @return array
+        * @return Status
         */
        function removeNonexistentFiles( $triplets ) {
                $files = array();
@@ -2961,8 +2984,12 @@ class LocalFileMoveBatch {
                }
 
                $result = $this->file->repo->fileExistsBatch( $files );
-               $filteredTriplets = array();
+               if ( in_array( null, $result, true ) ) {
+                       return Status::newFatal( 'backend-fail-internal',
+                               $this->file->repo->getBackend()->getName() );
+               }
 
+               $filteredTriplets = array();
                foreach ( $triplets as $file ) {
                        if ( $result[$file[0]] ) {
                                $filteredTriplets[] = $file;
@@ -2971,7 +2998,7 @@ class LocalFileMoveBatch {
                        }
                }
 
-               return $filteredTriplets;
+               return Status::newGood( $filteredTriplets );
        }
 
        /**
index 2d3ea5a..b61a352 100644 (file)
@@ -86,19 +86,24 @@ abstract class ImageGalleryBase extends ContextSource {
         * should use to get a gallery.
         *
         * @param string|bool $mode Mode to use. False to use the default
+        * @param IContextSource|null $context
         * @throws MWException
         */
-       static function factory( $mode = false ) {
-               global $wgGalleryOptions, $wgContLang;
+       static function factory( $mode = false, IContextSource $context = null ) {
+               global $wgContLang;
                self::loadModes();
+               if ( !$context ) {
+                       $context = RequestContext::getMainAndWarn( __METHOD__ );
+               }
                if ( !$mode ) {
-                       $mode = $wgGalleryOptions['mode'];
+                       $galleryOpions = $context->getConfig()->get( 'GalleryOptions' );
+                       $mode = $galleryOpions['mode'];
                }
 
                $mode = $wgContLang->lc( $mode );
 
                if ( isset( self::$modeMapping[$mode] ) ) {
-                       return new self::$modeMapping[$mode]( $mode );
+                       return new self::$modeMapping[$mode]( $mode, $context );
                } else {
                        throw new MWException( "No gallery class registered for mode $mode" );
                }
@@ -124,18 +129,23 @@ abstract class ImageGalleryBase extends ContextSource {
         * You should not call this directly, but instead use
         * ImageGalleryBase::factory().
         * @param string $mode
+        * @param IContextSource|null $context
         */
-       function __construct( $mode = 'traditional' ) {
-               global $wgGalleryOptions;
+       function __construct( $mode = 'traditional', IContextSource $context = null ) {
+               if ( $context ) {
+                       $this->setContext( $context );
+               }
+
+               $galleryOptions = $this->getConfig()->get( 'GalleryOptions' );
                $this->mImages = array();
-               $this->mShowBytes = $wgGalleryOptions['showBytes'];
+               $this->mShowBytes = $galleryOptions['showBytes'];
                $this->mShowFilename = true;
                $this->mParser = false;
                $this->mHideBadImages = false;
-               $this->mPerRow = $wgGalleryOptions['imagesPerRow'];
-               $this->mWidths = $wgGalleryOptions['imageWidth'];
-               $this->mHeights = $wgGalleryOptions['imageHeight'];
-               $this->mCaptionLength = $wgGalleryOptions['captionLength'];
+               $this->mPerRow = $galleryOptions['imagesPerRow'];
+               $this->mWidths = $galleryOptions['imageWidth'];
+               $this->mHeights = $galleryOptions['imageHeight'];
+               $this->mCaptionLength = $galleryOptions['captionLength'];
                $this->mMode = $mode;
        }
 
index b2221a5..a2c963d 100644 (file)
        "config-extensions-help": "위에 나열된 확장 기능이 <code>./extensions</code>에서 발견되었습니다.\n\n추가적인 설정이 필요할 수 있습니다만 지금 활성화시킬 수 있습니다.",
        "config-skins": "스킨",
        "config-skins-use-as-default": "이 스킨을 기본값으로 사용",
+       "config-skins-must-enable-default": "기본값으로 설정한 스킨은 반드시 활성화해야 합니다.",
        "config-install-alreadydone": "'''경고:''' 이미 미디어위키를 설치했고 다시 설치하려고 합니다.\n다음 페이지로 진행하세요.",
        "config-install-begin": "\"{{int:config-continue}}\"을 누르면 미디어위키의 설치를 시작합니다.\n그래도 바꾸는 것을 원한다면 \"{{int:config-back}}\"를 누르세요.",
        "config-install-step-done": "완료",
index 14321ff..5bf1645 100644 (file)
@@ -12,7 +12,8 @@
                        "JurgenNL",
                        "Southparkfan",
                        "Seb35",
-                       "Mar(c)"
+                       "Mar(c)",
+                       "Sjoerddebruin"
                ]
        },
        "config-desc": "Het installatieprogramma voor MediaWiki",
@@ -57,7 +58,6 @@
        "config-env-good": "De omgeving is gecontroleerd.\nU kunt MediaWiki installeren.",
        "config-env-bad": "De omgeving is gecontroleerd.\nU kunt MediaWiki niet installeren.",
        "config-env-php": "PHP $1 is op dit moment geïnstalleerd.",
-       "config-env-php-toolow": "PHP $1 is geïnstalleerd.\nMediaWiki heeft PHP $2 of hoger nodig om correct te kunnen werken.",
        "config-unicode-using-utf8": "Voor Unicode-normalisatie wordt utf8_normalize.so van Brion Vibber gebruikt.",
        "config-unicode-using-intl": "Voor Unicode-normalisatie wordt de [http://pecl.php.net/intl PECL-extensie intl] gebruikt.",
        "config-unicode-pure-php-warning": "'''Waarschuwing''': de [http://pecl.php.net/intl PECL-extensie intl] is niet beschikbaar om de Unicodenormalisatie af te handelen en daarom wordt de langzame PHP-implementatie gebruikt.\nAls u MediaWiki voor een website met veel verkeer installeert, lees u dan in over [//www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicodenormalisatie].",
@@ -65,7 +65,6 @@
        "config-no-db": "Het was niet mogelijk een geschikte databasedriver te vinden voor PHP. U moet een databasedriver installeren voor PHP.\nDe volgende databases worden ondersteund: $1.\n\nAls u een gedeelde omgeving gebruikt, vraag dan aan uw hostingprovider een geschikte databasedriver te installeren.\nAls u PHP zelf hebt gecompileerd, wijzig dan uw instellingen zodat een databasedriver wordt geactiveerd, bijvoorbeeld via <code>./configure --with-mysql</code>.\nAls u PHP hebt geïnstalleerd via een Debian- of Ubuntu-package, installeer dan ook de module php5-mysql.",
        "config-outdated-sqlite": "''' Waarschuwing:''' u gebruikt SQLite $1. SQLite is niet beschikbaar omdat de minimaal vereiste versie $2 is.",
        "config-no-fts3": "'''Waarschuwing''': SQLite is gecompileerd zonder de module [//sqlite.org/fts3.html FTS3]; zoekfuncties zijn niet beschikbaar.",
-       "config-register-globals": "'''Waarschuwing: de PHP-optie <code>[http://php.net/register_globals register_globals]</code> is ingeschakeld.'''\n'''Schakel deze uit als dat mogelijk is.'''\nMediaWiki kan ermee werken, maar uw server is dan  kwetsbaarder voor eventuele beveiligingslekken.",
        "config-magic-quotes-runtime": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_runtime] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
        "config-magic-quotes-sybase": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
        "config-mbstring": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
        "config-memcache-badport": "Poortnummers voor Memcached moeten tussen $1 en $2 liggen.",
        "config-extensions": "Uitbreidingen",
        "config-extensions-help": "De bovenstaande uitbreidingen zijn aangetroffen in de map <code>./extensions</code>.\n\nMogelijk moet u aanvullende instellingen maken, maar u kunt deze uitbreidingen nu inschakelen.",
+       "config-skins": "Vormgevingen",
+       "config-skins-use-as-default": "Als standaard vormgeving instellen",
        "config-install-alreadydone": "'''Waarschuwing:''' het lijkt alsof u MediaWiki al hebt geïnstalleerd en probeert het programma opnieuw te installeren.\nGa door naar de volgende pagina.",
        "config-install-begin": "Als u nu op \"{{int:config-continue}}\" klikt, begint de installatie van MediaWiki.\nAls u nog wijzigingen wilt maken, klik dan op \"{{int:config-back}}\".",
        "config-install-step-done": "afgerond",
index 40f0902..100f316 100644 (file)
@@ -3,11 +3,12 @@
                "authors": [
                        "Andria",
                        "L2212",
-                       "Uharteko"
+                       "Uharteko",
+                       "Taxandru"
                ]
        },
        "config-page-language": "Limba",
        "config-page-name": "Nùmene",
        "config-page-options": "Preferèntzias",
-       "mainpagetext": "'''MediaWiki est istadu installadu bene.'''"
+       "mainpagetext": "'''MediaWiki est stadu installadu in modu currèggidu.'''"
 }
index 59191d7..54a464d 100644 (file)
@@ -154,7 +154,7 @@ class MemcachedBagOStuff extends BagOStuff {
                if ( $expiry > 2592000 && $expiry < 1000000000 ) {
                        $expiry = 2592000;
                }
-               return $expiry;
+               return (int) $expiry;
        }
 
        /**
index da88a69..984b01d 100644 (file)
@@ -975,7 +975,14 @@ class Article implements Page {
                global $wgRedirectSources;
                $outputPage = $this->getContext()->getOutput();
 
-               $rdfrom = $this->getContext()->getRequest()->getVal( 'rdfrom' );
+               $request = $this->getContext()->getRequest();
+               $rdfrom = $request->getVal( 'rdfrom' );
+
+               // Construct a URL for the current page view, but with the target title
+               $query = $request->getValues();
+               unset( $query['rdfrom'] );
+               unset( $query['title'] );
+               $redirectTargetUrl = $this->getTitle()->getLinkURL( $query );
 
                if ( isset( $this->mRedirectedFrom ) ) {
                        // This is an internally redirected page view.
@@ -990,11 +997,12 @@ class Article implements Page {
 
                                $outputPage->addSubtitle( wfMessage( 'redirectedfrom' )->rawParams( $redir ) );
 
-                               // Set the fragment if one was specified in the redirect
-                               if ( $this->getTitle()->hasFragment() ) {
-                                       $outputPage->addJsConfigVars( 'wgRedirectToFragment', $this->getTitle()->getFragmentForURL() );
-                                       $outputPage->addModules( 'mediawiki.action.view.redirectToFragment' );
-                               }
+                               // Add the script to update the displayed URL and
+                               // set the fragment if one was specified in the redirect
+                               $outputPage->addJsConfigVars( array(
+                                       'wgInternalRedirectTargetUrl' => $redirectTargetUrl,
+                               ) );
+                               $outputPage->addModules( 'mediawiki.action.view.redirect' );
 
                                // Add a <link rel="canonical"> tag
                                $outputPage->setCanonicalUrl( $this->getTitle()->getLocalURL() );
@@ -1011,6 +1019,12 @@ class Article implements Page {
                                $redir = Linker::makeExternalLink( $rdfrom, $rdfrom );
                                $outputPage->addSubtitle( wfMessage( 'redirectedfrom' )->rawParams( $redir ) );
 
+                               // Add the script to update the displayed URL
+                               $outputPage->addJsConfigVars( array(
+                                       'wgInternalRedirectTargetUrl' => $redirectTargetUrl,
+                               ) );
+                               $outputPage->addModules( 'mediawiki.action.view.redirect' );
+
                                return true;
                        }
                }
index cd1f32d..983fc14 100644 (file)
@@ -1000,7 +1000,10 @@ class CoreParserFunctions {
         * @since 1.23
         */
        private static function getCachedRevisionObject( $parser, $title = null ) {
-               static $cache = array();
+               static $cache = null;
+               if ( !isset( $cache ) ) {
+                       $cache = new MapCacheLRU( 100 );
+               }
 
                if ( is_null( $title ) ) {
                        return null;
@@ -1021,21 +1024,21 @@ class CoreParserFunctions {
                // Normalize name for cache
                $page = $title->getPrefixedDBkey();
 
-               if ( array_key_exists( $page, $cache ) ) { // cache contains null values
-                       return $cache[$page];
+               if ( $cache->has( $page ) ) { // cache contains null values
+                       return $cache->get( $page );
                }
                if ( $parser->incrementExpensiveFunctionCount() ) {
                        $rev = Revision::newFromTitle( $title, false, Revision::READ_NORMAL );
                        $pageID = $rev ? $rev->getPage() : 0;
                        $revID = $rev ? $rev->getId() : 0;
-                       $cache[$page] = $rev; // maybe null
+                       $cache->set( $page, $rev ); // maybe null
 
                        // Register dependency in templatelinks
                        $parser->getOutput()->addTemplate( $title, $pageID, $revID );
 
                        return $rev;
                }
-               $cache[$page] = null;
+               $cache->set( $page, null );
                return null;
        }
 
index c3925b3..7794fae 100644 (file)
@@ -290,7 +290,7 @@ class LinkHolderArray {
                }
 
                wfProfileIn( __METHOD__ );
-               global $wgContLang;
+               global $wgContLang, $wgContentHandlerUseDB;
 
                $colours = array();
                $linkCache = LinkCache::singleton();
@@ -348,10 +348,16 @@ class LinkHolderArray {
                                );
                        }
 
+                       $fields = array( 'page_id', 'page_namespace', 'page_title',
+                               'page_is_redirect', 'page_len', 'page_latest' );
+
+                       if ( $wgContentHandlerUseDB ) {
+                               $fields[] = 'page_content_model';
+                       }
+
                        $res = $dbr->select(
                                'page',
-                               array( 'page_id', 'page_namespace', 'page_title',
-                                       'page_is_redirect', 'page_len', 'page_latest' ),
+                               $fields,
                                $dbr->makeList( $where, LIST_OR ),
                                __METHOD__
                        );
@@ -465,7 +471,7 @@ class LinkHolderArray {
         * @param array $colours
         */
        protected function doVariants( &$colours ) {
-               global $wgContLang;
+               global $wgContLang, $wgContentHandlerUseDB;
                $linkBatch = new LinkBatch();
                $variantMap = array(); // maps $pdbkey_Variant => $keys (of link holders)
                $output = $this->parent->getOutput();
@@ -554,9 +560,15 @@ class LinkHolderArray {
                if ( !$linkBatch->isEmpty() ) {
                        // construct query
                        $dbr = wfGetDB( DB_SLAVE );
+                       $fields = array( 'page_id', 'page_namespace', 'page_title',
+                               'page_is_redirect', 'page_len', 'page_latest' );
+
+                       if ( $wgContentHandlerUseDB ) {
+                               $fields[] = 'page_content_model';
+                       }
+
                        $varRes = $dbr->select( 'page',
-                               array( 'page_id', 'page_namespace', 'page_title',
-                                       'page_is_redirect', 'page_len', 'page_latest' ),
+                               $fields,
                                $linkBatch->constructSet( 'page', $dbr ),
                                __METHOD__
                        );
index a108d2b..b310862 100644 (file)
@@ -65,7 +65,9 @@ class MWTidyWrapper {
                // ...and <mw:toc> markers
                $wrappedtext = preg_replace_callback( '/\<\\/?mw:toc\>/',
                        array( &$this, 'replaceCallback' ), $wrappedtext );
-
+               // ... and <math> tags
+               $wrappedtext = preg_replace_callback( '/\<math(.*?)\<\\/math\>/s',
+                       array( &$this, 'replaceCallback' ), $wrappedtext );
                // Modify inline Microdata <link> and <meta> elements so they say <html-link> and <html-meta> so
                // we can trick Tidy into not stripping them out by including them in tidy's new-empty-tags config
                $wrappedtext = preg_replace( '!<(link|meta)([^>]*?)(/{0,1}>)!', '<html-$1$2$3', $wrappedtext );
index 198420c..5f72d8d 100644 (file)
@@ -1007,12 +1007,14 @@ class ResourceLoader {
                                $out .= self::makeLoaderStateScript( $states );
                        }
 
-                       // In only=script requests for modules that are not raw (e.g. not the startup module)
-                       // ensure the execution is conditional to avoid situations where browsers with an
-                       // unsupported environment do unconditionally execute a module's scripts. Otherwise users
-                       // will get things like "ReferenceError: mw is undefined" or "jQuery is undefined" from
-                       // legacy scripts loaded with only=scripts (such as the 'site' module).
-                       $out = self::makeLoaderConditionalScript( $out );
+                       if ( $context->getOnly() === 'scripts' ) {
+                               // In only=script requests for modules that are not raw (e.g. not the startup module)
+                               // ensure the execution is conditional to avoid situations where browsers with an
+                               // unsupported environment do unconditionally execute a module's scripts. Otherwise users
+                               // will get things like "ReferenceError: mw is undefined" or "jQuery is undefined" from
+                               // legacy scripts loaded with only=scripts (such as the 'site' module).
+                               $out = self::makeLoaderConditionalScript( $out );
+                       }
                } else {
                        if ( count( $states ) ) {
                                $exceptions .= self::makeComment(
@@ -1481,7 +1483,7 @@ class ResourceLoader {
 
                $less = new lessc();
                $less->setPreserveComments( true );
-               $less->setVariables( self::getLESSVars( $config ) );
+               $less->setVariables( self::getLessVars( $config ) );
                $less->setImportDir( $config->get( 'ResourceLoaderLESSImportPaths' ) );
                foreach ( $config->get( 'ResourceLoaderLESSFunctions' ) as $name => $func ) {
                        $less->registerFunction( $name, $func );
@@ -1496,7 +1498,7 @@ class ResourceLoader {
         * @since 1.22
         * @return array Map of variable names to string CSS values.
         */
-       public static function getLESSVars( Config $config ) {
+       public static function getLessVars( Config $config ) {
                $lessVars = $config->get( 'ResourceLoaderLESSVars' );
                // Sort by key to ensure consistent hashing for cache lookups.
                ksort( $lessVars );
index 8a223b0..0c84700 100644 (file)
@@ -859,7 +859,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                }
 
                if ( $this->getStyleSheetLang( $localPath ) === 'less' ) {
-                       $style = $this->compileLESSFile( $localPath );
+                       $style = $this->compileLessFile( $localPath );
                        $this->hasGeneratedStyles = true;
                } else {
                        $style = file_get_contents( $localPath );
@@ -898,61 +898,20 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                return $this->targets;
        }
 
-       /**
-        * Generate a cache key for a LESS file.
-        *
-        * The cache key varies on the file name and the names and values of global
-        * LESS variables.
-        *
-        * @since 1.22
-        * @param string $fileName File name of root LESS file.
-        * @return string Cache key
-        */
-       protected function getLESSCacheKey( $fileName ) {
-               $vars = json_encode( ResourceLoader::getLESSVars( $this->getConfig() ) );
-               $hash = md5( $fileName . $vars );
-               return wfMemcKey( 'resourceloader', 'less', $hash );
-       }
-
        /**
         * Compile a LESS file into CSS.
         *
-        * If invalid, returns replacement CSS source consisting of the compilation
-        * error message encoded as a comment. To save work, we cache a result object
-        * which comprises the compiled CSS and the names & mtimes of the files
-        * that were processed. lessphp compares the cached & current mtimes and
-        * recompiles as necessary.
+        * Keeps track of all used files and adds them to localFileRefs.
         *
         * @since 1.22
-        * @throws Exception If Less encounters a parse error
-        * @throws MWException If Less compilation returns unexpection result
+        * @throws Exception If lessc encounters a parse error
         * @param string $fileName File path of LESS source
         * @return string CSS source
         */
-       protected function compileLESSFile( $fileName ) {
-               $key = $this->getLESSCacheKey( $fileName );
-               $cache = wfGetCache( CACHE_ANYTHING );
-
-               // The input to lessc. Either an associative array representing the
-               // cached results of a previous compilation, or the string file name if
-               // no cache result exists.
-               $source = $cache->get( $key );
-               if ( !is_array( $source ) || !isset( $source['root'] ) ) {
-                       $source = $fileName;
-               }
-
+       protected function compileLessFile( $fileName ) {
                $compiler = ResourceLoader::getLessCompiler( $this->getConfig() );
-               $result = null;
-
-               $result = $compiler->cachedCompile( $source );
-
-               if ( !is_array( $result ) ) {
-                       throw new MWException( 'LESS compiler result has type '
-                               . gettype( $result ) . '; array expected.' );
-               }
-
-               $this->localFileRefs += array_keys( $result['files'] );
-               $cache->set( $key, $result );
-               return $result['compiled'];
+               $result = $compiler->compileFile( $fileName );
+               $this->localFileRefs += array_keys( $compiler->allParsedFiles() );
+               return $result;
        }
 }
index a1c8ac9..09d90d6 100644 (file)
@@ -43,6 +43,7 @@ class ResourceLoaderLanguageDataModule extends ResourceLoaderModule {
                        'grammarForms' => $language->getGrammarForms(),
                        'pluralRules' => $language->getPluralRules(),
                        'digitGroupingPattern' => $language->digitGroupingPattern(),
+                       'fallbackLanguages' => $language->getFallbackLanguages(),
                );
        }
 
diff --git a/includes/revisiondelete/RevDelItem.php b/includes/revisiondelete/RevDelItem.php
new file mode 100644 (file)
index 0000000..ebdbf3a
--- /dev/null
@@ -0,0 +1,62 @@
+<?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 RevisionDelete
+ */
+
+/**
+ * Abstract base class for deletable items
+ */
+abstract class RevDelItem extends RevisionItemBase {
+       /**
+        * Returns true if the item is "current", and the operation to set the given
+        * bits can't be executed for that reason
+        * STUB
+        * @param int $newBits
+        * @return bool
+        */
+       public function isHideCurrentOp( $newBits ) {
+               return false;
+       }
+
+       /**
+        * Get the current deletion bitfield value
+        */
+       abstract public function getBits();
+
+       /**
+        * Set the visibility of the item. This should do any necessary DB queries.
+        *
+        * The DB update query should have a condition which forces it to only update
+        * if the value in the DB matches the value fetched earlier with the SELECT.
+        * If the update fails because it did not match, the function should return
+        * false. This prevents concurrency problems.
+        *
+        * @param int $newBits
+        * @return bool Success
+        */
+       abstract public function setBits( $newBits );
+
+       /**
+        * Get the return information about the revision for the API
+        * @since 1.23
+        * @param ApiResult $result API result object
+        * @return array Data for the API result
+        */
+       abstract public function getApiData( ApiResult $result );
+}
diff --git a/includes/revisiondelete/RevDelList.php b/includes/revisiondelete/RevDelList.php
new file mode 100644 (file)
index 0000000..a0ff667
--- /dev/null
@@ -0,0 +1,313 @@
+<?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 RevisionDelete
+ */
+
+/**
+ * Abstract base class for a list of deletable items. The list class
+ * needs to be able to make a query from a set of identifiers to pull
+ * relevant rows, to return RevDelItem subclasses wrapping them, and
+ * to wrap bulk update operations.
+ */
+abstract class RevDelList extends RevisionListBase {
+       function __construct( IContextSource $context, Title $title, array $ids ) {
+               parent::__construct( $context, $title );
+               $this->ids = $ids;
+       }
+
+       /**
+        * Get the DB field name associated with the ID list.
+        * This used to populate the log_search table for finding log entries.
+        * Override this function.
+        * @return string|null
+        */
+       public static function getRelationType() {
+               return null;
+       }
+
+       /**
+        * Get the user right required for this list type
+        * Override this function.
+        * @since 1.22
+        * @return string|null
+        */
+       public static function getRestriction() {
+               return null;
+       }
+
+       /**
+        * Get the revision deletion constant for this list type
+        * Override this function.
+        * @since 1.22
+        * @return int|null
+        */
+       public static function getRevdelConstant() {
+               return null;
+       }
+
+       /**
+        * Suggest a target for the revision deletion
+        * Optionally override this function.
+        * @since 1.22
+        * @param Title|null $target User-supplied target
+        * @param array $ids
+        * @return Title|null
+        */
+       public static function suggestTarget( $target, array $ids ) {
+               return $target;
+       }
+
+       /**
+        * Set the visibility for the revisions in this list. Logging and
+        * transactions are done here.
+        *
+        * @param array $params Associative array of parameters. Members are:
+        *     value:         The integer value to set the visibility to
+        *     comment:       The log comment.
+        *     perItemStatus: Set if you want per-item status reports
+        * @return Status
+        * @since 1.23 Added 'perItemStatus' param
+        */
+       public function setVisibility( $params ) {
+               $bitPars = $params['value'];
+               $comment = $params['comment'];
+               $perItemStatus = isset( $params['perItemStatus'] ) ? $params['perItemStatus'] : false;
+
+               $this->res = false;
+               $dbw = wfGetDB( DB_MASTER );
+               $this->doQuery( $dbw );
+               $dbw->begin( __METHOD__ );
+               $status = Status::newGood();
+               $missing = array_flip( $this->ids );
+               $this->clearFileOps();
+               $idsForLog = array();
+               $authorIds = $authorIPs = array();
+
+               if ( $perItemStatus ) {
+                       $status->itemStatuses = array();
+               }
+
+               // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+               for ( $this->reset(); $this->current(); $this->next() ) {
+                       // @codingStandardsIgnoreEnd
+                       $item = $this->current();
+                       unset( $missing[$item->getId()] );
+
+                       if ( $perItemStatus ) {
+                               $itemStatus = Status::newGood();
+                               $status->itemStatuses[$item->getId()] = $itemStatus;
+                       } else {
+                               $itemStatus = $status;
+                       }
+
+                       $oldBits = $item->getBits();
+                       // Build the actual new rev_deleted bitfield
+                       $newBits = RevisionDeleter::extractBitfield( $bitPars, $oldBits );
+
+                       if ( $oldBits == $newBits ) {
+                               $itemStatus->warning( 'revdelete-no-change', $item->formatDate(), $item->formatTime() );
+                               $status->failCount++;
+                               continue;
+                       } elseif ( $oldBits == 0 && $newBits != 0 ) {
+                               $opType = 'hide';
+                       } elseif ( $oldBits != 0 && $newBits == 0 ) {
+                               $opType = 'show';
+                       } else {
+                               $opType = 'modify';
+                       }
+
+                       if ( $item->isHideCurrentOp( $newBits ) ) {
+                               // Cannot hide current version text
+                               $itemStatus->error( 'revdelete-hide-current', $item->formatDate(), $item->formatTime() );
+                               $status->failCount++;
+                               continue;
+                       }
+                       if ( !$item->canView() ) {
+                               // Cannot access this revision
+                               $msg = ( $opType == 'show' ) ?
+                                       'revdelete-show-no-access' : 'revdelete-modify-no-access';
+                               $itemStatus->error( $msg, $item->formatDate(), $item->formatTime() );
+                               $status->failCount++;
+                               continue;
+                       }
+                       // Cannot just "hide from Sysops" without hiding any fields
+                       if ( $newBits == Revision::DELETED_RESTRICTED ) {
+                               $itemStatus->warning( 'revdelete-only-restricted', $item->formatDate(), $item->formatTime() );
+                               $status->failCount++;
+                               continue;
+                       }
+
+                       // Update the revision
+                       $ok = $item->setBits( $newBits );
+
+                       if ( $ok ) {
+                               $idsForLog[] = $item->getId();
+                               $status->successCount++;
+                               if ( $item->getAuthorId() > 0 ) {
+                                       $authorIds[] = $item->getAuthorId();
+                               } elseif ( IP::isIPAddress( $item->getAuthorName() ) ) {
+                                       $authorIPs[] = $item->getAuthorName();
+                               }
+                       } else {
+                               $itemStatus->error( 'revdelete-concurrent-change', $item->formatDate(), $item->formatTime() );
+                               $status->failCount++;
+                       }
+               }
+
+               // Handle missing revisions
+               foreach ( $missing as $id => $unused ) {
+                       if ( $perItemStatus ) {
+                               $status->itemStatuses[$id] = Status::newFatal( 'revdelete-modify-missing', $id );
+                       } else {
+                               $status->error( 'revdelete-modify-missing', $id );
+                       }
+                       $status->failCount++;
+               }
+
+               if ( $status->successCount == 0 ) {
+                       $dbw->rollback( __METHOD__ );
+                       return $status;
+               }
+
+               // Save success count
+               $successCount = $status->successCount;
+
+               // Move files, if there are any
+               $status->merge( $this->doPreCommitUpdates() );
+               if ( !$status->isOK() ) {
+                       // Fatal error, such as no configured archive directory
+                       $dbw->rollback( __METHOD__ );
+                       return $status;
+               }
+
+               // Log it
+               $this->updateLog( array(
+                       'title' => $this->title,
+                       'count' => $successCount,
+                       'newBits' => $newBits,
+                       'oldBits' => $oldBits,
+                       'comment' => $comment,
+                       'ids' => $idsForLog,
+                       'authorIds' => $authorIds,
+                       'authorIPs' => $authorIPs
+               ) );
+               $dbw->commit( __METHOD__ );
+
+               // Clear caches
+               $status->merge( $this->doPostCommitUpdates() );
+               return $status;
+       }
+
+       /**
+        * Reload the list data from the master DB. This can be done after setVisibility()
+        * to allow $item->getHTML() to show the new data.
+        */
+       function reloadFromMaster() {
+               $dbw = wfGetDB( DB_MASTER );
+               $this->res = $this->doQuery( $dbw );
+       }
+
+       /**
+        * Record a log entry on the action
+        * @param array $params Associative array of parameters:
+        *     newBits:         The new value of the *_deleted bitfield
+        *     oldBits:         The old value of the *_deleted bitfield.
+        *     title:           The target title
+        *     ids:             The ID list
+        *     comment:         The log comment
+        *     authorsIds:      The array of the user IDs of the offenders
+        *     authorsIPs:      The array of the IP/anon user offenders
+        * @throws MWException
+        */
+       protected function updateLog( $params ) {
+               // Get the URL param's corresponding DB field
+               $field = RevisionDeleter::getRelationType( $this->getType() );
+               if ( !$field ) {
+                       throw new MWException( "Bad log URL param type!" );
+               }
+               // Put things hidden from sysops in the oversight log
+               if ( ( $params['newBits'] | $params['oldBits'] ) & $this->getSuppressBit() ) {
+                       $logType = 'suppress';
+               } else {
+                       $logType = 'delete';
+               }
+               // Add params for effected page and ids
+               $logParams = $this->getLogParams( $params );
+               // Actually add the deletion log entry
+               $log = new LogPage( $logType );
+               $logid = $log->addEntry( $this->getLogAction(), $params['title'],
+                       $params['comment'], $logParams, $this->getUser() );
+               // Allow for easy searching of deletion log items for revision/log items
+               $log->addRelations( $field, $params['ids'], $logid );
+               $log->addRelations( 'target_author_id', $params['authorIds'], $logid );
+               $log->addRelations( 'target_author_ip', $params['authorIPs'], $logid );
+       }
+
+       /**
+        * Get the log action for this list type
+        * @return string
+        */
+       public function getLogAction() {
+               return 'revision';
+       }
+
+       /**
+        * Get log parameter array.
+        * @param array $params Associative array of log parameters, same as updateLog()
+        * @return array
+        */
+       public function getLogParams( $params ) {
+               return array(
+                       $this->getType(),
+                       implode( ',', $params['ids'] ),
+                       "ofield={$params['oldBits']}",
+                       "nfield={$params['newBits']}"
+               );
+       }
+
+       /**
+        * Clear any data structures needed for doPreCommitUpdates() and doPostCommitUpdates()
+        * STUB
+        */
+       public function clearFileOps() {
+       }
+
+       /**
+        * A hook for setVisibility(): do batch updates pre-commit.
+        * STUB
+        * @return Status
+        */
+       public function doPreCommitUpdates() {
+               return Status::newGood();
+       }
+
+       /**
+        * A hook for setVisibility(): do any necessary updates post-commit.
+        * STUB
+        * @return Status
+        */
+       public function doPostCommitUpdates() {
+               return Status::newGood();
+       }
+
+       /**
+        * Get the integer value of the flag used for suppression
+        */
+       abstract public function getSuppressBit();
+}
diff --git a/includes/revisiondelete/RevisionDeleteAbstracts.php b/includes/revisiondelete/RevisionDeleteAbstracts.php
deleted file mode 100644 (file)
index e92a533..0000000
+++ /dev/null
@@ -1,357 +0,0 @@
-<?php
-/**
- * Interface definition for deletable items.
- *
- * 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 RevisionDelete
- */
-
-/**
- * Abstract base class for a list of deletable items. The list class
- * needs to be able to make a query from a set of identifiers to pull
- * relevant rows, to return RevDelItem subclasses wrapping them, and
- * to wrap bulk update operations.
- */
-abstract class RevDelList extends RevisionListBase {
-       function __construct( IContextSource $context, Title $title, array $ids ) {
-               parent::__construct( $context, $title );
-               $this->ids = $ids;
-       }
-
-       /**
-        * Get the DB field name associated with the ID list.
-        * This used to populate the log_search table for finding log entries.
-        * Override this function.
-        * @return string|null
-        */
-       public static function getRelationType() {
-               return null;
-       }
-
-       /**
-        * Get the user right required for this list type
-        * Override this function.
-        * @since 1.22
-        * @return string|null
-        */
-       public static function getRestriction() {
-               return null;
-       }
-
-       /**
-        * Get the revision deletion constant for this list type
-        * Override this function.
-        * @since 1.22
-        * @return int|null
-        */
-       public static function getRevdelConstant() {
-               return null;
-       }
-
-       /**
-        * Suggest a target for the revision deletion
-        * Optionally override this function.
-        * @since 1.22
-        * @param Title|null $target User-supplied target
-        * @param array $ids
-        * @return Title|null
-        */
-       public static function suggestTarget( $target, array $ids ) {
-               return $target;
-       }
-
-       /**
-        * Set the visibility for the revisions in this list. Logging and
-        * transactions are done here.
-        *
-        * @param array $params Associative array of parameters. Members are:
-        *     value:         The integer value to set the visibility to
-        *     comment:       The log comment.
-        *     perItemStatus: Set if you want per-item status reports
-        * @return Status
-        * @since 1.23 Added 'perItemStatus' param
-        */
-       public function setVisibility( $params ) {
-               $bitPars = $params['value'];
-               $comment = $params['comment'];
-               $perItemStatus = isset( $params['perItemStatus'] ) ? $params['perItemStatus'] : false;
-
-               $this->res = false;
-               $dbw = wfGetDB( DB_MASTER );
-               $this->doQuery( $dbw );
-               $dbw->begin( __METHOD__ );
-               $status = Status::newGood();
-               $missing = array_flip( $this->ids );
-               $this->clearFileOps();
-               $idsForLog = array();
-               $authorIds = $authorIPs = array();
-
-               if ( $perItemStatus ) {
-                       $status->itemStatuses = array();
-               }
-
-               // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
-               for ( $this->reset(); $this->current(); $this->next() ) {
-                       // @codingStandardsIgnoreEnd
-                       $item = $this->current();
-                       unset( $missing[$item->getId()] );
-
-                       if ( $perItemStatus ) {
-                               $itemStatus = Status::newGood();
-                               $status->itemStatuses[$item->getId()] = $itemStatus;
-                       } else {
-                               $itemStatus = $status;
-                       }
-
-                       $oldBits = $item->getBits();
-                       // Build the actual new rev_deleted bitfield
-                       $newBits = RevisionDeleter::extractBitfield( $bitPars, $oldBits );
-
-                       if ( $oldBits == $newBits ) {
-                               $itemStatus->warning( 'revdelete-no-change', $item->formatDate(), $item->formatTime() );
-                               $status->failCount++;
-                               continue;
-                       } elseif ( $oldBits == 0 && $newBits != 0 ) {
-                               $opType = 'hide';
-                       } elseif ( $oldBits != 0 && $newBits == 0 ) {
-                               $opType = 'show';
-                       } else {
-                               $opType = 'modify';
-                       }
-
-                       if ( $item->isHideCurrentOp( $newBits ) ) {
-                               // Cannot hide current version text
-                               $itemStatus->error( 'revdelete-hide-current', $item->formatDate(), $item->formatTime() );
-                               $status->failCount++;
-                               continue;
-                       }
-                       if ( !$item->canView() ) {
-                               // Cannot access this revision
-                               $msg = ( $opType == 'show' ) ?
-                                       'revdelete-show-no-access' : 'revdelete-modify-no-access';
-                               $itemStatus->error( $msg, $item->formatDate(), $item->formatTime() );
-                               $status->failCount++;
-                               continue;
-                       }
-                       // Cannot just "hide from Sysops" without hiding any fields
-                       if ( $newBits == Revision::DELETED_RESTRICTED ) {
-                               $itemStatus->warning( 'revdelete-only-restricted', $item->formatDate(), $item->formatTime() );
-                               $status->failCount++;
-                               continue;
-                       }
-
-                       // Update the revision
-                       $ok = $item->setBits( $newBits );
-
-                       if ( $ok ) {
-                               $idsForLog[] = $item->getId();
-                               $status->successCount++;
-                               if ( $item->getAuthorId() > 0 ) {
-                                       $authorIds[] = $item->getAuthorId();
-                               } elseif ( IP::isIPAddress( $item->getAuthorName() ) ) {
-                                       $authorIPs[] = $item->getAuthorName();
-                               }
-                       } else {
-                               $itemStatus->error( 'revdelete-concurrent-change', $item->formatDate(), $item->formatTime() );
-                               $status->failCount++;
-                       }
-               }
-
-               // Handle missing revisions
-               foreach ( $missing as $id => $unused ) {
-                       if ( $perItemStatus ) {
-                               $status->itemStatuses[$id] = Status::newFatal( 'revdelete-modify-missing', $id );
-                       } else {
-                               $status->error( 'revdelete-modify-missing', $id );
-                       }
-                       $status->failCount++;
-               }
-
-               if ( $status->successCount == 0 ) {
-                       $dbw->rollback( __METHOD__ );
-                       return $status;
-               }
-
-               // Save success count
-               $successCount = $status->successCount;
-
-               // Move files, if there are any
-               $status->merge( $this->doPreCommitUpdates() );
-               if ( !$status->isOK() ) {
-                       // Fatal error, such as no configured archive directory
-                       $dbw->rollback( __METHOD__ );
-                       return $status;
-               }
-
-               // Log it
-               $this->updateLog( array(
-                       'title' => $this->title,
-                       'count' => $successCount,
-                       'newBits' => $newBits,
-                       'oldBits' => $oldBits,
-                       'comment' => $comment,
-                       'ids' => $idsForLog,
-                       'authorIds' => $authorIds,
-                       'authorIPs' => $authorIPs
-               ) );
-               $dbw->commit( __METHOD__ );
-
-               // Clear caches
-               $status->merge( $this->doPostCommitUpdates() );
-               return $status;
-       }
-
-       /**
-        * Reload the list data from the master DB. This can be done after setVisibility()
-        * to allow $item->getHTML() to show the new data.
-        */
-       function reloadFromMaster() {
-               $dbw = wfGetDB( DB_MASTER );
-               $this->res = $this->doQuery( $dbw );
-       }
-
-       /**
-        * Record a log entry on the action
-        * @param array $params Associative array of parameters:
-        *     newBits:         The new value of the *_deleted bitfield
-        *     oldBits:         The old value of the *_deleted bitfield.
-        *     title:           The target title
-        *     ids:             The ID list
-        *     comment:         The log comment
-        *     authorsIds:      The array of the user IDs of the offenders
-        *     authorsIPs:      The array of the IP/anon user offenders
-        * @throws MWException
-        */
-       protected function updateLog( $params ) {
-               // Get the URL param's corresponding DB field
-               $field = RevisionDeleter::getRelationType( $this->getType() );
-               if ( !$field ) {
-                       throw new MWException( "Bad log URL param type!" );
-               }
-               // Put things hidden from sysops in the oversight log
-               if ( ( $params['newBits'] | $params['oldBits'] ) & $this->getSuppressBit() ) {
-                       $logType = 'suppress';
-               } else {
-                       $logType = 'delete';
-               }
-               // Add params for effected page and ids
-               $logParams = $this->getLogParams( $params );
-               // Actually add the deletion log entry
-               $log = new LogPage( $logType );
-               $logid = $log->addEntry( $this->getLogAction(), $params['title'],
-                       $params['comment'], $logParams, $this->getUser() );
-               // Allow for easy searching of deletion log items for revision/log items
-               $log->addRelations( $field, $params['ids'], $logid );
-               $log->addRelations( 'target_author_id', $params['authorIds'], $logid );
-               $log->addRelations( 'target_author_ip', $params['authorIPs'], $logid );
-       }
-
-       /**
-        * Get the log action for this list type
-        * @return string
-        */
-       public function getLogAction() {
-               return 'revision';
-       }
-
-       /**
-        * Get log parameter array.
-        * @param array $params Associative array of log parameters, same as updateLog()
-        * @return array
-        */
-       public function getLogParams( $params ) {
-               return array(
-                       $this->getType(),
-                       implode( ',', $params['ids'] ),
-                       "ofield={$params['oldBits']}",
-                       "nfield={$params['newBits']}"
-               );
-       }
-
-       /**
-        * Clear any data structures needed for doPreCommitUpdates() and doPostCommitUpdates()
-        * STUB
-        */
-       public function clearFileOps() {
-       }
-
-       /**
-        * A hook for setVisibility(): do batch updates pre-commit.
-        * STUB
-        * @return Status
-        */
-       public function doPreCommitUpdates() {
-               return Status::newGood();
-       }
-
-       /**
-        * A hook for setVisibility(): do any necessary updates post-commit.
-        * STUB
-        * @return Status
-        */
-       public function doPostCommitUpdates() {
-               return Status::newGood();
-       }
-
-       /**
-        * Get the integer value of the flag used for suppression
-        */
-       abstract public function getSuppressBit();
-}
-
-/**
- * Abstract base class for deletable items
- */
-abstract class RevDelItem extends RevisionItemBase {
-       /**
-        * Returns true if the item is "current", and the operation to set the given
-        * bits can't be executed for that reason
-        * STUB
-        * @param int $newBits
-        * @return bool
-        */
-       public function isHideCurrentOp( $newBits ) {
-               return false;
-       }
-
-       /**
-        * Get the current deletion bitfield value
-        */
-       abstract public function getBits();
-
-       /**
-        * Set the visibility of the item. This should do any necessary DB queries.
-        *
-        * The DB update query should have a condition which forces it to only update
-        * if the value in the DB matches the value fetched earlier with the SELECT.
-        * If the update fails because it did not match, the function should return
-        * false. This prevents concurrency problems.
-        *
-        * @param int $newBits
-        * @return bool Success
-        */
-       abstract public function setBits( $newBits );
-
-       /**
-        * Get the return information about the revision for the API
-        * @since 1.23
-        * @param ApiResult $result API result object
-        * @return array Data for the API result
-        */
-       abstract public function getApiData( ApiResult $result );
-}
index 3750bad..dc06eba 100644 (file)
@@ -417,7 +417,7 @@ abstract class Skin extends ContextSource {
 
        /**
         * Return values for <html> element
-        * @return array of associative name-to-value elements for <html> element
+        * @return array Array of associative name-to-value elements for <html> element
         */
        public function getHtmlElementAttributes() {
                $lang = $this->getLanguage();
index 0935e33..6448088 100644 (file)
@@ -159,7 +159,7 @@ class SkinFactory {
         * Get a legacy skin which uses the autodiscovery mechanism.
         *
         * @param string $name
-        * @return Skin|bool false if the skin couldn't be constructed
+        * @return Skin|bool False if the skin couldn't be constructed
         */
        private function getLegacySkin( $name ) {
                $skinNames = $this->getLegacySkinNames();
index b63f7a1..96ff228 100644 (file)
@@ -25,4 +25,12 @@ class SkinFallback extends SkinTemplate {
                parent::setupSkinUserCss( $out );
                $out->addModuleStyles( 'mediawiki.skinning.interface' );
        }
+
+       /**
+        * @param OutputPage $out
+        */
+       public function initPage( OutputPage $out ) {
+               parent::initPage( $out );
+               $out->enableClientCache( false );
+       }
 }
index 3ff281f..272d533 100644 (file)
@@ -42,8 +42,7 @@ abstract class ImageQueryPage extends QueryPage {
         */
        protected function outputResults( $out, $skin, $dbr, $res, $num, $offset ) {
                if ( $num > 0 ) {
-                       $gallery = ImageGalleryBase::factory();
-                       $gallery->setContext( $this->getContext() );
+                       $gallery = ImageGalleryBase::factory( false, $this->getContext() );
 
                        # $res might contain the whole 1,000 rows, so we read up to
                        # $num [should update this to use a Pager]
index aff5947..546c191 100644 (file)
@@ -140,12 +140,11 @@ class NewFilesPager extends ReverseChronologicalPager {
                        // Note that null for mode is taken to mean use default.
                        $mode = $this->getRequest()->getVal( 'gallerymode', null );
                        try {
-                               $this->gallery = ImageGalleryBase::factory( $mode );
+                               $this->gallery = ImageGalleryBase::factory( $mode, $this->getContext() );
                        } catch ( MWException $e ) {
                                // User specified something invalid, fallback to default.
-                               $this->gallery = ImageGalleryBase::factory();
+                               $this->gallery = ImageGalleryBase::factory( false, $this->getContext() );
                        }
-                       $this->gallery->setContext( $this->getContext() );
                }
 
                return '';
index 4fd7cd4..5c5026c 100644 (file)
@@ -725,8 +725,7 @@ class SpecialUpload extends SpecialPage {
                        return '';
                }
 
-               $gallery = ImageGalleryBase::factory();
-               $gallery->setContext( $this->getContext() );
+               $gallery = ImageGalleryBase::factory( false, $this->getContext() );
                $gallery->setShowBytes( false );
                foreach ( $dupes as $file ) {
                        $gallery->add( $file->getTitle() );
index 8440bd4..2bc4554 100644 (file)
@@ -1026,9 +1026,9 @@ class Language {
 
        /**
         * Pass through result from $dateTimeObj->format()
-        * @param DateTime &$dateTimeObj
+        * @param DateTime|bool|null &$dateTimeObj
         * @param string $ts
-        * @param DateTimeZone $zone
+        * @param DateTimeZone|bool|null $zone
         * @param string $code
         * @return string
         */
@@ -3997,7 +3997,7 @@ class Language {
         * Get the list of variants supported by this language
         * see sample implementation in LanguageZh.php
         *
-        * @return array an array of language codes
+        * @return array An array of language codes
         */
        public function getVariants() {
                return $this->mConverter->getVariants();
@@ -4289,7 +4289,7 @@ class Language {
         *
         * @since 1.22
         * @param string $code Language code
-        * @return array array( fallbacks, site fallbacks )
+        * @return array Array( fallbacks, site fallbacks )
         */
        public static function getFallbacksIncludingSiteLanguage( $code ) {
                global $wgLanguageCode;
@@ -4344,7 +4344,7 @@ class Language {
         *
         * @since 1.19
         * @param string $code Language code
-        * @return array of message keys (strings)
+        * @return array Array of message keys (strings)
         */
        public static function getMessageKeysFor( $code ) {
                return self::getLocalisationCache()->getSubItemList( $code, 'messages' );
index 1d31cda..8453772 100644 (file)
@@ -62,6 +62,7 @@
        "tog-watchdefault": "أضف الصفحات والملفات التي أعدلها إلى قائمة مراقبتي",
        "tog-watchmoves": "أضف الصفحات والملفات التي أنقلها إلى قائمة مراقبتي",
        "tog-watchdeletion": "أضف الصفحات والملفات التي أحذفها إلى قائمة مراقبتي",
+       "tog-watchrollback": "أضف إلى قائمة مراقبتي الصفحات التي كنت أجريت فيها استرجاعات",
        "tog-minordefault": "أشِّر كل التعديلات على أنها طفيفة مبدئيا",
        "tog-previewontop": "أظهر معاينة النص فوق صندوق التحرير",
        "tog-previewonfirst": "أظهر معاينة مع أول تعديل",
        "randomincategory": "صفحة عشوائية في التصنيف",
        "randomincategory-invalidcategory": "\"$1\" ليس اسم تصنيف صالح.",
        "randomincategory-nopages": "لا توجد صفحات في التصنيف [[:Category:$1|$1]].",
-       "randomincategory-selectcategory": "عرض صفحة عشوائية من التصنيف:  $1   $2",
-       "randomincategory-selectcategory-submit": "اذهب",
        "randomredirect": "تحويلة عشوائية",
        "randomredirect-nopages": "لا توجد تحويلات في النطاق \"$1\".",
        "statistics": "إحصاءات",
        "import": "استيراد صفحات",
        "importinterwiki": "استيراد ترانسويكي",
        "import-interwiki-text": "اختر ويكي وعنوان الصفحة للاستيراد.\nتواريخ المراجعات وأسماء المحررين سيتم حفظها.\nكل أفعال الاستيراد عبر الويكي يتم تسجيلها في [[Special:Log/import|سجل الاستيراد]].",
-       "import-interwiki-source": "الويكي/الصفحة المصدر:",
        "import-interwiki-history": "انسخ كل نسخ التاريخ لهذه الصفحة",
        "import-interwiki-templates": "ضمن كل القوالب",
        "import-interwiki-submit": "استيراد",
index 0b75926..1a429a7 100644 (file)
@@ -25,7 +25,8 @@
                        "아라",
                        "Arystanbek",
                        "Dağlı95",
-                       "Sayginer"
+                       "Sayginer",
+                       "Şeyx Şamil"
                ]
        },
        "tog-underline": "Keçidlərin altını xətlə:",
        "updated": "(yeniləndi)",
        "note": "'''Qeyd:'''",
        "previewnote": "<strong>Unutmayın ki, bu yalnız sınaq göstərişidir.</strong> Dəyişiklikləriniz hal-hazırda qeyd edilməmişdir!",
+       "continue-editing": "Redaktə sahəsinə qayıt",
        "previewconflict": "Bu sınaq göstərişidir və yaddaşda saxlayacağınız təqdirdə mətnin redaktə səhifəsinin yuxarı hissəsində nəticənin necə olacağını göstərir.",
        "session_fail_preview": "'''Üzr istəyirik! Sizin redaktəniz saxlanılmadı. Serverdə identifikasiyanızla bağlı problemlər yaranmışdır. Lütfən bir daha təkrar edin. Problem həll olunmazsa hesabınızdan çıxın və yenidən daxil olun.'''",
        "editing": "Redaktə $1",
        "unusedtemplates": "İstifadəsiz şablonlar",
        "unusedtemplateswlh": "digər keçidlər",
        "randompage": "İxtiyari səhifə",
-       "randomincategory-selectcategory-submit": "Keç",
        "randomredirect": "İxtiyari istiqamətləndirmə",
        "randomredirect-nopages": "\"$1\" ad sahəsində heç bir yönləndirmə yoxdur.",
        "statistics": "Statistika",
        "thumbnail_image-missing": "Belə görünür ki, $1 faylı yoxdur",
        "import": "Səhifələri idxal et",
        "importinterwiki": "Vikilərarası çıxarma",
-       "import-interwiki-source": "Mənbə viki/səhifə:",
        "import-interwiki-history": "Səhifənin dəyişmə tarixçələrinin hamısını köçür",
        "import-interwiki-templates": "Bütün şablonlarla birlikdə",
        "import-interwiki-submit": "İdxal",
index 87ea98d..08c0dde 100644 (file)
        "delete-edit-reasonlist": "اصلاح کن دلایل حذفء",
        "delete-toobig": "صفحهء یک مزنین تاریح اصلاحی هست گیشتر چه $1 {{PLURAL:$1|بازبینی|بازبینی}}.\nحذف چوشین صفحات په خاظر جلو گر چه ناگهانی اتفاق ته سایت {{SITENAME}} ممنوع بوتت.",
        "delete-warning-toobig": "ای صفحه  مزنین تاریح اصلاح هست، گیش چه  $1 {{PLURAL:$1|بازبینی|بازبینی}}.\nحذف آی شاید کار دیتابیس  {{SITENAME}} قطع کنت؛\nگون اخطار پیش روت.",
-       "delete-cantedit": "شما نه توانیت ای صپحا پاک کنیت بی خاطیریکه شما اجازه نداریت آیرا ایڈیت کنیت.",
        "rollback": "پشت ترگ اصلاحات",
        "rollback_short": "پشتررگ",
        "rollbacklink": "عقب ترگ",
        "import": "وارد کن صفحاتء",
        "importinterwiki": "ورود بین ویکی",
        "import-interwiki-text": "یک ویکی و  عنوان صفحه انتخاب کن په ورود.\nتاریح بازبینی و نامان اصلاح کنوکان دارگ بیت.\nکل کاران ورود بین ویکی وارد بیت نه [[Special:Log/import|ورود آمار]].",
-       "import-interwiki-source": "ویکی بن در/صفحه:",
        "import-interwiki-history": "کپی کن کل بازبینی آن تاریح په ای صفحه",
        "import-interwiki-templates": "کل تمپلت هور بنت",
        "import-interwiki-submit": "ورود",
index 1448030..b471419 100644 (file)
        "invalidtitle-knownnamespace": "Imbalidong titulo na igwang espasyadong ngaran na \"$2\" asin teksto na \"$3\"",
        "invalidtitle-unknownnamespace": "Imbalidong titulo na igwang nin bakong bistado na bilang kan espasyadong ngaran na $1 asin teksto na \"$2\"",
        "exception-nologin": "Dai ka nakalaog",
-       "exception-nologin-text": "Tabi man [[Special:Userlogin|maglaog]]na tanganing makalangkay sa pahinang ini o aksyon.",
+       "exception-nologin-text": "Pakipalaog tabi tanganing makalangkay sa pahinang ini o aksyon.",
        "exception-nologin-text-manual": "Tabi man $1 na tanganing makalangkay sa pahinang ini o aksyon.",
        "virus-badscanner": "Raot na kasalansanan: Bakong bistadong virus scanner: ''$1''",
        "virus-scanfailed": "An paghingipid (scan) nagpalya (Koda $1)",
        "randomincategory": "Purakan na pahina sa kategoriya",
        "randomincategory-invalidcategory": "\"$1\" bako sarong balidong pangaran nin kategoriya.",
        "randomincategory-nopages": "Mayo nin mga pahina sa [[:Category:$1]].",
-       "randomincategory-selectcategory": "Magkua nin purakan na pahina gikan sa kategoriya: $1 $2.",
-       "randomincategory-selectcategory-submit": "Magduman",
+       "randomincategory-legend": "Purakan na pahina sa kategoriya",
        "randomredirect": "Random na pagredirekta",
        "randomredirect-nopages": "Mayo nin panukdo-liwat sa espasyong-ngaran na \"$1\".",
        "statistics": "Mga Estadistiko",
        "mywatchlist": "Bantay-listahan",
        "watchlistfor2": "Para ki $1 $2",
        "nowatchlist": "Mayo ka man na mga bagay saimong lista nin pigbabantayan.",
-       "watchlistanontext": "Mag $1 tabi para mahiling o maghira nin mga bagay saimong lista nin mga pigbabantayan.",
+       "watchlistanontext": "Pakipalaog tabi tanganing makapaghiling o makapagliwat sa mga aytem na yaon sa saimong bantay-listahan.",
        "watchnologin": "Mayô sa laog",
        "addwatch": "Idagdag sa bantay-listahan",
        "addedwatchtext": "Ining pahina \"[[:$1]]\" dinadagdag sa saimong mga [[Special:Watchlist|Bantay-listahan]].\nAn maabot na mga pagbabâgo sa páhinang ini asin sa asosyadong páhina nin olay paglilistahon duman.",
        "exbeforeblank": "Ini an dating laog bagô blinankohán: '$1'",
        "delete-confirm": "Puraon \"$1\"",
        "delete-legend": "Paraon",
-       "historywarning": "'''Patanid tabi:''' An pahina na saimong pagpupuraon may historiya na igwa nin haros $1 {{PLURAL:$1|rebisyon|mga rebisyon}}:",
+       "historywarning": "<strong>Patanid:</strong> An pahina na saimong pagpupuraon may historiya na igwa nin $1 {{PLURAL:$1|rebisyon|mga rebisyon}}:",
        "confirmdeletetext": "Paparaon mo sa base nin datos ining pahina kasabay an gabos na mga uusipón kaini.\nKonpirmaron tabì na talagang boot mong gibohon ini, nasasabotan mo an mga resulta, asin an piggigibo mo ini konporme sa\n[[{{MediaWiki:Policy-url}}]].",
        "actioncomplete": "An aksyon nakumpleto na",
        "actionfailed": "An aksyon nagpalya",
        "autoblockid": "Awtomatikong-kabarahan #$1",
        "block": "Barahon an paragamit",
        "unblock": "Haleon an bara kan paragamit",
-       "blockip": "Bagáton an paragamit",
+       "blockip": "Bagáton {{KASARIAN:$1|paragamit}}",
        "blockip-legend": "Kubkuba an paragamit",
        "blockiptext": "Gamiton an pormularyo sa babâ para bagaton an pagsurat kan sarong espesipikong IP o ngaran nin parágamit.\nDapat gibohon sana ini para maibitaran vandalismo, asin kompirmi sa [[{{MediaWiki:Policy-url}}|palakaw]].\nMagkaag nin espisipikong rason (halimbawa, magtao nin ehemplo kan mga páhinang rinaot).",
        "ipaddressorusername": "direksyon nin IP o gahâ:",
        "ipb-unblock-addr": "Paagihon $1",
        "ipb-unblock": "Bawion an pagbagat nin ngaran nin paragamit o direccion nin IP",
        "ipb-blocklist": "Hilingon an mga presenteng binagat",
-       "ipb-blocklist-contribs": "Mga kontribusyon para sa $1",
+       "ipb-blocklist-contribs": "Mga kontribusyon para sa {{KASARIAN:$1|$1}}",
        "unblockip": "Paagihon an parâgamit",
        "unblockiptext": "Gamiton an pormulario sa baba para puede giraray suratan an dating binagat na direccion nin IP address o ngaran nin paragamit.",
        "ipusubmit": "Haleon ining bara",
        "import": "Ilaog an mga páhina",
        "importinterwiki": "Ipadara an Transwiki",
        "import-interwiki-text": "Pumili nin sarong wiki asin titulo kan pahina na importaron.\nMga petsa nin kaliwatan asin pangaran kan mga paraliwat pagpepreserbaron.\nGabos na aksyon nin importa sa transwiki nakatala sa [[Special:Log/import|talaan nin importa]].",
-       "import-interwiki-source": "Ginikanang wiki/pahina:",
+       "import-interwiki-sourcepage": "Gikanang pahina:",
        "import-interwiki-history": "Kopyahon an gabos na mga bersyón para sa páhinang ini",
        "import-interwiki-templates": "Ibali an gabos na mga panguyog",
        "import-interwiki-submit": "Ipalaog",
index b921a7a..dc8e9b7 100644 (file)
        "randomincategory": "Выпадковая старонка ў катэгорыі",
        "randomincategory-invalidcategory": "«$1» — ня слушная назва катэгорыі.",
        "randomincategory-nopages": "У катэгорыі «[[:Category:$1|$1]]» старонак няма.",
-       "randomincategory-selectcategory": "Узяць адвольную старонку з катэгорыі: $1 $2.",
-       "randomincategory-selectcategory-submit": "Паказаць",
+       "randomincategory-category": "Катэгорыя:",
+       "randomincategory-legend": "Выпадковая старонка ў катэгорыі",
        "randomredirect": "Выпадковае перанакіраваньне",
        "randomredirect-nopages": "У прасторы назваў «$1» няма перанакіраваньняў.",
        "statistics": "Статыстыка",
        "post-expand-template-inclusion-category-desc": "Памер старонкі перавысіў <code>$wgMaxArticleSize</code> пасьля разгортваньня ўсіх шаблёнаў, таму некаторыя шаблёны не былі паказаныя цалкам.",
        "post-expand-template-argument-category-desc": "Старонка перавышае памер <code>$wgMaxArticleSize</code> пасьля раскрыцьця аргумэнту шаблёну (нешта ў трайных дужках, напрыклад, <code>{{{Foo}}}</code>).",
        "expensive-parserfunction-category-desc": "На старонцы ўжываецца зашмат рэсурсаёмістых функцыяў парсэру (такіх, як <code>#ifexist</code>). Глядзіце [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Інструкцыя:$wgExpensiveParserFunctionLimit].",
-       "broken-file-category-desc": "Ð\9aаÑ\82Ñ\8dгоÑ\80Ñ\8bÑ\8f Ð´Ð°Ð´Ð°ÐµÑ\86Ñ\86а, ÐºÐ°Ð»Ñ\96 Ñ\81таронка ўтрымлівае няслушную спасылку на файл (спасылку на файл, які не існуе).",
-       "hidden-category-category-desc": "Ð\93Ñ\8dÑ\82а ÐºÐ°Ñ\82Ñ\8dгоÑ\80Ñ\8bÑ\8f Ð· Ð´Ð°Ð´Ð°Ð´Ð·ÐµÐ½Ð°Ð¹ Ð¼ÐµÑ\82кай <code><nowiki>__HIDDENCAT__</nowiki></code> Ñ\83 Ñ\91й, што па змоўчаньні не адлюстроўвае яе на старонках у сьпісе катэгорыяў.",
+       "broken-file-category-desc": "Старонка ўтрымлівае няслушную спасылку на файл (спасылку на файл, які не існуе).",
+       "hidden-category-category-desc": "Ð\9aаÑ\82Ñ\8dгоÑ\80Ñ\8bÑ\8f Ñ\9eÑ\82Ñ\80Ñ\8bмлÑ\96вае Ð¼ÐµÑ\82кÑ\83 <code><nowiki>__HIDDENCAT__</nowiki></code> Ñ\83 Ð·Ñ\8cмеÑ\81Ñ\8cÑ\86е Ñ\81Ñ\82аÑ\80онкÑ\96, што па змоўчаньні не адлюстроўвае яе на старонках у сьпісе катэгорыяў.",
        "trackingcategories-nodesc": "Апісаньне адсутнічае.",
        "trackingcategories-disabled": "Катэгорыя адключаная",
        "mailnologin": "Няма адрасу атрымальніка",
        "mywatchlist": "Сьпіс назіраньня",
        "watchlistfor2": "Для $1 $2",
        "nowatchlist": "Ваш сьпіс назіраньня пусты.",
-       "watchlistanontext": "Ð\92ам Ð¿Ð°Ñ\82Ñ\80Ñ\8dбна $1, каб праглядаць альбо рэдагаваць сьпіс назіраньня.",
+       "watchlistanontext": "Ð\9aалÑ\96 Ð»Ð°Ñ\81ка, Ñ\83вайдзÑ\96Ñ\86е Ñ\9e Ñ\81Ñ\8bÑ\81Ñ\82Ñ\8dмÑ\83, каб праглядаць альбо рэдагаваць сьпіс назіраньня.",
        "watchnologin": "Вы не ўвайшлі ў сыстэму",
        "addwatch": "Дадаць ў сьпіс назіраньня",
        "addedwatchtext": "Старонка «[[:$1]]» была дададзеная да Вашага [[Special:Watchlist|сьпісу назіраньня]].\nНаступныя зьмены ў гэтай старонцы і зьвязанай зь ёю старонцы абмеркаваньняў будуць бачныя там.",
        "exbeforeblank": "зьмест да ачысткі: «$1»",
        "delete-confirm": "Выдаліць «$1»",
        "delete-legend": "Выдаліць",
-       "historywarning": "'''Папярэджаньне''': старонка, якую Вы зьбіраецеся выдаліць, мае гісторыю з прыкладна $1 {{PLURAL:$1|вэрсіі|вэрсіяў|вэрсіяў}}:",
+       "historywarning": "<strong>Папярэджаньне</strong>: старонка, якую Вы зьбіраецеся выдаліць, мае гісторыю з $1 {{PLURAL:$1|вэрсіі|вэрсіяў|вэрсіяў}}:",
        "confirmdeletetext": "Зараз Вы выдаліце старонку разам з усёй гісторыяй зьменаў.\nКалі ласка, пацьвердзіце, што Вы зьбіраецеся гэта зрабіць і што Вы разумееце ўсе наступствы, а таксама робіце гэта ў адпаведнасьці з [[{{MediaWiki:Policy-url}}|правіламі]].",
        "actioncomplete": "Дзеяньне выкананае",
        "actionfailed": "Дзеяньне ня выкананае",
        "delete-edit-reasonlist": "Рэдагаваць прычыны выдаленьня",
        "delete-toobig": "Гэтая старонка мае доўгую гісторыю рэдагаваньняў, болей за $1 {{PLURAL:$1|вэрсію|вэрсіі|вэрсіяў}}.\nВыдаленьне такіх старонак было забароненае, каб пазьбегнуць праблемаў у працы {{GRAMMAR:родны|{{SITENAME}}}}.",
        "delete-warning-toobig": "Гэтая старонка мае доўгую гісторыю рэдагаваньняў, больш за $1 {{PLURAL:$1|вэрсію|вэрсіі|вэрсіяў}}.\nЯе выдаленьне можа выклікаць праблемы ў працы базы зьвестак {{GRAMMAR:родны|{{SITENAME}}}}; будзьце асьцярожны.",
-       "delete-cantedit": "Вы ня можаце выдаліць гэтую старонку, таму што ня маеце правоў на яе рэдагаваньне.",
        "deleting-backlinks-warning": "'''Увага:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|іншыя старонкі]] ўключаюць або спасылаюцца на старонку, якую вы зьбіраецеся выдаліць.",
        "rollback": "Адкаціць рэдагаваньні",
        "rollback_short": "Адкат",
        "import": "Імпартаваць старонкі",
        "importinterwiki": "Імпартаваньне зь іншых вікі",
        "import-interwiki-text": "Абярыце вікі і назву старонкі для імпартаваньня.\nДаты зьменаў і імёны аўтараў будуць захаваныя.\nУсе дзеяньні імпартаваньня паміж вікі запісваюцца ў [[Special:Log/import|журнал імпартаваньняў]].",
-       "import-interwiki-source": "Крынічная вікі/старонка:",
        "import-interwiki-history": "Капіяваць гісторыю старонкі цалкам",
        "import-interwiki-templates": "Уключыць усе шаблёны",
        "import-interwiki-submit": "Імпартаваць",
index 73e5b9c..929d9c4 100644 (file)
        "listduplicatedfiles-summary": "Гэта пералік файлаў, у якіх найноўшая версія файла ўяўляе сабою копію апошняй версіі якога-небудзь іншага файла. Улічваюцца толькі лакальныя файлы.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] мае [[$3|{{PLURAL:$2|дублікат|$2 дублікаты|$2 дублікатаў}}]].",
        "unusedtemplates": "Шаблоны, якія не выкарыстаны",
-       "unusedtemplatestext": "Тут пералічаныя ўсе старонкі ў прасторы назваў {{ns:template}}, якія ані разу не ўкладзеныя ў іншыя старонкі. Памятайце, што трэба правяраць спасылкі на шаблоны перад тым, як сціраць іх.",
+       "unusedtemplatestext": "Тут пералічаныя ўсе старонкі ў прасторы назваў {{ns:template}}, якія ані разу не ўкладзеныя ў іншыя старонкі.\nПамятайце, што трэба правяраць спасылкі на шаблоны перад тым, як сціраць іх.",
        "unusedtemplateswlh": "іншыя спасылкі",
        "randompage": "Выпадковая старонка",
        "randompage-nopages": "Няма старонак у наступн{{PLURAL:$2|ай прасторы|ых прасторах}} назваў: $1.",
        "randomincategory": "Выпадковая старонка ў катэгорыі",
        "randomincategory-invalidcategory": "\"$1\" - недапушчальная назва катэгорыі.",
        "randomincategory-nopages": "Няма старонак у катэгорыі [[:Category:$1|$1]].",
-       "randomincategory-selectcategory": "Атрымаць выпадковую старонку з катэгорыі: $1 $2.",
-       "randomincategory-selectcategory-submit": "Перайсці",
+       "randomincategory-category": "Катэгорыя:",
+       "randomincategory-legend": "Выпадковая старонка ў катэгорыі",
        "randomredirect": "Выпадковая перасылка",
        "randomredirect-nopages": "Няма перасылак у прасторы назваў \"$1\".",
        "statistics": "Статыстыка",
        "exbeforeblank": "змесціва перад ачысткаю было: '$1'",
        "delete-confirm": "Сцерці \"$1\"",
        "delete-legend": "Сцерці",
-       "historywarning": "'''Увага''': Старонка, якую вы хочаце сцерці, мае гісторыю прыблізна $1 {{PLURAL:$1|праўкі|правак}}:",
+       "historywarning": "<strong>Увага:</strong> Старонка, якую вы хочаце сцерці, мае гісторыю з прыблізна $1 {{PLURAL:$1|праўкі|правак}}:",
        "confirmdeletetext": "Вы збіраецеся сцерці старонку разам з цэлай яе гісторыяй правак.\nПацвердзіце свой намер зрабіць гэта, сваё разуменне наступстваў, і што вы робіце гэта ў адпаведнасці з [[{{MediaWiki:Policy-url}}|палітыкай (асноўнымі правіламі)]].",
        "actioncomplete": "Завершана аперацыя",
        "actionfailed": "Памылка дзеяння",
        "delete-edit-reasonlist": "Правіць прычыны сцірання",
        "delete-toobig": "Старонка мае вялікую гісторыю правак, больш за $1 {{PLURAL:$1|версію|версій}}. Сціранне такіх старонак было абмежавана, каб пазбегчы ўтварэння выпадковых перашкод працы {{SITENAME}}.",
        "delete-warning-toobig": "Старонка мае вялікую гісторыю правак, больш за $1 {{PLURAL:$1|версію|версій}}. Сціранне такіх старонак можа перашкодзіць працы базы даных {{SITENAME}}; будзьце асцярожнымі.",
-       "delete-cantedit": "Вы не можаце сцерці гэту старонку, таму што не маеце дазволу правіць яе.",
+       "deleteprotected": "Вы не можаце сцерці гэтую старонку, таму што яна ахоўваецца.",
        "deleting-backlinks-warning": "'''Увага:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Іншыя старонкі]] спасылаюцца на ці ўключаюць старонку, якую вы збіраецеся сцерці.",
        "rollback": "Адкаціць праўкі",
        "rollback_short": "Адкат",
        "import": "Імпартаваць старонкі",
        "importinterwiki": "Імпарт Transwiki",
        "import-interwiki-text": "Выбар вікі і назвы старонкі дзеля імпарту.\nДаты версій і імёны аўтараў будуць захаваныя.\nУсе транс-вікавыя імпарты запісваюцца ў [[Special:Log/import|журнале імпартаў]].",
-       "import-interwiki-source": "Выточная вікі/старонка:",
+       "import-interwiki-sourcewiki": "Крынічная вікі:",
+       "import-interwiki-sourcepage": "Крынічная старонка:",
        "import-interwiki-history": "Капіраваць усе гістарычныя версіі гэтай старонкі",
        "import-interwiki-templates": "Разам з усімі шаблонамі",
        "import-interwiki-submit": "Імпартаваць",
index c67f8c0..495ffc5 100644 (file)
@@ -21,7 +21,8 @@
                        "Петър Петров",
                        "לערי ריינהארט",
                        "아라",
-                       "Gazimagomedov"
+                       "Gazimagomedov",
+                       "StanProg"
                ]
        },
        "tog-underline": "Подчертаване на препратките:",
        "hidetoc": "скриване",
        "collapsible-collapse": "Свиване",
        "collapsible-expand": "Разгръщане",
+       "confirmable-confirm": "{{GENDER:$1|Сигурен|Сигурна}} ли сте?",
+       "confirmable-yes": "Да",
+       "confirmable-no": "Не",
        "thisisdeleted": "Преглед или възстановяване на $1?",
        "viewdeleted": "Преглед на $1?",
        "restorelink": "{{PLURAL:$1|една изтрита редакция|$1 изтрити редакции}}",
        "ns-specialprotected": "Специалните страници не могат да бъдат редактирани.",
        "titleprotected": "Тази страница е била защитена срещу създаване от [[User:$1|$1]].\nПосочената причина е ''$2''.",
        "filereadonlyerror": "Файлът „$1“ не може да бъде променен, тъй като файловото хранилище „$2“ е в режим само за четене.\n\nАдминистраторът, който го е заключил, е посочил следната причина: „$3“.",
+       "exception-nologin": "Не сте влезли",
        "exception-nologin-text": "За досъп до желаната страница или действие уикито изисква [[Special:Userlogin|влизане в системата]].",
        "exception-nologin-text-manual": "За достъп до избраното действие или страница е необходимо $1 в системата.",
        "virus-badscanner": "Лоша конфигурация: непознат скенер за вируси: ''$1''",
        "resettokens-tokens": "Маркери:",
        "resettokens-token-label": "$1 (текуща стойност: $2)",
        "resettokens-watchlist-token": "Маркер за уеб хранилка (Atom/RSS) на [[Special: Watchlist|промени на страници от списъка Ви за наблюдение]]",
+       "resettokens-done": "Маркерите са изчистени.",
        "resettokens-resetbutton": "Изчистване на избраните маркери",
        "bold_sample": "Получер текст",
        "bold_tip": "Получер (удебелен) текст",
        "edit-gone-missing": "Страницата не можа да се обнови.\nВероятно междувременно е била изтрита.",
        "edit-conflict": "Редакционен конфликт.",
        "edit-no-change": "Редакцията ви беше пренебрегната, защото не съдържа промени по текста.",
+       "postedit-confirmation-created": "Страницата е създадена.",
+       "postedit-confirmation-restored": "Страницата е възстановена.",
        "postedit-confirmation-saved": "Редакцията ви беше съхранена",
        "edit-already-exists": "Не можа да се създаде нова страница.\nТакава вече съществува.",
        "defaultmessagetext": "Текст на съобщението по подразбиране",
        "invalid-content-data": "Невалидни данни за съдържание",
        "content-not-allowed-here": "\nНа страницата [[$2]] не е позволено използването на $1",
        "editwarning-warning": "Ако излезете от тази страница, може да загубите всички незапазени промени, които сте направили. \nАко сте влезли в системата, можете да изключите това предупреждение през меню \"Редактиране\" във вашите лични настройки.",
+       "editpage-notsupportedcontentformat-title": "Форматът на съдържанието не се поддържа",
        "content-model-wikitext": "уикитекст",
        "content-model-text": "обикновен текст",
        "content-model-javascript": "Джаваскрипт",
        "parser-template-recursion-depth-warning": "Надвишен лимит на дълбочината при шаблонна рекурсия ($1)",
        "language-converter-depth-warning": "Надвишени са възможностите за автоматичен превод ($1)",
        "node-count-exceeded-category": "Страници, където е превишен възел-граф",
-       "node-count-exceeded-warning": "Страница превишава възел-брой",
+       "node-count-exceeded-category-desc": "Страницата превишава максималния възел-граф.",
+       "node-count-exceeded-warning": "Страница превиши броя на възлите",
        "undo-success": "Редакцията може да бъде върната. Прегледайте долното сравнение и се уверете, че наистина искате да го направите. След това съхранете страницата, за да извършите връщането.",
        "undo-failure": "Редакцията не може да бъде върната поради конфликтни междинни редакции.",
        "undo-norev": "Редакцията не може да бъде върната тъй като не съществува или е била изтрита.",
        "revdelete-confirm": "Необходимо е да потвърдите, че велаете да извършите действието, разбирате последствията и го правите според [[{{MediaWiki:Policy-url}}|политиката]].",
        "revdelete-suppress-text": "Премахването трябва да се използва '''само''' при следните случаи:\n*Неподходяща или неприемлива лична информация\n*: ''домашни адреси и телефонни номера, номера за социално осигуряване и др.''",
        "revdelete-legend": "Задаване на ограничения:",
-       "revdelete-hide-text": "СкÑ\80иване Ð½Ð° Ñ\82екÑ\81Ñ\82а на версията",
+       "revdelete-hide-text": "ТекÑ\81Ñ\82 на версията",
        "revdelete-hide-image": "Скриване на файловото съдържание",
        "revdelete-hide-name": "Скриване на действието и целта",
        "revdelete-hide-comment": "Скриване на резюмето",
        "search-section": "(раздел $1)",
        "search-suggest": "Вероятно имахте предвид: $1",
        "search-interwiki-caption": "Сродни проекти",
-       "search-interwiki-default": "$1 резултата:",
+       "search-interwiki-default": "Резултати от $1:",
        "search-interwiki-more": "(още)",
        "search-relatedarticle": "Свързани",
        "searchrelated": "свързани",
        "searchdisabled": "Търсенето в {{SITENAME}} е временно изключено. Междувременно можете да търсите чрез Google. Обърнете внимание, че съхранените при тях страници най-вероятно са остарели.",
        "search-error": "Възникна грешка при търсене: $1",
        "preferences": "Настройки",
-       "mypreferences": "РекÑ\8aезаби",
+       "mypreferences": "Ð\9dаÑ\81Ñ\82Ñ\80ойки",
        "prefs-edits": "Брой редакции:",
+       "prefsnologintext2": "Моля, влезте за да промените настройките си.",
        "prefs-skin": "Облик",
        "skin-preview": "предварителен преглед",
        "datedefault": "Без предпочитание",
        "right-move": "преместване на страници",
        "right-move-subpages": "преместване на страници и техните подстраници",
        "right-move-rootuserpages": "Преместване на основни потребителски страници",
+       "right-move-categorypages": "Преместване на категорийни страници",
        "right-movefile": "Преместване на файлове",
        "right-suppressredirect": "без създаване на пренасочване от старото име при преместване на страница",
        "right-upload": "качване на файлове",
        "right-browsearchive": "търсене на изтрити страници",
        "right-undelete": "възстановяване на страници",
        "right-suppressrevision": "преглед и възстановяване на версии, скрити от администраторите",
+       "right-viewsuppressed": "Преглеждане на версии, скрити от който и да е потребител",
        "right-suppressionlog": "преглеждане на тайните дневници",
        "right-block": "спиране на достъпа до редактиране",
        "right-blockemail": "блокиране на потребители да изпращат писма по е-поща",
        "right-editusercssjs": "редактиране на CSS и JS файловете на други потребители",
        "right-editusercss": "редактиране на CSS файловете на други потребители",
        "right-edituserjs": "редактиране на JS файловете на други потребители",
+       "right-editmyusercss": "Редактиране на собствените потребителски CSS файлове",
+       "right-editmyuserjs": "Редактиране на собствените потребителски JavaScript файлове",
+       "right-viewmywatchlist": "Преглеждане на собствения списък за наблюдение",
+       "right-editmywatchlist": "Редактиране на собствения списък за наблюдение. Забележете, че някои действия все пак ще добавят страници, дори и без текущото право.",
+       "right-viewmyprivateinfo": "Преглеждане на собствените лични данни (например: адрес на електронната поща, истинско име)",
+       "right-editmyprivateinfo": "Редактиране на собствените лични данни (например: адрес на електронната поща, истинско име)",
+       "right-editmyoptions": "Редактиране на собствените настройки",
        "right-rollback": "Бърза отмяна на промените, направени от последния потребител, редактирал дадена страница",
        "right-markbotedits": "отбелязване на възвърнатите редакции като редакции на ботове",
        "right-noratelimit": "Пренебрегване на всякакви ограничения",
        "action-createpage": "създаване на страници",
        "action-createtalk": "създаване на дискусионни страници",
        "action-createaccount": "създаване на тази потребителска сметка",
+       "action-history": "преглед на историята на тази страница",
        "action-minoredit": "отбелязване на редакцията като малка",
        "action-move": "преместване на страницата",
        "action-move-subpages": "преместване на страницата и нейните подстраници",
        "action-move-rootuserpages": "преместване на основни потребителски страници",
+       "action-move-categorypages": "преместване на категорийни страници",
        "action-movefile": "преместване на този файл",
        "action-upload": "качване на файла",
        "action-reupload": "съхранение на файл върху вече съществуващ",
        "action-suppressionlog": "преглеждане на този поверителен дневник",
        "action-block": "блокиране на редакциите на този потребител",
        "action-protect": "променяне на нивото на защита на тази страница",
-       "action-import": "внасяне на тази страница от друго уики",
-       "action-importupload": "внасяне на тази страница от качен файл",
+       "action-rollback": "бърза отмяна на промените, направени от последния потребител, редактирал дадена страница",
+       "action-import": "внасяне на страници от други уикита",
+       "action-importupload": "внасяне на страници от качен файл",
        "action-patrol": "отбелязване на чуждите редакции като проверени",
        "action-autopatrol": "отбелязване на собствените редакции като автоматично патрулирани",
        "action-unwatchedpages": "преглеждане на списъка с ненаблюдавани страници",
        "action-userrights-interwiki": "редактиране на потребителските права на потребители от други уикита",
        "action-siteadmin": "заключване и отключване на базата от данни",
        "action-sendemail": "изпращане на е-писма",
+       "action-editmywatchlist": "редактиране на списъка ви за наблюдение",
+       "action-viewmywatchlist": "преглед на списъка ви за наблюдение",
+       "action-viewmyprivateinfo": "преглед на личната си информация",
+       "action-editmyprivateinfo": "редактиране на личната си информация",
        "nchanges": "$1 {{PLURAL:$1|промяна|промени}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|от последното посещение}}",
        "enhancedrc-history": "история",
        "recentchanges": "Последни промени",
        "recentchanges-legend": "Настройки на списъка с последни промени",
        "recentchanges-summary": "Проследяване на последните промени в {{SITENAME}}.\n\nЛегенда: '''тек''' = разлика на текущата версия,\n'''ист''' = история на версиите",
+       "recentchanges-noresult": "Не са намерени промени за дадения период, отговарящи на критерия.",
        "recentchanges-feed-description": "Проследяване на последните промени в {{SITENAME}}.",
        "recentchanges-label-newpage": "Нова страница",
        "recentchanges-label-minor": "Това е малка промяна",
        "license-nopreview": "(Не е наличен предварителен преглед)",
        "upload_source_url": " (правилен, публично достъпен интернет-адрес)",
        "upload_source_file": " (файл на вашия компютър)",
+       "listfiles-delete": "изтриване",
        "listfiles-summary": "Тази специална страница показва всички качени файлове.",
        "listfiles_search_for": "Търсене по име на файла:",
        "imgfile": "файл",
        "unusedtemplateswlh": "други препратки",
        "randompage": "Случайна страница",
        "randompage-nopages": "В {{PLURAL:$2|следното именно пространство|следните именни пространства}} няма страници: $1.",
-       "randomincategory": "СлÑ\83Ñ\87айна Ñ\81Ñ\82Ñ\80аниÑ\86а Ð² категорията",
+       "randomincategory": "СлÑ\83Ñ\87айна Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¾Ñ\82 категорията",
        "randomincategory-invalidcategory": "„$1“ не е валидно име на категория.",
        "randomincategory-nopages": "В категория [[:Category:$1|$1]] няма страници.",
+       "randomincategory-category": "Категория:",
+       "randomincategory-legend": "Случайна страница от категорията",
        "randomredirect": "Случайно пренасочване",
        "randomredirect-nopages": "В именно пространство „$1“ няма пренасочвания.",
        "statistics": "Статистика",
        "statistics-users-active": "Активни потребители",
        "statistics-users-active-desc": "Потребители, направили редакция през {{PLURAL:$1|последния ден|последните $1 дни}}",
        "statistics-mostpopular": "Най-преглеждани страници",
+       "pageswithprop-prop": "Име на свойството:",
+       "pageswithprop-submit": "Отваряне",
        "doubleredirects": "Двойни пренасочвания",
        "doubleredirectstext": "Тази страница съдържа списък със страници, които пренасочват към друга пренасочваща страница.\nВсеки ред съдържа препратки към първото и второто пренасочване, както и целта на второто пренасочване, която обикновено е „истинската“ целева страница, към която първото пренасочване би трябвало да сочи.\n<del>Задрасканите</del> записи са коригирани.",
        "double-redirect-fixed-move": "Оправяне на двойно пренасочване след преместването на [[$1]] като [[$2]]",
        "protectedpages": "Защитени страници",
        "protectedpages-indef": "Само безсрочни защити",
        "protectedpages-cascade": "Само каскадни защити",
+       "protectedpages-noredirect": "Скриване на пренасочванията",
        "protectedpagesempty": "В момента няма защитени страници с тези параметри.",
+       "protectedpages-timestamp": "Дата и час",
        "protectedpages-page": "Страница",
+       "protectedpages-expiry": "Срок на изтичане",
+       "protectedpages-performer": "Защитаващ потребител",
+       "protectedpages-params": "Параметри на защитата",
        "protectedpages-reason": "Причина",
+       "protectedpages-unknown-timestamp": "Неизвестни",
        "protectedpages-unknown-performer": "Неизвестен потребител",
        "protectedtitles": "Защитени заглавия",
        "protectedtitlesempty": "В момента няма заглавия, защитени с тези параметри.",
        "listusers": "Списък на потребителите",
        "listusers-editsonly": "Показване само на потребители с редакции",
        "listusers-creationsort": "Сортиране по дата на създаване",
+       "listusers-desc": "Сортиране в низходящ ред",
        "usereditcount": "$1 {{PLURAL:$1|редакция|редакции}}",
        "usercreated": "{{GENDER:$3|Създаден}} на $1 в $2",
        "newpages": "Нови страници",
        "allpagesbadtitle": "Зададеното име е невалидно. Възможно е да съдържа междуезикова или междупроектна представка или пък знаци, които не могат да се използват в заглавия.",
        "allpages-bad-ns": "В {{SITENAME}} не съществува именно пространство „$1“.",
        "allpages-hide-redirects": "Скриване на пренасочванията",
+       "cachedspecial-refresh-now": "Преглед на текущата.",
        "categories": "Категории",
        "categoriespagetext": "{{PLURAL:$1|Следната категория съдържа|Следните категории съдържат}} страници или медийни файлове.\n[[Special:UnusedCategories|Неизползваните категории]] не са показани тук.\nВижте също списъка с [[Special:WantedCategories|желани категории]].",
        "categoriesfrom": "Показване на категориите, като се започне от:",
        "listgrouprights-addgroup-self-all": "Може да добавя всички групи към своята сметка",
        "listgrouprights-removegroup-self-all": "Може да премахва всички групи от собствената сметка",
        "listgrouprights-namespaceprotection-namespace": "Именно пространство",
+       "trackingcategories": "Категории за проследяване",
+       "trackingcategories-summary": "Страницата представлява списък на категории за проследяване, които се попълват автоматично от МедияУики софтуер. Имената им могат да се променят посредством промяна на съответните системни съобщения в именното пространство {{ns:8}}.",
+       "trackingcategories-msg": "Категория за проследяване",
+       "trackingcategories-name": "Име на съобщението",
+       "trackingcategories-desc": "Критерий за включване на категория",
+       "trackingcategories-disabled": "Категорията е деактивирана",
        "mailnologin": "Няма електронна поща",
        "mailnologintext": "Необходимо е да [[Special:UserLogin|влезете]] и да посочите валидна електронна поща в [[Special:Preferences|настройките]] си, за да може да пращате писма на други потребители.",
        "emailuser": "Писмо до потребителя",
+       "emailuser-title-target": "Изпращане на е-писмо на този {{GENDER:$1|потребител}}",
+       "emailuser-title-notarget": "Изпращане на е-писмо на потребител",
        "emailpage": "Пращане писмо на потребител",
        "emailpagetext": "Можете да използвате формуляра по-долу, за да изпратите електронно писмо на {{GENDER:$1|този потребител}}.\nАдресът, който се въвели в [[Special:Preferences|настройките си]], ще се появи в полето „От“ на писмото, така че получателят ще е в състояние да ви отговори директно.",
        "defemailsubject": "Писмо от потребител $1 в {{SITENAME}}",
        "watchnologin": "Не сте влезли",
        "addwatch": "Добавяне към списъка за наблюдение",
        "addedwatchtext": "Страницата „'''[[:$1]]'''“ беше добавена към [[Special:Watchlist|списъка ви за наблюдение]].\nНейните бъдещи промени, както и на съответната й дискусионна страница, ще се описват там.",
+       "addedwatchtext-short": "Страница \"$1\" беше добавена към списъка ви за наблюдение.",
        "removewatch": "Премахване от списъка за наблюдение",
        "removedwatchtext": "Страницата „[[:$1]]“ беше премахната от [[Special:Watchlist|списъка ви за наблюдение]].",
+       "removedwatchtext-short": "Страница \"$1\" беше премахната от списъка ви за наблюдение.",
        "watch": "Наблюдение",
        "watchthispage": "Наблюдаване на страницата",
        "unwatch": "Спиране на наблюдение",
        "contributions-title": "Потребителски приноси за $1",
        "mycontris": "Приноси",
        "contribsub2": "За {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Няма регистрирана потребителска сметка за \"$1\".",
        "nocontribs": "Не са намерени промени, отговарящи на критерия.",
        "uctop": "(текуща)",
        "month": "Месец:",
        "blocklist-tempblocks": "Скриване на срочните блокирания",
        "blocklist-addressblocks": "Скриване на отделни блокирани IP адреси",
        "blocklist-rangeblocks": "Скриване на блокиранията по IP диапазон",
+       "blocklist-timestamp": "Дата и час",
        "blocklist-target": "Цел",
-       "blocklist-expiry": "Срок на изтичане:",
+       "blocklist-expiry": "Срок на изтичане",
        "blocklist-by": "Блокиращ администратор",
        "blocklist-params": "Параметри на блокирането",
        "blocklist-reason": "Причина",
        "unblocklink": "отблокиране",
        "change-blocklink": "промяна на параметрите на блокирането",
        "contribslink": "приноси",
+       "emaillink": "изпращане на е-писмо",
        "autoblocker": "Бяхте блокиран автоматично, тъй като неотдавна IP-адресът ви е бил ползван от блокирания в момента потребител [[User:$1|$1]]. Причината за неговото блокиране е: „$2“.",
        "blocklogpage": "Дневник на блокиранията",
        "blocklog-showlog": "Потребителят е бил блокиран в миналото.\nЗа справка по-долу е дадено извлечение от дневника на блокиранията:",
        "import": "Внасяне на страници",
        "importinterwiki": "Внасяне чрез Трансуики",
        "import-interwiki-text": "Изберете уики и име на страницата.\nДатите на редакциите и имената на авторите ще бъдат запазени.\nВсички операции при внасянето от друго уики се записват в [[Special:Log/import|дневника на внасянията]].",
-       "import-interwiki-source": "Изходно уики/страница:",
        "import-interwiki-history": "Копиране на всички версии на страницата",
        "import-interwiki-templates": "Включване на всички шаблони",
        "import-interwiki-submit": "Внасяне",
        "import-logentry-upload-detail": "{{PLURAL:$1|една версия|$1 версии}}",
        "import-logentry-interwiki": "$1 беше внесена от друго уики",
        "import-logentry-interwiki-detail": "{{PLURAL:$1|една версия|$1 версии}} на $2 бяха внесени",
+       "javascripttest": "Тестване на JavaScript",
        "javascripttest-pagetext-noframework": "Тази страница е запазена за изпълнение на Джаваскрипт тестове.",
        "javascripttest-pagetext-skins": "Избор на облик за тестванията:",
        "javascripttest-qunit-intro": "Вижте [$1 тестовата документация] на mediawiki.org.",
        "hours-ago": "преди $1 {{PLURAL:$1|час|часа}}",
        "minutes-ago": "преди $1 {{PLURAL:$1|минута|минути}}",
        "seconds-ago": "преди $1 {{PLURAL:$1|секунда|секунди}}",
+       "monday-at": "Понеделник в $1",
+       "tuesday-at": "Вторник в $1",
+       "wednesday-at": "Сряда в $1",
+       "thursday-at": "Четвъртък в $1",
+       "friday-at": "Петък в $1",
+       "saturday-at": "Събота в $1",
+       "sunday-at": "Неделя в $1",
+       "yesterday-at": "Вчера в $1",
        "bad_image_list": "Спазва се следният формат:\n\nОтчитат се само записите в списъчен вид (редове, започващи със *). Първата препратка в реда трябва да сочи към неприемлив файл. Всички последващи препратки на същия ред се считат за изключения, т.е. страници, в които този файл може да се визуализира.",
        "metadata": "Метаданни",
        "metadata-help": "Файлът съдържа допълнителни данни, обикновено добавяни от цифровите апарати или скенери. Ако файлът е редактиран след създаването си, то някои параметри може да не съответстват на текущото изображение.",
        "exif-specialinstructions": "Специални инструкции",
        "exif-headline": "Заглавие",
        "exif-source": "Източник",
+       "exif-urgency": "Спешност",
        "exif-contact": "Информация за контакти",
        "exif-languagecode": "Език",
        "exif-iimversion": "IIM версия",
        "exif-originalimagewidth": "Ширина на изображението преди намаляването",
        "exif-compression-1": "Некомпресиран",
        "exif-copyrighted-true": "С авторски права",
-       "exif-copyrighted-false": "Ð\9eбÑ\89еÑ\81Ñ\82вено Ð´Ð¾Ñ\81Ñ\82оÑ\8fние",
+       "exif-copyrighted-false": "СÑ\82аÑ\82Ñ\83Ñ\82а Ð½Ð° Ð°Ð²Ñ\82оÑ\80Ñ\81киÑ\82е Ð¿Ñ\80ава Ð½Ðµ Ðµ Ñ\83казан",
        "exif-unknowndate": "Неизвестна дата",
        "exif-orientation-1": "Нормално",
        "exif-orientation-2": "Отражение по хоризонталата",
        "exif-objectcycle-p": "Само вечер",
        "exif-gpsdirection-t": "истинска",
        "exif-gpsdirection-m": "магнитна",
+       "exif-dc-contributor": "Сътрудници",
        "exif-dc-date": "Дата(и)",
        "exif-dc-rights": "Права",
        "exif-isospeedratings-overflow": "По-голяма от 65535",
        "imgmultigo": "Отваряне",
        "imgmultigoto": "Отиване на страница $1",
        "img-lang-default": "(език по подразбиране)",
+       "img-lang-go": "Отваряне",
        "ascending_abbrev": "възх",
        "descending_abbrev": "низх",
        "table_pager_next": "Следваща страница",
        "watchlistedit-raw-done": "Списъкът ви за наблюдение беше обновен.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 страница беше добавена|$1 страници бяха добавени}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|Една страница беше премахната|$1 страници бяха премахнати}}:",
+       "watchlistedit-clear-legend": "Изчистване на списъка за наблюдение",
+       "watchlistedit-clear-submit": "Изчистване на списъка за наблюдение (Необратимо!)",
        "watchlisttools-clear": "Изчистване на списъка за наблюдение",
        "watchlisttools-view": "Преглед на списъка за наблюдение",
        "watchlisttools-edit": "Преглед и редактиране на списъка за наблюдение",
        "duplicate-defaultsort": "Внимание: Ключът за сортиране по подразбиране „$2“ отменя по-ранния ключ „$1“.",
        "version": "Версия",
        "version-extensions": "Инсталирани разширения",
-       "version-skins": "Ð\9eблици",
+       "version-skins": "Ð\98нÑ\81Ñ\82алиÑ\80ани Ð¾блици",
        "version-specialpages": "Специални страници",
        "version-parserhooks": "Куки в парсера",
        "version-variables": "Променливи",
        "version-hook-name": "Име на куката",
        "version-hook-subscribedby": "Ползвана от",
        "version-version": "(Версия $1)",
+       "version-no-ext-name": "[без име]",
        "version-license": "Лиценз на МедияУики",
        "version-ext-license": "Лиценз",
        "version-ext-colheader-name": "Разширение",
+       "version-skin-colheader-name": "Облик",
        "version-ext-colheader-version": "Версия",
        "version-ext-colheader-license": "Лиценз",
        "version-ext-colheader-description": "Описание",
        "version-entrypoints": "Адреси на входни точки",
        "version-entrypoints-header-entrypoint": "Входна точка",
        "version-entrypoints-header-url": "Адрес",
+       "redirect-submit": "Отваряне",
        "redirect-user": "Потребителски номер",
+       "redirect-page": "Номер на страницата",
+       "redirect-revision": "Версия на страницата",
        "redirect-file": "Име на файл",
+       "redirect-not-exists": "Стойността не е намерена",
        "fileduplicatesearch": "Търсене на повтарящи се файлове",
        "fileduplicatesearch-summary": "Търсене на повтарящи се файлове на база хеш стойности.",
        "fileduplicatesearch-legend": "Търсене на повтарящ се файл",
        "tags-tag": "Име на етикета",
        "tags-display-header": "Изглед в списъците с промени",
        "tags-description-header": "Пълно описание на значението",
+       "tags-active-header": "Активен?",
        "tags-hitcount-header": "Отбелязани промени",
        "tags-active-yes": "Да",
        "tags-active-no": "Не",
        "expand_templates_preview": "Преглед",
        "pagelang-name": "Страница",
        "pagelang-language": "Език",
-       "pagelang-select-lang": "Избиране на език"
+       "pagelang-use-default": "Използване на езика по подразбиране",
+       "pagelang-select-lang": "Избиране на език",
+       "right-pagelang": "Променяне на езика на страница",
+       "action-pagelang": "Променяне на езика на страницата",
+       "log-name-pagelang": "Дневник на езиковите промени",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (включено)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''изключено''')"
 }
index a241a53..7781475 100644 (file)
        "hidetoc": "छुपाईं",
        "collapsible-collapse": "सेकुड़ीं",
        "collapsible-expand": "फैलाईं",
+       "confirmable-yes": "जी",
+       "confirmable-no": "ना",
        "thisisdeleted": "देखीं या भंडार करीं $1?",
        "viewdeleted": "$1 देखब?",
        "restorelink": "देखीं {{PLURAL:$1|एगो हटावल गईल सम्पादन|$1 हटावल गईल कुल सम्पादन}}",
        "resetpass-temp-password": "अस्थायी गुप्तशब्द:",
        "resetpass-abort-generic": "कउनो एक्सटेंशन द्वारा गुप्तशब्द में बदलाव रोक दिहल गईल बा।",
        "resetpass-expired": "राउर पासवर्ड की वैधता अवधि समाप्त हो चुकल बा। कृपया लॉग इन करे खातिर एगो नया पासवर्ड सेट करीं।",
+       "resetpass-expired-soft": "राउर गुप्तशब्द अमान्य हो चुकल बा इ के पुनः स्थापित करे के पड़ी। कृपया अभी एगो नया गुप्तशब्द चुनीं या \"{{int:resetpass-submit-cancel}}\" पर बाद में पुनः स्थापित कर सकत बानी।",
        "resetpass-validity-soft": "राउर पासवर्ड मान्य नईखे: $1 \n\nकृपया अब एक नया पासवर्ड चुनीं, या उ के बाद में पुनर्स्थापित करे खातिर \"{{int:resetpass-submit-cancel}}\" पर क्लिक करीं।",
        "passwordreset": "गुप्तशब्द रिसेट करीं",
        "passwordreset-text-one": "आपन गुप्तशब्द के पुनर्स्थापित करे खातिर इ फॉर्म भरीं।",
index 1726678..6a75312 100644 (file)
        "randomincategory": "বিষয়শ্রেণীর অজানা যেকোনো পাতা",
        "randomincategory-invalidcategory": "\"$1\" একটি ত্রুটিপূর্ণ বিষয়শ্রেণীর নাম।",
        "randomincategory-nopages": "[[:Category:$1]]-এ কোন পাতা নেই।",
-       "randomincategory-selectcategory": "এই বিষয়শ্রেণীর একটি অজানা যেকোনো পাতা: $1 $2।",
-       "randomincategory-selectcategory-submit": "যাও",
+       "randomincategory-category": "বিষয়শ্রেণী:",
+       "randomincategory-legend": "বিষয়শ্রেণীর অজানা যেকোনো পাতা",
        "randomredirect": "অনির্ধারিত পুনর্নির্দেশ",
        "randomredirect-nopages": "\"$1\" এই নামস্থানে কোন পুনর্নির্দেশ নেই।",
        "statistics": "পরিসংখ্যান",
        "exbeforeblank": "মুছে ফেলার আগে বিষয়বস্তু ছিল: '$1'",
        "delete-confirm": "\"$1\" অপসারণ",
        "delete-legend": "অপসারণ",
-       "historywarning": "'''সতর্কীকরণ:''' যে পাতাটি আপনি মুছে ফেলতে যাচ্ছেন তার ইতিহাসে প্রায় $1টি {{PLURAL:$1|সংশোধন}} রয়েছে:",
+       "historywarning": "<strong>সতর্কীকরণ:</strong> যে পাতাটি আপনি মুছে ফেলতে যাচ্ছেন তার ইতিহাসে প্রায় $1টি {{PLURAL:$1|সংশোধন}} রয়েছে:",
        "confirmdeletetext": "আপনি একটি পাতা সেটির সমস্ত ইতিহাসসহ মুছে ফেলতে যাচ্ছেন।\nঅনুগ্রহ করে নিশ্চিত করুন আপনি আসলেই এটি করতে চান, আপনি এর ফলাফল সম্পর্কে অবহিত, এবং আপনি [[{{MediaWiki:Policy-url}}|নীতিমালা]] মেনে এটি করছেন।",
        "actioncomplete": "কাজটি নিষ্পন্ন হয়েছে",
        "actionfailed": "অ্যাকশন ব্যর্থ",
        "import": "পাতা আমদানি",
        "importinterwiki": "আন্তঃউইকি আমদানি",
        "import-interwiki-text": "আমদানির জন্য একটি উইকি ও পাতার শিরোনাম নির্বাচন করুন।\nসংশোধনের তারিখগুলি এবং সম্পাদকদের নামগুলি সংরক্ষণ করা হবে।\nসমস্ত আন্তঃউইকি আমদানিগুলি [[Special:Log/import|আমদানি লগে]] লিপিবদ্ধ আছে।",
-       "import-interwiki-source": "উৎস উইকি/পাতা:",
+       "import-interwiki-sourcepage": "উৎস পাতা:",
        "import-interwiki-history": "এই পাতার সমস্ত ইতিহাসের সংস্করণের অনুলিপি করা হোক",
        "import-interwiki-templates": "সকল টেম্পলেট অন্তর্ভুক্ত",
        "import-interwiki-submit": "আমদানি",
        "import-upload": "XML ডাটা আপলোড",
        "import-token-mismatch": "সেশন ডাটা হারিয়ে গিয়েছে।\nঅনুগ্রহ করে পুনরায় চেষ্টা করুন।",
        "import-invalid-interwiki": "নির্ধারিত উইকি থেকে আমদানী করা যাবে না।",
-       "import-error-edit": "\"$1\" পাতাটি ইম্পোর্ট করা যায়নি কারণ আপনার এটি সম্পাদনা করার অনুমতি নেই।",
+       "import-error-edit": "Page \"$1\" was not imported because you are not allowed to edit it.",
        "import-error-create": "\"$1\" পাতাটি ইম্পোর্ট করা যায়নি কারণ আপনার এটি তৈরী করার অনুমতি নেই।",
        "import-error-interwiki": "\"$1\" পাতাটি ইম্পোর্ট করা যায়নি কারণ এই নামটি বহিঃসংযোগর জন্য নির্ধারিত (ইন্টারউইকি)।",
        "import-error-special": "\"$1\" পাতাটি ইম্পোর্ট করা যায়নি কারণ এটি একটি বিশেষ নামস্থানকে নির্দেশ করে যেটি সম্পাদনার জন্য অনুমোদিত নয়।",
index c1145a4..fd5b641 100644 (file)
        "gotaccount": "Ur gont zo ganeoc'h dija ? '''$1'''.",
        "gotaccountlink": "Kevreañ",
        "userlogin-resetlink": "Ha disoñjet eo bet ho titouroù kevreañ ganeoc'h ?",
-       "userlogin-resetpassword-link": "Ankouaet ho peus ho ker-tremen ?",
+       "userlogin-resetpassword-link": "Ankouaet ho ker-tremen ganeoc'h ?",
        "userlogin-helplink2": "Skoazell evit kevreañ",
        "userlogin-loggedin": "Kevreet oc'h dija evel {{GENDER:$1|$1}}.\nImplijit ar furmskrid amañ dindan evit kevreañ evel un implijer all.",
        "userlogin-createanother": "Krouiñ ur gont all",
        "randomincategory": "Ur bajenn dre zegouezh er rummad",
        "randomincategory-invalidcategory": "\"$1\" n'eo ket un anv rummad reizh.",
        "randomincategory-nopages": "N'eus pajenn ebet e [[:Category:$1]].",
-       "randomincategory-selectcategory": "Tapout ur bajenn dre zegouezh eus ar rummad : $1 $2.",
-       "randomincategory-selectcategory-submit": "Mont",
+       "randomincategory-category": "Rummad :",
        "randomredirect": "Ur bajenn adkas dre zegouezh",
        "randomredirect-nopages": "N'eus pajenn adkas ebet en esaouenn anv \"$1\".",
        "statistics": "Stadegoù",
        "import": "Enporzhiañ pajennoù",
        "importinterwiki": "enporzhiadenn etrewiki",
        "import-interwiki-text": "Diuzit ur wiki hag ur bajenn da enporzhiañ.\nMiret e vo deiziadoù ar stummmoù hag anvioù an aozerien.\nMiret eo an holl enporzhiadennoù etrewiki e-barzh [[Special:Log/import|log an enporzhiadennoù]].",
-       "import-interwiki-source": "wiki ha pajennoù tarzh :",
        "import-interwiki-history": "Eilañ holl stummoù istor ar bajenn-mañ",
        "import-interwiki-templates": "Lakaat e-barzh an holl batromoù",
        "import-interwiki-submit": "Enporzhiañ",
index e11b71d..33eeb6e 100644 (file)
        "username": "{{GENDER:$1|Nom d'usuari}}:",
        "prefs-memberingroups": "{{GENDER:$2|Membre}} {{PLURAL:$1|del grup|dels grups}}:",
        "prefs-registration": "Hora de registre:",
-       "yourrealname": "Nom real *",
+       "yourrealname": "Nom real*:",
        "yourlanguage": "Idioma:",
        "yourvariant": "Variant lingüística:",
        "prefs-help-variant": "La variant lingüística o ortogràfica que preferiu a l'hora de mostrar el contingut d'aquest wiki.",
        "gender-female": "Femení",
        "prefs-help-gender": "Opcional: s'usa perquè el programari se us adreci amb missatges amb el gènere adient. Aquesta informació serà pública.",
        "email": "Correu electrònic",
-       "prefs-help-realname": "* Nom real (opcional): si escolliu donar aquesta informació serà utilitzada per a donar-vos l'atribució de la vostra feina.",
+       "prefs-help-realname": "<nowiki>*</nowiki> Nom real (opcional): si escolliu donar aquesta informació es utilitzarà per a donar-vos l’atribució de la vostra feina.",
        "prefs-help-email": "L'adreça electrònica és opcional, però permet l'enviament d'una nova contrasenya en cas que oblideu l'actual.",
        "prefs-help-email-others": "També podeu optar per deixar que els altres contactin amb vós a través de la pàgina personal de discussió, sense necessitat de desvetllar la vostra identitat.",
        "prefs-help-email-required": "Cal una adreça de correu electrònic.",
        "randomincategory": "Pàgina aleatòria en una categoria",
        "randomincategory-invalidcategory": "«$1» no és un nom de categoria vàlid.",
        "randomincategory-nopages": "No hi ha pàgines a la categoria [[:Category:$1|$1]].",
-       "randomincategory-selectcategory": "Obté una pàgina a l'atzar de la categoria: $1 $2.",
-       "randomincategory-selectcategory-submit": "Vés-hi",
+       "randomincategory-category": "Categoria:",
        "randomredirect": "Redirecció a l'atzar",
        "randomredirect-nopages": "No hi ha cap redirecció a l'espai de noms «$1».",
        "statistics": "Estadístiques",
        "delete-edit-reasonlist": "Edita els motius d'eliminació",
        "delete-toobig": "Aquesta pàgina té un historial d'edicions molt gran, amb més de $1 {{PLURAL:$1|canvi|canvis}}. L'eliminació d'aquestes pàgines està restringida per a prevenir que hi pugui haver un desajustament seriós de la base de dades de tot el projecte {{SITENAME}} per accident.",
        "delete-warning-toobig": "Aquesta pàgina té un historial d'edicions molt gran, amb més de $1 {{PLURAL:$1|canvi|canvis}}. Eliminar-la podria suposar un seriós desajustament de la base de dades de tot el projecte {{SITENAME}}; aneu en compte abans dur a terme l'acció.",
-       "delete-cantedit": "No podeu suprimir la pàgina perquè no teniu permís per a editar-la.",
        "deleting-backlinks-warning": "'''Avís:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Altres pàgines]] enllacen o transclouen de la pàgina que esteu a punt de suprimir.",
        "rollback": "Reverteix edicions",
        "rollback_short": "Revoca",
        "import": "Importació de pàgines",
        "importinterwiki": "Importa interwiki",
        "import-interwiki-text": "Trieu un web basat en wiki i un títol de pàgina per a importar.\nEs conservaran les dates de les versions i els noms dels editors.\nTotes les accions d'importació interwiki es conserven al [[Special:Log/import|registre d'importacions]].",
-       "import-interwiki-source": "Pàgina/wiki d'origen:",
        "import-interwiki-history": "Copia totes les versions de l'historial d'aquesta pàgina",
        "import-interwiki-templates": "Inclou totes les plantilles",
        "import-interwiki-submit": "Importa",
index a6fd625..23a3b46 100644 (file)
        "tog-underline": "下劃綫鏈接",
        "tog-hideminor": "藏起最近改變其過要修改",
        "tog-hidepatrolled": "藏起最近改變其巡邏修改",
+       "tog-extendwatchlist": "敆擴展監視單單臺中顯示所有其更改,伓啻最近其更改",
        "tog-numberheadings": "自動編號其標題",
+       "tog-showtoolbar": "顯示編輯工具欄",
        "tog-editondblclick": "雙擊就修改頁面",
+       "tog-editsectiononrightclick": "啟用右擊標題編輯段落",
        "tog-watchcreations": "加添我開其頁面共我上傳其文件遘我其監視單",
        "tog-watchdefault": "添加我編輯其頁面共文件遘我其監視單",
        "tog-watchmoves": "添加我移動其頁面共文件遘我其監視單",
        "category-empty": "''茲類別下底現在無文章也無媒體。''",
        "hidden-categories": "{{PLURAL:$1}}乞藏起其類別",
        "hidden-category-category": "已經藏起其類別",
+       "category-subcat-count": "{{PLURAL:$2|茲萆分類僅包括下底蜀萆子分類|茲分類有 {{PLURAL:$1|子分類|$1 萆子分類}},總計 $2 萆。}}",
        "category-subcat-count-limited": "茲蜀萆類別下底有子類別{{PLURAL:$1}}",
        "category-article-count": "{{PLURAL:$2|茲蜀萆類別儷有下底蜀頁。|共總有$2頁,下底其茲$1頁敆茲蜀萆類別𡅏。}}",
        "category-article-count-limited": "下底$1頁敆茲蜀萆類別𡅏{{PLURAL:$1}}",
        "otherlanguages": "其它其語言",
        "redirectedfrom": "(由$1重定向過來)",
        "redirectpagesub": "重定向頁",
-       "lastmodifiedat": "茲頁面是著$2, $1時候修改其。",
+       "lastmodifiedat": "茲蜀頁是着$1 $2其辰候最後修改其。",
        "viewcount": "茲蜀頁已經乞訪問$1回了。{{PLURAL:$1}}",
        "protectedpage": "保護頁",
        "jumpto": "跳遘:",
        "protectedpagetext": "茲頁已經乞保護起咯,𣍐使修改或者其它行動。",
        "viewsourcetext": "汝會使看共複製茲蜀頁其源代碼:",
        "viewyourtext": "汝會使覷蜀覷或者複製茲頁'''汝其修改'''其源代碼:",
-       "editinginterface": "'''警告:'''汝敆𡅏修改其頁面廮𡅏提供茲蜀萆軟件其界面文本。\n茲蜀頁其改變會影響遘其它用戶其用戶界面其顯示。\n如果想修改維基其翻譯,起動遘媒體維基本地化計劃[//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net]。",
+       "editinginterface": "'''警告:'''汝敆𡅏修改其頁面廮𡅏提供茲蜀萆軟件其界面文本。\n茲蜀頁其改變會影響遘其它用戶其用戶界面其顯示。\n如果想修改維基其翻譯,起動遘媒體維基本地化計劃[//translatewiki.net/wiki/Main_Page?setlang=en translatewiki.net]。",
        "namespaceprotected": "汝𣍐使修改敆'''$1'''命名空間其頁面。",
        "customcssprotected": "汝𣍐使修改茲蜀萆CSS頁面,因為伊有別蜀隻用戶其設定。",
        "customjsprotected": "汝𣍐使修改茲蜀萆JavaScript頁面,因為伊有別蜀隻用戶其設定。",
        "prefs-personal": "用戶資料",
        "prefs-rc": "這般其改變",
        "prefs-watchlist": "監視單",
+       "prefs-watchlist-days": "監視單單臺中顯示其天數",
+       "prefs-watchlist-edits": "敆擴展監視其單單臺中顯示其更改其最大數目:",
        "prefs-misc": "其它",
        "saveprefs": "保存",
+       "prefs-editing": "編輯",
+       "rows": "行數:",
        "searchresultshead": "尋討",
        "recentchangescount": "這般改變其條目:",
        "savedprefs": "汝其設定已經乞保存了。",
        "yournick": "新其簽名:",
        "email": "電子郵件",
        "prefs-help-email": "電子郵件地址是愛寫就寫其,但是如果汝𣍐記密碼咯,密碼重置其時候需要茲。",
+       "prefs-help-email-others": "汝也會使選擇讓其他其用戶通過汝其用戶頁面或者討論頁面懸頂其鏈接,使電子郵件來聯繫汝。其他其用戶聯繫汝其辰候,汝其電子郵件地址𣍐顯示出來。",
        "editusergroup": "修改用戶組",
        "group": "組:",
        "group-bot": "機器人",
        "tooltip-pt-userpage": "汝其用戶頁",
        "tooltip-pt-mytalk": "汝其討論頁",
        "tooltip-pt-preferences": "汝其設定",
+       "tooltip-pt-mycontris": "汝其貢獻其單單",
        "tooltip-pt-login": "希望汝躒底其;當然,無逼汝總款做。",
        "tooltip-pt-logout": "躒出",
        "tooltip-ca-talk": "茲蜀頁其討論",
        "tooltip-ca-edit": "汝會使修改茲蜀頁。起動敆保存以前使預覽按鈕",
        "tooltip-ca-addsection": "開始蜀萆新其部分",
        "tooltip-ca-viewsource": "茲蜀頁乞保護起去。\n汝會使看伊其源代碼。",
+       "tooltip-ca-history": "覷茲頁舊底其版本",
        "tooltip-ca-protect": "保護茲蜀頁",
        "tooltip-ca-delete": "刪掉茲蜀頁",
        "tooltip-ca-move": "移動茲蜀頁",
index 0b08299..cec3837 100644 (file)
        "randompage": "Цахууш нисъелла агӀо",
        "randomincategory": "Категори чу цахууш нисъелла  агӀо",
        "randomincategory-nopages": "[[:Category:$1]] категори чохь агӀонаш яц.",
-       "randomincategory-selectcategory": "Категори чу цахууш нийса елла агӀона чу гӀо: $1 $2.",
-       "randomincategory-selectcategory-submit": "Дехьа гӀо",
        "randomredirect": "Цахууш нисделла дIасахьажор",
        "randomredirect-nopages": "«$1» цӀерийн меттиган чохь дӀасахьажораш яц.",
        "statistics": "Статистика",
        "nbytes": "$1 {{PLURAL:$1|байт}}",
        "ncategories": "$1 {{PLURAL:$1|категори|категореш}}",
        "ninterwikis": "$1 {{PLURAL:$1|1=юкъарвики-хьажораг|юкъарвики-хьажоргаш}}",
-       "nlinks": "$1 {{PLURAL:$1|1=хьажораг|хьажоргаш}}",
+       "nlinks": "$1 {{PLURAL:$1|хьажорг}}",
        "nmembers": "$1 {{PLURAL:$1|хӀума|хӀумнаш}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|хӀума|хӀумнаш}}",
        "nrevisions": "$1 {{PLURAL:$1|верси|версеш}}",
        "contributions-userdoesnotexist": "«$1» декъашхочун дӀаяздар дӀаяздина яц.",
        "nocontribs": "Дехарца хийцамаш цакарий.",
        "uctop": "(карара)",
-       "month": "Ð\91аÑ\82Ñ\82аÑ\86а (я хьалхе):",
+       "month": "Ð\91аÑ\82Ñ\82аÑ\87оÑ\85Ñ\8c (я хьалхе):",
        "year": "Шерачохь (я хьалхе):",
        "sp-contributions-newbies": "Гайта бекъ къинхьегам, керла дlабазбиначара бина болу",
        "sp-contributions-newbies-sub": "Керла декъашхойн дӀаяздаршкара",
        "whatlinkshere-links": "← хьажоргаш",
        "whatlinkshere-hideredirs": "$1 дӀасахьажорш",
        "whatlinkshere-hidetrans": "$1 латораш",
-       "whatlinkshere-hidelinks": "$1 хьажоргаш",
+       "whatlinkshere-hidelinks": "$1 хьажорг",
        "whatlinkshere-hideimages": "$1 файлийн хьажоргаш",
        "whatlinkshere-filters": "Литтарш",
        "autoblockid": "Ша блоккхетар #$1",
        "block": "Декъашхочун блоктохар",
        "unblock": "ДекъашхонтӀера блокдӀаякхар",
-       "blockip": "Блоктоха",
+       "blockip": "Блоктоха {{GENDER:$1|декъашхочун}}",
        "blockip-legend": "Декъашхочун блоктохар",
        "blockiptext": "Бухахь йолу форманца блоктоха IP-адресна цунтӏера дӏаяздарш ца дайта.\nБлоктоха магийна цо зенаш деш делахь кхин хӏокху [[{{MediaWiki:Policy-url}}|низам ца]].\nЛахахь билгалде блоктохарна бахьна.",
        "ipaddressorusername": "IP-адрес я декъашхочун цӀе:",
        "ipb-unblock-addr": "ДӀаякхаблок $1",
        "ipb-unblock": "дӀаякхаблок декъашхонтӀера я IP-адрес тӀера",
        "ipb-blocklist": "Блоктоьхнарш",
-       "ipb-blocklist-contribs": "Декъашхочун къинхьегам $1",
+       "ipb-blocklist-contribs": "{{GENDER:$1|$1}} къинхьегам",
        "unblockip": "ДӀаякхаблок декъашхонтӀера",
        "unblockiptext": "Лелае лахара форма IP-адрес тӀера я декъашхойн дӀаяздар тӀера блокдӀайокхуш.",
        "ipusubmit": "ДIаяккха хӀара блок",
        "thumbnail_image-missing": "$1 файл йоцчух тера ду",
        "import": "АгӀонаш чуяхар",
        "importinterwiki": "Викиюкъахь-импорт",
-       "import-interwiki-source": "Вики-хьост/агlо:",
        "import-interwiki-history": "ХӀокху агӀона ерриг хийцаман истори копи ян",
        "import-interwiki-templates": "Юкъайихка массо кепаш",
        "import-interwiki-submit": "Импорт ян",
index acf6959..14f46c6 100644 (file)
        "currentrev": "دوایین پێداچوونەوە",
        "currentrev-asof": "دوایین پێداچوونەوەی $1",
        "revisionasof": "وەک پێداچوونەوەی $1",
-       "revision-info": "پێداچوونەوی $1 لە لایەن $2",
+       "revision-info": "پێداچوونەوی $1 لە لایەن {{GENDER:$6|$2}}$7",
        "previousrevision": "→پیاچوونەوەی کۆنتر",
        "nextrevision": "پێداچوونەوەی نوێتر←",
        "currentrevisionlink": "پێداچوونەوەی ئێستا",
        "unusedtemplateswlh": "بەستەرەکانی تر",
        "randompage": "پەڕەیەک بە هەڵکەوت",
        "randompage-nopages": "هیچ لاپەڕەیەک لەم {{PLURAL:$2|ناوبۆشاییەدا|ناوبۆشاییانەدا}} نیە: $1.",
-       "randomincategory-selectcategory-submit": "بڕۆ",
        "randomredirect": "ڕەوانەکەری ھەرمەکی",
        "randomredirect-nopages": "لە ناوبۆشایی \"$1\" هیچ ڕەوانکەرێک نییە.",
        "statistics": "ئامارەکان",
        "import": "ھاوردنی پەڕەکان",
        "importinterwiki": "ھاوردنی ناووویکی",
        "import-interwiki-text": "بۆ ھاوردن، ویکییەک و سەردێڕێکی پەڕە ھەڵبژێرە.\nڕێکەوتەکانی پێداچوونەوە و ناوی دەستکاریکەرەکان دەپارێزرێت.\nهەموو کردەوەکانی ھاوردنی ناوویکی لە [[Special:Log/import|لۆگی ھاوردن]]دا تۆمار دەکرێت.",
-       "import-interwiki-source": "ویکی/پەڕەی سەرچاوە:",
        "import-interwiki-history": "هەموو مێژووی پێداچوونەوەکانی ئەم پەڕەیە کۆپی بکە",
        "import-interwiki-templates": "ھەموو داڕێژەکان لەخۆبگرێتەوە",
        "import-interwiki-submit": "هاوردە بکە",
index 4564c7e..9cc35e0 100644 (file)
        "prefs-namespaces": "Jmenné prostory",
        "default": "implicitní",
        "prefs-files": "Soubory",
-       "prefs-custom-css": "Vlastní CSS",
-       "prefs-custom-js": "Vlastní JS",
+       "prefs-custom-css": "Uživatelské CSS",
+       "prefs-custom-js": "Uživatelský JavaScript",
        "prefs-common-css-js": "Sdílené CSS/JS pro všechny styly:",
        "prefs-reset-intro": "Pomocí této stránky můžete všechna nastavení vrátit na implicitní hodnoty.\nTuto operaci nelze vrátit zpět.",
        "prefs-emailconfirm-label": "Ověření e-mailu:",
        "randomincategory": "Náhodná stránka z kategorie",
        "randomincategory-invalidcategory": "„$1“ není platný název kategorie.",
        "randomincategory-nopages": "V [[:Category:$1|kategorii $1]] žádné stránky nejsou.",
-       "randomincategory-selectcategory": "Získat náhodnou stránku z kategorie: $1 $2",
-       "randomincategory-selectcategory-submit": "Přejít",
+       "randomincategory-category": "Kategorie:",
+       "randomincategory-legend": "Náhodná stránka v kategorii",
        "randomredirect": "Náhodné přesměrování",
        "randomredirect-nopages": "Ve jmenném prostoru „$1“ nejsou žádná přesměrování.",
        "statistics": "Statistika",
        "exbeforeblank": "obsah před vyprázdněním byl: „$1“",
        "delete-confirm": "Smazání stránky „$1“",
        "delete-legend": "Smazat",
-       "historywarning": "'''Varování:''' Stránka, kterou chcete smazat, má historii se zhruba $1 {{PLURAL:$1|revizí|revizemi}}:",
+       "historywarning": "<strong>Varování:</strong> Stránka, kterou se chystáte smazat, má historii s $1 {{PLURAL:$1|revizí|revizemi}}:",
        "confirmdeletetext": "Chystáte se smazat stránku s celou její historií. Prosím potvrďte, že to opravdu chcete učinit, že si uvědomujete důsledky a že je to v souladu s [[{{MediaWiki:Policy-url}}|pravidly]].",
        "actioncomplete": "Provedeno",
        "actionfailed": "Operace se nezdařila",
        "delete-edit-reasonlist": "Editovat důvody smazání",
        "delete-toobig": "Tato stránka má velkou historii editací, přes $1 {{PLURAL:$1|verzi|verze|verzí}}. Mazání takových stránek je omezeno, aby se předešlo nechtěnému narušení {{grammar:2sg|{{SITENAME}}}}.",
        "delete-warning-toobig": "Tato stránka má velkou historii editací, přes $1 {{PLURAL:$1|verzi|verze|verzí}}. Mazání takových stránek může narušit databázové operace {{grammar:2sg|{{SITENAME}}}}; postupujte opatrně.",
-       "delete-cantedit": "Tuto stránku nemůžete smazat, protože nemáte oprávnění ji editovat.",
+       "deleteprotected": "Tuto stránku nemůžete smazat, protože je zamčena.",
        "deleting-backlinks-warning": "'''Upozornění:''' Stránka, kterou se chystáte smazat, je [[Special:WhatLinksHere/{{FULLPAGENAME}}|na jiných stránkách]] odkazována nebo je do nich vložena.",
        "rollback": "Vrátit zpět editace",
        "rollback_short": "Vrátit zpět",
        "import": "Import stránek",
        "importinterwiki": "Import mezi wiki",
        "import-interwiki-text": "Pro import zvolte zdrojovou wiki a název stránky. Data revizí a jména autorů budou zachována. Všechny importy se zaznamenávají do [[Special:Log/import|knihy importů]].",
-       "import-interwiki-source": "Zdrojová wiki/stránka:",
+       "import-interwiki-sourcewiki": "Zdrojová wiki:",
+       "import-interwiki-sourcepage": "Zdrojová stránka:",
        "import-interwiki-history": "Zkopírovat všechny historické verze této stránky",
        "import-interwiki-templates": "Zahrnout všechny šablony",
        "import-interwiki-submit": "Importovat",
index 90bff13..7e89946 100644 (file)
@@ -92,7 +92,7 @@
        "tog-watchdefault": "Selbst geänderte Seiten und Dateien automatisch beobachten",
        "tog-watchmoves": "Selbst verschobene Seiten und Dateien automatisch beobachten",
        "tog-watchdeletion": "Selbst gelöschte Seiten und Dateien automatisch beobachten",
-       "tog-watchrollback": "Seiten der Beobachtungsliste hinzufügen, bei denen ich eine Zurücksetzung durchgeführt habe.",
+       "tog-watchrollback": "Seiten, bei denen ich eine Zurücksetzung durchgeführt habe, der Beobachtungsliste hinzufügen.",
        "tog-minordefault": "Eigene Änderungen standardmäßig als geringfügig markieren",
        "tog-previewontop": "Vorschau oberhalb des Bearbeitungsfensters anzeigen",
        "tog-previewonfirst": "Beim ersten Bearbeiten immer die Vorschau anzeigen",
        "randomincategory": "Zufällige Seite einer Kategorie",
        "randomincategory-invalidcategory": "„$1“ ist kein gültiger Kategorienname.",
        "randomincategory-nopages": "Es gibt keine Seiten in [[:Category:$1]].",
-       "randomincategory-selectcategory": "Zufällige Seite aus der Kategorie: $1 $2",
-       "randomincategory-selectcategory-submit": "Los",
+       "randomincategory-category": "Kategorie:",
+       "randomincategory-legend": "Zufällige Seite in Kategorie",
        "randomredirect": "Zufällige Weiterleitung",
        "randomredirect-nopages": "Im Namensraum „$1“ sind keine Weiterleitungen vorhanden.",
        "statistics": "Statistik",
        "exbeforeblank": "Inhalt vor dem Leeren der Seite: „$1“",
        "delete-confirm": "Löschen von „$1“",
        "delete-legend": "Löschen",
-       "historywarning": "'''Achtung:''' Die Seite, die du löschen möchtest, hat eine Versionsgeschichte mit ungefähr $1 {{PLURAL:$1|Version|Versionen}}:",
+       "historywarning": "<strong>Achtung:</strong> Die Seite, die du löschen möchtest, hat eine Versionsgeschichte mit {{PLURAL:$1|einer Version|$1 Versionen}}:",
        "confirmdeletetext": "Du bist dabei, eine Seite mit allen zugehörigen älteren Versionen zu löschen. Bitte bestätige dazu, dass du dir der Konsequenzen bewusst bist, und dass du in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]] handelst.",
        "actioncomplete": "Aktion beendet",
        "actionfailed": "Aktion fehlgeschlagen",
        "delete-edit-reasonlist": "Löschgründe bearbeiten",
        "delete-toobig": "Diese Seite hat mit mehr als $1 {{PLURAL:$1|Version|Versionen}} eine sehr lange Versionsgeschichte. Das Löschen solcher Seiten wurde eingeschränkt, um eine versehentliche Überlastung der Server zu verhindern.",
        "delete-warning-toobig": "Diese Seite hat mit mehr als $1 {{PLURAL:$1|Version|Versionen}} eine sehr lange Versionsgeschichte. Das Löschen kann zu Störungen im Datenbankbetrieb führen.",
-       "delete-cantedit": "Du kannst diese Seite nicht löschen, da du nicht über das Recht verfügst, diese Seite zu bearbeiten.",
+       "deleteprotected": "Du kannst diese Seite nicht löschen, da sie geschützt wurde.",
        "deleting-backlinks-warning": "'''Warnung:''' Es verweisen noch [[Special:WhatLinksHere/{{FULLPAGENAME}}|andere Seiten]] auf die zu löschende Seite oder diese Seite ist noch woanders eingebunden.",
        "rollback": "Zurücksetzen der Änderungen",
        "rollback_short": "Zurücksetzen",
        "import": "Seiten importieren",
        "importinterwiki": "Transwiki-Import",
        "import-interwiki-text": "Wähle ein Wiki und eine Seite zum Importieren aus.\nDie Versionsdaten und Benutzernamen bleiben dabei erhalten.\nAlle Transwiki-Import-Aktionen werden im [[Special:Log/import|Import-Logbuch]] protokolliert.",
-       "import-interwiki-source": "Quell-Wiki/-Seite:",
+       "import-interwiki-sourcewiki": "Quellwiki:",
+       "import-interwiki-sourcepage": "Quellseite:",
        "import-interwiki-history": "Alle Versionen dieser Seite importieren",
        "import-interwiki-templates": "Alle Vorlagen einschließen",
        "import-interwiki-submit": "Importieren",
index 7f1a29f..8945156 100644 (file)
        "hidden-category-category": "Categoréi lughêdi",
        "category-subcat-count": "{{PLURAL:$2|In cla categoréia ché a gh'é sōl 'n'ónica sòt-categoréia.| In cla categoréia ché a gh'é {{PLURAL:$1|la sòt-categoréia sgnêda|al $1 sòt-categoréi sgnêdi}} ed sègvit, só 'n totêl ed $2.}}",
        "category-subcat-count-limited": "In cla categoréia ché a gh'é{{PLURAL:$1|'na sòt-categoréia, nutêda|$1 sòt-categoréi, nutêdi}}ché 'd sègvit.",
-       "category-article-count": "{{PLURAL:$2|In cla categoréia ché a gh'é sōl 'na pàgina, sgnêda ché.|In cla categoréia ché gh'é{{PLURAL:$1|la pàgina sgnêda| al pàgini $1 sgnêdi}} ed sègvit, in un totêl ed $2.}}",
+       "category-article-count": "{{PLURAL:$2|In cla categoréia ché a gh'é sōl 'na pàgina, sgnêda ché.|Cla categoréia ché la gh'à {{PLURAL:$1|la pàgina sgnêda| al pàgini $1 sgnêdi}} ed sègvit, in un totêl ed $2.}}",
        "category-article-count-limited": "In cla categoréia ché a gh'é {{PLURAL:$1|la pàgina nutêda|al  $1 pàgini nutêdi ch'é 'd sègvit.}}",
        "category-file-count": "{{PLURAL:$2|In cla categoréia ché a gh'é sōl un file, sgnê ché.|In cla categoréia ché gh'é{{PLURAL:$1|un file sgnê ché| i file $1, sgnê}} ed sègvit, in un totêl ed $2.}}",
        "category-file-count-limited": "In cla categoréia ché a gh'é {{PLURAL:$1|al file nutê|i $1 file nutê}} ché 'd sègvit.",
        "hidetoc": "Lōga",
        "collapsible-collapse": "Stréca",
        "collapsible-expand": "Şlêrga",
+       "confirmable-confirm": "Ét {{GENDER:$1|sicûr|sicûra}}?",
        "confirmable-yes": "Sé",
        "confirmable-no": "No",
        "thisisdeleted": "Guêrda e tōrna a mèter $1?",
        "nstab-image": "'File'",
        "nstab-mediawiki": "Mesâg",
        "nstab-template": "Mudèl",
-       "nstab-help": "Per quî rivê da pôch",
+       "nstab-help": "Pàgina 'd ajót",
        "nstab-category": "Categoréia",
        "nosuchaction": "Operasiòun mìa arcgnusûda",
        "nosuchactiontext": "Còl che t'é scrét int l' URL an n'é mìa vâlid.\nL'é anca pusébil che la URL la sia stêda scréta şbaliêda o che sia stê fât un colegamèint mìa vâlid.\nCòst al pré ânca dîr che gh'é un bug in {{SITENAME}}.",
        "protectedinterface": "Cla pàgina ché la gh'à 'n elemèint ch' al fa pêrt dal colegamèint tra utèint e al progrâma 'd cól sît ché e l'é prutèta per schivşêr pusébil abûş. Per zuntêr o mudufichêr tradusiòun per tót i sistēma wiki druvêr [//translatewiki.net/ translatewiki.net], al prugèt 'd adatamèint a ògni léngva 'd MediaWiki.",
        "editinginterface": "'''Atèinti:''' Al tèst ed cla pàgina ché 'l fa pêrt dal colegamèint tra utèint e 'l progrâma dal sît.  Tót' al modéfichi fâti a cla pàgina ché a gnîran spustêdi insém a i mesâg vést da tót j utèint ed cól wiki ché. Per zuntêr o mudufichêr tradusiòun vâlidi per tót i wiki, cunsîdra la pusibilitê 'd druvêr [/ / translatewiki.net / translatewiki.net], al prugèt 'd adatamèint a ògni léngva 'd MediaWiki.",
        "cascadeprotected": "Insém a cla pàgina ché an n'é mìa pusébil fêr dal mudéfichi perchè l'é dèinter {{PLURAL:$1|int la pàgina sgnêda ché  'd sègvit, ch' l'é stêda prutèta|int al pàgini sgnêdi ché  'd sègvit, ch' în stêdi prutèti}} cun la prutesiòun ch' la 's arfà in cuntinvasiòun:\n$2",
-       "namespaceprotected": "An 's gh'à mìa i permès necesâri per mudifichêr al pàgini dal spâsi di nòm '''$1'''.",
+       "namespaceprotected": "An 's gh'à mìa i permès necesâri per mudifichêr al pàgini dal spâsi di nòm <strong>$1</strong>.",
        "customcssprotected": "An 's gh'à mìa i permès necesâri per mudifichêr cla pàgina CSS ché, perchè la gh'à dèinter al j impustasiòun personêli 'd n' êter utèint.",
        "customjsprotected": "An 's gh'à mìa i permès necesâri per mudifichêr cla pàgina JavaScript ché, perchè la gh'à dèinter al j impustasiòun personêli 'd n' êter utèint.",
        "mycustomcssprotected": "An 's gh'à mìa i permès necesâri per mudifichêr cla pàgina CSS ché.",
        "login-abort-generic": "An t'é mìa stê arcgnusû - Scanşlê",
        "loginlanguagelabel": "Léngva: $1",
        "suspicious-userlogout": "La tó dmânda per destachêret l'é stēda rifiutêda perchè la sèmbra spidîda da un navigadōr ch' al funsiòuna mìa o da un proxy di caching.",
-       "createacct-another-realname-tip": "Druvêr al nòm vèira l'é 'na siēlta personêla; s' es pèinsa 'd ruvêrel al gnirâ uşê per dêr la paternitê di lavōr spidî.",
+       "createacct-another-realname-tip": "Druvêr al nòm vèira l'é 'na siēlta personêla; s' es pèinsa 'd druvêrel al gnirâ uşê per dêr la paternitê di lavōr spidî.",
        "pt-login": "Và dèinter",
        "pt-login-button": "Và dèinter",
        "pt-createaccount": "Fà la tó inscrisiòun",
        "parser-template-recursion-depth-warning": "A s'é rivê al lémit 'd arciâm int al mudèl ($1)",
        "language-converter-depth-warning": "A s'é pasê 'l lémit ed fònd dal cunvertidōr ed léngua ($1)",
        "node-count-exceeded-category": "Pàgin in dó vîn pasê 'l nómer ed nōd",
-       "node-count-exceeded-category-desc": "'Na categoréia p'r al pàgini in dó a's pâsa al nómer di nōd.",
+       "node-count-exceeded-category-desc": "La pàgina la và d'ed sōver al nómer di nōd.",
        "node-count-exceeded-warning": "Cla pàgina ché l'à pasê 'l nómer di nōd",
        "expansion-depth-exceeded-category": "Pàgini 'n dó vî pasê al fònd de şlargamèint",
-       "expansion-depth-exceeded-category-desc": "Còsta l'é 'na categoréia per pàgini in dó vî pasê al fònd dal şlargamèint.",
+       "expansion-depth-exceeded-category-desc": "La pàgina la và d'ed là dal fònd mâsim de slarghêda.",
        "expansion-depth-exceeded-warning": "Cla pàgina ché la pasê al fònd de şlargamèint",
        "parser-unstrip-loop-warning": "Catê sèria 'd Unistrip",
        "parser-unstrip-recursion-limit": "A s'é pasê i lémit 'd arciâm 'd Unstrip ($1)",
        "recentchangesdays": "Nómer di dé da fêr vèder int al j ûltmi mudéfichi:",
        "recentchangesdays-max": "Mâsim $1 {{PLURAL:$1|dé}}",
        "recentchangescount": "Nómer ed mudéfichi da fêr vèder per default:",
+       "prefs-help-recentchangescount": "A gh'é dèinter al j ûltmi mudéfichi, stôri, e regéster.",
+       "prefs-help-watchlist-token2": "Còsta l'é la cêva secrēta p'r al flós web di tō tgnû 'd ôc specêl. Tót quî che la cgnòsen a sràn bòun ed lēşer i tō tgnû 'd ôc specêl, per còst an spartîrla mìa cun nisûn. [[Special:ResetTokens|Cléca ché s'ét ghê bişògn ed turnêrla impustêr]].",
+       "savedprefs": "Al preferèinsi în stêdi salvêdi.",
+       "timezonelegend": "Fûş urâri:",
+       "localtime": "Ōra lochêla:",
+       "timezoneuseserverdefault": "Drōva l'ōra stabilîda dal wiki ($1)",
+       "timezoneuseoffset": "Êter (spieghêr la diferèinsa)",
+       "servertime": "Ōra dal server:",
+       "guesstimezone": "Drōva l'ōra dal navigadōr",
        "timezoneregion-africa": "Âfrica",
        "timezoneregion-america": "Amèrica",
        "timezoneregion-antarctica": "Antârtide",
        "timezoneregion-europe": "Eurôpa",
        "timezoneregion-indian": "Ocèan Indiân",
        "timezoneregion-pacific": "Ocèan Pacéfich",
+       "allowemail": "Permèt a chiêter utèin ed mandêret ed la pōsta eletrônica",
+       "prefs-searchoptions": "Sērca",
+       "prefs-namespaces": "Spâsi di nòm",
+       "default": "Stabilî préma",
+       "prefs-files": "File",
+       "prefs-custom-css": "Adâta al CSS al tō necesitê",
+       "prefs-custom-js": "Adâta al JavaScript al tō necesitê",
+       "prefs-common-css-js": "CSS/JavaScript in comûn per tóti 'l skin:",
+       "prefs-reset-intro": "Es pōl druvêr cla pàgina ché per turnêr a impustêr al preferèinsi e cambiêr còli dichiarêdi int al sît. \nL'operasiòun l'an pōl mìa èser scanşlêda.",
+       "prefs-emailconfirm-label": "Cunfèirma ed la pôsta eletrônica:",
        "youremail": "E-mail:",
        "username": "{{GENDER:$1|Nòm utèint}}",
        "prefs-memberingroups": "{{GENDER:$2|Elemèint}}{{PLURAL:$1|dal gróp|di gróp}}:",
+       "prefs-registration": "Dâta 'd registrasiòun:",
        "yourrealname": "Nòm vèira:",
        "yourlanguage": "Léngua",
+       "yourvariant": "Câmbi 'd la léngua:",
+       "prefs-help-variant": "La versiòun o l'ortograféia ch' ét preferés vèder al pàgini ed cla wiki ché.",
+       "yournick": "Scutmâj (nikname):",
+       "prefs-help-signature": "I cumèint int al pàgini 'd discusiòun a dēven èser firmê cun \"<nowiki>~~~~</nowiki>\" ch' al gnirà cambiê cun la tó fîrma cun dôp la dâta.",
+       "badsig": "Erōr int la fîrma mìa standard, verifichêr i tag HTML.",
+       "badsiglength": "La fîrma siēlta l'é trôp lònga, l'an dēv mìa andêr d'ed sōver di $1 {{PLURAL:$1|carâter}}.",
+       "yourgender": "Cme arfêres a té?",
+       "gender-unknown": "Indiferèint",
+       "gender-male": "L'é registrê in sém a {{SITENAME}}",
+       "gender-female": "L'é registrêda in sém a {{SITENAME}}",
+       "prefs-help-gender": "L'impustasiòun ed cla preferèinsa ché l'é a siēlta. Al progrâma al drōva cól valōr ché per parlêr cun tè e numinêret cun chiêter cun al druvêr al gèner ed gramâtica gióst. Cl'infurmasiòun ché la srà póblica.",
        "email": "E-mail",
+       "prefs-help-realname": "Druvêr al nòm vèira l'é 'na siēlta personêla; s' es pèinsa 'd druvêrel al gnirâ uşê per dêr la paternitê di lavōr spidî.",
        "prefs-help-email": "Mèter l'indéris ed la tó pôsta eletrônica an n'é mia necesâri, mó al permèt ed ricêver la cêva 'd ingrès se per chêş ét la scurdés.",
        "prefs-help-email-others": "Ét pō ânca sernîr ed lasêr che chiêter a 's mèten in cuntât  tēgh cun la pôsta eletrônica cun al colegamèint da la tó pàgina utèint o da còla 'd discusiòun.  Al tó indirés al vîn mìa fât savèir a quî ch'ét 's mèten in cuntât tēgh.",
+       "prefs-help-email-required": "L'indirés ed pôsta eletrônica l'é ubligatôri.",
+       "prefs-info": "Infurmasiòun necesâri",
+       "prefs-signature": "Fîrma",
+       "prefs-dateformat": "Fōrma 'd la dâta",
+       "prefs-timeoffset": "Ōri 'd diferèinsa",
+       "prefs-advancedediting": "Siēlti generêli",
+       "prefs-editor": "Editōr",
+       "prefs-preview": "Guêrda préma",
+       "prefs-advancedrc": "Siēlti pió şvilupêdi",
+       "prefs-advancedrendering": "Siēlti pió şvilupêdi",
+       "prefs-advancedsearchoptions": "Siēlti pió şvilupêdi",
+       "prefs-advancedwatchlist": "Siēlti pió şvilupêdi",
+       "prefs-displayrc": "Siēlti ed vidûda",
+       "prefs-displaywatchlist": "Siēlti ed vidûda",
+       "prefs-tokenwatchlist": "Token",
+       "prefs-diffs": "Diferèinsi",
+       "prefs-help-prefershttps": "Cla diferèinsa ché la gh'à efèt dal st'êter ingrès.",
        "group": "Gróp:",
        "group-user": "Utèint",
        "group-autoconfirmed": "Utèint cunvalidê da per ló",
        "rcshowhidemine": "$1 al mē mudéfichi",
        "rclinks": "Fà vèder al $1 ûltmi mudéfichi fâti int j ûltem $2 dé<br />$3",
        "diff": "dif",
-       "hist": "stòr",
+       "hist": "stòria",
        "hide": "Lōga",
        "show": "Fà vèder",
        "minoreditletter": "m",
        "actioncomplete": "Asiòun cumpîda",
        "actionfailed": "Asiòun falîda",
        "dellogpage": "Scanşladûri",
-       "rollback_short": "Tōrna préma dal mudéfichi",
-       "rollbacklink": "tōrna préma dal mudéfichi",
+       "rollback_short": "Tōrna préma dal mudéfichi",
+       "rollbacklink": "tōrna préma dal mudéfichi",
        "rollbackfailed": "An t'é mia turnê indrē",
        "protectlogpage": "Al prutesiòun",
        "protectedarticle": "l'à prutèt \"[[$1]]\"",
        "blocklink": "blôca",
        "unblocklink": "şblôca",
        "change-blocklink": "câmbia blôch",
-       "contribslink": "lavōr",
+       "contribslink": "lavōr fât",
        "blocklogpage": "Blôch",
        "blocklogentry": "t'é bluchê [[$1]] per un peréiod ed $2 $3",
        "unblocklogentry": "l'à şbluchê $1",
        "tooltip-pt-login": "A 's cunsélia 'd fêr la registrasiòun, ânca s' an n'é mia ubligatôri.",
        "tooltip-pt-logout": "Và fōra",
        "tooltip-ca-talk": "Guêrda al discusiòun relatîvi a cla pàgina chè.",
-       "tooltip-ca-edit": "Ét pō mudifiche cla pàgina ché. Per piaşèir drōva al ptòun \"Guêrda préma\" préma 'd salvêr còl che t'é fât.",
+       "tooltip-ca-edit": "Ét pō mudifiche cla pàgina ché. Per piaşèir drōva al ptòun \"Guêrda préma 'd salvêr\" per vèder còl che t'é fât.",
        "tooltip-ca-addsection": "Cumîncia 'na sesiòun nōva.",
        "tooltip-ca-viewsource": "Cla pàgina ché l'é sòta prutesiòun, mó 't pō vèder al só côdis surzéia.",
        "tooltip-ca-history": "Versiòun ed préma fâti a cla pàgina ché.",
        "fileduplicatesearch-submit": "Sērca",
        "specialpages": "Pàgini specêli",
        "external_image_whitelist": "#Lasêr cla pàgina ché acsé cme l'é<pre>\n#Mèter dèinter i pès dal j espresiòun regolêri (sōl la pêrta cla va fra //) ed sègvit\n#Còsti gnirân més a cunfrûnt cun j indirés URL dal figûri d'ed fōra (hotlinked) \n#Al cunbinasiòun asrân fât vèder cme figûri, se no a gnirà fât vèder sōl al colegamèint\n#Al rîghi che cumîncen cun # în cunsidrêdi di cumèint\n#La diferèinsa tr' al lètri grândi e al lètri céchi an gh'à mìa impurtânsa\n\n#Mèter sōver cla rîga ché tót i pès di regex. Lasêr cla rîga ché acsé cme l'é</pre>",
-       "tag-filter": "Fîlta per  [[Special:Tags|etichèta]]",
+       "tag-filter": "Fîltra per  [[Special:Tags|etichèta]]",
        "tags-edit": "mudéfica",
        "compare-page1": "Pàgina 1",
        "compare-page2": "Pàgina 2",
index 6156867..a5ec592 100644 (file)
        "preferences": "Προτιμήσεις",
        "mypreferences": "Προτιμήσεις",
        "prefs-edits": "Αριθμός επεξεργασιών:",
-       "prefsnologintext2": "Παρακαλούμε $1 για να αλλάξετε τις προτιμήσεις σας.",
+       "prefsnologintext2": "Παρακαλώ συνδεθείτε για να αλλάξετε τις προτιμήσεις σας.",
        "prefs-skin": "Οπτική οργάνωση (skin)",
        "skin-preview": "Προεπισκόπηση",
        "datedefault": "Χωρίς προτίμηση",
        "right-move": "Μετακίνηση σελίδων",
        "right-move-subpages": "Μετακίνηση σελίδων μαζί με τις υποσελίδες τους",
        "right-move-rootuserpages": "Μετακίνηση κεντρικών σελίδων χρηστών",
+       "right-move-categorypages": "Μετακίνηση σελίδων κατηγοριών",
        "right-movefile": "Μετακίνηση αρχείων",
        "right-suppressredirect": "Μη δημιουργία ανακατεύθυνσης από το παλιό όνομα κατά τη μετακίνηση μιας σελίδας",
        "right-upload": "Επιφόρτωση αρχείων",
        "right-browsearchive": "Αναζήτηση στις διαγραμμένες σελίδες",
        "right-undelete": "Ανάκληση διαγραφής μίας σελίδας",
        "right-suppressrevision": "Επιθεώρηση και αποκατάσταση αναθεωρήσεων κρυμμένων από τους διαχειριστές",
+       "right-viewsuppressed": "Προβολή αναθεωρήσεων κρυμμέτων από κάθε χρήστη",
        "right-suppressionlog": "Προβολή ιδιωτικών καταγραφών",
        "right-block": "Φραγή άλλων χρηστών από την επεξεργασία",
        "right-blockemail": "Φραγή ενός χρήστη από την αποστολή ηλεκτρονικών μηνυμάτων",
        "action-move": "να μετακινήσετε αυτή τη σελίδα",
        "action-move-subpages": "να μετακινήσετε αυτή τη σελίδα, καθώς και τις υποσελίδες της",
        "action-move-rootuserpages": "να μετακινήσετε κεντρικές σελίδες χρηστών",
+       "action-move-categorypages": "μετακίνηση σελίδων κατηγοριών",
        "action-movefile": "να μετακινήσετε αυτό το αρχείο",
        "action-upload": "να επιφορτώσετε αυτό το αρχείο",
        "action-reupload": "να ανεβάσετε νέα έκδοση αυτού του υπάρχοντος αρχείου",
        "nolicense": "Καμία επιλεγμένη",
        "license-nopreview": "(Μη διαθέσιμη προεπισκόπηση)",
        "upload_source_url": " (ένα έγκυρο, δημόσια προσβάσιμο URL)",
-       "upload_source_file": " (ένα αρχείο στον υπολογιστή σας)",
+       "upload_source_file": "(το επιλεγμένο αρχείο από τον υπολογιστή σας)",
+       "listfiles-delete": "διαγραφή",
        "listfiles-summary": "Αυτή η ειδική σελίδα δείχνει όλα τα επιφορτωμένα αρχεία.",
        "listfiles_search_for": "Αναζήτηση για όνομα πολυμέσου:",
        "imgfile": "αρχείο",
        "listfiles_size": "Μέγεθος",
        "listfiles_description": "Περιγραφή",
        "listfiles_count": "Εκδόσεις",
+       "listfiles-show-all": "Συμπερίληψη παλαιών εκδόσεων των εικόνων",
        "listfiles-latestversion": "Τρέχουσα έκδοση",
        "listfiles-latestversion-yes": "Ναι",
        "listfiles-latestversion-no": "Όχι",
        "randomincategory": "Τυχαία σελίδα στην κατηγορία",
        "randomincategory-invalidcategory": "Το «$1» δεν είναι έγκυρο όνομα κατηγορίας.",
        "randomincategory-nopages": "Δεν υπάρχουν σελίδες στην κατηγορία [[:Category:$1|$1]].",
-       "randomincategory-selectcategory-submit": "Μετάβαση",
+       "randomincategory-category": "Κατηγορία:",
+       "randomincategory-legend": "Τυχαία σελίδα στην κατηγορία",
        "randomredirect": "Τυχαία ανακατεύθυνση",
        "randomredirect-nopages": "Δεν υπάρχουν ανακατευθύνσεις στον ονοματοχώρο \"$1\".",
        "statistics": "Στατιστικά",
        "protectedpages-page": "Σελίδα",
        "protectedpages-expiry": "Λήγει",
        "protectedpages-performer": "Προστασία χρήστη",
+       "protectedpages-params": "Παράμετροι προστασίας",
        "protectedpages-reason": "Αιτία",
        "protectedpages-unknown-timestamp": "Άγνωστο",
        "protectedpages-unknown-performer": "Άγνωστος χρήστης",
        "listgrouprights-removegroup-self": "Μπορεί να αφαιρέσει {{PLURAL:$2|ομάδα|ομάδες}} από το δικό σας λογαριασμό: $1",
        "listgrouprights-addgroup-self-all": "Μπορεί να προσθέσει όλες τις ομάδες στο δικό σας λογαριασμό",
        "listgrouprights-removegroup-self-all": "Μπορεί να αφαιρέσει όλες τις ομάδες από το δικό σας λογαριασμό",
+       "listgrouprights-namespaceprotection-namespace": "Ονοματοχώρος",
+       "trackingcategories-name": "Όνομα μηνύματος",
+       "trackingcategories-desc": "Κριτήρια συμπερίληψης κατηγορίας",
        "post-expand-template-inclusion-category-desc": "Το μέγεθος της σελίδας είναι μεγαλύτερο από <code>$wgMaxArticleSize</code> μετά την επέκταση όλων των προτύπων, έτσι ώστε ορισμένα πρότυπα δεν έχουν αναπτυχθεί.",
+       "trackingcategories-nodesc": "Καμία διαθέσιμη περιγραφή.",
        "mailnologin": "Δεν υπάρχει διεύθυνση παραλήπτη.",
        "mailnologintext": "Πρέπει να έχετε [[Special:UserLogin|συνδεθεί]] και να έχετε δηλώσει\nμια έγκυρη ηλεκτρονική διεύθυνση στις [[Special:Preferences|Προτιμήσεις]]\nγια να στείλετε e-mail σε άλλους χρήστες.",
        "emailuser": "Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου σε αυτόν τον χρήστη",
        "exbeforeblank": "το περιεχόμενο πριν απο την εκκαθάριση ήταν: '$1'",
        "delete-confirm": "Διαγραφή του \"$1\"",
        "delete-legend": "Διαγραφή",
-       "historywarning": "'''Προσοχή:''' Η σελίδα που πρόκειται να διαγράψετε έχει ιστορικό με περίπου $1 {{PLURAL:$1|επεξεργασία|επεξεργασίες}}:",
+       "historywarning": "<strong>Προσοχή:</strong> Η σελίδα που πρόκειται να διαγράψετε έχει ιστορικό με περίπου $1 {{PLURAL:$1|επεξεργασία|επεξεργασίες}}:",
        "confirmdeletetext": "Πρόκειται να διαγράψετε οριστικά από τη βάση δεδομένων μια σελίδα (ή μια εικόνα) μαζί με το ιστορικό της. Παρακαλούμε επιβεβαιώστε ότι θέλετε πραγματικά να το κάνετε, ότι αντιλαμβάνεσθε τις συνέπειες και ότι το κάνετε σύμφωνα με την [[{{MediaWiki:Policy-url}}|πολιτική]].",
        "actioncomplete": "Η ενέργεια ολοκληρώθηκε.",
        "actionfailed": "Η ενέργεια απέτυχε",
        "delete-edit-reasonlist": "Επεξεργασία λόγων διαγραφής",
        "delete-toobig": "Αυτή η σελίδα έχει μεγάλο ιστορικό τροποποιήσεων, πάνω από $1 {{PLURAL:$1|τροποποίηση|τροποποιήσεις}}.\nΗ διαγραφή τέτοιων σελίδων έχει περιοριστεί για την αποφυγή τυχαίας αναστάτωσης του {{SITENAME}}.",
        "delete-warning-toobig": "Αυτή η σελίδα έχει μεγάλο ιστορικό τροποποιήσεων, πάνω από $1 {{PLURAL:$1|τροποποίηση|τροποποιήσεις}}.\nΗ διαγραφή της μπορεί να αναστατώσει τη λειτουργία της βάσης δεδομένων του {{SITENAME}}. Συνιστούμε μεγάλη προσοχή.",
-       "delete-cantedit": "Δεν μπορείτε να διαγράψετε αυτή τη σελίδα, επειδή δεν έχετε δικαίωμα να την επεξεργαστείτε.",
+       "deleteprotected": "Δεν μπορείτε να διαγράψετε αυτή τη σελίδα επειδή είναι προστατευόμενη.",
        "rollback": "Επαναφορά επεξεργασιών",
        "rollback_short": "Επαναφορά",
        "rollbacklink": "αναστροφή",
        "import": "Εισαγωγή σελίδων",
        "importinterwiki": "Εισαγωγή από άλλο Wiki",
        "import-interwiki-text": "Επιλέξτε ένα wiki και τίτλο σελίδας για την εισαγωγή.\nΟι ημερομηνίες των αναθεωρήσεων και τα ονόματα των συντακτών θα διατηρηθούν.\nΌλες οι ενέργειες εισαγωγής μεταξύ wiki καταγράφονται στο [[Special:Log/import|αρχείο καταγραφής εισαγωγών]].",
-       "import-interwiki-source": "Wiki και σελίδα πηγή:",
        "import-interwiki-history": "Αντιγραφή όλων των εκδόσεων του ιστορικού για αυτή τη σελίδα",
        "import-interwiki-templates": "Συμπερίληψη όλων των προτύπων",
        "import-interwiki-submit": "Εισαγωγή",
        "pageinfo-lasttime": "Ημερομηνία τελευταίας επεξεργασίας",
        "pageinfo-edits": "Συνολικός αριθμός επεξεργασιών",
        "pageinfo-authors": "Συνολικός αριθμός διαφορετικών συντακτών",
-       "pageinfo-recent-edits": "ΠÏ\81Ï\8cÏ\83Ï\86αÏ\84οÏ\82 Î±Ï\81ιθμÏ\8cÏ\82 επεξεργασιών (σε διάστημα $1)",
+       "pageinfo-recent-edits": "Î\91Ï\81ιθμÏ\8cÏ\82 Ï\80Ï\81Ï\8cÏ\83Ï\86αÏ\84Ï\89ν επεξεργασιών (σε διάστημα $1)",
        "pageinfo-recent-authors": "Πρόσφατος αριθμός μοναδικών συντακτών",
        "pageinfo-magic-words": "{{PLURAL:$1|Μαγική λέξη|Μαγικές λέξεις}} ($1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Κρυφή κατηγορία|Κρυφές κατηγορίες}} ($1)",
        "confirm-watch-top": "Προσθήκη αυτής της σελίδας στη λίστα παρακολούθησης σας;",
        "confirm-unwatch-button": "Εντάξει",
        "confirm-unwatch-top": "Κατάργηση αυτής της σελίδας από τη λίστα παρακολούθησης σας;",
+       "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← προηγούμενη σελίδα",
        "imgmultipagenext": "επόμενη σελίδα →",
        "imgmultigo": "Πήγαινε!",
        "autosumm-replace": "Αντικατάσταση σελίδας με '$1'",
        "autoredircomment": "Ανακατεύθυνση στη σελίδα [[$1]]",
        "autosumm-new": "Νέα σελίδα με '$1'",
+       "autosumm-newblank": "Δημιουργήθηκε κενή σελίδα",
        "lag-warn-normal": "Αλλαγές νεότερες από {{PLURAL:$1|δευτερόλεπτο|δευτερόλεπτα}} μπορεί να μην φαίνονται σε αυτή τη λίστα.",
        "lag-warn-high": "Εξαιτίας υψηλής καθυστέρησης της βάσης δεδομένων του εξυπηρετητή, αλλαγές νεότερες από $1 {{PLURAL:$1|δευτερόλεπτο|δευτερόλεπτα}} μπορεί να μην φαίνονται σε αυτή τη λίστα.",
        "watchlistedit-normal-title": "Επεξεργασία λίστας παρακολούθησης",
        "expand_templates_generate_xml": "Εμφάνιση δέντρου συντακτικής ανάλυσης XML",
        "expand_templates_generate_rawhtml": "Εμφάνιση ανεπεξέργαστης HTML",
        "expand_templates_preview": "Προεπισκόπηση",
+       "pagelang-name": "Σελίδα",
+       "pagelang-language": "Γλώσσα",
+       "pagelang-use-default": "Χρήση προεπιλεγμένης γλώσσας",
+       "pagelang-select-lang": "Επιλογή γλώσσας",
        "default-skin-not-found-row-enabled": "* <code>$1</code> /$2 (ενεργοποιημένο)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''απενεργοποιημένο''')"
 }
index 8b254c7..303a4c6 100644 (file)
        "revdelete-offender": "Aŭtoro de revizio:",
        "suppressionlog": "Protokolo pri subigado",
        "suppressionlogtext": "Malsupre estas listo de forigoj kaj forbaroj pri enhavo kaŝita de administrantoj.\nRigardu la [[Special:BlockList|forbarliston]] por la listo de nune operaciaj forbaroj kaj forigoj.",
-       "mergehistory": "Kunfandigi historiojn de paĝoj",
+       "mergehistory": "Kunigi historiojn de paĝoj",
        "mergehistory-header": "Ĉi tiu paĝo permesas al vi kunigi versiojn de la historio de unu fonta paĝo en pli novan paĝon.\nCertigu ke ĉi tiu ŝanĝo tenos kontinuecon de la historia paĝo.",
        "mergehistory-box": "Kunigi versiojn de du paĝoj:",
        "mergehistory-from": "Fontpaĝo:",
        "randomincategory": "Hazarda paĝo en kategorio",
        "randomincategory-invalidcategory": "\"$1\" ne estas valida kategoria nomo.",
        "randomincategory-nopages": "Ne estas paĝoj en la kategorio [[:Category:$1|$1]].",
-       "randomincategory-selectcategory": "Iri al hazarda paĝo el kategorio: $1 $2.$1",
-       "randomincategory-selectcategory-submit": "Ek!",
        "randomredirect": "Hazarda alidirekto",
        "randomredirect-nopages": "Estas neniuj alidirektiloj en la nomspaco \"$1\".",
        "statistics": "Statistiko",
        "import": "Importi paĝojn",
        "importinterwiki": "Transvikia importo",
        "import-interwiki-text": "Elektu vikion kaj paĝan titolon por importi.\nDatoj de versioj kaj nomoj de redaktantoj estos preservitaj.\nĈiuj transvikaj importoj estas raportitaj ĉe la [[Special:Log/import|loglibro de importoj]].",
-       "import-interwiki-source": "Fonta vikio/paĝo:",
        "import-interwiki-history": "Kopiu ĉiujn historiajn versiojn por ĉi tiu pago.",
        "import-interwiki-templates": "Inkluzivi ĉiujn ŝablonojn",
        "import-interwiki-submit": "Importi",
index 2fa6923..8b1587a 100644 (file)
        "randomincategory": "Página aleatoria en categoría",
        "randomincategory-invalidcategory": "\"$1\" no es una categoría válida.",
        "randomincategory-nopages": "No hay páginas en la categoría [[:Category:$1|$1]].",
-       "randomincategory-selectcategory": "Obtener una página aleatoria de categoría: $1 $2.",
-       "randomincategory-selectcategory-submit": "Ir",
+       "randomincategory-category": "Categoría:",
+       "randomincategory-legend": "Página aleatoria en categoría",
        "randomredirect": "Ir a una redirección cualquiera",
        "randomredirect-nopages": "No hay redirecciones en el espacio de nombres «$1».",
        "statistics": "Estadísticas",
        "exbeforeblank": "El contenido antes de blanquear era: «$1»",
        "delete-confirm": "Borrar «$1»",
        "delete-legend": "Borrar",
-       "historywarning": "'''Aviso:''' La página que estás a punto de borrar tiene un historial de aproximadamente $1 {{PLURAL:$1|revisión|revisiones}}:",
+       "historywarning": "<strong>Atención:</strong> la página que estás a punto de borrar tiene un historial con $1 {{PLURAL:$1|revisión|revisiones}}:",
        "confirmdeletetext": "Estás a punto de borrar una página en forma permanente, así como todo su historial.\nPor favor, confirma que realmente quieres hacer eso, que entiendes las\nconsecuencias, y que lo estás haciendo de acuerdo con [[{{MediaWiki:Policy-url}}|las políticas]].",
        "actioncomplete": "Acción completada",
        "actionfailed": "Acción fallida",
        "delete-edit-reasonlist": "Editar razones de borrado",
        "delete-toobig": "Esta página tiene un historial muy grande, con más de $1 {{PLURAL:$1|revisión|revisiones}}. Borrar este tipo de páginas ha sido restringido para prevenir posibles problemas en {{SITENAME}}.",
        "delete-warning-toobig": "Esta página tiene un historial de más de $1 {{PLURAL:$1|revisión|revisiones}}. Eliminarla puede perturbar las operaciones de la base de datos de {{SITENAME}}. Ten cuidado al borrar.",
-       "delete-cantedit": "No puedes borrar esta página porque no tienes permiso de editarla.",
+       "deleteprotected": "No puedes eliminar esta página porque ha sido protegida.",
        "deleting-backlinks-warning": "'''Advertencia:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Otras páginas]] enlazan o transcluyen la página que vas a eliminar.",
        "rollback": "Revertir ediciones",
        "rollback_short": "Revertir",
        "import": "Importar páginas",
        "importinterwiki": "Importación transwiki",
        "import-interwiki-text": "Selecciona un wiki y un título de página para importar.\nLas fechas de revisiones y los nombres de editores se preservarán.\nTodas las importaciones transwiki se registran en el [[Special:Log/import|registro de importaciones]].",
-       "import-interwiki-source": "Wiki o página origen:",
+       "import-interwiki-sourcewiki": "Wiki de origen:",
+       "import-interwiki-sourcepage": "Página de origen:",
        "import-interwiki-history": "Copiar todas las versiones históricas para esta página",
        "import-interwiki-templates": "Incluir todas las plantillas",
        "import-interwiki-submit": "Importar",
index aeabc65..ea4d3dd 100644 (file)
        "jumptosearch": "otsi",
        "view-pool-error": "Serverid on hetkel üle koormatud.\nLiiga palju kasutajaid üritab seda lehte vaadata.\nPalun oota hetk, enne kui uuesti proovid.\n\n$1",
        "generic-pool-error": "Kahjuks on serverid praegu üle koormatud.\nLiiga palju kasutajaid proovivad seda ressurssi vaadata.\nPalun oota natuke, enne kui proovid uuesti selle ressursi juurde pääseda.",
+       "pool-timeout": "Ajalõpp luku ootamisel",
+       "pool-queuefull": "Protsessikogumi järjekord on täis.",
        "pool-errorunknown": "Teadmata tõrge",
+       "pool-servererror": "Protsessikogumi loendurteenus pole saadaval ($1).",
        "aboutsite": "{{GRAMMAR:genitive|{{SITENAME}}}} tiitelandmed",
        "aboutpage": "Project:Tiitelandmed",
        "copyright": "Sisu on kasutatav litsentsi $1 tingimustel, kui pole öeldud teisiti.",
        "badarticleerror": "Seda toimingut ei saa sellel leheküljel sooritada.",
        "cannotdelete": "Lehekülge või faili \"$1\" ei saa kustutada.\nVõimalik, et keegi on selle juba kustutanud.",
        "cannotdelete-title": "Lehekülge \"$1\" ei saa kustutada",
+       "delete-hook-aborted": "Haak katkestas kustutamise.\nSeletust pole toodud.",
        "no-null-revision": "Lehekülje \"$1\" nullredaktsiooni ei õnnestunud teha.",
        "badtitle": "Vigane pealkiri",
        "badtitletext": "Soovitud lehekülje pealkiri oli vigane, tühi või teisest keeleversioonist või vikist valesti lingitud.\nSee võib sisaldada ühte või enamat märki, mida ei saa pealkirjades kasutada.",
        "expansion-depth-exceeded-category": "Ületatud hõrendussügavusega leheküljed",
        "expansion-depth-exceeded-category-desc": "Lehekülg ületab hõrendussügavuse ülemmäära.",
        "expansion-depth-exceeded-warning": "Lehekülg ületas hõrendussügavuse.",
+       "parser-unstrip-loop-warning": "''Unstrip''-funktsiooni silmus tuvastatud",
+       "parser-unstrip-recursion-limit": "''Unstrip''-funktsioonis rekursiooni piirmäär ületatud ($1)",
        "converter-manual-rule-error": "Tõrge keelevariandi käsivahetusreeglis",
        "undo-success": "Selle redaktsiooni käigus tehtud muudatusi saab eemaldada. Palun kontrolli allolevat võrdlust veendumaks, et tahad need muudatused tõepoolest eemaldada. Seejärel saad lehekülje salvestada.",
        "undo-failure": "Muudatust ei saa vahapeal tehtud redigeerimiste tõttu tühistada.",
        "backend-fail-read": "Faili $1 ei saa lugeda.",
        "backend-fail-create": "Faili $1 ei saa kirjutada.",
        "backend-fail-maxsize": "Faili $1 ei saa kirjutada, sest see on {{PLURAL:$2|ühest baidist|$2 baidist}} suurem.",
+       "backend-fail-readonly": "Tagamälu \"$1\" on praegu kirjutuskaitstud. Põhjus: \"<em>$2</em>\"",
+       "backend-fail-synced": "Faili \"$1\" olek sisemälus on ühtimatu.",
+       "backend-fail-connect": "Ühendus tagamäluga \"$1\" ebaõnnestus.",
+       "backend-fail-internal": "Tagamälus \"$1\" esines tundmatu tõrge.",
        "backend-fail-contenttype": "Faili, mida soovitakse talletada asukohas \"$1\", sisutüüpi saanud kindlaks teha.",
+       "backend-fail-batchsize": "Tagamällu edastati {{PLURAL:$1|ühest|$1}} failioperatsioonist koosnev pakk; ülemmäär on {{PLURAL:$2|üks operatsioon|$2 operatsiooni}}.",
        "backend-fail-usable": "Faili $1 ei saa ebapiisavate õiguste või puuduvate kataloogide/konteinerite tõttu lugeda ega kirjutada.",
+       "filejournal-fail-dbconnect": "Tagamälus \"$1\" ebaõnnestus ühendumine päevikuga.",
+       "filejournal-fail-dbquery": "Tagamälus \"$1\" ebaõnnestus päeviku värskendamine.",
        "lockmanager-notlocked": "Rada \"$1\" ei saa lukust lahti teha, sest see pole lukus.",
        "lockmanager-fail-closelock": "Raja \"$1\" lukustusfaili ei saa sulgeda.",
        "lockmanager-fail-deletelock": "Raja \"$1\" lukustusfaili ei saa kustutada.",
+       "lockmanager-fail-acquirelock": "Ressursi \"$1\" luku hankimine ebaõnnestus.",
        "lockmanager-fail-openlock": "Raja \"$1\" lukustusfaili ei saa avada.",
+       "lockmanager-fail-releaselock": "Ressursi \"$1\" lukku ei õnnestunud vabastada.",
+       "lockmanager-fail-db-bucket": "Komplektis $1 ei õnnestunud saada ühendust piisavalt paljude lukustusandmebaasidega.",
+       "lockmanager-fail-db-release": "Andmebaasis $1 ei õnnestunud lukke vabastada.",
+       "lockmanager-fail-svr-acquire": "Serveris $1 ei õnnestunud lukke hankida.",
+       "lockmanager-fail-svr-release": "Serveris $1 ei õnnestunud lukke vabastada.",
        "zip-file-open-error": "Faili avamisel ZIP-kontrolliks tekkis tõrge.",
        "zip-wrong-format": "Valitud fail ei ole ZIP-fail.",
        "zip-bad": "See ZIP-fail on kas rikutud või muul põhjusel loetamatu.\nSelle turvalisust ei saa kontrollida.",
        "randomincategory": "Juhuslik lehekülg kategoorias",
        "randomincategory-invalidcategory": "\"$1\" pole sobiv kategooria nimi.",
        "randomincategory-nopages": "Kategoorias \"[[:Category:$1|$1]]\" puuduvad leheküljed.",
-       "randomincategory-selectcategory": "Hangi juhuslik lehekülg kategooriast: $1 $2.",
-       "randomincategory-selectcategory-submit": "Mine",
+       "randomincategory-category": "Kategooria:",
+       "randomincategory-legend": "Juhuslik lehekülg kategoorias",
        "randomredirect": "Juhuslik ümbersuunamine",
        "randomredirect-nopages": "Nimeruumis \"$1\" ei ole ümbersuunamislehekülgi.",
        "statistics": "Arvandmestik",
        "exbeforeblank": "sisu enne lehekülje tühjendamist: '$1'",
        "delete-confirm": "Lehekülje \"$1\" kustutamine",
        "delete-legend": "Kustutamine",
-       "historywarning": "'''Hoiatus:''' Kustutataval leheküljel on ligikaudu {{PLURAL:$1|ühe redaktsiooniga|$1 redaktsiooniga}} ajalugu:",
+       "historywarning": "<strong>Hoiatus:</strong> Kustutataval leheküljel on {{PLURAL:$1|ühe redaktsiooniga|$1 redaktsiooniga}} ajalugu:",
        "confirmdeletetext": "Sa oled andmebaasist kustutamas lehekülge koos kogu tema ajalooga.\nPalun kinnita, et tahad seda tõepoolest teha, et sa mõistad tagajärgi ja et sinu tegevus on kooskõlas siinse [[{{MediaWiki:Policy-url}}|sisekorraga]].",
        "actioncomplete": "Toiming sooritatud",
        "actionfailed": "Toiming ebaõnnestus",
        "delete-edit-reasonlist": "Redigeeri kustutamise põhjuseid",
        "delete-toobig": "See lehekülg on pika redigeerimisajalooga – üle {{PLURAL:$1|ühe muudatuse|$1 muudatuse}}.\nSelle kustutamine on keelatud, et ära hoida ekslikku {{GRAMMAR:genitive|{{SITENAME}}}} töö häirimist.",
        "delete-warning-toobig": "See lehekülg on pika redigeerimislooga – üle {{PLURAL:$1|ühe muudatuse|$1 muudatuse}}.\nEttevaatust, selle kustutamine võib esile kutsuda häireid {{GRAMMAR:genitive|{{SITENAME}}}} andmebaasi töös.",
-       "delete-cantedit": "Seda lehekülge ei saa kustutada, kuna sul pole õigust seda redigeerida.",
+       "deleteprotected": "Seda lehekülge ei saa kustutada, sest see on kaitstud.",
        "deleting-backlinks-warning": "'''Hoiatus:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Teised leheküljed]] viitavad leheküljele, mida oled kustutamas, või see lehekülg on kasutuses mallina.",
        "rollback": "Tühista muudatused",
        "rollback_short": "Tühista",
        "import": "Lehekülgede import",
        "importinterwiki": "Vikidevaheline import",
        "import-interwiki-text": "Vali importimiseks viki ja lehekülje pealkiri.\nRedigeerimisajad ja kaastööliste nimed säilitatakse.\nKõik vikidevahelised toimingud on [[Special:Log/import|impordilogis]].",
-       "import-interwiki-source": "Lähteviki/lehekülg:",
+       "import-interwiki-sourcewiki": "Lähteviki:",
+       "import-interwiki-sourcepage": "Alliklehekülg:",
        "import-interwiki-history": "Kopeeri selle lehekülje kogu ajalugu",
        "import-interwiki-templates": "Liida kõik mallid",
        "import-interwiki-submit": "Impordi",
        "import-error-interwiki": "Lehekülge \"$1\" ei imporditud, sest selle pealkirja hoitakse välislinkide (interviki) jaoks.",
        "import-error-special": "Lehekülge \"$1\" ei imporditud, sest see kuulub erinimeruumi, kus pole leheküljed lubatud.",
        "import-error-invalid": "Lehekülge \"$1\" ei imporditud, sest pealkiri, mille alla see siin toodaks, on vigane.",
+       "import-error-unserialize": "Lehekülje \"$1\" jadastatud redaktsiooni $2 ei õnnestunud tagasi muundada. Teate järgi kasutas redaktsioon vormingus $4 jadastatud sisumudelit $3.",
        "import-error-bad-location": "Redaktsiooni $2 sisumudeliga $3 ei saa talletada siin vikis leheküljel \"$1\", mis seda mudelit ei toeta.",
        "import-options-wrong": "{{PLURAL:$2|Vale valik|Valed valikud}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Etteantud juurlehekülje pealkiri on vigane.",
        "action-pagelang": "muuta lehekülje keelt",
        "log-name-pagelang": "Keele muutmise logi",
        "log-description-pagelang": "Siia on logitud lehekülgede keele muutmised.",
-       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|muutis}} lehekülje \"$3\" keelt: $4 → $5."
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|muutis}} lehekülje \"$3\" keelt: $4 → $5.",
+       "default-skin-not-found": "Oih! Sinu viki vaikekujundus (<code>$wgDefaultSkin</code>) <code>$1</code> pole saadaval.\n\nPaistab, et sinu install sisaldab järgmisi kujundusi. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas neid lubada ja kuidas valida vaikekujundus.\n\n$2\n\n; Kui oled MediaWiki just paigaldanud:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code>skins/</code>;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja.\n\n; Kui oled MediaWikit just täiendanud:\n: MediaWiki 1.24-s ja uuemates versioonides pole paigaldatud kujundused enam automaatselt lubatud (vaata juhendist [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery kujunduste automaatse leidmise] kohta). Saad kleepida järgmised read leheküljele <code>LocalSettings.php</code>, et lubada kõik praegu paigaldatud kujundused:\n\n<pre>$3</pre>\n\n; Kui oled lehekülge <code>LocalSettings.php</code> just muutnud:\n: Kontrolli üle, ega kujunduste nimedes pole trükivigu.",
+       "default-skin-not-found-no-skins": "Oih! Sinu viki vaikekujundus (<code>$wgDefaultSkin</code>) <code>$1</code> pole saadaval.\n\nÜhtegi kujundust pole paigaldatud.\n\n; Kui oled MediaWiki just paigaldanud või täiendasid seda:\n: Paigaldasid tarkvara ilmselt Giti kaudu või otse lähtekoodist või mõnel muul viisil. See on ootuspärane. MediaWiki 1.24 ja uuemad versioonid ei sisalda peahoidlas ühtegi kujundust. Proovi [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-i kujunduste kataloogist] mõni kujundus paigaldada. Selleks saad:\n:* laadida alla [https://www.mediawiki.org/wiki/Download lintarhiivi paigaldaja], mis sisaldab mitut kujundust ja tarkvaralisa. Saad sealt kleepimiseks kopeerida kausta <code>skins/</code>;\n:* kopeerida Giti kaudu ühe hoidla (<code>mediawiki/skins/*</code>) oma MediaWiki installi kausta <code>skins/</code>.\n: Selle tegemine ei tohiks häirida Giti hoidlat, kui oled MediaWiki arendaja. Vaata [https://www.mediawiki.org/wiki/Manual:Skin_configuration kujunduste häälestusjuhendist], kuidas kujundusi lubada ja kuidas valida vaikekujundus.",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (lubatud)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''keelatud''')"
 }
index fa8c288..af06a8c 100644 (file)
@@ -19,7 +19,8 @@
                        "לערי ריינהארט",
                        "පසිඳු කාවින්ද",
                        "아라",
-                       "Joxemai"
+                       "Joxemai",
+                       "Arkaitz Barnetik"
                ]
        },
        "tog-underline": "Loturak azpimarratu:",
        "randomincategory": "Kategoriako ausazko orrialdea",
        "randomincategory-invalidcategory": "\"$1\" ez da kategoria izen baliagarri bat.",
        "randomincategory-nopages": "Ez dago orrialderik [[:Category:$1|$1]] kategorian.",
-       "randomincategory-selectcategory": "Lortu kategoria honetako ausazko orrialdea: $1 $2.",
-       "randomincategory-selectcategory-submit": "Joan",
        "randomredirect": "Ausazko birbideratzea",
        "randomredirect-nopages": "Ez dago birzuzenketarik \"$1\" izen-tartean.",
        "statistics": "Estatistikak",
        "import": "Orrialdeak inportatu",
        "importinterwiki": "Wikien arteko inportazioa",
        "import-interwiki-text": "Aukeratu inportatzeko wiki eta orrialde izenburu bat. Berrikuspenen datak eta egileak gorde egingo dira. Inportazio ekintza guzti hauek [[Special:Log/import|inportazio erregistroan]] gordetzen dira.",
-       "import-interwiki-source": "Jatorrizko wiki/orrialdea:",
        "import-interwiki-history": "Orrialde honen historiako bertsio guztiak kopiatu",
        "import-interwiki-templates": "Txantiloi guztiak sartu",
        "import-interwiki-submit": "Inportatu",
        "confirm-purge-bottom": "Orrialdea purgatzean katxea ezabatzen du eta orrialdearen bertsiorik eguneratuena erakustera behartzen du.",
        "confirm-watch-button": "Ados",
        "confirm-unwatch-button": "Ados",
-       "quotation-marks": "«$1»",
+       "quotation-marks": "\"$1\"",
        "imgmultipageprev": "&larr; aurreko orrialdea",
        "imgmultipagenext": "hurrengo orrialdea &rarr;",
        "imgmultigo": "Joan!",
index d425390..95fb669 100644 (file)
        "randomincategory": "صفحهٔ تصادفی در رده",
        "randomincategory-invalidcategory": "«$1» نامی معتبر برای یک ردهٔ نیست.",
        "randomincategory-nopages": "هیج صفحه‌ای در رده [[:Category:$1|$1]] وجود ندارد.",
-       "randomincategory-selectcategory": "دریافت صفحه‌ای تصادفی از دسته‌بندی: $1 $2.",
-       "randomincategory-selectcategory-submit": "برو",
        "randomredirect": "تغییرمسیر تصادفی",
        "randomredirect-nopages": "هیج صفحهٔ تغییرمسیری در فضای نام «$1» موجود نیست.",
        "statistics": "آمار",
        "wantedtemplates": "الگوهای مورد نیاز",
        "mostlinked": "صفحه‌هایی که بیشتر از همه به آن‌ها پیوند داده شده‌است",
        "mostlinkedcategories": "رده‌هایی که بیشتر از همه به آن‌ها پیوند داده شده‌است",
-       "mostlinkedtemplates": "ببشترین صفحه‌های تراگنجایش‌شده",
+       "mostlinkedtemplates": "ببشترین صفحه‌های تراگنجانده‌شده",
        "mostcategories": "صفحه‌های دارای بیشترین رده",
        "mostimages": "پرونده‌هایی که بیشتر از همه به آن‌ها پیوند داده شده‌است",
        "mostinterwikis": "صفحه‌های دارای بیشترین میان‌ویکی",
        "delete-edit-reasonlist": "ویرایش دلایل حذف",
        "delete-toobig": "این صفحه تاریخچهٔ ویرایشی بزرگی دارد، که شامل بیش از $1 {{PLURAL:$1|نسخه|نسخه}} است.\nبه منظور جلوگیری از اختلال ناخواسته در {{SITENAME}} حذف این گونه صفحه‌ها محدود شده‌است.",
        "delete-warning-toobig": "این صفحه تاریخچهٔ ویرایشی بزرگی دارد، که شامل بیش از $1 {{PLURAL:$1|نسخه|نسخه}} است.\nحذف آن ممکن است که عملکرد پایگاه دادهٔ {{SITENAME}} را مختل کند;\nبا احتیاط ادامه دهید.",
-       "delete-cantedit": "چون شما مجوز ویرایش این صفحه ندارید، نمی‌توانید حذفش کنید.",
-       "deleting-backlinks-warning": "''' هشدار:''' پیوند [[Special:WhatLinksHere/{{FULLPAGENAME}}|صفحات دیگر]] یا تراگنجایش صفحهٔ شما برای حذف.",
+       "deleting-backlinks-warning": "''' هشدار:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|صفحه‌های دیگری]] هستند که به صفحه‌ای که شما در حال حذف آن هستید پیوند دارند یا آن را تراگنجانیده‌اند.",
        "rollback": "واگردانی ویرایش‌ها",
        "rollback_short": "واگردانی",
        "rollbacklink": "واگردانی",
        "import": "درون‌ریزی صفحه‌ها",
        "importinterwiki": "درون‌ریزی تراویکی",
        "import-interwiki-text": "یک ویکی و یک نام صفحه را انتخاب کنید تا اطلاعات از آن درون‌ریزی شود.\nتاریخ نسخه‌ها و نام ویرایش‌کنندگان ثابت خواهد ماند.\nاطلاعات مربوط به درون‌ریزی صفحه‌ها در [[Special:Log/import|سیاههٔ درون‌ریزی‌ها]] درج خواهد شد.",
-       "import-interwiki-source": "ویکی/صفحهٔ منبع:",
        "import-interwiki-history": "تمام نسخه‌های تاریخچهٔ این صفحه انتقال داده شود",
        "import-interwiki-templates": "تمام الگوها را شامل شود",
        "import-interwiki-submit": "درون‌ریزی شود",
        "pageinfo-magic-words": "{{PLURAL:$1|حرف|حروف}} جادویی ($1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1| ردهٔ|ردهٔ}} پنهان ( $1 )",
        "pageinfo-templates": "{{PLURAL:$1|الگو|الگو}} استفاده‌شده ($1)",
-       "pageinfo-transclusions": "{{PLURAL:$1|صفحهٔ|صفحه‌های}} تراگنجایش‌شده در ($1)",
+       "pageinfo-transclusions": "{{PLURAL:$1|صفحهٔ|صفحه‌های}} تراگنجانش‌شده در ($1)",
        "pageinfo-toolboxlink": "اطلاعات صفحه",
        "pageinfo-redirectsto": "تغییرمسیر به",
        "pageinfo-redirectsto-info": "اطلاعات",
index f28373f..107af20 100644 (file)
        "compareselectedversions": "Vertaile valittuja versioita",
        "showhideselectedversions": "Näytä tai piilota valitut versiot",
        "editundo": "kumoa",
-       "diff-empty": "(ei eroavaisuuksia)",
+       "diff-empty": "(ei mitään eroa)",
        "diff-multi-sameuser": "({{PLURAL:$1|Yhtä välissä olevaa versiota|$1 välissä olevaa versiota}} samalta käyttäjältä ei näytetä)",
        "diff-multi-otherusers": "({{PLURAL:$1|Yhtä välissä olevaa versiota|$1 välissä olevaa versiota}} {{PLURAL:$2|toisen käyttäjän tekemänä|$2 käyttäjän tekeminä}} ei näytetä)",
        "diff-multi-manyusers": "(Versioiden välissä on {{PLURAL:$1|yksi muu muokkaus|$1 muuta muokkausta, jotka on tehnyt {{PLURAL:$2|yksi käyttäjä|yli $2 eri käyttäjää}}}}.)",
        "randomincategory": "Satunnainen sivu luokasta",
        "randomincategory-invalidcategory": "$1 ei ole kelvollinen luokan nimi.",
        "randomincategory-nopages": "Luokassa [[:Category:$1|$1]] ei ole sivuja.",
-       "randomincategory-selectcategory": "Hae satunnainen sivu luokasta: $1 $2",
-       "randomincategory-selectcategory-submit": "Hae",
+       "randomincategory-category": "Luokka:",
+       "randomincategory-legend": "Satunnainen sivu luokassa",
        "randomredirect": "Satunnainen ohjaus",
        "randomredirect-nopages": "Nimiavaruudessa ”$1” ei ole ohjaussivuja.",
        "statistics": "Tilastot",
        "exbeforeblank": "ennen tyhjentämistä sisälsi: ”$1”",
        "delete-confirm": "Poista ”$1”",
        "delete-legend": "Sivun poisto",
-       "historywarning": "'''Varoitus:''' Sivua, jota olet poistamassa, on muokattu noin $1 {{PLURAL:$1|kerta|kertaa}}:",
+       "historywarning": "<strong>Varoitus:</strong> Sivulla, jota olet poistamassa, on muokkaushistoriaa ja sitä on muokattu $1 {{PLURAL:$1|kerran|kertaa}}:",
        "confirmdeletetext": "Olet poistamassa sivun tai tiedoston ja kaiken sen historian. Ymmärrä teon seuraukset ja tee poisto {{GRAMMAR:genitive|{{SITENAME}}}} [[{{MediaWiki:Policy-url}}|käytäntöjen]] mukaisesti.",
        "actioncomplete": "Toiminto suoritettu",
        "actionfailed": "Toiminto epäonnistui",
        "delete-edit-reasonlist": "Muokkaa poistosyitä",
        "delete-toobig": "Tällä sivulla on pitkä muutoshistoria – yli $1 {{PLURAL:$1|versio|versiota}}. Näin suurien muutoshistorioiden poistamista on rajoitettu suorituskykysyistä.",
        "delete-warning-toobig": "Tällä sivulla on pitkä muutoshistoria – yli $1 {{PLURAL:$1|versio|versiota}}. Näin suurien muutoshistorioiden poistaminen voi haitata sivuston suorituskykyä.",
-       "delete-cantedit": "Et voi poistaa tätä sivua, koska sinulla ei ole oikeutta sen muokkaamiseen.",
+       "deleteprotected": "Et voi poistaa tätä sivua, koska se on suojattu.",
        "deleting-backlinks-warning": "'''Varoitus:''' Sivulle, jota olet poistamassa, johtaa [[Special:WhatLinksHere/{{FULLPAGENAME}}|linkkejä muilta sivuilta]], tai sivu on sisällytetty muuhun sivuun.",
        "rollback": "palauta aiempaan versioon",
        "rollback_short": "Palautus",
        "import": "Tuo sivuja",
        "importinterwiki": "Tuo sivuja muista wikeistä (transwiki import)",
        "import-interwiki-text": "Valitse wiki ja sivun nimi tuontia varten.\nVersioiden päivämäärät ja muokkaajien nimet säilyvät ennallaan. \nKaikki wikienväliset tuontitapahtumat kirjataan [[Special:Log/import|tuontilokiin]].",
-       "import-interwiki-source": "Lähdewiki/sivu:",
+       "import-interwiki-sourcewiki": "Lähdewiki:",
+       "import-interwiki-sourcepage": "Lähdesivu:",
        "import-interwiki-history": "Kopioi sivun koko historia ja kaikki versiot",
        "import-interwiki-templates": "Ota mukaan kaikki mallineet",
        "import-interwiki-submit": "Tuo",
        "log-name-pagelang": "Kielenvaihtoloki",
        "log-description-pagelang": "Tämä on loki, johon merkitään muutokset sivujen kieliasetuksissa.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|muutti}} sivun kieltä sivulla $3 kielestä $4 kieleksi $5.",
+       "default-skin-not-found": "Hupsista! Oletuksena tuleva ulkoasu sinun wikillesi (<code>$wgDefaultSkin</code>), <code>$1</code>, ei ole saatavilla.\n\n\n<strong>Alla on ohjeita englanniksi:</strong>\n\n\nYour installation seems to include the following skins. See [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] for information how to enable them and choose the default.\n\n$2\n\n; If you have just installed MediaWiki: \n: You probably installed from git, or directly from the source code using some other method. This is expected. Try installing some skins from [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's skin directory], by: :* Downloading the [https://www.mediawiki.org/wiki/Download tarball installer], which comes with several skins and extensions. You can copy and paste the <code>skins/</code> directory from it. \n:* Cloning one of the <code>mediawiki/skins/*</code> repositories via git into the <code>skins/</code> directory of your MediaWiki installation. \n: Doing this should not interfere with your git repository if you're a MediaWiki developer.\n\n\n; If you have just upgraded MediaWiki: \n: MediaWiki 1.24 and newer no longer automatically enables installed skins (see [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). You can paste the following lines into <code>LocalSettings.php</code> to enable all currently installed skins:\n\n<pre>$3</pre>\n\n; If you have just modified <code>LocalSettings.php</code>: \n: Double-check the skin names for typos.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (käytössä)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''ei käytössä''')"
 }
index 8de0858..363c4de 100644 (file)
        "tog-watchdefault": "Ajouter les pages et les fichiers que je modifie à ma liste de suivi",
        "tog-watchmoves": "Ajouter les pages et les fichiers que je renomme à ma liste de suivi",
        "tog-watchdeletion": "Ajouter les pages et les fichiers que je supprime à ma liste de suivi",
-       "tog-watchrollback": "Ajouter à ma liste de suivi les pages sur lesquelles j’ai effectué une annulation",
+       "tog-watchrollback": "Ajouter à ma liste de suivi les pages sur lesquelles j’ai effectué une révocation",
        "tog-minordefault": "Marquer toutes mes modifications comme mineures par défaut",
        "tog-previewontop": "Afficher la prévisualisation au-dessus de la zone de modification",
        "tog-previewonfirst": "Afficher la prévisualisation lors de la première modification",
        "userrights-lookup-user": "Gestion des groupes d'utilisateurs",
        "userrights-user-editname": "Entrez un nom d'utilisateur :",
        "editusergroup": "Modification des groupes d'utilisateurs",
-       "editinguser": "Modification des droits de l'{{GENDER:$1|utilisateur|utilisatrice}} <strong>[[User:$1|$1]]</strong>' $2",
+       "editinguser": "Modification des droits de l’{{GENDER:$1|utilisateur|utilisatrice}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Modifier les groupes de l'utilisateur",
        "saveusergroups": "Enregistrer les groupes de l'utilisateur",
        "userrights-groupsmember": "Membre de :",
        "randomincategory": "Page au hasard dans la catégorie",
        "randomincategory-invalidcategory": "« $1 » n’est pas un nom de catégorie valide.",
        "randomincategory-nopages": "Il n’y a pas de page dans [[:Category:$1]].",
-       "randomincategory-selectcategory": "Prendre une page au hasard dans la catégorie : $1 $2.",
-       "randomincategory-selectcategory-submit": "Aller",
+       "randomincategory-category": "Catégorie :",
+       "randomincategory-legend": "Page aléatoire dans la catégorie",
        "randomredirect": "Page de redirection au hasard",
        "randomredirect-nopages": "Il n'y a aucune page de redirection dans l'espace de noms « $1 ».",
        "statistics": "Statistiques",
        "exbeforeblank": "contenait avant blanchiment « $1 »",
        "delete-confirm": "Supprimer « $1 »",
        "delete-legend": "Supprimer",
-       "historywarning": "'''Attention :''' la page que vous êtes sur le point de supprimer a un historique avec environ $1 {{PLURAL:$1|version|versions}} :",
+       "historywarning": "<strong>Attention :</strong> la page que vous êtes sur le point de supprimer a un historique avec $1 {{PLURAL:$1|version|versions}} :",
        "confirmdeletetext": "Vous êtes sur le point de supprimer une page ou un fichier, ainsi que toutes ses versions antérieures historisées. Veuillez confirmer que c’est bien là ce que vous voulez faire, que vous en comprenez les conséquences et que vous faites ceci en accord avec les [[{{MediaWiki:Policy-url}}|règles internes]].",
        "actioncomplete": "Action effectuée",
        "actionfailed": "L'action a échoué",
        "delete-edit-reasonlist": "Modifier les motifs de suppression de page",
        "delete-toobig": "Cette page possède un historique important de modifications, dépassant $1 version{{PLURAL:$1||s}}.\nLa suppression de telles pages a été restreinte pour prévenir des perturbations accidentelles de {{SITENAME}}.",
        "delete-warning-toobig": "Cette page possède un historique important de modifications, dépassant $1 version{{PLURAL:$1||s}}.\nLa supprimer peut perturber le fonctionnement de la base de données de {{SITENAME}} ;\nveuiller ne procéder qu'avec prudence.",
-       "delete-cantedit": "Vous ne pouvez pas supprimer cette page car vous n’avez pas le droit de la modifier.",
+       "deleteprotected": "Vous ne pouvez pas supprimer cette page car elle a été protégée.",
        "deleting-backlinks-warning": "'''Attention :''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|D’autres pages]] ont un lien vers ou incorporent la page que vous allez supprimer.",
        "rollback": "Révoquer les modifications",
        "rollback_short": "Révoquer",
        "import": "Importer des pages",
        "importinterwiki": "Importation inter-wiki",
        "import-interwiki-text": "Sélectionnez un wiki et un titre de page à importer.\nLes dates des versions et les noms des contributeurs seront préservés.\nToutes les actions d'importation inter-wiki sont consignées dans l'[[Special:Log/import|historique des importations]].",
-       "import-interwiki-source": "Wiki et page sources :",
+       "import-interwiki-sourcewiki": "Wiki source :",
+       "import-interwiki-sourcepage": "Page source :",
        "import-interwiki-history": "Copier toutes les versions de l’historique de cette page",
        "import-interwiki-templates": "Inclure tous les modèles",
        "import-interwiki-submit": "Importer",
index 5532175..acb72ef 100644 (file)
        "filedelete-reason-otherlist": "Nā kumu ʻē aʻe",
        "download": "hoʻoili",
        "randompage": "ʻAtikala Kaulele",
-       "randomincategory-selectcategory-submit": "Huli",
        "statistics": "ʻIkepilihelu",
        "statistics-header-pages": "ʻIkepilihelu ʻaoʻao",
        "statistics-header-edits": "ʻIkepilihelu hoʻololi",
index 9bad958..eba5338 100644 (file)
        "revertmerge": "ביטול המיזוג",
        "mergelogpagetext": "זוהי רשימה של המיזוגים האחרונים של גרסאות מדף אחד לתוך דף שני.",
        "history-title": "$1: היסטוריית גרסאות",
-       "difference-title": "$1: הבדלים בין גרסאות",
+       "difference-title": "הבדלים בין גרסאות בדף \"$1\"",
        "difference-title-multipage": "$1 ו{{GRAMMAR:תחילית|$2}}: הבדלים בין דפים",
        "difference-multipage": "(הבדלים בין דפים)",
        "lineno": "שורה $1:",
        "userrights-no-interwiki": "אין לכם הרשאה לערוך הרשאות משתמש באתרים אחרים.",
        "userrights-nodatabase": "בסיס הנתונים $1 אינו קיים או אינו מקומי.",
        "userrights-nologin": "עליכם [[Special:UserLogin|להיכנס לחשבון]] עם הרשאות מתאימות כדי לשנות הרשאות של משתמשים.",
-       "userrights-notallowed": "×\90×\99×\9f ×\9c×\9b×\9d הרשאה להוסיף או להסיר הרשאות של משתמשים.",
+       "userrights-notallowed": "×\90×\99×\9f ×\9c×\9a הרשאה להוסיף או להסיר הרשאות של משתמשים.",
        "userrights-changeable-col": "קבוצות שבאפשרותכם לשנות",
        "userrights-unchangeable-col": "קבוצות שאין באפשרותכם לשנות",
        "userrights-conflict": "התנגשות בין שינויי הרשאות משתמש! אנא בדקו את השינויים שלכם ואשרו אותם.",
        "randomincategory": "דף אקראי בקטגוריה",
        "randomincategory-invalidcategory": "\"$1\" אינו שם תקין לקטגוריה.",
        "randomincategory-nopages": "אין דפים בקטגוריה [[:Category:$1|$1]].",
-       "randomincategory-selectcategory": "קבלת דף אקראי מהקטגוריה: $1 $2.",
-       "randomincategory-selectcategory-submit": "מעבר",
+       "randomincategory-category": "קטגוריה:",
+       "randomincategory-legend": "דף אקראי בקטגוריה",
        "randomredirect": "הפניה אקראית",
        "randomredirect-nopages": "אין הפניות במרחב השם \"$1\".",
        "statistics": "סטטיסטיקות",
        "exbeforeblank": "התוכן לפני שרוקן היה: \"$1\"",
        "delete-confirm": "מחיקת $1",
        "delete-legend": "מחיקה",
-       "historywarning": "'''אזהרה:''' לדף שאתם עומדים למחוק יש היסטוריית שינויים של {{PLURAL:$1|גרסה אחת|$1 גרסאות}}:",
+       "historywarning": "<strong>אזהרה:</strong> לדף שאתם עומדים למחוק יש היסטוריית שינויים של {{PLURAL:$1|גרסה אחת|$1 גרסאות}}:",
        "confirmdeletetext": "אתם עומדים למחוק דף יחד עם כל ההיסטוריה שלו.\n\nאנא אשרו שזה אכן מה שאתם מתכוונים לעשות, שאתם מבינים את התוצאות של מעשה כזה, ושהמעשה מבוצע בהתאם ל[[{{MediaWiki:Policy-url}}|נוהלי האתר]].",
        "actioncomplete": "הפעולה בוצעה",
        "actionfailed": "הפעולה נכשלה",
        "delete-edit-reasonlist": "עריכת סיבות המחיקה",
        "delete-toobig": "דף זה כולל מעל {{PLURAL:$1|גרסה אחת|$1 גרסאות}} בהיסטוריית העריכות שלו. מחיקת דפים כאלה הוגבלה כדי למנוע פגיעה בביצועי האתר.",
        "delete-warning-toobig": "דף זה כולל מעל {{PLURAL:$1|גרסה אחת|$1 גרסאות}} בהיסטוריית העריכות שלו. מחיקה שלו עלולה להפריע לפעולות בבסיס הנתונים; אנא שקלו שנית את המחיקה.",
-       "delete-cantedit": "אין באפשרותך למחוק את הדף כי אין לך הרשאה לערוך אותו.",
+       "deleteprotected": "אין באפשרותך למחוק את הדף כי הוא מוגן.",
        "deleting-backlinks-warning": "'''אזהרה:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|דפים אחרים]] מקשרים לדף שאתם עומדים למחוק או מכלילים אותו.",
        "rollback": "שחזור עריכות",
        "rollback_short": "שחזור",
        "import": "ייבוא דפים",
        "importinterwiki": "ייבוא בין־אתרי",
        "import-interwiki-text": "אנא בחרו אתר ויקי וכותרת דף לייבוא.\nתאריכי העריכות ושמות העורכים יישמרו.\nכל פעולות הייבוא הבין־אתרי נשמרות ב[[Special:Log/import|יומן הייבוא]].",
-       "import-interwiki-source": "אתר/דף המקור:",
+       "import-interwiki-sourcewiki": "אתר המקור:",
+       "import-interwiki-sourcepage": "דף המקור:",
        "import-interwiki-history": "העתקת כל היסטוריית העריכות של דף זה",
        "import-interwiki-templates": "ייבוא גם של כל התבניות המוכללות בדף",
        "import-interwiki-submit": "ייבוא",
index dcccfad..c1d4738 100644 (file)
        "randomincategory": "श्रेणी में यादृच्छिक (रैंडम) पृष्ठ",
        "randomincategory-invalidcategory": "\"$1\" एक मान्य श्रेणी नाम नहीं है।",
        "randomincategory-nopages": "[[:Category:$1|$1]] श्रेणी में कोई पृष्ठ नहीं हैं।",
-       "randomincategory-selectcategory": "श्रेणी से यादृच्छिक (रैंडम) पृष्ठ खोलें: $1 $2",
-       "randomincategory-selectcategory-submit": "खोलें",
        "randomredirect": "किसी एक पुनर्निर्देशन पर जाएँ",
        "randomredirect-nopages": "नामस्थान \"$1\" में कोई पुनर्निर्देशन नहीं हैं।",
        "statistics": "आँकड़े",
        "delete-edit-reasonlist": "हटाने के कारण संपादित करें",
        "delete-toobig": "इस पृष्ठ का संपादन इतिहास $1 से अधिक {{PLURAL:$1|अवतरण}} होने की वजह से बहुत बड़ा है।\n{{SITENAME}} के अनपेक्षित रूप से बंद होने से रोकने के लिये ऐसे पृष्ठों को हटाने की अनुमति नहीं है।",
        "delete-warning-toobig": "इस पृष्ठ का संपादन इतिहास $1 से अधिक {{PLURAL:$1|अवतरण}} होने की वजह से बहुत बड़ा है।\nइसे हटाने से {{SITENAME}} के डाटाबेस की गतिविधियों में व्यवधान आ सकता है;\nकृपया सोच समझ कर आगे बढ़ें।",
-       "delete-cantedit": "आप इस पृष्ठ को नहीं हटा सकते क्योंकि आपको इसकी अनुमति नहीं है।",
        "deleting-backlinks-warning": "'''चेतावनी:''' जो पृष्ठ आप हटाने जा रहे हैं उससे [[Special:WhatLinksHere/{{FULLPAGENAME}}|अन्य पृष्ठ]] जुड़ते हैं अथवा उसे ट्रांसक्लूड करते हैं।",
        "rollback": "संपादन वापिस लें",
        "rollback_short": "वापिस लें",
        "import": "पृष्ठ इम्पोर्ट करें",
        "importinterwiki": "ट्रान्सविकि आयात",
        "import-interwiki-text": "आयात करने के लिये एक विकि और एक पृष्ठ चुनें।\nअवतरण दिनांक और संपादक नाम ज्यों-के-त्यों रखे जाएँगे।\nसभी ट्रान्सविकि आयात क्रियाएँ [[Special:Log/import|आयात लॉग]] में डाली जाती हैं।",
-       "import-interwiki-source": "स्रोत विकि/पृष्ठ:",
        "import-interwiki-history": "इस पृष्ठ के सभी इतिहास अवतरण कॉपी करें",
        "import-interwiki-templates": "सभी साँचे शामिल करें",
        "import-interwiki-submit": "आयात",
index a15861f..7f7e3ac 100644 (file)
        "randomincategory": "Připadna strona w kategoriji",
        "randomincategory-invalidcategory": "\"$1\" płaćiwe kategorijowe mjeno njeje.",
        "randomincategory-nopages": "W kategoriji [[:Category:$1|$1]] žane strony njejsu.",
-       "randomincategory-selectcategory": "Připadna strona z kategorija: $1 $2",
-       "randomincategory-selectcategory-submit": "Wotesłać",
        "randomredirect": "Připadne daleposrědkowanje",
        "randomredirect-nopages": "Žane daleposrědkowanja w mjenowym rumje \"$1\".",
        "statistics": "Statistika",
        "delete-edit-reasonlist": "Přičiny za wušmórnjenje wobdźěłać",
        "delete-toobig": "Tuta strona ma z wjace hač $1 {{PLURAL:$1|wersiju|wersijomaj|wersijemi|wersijemi}} wulke wobdźěłanske stawizny. Wušmórnjenje tajkich stronow bu wobmjezowane, zo by připadne přetorhnjenje {{SITENAME}} wobešło.",
        "delete-warning-toobig": "Tuta strona ma z wjace hač $1 {{PLURAL:$1|wersiju|wersijomaj|wersijemi|wersijemi}} wulke wobdźěłanske stawizny. Wušmórnjenje móže operacije datoweje banki {{SITENAME}} přetorhnyć; pokročuj z kedźbliwosću.",
-       "delete-cantedit": "Njemóžeš tutu stronu zhašeć, dokelž nimaš prawo ju wobdźěłować.",
        "deleting-backlinks-warning": "'''Warnowanje:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Druhe strony]] wotkazuja k stronje abo strona je druhdźe zapřijata, kotruž chceš zhašeć.",
        "rollback": "Změny cofnyć",
        "rollback_short": "Cofnyć",
        "import": "Strony importować",
        "importinterwiki": "Import z druheho wikija",
        "import-interwiki-text": "Wuběr wiki a stronu za importowanje. Daty wersijow a mjena awtorow so zachowaja. Wšě akcije za transwiki-importy so w [[Special:Log/import|protokolu importow]] protokoluja.",
-       "import-interwiki-source": "Žórłowy wiki/Žórłowa strona:",
        "import-interwiki-history": "Wšě wersije ze stawiznow tuteje strony kopěrować",
        "import-interwiki-templates": "Wšě předłohi zapřijeć",
        "import-interwiki-submit": "Importować",
index 2ab1aed..8c2f8aa 100644 (file)
        "import": "Lapok importálása",
        "importinterwiki": "Transwiki importálása",
        "import-interwiki-text": "Válaszd ki az importálandó wikit és lapcímet.\nA változatok dátumai és a szerkesztők nevei megőrzésre kerülnek.\nValamennyi transwiki importálási művelet az [[Special:Log/import|importálási naplóban]] kerül naplózásra.",
-       "import-interwiki-source": "Forrás wiki/lap:",
        "import-interwiki-history": "A lap összes előzményváltozatainak másolása",
        "import-interwiki-templates": "Az összes sablon hozzáadása",
        "import-interwiki-submit": "Importálás",
index 07f2fd1..0991e5e 100644 (file)
        "hidetoc": "celar",
        "collapsible-collapse": "Plicar",
        "collapsible-expand": "Displicar",
+       "confirmable-confirm": "Es {{GENDER:$1|tu}} secur?",
+       "confirmable-yes": "Si",
+       "confirmable-no": "No",
        "thisisdeleted": "Vider o restaurar $1?",
        "viewdeleted": "Vider $1?",
        "restorelink": "{{PLURAL:$1|un modification|$1 modificationes}} delite",
        "invalidtitle-knownnamespace": "Titulo invalide con spatio de nomines \"$2\" e texto \"$3\"",
        "invalidtitle-unknownnamespace": "Titulo invalide con spatio de nomines incognite $1 e texto \"$2\"",
        "exception-nologin": "Non identificate",
-       "exception-nologin-text": "[[Special:Userlogin|Aperi session]] pro poter acceder a iste pagina o action.",
+       "exception-nologin-text": "Aperi session pro poter acceder a iste pagina o action.",
        "exception-nologin-text-manual": "Es necessari $1 pro poter acceder a iste pagina o action.",
        "virus-badscanner": "Configuration incorrecte: programma antivirus non cognoscite: ''$1''",
        "virus-scanfailed": "scannamento fallite (codice $1)",
        "parser-template-recursion-depth-warning": "Limite de recursion del patrono excedite ($1)",
        "language-converter-depth-warning": "Limite de profunditate del conversor de lingua excedite ($1)",
        "node-count-exceeded-category": "Paginas in que le numero de nodos excede le limite",
-       "node-count-exceeded-category-desc": "Un categoria pro paginas ubi le numero de nodos ha essite excedite.",
+       "node-count-exceeded-category-desc": "Le pagina excede le numero maxime de nodos.",
        "node-count-exceeded-warning": "Le numero de nodos in iste pagina excede le limite",
        "expansion-depth-exceeded-category": "Paginas in que le profunditate de expansion excede le limite",
        "expansion-depth-exceeded-category-desc": "Isto es un categoria pro paginas in le quales le profunditate de expansion ha essite excedite.",
        "randomincategory": "Pagina aleatori in categoria",
        "randomincategory-invalidcategory": "\"$1\" non es un nomine de categoria valide.",
        "randomincategory-nopages": "Il non ha paginas in [[:Category:$1]].",
-       "randomincategory-selectcategory": "Prender un pagina qualcunque del categoria: $1 $2.",
-       "randomincategory-selectcategory-submit": "Va",
        "randomredirect": "Redirection aleatori",
        "randomredirect-nopages": "Il non ha redirectiones in le spatio de nomines \"$1\".",
        "statistics": "Statisticas",
        "import": "Importar paginas",
        "importinterwiki": "Importation transwiki",
        "import-interwiki-text": "Selige le wiki e le titulo del pagina a importar.\nLe datas del versiones e nomines del contributores essera preservate.\nTote le actiones de importation transwiki se registra in le [[Special:Log/import|registro de importationes]].",
-       "import-interwiki-source": "Wiki/pagina de origine:",
        "import-interwiki-history": "Copiar tote le versiones del historia de iste pagina",
        "import-interwiki-templates": "Includer tote le patronos",
        "import-interwiki-submit": "Importar",
index 3f68663..431a3aa 100644 (file)
        "userlogout": "Keluar log",
        "notloggedin": "Belum masuk log",
        "userlogin-noaccount": "Belum punya akun?",
-       "userlogin-joinproject": "Join {{SITENAME}}",
+       "userlogin-joinproject": "Gabung {{SITENAME}}",
        "nologin": "Belum mempunyai akun? $1.",
        "nologinlink": "Daftarkan akun baru",
        "createaccount": "Buat akun baru",
        "randomincategory": "Halaman acak dalam kategori",
        "randomincategory-invalidcategory": "\"$1\" bukanlah nama kategori yang berlaku.",
        "randomincategory-nopages": "Tidak ada halaman dalam [[:Category:$1]].",
-       "randomincategory-selectcategory": "Dapatkan halaman acak dari kategori: $1 $2.",
-       "randomincategory-selectcategory-submit": "Lanjut",
        "randomredirect": "Pengalihan sembarang",
        "randomredirect-nopages": "Tak terdapat pengalihan pada ruang nama \"$1\".",
        "statistics": "Statistik",
        "import": "Impor halaman",
        "importinterwiki": "Impor transwiki",
        "import-interwiki-text": "Pilih suatu wiki dan judul halaman yang akan di impor.\nTanggal revisi dan nama penyunting akan dipertahankan.\nSemua aktivitas impor transwiki akan dicatat di [[Special:Log/import|log impor]].",
-       "import-interwiki-source": "Wiki/halaman sumber:",
        "import-interwiki-history": "Salin semua versi terdahulu dari halaman ini",
        "import-interwiki-templates": "Sertakan semua templat",
        "import-interwiki-submit": "Impor",
index 3375101..448c2a9 100644 (file)
        "randomincategory": "Handhófsvalin síða í flokki",
        "randomincategory-invalidcategory": "„$1“ er ekki gilt flokkarheiti",
        "randomincategory-nopages": "Það eru engar síður í flokkinum [[:Category:$1|$1]].",
-       "randomincategory-selectcategory": "Fá handhófsvalda síðu úr flokkinum: $1 $2.",
-       "randomincategory-selectcategory-submit": "Fara",
        "randomredirect": "Handahófsvalin tilvísun",
        "randomredirect-nopages": "Það eru engar tilvísanir í nafnrýminu „$1“.",
        "statistics": "Tölfræði",
        "import": "Flytja inn síður",
        "importinterwiki": "Milli-Wiki innflutningur",
        "import-interwiki-text": "Veldu Wiki-kerfi og síðutitil til að flytja inn.\nBreytingaupplýsingar s.s. dagsetningar og höfundanöfn eru geymd.\nAllir innflutningar eru skráð í [[Special:Log/import|innflutningsskránna]].",
-       "import-interwiki-source": "Uppruni wiki síðunnar:",
        "import-interwiki-history": "Afrita allar breytingar þessarar síðu",
        "import-interwiki-templates": "Innifala öll snið með",
        "import-interwiki-submit": "Flytja inn",
index 91b5254..2bd15e6 100644 (file)
        "hidetoc": "nascondi",
        "collapsible-collapse": "Comprimi",
        "collapsible-expand": "Espandi",
+       "confirmable-confirm": "Sei {{GENDER:$1|sicuro|sicura}}?",
        "confirmable-yes": "Sì",
        "confirmable-no": "No",
        "thisisdeleted": "Vedi o ripristina $1?",
        "invalidtitle-knownnamespace": "Titolo non valido con namespace \"$2\" e testo \"$3\"",
        "invalidtitle-unknownnamespace": "Titolo non valido con namespace sconosciuto \"$1\" e testo \"$2\"",
        "exception-nologin": "Accesso non effettuato",
-       "exception-nologin-text": "Si prega di [[Special:Userlogin|eseguire l'accesso]] per poter accedere a questa pagina o azione.",
+       "exception-nologin-text": "Per poter accedere a questa pagina o azione è necessario eseguire l'accesso.",
        "exception-nologin-text-manual": "Si prega di $1 per poter accedere a questa pagina o azione.",
        "virus-badscanner": "Errore di configurazione: antivirus sconosciuto: ''$1''",
        "virus-scanfailed": "scansione fallita (codice $1)",
        "parser-template-recursion-depth-warning": "È stato raggiunto il limite di ricorsione nel template ($1)",
        "language-converter-depth-warning": "Limite di profondità del convertitore di lingua superato ($1)",
        "node-count-exceeded-category": "Pagine dove viene superato il numero di nodi",
-       "node-count-exceeded-category-desc": "Una categoria per pagine dove viene superato il numero di nodi.",
+       "node-count-exceeded-category-desc": "La pagina supera il numero massimo di nodi.",
        "node-count-exceeded-warning": "Questa pagina ha superato il numero di nodi",
        "expansion-depth-exceeded-category": "Pagine nelle quali è superata la profondità di espansione",
-       "expansion-depth-exceeded-category-desc": "Questa è una categoria per pagine dove viene superata la profondità di espansione.",
+       "expansion-depth-exceeded-category-desc": "La pagina supera la profondità massima di espansione.",
        "expansion-depth-exceeded-warning": "Questa pagina ha superato la profondità di espansione",
        "parser-unstrip-loop-warning": "Rilevato ciclo di Unstrip",
        "parser-unstrip-recursion-limit": "Superati i limiti di ricorsione di Unstrip ($1)",
        "preferences": "Preferenze",
        "mypreferences": "preferenze",
        "prefs-edits": "Modifiche effettuate:",
-       "prefsnologintext2": "Si prega di $1 per impostare le preferenze dell'utente.",
+       "prefsnologintext2": "Per modificare le tue preferenze è necessario eseguire l'accesso.",
        "prefs-skin": "Aspetto grafico (skin)",
        "skin-preview": "Anteprima",
        "datedefault": "Nessuna preferenza",
        "randomincategory": "Pagina casuale in una categoria",
        "randomincategory-invalidcategory": "\"$1\" non è un nome di categoria valido.",
        "randomincategory-nopages": "Non ci sono pagine in [[:Category:$1]].",
-       "randomincategory-selectcategory": "Ottieni una pagina casuale dalla categoria: $1 $2.",
-       "randomincategory-selectcategory-submit": "Vai",
+       "randomincategory-category": "Categoria:",
+       "randomincategory-legend": "Pagina casuale in una categoria",
        "randomredirect": "Un redirect a caso",
        "randomredirect-nopages": "Non ci sono redirect nel namespace \"$1\".",
        "statistics": "Statistiche",
        "trackingcategories-desc": "Criteri per l'inclusione nella categoria",
        "noindex-category-desc": "La pagina non è indicizzata dai robot perché contiene la parola magica <code><nowiki>__NOINDEX__</nowiki></code> e si trova in un namespace dove tale flag è consentito.",
        "index-category-desc": "La pagina contiene <code><nowiki>__INDEX__</nowiki></code> (e si trova in un namespace dove tale flag è consentito) e quindi è indicizzata dai robot, anche se normalmente non lo sarebbe.",
-       "post-expand-template-inclusion-category-desc": "Dopo aver espanso tutti i template, la dimensione della pagina sarà più grande di <code>$wgMaxArticleSize</code>, e dunque alcuni non si espanderanno.",
-       "post-expand-template-argument-category-desc": "Dopo aver espanso il parametro di un template (qualcosa tra parentesi graffe, come <code>{{{Foo}}})</code>, la pagina sarà più grande di <code>$wgMaxArticleSize</code>.",
+       "post-expand-template-inclusion-category-desc": "La dimensione della pagina sarà più grande di <code>$wgMaxArticleSize</code> dopo aver espanso tutti i template, e dunque alcuni non si espanderanno.",
+       "post-expand-template-argument-category-desc": "La pagina sarà più grande di <code>$wgMaxArticleSize</code> dopo aver espanso il parametro di un template (qualcosa tra tre parentesi graffe, come <code>{{{Foo}}}</code>).",
        "expensive-parserfunction-category-desc": "La pagina usa troppe funzioni parser (come <code>#ifexist</code>). Vedi [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
-       "broken-file-category-desc": "Categoria aggiunta se la pagina contiene un collegamento interrotto ad un file (un collegamento per incorporare un file quando questo non esiste).",
-       "hidden-category-category-desc": "Questa è una categoria che contiene <code><nowiki>__HIDDENCAT__</nowiki></code>, il quale impedisce che venga mostrata, in modo predefinito, nel riquadro dei collegamenti alle categorie delle pagine.",
+       "broken-file-category-desc": "La pagina contiene un collegamento interrotto ad un file (un collegamento per incorporare un file quando questo non esiste).",
+       "hidden-category-category-desc": "Questa categoria contiene <code><nowiki>__HIDDENCAT__</nowiki></code> nella sua pagina, il quale impedisce che venga mostrata, in modo predefinito, nel riquadro dei collegamenti alle categorie delle pagine.",
        "trackingcategories-nodesc": "Nessuna descrizione disponibile.",
        "trackingcategories-disabled": "La categoria è disabilitata",
        "mailnologin": "Nessun indirizzo cui inviare il messaggio",
        "mywatchlist": "osservati speciali",
        "watchlistfor2": "Dell'utente $1 $2",
        "nowatchlist": "La lista degli osservati speciali è vuota.",
-       "watchlistanontext": "Per visualizzare e modificare l'elenco degli osservati speciali è necessario $1.",
+       "watchlistanontext": "Per visualizzare e modificare l'elenco degli osservati speciali è necessario eseguire l'accesso.",
        "watchnologin": "Accesso non effettuato",
        "addwatch": "Aggiungi agli osservati speciali",
        "addedwatchtext": "La pagina \"[[:$1]]\" è stata aggiunta alla propria [[Special:Watchlist|lista degli osservati speciali]].\nD'ora in poi, le modifiche apportate alla pagina e alla sua discussione verranno elencate in quella sede.",
        "exbeforeblank": "Il contenuto prima dello svuotamento era: '$1'",
        "delete-confirm": "Cancella \"$1\"",
        "delete-legend": "Cancella",
-       "historywarning": "'''Attenzione:''' La pagina che stai per cancellare ha una cronologia con approssimativamente $1 {{PLURAL:$1|versione|versioni}}:",
+       "historywarning": "'''Attenzione:''' La pagina che stai per cancellare ha una cronologia con $1 {{PLURAL:$1|versione|versioni}}:",
        "confirmdeletetext": "Stai per cancellare una pagina con tutta la sua cronologia. Per cortesia, conferma che è tua intenzione procedere a tale cancellazione, che hai piena consapevolezza delle conseguenze della tua azione e che essa è conforme alle linee guida stabilite in [[{{MediaWiki:Policy-url}}]].",
        "actioncomplete": "Azione completata",
        "actionfailed": "Azione fallita",
        "delete-edit-reasonlist": "Modifica i motivi di cancellazione",
        "delete-toobig": "La cronologia di questa pagina è molto lunga (oltre $1 {{PLURAL:$1|versione|versioni}}). La sua cancellazione è stata limitata per evitare di creare accidentalmente dei problemi di funzionamento al database di {{SITENAME}}.",
        "delete-warning-toobig": "La cronologia di questa pagina è molto lunga (oltre $1 {{PLURAL:$1|versione|versioni}}). La sua cancellazione può creare dei problemi di funzionamento al database di {{SITENAME}}; procedere con cautela.",
+       "deleteprotected": "Non puoi cancellare questa pagina perché è stata protetta.",
        "deleting-backlinks-warning": "'''Attenzione:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|altre pagine]] contengono collegamenti o inclusioni alla pagina che stai per cancellare.",
        "rollback": "Annulla le modifiche",
        "rollback_short": "Rollback",
        "autoblockid": "Autoblocco #$1",
        "block": "Blocca utente",
        "unblock": "Sblocca utente",
-       "blockip": "Blocco utente",
+       "blockip": "Blocca {{GENDER:$1|utente}}",
        "blockip-legend": "Blocca l'utente",
        "blockiptext": "Usare il modulo sottostante per bloccare l'accesso in scrittura a uno specifico indirizzo IP o a un utente registrato.\nIl blocco dev'essere operato per prevenire atti di vandalismo e in stretta osservanza delle [[{{MediaWiki:Policy-url}}|regole di {{SITENAME}}]].\nIndicare il motivo specifico per il quale si procede al blocco (per esempio, citando i titoli di eventuali pagine oggetto di vandalismo).",
        "ipaddressorusername": "Indirizzo IP o nome utente:",
        "ipb-unblock-addr": "Sblocca $1",
        "ipb-unblock": "Sblocca un utente o un indirizzo IP",
        "ipb-blocklist": "Elenca i blocchi attivi",
-       "ipb-blocklist-contribs": "Contributi di $1",
+       "ipb-blocklist-contribs": "Contributi di {{GENDER:$1|$1}}",
        "unblockip": "Sblocca l'utente",
        "unblockiptext": "Usare il modulo sottostante per restituire l'accesso in scrittura ad un utente o indirizzo IP bloccato.",
        "ipusubmit": "Rimuovi questo blocco",
        "import": "Importa pagine",
        "importinterwiki": "Importazione transwiki",
        "import-interwiki-text": "Selezionare un progetto wiki e il titolo della pagina da importare.\nLe date di pubblicazione e i nomi degli autori delle varie versioni saranno conservati.\nTutte le operazioni di importazione trans-wiki sono registrate nel [[Special:Log/import|log di importazione]].",
-       "import-interwiki-source": "Sorgente wiki/pagina:",
        "import-interwiki-history": "Copia l'intera cronologia di questa pagina",
        "import-interwiki-templates": "Includi tutti i template",
        "import-interwiki-submit": "Importa",
        "action-pagelang": "modificare la lingua della pagina",
        "log-name-pagelang": "Modifiche lingua",
        "log-description-pagelang": "Questo è un registro delle modifiche alla lingua delle pagine.",
-       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ha modificato}} la lingua della pagina $3 da $4 a $5."
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ha modificato}} la lingua della pagina $3 da $4 a $5.",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (abilitata)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabilitata''')"
 }
index f3e00c8..b576b2a 100644 (file)
        "hidetoc": "非表示",
        "collapsible-collapse": "折り畳む",
        "collapsible-expand": "展開する",
-       "confirmable-confirm": "本当にいいですか?",
+       "confirmable-confirm": "{{GENDER:$1|}}本当によろしいですか?",
        "confirmable-yes": "はい",
        "confirmable-no": "いいえ",
        "thisisdeleted": "$1を閲覧または復元しますか?",
        "randomincategory": "カテゴリ内でおまかせ表示",
        "randomincategory-invalidcategory": "「$1」は有効なカテゴリ名ではありません。",
        "randomincategory-nopages": "カテゴリ [[:Category:$1|$1]] にはページがありません。",
-       "randomincategory-selectcategory": "以下のカテゴリでおまかせ表示: $1 $2",
-       "randomincategory-selectcategory-submit": "表示",
+       "randomincategory-category": "カテゴリ:",
+       "randomincategory-legend": "カテゴリ内でおまかせ表示",
        "randomredirect": "おまかせリダイレクト",
        "randomredirect-nopages": "「$1」名前空間に転送ページはありません。",
        "statistics": "統計",
        "exbeforeblank": "白紙化前の内容:「$1」",
        "delete-confirm": "「$1」の削除",
        "delete-legend": "削除",
-       "historywarning": "<strong>警告:</strong> 削除しようとしているページには、$1版の履歴があります:",
+       "historywarning": "<strong>警告:</strong> 削除しようとしているページには、$1版の履歴があります:",
        "confirmdeletetext": "ページをすべての履歴とともに削除しようとしています。\n本当にこの操作を行いたいか、操作の結果を理解しているか、およびこの操作が[[{{MediaWiki:Policy-url}}|方針]]に従っているかどうか、確認してください。",
        "actioncomplete": "操作を完了しました",
        "actionfailed": "操作に失敗しました",
        "delete-edit-reasonlist": "削除理由を編集",
        "delete-toobig": "このページには、$1版を超える編集履歴があります。\nこのようなページの削除は、{{SITENAME}}の偶発的な問題を避けるため、制限されています。",
        "delete-warning-toobig": "このページには、 $1版を超える編集履歴があります。\n削除すると、{{SITENAME}}のデータベース処理に大きな負荷がかかります。\n十分に注意してください。",
-       "delete-cantedit": "ã\81\82ã\81ªã\81\9fã\81«ã\81¯ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\82\92ç·¨é\9b\86ã\81\99ã\82\8b権é\99\90ã\81\8cã\81ªã\81\84ã\81\9fã\82\81ã\80\81å\89\8aé\99¤ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82",
+       "deleteprotected": "ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81¯ä¿\9dè­·ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\81\9fã\82\81å\89\8aé\99¤ã\81§ã\81\8dã\81¾ã\81\9bã\82\93ã\80\82",
        "deleting-backlinks-warning": "'''警告:''' 削除しようとしているページは、[[Special:WhatLinksHere/{{FULLPAGENAME}}|他のページ]]からリンクまたは参照読み込みされています。",
        "rollback": "編集を巻き戻し",
        "rollback_short": "巻き戻し",
        "import": "ページデータの取り込み",
        "importinterwiki": "ウィキ間移動の取り込み",
        "import-interwiki-text": "取り込むウィキとページ名を選択してください。\n版の日付と編集者名は保持されます。\nウィキ間移動のすべての取り込み操作は[[Special:Log/import|取り込み記録]]に記録されます。",
-       "import-interwiki-source": "取り込み元のウィキ/ページ:",
+       "import-interwiki-sourcewiki": "取り込み元のウィキ:",
+       "import-interwiki-sourcepage": "取り込み元のページ:",
        "import-interwiki-history": "このページのすべての版を複製する",
        "import-interwiki-templates": "すべてのテンプレートを含める",
        "import-interwiki-submit": "取り込み",
index f740776..d5e1877 100644 (file)
        "hidetoc": "დამალვა",
        "collapsible-collapse": "ჩაკეცვა",
        "collapsible-expand": "გაშლა",
+       "confirmable-confirm": "{{GENDER:$1|დარწმუნებული}} ხართ?",
+       "confirmable-yes": "დიახ",
+       "confirmable-no": "არა",
        "thisisdeleted": "$1-ის ჩვენება თუ აღდგენა?",
        "viewdeleted": "იხილე $1?",
        "restorelink": "{{PLURAL:$1|ერთი წაშლილი რედაქტირება|$1 წაშლილი რედაქტირება}}",
        "invalidtitle-knownnamespace": "დაუშვებელი სათაური სახელთა სივრცე \"$2\" და ტექსტი \"$3\"-თან",
        "invalidtitle-unknownnamespace": "დაუშვებელი სათაური უცნობი სახელთა სივრცის ნომერი $1 და ტექსტი \"$2\"-ით",
        "exception-nologin": "შესვლა არ განხორციელდა",
-       "exception-nologin-text": "á\83\90á\83\9b á\83\92á\83\95á\83\94á\83 á\83\93á\83\98á\83¡ á\83¡á\83\90á\83\9cá\83\90á\83®á\83\90á\83\95á\83\90á\83\93 á\83\90á\83\9c á\83\9bá\83\9dá\83\97á\83®á\83\9dá\83\95á\83\9cá\83\98á\83\9aá\83\98 á\83\9bá\83\9dá\83¥á\83\9bá\83\94á\83\93á\83\94á\83\91á\83\98á\83¡ á\83¨á\83\94á\83¡á\83\90á\83¡á\83 á\83£á\83\9aá\83\94á\83\91á\83\9aá\83\90á\83\93 á\83¡á\83\90á\83­á\83\98á\83 á\83\9dá\83\90 [[Special:Userlogin|á\83¡á\83\98á\83¡á\83¢á\83\94á\83\9bá\83\90á\83¨á\83\98 á\83¨á\83\94á\83¡á\83\95á\83\9aá\83\90]].",
+       "exception-nologin-text": "á\83\90á\83\9b á\83\92á\83\95á\83\94á\83 á\83\93á\83\96á\83\94 á\83¬á\83\95á\83\93á\83\9dá\83\9bá\83\98á\83¡á\83\90á\83\97á\83\95á\83\98á\83¡ á\83\90á\83\9c á\83\9bá\83\9dá\83¥á\83\9bá\83\94á\83\93á\83\94á\83\91á\83\98á\83¡á\83\97á\83\95á\83\98á\83¡ á\83¡á\83\90á\83­á\83\98á\83 á\83\9dá\83\90 á\83¡á\83\98á\83¡á\83¢á\83\94á\83\9bá\83\90á\83¨á\83\98 á\83¨á\83\94á\83¡á\83\95á\83\9aá\83\90.",
        "virus-badscanner": "შეცდომა. ვირუსთა უცნობი სკანერი: ''$1''",
        "virus-scanfailed": "სკანირების შეცდომა  (კოდი $1)",
        "virus-unknownscanner": "უცნობი ანტივირუსი:",
        "currentrev": "მიმდინარე შესწორება",
        "currentrev-asof": "მიმდინარე ცვლილება $1 მდგომარეობით",
        "revisionasof": "$1-ის ვერსია",
-       "revision-info": "$1-ის ვერსია, შეტანილი $2-ის მიერ",
+       "revision-info": "$1-ის ვერსია, {{GENDER:$6|$2}}$7",
        "previousrevision": "←წინა ვერსია",
        "nextrevision": "შემდეგი ვერსია→",
        "currentrevisionlink": "მიმდინარე ვერსია",
        "right-deletedtext": "წაშლილი ტექსტის და განსხვავებების ხილვა.",
        "right-browsearchive": "წაშლილი გვერდების ძიება",
        "right-undelete": "გვერდის აღდგენა",
-       "right-suppressrevision": "á\83\90á\83\93á\83\9bá\83\98á\83\9cá\83\97á\83\90á\83\92á\83\90á\83\9c á\83\93á\83\90á\83\9bá\83\90á\83\9aá\83£á\83\9aá\83\98 á\83\92á\83\95á\83\94á\83 á\83\93á\83\94á\83\91á\83\98á\83¡ á\83®á\83\98á\83\9aá\83\95á\83\90 á\83\93á\83\90 á\83\90á\83¦á\83\93á\83\92á\83\94á\83\9cá\83\90",
+       "right-suppressrevision": "á\83\92á\83\95á\83\94á\83 á\83\93á\83\94á\83\91á\83\98á\83¡ á\83\93á\83\90á\83\9bá\83\90á\83\9aá\83£á\83\9aá\83\98 á\83\95á\83\94á\83 á\83¡á\83\98á\83\94á\83\91á\83\98á\83¡ á\83®á\83\98á\83\9aá\83\95á\83\90, á\83\93á\83\90á\83\9bá\83\90á\83\9aá\83\95á\83\90 á\83\93á\83\90 á\83\90á\83¦á\83\93á\83\92á\83\94á\83\9cá\83\90 á\83§á\83\95á\83\94á\83\9aá\83\90 á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\9aá\83\98á\83¡á\83\92á\83\90á\83\9c",
        "right-suppressionlog": "კერძო ჟურნალების ნახვა",
        "right-block": "სხვა მომხმარებლების მიერ რედაქტირების აკრძალვა",
        "right-blockemail": "ელ ფოსტის გაგზავნის აკრძალვა",
        "license-header": "ლიცენზია",
        "nolicense": "არაფერი არის მონიშნული",
        "license-nopreview": "(წინასწარ გადახედვა არ არის ხელმისაწვდომი)",
-       "upload_source_url": " (სწორი, საზოგადოდ ხელმისაწვდომი URL)",
-       "upload_source_file": " (ფაილი შენს კომპიუტერზე)",
+       "upload_source_url": "(თქვენ აირჩიეთ სწორი, საზოგადოდ ხელმისაწვდომი URL)",
+       "upload_source_file": "(თქვენ აირჩიეთ ფაილი თქვენი კომპიუტერიდან)",
+       "listfiles-delete": "წაშლა",
        "listfiles-summary": "ეს სპეციალური გვერდი აჩვენებს ყველა ატვირთულ ფაილს.",
        "listfiles_search_for": "ძიება სურათის სახელის მიხედვით:",
        "imgfile": "ფაილი",
        "randompage-nopages": "{{PLURAL:$2|სახელთა შემდეგი სივრცე|სახელთა შემდეგ სივრცეში}} \"$1\" არ არის გვერდები.",
        "randomincategory": "კატეგორიის შემთხვევითი გვერდი",
        "randomincategory-invalidcategory": "კატეგორია „$1“ არ არსებობს.",
-       "randomincategory-selectcategory-submit": "მიდი",
        "randomredirect": "ნებისმიერი გადამისამართება",
        "randomredirect-nopages": "სახელთა სივრცეში „$1“ არ არის გადამისამართებები.",
        "statistics": "სტატისტიკა",
        "protectedpages": "დაცული გვერდები",
        "protectedpages-indef": "მხოლოდ უვადო დაცვები",
        "protectedpages-cascade": "მხოლოდ კასკადური დაცვა",
+       "protectedpages-noredirect": "გადამისამართებების დამალვა",
        "protectedpagesempty": "ამ დროისთვის არ არსებობს დაცული გვერდები მოთხოვნილი პარამეტრებით.",
+       "protectedpages-timestamp": "თარიღი/დრო",
        "protectedpages-page": "გვერდი",
        "protectedpages-expiry": "ვადა გასდის",
+       "protectedpages-performer": "მომხმარებლის დაცვა",
+       "protectedpages-params": "დაცვის პარამეტრები",
        "protectedpages-reason": "მიზეზი",
        "protectedpages-unknown-timestamp": "უცნობი",
        "protectedpages-unknown-performer": "უცნობი მომხმარებელი",
        "autoblockid": "ავტომატური ბლოკირება #$1",
        "block": "მომხმარებლის დაბლოკვა",
        "unblock": "მომხმარებელზე ბლოკის მოხსნა",
-       "blockip": "á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\9aá\83\98á\83¡ á\83\90á\83\9c IP á\83\9bá\83\98á\83¡á\83\90á\83\9bá\83\90á\83 á\83\97á\83\98á\83¡ á\83\91á\83\9aá\83\9dá\83\99á\83\98á\83 á\83\94á\83\91á\83\90",
+       "blockip": "á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\94á\83\9a {{GENDER:$1|á\83\93á\83\90á\83\91á\83\9aá\83\9dá\83\99á\83\95á\83\90}}",
        "blockip-legend": "მომხმარებლის დაბლოკვა",
        "blockiptext": "გამოიყენეთ ქვემოთ მოყვანილი ფორმა სპეციფიური IP მისამართის\nან მომხმარებლისთვის რედაქტირების ბლოკირებისთვის.\nამის გაკეთება შეიძლება მხოლოდ ვანდალიზმის ასარიდებლად,\nდა [[{{MediaWiki:Policy-url}}|პოლიტიკასთან]] თანხმობაში.\nჩაწერეთ სპეციფიური მიზეზი ქვემოთ (მაგ. მიუთითეთ გვერდები,\nრომლებზეც ვანდალიზმი განხორციელდა).",
        "ipaddressorusername": "IP მისამართი ან მომხმარებლის სახელი",
        "ipb-unblock-addr": "ბლოკის მოხსნა $1",
        "ipb-unblock": "მომხმარებლის სახელზე ან IP მისამართზე ბლოკის მოხსნა",
        "ipb-blocklist": "იხილე არსებული ბლოკირებები",
-       "ipb-blocklist-contribs": "$1 მომხმარებლის წვლილი",
+       "ipb-blocklist-contribs": "მომხმარებელ {{GENDER:$1|$1}} წვლილი",
        "unblockip": "მომხმარებელზე ბლოკის მოხსნა",
        "unblockiptext": "გამოიყენეთ ქვემოთ მოცემული ფორმულარი, რათა  დაბლოკილი IP მისამართი ან მომხმარებლის სახელი აღადგინოთ.",
        "ipusubmit": "ამ ბლოკის მოხსნა",
        "import": "გვერდების იმპორტი",
        "importinterwiki": "ტრანსვიკი იმპორტი",
        "import-interwiki-text": "წარმოადგინეთ ვიკი და იმპორტირებადი გვერდის სახელი.\nცვლილებათა რიცხვები და ავტორთა სახელები შენნარჩუნდება.\nტრანსვიკი იმპორტის ყველა ოპერაცია რეგისტრირდება [[Special:Log/import|სპეციალურ ჟურნალში]].",
-       "import-interwiki-source": "ვიკი წყარო/გვერდი:",
        "import-interwiki-history": "ამ გვერდის ცვლილებათა ისტორიის კოპირება.",
        "import-interwiki-templates": "ყველა თარგის ჩართვა",
        "import-interwiki-submit": "იმპორტირება",
        "version-hook-name": "ჰუკის სახელი",
        "version-hook-subscribedby": "ჩაწერილია",
        "version-version": "(ვერსია $1)",
+       "version-no-ext-name": "[სახელის გარეშე]",
        "version-svn-revision": "(r$2)",
        "version-license": "მედიავიკის ლიცენზია",
        "version-ext-license": "ლიცენზია",
        "version-ext-colheader-name": "გაფართოებები",
+       "version-skin-colheader-name": "იერსახე",
        "version-ext-colheader-version": "ვერსია",
        "version-ext-colheader-license": "ლიცენზია",
        "version-ext-colheader-description": "აღწერა",
        "expand_templates_ok": "შესრულება",
        "expand_templates_remove_comments": "კომენტარების წაშლა",
        "expand_templates_remove_nowiki": "ტეგების დათრგუნვა <nowiki> შედეგში",
-       "expand_templates_preview": "წინა"
+       "expand_templates_preview": "წინა",
+       "pagelanguage": "გვერდის ენის არჩევა",
+       "pagelang-name": "გვერდი",
+       "pagelang-language": "ენა",
+       "pagelang-use-default": "საწყისი ენის გამოყენება",
+       "pagelang-select-lang": "აირჩიეთ ენა",
+       "right-pagelang": "გვერდის ენის შეცვლა",
+       "action-pagelang": "გვერდის ენის შეცვლა",
+       "log-name-pagelang": "ენის ცვლილებების ჟურნალი",
+       "log-description-pagelang": "ეს არის გვერდის ენის ცვლილებების ჟურნალი",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ჩართულია)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''გამორთულია''')"
 }
index 3bc0cc0..34df836 100644 (file)
        "preview": "Қарап шығу",
        "showpreview": "Алдын-ала қарау",
        "showdiff": "Өзгерістерді көрсет",
+       "blankarticle": "<strong>Ескерту:</strong> Сіз бастамақшы болған бет бос.\nЕгер сіз «{{int:savearticle}}» дегенші қайта шертсеңіз бет қандайда бір мағлұматсыз басталады.",
        "anoneditwarning": "<strong> Ескерту:</strong>  Сіз жүйеге кірмегенсіз.\nIP мекенжайыңыз бұл беттің өңделу тарихында жазылып алынады.",
        "anonpreviewwarning": "<em>Сіз жүйеге кірмегенсіз. IP мекенжайыңыз бұл беттің өңделу тарихында жазылып алынады.</em>",
        "missingsummary": "<strong>Ескерту:</strong> Өңдеменің қысқаша түйіндемесін енгізбепсіз.\n«{{int:savearticle}}» батырмасын қайта бассаңыз өңденмеңіз түйіндемесіз сақталады.",
        "undo-failure": "Бұл өңдеме жоққа шығарылмайды, себебі арада қақтығысты өңдемелер бар.",
        "undo-norev": "Бұл өңдеме жоққа шығарылмайды, себебі бұл бет жоқ немесе жойылған.",
        "undo-nochange": "Өңдеме әлдеқашан жоққа шығарылғаны анықталды.",
-       "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|т]]) істеген нөмір $1 түзетуін жоққа шығарды",
+       "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|т]]) істеген нөмір $1 нұсқасын жоққа шығарды",
        "undo-summary-username-hidden": "$1 нұсқасын жасырылған қатысушы жоққа шығарды",
        "cantcreateaccounttitle": "Тіркелгі жасалмады",
        "cantcreateaccount-text": "Бұл IP мекенжайдан (<strong>$1</strong>) жаңа тіркелгі жасауын [[User:$3|$3]] бұғаттаған.\n\n$3 есімді қатысушының келтіріген себебі: <em>$2</em>",
        "pagemerge-logentry": "[[$1]] деген [[$2]] дегенге біріктірілді ($3 дейінгі түзетулері)",
        "revertmerge": "Біріктіруді болдырмау",
        "mergelogpagetext": "Төменде бір беттің тарихы өзге бетке біріктіру ең соңғы тізімі келтіріледі.",
-       "history-title": "«$1» дегеннің өңдеу тарихы",
+       "history-title": "«$1» дегеннің өңделу тарихы",
        "difference-title": "$1 — нұсқалар арасындағы айырмашылық",
        "difference-title-multipage": "\"$1\" және \"$2\" беттерінің арасындағы айырмашылық",
        "difference-multipage": "(Беттер арасындағы айырмашылық)",
        "randomincategory": "Санаттағы кездейсоқ бет",
        "randomincategory-invalidcategory": "\"$1\" жарамды санат аты емес.",
        "randomincategory-nopages": "Бұлар [[:Category:$1]] беттері мес.",
-       "randomincategory-selectcategory-submit": "Өту",
        "randomredirect": "Кездейсоқ айдағыш",
        "randomredirect-nopages": "Бұл есім аясында еш айдағыш жоқ \"$1\".",
        "statistics": "Санақ",
        "import": "Беттерді сырттан алу",
        "importinterwiki": "Уики-апару үшін сырттан алу",
        "import-interwiki-text": "Сырттан алынатын уикиді және беттің тақырып атын бөлектеңіз.\nТүзету күн-айы және өңдеуші есімдері сақталады.\nУики-апару үшін сырттан алу барлық әрекеттер [[{{#special:Log}}/import|сырттан алу журналына]] жазылып алынады.",
-       "import-interwiki-source": "Қайнар уики/бет:",
        "import-interwiki-history": "Бұл беттің барлық тарихи нұсқаларын көшіру",
        "import-interwiki-templates": "Кірістірілген барлық үлгілер",
        "import-interwiki-submit": "Сырттан алу",
        "pageinfo-header-edits": "Өңдеу тарихы",
        "pageinfo-header-restrictions": "Бет қорғалуы",
        "pageinfo-header-properties": "Бет сипаттары",
-       "pageinfo-display-title": "Бейнебет атауы",
+       "pageinfo-display-title": "Көрініс атауы",
+       "pageinfo-default-sort": "Әдепкі іріктеу кілті",
        "pageinfo-length": "Бет ұзындығы (байтпен)",
        "pageinfo-article-id": "Бет ID-і",
        "pageinfo-language": "Бет мәлімет тілі",
        "pageinfo-content-model": "Бет мағлұмат қалпы",
-       "pageinfo-robot-policy": "Индекстеуді робот жүргізеді",
-       "pageinfo-robot-index": "Рұқсат берілген",
-       "pageinfo-robot-noindex": "Рұқсат етілмеген",
+       "pageinfo-robot-policy": "Индекстеуді робот жүргізуге",
+       "pageinfo-robot-index": "рұқсат берілген",
+       "pageinfo-robot-noindex": "рұқсат етілмеген",
        "pageinfo-views": "Қараушылар саны",
        "pageinfo-watchers": "Бетті қараушылар саны",
        "pageinfo-few-watchers": "$1 азырақ {{PLURAL:$1|қараушы|қараушы}}",
-       "pageinfo-redirects-name": "Ð\91ұл Ð±ÐµÑ\82ке Ð°Ð¹Ð´Ð°Ñ\82Ñ\8bлғандар саны",
+       "pageinfo-redirects-name": "Ð\91ұл Ð±ÐµÑ\82ке Ð±Ð°Ò\93Ñ\8bÑ\82Ñ\82алғандар саны",
        "pageinfo-subpages-name": "Бұл беттің төменгі беттер саны",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|айдатқыш|айдатқыш}}; $3 {{PLURAL:$3|айдатқыш емес|айдатқыш емес}})",
        "pageinfo-firstuser": "Бетті бастаушы",
index 675808c..b24c1bb 100644 (file)
        "linkstoimage": "ಈ ಕೆಳಗಿನ {{PLURAL:$1|ಪುಟವು|$1 ಪುಟಗಳು}} ಈ ಚಿತ್ರಕ್ಕೆ ಸಂಪರ್ಕ {{PLURAL:$1|ಹೊಂದಿದೆ|ಹೊಂದಿವೆ}}:",
        "nolinkstoimage": "ಈ ಫೈಲಿಗೆ ಯಾವ ಪುಟವೂ ಸಂಪರ್ಕ ಹೊಂದಿಲ್ಲ.",
        "sharedupload": "ಈ ಫೈಲು $1 ಇಂದ. ಇದು ಇತರ ಯೋಜನೆಗಳಲ್ಲಿ ಉಪಯೋಗದಲ್ಲಿರಬಹುದು.",
-       "sharedupload-desc-here": "ಈಧು ಬನ್ದಿರುವುಧು $1 ಮಥು ಹಲವು ಯೋಜನೆ  ಯಲ್ಲಿ ಉಪಯೊಗ ವಗುಥದೆ. \nಕೊಟುರುವ   ವಿವರನೆ [$2 ಕತಥೆ ವಿವರನೆ ಪುಟಾ] ಕೆಲ್ಲಕೆ ನೊಡೀ.",
+       "sharedupload-desc-here": "ಈ ಕಡತವು $1 ಇಂದ ಬಂದಿದ್ದು, ಬೇರೆ ಯೋಜನೆಗಳಲ್ಲೂ ಉಪಯೋಗಿಸಲ್ಪಡಬಹುದು. \n[[$2 ಕಡತ ವಿವರಣಾ ಪುಟ]]ದಲ್ಲಿರುವ ವಿವರಣೆಯನ್ನು ಕೆಳಗೆ ಕೊಡಲಾಗಿದೆ.",
        "filepage-nofile": "ಈ ಹೆಸರಿನ ಫೈಲ್ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ",
        "filepage-nofile-link": "ಈ ಹೆಸರಿನ ಫೈಲ್ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ ಆದರೆ ನೀವು ಇದನ್ನು [$1 ನಕಲೆರಿಸಬಹುದು ]",
        "uploadnewversion-linktext": "ಈ ಫೈಲಿನ ಹೊಸ ಆವೃತ್ತಿಯನ್ನು ಅಪ್ಲೋಡ್ ಮಾಡಿ",
        "unusedtemplateswlh": "ಇತರ ಕೊಂಡಿಗಳು",
        "randompage": "ಯಾದೃಚ್ಛಿಕ ಪುಟ",
        "randompage-nopages": "ಈ ಪುಟಪ್ರಬೇಧದಲ್ಲಿ ಯಾವ ಪುಟವೂ ಇಲ್ಲ.",
-       "randomincategory-selectcategory-submit": "ಹೋಗು",
        "randomredirect": "ಯದೃಚ್ಛಿಕ ಪುನರ್ನಿರ್ದೇಶಿತ ಪುಟ",
        "randomredirect-nopages": "ಈ ಪುಟಪ್ರಬೇಧದಲ್ಲಿ ಯಾವ ಪುನರ್ನಿರ್ದೇಶನಗಳೂ ಇಲ್ಲ.",
        "statistics": "ಅಂಕಿ ಅಂಶಗಳು",
index bc0d91a..8ada4a0 100644 (file)
@@ -43,7 +43,7 @@
        },
        "tog-underline": "링크에 밑줄:",
        "tog-hideminor": "최근 바뀜에서 사소한 편집을 숨기기",
-       "tog-hidepatrolled": "최근 바뀜에서 검토한 편집을 숨기기",
+       "tog-hidepatrolled": "최근 바뀜에서 점검한 편집을 숨기기",
        "tog-newpageshidepatrolled": "새 문서 목록에서 검토한 문서를 숨기기",
        "tog-extendwatchlist": "주시문서 목록에서 가장 최근의 편집만이 아닌 모든 편집을 보기",
        "tog-usenewrc": "최근 바뀜과 주시문서 목록의 문서별 그룹 바뀜",
@@ -72,7 +72,7 @@
        "tog-watchlisthideminor": "주시문서 목록에서 사소한 편집을 숨기기",
        "tog-watchlisthideliu": "주시문서 목록에서 로그인한 사용자의 편집을 숨기기",
        "tog-watchlisthideanons": "주시문서 목록에서 익명 사용자의 편집을 숨기기",
-       "tog-watchlisthidepatrolled": "주시문서 목록에서 검토한 편집을 숨기기",
+       "tog-watchlisthidepatrolled": "주시문서 목록에서 점검한 편집을 숨기기",
        "tog-ccmeonemails": "이메일을 보낼 때 내 이메일로 복사본을 보내기",
        "tog-diffonly": "편집 차이를 비교할 때 문서 내용을 보지 않기",
        "tog-showhiddencats": "숨은 분류 보이기",
        "hidetoc": "숨기기",
        "collapsible-collapse": "접기",
        "collapsible-expand": "펼치기",
+       "confirmable-yes": "예",
+       "confirmable-no": "아니오",
        "thisisdeleted": "$1 문서를 보거나 되살리겠습니까?",
        "viewdeleted": "$1 문서를 보겠습니까?",
        "restorelink": "{{PLURAL:$1|삭제된 편집}} $1개",
        "node-count-exceeded-category-desc": "노드 횟수를 초과하는 문서의 분류입니다.",
        "node-count-exceeded-warning": "문서가 노드 수를 초과하였습니다.",
        "expansion-depth-exceeded-category": "문서가 확장 깊이를 초과하였습니다.",
-       "expansion-depth-exceeded-category-desc": "확장 깊이를 초과하는 문서의 분류입니다.",
+       "expansion-depth-exceeded-category-desc": "최대 확장 깊이를 초과하는 문서입니다.",
        "expansion-depth-exceeded-warning": "문서가 확장 깊이를 초과하였습니다",
        "parser-unstrip-loop-warning": "Unstrip의 반복을 감지했습니다",
        "parser-unstrip-recursion-limit": "Unstrip의 재귀 한도를 초과했습니다 ($1)",
        "preferences": "사용자 환경 설정",
        "mypreferences": "환경 설정",
        "prefs-edits": "편집 수:",
-       "prefsnologintext2": "사용자 환경 설정을 설정하려면 $1하십시오.",
+       "prefsnologintext2": "사용자 환경 설정을 변경하려면 로그인하십시오.",
        "prefs-skin": "스킨",
        "skin-preview": "미리 보기",
        "datedefault": "설정하지 않음",
        "right-noratelimit": "속도 제한에 영향을 받지 않음",
        "right-import": "다른 위키에서 문서 가져오기",
        "right-importupload": "파일 올리기를 통해 문서 가져오기",
-       "right-patrol": "다른 사용자의 편집을 검토",
-       "right-autopatrol": "자신의 편집을 자동으로 검토",
-       "right-patrolmarks": "최근 바뀜에서 검토 표시를 보기",
+       "right-patrol": "다른 사용자의 편집을 점검된 것으로 표시",
+       "right-autopatrol": "자신의 편집을 자동으로 점검된 판으로 표시",
+       "right-patrolmarks": "최근 바뀜에서 점검 표시를 보기",
        "right-unwatchedpages": "주시되지 않은 문서 목록 보기",
        "right-mergehistory": "문서의 역사를 합침",
        "right-userrights": "사용자의 모든 권한 조정",
        "action-rollback": "특정 문서를 마지막으로 편집한 사용자의 모든 편집을 간편하게 되돌리기",
        "action-import": "다른 위키에서 문서 가져오기",
        "action-importupload": "파일 올리기를 통해 문서를 가져오기",
-       "action-patrol": "다른 사용자의 편집을 검토된 것으로 표시하기",
-       "action-autopatrol": "자신의 편집을 검토된 것으로 표시할",
+       "action-patrol": "다른 사용자의 편집을 점검된 것으로 표시할",
+       "action-autopatrol": "자신의 편집을 점검된 것으로 표시할",
        "action-unwatchedpages": "주시되지 않은 문서 목록 보기",
        "action-mergehistory": "이 문서의 역사 합치기",
        "action-userrights": "사용자의 모든 권한 조정",
        "rcshowhideanons": "익명 사용자를 $1",
        "rcshowhideanons-show": "보이기",
        "rcshowhideanons-hide": "숨기기",
-       "rcshowhidepatr": "ì\88\9cì°°ë\90\9c í\8e¸ì§\91ì\9d\84 $1",
+       "rcshowhidepatr": "ì \90ê²\80í\95\9c í\8e¸ì§\91ì\9d\84 $1",
        "rcshowhidepatr-show": "보이기",
        "rcshowhidepatr-hide": "숨기기",
        "rcshowhidemine": "내 편집을 $1",
        "randomincategory": "분류 안의 임의 문서",
        "randomincategory-invalidcategory": "\"$1\"(은)는 올바른 분류 이름이 아닙니다.",
        "randomincategory-nopages": "[[:Category:$1]]에 문서가 없습니다.",
-       "randomincategory-selectcategory": "분류에서 임의 문서 얻기: $1 $2",
-       "randomincategory-selectcategory-submit": "보기",
+       "randomincategory-category": "분류:",
        "randomredirect": "임의 넘겨주기 문서로",
        "randomredirect-nopages": "\"$1\" 이름공간에서 해당하는 넘겨주기 문서가 없습니다.",
        "statistics": "통계",
        "trackingcategories-desc": "분류 포함 기준",
        "noindex-category-desc": "문서는 그것과 그 플래그가 허용된 곳에 있는 이름공간에서 <code><nowiki>__NOINDEX__</nowiki></code> 특수 명령이 있기 때문에 로봇이 색인하지 않습니다.",
        "index-category-desc": "문서는 그것(과 플래그가 허용된 곳에 있는 이름공간에 있는 것)에 <code><nowiki>__INDEX__</nowiki></code>가 있어서, 정상적이지 않을 곳에 로봇에 의해 색인됩니다.",
-       "post-expand-template-inclusion-category-desc": "모든 틀을 확장하고 나서, 문서 크기가 <code>$wgMaxArticleSize</code>보다 커지므로, 어떤 틀은 확장하지 않았습니다.",
+       "post-expand-template-inclusion-category-desc": "모든 틀을 전개하였을 때, 문서 크기가 <code>$wgMaxArticleSize</code>보다 커지므로, 어떤 틀은 전개하지 않았습니다.",
        "post-expand-template-argument-category-desc": "틀 변수 (<code>{{{Foo}}}</code>와 같은, 중괄호가 세 개 있는 무언가)를 확장하고 나서, 문서는 <code>$wgMaxArticleSize</code>보다 커집니다.",
        "expensive-parserfunction-category-desc": "(<code>#ifexist</code>와 같은) 느린 파서 함수가 너무 많이 문서에 포함되어 있습니다. [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit]를 보세요.",
        "broken-file-category-desc": "분류가 깨진 파일 링크 (파일이 존재하지 않을 때 포함되는 링크)가 있는 문서가 있다면 추가됩니다.",
        "autoblockid": "자동 차단 #$1",
        "block": "사용자 차단",
        "unblock": "사용자 차단 해제",
-       "blockip": "사용자 차단",
+       "blockip": "{{GENDER:$1|사용자}} 차단",
        "blockip-legend": "사용자 차단",
        "blockiptext": "차단할 IP 주소나 사용자 이름을 아래에 적어 주세요.\n차단은 문서 훼손을 막기 위해, [[{{MediaWiki:Policy-url}}|정책]]에 의해서만 이루어져야 합니다.\n차단 이유를 같이 적어주세요(예: 특정 문서 훼손).",
        "ipaddressorusername": "IP 주소 또는 사용자 이름:",
        "import": "문서 가져오기",
        "importinterwiki": "다른 위키에서 문서 가져오기",
        "import-interwiki-text": "문서를 가져올 위키를 선택하고 문서 제목을 입력해주세요.\n편집 날짜와 편집자의 이름이 보존될 것입니다.\n모든 가져오기는 [[Special:Log/import|가져오기 기록]]에 기록될 것입니다.",
-       "import-interwiki-source": "원본 위키/문서:",
        "import-interwiki-history": "이 문서의 모든 역사를 가져오기",
        "import-interwiki-templates": "모든 틀을 포함하기",
        "import-interwiki-submit": "가져오기",
        "pageinfo-category-pages": "문서 수",
        "pageinfo-category-subcats": "하위 분류 수",
        "pageinfo-category-files": "파일 수",
-       "markaspatrolleddiff": "검토한 문서로 표시",
-       "markaspatrolledtext": "이 문서를 검토한 것으로 표시",
-       "markedaspatrolled": "검토한 문서로 표시",
+       "markaspatrolleddiff": "점검한 문서로 표시",
+       "markaspatrolledtext": "이 문서를 점검한 것으로 표시",
+       "markedaspatrolled": "점검한 문서로 표시",
        "markedaspatrolledtext": "[[:$1]] 문서의 선택한 판을 순찰한 것으로 표시하였습니다.",
-       "rcpatroldisabled": "최근 바뀜 검토 기능 비활성화됨",
-       "rcpatroldisabledtext": "최근 바뀜 검토 기능은 현재 비활성화되어 있습니다.",
-       "markedaspatrollederror": "검토한 것으로 표시할 수 없습니다.",
-       "markedaspatrollederrortext": "검토한 것으로 표시할 판을 지정해야 합니다.",
-       "markedaspatrollederror-noautopatrol": "자신의 편집은 스스로 검토할 수 없습니다.",
-       "markedaspatrollednotify": "$1에 대한 바뀜을 검토한 것으로 표시했습니다.",
-       "markedaspatrollederrornotify": "검토한 것으로 표시를 실패했습니다.",
-       "patrol-log-page": "검토 기록",
-       "patrol-log-header": "문서 검토에 대한 기록입니다.",
-       "log-show-hide-patrol": "검토 기록을 $1",
+       "rcpatroldisabled": "최근 바뀜 점검 기능 비활성화됨",
+       "rcpatroldisabledtext": "최근 바뀜 점검 기능은 현재 비활성화되어 있습니다.",
+       "markedaspatrollederror": "점검한 것으로 표시할 수 없습니다.",
+       "markedaspatrollederrortext": "점검한 것으로 표시할 판을 지정해야 합니다.",
+       "markedaspatrollederror-noautopatrol": "자신의 편집은 스스로 점검할 수 없습니다.",
+       "markedaspatrollednotify": "$1에 대한 바뀜을 점검한 것으로 표시했습니다.",
+       "markedaspatrollederrornotify": "점검한 것으로 표시를 실패했습니다.",
+       "patrol-log-page": "점검 기록",
+       "patrol-log-header": "문서 점검에 대한 기록입니다.",
+       "log-show-hide-patrol": "점검 기록을 $1",
        "deletedrevision": "예전 $1 판이 삭제되었습니다.",
        "filedeleteerror-short": "파일 삭제 오류: $1",
        "filedeleteerror-long": "파일을 삭제하는 도중 오류가 발생했습니다:\n\n$1",
        "logentry-move-move-noredirect": "$1 사용자가 $3 문서를 넘겨주기를 만들지 않고 $4 문서로 {{GENDER:$2|옮겼습니다}}",
        "logentry-move-move_redir": "$1 사용자가 $3 문서를 $4 문서로 {{GENDER:$2|옮기면서}} 넘겨주기를 덮어썼습니다",
        "logentry-move-move_redir-noredirect": "$1 사용자가 $3 문서를 $4 문서로 넘겨주기를 남기지 않으면서 {{GENDER:$2|옮기면서}} 옮길 대상에 있던 넘겨주기를 덮어썼습니다",
-       "logentry-patrol-patrol": "$1 사용자가 $3 문서의 $4판을 검토한 것으로 {{GENDER:$2|표시했습니다}}",
-       "logentry-patrol-patrol-auto": "$1 사용자가 자동적으로 $3 문서의 $4판을 검토한 것으로 {{GENDER:$2|표시했습니다}}",
+       "logentry-patrol-patrol": "$1 사용자가 $3 문서의 $4판을 점검한 것으로 {{GENDER:$2|표시했습니다}}",
+       "logentry-patrol-patrol-auto": "$1 사용자가 자동적으로 $3 문서의 $4판을 점검한 것으로 {{GENDER:$2|표시했습니다}}",
        "logentry-newusers-newusers": "$1 사용자 계정을 {{GENDER:$2|만들었습니다}}",
        "logentry-newusers-create": "$1 사용자 계정을 {{GENDER:$2|만들었습니다}}",
        "logentry-newusers-create2": "$1 사용자가 $3 사용자 계정을 {{GENDER:$2|만들었습니다}}",
index 5da1b59..3024fe7 100644 (file)
        "rcnotefrom": "Subter sunt '''$1''' nuperrime mutata in proxima '''$2''' die.",
        "rclistfrom": "Monstrare mutata nova incipiens ab $3 $2",
        "rcshowhideminor": "$1 recensiones minores",
+       "rcshowhideminor-show": "Monstrare",
+       "rcshowhideminor-hide": "Celare",
        "rcshowhidebots": "$1 automata",
+       "rcshowhidebots-show": "Monstrare",
+       "rcshowhidebots-hide": "Celare",
        "rcshowhideliu": "$1 usores notos",
+       "rcshowhideliu-show": "Monstrare",
+       "rcshowhideliu-hide": "Celare",
        "rcshowhideanons": "$1 usores ignotos",
+       "rcshowhideanons-show": "Monstrare",
+       "rcshowhideanons-hide": "Celare",
        "rcshowhidepatr": "$1 recensiones circumitae",
+       "rcshowhidepatr-show": "Monstrare",
+       "rcshowhidepatr-hide": "Celare",
        "rcshowhidemine": "$1 conlationes meas",
+       "rcshowhidemine-show": "Monstrare",
+       "rcshowhidemine-hide": "Celare",
        "rclinks": "Monstrare $1 nuperrime mutata in $2 diebus proximis.<br />$3",
        "diff": "diss",
        "hist": "hist",
        "unusedtemplateswlh": "nexus alii",
        "randompage": "Pagina fortuita",
        "randompage-nopages": "Non est ulla pagina {{PLURAL:$2|hoc in spatio nominale|in his spatiis nominalibus}}: $1.",
-       "randomincategory-selectcategory-submit": "Pergere",
        "randomredirect": "Redirectio fortuita",
        "randomredirect-nopages": "Non est ulla redirectio in spatio nominali \"$1\".",
        "statistics": "Census",
        "djvu_page_error": "Pagina DjVu extra latitudinem",
        "import": "Paginas importare",
        "importinterwiki": "Adportatio transvici",
-       "import-interwiki-source": "Vici et pagina fons:",
        "import-interwiki-submit": "Importare",
        "import-interwiki-namespace": "Spatium nominale destinatum:",
        "import-upload-filename": "Nomen fasciculi:",
index 2894e7f..779c0eb 100644 (file)
        "revdelete-selected-text": "{{PLURAL:$1|Erausgesicht Versioun|Erausgesicht Versioune}} vu(n) [[:$2]]:",
        "revdelete-selected-file": "{{PLURAL:$1|Erausgesicht Versioun|Erausgesicht Versioune}} vum Fichier vu(n) [[:$2]]:",
        "logdelete-selected": "Ausgewielten {{PLURAL:$1|Evenement|Evenementer}} aus dem Logbuch:",
+       "revdelete-text-text": "Geläscht Versioune bleiwen am Historique vun der Säit, awer Deeler vun hirem Inhalt sinn net ëffentlech zougänglech.",
        "revdelete-text-others": "Aner Administrateure kënnen nach ëmmer de verstoppten Inhalt gesinn an en nees restauréieren, ausser wann zousätzlech Limitatiounen agestallt sinn.",
        "revdelete-confirm": "Confirméiert w.e.g. datt Dir dat maache wëllt, datt Dir d'Konsequenze verstitt an datt Dir dëst an Aklang mat de [[{{MediaWiki:Policy-url}}|Richtlinne]] maacht.",
        "revdelete-suppress-text": "Ënnerdréckung sollt '''nëmmen''' an dëse Fäll benotzt ginn:\n* Informatiounen déi beleidege kéinten\n* Net ubruechte perséinlechen Informatiounen\n*: ''Adressen, Telefonsnummeren, Sozialversécherungsnummeren asw.''",
        "unwatchedpages": "Net iwwerwaacht Säiten",
        "listredirects": "Lëscht vun de Viruleedungen",
        "listduplicatedfiles": "Lëscht vu Fichiere mat Doublonen",
+       "listduplicatedfiles-summary": "Dëst ass eng Lëscht vu Fichiere wou déi lescht Versioun vum Fichier en Doublon vun der leschter Versioun vun engem anere Fichier ass. Et ginn nëmme lokal Fichiere consideréiert.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] huet [[$3|{{PLURAL:$2|een Doublon|$2 Doublonen}}]].",
        "unusedtemplates": "Net benotzt Schablounen",
        "unusedtemplatestext": "Op dëser Säit stinn all Säiten aus dem {{ns:template}} Nummraum, déi a kenger anerer Säit benotzt ginn. Vergiesst net nozekucken, ob et keng aner Linken op dës Schabloune gëtt, ier Dir eng Schabloun läscht.",
        "randomincategory": "Zoufälleg Säit an der Kategorie",
        "randomincategory-invalidcategory": "\"$1\" ass kee valabelen Numm fir eng Kategorie.",
        "randomincategory-nopages": "Et gëtt keng Säiten an der [[:Category:$1]].",
-       "randomincategory-selectcategory": "Eng zoufälleg Säit aus der Kategorie: $1 $2 opruffen",
-       "randomincategory-selectcategory-submit": "Lass",
+       "randomincategory-category": "Kategorie:",
+       "randomincategory-legend": "Zoufälleg Säit an der Kategorie",
        "randomredirect": "Zoufälleg Viruleedung",
        "randomredirect-nopages": "Am Nummraum $1 gëtt et keng Viruleedungen.",
        "statistics": "Statistik",
        "exbeforeblank": "Den Inhalt virum Läsche war: '$1'",
        "delete-confirm": "Läsche vu(n) \"$1\"",
        "delete-legend": "Läschen",
-       "historywarning": "'''Opgepasst:''' Déi Säit déi Dir läsche wëllt huet en Historique mat ongeféier $1 {{PLURAL:$1|Versioun|Versiounen}}:",
+       "historywarning": "<strong>Opgepasst:</strong> D'Säit déi Dir läsche wëllt huet en Historique mat $1 {{PLURAL:$1|Versioun|Versiounen}}:",
        "confirmdeletetext": "Dir sidd am Gaang, eng Säit mat hirem kompletten Historique vollstänneg aus der Datebank ze läschen.\nW.e.g. confirméiert, datt Dir dëst wierklech wëllt, datt Dir d'Konsequenze verstitt, an datt dat Ganzt am Aklang mat de [[{{MediaWiki:Policy-url}}|Richtlinne]] geschitt.",
        "actioncomplete": "Aktioun ofgeschloss",
        "actionfailed": "Aktioun huet net funktionéiert",
        "delete-edit-reasonlist": "Läschgrënn änneren",
        "delete-toobig": "Dës Säit huet e laangen Historique, méi wéi $1 {{PLURAL:$1|Versioun|Versiounen}}.\nD'Läsche vu sou Säite gouf limitéiert fir ongewollte Stéierungen op {{SITENAME}} ze verhënneren.",
        "delete-warning-toobig": "Dës Säit huet eng laang Versiounsgeschicht, méi wéi $1 {{PLURAL:$1|Versioun|Versiounen}}.\nD'Läschen dovu kann zu Stéierungen am Fonctionnement vun {{SITENAME}} féieren;\ndës Aktioun soll mat Virsiicht gemaach ginn.",
-       "delete-cantedit": "Dir däerft dës Säit net läsche well Dir net d'Recht hutt fir se z'änneren.",
+       "deleteprotected": "Dir däerft dëst Säit net läsche well se gespaart ass.",
        "deleting-backlinks-warning": "'''Opgepasst:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Aner Säite]] linken op déi Säit déi Dir am Gaang sidd ze läschen oder déi Säit Déi Dir am Gaang sidd ze läschen ass an aner Säiten agebonn.",
        "rollback": "Ännerungen zrécksetzen",
        "rollback_short": "Zrécksetzen",
        "import": "Säiten importéieren",
        "importinterwiki": "Transwiki-Import",
        "import-interwiki-text": "Sicht eng Wiki an e Säitentitel eraus fir z'importéieren.\nD'Versiounsdatumen an d'Benotzernimm bleiwen dobäi erhalen.\nAll Transwiki-Import-Aktioune ginn am [[Special:Log/import|Import-Logbuch]] protokolléiert.",
-       "import-interwiki-source": "Quelle Wiki/Säit:",
+       "import-interwiki-sourcewiki": "Quellwiki:",
+       "import-interwiki-sourcepage": "Originalsäit:",
        "import-interwiki-history": "Importéier all d'Versioune vun dëser Säit",
        "import-interwiki-templates": "Mat alle Schablounen",
        "import-interwiki-submit": "Import",
index e5b7208..b21bd5c 100644 (file)
        "passwordreset-capture-help": "ار شما ای جعوه نه وارسی بکید. ایمیل و خوئی اوسه که سی کارور کل بیه بوئه بوینیتش.",
        "passwordreset-email": "نشونی ايميل",
        "passwordreset-emailtitle": "جزئیات حساو ها د {{نوم مالگه}}",
+       "passwordreset-emailtext-ip": "یه کسی(شات خوتو، وا تیرنشون آی پی $1) سی د نو زنه کردن رازینه گواردن تو د {{SITENAME}}  درحاست کرده($4).\nسی کاریار «$2» یه گل رازینه گواردن موقتی دروس بیه و و هؤمبراور «$3» ئه.\nار تمارزو تو یه بیه ایسه باید بیایت وامین سامونه و یه گل رازینه گواردن هنی بهاییت\nرازینه گواردن شما د طیل {{PLURAL:$5|یه رو|$5 رو}} باطل بوئه.\n\nار کس هنی چنی درحاستی کرده یا یه که شما رازینه گواردن دمایی خوتونه د ویر اوردیت و تر نمیهایت ونه آلشت بیئت، می تونیت د ای پیغوم تیه پوشی بکیت و همو رازینه گواردن دمایی نه وه کار به ونیت.",
+       "passwordreset-emailtext-user": "کاریار $1 د {{SITENAME}} د نو زنه کردن رازینه گواردن شمانه د{{SITENAME}} ($4) کرده. {{PLURAL:$3|حساو|حساویا}} کاریاری که هان د هار د وا ای تیرنشون انجومانامه ها د ارتواط:\n\n$2\n\n{{PLURAL:$3|ای رازینه گواردن موقت|ای رازینه گواردنیا موقت}} تا {{PLURAL:$5|یه رو|$5 رو}} باطل بوئه.\nار کس هنی چنی درحاستی کرده یا یه که شما رازینه گواردن دمایی خوتونه د ویر اوردیت و تر نمیهایت ونه آلشت بیئت، می تونیت د ای پیغوم تیه پوشی بکیت و همو رازینه گواردن دمایی نه وه کار به ونیت.",
        "passwordreset-emailelement": "نوم کاروری: $1\nپاسورد موقتی: $2",
        "passwordreset-emailsent": "پاسورد هنی سی ایمیل کل بیه.",
        "passwordreset-emailsent-capture": "پاسورد تازه تو د ایمیلتو که د هار نشو دئه بیه کل بیه",
        "nonunicodebrowser": "<strong>زئنار:دووارته نئر شما وا نیسسه یا یونیکد سازگاری ناره.</strong>\nیه گل راحل وه کار گرته بیه سی یه که شما بلگه یا نه وا امنیت ویرایشت بکیت:\nنیسه یا غیر-ASCII  د پایه رازینه یا 16 تایی دتو نشو دئه بوئه.",
        "editingold": "<strong>زئنار:شما داریت یه گل وانئری نا به هنگوم بیه نه سی ای بلگه ویرایشت می کید</strong>\nار شما ونه اماییه بکیت،هر آلشتی که د اول سی ای وانئری انجوم بیه گم بوئه.",
        "yourdiff": "فرخيا",
+       "copyrightwarning": "لطفن د ویرتو با که ایچه فرض بوئه که همه هومیاریا شما وا{{SITENAME}} د شکل «$2» درتیچ بوئن(سی چیا تر روئیت وه $1).\nار نمیهایت که که نیسسه یاتو که فره ویرایشت بینه و دلحا درتیچ بان، د ایچه کلشو نکیت.<br />\nهمچنو شما داریت وه ایما قول میئیت که خوتو ونونن نویسنیته، یا ونه د یه گل سرچشمه آزاد وا بئرکرد همگونی یا چی وه ؤرداشتیته.\n'''کاریایی که حق درتیچسن (copyright) دارن بی صلا کل نکیت!'''",
+       "copyrightwarning2": "لطفن د ویرتو با که ایچه فرض بوئه که همه هومیاریا شما وا{{SITENAME}} د شکل «$2» درتیچ بوئن(سی چیا تر روئیت وه $1).\nار نمیهایت که که نیسسه یاتو که فره ویرایشت بینه و دلحا درتیچ بان، د ایچه کلشو نکیت.<br />\nهمچنو شما داریت وه ایما قول میئیت که خوتو ونونن نویسنیته، یا ونه د یه گل سرچشمه آزاد وا بئرکرد همگونی یا چی وه ؤرداشتیته.\n'''کاریایی که حق درتیچسن (copyright) دارن بی صلا کل نکیت!'''",
        "longpageerror": "<strong>خطا:نیسسه شما  {{جمی:$1|یه کلوبایت|$1 کلوبایت}}  درازی نه دئه، که ونو د بیشرونه انازه{{جمی:$2|یه کلوبایت|$2 کلوبایت}} گپترن.</strong>\nنبوئه وه اماییه با.",
        "readonlywarning": "<strong>زئنار:رسینه گا سی واداشت قلف بیه، سی یه نه که شما ایسه نمی تونیت ویرایشتیاتونه اماییه بکیت.</strong>\nشات شما بحایت که نیسسه خوتونه د جانیا نیسسه ای وردار بدیس بکیت و ونه سی نهاتر اماییه بکیت.\n\nدیوونداری که ونه قلف کرده چنی گوته:$1",
        "protectedpagewarning": "<strong>زئنار:ای بلگه سی یه پر و پیم بیه که کاریاریایی که دسرسی دیوونداری دارن فقط بتونن دش ویرایشت بکن.</strong>\nآخرین سیائه سی سرچشمه یا د هار اماییه کاری بیه:",
        "revdelete-text-file": "وانئریا پاکسا بیه هنی د بلگه ویرگار دیاری می کن،اما به شیا مینونه یاشو د مین خلک دیار نیئن.",
        "logdelete-text": "وانئریا پاکسا بیه هنی د بلگه ویرگار دیاری می کن،اما به شیا مینونه یاشو د مین خلک دیار نیئن.",
        "revdelete-text-others": "دیوونداریا هنی می تونن د مینونه یا قام بیه دسرسی داشتوئن و ونه د نو زنه بکن، مه ر محدودیتیا اضافی میزوکاری بان.",
+       "revdelete-confirm": "لطفن بکید پشت راسی بکیت که میهایت ای کار نه انجوم بیئت، و یه دل بایت که شما نتیجه یا ای کار نه فئمستیته و ای کار نه  مطاوق وا  [[{{MediaWiki:Policy-url}}|the policy]].انجوم می ئیت",
+       "revdelete-suppress-text": "پاکساگری فقط با <strong>تئنا</strong> سی جایایی که هان د هار وه کار گرته بوئه:\n*دونسمنیایی که فره تنادارن\n*دونسمنیا نامناسو شخصی\n*: <em>تیرنشون حونه، شماره تیلیفون،رازینه زایاره ای و چیا تر</em>",
        "revdelete-legend": "میزونکاری محدودیتیا دیار بیین.",
        "revdelete-hide-text": "متن دوواره دیئن",
        "revdelete-hide-image": "چی یا مئن فایل قام کو",
        "revdel-restore": "آلشت وضئيت ديئن",
        "pagehist": "ويرگار بلگه",
        "deletedhist": "ویرگار پاکسا بیه",
+       "revdelete-hide-current": "خطا د قام کردن چی که ها د ویرگار $2 ساعت $1: ای نسقه، نسقه ایسنی یه و نبوئه نهوش بکیت.",
+       "revdelete-show-no-access": "خطا د قام کردن چیی که ها د ویرگار $2 ساعت $1: ای نسقه نشون «مئن تنگلا بیئن» داره و شما نمی تونیت وه ش دسرسی داشتویت.",
+       "revdelete-modify-no-access": "خطا د قام کردن چیی که ها د ویرگار $2 ساعت $1: ای نسقه نشون «مئن تنگلا بیئن» داره و شما نمی تونیت وه ش دسرسی داشتویت.",
+       "revdelete-modify-missing": "خطا د قام کردن چی شمارهٔ $1: ای نسقه د رسینه گا نیئش!",
+       "revdelete-no-change": "'''زئنار:''' چی که ها د ویرگا $2 ساعت $1 د دماتر دیاری میزونکاری حاسته بینه داشته.",
+       "revdelete-concurrent-change": "خطا د قام کردن چیی که ها د ویرگار $2 ساعت $1: وه ویر و باور میا که د او گاتی که شما سی آلشت دئن حال و بار وه سعی می کردیته، حال و بارش وه دس کسی تر آلشت دئه بیه.\nلطفن پهرستنومه یا نه وارسی بکیت.",
+       "revdelete-only-restricted": "خطا د قام کردن چیی که ها د ویرگار $2 ساعت $1: شما نیمی تونیت چیانه د ورتیه دیوونداریا قام بکیتو مر یه که یه گل د گزینه یا دیاری کردن هنی نه انتخاو بکیت.",
+       "revdelete-reason-dropdown": "*دلیلیا جاونه سی پاکسا کردن\n** تیه پوشی د حق درتیچ کردن\n** ویر و باور یا دونسمنیا شخصی نامناسو\n** نوم کاریاری نامناسو\n** دونسمنیا فره تنادار",
        "revdelete-otherreason": "دلیل هنی:",
        "revdelete-reasonotherlist": "دلیل هنی",
        "revdelete-edit-reasonlist": "دلیلیا پاکسا کردنه نه ویرایشت بکید",
        "revdelete-offender": "نیسنه وانیری:",
        "suppressionlog": "پهرستنومه پاکسازی",
+       "suppressionlogtext": "د هار یه گل نوم گه ای هئ که مینونه یا پاکسا بیه و قلف بیه  که هان دش د ورتیه دیوونداریا قام بینه.\n[[ویجه:نوم گه قلف بیه|نوم گه قلف بیئنیا]]نه سی نوم گه ایی که انجومکاریا قدقن بیه و قلف بینیا هان دش بونیت.",
        "mergehistory": "ویرگاریا بلگه نه یکی بکید",
        "mergehistory-header": "ای بلگه وه شما اجازه می ئه که وانیریانه ویرگار سرچشمه بلگه نه د یه گل بلگه تازه سریک سازی بکید.\nمطمئن بویت که ای آلشت د لحاظ ویرگاری د مین بلگه موندگار هئ.",
        "mergehistory-box": "دوواره دیئن دوبلگه ای نه سر یک سازی کو:",
        "showhideselectedversions": "شلک دیئن وانیریا انتخاو بیه نه آلشت بکید",
        "editundo": "رد كردن",
        "diff-empty": "(بی فرق)",
+       "diff-multi-sameuser": "({{PLURAL:$1|یه گل نسقه مینجایی|$1 نسقه یا مینجایی}} وه دس{{PLURAL:$2|کاریاری تر|$2 کاریاریا}} نشو دئه نبیه)",
+       "diff-multi-otherusers": "({{PLURAL:$1|یه گل نسقه مینجایی|$1 نسقه یا مینجایی}} وه دس{{PLURAL:$2|کاریاری تر|$2 کاریاریا}} نشو دئه نبیه)",
        "diff-multi-manyusers": "({{جمی:$1|یه گل وانیری مینجاگرته|$1وانیریا مینجا گرته}} بیشتر د $2 {{جمی:$2|کارور|کاروریا}} نشو دئه نبیه)",
        "searchresults": "نتيجه يا پی جوری",
        "searchresults-title": "نتيجه يا پی جوری سی \"$1\"",
        "powersearch-togglelabel": "چك كردن:",
        "powersearch-toggleall": "همه",
        "powersearch-togglenone": "هيش كوم",
+       "powersearch-remember": "د ویر داشتن انتخاو سی پی جوریا نهایی",
        "search-external": "پی جوری د در",
        "search-error": "یه گل خطا سی اوسنی که پی جوری می کردیت اتفاق افتائه:$1",
        "preferences": "خصوصيات هنی",
        "mypreferences": "خصوصيات هنی",
        "prefs-edits": "شماره ویرایشتا:",
+       "prefsnologintext2": "لطف بکیت بیایت وامین و ترجیحات خوتونه آلشت بئیت.",
        "prefs-skin": "پوست",
        "skin-preview": "پیش سیل",
+       "datedefault": "هیچ ترجیحات دش نئ",
+       "prefs-labs": "گزینشتیا آزمایشتی",
        "prefs-user-pages": "بلگیا كارور",
        "prefs-personal": "پروفایل کارور",
        "prefs-rc": "آلشتیا تازه باو",
        "prefs-watchlist": "سیل برگ",
        "prefs-watchlist-days": "روزیا نه د سیل برگ نشو دئه بو:",
        "prefs-watchlist-days-max": "$1 بیشترونه {{جمی:$1|روز|روزیا}}",
+       "prefs-watchlist-edits": "بیشترونه انازه آلشتیایی که د سیل برگ گپ بیه نشو دئه بیه:",
        "prefs-watchlist-edits-max": "شماره بیشترونه:1000",
        "prefs-watchlist-token": "نشونه سیل برگ:",
        "prefs-misc": "شيوسن",
        "prefs-email": "چیا هنی انجومانامه",
        "prefs-rendering": "شلک و ری",
        "saveprefs": "اماییه كردن",
+       "restoreprefs": "د نو زنه کردن همه میزونکاریا پیش فرض(د همه جایا)",
        "prefs-editing": "د حالت ويرايشت",
        "rows": "رديفيا:",
        "columns": "ستينا:",
        "searchresultshead": "پی جوری",
+       "stub-threshold": "آستونه ویرایشتیا د یک دیسسه<a href=\"#\" class=\"stub\">ناقص</a> (بایت):",
        "stub-threshold-disabled": "د كار ونن",
        "recentchangesdays": "روزیا آلشتیا تازه باو نه نشو بیه:",
        "recentchangesdays-max": "$1 بیشترونه {{جمی:$1|روز|روزیا}}",
        "recentchangescount": "انازه ویرایشتیایی که دیاری می که:",
        "prefs-help-recentchangescount": "یه شامل آلشتیا تازه،ویرگاریا بلگه و پهرستنومه یا هئ.",
+       "prefs-help-watchlist-token2": "یه یه گل کلیت رازینه دار سی خوارک تیارگه سیل برگه شمانه.\nهر کسی که شما مئشناسیت می تونه سیل برگ شما نه بوحونه،په ونه هومبئری نکیت.[[Special:ResetTokens|ار لازمه ونه آلشت بئیت ایچه نه بپورنیت]].",
        "savedprefs": "ویجه گیا هنی تو اماییه بیه.",
        "timezonelegend": "وخت راساگه",
        "localtime": "وخت ولاتی:",
        "prefs-custom-css": "سی اس اس جاافتائه",
        "prefs-custom-js": "جاوا نیسسه جاافتائه",
        "prefs-common-css-js": " سی اس اس/جاوا اسکریپت بهر بیه سی همه پوسه یا:",
+       "prefs-reset-intro": "شما می تونیت ای بلگه سی د نو زنه کردن ترجیحات خوت وه شکل تیارگه پیش فرض وه کار بوونیت.\nیه ورئشت پذیر نئ.",
        "prefs-emailconfirm-label": "مئکم کردن ایمیل:",
        "youremail": "ايميل:",
        "username": "{{جنس:$1|نوم کاروری}}:",
        "userrights-notallowed": "شما سی اضاف کردن  حقوق کارور یا ورداشتنش دسرسی ناریت.",
        "userrights-changeable-col": "گرویایی که شما تونیت ویرایشت بکید",
        "userrights-unchangeable-col": "گرویایی که شما نتونیت ویرایشت بکید",
+       "userrights-removed-self": "شما د خوئی حقوق خوتونه ؤرداشتیته، چی یه که مثلا شما تر نمی تونیت وه ای بلگه دسرسی داشتویت.",
        "group": "گرو",
        "group-user": "کاروریا",
        "group-autoconfirmed": "کاروریا خودوادار",
        "randomincategory": "بلگه بختی د ای دسه",
        "randomincategory-invalidcategory": "\"$1\"  نوم دسه معتوری نئ.",
        "randomincategory-nopages": "هیچ بلگه ای د ای  [[:دسه نئ:$1|$1]] دسه.",
-       "randomincategory-selectcategory-submit": "رو",
        "randomredirect": "واگردونی بختکی",
        "statistics": "آماريا",
        "statistics-header-pages": "بلگه آماریا",
index c16d21f..d883947 100644 (file)
        "unusedtemplateswlh": "kitos nuorodos",
        "randompage": "Atsitiktinis puslapis",
        "randompage-nopages": "{{PLURAL:$2|Šioje vardų srityje|Šiose vardų srityse}} nėra jokių puslapių: $1.",
-       "randomincategory-selectcategory-submit": "Pirmyn",
        "randomredirect": "Atsitiktinis peradresavimas",
        "randomredirect-nopages": "Vardų srityje „$1“ nėra jokių peradresavimų.",
        "statistics": "Statistika",
        "import": "Importuoti puslapius",
        "importinterwiki": "Tarpprojektinis importas",
        "import-interwiki-text": "Pasirinkite projektą ir puslapio pavadinimą importavimui.\nVersijų datos ir redaktorių vardai bus išlaikyti.\nVisi tarpprojektiniai importo veiksmai yra registruojami  [[Special:Log/import|importo istorijoje]].",
-       "import-interwiki-source": "Šaltinio wiki projektas/puslapis:",
        "import-interwiki-history": "Kopijuoti visas istorijos versijas šiam puslapiui",
        "import-interwiki-templates": "Įtraukti visus šablonus",
        "import-interwiki-submit": "Importuoti",
index b6813d7..540d275 100644 (file)
        "randompage": "Nejauša lapa",
        "randomincategory": "Nejauša lapa kategorijā",
        "randomincategory-invalidcategory": "\"$1\" nav derīgs kategorijas nosaukums.",
-       "randomincategory-selectcategory-submit": "Aiziet",
        "randomredirect": "Nejauša pāradresācijas lapa",
        "statistics": "Statistika",
        "statistics-header-pages": "Lapu statistika",
        "thumbnail_image-missing": "Šķiet, ka fails ir pazudis: $1",
        "import": "Importēt lapas",
        "importinterwiki": "Starpviki importēšana",
-       "import-interwiki-source": "Avota viki/lapa:",
        "import-interwiki-history": "Nokopēt visas šīs lapas hronoloģijā atrodamās versijas",
        "import-interwiki-templates": "Iekļaut visas veidnes",
        "import-interwiki-submit": "Importēt",
index e23125f..03355b6 100644 (file)
        "yourtext": "子也",
        "storedversion": "時也",
        "nonunicodebrowser": "'''警示:覽器不識萬國碼,以十六進位數代之,以保纂可也。'''",
-       "editingold": "''''''警示'''子纂舊然。強儲之,則新易失焉。'''",
+       "editingold": "'''\"警示\"子纂舊然。強儲之,則新易失焉。'''",
        "yourdiff": "異",
        "copyrightwarning": "{{SITENAME}}全文皆循$2,詳見$1。不喜他纂,但去可矣。文務親撰,或謄公本,\n'''萬勿盜版!'''",
        "copyrightwarning2": "{{SITENAME}}全文,允眾人撰、纂、刪、校。不喜他纂,但去可矣。<br />\n文務親撰,或謄公本,如$1。'''萬勿盜版!'''",
        "action-userrights-interwiki": "纂他wiki上之權",
        "action-siteadmin": "鎖及解鎖其庫",
        "nchanges": "$1易",
+       "enhancedrc-since-last-visit": "$1未示",
        "enhancedrc-history": "誌",
        "recentchanges": "近易",
        "recentchanges-legend": "近易項",
        "unusedtemplateswlh": "支鏈",
        "randompage": "清風翻書",
        "randompage-nopages": "下列{{PLURAL:$2|名集}}中無頁也:$1",
-       "randomincategory-selectcategory-submit": "往",
        "randomredirect": "任渡",
        "randomredirect-nopages": "「$1」名冊內無渡也。",
        "statistics": "彙統",
        "import": "圖入匯",
        "importinterwiki": "維基互匯",
        "import-interwiki-text": "欲入匯,擇維基、揀題文,審時、纂者隨記也。互匯錄於[[Special:Log/import|誌入]]。",
-       "import-interwiki-source": "來源wiki/頁:",
        "import-interwiki-history": "審、誌同匯",
        "import-interwiki-submit": "入匯",
        "import-interwiki-namespace": "入名集:",
index 7423a38..dd92c70 100644 (file)
        "randomincategory": "Случајна страница во категоријата",
        "randomincategory-invalidcategory": "„$1“ не претставува важечка категорија.",
        "randomincategory-nopages": "Нема страници во [[:Category:$1]].",
-       "randomincategory-selectcategory": "Дај случајна страница од категоријата: $1 $2.",
-       "randomincategory-selectcategory-submit": "Оди",
+       "randomincategory-category": "Категорија:",
+       "randomincategory-legend": "Случајна страница во категорија",
        "randomredirect": "Случајно пренасочување",
        "randomredirect-nopages": "Нема пренасочувања во именскиот простор „$1“.",
        "statistics": "Статистики",
        "exbeforeblank": "содржината пред бришењето беше: '$1'",
        "delete-confirm": "Бришење на „$1“",
        "delete-legend": "Бришење",
-       "historywarning": "'''Предупредување:''' Страницата што сакате да ја избришете има историја со околу $1 {{PLURAL:$1|преработка|преработки}}:",
+       "historywarning": "<strong>Предупредување:</strong> Страницата што сакате да ја избришете има историја со {{PLURAL:$1|една преработка|$1 преработки}}:",
        "confirmdeletetext": "На пат сте трајно да избришете страница заедно со нејзината историја.\nПотврдете дека имате намера да го направите ова, дека ги разбирате последиците од тоа и дека го правите во согласност со [[{{MediaWiki:Policy-url}}|правилата]].",
        "actioncomplete": "Дејството е извршено",
        "actionfailed": "Неуспешно дејство",
        "delete-edit-reasonlist": "Уреди причини за бришење",
        "delete-toobig": "Оваа страница има долга историја на уредување, преку $1 {{PLURAL:$1|преработка|преработки}}.\nБришењето на ваквии страници е забрането со цел {{SITENAME}} да се заштити од оштетувања.",
        "delete-warning-toobig": "Оваа страница има долга историја на уредување, преку $1 {{PLURAL:$1|преработка|преработки}}.\nБришењето може да предизвика проблеми при работењето на базата на податоци на {{SITENAME}};\nпродолжете доколку сте сигруни дека треба тоа да го сторите.",
-       "delete-cantedit": "Не можете да ја избришете страницава зошто немате дозвола да ја уредувате.",
+       "deleteprotected": "Не можете да ја избришете страницава бидејќи е заштитена.",
        "deleting-backlinks-warning": "'''Предупредување:''' До страницата што сакате да ја избришете водат [[Special:WhatLinksHere/{{FULLPAGENAME}}|други страници]] или пак се превметнуваат во неа.",
        "rollback": "Отповикај промени",
        "rollback_short": "Отповикај",
        "import": "Увезување на страници",
        "importinterwiki": "Меѓувики увоз",
        "import-interwiki-text": "Избери вики и наслов на страница за увоз.\nДатумите и имињата на уредниците ќе бидат зачувани.\nСите постапки при увозот од другото вики се заведуваат во [[Special:Log/import|дневникот на увезувања]].",
-       "import-interwiki-source": "Извор вики/страница:",
+       "import-interwiki-sourcewiki": "Изворно вики:",
+       "import-interwiki-sourcepage": "Изворна страница:",
        "import-interwiki-history": "Копирај ги сите постари верзии за оваа страница",
        "import-interwiki-templates": "Вклучи ги сите шаблони",
        "import-interwiki-submit": "Увези",
index bb807ba..7b938c1 100644 (file)
        "mergehistory-into": "ലക്ഷ്യതാൾ:",
        "mergehistory-list": "സം‌യോജിപ്പിക്കാവുന്ന തിരുത്തൽ നാൾവഴി",
        "mergehistory-merge": "[[:$1]]ന്റെ താഴെ കാണിച്ചിരിക്കുന്ന പതിപ്പുകൾ [[:$2]] ലേക്കു സം‌യോജിപ്പിക്കാവുന്നതാണ്‌‍. റേഡിയോ ബട്ടൺ കോളം ഉപയോഗിച്ച് സം‌യോജിപ്പിക്കാനുള്ള പതിപ്പുകളുടെ സമീപത്തുള്ള സമയം തിരഞ്ഞെടുക്കുക. താങ്കൾ തിരഞ്ഞെടുക്കുന്ന സമയത്തോ അതിനു മുൻപോ സൃഷ്ടിക്കപ്പെട്ട പതിപ്പുകൾ തിരഞ്ഞെടുക്കുക. നാവിഗേഷണൽ കണ്ണികൾ ഉപയോഗിക്കുന്നതു ഈ കോളത്തെ പുനഃക്രമീകരിക്കും.",
-       "mergehistory-go": "à´¸à´\82â\80\8cà´¯àµ\8bà´\9cà´¿à´ªàµ\8dപിà´\95àµ\8dà´\95ാവàµ\81à´¨àµ\8dà´¨ à´¤à´¿à´°àµ\81à´¤àµ\8dതലàµ\81à´\95ൾ à´\95à´¾à´\9fàµ\8dà´\9fàµ\81à´\95",
+       "mergehistory-go": "സം‌യോജിപ്പിക്കാവുന്ന തിരുത്തുകൾ കാട്ടുക",
        "mergehistory-submit": "പതിപ്പുകൾ സം‌യോജിപ്പിക്കുക",
        "mergehistory-empty": "സം‌യോജിപ്പിക്കാവുന്ന പതിപ്പുകളൊന്നും ഇല്ല.",
        "mergehistory-success": "[[:$1]]-ന്റെ {{PLURAL:$3|പതിപ്പ്|പതിപ്പുകൾ}} [[:$2]]-ലേക്കു വിജയകരമായി സം‌യോജിപ്പിച്ചിരിക്കുന്നു.",
        "prefs-watchlist-days": "ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽ പ്രദർശിപ്പിക്കേണ്ട പരമാവധി ദിവസങ്ങൾ:",
        "prefs-watchlist-days-max": "പരമാവധി {{PLURAL:$1|ഒരു ദിവസം|$1 ദിവസങ്ങൾ}}",
        "prefs-watchlist-edits": "ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയുടെ വികസിത രൂപത്തിൽ പ്രദർശിപ്പിക്കേണ്ട പരമാവധി മാറ്റങ്ങൾ:",
-       "prefs-watchlist-edits-max": "പരമാവധി 1000 à´¤à´¿à´°àµ\81à´¤àµ\8dതലàµ\81à´\95ൾ",
+       "prefs-watchlist-edits-max": "പരമാവധി 1000 തിരുത്തുകൾ",
        "prefs-watchlist-token": "ശ്രദ്ധിക്കുന്നവയുടെ പട്ടികയ്ക്കുള്ള അടയാളപദം:",
        "prefs-misc": "പലവക",
        "prefs-resetpass": "രഹസ്യവാക്ക് മാറ്റുക",
        "right-noratelimit": "പ്രവർത്തനങ്ങൾക്ക് പരിധികൾ ബാധകമല്ല",
        "right-import": "മറ്റുള്ള വിക്കികളിൽ നിന്നും താളുകൾ ഇറക്കുമതി ചെയ്യുക",
        "right-importupload": "അപ്‌‌ലോഡ് ചെയ്ത പ്രമാണത്തിൽ നിന്നും താളുകൾ ഇറക്കുമതി ചെയ്യുക",
-       "right-patrol": "മറàµ\8dà´±àµ\81à´³àµ\8dളവരàµ\81à´\9fàµ\86 à´¤à´¿à´°àµ\81à´¤àµ\8dതലàµ\81à´\95ൾ à´±àµ\8bà´¨àµ\8dà´¤àµ\81à´\9aàµ\81à´±àµ\8dറിയതായി à´\85à´\9fയാളപàµ\8dà´ªàµ\86à´\9fàµ\81à´¤àµ\8dà´¤àµ\81à´\95",
-       "right-autopatrol": "à´¸àµ\8dവനàµ\8dà´¤à´\82 à´¤à´¿à´°àµ\81à´¤àµ\8dതലàµ\81à´\95ൾ à´±àµ\8bà´¨àµ\8dà´¤àµ\81 à´\9aàµ\81à´±àµ\8dറിയതായി à´\85à´\9fയാളപàµ\8dà´ªàµ\86à´\9fàµ\81à´¤àµ\8dà´¤àµ\81à´\95",
+       "right-patrol": "മറ്റുള്ളവരുടെ തിരുത്തുകൾ റോന്തുചുറ്റിയതായി അടയാളപ്പെടുത്തുക",
+       "right-autopatrol": "സ്വന്തം തിരുത്തുകൾ റോന്തു ചുറ്റിയതായി അടയാളപ്പെടുത്തുക",
        "right-patrolmarks": "പുതിയ മാറ്റങ്ങളിലെ റോന്തുചുറ്റൽ രേഖകൾ പരിശോധിക്കുക",
        "right-unwatchedpages": "ശ്രദ്ധിക്കാത്ത താളുകളുടെ പട്ടിക കാണുക",
        "right-mergehistory": "താളുകളുടെ നാൾവഴികൾ ലയിപ്പിക്കുക",
        "rcshowhidepatr": "റോന്തു ചുറ്റിയ മാറ്റങ്ങൾ $1",
        "rcshowhidepatr-show": "പ്രദർശിപ്പിക്കുക",
        "rcshowhidepatr-hide": "മറയ്ക്കുക",
-       "rcshowhidemine": "à´\8eà´¨àµ\8dà´±àµ\86 à´¤à´¿à´°àµ\81à´¤àµ\8dതലàµ\81à´\95ൾ $1",
+       "rcshowhidemine": "എന്റെ തിരുത്തുകൾ $1",
        "rcshowhidemine-show": "പ്രദർശിപ്പിക്കുക",
        "rcshowhidemine-hide": "മറയ്ക്കുക",
        "rclinks": "കഴിഞ്ഞ $2 ദിവസങ്ങൾക്കുള്ളിലുണ്ടായ $1 മാറ്റങ്ങൾ പ്രദർശിപ്പിക്കുക<br />$3",
        "randomincategory": "വർഗ്ഗത്തിൽ നിന്ന് ക്രമരഹിതമായി എടുക്കുന്ന താൾ",
        "randomincategory-invalidcategory": "\"$1\" സാധുതയുള്ള വർഗ്ഗത്തിന്റെ പേരല്ല.",
        "randomincategory-nopages": "[[:Category:$1|വർഗ്ഗം:$1]] എന്നതിൽ താളുകളൊന്നുമില്ല.",
-       "randomincategory-selectcategory": "ഈ വർഗ്ഗത്തിൽ നിന്നും ഏതെങ്കിലും താൾ എടുക്കുക: $1 $2.",
-       "randomincategory-selectcategory-submit": "പോകൂ",
        "randomredirect": "ക്രമരഹിതമായ തിരിച്ചുവിടൽ",
        "randomredirect-nopages": "\"$1\" എന്ന നാമമേഖലയിൽ തിരിച്ചുവിടൽ താളുകളൊന്നുമില്ല.",
        "statistics": "സ്ഥിതിവിവരക്കണക്കുകൾ",
        "statistics-pages": "താളുകൾ",
        "statistics-pages-desc": "സം‌വാദത്താളുകൾ, തിരിച്ചുവിടലുകൾ തുടങ്ങിയവയടക്കം വിക്കിയിലെ എല്ലാ താളുകളും.",
        "statistics-files": "അപ്‌ലോഡ് ചെയ്തിട്ടുള്ള പ്രമാണങ്ങൾ",
-       "statistics-edits": "{{SITENAME}} à´¸à´\82â\80\8cà´°à´\82à´­à´¤àµ\8dതിനàµ\8dà´±àµ\86 à´¤àµ\81à´\9fà´\95àµ\8dà´\95à´\82 à´®àµ\81തലàµ\81à´³àµ\8dà´³ à´¤à´¿à´°àµ\81à´¤àµ\8dതലàµ\81à´\95ൾ",
-       "statistics-edits-average": "à´\92à´°àµ\81 à´¤à´¾à´³à´¿à´²àµ\86 à´¶à´°à´¾à´¶à´°à´¿ à´¤à´¿à´°àµ\81à´¤àµ\8dതലàµ\81à´\95ൾ",
+       "statistics-edits": "{{SITENAME}} സം‌രംഭത്തിന്റെ തുടക്കം മുതലുള്ള തിരുത്തുകൾ",
+       "statistics-edits-average": "ഒരു താളിലെ ശരാശരി തിരുത്തുകൾ",
        "statistics-views-total": "ആകെ സന്ദർശനങ്ങൾ",
        "statistics-views-total-desc": "നിലവില്ലാത്ത താളുകളിലും പ്രത്യേക താളുകളിലും ഉള്ള എടുത്തുനോക്കലുകൾ ഉൾപ്പെടുത്തിയിട്ടില്ല",
        "statistics-views-peredit": "ഓരോ തിരുത്തലിലും ഉള്ള എടുത്തുനോട്ടങ്ങൾ",
        "protectedtitles-summary": "സൃഷ്ടിക്കുന്നതിൽ നിന്നും സംരക്ഷിക്കപ്പെട്ടിട്ടുള്ള താളുകളുടെ പട്ടിക ഇവിടെ കാണാം. സംരക്ഷിക്കപ്പെട്ടിട്ടുള്ളതും എന്നാൽ നിലവിലുള്ളതുമായ താളുകൾക്കായി [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] കാണുക.",
        "protectedtitlesempty": "ഈ ചരങ്ങൾ ഉപയോഗിച്ചു തലക്കെട്ടുകൾ ഒന്നും തന്നെ സം‌രക്ഷിക്കപ്പെട്ടിട്ടില്ല.",
        "listusers": "ഉപയോക്താക്കളുടെ പട്ടിക",
-       "listusers-editsonly": "തിരàµ\81à´¤àµ\8dതലàµ\81à´\95ൾ à´\9aàµ\86à´¯àµ\8dതിà´\9fàµ\8dà´\9fàµ\81à´³àµ\8dà´³ à´\89പയàµ\8bà´\95àµ\8dതാà´\95àµ\8dà´\95à´³àµ\86 à´®à´¾à´¤àµ\8dà´°à´\82 à´\95ാണിà´\95àµ\8dà´\95àµ\81à´\95",
+       "listusers-editsonly": "തിരുത്തുകൾ ചെയ്തിട്ടുള്ള ഉപയോക്താക്കളെ മാത്രം കാണിക്കുക",
        "listusers-creationsort": "സൃഷ്ടിക്കപ്പെട്ട തീയതി അനുസരിച്ച് ക്രമീകരിക്കുക",
        "listusers-desc": "അവരോഹണക്രമത്തിൽ ആക്കുക",
        "usereditcount": "{{PLURAL:$1|ഒരു തിരുത്തൽ|$1 തിരുത്തലുകൾ}}",
        "delete-edit-reasonlist": "മായ്ക്കലിന്റെ കാരണം തിരുത്തുക",
        "delete-toobig": "ഈ താളിനു വളരെ വിപുലമായ തിരുത്തൽ ചരിത്രമുണ്ട്. $1 മേൽ {{PLURAL:$1|പതിപ്പുണ്ട്|പതിപ്പുകളുണ്ട്}}. ഇത്തരം താളുകൾ മായ്ക്കുന്നതു {{SITENAME}} സം‌രംഭത്തിന്റെ നിലനില്പ്പിനെ തന്നെ ബാധിക്കുമെന്നതിനാൽ ഈ താൾ മായ്ക്കുന്നതിനുള്ള അവകാശം പരിമിതപ്പെടുത്തിയിരിക്കുന്നു.",
        "delete-warning-toobig": "ഈ താളിനു വളരെ വിപുലമായ തിരുത്തൽ ചരിത്രമുണ്ട്. അതായത്, ഇതിനു് $1 മേൽ {{PLURAL:$1|പതിപ്പുണ്ട്|പതിപ്പുകളുണ്ട്}}. ഇത്തരം താളുകൾ മായ്ക്കുന്നതു {{SITENAME}} സം‌രംഭത്തിന്റെ ഡാറ്റാബേസ് ഓപ്പറേഷനെ ബാധിച്ചേക്കാം. അതിനാൽ വളരെ ശ്രദ്ധാപൂർവ്വം തുടർനടപടികളിലേക്കു നീങ്ങുക.",
-       "delete-cantedit": "ഈ താൾ തിരുത്തുവാൻ അനുമതി ഇല്ലാത്തതിനാൽ താങ്കൾക്ക് ഈ താൾ മായ്ക്കാനാവില്ല.",
        "deleting-backlinks-warning": "'''മുന്നറിയിപ്പ്:''' മറ്റു താളുകളിൽ നിന്നും [[Special:WhatLinksHere/{{FULLPAGENAME}}|താളിലേയ്ക്കുള്ള കണ്ണികൾ]] അല്ലെങ്കിൽ ഉൾപ്പെടുത്തിയിട്ടുള്ള താളുകൾ താങ്കൾ മായ്ക്കാൻ പോവുകയാണ്.",
-       "rollback": "തിരàµ\81à´¤àµ\8dതലàµ\81à´\95ൾ à´±àµ\8bൾബാà´\95àµ\8dà´\95àµ\8d à´\9aàµ\86à´¯àµ\8dà´¯àµ\81à´\95",
+       "rollback": "തിരുത്തുകൾ റോൾബാക്ക് ചെയ്യുക",
        "rollback_short": "റോൾബാക്ക്",
        "rollbacklink": "റോൾബാക്ക്",
        "rollbacklinkcount": "{{PLURAL:$1|ഒരു തിരുത്ത്|$1 തിരുത്തുകൾ}} മുൻപ്രാപനം ചെയ്യുക",
        "uctop": "(നിലവിലുള്ളത്)",
        "month": "മാസം:",
        "year": "വർഷം:",
-       "sp-contributions-newbies": "à´ªàµ\81തിയ à´\85à´\82à´\97à´\99àµ\8dà´\99ൾ à´¨à´\9fà´¤àµ\8dതിയ à´¤à´¿à´°àµ\81à´¤àµ\8dതലàµ\81à´\95ൾ à´®à´¾à´¤àµ\8dà´°à´\82",
+       "sp-contributions-newbies": "പുതിയ അംഗങ്ങൾ നടത്തിയ തിരുത്തുകൾ മാത്രം",
        "sp-contributions-newbies-sub": "പുതിയ ഉപയോക്താക്കൾ ചെയ്തവ",
        "sp-contributions-newbies-title": "പുതിയ അംഗത്വമെടുത്ത ഉപയോക്താക്കളുടെ സേവനങ്ങൾ",
        "sp-contributions-blocklog": "തടയൽ രേഖ",
        "import": "താളുകൾ ഇറക്കുമതി ചെയ്യുക",
        "importinterwiki": "അന്തർവിക്കി ഇറക്കുമതി",
        "import-interwiki-text": "വിക്കിയും ഇറക്കുമതി ചെയ്യാനുള്ള താളും തിരഞ്ഞെടുക്കുക.\nപുതുക്കൽ തീയതികളും തിരുത്തിയ ആളുകളുടെ പേരും സൂക്ഷിക്കപ്പെടും.\nഅന്തർവിക്കി ഇറക്കുമതിയുടെ എല്ലാ വിവരങ്ങളും [[Special:Log/import|ഇറക്കുമതി പ്രവർത്തനരേഖ]] എന്ന താളിൽ ശേഖരിക്കപ്പെടും.",
-       "import-interwiki-source": "മൂല വിക്കി/താൾ:",
        "import-interwiki-history": "ഈ താളിന്റെ എല്ലാ പൂർവ്വചരിത്രവും പകർത്തുക",
        "import-interwiki-templates": "എല്ലാ ഫലകങ്ങളും ഉൾപ്പെടുത്തുക",
        "import-interwiki-submit": "ഇറക്കുമതി",
index 5d4677f..9506ea8 100644 (file)
        "randomincategory": "Laman rawak dalam kategori",
        "randomincategory-invalidcategory": "\"$1\" bukan nama kategori yang sah.",
        "randomincategory-nopages": "Tiada halaman di [[:Category:$1]].",
-       "randomincategory-selectcategory": "Dapatkan halaman pilihan rawak dari kategori: $1 $2.",
-       "randomincategory-selectcategory-submit": "Pergi",
+       "randomincategory-category": "Kategori:",
+       "randomincategory-legend": "Laman rawak dalam kategori",
        "randomredirect": "Lencongan rawak",
        "randomredirect-nopages": "Tiada lencongan dalam ruang nama \"$1\".",
        "statistics": "Statistik",
        "exbeforeblank": "kandungan sebelum pengosongan ialah: '$1'",
        "delete-confirm": "Hapus \"$1\"",
        "delete-legend": "Hapuskan",
-       "historywarning": "'''Amaran:''' Laman yang ingin anda hapuskan mengandungi sejarah dengan kira-kira $1 {{PLURAL:$1|semakan|semakan}}:",
+       "historywarning": "<strong>Amaran:</strong> Laman yang ingin anda hapuskan mempunyai sejarah dengan $1 semakan:",
        "confirmdeletetext": "Anda sudah hendak menghapuskan sebuah laman berserta semua sejarahnya.\nSila sahkan bahawa anda memang hendak berbuat demikian, anda faham akan\nakibatnya, dan perbuatan anda mematuhi [[{{MediaWiki:Policy-url}}|dasar kami]].",
        "actioncomplete": "Tindakan berjaya",
        "actionfailed": "Tindakan gagal",
        "delete-edit-reasonlist": "Ubah sebab-sebab hapus",
        "delete-toobig": "Laman ini mempunyai sejarah yang besar, iaitu melebihi $1 jumlah semakan. Oleh itu, laman ini dilindungi daripada dihapuskan untuk mengelak kerosakan di {{SITENAME}} yang tidak disengajakan.",
        "delete-warning-toobig": "Laman ini mempunyai sejarah yang besar, iaitu melebihi $1 jumlah semakan. Menghapuskannya boleh mengganggu perjalanan pangkalan data {{SITENAME}}. Sila berhati-hati.",
-       "delete-cantedit": "Anda tidak boleh menghapuskan laman ini kerana anda tiada kebenaran untuk menyuntingkannya.",
+       "deleteprotected": "Anda tidak boleh menghapuskan laman ini kerana ia telah dilindungi.",
        "deleting-backlinks-warning": "'''Amaran:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Terdapat laman lain]] yang berpaut atau bertransklusi dengan laman yang hendak anda hapus ini.",
        "rollback": "Undurkan suntingan.",
        "rollback_short": "Undur",
        "import": "Import laman",
        "importinterwiki": "Import transwiki",
        "import-interwiki-text": "Sila pilih wiki dan tajuk laman yang ingin diimport.\nSemua tarikh semakan dan nama penyunting akan dikekalkan.\nSemua tindakan import transwiki dicatatkan dalam [[Special:Log/import|log import]].",
-       "import-interwiki-source": "Sumber wiki/halaman:",
+       "import-interwiki-sourcewiki": "Wiki sumber:",
+       "import-interwiki-sourcepage": "Laman sumber:",
        "import-interwiki-history": "Salin semua versi sejarah bagi laman ini",
        "import-interwiki-templates": "Sertakan semua templat",
        "import-interwiki-submit": "Import",
index 70704c7..322968a 100644 (file)
        "collapsible-expand": "Келейгавтомс",
        "thisisdeleted": "$1-нть ваномс эли велявтомс мекев?",
        "viewdeleted": "Ванномс $1?",
-       "restorelink": "{{PLURAL:$1|1=нардазь вейке витнема-петнема|нардазь $1 витнемат-петнемат}}",
+       "restorelink": "{{PLURAL:$1|нардазь вейке витнема-петнема|нардазь $1 витнемат-петнемат}}",
        "feedlinks": "Максовкс:",
        "feed-invalid": "А маштови сёрмадстома каналонть сортозо.",
        "site-rss-feed": "RSS-нть максовкс $1 -нть кисэ",
        "login-userblocked": "Те теицясь аравтозь саймас. Совамонзо а мерить.",
        "wrongpassword": "Аволь истя сёрмадык совамо валот. Варчыка одов.",
        "wrongpasswordempty": "Салавань валот кадовсь апак сёрмадо. Сёрмадыка одов.",
-       "passwordtooshort": "Совамо Ð²Ð°Ð»Ð¾Ð½Ñ\82Ñ\8c ÐºÑ\83валмозо  {{PLURAL:$1|1=улезэ 1 тешкс| улезт $1 тешкст}}, аволь седе аламо.",
+       "passwordtooshort": "СалававалонÑ\82Ñ\8c ÐºÑ\83валмозо  {{PLURAL:$1|улезэ 1 тешкс| улезт $1 тешкст}}, аволь седе аламо.",
        "password-name-match": "Салава валонтень эряви явовомс теицянь леметь эйстэ.",
        "password-login-forbidden": "Те теицянь лемесь ды салававалось а мерить нолдамс тевс.",
        "mailmypassword": "Одов ладямс салававал",
        "passwordremindertitle": "{{SITENAME}} туртов акуватень од совамо вал",
-       "passwordremindertext": "Кие-бути (кода неяви тон IP-тешксстэнть $1) вешсь,<br />\nкедьстэнек кучомс теицянь од совамо вал {{SITENAME}} ($4) сайтс совамга.<br />\nТеицянтень \"$2\" кучозь нурькине шкань совамо вал, конась  ней \"$3\".<br />\nБути те тон ульнить, сави ней совамс ды кочкамс од совамо вал эстеть.<br />\nНурькине шкань совамо валот нолдави тевс {{PLURAL:$5|1=вейке чи|$5 чить}}.\n\nБути аволь тон вешицясь, эли мелезэть ледстик совамо валонть, иля яво мель те пачтямнэнтень. Нолдык тевс мельсэ аштицянть - мельс ледстязенть.",
+       "passwordremindertext": "Кие-бути (кода неяви тон, IP-тешксстэнть $1) вешсь,<br />\nкедьстэнек кучомс теицянь од салававал {{SITENAME}} ($4) сайтс совамга.<br />\nТеицянтень \"$2\" кучозь нурькине шкань салававал, конась  ней \"$3\".<br />\nБути те тон ульнить, сави ней совамс ды кочкамс од салававал эстеть.<br />\nНурькине шкань салававалот нолдави тевс {{PLURAL:$5|вейке чи|$5 чить}}.\n\nБути аволь тон вешицяселить, эли мелезэть ледстик салававалонть, иля яво мель те пачтямнэнтень. Нолдык тевс мельсэ аштицянть - мельс ледстязенть.",
        "noemail": "\"$1\" теицянть арась е-сёрмапаргозо.",
        "noemailcreate": "Эряви максомс е-сёрмапарго, конась маштови",
        "passwordsent": "$1 -нь е-сёрмань адресэнтень кучозь од совамо вал.<br />\nИнеськеть, кодак валось пачкоди, совака одов.",
        "eauthentsent": "Электрононь сёрмапаргозот кучозь кемекстамонь е-сёрмине.<br /> Сонзэ эйсэ сёрмадозь мезе кода теемс. Ансяк седе мейле, зярдо невтик, сёрмапаргось алкукс эсеть, карматано кучомо лия сёрмат.",
        "mailerror": "Е-сёрма кучомсто ильведькс: $1",
-       "acct_creation_throttle_hit": "Те Ð²Ð¸ÐºÐ¸Ñ\81Ñ\8d Ñ\82онÑ\8c IP Ð°Ð´Ñ\80еÑ\81Ñ\81Ñ\82Ñ\8dÑ\82Ñ\8c Ñ\81оваÑ\81Ñ\82Ñ\8c Ñ\82еиÑ\86Ñ\8fÑ\82, ÐºÐ¾Ð½Ð°Ñ\82 Ñ\82еиÑ\81Ñ\82Ñ\8c {{PLURAL:$1|1=1 Ñ\81Ñ\91Ñ\80мадовкÑ\81|$1 Ñ\81Ñ\91Ñ\80мадовкÑ\81Ñ\82}} Ð¼ÐµÐµÐ»Ñ\8cÑ\81е Ñ\87Ñ\8bнÑ\82Ñ\8c Ð¿ÐµÑ\80Ñ\82Ñ\8c, Ñ\81еде Ð»Ð°Ð¼Ð¾ Ð¿Ð¾Ð»Ð°Ð²Ñ\82омаÑ\82 Ð° Ð¼ÐµÑ\80иÑ\82Ñ\8c Ñ\82еемÑ\81 Ð¸Ñ\81Ñ\82Ñ\8f Ð·Ð½Ñ\8fÑ\80онÑ\8c Ñ\88канÑ\8c Ð¿ÐµÑ\80Ñ\82Ñ\8c.\nТенÑ\8c ÐºÐ¸Ñ\81Ñ\8d, Ñ\82е   IP Ð°Ð´Ñ\80еÑ\81Ñ\8dнÑ\82Ñ\8c ÐºÐ¾Ñ\80Ñ\8fÑ\81 Ñ\81еде Ñ\82ов Ð° Ð¼Ð°Ñ\88Ñ\82ови Ñ\82еемÑ\81\88камÑ\81 Ð¾Ð´ Ñ\81Ñ\91Ñ\80мадовкÑ\81т, зярс.",
+       "acct_creation_throttle_hit": "Те Ð²Ð¸ÐºÐ¸Ñ\81Ñ\8d Ñ\82онÑ\8c IP Ð°Ð´Ñ\80еÑ\81Ñ\81Ñ\82Ñ\8dÑ\82Ñ\8c Ñ\81оваÑ\81Ñ\82Ñ\8c Ñ\82еиÑ\86Ñ\8fÑ\82, ÐºÐ¾Ð½Ð°Ñ\82 Ñ\82ейÑ\81Ñ\82Ñ\8c {{PLURAL:$1|1 Ñ\81овамо Ñ\82аÑ\80ка|$1 Ñ\81овамо Ñ\82аÑ\80каÑ\82}} Ð¼ÐµÐµÐ»Ñ\8cÑ\86е Ñ\87инÑ\82Ñ\8c Ð¿ÐµÑ\80Ñ\82Ñ\8c, Ñ\81еде Ð»Ð°Ð¼Ð¾ Ð¿Ð¾Ð»Ð°Ð²Ñ\82омаÑ\82 Ð° Ð¼ÐµÑ\80иÑ\82Ñ\8c Ñ\82еемÑ\81 Ð¸Ñ\81Ñ\82Ñ\8fнÑ\8c Ð·Ð½Ñ\8fÑ\80онÑ\8c Ñ\88канÑ\8c Ð¿ÐµÑ\80Ñ\82Ñ\8c.\nТенÑ\8c ÐºÐ¸Ñ\81Ñ\8d, Ñ\82е   IP Ð°Ð´Ñ\80еÑ\81Ñ\8dнÑ\82Ñ\8c ÐºÐ¾Ñ\80Ñ\8fÑ\81 Ñ\81еде Ñ\82ов Ð° Ð¼Ð°Ñ\88Ñ\82ови Ñ\82еемÑ\81\88камÑ\81 Ð¾Ð´ Ñ\81овамо Ñ\82аÑ\80кат, зярс.",
        "emailauthenticated": "Е-сёрмапаргот кемекстазель $2 чистэ $3 цяссто.",
        "emailconfirmlink": "Кемекстык е-сёрмапаргот",
        "accountcreated": "Совамо таркась теезь",
        "loginlanguagelabel": "Кель: $1",
        "user-mail-no-addy": "Терявтыть кучомс е-сёрма е-сёрмапарговтомо.",
        "changepassword": "Салавань валонь полавтома",
-       "resetpass_announce": "СовавиÑ\82Ñ\8c Ð½Ñ\83Ñ\80Ñ\8cка Ñ\88канÑ\8c Ñ\81алававалÑ\81о, ÐºÐ¾Ð½Ð° ÐºÑ\83Ñ\87озелÑ\8c ÐºÑ\83лÑ\8fпаÑ\80гозоÑ\82. Ð¡Ð¾Ð²Ð°Ð¼Ð¾Ñ\82 Ð¿Ñ\80Ñ\8fдомга Ñ\8dÑ\80Ñ\8fви Ð¿Ñ\83Ñ\82омÑ\81 Ð¾Ð´ Ñ\81алававал Ð²Ð°Ð½Ð° Ñ\82езÑ\8dенÑ\8c:",
+       "resetpass_announce": "СовамоÑ\82 Ñ\82опавÑ\82омга Ñ\8dÑ\80Ñ\8fви Ð¿Ñ\83Ñ\82омÑ\81 Ð¾Ð´ Ñ\81алававал.",
        "resetpass_header": "Полавтомс совамо валот",
        "oldpassword": "Ташто совамо валот:",
        "newpassword": "Од совамо валот:",
        "copyrightwarning": "Инескеть кирдть мельсэ {{SITENAME}}-сэ весе путовкстнэнь, лововить нолдазекс ало $2  конёвонть коряс (вант $1 педе пес). Арась мелеть витневтемс-петневтемс сёрмадовксот педе пес, иляк сестэ путо сонзэ тезэнь.<br />\nИстяжо тезэнь материалонь максомсот, кемекстат тон тонсь сёрмадык сонзэ, али саик сонзэ вейсэнь ёнксто али олячинь порталсто.\n'''ИЛЯ МАКСО ВАНСТОНЬ ВИДЕЧИСЭ ЛОМАНЕНЬ ВАЖОДЕМАНТЬ АПАК КЕВКСТНЕ!'''",
        "titleprotectedwarning": "'''ВАНОК:  Те лопась сёлгозь, сонзэ шкамга-теемга [[Special:ListGroupRights|башка видечыть]] эрявить.'''\nЖурналонь меельсе сёрмадовксось максозь ало, эрявиндеряй сонзэ ваномс.",
        "templatesused": "Те лопасонть тевс нолдазь {{PLURAL:$1|лопапарцун|лопапарцунт}}:",
-       "templatesusedpreview": "Те икелькс вановкссонть тевс нолдазь  {{PLURAL:$1|1=лопа парцун|лопа парцунт}}:",
-       "templatesusedsection": "Те пелькссэнть тевс нолдазь {{PLURAL:$1|1=лопа парцунось|лопа парцунтнэ}}:",
+       "templatesusedpreview": "Те икелькс вановкссонть тевс нолдазь  {{PLURAL:$1|лопа парцун|лопа парцунт}}:",
+       "templatesusedsection": "Те пелькссэнть тевс нолдазь {{PLURAL:$1|лопа парцунось|лопа парцунтнэ}}:",
        "template-protected": "(ванстозь)",
        "template-semiprotected": "(пельс ванстозь)",
        "hiddencategories": "Те лопась совавтови {{PLURAL:$1|кекшень 1 категорияс|кекшень $1 категорияс}}:",
        "nocreatetext": "Те {{SITENAME}} лопасонть пирязь од лопань теемась. Тонь ули мелеть велявтомс удалов ды  питнемензе-витнемензе улиця лопанть, али [[Special:UserLogin|совамс али теемс од совама]].",
        "nocreate-loggedin": "Тонеть а мерить теемс-шкамс од лопат.",
-       "permissionserrorstext": "ТонеÑ\82Ñ\8c Ð° Ð¼ÐµÑ\80иÑ\82Ñ\8c Ñ\82еемÑ\81 Ñ\82енÑ\8c, Ð²Ð°Ð½Ð° {{PLURAL:$1|1=Ñ\82Ñ\83вÑ\82алоÑ\81Ñ\8c\82Ñ\83вÑ\82алÑ\82нÑ\8d}}:",
+       "permissionserrorstext": "ТонеÑ\82Ñ\8c Ð° Ð¼ÐµÑ\80еви Ñ\82еемÑ\81 Ñ\82енÑ\8c, Ð²Ð°Ð½Ð° {{PLURAL:$1|Ñ\82Ñ\83вÑ\82алонÑ\82Ñ\8c\82Ñ\83вÑ\82алÑ\82нÑ\8dнÑ\8c}} ÐºÐ¸Ñ\81Ñ\8d:",
        "permissionserrorstext-withaction": "Тонеть а мерить теемс $2, {{PLURAL:$1|1=тувталось|тувталтнэ}} вана:",
        "recreate-moveddeleted-warn": "'''Ванок: Вельмевтят лопа, кона нардазель.'''\n\nВасня арьсек, эряви - а эряви полалемс ды витнемс-петнемс те лопанть.\nТе лопанть нардамодо ды печтевтемадо путовкстнэ одов максозь тесэ, улезт шожда ванстнемс:",
        "moveddeleted-notice": "Те лопась нардазь.\nЛопанть нардамодо сёрмадовксось максозь вана ало.",
        "currentrev": "Тевате лиякстомтома",
        "currentrev-asof": "Неень верзиясь истямо шкань $1",
        "revisionasof": "$1-це версиясь",
-       "revision-info": "$1 -нь лиякстомтома, конань теизе $2",
+       "revision-info": "$1 -нь лиякстомтома, конань теизе {{GENDER:$6|$2}}$7",
        "previousrevision": "←Седе икелень лиякстомтома",
        "nextrevision": "Седе од вановкс→",
        "currentrevisionlink": "Тевате лиякстомтома",
        "history-show-deleted": "Ансяк нардазь",
        "histfirst": "весемеде умонь",
        "histlast": "Меельце",
-       "historysize": "({{PLURAL:$1|1=1 байт|$1 байтт}})",
+       "historysize": "({{PLURAL:$1|1 байт|$1 байтт}})",
        "historyempty": "(чаво)",
        "history-feed-title": "Лиякстомтомань тевде",
        "history-feed-description": "Викинь тевате лопанть лиякстомтомань тевдензэ",
        "revdelete-show-file-confirm": "Алкукс ули мелеть ваномс «<nowiki>$1</nowiki>» керьмазонть нардазь ревизиянзо, конась саезь $2-нть эйстэ ды ашти тесэ $3?",
        "revdelete-show-file-submit": "Ули",
        "revdelete-legend": "Аравтомс неявомачынь петне",
-       "revdelete-hide-text": "Ð\9aекÑ\88емÑ\81 Ð»Ð¸Ñ\8fкÑ\81Ñ\82омÑ\82оманÑ\8c Ñ\82екÑ\81Ñ\82Ñ\8dнÑ\82ь",
+       "revdelete-hide-text": "Ð\9bиÑ\8fкÑ\81Ñ\82омÑ\82оманÑ\8c Ñ\82екÑ\81Ñ\82Ñ\8dÑ\81ь",
        "revdelete-hide-image": "Кекшемс мезе файлатнесэ",
        "revdelete-hide-name": "Кекшемс тев тееманть ды норовамо тарканзо",
-       "revdelete-hide-comment": "Ð\9aекÑ\88емÑ\81 Ð²Ð¸Ñ\82немадо-пеÑ\82немадо Ð°Ñ\80Ñ\81емаÑ\82ненÑ\8c",
+       "revdelete-hide-comment": "Ð\92иÑ\82немÑ\81-пеÑ\82немÑ\81 Ñ\81Ñ\91Ñ\80мадовкÑ\81онÑ\82Ñ\8c Ð·Ñ\8dмензÑ\8d.",
        "revdelete-hide-user": "Кекшемс витницянть-петницянть теиця лемензэ/IP-нзэ",
        "revdelete-radio-same": "(иляк лиякстомто)",
        "revdelete-log": "Тувталось:",
        "filemissing": "Файлась а муеви",
        "thumbnail_error": "Миниатюрань теемстэ ильведькс: $1",
        "import": "Таргамс лопатнень",
-       "import-interwiki-source": "Вики лисьмапрякс/лопась:",
        "import-interwiki-templates": "Совавтомс весе лопа парцунтнэнь",
        "import-interwiki-submit": "Таргамс",
        "import-interwiki-namespace": "Норовазь лемпотмось:",
index ea9c9dc..c7f6ca0 100644 (file)
        "permalink": "Jonta permanente",
        "print": "Stampà",
        "view": "Vere",
+       "view-foreign": "Vide ncopp'a $1",
        "edit": "Càgna",
+       "edit-local": "Càgna descrizione lucale",
        "create": "Cria",
+       "create-local": "Azzecca descrizione lucale",
        "editthispage": "Càgna chesta paggena",
        "create-this-page": "Cria sta paggena",
        "delete": "Scancèlla",
        "deletethispage": "Scancèlla chésta paggena",
        "undeletethispage": "Ripristina chista paggena",
+       "undelete_short": "Arremedia {{PLURAL:$1|na verziona|$1 vverziune}}",
+       "viewdeleted_short": "Vide {{PLURAL:$1|nu cagnamiénto scancellato|$1 cagnamiénte scancellate}}",
        "protect": "Prutegge",
        "protect_change": "càgna",
        "protectthispage": "Ferma chesta paggena",
        "redirectedfrom": "(Redirect 'a $1)",
        "redirectpagesub": "Paggena 'e redirect",
        "lastmodifiedat": "Urdema cagnamiénto pe' a paggena: $2, $1.",
-       "viewcount": "Chesta paggena è stata lètta {{PLURAL:$1|una vòta|$1 vòte}}.",
+       "viewcount": "Chesta paggena è stata liggiùta {{PLURAL:$1|una vòta|$1 vòte}}.",
        "protectedpage": "Paggena prutetta",
        "jumpto": "Vaje a:",
        "jumptonavigation": "navigazione",
        "jumptosearch": "truova",
+       "view-pool-error": "Te cercammo scusa, 'e servers téneno troppo carico mo'.\nTroppe utente stanno cercanno 'e veré sta paggena.\nPe' piacere, aspetta nu poco primma 'e turnà a caricà sta paggena.\n\n$1",
+       "generic-pool-error": "Te cercammo scusa, 'e servers téneno troppo carico mo'.\nTroppe utente stanno cercanno 'e veré sta risorsa.\nPe' piacere, aspetta nu poco primma 'e turnà a caricà sta risorsa.",
+       "pool-timeout": "Tiempo pe' s'aspettà ô blocco",
+       "pool-queuefull": "A córa 'e fatiche è chiena",
        "pool-errorunknown": "Errore scanusciuto",
+       "pool-servererror": "'O servizio contatore d''e fatiche nun è a disposizióne ($1).",
        "aboutsite": "'Nfrummazione ncòpp'a {{SITENAME}}",
        "aboutpage": "Project:'Nfrummazione",
        "copyright": "Cuntenute suggiette a licienza 'e auso $1 se nun fuje ritto atro.",
        "privacy": "'Nformazzione ppe a privacy",
        "privacypage": "Project:'Nfrummazione ncopp'â privacy",
        "badaccess": "Nun haje 'e premmesse abbastante.",
+       "badaccess-group0": "Nun t'è permesso 'a ffà l'azione richiesta.",
+       "badaccess-groups": "L'azione ch'ê richiesto è permessa sulamente all'utente ca ce stanno dint'a {{PLURAL:$2|'o gruppo|uno d' 'e gruppe}}: $1.",
+       "versionrequired": "Ce vò 'a verziona $1 'e MediaWiki",
+       "versionrequiredtext": "Pe' usà sta paggena ce vò 'a verziona $1 'e MediaWiki. Vide [[Special:Version|'a paggena 'e verzione]].",
        "ok": "OK",
        "retrievedfrom": "Estratto 'e \"$1\"",
        "youhavenewmessages": "Haje $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Tiene}} $1 'a {{PLURAL:$3|n'atu utente|$3 utente}} ($2).",
+       "youhavenewmessagesmanyusers": "Tiene $1 'a tant'utente ($2).",
+       "newmessageslinkplural": "{{PLURAL:$1|na mmasciata nova|999=mmasciate nnove}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|urdemo cagnamiento|999=urdeme cagnamiente}}",
        "youhavenewmessagesmulti": "Tiene nuove mmasciate $1",
        "editsection": "càgna",
        "editold": "càgna",
        "toc": "Énnece",
        "showtoc": "faje vedé",
        "hidetoc": "annascunne",
+       "collapsible-collapse": "Annascunne",
        "collapsible-expand": "faje vede",
+       "confirmable-confirm": "Sì {{GENDER:$1|sicuro|sicura}}?",
+       "confirmable-yes": "Sì",
+       "confirmable-no": "No",
        "thisisdeleted": "Vere o ripristina $1?",
        "viewdeleted": "Vire $1?",
+       "restorelink": "{{PLURAL:$1|nu cagnamiénto scancellato|$1 cagnamiénte scancellate}}",
        "feedlinks": "Feed:",
+       "feed-invalid": "'O tipo 'e sottoscrizione p' 'o feed nun è buono",
+       "feed-unavailable": "Nun ce stanno 'e feed sinnecaziona",
+       "site-rss-feed": "Feed 'e sinnecaziona RSS 'e $1",
        "site-atom-feed": "Feed Atom 'e $1",
+       "page-rss-feed": "Feed RSS pe' \"$1\"",
        "page-atom-feed": "Feed Atom ppe \"$1\"",
        "red-link-title": "$1 ('a paggena nun esiste)",
+       "sort-descending": "Urdinamento dicriscente",
+       "sort-ascending": "Urdinamento criscente",
        "nstab-main": "Articulo",
        "nstab-user": "Paggena utente",
+       "nstab-media": "File multimediale",
        "nstab-special": "Paggena speciale",
        "nstab-project": "Paggena 'e servizio",
        "nstab-image": "Fiùra",
        "nstab-template": "Modello",
        "nstab-help": "Ajùto",
        "nstab-category": "Categurìa",
+       "nosuchaction": "Operazione nun ricanusciuta",
+       "nosuchactiontext": "L'azione specificata dint'a l'URL nun è bbona.\nPuò darse ca l'URL fosse stata digitata 'n modo sbagliàto o che fosse stato seguito nu link sbagliàto.\nChesto putesse innecà pùre nu bug dint'a {{SITENAME}}.",
+       "nosuchspecialpage": "Chista paggena speciale nun ce sta",
+       "nospecialpagetext": "<strong>'A paggena speciale richiesta nun è ricanusciuta.</strong>\n\nL'alenco d' 'e paggene valide spiciale 'o truove int'a [[Special:SpecialPages|l'Elenco d' 'e paggine spiciale]].",
+       "error": "Sbaglio",
+       "databaseerror": "Sbaglio dint'a database",
+       "databaseerror-text": "C'è stato nu sbaglio dint'a na richiesta â database.\nPuò darse ca ce sta nu bug int' 'o software",
+       "databaseerror-textcl": "C'è stato nu sbaglio dint'a na richiesta â database.",
+       "databaseerror-query": "Richiesta: $1",
+       "databaseerror-function": "Funzione: $1",
+       "databaseerror-error": "Sbaglio: $1",
+       "laggedslavemode": "'''Attenziò:''' 'a paggena putesse nun fà vedé ll'aggiornamente cchiù ricente.",
+       "readonly": "Database bloccato",
+       "enterlockreason": "Miette 'o mutivo 'e blocco, nzieme a 'o mumento quanno se penza ca 'o blocco se sarrà fernuto",
+       "readonlytext": "Mo' mo' 'o database è bloccato e nun se ponno azzeccà cagnamiente o pàggene. 'O blocco è normalmente azzeccato a n'operazione semprice 'e manutenzione, e quanno s'è fernuta allora 'a paggena addeventa nurmale.\n\nL'ammenistratore d' 'o sistema ch'a fatto 'o blocco ce dà sta spiegazione: $1",
+       "missing-article": "'O database nun trova 'o testo 'e na paggena c'adda stà, c' 'o nomme \"$1\" $2.\n\nNormalmente, chesto succere quanno s'è richiamato, a partire d' 'a cronologgia o pùre a 'o confronto tra verzione, nu cullegamento a na paggena scancellata, a nu confronto tra verziune inesistente o a nu confronto tra verziune re-pulezzate d' 'a cronologgia.\n\n'N caso cuntrario, può darse pure nu sbaglio dint'o software.\nPer piacere, mannate na mmasciata ccà all'[[Special:ListUsers/sysop|amministratore]] annummenanno l'URL 'n quistiona.",
        "missingarticle-rev": "(nummero 'e verzione: $1)",
+       "missingarticle-diff": "(Diff: $1, $2)",
+       "readonly_lag": "'O database s'è bloccato automaticamente pe' tramente ca 'e servers 'e database schiave sincronizzano c' 'o server masto.",
        "internalerror": "Errore 'nterno",
        "internalerror_info": "Errore 'nterno: $1",
+       "filecopyerror": "Nun se può copiare 'o file \"$1\" into \"$2\".",
+       "filerenameerror": "Nun se può rinnummenare 'o file \"$1\" into \"$2\".",
        "filedeleteerror": "Nun se pô scancellà 'o file \"$1\"",
+       "directorycreateerror": "Nun se può crià 'a cartella \"$1\".",
+       "filenotfound": "Nun se può truvà 'o file \"$1\".",
+       "unexpected": "Valore imprevisto: \"$1\"=\"$2\".",
+       "formerror": "Sbàglio: nun se può mannà 'o modulo",
+       "badarticleerror": "Chest'azione nun se può fà int'a sta paggena.",
        "cannotdelete": "Nun è possibbele scassà 'a paggena o 'a fiura $1 addamannata. Putria éssere stato già scancellato.",
+       "cannotdelete-title": "Nun se può scancellà 'a paggena \"$1\"",
+       "delete-hook-aborted": "'O scancellamiento è stato annullato 'a 'o «hook».\nNun dette spiegazione nisciuna.",
+       "no-null-revision": "Nun se può crià na nnova revisione nulla p' 'a paggena \"$1\"",
        "badtitle": "'O nnomme nun è jùsto",
+       "badtitletext": "'O titolo d' 'a paggena richiesta è abbacante, sbagliato o pure nun è linkato buono a 'o titolo inter-lengua o inter-wiki.\nPutesse pure tené uno o cchiù carattere ca nun se ponno usà dint'e titule.",
+       "perfcached": "Può darse, ch' 'e ddate ca stanno ccà (\"ncache\") nun song'agghiurnate. Nu massimo 'e {{PLURAL:$1|unu risultato è|$1 risultate songhe}} a disposizione 'n \"cache\".",
+       "perfcachedts": "'E ddate ca stanno ccà songhe asciute 'a na copia \"cache\" d' 'o database, 'o cuale tene l'úrdemo agghiurnamento 'o $1. Nu massimo 'e {{PLURAL:$4|unu risultato è|$4 risultate songhe}} a disposizione dint'a \"cache\".",
+       "querypage-no-updates": "Ll'agghiurnamente pe' sta paggena songo sospese mmo'. 'E ddate cuntenute ccà nun s'agghiurnarranno.",
        "viewsource": "Vere sorgente",
        "viewsource-title": "Vere surgente 'e $1",
+       "actionthrottled": "Azione ritardata",
+       "actionthrottledtext": "Comme misura anti-spam, sì lemmetato 'a ffà st'azione troppe vote dint'a nu curto spazio 'e tiempo, e mò stu lèmmeto è stato superato.\nPe' piacere prova n'ata vota dint'a cocche minuto.",
+       "protectedpagetext": "Sta paggena s'è prutetta pe' ne bloccà 'a mudifeca o n'ata azione.",
+       "viewsourcetext": "Putisse vedé e copià 'o codece surgiva 'e sta paggena:",
+       "viewyourtext": "Putisse vedé e copià 'o codice surgiva d' 'e <strong>cagnamiénte tuoje</strong> a sta paggena:",
+       "protectedinterface": "Sta paggena nce appruviggióna 'e n'interfaccia testo p' 'o software dint'a sta wiki, e s'è prutetta pe' nce scanzà 'e cocch'abbuso.\nSi se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere usa [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
+       "editinginterface": "'''Attenziò:''' 'O testo 'e sta paggena ffà parte 'e ll'interfaccia utente d' 'o sito.\nTutt' 'e cagnamiénte fatte a sta paggena cumpareno dint' 'e mmasciate 'e ll'interfaccia veduta 'a tutte ll'utente dint'a sta wiki.\nSi se buò azzeccà o cagnà traduzzione ncopp'a tutte 'e wiki, pe piacere usa [//translatewiki.net/ translatewiki.net], 'o pruggetto Mediawiki p'a localizzaziona dint'a l'ate llengue",
+       "cascadeprotected": "Sta paggena è stata prutetta 'a 'o cangamento pecché sta dint'a {{PLURAL:$1|sta paggena, che è prutetta|sti paggene, che songo prutette}} quann' 'a l'ozione \"ricurziva\" è attiva:\n$2",
+       "namespaceprotected": "Nun hè permesso a cagnà 'e paggene dint'a stu namespace '''$1'''.",
+       "customcssprotected": "Nun t'è permesso 'a cagnà sta paggena CSS, pecché cuntene 'e mpustaziune perzunale 'e n'at'utente.",
+       "customjsprotected": "Nun t'è permesso 'a cagnà sta paggena JavaScript, pecché cuntene 'e mpustaziune perzunale 'e n'at'utente.",
+       "mycustomcssprotected": "Nun t'è permesso 'a cagnà sta paggena CSS.",
+       "mycustomjsprotected": "Nun t'è permesso 'a cagnà sta paggena JavaScript.",
+       "myprivateinfoprotected": "Nun t'è permesso a cagnà 'a nfurmaziona privata toja.",
+       "mypreferencesprotected": "Nun t'è permesso 'a cagnà 'e preferenze tuoje.",
+       "ns-specialprotected": "'E paggene spiciale nun se ponno cagnà.",
+       "titleprotected": "'A criazione 'e stu titolo è stata bloccata 'a ll'utente [[User:$1|$1]].\n'A ragione è chesta: ''$2''.",
+       "filereadonlyerror": "Nun se può cagnà 'o file \"$1\" pecché 'o repository 'e file \"$2\" sta 'n modo sulo-lettura.\n\nL'ammenistratore che l'ha bloccato ha dato sta ragione: \"$3\".",
+       "invalidtitle-knownnamespace": "Titolo nun buono c' 'o namespace \"$2\" e testo \"$3\"",
+       "invalidtitle-unknownnamespace": "Titolo nun buono c' 'o namespace scanusciuto \"$1\" e testo \"$2\"",
        "exception-nologin": "Acciesso nun affettuato",
+       "exception-nologin-text": "Pe' piacere fa ll'accieso pe putè accedere a sta paggena o azione.",
+       "exception-nologin-text-manual": "Pe' piacere $1 pe putè trasì dint'a sta paggena o azione.",
+       "virus-badscanner": "Sbaglio 'e configurazione: antivirus scanusciuto: ''$1''",
+       "virus-scanfailed": "scanziona fallita (codece $1)",
+       "virus-unknownscanner": "antivirus scanusciuto:",
        "logouttext": "'''Site asciùte.'''\n\nNota ca arcune paggene potrebbero cuntinuà ad apparire comme se 'o logout nun fosse avvenuto finché nun venne pulita 'a cache d\"o proprio browser.",
        "welcomeuser": "Bemmenuto, $1!",
+       "welcomecreation-msg": "'O cunto tuo è stato criato.\nMo' può cagnà 'e [[Special:Preferences|preferenze 'e {{SITENAME}}]].",
        "yourname": "Nomme utente",
        "userlogin-yourname": "Nomme utente",
        "userlogin-yourname-ph": "'Nserisce 'o tujo nomme utente",
        "createacct-yourpasswordagain-ph": "'Nserisce 'e novo 'a password",
        "remembermypassword": "Allicuordate d\"a password (for a maximum of $1 {{PLURAL:$1|day|days}})",
        "userlogin-remembermypassword": "Mantienime cullegato",
+       "userlogin-signwithsecure": "Usa na conessione sicura",
        "yourdomainname": "Spiecà 'o dumminio",
+       "password-change-forbidden": "Nun se ponno cagnà 'e password ncopp'a sta wiki.",
+       "externaldberror": "Ce sta n'errore ch' 'e server d'autenticazione esterno, o pure nun t'è permesso accedere all'aghiurnamento d' 'o cunto sterno tujo.",
        "login": "Tràse",
        "nav-login-createaccount": "Tràse o cria n'acciesso novo",
        "userlogin": "Tràse o cria n'acciesso novo",
        "userlogout": "Jèsce",
        "notloggedin": "Acciesso nun affettuato",
        "userlogin-noaccount": "Nun haje ancora n'acciesso?",
+       "userlogin-joinproject": "Fà 'o riggistro ncopp'a {{SITENAME}}",
        "nologin": "Nun haje ancora n'acciesso? '''$1'''.",
        "nologinlink": "Crialo mmo",
        "createaccount": "Cria nu cunto novo",
        "gotaccount": "Tiene già nu cunto? '''$1'''.",
        "gotaccountlink": "Tràse",
        "userlogin-resetlink": "Haje dimenticato 'e toje date 'e acciesso?",
+       "userlogin-resetpassword-link": "Te sì scurdat' 'a password?",
+       "userlogin-helplink2": "Aiuto cu l'accieso",
+       "userlogin-loggedin": "Sì già connesso comme {{GENDER:$1|$1}}.\nUsa 'o modulo ccà abbascio pe trasì com'a n'atu utente.",
+       "userlogin-createanother": "Cria n'at'account",
+       "createacct-emailrequired": "Indirizzo email",
+       "createacct-emailoptional": "Indirizzo 'e posta elettronica (ozzionale)",
+       "createacct-email-ph": "Scrive 'o nderizzo mail tuo",
+       "createacct-another-email-ph": "Scrive nderizzo mail",
+       "createaccountmail": "Usa na password qualunque temporanea e manna sta password a l'indirizzo 'e posta e-mail specificato",
+       "createacct-realname": "Nomme riale (ozzionale)",
        "createaccountreason": "Mutivo:",
        "createacct-reason": "Mutivo",
+       "createacct-reason-ph": "Pecché staje crianno n'at'utenza",
+       "createacct-captcha": "Cuntrollo 'e sicurezza",
+       "createacct-imgcaptcha-ph": "Scrive 'o testo ca vire ncoppa",
        "createacct-submit": "Cria 'a toja utenza",
        "createacct-another-submit": "Cria 'n atro account",
        "createacct-benefit-heading": "{{SITENAME}} è fatta 'e perzone comme te.",
        "createacct-benefit-body1": "{{PLURAL:$1|càgnamiento|càgnamiente}}",
        "createacct-benefit-body2": "{{PLURAL:$1|paggena|paggene}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|contribbutòre ricente|contribbutture ricente}}",
+       "badretype": "'E passwords ch'è mis nun songe eguale.",
+       "userexists": "'O nomme utente ch'è mis è già ausàto.\nPe' piacere scigliete n'atu nomme.",
        "loginerror": "Probblema 'e accièsso",
+       "createacct-error": "Errore 'e criazione 'e cunto",
+       "createaccounterror": "Nun se può crià nu cunto: $1",
+       "nocookiesnew": "'A riggistrazione è stata completata, ma nun se può accedere a {{SITENAME}} pecché 'e cookie songo disattivate. Prova n'ata vota c' 'o nomme e 'a password quanno 'e cookie sarrann'attivate dint'o navigatore stesso.",
+       "nocookieslogin": "{{SITENAME}} usa cookies pe' putè dà accies'a ll'utente.\n'E cookies tuoje songo stutate.\nPe' piacere appiccia 'e cookies dint'o navigatóre e prova n'ata vota.",
+       "nocookiesfornew": "'O cunto utente nu s'è criato, pecché nun s'è potuto confirmà d' 'a fonte suja.\nVide si 'e cookies song'appicciate, ricarreca 'a paggena e prova n'ata vota.",
+       "noname": "Nun hè specificato nu nomme valido d'utente.",
        "loginsuccesstitle": "Acciesso affettuato",
        "loginsuccess": "'''Si stato cunnesso ô server 'e {{SITENAME}} cu 'o nomme utente 'e \"$1\".'''",
+       "nosuchuser": "Nun è riggistrato nisciuno utente c' 'o nomme \"$1\".\n'E nomme utente songo sensibbele a 'e maiuscole.\nCuntrolla 'o nomme nzertàto, o [[Special:UserLogin/signup|crìa n'utenza nova]].",
        "nosuchusershort": "Nun ce stanno utente cu o nòmme \"$1\". Cuntrolla si scrivìste buòno.",
        "nouserspecified": "Tiene 'a dìcere nu nomme pricìso.",
+       "login-userblocked": "Chist'utente è bloccato. Nun se può effettuà 'o login.",
+       "wrongpassword": "'A password nzertàta nun è bbona.\nPe' piacere prova n'ata vota.",
+       "wrongpasswordempty": "'A passwort nzertàta è bbacante.\nPe' piacere prova n'ata vota.",
+       "passwordtooshort": "'E password hann'avé minimo {{PLURAL:$1|nu carattere|$1 carattere}}.",
+       "password-name-match": "'A password adda essere diverza 'a 'o nomme utente.",
+       "password-login-forbidden": "L'uso 'e stu nomme utente e password è stato proibito.",
+       "mailmypassword": "Riabbìa 'a password",
+       "passwordremindertitle": "Nnova password temporale pe' {{SITENAME}}",
+       "passwordremindertext": "Cocche perzona (pussibbilmente tu, cu n'innerizzo IP $1) ha dimmannato l'invio 'e na password d'accieso nova pe' {{SITENAME}} ($4).\nNa password temporanea e' l'utente \"$2\" s'è abbiata comme \"$3\".\nSi chest'è stata l'intenzione toja, allora hè a trasì dint'o sito e cagnà 'a password mò. 'A password temporanea scade aropp'a {{PLURAL:$5|nu juorno|$5 ghiuorne}}.\n\nSi nun sì stato tu a dimannà 'a password, o pure hè truvat'a password e nun 'a bbuò cagnà cchiù, allora nun fà niente e continua a usare 'a password viecchia.",
+       "noemail": "Nun ce sta indirizzo e-mail pe' l'utente \"$1\".",
+       "noemailcreate": "S'add'appruviggiunà n'indirizzo e-mail buono.",
+       "passwordsent": "Na password nova è stata inviata a l'innerizzo e-mail riggistrato 'a ll'utente \"$1\".\nPe' piacere, tràse appena hè ricevuta sta password.",
+       "blocked-mailpassword": "Ll'IP tuoja è bloccata pe' scrivere, picciò nun se ponno usà 'e ffunzione pe te mannà na password nova.",
+       "eauthentsent": "Na mmasciata 'e conferma t'è stata mannata a l'indirizzo e-mail nzignàto.\nApprimm' 'e te mannà n'atu mail, hè 'a stà 'a ffà 'e struzione dint'a l'e-mail, pe' cunfermà ca 'o cunto fosse d' 'o tujo overo.",
+       "throttled-mailpassword": "S'è mannata na mail pe te' riabbià 'a password 'a meno 'e {{PLURAL:$1|n'ora|$1 ore}}.\nPe' ce sparagnà abbuse, 'a funzione 'e riabbiamento d' 'a password se può usa sulamente na vota ogne {{PLURAL:$1|ora|$1 ore}}.",
+       "mailerror": "Errore pe' tramente ca se mannava na mmasciata: $1",
        "acct_creation_throttle_hit": "{{PLURAL:$1|1 registrazzione è già stata effettuata|$1 registrazzione song già state effettuate}} 'e qualcuno cu 'o tujo stisso innerezzo IP dint'ô urdemo juorno: è 'o massimo cunsentito 'n chisto periodo 'e tiempo.\nPerciò, 'e utente ca ausano chisto innerezzo IP nun possono registrarse ppe 'o mumiento.",
+       "emailauthenticated": "'O ndirizzo email è stato cunfermato 'o $2 a 'e $3.",
+       "emailnotauthenticated": "'O ndirizzo 'e posta elettronica nun è stat'ancora cunfermato.\nNun se mannarranno mmasciate e-mail p' ' funzione ccà abbascio.",
+       "noemailprefs": "Hè 'a specificà nu ndirizzo e-mail pe ll'attivà sti funzione.",
+       "emailconfirmlink": "Cunferma 'o nderizzo mail d' 'o tujo.",
+       "invalidemailaddress": "'O nderizzo e-mail scritto nun se può accettà pecché nun tene nu furmatto buono.\nScrive n'ata vota nu nderizzo bbuono o abbacanta 'a casella.",
+       "cannotchangeemail": "'E ccunte mail nun se ponno cagnà dint'a sta wiki.",
+       "emaildisabled": "Chistu sito nun può mannà mmasciate e-mail.",
        "accountcreated": "Cunto criato",
        "loginlanguagelabel": "Lengua: $1",
        "changepassword": "Cagna password",
        "accmailtitle": "'O password è stato mannato.",
        "accmailtext": "'Na password gennerata casualmente ppe [[User talk:$1|$1]] è stata mannata a $2. Chista password può essere càgnata dint'â paggena ppe ''[[Special:ChangePassword|càgna 'a password]]'' subbeto doppo l'acciesso.",
        "newarticle": "(Novo)",
+       "noarticletext": "Mo' mo' 'a paggena richiesta è abbacante. Se pò [[Special:Search/{{PAGENAME}}|ascià stu titolo]] dint'a l'ati paggene d' 'o sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ascià dint'e riggistre azzeccate] o pure [{{fullurl:{{FULLPAGENAME}}|action=edit}} cagnà 'a paggena mo']</span>.",
+       "noarticletext-nopermission": "Mo' mo' 'a paggena richiesta è abbacante. Se pò [[Special:Search/{{PAGENAME}}|ascià stu titolo]] dint'a l'ati paggene d' 'o sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ascià dint'e riggistre azzeccate]</span>, però nun tiene 'o permesso 'a crià sta paggena.",
        "previewnote": "'''Chesta è sola n'anteprimma; 'e cagnamiénte â paggena nun songo ancora sarvate!'''",
        "editing": "Cagnamiento 'e $1",
        "editingsection": "Cagnamiénto 'e $1 (sezzione)",
index 2efb817..a8f0769 100644 (file)
        "showhideselectedversions": "Vis/skjul valgte versjoner",
        "editundo": "fjern",
        "diff-empty": "(Ingen forskjell)",
-       "diff-multi-sameuser": "({{PLURAL:$1|En midlertidig revisjon|$1 midlertidige revisjoner}} av samme bruker vises ikke)",
-       "diff-multi-otherusers": "({{PLURAL:$1|En midlertidig revisjon|$1 midlertidige revisjoner}} av {{PLURAL:$2|en annen bruker|$2 brukere}} er ikke vist)",
+       "diff-multi-sameuser": "({{PLURAL:$1|En mellomliggende revisjon|$1 mellomliggende revisjoner}} av samme bruker vises ikke)",
+       "diff-multi-otherusers": "({{PLURAL:$1|En mellomliggende revisjon|$1 mellomliggende revisjoner}} av {{PLURAL:$2|en annen bruker|$2 brukere}} er ikke vist)",
        "diff-multi-manyusers": "({{PLURAL:$1|Én mellomrevisjon|$1 mellomrevisjoner}} av mer enn $2 {{PLURAL:$2|bruker|brukere}} vises ikke)",
        "difference-missing-revision": "{{PLURAL:$2|En revisjon|$2 revisjoner}} av denne forskjellen ($1) {{PLURAL:$2|ble|ble}} ikke funnet.\n\nDette skyldes som regel at en gammel forskjell-lenke er fulgt til en side som er slettet.\nDetaljer kan finnes i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletteloggen].",
        "searchresults": "Søkeresultater",
        "randomincategory": "Tilfeldig side innenfor kategorien",
        "randomincategory-invalidcategory": "«$1» er ikke et gyldig kategorinavn.",
        "randomincategory-nopages": "Det finnes ingen sider i [[:Category:$1|$1]]-kategorien.",
-       "randomincategory-selectcategory": "Hent en tilfeldig side fra kategori: $1 $2.",
-       "randomincategory-selectcategory-submit": "Start",
        "randomredirect": "Tilfeldig omdirigering",
        "randomredirect-nopages": "Det er ingen omdirigeringer i navnerommet $1.",
        "statistics": "Statistikk",
        "import": "Importer sider",
        "importinterwiki": "Transwiki-importering",
        "import-interwiki-text": "Velg en wiki og en side å importere. Revisjonsdatoer og bidragsyteres navn blir bevart. Alle transwiki-importeringer listes i [[Special:Log/import|importloggen]].",
-       "import-interwiki-source": "Kildewiki/side:",
        "import-interwiki-history": "Kopier all historikk for denne siden",
        "import-interwiki-templates": "Inkluder alle maler",
        "import-interwiki-submit": "Importer",
index c36559c..5493a0a 100644 (file)
        "randomincategory": "Willekeurige pagina in de categorie",
        "randomincategory-invalidcategory": "\"$1\" is geen geldige categorienaam.",
        "randomincategory-nopages": "Er zijn geen pagina's in de categorie [[:Category:$1|$1]].",
-       "randomincategory-selectcategory": "Geef een willekeurige pagina uit de categorie $1 weer. $2",
-       "randomincategory-selectcategory-submit": "OK",
+       "randomincategory-category": "Categorie:",
+       "randomincategory-legend": "Willekeurige pagina in een categorie",
        "randomredirect": "Willekeurige doorverwijzing",
        "randomredirect-nopages": "Er zijn geen doorverwijzingen in de naamruimte \"$1\".",
        "statistics": "Statistieken",
        "wantedpages-badtitle": "Ongeldige paginanaam in resultaat: $1",
        "wantedfiles": "Niet-bestaande bestanden met koppelingen",
        "wantedfiletext-cat": "De volgende bestanden worden gebruikt maar bestaan niet. Bestanden van externe repositories kunnen zijn opgenomen in de lijst, ondanks dat ze bestaan. Dergelijke vals positieven worden <del>doorgehaald weergegeven</del>. Pagina's die niet-bestaande bestanden insluiten staan op de pagina [[:$1]].",
+       "wantedfiletext-cat-noforeign": "De volgende bestanden zijn in gebruik maar bestaan niet. Daarnaast staan pagina's met niet-bestaande bestanden op [[:$1]].",
        "wantedfiletext-nocat": "De volgende bestanden worden gebruikt maar bestaan niet. Bestanden van externe repositories kunnen zijn opgenomen in de lijst, ondanks dat ze bestaan. Dergelijke vals positieven worden <del>doorgehaald weergegeven</del>.",
        "wantedfiletext-nocat-noforeign": "De volgende bestanden zijn in gebruik maar bestaan niet.",
        "wantedtemplates": "Niet-bestaande sjablonen met koppelingen",
        "exbeforeblank": "De inhoud was: \"$1\"",
        "delete-confirm": "\"$1\" verwijderen",
        "delete-legend": "Verwijderen",
-       "historywarning": "'''Waarschuwing:''' de pagina die u wilt verwijderen heeft ongeveer $1 {{PLURAL:$1|versie|versies}}:",
+       "historywarning": "<strong>Waarschuwing:</strong> de pagina die u wilt verwijderen heeft ongeveer $1 {{PLURAL:$1|versie|versies}}:",
        "confirmdeletetext": "U staat op het punt een pagina te verwijderen, inclusief de geschiedenis.\nBevestig hieronder dat dit inderdaad uw bedoeling is, dat u de gevolgen begrijpt en dat de verwijdering overeenstemt met het [[{{MediaWiki:Policy-url}}|beleid]].",
        "actioncomplete": "Handeling voltooid",
        "actionfailed": "De handeling is mislukt.",
        "delete-edit-reasonlist": "Redenen voor verwijderen bewerken",
        "delete-toobig": "Deze pagina heeft een lange bewerkingsgeschiedenis, meer dan $1 {{PLURAL:$1|versie|versies}}.\nHet verwijderen van dit soort pagina's is met rechten beperkt om het per ongeluk verstoren van de werking van {{SITENAME}} te voorkomen.",
        "delete-warning-toobig": "Deze pagina heeft een lange bewerkingsgeschiedenis, meer dan $1 {{PLURAL:$1|versie|versies}}.\nHet verwijderen van deze pagina kan de werking van de database van {{SITENAME}} verstoren.\nWees voorzichtig.",
+       "deleteprotected": "U kunt deze pagina niet verwijderen omdat hij is beveiligd.",
        "deleting-backlinks-warning": "'''Waarschuwing:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|andere pagina's]] gebruiken of verwijzen naar de pagina die u wilt verwijderen.",
        "rollback": "Wijzigingen ongedaan maken",
        "rollback_short": "Terugdraaien",
        "import": "Pagina's importeren",
        "importinterwiki": "Transwiki-import",
        "import-interwiki-text": "Selecteer een wiki en paginanaam om te importeren.\nVersie- en auteursgegevens blijven hierbij bewaard.\nAlle transwiki-importhandelingen worden opgeslagen in het [[Special:Log/import|importlogboek]].",
-       "import-interwiki-source": "Bronwiki/pagina:",
+       "import-interwiki-sourcewiki": "Bronwiki:",
+       "import-interwiki-sourcepage": "Bronpagina:",
        "import-interwiki-history": "Volledige geschiedenis van deze pagina ook kopiëren",
        "import-interwiki-templates": "Alle sjablonen opnemen",
        "import-interwiki-submit": "Importeren",
index 771ad10..0f26891 100644 (file)
@@ -94,7 +94,7 @@
        "may-gen": "Mai",
        "june-gen": "Junh",
        "july-gen": "Julhet",
-       "august-gen": "Agost",
+       "august-gen": "d'agost",
        "september-gen": "Setembre",
        "october-gen": "Octobre",
        "november-gen": "Novembre",
        "hidetoc": "amagar",
        "collapsible-collapse": "Rebatre",
        "collapsible-expand": "Desplegar",
+       "confirmable-yes": "Òc",
+       "confirmable-no": "Non",
        "thisisdeleted": "Desiratz afichar o restablir $1?",
        "viewdeleted": "Veire $1?",
        "restorelink": "{{PLURAL:$1|una edicion escafada|$1 edicions escafadas}}",
        "randomincategory": "Pagina a l'azard dins la categoria",
        "randomincategory-invalidcategory": "« $1 » es pas un nom de categoria valid.",
        "randomincategory-nopages": "I a pas cap de pagina dins [[:Category:$1]].",
-       "randomincategory-selectcategory": "Prene una pagina a l'azard dins la categoria : $1 $2.",
-       "randomincategory-selectcategory-submit": "Anar",
        "randomredirect": "Una pagina de redireccion a l'azard",
        "randomredirect-nopages": "I a pas cap de redireccion dins l'espaci de nom « $1 ».",
        "statistics": "Estatisticas",
        "import": "Importar de paginas",
        "importinterwiki": "Impòrt interwiki",
        "import-interwiki-text": "Seleccionatz un wiki e un títol de pagina d'importar.\nLas datas de las versions e los noms dels editors seràn preservats.\nTotas las accions d’importacion interwiki son conservadas dins lo [[Special:Log/import|jornal d’impòrt]].",
-       "import-interwiki-source": "Wiki e pagina font :",
        "import-interwiki-history": "Copiar totas las versions de l'istoric d'aquesta pagina",
        "import-interwiki-templates": "Enclure totes los modèls",
        "import-interwiki-submit": "Importar",
index a9dcc46..074b9c7 100644 (file)
        "rcshowhideminor": "ଛୋଟମୋଟ ବଦଳ $1",
        "rcshowhideminor-show": "ଦେଖାଇବେ",
        "rcshowhideminor-hide": "ଲୁଚାଇବେ",
-       "rcshowhidebots": "ସà­\8dà­±à­\9fà¬\82à¬\9aାଳà¬\95&nbsp;(Bot)&nbsp;ଦà­\8dୱାରା&nbsp;ସମ୍ପାଦନା $1",
+       "rcshowhidebots": "ସà­\8dà­±à­\9fà¬\82à¬\9aାଳà¬\95&nbsp;(Bot)&nbsp;ର&nbsp;ସମ୍ପାଦନା $1",
        "rcshowhidebots-show": "ଦେଖାଇବେ",
        "rcshowhidebots-hide": "ଲୁଚାଇବେ",
        "rcshowhideliu": "ପଞ୍ଜୀକୃତ ସଭ୍ୟ $1",
        "unusedtemplateswlh": "ଅନ୍ୟ ସଂଯୋଗ",
        "randompage": "ଯାହିତାହି ପୃଷ୍ଠା",
        "randompage-nopages": "ତଳେ ଥିବା {{PLURAL:$2|ନେମସ୍ପେସ|ନେମସ୍ପେସ}}: $1ରେ ଗୋଟିଏ ବି ପୃଷ୍ଠା ନାହିଁ ।",
-       "randomincategory-selectcategory-submit": "ଯାଆନ୍ତୁ",
        "randomredirect": "ଯାହିତାହି ପୁନପ୍ରେରଣ",
        "randomredirect-nopages": "\"$1\" ନାମରେ ଗୋଟିଏ ବି ପୁନପ୍ରେରଣ ନାହିଁ ।",
        "statistics": "ହିସାବ",
        "import": "ପୃଷ୍ଠା ଆମଦାନି କରିବେ",
        "importinterwiki": "ଟ୍ରାନ୍ସଉଇକି ଈମ୍ପୋର୍ଟ",
        "import-interwiki-text": "ଏକ ଉଇକି ଓ ପୃଷ୍ଠା ନାମ ଆମଦାନି କରିବା ନିମନ୍ତେ ଦିଅନ୍ତୁ ।\nସଂସ୍କରଣ ତାରିଖ ଓ ସମ୍ପାଦକଙ୍କ ନାମ ସାଇତା ହୋଇ ରହିବ ।\nଅନ୍ତଉଇକି ଆମଦାନି କାମସବୁ [[Special:Log/import|ଆମଦାନି ଇତିହାସ]]ରେ ସାଇଟ ହୋଇ ରହିଛି ।",
-       "import-interwiki-source": "ମୂଳ ଉଇକି/ପୃଷ୍ଠା",
        "import-interwiki-history": "ଏହି ପୃଷ୍ଠା ନିମନ୍ତେ ସବୁଯାକ ସଂସ୍କରଣ ଇତିହାସ ନକଲ କରିନିଅନ୍ତୁ",
        "import-interwiki-templates": "ସବୁଯାକ ଛାଞ୍ଚ ଏହା ଭିତରେ ରଖିବେ",
        "import-interwiki-submit": "ଆମଦାନୀ",
        "pageinfo-length": "ପୃଷ୍ଠା ଲମ୍ବ(ବାଇଟରେ)",
        "pageinfo-article-id": "ପୃଷ୍ଠା ଆଇଡ଼ି",
        "pageinfo-language": "ପୃଷ୍ଠା ବିଷୟବସ୍ତୁର ଭାଷା",
-       "pageinfo-robot-policy": "ସ୍ୱୟଂଚାଳକ (bot) ଦ୍ୱାରା ସୂଚୀ ନିର୍ମିତ",
+       "pageinfo-robot-policy": "ସ୍ୱୟଂଚାଳକ&nbsp;(Bot) ଦ୍ୱାରା ସୂଚୀ ନିର୍ମାଣ",
        "pageinfo-robot-index": "ଅନୁମୋଦିତ",
        "pageinfo-robot-noindex": "ଅନୁନମୋଦିତ",
        "pageinfo-views": "ଦେଖଣା ସଂଖ୍ୟା",
index 9822644..868b4e2 100644 (file)
        "randomincategory": "ਸ਼੍ਰੇਣੀ ਵਿਚਲਾ ਰਲ਼ਵਾਂ ਸਫ਼ਾ",
        "randomincategory-invalidcategory": "\"$1\" ਕੋਈ ਸਹੀ ਸ਼੍ਰੇਣੀ ਦਾ ਨਾਂ ਨਹੀਂ ਹੈ।",
        "randomincategory-nopages": "[[:Category:$1|$1]] ਸ਼੍ਰੇਣੀ ਵਿਚ ਕੋਈ ਸਫ਼ਾ ਨਹੀਂ ਹੈ।",
-       "randomincategory-selectcategory-submit": "ਜਾਓ",
        "randomredirect": "ਰਲ਼ਵਾਂ ਰੀਡਿਰੈਕਟ",
        "statistics": "ਅੰਕੜੇ",
        "statistics-header-pages": "ਸਫ਼ਾ ਅੰਕੜੇ",
        "thumbnail_error": "ਨਮੂਨਾ ਬਣਾਉਣ ਵਿੱਚ ਗਲਤੀ ਹੋਈ ਹੈ: $1",
        "import": "ਸਫ਼ੇ ਮੰਗਾਓ",
        "importinterwiki": "ਅੰਤਰ-ਵਿਕੀ ਮੰਗ",
-       "import-interwiki-source": "ਸਰੋਤ ਵਿਕੀ/ਸਫ਼ਾ:",
        "import-interwiki-templates": "ਸਾਰੇ ਫਰਮੇ ਸ਼ਾਮਲ ਕਰੋ",
        "import-interwiki-submit": "ਮੰਗਾਓ",
        "import-upload-filename": "ਫ਼ਾਈਲ ਦਾ ਨਾਂ:",
index 582b330..b655ba0 100644 (file)
        "media_tip": "Link do pliku",
        "sig_tip": "Twój podpis wraz z datą i czasem",
        "hr_tip": "Linia pozioma (nie nadużywaj)",
-       "summary": "Opis zmian ",
+       "summary": "Opis zmian:",
        "subject": "Temat/nagłówek:",
        "minoredit": "To jest drobna zmiana",
        "watchthis": "Obserwuj",
        "randomincategory": "Losowa strona w kategorii",
        "randomincategory-invalidcategory": "\"$1\" nie jest prawidłową nazwą kategorii.",
        "randomincategory-nopages": "Nie ma żadnych stron w [[:Category:$1]].",
-       "randomincategory-selectcategory": "Pobierz losową stronę z kategorii: $1 $2.",
-       "randomincategory-selectcategory-submit": "Dalej",
+       "randomincategory-category": "Kategoria:",
+       "randomincategory-legend": "Losowa strona w kategorii",
        "randomredirect": "Losowe przekierowanie",
        "randomredirect-nopages": "Brak jakichkolwiek przekierowań w przestrzeni nazw „$1”.",
        "statistics": "Statystyki",
        "exbeforeblank": "poprzednia zawartość, obecnie pustej strony: „$1”",
        "delete-confirm": "Usuwanie „$1”",
        "delete-legend": "Usuń",
-       "historywarning": "'''Uwaga!''' Strona, którą chcesz usunąć, ma w przybliżeniu {{PLURAL:$1|jedną starszą wersję|$1 starsze wersje|$1 starszych wersji}}:",
+       "historywarning": "<strong>Uwaga:</strong> Strona, którą chcesz usunąć, ma {{PLURAL:$1|jedną starszą wersję|$1 starsze wersje|$1 starszych wersji}}:",
        "confirmdeletetext": "Zamierzasz usunąć stronę razem z całą dotyczącą jej historią.\nUpewnij się, czy na pewno chcesz to zrobić, że rozumiesz konsekwencje i że robisz to w zgodzie z [[{{MediaWiki:Policy-url}}|zasadami]].",
        "actioncomplete": "Operacja wykonana",
        "actionfailed": "Działanie nie powiodło się",
        "delete-edit-reasonlist": "Edytuj listę przyczyn usunięcia",
        "delete-toobig": "Ta strona ma bardzo długą historię edycji – ponad $1 {{PLURAL:$1|zmianę|zmiany|zmian}}.<br />\nUsuwanie jej zostało ograniczone ze względu na możliwość zakłócenia pracy {{GRAMMAR:D.lp|{{SITENAME}}}}.",
        "delete-warning-toobig": "Ta strona ma bardzo długą historię edycji – ponad $1 {{PLURAL:$1|zmianę|zmiany|zmian}}.<br />\nBądź ostrożny, ponieważ usunięcie jej może spowodować zakłócenia w pracy {{GRAMMAR:D.lp|{{SITENAME}}}}.",
-       "delete-cantedit": "Nie możesz usunąć tej strony, ponieważ nie masz uprawnienia do jej edycji.",
+       "deleteprotected": "Nie możesz usunąć tej strony, ponieważ została zabezpieczona.",
        "deleting-backlinks-warning": "''' Uwaga:''' Do strony, którą masz zamiar usunąć, odwołują się [[Special:WhatLinksHere/{{FULLPAGENAME}}|inne strony]].",
        "rollback": "Cofnij edycję",
        "rollback_short": "Cofnij",
        "import": "Import stron",
        "importinterwiki": "Import transwiki",
        "import-interwiki-text": "Wybierz wiki i nazwę strony do importowania.\nDaty oraz nazwy autorów zostaną zachowane.\nWszystkie operacje importu transwiki są odnotowywane w [[Special:Log/import|rejestrze importu]].",
-       "import-interwiki-source": "Źródło wiki/strony:",
+       "import-interwiki-sourcewiki": "Źródłowa wiki:",
+       "import-interwiki-sourcepage": "Strona źródłowa:",
        "import-interwiki-history": "Kopiuj całą historię edycji tej strony",
        "import-interwiki-templates": "Załącz wszystkie szablony",
        "import-interwiki-submit": "Importuj",
        "api-error-invalid-file-key": "Błąd wewnętrzny – nie można odnaleźć pliku w wśród plików tymczasowych.",
        "api-error-missingparam": "Błąd wewnętrzny –  brak jest niektórych wymaganych informacji do realizacji przesłania.",
        "api-error-missingresult": "Błąd wewnętrzny – nie można określić czy kopiowanie się udało.",
-       "api-error-mustbeloggedin": "Musisz się zalogować aby przesyłać pliki.",
+       "api-error-mustbeloggedin": "Aby przesyłać pliki, musisz się zalogować.",
        "api-error-mustbeposted": "Wystąpił błąd w oprogramowaniu. Nie użyto właściwej metody HTTP.",
        "api-error-noimageinfo": "Plik przesłano, ale serwer nie zwrócił informacji na jego temat.",
        "api-error-nomodule": "Błąd wewnętrzny – nie określono modułu przesyłania plików.",
index 6e4bcf4..ffad648 100644 (file)
        "hidetoc": "stërmé",
        "collapsible-collapse": "Saré",
        "collapsible-expand": "deurbe",
+       "confirmable-confirm": "{{GENDER:$1|É-lo}} sigur?",
+       "confirmable-yes": "É",
+       "confirmable-no": "Nò",
        "thisisdeleted": "Veul-lo vardé ò ripristiné $1?",
        "viewdeleted": "Veul-lo vardé $1?",
        "restorelink": "{{PLURAL:$1|na modìfica scancelà|$1 modìfiche scancelà}}",
        "invalidtitle-knownnamespace": "Tìtol ch'a va nen bin con lë spassi nominal «$2» e ël test «$3»",
        "invalidtitle-unknownnamespace": "Tìtol pa bon con nùmer dë spassi nominal $1 e test «$2» sconossù",
        "exception-nologin": "Nen rintrà ant ël sistema",
-       "exception-nologin-text": "Për piasì, [[Special:Userlogin|ch'a rintra ant ël sistema]] për podèj acede a costa pàgina o a costa assion.",
+       "exception-nologin-text": "Për piasì, ch'a rintra ant ël sistema për podèj acede a costa pàgina o a costa assion.",
        "exception-nologin-text-manual": "Për piasì, ch'a $1 për podèj acede a costa pàgina o costa assion.",
        "virus-badscanner": "Configurassion falà: antivìrus nen conossù: ''$1''",
        "virus-scanfailed": "scansion falìa (còdes $1)",
        "parser-template-recursion-depth-warning": "Passà ël lìmit ëd ricorsion dlë stamp ($1)",
        "language-converter-depth-warning": "Lìmit ëd profondità dël convertidor ëd lenga sorpassà ($1)",
        "node-count-exceeded-category": "Pàgine anté che ël nùmer ëd neu a l'é sorpassà",
-       "node-count-exceeded-category-desc": "Na categorìa për le pàgine andoa ël nùmer dij neud a l'é tròp grand.",
+       "node-count-exceeded-category-desc": "La pàgina a sorpassa ël nùmer màssim dij neu.",
        "node-count-exceeded-warning": "La pàgina a l'ha sorpassà ël nùmer ëd neu",
        "expansion-depth-exceeded-category": "Pàgine anté che la profondeur d'espansion a l'é sorpassà",
-       "expansion-depth-exceeded-category-desc": "Costa-sì a l'é na categorìa për le pàgine andoa la profondità d'espansion a l'é tròpa.",
+       "expansion-depth-exceeded-category-desc": "La pàgina a l'ha passà la profondità d'espansion.",
        "expansion-depth-exceeded-warning": "La pàgina a l'ha sorpassà la profondità d'espansion",
        "parser-unstrip-loop-warning": "Trovà un sicl nen dësmontàbil",
        "parser-unstrip-recursion-limit": "Sorpassà ël lìmit d'arcorensa nen dësmontàbil: $1",
        "preferences": "Mè gust",
        "mypreferences": "Gust",
        "prefs-edits": "Nùmer ëd modìfiche fàite:",
-       "prefsnologintext2": "Për piasì, ch'a $1 për definì ij gust d'utent.",
+       "prefsnologintext2": "Për piasì, ch'a rintra ant ël sistema për modifiché ij sò gust d'utent.",
        "prefs-skin": "Facia",
        "skin-preview": "Preuva",
        "datedefault": "Franch l'istess",
        "windows-nonascii-filename": "Sta wiki-sì a manten pa ij nòm d'archivi con caràter speciaj.",
        "fileexists": "N'archivi con ës nòm-sì a-i é già, për piasì che a contròla <strong>[[:$1]]</strong> se {{GENDER|a}} l'é pa sigur dë vorèj cangelo.\n[[$1|thumb]]",
        "filepageexists": "La pàgina ëd descrission për st'archivi-sì a l'é già stàita creà an <strong>[[:$1]]</strong>, mach ch'a-i é gnun archivi ch'as ciama parèj.\nLòn ch'a buta për somari as ës-ciairerà nen ant la pàgina ëd descrission.\nPër podèj buté sò somari a l'ha da modifichesse la pàgina a man.\n[[$1|thumb]]",
-       "fileexists-extension": "N'archivi con ës nòm-sì a-i é già: [[$2|thumb]]\n* Nòm dl'archivi ch'as carìa: <strong>[[:$1]]</strong>\n* Nòm dl'archivi ch'a-i é già: <strong>[[:$2]]</strong>\nPër piasì, ch'a serna un nòm diferent.",
+       "fileexists-extension": "N'archivi con ës nòm-sì a-i é già: [[$2|thumb]]\n* Nòm dl'archivi ch'as carìa: <strong>[[:$1]]</strong>\n* Nòm dl'archivi ch'a-i é già: <strong>[[:$2]]</strong>\nVeul-lo dle vire dovré un nòm pi esplìssit?",
        "fileexists-thumbnail-yes": "L'archivi a jë smija a na ''figurin-a''. [[$1|thumb]]\nPër piasì, ch'a contròla l'archivi <strong>[[:$1]]</strong>.\nS'a l'é la midema figura a amzura pijn-a, a veul dì ch'a fa nen dë manca dë carié na figurin-a.",
        "file-thumbnail-no": "Ël nòm dl'archivi as anandia con <strong>$1</strong>.\nA jë smija a na ''figurin-a''.\nSe a l'ha na figura a amzura pijn-a a l'é mej ch'a carìa cola-lì, dësnò ch'a-j cangia nòm a l'archivi, për piasì.",
        "fileexists-forbidden": "Belavans n'archivi con ës nòm-sì a-i é già, donca ël nòm as peul pa pì dovresse.\nSe a veul ancó cariè sò archivi, për piasì ch'a torna andré e ch'a deuvra n'àutr nòm. [[File:$1|thumb|center|$1]]",
        "license": "Licensa:",
        "license-header": "Licensa",
        "nolicense": "Gnun-a selession fàita",
+       "licenses-edit": "Modifiché j'opsion Ëd licensa",
        "license-nopreview": "(Gnun-a preuva ch'as peula smon-se)",
-       "upload_source_url": "(n'anliura bon-a e che as peula dovresse)",
-       "upload_source_file": "(n'archivi da sò ordinator)",
+       "upload_source_url": "(l'archivi ch'a l'ha sernù da n'adrëssa an s'Aragnà bon-a e ch'as peula acede ëd fasson pùblica)",
+       "upload_source_file": "(sò archivi sernù da sò ordinator)",
+       "listfiles-delete": "scancelé",
        "listfiles-summary": "Sta pàgina special-sì a smon tuti j'archivi ch'a son ëstàit carià.",
        "listfiles_search_for": "Arserché un nòm d'archivi multimojen:",
        "imgfile": "archivi",
        "randomincategory": "Pàgina a l'ancàpit ant la categorìa",
        "randomincategory-invalidcategory": "«$1» a l'é pa un nòm ëd categorìa bon.",
        "randomincategory-nopages": "A-i é gnun-e pàgine ant la categorìa [[:Category:$1|$1]].",
-       "randomincategory-selectcategory": "Pijé na pàgina a l'ancàpit da 'nt la categorìa: $1 $2.",
-       "randomincategory-selectcategory-submit": "Andé",
        "randomredirect": "Na ridiression qualsëssìa",
        "randomredirect-nopages": "A-i é pa gnun-a ridiression ant lë spassi nominal \"$1\".",
        "statistics": "Statìstiche",
        "import": "Amportassion ëd pàgine",
        "importinterwiki": "Amportassion da wiki diferente",
        "import-interwiki-text": "Che a selession-a na wiki e ël tìtol dla pàgina da amporté.\nDate dle revision e stranòm dj'editor a resteran piàjit sù 'cò lor.\nTute j'amportassion antra wiki diferente a resto marcà ant ël [[Special:Log/import|Registr dj'amportassion]].",
-       "import-interwiki-source": "Wiki e pàgina sorgiss:",
        "import-interwiki-history": "Copié tute le revision ëd la stòria ëd costa pàgina",
        "import-interwiki-templates": "Anserì tùit jë stamp",
        "import-interwiki-submit": "Amporté",
index 57dad83..257333b 100644 (file)
        "hidetoc": "ocultar",
        "collapsible-collapse": "Ocultar",
        "collapsible-expand": "Expandir",
+       "confirmable-yes": "Sim",
+       "confirmable-no": "Não",
        "thisisdeleted": "Ver ou restaurar $1?",
        "viewdeleted": "Ver $1?",
        "restorelink": "{{PLURAL:$1|uma edição eliminada|$1 edições eliminadas}}",
        "pt-login": "Entrar",
        "pt-login-button": "Entrar",
        "pt-createaccount": "Crie uma conta",
+       "pt-userlogout": "Sair",
        "php-mail-error-unknown": "Erro desconhecido na função mail() do PHP",
        "user-mail-no-addy": "Tentou enviar uma mensagem sem um endereço de e-mail.",
        "user-mail-no-body": "Você tentou enviar com o campo de e-mail vazio ou com poucos caracteres.",
        "edit-gone-missing": "Não foi possível atualizar a página.\nEla parece ter sido eliminada.",
        "edit-conflict": "Conflito de edição.",
        "edit-no-change": "A sua edição foi ignorada, uma vez que o texto não sofreu alterações.",
+       "postedit-confirmation-created": "A página foi criada.",
        "postedit-confirmation-restored": "Esta página foi restaurada.",
        "postedit-confirmation-saved": "Sua edição foi salva",
        "edit-already-exists": "Não foi possível criar uma nova página.\nEla já existia.",
        "prefs-dateformat": "Formato de data",
        "prefs-timeoffset": "Desvio horário",
        "prefs-advancedediting": "Opções gerais",
+       "prefs-editor": "Editor",
        "prefs-preview": "Pré-visualizar",
        "prefs-advancedrc": "Opções avançadas",
        "prefs-advancedrendering": "Opções avançadas",
        "license": "Licenciamento:",
        "license-header": "Licenciamento",
        "nolicense": "Nenhuma selecionada",
+       "licenses-edit": "Editar opções de licença",
        "license-nopreview": "(Previsão não disponível)",
        "upload_source_url": " (um URL válido, publicamente acessível)",
        "upload_source_file": " (um arquivo no seu computador)",
+       "listfiles-delete": "apagar",
        "listfiles-summary": "Esta página especial mostra todos os arquivos carregados.",
        "listfiles_search_for": "Pesquisar por nome de mídia:",
        "imgfile": "arquivo",
        "randomincategory": "Página aleatória na categoria",
        "randomincategory-invalidcategory": "\"$1\" não é um nome de categoria válido.",
        "randomincategory-nopages": "Não há paginas em [[:Category:$1]].",
-       "randomincategory-selectcategory": "Obter página aleatória da categoria: $1 $2.",
-       "randomincategory-selectcategory-submit": "Avançar",
        "randomredirect": "Redirecionamento aleatório",
        "randomredirect-nopages": "Não há redirecionamentos no espaço nominal \"$1\".",
        "statistics": "Estatísticas",
        "trackingcategories": "Categorias de rastreamento",
        "trackingcategories-summary": "Esta página lista categorias de monitoramento que são preenchidas automaticamente pelo software MediaWiki. Seus nomes podem ser alterados através da alteração das mensagens de sistema relevantes no namespace {{ns: 8}}.",
        "trackingcategories-msg": "Categoria de monitoramento",
+       "trackingcategories-name": "Nome da mensagem",
        "trackingcategories-desc": "Critérios de inclusão de categoria",
        "noindex-category-desc": "A página não é indexada por robôs, porque possui a palavra mágica <code><nowiki>__NOINDEX__</nowiki></code> e está em um namespace onde a flag é permitida.",
        "post-expand-template-inclusion-category-desc": "O tamanho da página é superior a <code>$wgMaxArticleSize</code>, após a expansão de todas as predefinições, pelo que algumas predefinições não foram expandidas.",
        "delete-edit-reasonlist": "Editar motivos de eliminação",
        "delete-toobig": "Esta página possui um longo histórico de edições, com mais de $1 {{PLURAL:$1|edição|edições}}.\nA eliminação de tais páginas foi restrita, a fim de se evitarem problemas acidentais em {{SITENAME}}.",
        "delete-warning-toobig": "Esta página possui um longo histórico de edições, com mais de $1 {{PLURAL:$1|edição|edições}}.\nEliminá-la poderá causar problemas na base de dados de {{SITENAME}};\nprossiga com cuidado.",
-       "delete-cantedit": "Você não pode deletar essa paginá por que você não tem permissão de edita-la",
        "deleting-backlinks-warning": "'''Cuidado:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Outras páginas]] se ligam ou redirecionam para a página que você está prestes a deletar.",
        "rollback": "Reverter edições",
        "rollback_short": "Reverter",
        "import": "Importar páginas",
        "importinterwiki": "Importação transwiki",
        "import-interwiki-text": "Selecione um wiki e um título de página para importar.\nAs datas das edições e os seus editores serão mantidos.\nTodas as ações de importação transwiki são registradas no [[Special:Log/import|Registro de importações]].",
-       "import-interwiki-source": "Wiki/página fonte:",
        "import-interwiki-history": "Copiar todas as edições para esta página",
        "import-interwiki-templates": "Incluir todas as predefinições",
        "import-interwiki-submit": "Importar",
        "version-license": "Licença do MediaWiki",
        "version-ext-license": "Licença",
        "version-ext-colheader-name": "Extensão",
+       "version-skin-colheader-name": "Skin",
        "version-ext-colheader-version": "Versão",
        "version-ext-colheader-license": "Licença",
        "version-ext-colheader-description": "Descrição",
        "htmlform-no": "Não",
        "htmlform-yes": "Sim",
        "htmlform-chosen-placeholder": "Selecione uma opção",
+       "htmlform-cloner-create": "Adicionar mais",
+       "htmlform-cloner-delete": "Remover",
        "htmlform-cloner-required": "Pelo menos um valor é requerido",
        "sqlite-has-fts": "$1 com suporte de pesquisa de texto completo",
        "sqlite-no-fts": "$1 sem suporte de pesquisa de texto completo",
        "expand_templates_generate_xml": "Mostrar árvore de análise (parse) do XML",
        "expand_templates_generate_rawhtml": "Mostrar HTML puro",
        "expand_templates_preview": "Pré-visualização",
+       "pagelang-name": "Página",
+       "pagelang-language": "Idioma",
+       "pagelang-use-default": "Idioma padrão de uso",
        "pagelang-select-lang": "Selecionar idioma",
        "right-pagelang": "Mudar idioma da página",
        "action-pagelang": "mudar idioma da página",
index b41e159..4bce31a 100644 (file)
        "randomincategory": "Página aleatória na categoria",
        "randomincategory-invalidcategory": "\"$1\" não é um nome de categoria válido",
        "randomincategory-nopages": "Não há páginas na categoria [[:Category:$1|$1]].",
-       "randomincategory-selectcategory": "Obter página aleatória da categoria: $1 $2",
-       "randomincategory-selectcategory-submit": "Ir",
+       "randomincategory-category": "Categoria:",
+       "randomincategory-legend": "Página aleatória na categoria",
        "randomredirect": "Redirecionamento aleatório",
        "randomredirect-nopages": "Não há redirecionamentos no domínio \"$1\".",
        "statistics": "Estatísticas",
        "exbeforeblank": "o conteúdo antes de esvaziar era: \"$1\"",
        "delete-confirm": "Eliminar \"$1\"",
        "delete-legend": "Eliminar",
-       "historywarning": "'''Aviso:''' A página que está prestes a eliminar tem um histórico com aproximadamente $1 {{PLURAL:$1|revisão|revisões}}:",
+       "historywarning": "<strong>Aviso:</strong> A página que está prestes a eliminar tem um histórico com aproximadamente $1 {{PLURAL:$1|revisão|revisões}}:",
        "confirmdeletetext": "Está prestes a eliminar permanentemente uma página ou uma imagem e todo o seu histórico.\nConfirme que é realmente esta a sua intenção, que compreende as consequências e que o faz de acordo com as [[{{MediaWiki:Policy-url}}|políticas e recomendações]] do projeto, por favor.",
        "actioncomplete": "Operação executada",
        "actionfailed": "Operação falhou",
        "delete-edit-reasonlist": "Editar motivos de eliminação",
        "delete-toobig": "Esta página tem um histórico longo, com mais de $1 {{PLURAL:$1|edição|edições}}.\nA eliminação de páginas como esta foi restringida na {{SITENAME}}, para evitar problemas acidentais.",
        "delete-warning-toobig": "Esta página tem um histórico de edições longo, com mais de $1 {{PLURAL:$1|edição|edições}}.\nEliminá-la poderá causar problemas na base de dados da {{SITENAME}};\nprossiga com precaução.",
-       "delete-cantedit": "Não é possível eliminar esta página porque não possui os privilégios necessários para a editar.",
+       "deleteprotected": "Não é possível eliminar esta página porque foi protegida.",
        "deleting-backlinks-warning": "'''Aviso:''' Existem [[Special:WhatLinksHere/{{FULLPAGENAME}}|páginas]] que contêm ligações para a página que está prestes a eliminar ou que a transcluem.",
        "rollback": "Reverter edições",
        "rollback_short": "Reverter",
        "import": "Importar páginas",
        "importinterwiki": "Importação transwikis",
        "import-interwiki-text": "Selecione uma wiki e um título de página a importar.\nAs datas das edições e os seus editores serão mantidos.\nTodas as ações de importação transwikis são registadas no [[Special:Log/import|Registo de importações]].",
-       "import-interwiki-source": "Wiki ou página de origem:",
+       "import-interwiki-sourcewiki": "Wiki de origem:",
+       "import-interwiki-sourcepage": "Página de origem:",
        "import-interwiki-history": "Copiar todo o histórico de revisões desta página",
        "import-interwiki-templates": "Incluir todas as predefinições",
        "import-interwiki-submit": "Importar",
index d2d24d2..a03aa98 100644 (file)
        "hidetoc": "This is the link used to hide the table of contents\n\n{{Identical|Hide}}",
        "collapsible-collapse": "{{Doc-actionlink}}\nThis is the link used to collapse a collapsible element. (used as plaintext. No wikitext or html is parsed.)\n\nSee also:\n* {{msg-mw|Collapsible-expand}}\n{{Identical|Collapse}}",
        "collapsible-expand": "{{Doc-actionlink}}\nThis is the link used to expand a collapsible element (used as plaintext. No wikitext or html is parsed.)\n\nSee also:\n* {{msg-mw|Collapsible-collapse}}\n\nSee the following example:\n{{Identical|Expand}}",
-       "confirmable-confirm": "Question asking the user to confirm a potentially uncancellable action.\n\"Yes\" and \"No\" buttons are displayed beside it.\n\nSee also:\n* {{msg-mw|confirmable-yes}}\n* {{msg-mw|confirmable-no}}",
+       "confirmable-confirm": "Question asking the user to confirm a potentially uncancellable action.\n\"Yes\" and \"No\" buttons are displayed beside it.\n\nSee also:\n* {{msg-mw|confirmable-yes}}\n* {{msg-mw|confirmable-no}}\n{{Identical|Are you sure?}}",
        "confirmable-yes": "{{Doc-actionlink}}\nText of a button that will confirm triggering of a potentially uncancellable action.\n\nSee also:\n* {{msg-mw|confirmable-confirm}}\n* {{msg-mw|confirmable-no}}\n{{Identical|Yes}}",
        "confirmable-no": "{{Doc-actionlink}}\nText of a button that will cancel triggering of a potentially uncancellable action.\n\nSee also:\n* {{msg-mw|confirmable-confirm}}\n* {{msg-mw|confirmable-yes}}\n{{Identical|No}}",
        "thisisdeleted": "Message shown on a deleted page when the user has the undelete right. Parameters:\n* $1 - a link to [[Special:Undelete]], with {{msg-mw|restorelink}} as the text\nSee also:\n* {{msg-mw|viewdeleted}}",
        "preferences": "Title of the [[Special:Preferences]] page.\n{{Identical|Preferences}}",
        "preferences-summary": "{{doc-specialpagesummary|preferences}}",
        "mypreferences": "Action link label that leads to [[Special:Preferences]]; appears in the top menu (e.g. \"Username Talk Preferences Watchlist Contributions Log out\").\n\nSee also:\n* {{msg-mw|Mypreferences}}\n* {{msg-mw|Accesskey-pt-preferences}}\n* {{msg-mw|Tooltip-pt-preferences}}\n{{Identical|Preferences}}",
-       "prefs-edits": "In user preferences.",
+       "prefs-edits": "In user preferences.\n{{Identical|Number of edits}}",
        "prefsnologintext2": "Showed on Special:Userlogin when user tries to access their preferences before logging in",
        "prefs-skin": "Used in user preferences.\n{{Identical|Skin}}",
        "skin-preview": "{{doc-actionlink}}\nThe link beside each skin name in [[Special:Preferences|your user preferences]], tab \"skin\".\n{{Identical|Preview}}",
        "timezoneregion-pacific": "Used in \"Time zone\" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], \"date and time\" tab.\n{{Related|Timezoneregion}}",
        "allowemail": "Used in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}.",
        "prefs-searchoptions": "{{Identical|Search}}",
-       "prefs-namespaces": "Shown as legend of the second fieldset of the tab 'Search' in [[Special:Preferences]]\n{{Identical|Namespaces}}",
+       "prefs-namespaces": "Shown as legend of the second fieldset of the tab 'Search' in [[Special:Preferences]]\n{{Identical|Namespace}}",
        "default": "{{Identical|Default}}",
        "prefs-files": "Title of a tab in [[Special:Preferences]].\n{{Identical|File}}",
        "prefs-custom-css": "visible on [[Special:Preferences]] -[Skins].\n{{Identical|Custom CSS}}",
        "prefs-custom-js": "visible on [[Special:Preferences]] -[Skins].\n{{Identical|Custom JavaScript}}",
-       "prefs-common-css-js": "Used as label in [[Special:Preferences#mw-prefsection-rendering|preferences]], tab \"Appearance\", section \"Skin\".",
+       "prefs-common-css-js": "Used as label in [[Special:Preferences#mw-prefsection-rendering|preferences]], tab \"Appearance\", section \"Skin\".\n\nSee also:\n* {{msg-mw|Globalcssjs-custom-css-js}}",
        "prefs-reset-intro": "Used in [[Special:Preferences/reset]].",
        "prefs-emailconfirm-label": "Sub-heading in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}.",
        "youremail": "Label of the e-mail text box of the \"E-mail options\" section of [[Special:Preferences]].\nAlso used on create account form.\n\n{{Identical|E-mail}}",
        "randompage": "{{doc-special|RandomPage}}\nSee also:\n* {{msg-mw|Randompage}}\n* {{msg-mw|Accesskey-n-randompage}}\n* {{msg-mw|Tooltip-n-randompage}}\n{{Identical|Random page}}",
        "randompage-nopages": "Parameters:\n* $1 - list of namespaces\n* $2 - number of namespaces, for PLURAL support\nSee also:\n* {{msg-mw|Randomredirect-nopages}}",
        "randompage-url": "{{notranslate}}",
-       "randomincategory": "{{doc-special|RandomInCategory}}",
+       "randomincategory": "{{doc-special|RandomInCategory}}\n{{Identical|Random page in category}}",
        "randomincategory-invalidcategory": "Message shown if an invalid category is specified.\n\nParameters:\n* $1 - the invalid category name given\n\n(Note, if the category is simply empty, but could possibly exist, {{msg-mw|randomincategory-nopages}} is shown instead)",
        "randomincategory-nopages": "Message shown from [[Special:RandomInCategory]] if the category is empty.\n\nParameters:\n* $1 - the category name (without the namespace prefix)",
-       "randomincategory-category": "Shown on [[Special:RandomInCategory]] as a label for a text box allowing the user to input a category name.",
-       "randomincategory-legend": "Legend to the form on [[Special:RandomInCategory]]. {{identical|randomicategory}}",
+       "randomincategory-category": "Shown on [[Special:RandomInCategory]] as a label for a text box allowing the user to input a category name.\n{{Identical|Category}}",
+       "randomincategory-legend": "Used as fieldset label for the form on [[Special:RandomInCategory]].",
        "randomredirect": "{{doc-special|RandomRedirect}}",
        "randomredirect-nopages": "Parameters:\n* $1 - list of namespaces\n* $2 - (Unused) number of namespaces\nSee also:\n* {{msg-mw|Randompage-nopages}}",
        "statistics": "{{doc-special|Statistics}}\n{{Identical|Statistics}}",
        "delete-edit-reasonlist": "Shown beneath the page deletion form on the right side. It is a link to {{msg-mw|Deletereason-dropdown|notext=1}}.\n\nSee also:\n* {{msg-mw|Ipb-edit-dropdown}}\n* {{msg-mw|Protect-edit-reasonlist}}.\n{{Identical|Edit delete reasons}}",
        "delete-toobig": "Parameters:\n* $1 - the upper limit of number of revisions\nSee also:\n* {{msg-mw|Delete-warning-toobig}}",
        "delete-warning-toobig": "Parameters:\n* $1 - the upper limit of number of revisions\nSee also:\n* {{msg-mw|Delete-toobig}}",
-       "deleteprotected": "Used as error message when deleting the page.",
+       "deleteprotected": "Used as error message when deleting the page.\n\n\"If protection keeps them from editing, they shouldn't be able to delete.\"",
        "deleting-backlinks-warning": "A warning shown when a page that is being deleted has at least one link to it or is transcluded in at least one page.",
        "rollback": "{{Identical|Rollback}}",
        "rollback_short": "{{Identical|Rollback}}",
        "sp-contributions-suppresslog": "Used as a display name for a link to log entries of suppressed edits made by that user.\n\nUsed as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].\n\nSee also {{msg-mw|sp-contributions-deleted}}, {{msg-mw|sp-deletedcontributions-contribs}}, {{msg-mw|contributions}}, {{msg-mw|deletedcontributions-title}}.",
        "sp-contributions-deleted": "This is a link anchor used in [[Special:Contributions]]/''name'', when user viewing the page has the right to delete pages, or to restore deleted pages.\n\nUsed as link title in [[Special:Contributions]].\n\nSee also:\n* {{msg-mw|Sp-contributions-talk}}\n* {{msg-mw|Change-blocklink}}\n* {{msg-mw|Unblocklink}}\n* {{msg-mw|Blocklink}}\n* {{msg-mw|Sp-contributions-blocklog}}\n* {{msg-mw|Sp-contributions-uploads}}\n* {{msg-mw|Sp-contributions-logs}}\n* {{msg-mw|Sp-contributions-userrights}}",
        "sp-contributions-uploads": "Used as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].\n\nSee also:\n* {{msg-mw|Sp-contributions-talk}}\n* {{msg-mw|Change-blocklink}}\n* {{msg-mw|Unblocklink}}\n* {{msg-mw|Blocklink}}\n* {{msg-mw|Sp-contributions-blocklog}}\n* {{msg-mw|Sp-contributions-logs}}\n* {{msg-mw|Sp-contributions-deleted}}\n* {{msg-mw|Sp-contributions-userrights}}\n{{Identical|Upload}}",
-       "sp-contributions-logs": "Appears as an action link in the header of the Special:Contributions/''Username'' pages (e.g. \"For Somebody (talk | block log | logs)\").\n\nUsed as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].\n\nSee also:\n* {{msg-mw|Sp-contributions-talk}}\n* {{msg-mw|Change-blocklink}}\n* {{msg-mw|Unblocklink}}\n* {{msg-mw|Blocklink}}\n* {{msg-mw|Sp-contributions-blocklog}}\n* {{msg-mw|Sp-contributions-uploads}}\n* {{msg-mw|Sp-contributions-deleted}}\n* {{msg-mw|Sp-contributions-userrights}}",
+       "sp-contributions-logs": "Appears as an action link in the header of the Special:Contributions/''Username'' pages (e.g. \"For Somebody (talk | block log | logs)\").\n\nUsed as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].\n\nSee also:\n* {{msg-mw|Sp-contributions-talk}}\n* {{msg-mw|Change-blocklink}}\n* {{msg-mw|Unblocklink}}\n* {{msg-mw|Blocklink}}\n* {{msg-mw|Sp-contributions-blocklog}}\n* {{msg-mw|Sp-contributions-uploads}}\n* {{msg-mw|Sp-contributions-deleted}}\n* {{msg-mw|Sp-contributions-userrights}}\n{{Identical|Log}}",
        "sp-contributions-talk": "This is a link anchor used in the [[Special:Contributions]]/''usernamename'' pages.\nThe link appears in a list of similar ones separated by {{msg-mw|pipe-separator}}, e.g. like this:<br />\n( talk | block log | logs | deleted contributions | rights management )\n\nUsed as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].\n\nSee also:\n* {{msg-mw|change-blocklink}}\n* {{msg-mw|unblocklink}}\n* {{msg-mw|blocklink}}\n* {{msg-mw|sp-contributions-blocklog}}\n* {{msg-mw|sp-contributions-uploads}}\n* {{msg-mw|sp-contributions-logs}}\n* {{msg-mw|sp-contributions-deleted}}\n* {{msg-mw|sp-contributions-userrights}}\n{{Identical|Talk}}",
        "sp-contributions-userrights": "This is a link anchor used in [[Special:Contributions]]/''name'', if the user viewing the page has the right to set or alter user rights.\n\nUsed as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].\n\nSee also:\n* {{msg-mw|Sp-contributions-talk}}\n* {{msg-mw|Change-blocklink}}\n* {{msg-mw|Unblocklink}}\n* {{msg-mw|Blocklink}}\n* {{msg-mw|Sp-contributions-blocklog}}\n* {{msg-mw|Sp-contributions-uploads}}\n* {{msg-mw|Sp-contributions-logs}}\n* {{msg-mw|Sp-contributions-deleted}}",
        "sp-contributions-blocked-notice": "Shown on top of contributions special page of currently blocked users.\n\nParameters:\n* $1 - (Optional) the blocked user. Can be used for GENDER\nAnon version:\n* {{msg-mw|Sp-contributions-blocked-notice-anon}}",
        "import-summary": "{{doc-specialpagesummary|import}}",
        "importinterwiki": "Used as legend for the Import form in [[Special:Import]].",
        "import-interwiki-text": "Used as summary for the Import form in [[Special:Import]].",
-       "import-interwiki-sourcewiki": "Used as label for dropdown box in [[Special:Import]].",
-       "import-interwiki-sourcepage": "Used as label for input box in [[Special:Import]].",
+       "import-interwiki-sourcewiki": "Used as label for dropdown box in [[Special:Import]].\n\nSee also:\n* {{msg-mw|Import-interwiki-sourcepage}}",
+       "import-interwiki-sourcepage": "Used as label for input box in [[Special:Import]].\n\nSee also:\n* {{msg-mw|Import-interwiki-sourcewiki}}",
        "import-interwiki-history": "This is an option on [[Special:Import]]. Usually, when unchecked, only the first version of a page is imported. When you check the option, all versions are imported. This is important often to check for licensing reasons.\n\nSee also:\n* {{msg-mw|Import-interwiki-templates}}\n* {{msg-mw|Import-interwiki-namespace}}\n* {{msg-mw|Import-comment}}\n* {{msg-mw|Import-interwiki-rootpage}}\n* {{msg-mw|Import-interwiki-submit}}",
        "import-interwiki-templates": "Used as label for the checkbox in [[Special:Import]].\n\nSee also:\n* {{msg-mw|Import-interwiki-history}}\n* {{msg-mw|Import-interwiki-namespace}}\n* {{msg-mw|Import-comment}}\n* {{msg-mw|Import-interwiki-rootpage}}\n* {{msg-mw|Import-interwiki-submit}}",
        "import-interwiki-submit": "Used as Submit button text in [[Special:Import]].\n\nSee also:\n* {{msg-mw|Import-interwiki-history}}\n* {{msg-mw|Import-interwiki-templates}}\n* {{msg-mw|Import-interwiki-namespace}}\n* {{msg-mw|Import-comment}}\n* {{msg-mw|Import-interwiki-rootpage}}\n{{Identical|Import}}",
        "logentry-pagelang-pagelang": "{{Logentry}}\nAdditional parameters:\n* $4 - old language code, or \"[def]\" (hard-coded)\n* $5 - new language code, or \"[def]\" (hard-coded)",
        "default-skin-not-found": "Message shown when the default skin for this MediaWiki installation can not be found.\n\nParameters:\n* $1: skin identifier for the default skin\n* $2: list of installed skins, composed using {{msg-mw|default-skin-not-found-row-enabled}} and {{msg-mw|default-skin-not-found-row-disabled}}\n* $3: code snippet to use to enable installed skins",
        "default-skin-not-found-no-skins": "Message shown when the default skin for this MediaWiki installation can not be found and the installation has no skins at all.\n\nParameters:\n* $1: name of the default skin",
-       "default-skin-not-found-row-enabled": "One row of the list of installed skins shown as a part of {{msg-mw|default-skin-not-found}}, for an enabled skin.\n\nParameters:\n* $1: skin identifier\n* $2: human-readable skin name",
-       "default-skin-not-found-row-disabled": "One row of the list of installed skins shown as a part of {{msg-mw|default-skin-not-found}}, for a disabled skin.\n\nParameters:\n* $1: skin identifier\n$2: human-readable skin name"
+       "default-skin-not-found-row-enabled": "One row of the list of installed skins shown as a part of the following message (for an enabled skin):\n* {{msg-mw|default-skin-not-found}}\n----\nParameters:\n* $1 - skin identifier\n* $2 - human-readable skin name\nSee also:\n* {{msg-mw|Default-skin-not-found-row-disabled}}",
+       "default-skin-not-found-row-disabled": "One row of the list of installed skins shown as a part of the following message (for a disabled skin):\n* {{msg-mw|default-skin-not-found}}\n----\nParameters:\n* $1 - skin identifier\n* $2 - human-readable skin name\nSee also:\n* {{msg-mw|Default-skin-not-found-row-enabled}}"
 }
index a668d7d..507081d 100644 (file)
        "randomincategory": "Pagină aleatorie din categorie",
        "randomincategory-invalidcategory": "„$1” nu este un nume de categorie valid.",
        "randomincategory-nopages": "Nu există pagini în [[:Category:$1]].",
-       "randomincategory-selectcategory": "Obțineți, aleatoriu, o pagină din categoria: $1 $2.",
-       "randomincategory-selectcategory-submit": "Du-te",
        "randomredirect": "Redirecționare aleatorie",
        "randomredirect-nopages": "Nu există redirecționări în spațiul de nume \"$1\".",
        "statistics": "Statistici",
        "delete-edit-reasonlist": "Modifică motivele ștergerii",
        "delete-toobig": "Această pagină are un istoric al modificărilor important, cu mai mult de $1 {{PLURAL:$1|versiune|versiuni|de versiuni}}.\nȘtergerea unei astfel de pagini a fost restricționată pentru a preveni apariția unor erori în {{SITENAME}}.",
        "delete-warning-toobig": "Această pagină are un istoric al modificărilor mult prea mare, cu mai mult de $1 {{PLURAL:$1|versiune|versiuni|de versiuni}}.\nȘtergerea sa poate afecta baza de date a sitului {{SITENAME}};\nacționați cu precauție.",
-       "delete-cantedit": "Nu puteți șterge această pagină, deoarece nu aveți permisiunea de a o modifica.",
        "deleting-backlinks-warning": "'''Atenție:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Alte pagini]] se leagă sau transclud pagina pe care doriți să o ștergeți.",
        "rollback": "Editări de revenire",
        "rollback_short": "Revenire",
        "import": "Importare pagini",
        "importinterwiki": "Import transwiki",
        "import-interwiki-text": "Selectează un wiki și titlul paginii care trebuie importate. Datele reviziilor și numele editorilor vor fi salvate. Toate acțiunile de import transwiki pot fi găsite la [[Special:Log/import|log import]]",
-       "import-interwiki-source": "Wiki/pagină sursă:",
        "import-interwiki-history": "Copiază toate versiunile istoricului acestei pagini",
        "import-interwiki-templates": "Includeți toate formatele",
        "import-interwiki-submit": "Importă",
index b2a7d4d..40b9db1 100644 (file)
@@ -68,7 +68,8 @@
                        "Eroha",
                        "Niklem",
                        "Agilight",
-                       "Oleg3280"
+                       "Oleg3280",
+                       "Nirovulf"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
        "randomincategory": "Случайная страница в категории",
        "randomincategory-invalidcategory": "Категории «$1» не существует.",
        "randomincategory-nopages": "Нет страниц в категории [[:Category:$1]].",
-       "randomincategory-selectcategory": "Перейти на случайную страницу из категории: $1 $2.",
-       "randomincategory-selectcategory-submit": "Перейти",
+       "randomincategory-category": "Категория:",
+       "randomincategory-legend": "Случайная страница в категории",
        "randomredirect": "Случайное перенаправление",
        "randomredirect-nopages": "Пространство имён «$1» не содержит перенаправлений.",
        "statistics": "Статистика",
        "exbeforeblank": "содержимое до очистки: «$1»",
        "delete-confirm": "$1 — удаление",
        "delete-legend": "Удаление",
-       "historywarning": "'''Внимание:''' эта страница имеет историю изменений приблизительно из $1 {{PLURAL:$1|версии|версий}}:",
+       "historywarning": "<strong>Внимание:</strong> У страницы, которую вы собираетесь удалить, есть история правок, содержащая $1 {{PLURAL:$1|версию|версий}}:",
        "confirmdeletetext": "Вы запросили полное удаление страницы (или изображения) и всей её истории изменений. Пожалуйста, подтвердите, что вы действительно желаете это сделать, понимаете последствия своих действий, и делаете это в соответствии [[{{MediaWiki:Policy-url}}|с правилами]].",
        "actioncomplete": "Действие выполнено",
        "actionfailed": "Действие не выполнено",
        "delete-edit-reasonlist": "Править список причин",
        "delete-toobig": "У этой страницы очень длинная история изменений, более $1 {{PLURAL:$1|версии|версий}}.\nУдаление таких страниц было запрещено во избежание нарушений в работе сайта «{{SITENAME}}».",
        "delete-warning-toobig": "У этой страницы очень длинная история изменений, более $1 {{PLURAL:$1|версии|версий}}.\nЕё удаление может привести к нарушению нормальной работы базы данных сайта «{{SITENAME}}»;\nдействуйте с осторожностью.",
-       "delete-cantedit": "Вы не можете удалить эту страницу, так как у вас нет разрешения на её редактирование.",
+       "deleteprotected": "Вы не можете удалить эту страницу, поскольку она защищена.",
        "deleting-backlinks-warning": "'''Предупреждение.''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Другие страницы]] ссылаются на страницу, которую вы собираетесь удалить, или содержат её.",
        "rollback": "Откатить изменения",
        "rollback_short": "Откат",
        "import": "Импортирование страниц",
        "importinterwiki": "Межвики импорт",
        "import-interwiki-text": "Укажите вики и название импортируемой страницы.\nДаты изменений и имена авторов будут сохранены.\nВсе операции межвики импорта регистрируются в [[Special:Log/import|соответствующем журнале]].",
-       "import-interwiki-source": "Вики-источник/страница:",
+       "import-interwiki-sourcewiki": "Исходный вики-проект:",
+       "import-interwiki-sourcepage": "Исходная страница:",
        "import-interwiki-history": "Копировать всю историю изменений этой страницы",
        "import-interwiki-templates": "Включить все шаблоны",
        "import-interwiki-submit": "Импортировать",
index 9711798..3fb3add 100644 (file)
        "import": "पृष्ठानां निर्यातं करोतु",
        "importinterwiki": "ट्रान्स् विकि आयातकाः",
        "import-interwiki-text": "आयातं कर्तुं एकां विकिं एकं पुटं चिनोतु ।  \nपुनरावृत्तीनां दिनाङ्कानि, सम्पादनानि च सुरक्षितानि भविष्यन्ति। \nसर्वाः ट्रान्सविक्यायातक्रियाः नामाभिलेखिताः [[Special:Log/import|आयातसूचिकासु]] स्थापिताः ।",
-       "import-interwiki-source": "स्रोतविकि/पुटम्",
        "import-interwiki-history": "एतत्पुटार्थं सर्वेतिहासान् पुनरावृत्तीः च प्रकृतीः करोतु ।",
        "import-interwiki-templates": "प्राकृतीः अनर्भावयतु ।",
        "import-interwiki-submit": "आयातं करोतु ।",
        "watchlisttools-view": "योग्यपरिवर्तनानि दृश्यन्ताम्",
        "watchlisttools-edit": "अवेक्षणाऽऽवलिः दृश्यतां, सम्पाद्यतां च",
        "watchlisttools-raw": "विवरणरहिता अवलोकनावलिः सम्पाद्यताम्",
-       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|à¤\85म्भाषणम्]])",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|सम्भाषणम्]])",
        "unknown_extension_tag": "अज्ञातं वर्तमानसूत्रम् $1",
        "duplicate-defaultsort": "'''पूर्वसूचना''' \"$1\" इति पुरातनं मूलक्रमाङ्कनकुड्मलं विहाय  \"$2\" इति नवीनं मूलक्रमाङ्कनकुण्डलत्वेन स्वयमेव नयति एतत् ।",
        "version": "आवृत्तिः",
index 12e911f..e3608ff 100644 (file)
@@ -12,9 +12,9 @@
                        "Taxandru"
                ]
        },
-       "tog-underline": "Sutalìnia sos ligàmenes",
+       "tog-underline": "Sutalìnia sos ligòngios",
        "tog-hideminor": "Cua is acontzos minores in sa pàgina de is ùrtimas mudàntzias",
-       "tog-hidepatrolled": "Cua sos càmbios verificados in sos ùrtimos càmbios",
+       "tog-hidepatrolled": "Cua sas mudas verificadas in sas ùrtimos càmbios",
        "tog-newpageshidepatrolled": "Cua sas pàginas verificadas dae sa lista de sas pàginas noas",
        "tog-extendwatchlist": "Ammània sa watchlist pro ammustrare totu sos càmbios, non sos prus reghentes ebbia",
        "tog-usenewrc": "Pone in pare sos càmbios de cada pàgina in sos ùrtimos càmbios e in sa watchlist",
@@ -28,7 +28,7 @@
        "tog-watchdeletion": "Agiunghe pàginas e documentos chi apo fuliadu in sa watchlist mea",
        "tog-minordefault": "Marca comente minores pro difetu totu sos càmbios",
        "tog-previewontop": "Ammustra s'anteprima in subra de sa casella de càmbiu e no in suta",
-       "tog-previewonfirst": "Ammustra s'anteprima pro su primu càmbiu",
+       "tog-previewonfirst": "Ammustra s'anteprima pro sa prima muda",
        "tog-enotifwatchlistpages": "Imbia·mi una post.el. cando b'at àpidu unu càmbiu in una pàgina o in unu documentu de sa watchlist mea",
        "tog-enotifusertalkpages": "Imbia·mi una post.el. cando sa pàgina de sas cuntierras meas est cambiada",
        "tog-enotifminoredits": "Imbia·mi una post.el. fintzas pro sos càmbios minores de sas pàginas e documentos",
        "tog-fancysig": "Trata sa firma comente unu testu wiki (sena ligàmenes automàticos)",
        "tog-uselivepreview": "Imprea sa funtzione \"anteprima bia\" (isperimentale)",
        "tog-forceeditsummary": "Averte·mi si su campu ogetu est bòidu",
-       "tog-watchlisthideown": "Cua sos càmbios meos dae sa watclist",
-       "tog-watchlisthidebots": "Cua sos càmbios de sos bots dae sa watchlist",
+       "tog-watchlisthideown": "Cua sas mudas meas dae sa watclist",
+       "tog-watchlisthidebots": "Cua sas mudas de sos bots dae sa watchlist",
        "tog-watchlisthideminor": "Cua sos càmbios minores dae sa watchlist",
        "tog-watchlisthideliu": "Cua sos càmbios de sos utentes intrados dae sa watchlist",
        "tog-watchlisthideanons": "Cua sos càmbios de sos utentes anònimos dae sa watchlist",
-       "tog-watchlisthidepatrolled": "Cua càmbios verificados dae sa watchlist",
+       "tog-watchlisthidepatrolled": "Cua mudas verificadas dae sa watchlist",
        "tog-ccmeonemails": "Imbia·mi sas còpias de sas post.els chi imbio a sos àteros utentes",
        "tog-showhiddencats": "Ammustra sas categorias cuadas",
        "tog-useeditwarning": "Amonestamì si lassu una pagina cun mudantzias chena de sarvai.",
        "nstab-project": "Pàgina de servìtziu",
        "nstab-image": "Documentu",
        "nstab-mediawiki": "Messàgiu",
-       "nstab-template": "Modellu",
+       "nstab-template": "Template",
        "nstab-help": "Agiudu",
        "nstab-category": "Categoria",
        "nosuchaction": "No esistit custa atzione",
        "nosuchactiontext": "S'atzione ispetzificada in sa URL no est vàlida.\nEst possìbile chi sa URL siat istada carcada male, o si siat sighidu unu ligàmene non vàlidu.\nCustu diat pòdere èssere unu \"bug\" de {{SITENAME}}.",
        "nosuchspecialpage": "Custa pàgina ispetziale no esistit",
-       "nospecialpagetext": "<strong>As pedidu una pàgina ispetziale non vàlida.</strong>\n\nUna lista de pàginas ispetziales vàlidas l'agatas in [[Special:SpecialPages|{{int:specialpages}}]].",
+       "nospecialpagetext": "<strong>As pedidu una pàgina ispetziale non vàlida.</strong>\n\nUna lista de pàginas ispetziales vàlidas dd'agatas in [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Faddina",
-       "databaseerror": "Faddina de sa base de datos",
+       "databaseerror": "Faddina de su database",
        "databaseerror-function": "Funtzione: $1",
-       "readonly": "Base de datos blocada",
-       "enterlockreason": "Inserta su motivu de su blocu, ispetzifichende su momentu probàbile chi su blocu at a agabbare",
+       "databaseerror-error": "Faddina: $1",
+       "readonly": "Database bloccadu",
+       "enterlockreason": "Inserta su motivu de su blocu, ispetzifichende su momentu probàbile chi su blocu at a acabbare",
        "readonlytext": "In custu momentu su database est bloccadu dae aciunturas e àteras modificas, probabilmente pro ordinaria manutentzione a su database, a pustis de custas at a èssere normale torra.\n\nS'aministradore chi dd'at bloccadu at donadu custa ispiegatzione: $1",
        "missing-article": "Su database no at agatadu su testu de una pàgina ki diat àer agatadu a suta de su nùmene \"$1\" $2.\n\nCustu a su sòlitu si verìficat cando bi est unu ligàmine in sa stòria o in unu cunfrontu intre revisiones de una pàgina ki est stada fuliada.\n\nSi no est custu su casu, s'est agatada una faddina de su software.\nPro praxere signa s'acuntèssidu a unu [[Special:ListUsers/sysop|amministradore]] spetzifichende su URL de sa faddina.",
        "missingarticle-rev": "(revisione nùmeru: $1)",
        "cannotdelete": "No est stadu possìbile burrare sa pàgina o su file \"$1\".\nPodet èsser stadu burradu dae calicunu àteru.",
        "badtitle": "Tìtulu malu",
        "badtitletext": "Su tìtulu de sa pàgina ch'as pediu est bùidu, isballiau, o iscritu in is cullegamentus inter-wiki in manera non currègia o cun caràteres no amìtius.",
-       "viewsource": "Càstia testu codificadu",
+       "viewsource": "Càstia mitza",
        "viewsource-title": "Càstia sa mitza de $1",
        "actionthrottled": "Atzione rimandada",
-       "namespaceprotected": "Non tenes su permissu de acontzare is pàginas in su nùmene-lugu '''$1'''.",
+       "namespaceprotected": "Non tenes su permissu de cambiare is pàginas in su nùmene-lugu '''$1'''.",
        "ns-specialprotected": "Is pàginas ispetziales non podent èssere acontzadas.",
        "exception-nologin": "Non ses intrau",
        "virus-scanfailed": "scansione faddida (còdixe $1)",
        "virus-unknownscanner": "antivirus disconnotu:",
        "logouttext": "<strong>As acabadu sa sessione.</strong>\n\nTene contu ca is pàginas ki sunt giai abertas in àteras bentanas podent sighire a pàrrer comente cando fias identificadu, fintzas a cando non ddas renfriscas dae su browser tuo.",
-       "yourname": "Nùmene utente",
+       "welcomecreation-msg": "Su contu tuo est istadu creadu.\nSi boles podes cambiare is [[Special:Preferences|prefèntzias tuas]] pro {{SITENAME}}",
+       "yourname": "Nùmene usuàriu",
        "userlogin-yourname": "Nùmene usuàriu",
        "userlogin-yourname-ph": "Inserta su nùmene usuàriu tuo",
        "createacct-another-username-ph": "Inserta su nùmene usuàriu:",
-       "yourpassword": "Paràula de òrdine:",
+       "yourpassword": "Password:",
        "userlogin-yourpassword": "Password",
        "userlogin-yourpassword-ph": "Inserta sa password tua",
        "createacct-yourpassword-ph": "Inserta una password",
-       "yourpasswordagain": "Repiti sa paràula de òrdine:",
+       "yourpasswordagain": "Repiti sa password:",
        "createacct-yourpasswordagain": "Cunfirma sa password",
        "createacct-yourpasswordagain-ph": "Inserta sa password torra",
        "remembermypassword": "Ammenta sa paràula de òrdine in custu carculadore (pro unu màssimu de $1 {{PLURAL:$1|die|dies}})",
        "logout": "Serra sessione",
        "userlogout": "Essida",
        "notloggedin": "Non ses intradu",
+       "userlogin-noaccount": "Non tenes unu contu?",
+       "userlogin-joinproject": "Registra⋅ti a {{SITENAME}}",
        "nologin": "Non tenes unu contu? '''$1'''.",
        "nologinlink": "Crea unu contu",
        "createaccount": "Crea contu",
        "gotaccount": "Tenes giai unu contu? $1.",
        "gotaccountlink": "Identìfica·ti",
+       "userlogin-createanother": "Crea un àteru contu",
        "createacct-emailrequired": "Indirutzu Email",
        "createaccountmail": "Imprea una password a sorte e ispedidda a su indiritzu email ispetzificadu",
        "createaccountreason": "Motivu:",
        "createacct-reason": "Motivu",
+       "createacct-reason-ph": "Proite ses creande un àteru contu",
+       "createacct-submit": "Crea su contu tuo",
+       "createacct-another-submit": "Crea un àteru contu",
        "createacct-benefit-body1": "{{PLURAL:$1|acontzu|acontzos}}",
        "createacct-benefit-body2": "{{PLURAL:$1|pàgina|pàginas}}",
-       "badretype": "Sas paràulas de òrdine chi as insertadu non currispondent.",
+       "badretype": "Is passwords chi as insertadu non currispondent.",
        "userexists": "Su nùmene usuàriu insertadu est giai impreadu.\nSèbera unu nùmene diferente.",
        "loginerror": "Faddina de identificatzione",
-       "noname": "Su nùmene utente insertadu no est vàlidu.",
+       "createacct-error": "Faddina in sa creatzione de su contu",
+       "noname": "Su nùmene usuàriu insertadu no est vàlidu.",
        "loginsuccesstitle": "Ti ses identificadu",
-       "loginsuccess": "'''Immoe ses intradu in {{SITENAME}} cun su nùmene utente \"$1\".'''",
-       "nosuchuser": "Non b'at un'utente cun su nùmene \"$1\".\nSos nùmenes utente sunt sensìbiles a sas lìteras mannas.\nVerìfica su nùmene insertadu o [[Special:UserLogin/signup|crea unu contu nou]].",
-       "nouserspecified": "Deves ispetzificare unu nùmene utente.",
+       "loginsuccess": "'''Immoe ses intradu in {{SITENAME}} cun su nùmene usuàriu \"$1\".'''",
+       "nosuchuser": "Non b'at usuàriu cun su nùmene \"$1\".\nIs nùmenes usuàriu sunt sensìbiles a is lìteras mannas.\nVerìfica su nùmene insertadu o [[Special:UserLogin/signup|crea unu contu nou]].",
+       "nouserspecified": "Deves ispetzificare unu nùmene usuàriu.",
        "wrongpassword": "Sa paràula de òrdine insertada no est bona. Prova torra.",
        "wrongpasswordempty": "No as iscritu sa paràula de òrdine.\nProva torra.",
-       "passwordtooshort": "Sas paràulas de òrdine devent tènnere a su mancu {{PLURAL:$1|1 caràtere|$1 caràteres}}.",
-       "password-name-match": "Sa paràula de òrdine tua devet èssere diferente dae su nùmene utente tuo.",
+       "passwordtooshort": "Is passwords depent tènner a su mancu {{PLURAL:$1|1 caràtere|$1 caràteres}}.",
+       "password-name-match": "Sa password tua depet èsser diferente dae su nùmene usuàriu tuo.",
        "mailmypassword": "Resetta sa password",
-       "passwordremindertitle": "Servìtziu Password Reminder di {{SITENAME}}",
+       "passwordremindertitle": "Servìtziu Password Reminder de {{SITENAME}}",
        "passwordremindertext": "Calicunu (probabilmenti tue, cun s'indiritzu IP $1) at pediu de arritziri una password noa pro intrare a {{SITENAME}} ($4).\nUna password temporanea pro s'usuàriu \"$2\" est istada impostada a \"$3\".\nChi custu fiat ne is intentziones tuas, depis intrare (log in) e scioberari una password noa.\nSa password temporanea tua at a iscadiri in {{PLURAL:$5|una die|$5 dies}}.\n\nChi non ses istadu a pediri sa password, o chi as torrau a agatare sa password torra e non da depis cambiari prus, non cunsideras custu messagiu e sighi a impreare sa password beccia.",
-       "noemail": "Peruna post.el. resurtat registrada pro s'utente \"$1\".",
-       "passwordsent": "Una paràula de òrdine noa est istada imbiada a s'indiritzu post.el. de s'utente \"$1\".\nPro praghere, cando la retzis identìfica·ti torra.",
+       "noemail": "Peruna e-mail resurtat registrada pro s'usuàriu \"$1\".",
+       "passwordsent": "Una password noa est stada mandada a s'indiritzu e-mail de s'usuàriu \"$1\".\nPro praxere, cando dda retzis identìfica·ti torra.",
        "mailerror": "Faddina imbiende su messàgiu: $1",
        "emailauthenticated": "S'indiritzu e-mail tuo est istadu autenticau su $2 a is $3.",
        "emailconfirmlink": "Cunfirma s'indiritzu e-mail tuo",
        "accountcreated": "Contu creadu",
-       "accountcreatedtext": "S'account usuàriu pro [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) est stadu creadu.",
+       "accountcreatedtext": "Su contu de s'usuàriu [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) est stadu creadu.",
        "createaccount-title": "Creatzione de unu contu pro {{SITENAME}}",
        "loginlanguagelabel": "Limba: $1",
        "createacct-another-realname-tip": "Su nomini beru pois fai de mancu de ddu ponni.\nSi sceberas de du ponni, at a essi imperau po arreconnosci a tui su traballu tuu.",
        "pt-createaccount": "Registra·ti",
        "pt-userlogout": "Essida",
        "changepassword": "Càmbia password",
-       "resetpass_header": "Càmbia sa paràula de òrdine de su contu",
-       "oldpassword": "Paràula de òrdine betza:",
-       "newpassword": "Paràula de òrdine noa:",
-       "retypenew": "Torra a iscrìere sa paràula de òrdine noa:",
-       "resetpass_submit": "Càmbia sa paràula de òrdine e identìfica·ti",
+       "resetpass_header": "Càmbia sa password de su contu",
+       "oldpassword": "Password betza:",
+       "newpassword": "Password noa:",
+       "retypenew": "Torra a iscrìere sa password noa:",
+       "resetpass_submit": "Càmbia sa password e identifica·ti",
        "resetpass_forbidden": "Non faghet a cambiare sa password",
        "resetpass-no-info": "Depes èsser identificadu pro abèrrer custa pàgina deretu.",
        "resetpass-submit-loggedin": "Càmbia password",
        "passwordreset-email": "Indiritzu email:",
        "passwordreset-emailtitle": "Particulares de s'usuàriu in {{SITENAME}}",
        "changeemail": "Càmbia indiritzu email",
+       "changeemail-header": "Càmbia s'indirìtzu email de su contu",
        "changeemail-oldemail": "Indiritzu email atuale:",
        "changeemail-newemail": "Indiritzu email nou:",
        "changeemail-none": "(nudda)",
        "accmailtitle": "Password ispedida.",
        "newarticle": "(Nou)",
        "newarticletext": "Custa pàgina no esistit galu.\nPro creare sa pàgina, scrie in su box inoghe in bàsciu (abbàida sa [$1 pàgina de agiudu] pro àteras informatziones).\nSi ses intradu inoghe pro sbàlliu, carca in su browser tuo su butone '''back/indietro'''.",
-       "anontalkpagetext": "----''Custa est sa pàgina de cuntierra de unu usuàriu anònimu ki no at creadu unu account galu, o ki non dd'usat. Pro custu impreamus su nùmeru de indiritzos IP pro ddu identificare. Is indiritzos IP podent però èsser cundivìdidos dae unos cantos usuàrios. Si ses unu usuàriu anònimu e ritenes ki custos cummentos non sunt diretos a tue, pro praxere [[Special:UserLogin/signup|crea unu account]] o [[Special:UserLogin|identifica·ti (log in)]] pro evitare cunfusione cun àteros usuàrios anònimos.''",
-       "noarticletext": "In custu momentu sa pàgina est bùida.\nPodes [[Special:Search/{{PAGENAME}}|chircare custu tìtulu]] in àteras pàginas, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chircare in is registros ligados] oppuru [{{fullurl:{{FULLPAGENAME}}|action=edit}} acontzare sa pàgina]</span>.",
-       "userpage-userdoesnotexist": "S'account de s'usuàriu \"<nowiki>$1</nowiki>\" no est stadu registradu.\nPro praxere abbàida si boles creare/acontzare custa pàgina.",
-       "userpage-userdoesnotexist-view": "S'account de s'usuàriu \"$1\" no est stadu registradu.",
+       "anontalkpagetext": "----''Custa est sa pàgina de cuntierra de unu usuàriu anònimu ki no at creadu unu account galu, o ki non dd'usat. Pro custu impreamus su nùmeru de indiritzos IP pro ddu identificare. Is indiritzos IP podent però èsser cundivìdidos dae unos cantos usuàrios. Si ses unu usuàriu anònimu e ritenes ki custos cummentos non sunt diretos a tue, pro praxere [[Special:UserLogin/signup|crea unu contu]] o [[Special:UserLogin|identifica·ti (log in)]] pro evitare cunfusione cun àteros usuàrios anònimos.''",
+       "noarticletext": "In custu momentu sa pàgina est bùida.\nPodes [[Special:Search/{{PAGENAME}}|chircare custu tìtulu]] in àteras pàginas, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chircare in is registros ligados] oppuru [{{fullurl:{{FULLPAGENAME}}|action=edit}} cambiare sa pàgina como]</span>.",
+       "userpage-userdoesnotexist": "Su contu de s'usuàriu \"<nowiki>$1</nowiki>\" no est stadu registradu.\nPro praxere abbàida si boles a sèriu creare/cambiare custa pàgina.",
+       "userpage-userdoesnotexist-view": "Su contu de s'usuàriu \"$1\" no est stadu registradu.",
        "updated": "(Atualizadu)",
        "note": "'''Nota:'''",
        "previewnote": "<strong>Regorda·ti ca custa est feti una ANTIPRIMA.</strong>\nIs mudàntzias tuas non sunt galu sarbadas!",
        "grouppage-sysop": "{{ns:project}}:Amministradores",
        "grouppage-bureaucrat": "{{ns:project}}:Burocrates",
        "right-read": "Lègere pàginas",
-       "right-edit": "Acontzare pàginas",
+       "right-edit": "Cambiare pàginas",
        "right-move": "Mòver pàginas",
        "right-move-subpages": "Mòvere pàginas cun is suta-pàginas issoru",
        "right-move-rootuserpages": "Mòvere is pàginas base de is usuàrios",
        "newuserlogpage": "Usuàrios nous",
        "rightslog": "Deretos de is usuàrios",
        "action-read": "lègher custa pàgina",
-       "action-edit": "acontzare custa pàgina",
+       "action-edit": "cambiare custa pàgina",
        "action-createpage": "creare pàginas",
        "action-move": "mòvere custa pàgina",
        "action-movefile": "mòvere custu file",
        "doubleredirectstext": "Custa pàgina cuntenet una lista de pàginas ki re-indiritzant a àteras pàginas de re-indiritzamentu.\nOgni lìnia cuntenet ligàmines a su primu e a su de duos re-indiritzamentu, aici comente sa prima lìnia de sa de duos re-indiritzamentos, chi de sòlitu adòbiat s'artìculu \"beru\", a sa cale fintzas su primu re-indiritzamentu dia depet puntare.\nIs re-indiritzamentos <del>cantzellados</del> sunt stados curretos.",
        "brokenredirects": "Redirects isballiaus",
        "brokenredirectstext": "Custus redirects ligant cun pàginas chi no esistint.",
-       "brokenredirects-edit": "acontza",
+       "brokenredirects-edit": "càmbia",
        "brokenredirects-delete": "cantzella",
        "withoutinterwiki-legend": "Prefissu",
        "withoutinterwiki-submit": "Ammustra",
        "protect-summary-cascade": "ricorsiva",
        "protect-expiring": "iscadèntzia: $1 (UTC)",
        "protect-cascade": "Ampara totu is pàginas inclùdias in custa (amparadura ricorsiva)",
-       "protect-cantedit": "Non podes cambiare is livellus de amparadura pro sa pàgina, pro ite non tenes su permissu de acontzare sa pàgina etotu.",
+       "protect-cantedit": "Non podes cambiare is livellus de amparadura pro sa pàgina, pro ite non tenes su permissu de cambiare sa pàgina etotu.",
        "protect-othertime": "Àteru perìodu:",
        "protect-expiry-options": "1 ora:1 hour,1 die:1 day,1 chida:1 week,2 chidas:2 weeks,1 mese:1 month,3 meses:3 months,6 meses:6 months,1 annu:1 year,infinidu:infinite",
        "restriction-type": "Permissu:",
        "uctop": "(atuale)",
        "month": "Dae su mese (e in antis):",
        "year": "Dae s'annu (e in antis):",
-       "sp-contributions-newbies": "Ammustra feti is contributziones de is accounts noos",
+       "sp-contributions-newbies": "Ammustra feti is contributziones de is contos noos",
        "sp-contributions-blocklog": "registru de is bloccos",
        "sp-contributions-talk": "cuntierra",
        "sp-contributions-search": "Chirca contributziones",
        "badipaddress": "S'indiritzu IP indicadu non est currègidu.",
        "blockipsuccesssub": "Bloccu esecutivu",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] è stadu bloccadu. <br />\nCàstia sa [[Special:BlockList|lista de bloccados]] pro bìder sas bloccaduras.",
-       "ipb-edit-dropdown": "Acontza su motivu de su bloccu",
+       "ipb-edit-dropdown": "Càmbia su motivu de su bloccu",
        "ipb-unblock-addr": "Sblocca $1",
        "ipb-blocklist-contribs": "Contributziones de {{GENDER:$1|$1}}",
        "unblockip": "Sblocca s'usuàriu",
        "blocklogpage": "Bloccos de usuàrios",
        "blocklogentry": "bloccau [[$1]] pro unu tempu de $2 $3",
        "unblocklogentry": "at sbloccau $1",
-       "block-log-flags-nocreate": "creatzione account bloccada",
+       "block-log-flags-nocreate": "creatzione de contu bloccada est",
        "sorbs": "DNSBL",
        "lockdb": "Blocca su database",
        "unlockdb": "Sblocca su database",
        "tooltip-pt-login": "Si cunsìgiat sa registratzione; mancari non siat obligatoria",
        "tooltip-pt-logout": "Essida (log out)",
        "tooltip-ca-talk": "Cuntierras a propositu de su cuntestu de sa pàgina",
-       "tooltip-ca-edit": "Podes acontzare custa pàgina.\nPro praxere, prima de sarbare càstia s'antiprima",
+       "tooltip-ca-edit": "Podes cambiare custa pàgina.\nPro praxere, prima de sarbare càstia s'antiprima",
        "tooltip-ca-addsection": "Incumintza una setzione noa",
        "tooltip-ca-viewsource": "Sa pàgina est amparada.\nPodes castiare sa mitza sua",
        "tooltip-ca-history": "Versiones coladas de custa pàgina",
        "tooltip-t-permalink": "Cullegamentu permanente a custa versione de sa pàgina",
        "tooltip-ca-nstab-main": "Càstia su cuntènnidu de sa pàgina",
        "tooltip-ca-nstab-user": "Càstia sa pàgina usuàriu",
-       "tooltip-ca-nstab-special": "Custa est una pàgina ispetziale, non dda podes acontzare",
+       "tooltip-ca-nstab-special": "Custa est una pàgina ispetziale, non dda podes cambiare",
        "tooltip-ca-nstab-project": "Càstia sa pàgina de servìtziu",
        "tooltip-ca-nstab-image": "Càstia sa pàgina de su file",
        "tooltip-ca-nstab-template": "Càstia su template",
        "size-kilobytes": "$1 KB",
        "size-megabytes": "$1 MB",
        "size-gigabytes": "$1 GB",
-       "watchlistedit-normal-title": "Acontza sa watchlist",
+       "watchlistedit-normal-title": "Càmbia sa lista de annotadas",
        "watchlistedit-raw-titles": "Tìtulos:",
        "watchlisttools-view": "Càstia mudàntzias de importu",
        "watchlisttools-edit": "Càstia e acontza sa watchlist",
        "version-software-version": "Versione",
        "fileduplicatesearch-submit": "Chirca",
        "specialpages": "Pàginas ispetziales",
+       "specialpages-group-login": "Intra / crea contu",
        "specialpages-group-pages": "Listas de is pàginas",
-       "tags-edit": "acontza",
+       "tags-edit": "càmbia",
        "htmlform-selectorother-other": "Àteru",
        "rightsnone": "(nisciunu)",
        "searchsuggest-search": "Chirca",
index 2a980fe..7290105 100644 (file)
@@ -23,7 +23,8 @@
                        "ශ්වෙත",
                        "සුරනිමල",
                        "아라",
-                       "හරිත"
+                       "හරිත",
+                       "Indunil Chamara"
                ]
        },
        "tog-underline": "සබැඳි යටීර කිරීම:",
        "thursday": "බ්‍රහස්පතින්දා",
        "friday": "සිකුරාදා",
        "saturday": "සෙනසුරාදා",
-       "sun": "ඉරිදා",
-       "mon": "සඳුදා",
-       "tue": "අඟ",
-       "wed": "බදාදා",
-       "thu": "බ්‍රහස්",
-       "fri": "සිකු",
-       "sat": "සෙන",
+       "sun": "ඉරි:",
+       "mon": "සඳු:",
+       "tue": "අඟ:",
+       "wed": "බදා:",
+       "thu": "බ්‍රහ:",
+       "fri": "සිකු:",
+       "sat": "සෙන:",
        "january": "ජනවාරි",
        "february": "පෙබරවාරි",
        "march": "මාර්තු",
        "december-gen": "දෙසැම්බර්",
        "jan": "ජන",
        "feb": "පෙබ",
-       "mar": "මාර්තු",
-       "apr": "අප්‍රේල්",
+       "mar": "මාර්",
+       "apr": "අප්‍රේ",
        "may": "මැයි",
        "jun": "ජූනි",
        "jul": "ජූලි",
        "randomincategory": "ප්‍රවර්ගයේ අහඹු පිටු",
        "randomincategory-invalidcategory": "\"$1\" වලංගු ප්‍රවර්ග නාමයක් නොවේ.",
        "randomincategory-nopages": " [[:ප්‍රවර්ගය:$1|$1]] ප්‍රවර්ගයේ පිටු නොමැත.",
-       "randomincategory-selectcategory-submit": "යන්න",
+       "randomincategory-legend": "ප්‍රවර්ගයේ අහඹු පිටු",
        "randomredirect": "අහුඹු යළි-යොමුකිරීම",
        "randomredirect-nopages": "\"$1\" නාම-අවකාශයෙහි යළි-යොමුවීම් නොමැත.",
        "statistics": "සංඛ්‍යාන දත්ත",
        "import": "පිටු ආයාත කරන්න",
        "importinterwiki": "අන්තර්විකී ආයාතය",
        "import-interwiki-text": "ආයාත කිරීම සඳහා විකියක් හා පිටු ශීර්ෂයක් තෝරාගන්න.\nසංශෝධන දිනයන් හා සංස්කාරකවරුන්ගේ නම් සංරක්‍ෂණය කෙරෙනු ඇත.\nසියළු අන්තර්විකි ආ‍යාත ක්‍රියාවන් [[Special:Log/import|ආයාත ලඝු-සටහනෙහි]] සටහන් වනු ඇත.",
-       "import-interwiki-source": "මූලාශ්‍ර විකිය/පිටුව:",
+       "import-interwiki-sourcepage": "මූලාශ්‍ර පිටුව:",
        "import-interwiki-history": "මෙම පිටුව සඳහා සියළු ඉතිහාස අනුවාදයන් පිටපත් කරන්න",
        "import-interwiki-templates": "සියළු සැකිලි අන්තර්ගත කරන්න",
        "import-interwiki-submit": "ආයාත කරන්න",
index fb31594..b650281 100644 (file)
        "randomincategory": "Naključna stran v kategoriji",
        "randomincategory-invalidcategory": "»$1« ni veljavno ime kategorije.",
        "randomincategory-nopages": "V kategoriji [[:Category:$1]] ni nobene strani.",
-       "randomincategory-selectcategory": "Dobi naključno stran iz kategorije: $1 $2.",
-       "randomincategory-selectcategory-submit": "Pojdi",
+       "randomincategory-category": "Kategorija:",
+       "randomincategory-legend": "Naključna stran v kategoriji",
        "randomredirect": "Naključna preusmeritev",
        "randomredirect-nopages": "V imenskem prostoru »$1« ni preusmeritev.",
        "statistics": "Statistika",
        "exbeforeblank": "vsebina pred brisanjem: '$1'",
        "delete-confirm": "Brisanje »$1«",
        "delete-legend": "Izbriši",
-       "historywarning": "'''Opozorilo:''' Stran, ki jo želite izbrisati, ima zgodovino s približno $1 {{PLURAL:$1|redakcijo|redakcijama|redakcijami}}:",
+       "historywarning": "<strong>Opozorilo:</strong> Stran, ki jo nameravate izbrisati, ima zgodovino s približno $1 {{PLURAL:$1|redakcijo|redakcijama|redakcijami}}:",
        "confirmdeletetext": "Iz zbirke podatkov boste izbrisali stran ali sliko skupaj z vso njeno zgodovino.\nProsimo, '''potrdite''', da to resnično želite, da razumete posledice dejanja in da se ravnate po [[{{MediaWiki:Policy-url}}|pravilih]].",
        "actioncomplete": "Poseg je končan",
        "actionfailed": "Dejanje spodletelo",
        "delete-edit-reasonlist": "Uredi razloge za brisanje",
        "delete-toobig": "Ta stran ima obsežno zgodovino urejanja, tj. čez $1 {{PLURAL:$1|redakcijo|redakciji|redakcije|redakcij}}.\nIzbris takšnih strani je bil omejen v izogib neželenim motnjam {{GRAMMAR:dative|{{SITENAME}}}}.",
        "delete-warning-toobig": "Ta stran ima obsežno zgodovino urejanja, tj. čez $1 {{PLURAL:$1|redakcijo|redakciji|redakcije|redakcij}}.\nNjeno brisanje lahko zmoti obratovanje zbirke podatkov {{GRAMMAR:dative|{{SITENAME}}}};\nnadaljujte s previdnostjo.",
-       "delete-cantedit": "Strani ne morete izbrisati, ker je nimate dovoljenja urejati.",
+       "deleteprotected": "Strani ne morete izbrisati, ker jo je nekdo zaščitil.",
        "deleting-backlinks-warning": "'''Opozorilo:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Druge strani]] se povezujejo na ali vključujejo stran, ki jo nameravate izbrisati.",
        "rollback": "Vrni spremembe",
        "rollback_short": "Vrni",
        "import": "Uvoz strani",
        "importinterwiki": "Uvoz transwiki",
        "import-interwiki-text": "Izberite wiki in naslov strani za uvoz.\nDatumi in imena urejevalcev redakcij bodo ohranjena.\nVsi uvozi med wikiji so zabeleženi v [[Special:Log/import|dnevniku uvozov]].",
-       "import-interwiki-source": "Izvorni wiki/stran:",
+       "import-interwiki-sourcewiki": "Izvorni wiki:",
+       "import-interwiki-sourcepage": "Izvorna stran:",
        "import-interwiki-history": "Kopiraj vse dosedanje redakcije te strani",
        "import-interwiki-templates": "Vključi vse predloge",
        "import-interwiki-submit": "Uvozi",
index 5a3a2f9..800ac19 100644 (file)
        "action-move": "премештање ове странице",
        "action-move-subpages": "премештање ове странице и њених подстраница",
        "action-move-rootuserpages": "премештање основних корисничких страница",
+       "action-move-categorypages": "премештање категорија",
        "action-movefile": "премештање ове датотеке",
        "action-upload": "слање ове датотеке",
        "action-reupload": "замењивање постојеће датотеке",
        "randomincategory": "Случајна страница у категорији",
        "randomincategory-invalidcategory": "„$1“ није ваљано име категорије",
        "randomincategory-nopages": "Нема страница у категорији [[:Category:$1|$1]].",
-       "randomincategory-selectcategory-submit": "Иди",
        "randomredirect": "Случајно преусмерење",
        "randomredirect-nopages": "Нема преусмерења у именском простору „$1”.",
        "statistics": "Статистике",
        "delete-edit-reasonlist": "Уреди разлоге брисања",
        "delete-toobig": "Ова страница има велику историју, преко $1 {{PLURAL:$1|измене|измене|измена}}.\nБрисање таквих страница је ограничено да би се спречило случајно оптерећење сервера.",
        "delete-warning-toobig": "Ова страница има велику историју, преко $1 {{PLURAL:$1|измене|изменe|измена}}.\nЊено брисање може пореметити базу података, стога поступајте с опрезом.",
-       "delete-cantedit": "Не можете обрисати страницу коју не можете уређивати.",
        "deleting-backlinks-warning": "'''Упозорење:''' бришете страницу која је укључена у [[Special:WhatLinksHere/{{FULLPAGENAME}}|друге странице]] или друге странице воде на њу.",
        "rollback": "Врати измене",
        "rollback_short": "Врати",
        "import": "Увоз страница",
        "importinterwiki": "Међувики увоз",
        "import-interwiki-text": "Изаберите вики и наслов странице за увоз.\nДатуми и имена уредника ће бити сачувани.\nСве радње при увозу с других викија су забележене у [[Special:Log/import|дневнику увоза]].",
-       "import-interwiki-source": "Извор викија/странице:",
        "import-interwiki-history": "Копирај све верзије историје за ову страницу",
        "import-interwiki-templates": "Укључи све шаблоне",
        "import-interwiki-submit": "Увези",
        "logentry-rights-rights": "$1 је {{GENDER:$2|променио|променила}} чланство групе за $3 из $4 у $5",
        "logentry-rights-rights-legacy": "$1 је {{GENDER:$2|променио|променила}} чланство групе за $3",
        "logentry-rights-autopromote": "$1 је аутоматски {{GENDER:$2|унапређен|унапређена}} из $4 у $5",
+       "logentry-upload-upload": "$1 је {{GENDER:$2|послао|послала}} $3",
+       "logentry-upload-overwrite": "$1 је {{GENDER:$2|послао|послала}} нову верзију $3",
+       "logentry-upload-revert": "$1 је {{GENDER:$2|послао|послала}} $3",
        "rightsnone": "(нема)",
        "feedback-bugornote": "Ако сте спремни да детаљно опишете технички проблем, онда [$1 пријавите грешку].\nУ супротном, послужите се једноставним обрасцем испод. Ваш коментар ће стајати на страници „[$3 $2]“, заједно с корисничким именом и прегледачем који користите.",
        "feedback-subject": "Наслов:",
index b386295..4d9b3fd 100644 (file)
        "randomincategory": "Slučajna stranica u kategoriji",
        "randomincategory-invalidcategory": "„$1“ nije valjano ime kategorije",
        "randomincategory-nopages": "Nema stranica u kategoriji [[:Category:$1|$1]].",
-       "randomincategory-selectcategory-submit": "Idi",
        "randomredirect": "Slučajno preusmerenje",
        "randomredirect-nopages": "Nema preusmerenja u imenskom prostoru „$1”.",
        "statistics": "Statistike",
        "import": "Uvoz stranica",
        "importinterwiki": "Međuviki uvoz",
        "import-interwiki-text": "Izaberite viki i naslov stranice za uvoz.\nDatumi i imena urednika će biti sačuvani.\nSve radnje pri uvozu s drugih vikija su zabeležene u [[Special:Log/import|dnevniku uvoza]].",
-       "import-interwiki-source": "Izvor vikija/stranice:",
        "import-interwiki-history": "Kopiraj sve verzije istorije za ovu stranicu",
        "import-interwiki-templates": "Uključi sve šablone",
        "import-interwiki-submit": "Uvezi",
index d4aa3c9..075690c 100644 (file)
        "randomincategory": "Slumpsida i kategori",
        "randomincategory-invalidcategory": "\"$1\" är inte ett giltigt kategorinamn.",
        "randomincategory-nopages": "Det finns inga sidor i kategorin [[:Category:$1]].",
-       "randomincategory-selectcategory": "Få slumpsida från kategori: $1 $2.",
-       "randomincategory-selectcategory-submit": "Gå",
+       "randomincategory-category": "Kategori:",
+       "randomincategory-legend": "Slumpsida i kategori",
        "randomredirect": "Slumpmässig omdirigering",
        "randomredirect-nopages": "Det finns inte några omdirigeringar i namnrymden \"$1\".",
        "statistics": "Statistik",
        "exbeforeblank": "innehåll före tömning var: \"$1\"",
        "delete-confirm": "Radera \"$1\"",
        "delete-legend": "Radera",
-       "historywarning": "'''Varning:''' Sidan du håller på att radera har en historik med ungefär $1 {{PLURAL:$1|version|versioner}}:",
+       "historywarning": "<strong>Varning:</strong> Sidan du håller på att radera har en historik med ungefär $1 {{PLURAL:$1|version|versioner}}:",
        "confirmdeletetext": "Du håller på att ta bort en sida med hela dess historik.\nBekräfta att du förstår vad du håller på med och vilka konsekvenser detta leder till, och att du följer [[{{MediaWiki:Policy-url}}|riktlinjerna]].",
        "actioncomplete": "Genomfört",
        "actionfailed": "Handlingen misslyckades",
        "delete-edit-reasonlist": "Redigera anledningar för radering",
        "delete-toobig": "Denna sida har en lång redigeringshistorik med mer än $1 {{PLURAL:$1|sidversion|sidversioner}}. Borttagning av sådana sidor har begränsats för att förhindra oavsiktliga driftstörningar på {{SITENAME}}.",
        "delete-warning-toobig": "Denna sida har en lång redigeringshistorik med mer än $1 {{PLURAL:$1|sidversion|sidversioner}}. Att radera sidan kan skapa problem med hanteringen av databasen på {{SITENAME}}; var försiktig.",
-       "delete-cantedit": "Du kan inte ta radera denna sida eftersom du inte har behörighet att redigera den.",
+       "deleteprotected": "Du kan inte radera denna sida eftersom den är skyddad.",
        "deleting-backlinks-warning": "'''Varning:'''\n[[Special:WhatLinksHere/{{FULLPAGENAME}}|Andra sidor]] länkar till eller inkluderar sidan som du är på väg att radera.",
        "rollback": "Rulla tillbaka ändringar",
        "rollback_short": "Tillbakarullning",
        "movepagetalktext": "Diskussionssidan kommer att även den automatiskt flyttas '''om inte''':\n*Det redan finns en diskussionssida som inte är tom med det nya namnet, eller\n*Du avmarkerar rutan nedan.\n\nI de fallen måste du flytta eller sammanfoga sidan manuellt, om det önskas.",
        "movearticle": "Flytta sidan:",
        "moveuserpage-warning": "'''Varning:''' Du håller på att flytta en användarsida. Observera att endast sidan kommer att flyttas och att användaren ''inte'' kommer att byta namn.",
-       "movecategorypage-warning": "<strong>Varning:</strong> Du är på väg att flytta ebn kategorisida. Observera att endast sidan kommer att flyttas och eventuella sidor i den gamla kategorin kommer <em>inte</em> att kategoriseras om till den nya kategorin.",
+       "movecategorypage-warning": "<strong>Varning:</strong> Du är på väg att flytta en kategorisida. Observera att endast sidan kommer att flyttas och eventuella sidor i den gamla kategorin kommer <em>inte</em> att kategoriseras om till den nya kategorin.",
        "movenologintext": "För att flytta en sida måste du vara registrerad användare och [[Special:UserLogin|inloggad]].",
        "movenotallowed": "Du har inte behörighet att flytta sidor på den här wikin.",
        "movenotallowedfile": "Du har inte tillåtelse att flytta filer.",
        "import": "Importera sidor",
        "importinterwiki": "Transwiki-import",
        "import-interwiki-text": "Välj en wiki och sidtitel att importera.\nVersionshistorik (datum och redaktörer) kommer att bevaras.\nAll överföring mellan wikier (transwiki) listas i  [[Special:Log/import|importloggen]].",
-       "import-interwiki-source": "Källwiki/sida:",
+       "import-interwiki-sourcewiki": "Källwiki:",
+       "import-interwiki-sourcepage": "Källsida:",
        "import-interwiki-history": "Kopiera hela versionshistoriken för denna sida",
        "import-interwiki-templates": "Inkludera alla mallar",
        "import-interwiki-submit": "Importera",
index 47803e2..04b8a9b 100644 (file)
        "unusedtemplateswlh": "viungo vingine",
        "randompage": "Ukurasa wa bahati",
        "randompage-nopages": "Hakuna kurasa katika {{PLURAL:$2|eneo la wiki lifuatalo|maeneo ya wiki yafuatayo}}: $1.",
-       "randomincategory-selectcategory-submit": "Nenda",
        "randomredirect": "Elekezo la bahati",
        "randomredirect-nopages": "Hakuna maelekezo katika eneo la wiki la \"$1\".",
        "statistics": "Takwimu",
        "import": "Kuleta kurasa",
        "importinterwiki": "Kuleta kutoka wiki nyingine",
        "import-interwiki-text": "Chagua wiki na jina la ukurasa unaotaka kuuleta.\nTarehe za mapitio na majina ya wahariri zitaletwa pia.\nVitendo vyote vya kuleta kutoka wiki nyingine vinaandikwa katika [[Special:Log/import|kumbukumbu za kuleta]].",
-       "import-interwiki-source": "Wiki/ukurasa wa chanzo:",
        "import-interwiki-history": "Leta pamoja na mapitio yote ya ukurasa huu",
        "import-interwiki-templates": "Leta pamoja na vigezo vyote",
        "import-interwiki-submit": "Leta",
index 115f1ac..051e05d 100644 (file)
        "hidetoc": "மறை",
        "collapsible-collapse": "சுருக்கு",
        "collapsible-expand": "விரிவாக்கு",
+       "confirmable-yes": "ஆம்",
+       "confirmable-no": "இல்லை",
        "thisisdeleted": "$1 பார்க்கவா அல்லது மீள்விக்கவா?",
        "viewdeleted": "$1 பார்?",
        "restorelink": "{{PLURAL:$1|ஒரு நீக்கப்பட்ட தொகுப்பை|$1 நீக்கப்பட்ட தொகுப்புகளை}}",
        "exbeforeblank": "வெறுமைப்படுத்த முன்னிருந்த உள்ளடக்கம்: '$1'",
        "delete-confirm": "\"$1\" பக்கத்தை நீக்கு",
        "delete-legend": "நீக்கவும்",
-       "historywarning": "'''எச்சரிக்கை:''' தாங்கள் நீக்கவுள்ள பக்கத்திற்கு சுமார் $1 {{PLURAL:$1|திருத்தம்|திருத்தங்களின்}} வரலாறு உண்டு:",
+       "historywarning": "<strong>எச்சரிக்கை:</strong> தாங்கள் நீக்கவுள்ள பக்கத்திற்கு $1 {{PLURAL:$1|திருத்தம்|திருத்தங்களின்}} வரலாறு உண்டு:",
        "confirmdeletetext": "நீங்கள் இப்பக்கத்தை அதன் வரலாற்றுடன் சேர்த்து நீக்க விழைகிறீர்கள்.\nஅருள் கூர்ந்து உங்கள் செய்கையின் விளைவுகளை நீங்கள் விளங்கிக் கொண்டீர்கள் என்பதையும் இது [[{{MediaWiki:Policy-url}}|கொள்கைகளுடன்]] ஒத்துப்போவதையும் உறுதிப் படுத்தவும்.",
        "actioncomplete": "செயற்பாடு நிறைவுற்றது",
        "actionfailed": "செயல் வெற்றியடையவில்லை",
        "import": "பக்கங்களை இறக்கு",
        "importinterwiki": "விக்கியிடை இறக்குமதி",
        "import-interwiki-text": "இறக்குமதிக்கான விக்கியையும் பக்கத்தையும் தெரிவுச் செய்க.\nதிருத்த நாட்கள், தொகுத்தவர்களின் பெயர்கள் என்பன பேனப்படும்.\nஎல்லா விக்கியிடை இறக்குமதிகளும் [[Special:Log/import|இறக்குமதிப் பதிகையில்]] பதியப்படும்.",
-       "import-interwiki-source": "மூல விக்கி/பக்கம்:",
+       "import-interwiki-sourcepage": "மூலப் பக்கம்:",
        "import-interwiki-history": "இப்பக்கத்தின் அனைத்து வரலாற்றுப் பதிப்புகளையும் நகலெடு",
        "import-interwiki-templates": "அனைத்து வார்ப்புருக்களையும் சேர்",
        "import-interwiki-submit": "இறக்கு",
index 135f57d..35f166b 100644 (file)
        "randomincategory": "వర్గంలోని యాదృచ్చిక పేజీ",
        "randomincategory-invalidcategory": "\"$1\" అనేది సరైన పర్గం పేరు కాదు.",
        "randomincategory-nopages": "[[:Category:$1|$1]] వర్గంలో పేజీలేమీ లేవు.",
-       "randomincategory-selectcategory": "ఈ వర్గం నుంచి ఒక యాదృచ్ఛిక పేజీని చూడండి: $1 $2.",
-       "randomincategory-selectcategory-submit": "వెళ్ళు",
        "randomredirect": "యాదృచ్చిక దారిమార్పు",
        "randomredirect-nopages": "\"$1\" పేరుబరిలో దారిమార్పులేమీ లేవు.",
        "statistics": "గణాంకాలు",
        "import": "పేజీలను దిగుమతి చేసుకోండి",
        "importinterwiki": "ఇంకోవికీ నుండి దిగుమతి",
        "import-interwiki-text": "దిగుమతి చేసుకోవడానికి ఒక వికీని మరియు అందులోని పేజీని ఎంచుకోండి.\nకూర్పుల తేదీలు మరియు మార్పులు చేసిన వారి పేర్లు భద్రపరచబడతాయి.\nఇతర వికీలనుండి చేస్తున్న దిగుమతుల చర్యలన్నీ [[Special:Log/import|దిగుమతుల చిట్టా]]లో నమోదవుతాయి.",
-       "import-interwiki-source": "మూల వికీ/పేజీ:",
        "import-interwiki-history": "ఈ పేజీ యొక్క అన్ని చారిత్రక కూర్పులను కాపీ చెయ్యి",
        "import-interwiki-templates": "అన్ని మూసలను ఉంచు",
        "import-interwiki-submit": "దిగుమతించు",
index e59011e..6b6f134 100644 (file)
        "randomincategory": "สุ่มหน้าในหมวดหมู่",
        "randomincategory-invalidcategory": "\"$1\" มิใช่ชื่อหมวดหมู่ที่ถูกต้อง",
        "randomincategory-nopages": "ไม่มีหน้าใน[[:Category:$1]]",
-       "randomincategory-selectcategory": "ดึงหน้าแบบสุ่มจากหมวดหมู่: $1 $2",
-       "randomincategory-selectcategory-submit": "ไป",
        "randomredirect": "สุ่มหน้าเปลี่ยนทาง",
        "randomredirect-nopages": "ไม่มีหน้าเปลี่ยนทางในเนมสเปซ \"$1\"",
        "statistics": "สถิติ",
        "delete-edit-reasonlist": "แก้ไขเหตุผลการลบ",
        "delete-toobig": "หน้านี้มีประวัติการแก้ไขนาดใหญ่ คือ กว่า $1 รุ่น การลบหน้าเช่นนี้ถูกจำกัดเพื่อป้องกันการรบกวน{{SITENAME}}โดยบังเอิญ",
        "delete-warning-toobig": "หน้านี้มีประวัติการแก้ไขขนาดใหญ่ กว่า $1 รุ่น การลบหน้านี้อาจรบกวนการทำงานของฐานข้อมูลของ {{SITENAME}} โปรดดำเนินการด้วยความระมัดระวัง",
-       "delete-cantedit": "คุณไม่สามารถลบหน้านี้ได้เพราะคุณไม่ได้รับอนุญาตให้แก้ไข",
        "deleting-backlinks-warning": "'''คำเตือน:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|หน้าอื่น]]เชื่อมโยงมายังหรือดึงข้อมูลจากหน้าที่คุณกำลังจะลบ",
        "rollback": "ย้อนการแก้ไขกลับฉุกเฉิน",
        "rollback_short": "ย้อนกลับฉุกเฉิน",
        "import": "หน้านำเข้า",
        "importinterwiki": "นำเข้าข้ามวิกิ",
        "import-interwiki-text": "เลือกวิกิและชื่อหัวข้อที่ต้องการนำเข้า วันที่และชื่อผู้เขียนทั้งหมดจะถูกเก็บไว้ โดยการนำเข้าทุกส่วนจะถูกเก็บไว้ใน [[Special:Log/import|ปูมการนำเข้า]]",
-       "import-interwiki-source": "หน้า/วิกิต้นทาง:",
        "import-interwiki-history": "คัดลอกประวัติทั้งหมดในหน้านี้",
        "import-interwiki-templates": "รวมแม่แบบทั้งหมด",
        "import-interwiki-submit": "นำเข้า",
index 2f0bb2c..6471c13 100644 (file)
@@ -60,7 +60,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Arystanbek",
-                       "Sayginer"
+                       "Sayginer",
+                       "Sucsuzz"
                ]
        },
        "tog-underline": "Bağlantıların altını çiz:",
        "randomincategory": "Kategoriye göre rastgele sayfa",
        "randomincategory-invalidcategory": "\"$1\" geçerli bir kategori adı değil.",
        "randomincategory-nopages": "[[:Category:$1|$1]] kategorisinde hiç sayfa yok.",
-       "randomincategory-selectcategory": "Rastgele sayfa alınacak kategori: $1 $2.",
-       "randomincategory-selectcategory-submit": "Getir",
        "randomredirect": "Rastgele yönlendirme",
        "randomredirect-nopages": "\"$1\" ad alanında hiç bir yönlendirme yok.",
        "statistics": "İstatistikler",
        "autoblockid": "Otomatik engelleme #$1",
        "block": "Kullanıcıyı engelle",
        "unblock": "Kullanıcının engelini kaldır",
-       "blockip": "Kullanıcıyı engelle",
+       "blockip": "{{GENDER:$1|Kullanıcıyı}} engelle",
        "blockip-legend": "Kullanıcıyı engelle",
        "blockiptext": "Aşağıdaki formu kullanarak belli bir IP'nin veya kayıtlı kullanıcının değişiklik yapmasını engelleyebilirsiniz. Bu sadece vandalizmi engellemek için ve [[{{MediaWiki:Policy-url}}|kurallara]] uygun olarak yapılmalı. Aşağıya mutlaka engelleme ile ilgili bir açıklama yazınız. (örnek: -Şu- sayfalarda vandalizm yapmıştır).",
        "ipaddressorusername": "IP adresi veya kullanıcı adı",
        "ipb-unblock-addr": "$1 için engellemeyi kaldır",
        "ipb-unblock": "Engellemeyi kaldır",
        "ipb-blocklist": "Mevcut olan engellemeleri göster",
-       "ipb-blocklist-contribs": "$1 için katkılar",
+       "ipb-blocklist-contribs": "{{GENDER:$1|$1}} için katkılar",
        "unblockip": "Kullanıcının engellemesini kaldır",
        "unblockiptext": "Daha önceden engellenmiş bir IP adresine ya da kullanıcı adına yazma erişimini geri vermek için aşağıdaki formu kullanın.",
        "ipusubmit": "Bu engellemeyi kaldır",
        "import": "Sayfaları aktar",
        "importinterwiki": "Vikilerarası içe aktarım",
        "import-interwiki-text": "İçe aktarmak için bir viki ve sayfa başlığı seçin.\nRevizyon tarihleri ve yazarların isimleri korunacaktır.\nBütün vikilerarası içe aktarım eylemleri [[Special:Log/import|içe aktarım günlüğünde]] kaydedilmektedir.",
-       "import-interwiki-source": "Kaynak viki/sayfa:",
        "import-interwiki-history": "Sayfanın tüm geçmiş sürümlerini kopyala",
        "import-interwiki-templates": "Tüm şablonları içer",
        "import-interwiki-submit": "Import",
index 71252d3..3e490e9 100644 (file)
@@ -28,6 +28,7 @@
        "tog-watchdefault": "צולייגן בלעטער וואס איך רעדאקטיר צו מיין אכטונג ליסטע",
        "tog-watchmoves": "צולייגן בלעטער וואס איך באוועג און טעקעס וואס איך לאד ארויף צו מיין אכטונג ליסטע",
        "tog-watchdeletion": "צולייגן בלעטער וואס איך מעק אויס צו מיין אויפפאסונג ליסטע",
+       "tog-watchrollback": "צולייגן צו מיין אויפפאסן ליסטע בלעטער אויף וואס איך האב אדורכגעפירט א צוריקשטעלן.",
        "tog-minordefault": "באגרענעצן אלע רעדאַקטירונגען גרונטלעך אלס מינערדיק",
        "tog-previewontop": "צײַג די \"פֿאָרויסיגע װײַזונג\" גלײַך בײַ דער ערשטער באַאַרבעטונג",
        "tog-previewonfirst": "ווייזן פֿאראויסדיגע ווייזונג בײַ דער ערשטער רעדאקטירונג",
        "changeemail-cancel": "אַנולירן",
        "changeemail-throttled": "איר האט געפרוווט צופֿיל מאל אריינלאגירן.\nזייט אזוי גוט און וואַרט $1 איידער איר פרוווט נאכאמאל.",
        "resettokens": "צוריקזעצן טאקנס",
+       "resettokens-text": "דא קענט איר צוריקשטעלן טאקנס וואס דערלויבן צוטריט צו געוויסע פריוואטע דאטן שייך צו אײַער קאנטע.\n\nYou should do it if you accidentally shared them with someone or if your account has been compromised.",
        "resettokens-no-tokens": "נישט פאראן קיין טאקנס צוריקצוזעצן.",
        "resettokens-legend": "צוריקזעצן טאקנס",
        "resettokens-tokens": "טאקנס:",
        "rev-deleted-event": "(לאגירן אקציע אראפגענומען)",
        "rev-deleted-user-contribs": "[באַניצער נאָמען אָדער IP אַדרעס אראפגענומען - רעדאַקטירונג פֿאַרבאָרגן פֿון בייַשטייַערונגען]",
        "rev-deleted-text-permission": "די בלאט רעוויזיע איז געווארן '''אויסגעמעקט '''.\nעס איז מעגלעך דא נאך פרטים אין דעם\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} אויסמעקונג לאג].",
+       "rev-suppressed-text-permission": "די בלאט רעוויזיע איז געווארן <strong>אונטערדריקט</strong>. מען קען געפינען נאך פרטים אין דעם [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} אונטערדריקן לאגבוך].",
        "rev-deleted-text-unhide": "די בלאט רעוויזיע איז געווארן '''אויסגעמעקט '''.\nעס איז מעגלעך דא נאך פרטים אין דעם\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} אויסמעקונג לאג].\nאיר קענט נאך  [$1 באקוקן די רעוויזיע] אויב איר ווילט גיין ווײַטער.",
        "rev-suppressed-text-unhide": "די בלאט רעוויזיע איז געווארן '''באהאלטן'''.\nעס איז מעגלעך דא נאך פרטים אין דעם [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} באהעלטעניש לאג].\nאיר קענט נאך [$1 באקוקן די רעוויזיע] אויב איר ווילט גיין ווײַטער.",
        "rev-deleted-text-view": "די בלאט רעוויזיע איז געווארן '''אויסגעמעקט'''.\nאיר קענט זען זי;\nעס איז מעגלעך דא נאך פרטים אין דעם [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} אויסמעקונג לאג].",
        "randomincategory": "צופעליקער בלאט אין קאטעגאריע",
        "randomincategory-invalidcategory": "\"$1\" איז נישט קיין גילטיקער קאטעגאריע נאמען.",
        "randomincategory-nopages": "נישט פאראן קיין בלעטער אין [[:Category:$1]].",
-       "randomincategory-selectcategory": "באקומען צופעליקן בלאט פון קאטעגאריע: $1, $2.",
-       "randomincategory-selectcategory-submit": "גיין",
+       "randomincategory-category": "קאַטעגאריע:",
+       "randomincategory-legend": "צופעליקער בלאט אין קאטעגאריע",
        "randomredirect": "צופֿעליק ווײַטערפֿירן",
        "randomredirect-nopages": "נישטא קיין ווײַטערפֿירונגען אין דעם נאמענטייל $1.",
        "statistics": "סטאַטיסטיק",
        "allpages-bad-ns": "{{SITENAME}} האט נישט קיין נאָמענטייל \"$1\".",
        "allpages-hide-redirects": "פֿארהיילן ווייטערפֿירונגען",
        "cachedspecial-viewing-cached-ttl": "איר באקוקט א ווערסיע פון דעם בלאט פונעם זאפאס, וואס קען אבער זיין  פֿארעלטערט ביז $1.",
+       "cachedspecial-viewing-cached-ts": "איר זעט א זאפאס־ווערסיע פון דעם בלאט, וואס איז מעגלעך נישט אקטועל.",
        "cachedspecial-refresh-now": "באקוקן די לעצטע.",
        "categories": "קאַטעגאָריעס",
        "categoriespagetext": "די פֿאלגענדע {{PLURAL:$1| קאַטעגאָריע אַנטהאַלט|קאַטעגאָריעס אַנטהאַלטן}} בלעטער אדער מעדיע.\n[[Special:UnusedCategories|אומבאַניצטע קאַטעגאריעס]] זענען נישט געוויזן דא.\nזעט אויך [[Special:WantedCategories|געזוכטע קאַטעגאריעס]].",
        "exbeforeblank": "אינהאַלט בעפֿאַרן אויסליידיגן איז געווען: \"$1\"",
        "delete-confirm": "אויסמעקן $1",
        "delete-legend": "אויסמעקן",
-       "historywarning": "אכטונג – איר גייט אויסמעקן א בלאט וואָס האט א היסטאריע מיט $1 {{PLURAL:$1|ווערסיע|ווערסיעס}}:",
+       "historywarning": "<strong>אכטונג:</strong> איר גייט אויסמעקן א בלאט וואָס האט א היסטאריע מיט $1 {{PLURAL:$1|ווערסיע|ווערסיעס}}:",
        "confirmdeletetext": "איר גייט איצט אויסמעקן א בלאט צוזאַמען מיט זײַן גאנצע היסטאריע.\n\nביטע באשטעטיגט אז דאס איז טאקע אייער כוונה, אז איר פארשטייט פולערהייט די קאנסקווענסן פון דעם אַקט, און אז דאס איז אין איינקלאנג מיט [[{{MediaWiki:Policy-url}}|דער פאליסי]].",
        "actioncomplete": "די אַקציע אָט זיך דורכגעפֿירט",
        "actionfailed": "אקציע דורכגעפאלן",
        "delete-edit-reasonlist": "רעדאַקטירן די אויסמעקן סיבות",
        "delete-toobig": "דער בלאַט האט א גרויסע רעדאקטירונג היסטאריע, מער ווי $1 {{PLURAL:$1|רעוויזיע|רעוויזיעס}}. אויסמעקן אזעלכע בלעטער איז באַגרענעצט געווארן בכדי צו פֿאַרמײַדן א צופֿעליגע פֿאַרשטערונג פֿון  {{SITENAME}}.",
        "delete-warning-toobig": "דער בלאַט האט א גרויסע רעדאקטירונג היסטאריע, מער ווי $1 {{PLURAL:$1|רעוויזיע|רעוויזיעס}}. אויסמעקן אים קען פֿאַרשטערן דאַטנבאַזע אפעראַציעס פֿון {{SITENAME}}; זײַט פֿארזיכטיג איידער איר מעקט אויס.",
+       "deleteprotected": "איר קענט נישט אויסמעקן דעם בלאט ווײַל ער איז געשיצט.",
        "deleting-backlinks-warning": "'''ווארענוג:'''\n[[Special:WhatLinksHere/{{FULLPAGENAME}}|אנדערע בלעטער]]  פארבינדן צום בלאט אדער אריבערשליסן דעם בלאט איר האלט ביי אויסמעקן.",
        "rollback": "צוריקדרייען רעדאַקטירונגען",
        "rollback_short": "צוריקדרייען",
        "import": "אימפארטירן בלעטער",
        "importinterwiki": "אריבערוויקי אימפארט",
        "import-interwiki-text": "קלויבט אויס א וויקי און אן ארטיקל קעפל צו אימפארטירן.\nדי דאטעס און די נעמען פון די רעדאקטארן וועט ווערן געהיטן.\nאלע צווישנוויקי אימפארט אקציעס ווערן פארשריבן אינעם   [[Special:Log/import|אימפארט לאג]].",
-       "import-interwiki-source": "מקור וויקי/בלאט",
        "import-interwiki-history": "קאפירן אלע היסטאריע ווערסיעס פאר דעם בלאט",
        "import-interwiki-templates": "איינשילסן אלע מוסטערן",
        "import-interwiki-submit": "אימפארט",
index 6f28fa4..eab0934 100644 (file)
        "tog-hideminor": "隐藏最近更改中的小编辑",
        "tog-hidepatrolled": "隐藏最近更改中的已巡查编辑",
        "tog-newpageshidepatrolled": "隐藏新页面列表中的已巡查页面",
-       "tog-extendwatchlist": "扩展监视列表以显示所有更改而不仅是最近更改",
+       "tog-extendwatchlist": "扩展监视列表以显示所有更改,而不仅限于最近更改",
        "tog-usenewrc": "按页面合并最近更改和监视列表中的更改",
        "tog-numberheadings": "自动编号标题",
        "tog-showtoolbar": "显示编辑工具栏",
        "tog-editondblclick": "双击编辑页面",
-       "tog-editsectiononrightclick": "启用右击段落标题编辑段落",
-       "tog-watchcreations": "添加我创建的页面和我上传的文件至我的监视列表",
-       "tog-watchdefault": "添加我编辑的页面和文件至我的监视列表",
-       "tog-watchmoves": "添加我移动的页面和文件至我的监视列表",
-       "tog-watchdeletion": "添加我删除的页面和文件至我的监视列表",
-       "tog-watchrollback": "添加我回退过的页面至我的监视列表",
-       "tog-minordefault": "默认标记所有编辑为小编辑",
-       "tog-previewontop": "å°\86é¢\84è§\88æ\98¾ç¤ºå\9c¨ç¼\96è¾\91æ¡\86ä¸\8aæ\96¹",
+       "tog-editsectiononrightclick": "启用右击小节标题编辑段落",
+       "tog-watchcreations": "将我创建的页面和我上传的文件添加至我的监视列表",
+       "tog-watchdefault": "将我编辑的页面和文件添加至我的监视列表",
+       "tog-watchmoves": "将我移动的页面和文件添加至我的监视列表",
+       "tog-watchdeletion": "将我删除的页面和文件添加至我的监视列表",
+       "tog-watchrollback": "将我回退过的页面添加至我的监视列表",
+       "tog-minordefault": "将所有编辑默认标记为小编辑",
+       "tog-previewontop": "å\9c¨ç¼\96è¾\91æ¡\86ä¸\8aæ\96¹æ\98¾ç¤ºé¢\84è§\88",
        "tog-previewonfirst": "首次编辑时显示预览",
        "tog-enotifwatchlistpages": "当我的监视列表中的页面或文件更改时发送电子邮件通知我",
        "tog-enotifusertalkpages": "当我的用户讨论页面更改时发送电子邮件通知我",
        "tog-diffonly": "不在差异下面显示页面内容",
        "tog-showhiddencats": "显示隐藏分类",
        "tog-norollbackdiff": "执行回退后不显示差异",
-       "tog-useeditwarning": "当我离开有未保存更改的编辑页面时提醒我",
+       "tog-useeditwarning": "当我离开编辑页面时,如果有尚未保存的更改,请提醒我",
        "tog-prefershttps": "登录时始终使用安全连接",
        "underline-always": "始终",
        "underline-never": "从不",
        "october-date": "10月$1日",
        "november-date": "11月$1日",
        "december-date": "12月$1日",
-       "pagecategories": "{{PLURAL:$1|分类}}",
+       "pagecategories": "{{PLURAL:$1|分类}}",
        "category_header": "分类“$1”中的页面",
        "subcategories": "子分类",
        "category-media-header": "分类“$1”中的媒体文件",
        "category-empty": "<em>本分类目前没有包含页面或媒体文件。</em>",
-       "hidden-categories": "{{PLURAL:$1|隐藏分类}}",
+       "hidden-categories": "{{PLURAL:$1|隐藏分类}}",
        "hidden-category-category": "隐藏分类",
        "category-subcat-count": "{{PLURAL:$2|本分类只有以下子分类。|本分类有以下$1个子分类,共有$2个子分类。}}",
        "category-subcat-count-limited": "本分类有以下{{PLURAL:$1|子分类|$1个子分类}}。",
-       "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个文件}}属于当前分类。",
+       "category-article-count": "{{PLURAL:$2|本分类只包含以下页面。|本分类中包含以下$1个页面,共$2个页面。}}",
+       "category-article-count-limited": "当前分类包含以下$1个页面。",
+       "category-file-count": "{{PLURAL:$2|本分类只包含以下一个文件。|本分类包含以下$1个文件,共$2个文件。}}",
+       "category-file-count-limited": "当前分类包含以下$1个文件。",
        "listingcontinuesabbrev": "续",
-       "index-category": "å\8f¯索引页面",
+       "index-category": "å·²索引页面",
        "noindex-category": "不可索引页面",
-       "broken-file-category": "有受损文件链接的页面",
+       "broken-file-category": "有受损文件链接的页面",
        "categoryviewer-pagedlinks": "($1)($2)",
        "about": "关于",
        "article": "内容页面",
        "faq": "常见问题",
        "faqpage": "Project:常见问题",
        "actions": "操作",
-       "namespaces": "å\90\8då­\97空间",
+       "namespaces": "å\91½å\90\8d空间",
        "variants": "变种",
        "navigation-heading": "导航菜单",
-       "errorpagetitle": "出错",
+       "errorpagetitle": "错误",
        "returnto": "返回$1。",
        "tagline": "来自{{SITENAME}}",
        "help": "帮助",
        "searcharticle": "前往",
        "history": "页面历史",
        "history_short": "历史",
-       "updatedmarker": "更新于我上次访问后",
+       "updatedmarker": "已于我上次访问之后更新",
        "printableversion": "打印版本",
        "permalink": "固定链接",
        "print": "打印",
        "deletethispage": "删除本页",
        "undeletethispage": "还原本页",
        "undelete_short": "还原$1次编辑",
-       "viewdeleted_short": "查看$1个已删除的编辑",
+       "viewdeleted_short": "查看$1个已删除的编辑",
        "protect": "保护",
        "protect_change": "更改",
        "protectthispage": "保护本页",
        "personaltools": "个人工具",
        "articlepage": "查看内容页面",
        "talk": "讨论",
-       "views": "查看",
+       "views": "视图",
        "toolbox": "工具",
        "userpage": "查看用户页面",
        "projectpage": "查看项目页面",
        "imagepage": "查看文件页面",
-       "mediawikipage": "查看息页面",
+       "mediawikipage": "查看息页面",
        "templatepage": "查看模板页面",
        "viewhelppage": "查看帮助页面",
        "categorypage": "查看分类页面",
        "shared-repo-from": "来自$1",
        "shared-repo": "一个共享文件库",
        "shared-repo-name-wikimediacommons": "维基共享资源",
+       "filepage.css": "/* 放置于此的CSS会包含在文件描述页上,并包含在其他客户端wiki上 */",
        "upload-disallowed-here": "您不可以覆盖此文件。",
        "filerevert": "恢复$1",
        "filerevert-legend": "恢复文件",
        "randomincategory": "分类中随机页面",
        "randomincategory-invalidcategory": "“$1”不是一个有效的分类名称。",
        "randomincategory-nopages": "[[:Category:$1]]中没有页面。",
-       "randomincategory-selectcategory": "获取随机页面从分类:$1 $2。",
-       "randomincategory-selectcategory-submit": "提交",
+       "randomincategory-category": "分类:",
+       "randomincategory-legend": "分内中随机页面",
        "randomredirect": "随机重定向",
        "randomredirect-nopages": "“$1”名字空间中没有重定向。",
        "statistics": "统计",
        "exbeforeblank": "被清空前的内容为:“$1”",
        "delete-confirm": "删除“$1”",
        "delete-legend": "删除",
-       "historywarning": "警告:您将要删除的页面有约$1个{{PLURAL:$1|版本}}的历史:",
+       "historywarning": "<strong>警告</strong>:您将要删除的页面有约$1次修订的历史:",
        "confirmdeletetext": "您即将删除一个页面或图像以及其历史。\n请确定您要进行此项操作,并且了解其后果,同时您的行为符合[[{{MediaWiki:Policy-url}}]]。",
        "actioncomplete": "操作完成",
        "actionfailed": "操作失败",
        "delete-edit-reasonlist": "编辑删除原因",
        "delete-toobig": "这个页面有一个十分大量的编辑历史,超过$1个版本。删除此类页面的动作已经被限制,以防止在{{SITENAME}}上的意外扰乱。",
        "delete-warning-toobig": "这个页面有一个十分大量的编辑历史,超过$1个版本。删除它可能会扰乱{{SITENAME}}的数据库操作;在继续此动作前请小心。",
-       "delete-cantedit": "您不能删除此页面,因为您没有权限编辑它。",
+       "deleteprotected": "您不能删除此页面因为它被保护。",
        "deleting-backlinks-warning": "'''警告:'''有[[Special:WhatLinksHere/{{FULLPAGENAME}}|其他页面]]链接至或包含您要删除的页面。",
        "rollback": "回退编辑",
        "rollback_short": "回退",
        "import": "导入页面",
        "importinterwiki": "跨wiki导入",
        "import-interwiki-text": "选择要导入的wiki和页面标题,导入版本的日期和编辑者名称会被保存。所有的跨wiki导入操作都将记录到[[Special:Log/import|导入日志]]。",
-       "import-interwiki-source": "来源wiki/页面:",
+       "import-interwiki-sourcewiki": "来源wiki:",
+       "import-interwiki-sourcepage": "来源页面:",
        "import-interwiki-history": "复制此页的所有历史版本",
        "import-interwiki-templates": "包含所有模板",
        "import-interwiki-submit": "导入",
index a6dc8d9..68278b4 100644 (file)
@@ -94,7 +94,7 @@
        "tog-watchlisthideanons": "隱藏監視清單中匿名使用者的編輯",
        "tog-watchlisthidepatrolled": "隱藏監視清單中已巡查的編輯",
        "tog-ccmeonemails": "傳送郵件給他人時,也送一份副本到我的電子郵件信箱",
-       "tog-diffonly": "比對版本差異時下面不顯示頁面內容",
+       "tog-diffonly": "比對差異時下方不顯示頁面內容",
        "tog-showhiddencats": "顯示隱藏分類",
        "tog-norollbackdiff": "執行還原後略過差異比對",
        "tog-useeditwarning": "未儲存離開編輯頁面時警告我",
        "listingcontinuesabbrev": "續",
        "index-category": "已列索引的頁面",
        "noindex-category": "未列索引的頁面",
-       "broken-file-category": "含有損壞檔案連結的頁面",
+       "broken-file-category": "檔案連結損壞的頁面",
        "about": "關於",
        "article": "內容頁面",
        "newwindow": "(以新視窗開啟)",
        "disclaimers": "免責聲明",
        "disclaimerpage": "Project:General disclaimer",
        "edithelp": "編輯説明",
-       "mainpage": "首頁",
-       "mainpage-description": "首頁",
+       "mainpage": "主頁面",
+       "mainpage-description": "主頁面",
        "policy-url": "Project:Policy",
        "portal": "社群入口",
        "portal-url": "Project:Community portal",
        "viewdeleted": "檢視 $1?",
        "restorelink": "$1 個已刪除的編輯",
        "feedlinks": "訂閱:",
-       "feed-invalid": "無效的訂閱類型。",
+       "feed-invalid": "無效的訂閱 Feed 類型。",
        "feed-unavailable": "目前未提供 RSS 或 Atom",
        "site-rss-feed": "$1 的 RSS feed",
        "site-atom-feed": "$1 的 Atom feed",
        "readonly": "資料庫已鎖定",
        "enterlockreason": "請輸入鎖定的原因,包括估計重新開放的時間",
        "readonlytext": "資料庫目前已鎖定無法新增或修改資料,\n可能正在進行例行的資料庫維修作業,完成之後即可恢復正常。\n\n鎖定資料庫的管理員說明:$1",
-       "missing-article": "資料庫查無預期的頁面文字,頁面 \"$1\" $2。\n\n通常是因您連結到了已過期(已被刪除)的差異或歷史頁面。\n\n若這不是您所遇到的情況,您可能找到了一個系統的問題。\n請記錄 URL 位址,並向 [[Special:ListUsers/sysop|管理員]] 報告此問題。",
+       "missing-article": "資料庫查無預期的頁面文字,名稱為 \"$1\" $2。\n\n通常是因您連結到了已被刪除的差異或歷史頁面。\n\n若您所遇到的不是這個情況,您可能是發現軟體問題。\n請記錄 URL 位址,並向 [[Special:ListUsers/sysop|管理員]] 回報此問題。",
        "missingarticle-rev": "(修訂#:$1)",
        "missingarticle-diff": "(差異:$1, $2)",
        "readonly_lag": "資料庫已自動鎖定,正在等候次要資料庫同步資料到主要資料庫",
        "pt-userlogout": "登出",
        "php-mail-error-unknown": "PHP 的 mail() 函數發生不明錯誤。",
        "user-mail-no-addy": "試圖傳送沒有電子郵件位址的信件。",
-       "user-mail-no-body": "試圖寄出一個空的或異常簡短的電子郵件。",
+       "user-mail-no-body": "試圖寄出內容為空的或異常簡短的電子郵件。",
        "changepassword": "變更密碼",
        "resetpass_announce": "要完成登入,您必須設定一個新密碼。",
        "resetpass_text": "<!-- 在此處加入文字 -->",
        "passwordreset-emailtext-user": "使用者 $1 要求重設在 {{SITENAME}} ($4) 的密碼,下列是與此電子郵件位址有關的使用者{{PLURAL:$3|帳號}}:\n\n$2\n\n{{PLURAL:$3|這個臨時密碼|這些臨時密碼}}將會在{{PLURAL:$5|一天|$5 天}}內到期,\n您應立即登入並更改新的密碼。如果不是您要求重設密碼,或您已想起密碼,並不準備修改,\n您可以忽略此訊息並且繼續使用您原本的密碼。",
        "passwordreset-emailelement": "使用者名稱:$1\n臨時密碼:$2",
        "passwordreset-emailsent": "已寄出重設密碼的電子郵件。",
-       "passwordreset-emailsent-capture": "已寄出重設密碼的電子郵件,並在下面顯示。",
-       "passwordreset-emailerror-capture": "產生的重設密碼的電子郵件如下所示,但傳送給{{GENDER:$2|使用者}}失敗:$1",
+       "passwordreset-emailsent-capture": "已寄出重設密碼的電子郵件,並於下方顯示。",
+       "passwordreset-emailerror-capture": "下列為重設密碼的電子郵件內容,傳送給{{GENDER:$2|使用者}}失敗:$1",
        "changeemail": "變更電子郵件位址",
        "changeemail-header": "變更帳號的電子郵件位址",
-       "changeemail-text": "填寫表格以修æ\94¹æ\82¨ç\9a\84é\9b»å­\90é\83µä»¶ä½\8då\9d\80ã\80\82æ\82¨é\9c\80è¦\81輸å\85¥å¯\86碼以確認此次變更。",
+       "changeemail-text": "å®\8cæ\88\90此表å\96®ä»¥ä¿®æ\94¹æ\82¨ç\9a\84é\9b»å­\90é\83µä»¶ä½\8då\9d\80ï¼\8cæ\82¨é\9c\80è¦\81輸å\85¥æ\82¨ç\9a\84å¯\86碼ä¾\86確認此次變更。",
        "changeemail-no-info": "您必須登入方可直接存取此頁面。",
        "changeemail-oldemail": "目前的電子郵件位址:",
        "changeemail-newemail": "新的電子郵件位址:",
        "parser-template-recursion-depth-warning": "超出樣版遞迴深度限制 ($1)",
        "language-converter-depth-warning": "已超出語言轉換器深度限制 ($1)",
        "node-count-exceeded-category": "節點數量超出限制的頁面",
-       "node-count-exceeded-category-desc": "這個頁面超出最大節點數",
+       "node-count-exceeded-category-desc": "超出節點數量限制的頁面。",
        "node-count-exceeded-warning": "頁面超出節點數量限制",
        "expansion-depth-exceeded-category": "展開深度超出限制的頁面",
-       "expansion-depth-exceeded-category-desc": "頁面超出顯示範圍",
+       "expansion-depth-exceeded-category-desc": "超出展開深度限制的頁面。",
        "expansion-depth-exceeded-warning": "頁面超出展開深度限制",
        "parser-unstrip-loop-warning": "偵測到 Unstrip 迴圈",
        "parser-unstrip-recursion-limit": "Unstrip 遞迴超出限制 ($1)",
        "revdelete-text-text": "已刪除的修訂仍會出現於頁面歷史中,但內容將不開放存取。",
        "revdelete-text-file": "已刪除的檔案版本仍會出現於檔案歷史中,但內容將不開放存取。",
        "logdelete-text": "已刪除的日誌活動仍會出現於日誌中,但內容將不開放存取。",
-       "revdelete-text-others": "其他管理員仍有權限檢視隱藏的內容,且能夠取消刪除,除非有額外的設定限制。",
+       "revdelete-text-others": "若未有額外的設定限制,其他管理員仍有權限檢視與取消刪除隱藏的內容。",
        "revdelete-confirm": "請確認您是否明白此動作會造成的後果,\n以及您所做的動作是否符合 [[{{MediaWiki:Policy-url}}|政策]] 規範。",
        "revdelete-suppress-text": "禁制顯示應<strong>只有</strong>在下述情形時使用:\n* 潛在誹謗的資訊\n* 不合適個人資料\n*: <em>住家地址、電話號碼、身分證字號等。</em>",
        "revdelete-legend": "設定顯示限制",
        "mergehistory-submit": "合併修訂",
        "mergehistory-empty": "沒有可以合併的修訂",
        "mergehistory-success": "[[:$1]] 中 $3 次修訂已經成功地合併至 [[:$2]]。",
-       "mergehistory-fail": "不可以進行歷史合併,請重新檢查該頁面以及時間參數。",
+       "mergehistory-fail": "無法進行歷史合併,請重新檢查該頁面及時間參數。",
        "mergehistory-fail-toobig": "超過 $1 個修訂移動的上限,無法進行歷史合併。",
        "mergehistory-no-source": "來源頁面 $1 不存在。",
        "mergehistory-no-destination": "目標頁面 $1 不存在。",
        "showhideselectedversions": "更改已選擇修訂的顯示設定",
        "editundo": "還原",
        "diff-empty": "(無差異)",
-       "diff-multi-sameuser": "(未顯示相同使用者於中間所作的 $1 次修訂)",
+       "diff-multi-sameuser": "(未顯示同一使用者於中間所作的 $1 次修訂)",
        "diff-multi-otherusers": "(未顯示由 $2 位使用者於中間所作的 $1 次修訂)",
        "diff-multi-manyusers": "(未顯示由超過 $2 位使用者於中間所作的 $1 次修訂)",
        "difference-missing-revision": "查無此差異 ($1) 中的{{PLURAL:$2|1 次修訂|$2 次修訂}}。\n\n這通常是因為差異的連結過時,頁面已被刪除。\n詳情資訊請參閱 [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 刪除日誌]。",
        "right-deletedtext": "檢視已刪除修訂中已刪除的文字及變更",
        "right-browsearchive": "搜尋已刪除的頁面",
        "right-undelete": "取消刪除頁面",
-       "right-suppressrevision": "檢視、隱藏與還原某使用者對頁面的特定修訂",
-       "right-viewsuppressed": "檢è¦\96æ\9f\90使ç\94¨è\80\85é\9a±è\97\8fç\9a\84修訂",
+       "right-suppressrevision": "檢視、隱藏與取消隱藏任何使用者對頁面的修訂",
+       "right-viewsuppressed": "檢è¦\96æ\89\80æ\9c\89使ç\94¨è\80\85ç\9a\84é\9a±è\97\8f修訂",
        "right-suppressionlog": "檢視非公開日誌",
        "right-block": "封鎖其他使用者的編輯權限",
-       "right-blockemail": "封鎖使用者傳送電子郵件的權限",
+       "right-blockemail": "封鎖使用者傳送電子郵件",
        "right-hideuser": "封鎖使用者名稱,避免公開顯示",
        "right-ipblock-exempt": "略過 IP 封鎖、自動封鎖及範圍封鎖檢查",
        "right-proxyunbannable": "略過 Proxy 自動封鎖檢查",
        "right-import": "由其他 Wiki 匯入頁面",
        "right-importupload": "由檔案上傳匯入頁面",
        "right-patrol": "標示其他人的編輯爲已巡查",
-       "right-autopatrol": "將自己的編輯自動標示為已巡查",
+       "right-autopatrol": "將自己的編輯自動標示為已巡查",
        "right-patrolmarks": "檢視最近變更的巡查標記",
        "right-unwatchedpages": "檢視未監視的頁面",
        "right-mergehistory": "合併頁面歷史",
        "action-mergehistory": "合併此頁面的歷史",
        "action-userrights": "編輯所有使用者的權限",
        "action-userrights-interwiki": "編輯在其它 Wiki 上的使用者權限",
-       "action-siteadmin": "鎖定解除鎖定資料庫",
+       "action-siteadmin": "鎖定解除鎖定資料庫",
        "action-sendemail": "傳送電子郵件",
        "action-editmywatchlist": "編輯您的監視清單",
        "action-viewmywatchlist": "檢視您的監視清單",
        "filehist-comment": "備註",
        "imagelinks": "檔案用途",
        "linkstoimage": "下列 {{PLURAL:$1|頁面連結|$1 個頁面連結}}到此檔案:",
-       "linkstoimage-more": "超過$1個{{PLURAL:$1|頁面連結|頁面連結}}到這個檔案。\n此處只列出{{PLURAL:$1|首個連結|首$1個連結}}到此檔案的頁面。\n您也可以檢視[[Special:WhatLinksHere/$2|完整的清單]]。",
-       "nolinkstoimage": "沒有頁面連接到本檔案。",
+       "linkstoimage-more": "超過 $1 個{{PLURAL:$1|頁面連結|頁面連結}}到此檔案。\n下列清單只列出前 {{PLURAL:$1|1 筆連結|$1 筆連結}}到此檔案的頁面。\n您也可以檢視 [[Special:WhatLinksHere/$2|完整清單]]。",
+       "nolinkstoimage": "沒有頁面連結到此檔案。",
        "morelinkstoimage": "檢視連結到這個檔案的[[Special:WhatLinksHere/$1|更多連結]]。",
        "linkstoimage-redirect": "$1 (檔案重新導向) $2",
        "duplicatesoffile": "以下 $1 個檔案與此檔案重覆 ([[Special:FileDuplicateSearch/$2|了解詳細資訊]]):",
        "randomincategory": "隨機分類頁面",
        "randomincategory-invalidcategory": "\"$1\" 不是一個有效的分類名稱。",
        "randomincategory-nopages": "[[:Category:$1]] 中沒有任何頁面。",
-       "randomincategory-selectcategory": "取得隨機頁面於分類:$1 $2。",
-       "randomincategory-selectcategory-submit": "執行",
+       "randomincategory-category": "分類:",
+       "randomincategory-legend": "隨機分類頁面",
        "randomredirect": "隨機重新導向",
        "randomredirect-nopages": "在命名空間 \"$1\" 中沒有任何重新導向頁面。",
        "statistics": "統計",
        "brokenredirectstext": "以下的重新導向頁面連結的頁面不存在:",
        "brokenredirects-edit": "編輯",
        "brokenredirects-delete": "刪除",
-       "withoutinterwiki": "未有語言連結的頁面",
+       "withoutinterwiki": "語言連結的頁面",
        "withoutinterwiki-summary": "下列是沒有連結到其它語言版本的頁面。",
        "withoutinterwiki-legend": "字首",
        "withoutinterwiki-submit": "顯示",
        "linksearch-ns": "命名空間:",
        "linksearch-ok": "搜尋",
        "linksearch-text": "可使用萬用字元如 \"*.wikipedia.org\"。\n萬用字元必須使用在最上層網域,例如 \"*.org\".<br />\n支援的{{PLURAL:$2|通訊協定|通訊協定}}有:<code>$1</code> (若未指定則預設使用 http:// 通訊協定)。",
-       "linksearch-line": "$1 連自 $2",
+       "linksearch-line": "$1 由 $2 所連結",
        "linksearch-error": "萬用字元僅可在主機名稱的開頭使用。",
        "listusersfrom": "顯示使用者開始自:",
        "listusers-submit": "顯示",
        "listgrouprights-rights": "權限",
        "listgrouprights-helppage": "Help:Group rights",
        "listgrouprights-members": "(成員清單)",
-       "listgrouprights-addgroup": "加入的{{PLURAL:$2|一個|多個}}群組: $1",
-       "listgrouprights-removegroup": "移除的{{PLURAL:$2|一個|多個}}群組: $1",
+       "listgrouprights-addgroup": "加入{{PLURAL:$2|群組|群組}}:$1",
+       "listgrouprights-removegroup": "移除{{PLURAL:$2|群組|群組}}:$1",
        "listgrouprights-addgroup-all": "加入所有群組",
        "listgrouprights-removegroup-all": "移除所有群組",
        "listgrouprights-addgroup-self": "在自己的帳號中加入的{{PLURAL:$2|一個|多個}}群組: $1",
        "listgrouprights-namespaceprotection-header": "命名空間限制",
        "listgrouprights-namespaceprotection-namespace": "命名空間",
        "listgrouprights-namespaceprotection-restrictedto": "允許使用者編輯的權限",
-       "trackingcategories": "è·\9f蹤分類",
+       "trackingcategories": "追蹤分類",
        "trackingcategories-summary": "此頁面列出由 MediaWiki 系統自動產生用來追蹤頁面的分類,這些分類的名稱可由命名空間 {{ns:8}} 中的相關系統訊息中修改。",
-       "trackingcategories-msg": "è·\9f蹤分類",
+       "trackingcategories-msg": "追蹤分類",
        "trackingcategories-name": "訊息名稱",
-       "trackingcategories-desc": "å\88\86é¡\9eæ\94¶é\8c\84æº\96å\89\87",
+       "trackingcategories-desc": "å\88\86é¡\9eæ\94¶é\8c\84æ¨\99æº\96",
        "noindex-category-desc": "命名空間允許,且含有魔術字 <code><nowiki>__NOINDEX__</nowiki></code> 未被機器人列入索引的頁面。",
        "index-category-desc": "命名空間允許,且含有魔術字 <code><nowiki>__INDEX__</nowiki></code> 被機器人列入索引的頁面。",
-       "post-expand-template-inclusion-category-desc": "當展開所有模組,大小大於<code>$wgMaxArticleSize</code>,因此一些模組尚未展開",
-       "post-expand-template-argument-category-desc": "展開樣版參數之後 (有些於三括號中,如 <code>{{{Foo}}}</code>),頁面大小超過<code>$wgMaxArticleSize</code> 設定的限制。",
+       "post-expand-template-inclusion-category-desc": "展開樣版後大小超過 <code>$wgMaxArticleSize</code> 導致部份樣版未正常展開的頁面。",
+       "post-expand-template-argument-category-desc": "展開樣版參數後大小超過 <code>$wgMaxArticleSize</code> 的頁面 (有些於三括號中,如 <code>{{{Foo}}}</code>)。",
        "expensive-parserfunction-category-desc": "頁面使用太多消耗系統資源的分析器函數 (如 <code>#ifexist</code>)。\n請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit]。",
-       "broken-file-category-desc": "頁面包含損壞的檔案連結 (內嵌檔案連結的檔案不存在時)",
-       "hidden-category-category-desc": "該分類使用了 <code><nowiki>__HIDDENCAT__</nowiki></code>,可預設避免在頁面中顯示該分類的分類連結框。",
+       "broken-file-category-desc": "含有損壞檔案連結的頁面 (內嵌檔案連結的檔案不存在)。",
+       "hidden-category-category-desc": "內容中使用 <code><nowiki>__HIDDENCAT__</nowiki></code> 的分類,可隱藏預設在頁面上顯示的分類連結方塊。",
        "trackingcategories-nodesc": "沒有可用的描述。",
        "trackingcategories-disabled": "已停用分類",
        "mailnologin": "沒有傳送位址",
        "exbeforeblank": "被清空前的內容為:\"$1\"",
        "delete-confirm": "刪除 \"$1\"",
        "delete-legend": "刪除",
-       "historywarning": "<strong>警告:</strong>您正要刪除的頁面內含有約 $1 次{{PLURAL:$1|的修訂}}歷史:",
+       "historywarning": "<strong>警告:</strong>您正要刪除的頁面內含 $1 次{{PLURAL:$1|的修訂}}歷史:",
        "confirmdeletetext": "您正要刪除一個頁面或圖片以及其所有歷史。\n請確定您了解要進行此項操作所造成的後果,同時確認您的行為符合[[{{MediaWiki:Policy-url}}]] 規範。",
        "actioncomplete": "操作完成",
        "actionfailed": "操作失敗",
        "delete-edit-reasonlist": "編輯刪除原因",
        "delete-toobig": "這個頁面有一個十分大量的編輯歷史,超過$1次修訂。刪除此類頁面的動作已經被限制,以防止在{{SITENAME}}上的意外擾亂。",
        "delete-warning-toobig": "這個頁面有一個十分大量的編輯歷史,超過$1次修訂。刪除它可能會擾亂{{SITENAME}}的資料庫操作;在繼續此動作前請小心。",
-       "delete-cantedit": "您沒有權限編輯此頁面,您無法刪除。",
+       "deleteprotected": "此頁面已受保護,您無法刪除此頁面。",
        "deleting-backlinks-warning": "<strong>警告:</strong>您正要刪除的頁面有[[Special:WhatLinksHere/{{FULLPAGENAME}}|其他頁面]]連結或引用。",
        "rollback": "還原編輯",
        "rollback_short": "還原",
        "rollbacklink": "還原",
        "rollbacklinkcount": "還原 $1 次編輯",
-       "rollbacklinkcount-morethan": "回退多過 $1 次{{PLURAL:$1|編輯}}",
+       "rollbacklinkcount-morethan": "還原超過 $1 次{{PLURAL:$1|編輯}}",
        "rollbackfailed": "還原失敗",
        "cantrollback": "無法還原編輯;\n此頁面的最後貢獻者是唯一的作者。",
        "alreadyrolled": "無法還原由 [[User:$2|$2]] ([[User talk:$2|對話]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]] 所作的最後一次編輯 [[:$1]],已有其他人編輯或還原了該頁面。\n\n最後一次編輯該頁面的使用者是 [[User:$3|$3]] ([[User talk:$3|對話]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])。",
        "protect-expiry-indefinite": "無限期",
        "protect-cascade": "保護本頁中包含的頁面 (連鎖保護)",
        "protect-cantedit": "您沒有編輯權限,無法更改此頁面的保護層級。",
-       "protect-othertime": "其它時間:",
+       "protect-othertime": "其它時間",
        "protect-othertime-op": "其它時間",
        "protect-existing-expiry": "已設定期限:$2 $3",
        "protect-otherreason": "其它/額外的原因:",
        "protect-otherreason-op": "其它原因",
        "protect-dropdown": "*常見的保護原因\n** 過度的破壞\n** 過多垃圾訊息\n** 反生產性的編輯戰\n** 高流量頁面",
        "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",
+       "protect-expiry-options": "1 小時:1 hour,1 天:1 day,1 週:1 week,2 週:2 weeks,1 個月:1 month,3 個月:3 months,6 個月:6 months,1 年:1 year,限期:infinite",
        "restriction-type": "權限:",
        "restriction-level": "限制層級:",
        "minimum-size": "大小下限",
        "restriction-move": "移動",
        "restriction-create": "建立",
        "restriction-upload": "上傳",
-       "restriction-level-sysop": "全保護",
-       "restriction-level-autoconfirmed": "半保護",
+       "restriction-level-sysop": "å\8f\97å\85¨ä¿\9dè­·",
+       "restriction-level-autoconfirmed": "å\8f\97å\8d\8aä¿\9dè­·",
        "restriction-level-all": "任何層級",
        "undelete": "檢視已刪除的頁面",
        "undeletepage": "檢視與還原已刪除的頁面",
-       "undeletepagetitle": "'''以下包含[[:$1]]的已刪除之修訂版本'''。",
+       "undeletepagetitle": "<strong>下列為 [[:$1]] 已刪除的修訂版本</strong>。",
        "viewdeletedpage": "檢視已刪除頁面",
-       "undeletepagetext": "以ä¸\8bç\9a\84$1å\80\8bé \81é\9d¢å·²ç¶\93被å\88ªé\99¤ï¼\8cä½\86ä¾\9dç\84¶å\9c¨æª\94æ¡\88中並å\8f¯ä»¥è¢«æ\81¢å¾©ã\80\82\næª\94æ¡\88庫å\8f¯è\83½è¢«定時清理。",
+       "undeletepagetext": "ä¸\8bå\88\97 {{PLURAL:$1|1 å\80\8bé \81é\9d¢å·²å\88ªé\99¤|$1 å\80\8bé \81é\9d¢å·²å\88ªé\99¤}}ä½\86å°\9aå\9c¨å°\81å­\98ï¼\8cä»\8då\8f¯é\82\84å\8e\9fã\80\82\nå°\81å­\98ç\9a\84æª\94æ¡\88å\8f¯è\83½æ\9c\83定時清理。",
        "undelete-fieldset-title": "還原修訂",
        "undeleteextrahelp": "若要還原所有的頁面歷史,請取消勾選所有核選方塊並點選 <strong><em>{{int:undeletebtn}}</em></strong>。\n若要還原指定的頁面歷史,請勾選要還原的修訂核選方塊並點選 <strong><em>{{int:undeletebtn}}</em></strong>。",
        "undeleterevisions": "已封存 $1 個修訂",
        "undeletedpage": "<strong>已還原 $1</strong>\n\n請參考 [[Special:Log/delete|刪除日誌]] 以查詢最近刪除及還原的記錄。",
        "undelete-header": "請參考 [[Special:Log/delete|刪除日誌]] 查詢最近刪除的頁面。",
        "undelete-search-title": "搜尋已刪除頁面",
-       "undelete-search-box": "搜尋已刪除頁面",
+       "undelete-search-box": "搜尋已刪除頁面",
        "undelete-search-prefix": "顯示頁面開始自:",
        "undelete-search-submit": "搜尋",
        "undelete-no-results": "刪除記錄裡沒有符合的頁面。",
        "mycontris": "我的貢獻",
        "contribsub2": "{{GENDER:$3|$1}} 的貢獻 ($2)",
        "contributions-userdoesnotexist": "使用者帳號 \"$1\" 尚未註冊。",
-       "nocontribs": "沒有找到符合特徵的更改。",
+       "nocontribs": "沒有找到符合條件的變更。",
        "uctop": "(目前)",
        "month": "截止月份:",
        "year": "截止年份:",
        "whatlinkshere": "連入頁面",
        "whatlinkshere-title": "連結到 \"$1\" 的頁面",
        "whatlinkshere-page": "頁面:",
-       "linkshere": "以下頁面連結到[[:$1]]:",
-       "nolinkshere": "沒有頁面連結到[[:$1]]。",
+       "linkshere": "以下頁面連結至 <strong>[[:$1]]</strong>:",
+       "nolinkshere": "沒有頁面連結至 <strong>[[:$1]]</strong>。",
        "nolinkshere-ns": "已選擇的命名空間中沒有頁面連結到 [[:$1]]。",
        "isredirect": "重新導向頁面",
        "istemplate": "引用",
        "isimage": "檔案連結",
        "whatlinkshere-prev": "前 $1 筆",
        "whatlinkshere-next": "後 $1 筆",
-       "whatlinkshere-links": "← 連",
+       "whatlinkshere-links": "← 連",
        "whatlinkshere-hideredirs": "$1 重新導向頁面",
        "whatlinkshere-hidetrans": "$1 引用",
        "whatlinkshere-hidelinks": "$1 連結",
        "ipbexpiry": "期限:",
        "ipbreason": "原因:",
        "ipbreason-dropdown": "*常見的封鎖原因\n** 填寫不實資訊\n** 刪除頁面內容\n** 散佈外部廣告連結\n** 在頁面填寫無意義文字\n** 無禮的行為、攻擊/騷擾別人\n** 濫用多個帳號\n** 使用不受歡迎的使用者名稱",
-       "ipb-hardblock": "避免使用此 IP 位址登入的使用者編輯",
+       "ipb-hardblock": "禁止使用此 IP 位址登入的使用者編輯",
        "ipbcreateaccount": "禁止建立帳號",
        "ipbemailban": "禁止使用者傳送電子郵件",
        "ipbenableautoblock": "自動封鎖此使用者最後使用的 IP 位址,以及所有之後嘗試編輯使用的 IP 位址",
        "ipbsubmit": "封鎖此使用者",
        "ipbother": "其他時間:",
-       "ipboptions": "2小時:2 hours,1天:1 day,3天:3 days,1周:1 week,2周:2 weeks,1個月:1 month,3個月:3 months,6個月:6 months,1年:1 year,無限期:infinite",
+       "ipboptions": "2 小時:2 hours,1 天:1 day,3 天:3 days,1 週:1 week,2 週:2 weeks,1 個月:1 month,3 個月:3 months,6 個月:6 months,1 年:1 year,無限期:infinite",
        "ipbhidename": "在編輯及清單中隱藏使用者名稱",
        "ipbwatchuser": "監視這位使用者的使用者頁面及其對話頁面",
        "ipb-disableusertalk": "避免在封鎖此使用者的期間編輯自己的對話頁面",
        "ip_range_toolarge": "不允許封鎖範圍大於 /$1。",
        "proxyblocker": "代理封鎖器",
        "proxyblockreason": "因您的 IP 位址是開放代理伺服器,已被封鎖。\n請聯繫您的網絡服務供應商或您所在組織的技術支援,告知他們此嚴重的安全性問題。",
-       "sorbsreason": "您的 IP 位址在{{SITENAME}}中被 DNSBL列為屬於開放代理服務器。",
+       "sorbsreason": "您的 IP 位址在 {{SITENAME}} 使用的 DNSBL 列為開放代理伺服器。",
        "sorbs_create_account_reason": "您連線到 {{SITENAME}} 的 IP 位址被 DNSBL 列為開放代理伺服器。\n您不能建立帳號。",
        "xffblockreason": "您的 IP 位址使用 X-Forwarded-For 標頭,您或您使用的代理伺服器已被封鎖。\n封鎖的原因為:$1",
        "cant-see-hidden-user": "您欲封鎖的使用者已經被封鎖並且隱藏。\n您沒有隱藏使用者的權限,您無法檢視或編輯該使用者的封鎖狀態。",
        "import": "匯入頁面",
        "importinterwiki": "Transwiki 匯入",
        "import-interwiki-text": "請選擇一個 Wiki 與頁面標題以進行匯入。\n會同時記錄修訂日期和編輯者的名稱。\n所有的 Transwiki 匯入操作會被記錄在 [[Special:Log/import|匯入日誌]]。",
-       "import-interwiki-source": "來源 Wiki/頁面:",
+       "import-interwiki-sourcewiki": "來源 Wiki:",
+       "import-interwiki-sourcepage": "來源頁面:",
        "import-interwiki-history": "複製此頁的所有歷史修訂",
        "import-interwiki-templates": "包含所有樣版",
        "import-interwiki-submit": "匯入",
        "exif-giffilecomment": "GIF 檔案備註",
        "exif-intellectualgenre": "項目類型",
        "exif-subjectnewscode": "主題代碼",
-       "exif-scenecode": "IPTC現場代碼",
+       "exif-scenecode": "IPTC 現場代碼",
        "exif-event": "事件描述",
        "exif-organisationinimage": "組織描述",
        "exif-personinimage": "所描述的人",
-       "exif-originalimageheight": "被è£\81å\89ªå\89\8d高度",
-       "exif-originalimagewidth": "被è£\81å\89ªå\89\8d寬度",
+       "exif-originalimageheight": "è£\81å\88\87å\89\8dç\9a\84高度",
+       "exif-originalimagewidth": "è£\81å\88\87å\89\8dç\9a\84寬度",
        "exif-compression-1": "未壓縮",
-       "exif-compression-2": "CCITT第3組一維修改霍夫曼遊程編碼",
-       "exif-compression-3": "CCITT第3組傳真編碼",
-       "exif-compression-4": "CCITT第4組傳真編碼",
+       "exif-compression-2": "CCITT 第 3 組一維修改霍夫曼變動長度編碼",
+       "exif-compression-3": "CCITT 第 3 組傳真編碼",
+       "exif-compression-4": "CCITT 第 4 組傳真編碼",
        "exif-compression-6": "JPEG (舊)",
        "exif-copyrighted-true": "受版權保護",
-       "exif-copyrighted-false": "版權所屬者不明",
+       "exif-copyrighted-false": "版權狀態不明",
        "exif-unknowndate": "日期不明",
        "exif-orientation-1": "標準",
        "exif-orientation-2": "水平翻轉",
        "exif-flash-redeye-1": "防紅眼模式",
        "exif-focalplaneresolutionunit-2": "英寸",
        "exif-sensingmethod-1": "未定義",
-       "exif-sensingmethod-2": "一塊彩色區域傳感器",
-       "exif-sensingmethod-3": "兩塊彩色區域傳感器",
-       "exif-sensingmethod-4": "三塊彩色區域傳感器",
-       "exif-sensingmethod-5": "連續彩色區域傳感器",
-       "exif-sensingmethod-7": "三線傳感器",
-       "exif-sensingmethod-8": "連續彩色線性傳感器",
+       "exif-sensingmethod-2": "單晶片彩色區域感測器",
+       "exif-sensingmethod-3": "雙晶片彩色區域感測器",
+       "exif-sensingmethod-4": "三晶片彩色區域感測器",
+       "exif-sensingmethod-5": "連續彩色區域感測器",
+       "exif-sensingmethod-7": "三線性感測器",
+       "exif-sensingmethod-8": "連續彩色線性感測器",
        "exif-filesource-3": "數位相機",
        "exif-scenetype-1": "直接照像圖片",
        "exif-customrendered-0": "標準處理",
        "deletedwhileediting": "<strong>警告:</strong>此頁在您開始編輯之後已經被刪除﹗",
        "confirmrecreate": "在您編輯的同時,使用者 [[User:$1|$1]] ([[User talk:$1|對話]]) 刪除了此頁面,原因為:\n: <em>$2</em>\n請確認您是否真的要重新建立此頁面。",
        "confirmrecreate-noreason": "在您編輯的同時,使用者 [[User:$1|$1]] ([[User talk:$1|對話]]) 刪除了此頁面,請確認您是否真的要重新建立此頁面。",
-       "recreate": "重",
+       "recreate": "重新建立",
        "confirm_purge_button": "確定",
-       "confirm-purge-top": "要清除此頁面的快取嗎?",
+       "confirm-purge-top": "要清除此頁面的快取嗎",
        "confirm-purge-bottom": "清理一頁將會清除快取以及強迫顯示最現時之修訂版本。",
        "confirm-watch-button": "確定",
        "confirm-watch-top": "新增此頁面至您的監視清單?",
        "table_pager_limit_label": "每頁筆數︰",
        "table_pager_limit_submit": "送出",
        "table_pager_empty": "沒有結果",
-       "autosumm-blank": "清空頁面",
+       "autosumm-blank": "空白的頁面",
        "autosumm-replace": "使用 \"$1\" 取代內容",
        "autoredircomment": "頁面已重新導向至 [[$1]]",
        "autosumm-new": "已建立頁面,內容為 \"$1\"",
-       "autosumm-newblank": "建立空白頁",
+       "autosumm-newblank": "建立空白頁",
        "size-bytes": "$1 位元組",
        "lag-warn-normal": "此清單可能不會顯示最近 $1 {{PLURAL:$1|秒}}內的變更。",
        "lag-warn-high": "由於資料庫回應延遲,此清單可能不會顯示最近 $1 {{PLURAL:$1|秒}}內的變更。",
        "redirect-legend": "重新導向至檔案或頁面",
        "redirect-summary": "此特殊頁面可用來重新導向至檔案 (指定檔案名稱)、頁面 (指定修訂 ID 或頁面 ID) 或使用者頁面 (指定使用者 ID)。用法:[[{{#Special:Redirect}}/file/Example.jpg]]、[[{{#Special:Redirect}}/page/64308]]、[[{{#Special:Redirect}}/revision/328429]] 或 [[{{#Special:Redirect}}/user/101]]。",
        "redirect-submit": "執行",
-       "redirect-lookup": "尋找:",
+       "redirect-lookup": "查詢:",
        "redirect-value": "值:",
        "redirect-user": "使用者 ID",
        "redirect-page": "頁面 ID",
        "redirect-revision": "頁面修訂 ID",
        "redirect-file": "檔案名稱",
-       "redirect-not-exists": "æ\89¾ä¸\8då\88°",
+       "redirect-not-exists": "æ\9f¥ç\84¡å\80¼",
        "fileduplicatesearch": "搜尋重覆檔案",
        "fileduplicatesearch-summary": "依據雜湊值(Hash)來搜尋重複的檔案。",
        "fileduplicatesearch-legend": "搜尋重覆",
        "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": "其他",
        "htmlform-no": "否",
        "htmlform-yes": "是",
-       "htmlform-chosen-placeholder": "選項",
+       "htmlform-chosen-placeholder": "謮選擇一個選項",
        "htmlform-cloner-create": "新增更多",
        "htmlform-cloner-delete": "移除",
        "htmlform-cloner-required": "至少必須填寫一筆資料。",
-       "sqlite-has-fts": "帶全文搜尋的版本$1",
-       "sqlite-no-fts": "不帶全文搜尋的版本$1",
+       "sqlite-has-fts": "$1 且支援全文搜索",
+       "sqlite-no-fts": "$1 且不支援全文搜索",
        "logentry-delete-delete": "$1 刪除頁面 $3",
        "logentry-delete-restore": "$1 還原頁面 $3",
        "logentry-delete-event": "$1 {{GENDER:$2|已更改}} $3 中 {{PLURAL:$5|1 筆日誌|$5 筆日誌}}的可見性:$4",
        "logentry-suppress-revision": "$1 {{GENDER:$2|已暗中更改}}頁面 $3 中 {{PLURAL:$5|1 筆修訂|$5 筆修訂}}的可見性:$4",
        "logentry-suppress-event-legacy": "$1 {{GENDER:$2|已暗中更改}} $3 中日誌的可見性",
        "logentry-suppress-revision-legacy": "$1 {{GENDER:$2|已暗中更改}}頁面 $3 中修訂的可見性",
-       "revdelete-content-hid": "隱藏內容",
-       "revdelete-summary-hid": "隱藏編輯摘要",
+       "revdelete-content-hid": "隱藏內容",
+       "revdelete-summary-hid": "己隱藏摘要",
        "revdelete-uname-hid": "隱藏使用者名稱",
        "revdelete-content-unhid": "取消隱藏內容",
        "revdelete-summary-unhid": "取消隱藏編輯摘要",
        "feedback-subject": "主旨:",
        "feedback-message": "訊息:",
        "feedback-cancel": "取消",
-       "feedback-submit": "送出回饋",
-       "feedback-adding": "正在頁面添加反饋...",
-       "feedback-error1": "錯誤:從API返回無法識別的結果",
+       "feedback-submit": "送出意見回饋",
+       "feedback-adding": "正在新增意見回饋至頁面...",
+       "feedback-error1": "錯誤:無法識別 API 回傳的結果",
        "feedback-error2": "錯誤:編輯失敗",
-       "feedback-error3": "錯誤:API 沒有應",
-       "feedback-thanks": "謝謝!您的反饋已被發布到頁面“[$2 $1]”。",
+       "feedback-error3": "錯誤:API 沒有應",
+       "feedback-thanks": "感謝!您的意見回饋已發佈到頁面 \"[$2 $1]\"。",
        "feedback-close": "完成",
-       "feedback-bugcheck": "請檢查此bug是否為[$1 已知bug]。",
-       "feedback-bugnew": "我已經檢查過。報告一個新的bug",
+       "feedback-bugcheck": "很好! 檢查一下您的意見是不是已經被列為 [$1 已知問題]。",
+       "feedback-bugnew": "我已經檢查。 回報新問題",
        "searchsuggest-search": "搜尋",
        "searchsuggest-containing": "包含...",
        "api-error-badaccess-groups": "您沒有權限在此 Wiki 上傳檔案。",
-       "api-error-badtoken": "內部錯誤:標記無效。",
-       "api-error-copyuploaddisabled": "通過URL上傳的功能已被此伺服器禁用。",
-       "api-error-duplicate": "在網站上已經具有相同內容的{{PLURAL:$1|[$2 另一個檔案]|[$2 另一些檔案]}}。",
-       "api-error-duplicate-archive": "在網站上曾經具有相同內容的{{PLURAL:$1|[$2 另一個檔案]|[$2 另一些檔案]}},但已被刪除。",
-       "api-error-duplicate-archive-popup-title": "已被刪除的重複{{PLURAL:$1|文件}}。",
+       "api-error-badtoken": "內部錯誤:密鑰錯誤。",
+       "api-error-copyuploaddisabled": "此伺服器已停用使用 URL 上傳檔案的功能。",
+       "api-error-duplicate": "在網站上已有相同內容的{{PLURAL:$1|[$2 其他檔案]|[$2 其他檔案]}}。",
+       "api-error-duplicate-archive": "在網站上曾有相同內容的{{PLURAL:$1|[$2 其他檔案]|[$2 其他檔案]}},但已被刪除。",
+       "api-error-duplicate-archive-popup-title": "重複的{{PLURAL:$1|檔案}}已經被刪除。",
        "api-error-duplicate-popup-title": "重複的{{PLURAL:$1|檔案}}。",
-       "api-error-empty-file": "您提交的檔案是空的。",
-       "api-error-emptypage": "不許創建沒有內容的新頁面。",
-       "api-error-fetchfileerror": "內部錯誤:獲取檔案時發生錯誤。",
-       "api-error-fileexists-forbidden": "以\" $1 \"命名的檔案已經存在,並且不能被重寫。",
-       "api-error-fileexists-shared-forbidden": "以\" $1 \"命名的檔案已經存在於共用檔案儲存庫上,並且不能被重寫。",
-       "api-error-file-too-large": "您提交的檔案太大了。",
-       "api-error-filename-tooshort": "檔案名過短。",
-       "api-error-filetype-banned": "這種類型的檔案是被禁止的。",
+       "api-error-empty-file": "您送出的檔案是空的。",
+       "api-error-emptypage": "不允許建立空白的頁面。",
+       "api-error-fetchfileerror": "內部錯誤:取得檔案時發生錯誤。",
+       "api-error-fileexists-forbidden": "名稱為 \"$1\" 的檔案已經存在,並且不能被覆寫。",
+       "api-error-fileexists-shared-forbidden": "名稱為 \"$1\" 的檔案已經存在於共用儲存庫,並且不能被覆寫。",
+       "api-error-file-too-large": "您送出的檔案太大了。",
+       "api-error-filename-tooshort": "檔案名過短。",
+       "api-error-filetype-banned": "此檔案類型已禁止使用。",
        "api-error-filetype-banned-type": "$1{{PLURAL:$4|不是允許的檔案類型}}。  允許的{{PLURAL:$3|檔案類型是}} $2。",
        "api-error-filetype-missing": "本檔案缺少了副檔名。",
        "api-error-hookaborted": "你試圖進行的修改被一個擴展鉤子終止。",
        "api-error-http": "內部錯誤:無法連接到伺服器。",
-       "api-error-illegal-filename": "æª\94æ¡\88å\90\8dä¸\8då\85\81許ã\80\82",
+       "api-error-illegal-filename": "ä¸\8då\85\81許使ç\94¨ç\9a\84æª\94æ¡\88å\90\8d稱ã\80\82",
        "api-error-internal-error": "內部錯誤:此 Wiki 在處理你的上傳時發生錯誤。",
        "api-error-invalid-file-key": "內部錯誤:於臨時儲存庫中查無檔案。",
        "api-error-missingparam": "內部錯誤:請求中缺少參數。",
        "api-error-missingresult": "內部錯誤:無法確定複製是否成功。",
-       "api-error-mustbeloggedin": "您必須登入後再上傳檔案。",
+       "api-error-mustbeloggedin": "您必須登入方可上傳檔案。",
        "api-error-mustbeposted": "內部錯誤:請求需要 HTTP POST。",
        "api-error-noimageinfo": "上傳成功,但伺服器沒有給我們任何該檔案的資訊。",
        "api-error-nomodule": "內部錯誤:缺少上傳模塊集。",
        "api-error-unclassified": "發生未知錯誤。",
        "api-error-unknown-code": "未知錯誤:$1",
        "api-error-unknown-error": "內部錯誤:嘗試上傳檔案時出錯。",
-       "api-error-unknown-warning": "未知的警告:$1",
-       "api-error-unknownerror": "未知錯誤:$1。",
-       "api-error-uploaddisabled": "æ\9c¬wikiç\9a\84ä¸\8aå\82³æª\94æ¡\88功能已停用。",
+       "api-error-unknown-warning": "不明警告:\"$1\"。",
+       "api-error-unknownerror": "不明錯誤:\"$1\"。",
+       "api-error-uploaddisabled": "æ­¤ Wiki ç\9a\84ä¸\8aå\82³功能已停用。",
        "api-error-verification-error": "本檔案可能已損壞,或副檔名錯誤。",
        "duration-seconds": "$1 秒",
        "duration-minutes": "$1 分鐘",
        "log-name-pagelang": "更改語言日誌",
        "log-description-pagelang": "這是頁面語言更改日誌。",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|已更改}}頁面 $3 的語言從 $4 到 $5。",
-       "default-skin-not-found": "注意! 此維基預設的介面(<code>$wgDefaultSkin</code>), <code>$1</code>目前無法使用.",
+       "default-skin-not-found": "哎呀!您的 Wiki 預設外觀 (<code>$wgDefaultSkin</code>),<code>$1</code> 無法使用。\n\n您的安裝程序應包含以下外觀。 請參考 [https://www.mediawiki.org/wiki/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何開啟外觀並設為預設值的資訊。\n\n$2\n\n; 若您才剛安裝完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 透過 git 複製 <code>mediawiki/skins/*</code> 儲存庫中其中一個外觀到您安裝的 MediaWiki <code>skins/</code> 目錄中。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。\n\n; 若您才剛升級 MediaWiki:\n: MediaWiki 1.24 與較新的版本不再自動開啟已安裝的外觀 (請參考 [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 操作手冊:外觀自動搜尋])。 您可以將下列行貼上至 <code>LocalSettings.php</code> 來開啟所有目前已經安裝的外觀:\n\n<pre>$3</pre>\n\n; 若您才剛修改 <code>LocalSettings.php</code>:\n: 請再次確認您輸入的外觀名稱是否有誤。",
+       "default-skin-not-found-no-skins": "哎呀!您的 Wiki 預設外觀 (<code>$wgDefaultSkin</code>),<code>$1</code> 無法使用。\n\n您未安裝任何的外觀。\n\n; 若您才剛安裝完或升級完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。 MediaWiki 1.24 或較新的版本在主要儲存庫中不再包含任何的外觀。 請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 透過 git 複製 <code>mediawiki/skins/*</code> 儲存庫中其中一個外觀到您安裝的 MediaWiki <code>skins/</code> 目錄中。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。 請參考 [https://www.mediawiki.org/wiki/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何開啟外觀並設為預設值的資訊。",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (已開啟)",
-       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''已關閉''')"
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''已停用''')"
 }
index d40fec6..17b9a04 100644 (file)
@@ -137,7 +137,7 @@ class FindHooks extends Maintenance {
        /**
         * Get the hook documentation, either locally or from MediaWiki.org
         * @param string $doc
-        * @return Array of documented hooks
+        * @return array Array of documented hooks
         */
        private function getHooksFromDoc( $doc ) {
                if ( $this->hasOption( 'online' ) ) {
@@ -150,7 +150,7 @@ class FindHooks extends Maintenance {
        /**
         * Get hooks from a local file (for example docs/hooks.txt)
         * @param string $doc Filename to look in
-        * @return Array of documented hooks
+        * @return array Array of documented hooks
         */
        private function getHooksFromLocalDoc( $doc ) {
                $m = array();
@@ -162,7 +162,7 @@ class FindHooks extends Maintenance {
 
        /**
         * Get hooks from www.mediawiki.org using the API
-        * @return Array of documented hooks
+        * @return array Array of documented hooks
         */
        private function getHooksFromOnlineDoc() {
                // All hooks
@@ -200,7 +200,7 @@ class FindHooks extends Maintenance {
        /**
         * Get hooks from a PHP file
         * @param string $file Full filename to the PHP file.
-        * @return Array of hooks found.
+        * @return array Array of hooks found
         */
        private function getHooksFromFile( $file ) {
                $content = file_get_contents( $file );
@@ -217,7 +217,7 @@ class FindHooks extends Maintenance {
        /**
         * Get hooks from the source code.
         * @param string $path Directory where the include files can be found
-        * @return Array of hooks found.
+        * @return array Array of hooks found
         */
        private function getHooksFromPath( $path ) {
                $hooks = array();
@@ -237,7 +237,7 @@ class FindHooks extends Maintenance {
        /**
         * Get bad hooks (where the hook name could not be determined) from a PHP file
         * @param string $file Full filename to the PHP file.
-        * @return Array of bad wfRunHooks() lines
+        * @return array Array of bad wfRunHooks() lines
         */
        private function getBadHooksFromFile( $file ) {
                $content = file_get_contents( $file );
@@ -255,7 +255,7 @@ class FindHooks extends Maintenance {
        /**
         * Get bad hooks from the source code.
         * @param string $path Directory where the include files can be found
-        * @return Array of bad wfRunHooks() lines
+        * @return array Array of bad wfRunHooks() lines
         */
        private function getBadHooksFromPath( $path ) {
                $hooks = array();
index 38f346b..b8dc554 100644 (file)
@@ -64,7 +64,7 @@ class ShowJobs extends Maintenance {
                                $claimed = $queue->getAcquiredCount();
                                $abandoned = $queue->getAbandonedCount();
                                $active = max( 0, $claimed - $abandoned );
-                               if ( ( $pending + $claimed + $delayed ) > 0 ) {
+                               if ( ( $pending + $claimed + $delayed + $abandoned ) > 0 ) {
                                        $this->output(
                                                "{$type}: $pending queued; " .
                                                "$claimed claimed ($active active, $abandoned abandoned); " .
index 43b2598..5c0fd07 100644 (file)
@@ -42,7 +42,7 @@ class Sqlite {
         * Will throw exceptions on SQL errors
         * @param array|string $files
         * @throws MWException
-        * @return True if no error or error string in case of errors
+        * @return bool True if no error or error string in case of errors
         */
        public static function checkSqlSyntax( $files ) {
                if ( !Sqlite::isPresent() ) {
index 092660c..99e1e4f 100644 (file)
@@ -1045,13 +1045,18 @@ return array(
                        'postedit-confirmation-saved',
                ),
        ),
-       'mediawiki.action.view.redirectToFragment' => array(
-               'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.redirectToFragment.js',
+       'mediawiki.action.view.redirect' => array(
+               'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.redirect.js',
                'dependencies' => array(
                        'jquery.client',
                ),
                'position' => 'top',
        ),
+       // Deployment hack for compatibility with cached HTML, remove before 1.24 release
+       'mediawiki.action.view.redirectToFragment' => array(
+               'dependencies' => 'mediawiki.action.view.redirect',
+               'position' => 'top',
+       ),
        'mediawiki.action.view.rightClickEdit' => array(
                'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.rightClickEdit.js',
        ),
@@ -1072,7 +1077,8 @@ return array(
        'mediawiki.language' => array(
                'scripts' => array(
                        'resources/src/mediawiki.language/mediawiki.language.js',
-                       'resources/src/mediawiki.language/mediawiki.language.numbers.js'
+                       'resources/src/mediawiki.language/mediawiki.language.numbers.js',
+                       'resources/src/mediawiki.language/mediawiki.language.fallback.js',
                ),
                'languageScripts' => array(
                        'bs' => 'resources/src/mediawiki.language/languages/bs.js',
index a4a4415..c29b262 100644 (file)
@@ -1,41 +1,37 @@
 /*!
- * OOjs UI v0.1.0-pre (51f513f9d3)
+ * OOjs UI v0.1.0-pre (d6008381aa)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-08-20T00:59:55Z
+ * Date: 2014-08-21T23:45:56Z
  */
 .oo-ui-dialog-content > .oo-ui-window-head,
 .oo-ui-dialog-content > .oo-ui-window-body,
 .oo-ui-dialog-content > .oo-ui-window-foot {
   position: absolute;
-  right: 0;
   left: 0;
+  right: 0;
   overflow: hidden;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
-
 .oo-ui-dialog-content > .oo-ui-window-head {
-  top: 0;
   z-index: 1;
+  top: 0;
 }
-
 .oo-ui-dialog-content > .oo-ui-window-body {
+  z-index: 2;
   top: 0;
   bottom: 0;
-  z-index: 2;
 }
-
 .oo-ui-dialog-content > .oo-ui-window-foot {
-  bottom: 0;
   z-index: 1;
+  bottom: 0;
 }
-
 .oo-ui-dialog-content > .oo-ui-window-overlay {
   z-index: 3;
 }
   background-color: rgba(255, 255, 255, 0.5);
   opacity: 0;
   -webkit-transition: opacity 250ms ease-in-out;
-     -moz-transition: opacity 250ms ease-in-out;
-      -ms-transition: opacity 250ms ease-in-out;
-       -o-transition: opacity 250ms ease-in-out;
-          transition: opacity 250ms ease-in-out;
+  -moz-transition: opacity 250ms ease-in-out;
+  -ms-transition: opacity 250ms ease-in-out;
+  -o-transition: opacity 250ms ease-in-out;
+  transition: opacity 250ms ease-in-out;
 }
-
 .oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
   top: 0;
   bottom: 0;
   background-color: #fff;
   -webkit-transform: translate3d(0, -200%, 0);
-     -moz-transform: translate3d(0, -200%, 0);
-      -ms-transform: translate3d(0, -200%, 0);
-       -o-transform: translate3d(0, -200%, 0);
-          transform: translate3d(0, -200%, 0);
+  -moz-transform: translate3d(0, -200%, 0);
+  -ms-transform: translate3d(0, -200%, 0);
+  -o-transform: translate3d(0, -200%, 0);
+  transform: translate3d(0, -200%, 0);
   -webkit-transition: transform 250ms ease-in-out;
-     -moz-transition: transform 250ms ease-in-out;
-      -ms-transition: transform 250ms ease-in-out;
-       -o-transition: transform 250ms ease-in-out;
-          transition: transform 250ms ease-in-out;
+  -moz-transition: transform 250ms ease-in-out;
+  -ms-transition: transform 250ms ease-in-out;
+  -o-transition: transform 250ms ease-in-out;
+  transition: transform 250ms ease-in-out;
 }
-
 .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
   opacity: 1;
 }
-
 .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
   -webkit-transform: translate3d(0, 0, 0);
-     -moz-transform: translate3d(0, 0, 0);
-      -ms-transform: translate3d(0, 0, 0);
-       -o-transform: translate3d(0, 0, 0);
-          transform: translate3d(0, 0, 0);
+  -moz-transform: translate3d(0, 0, 0);
+  -ms-transform: translate3d(0, 0, 0);
+  -o-transform: translate3d(0, 0, 0);
+  transform: translate3d(0, 0, 0);
 }
-
 .oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
   border: solid 1px #ccc;
   border-radius: 0.5em;
 .oo-ui-messageDialog-title,
 .oo-ui-messageDialog-message {
   display: block;
-  padding-top: 0.5em;
   text-align: center;
+  padding-top: 0.5em;
 }
-
 .oo-ui-messageDialog-title {
   font-size: 1.5em;
   line-height: 1em;
   color: #000;
 }
-
 .oo-ui-messageDialog-message {
   font-size: 0.9em;
   line-height: 1.25em;
   color: #666;
 }
-
 .oo-ui-messageDialog-message-verbose {
   font-size: 1.1em;
   line-height: 1.5em;
   text-align: left;
 }
-
 .oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
   border-right: solid 1px #e5e5e5;
 }
-
 .oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
   border-right-width: 0;
 }
-
 .oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
   border-bottom: solid 1px #e5e5e5;
 }
-
 .oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
   border-bottom-width: 0;
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label {
-  padding: 0 2em;
-  line-height: 3.4em;
   text-align: center;
+  line-height: 3.4em;
+  padding: 0 2em;
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
   background-color: rgba(0, 0, 0, 0.05);
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget:active {
   background-color: rgba(0, 0, 0, 0.1);
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover {
   background-color: rgba(8, 126, 204, 0.05);
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active {
   background-color: rgba(8, 126, 204, 0.1);
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
   font-weight: bold;
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover {
   background-color: rgba(118, 171, 54, 0.05);
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active {
   background-color: rgba(118, 171, 54, 0.1);
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover {
   background-color: rgba(212, 83, 83, 0.05);
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active {
   background-color: rgba(212, 83, 83, 0.1);
 }
   height: 3.35em;
   border-bottom: 1px solid #dddddd;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
-
 .oo-ui-processDialog-content .oo-ui-window-body {
   top: 3.35em;
   padding: 2em 0;
 }
-
 .oo-ui-processDialog-navigation {
   position: relative;
   height: 3.35em;
   padding: 0 1em;
 }
-
 .oo-ui-processDialog-location {
-  height: 3.35em;
   padding: 0.25em 0;
-  text-align: center;
+  height: 3.35em;
   cursor: default;
+  text-align: center;
 }
-
 .oo-ui-processDialog-title {
   font-weight: bold;
   line-height: 1.85em;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button,
 .oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonedElement-button {
+  padding: 0.35em 0.75em;
   min-width: 1.85em;
   min-height: 1.85em;
-  padding: 0.35em 0.75em;
   border: 1px solid #dddddd;
   border-radius: 4px;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labeledElement-label,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labeledElement-label,
 .oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labeledElement-label {
+  line-height: 1.85em;
   padding: 0 1em;
   font-weight: bold;
-  line-height: 1.85em;
   color: #777777;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconedElement-icon,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconedElement-icon,
 .oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconedElement-icon {
   position: absolute;
   margin-top: -0.125em;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
 .oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
   vertical-align: middle;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-buttonedElement-button,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-buttonedElement-button,
 .oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-buttonedElement-button {
   border: 1px solid transparent;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-labeledElement-label,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-labeledElement-label,
 .oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-flaggableElement-destructive .oo-ui-labeledElement-label {
   color: #d11d13;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button {
   padding: 0.75em 0.35em;
   border: none;
   border-radius: 0;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-buttonedElement-button,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-buttonedElement-button {
   background-color: #347bff;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
   color: #ffffff;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
   left: 0.5em;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
   padding-left: 2.25em;
 }
-
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
   right: 0.5em;
 }
-
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
   padding-right: 2.25em;
 }
-
 .oo-ui-processDialog-actions-other {
   position: absolute;
   bottom: 1em;
 }
-
 .oo-ui-processDialog > .oo-ui-window-frame {
   min-height: 5em;
 }
-
 .oo-ui-processDialog-errors {
+  background-color: rgba(255, 255, 255, 0.9);
   padding: 3em 3em 1.5em 3em;
   text-align: center;
-  background-color: rgba(255, 255, 255, 0.9);
 }
-
 .oo-ui-processDialog-errors .oo-ui-buttonWidget {
   margin: 2em 1em 2em 1em;
 }
-
 .oo-ui-processDialog-errors-title {
-  margin-bottom: 2em;
   font-size: 1.5em;
   color: #000;
+  margin-bottom: 2em;
 }
-
 .oo-ui-processDialog-error {
-  padding: 1em;
-  margin: 1em;
   text-align: left;
-  background-color: #fff7f7;
+  margin: 1em;
+  padding: 1em;
   border: solid 1px #ff9e9e;
+  background-color: #fff7f7;
   border-radius: 0.25em;
 }
 
   font-weight: bold;
   border-bottom: 1px solid #dddddd;
 }
-
 .oo-ui-optionWidget.oo-ui-indicatedElement .oo-ui-labeledElement-label {
   padding-right: 1.5em;
 }
-
 .oo-ui-optionWidget-level-0 {
   padding-left: 3.5em;
 }
-
 .oo-ui-optionWidget-level-0 .oo-ui-iconedElement-icon {
   left: 1em;
 }
-
 .oo-ui-optionWidget-level-1 {
   padding-left: 5em;
 }
-
 .oo-ui-optionWidget-level-1 .oo-ui-iconedElement-icon {
   left: 2.5em;
 }
-
 .oo-ui-optionWidget-level-2 {
   padding-left: 6.5em;
 }
-
 .oo-ui-optionWidget-level-2 .oo-ui-iconedElement-icon {
   left: 4em;
 }
 }
 
 .oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
-  color: #ffffff;
   background: #347bff;
+  color: #ffffff;
 }
-
 .oo-ui-menuItemWidget .oo-ui-iconedElement-icon {
   background-size: 24px auto;
 }
 }
 
 /* Icons */
-
 .oo-ui-icon-check {
-  background: #347bff;
   background-image: /* @embed */ url(themes/agora/images/icons/check.svg);
-}
\ No newline at end of file
+  background: #347bff;
+}
index b0b9923..a1c96cc 100644 (file)
 /*!
- * OOjs UI v0.1.0-pre (51f513f9d3)
+ * OOjs UI v0.1.0-pre (d6008381aa)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-08-20T00:59:55Z
+ * Date: 2014-08-21T23:45:56Z
  */
 .oo-ui-dialog-content > .oo-ui-window-head,
 .oo-ui-dialog-content > .oo-ui-window-body,
 .oo-ui-dialog-content > .oo-ui-window-foot {
   position: absolute;
-  right: 0;
   left: 0;
+  right: 0;
   overflow: hidden;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
-
 .oo-ui-dialog-content > .oo-ui-window-head {
-  top: 0;
   z-index: 1;
+  top: 0;
 }
-
 .oo-ui-dialog-content > .oo-ui-window-body {
+  z-index: 2;
   top: 0;
   bottom: 0;
-  z-index: 2;
   box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
 }
-
 .oo-ui-dialog-content > .oo-ui-window-foot {
-  bottom: 0;
   z-index: 1;
+  bottom: 0;
 }
-
 .oo-ui-dialog-content > .oo-ui-window-overlay {
   z-index: 3;
 }
 
-.oo-ui-frame-content {
-  font-family: sans-serif;
-  font-size: 0.8em;
-}
-
 .oo-ui-toolbar-bar {
+  border-bottom: solid 1px #ccc;
   background: #f8fbfd;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#f1f7fb');
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #f1f7fb));
   background-image: -webkit-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
   background-image: -moz-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
   background-image: -ms-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
   background-image: -o-linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
   background-image: linear-gradient(top, #ffffff 0%, #f1f7fb 100%);
-  border-bottom: solid 1px #ccc;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#f1f7fb');
 }
-
 .oo-ui-toolbar-bar .oo-ui-toolbar-bar {
-  background: none;
   border: none;
+  background: none;
 }
-
 .oo-ui-toolbar-shadow {
+  background-image: /* @embed */ url(images/toolbar-shadow.png);
   bottom: -9px;
   height: 9px;
-  background-image: /* @embed */ url(images/toolbar-shadow.png);
   opacity: 0.125;
   -webkit-transition: opacity 500ms ease-in-out;
-     -moz-transition: opacity 500ms ease-in-out;
-      -ms-transition: opacity 500ms ease-in-out;
-       -o-transition: opacity 500ms ease-in-out;
-          transition: opacity 500ms ease-in-out;
+  -moz-transition: opacity 500ms ease-in-out;
+  -ms-transition: opacity 500ms ease-in-out;
+  -o-transition: opacity 500ms ease-in-out;
+  transition: opacity 500ms ease-in-out;
 }
 
 .oo-ui-toolGroup {
-  border: solid 1px transparent;
   border-radius: 0.25em;
+  border: solid 1px transparent;
   -webkit-transition: border-color 300ms ease-in-out;
-     -moz-transition: border-color 300ms ease-in-out;
-      -ms-transition: border-color 300ms ease-in-out;
-       -o-transition: border-color 300ms ease-in-out;
-          transition: border-color 300ms ease-in-out;
+  -moz-transition: border-color 300ms ease-in-out;
+  -ms-transition: border-color 300ms ease-in-out;
+  -o-transition: border-color 300ms ease-in-out;
+  transition: border-color 300ms ease-in-out;
 }
-
 .oo-ui-toolGroup.oo-ui-widget-enabled:hover {
   border-color: rgba(0, 0, 0, 0.1);
 }
-
 .oo-ui-toolGroup.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
   color: #000;
 }
 
-.oo-ui-window-content {
+.oo-ui-window-isolated.oo-ui-window-content {
+  font-family: sans-serif;
+  font-size: 0.8em;
   background: transparent;
 }
-
-.oo-ui-window-overlay {
+.oo-ui-window-isolated.oo-ui-window-overlay {
   font-family: sans-serif;
-  font-size: 1em;
   line-height: 1.5em;
+  font-size: 1em;
 }
 
 .oo-ui-windowManager-modal > .oo-ui-dialog {
   background-color: rgba(255, 255, 255, 0.5);
   opacity: 0;
   -webkit-transition: opacity 250ms ease-in-out;
-     -moz-transition: opacity 250ms ease-in-out;
-      -ms-transition: opacity 250ms ease-in-out;
-       -o-transition: opacity 250ms ease-in-out;
-          transition: opacity 250ms ease-in-out;
+  -moz-transition: opacity 250ms ease-in-out;
+  -ms-transition: opacity 250ms ease-in-out;
+  -o-transition: opacity 250ms ease-in-out;
+  transition: opacity 250ms ease-in-out;
 }
-
 .oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
   top: 1em;
   bottom: 1em;
   background-color: #fff;
   -webkit-transform: scale(0.5);
-     -moz-transform: scale(0.5);
-      -ms-transform: scale(0.5);
-       -o-transform: scale(0.5);
-          transform: scale(0.5);
+  -moz-transform: scale(0.5);
+  -ms-transform: scale(0.5);
+  -o-transform: scale(0.5);
+  transform: scale(0.5);
   -webkit-transition: all 250ms ease-in-out;
-     -moz-transition: all 250ms ease-in-out;
-      -ms-transition: all 250ms ease-in-out;
-       -o-transition: all 250ms ease-in-out;
-          transition: all 250ms ease-in-out;
+  -moz-transition: all 250ms ease-in-out;
+  -ms-transition: all 250ms ease-in-out;
+  -o-transition: all 250ms ease-in-out;
+  transition: all 250ms ease-in-out;
 }
-
 .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready {
   opacity: 1;
 }
-
 .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
   -webkit-transform: scale(1);
-     -moz-transform: scale(1);
-      -ms-transform: scale(1);
-       -o-transform: scale(1);
-          transform: scale(1);
+  -moz-transform: scale(1);
+  -ms-transform: scale(1);
+  -o-transform: scale(1);
+  transform: scale(1);
 }
-
 .oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
   border: solid 1px #ccc;
   border-radius: 0.5em;
 .oo-ui-messageDialog-content .oo-ui-window-body {
   box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
 }
-
 .oo-ui-messageDialog-title,
 .oo-ui-messageDialog-message {
   display: block;
-  padding-top: 0.5em;
   text-align: center;
+  padding-top: 0.5em;
 }
-
 .oo-ui-messageDialog-title {
   font-size: 1.5em;
   line-height: 1em;
   color: #000;
 }
-
 .oo-ui-messageDialog-message {
   font-size: 0.9em;
   line-height: 1.25em;
   color: #666;
 }
-
 .oo-ui-messageDialog-message-verbose {
   font-size: 1.1em;
   line-height: 1.5em;
   text-align: left;
 }
-
 .oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
   border-right: solid 1px #e5e5e5;
 }
-
 .oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget:last-child {
   border-right-width: 0;
 }
-
 .oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
   border-bottom: solid 1px #e5e5e5;
 }
-
 .oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget:last-child {
   border-bottom-width: 0;
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label {
-  padding: 0 2em;
-  line-height: 3.4em;
   text-align: center;
+  line-height: 3.4em;
+  padding: 0 2em;
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
   background-color: rgba(0, 0, 0, 0.05);
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget:active {
   background-color: rgba(0, 0, 0, 0.1);
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover {
   background-color: rgba(8, 126, 204, 0.05);
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active {
   background-color: rgba(8, 126, 204, 0.1);
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
   font-weight: bold;
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover {
   background-color: rgba(118, 171, 54, 0.05);
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active {
   background-color: rgba(118, 171, 54, 0.1);
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover {
   background-color: rgba(212, 83, 83, 0.05);
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active {
   background-color: rgba(212, 83, 83, 0.1);
 }
 .oo-ui-processDialog-content .oo-ui-window-head {
   height: 3.4em;
 }
-
 .oo-ui-processDialog-content .oo-ui-window-body {
   top: 3.4em;
   box-shadow: 0 0 0.33em rgba(0, 0, 0, 0.33);
 }
-
 .oo-ui-processDialog-navigation {
   position: relative;
   height: 3.4em;
   padding: 0 1em;
 }
-
 .oo-ui-processDialog-location {
-  height: 1.9em;
   padding: 0.25em 0;
-  text-align: center;
+  height: 1.9em;
   cursor: default;
+  text-align: center;
 }
-
 .oo-ui-processDialog-title {
   font-weight: bold;
   line-height: 1.9em;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-buttonedElement-button,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-buttonedElement-button,
 .oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-buttonedElement-button {
-  min-width: 1.9em;
-  min-height: 1.9em;
   padding-top: 0.75em;
   padding-bottom: 0.75em;
+  min-width: 1.9em;
+  min-height: 1.9em;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-labeledElement-label,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-labeledElement-label,
 .oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-labeledElement-label {
-  padding: 0 1em;
   line-height: 1.9em;
+  padding: 0 1em;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget .oo-ui-iconedElement-icon,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget .oo-ui-iconedElement-icon,
 .oo-ui-processDialog-actions-other .oo-ui-actionWidget .oo-ui-iconedElement-icon {
   position: absolute;
   margin-top: -0.125em;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed,
 .oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed {
   margin: 0.75em 0 0.75em 0.75em;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
 .oo-ui-processDialog-actions-other .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
   padding: 0;
   vertical-align: middle;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget:hover,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget:hover {
   background-color: rgba(0, 0, 0, 0.05);
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget:active,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget:active {
   background-color: rgba(0, 0, 0, 0.1);
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed {
   margin: 0.75em;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
   /* Adjust for border so text aligns with title */
-
   margin: -1px;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:hover {
   background-color: rgba(8, 126, 204, 0.05);
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary:active {
   background-color: rgba(8, 126, 204, 0.1);
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-primary .oo-ui-labeledElement-label {
   font-weight: bold;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:hover {
   background-color: rgba(118, 171, 54, 0.05);
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-constructive:active {
   background-color: rgba(118, 171, 54, 0.1);
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:hover {
   background-color: rgba(212, 83, 83, 0.05);
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-flaggableElement-destructive:active {
   background-color: rgba(212, 83, 83, 0.1);
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
   left: 0.5em;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
   padding-left: 2.25em;
 }
-
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
   right: 0.5em;
 }
-
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget.oo-ui-iconedElement .oo-ui-labeledElement-label {
   padding-right: 2.25em;
 }
-
 .oo-ui-processDialog > .oo-ui-window-frame {
   min-height: 5em;
 }
-
 .oo-ui-processDialog-errors {
+  background-color: rgba(255, 255, 255, 0.9);
   padding: 3em 3em 1.5em 3em;
   text-align: center;
-  background-color: rgba(255, 255, 255, 0.9);
 }
-
 .oo-ui-processDialog-errors .oo-ui-buttonWidget {
   margin: 2em 1em 2em 1em;
 }
-
 .oo-ui-processDialog-errors-title {
-  margin-bottom: 2em;
   font-size: 1.5em;
   color: #000;
+  margin-bottom: 2em;
 }
-
 .oo-ui-processDialog-error {
-  padding: 1em;
-  margin: 1em;
   text-align: left;
-  background-color: #fff7f7;
+  margin: 1em;
+  padding: 1em;
   border: solid 1px #ff9e9e;
+  background-color: #fff7f7;
   border-radius: 0.25em;
 }
 
 .oo-ui-buttonedElement > .oo-ui-buttonedElement-button {
   color: #333;
 }
-
 .oo-ui-buttonedElement.oo-ui-indicatedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
 .oo-ui-buttonedElement.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
+  opacity: 0.8;
   width: 1.9em;
   height: 1.9em;
-  opacity: 0.8;
 }
-
 .oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
   /* Don't animate opacities for now, causes wiggling in Chrome (bug 63020) */
-
   /*.oo-ui-transition(opacity 200ms);*/
-
 }
-
 .oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:hover > .oo-ui-iconedElement-icon,
 .oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:focus > .oo-ui-iconedElement-icon {
   opacity: 1;
 }
-
 .oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:hover > .oo-ui-labeledElement-label,
 .oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button:focus > .oo-ui-labeledElement-label {
   color: #000;
 }
-
 .oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
   color: #333;
 }
-
 .oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
   color: #087ecc;
 }
-
 .oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
   color: #76ab36;
 }
-
 .oo-ui-buttonedElement-frameless.oo-ui-flaggableElement-destructive > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
   color: #d45353;
 }
-
 .oo-ui-buttonedElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
   opacity: 0.2;
 }
-
 .oo-ui-buttonedElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
   color: #ccc;
 }
-
 .oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button {
-  padding: 0.2em 0.8em;
   margin: 0.1em 0;
+  padding: 0.2em 0.8em;
+  border-radius: 0.3em;
   text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
+  border: 1px #c9c9c9 solid;
+  -webkit-transition: border-color 100ms ease-in-out;
+  -moz-transition: border-color 100ms ease-in-out;
+  -ms-transition: border-color 100ms ease-in-out;
+  -o-transition: border-color 100ms ease-in-out;
+  transition: border-color 100ms ease-in-out;
   background: #eeeeee;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
   background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
   background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
   background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
   background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
   background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  border: 1px #c9c9c9 solid;
-  border-radius: 0.3em;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
-  -webkit-transition: border-color 100ms ease-in-out;
-     -moz-transition: border-color 100ms ease-in-out;
-      -ms-transition: border-color 100ms ease-in-out;
-       -o-transition: border-color 100ms ease-in-out;
-          transition: border-color 100ms ease-in-out;
 }
-
 .oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button:hover,
 .oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button:focus {
   border-color: #aaa;
 }
-
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
-.oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
+.oo-ui-buttonedElement-framed.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button,
+.oo-ui-buttonedElement-framed.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button {
+  box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
   color: black;
+  border-color: #c9c9c9;
   background: #eeeeee;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
   background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
   background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
   background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
   background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
   background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  border-color: #c9c9c9;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
-  box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
 }
-
 .oo-ui-buttonedElement-framed.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  margin-right: -0.5em;
   margin-left: -0.5em;
+  margin-right: -0.5em;
 }
-
 .oo-ui-buttonedElement-framed.oo-ui-iconedElement.oo-ui-labeledElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
-  margin-right: 0.3em;
   margin-left: -0.5em;
+  margin-right: 0.3em;
 }
-
 .oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button {
+  border: solid 1px #a6cee1;
   background: #cde7f4;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #eaf4fa), color-stop(100%, #b0d9ee));
   background-image: -webkit-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
   background-image: -moz-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
   background-image: -ms-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
   background-image: -o-linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
   background-image: linear-gradient(top, #eaf4fa 0%, #b0d9ee 100%);
-  border: solid 1px #a6cee1;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#eaf4fa', endColorstr='#b0d9ee');
 }
-
 .oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button:hover,
 .oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button:focus {
   border-color: #9dc2d4;
 }
-
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
+.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button,
+.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-primary.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button {
+  border: solid 1px #a6cee1;
   background: #cde7f4;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
   background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
   background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
   background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
   background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
   background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  border: solid 1px #a6cee1;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
 }
-
 .oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button {
+  border: solid 1px #b8d892;
   background: #daf0be;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f0fbe1', endColorstr='#c3e59a');
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f0fbe1), color-stop(100%, #c3e59a));
   background-image: -webkit-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
   background-image: -moz-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
   background-image: -ms-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
   background-image: -o-linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
   background-image: linear-gradient(top, #f0fbe1 0%, #c3e59a 100%);
-  border: solid 1px #b8d892;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f0fbe1', endColorstr='#c3e59a');
 }
-
 .oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button:hover,
 .oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button:focus {
   border-color: #adcb89;
 }
-
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
-.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
+.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button,
+.oo-ui-buttonedElement-framed.oo-ui-flaggableElement-constructive.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button {
+  border: solid 1px #b8d892;
   background: #daf0be;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#c3e59a', endColorstr='#f0fbe1');
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #c3e59a), color-stop(100%, #f0fbe1));
   background-image: -webkit-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
   background-image: -moz-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
   background-image: -ms-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
   background-image: -o-linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
   background-image: linear-gradient(top, #c3e59a 0%, #f0fbe1 100%);
-  border: solid 1px #b8d892;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#c3e59a', endColorstr='#f0fbe1');
 }
-
 .oo-ui-buttonedElement-framed.oo-ui-flaggableElement-destructive > .oo-ui-buttonedElement-button {
   color: #d45353;
 }
-
 .oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button,
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button {
+  opacity: 0.5;
+  box-shadow: none;
   color: #333;
   background: #eee;
   border-color: #ccc;
-  opacity: 0.5;
-  box-shadow: none;
 }
-
 .oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button:hover,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active:hover,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed:hover,
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button:hover,
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button:hover,
 .oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button:focus,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active:focus,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed:focus {
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button:focus,
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button:focus {
   border-color: #ccc;
   box-shadow: none;
 }
 .oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
   padding: 1.5em;
 }
-
 .oo-ui-bookletLayout-outlinePanel {
   border-right: solid 1px #ddd;
 }
-
 .oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
   box-shadow: 0 0 0.25em rgba(0, 0, 0, 0.25);
 }
 .oo-ui-fieldsetLayout {
   border: none;
 }
-
 .oo-ui-fieldsetLayout > .oo-ui-labeledElement-label {
   font-size: 1.5em;
 }
   margin: -1px 0 -1px -1px;
   border: solid 1px transparent;
 }
-
 .oo-ui-barToolGroup .oo-ui-tool:first-child {
-  border-bottom-left-radius: 0.25em;
   border-top-left-radius: 0.25em;
+  border-bottom-left-radius: 0.25em;
 }
-
 .oo-ui-barToolGroup .oo-ui-tool:last-child {
   margin-right: -1px;
   border-top-right-radius: 0.25em;
   border-bottom-right-radius: 0.25em;
 }
-
 .oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
   opacity: 0.8;
 }
-
 .oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover {
   border-color: rgba(0, 0, 0, 0.2);
 }
-
 .oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled {
+  border-color: rgba(0, 0, 0, 0.2);
+  box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
   background: #f8fbfd;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
   background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
   background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
   background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
   background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
   background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  border-color: rgba(0, 0, 0, 0.2);
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
-  box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
 }
-
 .oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
   border-left-color: rgba(0, 0, 0, 0.1);
 }
-
 .oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
   opacity: 0.2;
 }
-
 .oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
   opacity: 0.8;
 }
-
 .oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconedElement-icon {
   opacity: 1;
 }
-
 .oo-ui-barToolGroup.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
   opacity: 0.2;
 }
 .oo-ui-listToolGroup.oo-ui-popupToolGroup-active {
   border-color: rgba(0, 0, 0, 0.2);
 }
-
 .oo-ui-listToolGroup .oo-ui-tool {
-  margin: -1px 0;
   border: solid 1px transparent;
+  margin: -1px 0;
 }
-
 .oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled {
+  border-color: rgba(0, 0, 0, 0.1);
+  box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
   background: #f8fbfd;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
   background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
   background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
   background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
   background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
   background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  border-color: rgba(0, 0, 0, 0.1);
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
-  box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
 }
-
 .oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
   border-top-color: rgba(0, 0, 0, 0.1);
 }
-
 .oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled:hover {
   border-color: rgba(0, 0, 0, 0.2);
 }
-
 .oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
   border-color: rgba(0, 0, 0, 0.2);
 }
-
 .oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
   opacity: 0.8;
 }
-
 .oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover .oo-ui-tool-link .oo-ui-iconedElement-icon {
   opacity: 1;
 }
-
 .oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
   color: #ccc;
 }
-
 .oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
   opacity: 0.2;
 }
-
 .oo-ui-listToolGroup.oo-ui-widget-disabled {
   color: #ccc;
 }
-
 .oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator,
 .oo-ui-listToolGroup.oo-ui-widget-disabled .oo-ui-iconedElement-icon {
   opacity: 0.2;
 .oo-ui-menuToolGroup {
   border-color: rgba(0, 0, 0, 0.1);
 }
-
 .oo-ui-menuToolGroup.oo-ui-widget-enabled:hover {
   border-color: rgba(0, 0, 0, 0.2);
 }
-
 .oo-ui-menuToolGroup.oo-ui-popupToolGroup-active {
   border-color: rgba(0, 0, 0, 0.25);
 }
-
 .oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
   background-color: #e1f3ff;
 }
-
 .oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-tool-title {
   color: #ccc;
 }
-
 .oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link .oo-ui-iconedElement-icon {
   opacity: 0.2;
 }
-
 .oo-ui-menuToolGroup.oo-ui-widget-disabled {
   color: #ccc;
   border-color: rgba(0, 0, 0, 0.05);
 }
-
 .oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator,
 .oo-ui-menuToolGroup.oo-ui-widget-disabled .oo-ui-iconedElement-icon {
   opacity: 0.2;
 .oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
   opacity: 0.8;
 }
-
 .oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
-  background-color: white;
   border: solid 1px #ccc;
+  background-color: white;
   box-shadow: 0 0.25em 1em rgba(0, 0, 0, 0.25);
 }
-
 .oo-ui-popupToolGroup-active.oo-ui-widget-enabled {
+  border-bottom-left-radius: 0;
+  border-bottom-right-radius: 0;
+  box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
   background: #f8fbfd;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #f1f7fb), color-stop(100%, #ffffff));
   background-image: -webkit-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
   background-image: -moz-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
   background-image: -ms-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
   background-image: -o-linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
   background-image: linear-gradient(top, #f1f7fb 0%, #ffffff 100%);
-  border-bottom-right-radius: 0;
-  border-bottom-left-radius: 0;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f1f7fb', endColorstr='#ffffff');
-  box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
 }
 
 .oo-ui-optionWidget {
   padding: 0.5em 2em 0.5em 3em;
 }
-
 .oo-ui-optionWidget-highlighted {
   background-color: #e1f3ff;
 }
-
 .oo-ui-selectWidget-depressed .oo-ui-optionWidget-selected {
   background-color: #a7dcff;
 }
-
 .oo-ui-selectWidget-pressed .oo-ui-optionWidget-pressed {
   background-color: #a7dcff;
 }
-
 .oo-ui-optionWidget.oo-ui-widget-disabled {
   color: #ccc;
 }
 
 .oo-ui-menuWidget {
-  margin-top: -1px;
   background: #fff;
+  margin-top: -1px;
   border: solid 1px #ccc;
   border-radius: 0 0 0.25em 0.25em;
   box-shadow: 0 0.15em 1em 0 rgba(0, 0, 0, 0.2);
 }
 
 .oo-ui-popupWidget-popup {
-  background-color: #fff;
   border: solid 1px #ccc;
   border-radius: 0.25em;
+  background-color: #fff;
   box-shadow: 0 0.15em 0.5em 0 rgba(0, 0, 0, 0.2);
 }
-
 .oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
+  background-image: /* @embed */ url(images/anchor.svg);
   width: 15px;
   height: 8px;
   margin-left: -7px;
-  background-image: /* @embed */ url(images/anchor.svg);
 }
-
 .oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
   -webkit-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-     -moz-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-      -ms-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-       -o-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
-          transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+  -moz-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+  -ms-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+  -o-transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
+  transition: width 100ms ease-in-out, height 100ms ease-in-out, left 100ms ease-in-out;
 }
-
 .oo-ui-popupWidget-body {
   box-shadow: 0 0 0.66em rgba(0, 0, 0, 0.25);
 }
 .oo-ui-buttonOptionWidget {
   padding: 0;
 }
-
 .oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected,
 .oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
 .oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted {
 .oo-ui-buttonSelectWidget {
   border-radius: 0.3em;
 }
-
 .oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button {
-  margin-left: -1px;
   border-radius: 0;
+  margin-left: -1px;
 }
-
 .oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonedElement-button {
-  margin-left: 0;
   border-bottom-left-radius: 0.3em;
   border-top-left-radius: 0.3em;
+  margin-left: 0;
 }
-
 .oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonedElement-button {
-  border-top-right-radius: 0.3em;
   border-bottom-right-radius: 0.3em;
+  border-top-right-radius: 0.3em;
 }
 
-.oo-ui-inlineMenuWidget-handle {
+.oo-ui-comboBoxWidget-handle {
   border: solid 1px rgba(0, 0, 0, 0.1);
   border-radius: 0.25em;
 }
+.oo-ui-comboBoxWidget-handle:hover {
+  border-color: rgba(0, 0, 0, 0.2);
+}
+.oo-ui-comboBoxWidget.oo-ui-widget-disabled .oo-ui-textInputWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator,
+.oo-ui-comboBoxWidget-empty .oo-ui-textInputWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
+  cursor: default;
+  opacity: 0.2;
+}
 
+.oo-ui-inlineMenuWidget-handle {
+  border: solid 1px rgba(0, 0, 0, 0.1);
+  border-radius: 0.25em;
+}
 .oo-ui-inlineMenuWidget-handle:hover {
   border-color: rgba(0, 0, 0, 0.2);
 }
-
 .oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,
 .oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
   opacity: 0.8;
 }
-
 .oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
   color: #ccc;
   text-shadow: 0 1px 1px #fff;
-  background-color: #f3f3f3;
   border-color: #ddd;
+  background-color: #f3f3f3;
 }
-
 .oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-indicatedElement-indicator {
   opacity: 0.2;
 }
 .oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
   background-color: transparent;
 }
-
 .oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted,
 .oo-ui-menuItemWidget.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected {
   background-color: #e1f3ff;
 .oo-ui-outlineControlsWidget {
   background-color: #fff;
 }
-
 .oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon {
   opacity: 0.2;
 }
 .oo-ui-outlineItemWidget {
   font-size: 1.1em;
 }
-
 .oo-ui-outlineItemWidget.oo-ui-indicatedElement .oo-ui-labeledElement-label {
   padding-right: 1.5em;
 }
-
 .oo-ui-outlineItemWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
   opacity: 0.5;
 }
-
 .oo-ui-outlineItemWidget-level-0 {
   padding-left: 3.5em;
 }
-
 .oo-ui-outlineItemWidget-level-0 .oo-ui-iconedElement-icon {
   left: 1em;
 }
-
 .oo-ui-outlineItemWidget-level-1 {
   padding-left: 5em;
 }
-
 .oo-ui-outlineItemWidget-level-1 .oo-ui-iconedElement-icon {
   left: 2.5em;
 }
-
 .oo-ui-outlineItemWidget-level-2 {
   padding-left: 6.5em;
 }
-
 .oo-ui-outlineItemWidget-level-2 .oo-ui-iconedElement-icon {
   left: 4em;
 }
-
 .oo-ui-selectWidget-depressed .oo-ui-outlineItemWidget.oo-ui-optionWidget-selected {
-  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
   background-color: #a7dcff;
+  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
 }
-
 .oo-ui-outlineItemWidget.oo-ui-flaggableElement-important {
   font-weight: bold;
 }
-
 .oo-ui-outlineItemWidget.oo-ui-flaggableElement-placeholder {
   font-style: italic;
 }
-
 .oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-iconedElement-icon {
   opacity: 0.5;
 }
-
 .oo-ui-outlineItemWidget.oo-ui-flaggableElement-empty .oo-ui-labeledElement-label {
   color: #777;
 }
 .oo-ui-textInputWidget {
   width: 20em;
 }
-
 .oo-ui-textInputWidget input,
 .oo-ui-textInputWidget textarea {
   padding: 0.5em;
-  font-family: sans-serif;
   font-size: 1em;
+  font-family: sans-serif;
   background-color: #fff;
   border: solid 1px #ccc;
-  border-radius: 0.25em;
   box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd;
+  border-radius: 0.25em;
   -webkit-transition: border-color 200ms, box-shadow 200ms;
-     -moz-transition: border-color 200ms, box-shadow 200ms;
-      -ms-transition: border-color 200ms, box-shadow 200ms;
-       -o-transition: border-color 200ms, box-shadow 200ms;
-          transition: border-color 200ms, box-shadow 200ms;
+  -moz-transition: border-color 200ms, box-shadow 200ms;
+  -ms-transition: border-color 200ms, box-shadow 200ms;
+  -o-transition: border-color 200ms, box-shadow 200ms;
+  transition: border-color 200ms, box-shadow 200ms;
 }
-
 .oo-ui-textInputWidget-decorated input,
 .oo-ui-textInputWidget-decorated textarea {
   padding-left: 2em;
 }
-
 .oo-ui-textInputWidget-icon {
   width: 2em;
 }
-
 .oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea:focus {
-  border-color: #a7dcff;
   outline: none;
+  border-color: #a7dcff;
   box-shadow: 0 0 0.3em #a7dcff, 0 0 0 white;
 }
-
 .oo-ui-textInputWidget input[readonly],
 .oo-ui-textInputWidget textarea[readonly] {
   color: #777;
   text-shadow: 0 1px 1px #fff;
 }
-
 .oo-ui-textInputWidget-pending input,
 .oo-ui-textInputWidget-pending textarea {
   background-color: transparent;
 }
-
 .oo-ui-textInputWidget.oo-ui-widget-disabled input,
 .oo-ui-textInputWidget.oo-ui-widget-disabled input:focus,
 .oo-ui-textInputWidget.oo-ui-widget-disabled textarea,
 .oo-ui-textInputWidget.oo-ui-widget-disabled textarea:focus {
   color: #ccc;
   text-shadow: 0 1px 1px #fff;
-  background-color: #f3f3f3;
   border-color: #ddd;
+  background-color: #f3f3f3;
+}
+.oo-ui-textInputWidget .oo-ui-iconedElement-icon,
+.oo-ui-textInputWidget .oo-ui-indicatedElement-indicator {
+  opacity: 0.8;
+}
+.oo-ui-textInputWidget.oo-ui-iconedElement input,
+.oo-ui-textInputWidget.oo-ui-iconedElement textarea {
+  padding-left: 2em;
+}
+.oo-ui-textInputWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon {
+  width: 2em;
+  background-position: right center;
+}
+.oo-ui-textInputWidget.oo-ui-indicatedElement input,
+.oo-ui-textInputWidget.oo-ui-indicatedElement textarea {
+  padding-right: 1.5em;
+}
+.oo-ui-textInputWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
+  width: 1.5em;
+  background-position: left center;
 }
 
 .oo-ui-toggleSwitchWidget {
+  border-radius: 1em;
+  box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd;
+  border: solid 1px #ccc;
   background: #eeeeee;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #dddddd), color-stop(100%, #ffffff));
   background-image: -webkit-linear-gradient(top, #dddddd 0%, #ffffff 100%);
   background-image: -moz-linear-gradient(top, #dddddd 0%, #ffffff 100%);
   background-image: -ms-linear-gradient(top, #dddddd 0%, #ffffff 100%);
   background-image: -o-linear-gradient(top, #dddddd 0%, #ffffff 100%);
   background-image: linear-gradient(top, #dddddd 0%, #ffffff 100%);
-  border: solid 1px #ccc;
-  border-radius: 1em;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#dddddd', endColorstr='#ffffff');
-  box-shadow: 0 0 0 white, inset 0 0.1em 0.2em #ddd;
 }
-
 .oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
   opacity: 0.5;
 }
-
 .oo-ui-toggleSwitchWidget-grip {
+  border-radius: 1em;
+  box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1);
+  border: 1px #c9c9c9 solid;
   background: #eeeeee;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd));
   background-image: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%);
   background-image: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%);
   background-image: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%);
   background-image: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%);
   background-image: linear-gradient(top, #ffffff 0%, #dddddd 100%);
-  border: 1px #c9c9c9 solid;
-  border-radius: 1em;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#ffffff', endColorstr='#dddddd');
-  box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1);
 }
-
 .oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover,
 .oo-ui-toggleSwitchWidget.oo-ui-widget-enabled:hover .oo-ui-toggleSwitchWidget-grip {
   border-color: #aaa;
 }
-
 .oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
+  border-radius: 1em;
+  box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
   background: #cde7f4;
+  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0%, #b0d9ee), color-stop(100%, #eaf4fa));
   background-image: -webkit-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
   background-image: -moz-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
   background-image: -ms-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
   background-image: -o-linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
   background-image: linear-gradient(top, #b0d9ee 0%, #eaf4fa 100%);
-  border-radius: 1em;
-  filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#b0d9ee', endColorstr='#eaf4fa');
-  box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
 }
-
 .oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-glow {
   opacity: 1;
 }
-
 .oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
   display: block;
   opacity: 0;
-}
\ No newline at end of file
+}
index a60c879..13f4282 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (51f513f9d3)
+ * OOjs UI v0.1.0-pre (d6008381aa)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-08-20T00:59:55Z
+ * Date: 2014-08-21T23:45:56Z
  */
 ( function ( OO ) {
 
@@ -654,18 +654,19 @@ OO.ui.Element.static.tagName = 'div';
  *
  * @static
  * @param {jQuery|HTMLElement|HTMLDocument|Window} context Context to bind the function to
- * @param {OO.ui.Frame} [frame] Frame of the document context
+ * @param {jQuery} [$iframe] HTML iframe element that contains the document, omit if document is
+ *   not in an iframe
  * @return {Function} Bound jQuery function
  */
-OO.ui.Element.getJQuery = function ( context, frame ) {
+OO.ui.Element.getJQuery = function ( context, $iframe ) {
        function wrapper( selector ) {
                return $( selector, wrapper.context );
        }
 
        wrapper.context = this.getDocument( context );
 
-       if ( frame ) {
-               wrapper.frame = frame;
+       if ( $iframe ) {
+               wrapper.$iframe = $iframe;
        }
 
        return wrapper;
@@ -1094,255 +1095,6 @@ OO.ui.Element.prototype.offDOMEvent = function ( event, callback ) {
        };
 }() );
 
-/**
- * Embedded iframe with the same styles as its parent.
- *
- * @class
- * @extends OO.ui.Element
- * @mixins OO.EventEmitter
- *
- * @constructor
- * @param {Object} [config] Configuration options
- */
-OO.ui.Frame = function OoUiFrame( config ) {
-       // Parent constructor
-       OO.ui.Frame.super.call( this, config );
-
-       // Mixin constructors
-       OO.EventEmitter.call( this );
-
-       // Properties
-       this.loading = null;
-       this.config = config;
-       this.dir = null;
-
-       // Initialize
-       this.$element
-               .addClass( 'oo-ui-frame' )
-               .attr( { frameborder: 0, scrolling: 'no' } );
-
-};
-
-/* Setup */
-
-OO.inheritClass( OO.ui.Frame, OO.ui.Element );
-OO.mixinClass( OO.ui.Frame, OO.EventEmitter );
-
-/* Static Properties */
-
-/**
- * @static
- * @inheritdoc
- */
-OO.ui.Frame.static.tagName = 'iframe';
-
-/* Events */
-
-/**
- * @event load
- */
-
-/* Static Methods */
-
-/**
- * Transplant the CSS styles from as parent document to a frame's document.
- *
- * This loops over the style sheets in the parent document, and copies their nodes to the
- * frame's document. It then polls the document to see when all styles have loaded, and once they
- * have, resolves the promise.
- *
- * If the styles still haven't loaded after a long time (5 seconds by default), we give up waiting
- * and resolve the promise anyway. This protects against cases like a display: none; iframe in
- * Firefox, where the styles won't load until the iframe becomes visible.
- *
- * For details of how we arrived at the strategy used in this function, see #load.
- *
- * @static
- * @inheritable
- * @param {HTMLDocument} parentDoc Document to transplant styles from
- * @param {HTMLDocument} frameDoc Document to transplant styles to
- * @param {number} [timeout=5000] How long to wait before giving up (in ms). If 0, never give up.
- * @return {jQuery.Promise} Promise resolved when styles have loaded
- */
-OO.ui.Frame.static.transplantStyles = function ( parentDoc, frameDoc, timeout ) {
-       var i, numSheets, styleNode, newNode, timeoutID, pollNodeId, $pendingPollNodes,
-               $pollNodes = $( [] ),
-               // Fake font-family value
-               fontFamily = 'oo-ui-frame-transplantStyles-loaded',
-               deferred = $.Deferred();
-
-       for ( i = 0, numSheets = parentDoc.styleSheets.length; i < numSheets; i++ ) {
-               styleNode = parentDoc.styleSheets[i].ownerNode;
-               if ( styleNode.disabled ) {
-                       continue;
-               }
-               if ( styleNode.nodeName.toLowerCase() === 'link' ) {
-                       // External stylesheet
-                       // Create a node with a unique ID that we're going to monitor to see when the CSS
-                       // has loaded
-                       pollNodeId = 'oo-ui-frame-transplantStyles-loaded-' + i;
-                       $pollNodes = $pollNodes.add( $( '<div>', frameDoc )
-                               .attr( 'id', pollNodeId )
-                               .appendTo( frameDoc.body )
-                       );
-
-                       // Add <style>@import url(...); #pollNodeId { font-family: ... }</style>
-                       // The font-family rule will only take effect once the @import finishes
-                       newNode = frameDoc.createElement( 'style' );
-                       newNode.textContent = '@import url(' + styleNode.href + ');\n' +
-                               '#' + pollNodeId + ' { font-family: ' + fontFamily + '; }';
-               } else {
-                       // Not an external stylesheet, or no polling required; just copy the node over
-                       // Can't use importNode here because that breaks in IE
-                       newNode = frameDoc.createElement( 'style' );
-                       newNode.textContent = styleNode.textContent;
-               }
-               frameDoc.head.appendChild( newNode );
-       }
-
-       // Poll every 100ms until all external stylesheets have loaded
-       $pendingPollNodes = $pollNodes;
-       timeoutID = setTimeout( function pollExternalStylesheets() {
-               while (
-                       $pendingPollNodes.length > 0 &&
-                       $pendingPollNodes.eq( 0 ).css( 'font-family' ) === fontFamily
-               ) {
-                       $pendingPollNodes = $pendingPollNodes.slice( 1 );
-               }
-
-               if ( $pendingPollNodes.length === 0 ) {
-                       // We're done!
-                       if ( timeoutID !== null ) {
-                               timeoutID = null;
-                               $pollNodes.remove();
-                               deferred.resolve();
-                       }
-               } else {
-                       timeoutID = setTimeout( pollExternalStylesheets, 100 );
-               }
-       }, 100 );
-       // ...but give up after a while
-       if ( timeout !== 0 ) {
-               setTimeout( function () {
-                       if ( timeoutID ) {
-                               clearTimeout( timeoutID );
-                               timeoutID = null;
-                               $pollNodes.remove();
-                               deferred.reject();
-                       }
-               }, timeout || 5000 );
-       }
-
-       return deferred.promise();
-};
-
-/* Methods */
-
-/**
- * Load the frame contents.
- *
- * Once the iframe's stylesheets are loaded, the `load` event will be emitted and the returned
- * promise will be resolved. Calling while loading will return a promise but not trigger a new
- * loading cycle. Calling after loading is complete will return a promise that's already been
- * resolved.
- *
- * Sounds simple right? Read on...
- *
- * When you create a dynamic iframe using open/write/close, the window.load event for the
- * iframe is triggered when you call close, and there's no further load event to indicate that
- * everything is actually loaded.
- *
- * In Chrome, stylesheets don't show up in document.styleSheets until they have loaded, so we could
- * just poll that array and wait for it to have the right length. However, in Firefox, stylesheets
- * are added to document.styleSheets immediately, and the only way you can determine whether they've
- * loaded is to attempt to access .cssRules and wait for that to stop throwing an exception. But
- * cross-domain stylesheets never allow .cssRules to be accessed even after they have loaded.
- *
- * The workaround is to change all `<link href="...">` tags to `<style>@import url(...)</style>` tags.
- * Because `@import` is blocking, Chrome won't add the stylesheet to document.styleSheets until
- * the `@import` has finished, and Firefox won't allow .cssRules to be accessed until the `@import`
- * has finished. And because the contents of the `<style>` tag are from the same origin, accessing
- * .cssRules is allowed.
- *
- * However, now that we control the styles we're injecting, we might as well do away with
- * browser-specific polling hacks like document.styleSheets and .cssRules, and instead inject
- * `<style>@import url(...); #foo { font-family: someValue; }</style>`, then create `<div id="foo">`
- * and wait for its font-family to change to someValue. Because `@import` is blocking, the font-family
- * rule is not applied until after the `@import` finishes.
- *
- * All this stylesheet injection and polling magic is in #transplantStyles.
- *
- * @return {jQuery.Promise} Promise resolved when loading is complete
- * @fires load
- */
-OO.ui.Frame.prototype.load = function () {
-       var win, doc,
-               frame = this;
-
-       // Return existing promise if already loading or loaded
-       if ( this.loading ) {
-               return this.loading.promise();
-       }
-
-       // Load the frame
-       this.loading = $.Deferred();
-
-       win = this.$element.prop( 'contentWindow' );
-       doc = win.document;
-
-       // Cache directionality
-       this.dir = OO.ui.Element.getDir( this.$element ) || 'ltr';
-
-       // Initialize contents
-       doc.open();
-       // The following classes can be used here:
-       // oo-ui-ltr
-       // oo-ui-rtl
-       doc.write(
-               '<!doctype html>' +
-               '<html>' +
-                       '<body class="oo-ui-frame-content oo-ui-' + this.getDir() + '" dir="' + this.getDir() + '">' +
-                       '</body>' +
-               '</html>'
-       );
-       doc.close();
-
-       // Properties
-       this.$ = OO.ui.Element.getJQuery( doc, this );
-       this.$content = this.$( '.oo-ui-frame-content' ).attr( 'tabIndex', 0 );
-       this.$document = this.$( doc );
-
-       // Initialization
-       this.constructor.static.transplantStyles( this.getElementDocument(), this.$document[0] )
-               .always( function () {
-                       frame.emit( 'load' );
-                       frame.loading.resolve();
-               } );
-
-       return this.loading.promise();
-};
-
-/**
- * Set the size of the frame.
- *
- * @param {number} width Frame width in pixels
- * @param {number} height Frame height in pixels
- * @chainable
- */
-OO.ui.Frame.prototype.setSize = function ( width, height ) {
-       this.$element.css( { width: width, height: height } );
-       return this;
-};
-
-/**
- * Get the directionality of the frame
- *
- * @return {string} Directionality, 'ltr' or 'rtl'
- */
-OO.ui.Frame.prototype.getDir = function () {
-       return this.dir;
-};
-
 /**
  * Container for elements.
  *
@@ -1530,15 +1282,12 @@ OO.ui.Widget.prototype.updateDisabled = function () {
  * If the requested size is not recognized, the window manager will choose a sensible fallback.
  *
  * @constructor
- * @param {OO.ui.WindowManager} manager Manager of window
  * @param {Object} [config] Configuration options
  * @cfg {string} [size] Symbolic name of dialog size, `small`, `medium`, `large` or `full`; omit to
  *   use #static-size
  * @fires initialize
  */
-OO.ui.Window = function OoUiWindow( manager, config ) {
-       var win = this;
-
+OO.ui.Window = function OoUiWindow( config ) {
        // Configuration initialization
        config = config || {};
 
@@ -1548,46 +1297,25 @@ OO.ui.Window = function OoUiWindow( manager, config ) {
        // Mixin constructors
        OO.EventEmitter.call( this );
 
-       if ( !( manager instanceof OO.ui.WindowManager ) ) {
-               throw new Error( 'Cannot construct window: window must have a manager' );
-       }
-
        // Properties
-       this.manager = manager;
+       this.manager = null;
        this.initialized = false;
        this.visible = false;
        this.opening = null;
        this.closing = null;
        this.opened = null;
        this.timing = null;
+       this.loading = null;
        this.size = config.size || this.constructor.static.size;
-       this.frame = new OO.ui.Frame( { $: this.$ } );
        this.$frame = this.$( '<div>' );
-       this.$ = function () {
-               throw new Error( 'this.$() cannot be used until the frame has been initialized.' );
-       };
 
        // Initialization
        this.$element
                .addClass( 'oo-ui-window' )
-               // Hide the window using visibility: hidden; while the iframe is still loading
-               // Can't use display: none; because that prevents the iframe from loading in Firefox
-               .css( 'visibility', 'hidden' )
                .append( this.$frame );
-       this.$frame
-               .addClass( 'oo-ui-window-frame' )
-               .append( this.frame.$element );
+       this.$frame.addClass( 'oo-ui-window-frame' );
 
-       // Events
-       this.frame.on( 'load', function () {
-               win.initialize();
-               win.initialized = true;
-               // Undo the visibility: hidden; hack and apply display: none;
-               // We can do this safely now that the iframe has initialized
-               // (don't do this from within #initialize because it has to happen
-               // after the all subclasses have been handled as well).
-               win.$element.hide().css( 'visibility', '' );
-       } );
+       // NOTE: Additional intitialization will occur when #setManager is called
 };
 
 /* Setup */
@@ -1615,6 +1343,116 @@ OO.mixinClass( OO.ui.Window, OO.EventEmitter );
  */
 OO.ui.Window.static.size = 'medium';
 
+/* Static Methods */
+
+/**
+ * Transplant the CSS styles from as parent document to a frame's document.
+ *
+ * This loops over the style sheets in the parent document, and copies their nodes to the
+ * frame's document. It then polls the document to see when all styles have loaded, and once they
+ * have, resolves the promise.
+ *
+ * If the styles still haven't loaded after a long time (5 seconds by default), we give up waiting
+ * and resolve the promise anyway. This protects against cases like a display: none; iframe in
+ * Firefox, where the styles won't load until the iframe becomes visible.
+ *
+ * For details of how we arrived at the strategy used in this function, see #load.
+ *
+ * @static
+ * @inheritable
+ * @param {HTMLDocument} parentDoc Document to transplant styles from
+ * @param {HTMLDocument} frameDoc Document to transplant styles to
+ * @param {number} [timeout=5000] How long to wait before giving up (in ms). If 0, never give up.
+ * @return {jQuery.Promise} Promise resolved when styles have loaded
+ */
+OO.ui.Window.static.transplantStyles = function ( parentDoc, frameDoc, timeout ) {
+       var i, numSheets, styleNode, styleText, newNode, timeoutID, pollNodeId, $pendingPollNodes,
+               $pollNodes = $( [] ),
+               // Fake font-family value
+               fontFamily = 'oo-ui-frame-transplantStyles-loaded',
+               nextIndex = parentDoc.oouiFrameTransplantStylesNextIndex || 0,
+               deferred = $.Deferred();
+
+       for ( i = 0, numSheets = parentDoc.styleSheets.length; i < numSheets; i++ ) {
+               styleNode = parentDoc.styleSheets[i].ownerNode;
+               if ( styleNode.disabled ) {
+                       continue;
+               }
+
+               if ( styleNode.nodeName.toLowerCase() === 'link' ) {
+                       // External stylesheet; use @import
+                       styleText = '@import url(' + styleNode.href + ');';
+               } else {
+                       // Internal stylesheet; just copy the text
+                       styleText = styleNode.textContent;
+               }
+
+               // Create a node with a unique ID that we're going to monitor to see when the CSS
+               // has loaded
+               if ( styleNode.oouiFrameTransplantStylesId ) {
+                       // If we're nesting transplantStyles operations and this node already has
+                       // a CSS rule to wait for loading, reuse it
+                       pollNodeId = styleNode.oouiFrameTransplantStylesId;
+               } else {
+                       // Otherwise, create a new ID
+                       pollNodeId = 'oo-ui-frame-transplantStyles-loaded-' + nextIndex;
+                       nextIndex++;
+
+                       // Add #pollNodeId { font-family: ... } to the end of the stylesheet / after the @import
+                       // The font-family rule will only take effect once the @import finishes
+                       styleText += '\n' + '#' + pollNodeId + ' { font-family: ' + fontFamily + '; }';
+               }
+
+               // Create a node with id=pollNodeId
+               $pollNodes = $pollNodes.add( $( '<div>', frameDoc )
+                       .attr( 'id', pollNodeId )
+                       .appendTo( frameDoc.body )
+               );
+
+               // Add our modified CSS as a <style> tag
+               newNode = frameDoc.createElement( 'style' );
+               newNode.textContent = styleText;
+               newNode.oouiFrameTransplantStylesId = pollNodeId;
+               frameDoc.head.appendChild( newNode );
+       }
+       frameDoc.oouiFrameTransplantStylesNextIndex = nextIndex;
+
+       // Poll every 100ms until all external stylesheets have loaded
+       $pendingPollNodes = $pollNodes;
+       timeoutID = setTimeout( function pollExternalStylesheets() {
+               while (
+                       $pendingPollNodes.length > 0 &&
+                       $pendingPollNodes.eq( 0 ).css( 'font-family' ) === fontFamily
+               ) {
+                       $pendingPollNodes = $pendingPollNodes.slice( 1 );
+               }
+
+               if ( $pendingPollNodes.length === 0 ) {
+                       // We're done!
+                       if ( timeoutID !== null ) {
+                               timeoutID = null;
+                               $pollNodes.remove();
+                               deferred.resolve();
+                       }
+               } else {
+                       timeoutID = setTimeout( pollExternalStylesheets, 100 );
+               }
+       }, 100 );
+       // ...but give up after a while
+       if ( timeout !== 0 ) {
+               setTimeout( function () {
+                       if ( timeoutID ) {
+                               clearTimeout( timeoutID );
+                               timeoutID = null;
+                               $pollNodes.remove();
+                               deferred.reject();
+                       }
+               }, timeout || 5000 );
+       }
+
+       return deferred.promise();
+};
+
 /* Methods */
 
 /**
@@ -1635,6 +1473,24 @@ OO.ui.Window.prototype.isVisible = function () {
        return this.visible;
 };
 
+/**
+ * Check if window is loading.
+ *
+ * @return {boolean} Window is loading
+ */
+OO.ui.Window.prototype.isLoading = function () {
+       return this.loading && this.loading.state() === 'pending';
+};
+
+/**
+ * Check if window is loaded.
+ *
+ * @return {boolean} Window is loaded
+ */
+OO.ui.Window.prototype.isLoaded = function () {
+       return this.loading && this.loading.state() === 'resolved';
+};
+
 /**
  * Check if window is opening.
  *
@@ -1677,15 +1533,6 @@ OO.ui.Window.prototype.getManager = function () {
        return this.manager;
 };
 
-/**
- * Get the window frame.
- *
- * @return {OO.ui.Frame} Frame of window
- */
-OO.ui.Window.prototype.getFrame = function () {
-       return this.frame;
-};
-
 /**
  * Get the window size.
  *
@@ -1703,8 +1550,8 @@ OO.ui.Window.prototype.getSize = function () {
 OO.ui.Window.prototype.getContentHeight = function () {
        return Math.round(
                // Add buffer for border
-               ( ( this.$frame.outerHeight() - this.$frame.innerHeight() ) * 2 ) +
-               // Height of contents
+               ( this.$frame.outerHeight() - this.$frame.innerHeight() ) +
+               // Use combined heights of children
                ( this.$head.outerHeight( true ) + this.getBodyHeight() + this.$foot.outerHeight( true ) )
        );
 };
@@ -1718,6 +1565,15 @@ OO.ui.Window.prototype.getBodyHeight = function () {
        return this.$body[0].scrollHeight;
 };
 
+/**
+ * Get the directionality of the frame
+ *
+ * @return {string} Directionality, 'ltr' or 'rtl'
+ */
+OO.ui.Window.prototype.getDir = function () {
+       return this.dir;
+};
+
 /**
  * Get a process for setting up a window for use.
  *
@@ -1786,6 +1642,76 @@ OO.ui.Window.prototype.getTeardownProcess = function () {
        return new OO.ui.Process();
 };
 
+/**
+ * Toggle visibility of window.
+ *
+ * If the window is isolated and hasn't fully loaded yet, the visiblity property will be used
+ * instead of display.
+ *
+ * @param {boolean} [show] Make window visible, omit to toggle visibility
+ * @fires visible
+ * @chainable
+ */
+OO.ui.Window.prototype.toggle = function ( show ) {
+       show = show === undefined ? !this.visible : !!show;
+
+       if ( show !== this.isVisible() ) {
+               this.visible = show;
+
+               if ( this.isolated && !this.isLoaded() ) {
+                       // Hide the window using visibility instead of display until loading is complete
+                       // Can't use display: none; because that prevents the iframe from loading in Firefox
+                       this.$element.css( 'visibility', show ? 'visible' : 'hidden' );
+               } else {
+                       this.$element.toggle( show ).css( 'visibility', '' );
+               }
+               this.emit( 'toggle', show );
+       }
+
+       return this;
+};
+
+/**
+ * Set the window manager.
+ *
+ * This must be called before initialize. Calling it more than once will cause an error.
+ *
+ * @param {OO.ui.WindowManager} manager Manager for this window
+ * @throws {Error} If called more than once
+ * @chainable
+ */
+OO.ui.Window.prototype.setManager = function ( manager ) {
+       if ( this.manager ) {
+               throw new Error( 'Cannot set window manager, window already has a manager' );
+       }
+
+       // Properties
+       this.manager = manager;
+       this.isolated = manager.shouldIsolate();
+
+       // Initialization
+       if ( this.isolated ) {
+               this.$iframe = this.$( '<iframe>' );
+               this.$iframe.attr( { frameborder: 0, scrolling: 'no' } );
+               this.$frame.append( this.$iframe );
+               this.$ = function () {
+                       throw new Error( 'this.$() cannot be used until the frame has been initialized.' );
+               };
+               // WARNING: Do not use this.$ again until #initialize is called
+       } else {
+               this.$content = this.$( '<div>' );
+               this.$document = $( this.getElementDocument() );
+               this.$content.addClass( 'oo-ui-window-content' );
+               this.$frame.append( this.$content );
+       }
+       this.toggle( false );
+
+       // Figure out directionality:
+       this.dir = OO.ui.Element.getDir( this.$iframe || this.$content ) || 'ltr';
+
+       return this;
+};
+
 /**
  * Set the window size.
  *
@@ -1835,11 +1761,15 @@ OO.ui.Window.prototype.setDimensions = function ( dim ) {
  *
  * Once this method is called, this.$ can be used to create elements within the frame.
  *
+ * @throws {Error} If not attached to a manager
  * @chainable
  */
 OO.ui.Window.prototype.initialize = function () {
+       if ( !this.manager ) {
+               throw new Error( 'Cannot initialize window, must be attached to a manager' );
+       }
+
        // Properties
-       this.$ = this.frame.$;
        this.$head = this.$( '<div>' );
        this.$body = this.$( '<div>' );
        this.$foot = this.$( '<div>' );
@@ -1850,9 +1780,7 @@ OO.ui.Window.prototype.initialize = function () {
        this.$body.addClass( 'oo-ui-window-body' );
        this.$foot.addClass( 'oo-ui-window-foot' );
        this.$overlay.addClass( 'oo-ui-window-overlay' );
-       this.frame.$content
-               .addClass( 'oo-ui-window-content' )
-               .append( this.$head, this.$body, this.$foot, this.$overlay );
+       this.$content.append( this.$head, this.$body, this.$foot, this.$overlay );
 
        return this;
 };
@@ -1884,18 +1812,6 @@ OO.ui.Window.prototype.close = function ( data ) {
        return this.manager.closeWindow( this, data );
 };
 
-/**
- * Load window.
- *
- * This is called by OO.ui.WindowManager durring window adding, and should not be called directly
- * by other systems.
- *
- * @return {jQuery.Promise} Promise resolved when window is loaded
- */
-OO.ui.Window.prototype.load = function () {
-       return this.frame.load();
-};
-
 /**
  * Setup window.
  *
@@ -1912,10 +1828,9 @@ OO.ui.Window.prototype.setup = function ( data ) {
        this.$element.show();
        this.visible = true;
        this.getSetupProcess( data ).execute().done( function () {
-               win.manager.updateWindowSize( win );
                // Force redraw by asking the browser to measure the elements' widths
                win.$element.addClass( 'oo-ui-window-setup' ).width();
-               win.frame.$content.addClass( 'oo-ui-window-content-setup' ).width();
+               win.$content.addClass( 'oo-ui-window-content-setup' ).width();
                deferred.resolve();
        } );
 
@@ -1935,11 +1850,11 @@ OO.ui.Window.prototype.ready = function ( data ) {
        var win = this,
                deferred = $.Deferred();
 
-       this.frame.$content[0].focus();
+       this.$content.focus();
        this.getReadyProcess( data ).execute().done( function () {
                // Force redraw by asking the browser to measure the elements' widths
                win.$element.addClass( 'oo-ui-window-ready' ).width();
-               win.frame.$content.addClass( 'oo-ui-window-content-ready' ).width();
+               win.$content.addClass( 'oo-ui-window-content-ready' ).width();
                deferred.resolve();
        } );
 
@@ -1960,13 +1875,17 @@ OO.ui.Window.prototype.hold = function ( data ) {
                deferred = $.Deferred();
 
        this.getHoldProcess( data ).execute().done( function () {
-               var $focused = win.frame.$content.find( ':focus' );
-               if ( $focused.length ) {
-                       $focused[0].blur();
+               // Get the focused element within the window's content
+               var $focus = win.$content.find( OO.ui.Element.getDocument( win.$content ).activeElement );
+
+               // Blur the focused element
+               if ( $focus.length ) {
+                       $focus[0].blur();
                }
+
                // Force redraw by asking the browser to measure the elements' widths
                win.$element.removeClass( 'oo-ui-window-ready' ).width();
-               win.frame.$content.removeClass( 'oo-ui-window-content-ready' ).width();
+               win.$content.removeClass( 'oo-ui-window-content-ready' ).width();
                deferred.resolve();
        } );
 
@@ -1989,7 +1908,7 @@ OO.ui.Window.prototype.teardown = function ( data ) {
        this.getTeardownProcess( data ).execute().done( function () {
                // Force redraw by asking the browser to measure the elements' widths
                win.$element.removeClass( 'oo-ui-window-setup' ).width();
-               win.frame.$content.removeClass( 'oo-ui-window-content-setup' ).width();
+               win.$content.removeClass( 'oo-ui-window-content-setup' ).width();
                win.$element.hide();
                win.visible = false;
                deferred.resolve();
@@ -1998,6 +1917,103 @@ OO.ui.Window.prototype.teardown = function ( data ) {
        return deferred.promise();
 };
 
+/**
+ * Load the frame contents.
+ *
+ * Once the iframe's stylesheets are loaded, the `load` event will be emitted and the returned
+ * promise will be resolved. Calling while loading will return a promise but not trigger a new
+ * loading cycle. Calling after loading is complete will return a promise that's already been
+ * resolved.
+ *
+ * Sounds simple right? Read on...
+ *
+ * When you create a dynamic iframe using open/write/close, the window.load event for the
+ * iframe is triggered when you call close, and there's no further load event to indicate that
+ * everything is actually loaded.
+ *
+ * In Chrome, stylesheets don't show up in document.styleSheets until they have loaded, so we could
+ * just poll that array and wait for it to have the right length. However, in Firefox, stylesheets
+ * are added to document.styleSheets immediately, and the only way you can determine whether they've
+ * loaded is to attempt to access .cssRules and wait for that to stop throwing an exception. But
+ * cross-domain stylesheets never allow .cssRules to be accessed even after they have loaded.
+ *
+ * The workaround is to change all `<link href="...">` tags to `<style>@import url(...)</style>`
+ * tags. Because `@import` is blocking, Chrome won't add the stylesheet to document.styleSheets
+ * until the `@import` has finished, and Firefox won't allow .cssRules to be accessed until the
+ * `@import` has finished. And because the contents of the `<style>` tag are from the same origin,
+ * accessing .cssRules is allowed.
+ *
+ * However, now that we control the styles we're injecting, we might as well do away with
+ * browser-specific polling hacks like document.styleSheets and .cssRules, and instead inject
+ * `<style>@import url(...); #foo { font-family: someValue; }</style>`, then create `<div id="foo">`
+ * and wait for its font-family to change to someValue. Because `@import` is blocking, the
+ * font-family rule is not applied until after the `@import` finishes.
+ *
+ * All this stylesheet injection and polling magic is in #transplantStyles.
+ *
+ * @return {jQuery.Promise} Promise resolved when loading is complete
+ * @fires load
+ */
+OO.ui.Window.prototype.load = function () {
+       var sub, doc, loading,
+               win = this;
+
+       // Non-isolated windows are already "loaded"
+       if ( !this.loading && !this.isolated ) {
+               this.loading = $.Deferred().resolve();
+               this.initialize();
+               // Set initialized state after so sub-classes aren't confused by it being set by calling
+               // their parent initialize method
+               this.initialized = true;
+       }
+
+       // Return existing promise if already loading or loaded
+       if ( this.loading ) {
+               return this.loading.promise();
+       }
+
+       // Load the frame
+       loading = this.loading = $.Deferred();
+       sub = this.$iframe.prop( 'contentWindow' );
+       doc = sub.document;
+
+       // Initialize contents
+       doc.open();
+       doc.write(
+               '<!doctype html>' +
+               '<html>' +
+                       '<body class="oo-ui-window-isolated oo-ui-window-content oo-ui-' + this.dir + '"' +
+                               ' style="direction:' + this.dir + ';" dir="' + this.dir + '">' +
+                       '</body>' +
+               '</html>'
+       );
+       doc.close();
+
+       // Properties
+       this.$ = OO.ui.Element.getJQuery( doc, this.$element );
+       this.$content = this.$( '.oo-ui-window-content' ).attr( 'tabIndex', 0 );
+       this.$document = this.$( doc );
+
+       // Initialization
+       this.constructor.static.transplantStyles( this.getElementDocument(), this.$document[0] )
+               .always( function () {
+                       // Initialize isolated windows
+                       win.initialize();
+                       // Set initialized state after so sub-classes aren't confused by it being set by calling
+                       // their parent initialize method
+                       win.initialized = true;
+                       // Undo the visibility: hidden; hack and apply display: none;
+                       // We can do this safely now that the iframe has initialized
+                       // (don't do this from within #initialize because it has to happen
+                       // after the all subclasses have been handled as well).
+                       win.toggle( win.isVisible() );
+
+                       loading.resolve();
+               } );
+
+       return loading.promise();
+};
+
 /**
  * Base class for all dialogs.
  *
@@ -2027,9 +2043,9 @@ OO.ui.Window.prototype.teardown = function ( data ) {
  * @constructor
  * @param {Object} [config] Configuration options
  */
-OO.ui.Dialog = function OoUiDialog( manager, config ) {
+OO.ui.Dialog = function OoUiDialog( config ) {
        // Parent constructor
-       OO.ui.Dialog.super.call( this, manager, config );
+       OO.ui.Dialog.super.call( this, config );
 
        // Properties
        this.actions = new OO.ui.ActionSet();
@@ -2102,7 +2118,7 @@ OO.ui.Dialog.static.escapable = true;
  *
  * @param {jQuery.Event} e Key down event
  */
-OO.ui.Dialog.prototype.onFrameDocumentKeyDown = function ( e ) {
+OO.ui.Dialog.prototype.onDocumentKeyDown = function ( e ) {
        if ( e.which === OO.ui.Keys.ESCAPE ) {
                this.close();
                return false;
@@ -2234,11 +2250,11 @@ OO.ui.Dialog.prototype.initialize = function () {
 
        // Events
        if ( this.constructor.static.escapable ) {
-               this.frame.$document.on( 'keydown', OO.ui.bind( this.onFrameDocumentKeyDown, this ) );
+               this.$document.on( 'keydown', OO.ui.bind( this.onDocumentKeyDown, this ) );
        }
 
        // Initialization
-       this.frame.$content.addClass( 'oo-ui-dialog-content' );
+       this.$content.addClass( 'oo-ui-dialog-content' );
 };
 
 /**
@@ -2283,7 +2299,7 @@ OO.ui.Dialog.prototype.executeAction = function ( action ) {
  */
 OO.ui.Dialog.prototype.pushPending = function () {
        if ( this.pending === 0 ) {
-               this.frame.$content.addClass( 'oo-ui-actionDialog-content-pending' );
+               this.$content.addClass( 'oo-ui-actionDialog-content-pending' );
                this.$head.addClass( 'oo-ui-texture-pending' );
        }
        this.pending++;
@@ -2300,7 +2316,7 @@ OO.ui.Dialog.prototype.pushPending = function () {
  */
 OO.ui.Dialog.prototype.popPending = function () {
        if ( this.pending === 1 ) {
-               this.frame.$content.removeClass( 'oo-ui-actionDialog-content-pending' );
+               this.$content.removeClass( 'oo-ui-actionDialog-content-pending' );
                this.$head.removeClass( 'oo-ui-texture-pending' );
        }
        this.pending = Math.max( 0, this.pending - 1 );
@@ -2348,6 +2364,7 @@ OO.ui.Dialog.prototype.popPending = function () {
  *
  * @constructor
  * @param {Object} [config] Configuration options
+ * @cfg {boolean} [isolate] Configure managed windows to isolate their content using inline frames
  * @cfg {OO.Factory} [factory] Window factory to use for automatic instantiation
  * @cfg {boolean} [modal=true] Prevent interaction outside the dialog
  */
@@ -2364,10 +2381,13 @@ OO.ui.WindowManager = function OoUiWindowManager( config ) {
        // Properties
        this.factory = config.factory;
        this.modal = config.modal === undefined || !!config.modal;
+       this.isolate = !!config.isolate;
        this.windows = {};
        this.opening = null;
        this.opened = null;
        this.closing = null;
+       this.preparingToOpen = null;
+       this.preparingToClose = null;
        this.size = null;
        this.currentWindow = null;
        this.$ariaHidden = null;
@@ -2537,6 +2557,17 @@ OO.ui.WindowManager.prototype.isOpened = function ( win ) {
        return win === this.currentWindow && !!this.opened && this.opened.state() === 'pending';
 };
 
+/**
+ * Check if window contents should be isolated.
+ *
+ * Window content isolation is done using inline frames.
+ *
+ * @return {boolean} Window contents should be isolated
+ */
+OO.ui.WindowManager.prototype.shouldIsolate = function () {
+       return this.isolate;
+};
+
 /**
  * Check if a window is being managed.
  *
@@ -2605,8 +2636,7 @@ OO.ui.WindowManager.prototype.getTeardownDelay = function () {
  * If window is not yet instantiated, it will be instantiated and added automatically.
  *
  * @param {string} name Symbolic window name
- * @return {jQuery.Promise} Promise resolved when window is ready to be accessed; when resolved the
- *   first argument is an OO.ui.Window; when rejected the first argument is an OO.ui.Error
+ * @return {jQuery.Promise} Promise resolved with matching window, or rejected with an OO.ui.Error
  * @throws {Error} If the symbolic name is unrecognized by the factory
  * @throws {Error} If the symbolic name unrecognized as a managed window
  */
@@ -2622,10 +2652,8 @@ OO.ui.WindowManager.prototype.getWindow = function ( name ) {
                                ) );
                        } else {
                                win = this.factory.create( name, this, { $: this.$ } );
-                               this.addWindows( [ win ] ).then(
-                                       OO.ui.bind( deferred.resolve, deferred, win ),
-                                       deferred.reject
-                               );
+                               this.addWindows( [ win ] );
+                               deferred.resolve( win );
                        }
                } else {
                        deferred.reject( new OO.ui.Error(
@@ -2674,49 +2702,45 @@ OO.ui.WindowManager.prototype.openWindow = function ( win, data ) {
                opening.reject( new OO.ui.Error(
                        'Cannot open window: window is not attached to manager'
                ) );
+       } else if ( this.preparingToOpen || this.opening || this.opened ) {
+               opening.reject( new OO.ui.Error(
+                       'Cannot open window: another window is opening or open'
+               ) );
        }
 
        // Window opening
        if ( opening.state() !== 'rejected' ) {
-               // Begin loading the window if it's not loaded already - may take noticable time and we want
-               // too do this in paralell with any preparatory actions
-               preparing.push( win.load() );
-
-               if ( this.opening || this.opened ) {
-                       // If a window is currently opening or opened, close it first
-                       preparing.push( this.closeWindow( this.currentWindow ) );
-               } else if ( this.closing ) {
+               // Begin loading the window if it's not loading or loaded already - may take noticable time
+               // and we want to do this in paralell with any other preparatory actions
+               if ( !win.isLoading() && !win.isLoaded() ) {
+                       // Finish initializing the window (must be done after manager is attached to DOM)
+                       win.setManager( this );
+                       preparing.push( win.load() );
+               }
+
+               if ( this.closing ) {
                        // If a window is currently closing, wait for it to complete
                        preparing.push( this.closing );
                }
 
-               $.when.apply( $, preparing ).done( function () {
+               this.preparingToOpen = $.when.apply( $, preparing );
+               // Ensure handlers get called after preparingToOpen is set
+               this.preparingToOpen.done( function () {
                        if ( manager.modal ) {
-                               manager.$( manager.getElementDocument() ).on( {
-                                       // Prevent scrolling by keys in top-level window
-                                       keydown: manager.onDocumentKeyDownHandler
-                               } );
-                               manager.$( manager.getElementWindow() ).on( {
-                                       // Prevent scrolling by wheel in top-level window
-                                       mousewheel: manager.onWindowMouseWheelHandler,
-                                       // Start listening for top-level window dimension changes
-                                       'orientationchange resize': manager.onWindowResizeHandler
-                               } );
-                               // Hide other content from screen readers
-                               manager.$ariaHidden = $( 'body' )
-                                       .children()
-                                       .not( manager.$element.parentsUntil( 'body' ).last() )
-                                       .attr( 'aria-hidden', '' );
+                               manager.toggleGlobalEvents( true );
+                               manager.toggleAriaIsolation( true );
                        }
                        manager.currentWindow = win;
                        manager.opening = opening;
+                       manager.preparingToOpen = null;
                        manager.emit( 'opening', win, opening, data );
-                       manager.updateWindowSize( win );
                        setTimeout( function () {
                                win.setup( data ).then( function () {
+                                       manager.updateWindowSize( win );
                                        manager.opening.notify( { state: 'setup' } );
                                        setTimeout( function () {
                                                win.ready( data ).then( function () {
+                                                       manager.updateWindowSize( win );
                                                        manager.opening.notify( { state: 'ready' } );
                                                        manager.opening = null;
                                                        manager.opened = $.Deferred();
@@ -2728,7 +2752,7 @@ OO.ui.WindowManager.prototype.openWindow = function ( win, data ) {
                } );
        }
 
-       return opening;
+       return opening.promise();
 };
 
 /**
@@ -2763,7 +2787,7 @@ OO.ui.WindowManager.prototype.closeWindow = function ( win, data ) {
                closing.reject( new OO.ui.Error(
                        'Cannot close window: window already closed with different data'
                ) );
-       } else if ( this.closing ) {
+       } else if ( this.preparingToClose || this.closing ) {
                closing.reject( new OO.ui.Error(
                        'Cannot close window: window already closing with different data'
                ) );
@@ -2776,9 +2800,11 @@ OO.ui.WindowManager.prototype.closeWindow = function ( win, data ) {
                        preparing.push( this.opening );
                }
 
-               // Close the window
-               $.when.apply( $, preparing ).done( function () {
+               this.preparingToClose = $.when.apply( $, preparing );
+               // Ensure handlers get called after preparingToClose is set
+               this.preparingToClose.done( function () {
                        manager.closing = closing;
+                       manager.preparingToClose = null;
                        manager.emit( 'closing', win, closing, data );
                        manager.opened = null;
                        opened.resolve( closing.promise(), data );
@@ -2789,21 +2815,8 @@ OO.ui.WindowManager.prototype.closeWindow = function ( win, data ) {
                                                win.teardown( data ).then( function () {
                                                        closing.notify( { state: 'teardown' } );
                                                        if ( manager.modal ) {
-                                                               manager.$( manager.getElementDocument() ).off( {
-                                                                       // Allow scrolling by keys in top-level window
-                                                                       keydown: manager.onDocumentKeyDownHandler
-                                                               } );
-                                                               manager.$( manager.getElementWindow() ).off( {
-                                                                       // Allow scrolling by wheel in top-level window
-                                                                       mousewheel: manager.onWindowMouseWheelHandler,
-                                                                       // Stop listening for top-level window dimension changes
-                                                                       'orientationchange resize': manager.onWindowResizeHandler
-                                                               } );
-                                                       }
-                                                       // Restore screen reader visiblity
-                                                       if ( manager.$ariaHidden ) {
-                                                               manager.$ariaHidden.removeAttr( 'aria-hidden' );
-                                                               manager.$ariaHidden = null;
+                                                               manager.toggleGlobalEvents( false );
+                                                               manager.toggleAriaIsolation( false );
                                                        }
                                                        manager.closing = null;
                                                        manager.currentWindow = null;
@@ -2815,23 +2828,18 @@ OO.ui.WindowManager.prototype.closeWindow = function ( win, data ) {
                } );
        }
 
-       return closing;
+       return closing.promise();
 };
 
 /**
  * Add windows.
  *
- * If the window manager is attached to the DOM then windows will be automatically loaded as they
- * are added.
- *
  * @param {Object.<string,OO.ui.Window>|OO.ui.Window[]} windows Windows to add
- * @return {jQuery.Promise} Promise resolved when all windows are added
  * @throws {Error} If one of the windows being added without an explicit symbolic name does not have
  *   a statically configured symbolic name
  */
 OO.ui.WindowManager.prototype.addWindows = function ( windows ) {
-       var i, len, win, name, list,
-               promises = [];
+       var i, len, win, name, list;
 
        if ( $.isArray( windows ) ) {
                // Convert to map of windows by looking up symbolic names from static configuration
@@ -2852,13 +2860,7 @@ OO.ui.WindowManager.prototype.addWindows = function ( windows ) {
                win = list[name];
                this.windows[name] = win;
                this.$element.append( win.$element );
-
-               if ( this.isElementAttached() ) {
-                       promises.push( win.load() );
-               }
        }
-
-       return $.when.apply( $, promises );
 };
 
 /**
@@ -2933,6 +2935,84 @@ OO.ui.WindowManager.prototype.updateWindowSize = function ( win ) {
        return this;
 };
 
+/**
+ * Bind or unbind global events for scrolling.
+ *
+ * @param {boolean} [on] Bind global events
+ * @chainable
+ */
+OO.ui.WindowManager.prototype.toggleGlobalEvents = function ( on ) {
+       on = on === undefined ? !!this.globalEvents : !!on;
+
+       if ( on ) {
+               if ( !this.globalEvents ) {
+                       this.$( this.getElementDocument() ).on( {
+                               // Prevent scrolling by keys in top-level window
+                               keydown: this.onDocumentKeyDownHandler
+                       } );
+                       this.$( this.getElementWindow() ).on( {
+                               // Prevent scrolling by wheel in top-level window
+                               mousewheel: this.onWindowMouseWheelHandler,
+                               // Start listening for top-level window dimension changes
+                               'orientationchange resize': this.onWindowResizeHandler
+                       } );
+                       this.globalEvents = true;
+               }
+       } else if ( this.globalEvents ) {
+               // Unbind global events
+               this.$( this.getElementDocument() ).off( {
+                       // Allow scrolling by keys in top-level window
+                       keydown: this.onDocumentKeyDownHandler
+               } );
+               this.$( this.getElementWindow() ).off( {
+                       // Allow scrolling by wheel in top-level window
+                       mousewheel: this.onWindowMouseWheelHandler,
+                       // Stop listening for top-level window dimension changes
+                       'orientationchange resize': this.onWindowResizeHandler
+               } );
+               this.globalEvents = false;
+       }
+
+       return this;
+};
+
+/**
+ * Toggle screen reader visibility of content other than the window manager.
+ *
+ * @param {boolean} [isolate] Make only the window manager visible to screen readers
+ * @chainable
+ */
+OO.ui.WindowManager.prototype.toggleAriaIsolation = function ( isolate ) {
+       isolate = isolate === undefined ? !this.$ariaHidden : !!isolate;
+
+       if ( isolate ) {
+               if ( !this.$ariaHidden ) {
+                       // Hide everything other than the window manager from screen readers
+                       this.$ariaHidden = $( 'body' )
+                               .children()
+                               .not( this.$element.parentsUntil( 'body' ).last() )
+                               .attr( 'aria-hidden', '' );
+               }
+       } else if ( this.$ariaHidden ) {
+               // Restore screen reader visiblity
+               this.$ariaHidden.removeAttr( 'aria-hidden' );
+               this.$ariaHidden = null;
+       }
+
+       return this;
+};
+
+/**
+ * Destroy window manager.
+ *
+ * Windows will not be closed, only removed from the DOM.
+ */
+OO.ui.WindowManager.prototype.destroy = function () {
+       this.toggleGlobalEvents( false );
+       this.toggleAriaIsolation( false );
+       this.$element.remove();
+};
+
 /**
  * @abstract
  * @class
@@ -3366,10 +3446,9 @@ OO.ui.ButtonedElement.prototype.onMouseDown = function ( e ) {
        // tabIndex should generally be interacted with via the property, but it's not possible to
        // reliably unset a tabIndex via a property so we use the (lowercase) "tabindex" attribute
        this.tabIndex = this.$button.attr( 'tabindex' );
-       this.$button
-               // Remove the tab-index while the button is down to prevent the button from stealing focus
-               .removeAttr( 'tabindex' )
-               .addClass( 'oo-ui-buttonedElement-pressed' );
+       // Remove the tab-index while the button is down to prevent the button from stealing focus
+       this.$button.removeAttr( 'tabindex' );
+       this.$element.addClass( 'oo-ui-buttonedElement-pressed' );
        // Run the mouseup handler no matter where the mouse is when the button is let go, so we can
        // reliably reapply the tabindex and remove the pressed class
        this.getElementDocument().addEventListener( 'mouseup', this.onMouseUpHandler, true );
@@ -3388,10 +3467,9 @@ OO.ui.ButtonedElement.prototype.onMouseUp = function ( e ) {
        if ( this.isDisabled() || e.which !== 1 ) {
                return false;
        }
-       this.$button
-               // Restore the tab-index after the button is up to restore the button's accesssibility
-               .attr( 'tabindex', this.tabIndex )
-               .removeClass( 'oo-ui-buttonedElement-pressed' );
+       // Restore the tab-index after the button is up to restore the button's accesssibility
+       this.$button.attr( 'tabindex', this.tabIndex );
+       this.$element.removeClass( 'oo-ui-buttonedElement-pressed' );
        // Stop listening for mouseup, since we only needed this once
        this.getElementDocument().removeEventListener( 'mouseup', this.onMouseUpHandler, true );
 };
@@ -3451,7 +3529,7 @@ OO.ui.ButtonedElement.prototype.setAccessKey = function ( accessKey ) {
  * @chainable
  */
 OO.ui.ButtonedElement.prototype.setActive = function ( value ) {
-       this.$button.toggleClass( 'oo-ui-buttonedElement-active', !!value );
+       this.$element.toggleClass( 'oo-ui-buttonedElement-active', !!value );
        return this;
 };
 
@@ -3743,6 +3821,15 @@ OO.ui.GroupElement = function OoUiGroupElement( $group, config ) {
 
 /* Methods */
 
+/**
+ * Check if there are no items.
+ *
+ * @return {boolean} Group is empty
+ */
+OO.ui.GroupElement.prototype.isEmpty = function () {
+       return !this.items.length;
+};
+
 /**
  * Get items.
  *
@@ -5132,9 +5219,9 @@ OO.ui.ToolGroup.prototype.destroy = function () {
  * @constructor
  * @param {Object} [config] Configuration options
  */
-OO.ui.MessageDialog = function OoUiMessageDialog( manager, config ) {
+OO.ui.MessageDialog = function OoUiMessageDialog( config ) {
        // Parent constructor
-       OO.ui.MessageDialog.super.call( this, manager, config );
+       OO.ui.MessageDialog.super.call( this, config );
 
        // Properties
        this.verticalActionLayout = null;
@@ -5280,7 +5367,7 @@ OO.ui.MessageDialog.prototype.initialize = function () {
 
        // Initialization
        this.title.$element.addClass( 'oo-ui-messageDialog-title' );
-       this.frame.$content.addClass( 'oo-ui-messageDialog-content' );
+       this.$content.addClass( 'oo-ui-messageDialog-content' );
        this.container.$element.append( this.text.$element );
        this.text.$element.append( this.title.$element, this.message.$element );
        this.$body.append( this.container.$element );
@@ -5368,9 +5455,9 @@ OO.ui.MessageDialog.prototype.fitActions = function () {
  * @constructor
  * @param {Object} [config] Configuration options
  */
-OO.ui.ProcessDialog = function OoUiProcessDialog( manager, config ) {
+OO.ui.ProcessDialog = function OoUiProcessDialog( config ) {
        // Parent constructor
-       OO.ui.ProcessDialog.super.call( this, manager, config );
+       OO.ui.ProcessDialog.super.call( this, config );
 
        // Initialization
        this.$element.addClass( 'oo-ui-processDialog' );
@@ -5453,7 +5540,7 @@ OO.ui.ProcessDialog.prototype.initialize = function () {
        this.$errors
                .addClass( 'oo-ui-processDialog-errors' )
                .append( this.$errorsTitle, this.dismissButton.$element, this.retryButton.$element );
-       this.frame.$content
+       this.$content
                .addClass( 'oo-ui-processDialog-content' )
                .append( this.$errors );
        this.$navigation
@@ -8450,45 +8537,43 @@ OO.ui.CheckboxInputWidget.prototype.onEdit = function () {
  *
  * @class
  * @extends OO.ui.InputWidget
+ * @mixins OO.ui.IconedElement
+ * @mixins OO.ui.IndicatedElement
  *
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {string} [placeholder] Placeholder text
- * @cfg {string} [icon] Symbolic name of icon
  * @cfg {boolean} [multiline=false] Allow multiple lines of text
  * @cfg {boolean} [autosize=false] Automatically resize to fit content
  * @cfg {boolean} [maxRows=10] Maximum number of rows to make visible when autosizing
  */
 OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
-       var widget = this;
-       config = $.extend( { maxRows: 10 }, config );
+       // Configuration initialization
+       config = config || {};
 
        // Parent constructor
        OO.ui.TextInputWidget.super.call( this, config );
 
+       // Mixin constructors
+       OO.ui.IconedElement.call( this, this.$( '<span>' ), config );
+       OO.ui.IndicatedElement.call( this, this.$( '<span>' ), config );
+
        // Properties
        this.pending = 0;
        this.multiline = !!config.multiline;
        this.autosize = !!config.autosize;
-       this.maxRows = config.maxRows;
+       this.maxRows = config.maxRows !== undefined ? config.maxRows : 10;
 
        // Events
        this.$input.on( 'keypress', OO.ui.bind( this.onKeyPress, this ) );
        this.$element.on( 'DOMNodeInsertedIntoDocument', OO.ui.bind( this.onElementAttach, this ) );
+       this.$icon.on( 'mousedown', OO.ui.bind( this.onIconMouseDown, this ) );
+       this.$indicator.on( 'mousedown', OO.ui.bind( this.onIndicatorMouseDown, this ) );
 
        // Initialization
-       this.$element.addClass( 'oo-ui-textInputWidget' );
-       if ( config.icon ) {
-               this.$element.addClass( 'oo-ui-textInputWidget-decorated' );
-               this.$element.append(
-                       this.$( '<span>' )
-                               .addClass( 'oo-ui-textInputWidget-icon oo-ui-icon-' + config.icon )
-                               .mousedown( function () {
-                                       widget.$input[0].focus();
-                                       return false;
-                               } )
-               );
-       }
+       this.$element
+               .addClass( 'oo-ui-textInputWidget' )
+               .append( this.$icon, this.$indicator );
        if ( config.placeholder ) {
                this.$input.attr( 'placeholder', config.placeholder );
        }
@@ -8498,6 +8583,8 @@ OO.ui.TextInputWidget = function OoUiTextInputWidget( config ) {
 /* Setup */
 
 OO.inheritClass( OO.ui.TextInputWidget, OO.ui.InputWidget );
+OO.mixinClass( OO.ui.TextInputWidget, OO.ui.IconedElement );
+OO.mixinClass( OO.ui.TextInputWidget, OO.ui.IndicatedElement );
 
 /* Events */
 
@@ -8509,8 +8596,48 @@ OO.inheritClass( OO.ui.TextInputWidget, OO.ui.InputWidget );
  * @event enter
  */
 
+/**
+ * User clicks the icon.
+ *
+ * @event icon
+ */
+
+/**
+ * User clicks the indicator.
+ *
+ * @event indicator
+ */
+
 /* Methods */
 
+/**
+ * Handle icon mouse down events.
+ *
+ * @param {jQuery.Event} e Mouse down event
+ * @fires icon
+ */
+OO.ui.TextInputWidget.prototype.onIconMouseDown = function ( e ) {
+       if ( e.which === 1 ) {
+               this.$input[0].focus();
+               this.emit( 'icon' );
+               return false;
+       }
+};
+
+/**
+ * Handle indicator mouse down events.
+ *
+ * @param {jQuery.Event} e Mouse down event
+ * @fires indicator
+ */
+OO.ui.TextInputWidget.prototype.onIndicatorMouseDown = function ( e ) {
+       if ( e.which === 1 ) {
+               this.$input[0].focus();
+               this.emit( 'indicator' );
+               return false;
+       }
+};
+
 /**
  * Handle key press events.
  *
@@ -8671,6 +8798,128 @@ OO.ui.TextInputWidget.prototype.select = function () {
        return this;
 };
 
+/**
+ * Text input with a menu of optional values.
+ *
+ * @class
+ * @extends OO.ui.Widget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration options
+ * @cfg {Object} [menu] Configuration options to pass to menu widget
+ * @cfg {Object} [input] Configuration options to pass to input widget
+ */
+OO.ui.ComboBoxWidget = function OoUiComboBoxWidget( config ) {
+       // Configuration initialization
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.ComboBoxWidget.super.call( this, config );
+
+       // Properties
+       this.input = new OO.ui.TextInputWidget( $.extend(
+               { $: this.$, indicator: 'down', disabled: this.isDisabled() },
+               config.input
+       ) );
+       this.menu = new OO.ui.MenuWidget( $.extend(
+               { $: this.$, widget: this, input: this.input, disabled: this.isDisabled() },
+               config.menu
+       ) );
+
+       // Events
+       this.input.connect( this, {
+               change: 'onInputChange',
+               indicator: 'onInputIndicator',
+               enter: 'onInputEnter'
+       } );
+       this.menu.connect( this, {
+               choose: 'onMenuChoose',
+               add: 'onMenuItemsChange',
+               remove: 'onMenuItemsChange'
+       } );
+
+       // Initialization
+       this.$element.addClass( 'oo-ui-comboBoxWidget' ).append(
+               this.input.$element,
+               this.menu.$element
+       );
+       this.onMenuItemsChange();
+};
+
+/* Setup */
+
+OO.inheritClass( OO.ui.ComboBoxWidget, OO.ui.Widget );
+
+/* Methods */
+
+/**
+ * Handle input change events.
+ *
+ * @param {string} value New value
+ */
+OO.ui.ComboBoxWidget.prototype.onInputChange = function ( value ) {
+       var match = this.menu.getItemFromData( value );
+
+       this.menu.selectItem( match );
+
+       if ( !this.isDisabled() ) {
+               this.menu.toggle( true );
+       }
+};
+
+/**
+ * Handle input indicator events.
+ */
+OO.ui.ComboBoxWidget.prototype.onInputIndicator = function () {
+       if ( !this.isDisabled() ) {
+               this.menu.toggle();
+       }
+};
+
+/**
+ * Handle input enter events.
+ */
+OO.ui.ComboBoxWidget.prototype.onInputEnter = function () {
+       if ( !this.isDisabled() ) {
+               this.menu.toggle( false );
+       }
+};
+
+/**
+ * Handle menu choose events.
+ *
+ * @param {OO.ui.OptionWidget} item Chosen item
+ */
+OO.ui.ComboBoxWidget.prototype.onMenuChoose = function ( item ) {
+       if ( item ) {
+               this.input.setValue( item.getData() );
+       }
+};
+
+/**
+ * Handle menu item change events.
+ */
+OO.ui.ComboBoxWidget.prototype.onMenuItemsChange = function () {
+       this.$element.toggleClass( 'oo-ui-comboBoxWidget-empty', this.menu.isEmpty() );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.ComboBoxWidget.prototype.setDisabled = function ( disabled ) {
+       // Parent method
+       OO.ui.ComboBoxWidget.super.prototype.setDisabled.call( this, disabled );
+
+       if ( this.input ) {
+               this.input.setDisabled( this.isDisabled() );
+       }
+       if ( this.menu ) {
+               this.menu.setDisabled( this.isDisabled() );
+       }
+
+       return this;
+};
+
 /**
  * Label widget.
  *
@@ -10366,7 +10615,7 @@ OO.ui.MenuWidget.prototype.addItems = function ( items, index ) {
  * @inheritdoc
  */
 OO.ui.MenuWidget.prototype.toggle = function ( visible ) {
-       visible = !!visible && !!this.items.length;
+       visible = ( visible === undefined ? !this.visible : !!visible ) && !!this.items.length;
 
        var i, len,
                change = visible !== this.isVisible();
@@ -10492,9 +10741,9 @@ OO.ui.TextInputMenuWidget.prototype.position = function () {
        dimensions.top += $container.height();
 
        // Compensate for frame position if in a differnt frame
-       if ( this.input.$.frame && this.input.$.context !== this.$element[0].ownerDocument ) {
+       if ( this.input.$.$iframe && this.input.$.context !== this.$element[0].ownerDocument ) {
                frameOffset = OO.ui.Element.getRelativePosition(
-                       this.input.$.frame.$element, this.$element.offsetParent()
+                       this.input.$.$iframe, this.$element.offsetParent()
                );
                dimensions.left += frameOffset.left;
                dimensions.top += frameOffset.top;
index 3db4d99..17432f8 100644 (file)
@@ -1,91 +1,64 @@
 /*!
- * OOjs UI v0.1.0-pre (51f513f9d3)
+ * OOjs UI v0.1.0-pre (d6008381aa)
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-08-20T00:59:55Z
+ * Date: 2014-08-21T23:45:56Z
  */
 /* Textures */
-
 .oo-ui-texture-pending {
   background-image: /* @embed */ url(images/textures/pending.gif);
 }
-
 .oo-ui-texture-transparency {
   background-image: /* @embed */ url(images/textures/transparency.png);
 }
-
 /* RTL Definitions */
-
 /* @noflip */
-
 .oo-ui-rtl {
   direction: rtl;
 }
-
 /* @noflip */
-
 .oo-ui-ltr {
   direction: ltr;
 }
 
-.oo-ui-frame {
-  padding: 0;
-  margin: 0;
-}
-
-.oo-ui-frame-content {
-  padding: 0;
-  margin: 0;
-}
-
-.oo-ui-frame-content:focus {
-  outline: none;
-}
-
 .oo-ui-toolbar {
   clear: both;
 }
-
 .oo-ui-toolbar-bar {
   line-height: 1em;
 }
-
 .oo-ui-toolbar-actions {
   float: right;
 }
-
 .oo-ui-toolbar-tools {
   float: left;
 }
-
 .oo-ui-toolbar-tools,
 .oo-ui-toolbar-actions,
 .oo-ui-toolbar-shadow {
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
   -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
-
 .oo-ui-toolbar-actions .oo-ui-popupWidget {
-  -webkit-user-select: all;
-     -moz-user-select: all;
-      -ms-user-select: all;
-          user-select: all;
   -webkit-touch-callout: default;
+  -webkit-user-select: all;
+  -moz-user-select: all;
+  -ms-user-select: all;
+  user-select: all;
 }
-
 .oo-ui-toolbar-shadow {
+  background-position: left top;
+  background-repeat: repeat-x;
   position: absolute;
   width: 100%;
   pointer-events: none;
-  background-position: left top;
-  background-repeat: repeat-x;
 }
 
 .oo-ui-toolGroup {
   margin: 0.3em;
   vertical-align: middle;
 }
-
 .oo-ui-toolGroup-empty {
   display: none;
 }
-
 .oo-ui-toolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
   background-position: center center;
   background-repeat: no-repeat;
 
 .oo-ui-window {
   line-height: 1em;
+  /* Content div takes focus when opened, so hide outline */
 }
-
-.oo-ui-window > .oo-ui-window-frame {
+.oo-ui-window-frame {
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
-
-.oo-ui-window > .oo-ui-window-frame > .oo-ui-frame {
+.oo-ui-window-frame > iframe {
   width: 100%;
   height: 100%;
+  margin: 0;
+  padding: 0;
+}
+.oo-ui-window-content:focus {
+  outline: none;
 }
-
 .oo-ui-window-head,
 .oo-ui-window-foot {
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
   -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.oo-ui-window-body {
+  margin: 0;
+  padding: 0;
+  background: none;
 }
-
 .oo-ui-window-overlay {
   position: absolute;
   top: 0;
   height: 0;
   overflow: hidden;
 }
-
 .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup {
+  width: auto;
+  height: auto;
   top: 0;
   right: 0;
   bottom: 0;
   left: 0;
-  width: auto;
-  height: auto;
   padding: 1em;
 }
-
 .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame {
   position: fixed;
   right: 0;
   left: 0;
-  max-width: 100%;
-  max-height: 100%;
   margin: auto;
   overflow: hidden;
+  max-width: 100%;
+  max-height: 100%;
+}
+.oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup > .oo-ui-window-frame > iframe {
+  width: 100%;
+  height: 100%;
 }
-
 .oo-ui-windowManager-fullscreen > .oo-ui-dialog > .oo-ui-window-frame {
-  top: 0;
-  bottom: 0;
   width: 100%;
   height: 100%;
+  top: 0;
+  bottom: 0;
 }
 
 .oo-ui-messageDialog-actions-horizontal {
   display: table;
-  width: 100%;
   table-layout: fixed;
+  width: 100%;
 }
-
 .oo-ui-messageDialog-actions-horizontal .oo-ui-actionWidget {
   display: table-cell;
   width: 1%;
 }
-
 .oo-ui-messageDialog-actions-vertical {
   display: block;
 }
-
 .oo-ui-messageDialog-actions-vertical .oo-ui-actionWidget {
   display: block;
   overflow: hidden;
   text-overflow: ellipsis;
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget {
   position: relative;
   text-align: center;
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonedElement-button {
   display: block;
 }
-
 .oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-labeledElement-label {
   position: relative;
   top: auto;
   text-overflow: ellipsis;
   white-space: nowrap;
 }
-
 .oo-ui-processDialog-title {
   display: inline;
 }
-
 .oo-ui-processDialog-actions-safe .oo-ui-actionWidget,
 .oo-ui-processDialog-actions-primary .oo-ui-actionWidget,
 .oo-ui-processDialog-actions-other .oo-ui-actionWidget {
   white-space: nowrap;
 }
-
 .oo-ui-processDialog-actions-safe,
 .oo-ui-processDialog-actions-primary {
   position: absolute;
   top: 0;
   bottom: 0;
 }
-
 .oo-ui-processDialog-actions-safe {
   left: 0;
 }
-
 .oo-ui-processDialog-actions-primary {
   right: 0;
 }
-
 .oo-ui-processDialog-errors {
+  display: none;
   position: absolute;
   top: 0;
+  left: 0;
   right: 0;
   bottom: 0;
-  left: 0;
-  z-index: 2;
-  display: none;
   padding: 3em 3em 1.5em 3em;
+  z-index: 2;
   overflow-x: hidden;
   overflow-y: auto;
 }
 
 .oo-ui-buttonedElement > .oo-ui-buttonedElement-button {
+  cursor: pointer;
   display: inline-block;
   vertical-align: middle;
-  cursor: pointer;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
   -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
-
 .oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
   display: none;
   margin-left: 0;
 }
-
 .oo-ui-buttonedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator {
   display: none;
   margin-right: -0.75em;
 }
-
 .oo-ui-buttonedElement.oo-ui-widget-disabled > .oo-ui-buttonedElement-button {
   cursor: default;
 }
-
 .oo-ui-buttonedElement.oo-ui-indicatedElement > .oo-ui-buttonedElement-button > .oo-ui-indicatedElement-indicator,
 .oo-ui-buttonedElement.oo-ui-iconedElement > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
   display: inline-block;
   background-position: center center;
   background-repeat: no-repeat;
 }
-
 .oo-ui-buttonedElement-frameless {
-  position: relative;
   display: inline-block;
+  position: relative;
 }
-
 .oo-ui-buttonedElement-frameless > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
   display: inline-block;
-  margin-left: 0.25em;
   vertical-align: middle;
+  margin-left: 0.25em;
 }
-
 .oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button {
   display: inline-block;
-  text-align: center;
   vertical-align: top;
+  text-align: center;
 }
-
 .oo-ui-buttonedElement-framed > .oo-ui-buttonedElement-button > .oo-ui-labeledElement-label {
   display: inline-block;
-  line-height: 1.9em;
   vertical-align: middle;
+  line-height: 1.9em;
 }
-
 .oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-active,
-.oo-ui-buttonedElement-framed.oo-ui-widget-disabled > .oo-ui-buttonedElement-button.oo-ui-buttonedElement-pressed {
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-active > .oo-ui-buttonedElement-button,
+.oo-ui-buttonedElement-framed.oo-ui-widget-disabled.oo-ui-buttonedElement-pressed > .oo-ui-buttonedElement-button {
   cursor: default;
 }
 
 .oo-ui-clippableElement-clippable {
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 
 .oo-ui-bookletLayout-stackLayout.oo-ui-stackLayout-continuous .oo-ui-panelLayout-scrollable {
   overflow-y: hidden;
 }
-
 .oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout {
   width: 100%;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
-
 .oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-scrollable {
   overflow-y: auto;
 }
-
 .oo-ui-bookletLayout-stackLayout .oo-ui-panelLayout-padded {
   padding: 2em;
 }
-
 .oo-ui-bookletLayout-outlinePanel-editable .oo-ui-outlineWidget {
   position: absolute;
   top: 0;
+  left: 0;
   right: 0;
   bottom: 3em;
-  left: 0;
   overflow-y: auto;
 }
-
 .oo-ui-bookletLayout-outlinePanel .oo-ui-outlineControlsWidget {
   position: absolute;
-  right: 0;
   bottom: 0;
   left: 0;
+  right: 0;
 }
 
 .oo-ui-fieldLayout {
   margin-bottom: 1em;
 }
-
 .oo-ui-fieldLayout:last-child {
   margin-bottom: 0;
 }
-
 .oo-ui-fieldLayout:before,
 .oo-ui-fieldLayout:after {
-  display: table;
   content: " ";
+  display: table;
 }
-
 .oo-ui-fieldLayout:after {
   clear: both;
 }
-
 .oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-labeledElement-label,
 .oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
   display: block;
   padding-top: 0.5em;
   margin-right: 5%;
 }
-
 .oo-ui-fieldLayout.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-field,
 .oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-fieldLayout-field {
   display: block;
   float: left;
   width: 60%;
 }
-
 .oo-ui-fieldLayout.oo-ui-fieldLayout-align-right > .oo-ui-labeledElement-label {
   text-align: right;
 }
-
 .oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-labeledElement-label {
   display: inline-block;
-  padding: 0.75em 0.5em 0.5em 0.5em;
   vertical-align: middle;
+  padding: 0.75em 0.5em 0.5em 0.5em;
 }
-
 .oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline > .oo-ui-fieldLayout-field {
   display: inline-block;
-  padding: 0.5em 0;
   vertical-align: middle;
+  padding: 0.5em 0;
 }
-
 .oo-ui-fieldLayout.oo-ui-fieldLayout-align-top > .oo-ui-labeledElement-label {
   display: inline-block;
   padding: 0.5em 0;
 }
-
 .oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-buttonedElement-button > .oo-ui-iconedElement-icon {
   margin-top: 0.25em;
 }
-
 .oo-ui-fieldLayout > .oo-ui-popupButtonWidget > .oo-ui-popupWidget > .oo-ui-popupWidget-popup {
   z-index: 1;
 }
 
 .oo-ui-fieldsetLayout {
   position: relative;
-  padding: 0;
   margin: 0;
+  padding: 0;
 }
-
 .oo-ui-fieldsetLayout + .oo-ui-fieldsetLayout {
   margin-top: 2em;
 }
-
 .oo-ui-fieldsetLayout > .oo-ui-labeledElement-label {
-  padding: 0.25em 0;
   margin-bottom: 0.5em;
+  padding: 0.25em 0;
 }
-
 .oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-labeledElement-label {
   padding-left: 1.75em;
   line-height: 1.33em;
 }
-
 .oo-ui-fieldsetLayout.oo-ui-iconedElement > .oo-ui-iconedElement-icon {
+  display: block;
   position: absolute;
-  top: 0.25em;
   left: 0;
-  display: block;
+  top: 0.25em;
   width: 2em;
   height: 2em;
   background-position: center center;
 .oo-ui-gridLayout {
   position: absolute;
   top: 0;
+  left: 0;
   right: 0;
   bottom: 0;
-  left: 0;
 }
 
 .oo-ui-labelWidget {
 .oo-ui-panelLayout {
   position: relative;
 }
-
 .oo-ui-panelLayout-scrollable {
   overflow-y: auto;
 }
-
 .oo-ui-panelLayout-expanded {
   position: absolute;
   top: 0;
+  left: 0;
   right: 0;
   bottom: 0;
-  left: 0;
 }
 
 .oo-ui-stackLayout > .oo-ui-panelLayout {
   display: none;
 }
-
 .oo-ui-stackLayout-continuous > .oo-ui-panelLayout {
-  position: relative;
   display: block;
+  position: relative;
 }
 
 .oo-ui-barToolGroup > .oo-ui-iconedElement-icon,
 .oo-ui-barToolGroup > .oo-ui-labeledElement-label {
   display: none;
 }
-
 .oo-ui-barToolGroup .oo-ui-tool {
-  position: relative;
   display: inline-block;
+  position: relative;
   vertical-align: top;
 }
-
 .oo-ui-barToolGroup .oo-ui-tool-link {
   display: block;
   height: 1.5em;
   padding: 0.25em;
 }
-
 .oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
   display: block;
-  width: 1.5em;
   height: 1.5em;
+  width: 1.5em;
 }
-
 .oo-ui-barToolGroup .oo-ui-tool-link .oo-ui-tool-title {
   display: none;
 }
-
 .oo-ui-barToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
   cursor: default;
 }
-
 .oo-ui-barToolGroup .oo-ui-tool-title,
 .oo-ui-barToolGroup .oo-ui-tool-accel {
   display: none;
 }
-
 .oo-ui-barToolGroup.oo-ui-widget-enabled .oo-ui-tool-link {
   cursor: pointer;
 }
 .oo-ui-listToolGroup .oo-ui-toolGroup-tools {
   padding: 0.25em;
 }
-
 .oo-ui-listToolGroup .oo-ui-tool {
   display: inline-block;
   width: 100%;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
-
 .oo-ui-listToolGroup .oo-ui-tool-link {
   display: block;
-  padding-right: 0.5em;
-  white-space: nowrap;
   cursor: pointer;
+  white-space: nowrap;
+  padding-right: 0.5em;
 }
-
 .oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
   cursor: default;
 }
 .oo-ui-menuToolGroup .oo-ui-popupToolGroup-handle {
   min-width: 8em;
 }
-
 .oo-ui-menuToolGroup .oo-ui-toolGroup-tools {
   padding: 0.25em 0 0.25em 0;
 }
-
 .oo-ui-menuToolGroup .oo-ui-tool {
   display: block;
 }
-
 .oo-ui-menuToolGroup .oo-ui-tool-link {
   display: block;
-  padding: 0 1em 0 0.25em;
-  white-space: nowrap;
   cursor: pointer;
+  white-space: nowrap;
+  padding: 0 1em 0 0.25em;
 }
-
 .oo-ui-menuToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
   background-image: none;
 }
-
 .oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconedElement-icon {
   background-image: /* @embed */ url(images/icons/check.svg);
 }
-
 .oo-ui-menuToolGroup .oo-ui-tool.oo-ui-widget-disabled .oo-ui-tool-link {
   cursor: default;
 }
   height: 2em;
   min-width: 2.5em;
 }
-
 .oo-ui-popupToolGroup.oo-ui-indicatedElement.oo-ui-iconedElement {
   min-width: 3.5em;
 }
-
 .oo-ui-popupToolGroup-handle {
   display: block;
   cursor: pointer;
 }
-
 .oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator,
 .oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
   position: absolute;
   background-position: center center;
   background-repeat: no-repeat;
 }
-
 .oo-ui-popupToolGroup-handle .oo-ui-indicatedElement-indicator {
   right: 0;
 }
-
 .oo-ui-popupToolGroup-handle .oo-ui-iconedElement-icon {
   left: 0.25em;
 }
-
 .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
-  margin: 0 1em;
-  font-size: 0.8em;
   line-height: 2.6em;
+  font-size: 0.8em;
+  margin: 0 1em;
 }
-
 .oo-ui-popupToolGroup-header {
-  margin: 0 0.6em;
+  line-height: 2.6em;
   font-size: 0.8em;
+  margin: 0 0.6em;
   font-weight: bold;
-  line-height: 2.6em;
 }
-
 .oo-ui-popupToolGroup.oo-ui-widget-disabled .oo-ui-popupToolGroup-handle {
   cursor: default;
 }
-
 .oo-ui-popupToolGroup.oo-ui-iconedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
   margin-left: 3em;
 }
-
 .oo-ui-popupToolGroup.oo-ui-indicatedElement .oo-ui-popupToolGroup-handle .oo-ui-labeledElement-label {
   margin-right: 2.25em;
 }
-
 .oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
+  display: none;
   position: absolute;
   top: 2em;
   left: -1px;
   z-index: 4;
-  display: none;
 }
-
 .oo-ui-popupToolGroup .oo-ui-toolGroup-tools .oo-ui-iconedElement-icon {
-  background-position: center center;
   background-repeat: no-repeat;
+  background-position: center center;
 }
-
 .oo-ui-popupToolGroup-active.oo-ui-widget-enabled > .oo-ui-toolGroup-tools {
   display: block;
 }
-
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconedElement-icon {
   display: inline-block;
-  width: 2em;
+  vertical-align: middle;
   height: 2em;
+  width: 2em;
   margin-right: 0.25em;
-  vertical-align: middle;
 }
-
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-title {
   display: inline-block;
-  font-size: 0.8em;
-  line-height: 2em;
   vertical-align: middle;
+  line-height: 2em;
+  font-size: 0.8em;
 }
-
 .oo-ui-popupToolGroup .oo-ui-tool-accel {
   display: none;
 }
   margin-left: 1.25em;
   font-size: 0.8em;
 }
-
 .oo-ui-popupTool .oo-ui-popupWidget-popup,
 .oo-ui-popupTool .oo-ui-popupWidget-anchor {
   z-index: 4;
 
 .oo-ui-iconWidget {
   display: inline-block;
-  width: 1.9em;
-  height: 1.9em;
-  line-height: 2.5em;
   vertical-align: middle;
+  line-height: 2.5em;
+  height: 1.9em;
+  width: 1.9em;
   background-position: center center;
   background-repeat: no-repeat;
   opacity: 0.8;
 }
-
 .oo-ui-iconWidget.oo-ui-widget-disabled {
   opacity: 0.2;
 }
 
 .oo-ui-indicatorWidget {
   display: inline-block;
-  width: 1.9em;
-  height: 1.9em;
-  line-height: 2.5em;
   vertical-align: middle;
+  line-height: 2.5em;
+  height: 1.9em;
+  width: 1.9em;
   background-position: center center;
   background-repeat: no-repeat;
   opacity: 0.8;
 }
-
 .oo-ui-indicatorWidget.oo-ui-widget-disabled {
   opacity: 0.2;
 }
 
 .oo-ui-selectWidget {
-  padding: 0;
-  margin: 0;
   list-style: none;
+  margin: 0;
+  padding: 0;
 }
 
 .oo-ui-optionWidget {
   position: relative;
   display: block;
-  margin: 0;
+  border: none;
   list-style: none;
+  margin: 0;
   cursor: pointer;
-  border: none;
 }
-
 .oo-ui-optionWidget.oo-ui-widget-disabled {
   cursor: default;
 }
-
 .oo-ui-optionWidget .oo-ui-labeledElement-label {
   display: block;
-  overflow: hidden;
   line-height: 1.5em;
-  text-overflow: ellipsis;
   white-space: nowrap;
+  text-overflow: ellipsis;
+  overflow: hidden;
 }
 
 .oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon,
   width: 2em;
   height: 2em;
   margin-top: -1em;
-  background-position: center center;
   background-repeat: no-repeat;
+  background-position: center center;
 }
-
 .oo-ui-decoratedOptionWidget .oo-ui-iconedElement-icon {
   left: 0.5em;
 }
-
 .oo-ui-decoratedOptionWidget .oo-ui-indicatedElement-indicator {
   right: 0.5em;
 }
 .oo-ui-menuWidget {
   position: absolute;
 }
-
 .oo-ui-menuWidget input {
   position: absolute;
   width: 0;
   opacity: 0;
 }
 
+.oo-ui-comboBoxWidget > .oo-ui-selectWidget {
+  z-index: 1;
+  min-width: 20em;
+}
+
 .oo-ui-popupWidget-popup {
   position: absolute;
-  z-index: 1;
   overflow: hidden;
+  z-index: 1;
 }
-
 .oo-ui-popupWidget-anchor {
-  z-index: 1;
   display: none;
+  z-index: 1;
 }
-
 .oo-ui-popupWidget-anchored .oo-ui-popupWidget-popup {
   margin-top: 7px;
 }
-
 .oo-ui-popupWidget-anchored .oo-ui-popupWidget-anchor {
-  position: absolute;
   display: block;
+  position: absolute;
   background-repeat: no-repeat;
 }
-
 .oo-ui-popupWidget-head {
   height: 2.5em;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
   -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
-
 .oo-ui-popupWidget-head .oo-ui-buttonWidget {
   float: right;
   margin: 0.25em;
 }
-
 .oo-ui-popupWidget-head .oo-ui-labeledElement-label {
   float: left;
   margin: 0.75em 1em;
   cursor: default;
 }
-
 .oo-ui-popupWidget-body {
-  overflow: hidden;
   clear: both;
+  overflow: hidden;
 }
-
 .oo-ui-popupWidget-body-padded {
   padding: 0 1em;
 }
 .oo-ui-buttonGroupWidget {
   border-radius: 0.3em;
 }
-
 .oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed .oo-ui-buttonedElement-button {
+  border-radius: 0;
   margin-bottom: -1px;
   margin-left: -1px;
-  border-radius: 0;
 }
-
 .oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:first-child .oo-ui-buttonedElement-button {
-  margin-left: 0;
   border-bottom-left-radius: 0.3em;
   border-top-left-radius: 0.3em;
+  margin-left: 0;
 }
-
 .oo-ui-buttonGroupWidget .oo-ui-buttonedElement-framed:last-child .oo-ui-buttonedElement-button {
-  border-top-right-radius: 0.3em;
   border-bottom-right-radius: 0.3em;
+  border-top-right-radius: 0.3em;
 }
 
 .oo-ui-buttonOptionWidget {
   display: inline-block;
   background-color: transparent;
 }
-
 .oo-ui-buttonOptionWidget .oo-ui-buttonedElement-button {
   position: relative;
   height: 1.9em;
 }
-
 .oo-ui-buttonOptionWidget.oo-ui-iconedElement .oo-ui-iconedElement-icon,
 .oo-ui-buttonOptionWidget.oo-ui-indicatedElement .oo-ui-indicatedElement-indicator {
   position: static;
   display: inline-block;
+  vertical-align: middle;
   height: 1.9em;
   margin-top: 0;
-  vertical-align: middle;
 }
 
 .oo-ui-buttonSelectWidget {
 .oo-ui-inlineMenuWidget {
   position: relative;
   display: inline-block;
-  min-width: 20em;
   margin: 0.25em 0;
+  min-width: 20em;
 }
-
 .oo-ui-inlineMenuWidget-handle {
   display: inline-block;
   width: 100%;
   height: 2.5em;
   cursor: pointer;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
   -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
-
 .oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator,
 .oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
   position: absolute;
   background-position: center center;
   background-repeat: no-repeat;
 }
-
 .oo-ui-inlineMenuWidget-handle .oo-ui-indicatedElement-indicator {
   right: 0;
 }
-
 .oo-ui-inlineMenuWidget-handle .oo-ui-iconedElement-icon {
   left: 0.25em;
 }
-
 .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
-  margin: 0 0.5em;
   line-height: 2.5em;
+  margin: 0 0.5em;
 }
-
 .oo-ui-inlineMenuWidget.oo-ui-iconedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
   margin-left: 3em;
 }
-
 .oo-ui-inlineMenuWidget.oo-ui-indicatedElement .oo-ui-inlineMenuWidget-handle .oo-ui-labeledElement-label {
   margin-right: 2em;
 }
-
 .oo-ui-inlineMenuWidget .oo-ui-menuWidget {
-  z-index: 1;
   width: 100%;
+  z-index: 1;
 }
-
 .oo-ui-inlineMenuWidget.oo-ui-widget-disabled .oo-ui-inlineMenuWidget-handle {
   cursor: default;
 }
 .oo-ui-menuItemWidget {
   position: relative;
 }
-
 .oo-ui-menuItemWidget .oo-ui-iconedElement-icon {
   display: none;
 }
-
 .oo-ui-menuItemWidget.oo-ui-optionWidget-selected {
   background-color: transparent;
 }
-
 .oo-ui-menuItemWidget.oo-ui-optionWidget-selected .oo-ui-iconedElement-icon {
   display: block;
 }
 .oo-ui-outlineControlsWidget {
   height: 3em;
 }
-
 .oo-ui-outlineControlsWidget-items,
 .oo-ui-outlineControlsWidget-movers {
   float: left;
   height: 2em;
-  padding: 0;
   margin: 0.5em;
+  padding: 0;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
-
 .oo-ui-outlineControlsWidget > .oo-ui-iconedElement-icon {
   float: left;
   width: 1.5em;
   background-position: right center;
   background-repeat: no-repeat;
 }
-
 .oo-ui-outlineControlsWidget-items {
   float: left;
   margin-left: 0;
 }
-
 .oo-ui-outlineControlsWidget-items .oo-ui-buttonWidget {
   float: left;
 }
-
 .oo-ui-outlineControlsWidget-movers {
   float: right;
 }
-
 .oo-ui-outlineControlsWidget-movers .oo-ui-buttonWidget {
   float: right;
 }
   position: relative;
   padding: 0.75em;
   cursor: pointer;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
   -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
 
 .oo-ui-popupButtonWidget {
   position: relative;
 }
-
 .oo-ui-popupButtonWidget .oo-ui-popupWidget {
   position: absolute;
   left: 1em;
 .oo-ui-searchWidget-query {
   position: absolute;
   top: 0;
-  right: 0;
   left: 0;
+  right: 0;
   height: 4em;
   padding: 0 1em;
 }
-
 .oo-ui-searchWidget-query .oo-ui-textInputWidget {
   width: 100%;
   margin: 0.75em 0;
 }
-
 .oo-ui-searchWidget-results {
   position: absolute;
   top: 4em;
-  right: 0;
   bottom: 0;
   left: 0;
+  right: 0;
   padding: 1em;
   overflow-x: hidden;
   overflow-y: auto;
 .oo-ui-textInputWidget {
   position: relative;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
-
 .oo-ui-textInputWidget input,
 .oo-ui-textInputWidget textarea {
   display: inline-block;
   width: 100%;
-  -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
   resize: none;
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
-
-.oo-ui-textInputWidget-icon {
+.oo-ui-textInputWidget > .oo-ui-iconedElement-icon,
+.oo-ui-textInputWidget > .oo-ui-indicatedElement-indicator {
   position: absolute;
   top: 0;
-  left: 0;
   height: 100%;
-  background-position: right center;
   background-repeat: no-repeat;
+  cursor: pointer;
+  -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.oo-ui-textInputWidget > .oo-ui-iconedElement-icon {
+  left: 0;
+}
+.oo-ui-textInputWidget > .oo-ui-indicatedElement-indicator {
+  right: 0;
 }
 
 .oo-ui-toggleSwitchWidget {
   position: relative;
   display: inline-block;
-  width: 4em;
+  vertical-align: middle;
   height: 2em;
+  width: 4em;
   overflow: hidden;
-  vertical-align: middle;
   cursor: pointer;
-  -webkit-transform: translateZ(0);
-     -moz-transform: translateZ(0);
-      -ms-transform: translateZ(0);
-       -o-transform: translateZ(0);
-          transform: translateZ(0);
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  -webkit-transform: translateZ(0px);
+  -moz-transform: translateZ(0px);
+  -ms-transform: translateZ(0px);
+  -o-transform: translateZ(0px);
+  transform: translateZ(0px);
 }
-
 .oo-ui-toggleSwitchWidget.oo-ui-widget-disabled {
   cursor: default;
 }
-
 .oo-ui-toggleSwitchWidget-grip {
   position: absolute;
+  display: block;
   top: 0.25em;
   left: 0.25em;
-  display: block;
   width: 1.5em;
   height: 1.5em;
   margin-top: -1px;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
   -webkit-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-     -moz-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-      -ms-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-       -o-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
-          transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+  -moz-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+  -ms-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+  -o-transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
+  transition: left 200ms ease-in-out, margin-left 200ms ease-in-out;
 }
-
 .oo-ui-toggleSwitchWidget .oo-ui-toggleSwitchWidget-glow {
   position: absolute;
   top: 0;
-  right: 0;
   bottom: 0;
+  right: 0;
   left: 0;
-  -webkit-transition: opacity 200ms ease-in-out;
-     -moz-transition: opacity 200ms ease-in-out;
-      -ms-transition: opacity 200ms ease-in-out;
-       -o-transition: opacity 200ms ease-in-out;
-          transition: opacity 200ms ease-in-out;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
   -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  -webkit-transition: opacity 200ms ease-in-out;
+  -moz-transition: opacity 200ms ease-in-out;
+  -ms-transition: opacity 200ms ease-in-out;
+  -o-transition: opacity 200ms ease-in-out;
+  transition: opacity 200ms ease-in-out;
 }
-
 .oo-ui-toggleWidget-on .oo-ui-toggleSwitchWidget-grip {
   left: 2.25em;
   margin-left: -2px;
 }
-
 .oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-grip {
   left: 0.25em;
   margin-left: 0;
 }
-
 .oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
   display: none;
 }
 
 /* Icons */
-
 .oo-ui-icon-add-item {
   background-image: /* @embed */ url(images/icons/add-item.svg);
 }
-
 .oo-ui-icon-advanced {
   background-image: /* @embed */ url(images/icons/advanced.svg);
 }
-
 .oo-ui-icon-alert {
   background-image: /* @embed */ url(images/icons/alert.svg);
 }
-
 .oo-ui-icon-check {
   background-image: /* @embed */ url(images/icons/check.svg);
 }
-
 .oo-ui-icon-clear {
   background-image: /* @embed */ url(images/icons/clear.svg);
 }
-
 .oo-ui-icon-close {
   background-image: /* @embed */ url(images/icons/close.svg);
 }
-
 .oo-ui-icon-code {
   background-image: /* @embed */ url(images/icons/code.svg);
 }
-
 .oo-ui-icon-collapse {
   background-image: /* @embed */ url(images/icons/collapse.svg);
 }
-
 .oo-ui-icon-comment {
   background-image: /* @embed */ url(images/icons/comment.svg);
 }
-
 .oo-ui-icon-expand {
   background-image: /* @embed */ url(images/icons/expand.svg);
 }
-
 .oo-ui-icon-help {
   background-image: /* @embed */ url(images/icons/help.svg);
 }
-
 .oo-ui-icon-info {
   background-image: /* @embed */ url(images/icons/info.svg);
 }
-
 .oo-ui-icon-link {
   background-image: /* @embed */ url(images/icons/link.svg);
 }
-
 .oo-ui-icon-menu {
   background-image: /* @embed */ url(images/icons/menu.svg);
 }
-
 .oo-ui-icon-next {
   background-image: /* @embed */ url(images/icons/move-ltr.svg);
 }
-
 .oo-ui-icon-picture {
   background-image: /* @embed */ url(images/icons/picture.svg);
 }
-
 .oo-ui-icon-previous {
   background-image: /* @embed */ url(images/icons/move-rtl.svg);
 }
-
 .oo-ui-icon-redo {
   background-image: /* @embed */ url(images/icons/arched-arrow-ltr.svg);
 }
-
 .oo-ui-icon-remove {
   background-image: /* @embed */ url(images/icons/remove.svg);
 }
-
 .oo-ui-icon-search {
   background-image: /* @embed */ url(images/icons/search.svg);
 }
-
 .oo-ui-icon-settings {
   background-image: /* @embed */ url(images/icons/settings.svg);
 }
-
 .oo-ui-icon-tag {
   background-image: /* @embed */ url(images/icons/tag.svg);
 }
-
 .oo-ui-icon-undo {
   background-image: /* @embed */ url(images/icons/arched-arrow-rtl.svg);
 }
-
 .oo-ui-icon-window {
   background-image: /* @embed */ url(images/icons/window.svg);
 }
-
 /* Indicators */
-
 .oo-ui-indicator-alert {
   background-image: /* @embed */ url(images/indicators/alert.svg);
 }
-
 .oo-ui-indicator-down {
   background-image: /* @embed */ url(images/indicators/arrow-down.svg);
 }
-
 .oo-ui-indicator-next {
   background-image: /* @embed */ url(images/indicators/arrow-ltr.svg);
 }
-
 .oo-ui-indicator-previous {
   background-image: /* @embed */ url(images/indicators/arrow-rtl.svg);
 }
-
 .oo-ui-indicator-required {
   background-image: /* @embed */ url(images/indicators/required.svg);
 }
-
 .oo-ui-indicator-up {
   background-image: /* @embed */ url(images/indicators/arrow-up.svg);
-}
\ No newline at end of file
+}
index 8be7665..71f2f55 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs v1.0.11
+ * OOjs v1.0.12 optimised for jQuery
  * https://www.mediawiki.org/wiki/OOjs
  *
  * Copyright 2011-2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-07-23T20:15:47Z
+ * Date: 2014-08-20T22:33:41Z
  */
 ( function ( global ) {
 
@@ -222,8 +222,10 @@ oo.getObjectValues = function ( obj ) {
  * the other. An asymmetrical test may also be performed, which checks only that properties in the
  * first object are present in the second object, but not the inverse.
  *
- * @param {Object} a First object to compare
- * @param {Object} b Second object to compare
+ * If either a or b is null or undefined it will be treated as an empty object.
+ *
+ * @param {Object|undefined} a First object to compare
+ * @param {Object|undefined} b Second object to compare
  * @param {boolean} [asymmetrical] Whether to check only that b contains values from a
  * @return {boolean} If the objects contain the same values as each other
  */
@@ -234,6 +236,9 @@ oo.compare = function ( a, b, asymmetrical ) {
                return true;
        }
 
+       a = a || {};
+       b = b || {};
+
        for ( k in a ) {
                if ( !hasOwn.call( a, k ) ) {
                        // Support es3-shim: Without this filter, comparing [] to {} will be false in ES3
@@ -261,41 +266,46 @@ oo.compare = function ( a, b, asymmetrical ) {
  * Copies are deep, and will either be an object or an array depending on `source`.
  *
  * @param {Object} source Object to copy
- * @param {Function} [callback] Applied to leaf values before they added to the clone
+ * @param {Function} [leafCallback] Applied to leaf values after they are cloned but before they are added to the clone
+ * @param {Function} [nodeCallback] Applied to all values before they are cloned.  If the nodeCallback returns a value other than undefined, the returned value is used instead of attempting to clone.
  * @return {Object} Copy of source object
  */
-oo.copy = function ( source, callback ) {
-       var key, sourceValue, sourceType, destination;
-
-       if ( typeof source.clone === 'function' ) {
-               return source.clone();
+oo.copy = function ( source, leafCallback, nodeCallback ) {
+       var key, destination;
+
+       if ( nodeCallback ) {
+               // Extensibility: check before attempting to clone source.
+               destination = nodeCallback( source );
+               if ( destination !== undefined ) {
+                       return destination;
+               }
        }
 
-       destination = Array.isArray( source ) ? new Array( source.length ) : {};
+       if ( Array.isArray( source ) ) {
+               // Array (fall through)
+               destination = new Array( source.length );
+       } else if ( source && typeof source.clone === 'function' ) {
+               // Duck type object with custom clone method
+               return leafCallback ? leafCallback( source.clone() ) : source.clone();
+       } else if ( source && typeof source.cloneNode === 'function' ) {
+               // DOM Node
+               return leafCallback ?
+                       leafCallback( source.cloneNode( true ) ) :
+                       source.cloneNode( true );
+       } else if ( oo.isPlainObject( source ) ) {
+               // Plain objects (fall through)
+               destination = {};
+       } else {
+               // Non-plain objects (incl. functions) and primitive values
+               return leafCallback ? leafCallback( source ) : source;
+       }
 
+       // source is an array or a plain object
        for ( key in source ) {
-               sourceValue = source[key];
-               sourceType = typeof sourceValue;
-               if ( Array.isArray( sourceValue ) ) {
-                       // Array
-                       destination[key] = oo.copy( sourceValue, callback );
-               } else if ( sourceValue && typeof sourceValue.clone === 'function' ) {
-                       // Duck type object with custom clone method
-                       destination[key] = callback ?
-                               callback( sourceValue.clone() ) : sourceValue.clone();
-               } else if ( sourceValue && typeof sourceValue.cloneNode === 'function' ) {
-                       // DOM Node
-                       destination[key] = callback ?
-                               callback( sourceValue.cloneNode( true ) ) : sourceValue.cloneNode( true );
-               } else if ( oo.isPlainObject( sourceValue ) ) {
-                       // Plain objects
-                       destination[key] = oo.copy( sourceValue, callback );
-               } else {
-                       // Non-plain objects (incl. functions) and primitive values
-                       destination[key] = callback ? callback( sourceValue ) : sourceValue;
-               }
+               destination[key] = oo.copy( source[key], leafCallback, nodeCallback );
        }
 
+       // This is an internal node, so we don't apply the leafCallback.
        return destination;
 };
 
@@ -466,29 +476,28 @@ oo.EventEmitter = function OoEventEmitter() {
        this.bindings = {};
 };
 
+oo.initClass( oo.EventEmitter );
+
 /* Methods */
 
 /**
  * Add a listener to events of a specific event.
  *
+ * The listener can be a function or the string name of a method; if the latter, then the
+ * name lookup happens at the time the listener is called.
+ *
  * @param {string} event Type of event to listen to
- * @param {Function} callback Function to call when event occurs
+ * @param {Function|string} method Function or method name to call when event occurs
  * @param {Array} [args] Arguments to pass to listener, will be prepended to emitted arguments
- * @param {Object} [context=null] Object to use as context for callback function or call method on
- * @throws {Error} Listener argument is not a function or method name
+ * @param {Object} [context=null] Context object for function or method call
+ * @throws {Error} Listener argument is not a function or a valid method name
  * @chainable
  */
-oo.EventEmitter.prototype.on = function ( event, callback, args, context ) {
+oo.EventEmitter.prototype.on = function ( event, method, args, context ) {
        var bindings;
 
-       // Validate callback
-       if ( typeof callback !== 'function' ) {
-               throw new Error( 'Invalid callback. Function or method name expected.' );
-       }
-       // Fallback to null context
-       if ( arguments.length < 4 ) {
-               context = null;
-       }
+       this.constructor.static.validateMethod( method, context );
+
        if ( hasOwn.call( this.bindings, event ) ) {
                bindings = this.bindings[event];
        } else {
@@ -497,9 +506,9 @@ oo.EventEmitter.prototype.on = function ( event, callback, args, context ) {
        }
        // Add binding
        bindings.push( {
-               callback: callback,
+               method: method,
                args: args,
-               context: context
+               context: ( arguments.length < 4 ) ? null : context
        } );
        return this;
 };
@@ -524,42 +533,46 @@ oo.EventEmitter.prototype.once = function ( event, listener ) {
  * Remove a specific listener from a specific event.
  *
  * @param {string} event Type of event to remove listener from
- * @param {Function} [callback] Listener to remove, omit to remove all
- * @param {Object} [context=null] Object used context for callback function or method
+ * @param {Function|string} [method] Listener to remove. Must be in the same form as was passed
+ * to "on". Omit to remove all listeners.
+ * @param {Object} [context=null] Context object function or method call
  * @chainable
- * @throws {Error} Listener argument is not a function
+ * @throws {Error} Listener argument is not a function or a valid method name
  */
-oo.EventEmitter.prototype.off = function ( event, callback, context ) {
+oo.EventEmitter.prototype.off = function ( event, method, context ) {
        var i, bindings;
 
        if ( arguments.length === 1 ) {
                // Remove all bindings for event
                delete this.bindings[event];
-       } else {
-               if ( typeof callback !== 'function' ) {
-                       throw new Error( 'Invalid callback. Function expected.' );
-               }
-               if ( !( event in this.bindings ) || !this.bindings[event].length ) {
-                       // No matching bindings
-                       return this;
-               }
-               // Fallback to null context
-               if ( arguments.length < 3 ) {
-                       context = null;
-               }
-               // Remove matching handlers
-               bindings = this.bindings[event];
-               i = bindings.length;
-               while ( i-- ) {
-                       if ( bindings[i].callback === callback && bindings[i].context === context ) {
-                               bindings.splice( i, 1 );
-                       }
-               }
-               // Cleanup if now empty
-               if ( bindings.length === 0 ) {
-                       delete this.bindings[event];
+               return this;
+       }
+
+       this.constructor.static.validateMethod( method, context );
+
+       if ( !( event in this.bindings ) || !this.bindings[event].length ) {
+               // No matching bindings
+               return this;
+       }
+
+       // Default to null context
+       if ( arguments.length < 3 ) {
+               context = null;
+       }
+
+       // Remove matching handlers
+       bindings = this.bindings[event];
+       i = bindings.length;
+       while ( i-- ) {
+               if ( bindings[i].method === method && bindings[i].context === context ) {
+                       bindings.splice( i, 1 );
                }
        }
+
+       // Cleanup if now empty
+       if ( bindings.length === 0 ) {
+               delete this.bindings[event];
+       }
        return this;
 };
 
@@ -574,7 +587,7 @@ oo.EventEmitter.prototype.off = function ( event, callback, context ) {
  * @return {boolean} If event was handled by at least one listener
  */
 oo.EventEmitter.prototype.emit = function ( event ) {
-       var i, len, binding, bindings, args;
+       var i, len, binding, bindings, args, method;
 
        if ( event in this.bindings ) {
                // Slicing ensures that we don't get tripped up by event handlers that add/remove bindings
@@ -582,7 +595,13 @@ oo.EventEmitter.prototype.emit = function ( event ) {
                args = Array.prototype.slice.call( arguments, 1 );
                for ( i = 0, len = bindings.length; i < len; i++ ) {
                        binding = bindings[i];
-                       binding.callback.apply(
+                       if ( typeof binding.method === 'string' ) {
+                               // Lookup method by name (late binding)
+                               method = binding.context[ binding.method ];
+                       } else {
+                               method = binding.method;
+                       }
+                       method.apply(
                                binding.context,
                                binding.args ? binding.args.concat( args ) : args
                        );
@@ -603,7 +622,7 @@ oo.EventEmitter.prototype.emit = function ( event ) {
  * @chainable
  */
 oo.EventEmitter.prototype.connect = function ( context, methods ) {
-       var method, callback, args, event;
+       var method, args, event;
 
        for ( event in methods ) {
                method = methods[event];
@@ -614,19 +633,8 @@ oo.EventEmitter.prototype.connect = function ( context, methods ) {
                } else {
                        args = [];
                }
-               // Allow callback to be a method name
-               if ( typeof method === 'string' ) {
-                       // Validate method
-                       if ( !context[method] || typeof context[method] !== 'function' ) {
-                               throw new Error( 'Method not found: ' + method );
-                       }
-                       // Resolve to function
-                       callback = context[method];
-               } else {
-                       callback = method;
-               }
                // Add binding
-               this.on.apply( this, [ event, callback, args, context ] );
+               this.on( event, method, args, context );
        }
        return this;
 };
@@ -636,27 +644,17 @@ oo.EventEmitter.prototype.connect = function ( context, methods ) {
  *
  * @param {Object} context Object to disconnect methods from
  * @param {Object.<string,string>|Object.<string,Function>|Object.<string,Array>} [methods] List of
- * event bindings keyed by event name containing either method names or functions
+ * event bindings keyed by event name. Values can be either method names or functions, but must be
+ * consistent with those used in the corresponding call to "connect".
  * @chainable
  */
 oo.EventEmitter.prototype.disconnect = function ( context, methods ) {
-       var i, method, callback, event, bindings;
+       var i, event, bindings;
 
        if ( methods ) {
                // Remove specific connections to the context
                for ( event in methods ) {
-                       method = methods[event];
-                       if ( typeof method === 'string' ) {
-                               // Validate method
-                               if ( !context[method] || typeof context[method] !== 'function' ) {
-                                       throw new Error( 'Method not found: ' + method );
-                               }
-                               // Resolve to function
-                               callback = context[method];
-                       } else {
-                               callback = method;
-                       }
-                       this.off( event, callback, context );
+                       this.off( event, methods[event], context );
                }
        } else {
                // Remove all connections to the context
@@ -667,7 +665,7 @@ oo.EventEmitter.prototype.disconnect = function ( context, methods ) {
                                // bindings[i] may have been removed by the previous step's
                                // this.off so check it still exists
                                if ( bindings[i] && bindings[i].context === context ) {
-                                       this.off( event, bindings[i].callback, context );
+                                       this.off( event, bindings[i].method, context );
                                }
                        }
                }
@@ -676,6 +674,42 @@ oo.EventEmitter.prototype.disconnect = function ( context, methods ) {
        return this;
 };
 
+/**
+ * Validate a function or method call in a context
+ *
+ * For a method name, check that it names a function in the context object
+ *
+ * @static
+ * @param {Function|string} method Function or method name
+ * @param {Mixed} context The context of the call
+ * @throws {Error} A method name is given but there is no context
+ * @throws {Error} In the context object, no property exists with the given name
+ * @throws {Error} In the context object, the named property is not a function
+ */
+oo.EventEmitter.static.validateMethod = function ( method, context ) {
+       // Validate method and context
+       if ( typeof method === 'string' ) {
+               // Validate method
+               if ( context === undefined || context === null ) {
+                       throw new Error( 'Method name "' + method + '" has no context.' );
+               }
+               if ( !( method in context ) ) {
+                       // Technically the method does not need to exist yet: it could be
+                       // added before call time. But this probably signals a typo.
+                       throw new Error( 'Method not found: "' + method + '"' );
+               }
+               if ( typeof context[method] !== 'function' ) {
+                       // Technically the property could be replaced by a function before
+                       // call time. But this probably signals a typo.
+                       throw new Error( 'Property "' + method + '" is not a function' );
+               }
+       } else if ( typeof method !== 'function' ) {
+               throw new Error( 'Invalid callback. Function or method name expected.' );
+       }
+};
+
+/*global hasOwn */
+
 /**
  * @class OO.Registry
  * @mixins OO.EventEmitter
@@ -737,7 +771,9 @@ oo.Registry.prototype.register = function ( name, data ) {
  * @return {Mixed|undefined} Data associated with symbolic name
  */
 oo.Registry.prototype.lookup = function ( name ) {
-       return this.registry[name];
+       if ( hasOwn.call( this.registry, name ) ) {
+               return this.registry[name];
+       }
 };
 
 /**
@@ -802,12 +838,12 @@ oo.Factory.prototype.register = function ( constructor ) {
  * @throws {Error} Unknown object name
  */
 oo.Factory.prototype.create = function ( name ) {
-       var args, obj, constructor;
+       var args, obj,
+               constructor = this.lookup( name );
 
-       if ( !this.registry.hasOwnProperty( name ) ) {
+       if ( !constructor ) {
                throw new Error( 'No class registered by that name: ' + name );
        }
-       constructor = this.registry[name];
 
        // Convert arguments to array and shift the first argument (name) off
        args = Array.prototype.slice.call( arguments, 1 );
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.redirect.js b/resources/src/mediawiki.action/mediawiki.action.view.redirect.js
new file mode 100644 (file)
index 0000000..c87ff7c
--- /dev/null
@@ -0,0 +1,65 @@
+/*!
+ * JavaScript to update page URL when a redirect is viewed, ensuring that the
+ * page is scrolled to the id when it's a redirect with fragment.
+ *
+ * This is loaded in the top queue, so avoid unnecessary dependencies
+ * like mediawiki.Title or mediawiki.Uri.
+ */
+( function ( mw, $ ) {
+       var profile = $.client.profile(),
+               canonical = mw.config.get( 'wgInternalRedirectTargetUrl' ),
+               fragment = null,
+               shouldChangeFragment, index;
+
+       // Clear internal mw.config entries, so that no one tries to depend on them
+       mw.config.set( 'wgInternalRedirectTargetUrl', null );
+
+       // Deployment hack for compatibility with cached HTML, remove before 1.24 release
+       if ( !canonical ) {
+               canonical = mw.config.get( 'wgRedirectToFragment' );
+       }
+
+       index = canonical.indexOf( '#' );
+       if ( index !== -1 ) {
+               fragment = canonical.slice( index );
+       }
+
+       // Never override the fragment if the user intended to look at a different section
+       shouldChangeFragment = fragment && !location.hash;
+
+       // Replace the whole URL if possible, otherwise just change the fragment
+       if ( canonical && history.replaceState ) {
+               if ( !shouldChangeFragment ) {
+                       // If the current page view has a fragment already, don't override it
+                       canonical = canonical.replace( /#.*$/, '' );
+                       canonical += location.hash;
+               }
+
+               // This will also cause the browser to scroll to given fragment
+               history.replaceState( /*data=*/ history.state, /*title=*/ document.title, /*url=*/ canonical );
+
+       } else if ( shouldChangeFragment ) {
+               if ( profile.layout === 'webkit' && profile.layoutVersion < 420 ) {
+                       // Released Safari w/ WebKit 418.9.1 messes up horribly
+                       // Nightlies of 420+ are ok
+                       return;
+               }
+
+               location.hash = fragment;
+       }
+
+       if ( shouldChangeFragment && profile.layout === 'gecko' ) {
+               // Mozilla needs to wait until after load, otherwise the window doesn't
+               // scroll.  See <https://bugzilla.mozilla.org/show_bug.cgi?id=516293>.
+               // There's no obvious way to detect this programmatically, so we use
+               // version-testing.  If Firefox fixes the bug, they'll jump twice, but
+               // better twice than not at all, so make the fix hit future versions as
+               // well.
+               $( function () {
+                       if ( location.hash === fragment ) {
+                               location.hash = fragment;
+                       }
+               } );
+       }
+
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.redirectToFragment.js b/resources/src/mediawiki.action/mediawiki.action.view.redirectToFragment.js
deleted file mode 100644 (file)
index cbfd7b5..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
- * JavaScript to scroll the page to an id, when a redirect with fragment is viewed.
- */
-( function ( mw, $ ) {
-       var profile = $.client.profile(),
-               fragment = mw.config.get( 'wgRedirectToFragment' );
-
-       if ( fragment === null ) {
-               // nothing to do
-               return;
-       }
-
-       if ( profile.layout === 'webkit' && profile.layoutVersion < 420 ) {
-               // Released Safari w/ WebKit 418.9.1 messes up horribly
-               // Nightlies of 420+ are ok
-               return;
-       }
-       if ( !window.location.hash ) {
-               window.location.hash = fragment;
-
-               // Mozilla needs to wait until after load, otherwise the window doesn't
-               // scroll.  See <https://bugzilla.mozilla.org/show_bug.cgi?id=516293>.
-               // There's no obvious way to detect this programmatically, so we use
-               // version-testing.  If Firefox fixes the bug, they'll jump twice, but
-               // better twice than not at all, so make the fix hit future versions as
-               // well.
-               if ( profile.layout === 'gecko' ) {
-                       $( function () {
-                               if ( window.location.hash === fragment ) {
-                                       window.location.hash = fragment;
-                               }
-                       } );
-               }
-       }
-}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.language/mediawiki.language.fallback.js b/resources/src/mediawiki.language/mediawiki.language.fallback.js
new file mode 100644 (file)
index 0000000..b1bab02
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Language-fallback-chain-related utilities for mediawiki.language.
+ */
+( function ( mw, $ ) {
+       /**
+        * @class mw.language
+        */
+
+       $.extend( mw.language, {
+
+               /**
+                * Get the language fallback chain for current UI language (not including the language itself).
+                *
+                * @return {string[]} List of language keys, e.g. `['de', 'en']`
+                */
+               getFallbackLanguages: function () {
+                       return mw.language.getData(
+                               mw.config.get( 'wgUserLanguage' ),
+                               'fallbackLanguages'
+                       ) || [];
+               },
+
+               /**
+                * Get the language fallback chain for current UI language, including the language itself.
+                *
+                * @return {string[]} List of language keys, e.g. `['pfl', de', 'en']`
+                */
+               getFallbackLanguageChain: function () {
+                       return [ mw.config.get( 'wgUserLanguage' ) ]
+                               .concat( mw.language.getFallbackLanguages() );
+               }
+
+       } );
+
+}( mediaWiki, jQuery ) );
index 5b9afcf..df95d75 100644 (file)
@@ -35,6 +35,7 @@
                 *  - `grammarForms`
                 *  - `pluralRules`
                 *  - `digitGroupingPattern`
+                *  - `fallbackLanguages`
                 *
                 * @property
                 */
index 0a50e10..acf1157 100644 (file)
                .field-placeholder-styling;
        }
 
-       &:focus {
-               box-shadow: inset .45em 0 0 #5088f7;
-               border-color: @colorGrayDark;
-               // Remove focus glow on input[type="search"]
-               outline: 0;
-       }
-
        // Remove red outline from inputs which have required field and invalid content.
        // This is a Firefox only issue
        // See https://developer.mozilla.org/en-US/docs/Web/CSS/:invalid
+       // This should be above :focus so focus behaviour takes preference
        &:invalid {
                box-shadow: none;
        }
+
+       &:focus {
+               box-shadow: inset .45em 0 0 #5088f7;
+               border-color: @colorGrayDark;
+               // Remove focus glow on input[type="search"]
+               outline: 0;
+       }
 }
 
 textarea.mw-ui-input {
diff --git a/skins/common/images/button_template.png b/skins/common/images/button_template.png
deleted file mode 100644 (file)
index 94d9d0b..0000000
Binary files a/skins/common/images/button_template.png and /dev/null differ
index 2c44150..a342fec 100644 (file)
@@ -1395,7 +1395,7 @@ class ParserTest {
        /**
         * Print a skipped message.
         *
-        * @return boolean
+        * @return bool
         */
        protected function showSkipped() {
                if ( $this->showProgress ) {
index 08637c6..e164b12 100644 (file)
@@ -4357,7 +4357,7 @@ External links: wiki links within external link (Bug 3695)
 <p><a rel="nofollow" class="external text" href="http://example.com"></a><a href="/index.php?title=Wikilink&amp;action=edit&amp;redlink=1" class="new" title="Wikilink (page does not exist)">wikilink</a><a rel="nofollow" class="external text" href="http://example.com"> embedded in ext link</a>
 </p>
 !! html/parsoid
-<p><a rel="mw:ExtLink" href="http://example.com"></a><a rel="mw:WikiLink" href="./Wikilink">wikilink</a><span> embedded in ext link</span></p>
+<p><a rel="mw:ExtLink" href="http://example.com"></a><a rel="mw:WikiLink" href="./Wikilink" title="Wikilink">wikilink</a><span> embedded in ext link</span></p>
 !! end
 
 !! test
@@ -4590,7 +4590,7 @@ External link containing double-single-quotes with no space separating the url f
 !! html/php+tidy
 <p><a rel="nofollow" class="external text" href="http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm"><i>La muerte de Casagemas</i> (1901) en el sitio de</a> <a href="/index.php?title=Museo_Picasso_(Par%C3%ADs)&amp;action=edit&amp;redlink=1" class="new" title="Museo Picasso (París) (page does not exist)">Museo Picasso</a>.</p>
 !! html/parsoid
-<p><a rel="mw:ExtLink" href="http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm"><i>La muerte de Casagemas</i> (1901) en el sitio de </a><a rel="mw:WikiLink" href="./Museo_Picasso_(París)">Museo Picasso</a><span>.</span></p>
+<p><a rel="mw:ExtLink" href="http://www.musee-picasso.fr/pages/page_id18528_u1l2.htm"><i>La muerte de Casagemas</i> (1901) en el sitio de </a><a rel="mw:WikiLink" href="./Museo_Picasso_(París)" title="Museo Picasso (París)">Museo Picasso</a><span>.</span></p>
 !! end
 
 !! test
@@ -5847,7 +5847,7 @@ Piped link with multiple pipe characters in link text
 <p><a href="/wiki/Main_Page" title="Main Page">|The|Main|Page|</a>
 </p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="Main_Page">|The|Main|Page|</a></p>
+<p><a rel="mw:WikiLink" href="Main_Page" title="Main Page">|The|Main|Page|</a></p>
 !! end
 
 !! test
@@ -5992,7 +5992,7 @@ Anchor containing a #. (bug 63430)
 <p><a href="/wiki/Main_Page#And.23Link" title="Main Page">Main Page#And#Link</a>
 </p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="./Main_Page#And%23Link">Main Page#And#Link</a></p>
+<p><a rel="mw:WikiLink" href="./Main_Page#And%23Link" title="Main Page">Main Page#And#Link</a></p>
 !! end
 
 !! test
@@ -6038,7 +6038,7 @@ parsoid=html2wt,html2html
 !! wikitext
 [[MemoryAlpha:AlphaTest]]
 !! html
-<p><a rel="mw:WikiLink" href="./MemoryAlpha:AlphaTest">MemoryAlpha:AlphaTest</a>
+<p><a rel="mw:WikiLink" href="./MemoryAlpha:AlphaTest" title="MemoryAlpha:AlphaTest">MemoryAlpha:AlphaTest</a>
 </p>
 !! end
 
@@ -6074,7 +6074,7 @@ Link containing % (not as a hex sequence)
 <p><a href="/wiki/7%25_Solution" title="7% Solution">7% Solution</a>
 </p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="./7%25_Solution">7% Solution</a></p>
+<p><a rel="mw:WikiLink" href="./7%25_Solution" title="7% Solution">7% Solution</a></p>
 !! end
 
 # note that the parsoid HTML is identical to the previous test output,
@@ -6090,7 +6090,7 @@ parsoid=wt2wt,wt2html,html2html
 <p><a href="/wiki/7%25_Solution" title="7% Solution">7% Solution</a>
 </p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="./7%25_Solution">7% Solution</a></p>
+<p><a rel="mw:WikiLink" href="./7%25_Solution" title="7% Solution">7% Solution</a></p>
 !!end
 
 !! test
@@ -6113,7 +6113,7 @@ Example for such a section: == < ==
 <p><a href="#.3C">#&lt;</a><a href="#.3E">#&gt;</a>
 </p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="./Main%20Page#%3C">#&lt;</a><a rel="mw:WikiLink" href="./Main%20Page#%3E">#></a></p>
+<p><a rel="mw:WikiLink" href="./Main%20Page#%3C" title="Main Page">#&lt;</a><a rel="mw:WikiLink" href="./Main%20Page#%3E" title="Main Page">#></a></p>
 !! end
 
 !! test
@@ -6133,7 +6133,7 @@ Link containing an equals sign
 <p><a href="/wiki/Special:BookSources/isbn%3D4-00-026157-6" title="Special:BookSources/isbn=4-00-026157-6">Special:BookSources/isbn=4-00-026157-6</a>
 </p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="./Special:BookSources/isbn=4-00-026157-6">Special:BookSources/isbn=4-00-026157-6</a></p>
+<p><a rel="mw:WikiLink" href="./Special:BookSources/isbn=4-00-026157-6" title="Special:BookSources/isbn=4-00-026157-6">Special:BookSources/isbn=4-00-026157-6</a></p>
 !! end
 
 !! article
@@ -6153,7 +6153,7 @@ Link containing a tilde
 <p><a href="/wiki/Foo%7Ebar" title="Foo~bar">Foo~bar</a>
 </p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="./Foo~bar">Foo~bar</a></p>
+<p><a rel="mw:WikiLink" href="./Foo~bar" title="Foo~bar">Foo~bar</a></p>
 !! end
 
 !! test
@@ -6164,7 +6164,7 @@ Link containing double-single-quotes '' (bug 4598)
 <p><a href="/index.php?title=Lista_d%27%27e_paise_d%27%27o_munno&amp;action=edit&amp;redlink=1" class="new" title="Lista d''e paise d''o munno (page does not exist)">Lista d''e paise d''o munno</a>
 </p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="./Lista_d''e_paise_d''o_munno">Lista d''e paise d''o munno</a></p>
+<p><a rel="mw:WikiLink" href="./Lista_d''e_paise_d''o_munno" title="Lista d''e paise d''o munno">Lista d''e paise d''o munno</a></p>
 !! end
 
 !! test
@@ -6175,7 +6175,7 @@ Some [[Link|pretty ''italics'' and stuff]]!
 <p>Some <a href="/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (page does not exist)">pretty <i>italics</i> and stuff</a>!
 </p>
 !! html/parsoid
-<p>Some <a rel="mw:WikiLink" href="Link">pretty <i>italics</i> and stuff</a>!</p>
+<p>Some <a rel="mw:WikiLink" href="Link" title="Link">pretty <i>italics</i> and stuff</a>!</p>
 !! end
 
 !! test
@@ -6205,9 +6205,9 @@ Link with double quotes in title part (literal) and alternate part (interpreted)
 </p>
 !! html/parsoid
 <meta typeof="mw:Placeholder"/>
-<p><a rel="mw:WikiLink" href="''Pentecoste''">''Pentecoste''</a></p>
-<p><a rel="mw:WikiLink" href="''Pentecoste''">Pentecoste</a></p>
-<p><a rel="mw:WikiLink" href="''Pentecoste''"><i>Pentecoste</i></a></p>
+<p><a rel="mw:WikiLink" href="''Pentecoste''" title="''Pentecoste''">''Pentecoste''</a></p>
+<p><a rel="mw:WikiLink" href="''Pentecoste''" title="''Pentecoste''">Pentecoste</a></p>
+<p><a rel="mw:WikiLink" href="''Pentecoste''" title="''Pentecoste''"><i>Pentecoste</i></a></p>
 !! end
 
 !! test
@@ -6308,7 +6308,7 @@ BUG 2: [[page|http://url/]] should link to page, not http://url/
 <p><a href="/wiki/Main_Page" title="Main Page">http://url/</a>
 </p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="./Main_Page">http://url/</a></p>
+<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">http://url/</a></p>
 !! end
 
 # Parsoid does not mark self-links, by design.
@@ -6324,7 +6324,7 @@ title=[[Bug462]]
 !! html/php+tidy
 <p><strong class="selflink">Bug462</strong> <strong class="selflink">Bug462</strong></p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="./Bug462">Bug462</a> <a rel="mw:WikiLink" href="./Bug462">Bug462</a></p>
+<p><a rel="mw:WikiLink" href="./Bug462" title="Bug462">Bug462</a> <a rel="mw:WikiLink" href="./Bug462" title="Bug462">Bug462</a></p>
 !! end
 
 !! test
@@ -6447,7 +6447,7 @@ Link with multiple ":" in a subpage-supporting namespace (bug 63636)
 <p><a href="/index.php?title=User:Foo/Test/63636:Bar&amp;action=edit&amp;redlink=1" class="new" title="User:Foo/Test/63636:Bar (page does not exist)">Test</a>
 </p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="./User:Foo/Test/63636:Bar">Test</a></p>
+<p><a rel="mw:WikiLink" href="./User:Foo/Test/63636:Bar" title="User:Foo/Test/63636:Bar">Test</a></p>
 !! end
 
 !! test
@@ -6470,7 +6470,7 @@ parsoid
 !! wikitext
 {{echo|[[Foo]]}}l
 !! html
-<p><a rel="mw:WikiLink" href="Foo" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Foo]]"}},"i":0}},"l"]}'>Fool</a></p>
+<p><a rel="mw:WikiLink" href="Foo" title="Foo" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Foo]]"}},"i":0}},"l"]}'>Fool</a></p>
 !! end
 
 !! test
@@ -6480,7 +6480,7 @@ parsoid
 !! wikitext
 {{echo|Some [[Fool]]}}s
 !! html
-<p data-parsoid='{}'><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]"}},"i":0}},"s"]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>Some </span><a rel="mw:WikiLink" href="./Fool" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a></p>
+<p data-parsoid='{}'><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]"}},"i":0}},"s"]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>Some </span><a rel="mw:WikiLink" href="./Fool" title="Fool" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a></p>
 !! end
 
 !! test
@@ -6490,7 +6490,7 @@ parsoid
 !! wikitext
 {{echo|Some [[Fool]]s are '''bold and foolish'''}}
 !! html
-<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]s are &#39;&#39;&#39;bold and foolish&#39;&#39;&#39;"}},"i":0}}]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>Some <a rel="mw:WikiLink" href="./Fool" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a> are <b data-parsoid="{}">bold and foolish</b></p>
+<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"Some [[Fool]]s are &#39;&#39;&#39;bold and foolish&#39;&#39;&#39;"}},"i":0}}]}' data-parsoid='{"pi":[[{"k":"1","spc":["","","",""]}]]}'>Some <a rel="mw:WikiLink" href="./Fool" title="Fool" data-parsoid='{"stx":"simple","a":{"href":"./Fool"},"sa":{"href":"Fool"},"tail":"s"}'>Fools</a> are <b data-parsoid="{}">bold and foolish</b></p>
 !! end
 
 !! article
@@ -6542,7 +6542,7 @@ parsoid=html2wt,html2html
 !! wikitext
 [[apple]]<nowiki/>s
 !! html
-<p><a rel="mw:WikiLink" href="Apple">apple</a>s</p>
+<p><a rel="mw:WikiLink" href="Apple" title="Apple">apple</a>s</p>
 !! end
 
 !! test
@@ -6553,7 +6553,7 @@ parsoid=html2wt,html2html
 !! wikitext
 Aðrir mótmælenda<nowiki/>[[söfnuður]]
 !! html
-<p>Aðrir mótmælenda<a rel="mw:WikiLink" href="Söfnuður">söfnuður</a></p>
+<p>Aðrir mótmælenda<a rel="mw:WikiLink" href="Söfnuður" title="Söfnuður">söfnuður</a></p>
 !! end
 
 !! test
@@ -6581,7 +6581,7 @@ parsoid
 !! wikitext
 [[Foo|{{echo|a}} b {{echo|c}}]]
 !! html
-<p><a rel="mw:WikiLink" href="Foo"><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a"}},"i":0}}]}'>a</span> b <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"c"}},"i":0}}]}'>c</span></a></p>
+<p><a rel="mw:WikiLink" href="Foo" title="Foo"><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a"}},"i":0}}]}'>a</span> b <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"c"}},"i":0}}]}'>c</span></a></p>
 !! end
 
 !! test
@@ -6592,7 +6592,7 @@ Link with angle bracket after anchor
 <p><a href="/wiki/Foo#.3Cbar.3E" title="Foo">Foo#&lt;bar&gt;</a>
 </p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="./Foo#%3Cbar%3E" data-parsoid='{"stx":"simple","a":{"href":"./Foo#%3Cbar%3E"},"sa":{"href":"Foo#&lt;bar>"}}'>Foo#&lt;bar></a></p>
+<p><a rel="mw:WikiLink" href="./Foo#%3Cbar%3E" title="Foo" data-parsoid='{"stx":"simple","a":{"href":"./Foo#%3Cbar%3E"},"sa":{"href":"Foo#&lt;bar>"}}'>Foo#&lt;bar></a></p>
 !! end
 
 ###
@@ -6657,6 +6657,8 @@ Different interwiki prefixes mapping to the same URL
 [[wikipedia:en:Foo]]
 
 [[:wikipedia:en:Foo]]
+
+[[  wikiPEdia :Foo]]
 !! html/parsoid
 <p><a rel="mw:ExtLink" href="//en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"//en.wikipedia.org/wiki/Foo"},"sa":{"href":":en:Foo"},"isIW":true}'>en:Foo</a></p>
 
@@ -6669,6 +6671,8 @@ Different interwiki prefixes mapping to the same URL
 <p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/en:Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/en:Foo"},"sa":{"href":"wikipedia:en:Foo"},"isIW":true}'>wikipedia:en:Foo</a></p>
 
 <p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/en:Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/en:Foo"},"sa":{"href":":wikipedia:en:Foo"},"isIW":true}'>wikipedia:en:Foo</a></p>
+
+<p><a rel="mw:ExtLink" href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"stx":"simple","a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"  wikiPEdia :Foo"},"isIW":true}'>  wikiPEdia :Foo</a></p>
 !! end
 
 !! test
@@ -6782,6 +6786,21 @@ Blah blah blah
 <link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese"/></p>
 !! end
 
+!! test
+Interlanguage link variations
+!! wikitext
+Blah blah blah
+[[   es :Spanish]]
+[[ ZH :Chinese]]
+!! html/php
+<p>Blah blah blah
+</p>
+!! html/parsoid
+<p>Blah blah blah
+<link rel="mw:PageProp/Language" href="//es.wikipedia.org/wiki/Spanish" data-parsoid='{"stx":"simple","a":{"href":"//es.wikipedia.org/wiki/Spanish"},"sa":{"href":"   es :Spanish"}}'/>
+<link rel="mw:PageProp/Language" href="//zh.wikipedia.org/wiki/Chinese" data-parsoid='{"stx":"simple","a":{"href":"//zh.wikipedia.org/wiki/Chinese"},"sa":{"href":" ZH :Chinese"}}'/>
+!! end
+
 !! test
 Interlanguage link, with prefix links
 !! options
@@ -6860,9 +6879,9 @@ parsoid
 
 [[constructor:foo]]
 !! html
-<p><a rel="mw:WikiLink" href="./Constructor" data-parsoid="{&quot;stx&quot;:&quot;simple&quot;,&quot;a&quot;:{&quot;href&quot;:&quot;./Constructor&quot;},&quot;sa&quot;:{&quot;href&quot;:&quot;constructor&quot;}}">constructor</a></p>
+<p><a rel="mw:WikiLink" href="./Constructor" title="Constructor" data-parsoid="{&quot;stx&quot;:&quot;simple&quot;,&quot;a&quot;:{&quot;href&quot;:&quot;./Constructor&quot;},&quot;sa&quot;:{&quot;href&quot;:&quot;constructor&quot;}}">constructor</a></p>
 
-<p><a rel="mw:WikiLink" href="./Foo" data-parsoid="{&quot;stx&quot;:&quot;simple&quot;,&quot;a&quot;:{&quot;href&quot;:&quot;./Foo&quot;},&quot;sa&quot;:{&quot;href&quot;:&quot;constructor:foo&quot;}}">constructor:foo</a></p>
+<p><a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid="{&quot;stx&quot;:&quot;simple&quot;,&quot;a&quot;:{&quot;href&quot;:&quot;./Foo&quot;},&quot;sa&quot;:{&quot;href&quot;:&quot;constructor:foo&quot;}}">constructor:foo</a></p>
 !! end
 
 !! test
@@ -6892,7 +6911,7 @@ parsoid
 !! wikitext
 [[en:Foo]]
 !! html
-<p><a rel="mw:WikiLink" href="./Foo" data-parsoid='{"stx":"simple","a":{"href":"./Foo"},"sa":{"href":"en:Foo"}}'>Foo</a></p>
+<p><a rel="mw:WikiLink" href="./Foo" title="Foo" data-parsoid='{"stx":"simple","a":{"href":"./Foo"},"sa":{"href":"en:Foo"}}'>Foo</a></p>
 !! end
 
 !! test
@@ -7021,7 +7040,7 @@ parsoid=wt2html,html2html
 !! wikitext
 #REDIRECT [[:Category:Foo]]
 !! html
-<p><a rel="mw:WikiLink" href="Category:Foo">Category:Foo</a></p>
+<p><a rel="mw:WikiLink" href="Category:Foo" title="Category:Foo">Category:Foo</a></p>
 !! end
 
 !! test
@@ -7181,7 +7200,7 @@ Handling html with a br self-closing tag
 <br title=bar />
 <br title=bar/>
 <br title=bar/ >
-!! html
+!! html/php
 <p><br title="title" />
 <br title="title" />
 <br />
@@ -7189,6 +7208,14 @@ Handling html with a br self-closing tag
 <br title="bar" />
 <br title="bar/" />
 </p>
+!! html/parsoid
+<p><br title="" />
+<br title="" />
+<br />
+<br title="bar" />
+<br title="bar" />
+<br title="bar/" />
+</p>
 !! end
 
 !! test
@@ -8550,6 +8577,14 @@ Template with invalid target containing wikilink
 <p><span typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":[{"template":{"target":{"wt":"[[Main Page]]"},"params":{},"i":0}}]}'>{{</span><a rel="mw:WikiLink" href="./Main_Page" about="#mwt1">Main Page</a><span about="#mwt1">}}</span></p>
 !! end
 
+!! test
+Template with just whitespace in it, bug #68421
+!! wikitext
+{{echo|{{ }}}}
+!! html/parsoid
+<p><span typeof="mw:Transclusion mw:Nowiki" about="#mwt1" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"{{ }}"}},"i":0}}]}'>{{ }}</span></p>
+!! end
+
 !! article
 Template:test
 !! text
@@ -9526,6 +9561,17 @@ Templates: Block Tags: 2. Back-to-back template uses
 
 !!end
 
+# This is an edge case relating to paragraph wrapping.
+!!test
+Templates: Correctly encapsulate templates producing </p> tag without a corresponding <p> tag
+!! wikitext
+{{echo|a
+b</p>}}
+!! html/parsoid
+<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\nb&lt;/p>"}},"i":0}}]}'>a
+b</p><p></p>
+!!end
+
 !!test
 Templates: Links: 1. Simple example
 !! wikitext
@@ -10856,9 +10902,9 @@ thumbsize=220
 <div class="thumb tright"><div class="thumbinner" style="width:222px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" width="220" height="25" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/330px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/440px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Caption <a href="/index.php?title=Link1&amp;action=edit&amp;redlink=1" class="new" title="Link1 (page does not exist)">Link1</a> [[]] <a href="/index.php?title=Link2&amp;action=edit&amp;redlink=1" class="new" title="Link2 (page does not exist)">Link2</a></div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"Caption [[Link1]]\n[[]]\n[[Link2]]\n"}],"dsr":[0,59,2,2]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"dsr":[2,null,null,null]}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption data-parsoid='{"dsr":[null,57,null,null]}'>Caption <a rel="mw:WikiLink" href="./Link1" data-parsoid='{"stx":"simple","a":{"href":"./Link1"},"sa":{"href":"Link1"},"dsr":[32,41,2,2]}'>Link1</a>
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"Caption [[Link1]]\n[[]]\n[[Link2]]\n"}],"dsr":[0,59,2,2]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"dsr":[2,null,null,null]}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption data-parsoid='{"dsr":[null,57,null,null]}'>Caption <a rel="mw:WikiLink" href="./Link1" title="Link1" data-parsoid='{"stx":"simple","a":{"href":"./Link1"},"sa":{"href":"Link1"},"dsr":[32,41,2,2]}'>Link1</a>
 [[]]
-<a rel="mw:WikiLink" href="./Link2" data-parsoid='{"stx":"simple","a":{"href":"./Link2"},"sa":{"href":"Link2"},"dsr":[47,56,2,2]}'>Link2</a>
+<a rel="mw:WikiLink" href="./Link2" title="Link2" data-parsoid='{"stx":"simple","a":{"href":"./Link2"},"sa":{"href":"Link2"},"dsr":[47,56,2,2]}'>Link2</a>
 </figcaption></figure>
 !! end
 
@@ -11241,7 +11287,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tleft"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption">This is a test image <a href="/wiki/Main_Page" title="Main Page">Main Page</a></div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>This is a test image <a rel="mw:WikiLink" href="Main_Page">Main Page</a></figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>This is a test image <a rel="mw:WikiLink" href="Main_Page" title="Main Page">Main Page</a></figcaption></figure>
 !! end
 
 !! test
@@ -11254,7 +11300,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tleft"><div class="thumbinner" style="width:1943px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Altitude" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" class="thumbimage" /></a>  <div class="thumbcaption">This is a test image <a href="/wiki/Main_Page" title="Main Page">Main Page</a></div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img alt="Altitude" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>This is a test image <a rel="mw:WikiLink" href="Main_Page">Main Page</a></figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Frame"><a href="File:Foobar.jpg"><img alt="Altitude" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" height="220" width="1941"/></a><figcaption>This is a test image <a rel="mw:WikiLink" href="Main_Page" title="Main Page">Main Page</a></figcaption></figure>
 !! end
 
 !! test
@@ -11669,7 +11715,7 @@ parsoid=wt2html,wt2wt,html2html
 <p>[[Image:Foobar.jpg|thumb|This is a broken caption. But <a href="/wiki/Main_Page" title="Main Page">this</a> is just an ordinary link.
 </p>
 !! html/parsoid
-<p>[[Image:Foobar.jpg|thumb|This is a broken caption. But <a rel="mw:WikiLink" href="Main_Page">this</a> is just an ordinary link.</p>
+<p>[[Image:Foobar.jpg|thumb|This is a broken caption. But <a rel="mw:WikiLink" href="Main_Page" title="Main Page">this</a> is just an ordinary link.</p>
 !! end
 
 !! test
@@ -12131,8 +12177,8 @@ subpage title=[[Subpage test/1/2/3/4]]
 
 [[../../subpage]]
 !! html
-<p><a rel="mw:WikiLink" href="Subpage_test/1/2/subpage/">subpage</a></p>
-<p><a rel="mw:WikiLink" href="Subpage_test/1/2/subpage">Subpage_test/1/2/subpage</a></p>
+<p><a rel="mw:WikiLink" href="Subpage_test/1/2/subpage/" title="Subpage test/1/2/subpage/">subpage</a></p>
+<p><a rel="mw:WikiLink" href="Subpage_test/1/2/subpage" title="Subpage test/1/2/subpage">Subpage_test/1/2/subpage</a></p>
 !! end
 
 !! test
@@ -12401,8 +12447,8 @@ parsoid
 [[:Category:Foo|Bar]]
 !! html
 <p>
-<a rel="mw:WikiLink" href="Category:Foo">Category:Foo</a>
-<a rel="mw:WikiLink" href="Category:Foo">Bar</a>
+<a rel="mw:WikiLink" href="Category:Foo" title="Category:Foo">Category:Foo</a>
+<a rel="mw:WikiLink" href="Category:Foo" title="Category:Foo">Bar</a>
 </p>
 !! end
 
@@ -12427,8 +12473,8 @@ parsoid
 [[:File:Foo.png|Bar]]
 !! html
 <p>
-<a rel="mw:WikiLink" href="File:Foo.png">File:Foo.png</a>
-<a rel="mw:WikiLink" href="File:Foo.png">Bar</a>
+<a rel="mw:WikiLink" href="File:Foo.png" title="File:Foo.png">File:Foo.png</a>
+<a rel="mw:WikiLink" href="File:Foo.png" title="File:Foo.png">Bar</a>
 </p>
 !! end
 
@@ -13074,6 +13120,31 @@ parsoid
 
 !! end
 
+!! test
+div with multiple empty attribute values
+!! options
+parsoid
+!! wikitext
+<div id= title=>HTML rocks</div>
+!! html
+<div id="" title="">HTML rocks</div>
+
+!! end
+
+!! test
+table with multiple empty attribute values
+!! options
+parsoid
+!! wikitext
+{| title= id=
+| hi
+|}
+!! html
+<table title="" id="">
+<tbody><tr><td> hi</td></tr>
+</tbody></table>
+!! end
+
 # The PHP parser escapes the opening brace to &#123; for some reason, so
 # disabled this test for it.
 !! test
@@ -13456,7 +13527,7 @@ Bug 2095: link with three closing brackets
 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>]
 </p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="./Main_Page">Main Page</a>]</p>
+<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">Main Page</a>]</p>
 !! end
 
 !! test
@@ -13467,7 +13538,7 @@ Bug 2095: link with pipe and three closing brackets
 <p><a href="/wiki/Main_Page" title="Main Page">link</a>]
 </p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="./Main_Page">link</a>]</p>
+<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">link</a>]</p>
 !! end
 
 !! test
@@ -13478,7 +13549,7 @@ Bug 2095: link with pipe and three closing brackets, version 2
 <p><a href="/wiki/Main_Page" title="Main Page">[http://example.com/]</a>
 </p>
 !! html/parsoid
-<p><a rel="mw:WikiLink" href="./Main_Page">[http://example.com/]</a></p>
+<p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">[http://example.com/]</a></p>
 !! end
 
 
@@ -13513,13 +13584,16 @@ Bug 2304: HTML attribute safety (safe template; regression bug 2309)
 
 !! end
 
+# Parsoid has enough context to handle this case
 !! test
 Bug 2304: HTML attribute safety (dangerous template; 2309)
 !! wikitext
 <div title="{{dangerous attribute}}"></div>
-!! html
+!! html/php
 <div title=""></div>
 
+!! html/parsoid
+<div title='" onmouseover="alert(document.cookie)' about="#mwt2" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"title"},{"html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-mw=\"{&amp;quot;parts&amp;quot;:[{&amp;quot;template&amp;quot;:{&amp;quot;target&amp;quot;:{&amp;quot;wt&amp;quot;:&amp;quot;dangerous attribute&amp;quot;,&amp;quot;href&amp;quot;:&amp;quot;./Template:Dangerous_attribute&amp;quot;},&amp;quot;params&amp;quot;:{},&amp;quot;i&amp;quot;:0}}]}\" data-parsoid=\"{&amp;quot;pi&amp;quot;:[[]],&amp;quot;dsr&amp;quot;:[12,35,null,null]}\">\" onmouseover=\"alert(document.cookie)&lt;/span>"}]]}' data-parsoid='{"stx":"html","a":{"title":"\" onmouseover=\"alert(document.cookie)"},"sa":{"title":"{{dangerous attribute}}"}}'></div>
 !! end
 
 !! test
@@ -13853,6 +13927,14 @@ Expansion of multi-line templates in attribute values (bug 6255 sanity check 2)
 
 !! end
 
+!! test
+evil <math>-wiki-tags without Extension:Math enabled
+!! wikitext
+<math><img src="some evil external link"><script>some_evil_javascript();</script></math>
+!! html+tidy
+<p>&lt;math&gt;&lt;img src="some evil external link"&gt;&lt;script&gt;some_evil_javascript();&lt;/script&gt;&lt;/math&gt;</p>
+!! end
+
 ###
 ### Parser hooks (see tests/parser/parserTestsParserHook.php for the <tag> extension)
 ###
@@ -18777,10 +18859,10 @@ A <ref>
 
 <references />
 !! html
-<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"This is a &lt;b data-parsoid=&#39;{\"dsr\":[19,40,3,3]}&#39;>&lt;a rel=\"mw:WikiLink\" href=\"./Bolded_link\" data-parsoid=&#39;{\"stx\":\"simple\",\"a\":{\"href\":\"./Bolded_link\"},\"sa\":{\"href\":\"bolded link\"},\"dsr\":[22,37,2,2]}&#39;>bolded link&lt;/a>&lt;/b> and this is a &lt;span about=\"#mwt3\" typeof=\"mw:Transclusion\" data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"transclusion\"}},\"i\":0}}]}&#39; data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[55,76,null,null]}&#39;>transclusion&lt;/span>\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
+<p>A <span about="#mwt2" class="reference" data-mw='{"name":"ref","body":{"html":"This is a &lt;b data-parsoid=&#39;{\"dsr\":[19,40,3,3]}&#39;>&lt;a rel=\"mw:WikiLink\" href=\"./Bolded_link\" title=\"Bolded link\" data-parsoid=&#39;{\"stx\":\"simple\",\"a\":{\"href\":\"./Bolded_link\"},\"sa\":{\"href\":\"bolded link\"},\"dsr\":[22,37,2,2]}&#39;>bolded link&lt;/a>&lt;/b> and this is a &lt;span about=\"#mwt3\" typeof=\"mw:Transclusion\" data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"transclusion\"}},\"i\":0}}]}&#39; data-parsoid=&#39;{\"pi\":[[{\"k\":\"1\",\"spc\":[\"\",\"\",\"\",\"\"]}]],\"dsr\":[55,76,null,null]}&#39;>transclusion&lt;/span>\n"},"attrs":{}}' id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref"><a href="#cite_note-1">[1]</a></span></p>
 
 <ol class="references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
-<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> This is a <b><a rel="mw:WikiLink" href="./Bolded_link">bolded link</a></b> and this is a <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"transclusion"}},"i":0}}]}'>transclusion</span>
+<li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="#cite_ref-1-0">↑</a></span> This is a <b><a rel="mw:WikiLink" href="./Bolded_link" title="Bolded link">bolded link</a></b> and this is a <span about="#mwt3" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"transclusion"}},"i":0}}]}'>transclusion</span>
 </li>
 </ol>
 !!end
@@ -19526,11 +19608,11 @@ parsoid
 </li>
 </ul>
 <ul>
-<li><a rel="mw:WikiLink" href="Foo">Foo</a>: bar
+<li><a rel="mw:WikiLink" href="Foo" title="Foo">Foo</a>: bar
 </li>
 </ul>
 <ul>
-<li><a rel="mw:WikiLink" href="Foo">Foo</a>*bar
+<li><a rel="mw:WikiLink" href="Foo" title="Foo">Foo</a>*bar
 </li>
 </ul>
 !!end
@@ -19821,7 +19903,7 @@ parsoid
 |}
 !! html
 <table>
-<tbody><tr><td><a rel="mw:WikiLink" href="./Foo">Foo</a>-bar</td>
+<tbody><tr><td><a rel="mw:WikiLink" href="./Foo" title="Foo">Foo</a>-bar</td>
 <td data-parsoid='{"startTagSrc":"|","attrSepSrc":"|"}'>+1</td>
 <td data-parsoid='{"startTagSrc":"|","attrSepSrc":"|"}'>-2</td></tr>
 </tbody></table>
@@ -20430,9 +20512,12 @@ HTML tag with 'unnecessary' entity encoding in attributes
 HTML tag with broken attribute value quoting
 !! wikitext
 <span title="Hello world>Foo</span>
-!! html
+!! html/php
 <p><span>Foo</span>
 </p>
+!! html/parsoid
+<p><span title="Hello world">Foo</span>
+</p>
 !! end
 
 !! test
@@ -20452,12 +20537,18 @@ Table with broken attribute value quoting
 {|
 | title="Hello world|Foo
 |}
-!! html
+!! html/php
 <table>
 <tr>
 <td>Foo
 </td></tr></table>
 
+!! html/parsoid
+<table>
+<tr>
+<td title="Hello world">Foo
+</td></tr></table>
+
 !! end
 
 !! test
index 3eb58fc..5c1994b 100644 (file)
@@ -149,12 +149,19 @@ class OutputPageTest extends MediaWikiTestCase {
                        array(
                                array( array( 'test.baz', 'test.foo', 'test.bar' ), ResourceLoaderModule::TYPE_STYLES ),
                                '<link rel=stylesheet href="http://127.0.0.1:8080/w/load.php?debug=false&amp;lang=en&amp;modules=test.bar%2Cbaz%2Cfoo&amp;only=styles&amp;skin=fallback&amp;*">
+'
+                       ),
+                       // Load private module (scripts)
+                       array(
+                               array( 'test.quux', ResourceLoaderModule::TYPE_SCRIPTS ),
+                               '<script>if(window.mw){mw.test.baz({token:123});mw.loader.state({"test.quux":"ready"});}
+</script>
 '
                        ),
                        // Load private module (combined)
                        array(
                                array( 'test.quux', ResourceLoaderModule::TYPE_COMBINED ),
-                               '<script>if(window.mw){mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"css":[".mw-icon{transition:none}\n"]},{});}
+                               '<script>mw.loader.implement("test.quux",function($,jQuery){mw.test.baz({token:123});},{"css":[".mw-icon{transition:none}\n"]},{});
 </script>
 '
                        ),
index 11f867a..628c59b 100644 (file)
@@ -320,7 +320,7 @@ class StatusTest extends MediaWikiLangTestCase {
        }
 
        /**
-        * @return array of arrays with values;
+        * @return array Array of arrays with values;
         *    0 => status object
         *    1 => expected string (with no context)
         */
@@ -391,7 +391,7 @@ class StatusTest extends MediaWikiLangTestCase {
        }
 
        /**
-        * @return array of arrays with values;
+        * @return array Array of arrays with values;
         *    0 => status object
         *    1 => expected Message parameters (with no context)
         *    2 => expected Message key
index 53e8dc2..d0f418b 100644 (file)
@@ -1,9 +1,6 @@
 <?php
 
 /**
- * @group Database
- *        ^--- needed for language cache stuff
- *
  * @group Title
  */
 class TitleTest extends MediaWikiTestCase {
@@ -20,19 +17,6 @@ class TitleTest extends MediaWikiTestCase {
                ) );
        }
 
-       public function addDBData() {
-               $this->db->replace( 'interwiki', 'iw_prefix',
-                       array(
-                               'iw_prefix' => 'externalwiki',
-                               'iw_url' => '//example.com/$1',
-                               'iw_api' => '//example.com/api.php',
-                               'iw_wikiid' => '',
-                               'iw_local' => 0,
-                               'iw_trans' => 0,
-                       )
-               );
-       }
-
        /**
         * @covers Title::legalChars
         */
@@ -640,7 +624,14 @@ class TitleTest extends MediaWikiTestCase {
                        array( 'Special:SomeNonexistentSpecialPage', false ),
                        array( 'MediaWiki:Parentheses', true ),
                        array( 'MediaWiki:Some nonexistent message', false ),
-                       array( 'externalwiki:Interwiki link', true ),
                );
        }
+
+       /**
+        * @covers Title::isAlwaysKnown
+        */
+       public function testIsAlwaysKnownOnInterwiki() {
+               $title = Title::makeTitle( NS_MAIN, 'Interwiki link', '', 'externalwiki' );
+               $this->assertTrue( $title->isAlwaysKnown() );
+       }
 }
index 19c0a7d..201eed1 100644 (file)
@@ -101,6 +101,8 @@ class ApiModuleManagerTest extends MediaWikiTestCase {
                        $this->assertTrue( $moduleManager->isDefined( $name, $group ), 'isDefined' );
                        $this->assertNotNull( $moduleManager->getModule( $name, $group, true ), 'getModule' );
                }
+
+               $this->assertTrue( true ); // Don't mark the test as risky if $modules is empty
        }
 
        public function getModuleProvider() {
index f633315..cd14194 100644 (file)
@@ -47,7 +47,7 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
         * @param string $text Content of the page
         * @param string $summary Optional summary string for the revision
         * @param int $defaultNs Optional namespace id
-        * @return Array as returned by WikiPage::doEditContent()
+        * @return array Array as returned by WikiPage::doEditContent()
         */
        protected function editPage( $pageName, $text, $summary = '', $defaultNs = NS_MAIN ) {
                $title = Title::newFromText( $pageName, $defaultNs );
@@ -121,7 +121,7 @@ abstract class ApiTestCase extends MediaWikiLangTestCase {
         * @param array $params Key-value API params
         * @param array|null $session Session array
         * @param User|null $user A User object for the context
-        * @return Result of the API call
+        * @return array Result of the API call
         * @throws Exception In case wsToken is not set in the session
         */
        protected function doApiRequestWithToken( array $params, array $session = null,
index 328ea8e..6374cfa 100644 (file)
@@ -328,7 +328,7 @@ class RandomImageGenerator {
         * This is used when simulating a rotated image capture with Exif orientation
         * @param array $spec Returned by getImageSpec
         * @param array $matrix 2x2 transformation matrix
-        * @return array transformed Spec
+        * @return array Transformed Spec
         */
        private static function rotateImageSpec( &$spec, $matrix ) {
                $tSpec = array();
@@ -367,7 +367,7 @@ class RandomImageGenerator {
         * @param array $matrix 2x2 rotation matrix
         * @param int $x The x-coordinate number
         * @param int $y The y-coordinate number
-        * @return Transformed with properties x, y
+        * @return array Transformed with properties x, y
         */
        private static function matrixMultiply2x2( $matrix, $x, $y ) {
                return array(
@@ -432,7 +432,7 @@ class RandomImageGenerator {
         * array( array( 'foo', 'bar' ), array( 'quux', 'baz' ) );
         *
         * @param int $number Number of pairs
-        * @return array two-element arrays
+        * @return array Two-element arrays
         */
        private function getRandomWordPairs( $number ) {
                $lines = $this->getRandomLines( $number * 2 );
@@ -454,7 +454,7 @@ class RandomImageGenerator {
         * @param int $number_desired Number of lines desired
         *
         * @throws Exception
-        * @return Array of exactly n elements, drawn randomly from lines the file
+        * @return array Array of exactly n elements, drawn randomly from lines the file
         */
        private function getRandomLines( $number_desired ) {
                $filepath = $this->dictionaryFile;
diff --git a/tests/phpunit/includes/api/format/ApiFormatNoneTest.php b/tests/phpunit/includes/api/format/ApiFormatNoneTest.php
new file mode 100644 (file)
index 0000000..cabd750
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+/**
+ * @group API
+ * @group Database
+ * @group medium
+ * @covers ApiFormatNone
+ */
+class ApiFormatNoneTest extends ApiFormatTestBase {
+
+       public function testValidSyntax( ) {
+               $data = $this->apiRequest( 'none', array( 'action' => 'query', 'meta' => 'siteinfo' ) );
+
+               $this->assertEquals( '', $data ); // No output!
+       }
+}
index d986e69..bce6268 100644 (file)
@@ -38,7 +38,7 @@ abstract class ApiQueryContinueTestBase extends ApiQueryTestBase {
         * @param int $expectedCount Max number of iterations
         * @param string $id Unit test id
         * @param bool $continue True to use smart continue
-        * @return Merged results data array
+        * @return array Merged results data array
         */
        protected function checkC( $expected, $params, $expectedCount, $id, $continue = true ) {
                $result = $this->query( $params, $expectedCount, $id, $continue );
@@ -51,7 +51,7 @@ abstract class ApiQueryContinueTestBase extends ApiQueryTestBase {
         * @param int $expectedCount Max number of iterations
         * @param string $id Unit test id
         * @param bool $useContinue True to use smart continue
-        * @return Merged results data array
+        * @return array Merged results data array
         * @throws Exception
         */
        protected function query( $params, $expectedCount, $id, $useContinue = true ) {
index 042ae93..f744973 100644 (file)
@@ -448,7 +448,7 @@ class DummyContentForTesting extends AbstractContent {
         * Returns native represenation of the data. Interpretation depends on the data model used,
         * as given by getDataModel().
         *
-        * @return mixed the native representation of the content. Could be a string, a nested array
+        * @return mixed The native representation of the content. Could be a string, a nested array
         *  structure, an object, a binary blob... anything, really.
         */
        public function getNativeData() {
@@ -476,7 +476,7 @@ class DummyContentForTesting extends AbstractContent {
         * return $this. That is,  $copy === $original may be true, but only for imutable content
         * objects.
         *
-        * @return Content. A copy of this object.
+        * @return Content A copy of this object
         */
        public function copy() {
                return $this;
index 4ff6165..447bf21 100644 (file)
@@ -115,7 +115,7 @@ abstract class ORMRowTest extends \MediaWikiTestCase {
 
        /**
         * @since 1.20
-        * @return array of IORMRow
+        * @return array Array of IORMRow
         */
        public function instanceProvider() {
                $instances = array();
diff --git a/tests/phpunit/includes/deferred/DeferredUpdatesTest.php b/tests/phpunit/includes/deferred/DeferredUpdatesTest.php
new file mode 100644 (file)
index 0000000..b3d57e7
--- /dev/null
@@ -0,0 +1,38 @@
+<?php
+
+class DeferredUpdatesTest extends MediaWikiTestCase {
+
+       public function testDoUpdates() {
+               $updates = array (
+                       '1' => 'deferred update 1',
+                       '2' => 'deferred update 2',
+                       '3' => 'deferred update 3',
+                       '2-1' => 'deferred update 1 within deferred update 2',
+               );
+               DeferredUpdates::addCallableUpdate(
+                       function () use ( $updates ) {
+                               echo $updates['1'];
+                       }
+               );
+               DeferredUpdates::addCallableUpdate(
+                       function () use ( $updates ) {
+                               echo $updates['2'];
+                               DeferredUpdates::addCallableUpdate(
+                                       function() use ( $updates ) {
+                                               echo $updates['2-1'];
+                                       }
+                               );
+                       }
+               );
+               DeferredUpdates::addCallableUpdate(
+                       function () use ( $updates ) {
+                               echo $updates[3];
+                       }
+               );
+
+               $this->expectOutputString( implode( '', $updates ) );
+
+               DeferredUpdates::doUpdates();
+       }
+
+}
index e1a69e3..5474b96 100644 (file)
@@ -39,7 +39,7 @@ class DifferenceEngineTest extends MediaWikiTestCase {
        }
 
        /**
-        * @return int[] revision ids
+        * @return int[] Revision ids
         */
        protected function doEdits() {
                $title = $this->getTitle();
index 8e56245..8f28158 100644 (file)
@@ -33,7 +33,7 @@ abstract class MediaWikiMediaTestCase extends MediaWikiTestCase {
        }
 
        /**
-        * @return Array Argument for FSRepo constructor
+        * @return array Argument for FSRepo constructor
         */
        protected function getRepoOptions() {
                return array(
@@ -47,7 +47,7 @@ abstract class MediaWikiMediaTestCase extends MediaWikiTestCase {
         * The result of this method will set the file path to use,
         * as well as the protected member $filePath
         *
-        * @return String path where files are
+        * @return string Path where files are
         */
        protected function getFilePath() {
                return __DIR__ . '/../../data/media/';
@@ -59,7 +59,7 @@ abstract class MediaWikiMediaTestCase extends MediaWikiTestCase {
         *
         * Override this method if your test case creates thumbnails
         *
-        * @return boolean
+        * @return bool
         */
        protected function createsThumbnails() {
                return false;
index 12aac69..7b2a1da 100644 (file)
@@ -26,6 +26,24 @@ class TidyTest extends MediaWikiTestCase {
        }
 
        public function provideTestWrapping() {
+               $testMathML = <<<'MathML'
+<math xmlns="http://www.w3.org/1998/Math/MathML">
+    <mrow>
+      <mi>a</mi>
+      <mo>&InvisibleTimes;</mo>
+      <msup>
+        <mi>x</mi>
+        <mn>2</mn>
+      </msup>
+      <mo>+</mo>
+      <mi>b</mi>
+      <mo>&InvisibleTimes; </mo>
+      <mi>x</mi>
+      <mo>+</mo>
+      <mi>c</mi>
+    </mrow>
+  </math>
+MathML;
                return array(
                        array(
                                '<mw:editsection page="foo" section="bar">foo</mw:editsection>',
@@ -40,6 +58,7 @@ class TidyTest extends MediaWikiTestCase {
                        array( '<mw:toc>foo</mw:toc>', '<mw:toc>foo</mw:toc>', '<mw:toc> should survive tidy' ),
                        array( "<link foo=\"bar\" />\nfoo", '<link foo="bar"/>foo', '<link> should survive tidy' ),
                        array( "<meta foo=\"bar\" />\nfoo", '<meta foo="bar"/>foo', '<meta> should survive tidy' ),
+                       array( $testMathML , $testMathML, '<math> should survive tidy' ),
                );
        }
 }
index 7b7c7f8..36c56a9 100644 (file)
@@ -35,4 +35,34 @@ class SkinFactoryTest extends MediaWikiTestCase {
                $this->setExpectedException( 'UnexpectedValueException' );
                $factory->makeSkin( 'unittest' );
        }
+
+       /**
+        * @covers SkinFactory::makeSkin
+        */
+       public function testMakeSkinWithValidCallback() {
+               $factory = new SkinFactory();
+               $factory->register( 'testfallback', 'TestFallback', function () {
+                       return new SkinFallback();
+               } );
+
+               $skin = $factory->makeSkin( 'testfallback' );
+               $this->assertInstanceOf( 'Skin', $skin );
+               $this->assertInstanceOf( 'SkinFallback', $skin );
+       }
+
+       /**
+        * @covers SkinFactory::getSkinNames
+        */
+       public function testGetSkinNames() {
+               $factory = new SkinFactory();
+               // A fake callback we can use that will never be called
+               $callback = function() {};
+               $factory->register( 'skin1', 'Skin1', $callback );
+               $factory->register( 'skin2', 'Skin2', $callback );
+               $names = $factory->getSkinNames();
+               $this->assertArrayHasKey( 'skin1', $names );
+               $this->assertArrayHasKey( 'skin2', $names );
+               $this->assertEquals( 'Skin1', $names['skin1'] );
+               $this->assertEquals( 'Skin2', $names['skin2'] );
+       }
 }
diff --git a/tests/phpunit/includes/specials/ImageListPagerTest.php b/tests/phpunit/includes/specials/ImageListPagerTest.php
new file mode 100644 (file)
index 0000000..8a0ac97
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Test class for ImageListPagerTest class.
+ *
+ * Copyright © 2013, Antoine Musso
+ * Copyright © 2013, Siebrand Mazeland
+ * Copyright © 2013, Wikimedia Foundation Inc.
+ *
+ */
+
+class ImageListPagerTest extends MediaWikiTestCase {
+       /**
+        * @expectedException MWException
+        * @expectedExceptionMessage invalid_field
+        * @covers ImageListPager::formatValue
+        */
+       public function testFormatValuesThrowException() {
+               $page = new ImageListPager( RequestContext::getMain() );
+               $page->formatValue( 'invalid_field', 'invalid_value' );
+       }
+}
diff --git a/tests/phpunit/includes/specials/SpecialListFilesTest.php b/tests/phpunit/includes/specials/SpecialListFilesTest.php
deleted file mode 100644 (file)
index c042064..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-/**
- * Test class for SpecialListFiles class.
- *
- * Copyright © 2013, Antoine Musso
- * Copyright © 2013, Siebrand Mazeland
- * Copyright © 2013, Wikimedia Foundation Inc.
- *
- */
-
-class SpecialListFilesTest extends MediaWikiTestCase {
-       /**
-        * @expectedException MWException
-        * @expectedExceptionMessage invalid_field
-        * @covers ImageListPager::formatValue
-        */
-       public function testFormatValuesThrowException() {
-               $page = new ImageListPager( RequestContext::getMain() );
-               $page->formatValue( 'invalid_field', 'invalid_value' );
-       }
-}
index 3be9f2c..83489c6 100644 (file)
@@ -8,7 +8,6 @@
  */
 
 class SpecialSearchTest extends MediaWikiTestCase {
-       private $search;
 
        /**
         * @covers SpecialSearch::load
index ec51441..cff2e8f 100644 (file)
@@ -276,7 +276,7 @@ class LanguageTest extends LanguageClassesTestCase {
        }
 
        /**
-        * @return array format is ($len, $ellipsis, $input, $expected)
+        * @return array Format is ($len, $ellipsis, $input, $expected)
         */
        public static function provideHTMLTruncateData() {
                return array(
index 016b7e0..a37a97c 100644 (file)
@@ -434,7 +434,7 @@ class TextPassDumperTest extends DumpTestCase {
         *   revision id increase further and further, while the text
         *   id of the first iteration is reused. The pages and revision
         *   of iteration > 1 have no corresponding representation in the database.
-        * @return string absolute filename of the stub
+        * @return string Absolute filename of the stub
         */
        private function setUpStub( $fname = null, $iterations = 1 ) {
                if ( $fname === null ) {
index 647386d..7576602 100644 (file)
@@ -45,6 +45,7 @@ class ResourcesTest extends MediaWikiTestCase {
                $data = self::getAllModules();
                $illegalDeps = array( 'jquery', 'mediawiki' );
 
+               /** @var ResourceLoaderModule $module */
                foreach ( $data['modules'] as $moduleName => $module ) {
                        foreach ( $illegalDeps as $illegalDep ) {
                                $this->assertNotContains(
@@ -63,6 +64,7 @@ class ResourcesTest extends MediaWikiTestCase {
                $data = self::getAllModules();
                $validDeps = array_keys( $data['modules'] );
 
+               /** @var ResourceLoaderModule $module */
                foreach ( $data['modules'] as $moduleName => $module ) {
                        foreach ( $module->getDependencies() as $dep ) {
                                $this->assertContains(
@@ -85,6 +87,7 @@ class ResourcesTest extends MediaWikiTestCase {
                $data = self::getAllModules();
                $validDeps = array_keys( $data['modules'] );
 
+               /** @var ResourceLoaderModule $module */
                foreach ( $data['modules'] as $moduleName => $module ) {
                        $moduleTargets = $module->getTargets();
                        foreach ( $module->getDependencies() as $dep ) {