Merge "Sanitizer::safeEncodeAttribute(): also encode ]"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 21 Nov 2017 21:18:46 +0000 (21:18 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 21 Nov 2017 21:18:46 +0000 (21:18 +0000)
105 files changed:
RELEASE-NOTES-1.31
autoload.php
includes/GlobalFunctions.php
includes/Html.php
includes/api/ApiBase.php
includes/api/ApiHelp.php
includes/api/ApiParamInfo.php
includes/api/i18n/en.json
includes/api/i18n/qqq.json
includes/changes/ChangesList.php
includes/diff/DifferenceEngine.php
includes/htmlform/OOUIHTMLForm.php
includes/htmlform/fields/HTMLMultiSelectField.php
includes/installer/i18n/eu.json
includes/installer/i18n/fr.json
includes/installer/i18n/pl.json
includes/jobqueue/jobs/CategoryMembershipChangeJob.php
includes/libs/filebackend/SwiftFileBackend.php
includes/libs/objectcache/BagOStuff.php
includes/libs/objectcache/CachedBagOStuff.php
includes/libs/objectcache/MemcachedBagOStuff.php
includes/libs/objectcache/MultiWriteBagOStuff.php
includes/libs/objectcache/WANObjectCache.php
includes/linker/LinkTarget.php
includes/mail/MailAddress.php
includes/media/TransformationalImageHandler.php
includes/parser/RemexStripTagHandler.php [new file with mode: 0644]
includes/parser/Sanitizer.php
includes/specials/SpecialUserrights.php
includes/tidy/RemexCompatMunger.php
includes/tidy/RemexMungerData.php
includes/title/TitleValue.php
includes/user/User.php
includes/user/UserIdentity.php [new file with mode: 0644]
languages/LanguageConverter.php
languages/classes/LanguageCrh.php [new file with mode: 0644]
languages/data/CrhExceptions.php [new file with mode: 0644]
languages/i18n/ais.json
languages/i18n/ar.json
languages/i18n/be-tarask.json
languages/i18n/bn.json
languages/i18n/ca.json
languages/i18n/cdo.json
languages/i18n/ce.json
languages/i18n/ckb.json
languages/i18n/crh-cyrl.json
languages/i18n/crh-latn.json
languages/i18n/cs.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/egl.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/eu.json
languages/i18n/fr.json
languages/i18n/gu.json
languages/i18n/he.json
languages/i18n/hr.json
languages/i18n/hy.json
languages/i18n/id.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jv.json
languages/i18n/ko.json
languages/i18n/lb.json
languages/i18n/lv.json
languages/i18n/map-bms.json
languages/i18n/nl.json
languages/i18n/pl.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/sat.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sv.json
languages/i18n/ta.json
languages/i18n/tl.json
languages/i18n/ur.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesCrh.php
languages/messages/MessagesCrh_cyrl.php
languages/messages/MessagesCrh_latn.php
resources/Resources.php
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ItemMenuOptionWidget.js
resources/src/mediawiki.skinning/elements.css
resources/src/mediawiki.special/mediawiki.special.apisandbox.js
resources/src/mediawiki.special/mediawiki.special.css
resources/src/mediawiki.special/mediawiki.special.preferences.styles.css
resources/src/mediawiki.special/mediawiki.special.userrights.css
resources/src/mediawiki.special/mediawiki.special.userrights.js
tests/phpunit/includes/GlobalFunctions/wfStringToBoolTest.php [new file with mode: 0644]
tests/phpunit/includes/HtmlTest.php
tests/phpunit/includes/RevisionDbTestBase.php
tests/phpunit/includes/RevisionTest.php
tests/phpunit/includes/objectcache/MemcachedBagOStuffTest.php
tests/phpunit/includes/parser/SanitizerTest.php
tests/phpunit/includes/tidy/RemexDriverTest.php
tests/phpunit/includes/title/TitleValueTest.php
tests/phpunit/languages/classes/LanguageCrhTest.php [new file with mode: 0644]
tests/phpunit/structure/ApiStructureTest.php

index a76ce0b..f1fd9d3 100644 (file)
@@ -96,6 +96,12 @@ changes to languages because of Phabricator reports.
 * Due to significant refactoring, method ContribsPager::getUserCond() that had
   no access restriction has been removed.
 * Revision::setUserIdAndName() was deprecated.
+* Access to TitleValue class properties was deprecated, the relevant getters
+  should be used instead.
+* DifferenceEngine::getDiffBodyCacheKey() is deprecated. Subclasses should
+  override DifferenceEngine::getDiffBodyCacheKeyParams() instead.
+* The deprecated MW_DIFF_VERSION constant was removed.
+  DifferenceEngine::MW_DIFF_VERSION should be used instead.
 
 == Compatibility ==
 MediaWiki 1.31 requires PHP 5.5.9 or later. There is experimental support for
index ee47eac..5a2156a 100644 (file)
@@ -312,6 +312,7 @@ $wgAutoloadLocalClasses = [
        'CreateAndPromote' => __DIR__ . '/maintenance/createAndPromote.php',
        'CreateFileOp' => __DIR__ . '/includes/libs/filebackend/fileop/CreateFileOp.php',
        'CreditsAction' => __DIR__ . '/includes/actions/CreditsAction.php',
+       'CrhConverter' => __DIR__ . '/languages/classes/LanguageCrh.php',
        'CryptHKDF' => __DIR__ . '/includes/libs/CryptHKDF.php',
        'CryptRand' => __DIR__ . '/includes/libs/CryptRand.php',
        'CssContent' => __DIR__ . '/includes/content/CssContent.php',
@@ -706,6 +707,7 @@ $wgAutoloadLocalClasses = [
        'LanguageBs' => __DIR__ . '/languages/classes/LanguageBs.php',
        'LanguageCode' => __DIR__ . '/languages/LanguageCode.php',
        'LanguageConverter' => __DIR__ . '/languages/LanguageConverter.php',
+       'LanguageCrh' => __DIR__ . '/languages/classes/LanguageCrh.php',
        'LanguageCu' => __DIR__ . '/languages/classes/LanguageCu.php',
        'LanguageDsb' => __DIR__ . '/languages/classes/LanguageDsb.php',
        'LanguageEn' => __DIR__ . '/languages/classes/LanguageEn.php',
@@ -885,6 +887,7 @@ $wgAutoloadLocalClasses = [
        'MediaWiki\\Interwiki\\ClassicInterwikiLookup' => __DIR__ . '/includes/interwiki/ClassicInterwikiLookup.php',
        'MediaWiki\\Interwiki\\InterwikiLookup' => __DIR__ . '/includes/interwiki/InterwikiLookup.php',
        'MediaWiki\\Interwiki\\InterwikiLookupAdapter' => __DIR__ . '/includes/interwiki/InterwikiLookupAdapter.php',
+       'MediaWiki\\Languages\\Data\\CrhExceptions' => __DIR__ . '/languages/data/CrhExceptions.php',
        'MediaWiki\\Languages\\Data\\Names' => __DIR__ . '/languages/data/Names.php',
        'MediaWiki\\Languages\\Data\\ZhConversion' => __DIR__ . '/languages/data/ZhConversion.php',
        'MediaWiki\\Linker\\LinkRenderer' => __DIR__ . '/includes/linker/LinkRenderer.php',
@@ -957,6 +960,7 @@ $wgAutoloadLocalClasses = [
        'MediaWiki\\Tidy\\RemexDriver' => __DIR__ . '/includes/tidy/RemexDriver.php',
        'MediaWiki\\Tidy\\RemexMungerData' => __DIR__ . '/includes/tidy/RemexMungerData.php',
        'MediaWiki\\Tidy\\TidyDriverBase' => __DIR__ . '/includes/tidy/TidyDriverBase.php',
+       'MediaWiki\\User\\UserIdentity' => __DIR__ . '/includes/user/UserIdentity.php',
        'MediaWiki\\Widget\\ComplexNamespaceInputWidget' => __DIR__ . '/includes/widget/ComplexNamespaceInputWidget.php',
        'MediaWiki\\Widget\\ComplexTitleInputWidget' => __DIR__ . '/includes/widget/ComplexTitleInputWidget.php',
        'MediaWiki\\Widget\\DateInputWidget' => __DIR__ . '/includes/widget/DateInputWidget.php',
@@ -1219,6 +1223,7 @@ $wgAutoloadLocalClasses = [
        'RefreshLinks' => __DIR__ . '/maintenance/refreshLinks.php',
        'RefreshLinksJob' => __DIR__ . '/includes/jobqueue/jobs/RefreshLinksJob.php',
        'RegexlikeReplacer' => __DIR__ . '/includes/libs/replacers/RegexlikeReplacer.php',
+       'RemexStripTagHandler' => __DIR__ . '/includes/parser/RemexStripTagHandler.php',
        'RemoveInvalidEmails' => __DIR__ . '/maintenance/removeInvalidEmails.php',
        'RemoveUnusedAccounts' => __DIR__ . '/maintenance/removeUnusedAccounts.php',
        'RenameDbPrefix' => __DIR__ . '/maintenance/renameDbPrefix.php',
index 404d115..bb1951d 100644 (file)
@@ -2225,7 +2225,23 @@ function wfPercent( $nr, $acc = 2, $round = true ) {
  * @return bool
  */
 function wfIniGetBool( $setting ) {
-       $val = strtolower( ini_get( $setting ) );
+       return wfStringToBool( ini_get( $setting ) );
+}
+
+/**
+ * Convert string value to boolean, when the following are interpreted as true:
+ * - on
+ * - true
+ * - yes
+ * - Any number, except 0
+ * All other strings are interpreted as false.
+ *
+ * @param string $val
+ * @return bool
+ * @since 1.31
+ */
+function wfStringToBool( $val ) {
+       $val = strtolower( $val );
        // 'on' and 'true' can't have whitespace around them, but '1' can.
        return $val == 'on'
                || $val == 'true'
index 524fdcd..dfd80a8 100644 (file)
@@ -683,7 +683,7 @@ class Html {
         * @param string $heading (optional)
         * @return string of HTML representing a box.
         */
-       public static function messageBox( $html, $className, $heading = '' ) {
+       private static function messageBox( $html, $className, $heading = '' ) {
                if ( $heading ) {
                        $html = self::element( 'h2', [], $heading ) . $html;
                }
index bf2b977..83d2ae9 100644 (file)
@@ -217,6 +217,18 @@ abstract class ApiBase extends ContextSource {
         */
        const PARAM_ISMULTI_LIMIT2 = 22;
 
+       /**
+        * (integer) Maximum length of a string in bytes (in UTF-8 encoding).
+        * @since 1.31
+        */
+       const PARAM_MAX_BYTES = 23;
+
+       /**
+        * (integer) Maximum length of a string in characters (unicode codepoints).
+        * @since 1.31
+        */
+       const PARAM_MAX_CHARS = 24;
+
        /**@}*/
 
        const ALL_DEFAULT_STRING = '*';
@@ -1173,9 +1185,9 @@ abstract class ApiBase extends ContextSource {
                        );
                }
 
-               // More validation only when choices were not given
-               // choices were validated in parseMultiValue()
                if ( isset( $value ) ) {
+                       // More validation only when choices were not given
+                       // choices were validated in parseMultiValue()
                        if ( !is_array( $type ) ) {
                                switch ( $type ) {
                                        case 'NULL': // nothing to do
@@ -1285,6 +1297,23 @@ abstract class ApiBase extends ContextSource {
                                $value = array_unique( $value );
                        }
 
+                       if ( in_array( $type, [ 'NULL', 'string', 'text', 'password' ], true ) ) {
+                               foreach ( (array)$value as $val ) {
+                                       if ( isset( $paramSettings[self::PARAM_MAX_BYTES] )
+                                               && strlen( $val ) > $paramSettings[self::PARAM_MAX_BYTES]
+                                       ) {
+                                               $this->dieWithError( [ 'apierror-maxbytes', $encParamName,
+                                                       $paramSettings[self::PARAM_MAX_BYTES] ] );
+                                       }
+                                       if ( isset( $paramSettings[self::PARAM_MAX_CHARS] )
+                                               && mb_strlen( $val, 'UTF-8' ) > $paramSettings[self::PARAM_MAX_CHARS]
+                                       ) {
+                                               $this->dieWithError( [ 'apierror-maxchars', $encParamName,
+                                                       $paramSettings[self::PARAM_MAX_CHARS] ] );
+                                       }
+                               }
+                       }
+
                        // Set a warning if a deprecated parameter has been passed
                        if ( $deprecated && $value !== false ) {
                                $feature = $encParamName;
index ea4f724..529b32c 100644 (file)
@@ -713,6 +713,15 @@ class ApiHelp extends ApiBase {
                                                }
                                        }
 
+                                       if ( isset( $settings[self::PARAM_MAX_BYTES] ) ) {
+                                               $info[] = $context->msg( 'api-help-param-maxbytes' )
+                                                       ->numParams( $settings[self::PARAM_MAX_BYTES] );
+                                       }
+                                       if ( isset( $settings[self::PARAM_MAX_CHARS] ) ) {
+                                               $info[] = $context->msg( 'api-help-param-maxchars' )
+                                                       ->numParams( $settings[self::PARAM_MAX_CHARS] );
+                                       }
+
                                        // Add default
                                        $default = isset( $settings[ApiBase::PARAM_DFLT] )
                                                ? $settings[ApiBase::PARAM_DFLT]
index 2fa20a9..93fc51a 100644 (file)
@@ -471,6 +471,12 @@ class ApiParamInfo extends ApiBase {
                        if ( !empty( $settings[ApiBase::PARAM_RANGE_ENFORCE] ) ) {
                                $item['enforcerange'] = true;
                        }
+                       if ( isset( $settings[self::PARAM_MAX_BYTES] ) ) {
+                               $item['maxbytes'] = $settings[self::PARAM_MAX_BYTES];
+                       }
+                       if ( isset( $settings[self::PARAM_MAX_CHARS] ) ) {
+                               $item['maxchars'] = $settings[self::PARAM_MAX_CHARS];
+                       }
                        if ( !empty( $settings[ApiBase::PARAM_DEPRECATED_VALUES] ) ) {
                                $deprecatedValues = array_keys( $settings[ApiBase::PARAM_DEPRECATED_VALUES] );
                                if ( is_array( $item['type'] ) ) {
index dbd5451..85f17de 100644 (file)
        "api-help-param-direction": "In which direction to enumerate:\n;newer:List oldest first. Note: $1start has to be before $1end.\n;older:List newest first (default). Note: $1start has to be later than $1end.",
        "api-help-param-continue": "When more results are available, use this to continue.",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(no description)</span>",
+       "api-help-param-maxbytes": "Cannot be longer than $1 {{PLURAL:$1|byte|bytes}}.",
+       "api-help-param-maxchars": "Cannot be longer than $1 {{PLURAL:$1|character|characters}}.",
        "api-help-examples": "{{PLURAL:$1|Example|Examples}}:",
        "api-help-permissions": "{{PLURAL:$1|Permission|Permissions}}:",
        "api-help-permissions-granted-to": "{{PLURAL:$1|Granted to}}: $2",
        "apierror-invalidurlparam": "Invalid value for <var>$1urlparam</var> (<kbd>$2=$3</kbd>).",
        "apierror-invaliduser": "Invalid username \"$1\".",
        "apierror-invaliduserid": "User ID <var>$1</var> is not valid.",
+       "apierror-maxbytes": "Parameter <var>$1</var> cannot be longer than $2 {{PLURAL:$2|byte|bytes}}",
+       "apierror-maxchars": "Parameter <var>$1</var> cannot be longer than $2 {{PLURAL:$2|character|characters}}",
        "apierror-maxlag-generic": "Waiting for a database server: $1 {{PLURAL:$1|second|seconds}} lagged.",
        "apierror-maxlag": "Waiting for $2: $1 {{PLURAL:$1|second|seconds}} lagged.",
        "apierror-mimesearchdisabled": "MIME search is disabled in Miser Mode.",
index 6aaaac7..3bdf7c6 100644 (file)
        "api-help-param-direction": "{{doc-apihelp-param|description=any standard \"dir\" parameter|noseealso=1}}",
        "api-help-param-continue": "{{doc-apihelp-param|description=any standard \"continue\" parameter, or other parameter with the same semantics|noseealso=1}}",
        "api-help-param-no-description": "Displayed on API parameters that lack any description",
+       "api-help-param-maxbytes": "Used to display the maximum allowed length of a parameter, in bytes.",
+       "api-help-param-maxchars": "Used to display the maximum allowed length of a parameter, in characters.",
        "api-help-examples": "Label for the API help examples section\n\nParameters:\n* $1 - Number of examples to be displayed\n{{Identical|Example}}",
        "api-help-permissions": "Label for the \"permissions\" section in the main module's help output.\n\nParameters:\n* $1 - Number of permissions displayed\n{{Identical|Permission}}",
        "api-help-permissions-granted-to": "Used to introduce the list of groups each permission is assigned to.\n\nParameters:\n* $1 - Number of groups\n* $2 - List of group names, comma-separated",
        "apierror-invalidurlparam": "{{doc-apierror}}\n\nParameters:\n* $1 - Module parameter prefix, e.g. \"bl\".\n* $2 - Key\n* $3 - Value.",
        "apierror-invaliduser": "{{doc-apierror}}\n\nParameters:\n* $1 - User name that is invalid.",
        "apierror-invaliduserid": "{{doc-apierror}}",
+       "apierror-maxbytes": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n* $2 - Maximum allowed bytes.",
+       "apierror-maxchars": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.\n* $2 - Maximum allowed characters.",
        "apierror-maxlag-generic": "{{doc-apierror}}\n\nParameters:\n* $1 - Database is lag in seconds.",
        "apierror-maxlag": "{{doc-apierror}}\n\nParameters:\n* $1 - Database lag in seconds.\n* $2 - Database server that is lagged.",
        "apierror-mimesearchdisabled": "{{doc-apierror}}",
index bc50096..5b8559e 100644 (file)
@@ -576,7 +576,9 @@ class ChangesList extends ContextSource {
                        return '';
                }
                $cache = $this->watchMsgCache;
-               return $cache->getWithSetCallback( $count, $cache::TTL_INDEFINITE,
+               return $cache->getWithSetCallback(
+                       $cache->makeKey( 'watching-users-msg', $count ),
+                       $cache::TTL_INDEFINITE,
                        function () use ( $count ) {
                                return $this->msg( 'number_of_watching_users_RCview' )
                                        ->numParams( $count )->escaped();
index 813ee08..03f7212 100644 (file)
@@ -23,9 +23,6 @@
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Shell\Shell;
 
-/** @deprecated use class constant instead */
-define( 'MW_DIFF_VERSION', '1.11a' );
-
 /**
  * @todo document
  * @ingroup DifferenceEngine
@@ -37,7 +34,7 @@ class DifferenceEngine extends ContextSource {
         * fixes important bugs or such to force cached diff views to
         * clear.
         */
-       const DIFF_VERSION = MW_DIFF_VERSION;
+       const DIFF_VERSION = '1.12';
 
        /** @var int */
        public $mOldid;
@@ -753,14 +750,22 @@ class DifferenceEngine extends ContextSource {
                $key = false;
                $cache = ObjectCache::getMainWANInstance();
                if ( $this->mOldid && $this->mNewid ) {
+                       // Check if subclass is still using the old way
+                       // for backwards-compatibility
                        $key = $this->getDiffBodyCacheKey();
+                       if ( $key === null ) {
+                               $key = call_user_func_array(
+                                       [ $cache, 'makeKey' ],
+                                       $this->getDiffBodyCacheKeyParams()
+                               );
+                       }
 
                        // Try cache
                        if ( !$this->mRefreshCache ) {
                                $difftext = $cache->get( $key );
                                if ( $difftext ) {
                                        wfIncrStats( 'diff_cache.hit' );
-                                       $difftext = $this->localiseLineNumbers( $difftext );
+                                       $difftext = $this->localiseDiff( $difftext );
                                        $difftext .= "\n<!-- diff cache key $key -->\n";
 
                                        return $difftext;
@@ -788,9 +793,9 @@ class DifferenceEngine extends ContextSource {
                } else {
                        wfIncrStats( 'diff_cache.uncacheable' );
                }
-               // Replace line numbers with the text in the user's language
+               // localise line numbers and title attribute text
                if ( $difftext !== false ) {
-                       $difftext = $this->localiseLineNumbers( $difftext );
+                       $difftext = $this->localiseDiff( $difftext );
                }
 
                return $difftext;
@@ -799,18 +804,49 @@ class DifferenceEngine extends ContextSource {
        /**
         * Returns the cache key for diff body text or content.
         *
+        * @deprecated since 1.31, use getDiffBodyCacheKeyParams() instead
         * @since 1.23
         *
         * @throws MWException
-        * @return string
+        * @return string|null
         */
        protected function getDiffBodyCacheKey() {
+               return null;
+       }
+
+       /**
+        * Get the cache key parameters
+        *
+        * Subclasses can replace the first element in the array to something
+        * more specific to the type of diff (e.g. "inline-diff"), or append
+        * if the cache should vary on more things. Overriding entirely should
+        * be avoided.
+        *
+        * @since 1.31
+        *
+        * @return array
+        * @throws MWException
+        */
+       protected function getDiffBodyCacheKeyParams() {
                if ( !$this->mOldid || !$this->mNewid ) {
                        throw new MWException( 'mOldid and mNewid must be set to get diff cache key.' );
                }
 
-               return wfMemcKey( 'diff', 'version', self::DIFF_VERSION,
-                       'oldid', $this->mOldid, 'newid', $this->mNewid );
+               $engine = $this->getEngine();
+               $params = [
+                       'diff',
+                       $engine,
+                       self::DIFF_VERSION,
+                       "old-{$this->mOldid}",
+                       "rev-{$this->mNewid}"
+               ];
+
+               if ( $engine === 'wikidiff2' ) {
+                       $params[] = phpversion( 'wikidiff2' );
+                       $params[] = $this->getConfig()->get( 'WikiDiff2MovedParagraphDetectionCutoff' );
+               }
+
+               return $params;
        }
 
        /**
@@ -897,19 +933,14 @@ class DifferenceEngine extends ContextSource {
        }
 
        /**
-        * Generates diff, to be wrapped internally in a logging/instrumentation
+        * Process $wgExternalDiffEngine and get a sane, usable engine
         *
-        * @param string $otext Old text, must be already segmented
-        * @param string $ntext New text, must be already segmented
-        * @return bool|string
-        * @throws Exception
+        * @return bool|string 'wikidiff2', path to an executable, or false
         */
-       protected function textDiff( $otext, $ntext ) {
-               global $wgExternalDiffEngine, $wgContLang;
-
-               $otext = str_replace( "\r\n", "\n", $otext );
-               $ntext = str_replace( "\r\n", "\n", $ntext );
-
+       private function getEngine() {
+               global $wgExternalDiffEngine;
+               // We use the global here instead of Config because we write to the value,
+               // and Config is not mutable.
                if ( $wgExternalDiffEngine == 'wikidiff' || $wgExternalDiffEngine == 'wikidiff3' ) {
                        wfDeprecated( "\$wgExternalDiffEngine = '{$wgExternalDiffEngine}'", '1.27' );
                        $wgExternalDiffEngine = false;
@@ -922,9 +953,34 @@ class DifferenceEngine extends ContextSource {
                        $wgExternalDiffEngine = false;
                }
 
+               if ( is_string( $wgExternalDiffEngine ) && is_executable( $wgExternalDiffEngine ) ) {
+                       return $wgExternalDiffEngine;
+               } elseif ( $wgExternalDiffEngine === false && function_exists( 'wikidiff2_do_diff' ) ) {
+                       return 'wikidiff2';
+               } else {
+                       // Native PHP
+                       return false;
+               }
+       }
+
+       /**
+        * Generates diff, to be wrapped internally in a logging/instrumentation
+        *
+        * @param string $otext Old text, must be already segmented
+        * @param string $ntext New text, must be already segmented
+        * @return bool|string
+        */
+       protected function textDiff( $otext, $ntext ) {
+               global $wgContLang;
+
+               $otext = str_replace( "\r\n", "\n", $otext );
+               $ntext = str_replace( "\r\n", "\n", $ntext );
+
+               $engine = $this->getEngine();
+
                // Better external diff engine, the 2 may some day be dropped
                // This one does the escaping and segmenting itself
-               if ( function_exists( 'wikidiff2_do_diff' ) && $wgExternalDiffEngine === false ) {
+               if ( $engine === 'wikidiff2' ) {
                        $wikidiff2Version = phpversion( 'wikidiff2' );
                        if (
                                $wikidiff2Version !== false &&
@@ -954,7 +1010,7 @@ class DifferenceEngine extends ContextSource {
                        $text .= $this->debug( 'wikidiff2' );
 
                        return $text;
-               } elseif ( $wgExternalDiffEngine !== false && is_executable( $wgExternalDiffEngine ) ) {
+               } elseif ( $engine !== false ) {
                        # Diff via the shell
                        $tmpDir = wfTempDir();
                        $tempName1 = tempnam( $tmpDir, 'diff_' );
@@ -972,7 +1028,7 @@ class DifferenceEngine extends ContextSource {
                        fwrite( $tempFile2, $ntext );
                        fclose( $tempFile1 );
                        fclose( $tempFile2 );
-                       $cmd = [ $wgExternalDiffEngine, $tempName1, $tempName2 ];
+                       $cmd = [ $engine, $tempName1, $tempName2 ];
                        $result = Shell::command( $cmd )
                                ->execute();
                        $exitCode = $result->getExitCode();
@@ -982,7 +1038,7 @@ class DifferenceEngine extends ContextSource {
                                );
                        }
                        $difftext = $result->getStdout();
-                       $difftext .= $this->debug( "external $wgExternalDiffEngine" );
+                       $difftext .= $this->debug( "external $engine" );
                        unlink( $tempName1 );
                        unlink( $tempName2 );
 
@@ -1024,6 +1080,22 @@ class DifferenceEngine extends ContextSource {
                        " -->\n";
        }
 
+       /**
+        * Localise diff output
+        *
+        * @param string $text
+        * @return string
+        */
+       private function localiseDiff( $text ) {
+               $text = $this->localiseLineNumbers( $text );
+               if ( $this->getEngine() === 'wikidiff2' &&
+                       version_compare( phpversion( 'wikidiff2' ), '1.5.1', '>=' )
+               ) {
+                       $text = $this->addLocalisedTitleTooltips( $text );
+               }
+               return $text;
+       }
+
        /**
         * Replace line numbers with the text in the user's language
         *
@@ -1047,6 +1119,31 @@ class DifferenceEngine extends ContextSource {
                return $this->msg( 'lineno' )->numParams( $matches[1] )->escaped();
        }
 
+       /**
+        * Add title attributes for tooltips on moved paragraph indicators
+        *
+        * @param string $text
+        * @return string
+        */
+       private function addLocalisedTitleTooltips( $text ) {
+               return preg_replace_callback(
+                       '/class="mw-diff-movedpara-(left|old)"/',
+                       [ $this, 'addLocalisedTitleTooltipsCb' ],
+                       $text
+               );
+       }
+
+       /**
+        * @param array $matches
+        * @return string
+        */
+       private function addLocalisedTitleTooltipsCb( array $matches ) {
+               $key = $matches[1] === 'right' ?
+                       'diff-paragraph-moved-toold' :
+                       'diff-paragraph-moved-tonew';
+               return $matches[0] . ' title="' . $this->msg( $key )->escaped() . '"';
+       }
+
        /**
         * If there are revisions between the ones being compared, return a note saying so.
         *
index 1755e98..ba36888 100644 (file)
@@ -182,16 +182,16 @@ class OOUIHTMLForm extends HTMLForm {
                        return '';
                }
 
-               $config = [
-                       'items' => $fieldsHtml,
-               ];
+               $html = implode( '', $fieldsHtml );
+
                if ( $sectionName ) {
-                       $config['id'] = Sanitizer::escapeIdForAttribute( $sectionName );
-               }
-               if ( is_string( $this->mWrapperLegend ) ) {
-                       $config['label'] = $this->mWrapperLegend;
+                       $html = Html::rawElement(
+                               'div',
+                               [ 'id' => Sanitizer::escapeIdForAttribute( $sectionName ) ],
+                               $html
+                       );
                }
-               return new OOUI\FieldsetLayout( $config );
+               return $html;
        }
 
        /**
@@ -249,9 +249,8 @@ class OOUIHTMLForm extends HTMLForm {
        }
 
        public function getBody() {
-               $fieldset = parent::getBody();
-               // FIXME This only works for forms with no subsections
-               if ( $fieldset instanceof OOUI\FieldsetLayout ) {
+               $html = parent::getBody();
+               if ( $this->mHeader || $this->oouiErrors || $this->oouiWarnings ) {
                        $classes = [ 'mw-htmlform-ooui-header' ];
                        if ( $this->oouiErrors ) {
                                $classes[] = 'mw-htmlform-ooui-header-errors';
@@ -259,33 +258,42 @@ class OOUIHTMLForm extends HTMLForm {
                        if ( $this->oouiWarnings ) {
                                $classes[] = 'mw-htmlform-ooui-header-warnings';
                        }
-                       if ( $this->mHeader || $this->oouiErrors || $this->oouiWarnings ) {
-                               // if there's no header, don't create an (empty) LabelWidget, simply use a placeholder
-                               if ( $this->mHeader ) {
-                                       $element = new OOUI\LabelWidget( [ 'label' => new OOUI\HtmlSnippet( $this->mHeader ) ] );
-                               } else {
-                                       $element = new OOUI\Widget( [] );
-                               }
-                               $fieldset->addItems( [
-                                       new OOUI\FieldLayout(
-                                               $element,
-                                               [
-                                                       'align' => 'top',
-                                                       'errors' => $this->oouiErrors,
-                                                       'notices' => $this->oouiWarnings,
-                                                       'classes' => $classes,
-                                               ]
-                                       )
-                               ], 0 );
+                       // if there's no header, don't create an (empty) LabelWidget, simply use a placeholder
+                       if ( $this->mHeader ) {
+                               $element = new OOUI\LabelWidget( [ 'label' => new OOUI\HtmlSnippet( $this->mHeader ) ] );
+                       } else {
+                               $element = new OOUI\Widget( [] );
                        }
+                       $html = new OOUI\FieldLayout(
+                               $element,
+                               [
+                                       'align' => 'top',
+                                       'errors' => $this->oouiErrors,
+                                       'notices' => $this->oouiWarnings,
+                                       'classes' => $classes,
+                               ]
+                       ) . $html;
                }
-               return $fieldset;
+               return $html;
        }
 
        public function wrapForm( $html ) {
+               if ( is_string( $this->mWrapperLegend ) ) {
+                       $content = new OOUI\FieldsetLayout( [
+                               'label' => $this->mWrapperLegend,
+                               'items' => [
+                                       new OOUI\Widget( [
+                                               'content' => new OOUI\HtmlSnippet( $html )
+                                       ] ),
+                               ],
+                       ] );
+               } else {
+                       $content = new OOUI\HtmlSnippet( $html );
+               }
+
                $form = new OOUI\FormLayout( $this->getFormAttributes() + [
                        'classes' => [ 'mw-htmlform', 'mw-htmlform-ooui' ],
-                       'content' => new OOUI\HtmlSnippet( $html ),
+                       'content' => $content,
                ] );
 
                // Include a wrapper for style, if requested.
index 515166c..238b2b4 100644 (file)
@@ -132,13 +132,17 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable
        /**
         * Get the OOUI version of this field.
         *
+        * Returns OOUI\CheckboxMultiselectInputWidget for fields that only have one section,
+        * string otherwise.
+        *
         * @since 1.28
         * @param string[] $value
-        * @return OOUI\CheckboxMultiselectInputWidget
+        * @return string|OOUI\CheckboxMultiselectInputWidget
         */
        public function getInputOOUI( $value ) {
                $this->mParent->getOutput()->addModules( 'oojs-ui-widgets' );
 
+               $hasSections = false;
                $optionsOouiSections = [];
                $options = $this->getOptions();
                // If the options are supposed to be split into sections, each section becomes a separate
@@ -147,6 +151,7 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable
                        if ( is_array( $section ) ) {
                                $optionsOouiSections[ $label ] = Xml::listDropDownOptionsOoui( $section );
                                unset( $options[$label] );
+                               $hasSections = true;
                        }
                }
                // If anything remains in the array, they are sectionless options. Put them in a separate widget
@@ -158,7 +163,7 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable
                        );
                }
 
-               $out = '';
+               $out = [];
                foreach ( $optionsOouiSections as $sectionLabel => $optionsOoui ) {
                        $attr = [];
                        $attr['name'] = "{$this->mName}[]";
@@ -185,16 +190,22 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable
 
                        $widget = new OOUI\CheckboxMultiselectInputWidget( $attr );
                        if ( $sectionLabel ) {
-                               $out .= new OOUI\FieldsetLayout( [
+                               $out[] = new OOUI\FieldsetLayout( [
                                        'items' => [ $widget ],
                                        'label' => $sectionLabel,
                                ] );
                        } else {
-                               $out .= $widget;
+                               $out[] = $widget;
                        }
                }
 
-               return $out;
+               if ( !$hasSections ) {
+                       // Directly return the only OOUI\CheckboxMultiselectInputWidget.
+                       // This allows it to be made infusable and later tweaked by JS code.
+                       return $out[ 0 ];
+               }
+
+               return implode( '', $out );
        }
 
        /**
index 0925091..ae97154 100644 (file)
        "config-upgrade-done-no-regenerate": "Eguneratze prozesua amaitu egin da.\n\nHasi ahal zara [ $1 wikia arabiltzen]",
        "config-regenerate": "Birsortu LocalSettings.php →",
        "config-show-table-status": "<code>SHOW TABLE STATUS</code> kontsulta huts egin du!",
+       "config-unknown-collation": "<strong>Abisua:</strong> Datu-baseak kolazio ezezaguna ari da erabiltzen.",
        "config-db-web-account": "Datu-basearen kontua web sarbiderako.",
        "config-db-web-help": "Aukeratu erabiliko den erabiltzaile izena eta pasahitza web serbidorea eta datu-basearen serbidorea konektatzeko, wikiren operazio normalaren bitartean.",
        "config-db-web-account-same": "Instalazioan erabili duzun kontu berdina erabili.",
        "config-mysql-myisam": "MyISAM",
        "config-mysql-myisam-dep": "<strong>Oharra:</strong> MyISAM MySQL biltegiratze-motor gisa aukeratu duzu, MediaWikirekin erabiltzeko gomendagarria ez dena honengatik:\n*taula blokeoak direla-eta gauza gutxi onartu ohi du\n*beste motore batzuek baino ustelkeria gehiago izateko aukerak ditu\n*MediaWiki-ren kode baseak ez du beti kudeatzen MyISAM behar bezala\n\nZure MySQL instalazioa InnoDB onartzen badu, hori aukeratzeko gomendatzen da.\nZure MySQL instalazioa InnoDB ez badu onartzen, baliteke bertsioa berritzeko ordua izatea.",
        "config-mysql-only-myisam-dep": "<strong> Oharra: </strong> MyISAM makinaren MySQL biltegiratze motarako bakarra da, eta hau ez da MediaWiki-rekin erabiltzeko gomendatzen, honengatik:\n* maiztasunez taula blokeoek konkurrentzia ez dute onartzen \n* Beste motore batzuek baino ustelkeria gehiago izaten dute\n* MediaWiki-ren kodekak ez du beti kudeatzen MyISAM behar bezala\n\nZure MySQL instalazioak ez du InnoDB onartzen, agian bertsio berritzeko ordua da.",
+       "config-mysql-charset": "Datu-basearen karaktere multzoa:",
        "config-mysql-binary": "Bitarra",
        "config-mysql-utf8": "UTF-8",
        "config-mssql-auth": "Autentifikazio mota:",
        "config-install-mainpage-exists": "Orri nagusia dagoeneko existitzen da, hurrengora saltatzen",
        "config-install-extension-tables": "Taulak sortzen aktibatutako luzapenentzako.",
        "config-install-mainpage-failed": "Orri nagusia ezin izan da txertatu: $1",
-       "config-install-done": "<strong>Zorionak!</strong>\nMediaWiki instalatu duzu.\n\nInstalatzaileak sortu egin du <code>LocalSettings.php</code>\nZure konfigurazio guztia dauka.\n\nDeskargatu egin behar duzu eta jarri <code>$4</code> -ean . Deskarga automakikoki hasiko da.\n\nEz badizu deskargatzeko aukerarik eman, edo kantzelatu egin baduzu, hurrengo linkean klikatu berrabiatzeko:\n\n$3\n\n<strong>Oharra:</strong> Instalazio prozesuatik ateratzen bazara konfigurazio artxikoa deskargatu barik, gero ez da egongo eskuragarri.\n\nBehin hori eginda, <strong>[$2 enter your wiki]</strong> ahal duzu.",
+       "config-install-done": "<strong>Zorionak!</strong>\nMediaWiki instalatu duzu.\n\nInstalatzaileak <code>LocalSettings.php</code> fitxategia sortu egin du. \nZure konfigurazio guztia darama.\n\nDeskargatu egin beharko duzu eta zure wiki instalazio oinarrian jarri (index.php-rako direktorio berean). Deskarga automakikoki hasi behar izan da.\n\nDeskargatzeko aukerarik ez bazaizu eskaini, edo kantzelatu egin baduzu, hurrengo linkean klikatu berrabiarazteko deskarga:\n\n$3\n\n<strong>Oharra:</strong> Orain ez baduzu egiten, sortutako konfigurazio fitxategi hau ez da erabilgarri egongo geroago instalazioa bertan behera uzten baduzu deskargatu gabe.\n\nBehin hori eginda, <strong>[$2 zure wikia sartu]</strong> ahal duzu.",
        "config-install-done-path": "<strong>Zorionak!</strong>\nMediaWiki instalatu duzu.\n\nInstalatzaileak sortu egin du <code>LocalSettings.php</code>\nZure konfigurazio guztia dauka.\n\nDeskargatu egin behar duzu eta jarri <code>$4</code> -ean . Deskarga automakikoki hasiko da.\n\nEz badizu deskargatzeko aukerarik eman, edo kantzalatu egin baduzu, hurrengo linkean klikatu berrabiatzeko:\n\n$3\n\n<strong>Oharra:</strong> Instalazio prozesuatik ateratzen bazara konfigurazio artxikoa deskargatu barik, gero ez da egongo eskuragarri.\n\nBehin hori eginda, <strong>[$2 enter your wiki]</strong> ahal duzu.",
        "config-download-localsettings": "Jaitsi <code>LocalSettings.php</code>",
        "config-help": "Laguntza",
        "config-skins-screenshots": "$1 (Pantaila-irudia: $2)",
        "config-screenshot": "Pantaila-irudia",
        "mainpagetext": "<strong>MediaWiki instalatu da.</strong>",
-       "mainpagedocfooter": "Ikus [https://meta.wikimedia.org/wiki/Help:Contents Erabiltzaile Gida] wiki softwarea erabiltzen hasteko informazio gehiagorako.\n\n== Nola hasi ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Konfigurazio balioen zerrenda]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ (Maiz egindako galderak)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWikiren argitalpenen posta zerrenda]"
+       "mainpagedocfooter": "Ikusi [https://meta.wikimedia.org/wiki/Help:Contents Erabiltzailearen Gida] wiki softwarea erabiltzen hasteko informazio gehiagorako.\n\n== Nola hasi ==\n\n*\n [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Konfigurazio balioen zerrenda]\n*\n [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ (MediaWikin Maiz egindako galderak)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWikiren argitalpenen posta zerrenda]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Aurkitu MediaWiki zure hizkuntzan]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Zure wikian spam-a nola borrokatzen ikasi]"
 }
index 50521f6..2bfe36f 100644 (file)
@@ -68,7 +68,7 @@
        "config-help-restart": "Voulez-vous effacer toutes les données enregistrées que vous avez entrées et relancer le processus d'installation ?",
        "config-restart": "Oui, le relancer",
        "config-welcome": "=== Vérifications liées à l’environnement ===\nDes vérifications de base vont maintenant être effectuées pour voir si cet environnement est adapté à l’installation de MediaWiki.\nRappelez-vous d’inclure ces informations si vous recherchez de l’aide sur la manière de terminer l’installation.",
-       "config-copyright": "=== Droit d'auteur et conditions ===\n\n$1\n\nCe programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation (version 2 de la Licence, ou, à votre choix, toute version ultérieure).\n\nCe programme est distribué dans l’espoir qu’il sera utile, mais '''sans aucune garantie''' : sans même les garanties implicites de '''commerciabilité''' ou d’'''adéquation à un usage particulier'''.\nVoir la Licence Publique Générale GNU pour plus de détails.\n\nVous devriez avoir reçu <doclink href=Copying>une copie de la Licence Publique Générale GNU</doclink> avec ce programme ; dans le cas contraire, écrivez à la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ou [http://www.gnu.org/copyleft/gpl.html lisez-la en ligne].",
+       "config-copyright": "=== Droit d’auteur et conditions ===\n\n$1\n\nCe programme est un logiciel gratuit : vous pouvez le redistribuer ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation (version 2 de la Licence, ou, à votre choix, toute version ultérieure).\n\nCe programme est distribué dans l’espoir qu’il sera utile, mais '''sans aucune garantie''' : sans même les garanties implicites de '''commercialisabilité''' ou d’'''adéquation à un usage particulier'''.\nVoir la Licence Publique Générale GNU pour plus de détails.\n\nVous devriez avoir reçu <doclink href=Copying>une copie de la Licence Publique Générale GNU</doclink> avec ce programme ; dans le cas contraire, écrivez à la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ou [http://www.gnu.org/copyleft/gpl.html lisez-la en ligne].",
        "config-sidebar": "* [https://www.mediawiki.org Accueil MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guide de l’utilisateur]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Guide de l’administrateur]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>Lisez-moi</doclink>\n* <doclink href=ReleaseNotes>Notes de publication</doclink>\n* <doclink href=Copying>Copie</doclink>\n* <doclink href=UpgradeDoc>Mise à jour</doclink>",
        "config-env-good": "L’environnement a été vérifié.\nVous pouvez installer MediaWiki.",
        "config-env-bad": "L’environnement a été vérifié.\nVous ne pouvez pas installer MediaWiki.",
index d712afe..a19dbc3 100644 (file)
        "config-help-tooltip": "kliknij, aby rozwinąć",
        "config-nofile": "Nie udało się odnaleźć pliku \"$1\". Czy nie został usunięty?",
        "config-extension-link": "Czy wiesz, że twoja wiki obsługuje [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions rozszerzenia]?\n\nMożesz przejrzeć [https://www.mediawiki.org/wiki/Category:Extensions_by_category rozszerzenia według kategorii] lub [https://www.mediawiki.org/wiki/Extension_Matrix Extension Matrix], aby zobaczyć pełną listę rozszerzeń.",
+       "config-screenshot": "zrzut ekranu",
        "mainpagetext": "<strong>Instalacja MediaWiki powiodła się.</strong>",
        "mainpagedocfooter": "Zapoznaj się z [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Podręcznikiem użytkownika] zawierającym informacje o tym jak korzystać z oprogramowania wiki.\n\n== Na początek ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista ustawień konfiguracyjnych]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Komunikaty o nowych wersjach MediaWiki (lista dyskusyjna)]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Przetłumacz MediaWiki na swój język]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Dowiedz się, jak walczyć ze spamem na swojej wiki]"
 }
index 55c1367..16640be 100644 (file)
@@ -25,6 +25,8 @@ use Wikimedia\Rdbms\LBFactory;
 /**
  * Job to add recent change entries mentioning category membership changes
  *
+ * This allows users to easily scan categories for recent page membership changes
+ *
  * Parameters include:
  *   - pageId : page ID
  *   - revTimestamp : timestamp of the triggering revision
@@ -59,6 +61,13 @@ class CategoryMembershipChangeJob extends Job {
                        return false; // deleted?
                }
 
+               // Cut down on the time spent in safeWaitForMasterPos() in the critical section
+               $dbr = $lb->getConnection( DB_REPLICA, [ 'recentchanges' ] );
+               if ( !$lb->safeWaitForMasterPos( $dbr ) ) {
+                       $this->setLastError( "Timed out while pre-waiting for replica DB to catch up" );
+                       return false;
+               }
+
                // Use a named lock so that jobs for this page see each others' changes
                $lockKey = "CategoryMembershipUpdates:{$page->getId()}";
                $scopedLock = $dbw->getScopedLockAndFlush( $lockKey, __METHOD__, 3 );
@@ -67,8 +76,7 @@ class CategoryMembershipChangeJob extends Job {
                        return false;
                }
 
-               $dbr = $lb->getConnection( DB_REPLICA, [ 'recentchanges' ] );
-               // Wait till the replica DB is caught up so that jobs for this page see each others' changes
+               // Wait till replica DB is caught up so that jobs for this page see each others' changes
                if ( !$lb->safeWaitForMasterPos( $dbr ) ) {
                        $this->setLastError( "Timed out while waiting for replica DB to catch up" );
                        return false;
@@ -81,28 +89,28 @@ class CategoryMembershipChangeJob extends Job {
                // between COMMIT and actual enqueueing of the CategoryMembershipChangeJob job.
                $cutoffUnix -= self::ENQUEUE_FUDGE_SEC;
 
-               // Get the newest revision that has a SRC_CATEGORIZE row...
+               // Get the newest page revision that has a SRC_CATEGORIZE row.
+               // Assume that category changes before it were already handled.
                $row = $dbr->selectRow(
-                       [ 'revision', 'recentchanges' ],
+                       'revision',
                        [ 'rev_timestamp', 'rev_id' ],
                        [
                                'rev_page' => $page->getId(),
-                               'rev_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( $cutoffUnix ) )
-                       ],
-                       __METHOD__,
-                       [ 'ORDER BY' => 'rev_timestamp DESC, rev_id DESC' ],
-                       [
-                               'recentchanges' => [
-                                       'INNER JOIN',
+                               'rev_timestamp >= ' . $dbr->addQuotes( $dbr->timestamp( $cutoffUnix ) ),
+                               'EXISTS (' . $dbr->selectSQLText(
+                                       'recentchanges',
+                                       '1',
                                        [
                                                'rc_this_oldid = rev_id',
                                                'rc_source' => RecentChange::SRC_CATEGORIZE,
                                                // Allow rc_cur_id or rc_timestamp index usage
                                                'rc_cur_id = rev_page',
-                                               'rc_timestamp >= rev_timestamp'
+                                               'rc_timestamp = rev_timestamp'
                                        ]
-                               ]
-                       ]
+                               ) . ')'
+                       ],
+                       __METHOD__,
+                       [ 'ORDER BY' => 'rev_timestamp DESC, rev_id DESC' ]
                );
                // Only consider revisions newer than any such revision
                if ( $row ) {
index f50d26b..373ad93 100644 (file)
@@ -158,7 +158,7 @@ class SwiftFileBackend extends FileBackendStore {
        protected function resolveContainerPath( $container, $relStoragePath ) {
                if ( !mb_check_encoding( $relStoragePath, 'UTF-8' ) ) {
                        return null; // not UTF-8, makes it hard to use CF and the swift HTTP API
-               } elseif ( strlen( urlencode( $relStoragePath ) ) > 1024 ) {
+               } elseif ( strlen( rawurlencode( $relStoragePath ) ) > 1024 ) {
                        return null; // too long for Swift
                }
 
index d6cb340..8420f11 100644 (file)
@@ -747,10 +747,11 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
         * Make a global cache key.
         *
         * @since 1.27
-        * @param string $keys,... Key component (starting with a key collection name)
+        * @param string $class Key class
+        * @param string $component [optional] Key component (starting with a key collection name)
         * @return string Colon-delimited list of $keyspace followed by escaped components of $args
         */
-       public function makeGlobalKey() {
+       public function makeGlobalKey( $class, $component = null ) {
                return $this->makeKeyInternal( 'global', func_get_args() );
        }
 
@@ -758,10 +759,11 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
         * Make a cache key, scoped to this instance's keyspace.
         *
         * @since 1.27
-        * @param string $keys,... Key component (starting with a key collection name)
+        * @param string $class Key class
+        * @param string $component [optional] Key component (starting with a key collection name)
         * @return string Colon-delimited list of $keyspace followed by escaped components of $args
         */
-       public function makeKey() {
+       public function makeKey( $class, $component = null ) {
                return $this->makeKeyInternal( $this->keyspace, func_get_args() );
        }
 
index c85a82e..ae434c1 100644 (file)
@@ -86,11 +86,11 @@ class CachedBagOStuff extends HashBagOStuff {
                return $this->backend->deleteObjectsExpiringBefore( $date, $progressCallback );
        }
 
-       public function makeKey() {
+       public function makeKey( $class, $component = null ) {
                return call_user_func_array( [ $this->backend, __FUNCTION__ ], func_get_args() );
        }
 
-       public function makeGlobalKey() {
+       public function makeGlobalKey( $class, $component = null ) {
                return call_user_func_array( [ $this->backend, __FUNCTION__ ], func_get_args() );
        }
 
index 0188991..f7bf86b 100644 (file)
@@ -137,7 +137,7 @@ class MemcachedBagOStuff extends BagOStuff {
                );
 
                if ( $charsLeft < 0 ) {
-                       return $keyspace . ':##' . md5( implode( ':', $args ) );
+                       return $keyspace . ':BagOStuff-long-key:##' . md5( implode( ':', $args ) );
                }
 
                return $keyspace . ':' . implode( ':', $args );
index 200ab79..643f318 100644 (file)
@@ -233,11 +233,11 @@ class MultiWriteBagOStuff extends BagOStuff {
                return $ret;
        }
 
-       public function makeKey() {
+       public function makeKey( $class, $component = null ) {
                return call_user_func_array( [ $this->caches[0], __FUNCTION__ ], func_get_args() );
        }
 
-       public function makeGlobalKey() {
+       public function makeGlobalKey( $class, $component = null ) {
                return call_user_func_array( [ $this->caches[0], __FUNCTION__ ], func_get_args() );
        }
 }
index 73e4a9a..51c4669 100644 (file)
@@ -917,7 +917,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                                        // Value existed before with a different version; use variant key.
                                        // Reflect purges to $key by requiring that this key value be newer.
                                        $value = $this->doGetWithSetCallback(
-                                               'cache-variant:' . md5( $key ) . ":$version",
+                                               $this->makeGlobalKey( 'WANCache-key-variant', md5( $key ), $version ),
                                                $ttl,
                                                $callback,
                                                // Regenerate value if not newer than $key
@@ -1388,21 +1388,23 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 
        /**
         * @see BagOStuff::makeKey()
-        * @param string $keys,... Key component (starting with a key collection name)
+        * @param string $class Key class
+        * @param string $component [optional] Key component (starting with a key collection name)
         * @return string Colon-delimited list of $keyspace followed by escaped components of $args
         * @since 1.27
         */
-       public function makeKey() {
+       public function makeKey( $class, $component = null ) {
                return call_user_func_array( [ $this->cache, __FUNCTION__ ], func_get_args() );
        }
 
        /**
         * @see BagOStuff::makeGlobalKey()
-        * @param string $keys,... Key component (starting with a key collection name)
+        * @param string $class Key class
+        * @param string $component [optional] Key component (starting with a key collection name)
         * @return string Colon-delimited list of $keyspace followed by escaped components of $args
         * @since 1.27
         */
-       public function makeGlobalKey() {
+       public function makeGlobalKey( $class, $component = null ) {
                return call_user_func_array( [ $this->cache, __FUNCTION__ ], func_get_args() );
        }
 
index dbd97a7..980a8bf 100644 (file)
@@ -103,4 +103,15 @@ interface LinkTarget {
         * @return string
         */
        public function getInterwiki();
+
+       /**
+        * Returns an informative human readable representation of the link target,
+        * for use in logging and debugging. There is no requirement for the return
+        * value to have any relationship with the input of TitleParser.
+        * @since 1.31
+        *
+        * @return string
+        */
+       public function __toString();
+
 }
index ce1df0d..1686bbb 100644 (file)
@@ -30,7 +30,6 @@
  * header format when requested.
  */
 class MailAddress {
-
        /**
         * @var string
         */
index de438da..85430d2 100644 (file)
@@ -512,7 +512,7 @@ abstract class TransformationalImageHandler extends ImageHandler {
                $cache = MediaWikiServices::getInstance()->getLocalServerObjectCache();
                $method = __METHOD__;
                return $cache->getWithSetCallback(
-                       'imagemagick-version',
+                       $cache->makeGlobalKey( 'imagemagick-version' ),
                        $cache::TTL_HOUR,
                        function () use ( $method ) {
                                global $wgImageMagickConvertCommand;
diff --git a/includes/parser/RemexStripTagHandler.php b/includes/parser/RemexStripTagHandler.php
new file mode 100644 (file)
index 0000000..2839147
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+
+use RemexHtml\Tokenizer\Attributes;
+use RemexHtml\Tokenizer\TokenHandler;
+use RemexHtml\Tokenizer\Tokenizer;
+
+/**
+ * @internal
+ */
+class RemexStripTagHandler implements TokenHandler {
+       private $text = '';
+       public function getResult() {
+               return $this->text;
+       }
+
+       function startDocument( Tokenizer $t, $fns, $fn ) {
+               // Do nothing.
+       }
+       function endDocument( $pos ) {
+               // Do nothing.
+       }
+       function error( $text, $pos ) {
+               // Do nothing.
+       }
+       function characters( $text, $start, $length, $sourceStart, $sourceLength ) {
+               $this->text .= substr( $text, $start, $length );
+       }
+       function startTag( $name, Attributes $attrs, $selfClose, $sourceStart, $sourceLength ) {
+               // Do nothing.
+       }
+       function endTag( $name, $sourceStart, $sourceLength ) {
+               // Do nothing.
+       }
+       function doctype( $name, $public, $system, $quirks, $sourceStart, $sourceLength ) {
+               // Do nothing.
+       }
+       function comment( $text, $sourceStart, $sourceLength ) {
+               // Do nothing.
+       }
+}
index 46cf2a5..20fee2d 100644 (file)
@@ -1968,17 +1968,22 @@ class Sanitizer {
         * Warning: this return value must be further escaped for literal
         * inclusion in HTML output as of 1.10!
         *
-        * @param string $text HTML fragment
+        * @param string $html HTML fragment
         * @return string
         */
-       static function stripAllTags( $text ) {
-               # Actual <tags>
-               $text = StringUtils::delimiterReplace( '<', '>', '', $text );
+       static function stripAllTags( $html ) {
+               // Use RemexHtml to tokenize $html and extract the text
+               $handler = new RemexStripTagHandler;
+               $tokenizer = new RemexHtml\Tokenizer\Tokenizer( $handler, $html, [
+                       'ignoreErrors' => true,
+                       // don't ignore char refs, we want them to be decoded
+                       'ignoreNulls' => true,
+                       'skipPreprocess' => true,
+               ] );
+               $tokenizer->execute();
+               $text = $handler->getResult();
 
-               # Normalize &entities and whitespace
-               $text = self::decodeCharReferences( $text );
                $text = self::normalizeWhitespace( $text );
-
                return $text;
        }
 
index 0a712ef..cf8c3f5 100644 (file)
@@ -140,7 +140,7 @@ class UserrightsPage extends SpecialPage {
                $this->setHeaders();
                $this->outputHeader();
 
-               $out->addModuleStyles( 'mediawiki.special' );
+               $out->addModuleStyles( 'mediawiki.special.userrights.styles' );
                $this->addHelpLink( 'Help:Assigning permissions' );
 
                $this->switchForm();
@@ -835,7 +835,10 @@ class UserrightsPage extends SpecialPage {
                        }
                        $ret .= "\t<td style='vertical-align:top;'>\n";
                        foreach ( $column as $group => $checkbox ) {
-                               $attr = $checkbox['disabled'] ? [ 'disabled' => 'disabled' ] : [];
+                               $attr = [ 'class' => 'mw-userrights-groupcheckbox' ];
+                               if ( $checkbox['disabled'] ) {
+                                       $attr['disabled'] = 'disabled';
+                               }
 
                                $member = UserGroupMembership::getGroupMemberName( $group, $user->getName() );
                                if ( $checkbox['irreversible'] ) {
@@ -847,10 +850,6 @@ class UserrightsPage extends SpecialPage {
                                }
                                $checkboxHtml = Xml::checkLabel( $text, "wpGroup-" . $group,
                                        "wpGroup-" . $group, $checkbox['set'], $attr );
-                               $ret .= "\t\t" . ( ( $checkbox['disabled'] && $checkbox['disabled-expiry'] )
-                                       ? Xml::tags( 'div', [ 'class' => 'mw-userrights-disabled' ], $checkboxHtml )
-                                       : Xml::tags( 'div', [], $checkboxHtml )
-                               ) . "\n";
 
                                if ( $this->canProcessExpiries() ) {
                                        $uiUser = $this->getUser();
@@ -920,7 +919,10 @@ class UserrightsPage extends SpecialPage {
                                                $expiryHtml .= $expiryFormOptions->getHTML() . '<br />';
 
                                                // Add custom expiry field
-                                               $attribs = [ 'id' => "mw-input-wpExpiry-$group-other" ];
+                                               $attribs = [
+                                                       'id' => "mw-input-wpExpiry-$group-other",
+                                                       'class' => 'mw-userrights-expiryfield',
+                                               ];
                                                if ( $checkbox['disabled-expiry'] ) {
                                                        $attribs['disabled'] = 'disabled';
                                                }
@@ -939,8 +941,12 @@ class UserrightsPage extends SpecialPage {
                                                'id' => "mw-userrights-nested-wpGroup-$group",
                                                'class' => 'mw-userrights-nested',
                                        ];
-                                       $ret .= "\t\t\t" . Xml::tags( 'div', $divAttribs, $expiryHtml ) . "\n";
+                                       $checkboxHtml .= "\t\t\t" . Xml::tags( 'div', $divAttribs, $expiryHtml ) . "\n";
                                }
+                               $ret .= "\t\t" . ( ( $checkbox['disabled'] && $checkbox['disabled-expiry'] )
+                                       ? Xml::tags( 'div', [ 'class' => 'mw-userrights-disabled' ], $checkboxHtml )
+                                       : Xml::tags( 'div', [], $checkboxHtml )
+                               ) . "\n";
                        }
                        $ret .= "\t</td>\n";
                }
index 73bc5f8..c06eea0 100644 (file)
@@ -174,6 +174,10 @@ class RemexCompatMunger implements TreeHandler {
                        $length, $sourceStart, $sourceLength );
        }
 
+       private function trace( $msg ) {
+               // echo "[RCM] $msg\n";
+       }
+
        /**
         * Insert or reparent an element. Create p-wrappers or split the tag stack
         * as necessary.
@@ -242,6 +246,7 @@ class RemexCompatMunger implements TreeHandler {
                if ( $under && $parentData->isPWrapper && !$inline ) {
                        // [B/b] The element is non-inline and the parent is a p-wrapper,
                        // close the parent and insert into its parent instead
+                       $this->trace( 'insert B/b' );
                        $newParent = $this->serializer->getParentNode( $parent );
                        $parent = $newParent;
                        $parentData = $parent->snData;
@@ -255,12 +260,14 @@ class RemexCompatMunger implements TreeHandler {
                        // [CS/b, DS/i] The parent is splittable and the current element is
                        // inline in block context, or if the current element is a block
                        // under a p-wrapper, split the tag stack.
+                       $this->trace( $inline ? 'insert DS/i' : 'insert CS/b' );
                        $newRef = $this->splitTagStack( $newRef, $inline, $sourceStart );
                        $parent = $newRef;
                        $parentData = $parent->snData;
                } elseif ( $under && $parentData->needsPWrapping && $inline ) {
                        // [A/i] If the element is inline and we are in body/blockquote,
                        // we need to create a p-wrapper
+                       $this->trace( 'insert A/i' );
                        $newRef = $this->insertPWrapper( $newRef, $sourceStart );
                        $parent = $newRef;
                        $parentData = $parent->snData;
@@ -268,9 +275,12 @@ class RemexCompatMunger implements TreeHandler {
                        // [CU/b] If the element is non-inline and (despite attempting to
                        // split above) there is still an ancestor p-wrap, disable that
                        // p-wrap
+                       $this->trace( 'insert CU/b' );
                        $this->disablePWrapper( $parent, $sourceStart );
+               } else {
+                       // [A/b, B/i, C/i, D/b, DU/i] insert as normal
+                       $this->trace( 'insert normal' );
                }
-               // else [A/b, B/i, C/i, D/b, DU/i] insert as normal
 
                // An element with element children is a non-blank element
                $parentData->nonblankNodeCount++;
@@ -457,6 +467,20 @@ class RemexCompatMunger implements TreeHandler {
 
        public function reparentChildren( Element $element, Element $newParent, $sourceStart ) {
                $self = $element->userData;
+               if ( $self->snData->childPElement ) {
+                       // Reparent under the p-wrapper instead, so that e.g.
+                       //   <blockquote><mw:p-wrap>...</mw:p-wrap></blockquote>
+                       // becomes
+                       //   <blockquote><mw:p-wrap><i>...</i></mw:p-wrap></blockquote>
+
+                       // The formatting element should not be the parent of the p-wrap.
+                       // Without this special case, the insertElement() of the <i> below
+                       // would be diverted into the p-wrapper, causing infinite recursion
+                       // (T178632)
+                       $this->reparentChildren( $self->snData->childPElement, $newParent, $sourceStart );
+                       return;
+               }
+
                $children = $self->children;
                $self->children = [];
                $this->insertElement( TreeBuilder::UNDER, $element, $newParent, false, $sourceStart, 0 );
@@ -464,6 +488,7 @@ class RemexCompatMunger implements TreeHandler {
                $newParentId = $newParentNode->id;
                foreach ( $children as $child ) {
                        if ( is_object( $child ) ) {
+                               $this->trace( "reparent <{$child->name}>" );
                                $child->parentId = $newParentId;
                        }
                }
index d614a38..08d148f 100644 (file)
@@ -75,4 +75,43 @@ class RemexMungerData {
        public function __set( $name, $value ) {
                throw new \Exception( "Cannot set property \"$name\"" );
        }
+
+       /**
+        * Get a text representation of the current state of the serializer, for
+        * debugging.
+        *
+        * @return string
+        */
+       public function dump() {
+               if ( $this->childPElement ) {
+                       $parts[] = 'childPElement=' . $this->childPElement->getDebugTag();
+               }
+               if ( $this->ancestorPNode ) {
+                       $parts[] = "ancestorPNode=<{$this->ancestorPNode->name}>";
+               }
+               if ( $this->wrapBaseNode ) {
+                       $parts[] = "wrapBaseNode=<{$this->wrapBaseNode->name}>";
+               }
+               if ( $this->currentCloneElement ) {
+                       $parts[] = "currentCloneElement=" . $this->currentCloneElement->getDebugTag();
+               }
+               if ( $this->isPWrapper ) {
+                       $parts[] = 'isPWrapper';
+               }
+               if ( $this->isSplittable ) {
+                       $parts[] = 'isSplittable';
+               }
+               if ( $this->needsPWrapping ) {
+                       $parts[] = 'needsPWrapping';
+               }
+               if ( $this->nonblankNodeCount ) {
+                       $parts[] = "nonblankNodeCount={$this->nonblankNodeCount}";
+               }
+               $s = "RemexMungerData {\n";
+               foreach ( $parts as $part ) {
+                       $s .= "  $part\n";
+               }
+               $s .= "}\n";
+               return $s;
+       }
 }
index 7c370f1..77c1953 100644 (file)
@@ -34,22 +34,27 @@ use Wikimedia\Assert\Assert;
  * @since 1.23
  */
 class TitleValue implements LinkTarget {
+
        /**
+        * @deprecated in 1.31. This class is immutable. Use the getter for access.
         * @var int
         */
        protected $namespace;
 
        /**
+        * @deprecated in 1.31. This class is immutable. Use the getter for access.
         * @var string
         */
        protected $dbkey;
 
        /**
+        * @deprecated in 1.31. This class is immutable. Use the getter for access.
         * @var string
         */
        protected $fragment;
 
        /**
+        * @deprecated in 1.31. This class is immutable. Use the getter for access.
         * @var string
         */
        protected $interwiki;
@@ -89,6 +94,7 @@ class TitleValue implements LinkTarget {
        }
 
        /**
+        * @since 1.23
         * @return int
         */
        public function getNamespace() {
@@ -105,6 +111,7 @@ class TitleValue implements LinkTarget {
        }
 
        /**
+        * @since 1.23
         * @return string
         */
        public function getFragment() {
@@ -122,6 +129,7 @@ class TitleValue implements LinkTarget {
        /**
         * Returns the title's DB key, as supplied to the constructor,
         * without namespace prefix or fragment.
+        * @since 1.23
         *
         * @return string
         */
@@ -132,6 +140,7 @@ class TitleValue implements LinkTarget {
        /**
         * Returns the title in text form,
         * without namespace prefix or fragment.
+        * @since 1.23
         *
         * This is computed from the DB key by replacing any underscores with spaces.
         *
@@ -185,6 +194,7 @@ class TitleValue implements LinkTarget {
         * Returns a string representation of the title, for logging. This is purely informative
         * and must not be used programmatically. Use the appropriate TitleFormatter to generate
         * the correct string representation for a given use.
+        * @since 1.23
         *
         * @return string
         */
index 854ebbd..37a80f2 100644 (file)
@@ -27,6 +27,7 @@ use MediaWiki\Session\Token;
 use MediaWiki\Auth\AuthManager;
 use MediaWiki\Auth\AuthenticationResponse;
 use MediaWiki\Auth\AuthenticationRequest;
+use MediaWiki\User\UserIdentity;
 use Wikimedia\ScopedCallback;
 use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\DBExpectedError;
@@ -48,7 +49,7 @@ define( 'EDIT_TOKEN_SUFFIX', Token::SUFFIX );
  * for rendering normal pages are set in the cookie to minimize use
  * of the database.
  */
-class User implements IDBAccessObject {
+class User implements IDBAccessObject, UserIdentity {
        /**
         * @const int Number of characters in user_token field.
         */
diff --git a/includes/user/UserIdentity.php b/includes/user/UserIdentity.php
new file mode 100644 (file)
index 0000000..57a0408
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Interface for objects representing user identity.
+ *
+ * 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
+ */
+
+namespace MediaWiki\User;
+
+/**
+ * Interface for objects representing user identity.
+ *
+ * This represents the identity of a user in the context of page revisions and log entries.
+ *
+ * @since 1.31
+ */
+interface UserIdentity {
+
+       /**
+        * @since 1.31
+        *
+        * @return int The user ID. May be 0 for anonymous users or for users with no local account.
+        */
+       public function getId();
+
+       /**
+        * @since 1.31
+        *
+        * @return string The user's logical name. May be an IPv4 or IPv6 address for anonymous users.
+        */
+       public function getName();
+
+       // TODO: in the future, we should also provide access to the actor ID here.
+       // TODO: we may want to (optionally?) provide a global ID, see CentralIdLookup.
+
+}
index 1f720af..a84c4b8 100644 (file)
@@ -39,6 +39,7 @@ class LanguageConverter {
         */
        static public $languagesWithVariants = [
                'en',
+               'crh',
                'gan',
                'iu',
                'kk',
diff --git a/languages/classes/LanguageCrh.php b/languages/classes/LanguageCrh.php
new file mode 100644 (file)
index 0000000..f384471
--- /dev/null
@@ -0,0 +1,296 @@
+<?php
+/**
+ * Crimean Tatar (Qırımtatarca) specific code.
+ *
+ * Adapted from https://crh.wikipedia.org/wiki/Qullan%C4%B1c%C4%B1:Don_Alessandro/Translit
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Language
+ */
+
+/**
+ * Crimean Tatar (Qırımtatarca) converter routines
+ *
+ * @ingroup Language
+ */
+class CrhConverter extends LanguageConverter {
+       // Defines working character ranges
+       const WORD_BEGINS = '\r\s\"\'\(\)\-<>\[\]\/.,:;!?';
+       const WORD_ENDS = '\r\s\"\'\(\)\-<>\[\]\/.,:;!?';
+
+       // Cyrillic
+       const C_UC = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'; # Crimean Tatar Cyrillic uppercase
+       const C_LC = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'; # Crimean Tatar Cyrillic lowercase
+       const C_CONS_UC = 'БВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ'; # Crimean Tatar Cyrillic + CÑ uppercase consonants
+       const C_CONS_LC = 'бвгджзйклмнпрстфхцчшщcñ'; # Crimean Tatar Cyrillic + CÑ lowercase consonants
+       const C_M_CONS = 'бгкмпшcБГКМПШC'; # Crimean Tatar Cyrillic M-type consonants
+
+       # Crimean Tatar Cyrillic + CÑ consonants
+       const C_CONS = 'бвгджзйклмнпрстфхцчшщcñБВГДЖЗЙКЛМНПРСТФХЦЧШЩCÑ';
+
+       // Latin
+       const L_UC = 'AÂBCÇDEFGĞHIİJKLMNÑOÖPQRSŞTUÜVYZ'; # Crimean Tatar Latin uppercase
+       const L_LC = 'aâbcçdefgğhıijklmnñoöpqrsştuüvyz'; # Crimean Tatar Latin lowercase
+       const L_N_CONS_UC = 'ÇNRSTZ'; # Crimean Tatar Latin N-type upper case consonants
+       const L_N_CONS_LC = 'çnrstz'; # Crimean Tatar Latin N-type lower case consonants
+       const L_N_CONS = 'çnrstzÇNRSTZ'; # Crimean Tatar Latin N-type consonants
+       const L_M_CONS = 'bcgkmpşBCGKMPŞ'; # Crimean Tatar Latin M-type consonants
+       const L_CONS_UC = 'BCÇDFGHJKLMNÑPRSŞTVZ'; # Crimean Tatar Latin uppercase consonants
+       const L_CONS_LC = 'bcçdfghjklmnñprsştvz'; # Crimean Tatar Latin lowercase consonants
+       const L_CONS = 'bcçdfghjklmnñprsştvzBCÇDFGHJKLMNÑPRSŞTVZ'; # Crimean Tatar Latin consonants
+       const L_VOW_UC = 'AÂEIİOÖUÜ'; # Crimean Tatar Latin uppercase vowels
+       const L_VOW = 'aâeıioöuüAÂEIİOÖUÜ'; # Crimean Tatar Latin vowels
+       const L_F_UC = 'EİÖÜ'; # Crimean Tatar Latin uppercase front vowels
+       const L_F = 'eiöüEİÖÜ'; # Crimean Tatar Latin front vowels
+
+       public $mCyrillicToLatin = [
+
+               ## these are independent of location in the word, but have
+               ## to go first so other transforms don't bleed them
+               'гъ' => 'ğ', 'Гъ' => 'Ğ', 'ГЪ' => 'Ğ',
+               'къ' => 'q', 'Къ' => 'Q', 'КЪ' => 'Q',
+               'нъ' => 'ñ', 'Нъ' => 'Ñ', 'НЪ' => 'Ñ',
+               'дж' => 'c', 'Дж' => 'C', 'ДЖ' => 'C',
+
+               'А' => 'A', 'а' => 'a', 'Б' => 'B', 'б' => 'b',
+               'В' => 'V', 'в' => 'v', 'Г' => 'G', 'г' => 'g',
+               'Д' => 'D', 'д' => 'd', 'Ж' => 'J', 'ж' => 'j',
+               'З' => 'Z', 'з' => 'z', 'И' => 'İ', 'и' => 'i',
+               'Й' => 'Y', 'й' => 'y', 'К' => 'K', 'к' => 'k',
+               'Л' => 'L', 'л' => 'l', 'М' => 'M', 'м' => 'm',
+               'Н' => 'N', 'н' => 'n', 'П' => 'P', 'п' => 'p',
+               'Р' => 'R', 'р' => 'r', 'С' => 'S', 'с' => 's',
+               'Т' => 'T', 'т' => 't', 'Ф' => 'F', 'ф' => 'f',
+               'Х' => 'H', 'х' => 'h', 'Ч' => 'Ç', 'ч' => 'ç',
+               'Ш' => 'Ş', 'ш' => 'ş', 'Ы' => 'I', 'ы' => 'ı',
+               'Э' => 'E', 'э' => 'e', 'Е' => 'E', 'е' => 'e',
+               'Я' => 'Â', 'я' => 'â', 'У' => 'U', 'у' => 'u',
+               'О' => 'O', 'о' => 'o',
+
+               'Ё' => 'Yo', 'ё' => 'yo', 'Ю' => 'Yu', 'ю' => 'yu',
+               'Ц' => 'Ts', 'ц' => 'ts', 'Щ' => 'Şç', 'щ' => 'şç',
+               'Ь' => '', 'ь' => '', 'Ъ' => '', 'ъ' => '',
+
+       ];
+
+       public $mLatinToCyrillic = [
+               'Â' => 'Я', 'â' => 'я', 'B' => 'Б', 'b' => 'б',
+               'Ç' => 'Ч', 'ç' => 'ч', 'D' => 'Д', 'd' => 'д',
+               'F' => 'Ф', 'f' => 'ф', 'G' => 'Г', 'g' => 'г',
+               'H' => 'Х', 'h' => 'х', 'I' => 'Ы', 'ı' => 'ы',
+               'İ' => 'И', 'i' => 'и', 'J' => 'Ж', 'j' => 'ж',
+               'K' => 'К', 'k' => 'к', 'L' => 'Л', 'l' => 'л',
+               'M' => 'М', 'm' => 'м', 'N' => 'Н', 'n' => 'н',
+               'O' => 'О', 'o' => 'о', 'P' => 'П', 'p' => 'п',
+               'R' => 'Р', 'r' => 'р', 'S' => 'С', 's' => 'с',
+               'Ş' => 'Ш', 'ş' => 'ш', 'T' => 'Т', 't' => 'т',
+               'V' => 'В', 'v' => 'в', 'Z' => 'З', 'z' => 'з',
+
+               'ya' => 'я', 'Ya' => 'Я', 'YA' => 'Я',
+               'ye' => 'е', 'YE' => 'Е', 'Ye' => 'Е',
+
+               // hack, hack, hack
+               'A' => 'А', 'a' => 'а', 'E' => 'Е', 'e' => 'е',
+               'Ö' => 'О', 'ö' => 'о', 'U' => 'У', 'u' => 'у',
+               'Ü' => 'У', 'ü' => 'у', 'Y' => 'Й', 'y' => 'й',
+
+               'C' => 'Дж', 'c' => 'дж', 'Ğ' => 'Гъ', 'ğ' => 'гъ',
+               'Ñ' => 'Нъ', 'ñ' => 'нъ', 'Q' => 'Къ', 'q' => 'къ',
+
+               ];
+
+       public $mExceptions = [];
+       public $mCyrl2LatnPatterns = [];
+       public $mLatn2CyrlPatterns = [];
+       public $mCyrlCleanUpRegexes = [];
+
+       public $mExceptionsLoaded = false;
+
+       function loadDefaultTables() {
+               $this->mTables = [
+                       'crh-latn' => new ReplacementArray( $this->mCyrillicToLatin ),
+                       'crh-cyrl' => new ReplacementArray( $this->mLatinToCyrillic ),
+                       'crh' => new ReplacementArray()
+               ];
+       }
+
+       function postLoadTables() {
+               $this->loadExceptions();
+       }
+
+       function loadExceptions() {
+               if ( $this->mExceptionsLoaded ) {
+                       return;
+               }
+
+               $this->mExceptionsLoaded = true;
+               $crhExceptions = new MediaWiki\Languages\Data\CrhExceptions();
+               list( $this->mExceptions, $this->mCyrl2LatnPatterns, $this->mLatn2CyrlPatterns,
+                       $this->mCyrlCleanUpRegexes ) = $crhExceptions->loadExceptions( self::L_LC . self::C_LC,
+                       self::L_UC . self::C_UC );
+       }
+
+       /**
+        * A function wrapper:
+        *   - if there is no selected variant, leave the link
+        *     names as they were
+        *   - do not try to find variants for usernames
+        *
+        * @param string &$link
+        * @param Title &$nt
+        * @param bool $ignoreOtherCond
+        */
+       function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
+               // check for user namespace
+               if ( is_object( $nt ) ) {
+                       $ns = $nt->getNamespace();
+                       if ( $ns == NS_USER || $ns == NS_USER_TALK ) {
+                               return;
+                       }
+               }
+
+               $oldlink = $link;
+               parent::findVariantLink( $link, $nt, $ignoreOtherCond );
+               if ( $this->getPreferredVariant() == $this->mMainLanguageCode ) {
+                       $link = $oldlink;
+               }
+       }
+
+       /**
+        *  It translates text into variant, specials:
+        *    - ommiting roman numbers
+        *
+        * @param string $text
+        * @param bool $toVariant
+        *
+        * @throws MWException
+        * @return string
+        */
+       function translate( $text, $toVariant ) {
+               $letters = '';
+               switch ( $toVariant ) {
+                       case 'crh-cyrl':
+                               $letters = self::L_UC . self::L_LC . "\'";
+                               break;
+                       case 'crh-latn':
+                               $letters = self::C_UC . self::C_LC . "";
+                               break;
+                       default:
+                               return $text;
+                               break;
+               }
+
+               if ( !$this->mTablesLoaded ) {
+                       $this->loadTables();
+               }
+
+               if ( !isset( $this->mTables[$toVariant] ) ) {
+                       throw new MWException( "Broken variant table: " . implode( ',', array_keys( $this->mTables ) ) );
+               }
+
+               // check for roman numbers like VII, XIX...
+               $roman = '/^M{0,3}(C[DM]|D{0,1}C{0,3})(X[LC]|L{0,1}X{0,3})(I[VX]|V{0,1}I{0,3})$/u';
+
+               # match any sub-string of the relevant letters and convert it
+               $matches = preg_split( '/(\b|^)[^' . $letters . ']+(\b|$)/u',
+                       $text, -1, PREG_SPLIT_OFFSET_CAPTURE );
+               $mstart = 0;
+               $ret = '';
+               foreach ( $matches as $m ) {
+                       # copy over the non-matching bit
+                       $ret .= substr( $text, $mstart, $m[1] - $mstart );
+                       # skip certain classes of strings
+
+                       if ( array_key_exists( $m[0], $this->mExceptions ) ) {
+                               # if it's an exception, just copy down the right answer
+                               $ret .= $this->mExceptions[$m[0]];
+                       } elseif ( ! $m[0] || # empty strings
+                                        preg_match( $roman, $m[0] ) || # roman numerals
+                                        preg_match( '/[^' . $letters . ']/', $m[0] ) # mixed orthography
+                                       ) {
+                               $ret .= $m[0];
+                       } else {
+                               # convert according to the rules
+                               $token = $this->regsConverter( $m[0], $toVariant );
+                               $ret .= parent::translate( $token, $toVariant );
+                       }
+                       $mstart = $m[1] + strlen( $m[0] );
+               }
+
+               # pick up stray quote marks
+               switch ( $toVariant ) {
+                       case 'crh-cyrl':
+                               $ret = strtr( $ret, [ '“' => '«', '”' => '»', ] );
+                               $ret = $this->regsConverter( $ret, 'cyrl-cleanup' );
+                               break;
+                       case 'crh-latn':
+                               $ret = strtr( $ret, [ '«' => '"', '»' => '"', ] );
+                               break;
+               }
+
+               return $ret;
+       }
+
+       private function regsConverter( $text, $toVariant ) {
+               if ( $text == '' ) return $text;
+
+               $pat = [];
+               $rep = [];
+               switch ( $toVariant ) {
+                       case 'crh-latn':
+                               foreach ( $this->mCyrl2LatnPatterns as $pat => $rep ) {
+                                       $text = preg_replace( $pat, $rep, $text );
+                               }
+                               return $text;
+                       case 'crh-cyrl':
+                               foreach ( $this->mLatn2CyrlPatterns as $pat => $rep ) {
+                                       $text = preg_replace( $pat, $rep, $text );
+                               }
+                               return $text;
+                       case 'cyrl-cleanup':
+                               foreach ( $this->mCyrlCleanUpRegexes as $pat => $rep ) {
+                                       $text = preg_replace( $pat, $rep, $text );
+                               }
+                               return $text;
+                       default:
+                               return $text;
+               }
+       }
+
+}
+
+/**
+ * Crimean Tatar (Qırımtatarca)
+ *
+ * @ingroup Language
+ */
+class LanguageCrh extends Language {
+
+       function __construct() {
+               parent::__construct();
+
+               $variants = [ 'crh', 'crh-cyrl', 'crh-latn' ];
+               $variantfallbacks = [
+                       'crh' => 'crh-latn',
+                       'crh-cyrl' => 'crh-latn',
+                       'crh-latn' => 'crh-cyrl',
+               ];
+
+               $this->mConverter = new CrhConverter( $this, 'crh', $variants, $variantfallbacks );
+       }
+}
diff --git a/languages/data/CrhExceptions.php b/languages/data/CrhExceptions.php
new file mode 100644 (file)
index 0000000..dc4b1ef
--- /dev/null
@@ -0,0 +1,830 @@
+<?php
+/**
+ * Exceptions Tables for Crimean Tatar (crh / Qırımtatarca)
+ *
+ * Adapted from https://crh.wikipedia.org/wiki/Qullan%C4%B1c%C4%B1:Don_Alessandro/Translit
+ *
+ * @file
+ */
+
+namespace MediaWiki\Languages\Data;
+
+use \CrhConverter as Crh;
+
+class CrhExceptions {
+
+       function __construct() {
+               $this->loadRegs();
+       }
+
+       public $exceptionMap = [];
+       public $Cyrl2LatnPatterns = [];
+       public $Latn2CyrlPatterns = [];
+
+       private $lc2uc;
+       private $uc2lc;
+
+       private function initLcUc( $lcChars, $ucChars, $reinit = false ) {
+               # bail if we've already done this, unless we are re-initializing
+               if ( !$reinit && $this->lc2uc && $this->uc2lc ) {
+                       return;
+               }
+
+               # split up the lc and uc lists in a unicode-friendly way
+               $myLc = [];
+               preg_match_all( '/./u', $lcChars, $myLc );
+               $myLc = $myLc[0];
+
+               $myUc = [];
+               preg_match_all( '/./u', $ucChars, $myUc );
+               $myUc = $myUc[0];
+
+               # map lc to uc and vice versa
+               $this->lc2uc = array_combine( array_values( $myLc ), array_values( $myUc ) );
+               $this->uc2lc = array_combine( array_values( $myUc ), array_values( $myLc ) );
+       }
+
+       private function myLc( $string ) {
+               return strtr( $string, $this->uc2lc );
+       }
+
+       private function myUc( $string ) {
+               return strtr( $string, $this->lc2uc );
+       }
+
+       private function myUcWord( $string ) {
+               return $this->myUc( mb_substr( $string, 0, 1 ) ) . $this->myLc( mb_substr( $string, 1 ) );
+       }
+
+       private function addMappings( $mapArray, &$A2B, &$B2A, $exactCase = false,
+                       $prePat = '', $postPat = '' ) {
+               foreach ( $mapArray as $WordA => $WordB ) {
+                       $ucA = $this->myUc( $WordA );
+                       $ucWordA = $this->myUcWord( $WordA );
+                       $ucB = $this->myUc( $WordB );
+                       $ucWordB = $this->myUcWord( $WordB );
+
+                       # if there are regexes, only map toward backregs
+                       if ( ! preg_match( '/\$[1-9]/', $WordA ) ) {
+                               $A2B[ $prePat . $WordA . $postPat ] = $WordB;
+                               if ( ! $exactCase ) {
+                                       $A2B[ $prePat . $ucWordA . $postPat ] = $ucWordB;
+                                       $A2B[ $prePat . $ucA . $postPat ] = $ucB;
+                               }
+                       }
+
+                       if ( ! preg_match( '/\$[1-9]/', $WordB ) ) {
+                               $B2A[ $prePat . $WordB . $postPat ] = $WordA;
+                               if ( ! $exactCase ) {
+                                       $B2A[ $prePat . $ucWordB . $postPat ] = $ucWordA;
+                                       $B2A[ $prePat . $ucB . $postPat ] = $ucA;
+                               }
+                       }
+               }
+       }
+
+       function loadExceptions( $lcChars, $ucChars ) {
+               # init lc and uc, as needed
+               $this->initLcUc( $lcChars, $ucChars );
+               # load C2L and L2C whole-word exceptions into the same array, since it's just a look up
+               # no regex prefix/suffix needed
+               $this->addMappings( $this->wordMappings, $this->exceptionMap, $this->exceptionMap );
+               $this->addMappings( $this->exactCaseMappings, $this->exceptionMap, $this->exceptionMap, true );
+
+               # load C2L and L2C bidirectional prefix mappings
+               $this->addMappings( $this->prefixMapping,
+                       $this->Cyrl2LatnPatterns, $this->Latn2CyrlPatterns, false, '/^', '/u' );
+               $this->addMappings( $this->suffixMapping,
+                       $this->Cyrl2LatnPatterns, $this->Latn2CyrlPatterns, false, '/', '$/u' );
+
+               # tack on one-way mappings to the ends of the prefix and suffix patterns
+               $this->Cyrl2LatnPatterns += $this->Cyrl2LatnRegexes;
+               $this->Latn2CyrlPatterns += $this->Latn2CyrlRegexes;
+
+               return [ $this->exceptionMap, $this->Cyrl2LatnPatterns,
+                       $this->Latn2CyrlPatterns, $this->CyrlCleanUpRegexes ];
+       }
+
+       # map Cyrillic to Latin and back, whole word match only
+       # variants: all lowercase, all uppercase, first letter capitalized
+       # items with capture group refs (e.g., $1) are only mapped from the
+       # regex to the reference
+       private $wordMappings = [
+
+               #### originally Cyrillic to Latin
+               'аджыумер' => 'acıümer', 'аджыусеин' => 'acıüsein', 'алейкум' => 'aleyküm',
+               'бейуде' => 'beyüde', 'боливия' => 'boliviya', 'большевик' => 'bolşevik', 'борис' => 'boris',
+               'борнен' => 'bornen', 'бугун' => 'bugün', 'бузкесен' => 'buzkesen', 'буксир' => 'buksir',
+               'бульбуль' => 'bülbül', 'бульвар' => 'bulvar', 'бульдозер' => 'buldozer', 'бульон' => 'bulyon',
+               'бунен' => 'bunen', 'буннен' => 'bunnen', 'бус-бутюн' => 'büs-bütün',
+               'бутерброд' => 'buterbrod', 'буфер' => 'bufer', 'буфет' => 'bufet', 'гонъюл' => 'göñül',
+               'горизонт' => 'gorizont', 'госпиталь' => 'gospital', 'гуливер' => 'guliver', 'гуна' => 'güna',
+               'гунях' => 'günâh', 'гургуль' => 'gürgül', 'гуя' => 'güya', 'демирёл' => 'demiryol',
+               'джуньджу' => 'cüncü', 'ёлнен' => 'yolnen', 'зумбуль' => 'zümbül', 'ильи' => 'ilyi', 'ишунь' =>
+               'işün', 'кодекс' => 'kodeks', 'кодифик' => 'kodifik', 'койлю' => 'köylü', 'коккоз' =>
+               'kökköz', 'коккозь' => 'kökköz', 'коккозю' => 'kökközü', 'кокос' => 'kokos',
+               'коллег' => 'kolleg', 'коллект' => 'kollekt', 'коллекц' => 'kollekts', 'кольцов' => 'koltsov',
+               'комбин' => 'kombin', 'комедия' => 'komediya', 'коменда' => 'komenda', 'комета' => 'kometa',
+               'комис' => 'komis', 'комит' => 'komit', 'комите' => 'komite', 'коммент' => 'komment',
+               'коммерс' => 'kommers', 'коммерц' => 'kommerts', 'компенс' => 'kompens', 'компил' => 'kompil',
+               'компьютер' => 'kompyuter', 'конвейер' => 'konveyer', 'конвен' => 'konven',
+               'конверт' => 'konvert', 'конденс' => 'kondens', 'кондитер' => 'konditer',
+               'кондиц' => 'kondits', 'коник' => 'konik', 'консерв' => 'konserv', 'контейнер' => 'konteyner',
+               'континент' => 'kontinent', 'конфе' => 'konfe', 'конфискац' => 'konfiskats',
+               'концен' => 'kontsen', 'концерт' => 'kontsert', 'конъюктур' => 'konyuktur',
+               'коньки' => 'konki', 'коньяк' => 'konyak', 'копирле' => 'kopirle', 'копия' => 'kopiya',
+               'корбекул' => 'körbekül', 'кореиз' => 'koreiz', 'коренн' => 'korenn', 'корея' => 'koreya',
+               'коридор' => 'koridor', 'корнеев' => 'korneyev', 'корре' => 'korre', 'корьбекул' =>
+               'körbekül', 'косме' => 'kosme', 'космик' => 'kosmik', 'костюм' => 'kostüm', 'котельн' =>
+               'koteln', 'котировка' => 'kotirovka', 'котлет' => 'kotlet', 'кочергин' => 'koçergin',
+               'коше' => 'köşe', 'кудрин' => 'kudrin', 'кузнец' => 'kuznets', 'кулинар' => 'kulinar',
+               'кулич' => 'kuliç', 'кульминац' => 'kulminats', 'культив' => 'kultiv',
+               'культура' => 'kultura', 'куркулет' => 'kürkület', 'курсив' => 'kursiv', 'кушку' => 'küşkü',
+               'куюк' => 'küyük', 'къарагоз' => 'qaragöz', 'къолязма' => 'qolyazma', 'къуртумер' =>
+               'qurtümer', 'къуртусеин' => 'qurtüsein', 'марьино' => 'maryino', 'медьюн' => 'medyun',
+               'месули' => 'mesüli', 'месуль' => 'mesül', 'мефкуре' => 'mefküre', 'могедек' => 'mögedek',
+               'муур' => 'müür', 'муче' => 'müçe', 'муюз' => 'müyüz', 'огнево' => 'ognevo',
+               'одеколон' => 'odekolon', 'одеса' => 'odesa', 'одесса' => 'odessa', 'озерки' => 'ozerki',
+               'озерн' => 'ozern', 'озёрн' => 'ozörn', 'океан' => 'okean', 'оленев' => 'olenev',
+               'олимп' => 'olimp', 'ольчер' => 'ölçer', 'онен' => 'onen', 'оннен' => 'onnen',
+               'опера' => 'opera', 'оптим' => 'optim', 'опци' => 'optsi', 'опция' => 'optsiya',
+               'орден' => 'orden', 'ордер' => 'order', 'ореанда' => 'oreanda', 'орех' => 'oreh',
+               'оригинал' => 'original', 'ориент' => 'oriyent', 'оркестр' => 'orkestr', 'орлин' => 'orlin',
+               'офис' => 'ofis', 'офицер' => 'ofitser', 'офсет' => 'ofset', 'оюннен' => 'oyunnen', 'побед' =>
+               'pobed', 'полево' => 'polevo', 'поли' => 'poli', 'полюшко' => 'polüşko',
+               'помидор' => 'pomidor', 'пониз' => 'poniz', 'порфир' => 'porfir', 'потелов' => 'potelov',
+               'почетн' => 'poçetn', 'почётн' => 'poçötn', 'публик' => 'publik', 'публиц' => 'publits',
+               'пушкин' => 'puşkin', 'сеитумер' => 'seitümer', 'сеитусеин' => 'seitüsein', 'сеитягъя' =>
+               'seityağya', 'сеитягья' => 'seityagya', 'сеитяхья' => 'seityahya', 'сеитяя' => 'seityaya',
+               'сейитумер' => 'seyitümer', 'сейитусеин' => 'seyitüsein', 'сейитягъя' => 'seyityağya',
+               'сейитягья' => 'seyityagya', 'сейитяхья' => 'seyityahya', 'сейитяя' => 'seyityaya',
+               'ультимат' => 'ultimat', 'ультра' => 'ultra', 'ульянов' => 'ulyanov', 'универ' => 'univer',
+               'уника' => 'unika', 'унтер' => 'unter', 'урьян' => 'uryan', 'уткин' => 'utkin', 'учебн' =>
+               'uçebn', 'шовини' => 'şovini', 'шоссе' => 'şosse', 'шубин' => 'şubin', 'шунен' => 'şunen',
+               'шуннен' => 'şunnen', 'щёлкино' => 'şçolkino', 'эмирусеин' => 'emirüsein',
+               'юзбашы' => 'yüzbaşı', 'юзйыл' => 'yüzyıl', 'юртер' => 'yurter', 'ющенко' => 'yuşçenko',
+
+               'кою' => 'köyü', 'кок' => 'kök', 'ком-кок' => 'köm-kök', 'коп' => 'köp', 'ог' => 'ög',
+               'юрип' => 'yürip', 'юз' => 'yüz', 'юк' => 'yük', 'буюп' => 'büyüp', 'буюк' => 'büyük',
+               'джонк' => 'cönk', 'джонкю' => 'cönkü', 'устке' => 'üstke', 'устте' => 'üstte',
+               'усттен' => 'üstten',
+
+               # шофёр needs to come after шофер to override it in the Latin-to-Cyrillic direction
+               'шофер' => 'şoför',
+               'шофёр' => 'şoför',
+
+               #### originally Latin to Cyrillic (deduped from above)
+
+               # слова на -аль
+               # words in -аль
+               'актуаль' => 'aktual', 'диагональ' => 'diagonal', 'документаль' => 'dokumental',
+               'эмсаль' => 'emsal', 'фааль' => 'faal', 'феодаль' => 'feodal', 'фестиваль' => 'festival',
+               'горизонталь' => 'gorizontal', 'хроникаль' => 'hronikal', 'идеаль' => 'ideal',
+               'инструменталь' => 'instrumental', 'икъмаль' => 'iqmal', 'икъбаль' => 'iqbal',
+               'истикъбаль' => 'istiqbal', 'истикъляль' => 'istiqlâl', 'италия' => 'italiya',
+               'италья' => 'italya', 'ишгъаль' => 'işğal', 'кафедраль' => 'kafedral', 'казуаль' => 'kazual',
+               'коллегиаль' => 'kollegial', 'колоссаль' => 'kolossal', 'коммуналь' => 'kommunal',
+               'кординаль' => 'kordinal', 'криминаль' => 'kriminal', 'легаль' => 'legal', 'леталь' => 'letal',
+               'либераль' => 'liberal', 'локаль' => 'lokal', 'магистраль' => 'magistral',
+               'материаль' => 'material', 'машиналь' => 'maşinal', 'меаль' => 'meal',
+               'медальон' => 'medalyon', 'медаль' => 'medal', 'меридиональ' => 'meridional',
+               'мешъаль' => 'meşal', 'минераль' => 'mineral', 'минималь' => 'minimal', 'мисаль' => 'misal',
+               'модаль' => 'modal', 'музыкаль' => 'muzıkal', 'номиналь' => 'nominal', 'нормаль' => 'normal',
+               'оптималь' => 'optimal', 'орбиталь' => 'orbital', 'оригиналь' => 'original',
+               'педаль' => 'pedal', 'пропорциональ' => 'proportsional', 'профессиональ' => 'professional',
+               'радикаль' => 'radikal', 'рациональ' => 'ratsional', 'реаль' => 'real',
+               'региональ' => 'regional', 'суаль' => 'sual', 'шималь' => 'şimal',
+               'территориаль' => 'territorial', 'тимсаль' => 'timsal', 'тоталь' => 'total',
+               'уникаль' => 'unikal', 'универсаль' => 'universal', 'вертикаль' => 'vertikal',
+               'виртуаль' => 'virtual', 'визуаль' => 'vizual', 'вуаль' => 'vual', 'зональ' => 'zonal',
+               'зуаль' => 'zual',
+
+               # слова с мягким знаком перед а, о, у, э
+               # Words with a soft sign before а, о, у, э
+               'бильакис' => 'bilakis', 'маальэсеф' => 'maalesef',
+               'мельун' => 'melun', 'озьара' => 'özara', 'вельасыл' => 'velasıl',
+               'ельаякъ' => 'yelayaq',
+               # these are ordered so C2L is correct (the later Latin one)
+               'февкъульаде' => 'fevqülade','февкъульаде' => 'fevqulade',
+
+               # другие слова с мягким знаком
+               # Other words with a soft sign
+               'альбатрос' => 'albatros', 'альбинос' => 'albinos', 'альбом' => 'albom',
+               'альбумин' => 'albumin', 'алфавит' => 'alfavit', 'альфа' => 'alfa', 'альманах' => 'almanah',
+               'альпинист' => 'alpinist', 'альтерн' => 'altern', 'альтру' => 'altru', 'альвеола' => 'alveola',
+               'ансамбль' => 'ansambl', 'аньане' => 'anane', 'асфальт' => 'asfalt', 'бальнео' => 'balneo',
+               'баарь' => 'baar', 'базальт' => 'bazalt', 'бинокль' => 'binokl', 'джурьат' => 'curat',
+               'джурьат' => 'cürat', 'девальв' => 'devalv', 'факульт' => 'fakult', 'фальсиф' => 'falsif',
+               'фольклор' => 'folklor', 'гальван' => 'galvan', 'геральд' => 'gerald', 'женьшень' => 'jenşen',
+               'инвентарь' => 'inventar', 'кальк' => 'kalk', 'кальмар' => 'kalmar', 'консульт' => 'konsult',
+               'контроль' => 'kontrol', 'кульмин' => 'kulmin', 'культур' => 'kultur', 'лагерь' => 'lager',
+               'макъбуль' => 'maqbul', 'макъуль' => 'maqul', 'мальт' => 'malt', 'мальземе' => 'malzeme',
+               'меджуль' => 'mecul', 'мешгуль' => 'meşgül', 'мешгъуль' => 'meşğul', 'мульти' => 'multi',
+               'мусульман' => 'musulman', 'нефть' => 'neft', 'пальто' => 'palto', 'пароль' => 'parol',
+               'патруль' => 'patrul', 'пенальти' => 'penalti', 'къальби' => 'qalbi', 'къальпке' => 'qalpke',
+               'къальплер' => 'qalpler', 'къальпни' => 'qalpni', 'къальпте' => 'qalpte', 'къаарь' => 'qaar',
+               'ресуль' => 'resul', 'рыцарь' => 'rıtsar', 'рояль' => 'royal', 'саарь' => 'saar',
+               'спираль' => 'spiral', 'сульх' => 'sulh', 'сумбуль' => 'sumbul', 'суньий' => 'suniy',
+               'темаюль' => 'temayul', 'шампунь' => 'şampun', 'вальс' => 'vals', 'вальц' => 'valts',
+               'ведомость' => 'vedomost', 'зулькъарнейн' => 'zulqarneyn', 'январь' => 'yanvar',
+               'февраль' => 'fevral', 'июнь' => 'iyün', 'сентябрь' => 'sentâbr', 'октябрь' => 'oktâbr',
+               'ноябрь' => 'noyabr', 'декабрь' => 'dekabr',
+
+               # слова с твёрдым знаком
+               # Words with a solid sign
+               'бидъат' => 'bidat', 'бузъюрек' => 'buzyürek', 'атешъюрек' => 'ateşyürek',
+               'алъянакъ' => 'alyanaq', 'демиръёл' => 'demiryol', 'деръал' => 'deral', 'инъекц' => 'inyekts',
+               'мефъум' => 'mefum', 'мешъум' => 'meşum', 'объект' => 'obyekt', 'разъезд' => 'razyezd',
+               'субъект' => 'subyekt', 'хавъяр' => 'havyar', 'ямъям' => 'yamyam',
+
+               # слова с буквой щ
+               # words with щ
+               'ящик' => 'yaşçik', 'мещан' => 'meşçan',
+
+               # слова с буквой ц
+               # words with ц
+               'акциз' => 'aktsiz', 'ацет' => 'atset', 'блиц' => 'blits', 'бруцеллёз' => 'brutsellöz',
+               'доцент' => 'dotsent', 'фармацевт' => 'farmatsevt', 'глицер' => 'glitser',
+               'люцерна' => 'lütserna', 'лицей' => 'litsey', 'меццо' => 'metstso', 'наци' => 'natsi',
+               'проце' => 'protse', 'рецеп' => 'retsep', 'реценз' => 'retsenz', 'теплица' => 'teplitsa',
+               'вице' => 'vitse', 'цепс' => 'tseps', 'швейцар' => 'şveytsar',
+
+               # слова без буквы тс
+               # words with тс
+               'агъартс' => 'ağarts', 'агъыртс' => 'ağırts', 'бильдиртс' => 'bildirts', 'битсин' => 'bitsin',
+               'буюльтс' => 'büyülts', 'буютс' => 'büyüts', 'гебертс' => 'geberts', 'делиртс' => 'delirts',
+               'эгрильтс' => 'egrilts', 'эксильтс' => 'eksilts', 'эшитс' => 'eşits', 'иритс' => 'irits',
+               'иситс' => 'isits', 'ичиртс' => 'içirts', 'кертсин' => 'kertsin', 'кенишлетс' => 'kenişlets',
+               'кийсетс' => 'kiysets', 'копюртс' => 'köpürts', 'косьтертс' => 'kösterts',
+               'кучертс' => 'küçerts', 'кучюльтс' => 'küçülts', 'пертсин' => 'pertsin', 'къайтс' => 'qayts',
+               'къутсуз' => 'qutsuz', 'орьтс' => 'örts', 'отьс' => 'öts', 'тартс' => 'tarts',
+               'тутсун' => 'tutsun', 'тюнъюльтс' => 'tüñülts', 'тюртс' => 'türts', 'янъартс' => 'yañarts',
+               'ебертс' => 'yeberts', 'етсин' => 'yetsin', 'ешертс' => 'yeşerts', 'йиритс' => 'yirits',
+
+               # разные исключения
+               # different exceptions
+               'бейуде' => 'beyude', 'бугунь' => 'bugün', 'бюджет' => 'bücet', 'бюллет' => 'büllet',
+               'бюро' => 'büro', 'бюст' => 'büst', 'джонк' => 'cönk', 'диалог' => 'dialog',
+               'гонъюль' => 'göñül', 'ханымэфенди' => 'hanımefendi', 'каньон' => 'kanyon', 'кирил' => 'kiril',
+               'кирил' => 'kirill', 'кёрджа' => 'körca', 'кой' => 'köy', 'кулеръюзь' => 'küleryüz',
+               'маалле' => 'маальle', 'майор' => 'mayor', 'маниал' => 'manиаль', 'мефкуре' => 'mefküre',
+               'месуль' => 'mesul', 'месуль' => 'mesül', 'муурь' => 'müür',
+               'нормала' => 'нормальa', 'нумюне' => 'nümüne', 'проект' => 'proekt', 'район' => 'rayon',
+               'сойады' => 'soyadı', 'спортсмен' => 'sportsmen', 'услюп' => 'üslüp', 'услюб' => 'üslüb',
+               'вакъиал' => 'vaqиаль', 'юзйыллыкъ' => 'yüzyıllıq',
+
+               # имена собственные
+               # proper names
+               'адольф' => 'adolf', 'альберт' => 'albert', 'бешуй' => 'beşüy', 'эмирусеин' => 'emirüsein',
+               'флотск' => 'flotsk', 'гайана' => 'gayana', 'грэсовский' => 'gresovskiy', 'гриц' => 'grits',
+               'гурджи' => 'gürci', 'игорь' => 'igor', 'ильич' => 'ilyiç', 'ильин' => 'ilyin',
+               'исмаил' => 'ismail', 'киттс' => 'kitts', 'комсомольск' => 'komsomolsk',
+               'корьбекулю' => 'körbekülü', 'корьбекуль' => 'körbekül', 'куницын' => 'kunitsın',
+               'львив' => 'lviv', 'львов' => 'lvov', 'марьино' => 'maryino', 'махульдюр' => 'mahuldür',
+               'павел' => 'pavel', 'пантикапейон' => 'pantikapeyon', 'къарагозь' => 'qaragöz',
+               'къуртсейит' => 'qurtseyit', 'къуртсеит' => 'qurtseit', 'къуртумер' => 'qurtümer',
+               'сейитумер' => 'seyitümer', 'сеитумер' => 'seitümer', 'смаил' => 'smail',
+               'советск' => 'sovetsk', 'шемьи-заде' => 'şemi-zade', 'щёлкино' => 'şçolkino',
+               'тсвана' => 'tsvana', 'учьэвли' => 'üçevli', 'йохан' => 'yohan', 'йорк' => 'york',
+               'ющенко' => 'yuşçenko', 'льная' => 'lnaya', 'льное' => 'lnoye', 'льный' => 'lnıy',
+               'льская' => 'lskaya', 'льский' => 'lskiy', 'льское' => 'lskoye', 'ополь' => 'opol',
+
+               # originally Latin to Cyrillic, deduped from above
+               'ань' => 'an', 'аньге' => 'ange', 'аньде' => 'ande', 'аньки' => 'anki', 'кёр' => 'kör',
+               'мэр' => 'mer', 'этсин' => 'etsin',
+
+               # exceptions added after speaker review
+               # see https://www.mediawiki.org/wiki/User:TJones_(WMF)/T23582
+               'аджизленювинъиз' => 'acizlenüviñiz', 'акъшам' => 'aqşam', 'алчакъгонъюлли' => 'alçaqgöñülli',
+               'аньанелер' => 'ananeler', 'аньанелеримиз' => 'ananelerimiz',
+               'аньанелеримизден' => 'ananelerimizden', 'аньанелеримизни' => 'ananelerimizni',
+               'аньанели' => 'ananeli', 'асфальтке' => 'asfaltke', 'баарьде' => 'baarde', 'бахтсыз' => 'bahtsız',
+               'берилюви' => 'berilüvi', 'берювден' => 'berüvden', 'берювни' => 'berüvni',
+               'большевиклер' => 'bolşevikler', 'большевиклерге' => 'bolşeviklerge', 'болюк' => 'bölük',
+               'болюнген' => 'bölüngen', 'болюнгенини' => 'bölüngenini', 'болюшип' => 'bölüşip',
+               'бугуннинъ' => 'bugünniñ', 'бугуньден' => 'bugünden', 'бугуньки' => 'bugünki',
+               'букюльген' => 'bükülgen', 'букюльди' => 'büküldi', 'буллюр' => 'büllür',
+               'бурюмчик' => 'bürümçik', 'бурюнген' => 'bürüngen', 'бутюн' => 'bütün', 'бутюнлей' => 'bütünley',
+               'буюген' => 'büyügen', 'буюй' => 'büyüy', 'волость' => 'volost', 'волостьларгъа' => 'volostlarğa',
+               'гонъюлини' => 'göñülini', 'гонъюлли' => 'göñülli', 'гонъюллилер' => 'göñülliler',
+               'госпиталинде' => 'gospitalinde', 'госпитальге' => 'gospitalge', 'госпитальде' => 'gospitalde',
+               'гренадёр' => 'grenadör', 'гугюм' => 'gügüm', 'гугюмлер' => 'gügümler',
+               'гугюмлери' => 'gügümleri', 'гугюмлерини' => 'gügümlerini', 'гурьсюльди' => 'gürsüldi',
+               'гурюльдештилер' => 'gürüldeştiler', 'гурюльти' => 'gürülti', 'гурюльтили' => 'gürültili',
+               'гурюльтисидир' => 'gürültisidir', 'дарульмуаллиминде' => 'darülmualliminde',
+               'дарульмуаллимининде' => 'darülmuallimininde', 'дарульмуаллиминнинъ' => 'darülmualliminniñ',
+               'дёгюльген' => 'dögülgen', 'декабрьде' => 'dekabrde', 'дёндюрилип' => 'döndürilip',
+               'дёнермиз' => 'dönermiz', 'дёнмектелер' => 'dönmekteler', 'денъишюв' => 'deñişüv',
+               'дёрдю' => 'dördü', 'дёрдюмиз' => 'dördümiz', 'дёрдюнджи' => 'dördünci', 'дёрт' => 'dört',
+               'дертлешювге' => 'dertleşüvge', 'джесюр' => 'cesür', 'джесюране' => 'cesürane',
+               'джесюрликлерини' => 'cesürliklerini', 'джонегенлерини' => 'cönegenlerini',
+               'джонедим' => 'cönedim', 'джонейлер' => 'cöneyler', 'джурьатсызлыгъына' => 'cüratsızlığına',
+               'дюгюнлер' => 'dügünler', 'дюгюнлерле' => 'dügünlerle', 'дюдюк' => 'düdük', 'дюльбер' => 'dülber',
+               'дюльбери' => 'dülberi', 'дюльберлер' => 'dülberler', 'дюльберлернинъ' => 'dülberlerniñ',
+               'дюльгер' => 'dülger', 'дюльгерге' => 'dülgerge', 'дюльгерлернинъки' => 'dülgerlerniñki',
+               'дюльгерни' => 'dülgerni', 'дюльгернинъ' => 'dülgerniñ', 'дюмбюрдетти' => 'dümbürdetti',
+               'дюмен' => 'dümen', 'дюмени' => 'dümeni', 'дюнья' => 'dünya', 'дюньявий' => 'dünyaviy',
+               'дюньяда' => 'dünyada', 'дюньяларгъа' => 'dünyalarğa', 'дюньяларда' => 'dünyalarda',
+               'дюньяны' => 'dünyanı', 'дюньянынъ' => 'dünyanıñ', 'дюньясы' => 'dünyası',
+               'ельаякълылар' => 'yelayaqlılar', 'елькъуваны' => 'yelquvanı', 'ильич' => 'i̇liç',
+               'ичюн' => 'içün', 'ичюнми' => 'içünmi', 'келюви' => 'kelüvi', 'келювини' => 'kelüvini',
+               'келювинъизде' => 'kelüviñizde', 'келювни' => 'kelüvni', 'кемирювлер' => 'kemirüvler',
+               'кесювде' => 'kesüvde', 'кетюв' => 'ketüv', 'кетювге' => 'ketüvge', 'кетюви' => 'ketüvi',
+               'кетювимни' => 'ketüvimni', 'кетювлер' => 'ketüvler', 'кетювлери' => 'ketüvleri',
+               'кетювлеринънинъ' => 'ketüvleriñniñ', 'кетювнинъ' => 'ketüvniñ', 'кирюв' => 'kirüv',
+               'князь' => 'knâz', 'козькъапакъларыны' => 'közqapaqlarını', 'козьлю' => 'közlü', 'козю' => 'közü',
+               'козюме' => 'közüme', 'козюнде' => 'közünde', 'козюне' => 'közüne', 'козюнен' => 'közünen',
+               'козюнинъ' => 'közüniñ', 'козюнъни' => 'közüñni', 'койлюде' => 'köylüde',
+               'койлюлер' => 'köylüler', 'койлюлерде' => 'köylülerde', 'койлюлерни' => 'köylülerni',
+               'койлюлернинъ' => 'köylülerniñ', 'койлюнинъ' => 'köylüniñ', 'коккозьге' => 'kökközge',
+               'коккозьде' => 'kökközde', 'коккозьдеки' => 'kökközdeki', 'коккозьден' => 'kökközden',
+               'кокюс' => 'köküs', 'кокюси' => 'köküsi', 'кокюсим' => 'köküsim', 'кокюсиме' => 'köküsime',
+               'кокюсинъе' => 'köküsiñe', 'комиссарлар' => 'komissarlar', 'комиссарлары' => 'komissarları',
+               'комитетининъ' => 'komitetiniñ', 'концлагерь' => 'kontslager', 'копьмеди' => 'köpmedi',
+               'копьти' => 'köpti', 'копюр' => 'köpür', 'копюрге' => 'köpürge', 'копюрден' => 'köpürden',
+               'копюри' => 'köpüri', 'копюрнинъ' => 'köpürniñ', 'коридорда' => 'koridorda',
+               'корьсюн' => 'körsün', 'корюв' => 'körüv', 'корюльген' => 'körülgen', 'корюнди' => 'köründi',
+               'корюндинъ' => 'köründiñ', 'корюне' => 'körüne', 'корюнип' => 'körünip',
+               'корюнмеген' => 'körünmegen', 'корюнмеди' => 'körünmedi', 'корюнмедилер' => 'körünmediler',
+               'корюнмей' => 'körünmey', 'корюнмейсинъиз' => 'körünmeysiñiz', 'корюнмекте' => 'körünmekte',
+               'корюнмектелер' => 'körünmekteler', 'корюнъиз' => 'körüñiz', 'корюше' => 'körüşe',
+               'корюшеджекмиз' => 'körüşecekmiz', 'корюшим' => 'körüşim', 'корюшип' => 'körüşip',
+               'корюширмиз' => 'körüşirmiz', 'корюшкен' => 'körüşken', 'корюшкенде' => 'körüşkende',
+               'корюшмеге' => 'körüşmege', 'корюшмегенимиз' => 'körüşmegenimiz', 'корюштик' => 'körüştik',
+               'корюштим' => 'körüştim', 'корюшюв' => 'körüşüv', 'корюшювде' => 'körüşüvde',
+               'корюшювден' => 'körüşüvden', 'корюшюви' => 'körüşüvi', 'корюшювимден' => 'körüşüvimden',
+               'корюшювимизге' => 'körüşüvimizge', 'корюшювимизден' => 'körüşüvimizden',
+               'костюми' => 'kostümi', 'кузю' => 'küzü', 'кулькюден' => 'külküden', 'кулькюнинъ' => 'külküniñ',
+               'кулькюсининъ' => 'külküsiniñ', 'кулю' => 'külü', 'кулюмсиреген' => 'külümsiregen',
+               'кулюмсиреди' => 'külümsiredi', 'кулюмсиредим' => 'külümsiredim', 'кулюмсирей' => 'külümsirey',
+               'кулюмсирейим' => 'külümsireyim', 'кулюмсиреп' => 'külümsirep', 'кулюни' => 'külüni',
+               'кулюнчли' => 'külünçli', 'кулюшинде' => 'külüşinde', 'кулюштилер' => 'külüştiler',
+               'кумюш' => 'kümüş', 'куньдюз' => 'kündüz', 'куньдюзлери' => 'kündüzleri', 'куньлюк' => 'künlük',
+               'куню' => 'künü', 'кунюмде' => 'künümde', 'кунюнде' => 'kününde', 'кунюндеми' => 'künündemi',
+               'кунюнъ' => 'künüñ', 'курькчю' => 'kürkçü', 'курьсю' => 'kürsü', 'курьсюге' => 'kürsüge',
+               'курьсюлер' => 'kürsüler', 'курючтен' => 'kürüçten', 'кутюклерни' => 'kütüklerni',
+               'кутюкли' => 'kütükli', 'кучьлю' => 'küçlü', 'кучьлюклер' => 'küçlükler',
+               'кучьсюнмезсинъ' => 'küçsünmezsiñ', 'кучюджик' => 'küçücik', 'кучюк' => 'küçük',
+               'кучюм' => 'küçüm', 'кучюмле' => 'küçümle', 'кучюнден' => 'küçünden', 'кучюни' => 'küçüni',
+               'къаарьлене' => 'qaarlene', 'къаарьли' => 'qaarli', 'къальбим' => 'qalbim',
+               'къальбимни' => 'qalbimni', 'къальбинде' => 'qalbinde', 'къальпли' => 'qalpli',
+               'къальптен' => 'qalpten', 'къалюбелядан' => 'qalübelâdan', 'къулюбенъде' => 'qulübeñde',
+               'лёман' => 'löman', 'львованынъ' => 'lvovanıñ', 'лютфи' => 'lütfi', 'лютфиге' => 'lütfige',
+               'лютфини' => 'lütfini', 'мазюн' => 'mazün', 'малюм' => 'malüm', 'малюмат' => 'malümat',
+               'махлюкъаттан' => 'mahlüqattan', 'махлюкътан' => 'mahlüqtan', 'махульдюрге' => 'mahuldürge',
+               'махульдюрде' => 'mahuldürde', 'махульдюрдеки' => 'mahuldürdeki',
+               'махульдюрден' => 'mahuldürden', 'махульдюрли' => 'mahuldürli',
+               'махульдюрлилер' => 'mahuldürliler', 'махульдюрлилермиз' => 'mahuldürlilermiz',
+               'махульдюрми' => 'mahuldürmi', 'махульдюрни' => 'mahuldürni', 'мевджут' => 'mevcut',
+               'мезкюр' => 'mezkür', 'мектюп' => 'mektüp', 'мектюпни' => 'mektüpni', 'мектюпте' => 'mektüpte',
+               'мелитопольге' => 'melitopolge', 'мемнюн' => 'memnün', 'мемнюниетле' => 'memnüniyetle',
+               'мемнюним' => 'memnünim', 'мемнюнмиз' => 'memnünmiz', 'менсюп' => 'mensüp',
+               'мешгъульмиз' => 'meşğulmiz', 'мулькюни' => 'mülküni', 'мумкюн' => 'mümkün',
+               'мумкюнми' => 'mümkünmi', 'мусульманлар' => 'musulmanlar', 'мусульманлармы' => 'musulmanlarmı',
+               'мухкемлендирюв' => 'mühkemlendirüv', 'мушкюль' => 'müşkül', 'ничюн' => 'niçün',
+               'ничюндир' => 'niçündir', 'нумюнеси' => 'nümünesi', 'огю' => 'ögü', 'огюз' => 'ögüz',
+               'огюмде' => 'ögümde', 'огюмдеки' => 'ögümdeki', 'огюме' => 'ögüme', 'огюмизге' => 'ögümizge',
+               'огюмизде' => 'ögümizde', 'огюмиздеки' => 'ögümizdeki', 'огюмни' => 'ögümni',
+               'огюнде' => 'ögünde', 'огюндеки' => 'ögündeki', 'огюндекиси' => 'ögündekisi',
+               'огюнден' => 'ögünden', 'огюне' => 'ögüne', 'огюнъизде' => 'ögüñizde', 'огютини' => 'ögütini',
+               'огютлерини' => 'ögütlerini', 'озю' => 'özü', 'озюм' => 'özüm', 'озюмден' => 'özümden',
+               'озюме' => 'özüme', 'озюмизни' => 'özümizni', 'озюмизнинъ' => 'özümizniñ',
+               'озюмизнинъки' => 'özümizniñki', 'озюмнен' => 'özümnen', 'озюмни' => 'özümni',
+               'озюмнинъ' => 'özümniñ', 'озюнде' => 'özünde', 'озюнден' => 'özünden', 'озюне' => 'özüne',
+               'озюнен' => 'özünen', 'озюни' => 'özüni', 'озюнинъ' => 'özüniñ', 'озюнинъкими' => 'özüniñkimi',
+               'озюнъ' => 'özüñ', 'озюнъе' => 'özüñe', 'озюнъиз' => 'özüñiz', 'озюнъиздеки' => 'özüñizdeki',
+               'озюнъни' => 'özüñni', 'оксюз' => 'öksüz', 'окюндим' => 'ökündim', 'ольдюрип' => 'öldürip',
+               'ольдюрмек' => 'öldürmek', 'ольдюрювде' => 'öldürüvde', 'ольчюде' => 'ölçüde', 'олюм' => 'ölüm',
+               'олюмден' => 'ölümden', 'олюмлер' => 'ölümler', 'омюр' => 'ömür', 'омюрге' => 'ömürge',
+               'омюри' => 'ömüri', 'опькеленюв' => 'öpkelenüv', 'орьтилюви' => 'örtilüvi', 'орьтюли' => 'örtüli',
+               'орюли' => 'örüli', 'орюлип' => 'örülip', 'осюв' => 'ösüv', 'осюмлик' => 'ösümlik',
+               'отькерювни' => 'ötkerüvni', 'отькюр' => 'ötkür', 'офицери' => 'ofitseri',
+               'офицерим' => 'ofitserim', 'офицерлер' => 'ofitserler', 'пальтосыны' => 'paltosını',
+               'пальтосынынъ' => 'paltosınıñ', 'пекинюв' => 'pekinüv', 'пекитювнинъ' => 'pekitüvniñ',
+               'пиширюв' => 'pişirüv', 'повидло' => 'povidlo', 'полис' => 'polis', 'полициясы' => 'politsiyası',
+               'помещик' => 'pomeşçik', 'потюк' => 'potük', 'потюклеринен' => 'potüklerinen',
+               'пулемёт' => 'pülemöt', 'пулемётларны' => 'pülemötlarnı', 'режиссёр' => 'rejissör',
+               'ролюнде' => 'rolünde', 'севастопольнинъ' => 'sevastopolniñ', 'сёгди' => 'sögdi', 'сёз' => 'söz',
+               'сёзлер' => 'sözler', 'сёзлери' => 'sözleri', 'сёзлерим' => 'sözlerim',
+               'сёзлеримден' => 'sözlerimden', 'сёзлериме' => 'sözlerime', 'сёзлеримни' => 'sözlerimni',
+               'сёзлеримнинъ' => 'sözlerimniñ', 'сёзлеринде' => 'sözlerinde', 'сёзлерине' => 'sözlerine',
+               'сёзлерини' => 'sözlerini', 'сёзлерининъ' => 'sözleriniñ', 'сёзлеринъиз' => 'sözleriñiz',
+               'сёзлеринъизни' => 'sözleriñizni', 'сёзлернен' => 'sözlernen', 'сёзлерни' => 'sözlerni',
+               'сёзлернинъ' => 'sözlerniñ', 'сёзнен' => 'söznen', 'сёзни' => 'sözni', 'сёзчиклер' => 'sözçikler',
+               'сёзчиклерден' => 'sözçiklerden', 'сёзю' => 'sözü', 'сёзюмен' => 'sözümen',
+               'сёзюмнинъ' => 'sözümniñ', 'сёзюне' => 'sözüne', 'сёзюни' => 'sözüni', 'сёзюнинъ' => 'sözüniñ',
+               'сёйле' => 'söyle', 'сёйлегенде' => 'söylegende', 'сёйлегенлеринден' => 'söylegenlerinden',
+               'сёйледи' => 'söyledi', 'сёйлей' => 'söyley', 'сёйленди' => 'söylendi',
+               'сёйленмеге' => 'söylenmege', 'сёйленмекте' => 'söylenmekte', 'сёйленъиз' => 'söyleñiz',
+               'сёнген' => 'söngen', 'сёнди' => 'söndi', 'сёндюрди' => 'söndürdi',
+               'сёндюрильген' => 'söndürilgen', 'сёндюрип' => 'söndürip', 'сентябрьнинъ' => 'sentâbrniñ',
+               'сергюзешт' => 'sergüzeşt', 'сергюзештлерни' => 'sergüzeştlerni',
+               'ставропольге' => 'stavropolge', 'сулькевич' => 'sulkeviç', 'сурьат' => 'surat',
+               'суфлёр' => 'suflör', 'сюеги' => 'süyegi', 'сюеклерге' => 'süyeklerge',
+               'сюйрекледи' => 'süyrekledi', 'сюйреле' => 'süyrele', 'сюйрен' => 'süyren',
+               'сюйренге' => 'süyrenge', 'сюйренде' => 'süyrende', 'сюйреп' => 'süyrep', 'сюйрю' => 'süyrü',
+               'сюкюнет' => 'sükünet', 'сюкюнети' => 'süküneti', 'сюкюнетте' => 'sükünette', 'сюкют' => 'süküt',
+               'сюляле' => 'sülâle', 'сюрген' => 'sürgen', 'сюрди' => 'sürdi', 'сюрмеди' => 'sürmedi',
+               'сюрюльмеген' => 'sürülmegen', 'сют' => 'süt', 'тебессюм' => 'tebessüm', 'тёкип' => 'tökip',
+               'тёкти' => 'tökti', 'тёкюльген' => 'tökülgen', 'тёкюльди' => 'töküldi',
+               'тёкюндиси' => 'tökündisi', 'тёле' => 'töle', 'тёледим' => 'töledim', 'телюке' => 'telüke',
+               'телюкели' => 'telükeli', 'тенеффюс' => 'teneffüs', 'тенеффюслер' => 'teneffüsler',
+               'тёпеге' => 'töpege', 'тёпелери' => 'töpeleri', 'тёпелерине' => 'töpelerine',
+               'тёпели' => 'töpeli', 'тёпеси' => 'töpesi', 'тёпесинден' => 'töpesinden',
+               'тёпесини' => 'töpesini', 'тёрге' => 'törge', 'тёрде' => 'törde', 'тёрдеки' => 'tördeki',
+               'тёрюне' => 'törüne', 'тешеббюсим' => 'teşebbüsim', 'тёшегинден' => 'töşeginden',
+               'тёшегине' => 'töşegine', 'тёшек' => 'töşek', 'тешеккюр' => 'teşekkür',
+               'тешеккюрлер' => 'teşekkürler', 'тёшекни' => 'töşekni', 'тёшектен' => 'töşekten',
+               'тёшели' => 'töşeli', 'тёшемек' => 'töşemek', 'тёшеп' => 'töşep', 'теэссюф' => 'teessüf',
+               'тюбю' => 'tübü', 'тюбюнде' => 'tübünde', 'тюбюндеки' => 'tübündeki', 'тюз' => 'tüz',
+               'тюзельгенге' => 'tüzelgenge', 'тюзельтмек' => 'tüzeltmek', 'тюземликлер' => 'tüzemlikler',
+               'тюзетип' => 'tüzetip', 'тюзетирим' => 'tüzetirim', 'тюзеткен' => 'tüzetken',
+               'тюзетмеге' => 'tüzetmege', 'тюзетмесенъ' => 'tüzetmeseñ', 'тюзетти' => 'tüzetti',
+               'тюзетюв' => 'tüzetüv', 'тюкенмез' => 'tükenmez', 'тюкюриктен' => 'tükürikten',
+               'тюкян' => 'tükân', 'тюкяны' => 'tükânı', 'тюкянында' => 'tükânında', 'тюм' => 'tüm',
+               'тюневин' => 'tünevin', 'тюневинки' => 'tünevinki', 'тюпсюз' => 'tüpsüz', 'тюрк' => 'türk',
+               'тюрклернинъ' => 'türklerniñ', 'тюркнинъ' => 'türkniñ', 'тюркче' => 'türkçe', 'тюркю' => 'türkü',
+               'тюркюлерини' => 'türkülerini', 'тюркюнинъ' => 'türküniñ', 'тюрлю' => 'türlü',
+               'тюртип' => 'türtip', 'тюрттинъиз' => 'türttiñiz', 'тютемекте' => 'tütemekte', 'тютюн' => 'tütün',
+               'тютюнджи' => 'tütünci', 'тюфеги' => 'tüfegi', 'тюфегини' => 'tüfegini', 'тюфек' => 'tüfek',
+               'тюфеклеринен' => 'tüfeklerinen', 'тюфеклернен' => 'tüfeklernen', 'тюфеклерни' => 'tüfeklerni',
+               'тюфекнен' => 'tüfeknen', 'тюфексиз' => 'tüfeksiz', 'тюш' => 'tüş', 'тюше' => 'tüşe',
+               'тюшеджек' => 'tüşecek', 'тюшеджексинъми' => 'tüşeceksiñmi', 'тюшем' => 'tüşem',
+               'тюшип' => 'tüşip', 'тюшкен' => 'tüşken', 'тюшкенде' => 'tüşkende', 'тюшкенлер' => 'tüşkenler',
+               'тюшмеге' => 'tüşmege', 'тюшмейим' => 'tüşmeyim', 'тюшмейлер' => 'tüşmeyler',
+               'тюшмек' => 'tüşmek', 'тюшмекте' => 'tüşmekte', 'тюшмеси' => 'tüşmesi', 'тюшсе' => 'tüşse',
+               'тюшти' => 'tüşti', 'тюштик' => 'tüştik', 'тюштилер' => 'tüştiler', 'тюштими' => 'tüştimi',
+               'тюштинъиз' => 'tüştiñiz', 'тюшювден' => 'tüşüvden', 'тюшюджек' => 'tüşücek',
+               'тюшюнген' => 'tüşüngen', 'тюшюнгендже' => 'tüşüngence', 'тюшюндже' => 'tüşünce',
+               'тюшюнджеге' => 'tüşüncege', 'тюшюнджелер' => 'tüşünceler', 'тюшюнджелери' => 'tüşünceleri',
+               'тюшюнджелерим' => 'tüşüncelerim', 'тюшюнджели' => 'tüşünceli', 'тюшюнджеси' => 'tüşüncesi',
+               'тюшюнди' => 'tüşündi', 'тюшюндим' => 'tüşündim', 'тюшюне' => 'tüşüne',
+               'тюшюнелер' => 'tüşüneler', 'тюшюнесинъиз' => 'tüşünesiñiz', 'тюшюнип' => 'tüşünip',
+               'тюшюнмеге' => 'tüşünmege', 'тюшюнмезсинъ' => 'tüşünmezsiñ', 'тюшюнмей' => 'tüşünmey',
+               'тюшюнмемек' => 'tüşünmemek', 'тюшюргенлер' => 'tüşürgenler', 'тюшюрди' => 'tüşürdi',
+               'тюшюрдик' => 'tüşürdik', 'тюшюре' => 'tüşüre', 'тюшюрип' => 'tüşürip', 'тюшюрмек' => 'tüşürmek',
+               'уджюм' => 'ücüm', 'удюр' => 'üdür', 'узюле' => 'üzüle', 'узюлип' => 'üzülip',
+               'узюльгенини' => 'üzülgenini', 'узюльди' => 'üzüldi', 'уйрюлип' => 'üyrülip',
+               'укюмет' => 'ükümet', 'укюмети' => 'ükümeti', 'укюметими' => 'ükümetimi',
+               'укюметимиз' => 'ükümetimiz', 'укюметини' => 'ükümetini', 'укюметининъ' => 'ükümetiniñ',
+               'укюметке' => 'ükümetke', 'укюметкеми' => 'ükümetkemi', 'укюметми' => 'ükümetmi',
+               'укюметнинъ' => 'ükümetniñ', 'укюметтен' => 'ükümetten', 'укюмран' => 'ükümran',
+               'улькюн' => 'ülkün', 'умюдим' => 'ümüdim', 'умют' => 'ümüt', 'умютлери' => 'ümütleri',
+               'умютсизден' => 'ümütsizden', 'усть' => 'üst', 'устьке' => 'üstke', 'устьлеринде' => 'üstlerinde',
+               'устьлериндеки' => 'üstlerindeki', 'устьлерине' => 'üstlerine', 'устьлерини' => 'üstlerini',
+               'устюрткъа' => 'üsturtqa', 'усьнюхаткъа' => 'üsnühatqa', 'усьнюхаты' => 'üsnühatı',
+               'усьтю' => 'üstü', 'усьтюмде' => 'üstümde', 'усьтюмдеки' => 'üstümdeki', 'усьтюме' => 'üstüme',
+               'усьтюнде' => 'üstünde', 'усьтюндеки' => 'üstündeki', 'усьтюндемиз' => 'üstündemiz',
+               'усьтюне' => 'üstüne', 'усьтюни' => 'üstüni', 'усьтюнлик' => 'üstünlik',
+               'усьтюнъизге' => 'üstüñizge', 'утёкунь' => 'ütökün', 'уфюрди' => 'üfürdi', 'учю' => 'üçü',
+               'учюмиз' => 'üçümiz', 'учюн' => 'üçün', 'учюнджи' => 'üçünci', 'учюнджисининъ' => 'üçüncisiniñ',
+               'ушюй' => 'üşüy', 'ушюмез' => 'üşümez', 'ушюмезсинъ' => 'üşümezsiñ',
+               'факультетинде' => 'fakultetinde', 'факультетине' => 'fakultetine',
+               'февральнинъ' => 'fevralniñ', 'харьковдаки' => 'harkovdaki', 'харьковдан' => 'harkovdan',
+               'чёкти' => 'çökti', 'чёкюрли' => 'çökürli', 'чёкюч' => 'çöküç', 'чёллюкке' => 'çöllükke',
+               'чёль' => 'çöl', 'чёльде' => 'çölde', 'чёльмек' => 'çölmek', 'чёткю' => 'çötkü',
+               'чёчамийлер' => 'çöçamiyler', 'чюнки' => 'çünki', 'чюрюди' => 'çürüdi', 'чюрюк' => 'çürük',
+               'шукюр' => 'şükür', 'шукюрлер' => 'şükürler', 'этюв' => 'etüv', 'этювден' => 'etüvden',
+               'этюви' => 'etüvi', 'этюдлар' => 'etüdlar', 'юзден' => 'yüzden', 'юзлеп' => 'yüzlep',
+               'юзлерини' => 'yüzlerini', 'юзлернен' => 'yüzlernen', 'юзлюги' => 'yüzlügi',
+               'юзлюкке' => 'yüzlükke', 'юзю' => 'yüzü', 'юзюм' => 'yüzüm', 'юзюме' => 'yüzüme',
+               'юзюмен' => 'yüzümen', 'юзюмни' => 'yüzümni', 'юзюнде' => 'yüzünde', 'юзюни' => 'yüzüni',
+               'юзюнинъ' => 'yüzüniñ', 'юзюнъ' => 'yüzüñ', 'юзюнъизге' => 'yüzüñizge', 'юклю' => 'yüklü',
+               'юксельтюв' => 'yükseltüv', 'юньлю' => 'yünlü', 'юньлюдже' => 'yünlüce',
+               'юртсеверлик' => 'yurtseverlik', 'юртюде' => 'yürtüde', 'юрьтю' => 'yürtü',
+               'юрьтюге' => 'yürtüge', 'юрьтюнинъ' => 'yürtüniñ', 'юрюльсе' => 'yürülse', 'юрюнъиз' => 'yürüñiz',
+               'юрюш' => 'yürüş', 'юрюши' => 'yürüşi', 'юрюшим' => 'yürüşim', 'юрюшини' => 'yürüşini',
+               'юрюшнен' => 'yürüşnen', 'юрюшни' => 'yürüşni',
+       ];
+
+       # map Cyrillic to Latin and back, whole word match only
+       # no variants: map exactly as is
+       # items with capture group refs (e.g., $1) are only mapped from the
+       # regex to the reference
+       private $exactCaseMappings = [
+               # аббревиатуры
+               # abbreviations
+               'ОБСЕ' => 'OBSE', 'КъМДж' => 'QMC', 'КъАЭ' => 'QAE', 'ГъСМК' => 'ĞSMK', 'ШСДжБ' => 'ŞSCB',
+               'КъМШСДж' => 'QMŞSC', 'КъДМПУ' => 'QDMPU', 'КъМПУ' => 'QMPU', 'КъЮШ' => 'QYŞ', 'ЮШ' => 'YŞ',
+       ];
+
+       # map Cyrillic to Latin and back, match end of word
+       # variants: all lowercase, all uppercase, first letter capitalized
+       # "first letter capitalized" variant was in the source
+       # items with capture group refs (e.g., $1) are only mapped from the
+       # regex to the reference
+       private $suffixMapping = [
+               # originally C2L
+               'иаль' => 'ial', 'нуль' => 'nul', 'кой' => 'köy', 'койнинъ' => 'köyniñ', 'койни' => 'köyni',
+               'койге' => 'köyge', 'койде' => 'köyde', 'койдеки' => 'köydeki', 'койден' => 'köyden',
+               'козь' => 'köz',
+
+               # originally L2C, here swapped
+               'етсин' => 'etsin',
+
+       ];
+
+       # map Cyrillic to Latin and back, match beginning of word
+       # variants: all lowercase, all uppercase, first letter capitalized
+       # items with capture group refs (e.g., $1) are only mapped from the
+       # regex to the reference
+       private $prefixMapping = [
+               # originally C2L
+               'буюк([^ъ])' => 'büyük$1', 'бую([гдйлмнпрстчшc])(и)' => 'büyü$1$2',
+               'буют([^ыа])' => 'büyüt$1', 'джонк([^ъ])' => 'cönk$1', 'коюм' => 'köyüm', 'коюнъ' => 'köyüñ',
+               'коюн([ди])' => 'köyün$1', 'куе' => 'küye', 'куркке' => 'kürkke', 'куркни' => 'kürkni',
+               'куркте' => 'kürkte', 'куркчи' => 'kürkçi', 'куркчю' => 'kürkçü',
+
+               # арабизмы на муи- муэ- / Arabic муи- муэ-
+               'му([иэИЭ])' => 'mü$1',
+
+               # originally L2C, here swapped
+               'итъаль' => 'ital',
+               'роль$1' => 'rol([^ü])',
+               'усть$1' => 'üst([knt])',
+
+       ];
+
+       private $Cyrl2LatnRegexes = [];
+       private $Latn2CyrlRegexes = [];
+
+       function loadRegs() {
+               // Regexes as keys need to be declared in a function.
+               $this->Cyrl2LatnRegexes = [
+                       ############################
+                       # относятся ко всему слову #
+                       # whole words              #
+                       ############################
+                       '/\b([34])(\-)юнджи\b/u' => '$1$2ünci',
+                       '/\b([34])(\-)ЮНДЖИ\b/u' => '$1$2ÜNCİ',
+
+                       # отдельно стоящие Ё и Я
+                       # stand-alone Ё and Я
+                       '/\bЯ\b/u' => 'Ya',
+                       '/\bЁ\b/u' => 'Yo',
+
+                       ############################
+                       # относятся к началу слова #
+                       # word prefixes            #
+                       ############################
+                       '/\bКъЮШн/u' => 'QYŞn',
+                       '/\bЮШн/u' => 'YŞn',
+
+                       # о => ö
+                       '/\b(['.Crh::C_M_CONS.'])о(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => '$1ö$2$3$4',
+                       '/\bо(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ö$1$2$3',
+                       '/\b(['.Crh::C_M_CONS.'])О(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' =>
+                               '$1Ö$2$3$4',
+                       '/\bО(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ö$1$2$3',
+
+                       '/\b(['.Crh::C_M_CONS.'])о(['.Crh::C_CONS.'])([еиэюьü])/u' => '$1ö$2$3',
+                       '/\bо(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ö$1$2',
+                       '/\b(['.Crh::C_M_CONS.'])О(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => '$1Ö$2$3',
+                       '/\bО(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ö$1$2',
+
+                       # ё => yö
+                       '/\bё(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([ьеюü])/u' => 'yö$1$2$3',
+                       '/\bЁ(['.Crh::C_CONS_LC.'])(['.Crh::C_CONS_LC.'])([ьеюü])/u' => 'Yö$1$2$3',
+                       '/\bЁ(['.Crh::C_CONS_UC.'])(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => 'YÖ$1$2$3',
+                       '/\bё(['.Crh::C_CONS.'])([ьеюü])/u' => 'yö$1$2',
+                       '/\bЁ(['.Crh::C_CONS_LC.'])([ьеюü])/u' => 'Yö$1$2',
+                       '/\bЁ(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => 'YÖ$1$2',
+
+                       # у => ü, ую => üyü
+                       '/\b(['.Crh::C_M_CONS.'])у(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => '$1ü$2$3$4',
+                       '/\bу(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ü$1$2$3',
+                       '/\bую(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'üyü$1$2$3',
+                       '/\b(['.Crh::C_M_CONS.'])У(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' =>
+                               '$1Ü$2$3$4',
+                       '/\bУ(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ü$1$2$3',
+                       '/\bУю(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'Üyü$1$2$2',
+                       '/\bУЮ(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ÜYÜ$1$2$3',
+
+                       '/\b(['.Crh::C_M_CONS.'])у(['.Crh::C_CONS.'])([еиэюьü])/u' => '$1ü$2$3',
+                       '/\bу(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ü$1$2',
+                       '/\bую(['.Crh::C_CONS.'])([еиэюьü])/u' => 'üyü$1$2',
+                       '/\b(['.Crh::C_M_CONS.'])У(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => '$1Ü$2$3',
+                       '/\bУ(['.Crh::C_CONS.'])([еиэюьüЕИЭЮЬÜ])/u' => 'Ü$1$2',
+                       '/\bУю(['.Crh::C_CONS.'])([еиэюьü])/u' => 'Üyü$1$2',
+                       '/\bУЮ(['.Crh::C_CONS.'])([еиэюьü])/u' => 'ÜYÜ$1$2',
+
+                       # ю => yü
+                       '/\b([аыоуеиёюАЫОУЕИЁЮ]?)ю(['.Crh::C_CONS.'])(['.Crh::C_CONS.'])([ьеюü])/u' => '$1yü$2$3$4',
+                       '/\b([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_LC.'])(['.Crh::C_CONS_LC.'])([ьеюü])/u' => '$1Yü$2$3$4',
+                       '/\b([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_UC.'])(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => '$1YÜ$2$3$4',
+                       '/\b([аыоуеиёюАЫОУЕИЁЮ]?)ю(['.Crh::C_CONS.'])([ьеюü])/u' => '$1yü$2$3',
+                       '/\b([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_LC.'])([ьеюü])/u' => '$1Yü$2$3',
+                       '/\b([АЫОУЕИЁЮ]?)Ю(['.Crh::C_CONS_UC.'])([ЬЕЮÜ])/u' => '$1YÜ$2$3',
+
+                       # e => ye, я => ya
+                       '/\bе/u' => 'ye',
+                       '/\bЕ(['.Crh::C_LC.'cğñqöü])/u' => 'Ye$1',
+                       '/\bЕ(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'YE$1',
+                       '/\bя/u' => 'ya',
+                       '/\bЯ(['.Crh::C_LC.'cğñqöü])/u' => 'Ya$1',
+                       '/\bЯ(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'YA$1',
+                       '/([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])е/u' => '$1ye',
+                       '/([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])Е(['.Crh::C_LC.'cğñqöü])/u' => '$1Ye$2',
+                       '/([аеёиоуыэюяйьъaeöüАЕЁИОУЫЭЮЯЙЬЪAEÖÜ])Е(['.Crh::C_UC.'CĞÑQÖÜ])/u' => '$1YE$2',
+                       '/([аеёиоуыэюяйьъaeöüğqАЕЁИОУЫЭЮЯЙЬЪAEÖÜĞQ])я/u' => '$1ya',
+                       '/([аеёиоуыэюяйьъaeöüğqАЕЁИОУЫЭЮЯЙЬЪAEÖÜĞQ])Я(['.Crh::C_LC.'cğñqöü])/u' => '$1Ya$2',
+                       '/([аеёиоуыэюяйьъaeöüğqАЕЁИОУЫЭЮЯЙЬЪAEÖÜĞQ])Я(['.Crh::C_UC.'CĞÑQÖÜ])/u' => '$1YA$2',
+
+                       ###############################
+                       # не зависят от места в слове #
+                       # position independent        #
+                       ###############################
+
+                       # слова на -льон
+                       # words with -льон
+                       '/льон/u' => 'lyon',
+                       '/ЛЬОН/u' => 'LYON',
+
+                       '/козь([^я])/u' => 'köz$1',
+                       '/Козь([^я])/u' => 'Köz$1',
+                       '/КОЗЬ([^Я])/u' => 'KÖZ$1',
+
+                       # Ö, Ü 1-й заход: ё, ю после согласных > ö, ü
+                       # Ö, Ü 1st instance: ё, ю after consonants > ö, ü
+                       '/(['.Crh::C_CONS.'])ю/u' => '$1ü',
+                       '/(['.Crh::C_CONS.'])Ю/u' => '$1Ü',
+                       '/(['.Crh::C_CONS.'])ё/u' => '$1ö',
+                       '/(['.Crh::C_CONS.'])Ё/u' => '$1Ö',
+
+                       # остальные вхождения о, у, ё, ю
+                       # other occurences of о, у, ё, ю
+                       '/Ё(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'YO$2',
+                       '/Ю(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'YU$2',
+
+                       # Ц & Щ
+                       '/Ц(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'TS$2',
+                       '/Щ(['.Crh::C_UC.'CĞÑQÖÜ])/u' => 'ŞÇ$2',
+               ];
+
+               $this->Latn2CyrlRegexes = [
+                       # буква Ё - первый заход
+                       # расставляем Ь после согласных
+                       '/^([yY])ö(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|$)/u' => '$1ö$2ь$3',
+                       '/^([yY])Ö(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|$)/u' => '$1Ö$2Ь$3',
+                       '/^AQŞ(['.Crh::WORD_ENDS.'ngd])/u' => 'АКъШ$1',
+
+                       # буква Ю - первый заход
+                       # расставляем Ь после согласных
+                       '/^([yY])ü(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|$)/u' => '$1ü$2ь$3',
+                       '/^([yY])Ü(['.Crh::L_N_CONS.'])([aAuU'.Crh::L_CONS.']|$)/u' => '$1Ü$2Ь$3',
+
+                       '/^([bcgkpşBCGKPŞ])ö(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|$)/u' => '$1ö$2ь$3',
+                       '/^([bcgkpşBCGKPŞ])Ö(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|$)/u' => '$1Ö$2Ь$3',
+                       '/^([bcgkpşBCGKPŞ])Ö(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|$)/u' => '$1Ö$2Ь$3',
+                       '/^([bcgkpşBCGKPŞ])ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|$)/u' => '$1ü$2ь$3',
+                       '/^([bcgkpşBCGKPŞ])Ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|$)/u' => '$1Ü$2Ь$3',
+                       '/^([bcgkpşBCGKPŞ])Ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|$)/u' => '$1Ü$2Ь$3',
+
+                        # ö и ü в начале слова
+                        # случаи, когда нужен Ь
+                       '/^ö(['.Crh::L_N_CONS.'pP])(['.Crh::L_CONS.']|$)/u' => 'ö$1ь$2',
+                       '/^Ö(['.Crh::L_N_CONS_LC.'p])(['.Crh::L_CONS.']|$)/u' => 'Ö$1ь$2',
+                       '/^Ö(['.Crh::L_N_CONS_UC.'P])(['.Crh::L_CONS.']|$)/u' => 'Ö$1Ь$2',
+                       '/^ü(['.Crh::L_N_CONS.'])(['.Crh::L_CONS.']|$)/u' => 'ü$1ь$2',
+                       '/^Ü(['.Crh::L_N_CONS_LC.'])(['.Crh::L_CONS.']|$)/u' => 'Ü$1ь$2',
+                       '/^Ü(['.Crh::L_N_CONS_UC.'])(['.Crh::L_CONS.']|$)/u' => 'Ü$1Ь$2',
+
+                       '/ts$/u' => 'ц',
+                       '/şç$/u' => 'щ',
+                       '/Ş[çÇ]$/u' => 'Щ',
+                       '/T[sS]$/u' => 'Ц',
+
+                       # Ь после Л
+                       # add Ь after Л
+                       '/(['.Crh::L_F.'])l(['.Crh::L_CONS_LC.']|$)/u' => '$1ль$2',
+                       '/(['.Crh::L_F_UC.'])L(['.Crh::L_CONS.']|$)/u' => '$1ЛЬ$2',
+
+                       # относятся к началу слова
+                       '/^ts/u' => 'ц',
+                       '/^T[sS]/u' => 'Ц',
+
+                       '/^şç/u' => 'щ',
+                       '/^Ş[çÇ]/u' => 'Щ',
+
+                       # Э
+                       '/(^|['.Crh::L_VOW.'аеэяАЕЭЯ])e/u' => '$1э',
+                       '/(^|['.Crh::L_VOW_UC.'АЕЭЯ])E/u' => '$1Э',
+
+                       '/^(['.Crh::L_M_CONS.'])ö/u' => '$1о',
+                       '/^(['.Crh::L_M_CONS.'])Ö/u' => '$1О',
+                       '/^(['.Crh::L_M_CONS.'])ü/u' => '$1у',
+                       '/^(['.Crh::L_M_CONS.'])Ü/u' => '$1У',
+
+                       '/^ö/u' => 'о',
+                       '/^Ö/u' => 'О',
+                       '/^ü/u' => 'у',
+                       '/^Ü/u' => 'У',
+
+                       # некоторые исключения
+                       # some exceptions
+                       '/maal([^e])/u' => 'мааль$1',
+                       '/Maal([^e])/u' => 'Мааль$1',
+                       '/MAAL([^E])/u' => 'МААЛЬ$1',
+                       '/küf([^eü])/u' => 'куфь$1',
+                       '/Küf([^eü])/u' => 'Куфь$1',
+                       '/KÜF([^EÜ])/u' => 'КУФЬ$1',
+                       '/köz([^eü])/u' => 'козь$1',
+                       '/Köz([^eü])/u' => 'Козь$1',
+                       '/KÖZ([^EÜ])/u' => 'КОЗЬ$1',
+
+                       # Punctuation
+                       '/#|No\./' => '№',
+
+                       # некоторые случаи употребления Ц
+                       '/tsi([^zñ])/u' => 'ци$1',
+                       '/T[sS][iİ]([^zZñÑ])/u' => 'ЦИ$1',
+                       '/ts([ou])/u' => 'ц$1',
+                       '/T[sS]([oOuU])/u' => 'Ц$1',
+                       '/ts(['.Crh::L_CONS.'])/u' => 'ц$1',
+                       '/T[sS](['.Crh::L_CONS.'])/u' => 'Ц$1',
+                       '/(['.Crh::L_CONS.'])ts/u' => '$1ц',
+                       '/(['.Crh::L_CONS.'])T[sS]/u' => '$1Ц',
+                       '/tsиал/u' => 'циал',
+                       '/TSИАЛ/u' => 'ЦИАЛ',
+
+                       # убираем ьi
+                       # remove ьi (note Cyrillic ь and Latin i)
+                       '/[ьЬ]([iİ])/u' => '$1',
+
+                       # ya & ye
+                       '/(['.Crh::L_CONS.'])ya/u' => '$1ья',
+                       '/(['.Crh::L_CONS.'])Y[aA]/u' => '$1ЬЯ',
+                       '/(['.Crh::L_CONS.'])ye/u' => '$1ье',
+                       '/(['.Crh::L_CONS.'])Y[eE]/u' => '$1ЬЕ',
+
+                        # расставляем Ь перед Ё
+                        # place Ь in front of Ё
+                       '/(['.Crh::L_CONS.'])y[oö]/u' => '$1ьё',
+                       '/(['.Crh::L_CONS.'])Y[oOöÖ]/u' => '$1ЬЁ',
+                        # оставшиеся вхождения yo и yö
+                        # remaining occurrences of yo and yö
+                       '/y[oö]/u' => 'ё',
+                       '/[yY][oOöÖ]/u' => 'Ё',
+
+                        # расставляем Ь перед Ю
+                        # place Ь in front of Ю
+                       '/(['.Crh::L_CONS.'])y[uü]/u' => '$1ью',
+                       '/(['.Crh::L_CONS.'])Y[uUüÜ]/u' => '$1ЬЮ',
+                        # оставшиеся вхождения yu и yü
+                        # remaining occurrences of yu and yü
+                       '/y[uü]/u' => 'ю',
+                       '/[yY][uUüÜ]/u' => 'Ю',
+
+                       # убираем ьa
+                       # remove ьa (note Cyrillic ь and Latin a)
+                       '/[ьЬ]([aA])/u' => '$1',
+
+                       # дж
+                       '/C(['.Crh::L_UC.Crh::C_UC.'Ъ])/u' => 'ДЖ$1',
+
+                       # гъ, къ, нъ
+                       # гъ, къ, нъ
+                       '/Ğ(['.Crh::L_UC.Crh::C_UC.'Ъ])/u' => 'ГЪ$1',
+                       '/Q(['.Crh::L_UC.Crh::C_UC.'Ъ])/u' => 'КЪ$1',
+                       '/Ñ(['.Crh::L_UC.Crh::C_UC.'Ъ])/u' => 'НЪ$1',
+
+               ];
+       }
+
+       private $CyrlCleanUpRegexes = [
+               '/([клнрст])ь\1/u' => '$1$1',
+               '/([КЛНРСТ])Ь\1/u' => '$1$1',
+               '/К[ьЬ]к/u' => 'Кк',
+               '/Л[ьЬ]л/u' => 'Лл',
+               '/Н[ьЬ]н/u' => 'Нн',
+               '/Р[ьЬ]р/u' => 'Рр',
+               '/С[ьЬ]с/u' => 'Сс',
+               '/Т[ьЬ]т/u' => 'Тт',
+
+               # убираем ьы и ь..ы
+               # remove ьы и ь..ы
+               '/[ьЬ]ы/u' => 'ы',
+               '/ЬЫ/u' => 'Ы',
+               '/[ьЬ]([гдклмнпрстчшГДКЛМНПРСТЧШ])ы/u' => '$1ы',
+               '/Ь([гдклмнпрстчшГДКЛМНПРСТЧШ])Ы/u' => '$1Ы',
+               '/[ьЬ]([гкнГКН])([ъЪ])ы/u' => '$1$2ы',
+               '/Ь([ГКН])ЪЫ/u' => '$1ЪЫ',
+
+               # убираем йь
+               # remove йь
+               '/йь/u' => 'й',
+               '/ЙЬ/u' => 'Й',
+
+               # частичное решение проблемы слова юз - 100
+               # Partial solution of the problem of the word юз ("100")
+               # notice that these are cross-word patterns
+               '/эки юзь/u' => 'эки юз', '/Эки юзь/u' => 'Эки юз', '/ЭКИ ЮЗЬ/u' => 'ЭКИ ЮЗ',
+               '/учь юзь/u' => 'учь юз', '/Учь юзь/u' => 'Учь юз', '/УЧЬ ЮЗЬ/u' => 'УЧЬ ЮЗ',
+               '/дёрт юзь/u' => 'дёрт юз', '/Дёрт юзь/u' => 'Дёрт юз', '/ДЁРТ ЮЗЬ/u' => 'ДЁРТ ЮЗ',
+               '/беш юзь/u' => 'беш юз', '/Беш юзь/u' => 'Беш юз', '/БЕШ ЮЗЬ/u' => 'БЕШ ЮЗ',
+               '/алты юзь/u' => 'алты юз', '/Алты юзь/u' => 'Алты юз', '/АЛТЫ ЮЗЬ/u' => 'АЛТЫ ЮЗ',
+               '/еди юзь/u' => 'еди юз', '/Еди юзь/u' => 'Еди юз', '/ЕДИ ЮЗЬ/u' => 'ЕДИ ЮЗ',
+               '/секиз юзь/u' => 'секиз юз', '/Секиз юзь/u' => 'Секиз юз', '/СЕКИЗ ЮЗЬ/u' => 'СЕКИЗ ЮЗ',
+               '/докъуз юзь/u' => 'докъуз юз', '/Докъуз юзь/u' => 'Докъуз юз', '/ДОКЪУЗ ЮЗЬ/u' => 'ДОКЪУЗ ЮЗ',
+       ];
+}
index 8796ae0..c3a50ea 100644 (file)
        "nstab-help": "buhci tu kamu a kasabelih",
        "nstab-category": "kakuniza",
        "mainpage-nstab": "saayaway a belih",
+       "nosuchactiontext": "URL matuzu’ay a saungay la’cus.\nURL nu misu hakay misulit mungangaw, saca sapecec la’cusay a siket.\nuyniyan hakay ku {{SITENAME}} pisaungay a sisetyimo simunday.",
        "nosuchspecialpage": "inayi’ tina sazumaay a kasabelih",
        "nospecialpagetext": "<strong> milunguc nu misu a sazumaay a kasabelih la’cus.</strong>\n\nmaydih miala kapahay a sazumaay a kasabelih  piazihan-tu-sulit kapah tayza [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "mungangaw",
        "databaseerror-query": "palalitemuh tu kawaw: $1",
        "databaseerror-function": "sakapaluwaluway: $1",
        "databaseerror-error": "mungangaw: $1",
+       "transaction-duration-limit-exceeded": "saka miliyas kayadah sapahalhal mautang, zayhan suliten a tuki ($1) mangasiw $2 beit a kelec, tina saungay mapateziptu. \namahica kisu misumad yadah kasacacay sacacay, kapah mitanam mawawada’ mikawaw.",
        "laggedslavemode": "<strong> patalaw:</strong> kasabelih hakay caay yamalyilu capi demiad misabaluh.",
        "readonly": "pamutektu sulu nu nasulitan",
        "enterlockreason": "pisuliten pamutek a mahicaay, yamalyilu sausi miliyaw mawawah a tuki",
+       "readonlytext": "nasulitan-sulu pamutek ayza, la’cus cunusen saca misumad tu kalunasulitan, imahini hakay miteka laliday a nasulitan-sulu masanga’ay a kawaw, mapahezektusa kapahtu masasa malecek. \n\npamutek nasulitan-sulu a sisetyimo mikuwanay buhci tu kamu: $1",
+       "missing-article": "nasulitan-sulu inayi’ talaayaway mazateng kasabelih sulit, kalungangan ku \"$1\" $2.\n\nsawsawni zayhan kisu masasiket ta masipuay a sasizuma saca nazipa’an kasabelih.\n\namahica kisu malitumuhay caay kuniay a pulita, hakay kisu maazih zwanti munday.\npisulitan URL puenengan, zumasatu pasayza [[Special:ListUsers/sysop|mikuwanay ]] mitubeli tina munday.",
        "missingarticle-rev": "(masumad#: $1)",
        "readonly_lag": "nasulitan-sulu lunuk miazih, imahini mihalhal mikilulay nasulitan-sulu malecad naamahiza misulit kalunasulitan katukuh sausi nasulitan-sulu",
+       "nonwrite-api-promise-error": "caay suliten API saungay ’Promise-Non-Write-API-Action’ HTTP satangahan mapatayzaan yuzasa kya lunguc patyaza API masulit i bacu-saupu.",
        "internalerror": "ilabuay a mungangaw",
        "internalerror_info": "ilabuay a mungangaw: $1",
        "internalerror-fatal-exception": "pihaceng a bahal nikalahizaan \"$1\"",
        "title-invalid-magic-tilde": "milunguc tu kasabelih satangahan izaw ku la’cusay a kaliwaza masalaing bacu  (<nowiki>~~~</nowiki>)",
        "title-invalid-too-long": "namilungucay a kasabelih satangahan mangasiw, satangahan pisaungay UTF-8 sakababalic a bang gu amana mangasiw $1 {{PLURAL:$1|wyiyincu}}.",
        "title-invalid-leading-colon": "milungucay a kasabelih  satangahan yamalyilu la’cusay a mahaw-bacu i lalingatuan.",
+       "perfcached": "isasa’ay sa ku kabilil-miala kalunasulitan, hakay caay sabaluhay. kabilil-miala kalunasulitan sayadah taneng misuped {{PLURAL:$1|1 ku heci|$1 a heci}}.\n\n(kabilil-miala kalunasulitan: tinnaw saca zikecan dinwa, saka dayum cengse atu tangan misaungay, ilabu’ nu pazateng-sakaluk cacay nanunuz izaway madayumay a kalunasulitan.)",
        "perfcachedts": "isasa’ay u saduba’ kalunasulitan, sazikuz misabaluh tuki sa u $1. saduba’ kalunasulitan sayadah sa kapah misuped  {{PLURAL:$4|1 ku heci|$4 ku heci}}.",
        "viewsource": "ciwsace yuensma-kodo",
        "viewsource-title": "ciwsace $1 a sakatizeng banggu",
        "protectedpagetext": "tina kasabelih masetin midiput  mitena’ mikawaway-kalumyiti saca zuma saungay tuway.",
        "viewsourcetext": "kapah kisu miciwsace atu mikopi tina kasabelih a sakatizeng banggu.",
        "viewyourtext": "kapah kisu miciwsace atu kopi ilabu’ tina kasabelih <strong> kisu mikawaway-kalumyiti </strong> yuensma-kodo.",
+       "protectedinterface": "tina kasabelih sapinipabeli tina Wiki zwanti taypuolayta a sulit,zumasatu mapasetin tu ku midiputay amitena’ talahaday a sumad.\nanu maydih micunus saca misumad Wiki a belih,tayza [https://translatewiki.net/ translatewiki.net] a MediaWiki sanuniyazu’en cwanan.",
+       "translateinterface": "anu maydih misumad Wiki a mibelih,katayza [https://translatewiki.net/ translatewiki.net] a MediaWiki sanuniyazu’en cwanan",
+       "cascadeprotected": "tina kasabelih madiput tuway, la’cus mikawaway-kalumyiti, izay tina kasabelih mawawah nu isasa’ay a \"patatusulay a diput\" mapili’ay a {{PLURAL:$1|cacay belih|yadah belih}} midiput  kasabelih nicaliwan:\n$2",
        "namespaceprotected": "inayi’ ku tungus kisu mikawaway-kalumyiti <strong>$1</strong> pangangananay a salaedan a kasabelih.",
        "customcssprotected": "inayi’ ku tungus kisu mikawaway-kalumyiti tina CSS kasabelih, zayhan tina kasabelih yamalyilu ku zuma misaungayay teked a setin.",
        "customjsprotected": "kisu sa inayi’ ku tungus mikawaway-kalumyiti tina JavaScript kasabelih, zayhan tina kasabelih yamalyilu tu zuma misaungayay nu teked a setin.",
        "logouttext": "<strong>matahkal tu kisu ayza. </strong>\n\npiazihen, izaw ku kasabelih matuling paazih patalabu a setyitase, katukuh kisu palawpes saazihay-sakaluk kabilil-miala.",
        "cannotlogoutnow-text": "anu pisaungay $1 la’cus katahkal.",
        "welcomeuser": "manamuh tu tayniay, $1!",
+       "welcomecreation-msg": "canghaw nu misu kapah mapatizeng tuway.\ntaneng tayza [[Special:Preferences|setin tu kanamuhan]] misabaluh numisuay i {{SITENAME}} a tekeday a asetin.",
        "yourname": "misaungayay a kalungangan:",
        "userlogin-yourname": "misaungayay a kalungangan",
        "userlogin-yourname-ph": "pisulitan tu nu misay a misaungayay a kalungangan",
        "userexists": "nasulitan nu misu a misaungayay a kalungangan izaw tu, pipili’ zuma a kalungangan",
        "loginerror": "patalabu mungangaw",
        "createacct-error": "canghaw patizeng mungangaw",
+       "nocookiesnew": "misaungayay a canghaw mapatizeng malahci, uyzasa caay henay kisu patalabu.\napatalabu {{SITENAME}} misaungayay maydih pisaungay Cookies, \nCookies nu misu caay henay miwawah.\nnazikuz tu mawawah pisaungay baluhay misaungayay a kalungangan atu mima nu misu patalabu.",
        "createacct-loginerror": "malahci tu ku pangangan tu canghaw, uyzasa la’cus lunuk sa patalabu.\nkapipalalid [[Special:UserLogin|kaulima ku misaungyay patalabu]].",
        "noname": "namasuilit numisuay a misaungayay a kalungangan la’cus.",
        "loginsuccesstitle": "patalabutu",
+       "loginsuccess": "<strong>{{GENDER:|kisu}} mala tu \"$1\" a kika patalabu {{SITENAME}}.</strong>",
+       "nosuchuser": "caay katepa’ kalungangan ku \"$1\" a misaungayay.\nmisaungayay a kalungangan izaw ku tabakiay atu adidi’ay a sulit,\npikinsa kisu pasasuala tu sulit tatenga’ay tu haw? saca [[Special:CreateAccount| patizeng baluhay a canghaw]].",
        "nouserspecified": "kanca matuzu’ay cacay misaungayay a kalungangan kisu.",
        "login-userblocked": "tina misaungayay mapalangat tuway, caay mahasa patalabu tuway.",
        "wrongpassword": "nasulitan nu misu a mima mungangaw, pitaneng aca.",
        "password-login-forbidden": "tina misaungayay a kalungangan  atu mima masatezep pisaungay tuway.",
        "mailmypassword": "miliyaw miteka setin mima",
        "passwordremindertitle": "{{SITENAME}} a baluhay nanunuz mima",
+       "passwordremindertext": "caay kapulita a tademaw (hakay kisu I, namakay IP puenengan $1) milunguc miliyaw patizeng i {{SITENAME}} ($4) a mima.\npabeli’ misaungayay \"$2\" a nanunuz mima setin tu \"$3\".\namahica tina ku kisu misaungayay, maydih kisu tansul patalabu atu pisetin cacay baluhay mima,\nnanunuz mima nu misu a ilabu’ {{PLURAL:$5|cacay|$5}} demiad mangasiw.\n\namahica caay kisu milunguc miliyaw patizeng mima, saca mazateng tu kisu ku mima, caay henay amisumad,\nkapah kisu sekipo tina palatuh zumasatu palalid pisaungay mahizaay saayaway mima nu misu.",
        "noemail": "misaungayay \"$1\" inayi’ imyiyo(email) puenengan nasulitan.",
        "noemailcreate": "maydih kisu nipabeli cacay kapahay a imyiyo(email) puenengan.",
        "passwordsent": "misaungayay \"$1\" a baluhay mima mapatahkal tu i saayaway a imyiyo(email) puenengan, kapihalhal henay maala tu tigami miliyaw patalabu aca",
        "blocked-mailpassword": "numisu a IP puenengan malangat tu caay kahasa mikawaway-kalumyiti, satezep tu namakay tini IP puenengan a mima panukasan sasahicaan a mitena’ patahtah.",
        "eauthentsent": "patigami tuway ku malucekay a tigami ta kisu misetinay a imyiyo(email) puenengan.\nanu caayhen milayap zuma a imyiyo(email), kanca kisu mikilul tigami a micuzu’ay tu kawaw, pilucek tina canghaw tatenga’ u numisuay.",
        "mailerror": "pabahel imyiyo(email) mungangaw: $1",
+       "acct_creation_throttle_hit": "pisaungay IP puenengan nu misu ayza ta wiki a labang i capi demiad $2 patizeng tuway {{PLURAL:$1|1 canghaw|$1 canghaw}}, mangasiw tu kakatukuhan mahasa a pabaw-sahezek.\nsisa, ayza caay palilid pisaungay tina IP puenengan a labang patizeng amahicahica canghaw.",
        "emailauthenticated": "imyiyo(email) puenengan nu misu malucek tu i $2 $3.",
        "emailnotauthenticated": "imyiyo(email) puenengan mu misu caay henay malucek, cayhenay patigami kisu isasa’ay a sasahicaan a imyiyo(email).",
        "noemailprefs": "i numisuay a setin tu kanamuhan misetin imyiyo(email) puenengan, kya kapah kisu pisaungay uyniyay sasahicaan.",
        "cannotchangeemail": "tina Wiki satezep misumad canghaw a imyiyo(email) puenengan.",
        "emaildisabled": "tina calay-kakacawan(wangcan) caay kakapah pabahel imyiyo(email).",
        "accountcreated": "panganganen tu ku canghaw",
+       "accountcreatedtext": "misaungayay canghaw [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|sasukamu]]) matizeng tuway.",
        "createaccount-title": "{{SITENAME}} a canghaw patizeng",
+       "createaccount-text": "caay kapulita a tademaw pisaungay imyiyo(email) puenengan nu misu i {{SITENAME}} ($4) patizeng tu cacay canghaw kalungangan saka \"$2\", mima \"$3\".\nkanca kisu tansul patalabu atu misumad mima.\n\namahica kya canghaw sa ku patizeng mungangaw a kamu, kapah kisu sekipo tina palatuh.",
        "login-throttled": "capi demiad mitanam mangasiw patalabu.\npihalhal henay $1 pitaneng aca.",
        "login-abort-generic": "patalabu kisu mungangaw - satezep tuway",
        "login-migrated-generic": "u canghaw nu misu maliyas tu, zumasatu tina Wiki nu misu misaungayay a kalungangan inayi’ tu.",
        "changepassword-success": "mima nu misu masumad tu!",
        "changepassword-throttled": "capi demiad mitanam mangasiw patalabu.\npihalhal henay $1 pitaneng aca.",
        "botpasswords": "kikay-tademaw a mima",
+       "botpasswords-summary": "<em>kikay-tademaw mima</em> kapah i caay kamaydih ku canghaw a sausi patalabu mima zasatu, mahasa micaliaw API misuped-miala misaungayay canghaw. taneng mikelec pisaungay kikay-tademaw mima patalabuay a misaungayay tungus. \n\namahica i caay katineng mahica iayaw nu amisetin kikay-tademaw mima caay kanca pisaungay tina sasahicaan. zumasatau caay kanca izaw amahicahica tademaw amiala kikay-tademaw mima.",
        "botpasswords-disabled": "kikay-tademaw a mima mapasatezep tuway.",
        "botpasswords-no-central-id": "amisaungay kikay-tademaw a mima, kanca kisu patalabu canghaw sanat kuwan sisetyimo.",
        "botpasswords-existing": "naizawtu ku kikay-tademaw a mima",
        "botpasswords-updated-body": "pabeli misaungayay \"$2\" a kikay-tademaw \"$1\" a kikay-tademaw mima masabaluh tuway.",
        "botpasswords-deleted-title": "masipu tu kikay-tademaw mima",
        "botpasswords-deleted-body": "pabeli misaungayay \"$2\" a kikay-tademaw \"$1\" a kikay-tademaw mima masipu tuway.",
+       "botpasswords-newpassword": "sapipatalabu <strong>$1</strong> a baluhay mima ku <strong>$2</strong>. <em>pisulitan tina mima sapabeli anucilacila miazih tu tatenga’ay pisaungay.</em> <br> (sasutili’ay maluman kikay-tademaw a patalabu kalungangan kanca malecad tu nu sazikuzay misaungayay a kalungangan, kapah tu kisu pisaungay  <strong>$3</strong> mala misaungayay a kalungangan <strong>$4</strong> mala mima.)",
        "botpasswords-no-provider": "BotPasswordsSessionProvider la’cus pisaungay.",
        "botpasswords-restriction-failed": "kikay-tademaw a mima kelec makai tu ayzaay a patalabu.",
        "botpasswords-invalid-name": "matuzu’ay a misaungayay a kalungangan caay yamalyilu kikay-tademaw mima maliyasay a tatebanan nu nisulitan  (\"$1\")",
        "resetpass-temp-password": "nanunuz a mima:",
        "resetpass-abort-generic": "sacunus satezip tu misumad  mima a saungay.",
        "resetpass-expired": "mima nu misu mangasiw tu. pisetin baluhayay a mima amipatalabu.",
+       "resetpass-expired-soft": "mima nu misu mangasiw tuway, maydih miliyaw misetin. pisetin baluhay mima nu miu ayza, saca sapecec \"{{int:authprovider-resetpass-skip-label}}\" sawsawni miliyaw patizeng aca.",
+       "resetpass-validity-soft": "mima nu misu la’cus tu:$1 \n\nayza sa pisetin baluhay mima nu misu,saca sapecec \"{{int:authprovider-resetpass-skip-label}}\" sawsawni miliyaw patizeng aca.",
        "passwordreset": "miliyaw miteka setin mima",
        "passwordreset-text-one": "pahezek tina aazihan cudad, micaliw tu imyiyo(email) pabahel nanuzu a mima sapaliyaw misetin mima nu misu.",
        "passwordreset-text-many": "{{PLURAL:$1|pihezek tina aazihan cudad amicaliaw imyiyo(email) milayap nanunuz a mima.}}",
        "passwordreset-email": "imyiyo(email) puenengan:",
        "passwordreset-emailtitle": "i {{SITENAME}} a canghaw pulita kalunasulitan",
        "passwordreset-emailtext-ip": "caay kapulita a tademaw (hakay kisu i, namakay IP puenengan $1) milunguc miliyaw patizeng i {{SITENAME}} ($4) a mima, isasa’ay sa ku mahizaay tina imyiyo(email) puenengan a misaungayay {{PLURAL:$3|canghaw}}:\n\n$2\n\n{{PLURAL:$3|tina nanunuzay a mima|uyniyay nanunuzay a mima}} nay ilabu’ nu {{PLURAL:$5|cacay a demiad|$5 a demiad}} kakatukuhan, kanca kisu tansul patalabu atu misaimed baluhayay a mima.\n\namahica caay kisu milunguc miliyaw patizeng mima, saca mazateng tu kisu ku mima, caay henay amisumad, kapah kisu sekipo tina palatuh zumasatu palalid pisaungay mahizaay saayaway mima nu misu.",
+       "passwordreset-emailtext-user": "misaungayay $1 milunguc miliyaw patizeng i {{SITENAME}} ($4) a mima, isasa’ay ku misaungay mahizaay tina imyiyo(email) puenengan {{PLURAL:$3|canghaw}}:\n\n$2\n\n{{PLURAL:$3|tina nanunuz mima|uyniyay nanunuz mima}} a ilabu’ nu {{PLURAL:$5|cacay demiad|$5 demiad}} ngaliw, kanca kisu tansul patalabu atu misumad baluhay mima. amahica caay sa ku kisu milunguc miliyaw patizeng mima, saca mazateng tu kisu kya mima, atu caay amisumad, kapah kisu sekipo tina palatuh zumasatu palalid  pisaungay mahizaay saayaway a mima nu misu.",
        "passwordreset-emailelement": "misaungayay a kalungangan:\n$1\n\nnanunuzay a mima:\n$2",
        "passwordreset-emailsentusername": "amahica tina tatenga’ ku misaungayay tu kalungangan masulitay imyiyo(email) puenengan nu misu, apatahkal miliyaw patizeng tu mima a tigami kisu.",
        "passwordreset-nocaller": "manakanca nipabeli caller",
        "changeemail-no-info": "kanca kisu patalabu kyu taneng kakelulan kisu misuped-miala tina kasabelih.",
        "changeemail-oldemail": "ayzaay a imyiyo(email) puengengan:",
        "changeemail-newemail": "baluhay imyiyo(email) puenengan:",
+       "changeemail-newemail-help": "amahica kisu maydihh misipu imyiyo(email) puenengan nu misu, tina langat-pisinga’an kanca painayi’. amahica  misipu imyiyo(email) puenengan nu misu la’cus miliyaw patizeng mapawanay a mima, zumasatu caay kalayap namakay tina wiki a imyiyo(email).",
        "changeemail-none": "(nayi’)",
        "changeemail-password": "i {{SITENAME}} a mima nu misu:",
        "changeemail-submit": "misumad imyiyo(email)",
        "changeemail-nochange": "pisulitan caay kalecaday baluhay imyiyo(email) puenengan.",
        "resettokens": "miliyaw patizeng sabuhat a mima",
+       "resettokens-text": "kapah tu kisu itini miliyaw patizeng sapisuped-miala canghaw nu misu mahizaay midimut kasikazan kalunasulitan a mima-sabuhat.\n\namahica kisu malimuh pasimel mima-sabuhat tu tawan saca canghaw nu misu madebung mapeci’ tu tawan, kanca miliyaw patizeng tina mima-sabuhat.",
        "resettokens-no-tokens": "inayi’ ku miliyaw tu setinay a mima-sabuhat.",
        "resettokens-tokens": "sabuhat:",
        "resettokens-token-label": "$1 (ayza sa ku $2)",
        "anoneditwarning": "<strong>patalaw:</strong>caay henay kisu patalabu. anu miteka mikawaway tu kalumyiti, IP adolyise nu misu ama mitilak. anu kisu <strong>[$1  patalabu ]</strong> acasa <strong>[$2 panganganen ku canghaw ]</strong>, misuay mikawaway tu kalumyiti payni tu nu misuay misaungayay kalungangan sacuzu’ ,izaway zuma kapahayay.",
        "anonpreviewwarning": "<em>caay henay patalabu kisu. misuped kasabelih a mahiya ku nu misu i IP puenengan sulit tu nakawawan tina kasabelih ilabu’ nu mikawaway-kalumyiti nazipa’an. </em>",
        "missingsummary": "<strong> pacekil:</strong>caay henay kisu suliten  mikawaway-kalumyiti pecu’ nu lacul.\namahica kisu amisapecec aca \"$1\" kinacacay, atakud han pecu’ nu lacul kakelul misuped mikawaway-kalumyiti nu misu.",
+       "selfredirect": "<strong>patalaw:</strong> imahini kisu patizeng  misasiket ta miliyaw patatuzu’ nu misu.\nhakay kisu matuzu’ay patelac maydih miliyaw patatuzu’ a papatuzu'an kasabelih saca mikawaway-kalumyiti patelac kasabelih.\namahica kisu sapecec aca \"$1\" sakacacay, apalalid patizeng miliyaw patatuzu’.",
        "missingcommenttext": "pisuliten buhci tu kamu isasa’.",
+       "missingcommentheader": "<strong>pacekil:</strong> caay henay kisu suliten tina buhci tu kamu a taazihan tu kawaw.\namahica kisu mipecec aca \"$1\" cacay, amatakud han taazihan tu kawaw / satangahan kakelul sa misuped buhci tu kamu nu misu.",
        "summary-preview": "mikawaway-kalumyiti pecu’ nu lacul pataayaway miazih:",
        "subject-preview": "pataayaway miazih  taazihan tu kawaw:",
        "previewerrortext": "mitanam pataayaway miazih sumad nu misu sa mungangaw.",
        "blockedtitle": "misaungayay malangat tuway",
        "blockedtext": "<strong> misaungayay a kalungangan nu misu saca IP puenengan malangat tuway.</strong>\n\nmalangat tu kisu nay $1,\nmahicaay ku <em>$2</em>.\n\n*  milangat miteka a tuki :$8\n*  milangat pahezek a tuki :$6\n*  mahizaay malangat a tukusay:$7\n\nkapah kisu patakus $1 saca zumaay a [[{{MediaWiki:Grouppage-sysop}}|mikuwanay]] matatengil malangatay a mahizaay a munday.\namahica kisu i [[Special:Preferences|setin tu kanamuhan]] misetin tu cacay kapahay a imyiyo(email) puenengan, zumasatu caay henay malangat tigami sasahicaan, kya taneng kisu micaliw \" imyiyo(Email) patakus tina misaungayay \" a sasahicaan apatakus mahizaay mikuwanay.\nIP puenengan nu misu ayzasa ku $3, tina malangatay a ID ku #$5.\nanu palita kisu sa, pakeliten ipabaway a pulita kalunasulitan.",
        "autoblockedtext": "zayhan nasawniay zuma a cacay misaungayay malangat nu $1, IP puenengan nu misu lunuk  malangat tuway.\nkya mahicaay saku:\n\n:<em>$2</em>\n\n*  milangat miteka a tuki :$8\n*  milangat pahezek a tuki :$6\n*  mahizaay malangat a tusukay:$7\n\nkapah kisu patakus $1 saca zumaay a [[{{MediaWiki:Grouppage-sysop}}|mikuwanay]] matatengil milangatay a mahizaay munday.\namahica kisu i [[Special:Preferences|setin tu kanamuhan]] misetin tu cacay silaheciay a imyiyo(email) puenengan, zumasatu caay henay malangat tigami sasahicaan, kya taneng kisu micaliw \" imyiyo(Email) patakus tina misaungayay \" a sasahicaan apatakus mahizaay mikuwanay. \nIP puenengan nu misu ayzasa ku $3, tina malangatay a ID ku #$5.\nanu palita kisu sa, pakeliten ipabaway a pulita kalunasulitan",
+       "systemblockedtext": "misaungayay a kalungangan nu misu saca IP puenengan nay MediaWiki lunuk malangat tuway,mahicaay mahiza isasa’:\n\n:<em>$2</em>\n\n* milangat miteka a tuki: $8\n* milangat pahezek a tuki: $6\n* malangatay a misaungayay: $7\n\nIP puenengan nu misu ayza sa ku $3.\npipabeli ku ipabaway a cesyun i mipalita",
        "blockednoreason": "caay pasaheci tu mahicaay",
        "whitelistedittext": "piayawen $1 sakapah mikawaway-kalumyiti kasabelih.",
+       "confirmedittext": "iayaw mikawaway-kalumyiti tina belih, kanca kisu milucek imyiyo(email) puenengan nu misu.\npicaliw [[Special:Preferences|setin tu kanamuhan]]  misetin atu sawantanen imyiyo(email) puenengan nu misu.",
        "nosuchsectiontitle": "caykatepa tu tusil",
        "nosuchsectiontext": "mitanam kisu mikawaway-kalumyiti a tusil inayi’. hakay miciwsace kasabelih kisu sa malimad saca masipu.",
        "loginreqtitle": "maydih patalabu",
        "loginreqlink": "patalabu",
        "loginreqpagetext": "$1 iayaw kyu kapah miciwsace zuma kasabelih.",
        "accmailtitle": "mima patigamitu",
+       "accmailtext": "[[User talk:$1|$1]] a kakibalucu’ mima patigamitu katukuh $2, kapah tu napatalabu tayza <em>[[Special:ChangePassword|misumad mima]] kasabelih misumad </em>.",
        "newarticle": "(baluhay)",
        "newarticletext": "masasiket kisu tu nayi’ay tu kasabelih.\namipatizeng tina kasabelih, kaisasa mikawaway tu kalumyiti atilad misulit ku lacul (kahica nu kawaw piazih tu tatenga’ay [$1 misaungay a buhci tu kamu  kasabelih ]).\namahica caay padeteng tayza tina kasabelih kisu haw, pihaymaw sapecec saazihay a <strong>tatiku</strong> pipenecan.",
        "anontalkpagetext": "<em>tina matatengil kasabelih apabeli caay henay panganganen ku canghaw a paceba panganganay a misaungayay pisaungay</em>\nsisa kanca kami pisaungay IP puenengan ataazihan kika, uyzasa malecaday a IP puenengan hakay nay katuuday caykalecaday a misaungayay kapulungan.\namahica kisu ku paceba panganganay a misaungayay zumasatu kunizateng buhci tu kamu a lacul inayi’ mahizaay kisu, [[Special:CreateAccount|patizeng baluhay canghaw]] saca [[Special:UserLogin|patalabu]] miliyas masiwala tu zuma paceba panganganay a misaungayay.",
        "noarticletext": "kina kasabelih inayi’ lacul ayza,kapah tu kisu i zumaay a kasabelih [[Special:Search/{{PAGENAME}}| mikilim kina kasabelih pyawti ]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}  mikilim sasuala nasulitan nakawawan ] caay sa[{{fullurl:{{FULLPAGENAME}}|action=edit}} patizeng kina kasabelih ]</span>.",
        "noarticletext-nopermission": "tina kasabelih ayza inayi’ lacul,\nkapah tu kisu i zuma kasabelih [[Special:Search/{{PAGENAME}}| kilim kina kasabelih pyawti ]],acasa <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}  kilim sasuala nasulitan nakawawan ]</span>,uyzasa  inayi’  ku tungus patizeng tina kasabelih.",
+       "missing-revision": "kasabelih kalungangan \"{{FULLPAGENAME}}\" a #$1 masumad baziyong inayi’.\n\nsawsawni zayhan masasiket ta mangasiway nasulitan nazipa’an kasabelih,kya kasabelih masipu tuway.\nkahica nu kawaw piazih tu tatenga’ay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} misipu nazipa’an]",
        "userpage-userdoesnotexist": "misaungayay canghaw \"$1\" caay henay  pangangan。\namahica maydih kisu patizeng/mikawaway-kalumyiti tina a kasabelih, kaliayaw mikinsa tatenga’ay tu hakiza.",
        "userpage-userdoesnotexist-view": "misaungayay canghaw \"$1\" caay henay mapangangan.",
        "blocked-notice-logextract": "tina misaungayay malangat tu ayza.\nisasa’ay ku capi demiad malangatay a nasulitan apabeli miazih tu tatenga’ay:",
        "clearyourcache": "<strong> azihen:</strong>izikuzay misuped kisu kanca palawpes saazihay-sakaluk kabilil-miala ngay maazih sabaluhay sumad.\n* <strong>Firefox / Safari:</strong> pecec <em>Shift</em> sa sapecec <em> miliyaw lisimeten </em>, saca pecec <em>Ctrl-F5</em> saca <em>Ctrl-R</em> (Mac sa ku <em>⌘-R</em>) \n* <strong>Google Chrome:</strong> pecec <em>Ctrl-Shift-R</em> (Mac sa ku <em>⌘-Shift-R</em>) \n* <strong>Internet Explorer:</strong> pecec <em>Ctrl</em> sa sapecec <em> miliyaw lisimeten </em>, saca pecec <em>Ctrl-F5</em>\n* <strong>Opera:</strong> taayaw <em> pili’  →  setin </em> (i Mac ku <em>Opera →  setin tu kanamuhan </em>) nazikuzan sa katukuh aca <em> midimut kasikazan & kazahkezan → palawpes azih  kalunasulitan → kabilil-miala tuway a zunga atu tangan </em>",
+       "usercssyoucanpreview": "<strong> pacekil:</strong>iayaw nu misuped pisaungay \"{{int:showpreview}}\" pipenecan amitanam baluhay CSS nu misu.",
+       "userjsyoucanpreview": "<strong>pacekil:</strong>iayaw misuped misaungay \"{{int:showpreview}}\"  pipenecan amitanam baluhay JavaScript nu misu.",
        "usercsspreview": "<strong>mipataayaway miazih tunu misu misaungayay CSS kisu ayza, CSS caay henay misuped!</strong>",
        "userjspreview": "strong>imhini pataayaway miazih kisu numisuay misaungayay a JavaScript.\nJavaScript caay henay misuped!</strong>",
        "sitecsspreview": "<strong>imhini kisu ayza i pataayaway miazih tina CSS, CSS caay henay suped!</strong>",
        "sitejspreview": "<strong> mipataayaway miazih tina JavaScript kisu ayza, JavaScript caay henay misuped!</strong>",
+       "userinvalidcssjstitle": "<strong>patalaw:</strong> inayi’ tina nuhekalan yangse \"$1\".\npakuniza misanga’ a .css atu .js kasabelih maydih pisaungay adidi’ay ku sulit satangahan, tinaku:{{ns:user}}:Foo/vector.css atu {{ns:user}}:Foo/Vector.css caay kalecad",
        "updated": "(misabaluh tuway)",
        "note": "<strong>azihen:</strong>",
        "previewnote": "<strong>imahini kisu mapataayaway miazih, misu a pisumad caay henay kasinga’</strong>",
        "continue-editing": "taayaw mikawaway-kalumyiti nikatatapal",
        "previewconflict": "tina pataayaway miazih paazih kisu ipabaway a sulit mikawaway-kalumyiti nikatatapal a lacul masuped tuway amapaazihay aheci.",
        "session_fail_preview": "<strong>ahicanaca! u nanu tina patalabu a tuki matahkal kalunasulitan mahedaw, la’cus kami lisimet nasanga’ mikawaway-kalumyiti.</strong>\n\n<em> {{SITENAME}} mawawah tu saayaway HTML muse, sisa tina pataayaway miazih kya zunga caay paazih amiliyas JavaScript madebung.</em>\n\n<strong>anu maydih kisu tatenga’ taneng misanga’ tina mikawaway-kalumyiti, pitaneng aca.</strong>\namahica caay malahci henay, nazikuz tu [[Special:UserLogout|katahkal]] piliyaw miteka patalabu, zumasatu pilucek saazihay-sakaluk setin ku \"mahasa tina calay-subal(wangyi) a cookie\".",
+       "session_fail_preview_html": "ahicanaca! u nanu kasasiketan a kalunasulitan mahedaw, kyu la’cus kami malisimet numisuay a mikawaway-kalumyiti saungay.\nhakay kisu makatahkal tuway.<strong> pilucek kisu i patalabu setyitase henay, zumasatu pitaneng aca </strong>.\npitaneng aca.\namahica munganaw saan,nazikuzan nu [[Special:UserLogout|katahkal]] miliyaw patalabu, zumasatu piluceki kisu saazihay-sakaluk mahasa tina calay-kakacawan(wangcan) a Cookie.",
+       "token_suffix_mismatch": "<strong>zayhan kisu misaungay a saazihay-sakaluk papeci’ tuway mikawaway-kalumyiti mima-sabuhat a sazumaay a kasabelih, mikawaway-kalumyiti nu misu  makai tuway.</strong>\nsaka miliyas mapeci’ kasabelih lacul, makai tuway tina mikawaway-kalumyiti saungay, \namatahkal tina munday sawsawni zayhan kisu misaungay simunday a paceba pangangan calay-belih(wangyi) kutay sefu-kikay.",
        "edit_form_incomplete": "<strong>u liyad mikawaway-kalumyiti a lacul caay henay ta sefu-kikay, kapikinsa tu nu misu mikawaway-kalumyiti lacul caay hen kaleku atu pitaneng henay. </strong>",
        "editing": "mikawaway tu kalumyiti  $1 ayza",
        "creating": "patizeng ayza $1",
        "editingsection": "mikawaway tu kalumyiti ayza $1 (tusil)",
        "editingcomment": "imahini mikawaway-kalumyiti $1 (baluhay tusil)",
        "editconflict": "mikawaway-kalumyiti sasula’cus: $1",
+       "explainconflict": "nazikuz kisu miteka mikawaway-kalumyiti izawtu zumaay tatemaw misuped tu tina kasabelih.\nipabaway a sulit misabacu paazih tu ayzaay a kasabelih a sulit lacul,\nnamasumad nu misu a sulit lacul paazih isasa’ sulit misabacu.\nkanca kisu amisumad a sulit lacul mikabu ta masupeday a sulit lacul.\namahica kisu kakelul sapecec \"$1\" <strong>dada’</strong> ipabaway a sulit misabacu a lacul mapasuped.",
        "yourtext": "numisuay a sulit",
        "storedversion": "misupedtu tu sumad",
        "editingold": "<strong>patalaw: imahini kisu mikawaway-kalumyiti kasabelih maluman a sumad baziyong.</strong>\namahica kisu suped, itini masumad tu haw masumaday a amahicahica a lacul amahedaw.",
        "yourdiff": "sasizuma",
+       "copyrightwarning": "piazihen, sacahamin i {{SITENAME}} namasanga’ay a paanin akilulen $2 sapabeli tu kinli a cedang patiyak (kahica nu kawaw piazih i $1).\namahica kisu caay maydih nisanga’ay tu cudad nu misu kilul tu nizateng masumad atu payakayak, amana itini patahka ku nasulitan.<br />\npiketun kisu tu tamiyan itini nisanga’ay tu cudad lacul nay sulitan nu misu, saca miala inayi’ nisanga’an niza tu tungus a kawaw midiput a binawlan a subal saca paybalucu’ laculaculan.\n<strong>amana i inayi’ pabeli tu kinli a pulita patahkal nasulitan!</strong>",
        "editpage-cannot-use-custom-model": "tina kasabelih a lacul tatudungen-misanga’ amana pasumad.",
+       "longpageerror": "<strong> mungangaw: patayzaan ku sulit lacul nu misu pulung sa {{PLURAL:$1|1 KB|$1 KB}}, mangasiw sisetyimo pabaw-sahezek {{PLURAL:$2|1 KB|$2 KB}}. </strong>\n\nla’cus misuped.",
+       "readonlywarning": "<strong> patalaw: nasulitan-sulu pamutek samiteka midiput, sisa la’cus misuped nasanga’ kisu ayza mikawaway-kalumyiti saungay.</strong>\nkapah kisu mikopi numisuay a sulit zumasatu pazepit tu sulit tangan misuped, kanay misuped aca mikawaway-kalumyiti nu misu.\n\npamutek nasulitan-sulu a sisetyimo mikuwanay izaw isasa’ay a buhci tu kamu: $1",
        "semiprotectedpagewarning": "<strong> azihen:</strong>tina kasabelih madiput tuway, mapanganganay a misaungayay dada’ kapah mikawaway-kalumyiti.\nisasa’ sa, pabeli capi demiad a nasulitan nazipa’an kya kapah miazih tu tatenga’ay",
+       "cascadeprotectedwarning": "<strong>patalaw:</strong> u nanu tina bilih sipakabit nu isasa’ay a {{PLURAL:$1|kasabelih}}, sisa patatusul midiput. maala a dada’[[Special:ListGroupRights|sazumaay a tungus]] a misaungayay kya kapah mikawaway-kalumyiti.",
+       "titleprotectedwarning": "<strong> patalaw: tina kasabelih madiput tuway, maydih [[Special:ListGroupRights|sazumaay a tungus]] kyu taneng patizeng.</strong>\nisasa’ay nipabeli capi demiad nasulitan nazipa’an ngay miazih tu tatenga’ay",
        "templatesused": "uyni kasabelih pisaungay tu isasaay {{PLURAL:$1|taazihan mitudung}}:",
        "templatesusedpreview": "tina pataayaway miazih pisaungay kya isasa’ay a {{PLURAL:$1|taazihan mitudung}}",
        "templatesusedsection": "tina belih pisaungay tu isasa’ay a {{PLURAL:$1|taazihan mitudung}}:",
        "template-protected": "(madiputay)",
        "template-semiprotected": "(madiputay a kasabelih - satizep mikawaway tu kalumyiti)",
        "hiddencategories": "kina kasabelih tungusay nu {{PLURAL:$1|1 midimut kakuniza }}mamikawaw:",
+       "nocreatetext": "{{SITENAME}} makelec tuway patizeng baluhayay a kasabelih a sasahicaan. {{GENDER:|kisu|}} taneng tatiku atu mikawaway-kalumyiti izaway a kasabelih, saca [[Special:UserLogin|patalabu saca patizeng baluhay canghaw]].",
        "nocreate-loggedin": "inayi’ tungus kisu patizeng  baluhayay a kasabelih.",
        "sectioneditnotsupported-title": "caay pidama mikawaway-kalumyiti tusil",
        "sectioneditnotsupported-text": "tina kasabelih caay midama mikawaway-kalumyiti tusil.",
        "permissionserrors": "mungangaw ku tungus",
        "permissionserrorstext": "makay isasa’ay {{PLURAL:$1|mahicaay}}, inayi’ ku tungus kisu miteka ayzaay pisaungay",
        "permissionserrorstext-withaction": "namakay isasaay {{PLURAL:$1|mahicaay}}, inayi’ kisu situngus miteka $2 miteka tuway misaungay:",
+       "contentmodelediterror": "You cannot edit this revision because its content model is <code>$1</code>, which differs from the current content model of the page <code>$2</code>.",
        "recreate-moveddeleted-warn": "<strong> patalaw: imahini kisu miliyaw patizeng nasawniay masipuay tu kasabelih. </strong>\n\nkanca kisu mizateng palalid mikawaway-kalumyiti tina bilih haw?\nitini nipabeli masipu atu milimad nasulitan nazipa’an sapiazih tu tatenga’ay",
        "moveddeleted-notice": "kina kasabelih masipu tu.\nisasa nipabeli kina kasabelihay a masipu atu milimad nasulitan nakawawan, taneng miazih tu tatenga’ay.",
        "moveddeleted-notice-recent": "ahicanaca, tina a kasabelih ayaw sahenay masipu tu (caay sungaliw 24 a tuki).\nisasa’ sa nipabeli tina kasabelih a masipu atu milimad nasulitan nazipa’an sapihica miazih tu tatenga’ay.",
        "content-failed-to-parse": "tingalaw $2 kese a $1 kamu-sakilul a lacul mungangaw: $3",
        "invalid-content-data": "lacul kalunasulitan la’cus",
        "content-not-allowed-here": "kasabelih [[$2]] caay mahasa pisaungay \"$1\" lacul nu kamu-sakilul",
+       "editwarning-warning": "miliyas tina kasabelih hakay amahedaw kisu nu iayaw namisanga’ay sacahamin a sumad.\namahica kisu patalabu tuway, kapah kisu i setin tu kanamuhan a \"{{int:prefs-editing}}\" kasacacay edeben tina patalaw.",
        "editpage-invalidcontentmodel-title": "caay pidama tu lacul nu tatudungen misanga’",
        "editpage-invalidcontentmodel-text": "caay kamidama lacul tatudungen-misanga’ \"$1\".",
        "editpage-notsupportedcontentformat-title": "caay pidama tuyni a lacul nu kese",
        "content-json-empty-object": "inayi’ay a tuutuud",
        "content-json-empty-array": "inayi’ay a papazengan tu nisulitan",
        "deprecated-self-close-category": "pisaungay la’cus Self-closed HTML aazihen-paya a kasabelih",
+       "deprecated-self-close-category-desc": "kasabelih yamalyilu la’cusay a Self-closed HTML aazihen-paya, tinaku <code>&lt;b/></code> or <code>&lt;span/></code>. uyniyay aazihen-paya a muse  amasumad malecad lalkuan nu HTML5,sisa wikitext a misaungay a pakayzaan mapasatezep tuway.",
+       "duplicate-args-warning": "<strong>patalaw:</strong> [[:$1]] miawza [[:$2]] a \"$3\" aazihen-sulyang pisaungay mangsiw tu cacay,pisaungay dada’ nipabeli sazikuzay a aazihen-sulyang sulyang.",
        "duplicate-args-category": "anu taazihan-mitudung muawaw haw pisaungay misaliyaway a aazihen-sulyang a kasabelih",
+       "duplicate-args-category-desc": "kya kasabelih yamalyilu misaliyaw pisaungay aazihen-sulyang a taazihan mitudung miawza, tinaku <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> saca  <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-category": "pisaungay sayadah eluc sisetyimo katahkalan nu kalisiw a mapulita kasabelih",
        "post-expand-template-inclusion-warning": "<strong>patalaw:</strong> nicaliwan taazihan mitudung zikuz tabaki adidi’ matabesiw ku pikelec. uzuma taazihan mitudung lacul a caay papisaungay.",
        "post-expand-template-inclusion-category": "nicaliwan taazihan-mitudung mangasiw kelec nu kasabelih",
        "undo-failure": "nay mikawaway-kalumyiti a sumad izaw sasula’cus,tina mikawaway-kalumyiti caay patiku.",
        "undo-norev": "uyni mikawaway-kalumyiti inayi’ saca masipu tuway, la’cus patiku",
        "undo-nochange": "tina mikawaway-kalumyiti mapatiku tuway.",
+       "undo-summary": "palawpes nay [[Special:Contributions/$2|$2]] ([[User talk:$2|sasukamu]]) sapisanga’ay a sumad $1",
        "undo-summary-username-hidden": "patiku midimut misaungayay sumad $1",
+       "cantcreateaccount-text": "namakay IP puenengan a subal <strong>$1</strong>, yamalyilu IP puenengan nu misu (<strong>$1</strong>) napatizengay a canghaw malangat tu ku [[User:$3|$3]].\n\n$3 malangatay a mahicaay ku <em>$2</em>",
+       "cantcreateaccount-range-text": "namakay IP puenengan a subal <strong>$1</strong>, yamalyilu IP puenengan nu misu (<strong>$4</strong>) napatizengay a canghaw malangat tu ku [[User:$3|$3]].\n\n$3 malangatay a mahicaay ku <em>$2</em>",
        "viewpagelogs": "ciwsace kina kasabelih a nasulitan nakawawan",
        "nohistory": "tina kasabilih inayi’ amahicahica tu sumad a nasulitan.",
        "currentrev": "sabaluhay masumad",
        "history-feed-title": "masumad nu ayaway a nazipa’an",
        "history-feed-description": "tina Wiki tina kasabelih nu masumaday a nazipa’an",
        "history-feed-item-nocomment": "$1 i $2",
+       "history-feed-empty": "milungucay a kasabelih inayi’,\nhakay masipu tuway saca maliyaw pangangan.\npitanam [[Special:Search|mikilim tina kakacawan]] maala zuma mahizaay baluhayay a kasabelih.",
        "history-edit-tags": "mikawaway-kalumyiti mipili’ masumad nu ayaway a aazihen a paya tuway",
        "rev-deleted-comment": "(masipu tu mikawaway-kalumyiti  pecu’ nu lacul)",
        "rev-deleted-user": "(misipu misaungayay a kalungangan tuway)",
        "rev-deleted-event": "(masipu tu nasulitan-nazipa’an nu paazih tu sulit)",
        "rev-deleted-user-contribs": "[misaungayay a kalungangan saca IP puenengan masipu tuway - madimut paanin piazihan-tu-sulit a mikawaway-kalumyiti]",
-       "rev-deleted-no-diff": "zayhan kasabelih u cacay masumad nu ayaway mapa <strong>masipu</strong>, la’cus kisu miciwsace tu kasasizuma.",
+       "rev-deleted-text-permission": "tina kasabelih masumad <strong> masipu </strong>.\nkapah tayza[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} misipu nasulitan nazipa’an] miala pulita cesyun.",
+       "rev-suppressed-text-permission": "tina kasabelih sumad nay <strong> masatezep paazih </strong>.\ntaneng tayza [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} satezep paazih nasulitan nazipa’an] maala pulita cesyun.",
+       "rev-deleted-text-unhide": "tina kasabelih a sumad nay <strong> masipu </strong>.\nkapah tayza [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} misipu nasulitan nazipa’an] maala pulita cesyun.\namahica kisu palalid, kapahtu kisu [$1 miciwsace tina sumad].",
+       "rev-suppressed-text-unhide": "tina kasabelih a sumad nay <strong> masatezep paazih </strong>。\nkapah tayza [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} satezep paazih nasulitan nazipa’an] miala pulita cesyun。\namahica kisu apalalid,kapah tu kisu [$1 miciwsace tina sumad]",
+       "rev-suppressed-text-view": "tina kasabelih a sumad nay <strong> masatezep paazih </strong>.\nkapah kisu lalid miciwsace misumad,kapah tayza [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} satezep paazih nazipa’an ] miala pulita cesyun.",
+       "rev-deleted-no-diff": "zayhan kasabelih ilabu’ a cacay a sumad nu ayaway nay <strong> masipu tuway </strong>, la’cus kisu miciwsace   sasizuma.\ntaneng tayza [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}] masipu nasulitan nazipa’an maala pulitaay a cesyun.",
+       "rev-suppressed-no-diff": "zayhan kasabelih ilabu’ a cacay a sumad nu ayaway nay <strong>masipu tuway</strong>, la’cus kisu miciwsace sasizuma.",
+       "rev-deleted-unhide-diff": "miciwsace sasizuma ilabu’ay ku cacay masumad nu ayaway nay <strong> masipu tu </strong>.\nkapah tyaza [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} masipu nasulitan nazipa’an] maala pulita  kalunasulitan.\namahica kisu apalalid, kapah tu kisu [$1 miwsace tina zuma].",
+       "rev-suppressed-unhide-diff": "miciwsace sasizuma ilabu’ay a cacay masumad nu ayaway nay <strong>masatezep paazih</strong>.\nkapah tayza [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} satezep paazih nasulitan nazipa’an] maala pulitaya a cesyun.\namahica kisu palalid, kapah tu kisu [$1 miciwsace tina sasizuma].",
+       "rev-deleted-diff-view": "ciwsace sasizuma ilabu’ay a cacay sumad nu ayaway nay <strong> masipu </strong>tu.\nkapah kisu palalid miciwsace sasizuma,kapah tayza [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} masipu nasulitan nazipa’an] miala pulita cesyun.",
+       "rev-suppressed-diff-view": "miciwsace sasizuma ilabu’ay a cacay masumad nu ayaway nay<strong> masatezep paazih </strong>.\nkapah kisu palalid miciwsace sasizuma,kapah tayza [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} misatezep paazih nasulitan nazipa’an] miala pulita cesyun.",
        "rev-delundel": "misumad ku maazihay",
        "rev-showdeleted": "paazih",
        "revisiondelete": "masipu/palawpes misipu masumad nu ayaway",
        "revdelete-text-file": "masipuay a tangan baziyong uyzatu matahkal i tangan nazipa’an, uyzasa lacul caay pawawah misuped-miala.",
        "logdelete-text": "masipuay tu nasulitan a saungay nu binawlan a tahkal henay i nasulitan ilabu’, nika liyad a lacul a caay kawawah paazih tu katuuday misuped-miala.",
        "revdelete-text-others": "amahica caay misetin uzumaay a sakacucek, zuma mikuwanay izaw tu ku tungus miciwsace atu palawpes masipu midimutay a lacul.",
+       "revdelete-confirm": "piluceki matineng kisu haw tina saungay amatatuzu’ay heci? atu nasaungay isu matatungus haw?\n[[{{MediaWiki:Policy-url}}|amikuwanay-pasayzaay]] kakilulen.",
+       "revdelete-suppress-text": "satezep paazih kanca <strong>dada’</strong> isasa’ay a zasatu pisaungay:\n* midimut palawacu’ay a cesyun \n* caay katanengay teked tademaw a kalunasulitan \n*:<em> ngangan nu puenengan, bangku nu telay, banggu nu mibunsiw atuzuma./em>",
        "revdelete-legend": "misetin paazih a kelec",
        "revdelete-hide-text": "masumad nu ayaway a sulit",
        "revdelete-hide-image": "midimut lacul nu tangan",
        "revdelete-edit-reasonlist": "masipu a mahicaay nu mikawaway-kalumyiti",
        "revdelete-offender": "masumad nu ayaway  masacudaday:",
        "suppressionlog": "satezep paazih nasulitan nazipa’an",
+       "suppressionlogtext": "isasa’ay a piazihan-tu-sulit u mikuwanay micaliw tu masipuay saca malangat ku midimutay a lacul.\npitayza [[Special:BlockList|milangat piazihan-tu-sulit]] miala ayzasa malangatay a piazihan-tu-sulit.",
        "mergehistory": "mikabu kasabelih nazipa’an",
        "mergehistory-box": "mikabu tatusa kasabelih a sumad:",
        "mergehistory-from": "saangangan kasabelih:",
        "mergehistory-into": "pabalucu’an kasabelih:",
        "mergehistory-list": "kapah mikabuay a mikawaway-kalumyiti nazipa’an",
+       "mergehistory-merge": "isasa’say a [[:$1]] sumad kapah tu mikabu ta [[:$2]].\npisaungay cacay-pili’ atilad mipili’ mikabu matuzu’ay a sumad saca iayaw nu matuzu’ay demiad a sumad.\npihaymawi, amahica ayzasa misaungay pasubana’ tu miidangay masasiket apalawpes tina saungay.",
        "mergehistory-go": "paazih kapah mikabuay a mikawaway-kalumyiti",
        "mergehistory-empty": "inayi’ amikabuay a sumad.",
        "mergehistory-done": "$1 izaw $3 {{PLURAL:$3|baziyong}} masumad nu ayaway makabu tu i [[:$2]]",
        "diff-empty": "(inayi’ sasizuma)",
        "diff-multi-sameuser": "(malecaday misaungayay {{PLURAL:$1|ilaed izaw ku $1 a sumad}}inayi’ paazih)",
        "diff-multi-otherusers": "({{PLURAL:$1|cacay ilabu’ay a sumad|$1 ilabu’ay a sumad}} nay {{PLURAL:$2|uzumaay a misaungay|$2 misaungayay}} caay paazih)",
+       "difference-missing-revision": "caykatepa’ sasizuma ($1) a {{PLURAL:$2|1 masumad nu ayaway|$2 masumad nu ayaway}}.\n\nsawsawni tina zayhan sasizuma misiket sungaliw, kasabelih masipu tu.\nkahica nu kawaw cesyun piazih [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} masipu nasulitan nazipa’an].",
        "searchresults": "heci nu makatepa",
        "searchresults-title": "$1 heci nu makatepa",
        "titlematches": "kasabelih satangah matatungus",
        "search-interwiki-more-results": "sayadahay a heci",
        "search-relatedarticle": "mahizaay",
        "searchall": "hamin",
+       "showingresults": "isasa’ay paazih nay saka <strong>$2</strong> miteka, pulung {{PLURAL:$1|<strong>1</strong>ku heci|<strong>$1</strong> ku heci}}",
+       "showingresultsinrange": "isasa’ paazih nay saka <strong>$2</strong> ta saka <strong>$3</strong> a {{PLURAL:$1|<strong>$1</strong> heci}}:",
        "search-showingresults": "{{PLURAL:$4|saka <strong>$1</strong> a heci, pulung <strong>$3</strong>|saka <strong>$1-$2</strong> a heci, pulung <strong>$3</strong>}}",
        "search-nonefound": "nayi’ matatungusay palalitemuh tu kawaw maheciay.",
        "search-nonefound-thiswiki": "itini kakacawan inayi’ matatungus tina palalitemuh tu kawaw  sakacucek a heci.",
        "powersearch-togglenone": "nayi’",
        "powersearch-remember": "pibalucu’en mapiliay sapikilim anucilacila",
        "search-external": "mikilim i hekal",
+       "searchdisabled": "{{SITENAME}} mapasatezep mikilimay a sasahicaan.\nkapah kisu misumad micaliw Google kilim.\npiazihi, i Google makilimay a {{SITENAME}} kasabelih lacul hakay caay sabaluhayay.",
        "search-error": "imahini mikilim sa mungangaw:$1",
        "search-warning": "imahini mikilim sa mungangaw:$1",
        "preferences": "setin tu kanamuhan",
        "recentchangesdays-max": "sayadahay $1 {{PLURAL:$1|a demiad}}",
        "recentchangescount": "pataayaw tu kawaw paazihay nu mikawaway-kalumyiti nikayadah:",
        "prefs-help-recentchangescount": "uyni yamalyilu capi demiad a sumad, kasabelih nasulitan-nazipa’an atu nazipa’an",
+       "prefs-help-watchlist-token2": "miaca aazihan numisuay a miazihay a piazihan-tu-sulit maydihay a mima-sabuhat.\namahicahica tademaw matineng ku mama-sabuhat dada’ taneng maasip numisuay a miazihay a piazihan-tu-sulit,sisa amana kilul tu nizateng kasasimel tu zuma a tadeamw.\namahica izaw ku maydih [[Special:ResetTokens|kapah kisu miliyaw patizeng mima-sabuhat]].",
        "savedprefs": "masuped setin tu kanamuhan nu misu.",
        "savedrights": "masuped tu {{GENDER:$1|$1}} misaungayay a tungus.",
        "timezonelegend": "tatukian a kakitizaan:",
        "email": "imyiyo(email)",
        "prefs-help-realname": "tatenga’ay ngangan mipili’ tu sasulitan pisinga’an. \nanu pabeli, tatenga’ay ngangan hakay kapah malumisuay nalimaan a sapangangan",
        "prefs-help-email": "imyiyo(email) puenengan ku mipili’ sasulitan langat-pisinga’an.\nnika i miliyaw patizeng mima sa matineng pisaungay,hakay kisu kalamapawan tu mima.",
+       "prefs-help-email-others": "hakay kapah kisu mipili’ zuma misaungayay micaliw imyiyo(email) nu misu, misaungayay kasabelih saca  sasukamu kasabelih a siket masukazih tisuwan.\nimyiyo(email) puenengan nu misu caay pabeli’ tu zuma amitakus tisuwanay a misaungayay.",
        "prefs-help-email-required": "imyiyo(email) puenengan manakanca suliten naca kasacacay.",
        "prefs-info": "anganganay a cesyun",
        "prefs-i18n": "masakitakiay",
        "userrights-lookup-user": "mipili’ misaungayay",
        "userrights-user-editname": "pisuliti misaungayay a kalungangan:",
        "editusergroup": "pacumud misaungayay luyaluy",
+       "editinguser": "misumad {{GENDER:$1| misaungayay}} <strong>[[User:$1|$1]]</strong> a misaungayay a tungus $2",
+       "viewinguserrights": "ciwsace {{GENDER:$1|misaungayay}} <strong>[[User:$1|$1]]</strong> a misaungayay tungus $2",
        "userrights-editusergroup": "mikawaway-kalumyiti {{GENDER:$1|misaungayay}} cyucu",
        "userrights-viewusergroup": "ciwsace {{GENDER:$1|misaungayay}} luyaluy",
        "saveusergroups": "misuped {{GENDER:$1|misaungayay}} luyaluy",
        "userrights-groupsmember": "canan a luyaluy:",
        "userrights-groupsmember-auto": "litinay yamalyilu luyaluy:",
+       "userrights-groups-help": "kapah kisu misaimed tina misaungayay mikitinay a luyaluy:\n* mahatizaay a mapili’ay atilad dayhiw kya misaungayay tungusay kya luyaluy.\n*caay hatizaay a mapili’ay atilad dayhiw kya misaungayay caay tungusay kya luyaluy.\n* izaw * bacu sacuzu’ dayhiw anu micunus kya luyaluy sa caykatu masipu,mabelih sa mihizatu.\n* izaw # bacu sacuzu’ dayhiw kisu dada’ patazikuzen ku tuki tina luyaluy sakawaway a kakatekuhan, la’cus kisu pataayaw.",
        "userrights-reason": "mahicaay:",
        "userrights-no-interwiki": "inayi’ tungus kisu mikawaway-kalumyiti zuma Wiki misaungayay a tungus.",
        "userrights-nodatabase": "kalunasulitan-sulu $1 inayi’ saca inayi’ itiniay a angangan-kikay.",
        "userrights-expiry": "kakatekuhan:",
        "userrights-expiry-existing": "ayzaay a kakatekuhan: $3, $2",
        "userrights-expiry-othertime": "zuma a tatukian:",
+       "userrights-expiry-options": "1 a demiad:1 day,1 lipay:1 week,1 a bulad:1 month,3 a bulad:3 months,6 a bulad:6 months,1 a mihca:1 year",
        "userrights-invalid-expiry": "luyaluy \"$1\" a kakatekuhan la’cus tu.",
        "userrights-expiry-in-past": "luyaluy \"$1\" a kakatekuhan mangliw tu.",
        "userrights-cannot-shorten-expiry": "la’cus kisu maluayaw i luyaluy \"$1\" sakawaway i kakatekuhan. izaway dada’ micunusen atu misipu tina a luyaluy tungusay misaungayay kapah tu a maliayaw i kakatekuhan.",
        "rcfilters-highlightmenu-help": "mipili’ tu palita sacuzu’ tina susin a kalukulit",
        "rcfilters-filterlist-noresults": "caykatepa sakacucek nu misapili’",
        "rcfilters-noresults-conflict": "zayhan kilim sakacucek sasula’cus,cay katepa ku heci",
+       "rcfilters-state-message-subset": "tina sakacucek nu misapili’ inayi’ ku laheci, zayhan kya heci yamalyilu isasa’ subal saahebalay a {{PLURAL:$2|sakacucek nu misapili’}} cacay ku ilabu’ay (mitanam kasiwantan sacuzu’ amipili’):$1",
+       "rcfilters-state-message-fullcoverage": "mipili’ i luyaluy labu’ay sacahamin sakacucek nu misapili’ atu inayi’ mipili’ sa malecad, dayhiw tina sakacucek nu misapili’caay kalahci. luyaluy yamalyilu tu: $1",
        "rcfilters-filtergroup-authorship": "paaninay a masacudaday",
        "rcfilters-filter-editsbyself-label": "numisuay a mikawaway-kalumyiti",
        "rcfilters-filter-editsbyself-description": "numisuay a paanin",
        "rcfilters-filter-categorization-description": "mamicunus i kakuniza saca nay kakuniza masipuay a kasabelih nasulitanㄡ",
        "rcfilters-filter-logactions-label": "saungay a nasulitan nazipa’an",
        "rcfilters-filter-logactions-description": "mikuwan saungay, patizeng canghaw, misipu kasabelih, patapabaw...",
+       "rcfilters-hideminor-conflicts-typeofchange-global": "\"mikilulay mikawaway-kalumyiti\" a sakacucek nu misapili’ sasula’cus tu cacay saca yadah sumad nikalahizaan sakacucek nu misapili’,zayhan izaw hatizaay sumad nikalahizaan la’cus patuzu’ay tu \"mikilulay\". sasula’cusay a sakacucek nu misapili’ sacuzu’ tu i pabaw nu pisaungay a subal nu sakacucek nu misapili’.",
        "rcfilters-hideminor-conflicts-typeofchange": "izaw ku zumaay misumad nikalahizaan la’cus matuzu’ay mala \"mikilulay\", sisa tina sakacucek nu misapili’ atu isasa’ay a sumad nikalahizaan sakacucek nu misapili’ sasula’cus: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "tina misumad nikalahizaan sakacucek nu misapili’ atu \"mikilulay mikawaway-kalumyiti\" sakacucek nu misapili’sasula’cus, uzuma misumad nikalahizaan la’cus matuzu’ay ku \"mikilulay\"",
        "rcfilters-filtergroup-lastRevision": "sabaluhay masumad",
        "upload_directory_missing": "ma’ngadis patapabaw dilyikotoling ($1) zumasa calay-belih(wangyi) sefu-kikay inayi’ tungus mipatizeng.",
        "upload_directory_read_only": "calay-belih(wangyi) sefu-sakaluk inayi’ patapabaw dilyikotoling ($1) a suliten  tungus.",
        "uploaderror": "patapabaw mungangaw",
+       "upload-recreate-warning": "<strong>patalaw: nanu ayaw izaw ku tangan misaungay tina kalungangan mapasipu tuway saca  malimad ta zuma a kakitizaan.</strong>\n\nitini pabeli masipuay atu malimaday a nasulitan nazipa’an dayum paazih tu tatenga’ay:",
        "uploadtext": "pisaungay isasa’ay a aazihan cudad ngay patapabaw tangan.\namiciwsace saca mikilim iayaw patapabaway a tangan, taneng tayza [[Special:FileList|tangan patapabaw piazihan tu sulit]], (miliyaw miteka)  patapabaw a i [[Special:Log/upload| patapabaw nasulitan nazipa’an]] sulitan, zumasatu masipu ngay i [[Special:Log/delete|masipu nazipa’an]] sulitan.\n\na i kasabelih micaliwan tu tangan, kapah pisaungay isasa’ay ilabu’ ku cacay a sasakawawen masasiket:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> paazih leku ditek a zunga \n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code></strong>amipazeng cacay 200 syangsu ahebalay a zunga ilabu’ nu misabacu, zumasatu paazih \"alt text\" sapihica ku sapuelac \n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> kakelul masasiket ta zunga caay paazih pataayaway miazih",
        "upload-permitted": "mahasa tangan {{PLURAL:$2|nikalahizaan}}: $1.",
        "upload-preferred": "patahkal nizateng a tangan {{PLURAL:$2|nikalahizaan}}: $1",
        "upload-prohibited": "satezep a tangan {{PLURAL:$2|nikalahizaan}}: $1",
        "uploadlogpage": "patapabaw nasulitan nazipa’an",
+       "uploadlogpagetext": "isasa’ay a piazihan-tu-sulit ku capi demiad patapabaway a tangan.\npiciwsace [[Special:NewFiles|sabaluhay tangan-sulu nu zunga]] kyu kapah palakuliten ku aazihen a sasakawawen miciwsace.",
        "filename": "kalungangan nu tangan",
        "filedesc": "pecu’ nu lacul",
        "fileuploadsummary": "pecu’ nu lacul:",
        "largefileserver": "tina tangan hacica-tabaki mangsiw sefu-kikay setin a mahasaay a subal.",
        "emptyfile": "patapabaway tu tangan nu misu nayay ilabu.\nhakay u tangan a kalungangan mungangaw ku sulitan.\nkapikinsa maydih kisu patapabaw tu nayaay a tangan.",
        "windows-nonascii-filename": "tina Wiki caay midama pisaungay sazumaay bacu a tangan kalungangan.",
+       "fileexists": "izawtu malecad kalungangan a tangan, amahica {{GENDER:|kisu}} caay kalucek maydih misumad haw? pikinsa <strong>[[:$1]]</strong>.\n[[$1|thumb]]",
+       "filepageexists": "tina tangan a sapuelac kasabelih <strong>[[:$1]]</strong> izaw tuway, uyzasa ayza inayi’ pisaungay tina kalungangan a tangan.\nitini kisu misulitay a pecu’ nu lacul caay misuped tayza kya sapuelac kasabelih, kanca kisu lima-saungay mikawaway-kalumyiti kya sapuelac kasabelih.\n[[$1|thumb]]",
+       "fileexists-extension": "kalahizaan a tangan kalungangan izawtu i: [[$2|thumb]]\n* patapabaway a tangan kalungangan: <strong>[[:$1]]</strong>\n* naizaway a tangan kalungangan: <strong>[[:$2]]</strong>\npipili’ pisaungay zuma kalungangan",
+       "fileexists-thumbnail-yes": "tina tangan akayi’ ku masukepay a zunga <em>(sukep tu zunga)</em>.\n[[$1|thumb]]\npikinsa tangan <strong>[[:$1]]</strong>.\namahica saayaway zunga tatenga’ ku tina ditek, anu mahini sa amana tu patapabaw sukep tu zunga.",
+       "file-thumbnail-no": "tangan kalungangan saku <strong>$1</strong> ku angangan.\nmahiza mapasukepay a zunga <em>( sukep tu zunga )</em>.\namahica izaw kisu saayaw tabakiay a zunga, kanca patapabaw saayaway a zunga, anucaay sa pisumad nipangangan.",
+       "fileexists-forbidden": "izaw tu malecaday a kalungangan a tangan, zumasatu la’cus mitahpu.\namahica kisu apatapabaw tina tangan, pitatiku ayaway a belih zumasatu pisaungay zuma kalungangan. [[File:$1|thumb|center|$1]]",
+       "fileexists-shared-forbidden": "kapulungan tangan-sulu izawtu malecaday kalungangan a tangan.\namahica kisu apatapabawtu tina tangan, pitatiku ayaway a belih zumasatu pisaungay zuma kalungangan.\n[[File:$1|thumb|center|$1]]",
        "fileexists-no-change": "patapabaway a tangan atu ayza baziyong a <strong>[[:$1]]</strong> tada malecad.",
+       "fileexists-duplicate-version": "patapabaway a tangan sungila’ malecad tu {{PLURAL:$2|sasutili’ay maluman baziyong}}a <strong>[[:$1]]</strong>",
        "file-exists-duplicate": "tina tangan masaliyaw isasa’ay a {{PLURAL:$1|cacay|yadah}} tangan",
        "file-deleted-duplicate": "tadamalecad tina tangan a tangan ([[:$1]]) i nasawniay masipu tu.\nkanca kisu milucek kya tanganay a masipuay a nasulitan nazipa’an iayaw miliyaw patapabaw.",
+       "file-deleted-duplicate-notitle": "sungila’ malecad tina tanganay a tangan nasawniay masipu tuway, zumasatu satezep paazih kya satangahan.\nanu caay henay kisu miliyaw patapabaw, kanca kisu milunguc sikinli miciwsace madimut tangan a misaungayay miliyaw ciwsya.",
        "uploadwarning": "patapabaw patalaw",
        "uploadwarning-text": "pisumad isasa’ay a tangan sapuelac atu mitanam aca.",
        "savefile": "misuped tu tangan",
        "uploaded-script-svg": "i mapatapabaway a SVG tangan matepa kapah micengseay a kuku’-ulic aazihen-paya \"$1\".",
        "uploaded-hostile-svg": "i mapatapabaway a SVG tangan yangse aazihen-paya matepa caay kaenapay a CSS.",
        "uploaded-event-handler-on-svg": "caay kahasa i SVG tangan setin event-handler susin <code>$1=\"$2\"</code>",
+       "uploaded-href-unsafe-target-svg": "i patapabaw tuway a SVG tangan matepa href masasiket tayza caay zahkezay a kalunasulitan:URI papatuzu'an sa ku <code>&lt;$1 $2=\"$3\"&gt;</code>",
+       "uploaded-animate-svg": "i patapabaway a SVG tangan matepa \"animate\" aazihen-paya hakay pisaungay \"from\" susin <code>&lt;$1 $2=\"$3\"&gt;</code> misumad href.",
+       "uploaded-setting-event-handler-svg": "ilabu’ nu mapatapabaway a SVG tangan matepa <code>&lt;$1 $2=\"$3\"&gt;</code>,masatezep tu ku setin event-handler susin.",
        "uploaded-setting-href-svg": "masatezep pisaungay \"set\" aazihen-paya amicunus \"href\" susin ta mama yinsu.",
+       "uploaded-wrong-setting-svg": "i mapatapabaway a SVG tangan matepa <code>&lt;set to=\"$1\"&gt;</code>, masatezep pisaungay \"set\" aazihen-paya micunus remote/data/script papatuzu'an ta amahicahica susin.",
+       "uploaded-setting-handler-svg": "nay patapabaw a SVG tangan matepa <code>$1=\"$2\"</code>, masatezep SVG pisaungay remote/data/script misetin \"handler\" susin.",
+       "uploaded-remote-url-svg": "ilabu’ nu mapatapabaway a SVG tangan matepa <code>$1=\"$2\"</code>, masatezep SVG pisaungay amahicahica tu ibaatay a URL misetin maazihan.",
        "uploaded-image-filter-svg": "ilabu’ mapatapabaway a SVG tangan matepa zunga sebseb-sakaluk pisaungay URL:<code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploadinvalidxml": "la’cus mitingalaw matapabaway tangan a XML.",
+       "uploadjava": "kya tangan ku yamalyilu Java .class tangan a ZIP tangan.\nzayhan Java tangan hakay takud han zahkez kinsa pakazahkezan a munday, caay mahasa patapabaw Java tangan.",
        "upload-source": "saangangan a tangan",
        "sourcefilename": "saangangan tangan kalungangan:",
        "sourceurl": "saangangan URL:",
        "watchthisupload": "miazih tina tangan",
        "filewasdeleted": "nasawniay izaw tu ku malecaday kalungangan a tangan patapabaw, masiputu nazikuzan.\nkanca kisu a patapabaw tina tangan pataayaw mikinsa $1.",
        "filename-thumb-name": "tina mahiza u cacay sukep tu zunga a satangahan. amana kapisukep tu zunga patapabaw patiku malecad u Wiki. anusa, kapisumad tu pyawti, sakaizaw nu imiatu caay kahalu u sukep tu zunga saayaway sulit.",
+       "filename-bad-prefix": "patapabaway a tangan kalungangan nu misu nu <strong>\"$1\"</strong> angangan, inayi’ ku amahicahica tu sapuelac sakaizaway a kalungangan, hina nay sueyi sasasing lunuk masanga’.\nu tangan nu misu pisaungay cacay mangaleb izaw sapuelac sakaizaway a kalungangan.",
        "upload-proto-error": "padinwaay a ketun caay katatenga’",
+       "upload-proto-error-text": "ibaat patapabaw tangan maydih pisaungay ku <code>http://</code> saca <code>ftp://</code> angangan a URL.",
        "upload-file-error": "ilabuay a mungangaw",
        "upload-file-error-text": "mitanam i sefu-kikay patizeng singa’an tu sulit sa tahkal labuay mungangaw.\npimasukazih [[Special:ListUsers/sysop|mikuwanay]].",
        "upload-misc-error": "caay kapulita patudud mungangaw",
+       "upload-misc-error-text": "napatapabaw sa izaw caay kapulita mungangaw.\npikinsa URL nu misu kapahtu haw, zumasatu kapah misuped-miala, zuma aca sa pitanam aca.\namahica izaw hanay munday, pipatakus [[Special:ListUsers/sysop|mikuwanay]].",
        "upload-too-many-redirects": "kya URL miliyaw patatuzu’ tayza sayadah zuma a puenengan",
        "upload-http-error": "HTTP mungangaw: $1",
        "upload-copy-upload-invalid-domain": "tina calay-subal(wangyi) caay mahasa kopi patapabaway a tangan.",
        "upload-form-label-not-own-work-local-generic-local": "kapah kisu mitanam [[Special:Upload|pataayaw tu kawaw a patapabaw kasabelih]].",
        "upload-form-label-own-work-message-generic-foreign": "matineng tu kaku patapabaw tina tangan tayza i cacay kapulungan suped-sulu, milucek tu kaku miduduc tu nu wiki a cedang atu sapabeli tu kinli a likec.",
        "upload-form-label-not-own-work-message-generic-foreign": "anu makai kisu patubeli miduduc kasasimel suped-sulu a amikuwanay-pasayzaay patapabaw tu tangan,piedeb tina sasukamu-liwang a mitanam tuzumaay a sakaluk.",
+       "upload-form-label-not-own-work-local-generic-foreign": "amahica tina tangan teneng mikilul kya kakacawan a pabeli tu kinli amikuwanay-pasayzaay patapabaw ku tangan, hakay kisu maydih kakelul mitanam pisaungay  [[Special:Upload|{{SITENAME}} a patapabaw kasabelih]]",
        "backend-fail-stream": "la’cus pabahel tu tangan \"$1\".",
        "backend-fail-backup": "la’cus mikopi tu tangan \"$1\".",
        "backend-fail-notexists": "tangan $1 inayi’.",
        "backend-fail-connect": "la’cus misasiket tayza suped-sulu zikuzan malutapiingan \"$1\"",
        "backend-fail-internal": "suped-sulu zikuzan \"$1\" izaw caay kapulitaay a mungangaw.",
        "backend-fail-contenttype": "la’cus taazihan misuped i \"$1\" a tangan lacul nikalahizaan",
+       "backend-fail-batchsize": "suped-sulu zikuzan masaungay $1 pice-tangan {{PLURAL:$2|misaungay}}; sisetyimo kelec ku $2 {{PLURAL:$2|misaungay}}.",
        "backend-fail-usable": "u nanu tungus caay kataneng saca dilyikotoling/sapilacul mahedaw, la’cus miasip saca misuliten tangan \"$1\" .",
        "filejournal-fail-dbconnect": "la’cus papatun tu zikuzan nu suped-sulu \"$1\" a nasulitan-nazipa’an  kalunasulitan-sulu.",
        "filejournal-fail-dbquery": "la’cus misabaluh suped-sulu zikuzan \"$1\" a nasulitan-nazipa’an kalunasulitan-sulu",
        "uploadstash-exception": "la’cus misuped patapabaw tayza suped-sulu ($1): \"$2\".",
        "invalid-chunk-offset": "la’cus atilad kakitizaan",
        "img-auth-accessdenied": "kakaian misuped-miala",
+       "img-auth-nopathinfo": "caay kataneng PATH_INFO aazihen-sulyang.\nmilacul kisu sefu-kikay caay patudu’ tina cesyun,\nhakay kisu pisaungay CGI ku palana’an a sefu-kikay, zumasatu caay midama img_auth sasahicaan.\npiazih tu tatenga’ay  https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "img-auth-notindir": "masetin patapabaway a dilyikotoling piazihan-tu-sulit inayi’ matuzu’ay nu misu a pazazan.",
        "img-auth-badtitle": "la’cus pisaungay \"$1\" patizeng kapahay a satangahan.",
        "img-auth-nologinnWL": "caay henay kisu patalabu, zumasatu \"$1\" inayi’ ilabu nu mahasa piazihan-tu-sulit.",
        "img-auth-nofile": "tangan \"$1\" inayi’.",
        "img-auth-isdir": "imahini kisu mitanam misuped-miala dilyikotoling \"$1\".\nmahasa dada’ misuped-miala tangan.",
        "img-auth-streaming": "pabahel \"$1\" henay ayza",
+       "img-auth-public": "img_auth.php a sadama tu kawaw ngiw ngay caay koniay Wiki taneng patahkal tangan, tina Wiki masetin tu koniay Wiki.\nalawhani kazahkezan a zateng, mapasatezep tuway img_auth.php.",
        "img-auth-noread": "misaungayay inayi’ tungus maasip \"$1\"",
        "http-invalid-url": "la’cus URL: $1",
        "http-invalid-scheme": "caay midama \"$1\" maketunay a URL.",
        "upload-disallowed-here": "la’cus kisu mitahpu tuyni a tangan.",
        "filerevert": "patiku $1",
        "filerevert-legend": "patiku tu tangan",
+       "filerevert-intro": "imahini kisu patiku tangan ayza <strong>[[Media:$1|$1]]</strong> ta [$4 i $2 $3 a baziyong].",
        "filerevert-comment": "mahicaay:",
        "filerevert-defaultcomment": "patiku tuway tayza i $1 $2 ($3) a baziyong",
        "filerevert-submit": "patiku",
        "filedelete-maintenance": "midiput a demiad sa tangan misipu atu patiku nanunuz pisaungay.",
        "filedelete-maintenance-title": "la’cus masipu tu tangan",
        "mimesearch": "MIME kilim",
+       "mimesearch-summary": "tina kasabelih kapah mikilim tu tangan a MIME nikalahizaan.\nsulitan a kese:lacul nikalahizaan/sailuc-nikalahizaan saca lacul nikalahizaan/*, amahica <code>image/jpeg</code>.",
        "mimetype": "MIME nikalahizaan:",
        "download": "patasasa'",
        "unwatchedpages": "caayay kasisip a kasabelih",
        "listduplicatedfiles": "misaliyaw tu tangan piazihan tu sulit",
        "listduplicatedfiles-summary": "tina piazihan tu sulit yamalyilu sabaluhay baziyong a tangan atu zuma tangan misaliyaw a piazihan tu sulit, tina piazihan tu sulit dada’ paazih itiniay a tangan",
        "unusedtemplates": "caayay kasaungay a taazihan mitudung",
+       "unusedtemplatestext": "tina kasabelih pasilsil sacahamin i {{ns:template}} isasa’ nu pangangananay a salaedan caay macaliway a zuma kasabelih a taazihan mitudung.\niayaw misipu, maydihtu mikinsa izaw haw masasiket uyniyay taazihan mitudung a zuma kasabelih.",
        "randompage": "kakibalucu’ ay a kasabelih",
        "randompage-nopages": "i {{PLURAL:$2|pangangananay a salaedan}} inayi’ amahicahica tu kasabelih: $1.",
        "randomincategory": "kakibalucu’ kakuniza a kasabelih",
        "statistics-users": "mapanganganay tu [[Special:ListUsers|misaungayay]]",
        "statistics-users-active": "saungay nu binawlan a misaungayay",
        "pageswithprop": "izaw susin a kasabelih",
+       "pageswithprop-legend": "izaway kasabelih susin a kasabelih",
        "pageswithprop-text": "tina kasabelih sapalalitemuh tu kawaw pisaungay matuzu’ay susin a kasabelih",
        "pageswithprop-prop": "susin kalungangan:",
        "pageswithprop-submit": "mileku",
        "pageswithprop-prophidden-long": "midimut mangasiw tanaya’ a susin sulyang ($1) tuway",
        "pageswithprop-prophidden-binary": "madimut tusa-taayaw-eneng susin sulyang ($1)",
        "doubleredirects": "tusaay a miliyaw patatuzu’",
+       "doubleredirectstext": "tina kasabelih pasilsil miliyaw patatuzu’ ta zumaay miliyaw patatuzu’ kasabelih a kasabelih. paytusil yamalyilu sakacacay atu sakatusa miliyaw patatuzu’ kasabelih misiket, atu sakatusa zikuzan nu miliyaw patatuzu’ a papatuzu’an, sakatusa zikuzan nu miliyaw patatuzu’ a papatuzu’an sawsawni ku \"tetenga’ay\" a patatuzu’an kasabelih, ku sakacacay tu miliyaw patatuzu’ kasabelih apayizaay a kasabelih.\n<del>misipu-sipuuay-kenis</del> dayhiw kya kasacacay a munday sapawazay tuway.",
        "double-redirect-fixed-move": "[[$1]] mapahezek tu milimad.\ntina kasabelih malunuk misaimed zumasatu mamiliyaw patatuzau’ tu [[$2]].",
        "double-redirect-fixed-maintenance": "i midiput a kawaw sa lunuk misumad tupatibabaay miliyaw patatuzu’ nay [[$1]] katukuh [[$2]].",
        "double-redirect-fixer": "miliyaw patatuzu’ misumaday",
        "uncategorizedcategories": "cayhenay kakunizaay a kakuniza",
        "uncategorizedimages": "cayhen kakunizaay a tangan",
        "uncategorizedtemplates": "sapi kakuniza taazihan mitudung",
+       "uncategorized-categories-exceptionlist": "# yamalyilu caay kakapah Special:UncategorizedCategories mapatahkalay a kakuniza piazihan-tu-sulit, cacay kakuniza cacay a silsil, a \"*\" miteka, saku zuma tatebanan nu nisulitan (yamalyilu nayi’ ku cacan) sapatangah nu silsil amisekipo. pisaungay \"#\" dayhiw buhci tu kamu.",
        "unusedcategories": "caayay kasaungay a kakuniza",
        "unusedimages": "caayay kasaungay a tangan",
        "wantedcategories": "maydihay a kakuniza",
        "wantedpages": "maydihay a kasabelih",
+       "wantedpages-summary": "isasa’ay sa ku sayadahay masasiket a inayi’ay a kasabelih, izaw a dada’ miliyaw patatuzu’masasiket a kasabelih. amahica amiala inayi’ay a miliyaw patatuzu’ kasabelih, tayza [[{{#special:BrokenRedirects}}| malepi’ay a miliyaw patatuzu’ piazihan-tu-sulit]].",
        "wantedpages-badtitle": "kyu i lecapuay a satangahan la’cus: $1",
        "wantedfiles": "maydihay a tangan",
+       "wantedfiletext-cat": "isasa’ay a tangan masaungay sa, uyzasa tangan inayi’. hekal suped-sulu a tangan kanahatu mueneng, uyzasa tina piazihan-tu-sulit apasilsil tuway. tina kakuniza pacebaay a tubeli kasacacay saka <del>sipu-kenis</del> sacuzu’. zuma sa, kasabelih sipakabit ilabu' tangan inayi’ apaazih i piazihan-tu-sulit [[:$1]].",
        "wantedfiletext-cat-noforeign": "isasa’ay a tangan mapasaungay tu uyzasa inayi’ay. tina a dada’ silabas kakaiyan tu, kasabelih sipakabit ilabu’ nika inayi’ay a tangan mapalaylay i [[:$1]]",
+       "wantedfiletext-nocat": "isasa’ tangan masaungay sa, zumasatu tangan inayi’. hekal suped-sulu a tangan kanahatu, uyzasa tina piazihan-tu-sulit apasilsil tuway. uyniyan paceba’ay a  kasacacay apacuzu’ ku <del> sipu-kenis </del> sacuzu’.",
        "wantedtemplates": "maydihay a taazihan mitudung",
        "mostlinked": "masasiket sayadahay a kasabelih",
        "mostlinkedcategories": "masasiket sayadahay a kakuniza",
        "deadendpagestext": "isasa’ay i {{SITENAME}} a kasabelih caay masasiket katukuh zuma kasabelih.",
        "protectedpages": "madiputay a kasabelih",
        "protectedpages-indef": "paazih a cacay inayi’-kakatekuhan midiputay kasabelih",
+       "protectedpages-summary": "tina kasabelih pasilsil ayza madiputay kasabelih. maydih palalitemuh tu kawaw madiputay satangahan piazihan-tu-sulit, piazih tu tatenga’ay [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]",
        "protectedpages-cascade": "paazih a cacay patatusulay a midiput kasabelih",
        "protectedpages-noredirect": "midimut miliyaw patatuzu’ kasabelih",
        "protectedpagesempty": "inayi’ pisaungay uyniyay  aazihen-sulyang a madiputay kasabelih ayza.",
        "protectedpages-unknown-timestamp": "caay kapulita",
        "protectedpages-unknown-performer": "caay kapulita a misaungayay",
        "protectedtitles": "madiputay a satangahan",
+       "protectedtitles-summary": "tina kasabelih pasilsil ayza madiputay satangahan. maydih palalitemuh tu kawaw madiputay a kasabelih piazihan-tu-sulit, piazih tu tatenga’ay  [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
        "protectedtitlesempty": "inayi’ pisaungay uyniyay aazihen-sulyang a madiputay  satangahan ayza.",
        "protectedtitles-submit": "paazih tu satangahan",
        "listusers": "misaungayay a piazihan tu sulit",
        "apisandbox-alert-field": "la’cus tina pisinga’an a sulyang.",
        "apisandbox-continue": "palalid",
        "apisandbox-continue-clear": "palawpis",
+       "apisandbox-continue-help": "{{int:apisandbox-continue}} kapah [https://www.mediawiki.org/wiki/API:Query#Continuing_queries palalid] sazikuz a milunguc, {{int:apisandbox-continue-clear}} amasipu palalid mahizaay a aazihen-sulyang.",
        "apisandbox-param-limit": "musulit <kbd>max</kbd> amisaungay satabakiay a kelec.",
        "apisandbox-multivalue-all-namespaces": "$1 (sacahamin pangangananay a salaedan)",
        "apisandbox-multivalue-all-values": "$1 (sacahamin sulyang)",
        "booksources-text": "isasa’ay a piazihan tu sulit yamalyilu zuma pacakay baluhay cudad saca malumanay cudad i calay-kakacawan(wangcan) masasiket, hakay izaw ku kaydihan nu misu a cudad pataayaw matineng tatalaayaway a cesyun.",
        "booksources-invalid-isbn": "nipabeli nu misu a ISBN caay tatenga’ay; pikinsa kopiay a saangangan mungangaw haw?",
        "magiclink-tracking-rfc": "pisaungay RFC kaliwaza misasiket kasabelih",
+       "magiclink-tracking-rfc-desc": "tina kasabelih misaungay RFC kaliwaza masasiketay a kasabelih, piazih tu tatenga’ay  [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] a hicaen malimad.",
        "magiclink-tracking-pmid": "masasiketay a kasabelih nu pisaungay PMID kaliwaza tina Wiki mapasatezep tu miliyaw patizeng tu mima",
+       "magiclink-tracking-pmid-desc": "tina kasabelih misaungay PMID kaliwaza masasiketay a kasabelih, piazih tu tatenga’ay  [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] a hicaen malimad.",
        "magiclink-tracking-isbn": "misasiketay a kasabelih nu pisaungay ISBN kaliwaza",
        "specialloguserlabel": "mileku-misaungayay:",
        "speciallogtitlelabel": "pamutekan (satangahan saca {{ns:user}}: misaungayay pakatineng misaungayay):",
        "cachedspecial-refresh-now": "ciwsace sabaluhay a baziyong.",
        "categories": "kakuniza",
        "categories-submit": "paazih",
+       "categoriespagetext": "isasa’ay ku yamalyilu kasabelih saca myiti a{{PLURAL:$1|kakuniza}}.\n[[Special:UnusedCategories|caay pisaungay a kakuniza]] caay itini paazih。\npiazih tu tatenga’ay [[Special:WantedCategories|maydih a kakuniza]].",
        "categoriesfrom": "paazih kakuniza miteka i:",
        "deletedcontributions": "masipuay a misaungayay paanin",
        "linksearch": "ihekal masasiket mikilim",
        "linksearch-pat": "mikilim aazihen a sulit:",
        "linksearch-ns": "pangangananay a salaedan:",
        "linksearch-ok": "kilim",
+       "linksearch-text": "kapah pisaungay kapulungan-kawiza tatebanan nu nisulitan tinaku *.wikipedia.org.\nkapulungan-kawiza tatebanan nu nisulitan kanca pisaungay i sapabaway tindud calay-belih(wangyi), tinaku \"*.org\".<br />\ndama {{PLURAL:$2|tungsyun syitin}} izaw: $1 (amahica caay matuzu’ay satu pataayaw tu kawaw pisaungay http:// tungsyun syitin).",
        "linksearch-line": "$1 nay $2 masasiket",
        "linksearch-error": "kapulungan-kawiza tatebanan-nisulitan pisaungay dada’ i angangan-kikay kalungangan a lingatu.",
        "listusersfrom": "paazih misaungayay miteka nay:",
        "activeusers-noresult": "caykatepa misaungayay.",
        "activeusers-submit": "paazih misaungayay i saungay nu binawlan",
        "listgrouprights": "misaungayay luyaluy a tungus",
+       "listgrouprights-summary": "isasa’ay sa ku tina Wiki a misaungayay luyaluy piazihan-tu-sulit,atu mahizaay a misuped-miala tungus.\nkapah kisu i [[{{MediaWiki:Listgrouprights-helppage}}|pulita cesyun]] matepa mahizaay tekeday tungus a cesyun.",
+       "listgrouprights-key": "buhci tu kamu:\n* <span class=\"listgrouprights-granted\"> pabelituay a tungus </span>\n* <span class=\"listgrouprights-revoked\"> palawpesay a tungus </span>",
        "listgrouprights-group": "luyaluy",
        "listgrouprights-rights": "kinli",
        "listgrouprights-helppage": "Help:Group rights",
        "listgrouprights-namespaceprotection-namespace": "pangangananay a salaedan",
        "listgrouprights-namespaceprotection-restrictedto": "mahasa misaungayay mikawaway-kalumyiti a tungus",
        "listgrants": "pabeli tu kinli",
+       "listgrants-summary": "isasa’ay sa ku pabeli tu kinli piazihan-tu-sulit masasiket misaungayay tungus. misaungayay kapah pabeli tu kinli inyungcense pisaungay ku canghaw nu heni, uyzasa kelic nu misaungayay pabeli inyungcense a tungus. palecad, inyungcense la’cus pisaungay misaungayay inayi’ay a tungus.\nhakay kisu kapah tu i [[{{MediaWiki:Listgrouprights-helppage}}|tini]] maala teked tungus ku zumaay a kalunasulitan.",
        "listgrants-rights": "kinli",
        "trackingcategories": "mikilul nazikuzan kakuniza",
+       "trackingcategories-summary": "tina kasabelih pasilsil nay MediaWiki zwanti lunuk masanga’ sapikilul nazikuzan kasabelih a kakuniza, uyniyay kakuniza a kalungangan kapah nay pangangananay a salaedan {{ns:8}} a mahizaay sisetyimo palatuh misaimed.",
        "trackingcategories-desc": "kakuniza milisimet a tatungus",
        "restricted-displaytitle-ignored": "sekipo paazih satangah a kasabelih",
+       "restricted-displaytitle-ignored-desc": "kasabelih masekipo tuway <code><nowiki>{{DISPLAYTITLE}}</nowiki></code>, zayhan kya satangahan i kasabelih tatenga’ay a satangahan caay kalecad.",
+       "noindex-category-desc": "pangangananay a salaedan mahasa, zumasatu izaw mosu a sulit <code><nowiki>__NOINDEX__</nowiki></code> caay pasilsil nu kikay-tademaw tu kapah pikiliman tu nisulitan miasip a kasabelih.",
+       "index-category-desc": "pangangananay a salaedan mahasa atu izaw ku mosuay a sulit <code><nowiki>__INDEX__</nowiki></code> pay kikay-tademaw pasilsil kapah pikiliman tu nisulitan miasip a kasabelih.",
        "post-expand-template-inclusion-category-desc": "namicuwat taazihan mitudung tuway kya tabaki’ mangawi <code>$wgMaxArticleSize</code> hamaw layad taazihan mitudung caay malecek micuwat kasabelih.",
+       "post-expand-template-argument-category-desc": "namicuwat taazihan mitudung aazihen-sulyang, pinalu hacica tabaki mangasiw  <code>$wgMaxArticleSize</code> a kasabelih (zuma ilabu’ nu tulu kwahaw, tinaku <code>{{{Foo}}}</code>)",
+       "expensive-parserfunction-category-desc": "kasabelih pisaungay mieluc kayadah sisetyimo  katahkalan nu kalisiw a tingalaw-sakaluk hansu-sausi(tinaku <code>#ifexist</code>).\npiazih tu tatenga’ay  [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
        "broken-file-category-desc": "yamalyilu malepi’ a tangan masasiket a kasabelih (sipakabit ilabu tangan masasiket a tangan inayi’).",
+       "hidden-category-category-desc": "i lacul misaungay <code><nowiki>__HIDDENCAT__</nowiki></code> a kakuniza, kapah midimut pataayaw tu kawaw i kasabelih paazihay a kakuniza masasiket atilad.",
        "trackingcategories-nodesc": "inayi’ ku silaheciay a sapuelac",
        "trackingcategories-disabled": "mapasatezep kakuniza tuway",
        "mailnologin": "inayi’ pabahel puenengan",
+       "mailnologintext": "kanca kisu iayaw [[Special:UserLogin|patalabu]]\nzumasatu i [[Special:Preferences|setin tu kanamuhan]]\nmisetin cacay kapahay a imyiyo(email) puenengan kya kapah pabahel tigami tu zuma misaungayay.",
        "emailuser": "imyiyo(email) patakus tina misaungayay",
        "emailuser-title-target": "imyiyo(email) tu{{GENDER:$1|misaungayay}}",
        "emailuser-title-notarget": "imyiyo(email) patakus misaungayay",
+       "emailpagetext": "kapah kisu pisaungay isasa’ay a sapat nu sulit pabahel imyiyo(email) tu ku tina {{Gender:$1| misaungayay}}.\ni [[Special:Preferences|setin tu kanamuhan]] pasulitan a imyiyo(email) puenengan mala ku tigamiay a \"patigamiay\", sisa kya misaungayay kapah kakelul patubeli tisuwanan.",
        "defemailsubject": "{{SITENAME}} misaungayay \"$1\" patigamiay a imyiyo(email)",
        "usermaildisabled": "misaungayay imyiyo(email) mapasatezep tu",
        "usermaildisabledtext": "la’cus pabahel imyiyo(email) tayza tian Wiki zumaay a misaungayay",
        "emailccsubject": "napatigami $1 nu misa a palatuh mikilulay-cudad: $2",
        "emailsent": "mapatahkal tu i imyiyo(email)",
        "emailsenttext": "patigamitu ku imyiyo(email) palatuh nu misu.",
+       "emailuserfooter": "tina imyiyo(email) sanay $1 micaliw {{SITENAME}} a \"{{int:emailuser}}\" sasahicaan {{GENDER:$1|patigami}}{{GENDER:$1|$2}}. amahica {{GENDER:$2|kisu}} patubeli tina imyiyo(email), {{GENDER:$2|misuay}} tigami akakelul patigmi katukuh {{GENDER:$1|nuayaway a patigamiay}}, {{GENDER:$1|ciniza|ciniza|ciniza}}taneng maazih {{GENDER:$2|misuay}}imyiyo(email) puenengan.",
        "usermessage-summary": "subelid tu latuh tayza i sisetyimo.",
        "usermessage-editor": "sisetyimo palatuh",
        "watchlist": "miazihay a piazihan tu sulit",
        "watchlistanontext": "patalabu henay amiciwsace saca  misumad miazihay a piazihan-tu-sulit a kasacacay.",
        "watchnologin": "caay henay patalabu",
        "addwatch": "cunusen tu miazihay a piazihan-tu-sulit",
+       "addedwatchtext": "i [[Special:Watchlist|numisuay miazihay a piazihan-tu-sulit]] macunusen tu ku kasabelih \"[[:$1]]\" atu ku matatengil kasabelih.\nanucilacila sakay tina kasabelih atu kya masasiket sasukamu kasabelih a sumad amapasilsil itini piazihan-tu-sulit.",
        "addedwatchtext-talk": "\"[[:$1]]\" atu mahizaay u kasabelih micunus tutayza itisuwan [[Special:Watchlist|miazihay a piazihan tu sulit]]",
        "addedwatchtext-short": "miazihay a piazihan-tu-sulit nu misu macunus tu kasabelih \"$1\".",
        "removewatch": "misipu nay misisip a piazihan-tu-sulit",
        "enotif_subject_restored": "{{SITENAME}} $2 patiku kasabelih $1 tuway",
        "enotif_subject_changed": "{{SITENAME}} $2 masumad tuway kasabelih $1",
        "enotif_body_intro_deleted": "{{SITENAME}} $2 masipu tu kasabelih $1 i $PAGEEDITDATE, piazihen i $3.",
+       "enotif_body_intro_created": "{{SITENAME}} a kasabelih $1 i $PAGEEDITDATE ngay misaungayay $2 {{GENDER:$2| patizeng}}, piazih ayzaay a sumad $3",
+       "enotif_body_intro_moved": "{{SITENAME}} a kasabelih $1 i $PAGEEDITDATE ngay misaungayay $2 {{GENDER:$2| milimad}}, piazih ayzaay a sumad $3.",
+       "enotif_body_intro_restored": "{{SITENAME}} a kasabelih $1 i $PAGEEDITDATE ngay misaungayay $2 {{GENDER:$2| patiku}}, piazih ayzaay a sumad $3",
+       "enotif_body_intro_changed": "{{SITENAME}} a kasabelih $1 i $PAGEEDITDATE ngay misaungayay $2 {{GENDER:$2|misumad}}, piazih ayzaay a sumad $3.",
        "enotif_anon_editor": "paceba panganganay a misaungayay $1",
        "enotif_minoredit": "payni mikilulay a mikawaway-kalumyiti",
        "deletepage": "misipu tu kasabelih",
        "confirm": "malucekaytu",
        "excontent": "lacul nu: \"$1\"",
+       "excontentauthor": "lacul ku:\"$1\", zumasatu dada’ ku cacay paaninay tu kalusasing \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|sasukamu]])",
        "exbeforeblank": "caay henay palawpes hamin a lacul ku: \"$1\"",
        "delete-confirm": "misipu \"$1\"",
        "historywarning": "<strong> patalaw:</strong> imahini amisipuay a kasabelih nu misu yamalyilu $1 {{PLURAL:$1|sumad}} nazipa’an",
        "historyaction-submit": "paazih",
+       "confirmdeletetext": "imahini kisu masipu cacay kasabelih saca zunga atu kya sacahamin nazipa’an.\npilucek matineng kisu miteka tina saungay patatuzu’ a heci, zumasatu piluceki saungay nu misu matatungus [[{{MediaWiki:Policy-url}}]] a kakilulen.",
        "actioncomplete": "pahezek tu ku saungay",
        "actionfailed": "saungay mungangaw",
        "deletedtext": "masipu tu \"$1\".\npiazih tu tatenga’ay $2 ciwsace capi demiad a masipuay a nasulitan.",
        "deletereasonotherlist": "zuma a mahicaay",
        "deletereason-dropdown": "*  maazihay tu sa masipu tu mahicaay \n** sizuma sa palatuh \n** pauning\n** maalaw nisanga’an niza tu tungus a kawaw \n** masacudaday milunguc\n** malepi’ay miliyaw patatuzau’",
        "deleteprotected": "tina kasabelih madiputay tu, la’cus kisu misipu tina kasabelih.",
+       "deleting-backlinks-warning": "<strong>patalaw:</strong>imahini kisu masipuay a kasabelih izaw [[Special:WhatLinksHere/{{FULLPAGENAME}}|zuma kasabelih]] masasiket saca nicaliwan.",
        "rollback": "panukasan mikawaway-kalumyiti",
        "rollbacklink": "panukasan",
        "rollbacklinkcount": "patiku {{PLURAL:$1|mikawaway tu kalumyiti}}",
        "cantrollback": "la’cus patiku mikawaway-kalumyiti;\ntina kasabelih a sazikuz paaninay u kinacacay a masacudaday.",
        "alreadyrolled": "la’cus patiku nay [[User:$2|$2]] ([[User talk:$2|sasukamu]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]] sapihica sazikuzay cacay mikawaway-kalumyiti [[:$1]], izawtu zumaay tatemaw mikawaway-kalumyiti saca patikutu kya kasabelih.)\n\nsazikuzay a cacay mikawaway-kalumyiti kya kasabelih a misaungayay sa ku [[User:$3|$3]] ([[User talk:$3|sasukamu]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "mikawaway-kalumyiti pecu’ nu lacul ku: <em>$1</em>.",
+       "revertpage": "mapatiku tuway [[Special:Contributions/$2|$2]] ([[User talk:$2|sasukamu]]) a mikawaway-kalumyiti sazikuzay nay [[User:$1|$1]] amisumad nu ayaway a baziyong",
        "revertpage-nouser": "mapatiku tu midimut misaungayay ku mikawaway-kalumyiti malasazikuz {{GENDER:$1|[[User:$1|$1]]}} masumad nu ayaway a baziyong",
+       "rollback-success": "mapatiku tuway {{GENDER:$3|$1}} mapasanga’ay a mikawaway-kalumyiti;\nmisumad tatiku nay {{GENDER:$4|$2}} masumad nu ayaway sazikuzay a baziyong.",
        "rollback-success-notify": "mapatiku $1 nikawawan mikawaway-kalumyiti;\nmisumad patiku ta $2 masumad nu ayaway a sazikuz cacay baziyong. [$3 paazih ku masumaday]",
        "sessionfailure-title": "kasasiket mungangaw",
        "sessionfailure": "kisu patalabu kasasiketan mahiza simunday,\nsaka pataayaw-milangat kasasiketan maalaw atu madebung, tina saungay mapalawpes tuway.\npitatiku ayaway a kasabelih, miliyaw maasip kya kasabelih pitaneng aca.",
        "logentry-contentmodel-change-revertlink": "patiku",
        "logentry-contentmodel-change-revert": "patiku",
        "protectlogpage": "midiput nasulitan nakawawan",
+       "protectlogtext": "isasa’ ku misumad kasabelih midiputay a piazihan-tu-sulit.\npiazih tu tatenga’ay [[Special:ProtectedPages|madiputay kasabelih piazihan-tu-sulit]] ciwsace ayzaay madiputay kasabelih.",
        "protectedarticle": "madiput tuway \"[[$1]]\"",
        "modifiedarticleprotection": "masumad tuway \"[[$1]]\" a midiput tindud",
        "unprotectedarticle": "mahulak tu \"[[$1]]\" a diput",
        "protect-otherreason-op": "zuma a mahicaay",
        "protect-dropdown": "* maazihay a pidiput mahicaay \n** matabesiw tu ku pisala’cus\n** tadayadah ku tatuni’ palatuh \n** hatay tu kaizawan a mikawaway-kalumyiti ngayaw\n** takalaw ku talabu’ay i kasabelih",
        "protect-edit-reasonlist": "midiput a mahicaay nu mikawaway-kalumyiti",
+       "protect-expiry-options": "1 a tuki:1 hour,1 a demiad:1 day,1 a lipay:1 week,2 a lipay:2 weeks,1 a bulad:1 month,3 a bulad:3 months,6 a bulad:6 months,1 a mihca:1 year, haynisadikud:infinite",
        "restriction-type": "tungus:",
        "restriction-level": "kelec kasaselal:",
        "minimum-size": "makaadidi’ay a sausi",
        "undeletepage": "ciwsace atu patiku masipuay tu kasabelih",
        "undeletepagetitle": "<strong>isasa’ay mala [[:$1|$1]] masipuay tu masumad nu ayaway baziyong</strong>.",
        "viewdeletedpage": "ciwsace masipuay tu kasabelih",
+       "undeletepagetext": "isasa’ay a {{PLURAL:$1|kasabelih masipu tuway|kasabelih masipu tuwat}} uyzasa maemicen henay, kapah henay patiku.\nmaemicenay a tangan hakay paenengay a tuki milawpes.",
        "undelete-fieldset-title": "patiku misumad nu ayaway",
+       "undeleteextrahelp": "amahica apatiku sacahamin a kasabelih nazipa’an,palawpes hatizaay sacahamin mapili’ay atilad atu sapecec <strong><em>{{int:undeletebtn}}</em></strong>.\namahica apatiku matuzu’ay a kasabelih nazipa’an, pipilil’ apatikuay a sumad mapili’ay atilad atu sapecec <strong><em>{{int:undeletebtn}}</em></strong>.",
        "undeleterevisions": "$1{{PLURAL:$1|baziyong}}misipu",
+       "undeletehistory": "amahica kisu patiku kya kasabelih, sacahamin a masumaday a nazipa’an amapatiku amin.\namahica masipu tuway anu izaw ku misaungay malecaday a kalungangan patizeng baluhayay kasabelih, mapatikuay a masumaday nazipa’an atahkal iayaw nu tina nazipa’an nu kasabelih.",
        "undeleterevdel": "amahica sabaluhayay a kasabelih saca tangan masumad nu ayaway masipu tu liyad, a la’cus mileku palawpes misipuay a saungay.\nanumahiza sa kanca mipili’ hatizaay saca palawpes  midimut masipuay tu sabaluhay a sumad nu ayaway.",
        "undelete-revision": "masipu nu $3 a $1 (i $4 $5) masumad nu ayaway",
        "undeleterevision-missing": "la’cus saca mahedaw a nisumadan.\nhakay kisu pisaungay tu mungangaway misiket, saca kya amasumad nu ayaway namaemicen patiku saca masipu.",
+       "undeleterevision-duplicate-revid": "la’cus patiku {{PLURAL:$1|1 masumad nu ayaway|$1 masumad nu ayaway}}, zayhan {{PLURAL:$1|masumad nu ayaway a}} <code>rev_id</code> mapasaungay tuway.",
        "undelete-nodiff": "inayi’ nasawniay a sumad.",
        "undeletebtn": "patiku",
        "undeletelink": "ciwsace/patiku",
        "block": "milangat misaungayay",
        "unblock": "mihulak malangat misaungayay",
        "blockip": "milangat {{GENDER:$1|misaungayay}}",
+       "blockiptext": "suliten isasa’ay a aazihan cudad taneng malangat uzumaay IP puenengan saca misaungayay a mikawaway-kalumyiti tungus.\nizaw dada’ saka mitena’ mipeci’, atu matatungus [[{{MediaWiki:Policy-url}}|pasayzaan saca amikuwanay-pasayzaay]] a zasatu sasa misaungay.\npiisasa’ suliten cacay masaheciay a mahicaay(tinaku: kilul ku kumu cacay mapapeci’ay a kasabelih).\nkapah kisu pisaungay [//ais.wikipedia.org/wiki/ inayi’ kakuniza subal luyou CIDR]kamu-sakilul kese milangat IP subal, satabakiay mahasa a subal IPv4 ku /$1, IPv6 ku /$2.",
        "ipaddressorusername": "IP puenengan saca misaungayay a kalungangan:",
        "ipbexpiry": "kakatekuhan:",
        "ipbreason": "mahicaay:",
+       "ipbreason-dropdown": "* sawsawni maazihay a langat mahicaay \n** suliten pacebaaay a cesyun \n** masipu kasabelih a lacul \n** payakayak hekalay a kuwangkaw masasiket\n** i kasabelih suliten inayi’ay sakaizaway a sulit \n** palawacu’ay a saungay, madebung/mibulibul tu tawan\n** patahtah kayadahay a canghaw \n** pisaungay kabidangay misaungayay a kalungangan",
        "ipb-hardblock": "amana pisaungay tina IP puenengan patalabuay a misaungayay mikawaway-kalumyiti",
        "ipbcreateaccount": "mitena’ patizeng baluhay canghaw",
        "ipbemailban": "satezep misaungayay pabahel imyiyo(email)",
        "ipb-confirm": "malucekay tu langat",
        "badipaddress": "la’cusay a IP puenengan",
        "blockipsuccesssub": "milangat malahci",
+       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] malangat tuway.<br />\npiazih tu tatenga’ay [[Special:BlockList|malangat piazihan-tu-sulit]] amikinsa ayzaay a langat.",
        "ipb-blockingself": "amilangat tu kisu haw! malucek kisu amahiza haw?",
        "ipb-confirmhideuser": "amilangat kisu cacay a misaungayay zumasatu \"midimut\" kya misaungayay, apasatezep paazih sacahamin patahkal i piazihan-tu-sulit atu ibalu nu nasulitan a misaungayay a kalungangan.\ntatenga’ kisu ahatizaan haw?",
        "ipb-confirmaction": "anu malucekay hinien mahica asa kisu, kapikinsa tu isasa’ay \"{{int:ipb-confirm}}\" langat-pisinga’an.",
        "blocklog-showsuppresslog": "tina misaungayay nasawniay malangat zumasatu midimut.\nisasa’ay sa u satezep paazih kiluk amiazih tu tatenga’ay",
        "blocklogentry": "malangat [[$1]] a kakatukuhan i $2 $3",
        "reblock-logentry": "misumad [[$1]] a langat kakatukuhan katukuh $2 $3",
+       "blocklogtext": "uyniyan ku misaungayay langat atu palawpes malangat saungay a nasulitan.\ncaay pasilsil lunuk malangat a IP puenengan.\npiazih tu tatenga’ay [[Special:BlockList| malangat piazihan-tu-sulit ]] a ayza imahini kawaw a sapikawa atu milangat",
        "unblocklogentry": "mahulak malangat $1 tuway",
        "block-log-flags-anononly": "wiza dada’ paceba panganganay ku misaungayay",
        "block-log-flags-nocreate": "canghaw patizeng mapasatezep tuway",
        "ipb-otherblocks-header": "zuma {{PLURAL:$1|milangat}}",
        "unblock-hideuser": "u nanu tina misaungayay a kalungangan masetin tu midimut, la’cus kisu mihulak tina misaungayay a langat.",
        "ipb_cant_unblock": "mungangaw: inayi’ milangat ID $1, hakay mahulak tu kya langat.",
+       "ipb_blocked_as_range": "mungangaw: IP puenengan $1 caay kakelul palangat, sisa la’cus kakelul mihulak ku langat.\ntina IP puenengan i $2 malangatay a subal, kapah kisu mihulak tina subal a langat.",
        "ip_range_invalid": "la’cusay IP subal.",
        "ip_range_toolarge": "caay mahasa milangat kya taliyuk mangasiw /$1.",
        "proxyblocker": "kutay sefu-kikay milangat-kikay",
+       "proxyblockreason": "izay IP puenengan nu misu mawawah kutay sefu-kikay, sisa malangat tuway.\npitakus situngusay tu kawaw nu calay-zazan(wanglu) nu misu saca mikumi sitaneng midama, sakamuen tu heni tina mangaleb pihaceng kazahkezan a munday.",
        "sorbsreason": "numisu a IP u puenengan i {{SITENAME}} pisaungayan  DNSBL mapala mawawah midayli  sefu-kikay",
        "sorbs_create_account_reason": "numisu a IP puenengan i {{SITENAME}} pisaungay sa DNSBL mala mawawah kutay sefu-kikay.\nla’cus kisu panganganen ku canghaw.",
        "softblockrangesreason": "IP puenengan nu misu ($1) inayi’ mahasa paceba pangangan paanin, pipatalabu.",
        "ipbnounblockself": "caay mahasa mihulak malangat tu kisu.",
        "lockdb": "pamutek tu sulu nu kalunasulitan",
        "unlockdb": "mihulak azihen nasulitan-sulu",
+       "lockdbtext": "pamutek nasulitan-sulu apapatezep sacahamin misaungayay mikawaway-kalumyiti kasabelih, misumad setin tu kanamuhan, mikawaway-kalumyiti miazihay a piazihan-tu-sulit atu zuma maydih misumad tu nasulitan-sulu a saungay.\npiluceki amahica kisu haw? zumasatau imahini midiput tu kawaw pahezek sa mihulak nasulitan-sulu a pamutek.",
+       "unlockdbtext": "mihulak pamutek nasulitan-sulu amasasa sacahamin misaungayay mikawaway-kalumyiti kasabelih, misumad setin tu kanamuhan, mikawaway-kalumyiti miazihay a piazihan-tu-sulit atu zuma maydih misumaday nasulitan-sulu a saungay.\npilucek kisu amahini kisu haw?",
        "lockconfirm": "hang, maydih kaku pamutek kalunasulitan-sulu.",
        "unlockconfirm": "hang, maydih kaku mihulak pamutek sulu nu nasulitan",
        "lockbtn": "pamutek tu sulu nu kalunasulitan",
        "move-page": "milimad $1",
        "move-page-legend": "milimad kasabelih",
        "movepagetext": "isasa’ay a aazihan cudad kapah sapihica miliyaw pangangan cacay kasabelih, atu milimad mikabu kya kasabelih a sacahamin nazipa’an nasulitan ta izaw baluhay kalungangan a kasabelih.\nmaluman pyawti a kasabelih amiliyaw patatuzu’ kasabelih, payiza pisaungay baluhay pyawti a kasabelih.\npikinsa izaw haw ku [[Special:DoubleRedirects|hatusa miliyaw patatuzu’]] saca [[Special:BrokenRedirects|malepi’ay a miliyaw patatuzu’]] maydih misumad.\nizaw kisu sikining ngay masasiket palalid payiza tatenga’ay a kakitizaan.\n\npiazihen, amahica baluhayay a kasabelih kalungangan masaungay tuway, kyu tina kasabelih <strong> caay </strong> malimad tu zuma kakitizaan, anu caay baluhay kalungangan miliyaw patatuzu’ kasabelih zumasatu inayi’ amahicahica  mikawaway-kalumyiti nazipa’an.\nmahiza sakamu, kapah kisu milimad mungangaw ta zuma kalungangan a kasabelih patiku ta saayaway kalungangan,uyzasa amana mitahpu amahicahica tu ayzaay kasabelih.\n\n<strong> azihen: </strong>\ntina saungay sakay manamuhay kasabelih hakay tadamaan atu talibahalay a sumad;\niayaw nu saungay kaluceki matineng kisu haw hakay kya teluc nay milimad.",
+       "movepagetalktext": "amahica mipili’ tina atilad, mahizaay a sasukamu kasabelih amalunuk atu tina belih maladay milimad ta baluhay kakitizaan, ihekal sibaluhay kalungangan izawtu cacay muenengay sasukamu kasabelih.\nuyniyay a pulita, amahica izaw siceyo kanca kisu lima-saungay milimad saca mikabu tu izaway a kasabelih.",
+       "moveuserpage-warning": "<strong> patalaw:</strong>imahini kisu milimad misaungayay a kasabelih, piazihen dada’ misaungayay kasabelih amasumad kalungangan, zumasatu <em>caay</em> miliyaw pangangan misaungayay.",
+       "movecategorypage-warning": "<strong> patalaw:</strong>imahini kisu milimad kakuniza kasabelih。piazihen tina saungay dada’ milimad kasabelih,ilabu’ nu maluman kakuniza a kasabelih <em>caay</em> milimad ta baluhay kakuniza.",
        "movenologintext": "kanca kisu ku mapangangan tuway a misaungayay atu [[Special:UserLogin|patalabu]] kya taneng milimad tu kasabelih",
        "movenotallowed": "inayi’ tungus milimad tu tangan.",
        "movenotallowedfile": "inayi’ tungus milimad tu tangan.",
        "allmessagesname": "kalungangan",
        "allmessagesdefault": "pataayaw tu kawaw palatuh  a sulit",
        "allmessagescurrent": "ayzaay palatuh a sulit",
+       "allmessagestext": "tina kakitizaan pasilsil sacahamin i MediaWiki pangangananay a salaedanay a sisetyimo palatuh.\namahica kisu maydih mikileh mikuwanay a MediaWiki sanuniyazu’en, piazih tu tatenga’ay [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki sanuniyazu’en] atu [https://translatewiki.net translatewiki.net].",
        "allmessages-filter-legend": "kilim",
        "allmessages-filter": "kilul misumad zasatu mikilim:",
        "allmessages-filter-unmodified": "caay henay misumad",
        "thumbnail_image-failure-limit": "capi demiad paazih tina sukep tu zunga pinapian tuway mungangaw ($1 saca yadah ), pisawsawni teneng aca.",
        "import": "pacumuden kasabelih",
        "importinterwiki": "nay zuma wiki pacumud",
+       "import-interwiki-text": "pipili’ cacay Wiki atu kasabelih satangahan saka miteka pacumud.\nnaamahiza amisulit masumad nu ayaway demiad atu mikawaway-kalumyitiay a kalungangan.\nsacahaminay nay milakuit Wiki pacumuday a saungay amasulit i [[Special:Log/import|pacumud nasulitan nazipa’an]].",
        "import-interwiki-sourcewiki": "saangangan Wiki:",
        "import-interwiki-sourcepage": "saangangan kasabelih:",
        "import-interwiki-history": "kopi tina kasabelih sacahamin nazipa’an masumad nu ayaway",
        "import-nonewrevisions": "inayi’ pacumud amahicahica tu masumad nu ayaway (masumad nu ayaway izaw tuway, saca zayhan mungangaw sekipo)",
        "xml-error-string": "$1 i tusil $2, langat $3 ($4 wyiyincu$4): $5",
        "import-upload": "patapabaw XML kalunasulitan",
+       "import-token-mismatch": "kasasiketan kalunasulitan mahedaw.\n\nhakay kisu mapakatahkal. <strong> pilucek kisu i patalabu setyitase henay haw? atu pitaneng aca </strong>.\namahica la’cus henay misaungay, pitanam [[Special:UserLogout|katahkal]] patalabu aca,zumasatu pikinsa saazihay-sakaluk nu misu mahasa tina kakacawan pisaungay cookie.",
        "import-invalid-interwiki": "amana pacumud nay matuzu’ay a Wiki.",
        "import-error-edit": "inayi’ tungus kisu mikawaway-kalumyiti kasabelih \"$1\", la’cus micumud",
        "import-error-create": "inayi’ tungus kisu patizeng kasabelih \"$1\", la’cus micumud.",
        "file-info-size-pages": "$1 × $2 syangsu, hacica ku tabaki nu tangan:$3,MIME kakuniza: $4, $5 {{PLURAL:$5|ku kasabelih}}",
        "file-nohires": "inay ku sangaleb takalaway a katingalaw, kapah tu nipabeli.",
        "svg-long-desc": "SVG tangan, maazihay hacica ku tabaki $1 × $2  syangsu, tangan hacica ku tabaki: $3",
-       "svg-long-desc-animated": "SVG tangan, maazihay hacica ku tabaki $1 × $2 syangsu, tangan hacica ku tabaki: $3",
+       "svg-long-desc-animated": "SVG kulit-iga tangan, maazihay hacica tabaki:$1 × $2 syangsu, tangan pinalu hacica tabaki: $3",
        "svg-long-error": "la’cusay a SVG tangan: $1",
        "show-big-image": "saayaway a tangan",
        "show-big-image-preview": "pataayaway miazih hacica ku tabaki: $1.",
        "saturday-at": "sakaenem a demiad nu lipay i $1",
        "sunday-at": "pilipayan i $1",
        "yesterday-at": "nacila i $1",
+       "bad_image_list": "pikilulen isasa’ay a kese:\n\npiazihan-tu-sulit kasacacay dada’ kapah (ku * angangan). paytusil a sakacacay masasiket kanca ku caay kakapahay a tangan misiket. malecad a tusil ihekal ku sakacacay a misiket, u nikasumaday amin, piazihan-tu-sulit, ku tangan kitizaan a kasabelih.",
        "metadata": "pulita tu kalunasulitan",
        "metadata-help": "uyni tangan labuay amin yamalyilu zuma cesyun, uyni a cesyun akay nay suewyi  sasasing asaca sapisekyin i tapang asaca suwyihwa saayaw katukuh pahzekan a nakawawan mapacunusay. anu nay tangan saayaway setyitase masumadtu, hatizaay pulita kalunasulitan akay la’cus mileku mabetil a misumad tu tangan.",
        "metadata-expand": "paazih pulita kalunasulitan",
        "monthsall": "hamin",
        "confirmemail": "milucekay tu imyiyo(email) puengan",
        "confirmemail_noemail": "caay henay kisu kaw numisu [[Special:Preferences|setin tu kanamuhan]] ilabu’ misetin cacay kapahay a imyiyo(email) puenengan.",
+       "confirmemail_text": "{{SITENAME}} maydih kisu i pisaungay iayaw nu tigami sasahicaan sawantan imyiyo(email) puenengan nu misu.\nsapecec isasa’ay a pipenecan kapah pabahel imyiyo(email) cacay sapilucekay a tigami. kya tigami yamalyilu cacay silsil kodo masasiket;\ni saazihay-sakaluk nu misu pacumud tina masasiket sapilucek imyiyo(email) puenengan nu misu ku kapahay.",
+       "confirmemail_pending": "malucekay-kodo macaliw tu ku imyiyo(email) pabahel tisuwan, amahica kisu patizeng tuway ku canghaw nu misu nasawni, hakay sawsawni kya milayap.\namahica inayi’ malayap, piliyaw sapilunguc ku malucekay-kodo aca.",
        "confirmemail_send": "imyiyo(email) malucekay-kodo",
        "confirmemail_sent": "malucekay mapatigami tuway.",
+       "confirmemail_oncreate": "malucekay-kodo mapabahel katukuh imyiyo(email) puenengan nu misu.\npatalabu saungay cayka maydih pisaungay tina kodo, uyzasa anu izaw ku palana’an sasahicaan a imyiyo(email) miwawah i Wiki maydih pabeli tina kodo iayaw.",
        "confirmemail_sendfailed": "{{SITENAME}} la’cus mapabahel ku numisu malucekay a tigami, kapikinsa tu imyiyo(email) puenengan izaw hakiya ku  la’cusay tatebanan nu nisulitan.\n\npabahelay pacubelis: $1",
        "confirmemail_invalid": "la’cus malucekay-kodo.\nkya kodo hakay mangasiw tuway.",
        "confirmemail_needlogin": "$1 pilucek tu misuay a imyiyo(email) puenengan nu misu.",
        "confirmemail_success": "numisu a imyiyo(email) malucekay tu. kapah kisu ayza [[Special:UserLogin|patalabu]] misaungay tina a calay-kakacawan(wangcan).",
        "confirmemail_loggedin": "malucekay tu misuay imyiyo(email) puengengan.",
        "confirmemail_subject": "{{SITENAME}} imyiyo(email) puenengan malucekay tuway",
+       "confirmemail_body": "caay kapulita a tademaw (hakay kisu i, namakay IP puenengan $1) i {{SITENAME}} canghaw \"$2\" a imyiyo(email) puenengan misetin itini.\n\npiluceki tina canghaw tungusay numisuay,zumasatu pisaungay saazihay-sakaluk miwawah sasa masasiket amiwawah i {{SITENAME}} a imyiyo(email) sasahicaan:\n\n$3\n\namahica kisu *caay* pangangan tina canghaw,\npiwawah sasa masasiket palawpes imyiyo(email) milucek:\n\n$5\n\ntina lucekay-kodo amangasiw i $4.",
+       "confirmemail_body_changed": "caay kapulita a tademaw (hakay kisu i, namakay IP puenengan $1) a i {{SITENAME}} canghaw \"$2\" a imyiyo(email) puenengan misetin itini.\n\npiluceki tina canghaw tungusay numisuay, zumasatu pisaungay saazihay-sakaluk miwawah sasa masasiket amiwawah i {{SITENAME}} a imyiyo(email)  sasahicaan:\n\n$3\n\namahica kisu *caay* pangangan tina canghaw,\npiwawah sasa masasiket palawpes imyiyo(email) milucek:\n\n$5\n\ntina lucekay-kodo amangasiw i $4.",
+       "confirmemail_body_set": "caay kapulita a tademaw (hakay kisu i, namakay IP puenengan $1) a i {{SITENAME}} canghaw \"$2\" a imyiyo(email) puenengan misetin itini.\n\npiluceki tina canghaw tungusay numisuay, zumasatu pisaungay saazihay-sakaluk miwawah sasa masasiket amiwawah i {{SITENAME}} a imyiyo(email) sasahicaan:\n\n$3\n\namahica kisu *caay* pangangan tina canghaw,\npiwawah sasa masasiket palawpes imyiyo(email) milucek:\n\n$5\n\ntina lucekay-kodo amangasiw i $4.",
        "confirmemail_invalidated": "palawpes tu imyiyo(email) puenengan palucekay",
        "invalidateemail": "palawpes imyiyo(email) malucekay tuway",
        "notificationemail_subject_changed": "{{SITENAME}} panganganay a imyiyo(email) puenengan masumad tuway",
+       "notificationemail_body_changed": "namakay IP puenengan $1 a tademaw (hakay kisu i), i {{SITENAME}} misumad ku canghaw $2 a imyiyo(email) puenengan tu \"$3\".\n\namahica caay kisu mihica, pisiketen calay-kakacawan(wangcan) a mikuwanay",
+       "notificationemail_body_removed": "namakay IP puenengan $1 a tademaw (hakay kisu i) , i {{SITENAME}} masipu tu ku canghaw $2 a imyiyo(email) puenengan.\n\namahica caay kisu mihica, pisiketen calay-kakacawan(wangcan) a mikuwanay.",
        "scarytranscludedisabled": "[Interwiki miliyaw kodo caay ka saungayen]",
        "scarytranscludefailed": "[taazihan-mitudung $1 maasip  mungangaw]",
        "scarytranscludefailed-httpstatus": "[taazihan-mitudung $1 maasip mungangaw: HTTP $2]",
        "scarytranscludetoolong": "[URL tada tanayu’]",
        "deletedwhileediting": "<strong> patalaw:</strong>tinakasabelih i kisuwan miteka mikawaway-kalumyiti nazikuzan a masipu!",
+       "confirmrecreate": "naamahiza mikawaway-kalumyiti kisu sa, misaungayay [[User:$1|$1]] ([[User talk:$1|sasukamu]]) masipu tuway tina kasabelih, mahicaay ku:\n: <em>$2</em>\npilucek kisu tatenga’ maydih miliyaw patizeng tina kasabelih.",
        "recreate": "miliyaw miteka patizeng",
        "confirm-purge-title": "misipu tina kasabelih",
        "confirm_purge_button": "malucekay",
        "lag-warn-high": "nanu nasulitan-sulu patukil mautang, tina piazihan tu sulit hakay caayay paazih capi demiad $1 {{PLURAL:$1|widi}}ilabu’ay misumad.",
        "watchlistedit-normal-title": "miazihay a piazihan tu sulit nu mikawaway-kalumyiti",
        "watchlistedit-normal-legend": "nay miazihay a piazihan-tu-sulit misipu satangahan",
+       "watchlistedit-normal-explain": "sasa’ay paazih i miazihay a piazihan-tu-sulit a satangahan nu mmisu.\namisipu satangahan, pipili’ kya satangahan itepalay a mapili’ay atilad zumasatu sapecec \"{{int:Watchlistedit-normal-submit}}\".\nkapah tu kisu [[Special:EditWatchlist/raw|mikawaway-kalumyiti saayaway miazihay a piazihan-tu-sulit]].",
        "watchlistedit-normal-submit": "misipu satangahan",
        "watchlistedit-normal-done": "masipu tuway nay miazihay a piazihan-tu-sulit nu misu {{PLURAL:$1|$1}} satangahan",
        "watchlistedit-raw-title": "mikawaway-kalumyiti saayaway misisip a piazihan-tu-sulit",
+       "watchlistedit-raw-explain": "isasa’ paazih i numisuay a miazihay a piazihan-tu-sulit a satangahan,taneng kisu micaliw ku ikawaway-kalumyiti picunusen atu misipu piazihan-tu-sulit kasacacay, cacay satangahan cacay ku tusil. \npahezek tu ku mikawaway-kalumyiti, pisapecec \"{{int:Watchlistedit-raw-submit}}\".\nkapah tu kisu [[Special:EditWatchlist|pisaungay tatungus sakawaw nu kalumyiti]]",
        "watchlistedit-raw-submit": "misabaluhay misisip tu piazihan-tu-sulit",
        "watchlistedit-raw-done": "misabaluh tuway miazihay a piazihan-tu-sulit nu misu.",
        "watchlistedit-raw-added": "macunus tu {{PLURAL:$1|atangahan}}",
        "version-license-not-found": "caay katepa tina sacunusay a pulita sapabeli tu kinli a cedang cesyun.",
        "version-credits-title": "$1 a kasakumi nu paaninay",
        "version-credits-not-found": "caay katepa tina sacunusay a pulita kasakumi nu misayingaay  cesyun",
+       "version-poweredby-credits": "tina Wiki nay <strong>[https://www.mediawiki.org/ MediaWiki]</strong> patizeng, sizakec ku nisanga’an niza tu tungus a kawaw © 2001-$1 $2.",
        "version-poweredby-others": "zuma",
        "version-poweredby-translators": "translatewiki.net mibelihay",
        "version-credits-summary": "mikukay kami isasa’ay a tadeamw ku [[Special:Version|MediaWiki]] a paanin",
        "fileduplicatesearch-result-n": "tina tangan \"$1\" izaw {{PLURAL:$2|1 malecad misaliyaw|$2 malecad misaliyaw}}.",
        "fileduplicatesearch-noresults": "inayi’ ku kalungangan nu \"$1\" a tangan.",
        "specialpages": "sazumaay a kasabelih",
+       "specialpages-note-restricted": "* habutud sazumaay a kasabelih.\n* <span class=\"mw-specialpagerestricted\"> mapakelecay a sazumaay a kasabelih. </span>",
        "specialpages-group-maintenance": "aazihen a cudad nu midiputay",
        "specialpages-group-other": "sazumaay cidek a kasabelih",
        "specialpages-group-login": "patalabu / panganganen ku canghaw",
        "specialpages-group-developer": "saayaway miteka a misakakawaway sakaluk",
        "blankpage": "salengacay a kasabelih",
        "intentionallyblankpage": "kasabelih padetengan a miliwan.",
+       "external_image_whitelist": "#amana misumad tina tusil a sulit <pre>\n#piisasa’ suliten tatungusay pakatineng a zateng (maydih dada’ // ilaeday a lacul)\n# amakinsa ihekalay masasiketay a zunga matatungus  uyniyay sakacucek tu haw?\n# matatungus sakacucek misiket apaazih nay zunga,anu caay haw paazih masasiket dada’ \n#nay # angangan a tusil apahica ku buhci tu kamu \n#tina sakacucek caay pasawantanen tabakiay saca adidi’ay a sulit\n#pisulit i pabaw tina tusil ku sacahamin tatungusay pakatineng a zateng,amana misumad tina tusil a sulit </pre>",
        "tags": "kapah misumad tu tazihan a paya",
        "tag-filter": "[[Special:Tags|aazihen paya]] kilim:",
        "tag-filter-submit": "kilim",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|aazihen paya’}}]]: $2)",
        "tag-mw-contentmodelchange": "lacul tatudungen misanga’  misumad",
+       "tag-mw-contentmodelchange-description": "mikawaway-kalumyiti  [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel misumad kasabelih a lacul tatudungen misanga’].",
        "tags-title": "aazihen a paya",
        "tags-tag": "aazihen a paya  kalungangan",
        "tags-display-header": "ilabu nu misumad nasulitan-nazipa’an paazih sasakawawen",
        "tags-delete-title": "misipu tu aazihen a paya",
        "tags-delete-explanation-initial": "imahini amisipu kisu tu aazihen-paya \"$1\" nay kalunasulitan-sulu.",
        "tags-delete-explanation-in-use": "aazihen-paya amakay ayzaay imahini pisaungay a {{PLURAL:$2|$2 masumad nu ayaway saca nazipa’annasulitan nazipa’an kasacacay|$2 sumad nu ayaway saca nazipa’an kasacacay}} misipu.",
+       "tags-delete-explanation-warning": "tina saungay ku <strong>la’cus patikuay a</strong> zumasatu <strong>la’cus palawpesay a</strong>, kanahatu ku nasulitan-sulu a mikuwanay la’cus tu. piluceki kisu maydih misipuay a satangahan.",
+       "tags-delete-explanation-active": "<strong>aazihen-paya \"$1\" misaungay henay, la’cus misipu.</strong> anu pahanhan aazihen-paya misaungay, tayza micaedung kya aazihen-paya a kasabelih, zumastau itiza pasatezep kya aazihen-paya.",
        "tags-delete-reason": "mahicaay:",
        "tags-delete-submit": "la’cus palawpes misipu tina aazihen a paya",
        "tags-delete-not-allowed": "la’cus misipu nay sacunus misaheciay a aazihen-paya, anu... kya sacunus mahasa tuway",
        "logentry-delete-revision": "ilabu nu $1 {{GENDER:$2|masumad tuway}} $3 {{PLURAL:$5|1 nazipa’an|$5 nasulitan nazipa’an}} a maazihay:$4",
        "logentry-delete-revision-legacy": "$1 {{GENDER:$2|masumad tuway}} kasabelih $3 masumad nu ayaway a maazihay",
        "logentry-suppress-delete": "$1 {{GENDER:$2|misatezep paazih tuway}} kasabelih $3",
+       "logentry-suppress-event": "$1 {{GENDER:$2|malimekan misumad}} $3 {{PLURAL:$5|1 nazipa’an|$5 nasulitan nazipa’an}} a maazihay: $4",
+       "logentry-suppress-revision": "$1 {{GENDER:$2|malimekan misumad}} kasabelih $3 {{PLURAL:$5|masumad nu ayaway|$5 masumad nu ayaway}} a maazihay:$4",
        "logentry-suppress-event-legacy": "$1 {{GENDER:$2|milimekan misumad}} $3 nasulitan nazipa’an a maazihay",
        "logentry-suppress-revision-legacy": "$1 {{GENDER:$2|masumad tu}} kasabelih $3 labu’ masumad nu ayaway a maazihay",
        "revdelete-content-hid": "madimut tu ku lacul",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|patapabaw tuway}} baluhay baziyong a $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|masayacay tuway}} $3",
        "log-name-managetags": "tazihan-paya kuwan tu nasulitan",
+       "log-description-managetags": "tina kasabelih pasilsil mahizaay [[Special:Tags|aazihen-paya]] a kuwan kawaw kasacacay. i nazipa’an dada’ yamalyilu nay mikuwanay lima-saungay saka saungay; napatizeng nu Wiki zwanti saca masipu a aazihen-paya kasacacay, caay masulit itiniay a nasulitan nazipa’an",
        "logentry-managetags-create": "$1 {{GENDER:$2|mapatizeng yuway}} aazihen-paya \"$4\"",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|masipu tuway}} aazihen-paya \"$4\" (malaheci tu nay $5 {{PLURAL:$5|masumad nu ayaway saca nasulitan nazipa’an}} misipu)",
        "logentry-managetags-activate": "$1 {{GENDER:$2|misaungay tuway}} aazihen-paya \"$4\" pabeli tu misaungayay atu kikay-tademaw pisaungay",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|mapasatezep tuway}} aazihen-paya \"$4\" pabeli misaungayay atu kikay-tademaw pisaungay",
        "log-name-tag": "aazihen a paya nasulitan nazipa’an",
+       "logentry-tag-update-add-revision": "$1 {{GENDER:$2|macunus}} tina {{PLURAL:$7|tazihan-paya}} $6 ta baziyong $4 nu belih $3",
        "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|masipu tuway}} {{PLURAL:$9|aazihen-paya}} $8 nay kasabelih $3  sumad $4.",
        "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|masipu tuway}} {{PLURAL:$9|aazihen-paya}} $8 nay nasulitan nazipa’an kasacacay $3 a sumad $5.",
+       "logentry-tag-update-revision": "$1 {{GENDER:$2|misabaluh tuway}} aazihen-paya i kasabelih $3 a sumad $4 ({{PLURAL:$7|micunus}} $6; {{PLURAL:$9|misipu}} $8).",
+       "logentry-tag-update-logentry": "$1 {{GENDER:$2|misabaluh tuway}} aazihen-paya i kasabelih $3 a nasulitan nazipa’an kasacacay $5 ({{PLURAL:$7|micunus}} $6; {{PLURAL:$9|misipu}} $8)",
        "rightsnone": "(nayi’)",
        "rightslogentry-temporary-group": "$1 (nanunuz, katukuh $2)",
        "feedback-adding": "imahini micunus nabalucu’ hwidubaku tayza kasabelih...",
        "feedback-back": "tatiku",
        "feedback-bugcheck": "kapah! kinsaen nabalucu’an nu misu mapasilsil tu [$1 matinengay a munday] haw?",
        "feedback-bugnew": "makinsa tu kaku. patubeli baluhay a munday",
+       "feedback-bugornote": "amahica kisu amisilut pulita sapuelac cacay sitanengay a munday, pitayza [$1 patubeli tu kawaw].\nsaca kapah kisu pisaungay isasa’ay a dayumay aazihan cudad patubeli tu kawaw, misaungayay a kalungangan nu misu atu buhci tu kamu amacunusen tayza i \"[$3 $2]\" kasabelih.",
        "feedback-cancel": "palawpes",
        "feedback-close": "malahecitu",
        "feedback-external-bug-report-button": "munday nu patubeli",
        "limitreport-expansiondepth": "satakalaw micuwat ilabu",
        "limitreport-expensivefunctioncount": "sayadah-eluc tingalaw-sakaluk hansu kinapina",
        "expandtemplates": "micuwat tu taazihan a mitudung",
+       "expand_templates_intro": "tina sazumaay a kasabelih amicuwat ku sulit taazihan mitudung,kapah yamalyilu dama tingalaw-sakaluk kamu-sakilul, tinaku <code><nowiki>{{</nowiki>#language:…}}</code> atu nikasumad-asip tinaku <code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\ntatenag’ sa, sahetu ilabu’ nu tusa-kwahaw a lacul amicuwat amin.",
        "expand_templates_title": "ulic satangahan, pabeli {{FULLPAGENAME}} atu zuma pisaungay:",
        "expand_templates_input": "suliten:",
        "expand_templates_output": "heci",
        "expand_templates_generate_xml": "paazih XML tingalaw-kilang",
        "expand_templates_generate_rawhtml": "paazih saayaway a HTML",
        "expand_templates_preview": "pataayaway miazih",
+       "expand_templates_preview_fail_html": "<em>zayhan kasasiketan a kalunasulitan mahedaw zumasatu {{SITENAME}} mawawah tu paazih saayaway HTML sasahicaan,saka pataayaw-milangat JavaScript madebung madimut tu pataayaway miazih a lacul.</em>\n\n<strong>amahica kisu ayzaay a pataayaway miazih saungay inayi’ ku zuma a pakayzaan, pitaneng aca.</strong>\namahica la’cus henay, pitanam [[Special:UserLogout| katahkal ]]atu patalabu aca.",
+       "expand_templates_preview_fail_html_anon": "<em>zayhan kisu caay henay patalabu atu {{SITENAME}} mawawah paazih saayaway HTML sasahicaan, apataayaw-milangat JavaScript madebung madimut tu pataayaway miazih lacul.</em>\n\n<strong>amahica kisu ayzaay a pataayaway miazih saungay inayi’ ku zumaay a pakayzaan, zikuz nu [[Special:UserLogin|patalabu]] pitaneng aca.</strong>",
        "expand_templates_input_missing": "maydih kisu pabeli hatizaay a sulit nasulitan nu misu.",
        "pagelanguage": "misumad kasabelih a kamu",
        "pagelang-language": "kamu",
        "authmanager-authn-not-in-progress": "zencen caay henay miteka saca kasasiketan kalunasulitan mahedaw tu, piliyaw miteka aca.",
        "authmanager-authn-no-primary": "nipabeliay a pincen la’cus mizencen.",
        "authmanager-authn-no-local-user": "nipabeliay a pincen inayi’ mahizaay amahicahica i tina wiki a misaungayay.",
+       "authmanager-authn-no-local-user-link": "nipabeli a pincen kapahtu uyzasa inayi’ masasiket amahicahica itini wiki a misaungayay. pisaungay zuma  sasakawawen patalabu, saca patizeng baluhay misaungayay, a izaw kisu ku mapili’ay kapah masasiket nasawniay a pincen nu misu tayza baluhay canghaw.",
        "authmanager-authn-autocreate-failed": "lunuk patizeng itiniay a canghaw mungangaw: $1",
        "authmanager-change-not-supported": "nipabeliay a pincen la’cus misumad, izay la’cus pisaungay henay.",
        "authmanager-create-disabled": "maedeb canghaw lunuk patizeng tuway.",
        "authmanager-provider-password": "Password-based zencen",
        "authmanager-provider-password-domain": "Password- atu domain-based zencen",
        "authmanager-provider-temporarypassword": "nanunuz a mima",
+       "authprovider-confirmlink-message": "kilul patalabu mitanam kinapina nu misu i capi demiad, isasa’ay a canghaw kapah masasiket katukuh wiki canghaw nu misu. masasiket canghaw kapah kisu pisaungay uyniyay canghaw patalabu. pipili’ maydih nu misu cacay masasiketay a canghaw.",
        "authprovider-confirmlink-request-label": "manakanca masasiket tu canghaw",
        "authprovider-confirmlink-success-line": "$1: masasiket tuway",
        "authprovider-confirmlink-failed": "canghaw masasiket caay kahamin malahci: $1",
index 30b05b7..89cd878 100644 (file)
        "nosuchusershort": "لا يوجد مستخدم باسم $1\".\nتأكد من إملاء الاسم.",
        "nouserspecified": "يجب عليك تحديد اسم مستخدم.",
        "login-userblocked": "هذا المستخدم ممنوع. لا يسمح بالولوج.",
-       "wrongpassword": "كلمة السر التي أدخلتها غير صحيحة.\nمن فضلك حاول مرة أخرى.",
+       "wrongpassword": "اسم المستخدم أو كلمة السر التي أدخلتها غير صحيحة.\nمن فضلك حاول مرة أخرى.",
        "wrongpasswordempty": "كلمة السر المدخلة كانت فارغة.\nمن فضلك حاول مرة أخرى.",
        "passwordtooshort": "يجب أن تتكون كلمة السر على الأقل من {{PLURAL:$1|حرف واحد|حرفين|$1 حروف|$1 حرفا|$1 حرف}}.",
        "passwordtoolong": "كلمات السر لا يجب أن تكون أطول من  {{PLURAL:$1|1 حرف|$1 حروف}}.",
index 858fdd9..43e3aa5 100644 (file)
        "nosuchusershort": "Удзельніка зь іменем «$1» не існуе. Праверце напісаньне.",
        "nouserspecified": "Вы мусіце пазначыць імя ўдзельніка.",
        "login-userblocked": "{{GENDER:$1|Гэты ўдзельнік заблякаваны|Гэтая ўдзельніца заблякаваная}}. Уваход у сыстэму забаронены.",
-       "wrongpassword": "Уведзены няслушны пароль. Калі ласка, паспрабуйце яшчэ раз.",
+       "wrongpassword": "Уведзенае няслушнае імя ўдзельніка ці пароль.\nКалі ласка, паспрабуйце яшчэ раз.",
        "wrongpasswordempty": "Быў уведзены пусты пароль. Калі ласка, паспрабуйце яшчэ раз.",
        "passwordtooshort": "Паролі павінны ўтрымліваць ня менш за $1 {{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}.",
        "passwordtoolong": "Паролі ня могуць быць даўжэй за $1 {{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}.",
        "email-blacklist-label": "Забараніць гэтым удзельнікам дасылаць мне лісты электроннай поштай:",
        "prefs-searchoptions": "Пошук",
        "prefs-namespaces": "Прасторы назваў",
-       "default": "па Ð·Ð¼Ð¾Ñ\9eÑ\87ванÑ\8cнÑ\96",
+       "default": "па змоўчаньні",
        "prefs-files": "Файлы",
        "prefs-custom-css": "Індывідуальны CSS",
        "prefs-custom-js": "Індывідуальны JS",
        "uploadstash-bad-path-no-handler": "Ня знойдзены апрацоўнік для mime-тыпу $1 файлу $2.",
        "uploadstash-bad-path-bad-format": "Ключ «$1» мае няслушны фармат.",
        "uploadstash-file-not-found": "Ключ «$1» ня знойдзены ў схованцы.",
+       "uploadstash-file-not-found-no-thumb": "Не атрымалася здабыць мініятуру.",
+       "uploadstash-file-not-found-no-local-path": "Няма лякальнага шляху да маштабаванага элемэнту.",
+       "uploadstash-file-not-found-no-object": "Не атрымалася стварыць лякальны аб’ект файлу для мініятуры.",
+       "uploadstash-file-not-found-no-remote-thumb": "Памылка атрыманьня мініятуры: $1\nURL = $2",
+       "uploadstash-file-not-found-missing-content-type": "Адсутнічае загаловак тыпу зьместу.",
        "invalid-chunk-offset": "Няслушнае зрушэньне фрагмэнту",
        "img-auth-accessdenied": "Доступ забаронены",
        "img-auth-nopathinfo": "Адсутнічае PATH_INFO.\nВаш сэрвэр не ўстаноўлены на пропуск гэтай інфармацыі.\nМагчма, ён працуе праз CGI і не падтрымлівае img_auth.\nГлядзіце https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
index 9aa09c7..03c7ece 100644 (file)
        "nosuchusershort": "\"$1\" নামের কোন ব্যবহারকারী নেই। নামের বানান পরীক্ষা করুন।",
        "nouserspecified": "আপনাকে অবশ্যই ব্যবহারকারী নাম নির্দিষ্ট করতে হবে।",
        "login-userblocked": "এই ব্যবহারকারীকে বাধা দেওয়া হয়েছে। প্রবেশ সম্ভব নয়।",
-       "wrongpassword": "à¦\86পনি à¦­à§\81ল à¦¬à§\8dযবহারà¦\95ারà§\80 à¦¨à¦¾à¦® à¦¬à¦¾ à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦¬à§\8dযবহার à¦\95রà§\87à¦\9bà§\87ন। অনুগ্রহ করে আবার চেষ্টা করুন।",
+       "wrongpassword": "পà§\8dরদতà§\8dত à¦¬à§\8dযবহারà¦\95ারà§\80র à¦¨à¦¾à¦® à¦¬à¦¾ à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦­à§\81ল। অনুগ্রহ করে আবার চেষ্টা করুন।",
        "wrongpasswordempty": "পাসওয়ার্ড প্রবেশের ঘরটি খালি ছিল। দয়া করে আবার চেষ্টা করুন।",
        "passwordtooshort": "পাসওয়ার্ড কমপক্ষে {{PLURAL:$1|১ অক্ষরের|$1 অক্ষরের}} হতে হবে।",
        "passwordtoolong": "পাসওয়ার্ড {{PLURAL:$1|১|$1}} অক্ষরের চেয়ে দীর্ঘ হতে পারবে না।",
index 80ecf13..ffa4bc0 100644 (file)
        "nosuchusershort": "No hi ha cap usuari anomenat «$1». Comproveu que ho hàgiu escrit correctament.",
        "nouserspecified": "Heu d'especificar un nom d'usuari.",
        "login-userblocked": "Aquest usuari està blocat. Inici de sessió no permès.",
-       "wrongpassword": "La contrasenya que heu introduït és incorrecta. Torneu-ho a provar.",
+       "wrongpassword": "El nom d'usuari o la contrasenya que heu introduït són incorrectes. Torneu-ho a provar.",
        "wrongpasswordempty": "La contrasenya que s'ha introduït estava en blanc. Torneu-ho a provar.",
        "passwordtooshort": "La contrasenya ha de tenir un mínim {{PLURAL:$1|d'un caràcter|de $1 caràcters}}.",
        "passwordtoolong": "La contrasenya ha de tenir un màxim {{PLURAL:$1|d'un caràcter|de $1 caràcters}}.",
        "prefs-editor": "Edició",
        "prefs-preview": "Previsualització",
        "prefs-advancedrc": "Opcions avançades",
+       "prefs-opt-out": "Renuncia a les millores",
        "prefs-advancedrendering": "Opcions avançades",
        "prefs-advancedsearchoptions": "Opcions avançades",
        "prefs-advancedwatchlist": "Opcions avançades",
        "rcfilters-grouping-title": "Agrupació",
        "rcfilters-activefilters": "Filtres actius",
        "rcfilters-advancedfilters": "Filtres avançats",
+       "rcfilters-limit-title": "Canvis a mostrar",
        "rcfilters-limit-shownum": "Mostra {{PLURAL:$1|el darrer canvi| els darrers $1 canvis}}",
        "rcfilters-days-title": "Darrers dies",
        "rcfilters-hours-title": "Hores recents",
        "rcfilters-restore-default-filters": "Restaura els filtres per defecte",
        "rcfilters-clear-all-filters": "Esborra tots els filtres",
        "rcfilters-show-new-changes": "Mostra els nous canvis",
-       "rcfilters-search-placeholder": "Filtra els canvis recents (navegueu o comenceu a escriure)",
+       "rcfilters-search-placeholder": "Filtra els canvis recents (utilitzeu el menú o cerqueu el nom del filtre)",
        "rcfilters-invalid-filter": "Filtre no vàlid",
        "rcfilters-empty-filter": "No hi ha cap filtre actiu. Es mostren totes les contribucions.",
        "rcfilters-filterlist-title": "Filtres",
        "rcfilters-filter-logactions-description": "Accions administratives, creacions de comptes, eliminacions de pàgines, càrregues…",
        "rcfilters-filtergroup-lastRevision": "Darreres revisions",
        "rcfilters-filter-lastrevision-label": "Darrera revisió",
-       "rcfilters-filter-lastrevision-description": "El canvi més recent a una pàgina.",
+       "rcfilters-filter-lastrevision-description": "Només el canvi més recent a una pàgina.",
        "rcfilters-filter-previousrevision-label": "No la darrera revisió",
        "rcfilters-filter-previousrevision-description": "Tots els canvis que no són «la darrera revisió».",
        "rcfilters-filter-excluded": "Exclòs",
        "uploaded-script-svg": "S’ha trobat l’element programable «$1» al fitxer SVG carregat.",
        "uploaded-hostile-svg": "S’ha trobat codi CSS no segur a l’element d’estil del fitxer SVG carregat.",
        "uploaded-event-handler-on-svg": "No es permet establir els atributs de gestió d’esdeveniments <code>$1=\"$2\"</code> en fitxers SVG.",
-       "uploaded-href-attribute-svg": "Els atributs href en fitxers SVG només tenen permès enllaçar a destinacions http:// o https://, s'ha trobat <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-attribute-svg": "Els elements <a> només poden enllaçar (href) amb objectius «data:» (fitxer incrustat), «http://», «https://» o de fragment («#», «same-document»). Proveu d'incrustar les imatges en exportar el vostre SVG. S'ha trobat <code>&lt;$1 $2=\"$3\"&gt;</code>.",
        "uploaded-href-unsafe-target-svg": "S’ha trobat un element «href» amb dades no segures: destinació URI <code>&lt;$1 $2=\"$3\"&gt;</code> en el fitxer SVG carregat.",
        "uploaded-animate-svg": "S'ha trobat l'etiqueta «animate» que pot estar canviant l'href mitjançant l'atribut <code>&lt;$1 $2=\"$3\"&gt;</code> en el fitxer SVG carregat.",
        "uploaded-setting-event-handler-svg": "La configuració d'atributs per la gestió d'esdeveniments està bloquejada. S'ha trobat <code>&lt;$1 $2=\"$3\"&gt;</code> al fitxer SVG pujat.",
        "delete_and_move_text": "La pàgina de destinació, «[[:$1]]», ja existeix.\nVoleu eliminar-la per a fer lloc al trasllat?",
        "delete_and_move_confirm": "Sí, esborra la pàgina",
        "delete_and_move_reason": "S'ha eliminat per a permetre el reanomenament de \" [[$1]] \"",
-       "selfmove": "Els títols d'origen i de destinació coincideixen: no és possible de reanomenar una pàgina a si mateixa.",
+       "selfmove": "El títol és el mateix;\nno es pot reanomenar una pàgina a si mateixa.",
        "immobile-source-namespace": "No es poden moure les pàgines de l’espai de noms «$1»",
        "immobile-target-namespace": "No es poden moure pàgines cap a l'espai de noms \"$1\"",
        "immobile-target-namespace-iw": "No es poden moure pàgines a l'enllaç interwiki",
        "import-nonewrevisions": "No s'ha importat cap revisió (ja hi eren abans o s'han omès a causa d'errors).",
        "xml-error-string": "$1 a la línia $2, columna $3 (byte $4): $5",
        "import-upload": "Carrega dades XML",
-       "import-token-mismatch": "Pèrdua de dades de sessió.\n\nPotser heu finalitzat la sessió. <strong>Comproveu si encara teniu la sessió iniciada i torneu-ho a intentar</strong>.\nSi encara no funciona, proveu de [[Special:UserLogout|finalitzar la sessió]] i inicieu-la de nou, comprovant que el vostre navegador permeti les galetes per a aquest lloc.",
+       "import-token-mismatch": "Pèrdua de dades de sessió.\n\nPotser heu finalitzat la sessió. <strong>Comproveu si encara teniu la sessió iniciada i torneu-ho a intentar</strong>.\nSi encara no funciona, proveu de [[Special:UserLogout|finalitzar la sessió]] i iniciar-la de nou, comprovant que el vostre navegador permeti les galetes per a aquest lloc.",
        "import-invalid-interwiki": "No es pot importar des del wiki especificat.",
        "import-error-edit": "La pàgina «$1» no s'ha importat perquè no teniu permís per modificar-la.",
        "import-error-create": "La pàgina «$1» no s'ha importat perquè no teniu permís per crear-la.",
index 4a1f7a7..2ab3b83 100644 (file)
        "thursday": "拜四",
        "friday": "拜五",
        "saturday": "拜六",
-       "sun": "禮拜",
-       "mon": "拜一",
-       "tue": "拜二",
-       "wed": "拜三",
-       "thu": "拜四",
-       "fri": "拜五",
-       "sat": "拜六",
+       "sun": "Lā̤ buái",
+       "mon": "Buái ék",
+       "tue": "Bái-nê",
+       "wed": "Buái săng",
+       "thu": "Buái sé",
+       "fri": "Buái ngô",
+       "sat": "Buái lĕ̤k",
        "january": "Ék-nguŏk",
        "february": "Nê-nguŏk",
        "march": "Săng-nguŏk",
        "cancel": "取消",
        "moredotdotdot": "固価...",
        "morenotlisted": "茲萆單單𣍐完整",
-       "mypage": "頁面",
+       "mypage": "Nguāi gì hiĕk-miêng",
        "mytalk": "我其討論",
        "anontalk": "攀講",
        "navigation": "Dô̤-hòng",
        "editsection": "siŭ-gāi",
        "editold": "修改",
        "viewsourceold": "看源代碼",
-       "editlink": "修改",
-       "viewsourcelink": "看源代碼",
+       "editlink": "siŭ-gāi",
+       "viewsourcelink": "Káng nguòng-dâi-mā",
        "editsectionhint": "修改段落:$1",
        "toc": "目錄",
        "showtoc": "顯示",
        "red-link-title": "$1(mò̤ ciā hiĕk)",
        "sort-descending": "降序排序",
        "sort-ascending": "陞序排序",
-       "nstab-main": "頁面",
+       "nstab-main": "Ùng-ciŏng",
        "nstab-user": "用戶頁",
        "nstab-media": "媒體頁",
-       "nstab-special": "特殊頁",
+       "nstab-special": "Dĕk-sṳ̀-hiĕk",
        "nstab-project": "項目頁",
        "nstab-image": "文件",
        "nstab-mediawiki": "消息",
index 1b27617..09e47ff 100644 (file)
        "rcfilters-filter-watchlist-watched-description": "Хьан тергаме могӀамехь болу хийцамаш.",
        "rcfilters-filter-watchlist-watchednew-label": "Тергаме могӀаман керла хийцамаш",
        "rcfilters-filter-watchlist-watchednew-description": "Хьан тергаме могӀаман юкъара хьуна гина боцу хийцамаш.",
-       "rcfilters-filter-watchlist-notwatched-label": "ТеÑ\80гаме Ð¼Ð¾Ð³Ó\80аман Ñ\8eкÑ\8aахь яц",
-       "rcfilters-filter-watchlist-notwatched-description": "Ð\95Ñ\80Ñ\80иге, Ñ\85Ñ\8cан Ñ\82еÑ\80гаме Ð¼Ð¾Ð³Ó\80аман Ñ\8eкÑ\8aаÑ\85Ñ\8c ÐµÑ\80Ñ\88 Ñ\86а Ð³Ð¾Ð¹Ñ\82Ñ\83.",
+       "rcfilters-filter-watchlist-notwatched-label": "ТеÑ\80гаме Ð¼Ð¾Ð³Ó\80амехь яц",
+       "rcfilters-filter-watchlist-notwatched-description": "Ð\95Ñ\80Ñ\80иге, Ñ\85Ñ\8cан Ñ\82еÑ\80гаме Ð¼Ð¾Ð³Ó\80амеÑ\85Ñ\8c ÐµÑ\80Ñ\88 Ñ\8eкÑ\8aаÑ\80айоÑ\85Ñ\83Ñ\88.",
        "rcfilters-filtergroup-changetype": "Хийцамийн тайпа",
        "rcfilters-filter-pageedits-label": "АгӀонан нисдарш",
        "rcfilters-filter-pageedits-description": "Дийцарийн а, категорийн а чулацаман дина нисдарш...",
        "undelete": "ДӀаяьхна агӀонашка хьажар",
        "undeletepage": "ДӀаяьхна агӀонашка хьажар а, меттахӀоттор а",
        "undeletepagetitle": "'''Лахахь гайтина хӀокху [[:$1]] агӀона дӀаяхина версеш'''.",
-       "viewdeletedpage": "Ð\94Ó\80аÑ\8fÑ\8cÑ\85на Ð¹Ð¾Ð»Ñ\83 Ð°Ð³Ó\80онаÑ\88ка Ñ\85Ñ\8cажаÑ\80",
+       "viewdeletedpage": "ДӀаяьхна агӀонашка хьажар",
        "undelete-fieldset-title": "МеттахӀоттае версеш",
        "undeleteextrahelp": "Ерриге агӀонан истори меттахӀоттая массо а билгалонаш еса а йити '''«{{int:undeletebtn}}»''' тӀетаӀае.\nЦхӀайолу агӀонан версеш меттахӀоттая хьалха меттахӀоттош йолу версеш билгалъяьхна тӀетагӀе '''«{{int:undeletebtn}}»'''.",
        "undeleterevisions": "$1 {{PLURAL:$1|верси}} архив чу {{PLURAL:$1|йиллина}}",
        "pageinfo-robot-index": "Магийна",
        "pageinfo-robot-noindex": "Магийна дац",
        "pageinfo-watchers": "Хьоьжучера дукхалла",
+       "pageinfo-visiting-watchers": "АгӀона тидамбеш болу а, хийцамаш гуш болу а декъашхой",
        "pageinfo-few-watchers": "{{PLURAL:$1|ТӀаьхьадогӀучерал}} $1 кӀезиг",
        "pageinfo-redirects-name": "ХӀокху агӀон тӀе йолу дӀассахьажорийн дукхалла",
        "pageinfo-subpages-name": "ХӀокху агӀона бухара агӀонаш",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|цӀе хийцар|цӀе хийцарш}}; $3 {{PLURAL:$3|гуттар хуьлург|гуттар хуьлурш}})",
-       "pageinfo-firstuser": "АгӀо кхуллург",
+       "pageinfo-firstuser": "АгӀо кхоьллинарг",
        "pageinfo-firsttime": "АгӀо кхоьллина терахь",
        "pageinfo-lastuser": "ТӀеххьара тадар дийнарг",
        "pageinfo-lasttime": "ТӀеххьара нисдар дина терахь",
        "compare-invalid-title": "Ахьа язйина йолу цӀе ца магайо.",
        "compare-title-not-exists": "Иштта цӀе яц.",
        "compare-revision-not-exists": "Иштта версеш яц.",
+       "diff-form": "Башхаллаш",
+       "diff-form-oldid": "Версин шира идентификатор (тӀехь дац)",
+       "diff-form-revid": "Башхаллаш йолу версин идентификатор",
+       "diff-form-submit": "Схьагайта башхаллаш",
        "dberr-problems": "Бехк ма бил! ХӀокху сайтехь техникан халонаш хила.",
        "dberr-again": "Хьажа карла йаккха агlо массех минот йаьлча.",
        "dberr-info": "(аьтто ца хили зӀе хӀотта серверца бухара хаамашца: $1)",
index 86e60ab..55bd308 100644 (file)
@@ -19,7 +19,8 @@
                        "Pirehelokan",
                        "Diyariq",
                        "Sarchia",
-                       "Lost Whispers"
+                       "Lost Whispers",
+                       "Épine"
                ]
        },
        "tog-underline": "ھێڵ ھێنان بەژێر بەستەرەکان:",
        "nosuchusershort": "بەکارھێنەرێک بە ناوی «$1»ەوە نیە.\nبە نووسراوەکەتدا بچۆرەوە.",
        "nouserspecified": "دەبێت ناوێکی بەکارھێنەری دەستنیشان بکەیت.",
        "login-userblocked": "ئەم بەکارهێنەرە بڵۆک کراوە. چوونەژوورەوە ڕێگەپێنەدراوە.",
-       "wrongpassword": "تێپەڕوشەی ھەڵە.\nتکایە دووبارە تێبکۆشە.",
+       "wrongpassword": "ناوی بەکارھێنەر یان تێپەڕوشە ھەڵەیە.\nتکایە دووبارە ھەوڵبدەرەوە.",
        "wrongpasswordempty": "تێپەڕەوشەی لێدراو بەتاڵبوو.\nتکایە هەوڵ بدەوە.",
        "passwordtooshort": "تێپەڕوشەکەت لانی کەم دەبێ {{PLURAL:$1|١ پیت|$1 پیت}} بێت.",
        "passwordtoolong": "تێپەڕ وشەکان ناتوانرێت لە {{PLURAL:$1|١ کارەکتەر|$1 کارەکتەر}} درێژتر بێت.",
index fdcb972..60a53c0 100644 (file)
        "minutes-abbrev": "$1дакъ.",
        "hours-abbrev": "$1саат",
        "bad_image_list": "Формат бойле олмалы:\n\nЭр сатыр * ишаретинен башламалы. Сатырнынъ биринджи багълантысы къошмагъа ясакълангъан файлгъа багъланмалы.\nШу сатырда илеридеки багълантылар истисна олурлар, яни шу саифелерде ишбу файл къулланмакъ мумкюн.",
+       "variantname-crh": "Lat./Кир.",
+       "variantname-crh-latn": "Latin",
+       "variantname-crh-cyrl": "Кирил",
        "metadata": "Ресим деталлери",
        "metadata-help": "Файлда (адетиндже ракъамлы камера ве сканерлернен къошулгъан) иляве малюматы бар. Эгер бу файл яратылгъандан сонъ денъиштирильсе эди, бельки де базы параметрлер эскирди.",
        "metadata-expand": "Тафсилятны косьтер",
index 75d187f..6e04de3 100644 (file)
        "minutes-abbrev": "$1daq.",
        "hours-abbrev": "$1saat",
        "bad_image_list": "Format böyle olmalı:\n\nEr satır * işaretinen başlamalı. Satırnıñ birinci bağlantısı qoşmağa yasaqlanğan faylğa bağlanmalı.\nŞu satırda ilerideki bağlantılar istisna olur, yani şu saifelerde işbu fayl qullanmaq mümkün.",
+       "variantname-crh": "Lat./Кир.",
+       "variantname-crh-latn": "Latin",
+       "variantname-crh-cyrl": "Кирил",
        "metadata": "Resim detalleri",
        "metadata-help": "Faylda (adetince raqamlı kamera ve skanerlernen qoşulğan) ilâve malümatı bar. Eger bu fayl yaratılğandan soñ deñiştirilse edi, belki de bazı parametrler eskirdi.",
        "metadata-expand": "Tafsilâtnı köster",
index 8b9746e..c682fc9 100644 (file)
        "nosuchusershort": "Neexistuje uživatel se jménem „$1“. Zkontrolujte zápis.",
        "nouserspecified": "Musíte zadat uživatelské jméno.",
        "login-userblocked": "{{GENDER:$1|Tento uživatel je zablokován|Tato uživatelka je zablokována}}. Přihlášení není dovoleno.",
-       "wrongpassword": "Bylo zadáno nesprávné heslo.\nZkuste to znovu.",
+       "wrongpassword": "Bylo zadáno nesprávné uživatelské jméno nebo heslo.\nZkuste to znovu.",
        "wrongpasswordempty": "Bylo zadáno prázdné heslo. Zkuste to znovu.",
        "passwordtooshort": "Heslo musí být dlouhé nejméně $1 {{PLURAL:$1|znak|znaky|znaků}}.",
        "passwordtoolong": "Hesla nemohou být delší než {{PLURAL:$1|1 znak|$1 znaky|$1 znaků}}.",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Vytvořit výchozí filtr",
        "rcfilters-savedqueries-cancel-label": "Zrušit",
        "rcfilters-savedqueries-add-new-title": "Uložit současné nastavení filtrů",
-       "rcfilters-savedqueries-already-saved": "Tyto filtry jsou již uloženy.",
+       "rcfilters-savedqueries-already-saved": "Tyto filtry jsou již uloženy. K uložení nového je třeba změnit jejich nastavení.",
        "rcfilters-restore-default-filters": "Obnovit výchozí filtry",
        "rcfilters-clear-all-filters": "Zrušit všechny filtry",
        "rcfilters-show-new-changes": "Zobrazit nejnovější změny",
        "show": "ukázat",
        "minoreditletter": "m",
        "newpageletter": "N",
-       "boteditletter": "b",
+       "boteditletter": "r",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|sledující uživatel|sledující uživatelé|sledujících uživatelů}}]",
        "rc_categories": "Omezit na kategorie (oddělené „|“):",
        "rc_categories_any": "Jakákoli z vybraných",
index 9904542..fdf55ca 100644 (file)
        "diff-multi-sameuser": "({{PLURAL:$1|Eine dazwischenliegende Version desselben Benutzers wird|$1 dazwischenliegende Versionen desselben Benutzers werden}} nicht angezeigt)",
        "diff-multi-otherusers": "({{PLURAL:$1|Eine dazwischenliegende Version|$1 dazwischenliegende Versionen}} von {{PLURAL:$2|einem anderen Benutzer|$2 Benutzern}} {{PLURAL:$1|wird|werden}} nicht angezeigt)",
        "diff-multi-manyusers": "({{PLURAL:$1|$1 dazwischenliegende Versionen}} von mehr als {{PLURAL:$2|$2 Benutzern}}, die nicht angezeigt werden)",
+       "diff-paragraph-moved-tonew": "Der Absatz wurde verschoben. Klicken, um zur neuen Stelle zu springen.",
+       "diff-paragraph-moved-toold": "Der Absatz wurde verschoben. Klicken, um zur alten Stelle zu springen.",
        "difference-missing-revision": "{{PLURAL:$2|Eine Version|$2 Versionen}} dieser Unterschiedsanzeige ($1) {{PLURAL:$2|wurde|wurden}} nicht gefunden.\n\nDieser Fehler wird normalerweise von einem veralteten Link zur Versionsgeschichte einer Seite verursacht, die zwischenzeitlich gelöscht wurde.\nEinzelheiten sind im [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Lösch-Logbuch] vorhanden.",
        "searchresults": "Suchergebnisse",
        "searchresults-title": "Suchergebnisse für „$1“",
        "movesubpagetalktext": "Die dazugehörige Diskussionsseite hat {{PLURAL:$1|eine Unterseite, die unten angezeigt wird|$1 Unterseiten, die unten angezeigt werden}}.",
        "movenosubpage": "Diese Seite hat keine Unterseiten.",
        "movereason": "Grund:",
-       "revertmove": "zurück verschieben",
+       "revertmove": "zurückverschieben",
        "delete_and_move_text": "Die Seite „[[:$1]]“ existiert bereits.\nMöchtest du diese löschen, um die Seite verschieben zu können?",
        "delete_and_move_confirm": "Ja, Seite löschen",
        "delete_and_move_reason": "Gelöscht, um Platz für die Verschiebung von „[[$1]]“ zu machen",
index 341c800..14bf37f 100644 (file)
        "categoryviewer-pagedlinks": "($1) ($2)",
        "about": "Heqa",
        "article": "Wesiqe",
-       "newwindow": "(Teqaya newi de abena)",
+       "newwindow": "(pençerey newey de beno a)",
        "cancel": "Annuler",
        "moredotdotdot": "Vêşi...",
        "morenotlisted": "Na lista qay kemi ya.",
        "currentevents-url": "Project:Hediseyê rocaney",
        "disclaimers": "Redê mesuliyeti",
        "disclaimerpage": "Project:Redê mesulêtê pêro",
-       "edithelp": "Pastiyer vurnayış",
+       "edithelp": "Peştdariya vurnayışi",
        "helppage-top-gethelp": "Peşti",
        "mainpage": "Perra Seri",
        "mainpage-description": "Perra seri",
        "viewsourcelink": "çımey bıvêne",
        "editsectionhint": "Leteyo ke bıvuriyo: $1",
        "toc": "Zerreki",
-       "showtoc": "bımotne",
+       "showtoc": "bımocne",
        "hidetoc": "bınımne",
        "collapsible-collapse": "Teng kı",
        "collapsible-expand": "Hera ke",
        "publishchanges": "Vırnayışan qeyd ke",
        "preview": "Verqayt",
        "showpreview": "Verasayışi bımocne",
-       "showdiff": "Vurnayışan bımotne",
+       "showdiff": "Vurnayışan bımocne",
        "anoneditwarning": "<strong>İqaz:</strong> Şıma be hesabê xo nêkewtê cı. \nAdresê şımayê IP tarixê vırnayışê na pele de do qeyd bo. Eke şıma <strong>[$1 cıkewê]</strong> ya zi <strong>[$2 hesab vırazê]</strong>, vurnayışê şıma be zewbina kare ra nameyê şıma rê bar beno.",
        "anonpreviewwarning": "\"Şıma be hesabê xo nêkewtê cı. Eke qeyd kerê, adresê şımaê IP tarixê vırnayışê na pele de do qeyd bo.\"",
        "missingsummary": "'''DİQET:''' Şıma jû xulasa nênuşte.\nEke şıma \"$1\" reyna bıtıknê, vırnayışê şıma bê xulasa qeyd beno.",
        "rev-deleted-diff-view": "Jew timarkerdışê ena versiyon '''wedariyayo''.\nÎdarekarî şenê ena versiyon bivîne; belki tiya de [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} wedarnayişî] de teferruat esto.",
        "rev-suppressed-diff-view": "Jew timarkerdışê ena versiyon '''Ploxneyış'' biyo.\nÎdarekarî eşkeno ena dif bivîne; belki tiya de [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ploxnayış] de teferruat esto.",
        "rev-delundel": "bımotne/bınımne",
-       "rev-showdeleted": "bımotne",
+       "rev-showdeleted": "bımocne",
        "revisiondelete": "Çımraviyarnayışan bestere/peyser biya",
        "revdelete-nooldid-title": "Çımraviyarnayışo waşte nêvêreno",
        "revdelete-nooldid-text": "Şıma vıraştışê nê fonksiyoni rê ya yew çımraviyarnayışo waşte diyar nêkerdo, çımraviyarnayışo diyarkerde çıniyo, ya ki şıma wazenê ke çımraviyarnayışê nıkayêni bınımnê.",
        "recentchanges-legend-heading": "<strong>Kıtabekê vırnayışê peyêni:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} Şıma şenê ([[Special:NewPages|Lista peranê  newan]] zi bıvênê)",
        "recentchanges-legend-plusminus": "''(±123)''",
-       "recentchanges-submit": "Bımotne",
+       "recentchanges-submit": "Bımocne",
        "rcfilters-savedqueries-new-name-label": "Name",
        "rcfilters-savedqueries-cancel-label": "Bıtexelne",
        "rcnotefrom": "Cêr de <strong>$2</strong> ra nata {{PLURAL:$5|vurnayışiyê}} asenê (tewr vêşi <strong>$1</strong> asenê) <strong>$3, $4</strong>",
        "rcshowhidebots-show": "Bımotne",
        "rcshowhidebots-hide": "Bınımne",
        "rcshowhideliu": "karberê qeydbiyay $1",
-       "rcshowhideliu-show": "Bımotne",
+       "rcshowhideliu-show": "Bımocne",
        "rcshowhideliu-hide": "Bınımne",
        "rcshowhideanons": "$1 karberê bênamey",
        "rcshowhideanons-show": "Bımotne",
        "rcshowhideanons-hide": "Bınımne",
        "rcshowhidepatr": "$1 vurnayışê ke dewriya geyrayê",
-       "rcshowhidepatr-show": "Bımotne",
+       "rcshowhidepatr-show": "Bımocne",
        "rcshowhidepatr-hide": "Bınımne",
        "rcshowhidemine": "vırnayışê mı $1",
        "rcshowhidemine-show": "Bımotne",
        "mostrevisions": "Pelan ke tewr zaf revizyonî biyê.",
        "prefixindex": "Verbenda pelli heme",
        "prefixindex-namespace": "Peleyê Veroleyıni ($1 cay nami)",
-       "prefixindex-submit": "Bımotne",
+       "prefixindex-submit": "Bımocne",
        "prefixindex-strip": "Listeya réz bıyayışi",
        "shortpages": "Pelê kılmi",
        "longpages": "Pelê dergi",
        "cachedspecial-viewing-cached-ts": "Na pela raşt niya, şımayê enewke versiyonê verhafızada na pela vinenê.",
        "cachedspecial-refresh-now": "Peyêni bıvin.",
        "categories": "Kategoriy",
-       "categories-submit": "bımotne",
+       "categories-submit": "Bımocne",
        "categoriespagetext": "{{PLURAL:$1|Kategoriya cêrene|Kategoriyanê cêrênan}} de peli ya zi medya estê.\n[[Special:UnusedCategories|Kategoriyê ke nêxebetiyenê]] tiya de nêmocniyayê.\n[[Special:WantedCategories|Kategoriyanê waşteyeyan]] de zi bıvêne.",
        "categoriesfrom": "Kategoriyê ke ney ra sergendênê bımotne:",
        "deletedcontributions": "İştırakê karberi esterdi",
index 5fc6cc6..52595ad 100644 (file)
@@ -37,7 +37,7 @@
        "tog-shownumberswatching": "Fà vèder al nómer ed j utèint che gh'àn la pàgina sòta uservasiòun",
        "tog-oldsig": "La tó fîrma 'd adèsa",
        "tog-fancysig": "Trâta la fîrma cme wikitèst (sèinsa colegamèint avtomâtich)",
-       "tog-uselivepreview": "Permèt la funsiòun \"Live preview\" (guêrda préma 'd salvêr in dirèta)",
+       "tog-uselivepreview": "Fa vèder al pàgini sèinsa carghêri",
        "tog-forceeditsummary": "Dmânda s'l'è vèira che al câmp argumèint l' é vōd",
        "tog-watchlisthideown": "Lōga al mé mudéfichi int i  tgnû 'd ôc specêl",
        "tog-watchlisthidebots": "Lōga al mudéfichi di bot int i tgnû 'd ôc specêl",
@@ -55,7 +55,6 @@
        "underline-never": "Mài",
        "underline-default": "Mantî al j impustasiòun dal navigadōr o 'd la skin",
        "editfont-style": "Stîl dal carâter int la caşèla 'd mudéfica:",
-       "editfont-default": "Pre-stabilî dal navigadōr",
        "editfont-monospace": "Carâter a larghésa fésa",
        "editfont-sansserif": "Carâter sans-serif",
        "editfont-serif": "Carâter serif",
        "anontalk": "Discusiòun",
        "navigation": "Navigasiòun",
        "and": "&#32;e",
-       "qbfind": "Câta",
-       "qbbrowse": "Sfòja",
-       "qbedit": "Mudéfica",
-       "qbpageoptions": "Siēlti 'd la pàgina",
-       "qbmyoptions": "Al mē pàgini",
        "faq": "Dmândi fâti",
-       "faqpage": "Project:Dmândi fâti despès",
        "actions": "Asiòun",
        "namespaces": "Spâsi di nòm",
        "variants": "Mudéfichi",
        "edit-local": "Mudéfica la spiegasiòun lochêla",
        "create": "Invèinta",
        "create-local": "Zûnta spiegasiòun lochêla",
-       "editthispage": "Mudéfica cla pàgina ché",
-       "create-this-page": "Fà cla pàgina ché",
        "delete": "Scanşéla",
-       "deletethispage": "Scanşéla cla pàgina ché",
-       "undeletethispage": "Fà 'l recóper ed cla pàgina ché",
        "undelete_short": "Recóper ed {{PLURAL:$1|'na versiòun|$1 versiòun}}",
        "viewdeleted_short": "Guèrda {{PLURAL:$1|'na mudéficha scanşlêda|$1 mudéfichi scanşlêdi}}",
        "protect": "Prutēz",
        "protect_change": "Câmbia",
-       "protectthispage": "Prutēz cla pàgina ché",
        "unprotect": "Câmbia la prutesiòun",
-       "unprotectthispage": "Câmbia la prutesiòun per cla pàgina ché",
        "newpage": "Pàgina nōva",
-       "talkpage": "Pàgina 'd discusiòun",
        "talkpagelinktext": "Discusiòun",
        "specialpage": "Pàgina specêla",
        "personaltools": "Strumèint persunêl",
-       "articlepage": "Guêrda la pàgina",
        "talk": "Discusiòun",
        "views": "Vîşiti",
        "toolbox": "Strumèint",
-       "userpage": "Guêrda la pàgina utèint",
-       "projectpage": "Guêrda la pàgina dal prugèt",
        "imagepage": "Guêrda la pàgina dal file",
        "mediawikipage": "Guêrda al mesâg",
        "templatepage": "Guêrda 'l mudèl",
        "explainconflict": "Un êter utèint l'à salvê 'na nōva versiòun ed la pàgina mèinter t'ēr adrē fêr dal mudéfichi. Int la caşèla 'd mudéfica ché 'd sōver a gh'é al tèst ed la pàgina che adès l'é in lénia, acsé cme l'é stêda salvêda da cl'êter utèint. La versiòun cun al tō mudéfichi invēci l'é int la caşèla dal mudéfichi ché sòta. S' ét vō cunfermêri, ét dēv purtêr al tō mudéfichi int al tèst che gh'é bèle (caşèla ché 'd sōver). Se té schés al ptòun '$1', a gnirà salvê '''sōl''' al tèst dèinter a la caşèla 'd mudéfica ché 'd sōver.",
        "yourtext": "Al tó tèst",
        "storedversion": "La versiòun in memôria",
-       "nonunicodebrowser": "'''Atèinti: a s'é drē druvêr un navigadōr ch' al và mìa d' acôrdi cun i carâter ''Unicode''. Per permèter la mudéfica dal pàgini sèinsa fêr d' incunveniĵnt, int la caşèla ed mudéfica i carâter mia ASCII a vînen fât vèder cme côdis eşadecimêl.'''",
        "editingold": "<strong>Atèinti: a s'é drē mudifichêr 'na versiòun mìa arnuvêda 'd la pàgina.</strong> \nS'es pèinsa ed salvêrla, tót i cambiamèint fât dōp cla mudéfica ché andrân pêrs.",
        "yourdiff": "Diferèinsi",
        "copyrightwarning": "Per piaşèir tîn cûnt che tót al colaborasiòun a {{SITENAME}} a vînen cunsidrêdi publichêdi sòta la licèinsa $2 (per i particulêr guêrda $1). S' an 't vō mìa che i tō tèst a pôsen èser cambiê e turnê a publichêr da tót sèinsa lémit, an publichêri mìa ché.<br /> In pió, se 't  i póblich ché, a 't dichiâr, sòta la tó responsabilitê, che còl ch' è stê scrét a 't l'ê scrét té personalmèint opór l'é ste cupiê da documèint sèinsa ch' al sìa quacê da nisûn dirét 'd autōr. <strong> Ché insém an pubblichêr mìa materiêl quacê da dirét 'd autōr sèinsa autorişâsiòun! </strong>",
        "block": "Blôca l'utèint",
        "unblock": "Şblôcä l'utèint",
        "blockip": "Blôcä {{GENDER:$1|utèint}}",
-       "blockip-legend": "Blôcä l'utèint",
        "ipboptions": "2 ōri:2 hours,1 dé:1 day,3 dé:3 days,1 stmâna:1 week,2 stâni:2 weeks,1 mèiş:1 month,3 mèiş:3 months,6 mèiş:6 months,1 ân:1 year,infinito:infinite",
        "ipb-unblock-addr": "Şblôcä $1",
        "unblockip": "Şblôcä l'utèint",
index 175cba5..25cbc2b 100644 (file)
        "diff-multi-sameuser": "({{PLURAL:$1|Μία ενδιάμεση αναθεώρηση|$1 ενδιάμεσες αναθεωρήσεις}} από τον ίδιο χρήστη δεν εμφανίζεται)",
        "diff-multi-otherusers": "({{PLURAL:$1|Μία ενδιάμεση έκδοση|$1 ενδιάμεσες εκδόσεις}} από {{PLURAL:$2|ένα χρήστη|$2 χρήστες}} δεν εμφανίζ{{PLURAL:$1|εται|ονται}})",
        "diff-multi-manyusers": "({{PLURAL:$1|Μία ενδιάμεση αναθεώρηση|$1 ενδιάμεσες αναθεωρήσεις}} από περισσότερο από $2 {{PLURAL:$2|χρήστη|χρήστες}} δεν εμφανίζ{{PLURAL:$1|εται|ονται}})",
+       "diff-paragraph-moved-tonew": "Η παράγραφος αφαιρέθηκε. Κάντε κλικ για να πάτε σε νέα τοποθεσία.",
+       "diff-paragraph-moved-toold": "Η παράγραφος αφαιρέθηκε. Πατήστε στο κουμπί για να πάτε σε προηγούμενη τοποθεσία.",
        "difference-missing-revision": "{{PLURAL:$2|Μία αναθεώρηση|$2 αναθεωρήσεις}} αυτής της διαφοράς ($1) δεν {{PLURAL:$2|μπόρεσε να βρεθεί|μπόρεσαν να βρεθούν}}.\n\nΑυτό συνήθως προκαλείται από παλιό σύνδεσμο διαφοράς προς σελίδα που έχει διαγραφεί.\nΛεπτομέρειες θα βρείτε στο [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ημερολόγιο καταγραφής διαγραφών].",
        "searchresults": "Αποτελέσματα αναζήτησης",
        "searchresults-title": "Αποτελέσματα αναζήτησης για \"$1\"",
        "uploadstash-bad-path": "Δεν υπάρχει τρόπος",
        "uploadstash-bad-path-invalid": "Ο τρόπος δεν είναι έγκυρος.",
        "uploadstash-bad-path-unknown-type": "Άγνωστος τύπος ''$1''.",
+       "uploadstash-bad-path-unrecognized-thumb-name": "Nom feuilleté non classifié.",
+       "uploadstash-bad-path-no-handler": "Δεν βρέθηκε χειριστής για την αντιγραφή του φακέλλου",
        "uploadstash-bad-path-bad-format": "Ο κωδικός ''$1' δεν έχει τον κατάλληλο τύπο.",
+       "uploadstash-file-not-found": "Le code ''$1'' ñ'a pas été trouvé en planque",
        "uploadstash-file-not-found-no-thumb": "Δεν μπόρεσε να αποκτήσει το ''thumbnail''.",
+       "uploadstash-file-not-found-no-local-path": "Δεν υπάρχει τρόπος τοπικά για το κλιμακούμενο αντικείμενο",
        "uploadstash-file-not-found-no-object": "Δεν μπόρεσε να δημιουργήσει τοπικό φάκελλο ''thumbnail''.",
        "uploadstash-file-not-found-no-remote-thumb": "Η προσκόμιση του ''thumnail'' απέτυχε:$1\nURL=$2",
        "uploadstash-file-not-found-missing-content-type": "Λείπει τίτλος περιεχομένου",
index 5083bed..52ac447 100644 (file)
        "diff-multi-sameuser": "({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by the same user not shown)",
        "diff-multi-otherusers": "({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by {{PLURAL:$2|one other user|$2 users}} not shown)",
        "diff-multi-manyusers": "({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by more than $2 {{PLURAL:$2|user|users}} not shown)",
+       "diff-paragraph-moved-tonew": "Paragraph was moved. Click to jump to new location.",
+       "diff-paragraph-moved-toold": "Paragraph was moved. Click to jump to old location.",
        "difference-missing-revision": "{{PLURAL:$2|One revision|$2 revisions}} of this difference ($1) {{PLURAL:$2|was|were}} not found.\n\nThis is usually caused by following an outdated diff link to a page that has been deleted.\nDetails can be found in the [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "search-summary": "",
        "searchresults": "Search results",
        "variantname-uz": "uz",
        "variantname-uz-latn": "uz-Latn",
        "variantname-uz-cyrl": "uz-Cyrl",
+       "variantname-crh": "crh",
+       "variantname-crh-latn": "crh-Latn",
+       "variantname-crh-cyrl": "crh-Cyrl",
        "metadata": "Metadata",
        "metadata-help": "This file contains additional information, probably added from the digital camera or scanner used to create or digitize it.\nIf the file has been modified from its original state, some details may not fully reflect the modified file.",
        "metadata-expand": "Show extended details",
index 7281e6f..7fafe29 100644 (file)
        "uploadstash-wrong-owner": "($1) Fitxategia ez da uneko erabiltzailearena.",
        "uploadstash-no-such-key": "($1) gakorik ez dago, ezin da ezabatu.",
        "uploadstash-no-extension": "Luzapena nulua da.",
+       "uploadstash-zero-length": "Fitxategiaren luzeera zero da.",
        "invalid-chunk-offset": "Desplazamendu zati baliogabea",
        "img-auth-accessdenied": "Sarbide ukatua",
        "img-auth-nopathinfo": "PATH_INFO falta da.\nZure zerbitzaria ez dago informazio hau pasatzeko konfiguratuta.\nCGI-oinarriduna izan daiteke, img_auth onartzen ez duena.\nIkusi https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
index 172c0e2..8892be0 100644 (file)
        "nosuchusershort": "Il n’y a pas de contributeur avec le nom « $1 ».\nVeuillez vérifier l’orthographe.",
        "nouserspecified": "Vous devez saisir un nom d’utilisateur.",
        "login-userblocked": "{{GENDER:$1|Cet utilisateur|Cette utilisatrice}} est bloqué{{GENDER:$1||e}}. La connexion n’est pas autorisée.",
-       "wrongpassword": "Le mot de passe est incorrect.\nVeuillez essayer à nouveau.",
+       "wrongpassword": "Le nom d’utilisateur ou le mot de passe est incorrect.\nVeuillez essayer à nouveau.",
        "wrongpasswordempty": "Vous n’avez entré aucun mot de passe.\nVeuillez essayer à nouveau.",
        "passwordtooshort": "Votre mot de passe doit contenir au moins $1 caractère{{PLURAL:$1||s}}.",
        "passwordtoolong": "Les mots de passe ne peuvent pas dépasser $1 caractère{{PLURAL:$1||s}}.",
        "uploadbtn": "Importer le fichier",
        "reuploaddesc": "Annuler l'importation et retourner au formulaire d'import",
        "upload-tryagain": "Envoyer la description du fichier modifiée",
-       "upload-tryagain-nostash": "Soumettre un fichier téléchargé de nouveau avec une description modifiée",
+       "upload-tryagain-nostash": "Soumettre un fichier téléversé de nouveau avec une description modifiée",
        "uploadnologin": "Non connecté",
        "uploadnologintext": "Vous devez vous $1 pour importer des fichiers.",
        "upload_directory_missing": "Le répertoire d’import de fichier ($1) est introuvable et n’a pas pu être créé par le serveur web.",
        "file-deleted-duplicate-notitle": "Un fichier identique à ce fichier a déjà été supprimé ainsi que le titre. \nVous devriez demander à quelqu'un la possibilité de vérifier le journal de ce fichier supprimé afin d'examiner la situation  avant de l'importer à nouveau.",
        "uploadwarning": "Attention !",
        "uploadwarning-text": "Modifiez la description du fichier et essayez de nouveau.",
-       "uploadwarning-text-nostash": "Veuillez télécharger de nouveau le fichier, modifier la description ci-dessous et réessayer.",
+       "uploadwarning-text-nostash": "Veuillez téléverser de nouveau le fichier, modifier la description ci-dessous et réessayer.",
        "savefile": "Sauvegarder le fichier",
        "uploaddisabled": "Désolé, l’import de fichiers est désactivé.",
        "copyuploaddisabled": "Import de fichier par URL désactivé.",
        "uploadstash-file-too-large": "Impossible de fournir un fichier plus grand que $1 octets.",
        "uploadstash-not-logged-in": "Aucun utilisateur n’est connecté, les fichiers doivent appartenir à des utilisateurs.",
        "uploadstash-wrong-owner": "Ce fichier ($1) n’appartient pas à l’utilisateur courant.",
-       "uploadstash-no-such-key": "Aucune clé ($1), impossible de supprimer.",
+       "uploadstash-no-such-key": "Clé introuvable ($1), impossible de supprimer.",
        "uploadstash-no-extension": "L’extension est nulle.",
        "uploadstash-zero-length": "La taille du fichier est zéro.",
        "invalid-chunk-offset": "Offset de segment non valide",
        "version-poweredby-others": "autres",
        "version-poweredby-translators": "traducteurs de translatewiki.net",
        "version-credits-summary": "Nous tenons à remercier les personnes suivantes pour leur contribution à  [[Special:Version|MediaWiki]].",
-       "version-license-info": "MediaWiki est un logiciel libre, vous pouvez le redistribuer ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation ; soit la version 2 de la Licence, ou (à votre choix) toute version ultérieure.\n\nMediaWiki est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION À UN USAGE PARTICULIER. Voir la Licence Publique Générale GNU pour plus de détails.\n\nVous devriez avoir reçu [{{SERVER}}{{SCRIPTPATH}}/COPYING une copie de la Licence Publique Générale GNU] avec ce programme, sinon, écrivez à la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, États-Unis ou [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lisez-la en ligne].",
+       "version-license-info": "MediaWiki est un logiciel gratuit, vous pouvez le redistribuer ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation ; soit la version 2 de la Licence, ou (à votre choix) toute version ultérieure.\n\nMediaWiki est distribué dans l’espoir qu'il sera utile, mais SANS AUCUNE GARANTIE, sans même la garantie implicite de COMMERCIALISABILITÉ ou D’ADÉQUATION À UN USAGE PARTICULIER. Voir la Licence Publique Générale GNU pour plus de détails.\n\nVous devriez avoir reçu [{{SERVER}}{{SCRIPTPATH}}/COPYING une copie de la Licence Publique Générale GNU] avec ce programme, sinon, écrivez à la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, États-Unis ou [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lisez-la en ligne].",
        "version-software": "Logiciels installés",
        "version-software-product": "Produit",
        "version-software-version": "Version",
        "feedback-close": "Terminé",
        "feedback-external-bug-report-button": "Signaler un bogue technique",
        "feedback-dialog-title": "Soumettre un commentaire",
-       "feedback-dialog-intro": "Vous pouvez utiliser le simple formulaire ci-dessous pour faire parvenir votre commentaire. Il sera ajouté à la page « $1 », avec votre nom d’utilisateur.",
+       "feedback-dialog-intro": "Vous pouvez utiliser le formulaire simple ci-dessous pour faire parvenir votre commentaire. Il sera ajouté à la page « $1 », avec votre nom d’utilisateur.",
        "feedback-error1": "Erreur : résultat de l'API non reconnu",
        "feedback-error2": "Erreur : la modification a échoué",
        "feedback-error3": "Erreur : aucune réponse de l'API",
        "unlinkaccounts-success": "Le compte a été dissocié.",
        "authenticationdatachange-ignored": "Les modifications de données d’authentification n’ont pas été gérées. Peut-être aucun fournisseur n’a-t-il été configuré ?",
        "userjsispublic": "Veuillez noter : les sous-pages JavaScript ne doivent pas contenir de données confidentielles parce qu’elles sont visibles des autres utilisateurs.",
-       "usercssispublic": "Veuillez noter: les sous-pages CSS ne doivent pas contenir de données confidentielles parce qu'elles sont visibles des autres utilisateurs.",
+       "usercssispublic": "Veuillez noter : les sous-pages CSS ne doivent pas contenir de données confidentielles parce qu’elles sont visibles des autres utilisateurs.",
        "restrictionsfield-badip": "Adresse IP ou plage non valide : $1",
        "restrictionsfield-label": "Plages IP autorisées :",
        "restrictionsfield-help": "Une adresse IP ou une plage CIDR par ligne. Pour tout activer, utiliser <pre>0.0.0.0/0\n::/0</pre>",
index 71e1c0d..319dc4d 100644 (file)
        "unwatchthispage": "નીરીક્ષણ બંધ કરો",
        "notanarticle": "માહિતી વિનાનું પાનું",
        "notvisiblerev": "અન્ય સભ્ય દ્વારા થયેલું સંપાદન ભૂંસી નખાયું છે.",
-       "watchlist-details": "ચર્ચાનાં પાનાં અલગથી ન ગણતા {{PLURAL:$1|$1 પાનું|$1 પાનાં}} ધ્યાનસૂચીમાં છે.",
+       "watchlist-details": "{{PLURAL:$1|$1 પાનું|$1 પાનાઓ}} (અને ચર્ચા પાનાઓ) તમારી ધ્યાનસૂચિમાં છે.",
        "wlheader-enotif": "ઈમેલ સૂચના પદ્ધતિ સક્રીય કરાઈ.",
        "wlheader-showupdated": "તમારી છેલ્લી મુલાકાત પછી બદલાયેલાં પાના  '''ઘાટા''' અક્ષરો વડે દર્શાવ્યાં છે.",
        "wlnote": "નીચે $3, $4 વાગ્યા સુધીના છેલ્લા {{PLURAL:$2|એક કલાક|<strong>$2</strong> કલાક}}માં થયેલા {{PLURAL:$1|ફેરફાર|<strong>$1</strong> ફેરફારો }} દર્શાવ્યા છે.",
index c691277..a14c940 100644 (file)
        "nosuchusershort": "אין משתמש בשם \"$1\".\nנא לוודא שהאיות נכון.",
        "nouserspecified": "יש לציין שם משתמש.",
        "login-userblocked": "משתמש זה חסום. אינכם מורשים להיכנס לחשבון.",
-       "wrongpassword": "×\94ס×\99ס×\9e×\94 ×©×\94×\96נת ×©×\92×\95×\99×\94.\nנא לנסות שוב.",
+       "wrongpassword": "ש×\9d ×\94×\9eשת×\9eש ×\90×\95 ×\94ס×\99ס×\9e×\94 ×©×\94×\96נת ×©×\92×\95×\99×\99×\9d.\nנא לנסות שוב.",
        "wrongpasswordempty": "הסיסמה שהזנת ריקה.\nנא לנסות שוב.",
        "passwordtooshort": "סיסמאות חייבות להיות באורך {{PLURAL:$1|תו אחד|$1 תווים}} לפחות.",
        "passwordtoolong": "סיסמאות אינן יכולות להיות ארוכות {{PLURAL:$1|מתו אחד|מ־$1 תווים}}.",
        "diff-multi-sameuser": "({{PLURAL:$1|גרסת ביניים אחת|$1 גרסאות ביניים}} של אותו משתמש {{PLURAL:$1|אינה מוצגת|אינן מוצגות}})",
        "diff-multi-otherusers": "({{PLURAL:$1|גרסת ביניים אחת|$1 גרסאות ביניים}} של {{PLURAL:$2|משתמש אחר אחד|$2 משתמשים}} {{PLURAL:$1|אינה מוצגת|אינן מוצגות}})",
        "diff-multi-manyusers": "({{PLURAL:$1|גרסת ביניים אחת|$1 גרסאות ביניים}} של יותר {{PLURAL:$2|ממשתמש אחד|מ־$2 משתמשים}} {{PLURAL:$1|אינה מוצגת|אינן מוצגות}})",
+       "diff-paragraph-moved-tonew": "הפיסקה הועברה. ניתן ללחוץ כאן כדי לעבור למיקומה החדש.",
+       "diff-paragraph-moved-toold": "הפיסקה הועברה. ניתן ללחוץ כאן כדי לעבור למיקומה הישן.",
        "difference-missing-revision": "{{PLURAL:$2|גרסה אחת|$2 גרסאות}} מתוך הגרסאות שביקשת להשוות ($1) {{PLURAL:$2|לא נמצאה|לא נמצאו}}.\n\nזה נגרם בדרך־כלל עקב לחיצה על קישור ישן להבדלים בין גרסאות של דף שנמחק.\nאפשר למצוא פרטים ב[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} יומן המחיקות].",
        "searchresults": "תוצאות החיפוש",
        "searchresults-title": "תוצאות החיפוש \"$1\"",
index 9ab3efa..696cdf8 100644 (file)
        "enotif_lastvisited": "Pogledaj $1 za promjene od zadnjeg posjeta.",
        "enotif_lastdiff": "Pogledajte $1 kako biste mogli vidjeti tu izmjenu.",
        "enotif_anon_editor": "neprijavljeni suradnik $1",
-       "enotif_body": "Poštovani $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nSažetak urednika: $PAGESUMMARY $PAGEMINOREDIT\n\nMožete kontaktirati suradnika koji je posljednji uređivao stranicu:\nmail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nDo Vašeg ponovnog posjeta stranici nećete dobivati nove obavijesti. Postavke za izvješćivanje možete vratiti na prvotno zadane za sve praćene stranice svog popisa praćenja.\n\nVaš sustav izvješćivanja {{SITENAME}}.\n\n--\nZa promjene postavki izvješćivanja putem e-pošte, posjetite\n{{canonicalurl:{{#special:Preferences}}}}\n\nZa promjene svog popisa praćenja, posjetite\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nZa brisanje stranica iz svog popisa praćenja, posjetite\n$UNWATCHURL\n\nZa povratne informacije i pomoć posjetite:\n$HELPPAGE",
+       "enotif_body": "Poštovani $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nSažetak uređivača: $PAGESUMMARY $PAGEMINOREDIT\n\nMožete kontaktirati suradnika koji je posljednji uređivao stranicu:\nmail: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nDo Vašega ponovnog posjeta stranici ne ćete dobivati nove obavijesti. Postavke za izvješćivanje možete vratiti na prvobitno zadane za sve praćene stranice Vašega popisa praćenja.\n\nVaš sustav izvješćivanja {{SITENAME}}.\n\n--\nZa promjene postavki izvješćivanja putem e-pošte, posjetite\n{{canonicalurl:{{#special:Preferences}}}}\n\nZa promjene svog popisa praćenja, posjetite\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nZa brisanje stranica iz svog popisa praćenja, posjetite\n$UNWATCHURL\n\nZa povratne informacije i pomoć posjetite:\n$HELPPAGE",
        "enotif_minoredit": "Ovo je sitnije uređivanje",
        "created": "stvorio",
        "changed": "promijenio",
index a615909..b82a237 100644 (file)
        "metadata": "Մետատվյալներ",
        "metadata-help": "Նիշքը պարունակում է ընդարձակ տվյալները, հավանաբար ավելացված թվային լուսանկարչական ապարատի կամ սկաների կողմից, որոնք օգտագործվել են նկարը ստեղծելու կամ թվայնացնելու համար։\nԵթե նիշքը ձևափոխվել է ստեղծումից ի վեր, ապա որոշ տվյալները կարող են չհամապատասխանել ձևափոխված նիշքին։",
        "metadata-expand": "Ցուց տալ ընդարձակ տվյալները",
-       "metadata-collapse": "Ô¹Õ¡Ö\84Ö\81Õ¶Õ¥Õ¬ Õ¨Õ¶Õ¤Õ¡Ö\80Õ±Õ¡Õ¯ Õ¿Õ¾ÕµÕ¬Õ¡ները",
+       "metadata-collapse": "Ô¹Õ¡Ö\84Ö\81Õ¶Õ¥Õ¬ Õ¬Ö\80Õ¡Ö\81Õ¸Ö\82Ö\81Õ«Õ¹ Õ¿Õ¾ÕµÕ¡Õ¬ները",
        "metadata-fields": "EXIF մետատվյալների այն դաշտերը, որոնք նշված ենք այս ուղերձի մեջ, կցուցադրվեն պատկերի էջում, երբ մետատվյալների աղյուսակը ծալված է։ Այլ տվյալները լռությամբ կթաքցվեն։\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagewidth": "Լայնք",
        "exif-imagelength": "Բարձրություն",
index 08414e7..dc29549 100644 (file)
@@ -56,7 +56,8 @@
                        "Rachmat04",
                        "Arifpedia",
                        "Uchup19",
-                       "Archd"
+                       "Archd",
+                       "Empu"
                ]
        },
        "tog-underline": "Garis bawahi pranala:",
        "nosuchusershort": "Tidak ada pengguna dengan nama \"$1\".\nSilakan periksa kembali ejaan Anda.",
        "nouserspecified": "Anda harus memasukkan nama pengguna.",
        "login-userblocked": "Pengguna ini diblokir. Tidak diizinkan/diperbolehkan untuk masuk log.",
-       "wrongpassword": "Kata sandi yang Anda masukkan salah. Silakan coba lagi.",
+       "wrongpassword": "Kata sandi yang Anda masukkan salah.\nSilakan coba lagi.",
        "wrongpasswordempty": "Anda tidak memasukkan kata sandi. Silakan coba lagi.",
        "passwordtooshort": "Kata sandi paling tidak harus terdiri dari {{PLURAL:$1|1 karakter|$1 karakter}}.",
        "passwordtoolong": "Passwords tidak boleh lebih dari {{PLURAL:$1|1 karakter|$1 karakter}}.",
        "recentchanges-summary": "Temukan perubahan terbaru dalam wiki di halaman ini.<br />\n;Keterangan:(<span style=\"color:blue;\">beda</span>) perubahan, (<span style=\"color:blue;\">versi</span>) sejarah revisi, '''B''' halaman baru, '''b''' suntingan bot, '''k''' suntingan kecil, <span class=\"unpatrolled\">!</span> perubahan belum dipatroli,<br /><span style=\"color:green;\">'''(+ ''bita'')'''</span> isi konten bertambah, <span style=\"color:red;\">(- ''bita'')</span> isi konten berkurang, (← Ringkasan otomatis), (→ <span style=\"color:grey;\">Suntingan bagian</span>)",
        "recentchanges-noresult": "Tidak ada perubahan dalam rentang waktu ini yang cocok dengan kriteria.",
        "recentchanges-timeout": "Waktu pencarian ini telah habis. Anda mungkin ingin mencoba parameter pencarian lain.",
+       "recentchanges-network": "Selama terjadi kesalahan teknis, tidak ada hasil yang bisa dimuat. Silakan coba untuk menyegarkan kembali halaman.",
        "recentchanges-feed-description": "Temukan perubahan terbaru dalam wiki di umpan ini.",
        "recentchanges-label-newpage": "Suntingan ini membuat halaman baru",
        "recentchanges-label-minor": "Ini adalah suntingan kecil",
        "uploadstash-refresh": "Segarkan daftar berkas.",
        "uploadstash-thumbnail": "lihat miniatur",
        "uploadstash-exception": "Tidak dapat menyimpan unggahan dalam simpanan ($1): \"$2\".",
+       "uploadstash-bad-path": "Jalur tidak tersedia.",
+       "uploadstash-bad-path-invalid": "Jalur tidak valid.",
+       "uploadstash-bad-path-unknown-type": "Tipe tidak diketahui \"$1\".",
        "invalid-chunk-offset": "Ofset potongan tidak valid",
        "img-auth-accessdenied": "Akses ditolak",
        "img-auth-nopathinfo": "PATH_INFO hilang.\nServer Anda tidak diatur untuk melewatkan informasi ini.\nServer tersebut mungkin berbasis CGI dan tidak dapat mendukung img_auth.\nLihat https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "sp-contributions-newonly": "Hanya tampilkan suntingan yang berupa pembuatan halaman",
        "sp-contributions-hideminor": "Sembunyikan suntingan kecil",
        "sp-contributions-submit": "Cari",
+       "sp-contributions-outofrange": "Tidak bisa menampilkan hasil. Alamat IP yang diminta melebihi batas CIDR /$1",
        "whatlinkshere": "Pranala balik",
        "whatlinkshere-title": "Halaman yang memiliki pranala ke \"$1\"",
        "whatlinkshere-page": "Halaman:",
        "ipb_blocked_as_range": "Kesalahan: IP $1 tidak diblokir secara langsung dan tidak dapat dilepaskan. IP $1 diblok sebagai bagian dari pemblokiran kelompok IP $2, yang dapat dilepaskan.",
        "ip_range_invalid": "Blok IP tidak sah.",
        "ip_range_toolarge": "Rentang blok lebih besar dari /$1 tidak diperbolehkan.",
+       "ip_range_exceeded": "Jangkauan alamat IP melampaui batas maksimum. Jangakaun yang diperbolehkan: /$1",
        "ip_range_toolow": "Rentang IP secara efektif tidak diizinkan.",
        "proxyblocker": "Pemblokir proxy",
        "proxyblockreason": "Alamat IP Anda telah diblokir karena alamat IP Anda adalah ''proxy'' terbuka. Silakan hubungi penyedia jasa internet Anda atau dukungan teknis dan beritahukan mereka masalah keamanan serius ini.",
index 4972ff4..14f84c0 100644 (file)
        "nosuchusershort": "Non è registrato alcun utente di nome \"$1\". Verificare il nome inserito.",
        "nouserspecified": "È necessario specificare un nome utente.",
        "login-userblocked": "Questa utenza è bloccata. Non è possibile effettuare il login.",
-       "wrongpassword": "La password inserita non è corretta. Riprovare.",
+       "wrongpassword": "Nome utente o password inserita non corretta.\nRiprova.",
        "wrongpasswordempty": "Non è stata inserita alcuna password. Riprovare.",
        "passwordtooshort": "Le password devono contenere almeno {{PLURAL:$1|1 carattere|$1 caratteri}}.",
        "passwordtoolong": "La password non può contenere più di {{PLURAL:$1|1 carattere|$1 caratteri}}.",
index 9af95c4..c429c43 100644 (file)
@@ -86,7 +86,8 @@
                        "Translatealcd",
                        "Delim",
                        "Hinaloe",
-                       "Phantomize"
+                       "Phantomize",
+                       "Suzukaze-c"
                ]
        },
        "tog-underline": "リンクの下線:",
        "nosuchusershort": "「$1」という名前の利用者は存在しません。\n綴りを確認してください。",
        "nouserspecified": "利用者名を指定してください。",
        "login-userblocked": "この利用者はブロックされています。ログインは拒否されます。",
-       "wrongpassword": "パスワードが間違っています。 \nもう一度やり直してください。",
+       "wrongpassword": "利用者名またはパスワードが間違っています。 \nもう一度やり直してください。",
        "wrongpasswordempty": "パスワードを空欄にはできません。\nもう一度やり直してください。",
        "passwordtooshort": "パスワードは {{PLURAL:$1|$1 文字}}以上にしてください。",
        "passwordtoolong": "パスワードは {{PLURAL:$1|$1 文字}}以下にしてください。",
        "prefs-editor": "エディター",
        "prefs-preview": "プレビュー",
        "prefs-advancedrc": "詳細の設定",
+       "prefs-opt-out": "改善の使用を断る",
        "prefs-advancedrendering": "詳細の設定",
        "prefs-advancedsearchoptions": "詳細設定",
        "prefs-advancedwatchlist": "詳細の設定",
        "rcfilters-liveupdates-button-title-off": "新しい編集を即座に読み表示する",
        "rcfilters-watchlist-markseen-button": "すべての変更を訪問済みにする",
        "rcfilters-watchlist-edit-watchlist-button": "ウォッチリストを編集",
+       "rcfilters-preference-label": "最近の更新の改善版を隠す",
        "rcnotefrom": "以下は<strong>$3 $4</strong>以降の{{PLURAL:$5|更新です}} (最大 <strong>$1</strong> 件)。",
        "rclistfromreset": "日時指定をリセット",
        "rclistfrom": "$3の$2以降の更新を表示する",
index dc5052b..18aaa92 100644 (file)
        "rcshowhidecategorization-show": "Tuduhaké",
        "rcshowhidecategorization-hide": "Dhelikaké",
        "rclinks": "Tuduhaké $1 owahan pungkasan ing dalem $2 dina pungkasan.",
-       "diff": "béd",
-       "hist": "saj",
+       "diff": "bé",
+       "hist": "sa",
        "hide": "Dhelikaké",
        "show": "Tuduhaké",
        "minoreditletter": "c",
        "movenosubpage": "Kaca iki ora duwé anak-kaca.",
        "movereason": "Alesan:",
        "revertmove": "balèkaké",
-       "delete_and_move_text": "Kaca jujugan \"[[:$1]]\" wis ana.\nApa sampéyan kersa mbusak iku supaya kacané bisa dilih?",
+       "delete_and_move_text": "Kaca paran \"[[:$1]]\" wis ana.\nApa panjenengan péngin mbusak iku supaya kacané bisa dilih?",
        "delete_and_move_confirm": "Ya, busak kaca iku.",
        "delete_and_move_reason": "Dibusak kanggo sarana ngalihaké saka \"[[$1]]\"",
        "selfmove": "Sesirah sumber lan tujuan padha;\nora bisa ngalih nyang tujuan sing padha.",
index 8a586da..1d5f64f 100644 (file)
        "nosuchusershort": "이름이 \"$1\"인 사용자는 없습니다.\n철자가 맞는지 확인하세요.",
        "nouserspecified": "사용자 계정 이름을 입력하지 않았습니다.",
        "login-userblocked": "이 사용자는 차단되었습니다. 로그인할 수 없습니다.",
-       "wrongpassword": "ì\9e\85ë ¥í\95\9c ë¹\84ë°\80ë²\88í\98¸ê°\80 ì\9e\98못ë\90\98ì\97\88ì\8aµë\8b\88ë\8b¤.\në\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95\98ì\84¸ì\9a\94.",
+       "wrongpassword": "ì\9e\98못ë\90\9c ì\82¬ì\9a©ì\9e\90 ì\9d´ë¦\84 ë\98\90ë\8a\94 ë¹\84ë°\80ë²\88í\98¸ê°\80 ì\9e\85ë ¥ë\90\98ì\97\88ì\8aµë\8b\88ë\8b¤.\në\8b¤ì\8b\9c ì\8b\9cë\8f\84í\95´ ì£¼ì\8b­ì\8b\9cì\98¤.",
        "wrongpasswordempty": "비밀번호를 입력하지 않았습니다.\n다시 시도하세요.",
        "passwordtooshort": "비밀번호는 {{PLURAL:$1|$1 글자}} 이상이어야 합니다.",
        "passwordtoolong": "비밀번호는 {{PLURAL:$1|1자|$1자}}보다 길어서는 안 됩니다.",
index 0da01f8..eaaee94 100644 (file)
        "nosuchusershort": "De Benotzernumm \"$1\" gëtt et net.\nKuckt w.e.g. op d'Schreifweis richteg ass.",
        "nouserspecified": "Gitt w.e.g. e Benotzernumm un.",
        "login-userblocked": "Dëse Benotzer ass gespaart. Aloggen ass net erlaabt.",
-       "wrongpassword": "Dir hutt e falscht (oder kee) Passwuert aginn. Probéiert w.e.g. nach eng Kéier.",
+       "wrongpassword": "De Benotzernumm oder d'Passwuert si falsch.\nProbéiert w.e.g. nach eng Kéier.",
        "wrongpasswordempty": "D'Passwuert dat Dir aginn hutt war eidel.\nProbéiert w.e.g. nach eng Kéier.",
        "passwordtooshort": "Passwierder musse mindestens {{PLURAL:$1|1 Zeeche|$1 Zeeche}} laang sinn.",
        "passwordtoolong": "Passwierder kënnen net méi laang wéi {{PLURAL:$1|1 Zeeche|$1 Zeeche}} sinn.",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Standardfilter uleeën",
        "rcfilters-savedqueries-cancel-label": "Ofbriechen",
        "rcfilters-savedqueries-add-new-title": "Aktuell Filter-Astellunge späicheren",
-       "rcfilters-savedqueries-already-saved": "Dës Filtere si scho gespäichert",
+       "rcfilters-savedqueries-already-saved": "Dës Filtere si scho gespäichert. Ännert Är Astellunge fir en neie Gespäicherte Filter unzeleeën.",
        "rcfilters-restore-default-filters": "Standardfiltere restauréieren",
        "rcfilters-clear-all-filters": "All Filteren eidelmaachen",
        "rcfilters-show-new-changes": "Rezentst Ännerunge weisen",
        "rcfilters-filterlist-feedbacklink": "Sot eis wat Dir vun dësen (neien) Filterméiglechkeeten haalt",
        "rcfilters-highlightbutton-title": "Resultater ervirhiewen",
        "rcfilters-highlightmenu-title": "Eng Faarf eraussichen",
+       "rcfilters-highlightmenu-help": "Sicht eng Faarf eraus fir dës Eegenschaft ervirzehiewen.",
        "rcfilters-filterlist-noresults": "Keng Filtere fonnt",
        "rcfilters-noresults-conflict": "Näischt fonnt well d'Sichcritère sech widderspriechen",
        "rcfilters-filter-editsbyself-label": "Ännerunge vun Iech",
index 8242b51..c08b86a 100644 (file)
        "uploaddisabledtext": "Failu augšupielāde ir atslēgta.",
        "php-uploaddisabledtext": "Failu augšupielāde ir atslēgta PHP.\nLūdzu, pārbaudi file_uploads uzstādījumu.",
        "uploadscripted": "Šis fails satur HTML vai skriptu kodu, kuru, interneta pārlūks, var kļūdas pēc, mēģināt interpretēt (ar potenciāli sliktām sekām).",
+       "upload-scripted-dtd": "Nevar augšupielādēt SVG failus, kuri satur nestandarta DTD deklarāciju.",
        "uploadinvalidxml": "Nevarēja apstrādāt augšupielādētā faila XML saturu.",
        "uploadvirus": "Šis fails satur vīrusu! Sīkāk: $1",
        "uploadjava": "Fails ir ZIP fails, kas satur Java .class failu.\nJava failu augšupielāde nav atļauta, jo tas var radīt iespējas apiet drošības ierobežojumus.",
        "filehist-comment": "Komentārs",
        "imagelinks": "Faila lietojums",
        "linkstoimage": "{{PLURAL:$1|Šajās $1 lapās ir saites|Šajā lapā ir saite|Šajās $1 lapās ir saites}} uz šo failu:",
+       "linkstoimage-more": "Uz šo failu ir saites vairāk nekā $1 {{PLURAL:$1|lapās|lapā|lapās}}.\nŠajā sarakstā ir tikai {{PLURAL:$1|pirmās $1 saistītās lapas|pirmā $1 saistītā lapa|pirmās $1 saistītās lapas}} uz šo failu.\nPieejams arī [[Special:WhatLinksHere/$2|pilns saraksts]].",
        "nolinkstoimage": "Nevienā lapā nav norāžu uz šo attēlu.",
        "morelinkstoimage": "Skatīt [[Special:WhatLinksHere/$1|vairāk saites]] uz šo failu.",
        "linkstoimage-redirect": "$1 (faila pāradresācija) $2",
        "notvisiblerev": "Cita lietotāja pēdējā versija ir izdzēsta",
        "watchlist-details": "(Tu uzraugi $1 {{PLURAL:$1|lapu|lapas}}, neieskaitot diskusiju lapas.)",
        "wlheader-enotif": "E-pasta paziņojumi ir ieslēgti.",
-       "wlheader-showupdated": "Lapas, kuras ir tikušas izmainītas, kopš tu tās pēdējoreiz apskatījies, te rādās ar '''pustrekniem''' burtiem",
+       "wlheader-showupdated": "Lapas, kas ir tikušas izmainītas, kopš pēdējoreiz skatījies tās, tiek rādītas <strong>trekninātā</strong> rakstā.",
        "wlshowlast": "Rādīt pēdējās $1 stundas $2 dienas",
        "watchlist-hide": "Slēpt",
        "watchlist-submit": "Rādīt",
index 2186a3b..aa348f5 100644 (file)
@@ -30,7 +30,7 @@
        "tog-watchuploads": "Sogna file anyar sing nyong unggah nang daptar sawangane nyong",
        "tog-watchrollback": "Tambahna kaca sing wis tek rollback maring daftar pangawasane inyong",
        "tog-minordefault": "Otomatis nandani kabeh suntingan dadi suntingan cilik",
-       "tog-previewontop": "Tidokna pratayang sedurunge kotak sunting",
+       "tog-previewontop": "Tidhokna pratayang sedurunge kotak sunting",
        "tog-previewonfirst": "Tidokna pratayang nang suntingan sing pertama",
        "tog-enotifwatchlistpages": "Kirimna imel maring inyong angger kaca awa berkas utsing mlebu daptar pangawasanne inyong diowaih",
        "tog-enotifusertalkpages": "Kirimna imel maring inyong angger kaca dhiskusine inyong owah",
        "createacct-yourpasswordagain-ph": "Lebokna tembung sandhi maning",
        "userlogin-remembermypassword": "Jorna ben Inyong tetep mlebu log",
        "userlogin-signwithsecure": "Gunakna koneksi aman",
+       "cannotlogin-title": "Ora bisa mlebu log",
+       "cannotlogin-text": "Ora mungkin mlebu log.",
        "cannotloginnow-title": "Ora teyeng mlebu siki",
+       "cannotcreateaccount-title": "Ora bisa gawé akun",
        "yourdomainname": "Domain Rika:",
        "password-change-forbidden": "Rika ora teyeng ngowaih tembung sandhi nang wiki kiye.",
        "externaldberror": "Ana kesalahan otentikasi basis data utawa Rika ora olih nglakokna pemutakhiran maring akun eksternale Rika.",
        "user-mail-no-body": "Njajal ngirim imel sing kosong urawa isine sithik thok.",
        "changepassword": "Ganti tembung sandhi",
        "resetpass_announce": "Kanggo ngrampungna gole mlebu log, rika kudu nglebokna tembung sandhi anyar.",
+       "resetpass_text": "<!-- Tambah teks neng kéné -->",
        "resetpass_header": "Ganti tembung sandhine akun",
        "oldpassword": "Tembung sandi lawas:",
        "newpassword": "Tembung sandi anyar:",
        "resetpass_submit": "Nata tembung sandhi lan mlebu log",
        "changepassword-success": "Sandhiné Rika uwis diganti!",
        "changepassword-throttled": "Rika wis kakehan gole njajal mlebu log.\nTulung ngenteni $1 sedurunge njajal maning.",
+       "botpasswords-label-create": "Gawé",
+       "botpasswords-label-update": "Nganyari",
+       "botpasswords-label-cancel": "Batalna",
+       "botpasswords-label-delete": "Busek",
        "resetpass_forbidden": "Tembung sandhi ora teyeng diganti",
        "resetpass-no-info": "Rika kudu mlebu log kanggo ngakses kaca kiye sacara langsung.",
        "resetpass-submit-loggedin": "Ganti tembung sandhi",
        "headline_tip": "Subbagian tingkat 1",
        "nowiki_sample": "Lebokna teks sing ora bakal diformat nang kene",
        "nowiki_tip": "Aja nganggo format wiki",
+       "image_sample": "Conto.jpg",
        "image_tip": "Ngaweh berkas",
+       "media_sample": "Conto.ogg",
        "media_tip": "Pranala berkas media",
        "sig_tip": "Tapak astane Rika nganggo tandha wektu",
        "hr_tip": "Garis horisontal",
        "minoredit": "Kiye suntingan cilik",
        "watchthis": "Awasi kaca kiyé",
        "savearticle": "Terbitna Kaca",
+       "publishpage": "Pacak kacané",
        "preview": "Pra tayang",
        "showpreview": "Pra tayang",
        "showdiff": "Ndeleng bedané",
        "editingsection": "Nyunting $1 (bagiyan)",
        "editingcomment": "Nyunting $1 (bagéyan anyar)",
        "editconflict": "Konflik panyuntingan: $1",
+       "yourtext": "Teks-é rika",
        "protectedpagewarning": "'''Pénget:  Kaca kiye wis dikunci dadi mung panganggo sing nduwé hak aksès pangurus baé sing teyeng nyunting.'''\nEntri cathetan pungkasan disadiakna nang ngisor kanggo referensi:",
        "semiprotectedpagewarning": "'''Cathetan:''' Kaca kiye lagi pinuju direksa, dadi mung panganggo kadaftar sing teyeng nyunting.\nEntri cathetan pungkasan disadiakna nang ngisor kanggo referensi:",
        "templatesused": "{{PLURAL:$1|Cithakan|Cithakan}} sing dienggo nang kaca kiye:",
        "rcshowhideliu": "$1 panganggo sing mlebu log",
        "rcshowhideanons": "$1 panganggo anonim",
        "rcshowhidepatr": "$1 suntingan sing dipatroli",
-       "rcshowhidemine": "$1 suntingane inyong",
+       "rcshowhidemine": "$1 suntingané inyong",
        "rclinks": "Tidokna $1 owahan pungkasan nang $2 dina pungkasan kiye",
        "diff": "bédane",
        "hist": "versi",
index d711feb..ed13a7b 100644 (file)
        "nosuchusershort": "De gebruiker \"$1\" bestaat niet.\nControleer de schrijfwijze.",
        "nouserspecified": "Geef een gebruikersnaam op.",
        "login-userblocked": "Deze gebruiker is geblokkeerd.\nAanmelden is niet mogelijk.",
-       "wrongpassword": "Het opgegeven wachtwoord is onjuist.\nProbeer het opnieuw.",
+       "wrongpassword": "Onjuiste gebruikersnaam of wachtwoord ingevoerd.\nProbeer het opnieuw.",
        "wrongpasswordempty": "Het opgegeven wachtwoord was leeg.\nProbeer het opnieuw.",
        "passwordtooshort": "Wachtwoorden moeten uit minstens {{PLURAL:$1|$1 teken|$1 tekens}} bestaan.",
        "passwordtoolong": "Wachtwoorden kunnen niet langer zijn dan {{PLURAL:$1|één teken|$1 tekens}}.",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Standaard filter aanmaken",
        "rcfilters-savedqueries-cancel-label": "Annuleren",
        "rcfilters-savedqueries-add-new-title": "Huidige filter instellingen opslaan",
-       "rcfilters-savedqueries-already-saved": "Deze filters zijn al opgeslagen",
+       "rcfilters-savedqueries-already-saved": "Deze filters zijn al opgeslagen. Wijzig uw instellingen om een nieuw Filter op te slaan.",
        "rcfilters-restore-default-filters": "Standaard filters terugzetten",
        "rcfilters-clear-all-filters": "Alle filters verwijderen",
        "rcfilters-show-new-changes": "Toon nieuwste wijzigingen",
index 0caf39a..754e21e 100644 (file)
        "nosuchusershort": "Brak użytkownika o nazwie „$1”.\nSprawdź poprawność pisowni.",
        "nouserspecified": "Musisz podać nazwę użytkownika.",
        "login-userblocked": "Ten użytkownik jest zablokowany. Zalogowanie się jest niemożliwe.",
-       "wrongpassword": "Podane hasło jest nieprawidłowe. Spróbuj jeszcze raz.",
+       "wrongpassword": "Podany login lub hasło są nieprawidłowe. Spróbuj jeszcze raz.",
        "wrongpasswordempty": "Wprowadzone hasło jest puste. Spróbuj ponownie.",
        "passwordtooshort": "Hasło musi mieć co najmniej $1 {{PLURAL:$1|znak|znaki|znaków}}.",
        "passwordtoolong": "Hasło nie może być dłuższe niż  {{PLURAL:$1|1 znak|$1 znaków}}.",
        "delete_and_move_text": "Strona docelowa „[[:$1]]” już istnieje.\nCzy chcesz ją usunąć, by zrobić miejsce dla przenoszonej strony?",
        "delete_and_move_confirm": "Tak, usuń stronę",
        "delete_and_move_reason": "Usunięto, by zrobić miejsce dla przenoszonej strony „[[$1]]”",
-       "selfmove": "Nazwy stron źródłowej i docelowej są takie same.\nStrony nie można przenieść na nią samą.",
+       "selfmove": "Ta sama nazwa strony;\nstrony nie można przenieść na nią samą.",
        "immobile-source-namespace": "Nie można przenieść stron w przestrzeni nazw „$1”",
        "immobile-target-namespace": "Nie można przenieść stron do przestrzeni nazw „$1”",
        "immobile-target-namespace-iw": "Link interwiki jest nieprawidłowym tytułem, pod który miałaby być przeniesiona strona.",
index 6c15199..1313f7a 100644 (file)
        "rcfilters-filter-user-experience-level-unregistered-label": "ناثبت",
        "rcfilters-filter-user-experience-level-newcomer-label": "نوي راغلي",
        "rcfilters-filter-user-experience-level-learner-label": "زده کوونکي",
+       "rcfilters-filter-bots-label": "روباټ",
+       "rcfilters-filter-patrolled-label": "ګزمې شوی",
+       "rcfilters-filtergroup-changetype": "د بدلون ډول",
        "rcnotefrom": "دلته لاندې د <strong>$3, $4</strong> (څخه <strong>$1</strong> {{PLURAL:$5|راپدېخوا پېښ شوي بدلونونه|ښکاري}}).",
        "rclistfrom": "نوي بدلونونه چې له $3، $2 څخه پيلېږي ښکاره کول",
        "rcshowhideminor": "وړې سمونې $1",
index cf91aa6..48bff79 100644 (file)
        "rcfilters-filterlist-title": "Filtros",
        "rcfilters-filterlist-whatsthis": "Como funcionam estes?",
        "rcfilters-filterlist-feedbacklink": "Diga-nos o que você pensa sobre estas (novas) ferramentas de filtragem",
-       "rcfilters-highlightbutton-title": "Realçar os resultados",
+       "rcfilters-highlightbutton-title": "Destacar resultados",
        "rcfilters-highlightmenu-title": "Selecione uma cor",
        "rcfilters-highlightmenu-help": "Selecione uma cor para realçar esta propriedade",
        "rcfilters-filterlist-noresults": "Nenhum filtro encontrado",
        "rcfilters-filter-editsbyother-label": "Mudanças de outros",
        "rcfilters-filter-editsbyother-description": "Todas as mudanças, exceto a sua.",
        "rcfilters-filtergroup-userExpLevel": "Registro e experiência do usuário",
-       "rcfilters-filter-user-experience-level-registered-label": "Registrado",
+       "rcfilters-filter-user-experience-level-registered-label": "Registrados",
        "rcfilters-filter-user-experience-level-registered-description": "Editores registrados.",
        "rcfilters-filter-user-experience-level-unregistered-label": "Não registados",
        "rcfilters-filter-user-experience-level-unregistered-description": "Editores que não estão autenticados.",
index 2861e8f..664225c 100644 (file)
        "nosuchusershort": "Não existe nenhum utilizador com o nome \"$1\".\nVerifique o nome que introduziu.",
        "nouserspecified": "Tem de especificar um nome de utilizador.",
        "login-userblocked": "Este utilizador está bloqueado. Não é permitido o acesso.",
-       "wrongpassword": "A palavra-passe que introduziu é inválida. Tente novamente, por favor.",
+       "wrongpassword": "O nome de utilizador ou a palavra-passe inseridos estão incorretos.\nTente novamente, por favor.",
        "wrongpasswordempty": "A palavra-passe não foi introduzida. \nIntroduza-a, por favor.",
        "passwordtooshort": "A palavra-passe deve ter no mínimo $1 {{PLURAL:$1|carácter|caracteres}}.",
        "passwordtoolong": "A palavra-passe não pode exceder $1 {{PLURAL:$1|carácter|caracteres}}.",
        "diff-multi-sameuser": "(Há {{PLURAL:$1|uma edição intermédia do mesmo utilizador que não está a ser apresentada|$1 edições intermédias do mesmo utilizador que não estão a ser apresentadas}})",
        "diff-multi-otherusers": "(Há {{PLURAL:$1|uma revisão intermédia|$1 revisões intermédias}} de {{PLURAL:$2|outro utilizador|$2 utilizadores}} que não {{PLURAL:$1|está a ser apresentada|estão a ser apresentadas}})",
        "diff-multi-manyusers": "({{PLURAL:$1|Uma edição intermédia|$1 edições intermédias}} de mais de {{PLURAL:$2|um utilizador|$2 utilizadores}} não {{PLURAL:$1|apresentada|apresentadas}})",
+       "diff-paragraph-moved-tonew": "O parágrafo foi movido. Clique para saltar para a nova posição.",
+       "diff-paragraph-moved-toold": "O parágrafo foi movido. Clique para saltar para a posição anterior.",
        "difference-missing-revision": "{{PLURAL:$2|Uma revisão|$2 revisões}} desta diferença ($1) não {{PLURAL:$2|foi encontrada|foram encontradas}}.\n\nIsto é geralmente causado por seguir uma ligação de histórico desatualizada para uma página que foi eliminada.\nOs detalhes podem ser encontrados no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminação].",
        "searchresults": "Resultados da pesquisa",
        "searchresults-title": "Resultados da pesquisa de \"$1\"",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Criar filtro padrão",
        "rcfilters-savedqueries-cancel-label": "Cancelar",
        "rcfilters-savedqueries-add-new-title": "Gravar as configurações de filtros atuais",
-       "rcfilters-savedqueries-already-saved": "Estes filtros já foram gravados",
+       "rcfilters-savedqueries-already-saved": "Estes filtros já foram gravados. Altera as suas configurações para criar um novo filtro gravado.",
        "rcfilters-restore-default-filters": "Restaurar os filtros padrão",
        "rcfilters-clear-all-filters": "Limpar todos os filtros",
        "rcfilters-show-new-changes": "Mostrar as mudanças mais recentes",
        "default-skin-not-found-no-skins": "O tema padrão da sua wiki definido em <code dir=\"ltr\">$wgDefaultSkin</code>, <code>$1</code>, não está disponível.\n\nNão tem nenhum tema instalado.\n\n; Se acabou de instalar ou atualizar o MediaWiki:\n: Provavelmente instalou-o a partir do git, ou diretamente do código fonte usando outro método. O comportamento é o esperado. O MediaWiki 1.24 e versões mais recentes não incluem qualquer tema no repositório principal. Tente instalar temas a partir do [https://www.mediawiki.org/wiki/Category:All_skins diretório de temas da mediawiki.org], assim:\n:* Descarregue o  [https://www.mediawiki.org/wiki/Download tarball de instalação], que contém vários temas e extensões. Pode copiar o diretório <code>skins/</code> nele incluído.\n:* Descarregue tarballs de temas individuais, da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Use o Git para descarregar temas].\n: Se é programador(a) do MediaWiki, isto não deverá interferir com o seu repositório git. Consulte [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Configuração de Temas] para saber como ativar temas e escolher o tema padrão.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ativado)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>desativado</strong>)",
-       "mediastatistics": "Estatísticas multimédia",
+       "mediastatistics": "Estatísticas de multimédia",
        "mediastatistics-summary": "Estatísticas sobre os tipos de ficheiro carregados. Inclui apenas a versão mais recente de cada ficheiro. Versões antigas ou eliminadas não estão incluídas.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
        "mediastatistics-bytespertype": "Tamanho total dos ficheiros desta secção: {{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%).",
index 862f64c..016a3b3 100644 (file)
        "diff-multi-sameuser": "This message appears in the revision history of a page when comparing two versions which aren't consecutive, and the intermediate revisions were all created by the same user as the new revision.\n\nParameters:\n* $1 - the number of revisions\n{{Related|Diff-multi}}",
        "diff-multi-otherusers": "This message appears in the revision history of a page when comparing two versions which aren't consecutive, and at least one of the intermediate revisions was created by a user other than the user who created the new revision.\n\nParameters:\n* $1 - the number of revisions\n* $2 - the number of distinct other users who made those revisions\n{{Related|Diff-multi}}",
        "diff-multi-manyusers": "This message appears in the revision history of a page when comparing two versions which aren't consecutive, and the intermediate revisions have been edited by more than 100 users.\n\nParameters:\n* $1 - the number of revisions, will always be 101 or more\n* $2 - the number of users that were found, which was limited at 100\n{{Related|Diff-multi}}",
+       "diff-paragraph-moved-tonew": "Explaining title tag for the indicating symbols when a paragraph was moved hinting to the new location in the Diff view.",
+       "diff-paragraph-moved-toold": "Explaining title tag for the indicating symbols when a paragraph was moved hinting to the old location in the Diff view.",
        "difference-missing-revision": "Text displayed when the requested revision does not exist using a diff link.\n\nExample: [{{canonicalurl:Project:News|diff=426850&oldid=99999999}} Diff with invalid revision#]\n\nParameters:\n* $1 - the list of missing revisions IDs\n* $2 - the number of items in $1 (one or two)",
        "search-summary": "{{doc-specialpagesummary|search}}",
        "searchresults": "This is the title of the page that contains the results of a search.\n\n{{Identical|Search results}}",
        "enotif_lastvisited": "Parameters:\n* $1 - a URL which points to diff\nSee also:\n* {{msg-mw|Enotif lastdiff}}",
        "enotif_lastdiff": "Email notification text to the latest page differences. Parameters:\n* $1 - a link which points to a diff, shown as a plain link\nSee also:\n* {{msg-mw|Enotif lastvisited}}",
        "enotif_anon_editor": "User name in an email notification when referring to an anonymous user. Parameters:\n* $1 - the anonymous user name (i.e. an IP address).",
-       "enotif_body": "Text of a notification email sent when a watched page has been edited or deleted.\n[[File:Screenshot_MediaWiki_e-mail_notifier.PNG|150px|right]]\n\nRefers to {{msg-mw|Helppage}}.\n\nParameters:\n*$WATCHINGUSERNAME is the username of the user receiving the notification.\n*$PAGEINTRO is the first line of the message, saying what happened. It currently can be either of:\n**{{msg-mw|Enotif body intro deleted}}\n**{{msg-mw|Enotif body intro created}}\n**{{msg-mw|Enotif body intro moved}}\n**{{msg-mw|Enotif body intro restored}}\n**{{msg-mw|Enotif body intro changed}} (for all the other cases).\n*$NEWPAGE consists of either\n**if the page is new (in older releases), {{msg-mw|Enotif newpagetext}}\n**if the page has a previous revision,\n***{{msg-mw|Enotif lastdiff}}\n***a newline\n***{{msg-mw|Enotif lastvisited}}\n*$PAGEEDITOR_EMAIL and $PAGEEDITOR_WIKI are links respectively to the email user special page and user page for the user who performed the action.\n*$PAGEEDITOR is the username of the user who performed the action.\n*$HELPPAGE is the full URL to the help page, defined by {{msg-mw|helppage}}.\n\nThe subject of the email is one of the following messages:\n*{{msg-mw|Enotif subject deleted}}\n*{{msg-mw|Enotif subject created}}\n*{{msg-mw|Enotif subject moved}}\n*{{msg-mw|Enotif subject restored}}\n*{{msg-mw|Enotif subject changed}}",
+       "enotif_body": "{{doc-important|Neither PLURAL nor GENDER are actually supported at the moment, at least until [[phab:T24769]] got resolved.}}\nText of a notification email sent when a watched page has been edited or deleted.\n[[File:Screenshot_MediaWiki_e-mail_notifier.PNG|150px|right]]\n\nRefers to {{msg-mw|Helppage}}.\n\nParameters:\n*$WATCHINGUSERNAME is the username of the user receiving the notification.\n*$PAGEINTRO is the first line of the message, saying what happened. It currently can be either of:\n**{{msg-mw|Enotif body intro deleted}}\n**{{msg-mw|Enotif body intro created}}\n**{{msg-mw|Enotif body intro moved}}\n**{{msg-mw|Enotif body intro restored}}\n**{{msg-mw|Enotif body intro changed}} (for all the other cases).\n*$NEWPAGE consists of either\n**if the page is new (in older releases), {{msg-mw|Enotif newpagetext}}\n**if the page has a previous revision,\n***{{msg-mw|Enotif lastdiff}}\n***a newline\n***{{msg-mw|Enotif lastvisited}}\n*$PAGEEDITOR_EMAIL and $PAGEEDITOR_WIKI are links respectively to the email user special page and user page for the user who performed the action.\n*$PAGEEDITOR is the username of the user who performed the action.\n*$HELPPAGE is the full URL to the help page, defined by {{msg-mw|helppage}}.\n\nThe subject of the email is one of the following messages:\n*{{msg-mw|Enotif subject deleted}}\n*{{msg-mw|Enotif subject created}}\n*{{msg-mw|Enotif subject moved}}\n*{{msg-mw|Enotif subject restored}}\n*{{msg-mw|Enotif subject changed}}",
        "enotif_minoredit": "Possible value (it's empty string for non-minor edits) in the {{msg-mw|Enotif body|notext=1}} message.  This can use magic words like <nowiki>{{GRAMMAR}}</nowiki>.  However, it will not be parsed, so you can not use wikitext (e.g. links) that generates HTML.\n{{Identical|minoredit}}",
        "created": "{{Optional}}\nPossible value for $CHANGEDORCREATED in the following messages:\n* {{msg-mw|enotif_subject}}\n* {{msg-mw|enotif_body}}\n{{Identical|Created}}",
        "changed": "{{Optional}}\nPossible value for $CHANGEDORCREATED in the following messages:\n* {{msg-mw|Enotif subject}}\n* {{msg-mw|Enotif body}}",
        "variantname-sr-ec": "{{optional}}\nVariant Option for wikis with variants conversion enabled.\n\nNote that <code>sr-ec</code> is not a conforming BCP47 language tag. Wikis should be migrated by:\n* allowing it only as a legacy alias of the preferred tag <code>sr-cyrl</code> (possibly insert a tracking category in templates as long as they must support the legacy tag),\n* making the new tag the default to look first, before looking for the old tag,\n* moving the translations to the new code by renaming them,\n* checking links in source pages still using the legacy tag to change it to the new tag,\n* possibly cleanup the redirect pages.",
        "variantname-sr-el": "{{optional}}\nVariant Option for wikis with variants conversion enabled.\n\nNote that <code>sr-el</code> is not a conforming BCP47 language tag. Wikis should be migrated by:\n* allowing it only as a legacy alias of the preferred tag <code>sr-latn</code> (possibly insert a tracking category in templates as long as they must support the legacy tag),\n* making the new tag the default to look first, before looking for the old tag,\n* moving the translations to the new code by renaming them,\n* checking links in source pages still using the legacy tag to change it to the new tag,\n* possibly cleanup the redirect pages.",
        "variantname-sr": "{{optional}}\nVariant Option for wikis with variants conversion enabled.",
-       "variantname-kk-kz": "{{optional}}\nVarient Option for wikis with variants conversion enabled.",
-       "variantname-kk-tr": "{{optional}}\nVarient Option for wikis with variants conversion enabled.",
-       "variantname-kk-cn": "{{optional}}\nVarient Option for wikis with variants conversion enabled.",
-       "variantname-kk-cyrl": "{{optional}}\nVarient Option for wikis with variants conversion enabled.",
-       "variantname-kk-latn": "{{optional}}\nVarient Option for wikis with variants conversion enabled.",
-       "variantname-kk-arab": "{{optional}}\nVarient Option for wikis with variants conversion enabled.",
-       "variantname-kk": "{{optional}}\nVarient Option for wikis with variants conversion enabled.",
-       "variantname-ku-arab": "{{optional}}\nVarient Option for wikis with variants conversion enabled.",
-       "variantname-ku-latn": "{{optional}}\nVarient Option for wikis with variants conversion enabled.",
-       "variantname-ku": "{{optional}}\nVarient Option for wikis with variants conversion enabled.",
+       "variantname-kk-kz": "{{optional}}\nVariant Option for wikis with variants conversion enabled.",
+       "variantname-kk-tr": "{{optional}}\nVariant Option for wikis with variants conversion enabled.",
+       "variantname-kk-cn": "{{optional}}\nVariant Option for wikis with variants conversion enabled.",
+       "variantname-kk-cyrl": "{{optional}}\nVariant Option for wikis with variants conversion enabled.",
+       "variantname-kk-latn": "{{optional}}\nVariant Option for wikis with variants conversion enabled.",
+       "variantname-kk-arab": "{{optional}}\nVariant Option for wikis with variants conversion enabled.",
+       "variantname-kk": "{{optional}}\nVariant Option for wikis with variants conversion enabled.",
+       "variantname-ku-arab": "{{optional}}\nVariant Option for wikis with variants conversion enabled.",
+       "variantname-ku-latn": "{{optional}}\nVariant Option for wikis with variants conversion enabled.",
+       "variantname-ku": "{{optional}}\nVariant Option for wikis with variants conversion enabled.",
        "variantname-tg-cyrl": "{{optional}}",
        "variantname-tg-latn": "{{optional}}",
        "variantname-tg": "{{optional}}",
        "variantname-uz": "{{optional}}",
        "variantname-uz-latn": "{{optional}}",
        "variantname-uz-cyrl": "{{optional}}",
+       "variantname-crh": "{{optional}}\nVariant Option for wikis with variants conversion enabled.",
+       "variantname-crh-latn": "{{optional}}\nVariant Option for wikis with variants conversion enabled.",
+       "variantname-crh-cyrl": "{{optional}}\nVariant Option for wikis with variants conversion enabled.",
        "metadata": "The title of a section on an image description page, with information and data about the image. For example of message in use see [[commons:File:Titan-crystal_bar.JPG|Commons]].\n{{Identical|Metadata}}",
        "metadata-help": "This message is followed by a table with metadata.",
        "metadata-expand": "On an image description page, there is mostly a table containing data (metadata) about the image. The most important data are shown, but if you click on this link, you can see more data and information. For the link to hide back the less important data, see {{msg-mw|Metadata-collapse}}.",
index 81cc44d..8212a88 100644 (file)
        "nosuchusershort": "Non ge ste nisciune utende cu 'u nome \"$1\".\nCondrolle accume l'è scritte.",
        "nouserspecified": "A scrivere pe forze 'u nome de l'utende.",
        "login-userblocked": "Stu utende jè bloccate. Non ge puè trasè.",
-       "wrongpassword": "E mise 'na passuor sbagliete.\nPrueve n'otra vote.",
+       "wrongpassword": "Nome utende o passuord sbagliate.\nPrueve n'otra vote.",
        "wrongpasswordempty": "'A passuord 'nzerite jè vianghe.\nMitta n'otra vota.",
        "passwordtooshort": "Le password onne a essere almene {{PLURAL:$1|1 carattere|$1 carattere}}.",
        "passwordtoolong": "Le password non ge ponne essere cchiù longhe de {{PLURAL:$1|1 carattere}}.",
        "mergehistory-fail-bad-timestamp": "L'orarie de stambe non g'è valide.",
        "mergehistory-fail-invalid-source": "'A pàgene de origgene non g'è valide.",
        "mergehistory-fail-invalid-dest": "'A pàgene de destinazione non g'è valide.",
+       "mergehistory-fail-permission": "Permesse insufficiende pe aunì le cunde.",
+       "mergehistory-fail-self-merge": "Le pàggene de origgene e destinazione sò le stesse.",
        "mergehistory-fail-toobig": "Non ge pozze combletà 'u scuagghiamende s'u cunde purcé supranesce 'u limite de $1 {{PLURAL:$1|revisione|revisiune}} ca onna essere spustate.",
        "mergehistory-no-source": "'A pàgena sorgende $1 non g'esiste.",
        "mergehistory-no-destination": "'A pàgene de destinazione $1 non g'esiste.",
        "rcfilters-filter-minor-label": "Cangiaminde stuèdeche",
        "rcfilters-filter-watchlist-watched-label": "Jndr'à le pàggene condrollate",
        "rcfilters-filter-watchlist-notwatched-label": "Fore da le pàggene condrollate",
+       "rcfilters-filter-watchlistactivity-unseen-label": "Cangiaminde ca non g'è 'ndrucate",
+       "rcfilters-filter-watchlistactivity-seen-label": "Cangiaminde 'ndrucate",
        "rcfilters-filtergroup-changetype": "Tipe de cangiamende",
        "rcfilters-filter-pageedits-label": "Cangiaminde d'a pàgene",
        "rcfilters-filtergroup-lastRevision": "Urteme revisiune",
index 96a41e3..b8c6fda 100644 (file)
        "nosuchusershort": "Не существует участника с именем «$1». Проверьте написание имени.",
        "nouserspecified": "Вы должны указать имя участника.",
        "login-userblocked": "Участник заблокирован. Вход в систему запрещен.",
-       "wrongpassword": "Введённый вами пароль неверен. Попробуйте ещё раз.",
+       "wrongpassword": "Введены неверные имя участника или пароль.\nПопробуйте ещё раз.",
        "wrongpasswordempty": "Пожалуйста, введите непустой пароль.",
        "passwordtooshort": "Пароль должен состоять не менее, чем из $1 {{PLURAL:$1|1=символа|символов}}.",
        "passwordtoolong": "Пароль не может содержать более {{PLURAL:$1|1=$1 символа|$1 символов}}.",
        "uploadstash-bad-path-invalid": "Путь некорректен.",
        "uploadstash-bad-path-unknown-type": "Неизвестный тип «$1».",
        "uploadstash-file-not-found-no-thumb": "Не удалось получить миниатюру.",
+       "uploadstash-file-not-found-missing-content-type": "Отсутствует заголовок content-type.",
+       "uploadstash-wrong-owner": "Этот файл ($1) не принадлежит текущему участнику.",
        "uploadstash-zero-length": "Файл нулевой длины.",
        "invalid-chunk-offset": "Недопустимое смещение фрагмента",
        "img-auth-accessdenied": "Доступ запрещён",
index 41fe87e..779b1d2 100644 (file)
        "category-file-count-limited": "Latar reaḱ {{PLURAL:$1 rẽt rẽtko}} noa rokom sokomre menaḱa.",
        "listingcontinuesabbrev": "Calaḱa",
        "index-category": "Unuduḱ sakam ko do bạnuḱa",
-       "noindex-category": "Unuduḱ sakamkodo bạnuḱa",
+       "noindex-category": "ᱩᱱᱩᱫᱩᱜ ᱵᱟᱹᱱᱩᱜ-ᱟᱱ ᱥᱟᱦᱴᱟᱠᱚ",
        "broken-file-category": "Baṅ kạmi daṛeaḱ chubi joṛao soho sakamko",
        "about": "Lạgitte, Lạgti",
        "article": "Menaḱakat́ sakam",
        "userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" ńutuman jahãe beoharićaḱ ekaunṭ do baṅ resṭri hoeakana. Daya kate biḍạo katet́ ńelmẽ noa sakam do benoa/sompadonem menet́ kana se baṅ.",
        "userpage-userdoesnotexist-view": "Beoharićaḱ \"$1\" ekaunṭ do baṅ resṭire akana.",
        "blocked-notice-logextract": "Nui beoharić do nitoḱe esetgea.\nRefarens lạgit́te nahaḱ boloḱ do latare em hoena:",
+       "clearyourcache": "<strong>Note:</strong> After saving, you may have to bypass your browser's cache to see the changes.\n* <strong>Firefox / Safari:</strong> Hold <em>Shift</em> while clicking <em>Reload</em>, or press either <em>Ctrl-F5</em> or <em>Ctrl-R</em> (<em>⌘-R</em> on a Mac)\n* <strong>Google Chrome:</strong> Press <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> on a Mac)\n* <strong>Internet Explorer:</strong> Hold <em>Ctrl</em> while clicking <em>Refresh</em>, or press <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Go to <em>Menu → Settings</em> (<em>Opera → Preferences</em> on a Mac) and then to <em>Privacy & security → Clear browsing data → Cached images and files</em>.",
        "updated": "(Halot ruaṛ)",
        "note": "'''Noṭ:'''",
        "previewnote": "'''kheyalmẽ, noa do eken ńeloḱ lạgit.'''\nAmaḱ bodolaḱ kodo nit habićte bań rukhíạakana!",
        "nocreate-loggedin": "Nãwã sakam tear lạgit́te am do ạidạri em baṅ hoeakana.",
        "sectioneditnotsupported-title": "Pahaṭa sompadona do bae hataoeda",
        "sectioneditnotsupported-text": "Noa sompadona sakamre pahaṭa sompadona do bae hataoeda",
-       "permissionserrors": "Ạidạri vulko",
+       "permissionserrors": "á±\9fᱹᱭᱫá±\9fᱹᱨᱤ á±¦á±©á±²á±\9fá±¹á±\9c",
        "permissionserrorstext": "Noa kạmi amaḱ ạidạri do banuḱa, {{PLURAL:$1 gan karon reaḱ gan karon reaḱ}} lạgit:",
        "permissionserrorstext-withaction": "Amaḱ $2 kạmire ạydạri do bạnuḱa, Ona reaḱ {{PLURAL:$1 Karon/ Karonko}}:",
        "recreate-moveddeleted-warn": "'''Sontorokme: am do arhõ doṛhate sakamem teyareda oka do sedayre get giḍiyen.\nAm do gunạnme cet́ noa joṛao kạmi am lạgit́te ganoḱ ase bań.\nNoa get ar tala ocok sakam nonḍe em hoyena dhok lagit́te.",
        "right-move-subpages": "Sakam saõte kạtic sakamko ocogmẽ",
        "right-movefile": "Rẽtko ocogmẽ",
        "right-upload": "Rẽtko rakabmẽ",
-       "right-writeapi": "write API ᱵᱮᱵᱦᱟᱨ",
+       "right-writeapi": "ᱚᱞ API ᱨᱮᱱᱟᱜ ᱵᱮᱵᱷᱟᱨ",
        "right-delete": "Sakamko get giḍiymẽ",
        "newuserlogpage": "Laṛcaṛićaḱ tear cạbi",
        "rightslog": "ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱟᱹᱭᱫᱟᱹᱨ ᱞᱚᱜᱽ",
        "emailmessage": "Mesag",
        "emailsend": "Kulmẽ",
        "usermessage-editor": "ᱥᱤᱥᱴᱚᱢ ᱨᱟᱭᱵᱟᱨ",
-       "watchlist": "Inak' n'el ko",
+       "watchlist": "ᱧᱮᱞᱟᱜ ᱞᱤᱥᱴᱤ",
        "mywatchlist": "Ńeloḱgoḱ tạlika",
        "watchlistfor2": "$1 ($2) lạ̣gitte",
        "watch": "Ńelme",
        "simpleantispam-label": "Enṭi espam ńel\nDo <strong>not</strong> noa purạome!",
        "pageinfo-title": "\"$1\" ᱞᱟᱹᱜᱤᱫ ᱥᱩᱪᱱᱟ",
        "pageinfo-header-basic": "ᱢᱩᱬ ᱥᱩᱪᱱᱟ",
-       "pageinfo-header-edits": "Toṅgeko",
+       "pageinfo-header-edits": "ᱥᱟᱯᱲᱟᱣ ᱱᱟᱜᱟᱢ",
        "pageinfo-header-restrictions": "ᱥᱟᱦᱴᱟ ᱵᱟᱧᱪᱟᱣ",
        "pageinfo-header-properties": "ᱥᱟᱦᱴᱟ ᱜᱩᱱᱠᱚ",
        "pageinfo-display-title": "ᱩᱫᱩᱜ ᱧᱩᱛᱩᱢ",
        "pageinfo-robot-policy": "ᱨᱚᱵᱚᱴ ᱫᱟᱨᱟᱭᱛᱮ ᱩᱱᱩᱫᱩᱜ",
        "pageinfo-robot-index": "ᱚᱪᱚᱣᱟᱜ",
        "pageinfo-robot-noindex": "ᱵᱟᱝᱚᱪᱚ",
-       "pageinfo-watchers": "Ńeńelkoaḱ nombor",
+       "pageinfo-watchers": "ᱥᱟᱦᱴᱟ ᱧᱮᱧᱮᱞᱤᱭᱟᱹ ᱠᱚᱣᱟᱜ ᱮᱞ",
        "pageinfo-few-watchers": "$1 ᱠᱷᱚᱱ ᱠᱚᱢ {{PLURAL:$1|ᱧᱮᱧᱮᱞᱤᱭᱟᱹ|ᱧᱮᱧᱮᱞᱤᱭᱟᱹᱠᱚ}}",
        "pageinfo-redirects-name": "ᱱᱚᱶᱟ ᱥᱟᱦᱴᱟᱛᱮ ᱢᱚᱸᱦᱰᱟᱜᱠᱟᱱ ᱮᱞ",
        "pageinfo-subpages-name": "ᱱᱚᱶᱟ ᱥᱟᱦᱴᱟ ᱨᱮᱱᱟᱜ ᱪᱟᱸᱜᱟ ᱥᱟᱦᱴᱟ ᱠᱚᱣᱟᱜ ᱮᱞ",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|galmarao]])",
        "duplicate-defaultsort": "'''Sontoroḱmẽ:''' ḍifolṭ sajao reaḱ cạbi: $2 lahare ḍifolṭ sajao reaḱ sakam: ''$1'' e bae luturaḱ kana.",
        "redirect": "ᱨᱮᱫ, ᱵᱮᱵᱷᱟᱨᱩᱭᱟᱹ, ᱥᱟᱦᱴᱟ, ᱧᱮᱞ-ᱟᱹᱨᱩ, ᱵᱟᱝᱠᱷᱟᱱ ᱞᱚᱜᱽ ID ᱫᱟᱨᱟᱭᱛᱮ ᱢᱚᱦᱰᱟ",
+       "redirect-summary": "ᱱᱚᱶᱟ ᱥᱟᱦᱴᱟ ᱫᱚ ᱢᱚᱦᱰᱟ ᱟ ᱢᱤᱫ ᱨᱮᱫ (ᱮᱢᱟᱠᱟᱱ ᱨᱮᱫᱧᱩᱛᱩᱢ) ᱴᱷᱮᱱ, ᱢᱤᱫ ᱥᱟᱦᱴᱟ (ᱮᱢᱮᱱ ᱟᱹᱨᱩᱣᱟᱜ ID ᱟᱨᱵᱟᱝ ᱥᱟᱦᱴᱟ ID),  ᱢᱤᱫ ᱵᱮᱵᱷᱟᱨᱩᱭᱟᱹ ᱥᱟᱦᱴᱟ (ᱮᱢᱮᱱ ᱮᱞᱩᱠ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ID ), ᱟᱨᱵᱟᱝ ᱢᱤᱫ ᱞᱚᱜᱽ ᱵᱚᱞᱚ (ᱮᱢᱮᱱ ᱞᱚᱜᱽ ID) ᱾ ᱵᱮᱵᱷᱟᱨᱟᱠᱟᱱ: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], ᱟᱨᱵᱟᱝ [[{{#Special:Redirect}}/logid/186]]",
        "redirect-submit": "ᱥᱮᱱᱚᱜ",
        "redirect-lookup": "ᱧᱮᱞᱢᱮ",
        "redirect-value": "ᱫᱟᱢ:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ᱥᱟᱛᱚᱢ|ᱥᱟᱛᱚᱢᱠᱩ}}]]: $2)",
        "tags-active-yes": "ᱦᱮᱸ",
        "tags-active-no": "ᱵᱟᱝ",
+       "tags-hitcount": "$1 {{PLURAL:$1|ᱟᱹᱨᱩ|ᱟᱹᱨᱩᱠᱚ}}",
        "logentry-delete-delete": "$3 ᱥᱟᱦᱴᱟ $1 {{GENDER:$2|ᱜᱮᱫ ᱠᱮᱜ-ᱟᱭ}}",
        "logentry-delete-restore": "$1 {{GENDER:$2|ᱨᱟᱠᱷᱟ ᱫᱚᱲᱦᱟ}} ᱠᱮᱜ-ᱟ ᱥᱟᱦᱴᱟ $3 ($4)",
        "logentry-delete-revision": "$1 {{GENDER:$2|ᱵᱚᱫᱚᱞᱠᱮᱜ-ᱟᱭ}} ᱧᱮᱞᱚᱜᱟᱜ {{PLURAL:$5|ᱫᱚᱦᱲᱟᱭᱮᱱᱟᱜ|$5 ᱫᱚᱦᱲᱟᱭᱮᱱᱟᱜ ᱠᱚ}} $3: $4 ᱥᱟᱦᱴᱟ ᱪᱮᱛᱟᱱᱨᱮ",
        "logentry-move-move": "$1 beoharić $3 sakam do $4 ńutumre {{GENDER:$2|ạcạr}} akada",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|ᱩᱪᱟᱹᱲᱠᱮᱜ-ᱟᱭ}} ᱥᱟᱦᱴᱟ $3 to $4 ᱢᱚᱦᱰᱟ ᱵᱤᱱ ᱵᱟᱹᱜᱤ ᱠᱟᱛᱮ",
        "logentry-move-move_redir": "$1 {{GENDER:$2|ᱩᱪᱟᱹᱲᱮᱱᱟ}} ᱥᱟᱦᱴᱟ $3 ᱠᱷᱚᱱ $4 ᱪᱮᱛᱟᱱ ᱢᱚᱸᱦᱰᱟ ᱦᱟᱠᱟᱱᱟ",
+       "logentry-patrol-patrol-auto": "$1 ᱟᱡᱛᱮᱜᱮ {{GENDER:$2|ᱪᱤᱱᱦᱟᱹᱭᱮᱱᱟ}} $4 ᱧᱮᱞᱟᱹᱨᱩ $3 ᱥᱟᱦᱴᱟ ᱨᱮᱱᱟᱜ ᱾",
        "logentry-newusers-create": "Beoharićaḱ hisạb khata $1 do jhićena",
        "logentry-newusers-autocreate": "ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱠᱷᱟᱛᱟ $1 ᱫᱚ {{GENDER:$2|ᱛᱮᱭᱟᱨᱮᱱᱟ}} ᱟᱡᱛᱮᱜᱮ",
        "logentry-upload-upload": "$1 {{GENDER:$2|rakaṕ akadae}} $3",
index 37981db..0f36f45 100644 (file)
        "diff-multi-sameuser": "({{PLURAL:$1|1=Vmesna redakcija|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} istega uporabnika {{PLURAL:$1|ni prikazana|nista prikazani|niso prikazane|ni prikazanih}})",
        "diff-multi-otherusers": "({{PLURAL:$1|1=Vmesna redakcija|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} {{PLURAL:$2|1=drugega uporabnika|$2 uporabnikov}} {{PLURAL:$1|ni prikazana|nista prikazani|niso prikazane|ni prikazanih}})",
        "diff-multi-manyusers": "({{PLURAL:$1|$1 vmesna redakcija|$1 vmesni redakciji|$1 vmesne redakcije|$1 vmesnih redakcij}} več kot $2 {{PLURAL:$2|uporabnika|uporabnikov}} {{PLURAL:$1|ni prikazana|nista prikazani|niso prikazane|ni prikazanih}})",
+       "diff-paragraph-moved-tonew": "Odstavek je premaknjen. Kliknite, da skočite na novo nahajališče.",
+       "diff-paragraph-moved-toold": "Odstavek je bil premaknjen. Kliknite, da skočite na staro nahajališče.",
        "difference-missing-revision": "{{PLURAL:$2|Ene redakcije|$2 redakcij}} razlike ($1) {{PLURAL:$2|nisem}} našel.\n\nPo navadi se to zgodi, ko sledite zastareli povezavi na razliko redakcij strani, ki jo je nekdo izbrisal.\nPodrobnosti lahko najdete v [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} dnevniku brisanja].",
        "searchresults": "Izid iskanja",
        "searchresults-title": "Zadetki za povpraševanje »$1«",
index c6cdb44..85f314e 100644 (file)
        "rcfilters-liveupdates-button-title-on": "Искључи ажурирања уживо",
        "rcfilters-liveupdates-button-title-off": "Прикажи нове измене уживо",
        "rcfilters-watchlist-markseen-button": "Означи све измене као виђене",
-       "rcfilters-watchlist-edit-watchlist-button": "Промените Вашу списак надгледаних страница",
+       "rcfilters-watchlist-edit-watchlist-button": "Промените Ваш списак надгледаних страница",
        "rcfilters-watchlist-showupdated": "Измене на страницама које нисте посетили од када је измена извршена су <strong>подебљане</strong>, са испуњеним ознакама.",
        "rcfilters-preference-label": "Сакриј побољшану верзију скорашњих измена",
        "rcfilters-preference-help": "Поништава редизајн интерфејса из 2017. и све алатке додате тада и после.",
index 0a647ad..c26c5e0 100644 (file)
        "nosuchusershort": "Det finns ingen användare som heter \"$1\". Kontrollera att du stavat rätt.",
        "nouserspecified": "Du måste ange ett användarnamn.",
        "login-userblocked": "Denna användare är blockerad. Inloggning är inte tillåtet.",
-       "wrongpassword": "Lösenordet du angav är felaktigt. Försök igen.",
+       "wrongpassword": "Användarnamnet eller lösenordet du angav är felaktigt.\nFörsök igen.",
        "wrongpasswordempty": "Lösenordet som angavs var tomt. Var god försök igen.",
        "passwordtooshort": "Lösenord måste innehålla minst {{PLURAL:$1|$1 tecken}}.",
        "passwordtoolong": "Lösenord kan inte vara längre än {{PLURAL:$1|1 tecken|$1 tecken}}.",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Skapa standardfilter",
        "rcfilters-savedqueries-cancel-label": "Avbryt",
        "rcfilters-savedqueries-add-new-title": "Spara filterinställningar",
-       "rcfilters-savedqueries-already-saved": "Dessa filter har redan sparats",
+       "rcfilters-savedqueries-already-saved": "Dessa filter har redan sparats. Ändra dina inställningar för att skapa ett nytt sparat filter.",
        "rcfilters-restore-default-filters": "Återställ standardfilter",
        "rcfilters-clear-all-filters": "Rensa alla filter",
        "rcfilters-show-new-changes": "Visa de nyaste ändringarna",
        "uploadstash-file-not-found-no-object": "Kunde inte skapa lokalt filobjekt för miniatyr.",
        "uploadstash-file-not-found-no-remote-thumb": "Misslyckades att hämta miniatyrbild: $1\nURL = $2",
        "uploadstash-file-not-found-missing-content-type": "Header för content-type saknas.",
-       "uploadstash-file-not-found-not-exists": "Kan inte hitta sökvägen eller filen består inte av ren text.",
+       "uploadstash-file-not-found-not-exists": "Kan inte hitta sökvägen eller filen.",
        "uploadstash-file-too-large": "Kan inte behandla en fil som är större än $1 byte.",
        "uploadstash-not-logged-in": "Ingen användare är inloggad, filer måste tillhöra användare.",
        "uploadstash-wrong-owner": "Denna fil ($1) tillhör inte aktuell användare.",
        "exif-compression-6": "JPEG (gammal)",
        "exif-copyrighted-true": "Upphovsrättsskyddat",
        "exif-copyrighted-false": "Upphovsrättsstatus inte angivet",
+       "exif-photometricinterpretation-0": "Svartvitt (vit är 0)",
        "exif-photometricinterpretation-1": "Svart och vit (svart är 0)",
        "exif-unknowndate": "Okänt datum",
        "exif-orientation-1": "Normal",
        "version-entrypoints": "Startpunkts-URL:er",
        "version-entrypoints-header-entrypoint": "Startpunkt",
        "version-entrypoints-header-url": "URL",
+       "version-entrypoints-articlepath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgArticlePath Artikelsökväg]",
+       "version-entrypoints-scriptpath": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgScriptPath Skriptsökväg]",
        "version-libraries": "Installerade bibliotek",
        "version-libraries-library": "Bibliotek",
        "version-libraries-version": "Version",
index d759fbe..22d93f5 100644 (file)
        "underline-never": "எப்போதுமில்லை",
        "underline-default": "தோல் அல்லது உலாவி இயல்பிருப்பு",
        "editfont-style": "தொகுத்தல் பெட்டி எழுத்துரு:",
-       "editfont-default": "உலாவி இயல்பிருப்பு",
        "editfont-monospace": "சீரான இடைவெளிகொண்ட எழுத்துரு",
        "editfont-sansserif": "சேன்சு-செரீஃப் எழுத்துரு",
        "editfont-serif": "செரிஃப் எழுத்துரு",
        "anontalk": "பேச்சு",
        "navigation": "வழிசெலுத்தல்",
        "and": " மற்றும்",
-       "qbfind": "கண்டுபிடி",
-       "qbbrowse": "உலவு",
-       "qbedit": "தொகு",
-       "qbpageoptions": "பக்க விருப்பத் தேர்வுகள்",
-       "qbmyoptions": "என் விருப்பத்தேர்வுகள்",
        "faq": "அடிக்கடி கேட்கப்படும் கேள்விகள்",
-       "faqpage": "Project:அடிக்கடி கேட்கப்படும் கேள்விகள்",
        "actions": "செயல்கள்",
        "namespaces": "பெயர்வெளிகள்",
        "variants": "மாற்றுக்கள்\n\nமாற்றுருவங்கள்",
        "edit-local": "தன்விவரத்தை திருத்து",
        "create": "உருவாக்கு",
        "create-local": "தன்னிட விளக்கத்தை சேர்",
-       "editthispage": "இப்பக்கத்தைத் தொகு",
-       "create-this-page": "இப்பக்கத்தை உருவாக்கு",
        "delete": "நீக்கவும்",
-       "deletethispage": "இப்பக்கத்தை நீக்கு",
-       "undeletethispage": "அழித்த பக்கத்தை மறுபடியும் கொண்டு வா",
        "undelete_short": "{{PLURAL:$1|ஒரு தொகுப்பை|$1 தொகுப்புக்களை}} மீட்டெடு",
        "viewdeleted_short": "{{PLURAL:$1|ஒரு நீக்கப்பட்ட தொகுப்பை|$1 நீக்கப்பட்ட தொகுப்புகளை}}  பார்.",
        "protect": "காக்கவும்",
        "protect_change": "மாற்று",
-       "protectthispage": "இப்பக்கத்தைக் காக்கவும்",
        "unprotect": "காப்பை மாற்று",
-       "unprotectthispage": "இப்பக்கத்தின் காப்பை மாற்று",
        "newpage": "புதிய பக்கம்",
-       "talkpage": "இப்பக்கம்பற்றிக் கலந்துரையாடு",
        "talkpagelinktext": "பேச்சு",
        "specialpage": "சிறப்புப் பக்கம்",
        "personaltools": "தனிப்பட்ட பயன்பாட்டுக் கருவிகள்",
-       "articlepage": "உள்ளடக்கப் பக்கத்தைப் பார்",
        "talk": "உரையாடல்",
        "views": "பார்வைகள்",
        "toolbox": "கருவிகள்",
-       "userpage": "பயனர் பக்கத்தைப் பார்",
-       "projectpage": "திட்டப் பக்கத்தைப் பார்",
        "imagepage": "கோப்புப் பக்கத்தை நோக்க",
        "mediawikipage": "தகவல் பக்கத்தைப் பார்",
        "templatepage": "வார்ப்புரு பக்கத்தைப் பார்",
        "explainconflict": "நீங்கள் தொகுக்கத் தொடங்கியதின் பின்னர் வேறு பயனரொருவர் இப் பக்கத்தில் மாற்றங்கள்ச் செய்துள்ளார்.\nஉரைப் பகுதியின்  மேற்பக்கம் தற்போதுள்ள உரைகளைக் கொண்டிருகிறது.\nநீங்கள் செய்த மாற்றங்கள் உரையின் கீழே தரப்பட்டுள்ளன.\nநீங்கள் உங்களுடைய மாற்றங்களை ஏற்கெனவேயிருக்கும் உரையுடன் ஒருங்கிணைக்க வேண்டியிருக்கும்.\n\"$1\" என்ற பொத்தானை அழுத்தும்போது உரைப்பகுதியின் மேற்பக்கத்திலுள்ள உரை '''மட்டுமே''' சேமிக்கப்படும்.",
        "yourtext": "உங்கள் உரை",
        "storedversion": "சேமிக்கப்பட்ட பதிப்பு",
-       "nonunicodebrowser": "'''எச்சரிக்கை: உங்களது உலாவி ஒருங்குக்குறியை ஆதரிக்கவில்லை. உங்கள் தொகுப்புக்களைத் பாதுகாப்பகத் தொடர்ந்துச் செய்ய வழிமுறையொன்றுள்ளது: அஸ்கியில்லாத எழுத்துகள் அடி பதினாறைக் கொண்ட குறிகளாக தொகுப்புக் கட்டத்தில் தென்படும்.'''",
        "editingold": "'''எச்சரிக்கை: நீங்கள் தொகுத்துக்கொண்டிருப்பது இப்பக்கத்தின் பழைய திருத்தமொன்றையாகும். இதை நீங்கள் சேமித்தால், மேற்படி திருத்தத்தின் பின்னர் செய்யப்பட்ட மாற்றங்கள் அனைத்தும் இழக்கப்படும்.'''",
        "yourdiff": "வேறுபாடுகள்",
        "copyrightwarning": "{{SITENAME}} தளத்தில் உங்கள் பங்களிப்புகள் $2 உரிமத்தின் கீழ் அளிக்கப்பட்டதாக கருதப்படும்.(மேலதிக தகவல்களுக்கு $1 பக்கத்தைப் பார்க்க) உங்களுடைய எழுத்துக்கள் கடுமையாகத் தொகுக்கப்படுவதையோ, விரும்பியபடி பகிரப்படுவதையோ நீங்கள் விரும்பாவிடில் இங்கே சமர்ப்பிக்காதீர்.<br />\nஅத்துடன் நீங்களே இதை எழுதியதாகவோ, அல்லது வேறு பொதுக் களம் அல்லது அது போன்ற விடுதலையளிக்கும் மூலங்களிலிருந்து பிரதி பண்ணியிருப்பதாகவோ உறுதி கூறுகிறீர்கள்.\n'''பதிப்புரிமையுள்ள ஆக்கங்களை அனுமதியின்றி சமர்ப்பிக்க வேண்டாம்!'''",
        "last": "முந்திய",
        "page_first": "முதல்",
        "page_last": "கடைசி",
-       "histlegend": "வà¯\87à®±à¯\81பாà®\9fà¯\8dà®\9fà¯\88à®\95à¯\8d à®\95ாண à®µà¯\87ணà¯\8dà®\9fிய à®\87ரணà¯\8dà®\9fà¯\81 à®ªà®¤à¯\8dதிபà¯\8dபà¯\81à®\95à¯\8dà®\95ளà¯\88 à®¤à¯\86ரிவà¯\81à®\9aà¯\8d செய்து கீழுள்ள பொத்தானை அழுத்தவும்.<br />\nகுறியீட்டு விளக்கம்: (நடப்பு) = நடைமுறையிலுள்ள பதிப்புடனான வேறுபாடு,\n(கடைசி) = முந்திய பதிப்புடனான வேறுபாடு, சி = சிறு தொகுப்பு",
+       "histlegend": "வà¯\87à®±à¯\81பாà®\9fà¯\8dà®\9fà¯\88à®\95à¯\8d à®\95ாண à®µà¯\87ணà¯\8dà®\9fிய à®\87ரணà¯\8dà®\9fà¯\81 à®ªà®¤à®¿à®ªà¯\8dபà¯\81à®\95ளà¯\88தà¯\8d à®¤à¯\86ரிவà¯\81 செய்து கீழுள்ள பொத்தானை அழுத்தவும்.<br />\nகுறியீட்டு விளக்கம்: (நடப்பு) = நடைமுறையிலுள்ள பதிப்புடனான வேறுபாடு,\n(கடைசி) = முந்திய பதிப்புடனான வேறுபாடு, சி = சிறு தொகுப்பு",
        "history-fieldset-title": "வரலாற்றில் தேடவும்",
        "history-show-deleted": "நீக்கப்பட்டவை மட்டும்",
        "histfirst": "மிகப் பழைய",
        "mergehistory-from": "மூலப் பக்கம்:",
        "mergehistory-into": "இலக்குப் பக்கம்:",
        "mergehistory-list": "இணைக்கபடக்கூடிய தொகுப்பு வரலாறு",
-       "mergehistory-merge": "[[:$1]] பக்கத்துக்கான பின்வரும் திருத்தங்கள் [[:$2]] பக்கத்துக்கு இணைக்கப்பட முடியும். ரேடியோ பொத்தான் நிரலைப் பயன்படுத்தி ஒரு குறித்த நேரம் உட்பட அதற்கு முன்னர் செய்யப்பட்ட திருத்தங்களைத் தெரிவுச் செய்யலாம். இணைப்புகளைப் பயன்படுத்தல் இந்நிரலை இயல்பிருப்பு நிலைக்கு மீட்டமைக்கும்.",
+       "mergehistory-merge": "[[:$1]] பக்கத்துக்கான பின்வரும் திருத்தங்கள் [[:$2]] பக்கத்துக்கு இணைக்கப்பட முடியும். ரேடியோ பொத்தான் நிரலைப் பயன்படுத்தி ஒரு குறித்த நேரம் உட்பட அதற்கு முன்னர் செய்யப்பட்ட திருத்தங்களைத் தெரிவு செய்யலாம். இணைப்புகளைப் பயன்படுத்தல் இந்நிரலை இயல்பிருப்பு நிலைக்கு மீட்டமைக்கும்.",
        "mergehistory-go": "இணைக்கப்படக் கூடிய தொகுப்புக்களைக் காட்டு",
        "mergehistory-submit": "திருத்தங்களை இணை",
        "mergehistory-empty": "இணைக்கப்படக்கூடிய திருத்தங்கள் எதுவுமில்லை.",
        "rcfilters-filterlist-title": "வடிப்பான்கள்",
        "rcfilters-highlightmenu-title": "ஒரு நிறத்தை தேர்ந்தெடுக்கவும்",
        "rcfilters-filterlist-noresults": "எந்த வடிப்பானும் காணப்படவில்லை",
-       "rcfilters-filtergroup-registration": "பயனர் பதிகை",
-       "rcfilters-filter-registered-label": "பதிவுசெய்யப்பட்டது",
-       "rcfilters-filter-unregistered-label": "பதிவு நீக்கம் செய்யப்பட்டது",
        "rcfilters-filter-editsbyself-label": "தங்களின் சொந்த தொகுப்புகள்",
        "rcfilters-filter-editsbyself-description": "தங்களது தொகுப்புகள்.",
        "rcfilters-filter-editsbyother-label": "மற்றவர் தொகுப்புகள்",
+       "rcfilters-filter-user-experience-level-registered-label": "பதிவுசெய்யப்பட்டது",
+       "rcfilters-filter-user-experience-level-unregistered-label": "பதிவு நீக்கம் செய்யப்பட்டது",
        "rcfilters-filter-user-experience-level-newcomer-label": "புது வரவுகள்",
        "rcfilters-filter-user-experience-level-learner-label": "கற்போர்",
        "rcfilters-filter-user-experience-level-experienced-label": "அனுபவமுள்ள பயனர்கள்",
        "upload-curl-error28-text": "இத்தளம் பதில் கொடுக்க நீண்ட நேரம் எடுத்தது. அருள் கூர்ந்து இணையத் தளம் செயல்படுகிறதா என்பதை பார்த்து மீண்டும் முயல்க. அல்லது இணைய நெரிசல் குறைவான நேரத்தில் முயலவும்",
        "license": "அனுமதி:",
        "license-header": "அனுமதி",
-       "nolicense": "தெரிவுச் செய்யப்படவில்லை",
+       "nolicense": "தெரிவு செய்யப்படவில்லை",
        "licenses-edit": "உரிம விருப்பங்களைத் திருத்து",
        "license-nopreview": "(முன்தோற்றம் கையிலிருப்பில் இல்லை)",
        "upload_source_url": " (நீங்கள் தெரிவு செய்த, பொதுவில் அணுக்கூடிய செல்லத்தக்க இணைய முகவரியில் உள்ள கோப்பு)",
        "block": "பயனரைத் தடைசெய்",
        "unblock": "பயனர் தடையை நீக்கு",
        "blockip": "தடுக்கவும் {{GENDER:$1|பயனர்}}",
-       "blockip-legend": "பயனரைத் தடு",
        "blockiptext": "ஒரு குறிப்பிட்ட ஐபி முகவரி அல்லது பயனரிடமிருந்து எழுத்து அணுக்கத்தைத் தடுப்பதற்குக் கீழேயுள்ள படிவத்தை உபயோகிக்கவும். இது விசமத்தனத்தைத் தடுப்பதற்கும் [[{{MediaWiki:Policy-url}}|{{SITENAME}} கொள்கை]]க்கு எற்புடைய வகையிலும் மட்டுமே பயன்படுத்தப்பட வேண்டும்.\nகுறிப்பிட்ட காரணமொன்றைக் கீழே நிரப்புக (எடுத்துக்காட்டாக, விசமத்தனம் செய்யப்பட்ட பக்கங்களை எடுத்துக் காட்டவும்).",
        "ipaddressorusername": "ஐ.பி. அல்லது பயனர் பெயர்:",
        "ipbexpiry": "காலாவதி:",
        "thumbnail_image-missing": "$1 கோப்பு காணாமல் போயிருக்கலாம் என தெரிகிறது.",
        "import": "பக்கங்களை இறக்கு",
        "importinterwiki": "மற்றொரு விக்கியில் இருந்து இறக்கு",
-       "import-interwiki-text": "à®\87à®±à®\95à¯\8dà®\95à¯\81மதிà®\95à¯\8dà®\95ான à®µà®¿à®\95à¯\8dà®\95ியà¯\88யà¯\81à®®à¯\8d à®ªà®\95à¯\8dà®\95தà¯\8dதà¯\88யà¯\81à®®à¯\8d à®¤à¯\86ரிவà¯\81à®\9aà¯\8d à®\9aà¯\86யà¯\8dà®\95.\nதிரà¯\81தà¯\8dத à®¨à®¾à®\9fà¯\8dà®\95ளà¯\8d, à®¤à¯\8aà®\95à¯\81தà¯\8dதவரà¯\8dà®\95ளினà¯\8d à®ªà¯\86யரà¯\8dà®\95ளà¯\8d à®\8eனà¯\8dபன à®ªà¯\87னபà¯\8dபà®\9fà¯\81à®®à¯\8d.\nà®\8eலà¯\8dலா à®µà®¿à®\95à¯\8dà®\95ியிà®\9fà¯\88 à®\87à®±à®\95à¯\8dà®\95à¯\81மதிà®\95ளà¯\81à®®à¯\8d [[Special:Log/import|à®\87à®±à®\95à¯\8dà®\95à¯\81மதிப் பதிகையில்]] பதியப்படும்.",
+       "import-interwiki-text": "தரவிறà®\95à¯\8dà®\95à¯\81வதறà¯\8dà®\95ான à®µà®¿à®\95à¯\8dà®\95ியà¯\88யà¯\81à®®à¯\8d à®ªà®\95à¯\8dà®\95தà¯\8dதà¯\88யà¯\81à®®à¯\8d à®¤à¯\86ரிவà¯\81 à®\9aà¯\86யà¯\8dà®\95.\nதிரà¯\81தà¯\8dத à®¨à®¾à®\9fà¯\8dà®\95ளà¯\8d, à®¤à¯\8aà®\95à¯\81தà¯\8dதவரà¯\8dà®\95ளினà¯\8d à®ªà¯\86யரà¯\8dà®\95ளà¯\8d à®\8eனà¯\8dபன à®ªà¯\87ணபà¯\8dபà®\9fà¯\81à®®à¯\8d.\nà®\8eலà¯\8dலா à®µà®¿à®\95à¯\8dà®\95ியிà®\9fà¯\88 à®¤à®°à®µà®¿à®±à®\95à¯\8dà®\95à®\99à¯\8dà®\95ளà¯\81à®®à¯\8d [[Special:Log/import|தரவிறà®\95à¯\8dà®\95à¯\81ப் பதிகையில்]] பதியப்படும்.",
        "import-interwiki-sourcewiki": "மூல விக்கி:",
        "import-interwiki-sourcepage": "மூலப் பக்கம்:",
        "import-interwiki-history": "இப்பக்கத்தின் அனைத்து வரலாற்றுப் பதிப்புகளையும் நகலெடு",
        "fileduplicatesearch-noresults": "\"$1\" என்ற பெயர் கொண்ட கோப்பு எதுவும் காணப்படவில்லை.",
        "specialpages": "சிறப்புப் பக்கங்கள்",
        "specialpages-note-top": "உள்பட்டியல்",
-       "specialpages-note": " * சராசரி சிறப்புப் பக்கங்கள்.\n * <span class=\"mw-specialpagerestricted\">வரையறுக்கப்பட்ட சிறப்புப் பக்கங்கள்.</span>",
        "specialpages-group-maintenance": "பராமரிப்பு அறிக்கைகள்",
        "specialpages-group-other": "ஏனைய சிறப்புப் பக்கங்கள்",
        "specialpages-group-login": "புகுபதிகை/பயனர் கணக்கு தொடக்கம்",
        "special-characters-title-endash": "சிறு கோடு",
        "special-characters-title-emdash": "பெரு கோடு",
        "special-characters-title-minus": "கழித்தல் குறி",
-       "mw-widgets-dateinput-no-date": "திகதி தெரிவுச் செய்யப்படவில்லை",
+       "mw-widgets-dateinput-no-date": "திகதி தெரிவு செய்யப்படவில்லை",
        "mw-widgets-mediasearch-noresults": "முடிவுகள் எதுவும் காணப்படவில்லை.",
        "mw-widgets-titleinput-description-new-page": "இப்பக்கம் இன்னும் உருவாக்கப்படவில்லை",
        "mw-widgets-titleinput-description-redirect": "$1-க்கு வழிமாற்று",
index 07c79e6..16cca85 100644 (file)
        "mytalk": "Usapan",
        "anontalk": "Usapan",
        "navigation": "Paglilibot",
-       "and": ",&#32;at",
+       "and": "&#32;at",
        "faq": "Mga malilimit itanong",
        "actions": "Mga kilos",
        "namespaces": "Mga ngalan-espasyo",
        "edithelp": "Tulong sa pagbabago",
        "helppage-top-gethelp": "Tulong",
        "mainpage": "Unang Pahina",
-       "mainpage-description": "Unang Pahina",
+       "mainpage-description": "Unang pahina",
        "policy-url": "Project:Patakaran",
        "portal": "Puntahan ng pamayanan",
        "portal-url": "Project:Puntahan ng pamayanan",
index 27fd78b..b627abc 100644 (file)
        "period-am": "صبح",
        "period-pm": "شام",
        "pagecategories": "{{PLURAL:$1|زمرہ|زمرہ جات}}",
-       "category_header": "زمرہ \"$1\" میں صفحات",
+       "category_header": "زمرہ «$1» میں صفحات",
        "subcategories": "ذیلی زمرہ جات",
        "category-media-header": "زمرہ \"$1\" میں میڈیا",
        "category-empty": "<em>اس زمرہ میں ابھی کوئی صفحہ یا میڈیا موجود نہیں ہے۔</em>",
        "site-rss-feed": "$1 آر.ایس.ایس فیڈ",
        "site-atom-feed": "$1 اٹوم فیڈ",
        "page-rss-feed": "\"$1\" آر.ایس.ایس فیڈ",
-       "page-atom-feed": "\"$1\" اٹوم خورد",
+       "page-atom-feed": "اٹوم فیڈ برائے «$1»",
        "feed-atom": "اٹوم",
        "feed-rss": "آر ایس ایس",
        "red-link-title": "$1 (صفحہ موجود نہیں)",
        "nosuchusershort": "\"$1\" کے نام سے کوئی صارف موجود نہیں.\nاپنا ہجہ جانچئے.",
        "nouserspecified": "آپ کو ایک اسمِ صارف مخصوص کرنا ہے.",
        "login-userblocked": "اِس صارف پر پابندی ہے. داخلِ نوشتہ ہونے کی اجازت نہیں.",
-       "wrongpassword": "آپ نے غلط کلمۂ شناخت درج کیا ہے۔ دوبارہ کو شش کریں۔",
+       "wrongpassword": "آپ نے غلط پاس ورڈ یا صارف نام درج کیا ہے۔ براہ مہربانی دوبارہ کوشش کریں۔",
        "wrongpasswordempty": "کلمۂ شناخت ندارد۔ دوبارہ کوشش کریں۔",
        "passwordtooshort": "آپکا منتخب کردہ پارلفظ مختصر ہے. پارلفظ کم از کم {{PLURAL:$1|1 محرف|$1 محارف}} ہونا چاہئے.",
        "passwordtoolong": "خفیہ رمز (پاس ورڈ) {{PLURAL:$1|1 حرف|$1 حروف}} سے زیادہ طویل نہیں ہو سکتا۔",
        "botpasswords-label-delete": "حذف کریں",
        "botpasswords-label-resetpassword": "پاس ورڈ تبدیل کریں",
        "botpasswords-label-grants": "قابل تطبیق عطیے:",
+       "botpasswords-help-grants": "عطیہ آپ کو حقوق تک پہنچنے دیتا ہے، جو آپ کے کھاتے کے پاس پہلے سے ہے۔ عطیہ کو فعال کرنے سے کوئی حق فائز نہیں ہوگا، جو آپ کے کھاتے ميں نہ ہو۔ مزید معلومات کے لیے [[Special:ListGrants|فہرست عطیات]] دیکھیں۔",
        "botpasswords-label-grants-column": "دے دیا گیا",
        "botpasswords-bad-appid": "روبہ نام \"$1\" درست نہیں۔",
        "botpasswords-insert-failed": "روبہ نام \"$1\" کو شامل کرنے میں ناکامی۔ کیا اسے پہلے شامل کیا جا چکا ہے؟",
        "passwordreset-domain": "ساحہ:",
        "passwordreset-email": "برقی ڈاک پتہ:",
        "passwordreset-emailtitle": "{{SITENAME}} کھاتہ کی تفصیلات",
+       "passwordreset-emailtext-ip": "کسی نے (شاید آپ نے اپنی آئی پی پتے $1 سے) {{SITENAME}} ($4) کے لیے آپ کے پاسورڈ کو ری سیٹ کرنے کی درخواست دی ہے۔ ذیل میں موجود صارف {{PLURAL:$3|کھاتہ|کھاتے}} اس برقی پتے سے منسلک ہے:\n\n$2\n\n{{PLURAL:$3|یہ پاسورڈ|یہ پاسورڈز}} {{PLURAL:$5|ایک دن|$5 دنوں}} میں ایکسپائر {{PLURAL:$3|ہوجائے گا|ہوجائیں گے}}۔\n\nآپ کو لاگ ان ہوکر ایک نیا پاسورڈ منتخب کرنا چاہیے۔ اگر کسی اور نے یہ درخواست دی ہے، یا اگر آپ اپنا اصلی پاسورڈ جانتے ہیں، اور آپ اس کو تبدیل کرنے کی خواہش نہیں رکھتے تو آپ اس پیغام کو نظر انداز کر کے اپنے پرانے پاسورڈ کا ہی استعمال جاری رکھ سکتے ہیں۔",
+       "passwordreset-emailtext-user": "کسی نے (شاید آپ نے اپنی آئی پی پتے $1 سے) {{SITENAME}} ($4) کے لیے آپ کے پاسورڈ کو ری سیٹ کرنے کی درخواست دی ہے۔ ذیل میں موجود صارف {{PLURAL:$3|کھاتہ|کھاتے}} اس برقی پتے سے منسلک ہے:\n\n$2\n\n{{PLURAL:$3|یہ پاسورڈ|یہ پاسورڈز}} {{PLURAL:$5|ایک دن|$5 دنوں}} میں ایکسپائر {{PLURAL:$3|ہوجائے گا|ہوجائیں گے}}۔\n\nآپ کو لاگ ان ہوکر ایک نیا پاسورڈ منتخب کرنا چاہیے۔ اگر کسی اور نے یہ درخواست دی ہے، یا اگر آپ اپنا اصلی پاسورڈ جانتے ہیں، اور آپ اس کو تبدیل کرنے کی خواہش نہیں رکھتے تو آپ اس پیغام کو نظر انداز کر کے اپنے پرانے پاسورڈ کا ہی استعمال جاری رکھ سکتے ہیں۔",
        "passwordreset-emailelement": "صارف نام:\n$1\n\nعارضی پاس ورڈ: \n$2",
        "passwordreset-emailsentemail": "اگر یہ برقی ڈاک پتا آپ کے کھاتے سے منسلک ہے تو پاس ورڈ کی ترتیب نو کا برقی خط بھیج دیا جائے گا۔",
        "passwordreset-emailsentusername": "اگر کوئی برقی ڈاک پتا آپ کے کھاتے سے منسلک ہے تو پاس ورڈ کی ترتیب نو کا برقی خط بھیج دیا جائے گا۔",
        "changeemail-throttled": "آپ نے متعدد مرتبہ داخل ہونے کی کوشش کی ہے۔\nدوبارہ کوشش کرنے سے پہلے $1 انتظار فرمائیں۔",
        "changeemail-nochange": "براہ کرم کوئی دوسرا برقی ڈاک پتہ درج کریں۔",
        "resettokens": "ٹوکنوں کی ترتیب نو",
+       "resettokens-text": "آپ یہاں اپنے کھاتے سے منسلک مخصوص ذاتی ڈیٹا تک رسائی ٹوکنوں کو ری سیٹ کر کے پا سکتے ہیں۔\n\nآپ کو یہ تب کرنا چاہیے جب آپ نے اسے کسی کے ساتھ غلطی یا حادثاتی طور پر شیئر کردیا ہو یا اگر آپ کے کھاتے نے سمجھوتہ اختیار کرلیا ہو۔",
        "resettokens-no-tokens": "ترتیب نو کے لیے کوئی ٹوکن موجود نہیں۔",
        "resettokens-tokens": "ٹوکن:",
        "resettokens-token-label": "$1 (موجودہ قدر: $2)",
        "previewerrortext": "آپ کی تبدیلیوں کی نمائش دکھانے کے دوران میں کوئی نقص واقع ہو گیا ہے۔",
        "blockedtitle": "صارف مسدود ہے",
        "blockedtext": "'''آپکا اسمِ صارف یا آئی پی پتہ پر پابندی ہے.'''\n\n$1 نے پابندی لگائی تھی.\nوجہ یہ بتائی گئی کہ ''$2''.\n\n* پابندی کی ابتداء : $8\n* پابندی کا اختتام : $6\n* Intended blockee: $7\n\nآپ $1 یا کسی دوسرے [[{{MediaWiki:Grouppage-sysop}}|منتظم]] سے رابطہ کرکے پابندی پر بات چیت کرسکتے ہیں.\nآپ ‘صارف کو برقی خط ارسال کریں’ کی خاصیت اُس وقت تک استعمال نہیں کرسکتے جب تک آپ اپنے [[Special:Preferences|کھاتہ کے ترجیحات]] میں صحیح برقی پتہ معیّن نہ کریں، اور آپ کو اِسے استعمال کرنے سے پابند نہیں کیا گیا ہے.\nآپکا موجودہ آئی پی پتہ $3 ہے، اور پابندی کی شناخت #$5 ہے.\nبراہِ مہربانی کسی بھی قسم کے استفسار میں درج بالا تمام تفاصیل شامل کریں.",
+       "autoblockedtext": "آپ کے آئی پی پتے پر خودکارانہ طریقہ سے پابندی لگا دی گئی ہے کیونکہ یہ دوسرے صارف نے استعمال کی تھی، جس پر $1 نے پابندی لگائی ہوئی ہے۔\nوجہ یہ بتائی گئی کہ:\n<em>$2</em>\n\n*پابندی کی ابتدا: $8\n*پابندی کا اختتام: $6\n*Intended blockee: $7\n\nآپ $1 سے یا دوسرے [[{{MediaWiki:Grouppage-sysop}}|منتظمین]] سے رابطہ کر کے پابندی پر بات چیت کرسکتے ہیں۔\n\nیاد رکھیں کہ ”صارف کو برقی خط ارسال کریں“ کی خاصیت اُس وقت تک استعمال نہیں کرسکتے جب تک آپ اپنے [[Special:Preferences|کھاتے کی ترجیحات]] میں صحیح برقی پتہ معیّن نہ کریں، اور آپ کو اِسے استعمال کرنے سے پابند نہیں کیا گیا ہے۔\nآپ کا موجودہ آئی پی پتہ $3 ہے، اور پابندی کی شناخت #$5 ہے۔\nبراہِ مہربانی کسی بھی قسم کے استفسار میں درج بالا تمام تفصیل شامل کریں۔",
+       "systemblockedtext": "آپ کے اسم صارف یا آئی پی پتے پر میڈیاویکی کی جانب سے خودکارانہ طریقے سے پابندی لگا دی گئی ہے۔\nاور وجہ یہ بتائی گئی ہے کہ:\n<em>$2</em>\n\n*پابندی کی ابتدا: $8\n*پابندی کا اختتام: $6\n*Intended blockee: $7\n\nآپ کا موجودہ آئی پی پتہ $3 ہے۔\nبراہِ مہربانی کسی بھی قسم کے استفسار میں درج بالا تمام تفصیل شامل کریں۔",
        "blockednoreason": "کوئی وجہ نہیں دی گئی",
        "whitelistedittext": "ترمیم کیلئے $1 ضروری ہے.",
        "confirmedittext": "صفحات میں ترمیم کرنے سے پہلے آپ اپنے برقی پتہ کی تصدیق کریں.\nبرائے مہربانی! اپنی [[Special:Preferences|ترجیحات]] کے ذریعے اپنا برقی پتہ کا تعیّن اور تصدیق کیجئے.",
        "anontalkpagetext": "----\n<em>یہ تبادلۂ خیال صفحہ ایک ایسے صارف کا ہے جس نے اب تک اپنا کھاتہ نہیں بنایا یا یہ صفحہ اس کے زیر استعمال نہیں۔</em> \nلہٰذا ہمیں اس کی شناخت کے لئے ایک آئی پی پتہ استعمال کرنا پڑ رہا ہے۔ \nاس قسم کا آئی پی پتہ ایک سے زائد صارفین کے درمیان میں مشترک بھی ہوسکتا ہے۔ \nاگر آپ کی موجودہ حیثیت ایک گمنام صارف کی ہے اور آپ محسوس کریں کہ اس صفحہ پر آپ کے متعلق یہ تبصرے غیر متعلق ہیں تو براہ کرم [[Special:CreateAccount|ایک کھاتہ بنا لیں]] یا [[Special:UserLogin|داخل ہو جائیں]] تاکہ مستقبل میں آپ کو گمنام صارفین میں شمار کرنے سے گریز کیا جائے۔",
        "noarticletext": "اِس صفحہ میں فی الحال کوئی متن موجود نہیں ہے۔\nآپ دیگر صفحات میں [[Special:Search/{{PAGENAME}}|اِس صفحہ کے عنوان کو تلاش کر سکتے ہیں]]، <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} متعلقہ نوشتہ جات میں تلاش کر سکتے ہیں]،\nیا [{{fullurl:{{FULLPAGENAME}}|action=edit}} اِس صفحہ کو تخلیق کر سکتے ہیں]</span>۔",
        "noarticletext-nopermission": "اس صفحہ میں فی الحال کوئی متن موجود نہیں ہے۔\nآپ دیگر صفحات میں [[Special:Search/{{PAGENAME}}|اِس صفحہ کے عنوان کے لیے]] یا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} متعلقہ نوشتہ جات تلاش کرسکتے ہیں]</span>",
+       "missing-revision": "صفحہ \"{{FULLPAGENAME}}\" کے فرق #$1 کا نسخہ نہیں ملا۔\n\nعموماً ایسا اس وقت ہوتا ہے جب کسی حذف شدہ صفحہ کے نسخوں کے درمیان میں فرق تلاش کرنے کی کوشش کی جائے۔\nمزید تفصیلات [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} نوشتہ حذف شدگی] میں دیکھی جا سکتی ہیں۔",
        "userpage-userdoesnotexist": "«$1» کے نام سے صارف کھاتہ موجود نہیں ہے۔\nاگر آپ اس صفحہ کو تخلیق یا اس میں ترمیم کرنا چاہتے ہیں تو براہ کرم پہلے جانچ لیں۔",
        "userpage-userdoesnotexist-view": "صارف کھاتہ \"$1\" مندرج نہیں ہے۔",
        "blocked-notice-logextract": "یہ صارف معطل ہے۔\nحوالہ کے لیے نوشتہ پابندی کا تازہ ترین اندراج ذیل میں دستیاب ہے:",
        "previewconflict": "اس نمائش میں خانہ ترمیم کے اوپر موجود متن جس انداز میں ظاہر ہو رہا ہے، محفوظ کرنے کے بعد اسی طرح نظر آئے گا۔",
        "session_fail_preview": "معذرت! نشست کے مواد میں خامی کی وجہ سے آپ کی  ترمیم مکمل نہیں ہو سکی۔\n\nشاید آپ اپنے کھاتے سے خارج ہو گئے ہیں۔ <strong>براہ کرم اس بات کی تصدیق کر لیں کہ آپ داخل ہیں اور دوبارہ کوشش کریں۔</strong> اگر آپ کو پھر بھی مشکل پیش آرہی ہو تو ایک بار [[Special:UserLogout|خارج ہو کر]] واپس داخل ہو جائیں اور اپنے براؤزر کو جانچ لیں کہ آیا وہ اس سائٹ کی کوکیز اخذ کر رہا ہے یا نہیں۔",
        "session_fail_preview_html": "معاف کیجیے گا!سیشن ڈاٹا کے نقصان کی وجہ سے ہم آپ کی تبدیلی نافذنہیں کرسکتے.\n<em>چونکہ{{SITENAME}}نے نامکملHTMLکوفعال کررکھاہے,اس لئےنمائش کوجاوااسکرپٹ کےحملوں سےحفاظت کےلئےپوشیدہ کردیاگیاہے.</em>\n<strong>اگرتبدیلی کی یہ جدوجہدقانونی ہےتوبرائےمہربانی دوبارہ کوشش کریں.<strong>\nاگراس کےبعدبھی کام نہ کرے تو[[Special:UserLogout|logging out]]لاگ آؤٹ ہوکردوبارہ لاگ ان کیجیے.اورجانچ کیجیے کہ آپ کابراؤزراس سائٹ کےکوکیزکی اجأزت دیتاہےیانہیں.",
+       "token_suffix_mismatch": "<strong>آپ کی ترمیم رد کردی گئی ہے کیونکہ آپ کے اسامی نے ٹوکن ترمیم میں رموزو اوقاف علامتوں کی دھجیاں اڑا دی تھیں۔</strong>\n\nترمیم صفحے کے متن میں خرابی سے روکنے کے لیے رد کی گئی ہے۔\nیہ بعض دفعہ تب ہوتا ہے جب آپ buggy ویب پر مبنی نامعلوم پروکسی سروس کا استعمال کررہے ہوں۔",
        "edit_form_incomplete": "<strong>خانہ ترمیم سے کچھ حصے سرور تک نہیں پہنچ سکے ہیں؛ براہ کرم اپنی ترامیم کو دوبارہ جانچ لیں کہ آیا وہ برقرار ہیں یا نہیں اور دوبارہ کوشش کریں۔</strong>",
        "editing": "آپ \"$1\" میں ترمیم کر رہے ہیں۔",
        "creating": "زیر تخلیق $1",
        "yourtext": "آپ کی تحریر",
        "storedversion": "ذخیرہ شدہ نظرثانی",
        "editingold": "'''انتباہ: آپ اس صفحے کا ایک پرانا مسودہ مرتب کررہے ہیں۔ اگر آپ اسے محفوظ کرتے ہیں تو اس صفحے کے اس پرانے مسودے سے اب تک کی جانے والی تمام تدوین ضائع ہو جاۓ گی۔'''",
+       "unicode-support-fail": "ایسا معلوم ہوتا ہے کہ آپ کا براؤزر یونی کوڈ سپورٹ نہیں کرتا ہے صفحات کو ترمیم کرنا مطلوبہ ہے، اس لیے آپ کی ترمیم محفوظ نہیں کی گئی۔",
        "yourdiff": "تضادات",
        "copyrightwarning": "یہ یادآوری کرلیجیۓ کہ {{SITENAME}} میں تمام تحریری شراکت جی این یو آزاد مسوداتی اجازہ ($2)کے تحت تصور کی جاتی ہے (مزید تفصیل کیلیۓ $1 دیکھیۓ)۔ اگر آپ اس بات سے متفق نہیں کہ آپکی تحریر میں ترمیمات کری جائیں اور اسے آزادانہ (جیسے ضرورت ہو) استعمال کیا جاۓ تو براۓ کرم اپنی تصانیف یہاں داخل نہ کیجیۓ۔ اگر آپ یہاں اپنی تحریر جمع کراتے ہیں تو آپ اس بات کا بھی اقرار کر رہے ہیں کہ، اسے آپ نے خود تصنیف کیا ہے یا دائرہ ءعام (پبلک ڈومین) سے حاصل کیا ہے یا اس جیسے کسی اور آذاد وسیلہ سے۔'''بلااجازت ایسا کام داخل نہ کیجیۓ جسکا حق ِطبع و نشر محفوظ ہو!'''",
        "copyrightwarning2": "براہ کرم اس بات کا خیال رکھیں کہ {{SITENAME}} میں آپ کی جانب سے کی جانے والی تمام ترمیموں میں دیگر صارفین بھی حذف و اضافہ کر سکتے ہیں۔\nاگر آپ اپنی تحریر کے ساتھ اس قسم کے سلوک کے روادار نہیں تو براہ کرم اسے یہاں شائع نہ کریں۔<br />\nنیز اس تحریر کو شائع کرتے وقت آپ ہم سے یہ وعدہ بھی کر رہے ہیں کہ اسے آپ نے خود لکھا ہے یا اسے دائرہ عام یا کسی آزاد ماخذ سے یہاں نقل کر رہے ہیں (تفصیلات کے لیے $1 ملاحظہ فرمائیں)۔\n<strong>براہ کرم اجازت کے بغیر کسی کاپی رائٹ شدہ مواد کو یہاں شائع نہ کریں۔</strong>",
        "editpage-cannot-use-custom-model": "اس صفحہ کے مواد کے ماڈل کو تبدیل نہیں کیا جا سکتا۔",
+       "longpageerror": "<strong>خطا: آپ کا درج کردہ متن {{PLURAL:$1|ایک کلو بائٹ|$1 کلو بائٹز}} لمبا ہے، جو کم سے کم {{PLURAL:$2|ایک کلو بائٹ|$2 کلو بائٹز}} سے زیادہ ہے۔</strong>\nاسے محفوظ نہیں کیا جاسکتا۔",
        "readonlywarning": "<strong>انتباہ: انتظامی نگہداشت کی خاطر ڈیٹابیس کو مقفل کر دیا گیا ہے، لہذا اس وقت آپ اپنی ترامیم کو محفوظ نہیں کر سکتے۔</strong>\nآپ اپنی تحریر کو کسی ٹیکسٹ فائل میں محفوظ کر سکتے ہیں تاکہ وہ ضائع نہ ہو اور آئندہ اسے استعمال کیا جا سکے۔\n\nانتظامیہ کی جانب سے مقفل کرنے کی حسب ذیل وجہ بیان کی گئی ہے:\n\n$1",
        "protectedpagewarning": "<strong>انتباہ: اس صفحہ میں ترمیم کاری کو مقفل کر دیا گیا ہے اور محض انتظامی اختیارات کے حامل صارفین ہی اس میں ترمیم کر سکتے ہیں۔</strong>\nحوالہ کے لیے ذیل میں نوشتہ جاتی اندراج فراہم کیا گیا ہے:",
        "semiprotectedpagewarning": "<strong>اطلاع:</strong> اس صفحہ کو محفوظ کر دیا گیا ہے، لہذا اب اس میں محض اندراج شدہ صارفین ہی ترمیم کر سکتے ہیں۔\nحوالہ کے لیے ذیل میں نوشتہ کا تازہ ترین اندراج درج ہے:",
-       "cascadeprotectedwarning": "<strong>انتباہ:</strong> اس صفحہ میں ترمیم کاری کو مقفل کر دیا گیا ہے اور محض انتظامی اختیارات کے حامل صارفین ہی اس میں ترمیم کر سکتے ہیں۔ اسے مقفل کرنے کی وجہ یہ ہے کہ پیش نظر صفحہ درج ذیل محفوظ {{PLURAL:$1|صفحہ|صفحات}} کی آبشاری حفاظت میں شامل ہے:",
+       "cascadeprotectedwarning": "<strong>انتباہ:</strong> اس صفحہ میں ترمیم کاری کو محفوظ کر دیا گیا ہے اور محض [[Special:ListGroupRights|انتظامی اختیارات]] کے حامل صارفین ہی اس میں ترمیم کر سکتے ہیں۔ اسے محفوظ کرنے کی وجہ یہ ہے کہ پیش نظر صفحہ درج ذیل محفوظ {{PLURAL:$1|صفحہ|صفحات}} کی آبشاری حفاظت میں شامل ہے:",
        "titleprotectedwarning": "<strong>انتباہ: اس صفحہ کو محفوظ کر دیا گیا ہے، چنانچہ اسے تخلیق کرنے کے لیے [[Special:ListGroupRights|خصوصی اختیارات]] درکار ہونگے۔</strong>\nحوالہ کے لیے ذیل میں نوشتہ کا تازہ ترین اندراج موجود ہے:",
        "templatesused": "اِس صفحہ پر مستعمل {{PLURAL:$1|سانچہ|سانچے}}:",
        "templatesusedpreview": "اِس پیش منظر میں مستعمل {{PLURAL:$1|سانچہ|سانچے}}:",
        "nocreate-loggedin": "آپ کو نئے صفحات تخلیق کرنے کی اجازت نہیں ہے.",
        "sectioneditnotsupported-title": "قطعہ کی تدوین حمایت شدہ نہیں ہے",
        "sectioneditnotsupported-text": "اِس صفحہ میں قطعہ کی تدوین حمایت شدہ نہیں ہے.",
-       "permissionserrors": "خطائے اجازت",
+       "permissionserrors": "نقص اجازت",
        "permissionserrorstext": "درج ذیل {{PLURAL:$1|وجہ|وجوہات}} کی بناء پر آپ کو ایسا کرنے کی اجازت نہیں ہے:",
        "permissionserrorstext-withaction": "درج ذیل {{PLURAL:$1|وجہ|وجوہات}} کی بناء پر آپ کو $2  کی اجازت نہیں ہے:",
        "contentmodelediterror": "آپ اس نسخے میں ترمیم نہیں کر سکتے کیونکہ اس کے مواد کا ماڈل ‌‌<code>$1</code> ہے جو اس صفحہ کے مواد کے موجودہ ماڈل <code>$2</code> سے مختلف ہے۔",
        "deprecated-self-close-category-desc": "اس صفحہ میں ایچ ٹی ایم ایل کے نادرست ٹیگ مثلاً <code>&lt;b/></code> or <code>&lt;span/></code> استعمال کیے گئے ہیں۔ چونکہ ایچ ٹی ایم ایل 5 میں ان ٹیگوں کا رویہ تبدیل ہو جائے گا، لہذا ویکی متن میں ان کا استعمال متروک ہو چکا ہے۔",
        "duplicate-args-category": "سانچے میں دوہرے آرگومنٹ کے حامل صفحات",
        "duplicate-args-category-desc": "وہ صفحات جن میں مکرر یا دوہرے آرگومنٹ مستعمل ہیں، مثلاً <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> یا <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>۔",
+       "expensive-parserfunction-warning": "<strong>انتباہ:</strong>  یہ صفحہ کئی گراں بہا پارسر فنکشن کالز رکھتا ہے۔\n\nاسے $2 {{PLURAL:$2|کال|کالز}} سے کم ہونا چاہیے، یہاں اب {{PLURAL:$1|$1 کال|$1 کالز}} ہیں۔",
        "expensive-parserfunction-category": "سنگین پارسر فنکشنوں کے بے پناہ استعمال والے صفحات",
        "post-expand-template-inclusion-warning": "<strong>انتباہ:</strong> سانچہ کا حجم بہت زیادہ ہے۔ کچھ سانچے شامل نہیں ہو سکیں گے۔",
        "post-expand-template-inclusion-category": "حجم سے متجاوز سانچوں والے صفحات",
        "post-expand-template-argument-warning": "<strong>انتباہ:</strong> اس صفحہ میں موجود سانچہ کے کم از کم کسی ایک پیرامیٹر کا حجم بہت زیادہ ہے۔\nان پیرامیٹروں کو ترک کر دیا گیا ہے۔",
        "post-expand-template-argument-category": "سانچہ کے ترک کردہ پیرامیٹروں کے حامل صفحات",
        "parser-template-loop-warning": "سانچہ میں تکرار پایا گیا: [[$1]]",
+       "template-loop-category": "صفحات مع لوپ سانچہ",
        "parser-template-recursion-depth-warning": "سانچہ میں تکرار کی گہرائی اپنی حد سے تجاوز کر گئی ($1)",
        "language-converter-depth-warning": "لسانی مبدل کی گہرائی اپنی حد سے تجاوز کر گئی ($1)",
        "node-count-exceeded-category": "گرہوں کی تعداد سے تجاوز کرنے والے صفحات",
        "undo-failure": "درمیان میں متنازع ترامیم کی موجودگی کی بنا پر اس ترمیم کو واپس نہیں پھیرا جا سکا۔",
        "undo-norev": "اس ترمیم کو واپس نہیں پھیرا جا سکا کیونکہ یہ موجود ہی نہیں یا حذف کر دی گئی ہے۔",
        "undo-nochange": "معلوم ہوتا ہے کہ اس ترمیم کو پہلے ہی واپس پھیر دیا گیا ہے۔",
-       "undo-summary": "''[[خاص:شراکتیں/$2|$2]]'' نے ''([[تبادلۂ خیال صارف:$2|تبادلۂ خیال]])'' کی جانب سے کی گئی '''$1''' ویں ترمیم رد کر دی گئی ہے۔",
+       "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|تبادلۂ خیال]]) کی جانب سے کی گئی $1ویں ترمیم رد کر دی گئی ہے۔",
        "undo-summary-username-hidden": "پوشیدہ صارف کے نسخہ $1 کو واپس پھیریں",
        "cantcreateaccount-text": "[[User:$3|$3]] نے اس آئی پی پتہ (<strong>$1</strong>) کی کھاتہ سازی پر پابندی لگا رکھی ہے۔\n\n$3 نے «<em>$2</em>» وجہ بیان کی ہے",
        "cantcreateaccount-range-text": "[[User:$3|$3]] نے <strong>$1</strong> رینج کے آئی پی پتوں پر جس میں آپ کا آئی پی پتہ (<strong>$4</strong>) بھی موجود ہے پر پابندی لگا دی ہے۔\n\n$3 نے «<em>$2</em>» وجہ بیان کی ہے",
        "previousrevision": "→ پرانا نسخہ",
        "nextrevision": "→اگلا اعادہ",
        "currentrevisionlink": "تازہ ترین نسخہ",
-       "cur": " رائج",
+       "cur": "موجودہ",
        "next": "آگے",
        "last": "سابقہ",
        "page_first": "پہلا",
        "histlast": "تازہ ترین",
        "historysize": "({{PLURAL:$1|1 بائٹ|$1 بائٹ}})",
        "historyempty": "(خالی)",
-       "history-feed-title": "تارÛ\8cØ®Ú\86Û\82 Ù\86ظرثاÙ\86Û\8c",
+       "history-feed-title": "تارÛ\8cØ®Ú\86Û\81 ØªØ±Ù\85Û\8cÙ\85",
        "history-feed-description": "ویکی پر اِس صفحہ کا تاریخچۂ نظرثانی",
        "history-feed-item-nocomment": "بہ $2 $1",
        "history-feed-empty": "درخواست شدہ صفحہ موجود نہیں.\nیا تو یہ ویکی سے حذف کیا گیا ہے اور یا اِس کا نام تبدیل کردیا گیا ہے.\nآپ متعلقہ نئے صفحات کیلئے [[Special:Search|ویکی پر تلاش]] کرسکتے ہیں.",
        "mergelog": "نوشتہ کا انضمام",
        "revertmerge": "غیر ضم",
        "mergelogpagetext": "ذیل میں ان صفحات کی فہرست ہے جن کے تاریخچے حال ہی میں دوسرے صفحوں میں ضم کیے گئے ہیں۔",
-       "history-title": "\"$1\" کا نظرثانی تاریخچہ",
+       "history-title": "\"$1\" کا ترمیمی تاریخچہ",
        "difference-title": "\"$1\" کے نسخوں کے درمیان فرق",
        "difference-title-multipage": "«$1» اور «$2» صفحوں کے درمیان فرق",
        "difference-multipage": "(فرق مابین صفحات)",
        "search-section": "(قطعہ $1)",
        "search-category": "(زمرہ $1)",
        "search-file-match": "فائل مواد سے ملتا ہے",
-       "search-suggest": "کیا آپ کا مطلب تھا: $1",
+       "search-suggest": "کیا آپ کی مراد «$1» ہے؟",
        "search-rewritten": "$1 کے نتائج کی نمائش، اس کی بجائے آپ $2 کو تلاش کر سکتے ہیں۔",
        "search-interwiki-caption": "ساتھی منصوبوں سے اخذ کردہ نتائج",
        "search-interwiki-default": "$1 نتائج:",
        "search-external": "بیرونی تلاش",
        "searchdisabled": "{{SITENAME}} تلاش غیرفعال.\nآپ فی الحال گوگل کے ذریعے تلاش کرسکتے ہیں.\nیاد رکھئے کہ اُن کے {{SITENAME}} اشاریے ممکناً پرانے ہوسکتے ہیں.",
        "search-error": "تلاش کے دوران میں کوئی نقص واقع ہوا: $1",
+       "search-warning": "تلاش کے دوران میں کوئی انتباہ واقع ہوا: $1",
        "preferences": "ترجیحات",
        "mypreferences": "ترجیحات",
        "prefs-edits": "تعداد ترامیم:",
        "userrights-user-editname": "کوئی اسم‌صارف داخل کیجئے:",
        "editusergroup": "حلقہ ہائے صارف دکھائیں",
        "editinguser": "{{GENDER:$1|صارف}} <strong>[[User:$1|$1]]</strong> $2 کے اختیارات میں تبدیلی",
+       "viewinguserrights": "{{GENDER:$1|صارف}} <strong>[[User:$1|$1]]</strong> $2 کے اختیارات میں تبدیلی",
        "userrights-editusergroup": "حلقہ ہائے {{GENDER:$1|صارف}} میں ترمیم کریں",
        "userrights-viewusergroup": "جائزہ {{GENDER:$1|صارف}} گروہان",
        "saveusergroups": "حلقہ ہائے {{GENDER:$1|صارف}} کو محفوظ کریں",
        "action-deleterevision": "یہ نسخہ حذف کرنے",
        "action-deletelogentry": "نوشتے کے اندراجات کو حذف کریں",
        "action-deletedhistory": "اس صفحہ کا حذف شدہ تاریخچہ دیکھیں",
+       "action-deletedtext": "حذف کیے گئے متن کا فرق دیکھیے۔",
        "action-browsearchive": "حذف شدہ صفحات میں تلاش کرنے",
        "action-undelete": "یہ صفحہ بحال کرنے",
        "action-suppressrevision": "اس پوشیدہ ترمیم کی نظرثانی اور بحال کرنے",
        "recentchanges-legend": "اِختیاراتِ حالیہ تبدیلیاں",
        "recentchanges-summary": "اس صفحے پر ویکی میں ہونے والی تازہ تریں تبدیلیوں کا مشاہدہ کریں۔",
        "recentchanges-noresult": "مقررہ مدت کے دوران میں اس معیار سے مشابہت رکھنے والی کوئی تبدیلی نہیں ہوئی۔",
+       "recentchanges-timeout": "اس تلاش کا وقت ختم ہوگیا ہے۔ آپ پیرامیٹروں کی مختلف تلاش کرسکتے ہیں۔",
+       "recentchanges-network": "تکنیکی خطاؤں کی وجوہات کی بنا پر کسی قسم کے نتیجے لوڈ نہیں ہوئے۔ براہ مہربانی صفحہ کو تازہ کر کے کوشش کریں۔",
        "recentchanges-feed-description": "اس فیڈ میں ویکی پر ہونے والی تازہ تریں تبدیلیوں کا مشاہدہ کریں۔",
        "recentchanges-label-newpage": "یہ ترمیم ایک نئے صفحے کی تخلیق ہے",
        "recentchanges-label-minor": "یہ ایک معمولی ترمیم ہے",
        "rcshowhideliu": "مندرج صارفین $1",
        "rcshowhideliu-show": "دکھائیں",
        "rcshowhideliu-hide": "چھپائیں",
-       "rcshowhideanons": "گمنام صارف $1",
+       "rcshowhideanons": "گمنام صارفین $1",
        "rcshowhideanons-show": "دکھائیں",
        "rcshowhideanons-hide": "چھپائیں",
        "rcshowhidepatr": "$1 مراجعت شدہ ترامیم",
        "uploadbtn": "فائل اپلوڈ کریں",
        "reuploaddesc": "اپلوڈ منسوخ کرکے اپلوڈ فارم کی جانب واپس جائیں",
        "upload-tryagain": "فائل کی تبدیل شدہ وضاحت روانہ کریں",
+       "upload-tryagain-nostash": "دوبارہ اپلوڈ فائل درج اور وضاحت کی تبدیلی کریں۔",
        "uploadnologin": "آپ داخل شدہ حالت میں نہیں",
        "uploadnologintext": "فائلیں اپلوڈ کرنے کے لیے براہ کرم $1 ہوں",
        "upload_directory_missing": "اپلوڈ فولڈر ($1) موجود نہیں اور ویب سرور کے ذریعہ اسے تخلیق نہیں کیا جا سکا۔",
        "file-deleted-duplicate-notitle": "اس فائل سے ملتی جلتی دوسری فائل کو پہلے حذف کیا اور اس عنوان کو ممنوع قرار دیا جا چکا ہے۔\nاسے دوبارہ اپلوڈ کرنے سے قبل کسی ایسے شخص سے اس صورت حال کا جائزہ لینے کی درخواست کریں جسے ممنوع فائلوں کی معلومات تک رسائی حاصل ہو۔",
        "uploadwarning": "اپلوڈ انتباہ",
        "uploadwarning-text": "ذیل میں موجود فائل کی وضاحت میں تبدیلی کریں اور دوبارہ کوشش کریں۔",
+       "uploadwarning-text-nostash": "براہ مہربانی فائل دوبارہ اپلوڈ کریں، درجہ ذیل وضاحت کی تبدیلی کریں اور دوبارہ کوشش کریں۔",
        "savefile": "فائل محفوظ کریں",
        "uploaddisabled": "اپلوڈ غیر فعال ہے۔",
        "copyuploaddisabled": "بذریعہ یوآرایل اپلوڈ غیر فعال ہے۔",
        "php-uploaddisabledtext": "پی ایچ پی کی فائلیں اپلوڈ نہیں کی جا سکتیں۔\nبراہ کرم  file_uploads کی ترتیبات جانچ لیں۔",
        "uploadscripted": "اس فائل میں ایچ ٹی ایم ایل یا اسکرپٹ کوڈ کا استعمال کیا گیا ہے لہذا عین ممکن ہے کہ کوئی ویب براؤزر اس کی غلط تشریح کرے۔",
        "upload-scripted-pi-callback": "ایسی کسی فائل کو اپلوڈ نہیں کیا جا سکتا جس میں ایکس ایم ایل اسٹائل شیٹ پر عمل کرنے کی ہدایت ہو۔",
+       "upload-scripted-dtd": "SVG فائل کو اپلوڈ نہیں کیا جاسکتا جس ميں ایک غیر معیاری DTD کا اظہار ہو۔",
+       "uploaded-script-svg": "اپلوڈ کردہ SVG فائل میں scriptable عنصر \"$1\" ملا۔",
        "uploaded-hostile-svg": "اپلوڈ کردہ ایس وی جی فائل کے اسٹائل عنصر میں غیر محفوظ سی ایس ایس دریافت ہوئی ہے۔",
        "uploadscriptednamespace": "اس ایس وی جی فائل میں غیر قانونی نام فضا \"<nowiki>$1</nowiki>\" موجود ہے۔",
        "uploadinvalidxml": "اپلوڈ کردہ فائل میں موجود ایکس ایم ایل کا تجزیہ نہیں کیا جا سکا۔",
        "uploadstash-refresh": "فائلوں کی فہرست کو تازہ کریں",
        "uploadstash-thumbnail": "تھمب نیل دیکھیں",
        "uploadstash-exception": "اپلوڈ کردہ کو نہاں خانہ ($1) میں رکھا نہ جا سکا: ''$2''۔",
+       "uploadstash-bad-path": "راہ موجود نہیں ہے۔",
+       "uploadstash-bad-path-invalid": "راہ درست نہیں ہے۔",
+       "uploadstash-bad-path-unknown-type": "نامعلوم قسم \"$1\"",
+       "uploadstash-bad-path-unrecognized-thumb-name": "غیر معروف نام تصغیر",
+       "uploadstash-no-extension": "توسیع نہیں ہے۔",
+       "uploadstash-zero-length": "فائل کا طول صفر ہے۔",
        "invalid-chunk-offset": "آفسیٹ کا قطعہ نادرست ہے",
        "img-auth-accessdenied": "رسائی معطل",
        "img-auth-nopathinfo": "PATH_INFO مفقود ہے۔\nآپ کے سرور کو اس معلومات کی ترسیل کے لیے مرتب نہیں کیا گیا ہے۔\nممکن ہے یہ سی جی آئی پر مبنی ہو اور img_auth کو قبول نہ کرتا ہو۔\nبراہ کرم https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization کو ملاحظہ کریں۔",
        "mostimages": "سب سے زیادہ استعمال کردہ تصاویر",
        "mostinterwikis": "کثیر اندرونی ربط والے صفحات",
        "mostrevisions": "زیادہ تجدید نظر کیے جانے والے صفحات",
-       "prefixindex": "تمام صفحات بمع سابقہ",
+       "prefixindex": "تمام صفحات مع سابقہ",
        "prefixindex-namespace": "($1 نام فضا) کے سابقہ کے ساتھ تمام صفحات",
        "prefixindex-submit": "دکھائیں",
        "prefixindex-strip": "نام فضا کے سابقہ کے بغیر نتائج",
        "apisandbox-loading-results": "اے پی آئی کے نتائج موصول ہو رہے ہیں۔۔۔",
        "apisandbox-results-error": "اے پی آئی کوئری کا جواب لوڈ ہونے کے دوران میں نقص واقع ہوا: $1",
        "apisandbox-request-url-label": "درخواست کا ربط:",
+       "apisandbox-request-json-label": "JSON درخواست:",
        "apisandbox-request-time": "درخواست کا وقت: {{PLURAL:$1|$1 ملی سیکنڈ}}",
        "apisandbox-results-fixtoken": "ٹوکن کو درست کرکے دوبارہ بھیجیں",
        "apisandbox-results-fixtoken-fail": "\"$1\" ٹوکن اخذ کرنے میں ناکامی۔",
        "apisandbox-alert-page": "اس صفحہ میں موجود خانے نادرست ہیں۔",
        "apisandbox-alert-field": "اس خانے کی قدر نادرست ہے۔",
+       "apisandbox-continue": "جاری رکھیں",
+       "apisandbox-continue-clear": "صاف کریں",
+       "apisandbox-multivalue-all-namespaces": "$1 (تمام نام فضا)",
+       "apisandbox-multivalue-all-values": "$1 (تمام قدریں)",
        "booksources": "کتابی وسائل",
-       "booksources-search-legend": "تلاش برائے مآخذاتِ کتاب",
+       "booksources-search-legend": "تلاش برائے مآخذ کتاب",
        "booksources-search": "تلاش",
        "booksources-invalid-isbn": "درج کردہ آئی ایس بی این درست نہیں معلوم ہوتا؛ اصل ماخذ سے نقل کے دوران میں ہوئی غلطیوں کو جانچ لیں۔",
+       "magiclink-tracking-rfc": "صفحات مع RFC جادوئی روابط",
+       "magiclink-tracking-pmid": "صفحات مع PMID جادوئی روابط",
+       "magiclink-tracking-isbn": "صفحات مع ISBN جادوئی روابط",
        "specialloguserlabel": "صارف:",
        "speciallogtitlelabel": "ہدف (عنوان یا {{ns:user}}:صارف نام برائے صارف):",
        "log": "نوشتہ جات",
        "logeventslist-submit": "دکھائیں",
        "all-logs-page": "تمام عوامی نوشتہ جات",
+       "alllogstext": "{{SITENAME}} کے تمام دستیاب لاگز کا پیوستہ ڈسپلے۔\nآپ اور باریکی کے لیے لاگ کی قسم، صارف نام (حساس معاملہ)، یا متاثرہ صفحہ (یہ بھی حساس معاملہ) چن سکتے ہیں۔",
        "logempty": "نوشتہ میں اس سے مشابہ کوئی اندراج موجود نہیں ہے۔",
        "log-title-wildcard": "اس عبارت سے شروع ہونے والے عناوین میں تلاش کریں",
        "showhideselectedlogentries": "نوشتہ کے منتخب اندراج کی مرئیت تبدیل کریں",
        "prevpage": "پچھلا صفحہ ($1)",
        "allpagesfrom": "اس حرف سے شروع ہونے والے صفحات دکھائیں:",
        "allpagesto": "اس حرف پر ختم ہونے والے صفحات دکھائیں:",
-       "allarticles": "تمام مقالات",
+       "allarticles": "تمام صفحات",
        "allinnamespace": "تمام صفحات ($1 نام فضا)",
        "allpagessubmit": "چلیں",
        "allpagesprefix": "مطلوبہ سابقہ سے شروع ہونے والے صفحات کی نمائش:",
        "cachedspecial-viewing-cached-ttl": "آپ اس وقت اس صفحہ کا کیشے شدہ نسخہ دیکھ رہے ہیں جو ممکن ہے $1 پرانا ہو۔",
        "cachedspecial-viewing-cached-ts": "آپ اس وقت اس صفحہ کا کیشے شدہ نسخہ دیکھ رہے ہیں جو شاید مکمل طور پر اصلی نہ ہو۔",
        "cachedspecial-refresh-now": "تازہ ترین دیکھیں۔",
-       "categories": "زمرہ",
+       "categories": "زمرہ جات",
        "categories-submit": "دکھائیں",
        "categoriespagetext": "ذیل میں موجود {{PLURAL:$1|زمرہ|زمرہ جات}} میں صفحات یا میڈیا موجود ہے۔\n[[Special:UnusedCategories|غیر مستعمل زمرہ جات]] یہاں نہیں دکھائے گئے ہیں۔\nنیز [[Special:WantedCategories|مطلوبہ زمرہ جات کی فہرست]] بھی ملاحظہ فرمائیں۔",
        "categoriesfrom": "اس حرف سے شروع ہونے والے زمرے دکھائیں:",
        "activeusers-intro": "ذیل میں ان صارفین کی فہرست ہے جو گزشتہ $1 {{PLURAL:$1|دن|دنوں}} میں کسی بھی قسم کی سرگرمی میں شریک رہے ہوں۔",
        "activeusers-count": "گزشتہ {{PLURAL:$3|دن|$3 دنوں}} میں $1 {{PLURAL:$1|ترمیم|ترامیم}}",
        "activeusers-from": "اس حرف سے شروع ہونے والے صارفین کے نام دکھائیں:",
+       "activeusers-groups": "حسب ذیل حلقوں سے متعلق صارفین کو دکھائیں:",
        "activeusers-excludegroups": "ان حلقوں سے متعلق صارفین کو مستثنیٰ کریں:",
        "activeusers-noresult": "یہ صارف نہیں مل سکا",
        "activeusers-submit": "فعال صارفین دکھائیں",
        "editcomment": "خلاصہ ترمیم یہ تھا: <em>«$1»</em>.",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|تبادلۂ خیال]]) کی ترامیم [[User:$1|$1]] کی گذشتہ ترمیم کی جانب واپس پھیر دی گئیں۔",
        "revertpage-nouser": "(حذف شدہ صارف نام) کی ترامیم {{GENDER:$1|[[User:$1|$1]]}} کی گذشتہ ترمیم کی جانب واپس پھیر دی گئیں",
-       "rollback-success": "$1 کی ترامیم واپس پھیر دی گئیں؛\nصفحہ واپس $2 کی آخری ترمیم کی جانب منتقل کر دیا گیا۔",
+       "rollback-success": "{{GENDER:$3|$1}} کی ترامیم واپس پھیر دی گئیں؛\nصفحہ واپس {{GENDER:$4|$2}} کی آخری ترمیم کی جانب منتقل کر دیا گیا۔",
        "rollback-success-notify": "$1 کی ترامیم واپس پھیر دی گئیں؛\nصفحہ واپس $2 کی آخری ترمیم کی جانب منتقل کر دیا گیا۔ [$3 تبدیلیاں دکھائیں]",
        "sessionfailure-title": "نشست میں خامی",
        "changecontentmodel": "صفحہ کے مواد کے ماڈل میں تبدیلی کریں",
        "modifiedarticleprotection": "«[[$1]]» کا درجہ حفاظت تبدیل کیا",
        "unprotectedarticle": "«[[$1]]» کو غیر محفوظ کیا",
        "movedarticleprotection": "نے \"[[$2]]\" کا درجہ حفاظت \"[[$1]]\" کی جانب منتقل کیا",
+       "protectedarticle-comment": "«[[$1]]» کو {{GENDER:$2|محفوظ کیا}}",
+       "modifiedarticleprotection-comment": "«[[$1]]» کا {{GENDER:$2|درجہ حفاظت تبدیل کیا}}",
+       "unprotectedarticle-comment": "«[[$1]]» کو {{GENDER:$2|غیر محفوظ کیا}}",
        "protect-title": "«$1» کا درجہ حفاظت تبدیل کریں",
        "protect-title-notallowed": "«$1» کا درجہ حفاظت دیکھیں",
        "prot_1movedto2": "[[$1]] بجانب [[$2]] منتقل",
        "undelete-header": "حالیہ حذف شدہ صفحات کے لیے [[Special:Log/delete|نوشتۂ حذف شدگی]] دیکھیں۔",
        "undelete-search-title": "حذف شدہ صفحات میں تلاش کریں",
        "undelete-search-box": "حذف شدہ صفحات میں تلاش کریں",
-       "undelete-search-prefix": "اظہار صفحات بآغاز از:",
+       "undelete-search-prefix": "حسب ذیل حروف سے شروع ہونے والے صفحات دکھائیں:",
+       "undelete-search-full": "حسب ذیل عبارت پر مشتمل صفحے کے عناوین دکھائیں:",
        "undelete-search-submit": "تلاش",
        "undelete-no-results": "حذف شدہ صفحات میں ایسا کوئی صفحہ نہیں ملا",
        "undelete-filename-mismatch": " $1 کے نسخے کو بحال نہیں کیا جا سکتا: فائل کا نام مطابقت نہیں رکھتا۔",
        "sp-contributions-uploads": "اپلوڈ کردہ",
        "sp-contributions-logs": "نوشتہ جات",
        "sp-contributions-talk": "تبادلۂ خیال",
-       "sp-contributions-userrights": "انتظام اختیارات صارف",
+       "sp-contributions-userrights": "انتظام اختیارات {{GENDER:$1|صارف}}",
        "sp-contributions-blocked-notice": "اس صارف پر پابندی لگائی گئی ہے۔\nحوالہ کے لیے نوشتہ پابندی کا تازہ ترین اندراج ذیل میں دستیاب ہے:",
        "sp-contributions-blocked-notice-anon": "اس آئی پی پتے پر پابندی لگا دی گئی ہے۔\nحوالہ کے لیے نوشتہ پابندی کا تازہ ترین اندراج ذیل میں دستیاب ہے:",
        "sp-contributions-search": "شراکتوں میں تلاش کریں",
        "whatlinkshere-hidetrans": "استعمالات $1",
        "whatlinkshere-hidelinks": "روابط $1",
        "whatlinkshere-hideimages": "تصویر کے روابط $1",
-       "whatlinkshere-filters": "Ù\85Ù\82طارات",
+       "whatlinkshere-filters": "مقطرات",
        "whatlinkshere-submit": "ٹھیک",
        "autoblockid": "خودکار پابندی #$1",
        "block": "صارف مسدود کریں",
        "blockipsuccesssub": "پابندی لگا دی گئی",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] پر پابندی لگادی گئی۔<br />\nپابندیوں پر نظر ثانی کے لیے [[Special:BlockList|فہرست پابندی]] دیکھیں۔",
        "ipb-blockingself": "آپ اپنے آپ پر پابندی لگانے جا رہے ہیں! کیا آپ واقعی ایسا کرنا چاہتے ہیں؟",
+       "ipb-confirmaction": "اگر آپ واقعی میں یہ کرنا چاہتے ہیں تو براہ مہربانی \"{{int:ipb-confirm}}\" کو آخر میں دیکھ لیں۔",
        "ipb-edit-dropdown": "وجوہات پابندی میں ترمیم کریں",
        "ipb-unblock-addr": "$1 سے پابندی ہٹائیں",
        "ipb-unblock": "صارف نام یا آئی پی پتے سے پابندی ہٹائیں",
        "blocklist": "ممنوع صارفین",
        "autoblocklist": "خودکار پابندیاں",
        "autoblocklist-submit": "تلاش",
+       "autoblocklist-legend": "خودکار پابندیوں کی فہرست",
+       "autoblocklist-localblocks": "{{PLURAL:$1|خودکار مقامی پابندی|خودکار مقامی پابندیاں}}",
+       "autoblocklist-total-autoblocks": "خودکار پابندیوں کی کُل تعداد: $1",
+       "autoblocklist-empty": "خودکار پابندی کی فہرست خالی ہے۔",
+       "autoblocklist-otherblocks": "دیگر {{PLURAL:$1|خودکار مقامی پابندی|خودکار مقامی پابندیاں}}",
        "ipblocklist": "ممنوع صارفین",
        "ipblocklist-legend": "ممنوع صارف کو تلاش کریں",
        "blocklist-userblocks": "کھاتے کی پابندیاں چھپائیں",
        "ipb_blocked_as_range": "نقص: آئی پتا $1 پر براہ راست پابندی نہیں ہے اور اس کی پابندی ختم نہیں کی جا سکتی۔\nتاہم اس آئی پی پر $2 رینج کے ایک حصے کے طور پر پابندی لگائی گئی ہے، چنانچہ اس رینج کی پابندی ختم کی جا سکتی ہے۔",
        "ip_range_invalid": "آئی پی پتے کی رینج نادرست ہے۔",
        "ip_range_toolarge": "/$1 سے زیادہ بڑی رینج پابندیوں کی اجازت نہیں ہے۔",
+       "ip_range_exceeded": "آئی پی رینج منتہا حد سے تجاوز کر گئی ہے۔ مقررہ رینج: /$1۔",
+       "ip_range_toolow": "آئی پی رینجوں کی مؤثر طور پر اجازت نہیں ہے۔",
        "proxyblocker": "پراکسی مسدود کنندہ",
        "proxyblockreason": "آپ کے آئی پی پتے پر پابندی لگا دی گئی ہے کیونکہ یہ اوپن پراکسی ہے۔\nبراہ کرم انٹرنیٹ خدمات فراہم کرنے والے یا اپنی تنظیم کے تکنیکی معاون سے رابطہ کریں اور انہیں اس سنجیدہ مسئلہ سے آگاہ کریں۔",
        "sorbsreason": "{{SITENAME}} کے زیر استعمال DNSBL میں آپ کا آئی پی پتا اوپن پراکسی کے طور پر درج فہرست ہے۔",
        "sorbs_create_account_reason": "{{SITENAME}} کے زیر استعمال DNSBL میں آپ کا آئی پی پتا اوپن پراکسی کے طور پر درج فہرست ہے۔\nآپ کھاتہ نہیں بنا سکتے۔",
+       "softblockrangesreason": "آپ کے آئی پی پتے ($1) سے نامعلوم شراکتوں کی اجازت نہیں۔ پراہ مہربانی لاگ ان ہوں۔",
        "ipbblocked": "آپ دیگر صارفین پر پابندی لگا یا ہٹا نہیں سکتے کیونکہ خود آپ پر پابندی عائد کی گئی ہے۔",
        "ipbnounblockself": "آپ کو اپنی ذات سے پابندی ہٹانے کی اجازت نہیں ہے۔",
        "lockdb": "ڈیٹابیس مقفل کریں",
        "cant-move-to-user-page": "کسی صفحہ کو کسی صارف صفحہ میں منتقل کرنے کی اجازت نہیں ہے (صارف کا ذیلی صفحہ اس سے مستثنی ہے)۔",
        "cant-move-category-page": "آپ کو زمرہ جات منتقل کرنے کی اجازت نہیں ہے۔",
        "cant-move-to-category-page": "کسی صفحہ کو زمرے میں منتقل کرنے کی اجازت نہیں ہے۔",
+       "cant-move-subpages": "آپ کو ذیلی صفحات منتقل کرنے کی اجازت نہیں ہے۔",
+       "namespace-nosubpages": "«$1» نام فضا ميں ذیلی صفحات کی اجازت نہیں ہے۔",
        "newtitle": "نـیــا عـنــوان:",
        "move-watch": "اصل اور ہدف صفحہ کو زیر نظر کریں",
        "movepagebtn": "مـنـتـقـل",
        "tooltip-pt-mycontris": "آپ کی شراکتوں کی فہرست",
        "tooltip-pt-anoncontribs": "اس آئی پی پتے سے انجام دی جانے والی تمام ترامیم کی فہرست",
        "tooltip-pt-login": "کھاتے میں داخل ہونے کی سفارش کی جاتی ہے؛ تاہم یہ ضروری نہیں",
+       "tooltip-pt-login-private": "اس ویکی کو استعمال کرنے کے لیے اپنے کھاتے میں داخل ہونا ضروری ہے",
        "tooltip-pt-logout": "خارج ہوجائیں",
        "tooltip-pt-createaccount": "کھاتہ بنانے یا اس میں داخل ہونے کی سفارش کی جاتی ہے؛ تاہم یہ ضروری نہیں",
        "tooltip-ca-talk": "مضمون کے متعلق گفتگو کریں",
        "log-show-hide-patrol": "$1 نوشتہ مراجعت",
        "log-show-hide-tag": "$1 نوشتہ ٹیگ",
        "confirm-markpatrolled-button": "ٹھیک ہے",
+       "confirm-markpatrolled-top": "$2 کے نسخہ $3 کو بطور مراجعت شدہ نشان زد کریں؟",
        "deletedrevision": "حذف شدہ پرانی ترمیم $1۔",
        "filedeleteerror-short": "فائل حذف کاری میں نقص: $1",
        "filedeleteerror-long": "فائل حذف کرنے کے دوران میں نقص واقع ہوا:\n\n$1",
        "filedelete-current-unregistered": "«$1» کے عنوان سے کوئی فائل ڈیٹابیس میں موجود نہیں ہے۔",
        "filedelete-archive-read-only": "$1 کی وثق ڈائرکٹری میں ویب سرور نہیں لکھ پا رہا ہے۔",
        "previousdiff": "→ پرانی ترمیم",
-       "nextdiff": "صفحہ کا نام:",
+       "nextdiff": "نئی ترمیم ←",
        "mediawarning": "<strong>انتباہ:</strong> شاید اس نوع کی فائل میں نقصان دہ کوڈ موجود ہے۔\nممکن ہے اسے چلانے پر آپ کا سسٹم مشکوک ہاتھوں میں چلا جائے۔",
        "imagemaxsize": "تصویر کی جسامت کی حد:<br /><em>(فائل کے توضیحی صفحات کے لیے)</em>",
        "thumbsize": "تھمب نیل کی جسامت:",
        "newimages-legend": "مقطار",
        "newimages-label": "فائل کا نام (یا اس کا جزو):",
        "newimages-user": "آئی پی پتہ یا صارف نام",
+       "newimages-newbies": "محض نئے کھاتوں کی شراکتیں دکھائیں",
        "newimages-showbots": "روبہ جات کے ذریعہ اپلوڈ کردہ فائلیں دکھائیں",
        "newimages-hidepatrolled": "مراجعت شدہ اپلوڈ چھپائیں",
        "newimages-mediatype": "میڈیا قسم:",
        "tags-deactivate": "غیر فعال  کریں",
        "tags-hitcount": "$1 {{PLURAL:$1|تبدیلی|تبدیلیاں}}",
        "tags-manage-no-permission": "آپ کو تبدیلی کے ٹیگوں کے انتظام کی اجازت نہیں ہے۔",
-       "tags-manage-blocked": "آپ بحالت پابندی تبدیلی کے ٹیگوں کا انتظام نہیں کر سکتے۔",
+       "tags-manage-blocked": "{{GENDER:$1|آپ}} بحالت پابندی تبدیلی کے ٹیگوں کا انتظام نہیں کر سکتے۔",
        "tags-create-heading": "نیا ٹیگ بنائیں",
        "tags-create-explanation": "ابتدائی طور پر نو تخلیق شدہ ٹیگ صارفین اور روبہ جات کے استعمال کے لیے دستیاب ہونگے۔",
        "tags-create-tag-name": "ٹیگ کا نام:",
        "tags-deactivate-not-allowed": "«$1» ٹیگ کو غیر فعال کرنا ممکن نہیں۔",
        "tags-deactivate-submit": "غیر فعال",
        "tags-apply-no-permission": "آپ کو اپنی تبدیلیوں پر تبدیلی کے ٹیگوں کو نافذ کرنے کی اجازت نہیں ہے۔",
-       "tags-apply-blocked": "بحالت پابندی آپ اپنی تبدیلیوں پر تبدیلی کے ٹیگ نافذ نہیں کر سکتے۔",
+       "tags-apply-blocked": "بحالت پابندی {{GENDER:$1|آپ}} اپنی تبدیلیوں پر تبدیلی کے ٹیگ نافذ نہیں کر سکتے۔",
        "tags-apply-not-allowed-one": "«$1» ٹیگ کو دستی طور پر نافذ کرنے کی اجازت نہیں ہے۔",
        "tags-apply-not-allowed-multi": "درج ذیل {{PLURAL:$2|ٹیگ|ٹیگوں}} کو دستی طور پر نافذ کرنے کی اجازت نہیں ہے: $1",
        "tags-update-no-permission": "آپ کو انفرادی نسخوں یا نوشتہ کے اندراجات سے تبدیلی کے ٹیگوں کو ہٹانے یا ان میں لگانے کی اجازت نہیں ہے۔",
-       "tags-update-blocked": "بحالت پابندی آپ تبدیلی کے ٹیگوں کو لگا یا ہٹا نہیں سکتے۔",
+       "tags-update-blocked": "بحالت پابندی {{GENDER:$1|آپ}} تبدیلی کے ٹیگوں کو لگا یا ہٹا نہیں سکتے۔",
        "tags-update-add-not-allowed-one": "«$1» ٹیگ کو دستی طور پر لگانے کی اجازت نہیں ہے۔",
        "tags-update-add-not-allowed-multi": "درج ذیل {{PLURAL:$2|ٹیگ|ٹیگوں}} کو دستی طور پر لگانے کی اجازت نہیں ہے: $1",
        "tags-update-remove-not-allowed-one": "«$1» کو ہٹانے کی اجازت نہیں ہے۔",
        "compare-title-not-exists": "آپ کا اختصاصی عنوان موجود نہیں۔",
        "compare-revision-not-exists": "آپ کی اختصاصی نظرثانی موجود نہیں۔",
        "diff-form": "فرق",
+       "diff-form-oldid": "پرانا نسخہ شناخت (اختیاری)",
+       "diff-form-revid": "نسخہ شناخت کا فرق",
+       "diff-form-submit": "فرق دکھائیں",
        "permanentlink": "مستقل ربط",
+       "permanentlink-revid": "نسخہ کا شناختی نمبر",
+       "permanentlink-submit": "نسخہ کو دیکھیں",
        "dberr-problems": "افسوس! اس ویب سائٹ کو تکنیکی مشکلات کا سامنا ہے۔",
        "dberr-again": "چند منٹ انتظار کے بعد دوبارہ کوشش کریں۔",
        "dberr-info": "(ڈیٹا بیس تک رسائی نہیں مل سکی: $1)",
        "logentry-delete-delete": "$1 {{GENDER:$2|حذف کیا گیا}} صفحہ $3",
        "logentry-delete-delete_redir": "$1 نے بر تحریر کرتے ہوئے $3 رجوع مکرر کو {{GENDER:$2|حذف کیا}}",
        "logentry-delete-restore": "$1 نے صفحہ $3 کو {{GENDER:$2|بحال کیا}}",
+       "logentry-delete-restore-nocount": "$1 نے صفحہ $3 کو {{GENDER:$2|بحال کیا}}",
+       "restore-count-revisions": "{{PLURAL:$1|1 نسخہ|$1 نسخے}}",
+       "restore-count-files": "{{PLURAL:$1|1 فائل|$1 فائلیں}}",
        "logentry-delete-event": "$1 نے $3 میں موجود {{PLURAL:$5|ایک واقعۂ نوشتہ|$5 واقعات نوشتہ}} کی مرئیت کو {{GENDER:$2|تبدیل کیا}}: $4",
        "logentry-delete-revision": "$1 نے $3 میں موجود {{PLURAL:$5|ایک نسخے|$5 نسخوں}} کی مرئیت کو {{GENDER:$2|تبدیل کیا}}: $4",
        "logentry-delete-event-legacy": "$1 نے $3 میں موجود واقعات نوشتہ کی مرئیت کو {{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-create": "$1 کے نام سے صارف کھاتہ {{GENDER:$2|بنایا گیا}}",
        "logentry-newusers-create2": "$1 نے صارف کھاتہ $3 {{GENDER:$2|تخلیق کیا}}",
        "logentry-newusers-byemail": "$1 نے صارف کھاتہ $3 {{GENDER:$2|تخلیق کیا}} اور پاس ورڈ بذریعہ برقی خط روانہ کیا گیا ہے",
        "logentry-newusers-autocreate": "صارف کھاتہ $1 خودکار طور پر {{GENDER:$2|تخلیق ہوا}}",
        "logentry-tag-update-revision": "$1 نے صفحہ $3 کے نسخہ $4 پر موجود ٹیگوں کو {{GENDER:$2|تازہ کیا}} ({{PLURAL:$7|شامل کیا گیا|شامل کیے گئے}} $6؛ {{PLURAL:$9|حذف کیا گیا|حذف کیے گئے}} $8)",
        "logentry-tag-update-logentry": "$1 نے صفحہ $3 کے اندراج نوشتہ $5 پر موجود ٹیگوں کو {{GENDER:$2|تازہ کیا}} ({{PLURAL:$7|شامل کیا گیا|شامل کیے گئے}} $6؛ {{PLURAL:$9|حذف کیا گیا|حذف کیے گئے}} $8)",
        "rightsnone": "(کچھ نہیں)",
+       "rightslogentry-temporary-group": "$1 (عارضی، تا $2)",
        "feedback-adding": "صفحہ میں تبصرہ درج کیا جا رہا ہے۔۔۔",
        "feedback-back": "واپس",
        "feedback-bugcheck": "زبردست! جانچ لیں کہ کہیں پہلے ہی [$1 اس کی اطلاع نہ دے دی گئی ہو]۔",
        "pagelang-select-lang": "زبان کا انتخاب کریں",
        "pagelang-reason": "وجہ",
        "pagelang-submit": "ٹھیک ہے",
+       "pagelang-nonexistent-page": "صفحہ $1 موجود نہیں ہے۔",
+       "pagelang-db-failed": "ڈیٹابیس زبان کو تبدیل کرنے میں ناکام رہا۔",
        "right-pagelang": "صفحے کی زبان تبدیل کریں",
        "action-pagelang": "صفحے کی زبان تبدیل کریں",
        "log-name-pagelang": "نوشتہ تبدیلی زبان",
        "special-characters-group-thai": "سیامی",
        "special-characters-group-lao": "لاوسی",
        "special-characters-group-khmer": "کھمیری",
+       "special-characters-group-canadianaboriginal": "کینیڈی قدیمی",
        "special-characters-title-endash": "علامت خط",
        "special-characters-title-emdash": "خط فاصل کشیدہ",
        "special-characters-title-minus": "علامت وضع",
        "mw-widgets-dateinput-no-date": "کسی تاریخ کو منتخب نہیں کیا گیا",
+       "mw-widgets-mediasearch-input-placeholder": "میڈیا کی تلاش",
        "mw-widgets-mediasearch-noresults": "مطلوبہ نتائج نہیں ملے۔",
        "mw-widgets-titleinput-description-new-page": "صفحہ ابھی تک موجود نہیں",
        "mw-widgets-titleinput-description-redirect": "$1 کا رجوع مکرر",
        "log-action-filter-block-reblock": "تبدیلیٔ پابندی",
        "log-action-filter-block-unblock": "پابندی ختم",
        "log-action-filter-contentmodel-change": "مواد کے ماڈل کی تبدیلی",
-       "log-action-filter-contentmodel-new": "غیر معیاری contentmodel پر مشتمل صفحہ سازی",
+       "log-action-filter-contentmodel-new": "غیر ابتدائی ماڈل کے مواد پر مشتمل صفحہ سازی",
        "log-action-filter-delete-delete": "صفحہ کی حذف شدگی",
+       "log-action-filter-delete-delete_redir": "رجوع مکرر برتحریر",
        "log-action-filter-delete-restore": "صفحہ کی بحالی",
        "log-action-filter-delete-event": "نوشتہ کی حذف شدگی",
        "log-action-filter-delete-revision": "ترمیم کی حذف شدگی",
        "restrictionsfield-badip": "آئی پی پتا یا رینج نادرست ہے: $1",
        "restrictionsfield-label": "آئی پی کی اجازت یافتہ رینج:",
        "restrictionsfield-help": "فی سطر ایک آئی پی پتا یا سی آئی ڈی آر رینج۔ تمام کو فعال کرنے کے لیے <br><code>0.0.0.0/0</code><br><code>::/0</code> استعمال کریں",
-       "pagedata-title": "صفحے کا ڈیٹا"
+       "revid": "نسخہ $1",
+       "pageid": "صفحہ کا شناختی نمبر $1",
+       "rawhtml-notallowed": "\n&lt;html&gt; ٹیگ عام صفحات کے باہر استعمال نہیں کیا جا سکتا۔",
+       "gotointerwiki": "{{SITENAME}} سے باہر جا رہے ہیں",
+       "gotointerwiki-invalid": "درج کردہ عنوان درست نہیں ہے۔",
+       "gotointerwiki-external": "[[$2]] ایک علاحدہ ویب سائٹ ہے، جس ميں جانے کے لیے آپ {{SITENAME}} کو چھوڑ رہے ہیں۔\n\n''[$1 پر جاری $1]'''",
+       "undelete-cantedit": "آپ اس صفحہ کو بحال نہیں کر سکتے، کیونکہ آپ کو اس صفحہ میں ترمیم کرنے کی اجازت نہیں ہے۔",
+       "undelete-cantcreate": "آپ اس صفحہ کو بحال نہیں کر سکتے، کیونکہ اس نام سے کوئی صفحہ موجود نہیں ہے اور آپ کو اس صفحہ کو تخلیق کرنے کی اجازت بھی نہیں ہے۔",
+       "pagedata-title": "صفحے کا ڈیٹا",
+       "pagedata-not-acceptable": "کوئی مساوی فارمیٹ نہی ملا۔ سپورٹ کرنے والی MIME اقسام: $1",
+       "pagedata-bad-title": "نادرست عنوان: $1"
 }
index 958ac07..4148782 100644 (file)
        "nosuchusershort": "没有名为“$1”的用户。请检查您的拼写。",
        "nouserspecified": "您必须指定一个用户名。",
        "login-userblocked": "该用户已被封禁,禁止登录。",
-       "wrongpassword": "您输入的密码错误。请重试。",
+       "wrongpassword": "您输入的用户名或密码错误。请重试。",
        "wrongpasswordempty": "密码输入为空。请重试。",
        "passwordtooshort": "您的密码至少需要$1个字符。",
        "passwordtoolong": "密码不能超过{{PLURAL:$1|$1个字符}}。",
        "apisandbox": "API 沙盒",
        "apisandbox-jsonly": "需要JavaScript以使用API沙盒。",
        "apisandbox-api-disabled": "API在该网站停用。",
-       "apisandbox-intro": "使用这个页面来试验<strong>MediaWiki Web 服务应用程序接口(API)</strong>。\n欲知API使用详情,请参阅[[mw:API:Main page|API文档]]。\n例如:[https://www.mediawiki.org/wiki/API#A_simple_example 取得某个主页的内容],然后选择一个操作来看更多范例。\n\n请注意,虽然这是一个沙盒,但是您在这个页面上的改动可能会修改维基。",
+       "apisandbox-intro": "使用这个页面来试验<strong>MediaWiki Web 服务应用程序接口(API)</strong>。欲知API使用详情,请参阅[[mw:API:Main page|API文档]]。例如:[https://www.mediawiki.org/wiki/API#A_simple_example 取得某个主页的内容],然后选择一个操作来看更多范例。\n\n请注意,虽然这是一个沙盒,但是您在这个页面上的改动可能会修改维基。",
        "apisandbox-fullscreen": "展开面板",
        "apisandbox-fullscreen-tooltip": "展开沙盒面板以填充浏览器窗口。",
        "apisandbox-unfullscreen": "显示页面",
        "articleexists": "该名称的页面已存在,或者您使用的名称无效。请另选一名。",
        "cantmove-titleprotected": "您无法将页面移动到该位置,因为新标题已被保护以防止创建。",
        "movetalk": "移动关联的讨论页",
-       "move-subpages": "移动子页面(上至$1页)",
+       "move-subpages": "移动子页面(最多$1页)",
        "move-talk-subpages": "如果可能,移动子对话页面(上至$1页)",
        "movepage-page-exists": "页面$1已存在,无法自动覆盖。",
        "movepage-page-moved": "页面$1已经移动到$2。",
        "variantname-gan-hans": "赣语(简体)",
        "variantname-gan-hant": "赣语(繁体)",
        "variantname-kk-cyrl": "kk-cyrl",
+       "variantname-crh-latn": "克里米亚鞑靼文(拉丁)",
+       "variantname-crh-cyrl": "克里米亚鞑靼文(西里尔)",
        "metadata": "元数据",
        "metadata-help": "此文件中包含有额外的信息。这些信息可能是由数码相机或扫描仪在创建或数字化过程中所添加的。如果文件自初始状态已受到修改,一些详细说明可能无法反映修改后的文件。",
        "metadata-expand": "显示详细资料",
index c82fc91..77ee72e 100644 (file)
@@ -91,7 +91,8 @@
                        "WhitePhosphorus",
                        "Translatealcd",
                        "蘭斯特",
-                       "机智的小鱼君"
+                       "机智的小鱼君",
+                       "Wbxshiori"
                ]
        },
        "tog-underline": "底線標示連結:",
        "rcfilters-filtergroup-authorship": "貢獻的作者",
        "rcfilters-filter-editsbyself-label": "您的編輯",
        "rcfilters-filter-editsbyself-description": "您的貢獻",
-       "rcfilters-filter-editsbyother-label": "其他人的更改",
+       "rcfilters-filter-editsbyother-label": "其他人的變更",
        "rcfilters-filter-editsbyother-description": "除了您以外的所有更改",
        "rcfilters-filtergroup-userExpLevel": "使用者註冊及經驗",
        "rcfilters-filter-user-experience-level-registered-label": "已註冊",
        "apisandbox": "API 沙盒",
        "apisandbox-jsonly": "需要 JavaScript 才能使用 API 沙箱。",
        "apisandbox-api-disabled": "此網站已關閉 API。",
-       "apisandbox-intro": "使用此頁面可測試 <strong>MediaWiki web service API</strong>。\n請參考 [[mw:API:Main page|API 說明文件]] 以取得詳細資訊。例:[https://www.mediawiki.org/wiki/API#A_simple_example 取得主頁的內容]。 請選擇動作以取得更多範例。\n\n請注意,雖然此為沙盒,您在此頁所執行的動作仍有可能會修改到 Wiki。",
+       "apisandbox-intro": "使用此頁面可測試 <strong>MediaWiki web service API</strong>。\n請參考 [[mw:API:Main page|API 說明文件]] 以取得詳細資訊。例:[https://www.mediawiki.org/wiki/API#A_simple_example 取得主頁的內容]。 請選擇動作以取得更多範例。\n\n請注意,雖然此為沙盒,您在此頁所執行的動作仍有可能會修改到 Wiki。",
        "apisandbox-fullscreen": "展開面板",
        "apisandbox-fullscreen-tooltip": "展開沙盒面板來填滿瀏覽器視窗。",
        "apisandbox-unfullscreen": "顯示頁面",
        "unblocked-id": "已經移除 $1 的封鎖。",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] 已解除封鎖。",
        "blocklist": "已封鎖的使用者",
-       "autoblocklist": "自動封",
+       "autoblocklist": "自動封",
        "autoblocklist-submit": "搜尋",
        "autoblocklist-legend": "列出自動封鎖",
        "autoblocklist-localblocks": "本地{{PLURAL:$1|自動封鎖|自動封鎖}}",
        "articleexists": "該頁面名稱已存在,或您選擇的名稱無效。\n請改選擇其他名稱。",
        "cantmove-titleprotected": "您選擇的新標題已被禁止使用,您不可移動頁面到該位置。",
        "movetalk": "移動相關的對話頁面",
-       "move-subpages": "移動子頁面 (共 $1 頁)",
+       "move-subpages": "移動子頁面(至多 $1 頁)",
        "move-talk-subpages": "移動對話頁面的子頁面 (共 $1 頁)",
        "movepage-page-exists": "頁面 $1 已存在,無法自動覆蓋。",
        "movepage-page-moved": "已移動頁面 $1 到 $2。",
        "tooltip-ca-nstab-category": "檢視分類頁面",
        "tooltip-minoredit": "標記此為次要編輯",
        "tooltip-save": "儲存您的變更",
-       "tooltip-publish": "發佈您的更改",
+       "tooltip-publish": "發佈您的變更",
        "tooltip-preview": "請在儲存前預覽您的變更!",
        "tooltip-diff": "顯示您對內容所做的變更",
        "tooltip-compareselectedversions": "查閱此頁面兩個已選擇的修訂間的差異",
index f85461f..05d2aba 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Crimean Turkish (Qırımtatarca)
+/** Crimean Tatar (Qırımtatarca)
  *
  * To improve a translation please visit https://translatewiki.net
  *
index ff68ad8..1ad2b56 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Crimean Turkish (Cyrillic script) (къырымтатарджа (Кирилл)‎)
+/** Crimean Tatar (Cyrillic script) (къырымтатарджа (Кирилл)‎)
  *
  * To improve a translation please visit https://translatewiki.net
  *
index 9a993ea..7a2c97f 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-/** Crimean Turkish (Latin script) (qırımtatarca (Latin)‎)
+/** Crimean Tatar (Latin script) (qırımtatarca (Latin)‎)
  *
  * To improve a translation please visit https://translatewiki.net
  *
index dcf2f9b..55bf65d 100644 (file)
@@ -1972,6 +1972,8 @@ return [
                        'api-help-param-integer-minmax',
                        'api-help-param-multi-separate',
                        'api-help-param-multi-max',
+                       'api-help-param-maxbytes',
+                       'api-help-param-maxchars',
                        'apisandbox-submit-invalid-fields-title',
                        'apisandbox-submit-invalid-fields-message',
                        'apisandbox-results',
@@ -2103,6 +2105,7 @@ return [
                        'mediawiki.notification.convertmessagebox',
                        'oojs-ui-widgets',
                        'mediawiki.widgets.SelectWithInputWidget',
+                       'mediawiki.editfont.styles',
                ],
        ],
        'mediawiki.special.preferences.styles.ooui' => [
@@ -2229,12 +2232,14 @@ return [
                ],
        ],
        'mediawiki.special.userrights' => [
-               'styles' => 'resources/src/mediawiki.special/mediawiki.special.userrights.css',
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.userrights.js',
                'dependencies' => [
                        'mediawiki.notification.convertmessagebox',
                ],
        ],
+       'mediawiki.special.userrights.styles' => [
+               'styles' => 'resources/src/mediawiki.special/mediawiki.special.userrights.css',
+       ],
        'mediawiki.special.watchlist' => [
                'scripts' => 'resources/src/mediawiki.special/mediawiki.special.watchlist.js',
                'messages' => [
index db43a53..51fc9bc 100644 (file)
                this.excludeLabel = new OO.ui.LabelWidget( {
                        label: mw.msg( 'rcfilters-filter-excluded' )
                } );
-               this.excludeLabel.toggle( this.itemModel.isSelected() && this.invertModel.isSelected() );
+               this.excludeLabel.toggle(
+                       this.itemModel.getGroupModel().getView() === 'namespaces' &&
+                       this.itemModel.isSelected() &&
+                       this.invertModel.isSelected()
+               );
 
                layout = new OO.ui.FieldLayout( this.checkboxWidget, {
                        label: $label,
                this.checkboxWidget.setSelected( this.itemModel.isSelected() );
 
                this.highlightButton.toggle( this.filtersViewModel.isHighlightEnabled() );
-               this.excludeLabel.toggle( this.itemModel.isSelected() && this.invertModel.isSelected() );
+               this.excludeLabel.toggle(
+                       this.itemModel.getGroupModel().getView() === 'namespaces' &&
+                       this.itemModel.isSelected() &&
+                       this.invertModel.isSelected()
+               );
        };
 
        /**
index 3599f34..58fd500 100644 (file)
@@ -13,7 +13,9 @@ a {
        background: none;
 }
 
-a:not( [ href ] ) {
+/* Support: Firefox 57 - it can't parse `rule[ attr ]` and the LESS compiler doesn't */
+/* strip whitespace inside the :not() (T180138) */
+a:not( [href] ) { /* stylelint-disable-line selector-attribute-brackets-space-inside */
        cursor: pointer; /* Always cursor:pointer even without href */
 }
 
index c62685a..ed51c34 100644 (file)
                                                                } ) );
                                                        }
                                                }
+                                               if ( 'maxbytes' in pi.parameters[ i ] ) {
+                                                       descriptionContainer.append( $( '<div>', {
+                                                               addClass: 'info',
+                                                               append: Util.parseMsg( 'api-help-param-maxbytes', pi.parameters[ i ].maxbytes )
+                                                       } ) );
+                                               }
+                                               if ( 'maxchars' in pi.parameters[ i ] ) {
+                                                       descriptionContainer.append( $( '<div>', {
+                                                               addClass: 'info',
+                                                               append: Util.parseMsg( 'api-help-param-maxchars', pi.parameters[ i ].maxchars )
+                                                       } ) );
+                                               }
                                                helpField = new OO.ui.FieldLayout(
                                                        new OO.ui.Widget( {
                                                                $content: '\xa0',
index 7f3b09a..5d0ec49 100644 (file)
        color: #72777d;
        font-size: 90%;
 }
-
-/* Special:UserRights */
-.mw-userrights-disabled {
-       color: #72777d;
-}
-.mw-userrights-groups * td,
-.mw-userrights-groups * th {
-       padding-right: 1.5em;
-}
-
-.mw-userrights-groups * th {
-       text-align: left;
-}
index 294dcd0..7be6ce1 100644 (file)
        transform: none;
 }
 
+#preferences .oo-ui-panelLayout-framed .oo-ui-panelLayout-framed {
+       border-color: #c8ccd1;
+       border-width: 1px 0 0;
+       border-radius: 0;
+       padding-left: 0;
+       padding-right: 0;
+       box-shadow: none;
+}
+
 /* Tweak the margins to reduce the shifting of form contents
  * after JS code loads and rearranges the page */
 .client-js #preferences > .oo-ui-panelLayout {
        margin-left: 0.25em;
 }
 
-.client-js #preferences .oo-ui-panelLayout-framed .oo-ui-tabPanelLayout .oo-ui-panelLayout-framed {
-       margin-left: 0;
-}
-
-.client-js #preferences .oo-ui-panelLayout-framed .oo-ui-tabPanelLayout {
+.client-js #preferences .oo-ui-tabPanelLayout {
        padding-top: 0.5em;
        padding-bottom: 0.5em;
 }
 
+.client-js #preferences .oo-ui-tabPanelLayout .oo-ui-panelLayout-framed {
+       margin-left: 0;
+       margin-bottom: 0;
+       border: 0;
+       padding-top: 0;
+}
+
 .client-js #preferences > .oo-ui-panelLayout > .oo-ui-fieldsetLayout > .oo-ui-fieldsetLayout-header {
        margin-bottom: 1em;
 }
index a4b4087..1ffdf70 100644 (file)
        display: inline-block;
        vertical-align: middle;
 }
+
+.mw-userrights-disabled {
+       color: #72777d;
+}
+.mw-userrights-groups * td,
+.mw-userrights-groups * th {
+       padding-right: 1.5em;
+}
+
+.mw-userrights-groups * th {
+       text-align: left;
+}
+
+/* Dynamically show/hide the expiry selection underneath each checkbox */
+input.mw-userrights-groupcheckbox:not( :checked ) ~ .mw-userrights-nested {
+       display: none;
+}
+
+/* Initial hide the expiry fields to prevent a FOUC on loading */
+/* The input fields gets unhidden by JavaScript when needed */
+.client-js .mw-userrights-expiryfield {
+       display: none;
+}
index 3f864dd..d3494f7 100644 (file)
@@ -6,13 +6,8 @@
        // Replace successbox with notifications
        convertmessagebox();
 
-       // Dynamically show/hide the expiry selection underneath each checkbox
-       $( '#mw-userrights-form2 input[type=checkbox]' ).on( 'change', function ( e ) {
-               $( '#mw-userrights-nested-' + e.target.id ).toggle( e.target.checked );
-       } ).trigger( 'change' );
-
-       // Also dynamically show/hide the "other time" input under each dropdown
+       // Dynamically show/hide the "other time" input under each dropdown
        $( '.mw-userrights-nested select' ).on( 'change', function ( e ) {
                $( e.target.parentNode ).find( 'input' ).toggle( $( e.target ).val() === 'other' );
-       } ).trigger( 'change' );
+       } );
 }( jQuery ) );
diff --git a/tests/phpunit/includes/GlobalFunctions/wfStringToBoolTest.php b/tests/phpunit/includes/GlobalFunctions/wfStringToBoolTest.php
new file mode 100644 (file)
index 0000000..7f56b60
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+
+/**
+ * @group GlobalFunctions
+ * @covers ::wfStringToBool
+ */
+class WfStringToBoolTest extends MediaWikiTestCase {
+
+       public function getTestCases() {
+               return [
+                       [ 'true', true ],
+                       [ 'on', true ],
+                       [ 'yes', true ],
+                       [ 'TRUE', true ],
+                       [ 'YeS', true ],
+                       [ 'On', true ],
+                       [ '1', true ],
+                       [ '+1', true ],
+                       [ '01', true ],
+                       [ '-001', true ],
+                       [ '  1', true ],
+                       [ '-1  ', true ],
+                       [ '', false ],
+                       [ '0', false ],
+                       [ 'false', false ],
+                       [ 'NO', false ],
+                       [ 'NOT', false ],
+                       [ 'never', false ],
+                       [ '!&', false ],
+                       [ '-0', false ],
+                       [ '+0', false ],
+                       [ 'forget about it', false ],
+                       [ ' on', false ],
+                       [ 'true ', false ],
+               ];
+       }
+
+       /**
+        * @dataProvider getTestCases
+        * @param string $str
+        * @param bool $bool
+        */
+       public function testStr2Bool( $str, $bool ) {
+               if ( $bool ) {
+                       $this->assertTrue( wfStringToBool( $str ) );
+               } else {
+                       $this->assertFalse( wfStringToBool( $str ) );
+               }
+       }
+
+}
index f3d4916..e867f5e 100644 (file)
@@ -447,6 +447,47 @@ class HtmlTest extends MediaWikiTestCase {
                );
        }
 
+       /**
+        * @covers Html::warningBox
+        * @covers Html::messageBox
+        */
+       public function testWarningBox() {
+               $this->assertEquals(
+                       Html::warningBox( 'warn' ),
+                       '<div class="warningbox">warn</div>'
+               );
+       }
+
+       /**
+        * @covers Html::errorBox
+        * @covers Html::messageBox
+        */
+       public function testErrorBox() {
+               $this->assertEquals(
+                       Html::errorBox( 'err' ),
+                       '<div class="errorbox">err</div>'
+               );
+               $this->assertEquals(
+                       Html::errorBox( 'err', 'heading' ),
+                       '<div class="errorbox"><h2>heading</h2>err</div>'
+               );
+       }
+
+       /**
+        * @covers Html::successBox
+        * @covers Html::messageBox
+        */
+       public function testSuccessBox() {
+               $this->assertEquals(
+                       Html::successBox( 'great' ),
+                       '<div class="successbox">great</div>'
+               );
+               $this->assertEquals(
+                       Html::successBox( '<script>beware no escaping!</script>' ),
+                       '<div class="successbox"><script>beware no escaping!</script></div>'
+               );
+       }
+
        /**
         * List of input element types values introduced by HTML5
         * Full list at https://www.w3.org/TR/html-markup/input.html
index 2fdf590..20e69ae 100644 (file)
@@ -1326,6 +1326,16 @@ abstract class RevisionDbTestBase extends MediaWikiTestCase {
                        $expected,
                        Revision::userCanBitfield( $bitField, $field, $user, $title )
                );
+
+               // Fallback to $wgUser
+               $this->setMwGlobals(
+                       'wgUser',
+                       $user
+               );
+               $this->assertSame(
+                       $expected,
+                       Revision::userCanBitfield( $bitField, $field, null, $title )
+               );
        }
 
        public function provideUserCan() {
index b7e410c..d933d93 100644 (file)
@@ -372,6 +372,7 @@ class RevisionTest extends MediaWikiTestCase {
         * @covers Revision::fetchFromConds
         */
        public function testFetchFromConds( $flags, array $options ) {
+               $this->setMwGlobals( 'wgCommentTableSchemaMigrationStage', MIGRATION_OLD );
                $conditions = [ 'conditionsArray' ];
 
                $db = $this->getMock( IDatabase::class );
@@ -577,4 +578,717 @@ class RevisionTest extends MediaWikiTestCase {
                $this->assertSame( 'AAAABBAAA', $cache->get( $cacheKey ) );
        }
 
+       /**
+        * @covers Revision::userJoinCond
+        */
+       public function testUserJoinCond() {
+               $this->hideDeprecated( 'Revision::userJoinCond' );
+               $this->assertEquals(
+                       [ 'LEFT JOIN', [ 'rev_user != 0', 'user_id = rev_user' ] ],
+                       Revision::userJoinCond()
+               );
+       }
+
+       /**
+        * @covers Revision::pageJoinCond
+        */
+       public function testPageJoinCond() {
+               $this->hideDeprecated( 'Revision::pageJoinCond' );
+               $this->assertEquals(
+                       [ 'INNER JOIN', [ 'page_id = rev_page' ] ],
+                       Revision::pageJoinCond()
+               );
+       }
+
+       public function provideSelectFields() {
+               yield [
+                       true,
+                       [
+                               'rev_id',
+                               'rev_page',
+                               'rev_text_id',
+                               'rev_timestamp',
+                               'rev_user_text',
+                               'rev_user',
+                               'rev_minor_edit',
+                               'rev_deleted',
+                               'rev_len',
+                               'rev_parent_id',
+                               'rev_sha1',
+                               'rev_comment_text' => 'rev_comment',
+                               'rev_comment_data' => 'NULL',
+                               'rev_comment_cid' => 'NULL',
+                               'rev_content_format',
+                               'rev_content_model',
+                       ]
+               ];
+               yield [
+                       false,
+                       [
+                               'rev_id',
+                               'rev_page',
+                               'rev_text_id',
+                               'rev_timestamp',
+                               'rev_user_text',
+                               'rev_user',
+                               'rev_minor_edit',
+                               'rev_deleted',
+                               'rev_len',
+                               'rev_parent_id',
+                               'rev_sha1',
+                               'rev_comment_text' => 'rev_comment',
+                               'rev_comment_data' => 'NULL',
+                               'rev_comment_cid' => 'NULL',
+                       ]
+               ];
+       }
+
+       /**
+        * @dataProvider provideSelectFields
+        * @covers Revision::selectFields
+        * @todo a true unit test would mock CommentStore
+        */
+       public function testSelectFields( $contentHandlerUseDB, $expected ) {
+               $this->hideDeprecated( 'Revision::selectFields' );
+               $this->setMwGlobals( 'wgContentHandlerUseDB', $contentHandlerUseDB );
+               $this->setMwGlobals( 'wgCommentTableSchemaMigrationStage', MIGRATION_OLD );
+               $this->assertEquals( $expected, Revision::selectFields() );
+       }
+
+       public function provideSelectArchiveFields() {
+               yield [
+                       true,
+                       [
+                               'ar_id',
+                               'ar_page_id',
+                               'ar_rev_id',
+                               'ar_text',
+                               'ar_text_id',
+                               'ar_timestamp',
+                               'ar_user_text',
+                               'ar_user',
+                               'ar_minor_edit',
+                               'ar_deleted',
+                               'ar_len',
+                               'ar_parent_id',
+                               'ar_sha1',
+                               'ar_comment_text' => 'ar_comment',
+                               'ar_comment_data' => 'NULL',
+                               'ar_comment_cid' => 'NULL',
+                               'ar_content_format',
+                               'ar_content_model',
+                       ]
+               ];
+               yield [
+                       false,
+                       [
+                               'ar_id',
+                               'ar_page_id',
+                               'ar_rev_id',
+                               'ar_text',
+                               'ar_text_id',
+                               'ar_timestamp',
+                               'ar_user_text',
+                               'ar_user',
+                               'ar_minor_edit',
+                               'ar_deleted',
+                               'ar_len',
+                               'ar_parent_id',
+                               'ar_sha1',
+                               'ar_comment_text' => 'ar_comment',
+                               'ar_comment_data' => 'NULL',
+                               'ar_comment_cid' => 'NULL',
+                       ]
+               ];
+       }
+
+       /**
+        * @dataProvider provideSelectArchiveFields
+        * @covers Revision::selectArchiveFields
+        * @todo a true unit test would mock CommentStore
+        */
+       public function testSelectArchiveFields( $contentHandlerUseDB, $expected ) {
+               $this->hideDeprecated( 'Revision::selectArchiveFields' );
+               $this->setMwGlobals( 'wgContentHandlerUseDB', $contentHandlerUseDB );
+               $this->setMwGlobals( 'wgCommentTableSchemaMigrationStage', MIGRATION_OLD );
+               $this->assertEquals( $expected, Revision::selectArchiveFields() );
+       }
+
+       /**
+        * @covers Revision::selectTextFields
+        */
+       public function testSelectTextFields() {
+               $this->hideDeprecated( 'Revision::selectTextFields' );
+               $this->assertEquals(
+                       [
+                               'old_text',
+                               'old_flags',
+                       ],
+                       Revision::selectTextFields()
+               );
+       }
+
+       /**
+        * @covers Revision::selectPageFields
+        */
+       public function testSelectPageFields() {
+               $this->hideDeprecated( 'Revision::selectPageFields' );
+               $this->assertEquals(
+                       [
+                               'page_namespace',
+                               'page_title',
+                               'page_id',
+                               'page_latest',
+                               'page_is_redirect',
+                               'page_len',
+                       ],
+                       Revision::selectPageFields()
+               );
+       }
+
+       /**
+        * @covers Revision::selectUserFields
+        */
+       public function testSelectUserFields() {
+               $this->hideDeprecated( 'Revision::selectUserFields' );
+               $this->assertEquals(
+                       [
+                               'user_name',
+                       ],
+                       Revision::selectUserFields()
+               );
+       }
+
+       public function provideGetArchiveQueryInfo() {
+               yield 'wgContentHandlerUseDB false, wgCommentTableSchemaMigrationStage OLD' => [
+                       [
+                               'wgContentHandlerUseDB' => false,
+                               'wgCommentTableSchemaMigrationStage' => MIGRATION_OLD,
+                       ],
+                       [
+                               'tables' => [ 'archive' ],
+                               'fields' => [
+                                       'ar_id',
+                                       'ar_page_id',
+                                       'ar_rev_id',
+                                       'ar_text',
+                                       'ar_text_id',
+                                       'ar_timestamp',
+                                       'ar_user_text',
+                                       'ar_user',
+                                       'ar_minor_edit',
+                                       'ar_deleted',
+                                       'ar_len',
+                                       'ar_parent_id',
+                                       'ar_sha1',
+                                       'ar_comment_text' => 'ar_comment',
+                                       'ar_comment_data' => 'NULL',
+                                       'ar_comment_cid' => 'NULL',
+                               ],
+                               'joins' => [],
+                       ]
+               ];
+               yield 'wgContentHandlerUseDB true, wgCommentTableSchemaMigrationStage OLD' => [
+                       [
+                               'wgContentHandlerUseDB' => true,
+                               'wgCommentTableSchemaMigrationStage' => MIGRATION_OLD,
+                       ],
+                       [
+                               'tables' => [ 'archive' ],
+                               'fields' => [
+                                       'ar_id',
+                                       'ar_page_id',
+                                       'ar_rev_id',
+                                       'ar_text',
+                                       'ar_text_id',
+                                       'ar_timestamp',
+                                       'ar_user_text',
+                                       'ar_user',
+                                       'ar_minor_edit',
+                                       'ar_deleted',
+                                       'ar_len',
+                                       'ar_parent_id',
+                                       'ar_sha1',
+                                       'ar_comment_text' => 'ar_comment',
+                                       'ar_comment_data' => 'NULL',
+                                       'ar_comment_cid' => 'NULL',
+                                       'ar_content_format',
+                                       'ar_content_model',
+                               ],
+                               'joins' => [],
+                       ]
+               ];
+               yield 'wgContentHandlerUseDB false, wgCommentTableSchemaMigrationStage WRITE_BOTH' => [
+                       [
+                               'wgContentHandlerUseDB' => false,
+                               'wgCommentTableSchemaMigrationStage' => MIGRATION_WRITE_BOTH,
+                       ],
+                       [
+                               'tables' => [
+                                       'archive',
+                                       'comment_ar_comment' => 'comment',
+                               ],
+                               'fields' => [
+                                       'ar_id',
+                                       'ar_page_id',
+                                       'ar_rev_id',
+                                       'ar_text',
+                                       'ar_text_id',
+                                       'ar_timestamp',
+                                       'ar_user_text',
+                                       'ar_user',
+                                       'ar_minor_edit',
+                                       'ar_deleted',
+                                       'ar_len',
+                                       'ar_parent_id',
+                                       'ar_sha1',
+                                       'ar_comment_text' => 'COALESCE( comment_ar_comment.comment_text, ar_comment )',
+                                       'ar_comment_data' => 'comment_ar_comment.comment_data',
+                                       'ar_comment_cid' => 'comment_ar_comment.comment_id',
+                               ],
+                               'joins' => [
+                                       'comment_ar_comment' => [
+                                               'LEFT JOIN',
+                                               'comment_ar_comment.comment_id = ar_comment_id',
+                                       ],
+                               ],
+                       ]
+               ];
+               yield 'wgContentHandlerUseDB false, wgCommentTableSchemaMigrationStage WRITE_NEW' => [
+                       [
+                               'wgContentHandlerUseDB' => false,
+                               'wgCommentTableSchemaMigrationStage' => MIGRATION_WRITE_NEW,
+                       ],
+                       [
+                               'tables' => [
+                                       'archive',
+                                       'comment_ar_comment' => 'comment',
+                               ],
+                               'fields' => [
+                                       'ar_id',
+                                       'ar_page_id',
+                                       'ar_rev_id',
+                                       'ar_text',
+                                       'ar_text_id',
+                                       'ar_timestamp',
+                                       'ar_user_text',
+                                       'ar_user',
+                                       'ar_minor_edit',
+                                       'ar_deleted',
+                                       'ar_len',
+                                       'ar_parent_id',
+                                       'ar_sha1',
+                                       'ar_comment_text' => 'COALESCE( comment_ar_comment.comment_text, ar_comment )',
+                                       'ar_comment_data' => 'comment_ar_comment.comment_data',
+                                       'ar_comment_cid' => 'comment_ar_comment.comment_id',
+                               ],
+                               'joins' => [
+                                       'comment_ar_comment' => [
+                                               'LEFT JOIN',
+                                               'comment_ar_comment.comment_id = ar_comment_id',
+                                       ],
+                               ],
+                       ]
+               ];
+               yield 'wgContentHandlerUseDB false, wgCommentTableSchemaMigrationStage NEW' => [
+                       [
+                               'wgContentHandlerUseDB' => false,
+                               'wgCommentTableSchemaMigrationStage' => MIGRATION_NEW,
+                       ],
+                       [
+                               'tables' => [
+                                       'archive',
+                                       'comment_ar_comment' => 'comment',
+                               ],
+                               'fields' => [
+                                       'ar_id',
+                                       'ar_page_id',
+                                       'ar_rev_id',
+                                       'ar_text',
+                                       'ar_text_id',
+                                       'ar_timestamp',
+                                       'ar_user_text',
+                                       'ar_user',
+                                       'ar_minor_edit',
+                                       'ar_deleted',
+                                       'ar_len',
+                                       'ar_parent_id',
+                                       'ar_sha1',
+                                       'ar_comment_text' => 'comment_ar_comment.comment_text',
+                                       'ar_comment_data' => 'comment_ar_comment.comment_data',
+                                       'ar_comment_cid' => 'comment_ar_comment.comment_id',
+                               ],
+                               'joins' => [
+                                       'comment_ar_comment' => [
+                                               'JOIN',
+                                               'comment_ar_comment.comment_id = ar_comment_id',
+                                       ],
+                               ],
+                       ]
+               ];
+       }
+
+       /**
+        * @covers Revision::getArchiveQueryInfo
+        * @dataProvider provideGetArchiveQueryInfo
+        */
+       public function testGetArchiveQueryInfo( $globals, $expected ) {
+               $this->setMwGlobals( $globals );
+               $this->assertEquals(
+                       $expected,
+                       Revision::getArchiveQueryInfo()
+               );
+       }
+
+       public function provideGetQueryInfo() {
+               yield 'wgContentHandlerUseDB false, wgCommentTableSchemaMigrationStage OLD, opts none' => [
+                       [
+                               'wgContentHandlerUseDB' => false,
+                               'wgCommentTableSchemaMigrationStage' => MIGRATION_OLD,
+                       ],
+                       [],
+                       [
+                               'tables' => [ 'revision' ],
+                               'fields' => [
+                                       'rev_id',
+                                       'rev_page',
+                                       'rev_text_id',
+                                       'rev_timestamp',
+                                       'rev_user_text',
+                                       'rev_user',
+                                       'rev_minor_edit',
+                                       'rev_deleted',
+                                       'rev_len',
+                                       'rev_parent_id',
+                                       'rev_sha1',
+                                       'rev_comment_text' => 'rev_comment',
+                                       'rev_comment_data' => 'NULL',
+                                       'rev_comment_cid' => 'NULL',
+                               ],
+                               'joins' => [],
+                       ],
+               ];
+               yield 'wgContentHandlerUseDB false, wgCommentTableSchemaMigrationStage OLD, opts page' => [
+                       [
+                               'wgContentHandlerUseDB' => false,
+                               'wgCommentTableSchemaMigrationStage' => MIGRATION_OLD,
+                       ],
+                       [ 'page' ],
+                       [
+                               'tables' => [ 'revision', 'page' ],
+                               'fields' => [
+                                       'rev_id',
+                                       'rev_page',
+                                       'rev_text_id',
+                                       'rev_timestamp',
+                                       'rev_user_text',
+                                       'rev_user',
+                                       'rev_minor_edit',
+                                       'rev_deleted',
+                                       'rev_len',
+                                       'rev_parent_id',
+                                       'rev_sha1',
+                                       'rev_comment_text' => 'rev_comment',
+                                       'rev_comment_data' => 'NULL',
+                                       'rev_comment_cid' => 'NULL',
+                                       'page_namespace',
+                                       'page_title',
+                                       'page_id',
+                                       'page_latest',
+                                       'page_is_redirect',
+                                       'page_len',
+                               ],
+                               'joins' => [
+                                       'page' => [
+                                               'INNER JOIN',
+                                               [ 'page_id = rev_page' ],
+                                       ],
+                               ],
+                       ],
+               ];
+               yield 'wgContentHandlerUseDB false, wgCommentTableSchemaMigrationStage OLD, opts user' => [
+                       [
+                               'wgContentHandlerUseDB' => false,
+                               'wgCommentTableSchemaMigrationStage' => MIGRATION_OLD,
+                       ],
+                       [ 'user' ],
+                       [
+                               'tables' => [ 'revision', 'user' ],
+                               'fields' => [
+                                       'rev_id',
+                                       'rev_page',
+                                       'rev_text_id',
+                                       'rev_timestamp',
+                                       'rev_user_text',
+                                       'rev_user',
+                                       'rev_minor_edit',
+                                       'rev_deleted',
+                                       'rev_len',
+                                       'rev_parent_id',
+                                       'rev_sha1',
+                                       'rev_comment_text' => 'rev_comment',
+                                       'rev_comment_data' => 'NULL',
+                                       'rev_comment_cid' => 'NULL',
+                                       'user_name',
+                               ],
+                               'joins' => [
+                                       'user' => [
+                                               'LEFT JOIN',
+                                               [
+                                                       'rev_user != 0',
+                                                       'user_id = rev_user',
+                                               ],
+                                       ],
+                               ],
+                       ],
+               ];
+               yield 'wgContentHandlerUseDB false, wgCommentTableSchemaMigrationStage OLD, opts text' => [
+                       [
+                               'wgContentHandlerUseDB' => false,
+                               'wgCommentTableSchemaMigrationStage' => MIGRATION_OLD,
+                       ],
+                       [ 'text' ],
+                       [
+                               'tables' => [ 'revision', 'text' ],
+                               'fields' => [
+                                       'rev_id',
+                                       'rev_page',
+                                       'rev_text_id',
+                                       'rev_timestamp',
+                                       'rev_user_text',
+                                       'rev_user',
+                                       'rev_minor_edit',
+                                       'rev_deleted',
+                                       'rev_len',
+                                       'rev_parent_id',
+                                       'rev_sha1',
+                                       'rev_comment_text' => 'rev_comment',
+                                       'rev_comment_data' => 'NULL',
+                                       'rev_comment_cid' => 'NULL',
+                                       'old_text',
+                                       'old_flags',
+                               ],
+                               'joins' => [
+                                       'text' => [
+                                               'INNER JOIN',
+                                               [ 'rev_text_id=old_id' ],
+                                       ],
+                               ],
+                       ],
+               ];
+               yield 'wgContentHandlerUseDB false, wgCommentTableSchemaMigrationStage OLD, opts 3' => [
+                       [
+                               'wgContentHandlerUseDB' => false,
+                               'wgCommentTableSchemaMigrationStage' => MIGRATION_OLD,
+                       ],
+                       [ 'text', 'page', 'user' ],
+                       [
+                               'tables' => [ 'revision', 'page', 'user', 'text' ],
+                               'fields' => [
+                                       'rev_id',
+                                       'rev_page',
+                                       'rev_text_id',
+                                       'rev_timestamp',
+                                       'rev_user_text',
+                                       'rev_user',
+                                       'rev_minor_edit',
+                                       'rev_deleted',
+                                       'rev_len',
+                                       'rev_parent_id',
+                                       'rev_sha1',
+                                       'rev_comment_text' => 'rev_comment',
+                                       'rev_comment_data' => 'NULL',
+                                       'rev_comment_cid' => 'NULL',
+                                       'page_namespace',
+                                       'page_title',
+                                       'page_id',
+                                       'page_latest',
+                                       'page_is_redirect',
+                                       'page_len',
+                                       'user_name',
+                                       'old_text',
+                                       'old_flags',
+                               ],
+                               'joins' => [
+                                       'page' => [
+                                               'INNER JOIN',
+                                               [ 'page_id = rev_page' ],
+                                       ],
+                                       'user' => [
+                                               'LEFT JOIN',
+                                               [
+                                                       'rev_user != 0',
+                                                       'user_id = rev_user',
+                                               ],
+                                       ],
+                                       'text' => [
+                                               'INNER JOIN',
+                                               [ 'rev_text_id=old_id' ],
+                                       ],
+                               ],
+                       ],
+               ];
+               yield 'wgContentHandlerUseDB true, wgCommentTableSchemaMigrationStage OLD, opts none' => [
+                       [
+                               'wgContentHandlerUseDB' => true,
+                               'wgCommentTableSchemaMigrationStage' => MIGRATION_OLD,
+                       ],
+                       [],
+                       [
+                               'tables' => [ 'revision' ],
+                               'fields' => [
+                                       'rev_id',
+                                       'rev_page',
+                                       'rev_text_id',
+                                       'rev_timestamp',
+                                       'rev_user_text',
+                                       'rev_user',
+                                       'rev_minor_edit',
+                                       'rev_deleted',
+                                       'rev_len',
+                                       'rev_parent_id',
+                                       'rev_sha1',
+                                       'rev_comment_text' => 'rev_comment',
+                                       'rev_comment_data' => 'NULL',
+                                       'rev_comment_cid' => 'NULL',
+                                       'rev_content_format',
+                                       'rev_content_model',
+                               ],
+                               'joins' => [],
+                       ],
+               ];
+               yield 'wgContentHandlerUseDB false, wgCommentTableSchemaMigrationStage WRITE_BOTH, opts none' => [
+                       [
+                               'wgContentHandlerUseDB' => false,
+                               'wgCommentTableSchemaMigrationStage' => MIGRATION_WRITE_BOTH,
+                       ],
+                       [],
+                       [
+                               'tables' => [
+                                       'revision',
+                                       'temp_rev_comment' => 'revision_comment_temp',
+                                       'comment_rev_comment' => 'comment',
+                               ],
+                               'fields' => [
+                                       'rev_id',
+                                       'rev_page',
+                                       'rev_text_id',
+                                       'rev_timestamp',
+                                       'rev_user_text',
+                                       'rev_user',
+                                       'rev_minor_edit',
+                                       'rev_deleted',
+                                       'rev_len',
+                                       'rev_parent_id',
+                                       'rev_sha1',
+                                       'rev_comment_text' => 'COALESCE( comment_rev_comment.comment_text, rev_comment )',
+                                       'rev_comment_data' => 'comment_rev_comment.comment_data',
+                                       'rev_comment_cid' => 'comment_rev_comment.comment_id',
+                               ],
+                               'joins' => [
+                                       'temp_rev_comment' => [
+                                               'LEFT JOIN',
+                                               'temp_rev_comment.revcomment_rev = rev_id',
+                                       ],
+                                       'comment_rev_comment' => [
+                                               'LEFT JOIN',
+                                               'comment_rev_comment.comment_id = temp_rev_comment.revcomment_comment_id',
+                                       ],
+                               ],
+                       ],
+               ];
+               yield 'wgContentHandlerUseDB false, wgCommentTableSchemaMigrationStage WRITE_NEW, opts none' => [
+                       [
+                               'wgContentHandlerUseDB' => false,
+                               'wgCommentTableSchemaMigrationStage' => MIGRATION_WRITE_NEW,
+                       ],
+                       [],
+                       [
+                               'tables' => [
+                                       'revision',
+                                       'temp_rev_comment' => 'revision_comment_temp',
+                                       'comment_rev_comment' => 'comment',
+                               ],
+                               'fields' => [
+                                       'rev_id',
+                                       'rev_page',
+                                       'rev_text_id',
+                                       'rev_timestamp',
+                                       'rev_user_text',
+                                       'rev_user',
+                                       'rev_minor_edit',
+                                       'rev_deleted',
+                                       'rev_len',
+                                       'rev_parent_id',
+                                       'rev_sha1',
+                                       'rev_comment_text' => 'COALESCE( comment_rev_comment.comment_text, rev_comment )',
+                                       'rev_comment_data' => 'comment_rev_comment.comment_data',
+                                       'rev_comment_cid' => 'comment_rev_comment.comment_id',
+                               ],
+                               'joins' => [
+                                       'temp_rev_comment' => [
+                                               'LEFT JOIN',
+                                               'temp_rev_comment.revcomment_rev = rev_id',
+                                       ],
+                                       'comment_rev_comment' => [
+                                               'LEFT JOIN',
+                                               'comment_rev_comment.comment_id = temp_rev_comment.revcomment_comment_id',
+                                       ],
+                               ],
+                       ],
+               ];
+               yield 'wgContentHandlerUseDB false, wgCommentTableSchemaMigrationStage NEW, opts none' => [
+                       [
+                               'wgContentHandlerUseDB' => false,
+                               'wgCommentTableSchemaMigrationStage' => MIGRATION_NEW,
+                       ],
+                       [],
+                       [
+                               'tables' => [
+                                       'revision',
+                                       'temp_rev_comment' => 'revision_comment_temp',
+                                       'comment_rev_comment' => 'comment',
+                               ],
+                               'fields' => [
+                                       'rev_id',
+                                       'rev_page',
+                                       'rev_text_id',
+                                       'rev_timestamp',
+                                       'rev_user_text',
+                                       'rev_user',
+                                       'rev_minor_edit',
+                                       'rev_deleted',
+                                       'rev_len',
+                                       'rev_parent_id',
+                                       'rev_sha1',
+                                       'rev_comment_text' => 'comment_rev_comment.comment_text',
+                                       'rev_comment_data' => 'comment_rev_comment.comment_data',
+                                       'rev_comment_cid' => 'comment_rev_comment.comment_id',
+                               ],
+                               'joins' => [
+                                       'temp_rev_comment' => [
+                                               'JOIN',
+                                               'temp_rev_comment.revcomment_rev = rev_id',
+                                       ],
+                                       'comment_rev_comment' => [
+                                               'JOIN',
+                                               'comment_rev_comment.comment_id = temp_rev_comment.revcomment_comment_id',
+                                       ],
+                               ],
+                       ],
+               ];
+       }
+
+       /**
+        * @covers Revision::getQueryInfo
+        * @dataProvider provideGetQueryInfo
+        */
+       public function testGetQueryInfo( $globals, $options, $expected ) {
+               $this->setMwGlobals( $globals );
+               $this->assertEquals(
+                       $expected,
+                       Revision::getQueryInfo( $options )
+               );
+       }
+
 }
index 7814b83..9cb2f94 100644 (file)
@@ -42,7 +42,7 @@ class MemcachedBagOStuffTest extends MediaWikiTestCase {
                );
 
                $this->assertEquals(
-                       'test:##dc89dcb43b28614da27660240af478b5',
+                       'test:BagOStuff-long-key:##dc89dcb43b28614da27660240af478b5',
                        $this->cache->makeKey( '𝕖𝕧𝕖𝕟', '𝕚𝕗', '𝕨𝕖', '𝕄𝔻𝟝', '𝕖𝕒𝕔𝕙',
                                '𝕒𝕣𝕘𝕦𝕞𝕖𝕟𝕥', '𝕥𝕙𝕚𝕤', '𝕜𝕖𝕪', '𝕨𝕠𝕦𝕝𝕕', '𝕤𝕥𝕚𝕝𝕝', '𝕓𝕖', '𝕥𝕠𝕠', '𝕝𝕠𝕟𝕘' )
                );
index 269575b..d7e72e1 100644 (file)
@@ -530,11 +530,10 @@ class SanitizerTest extends MediaWikiTestCase {
                        [ '<p id="one">Foo</p><p id="two">Bar</p>', 'FooBar' ],
                        [ "<p>Foo</p>\n<p>Bar</p>", 'Foo Bar' ],
                        [ '<p>Hello &lt;strong&gt; wor&#x6c;&#100; caf&eacute;</p>', 'Hello <strong> world café' ],
-                       // This one is broken, see T179978
-                       //[
-                       //      '<p><small data-foo=\'bar"&lt;baz>quux\'><a href="./Foo">Bar</a></small> Whee!</p>',
-                       //      'Bar Whee!'
-                       //],
+                       [
+                               '<p><small data-foo=\'bar"&lt;baz>quux\'><a href="./Foo">Bar</a></small> Whee!</p>',
+                               'Bar Whee!'
+                       ],
                        [ '1<span class="<?php">2</span>3', '123' ],
                        [ '1<span class="<?">2</span>3', '123' ],
                ];
index 6b16cbf..f980af0 100644 (file)
@@ -252,6 +252,11 @@ class RemexDriverTest extends MediaWikiTestCase {
                        '<table><b>1<p>2</b>3</p>',
                        '<b>1</b><p><b>2</b>3</p><table></table>'
                ],
+               [
+                       'AAA causes reparent of p-wrapped text node (T178632)',
+                       '<i><blockquote>x</i></blockquote>',
+                       '<i></i><blockquote><p><i>x</i></p></blockquote>',
+               ],
        ];
 
        public function provider() {
index 4dbda74..f833554 100644 (file)
@@ -116,4 +116,33 @@ class TitleValueTest extends MediaWikiTestCase {
 
                $this->assertEquals( $text, $title->getText() );
        }
+
+       public function provideTestToString() {
+               yield [
+                       new TitleValue( 0, 'Foo' ),
+                       '0:Foo'
+               ];
+               yield [
+                       new TitleValue( 1, 'Bar_Baz' ),
+                       '1:Bar_Baz'
+               ];
+               yield [
+                       new TitleValue( 9, 'JoJo', 'Frag' ),
+                       '9:JoJo#Frag'
+               ];
+               yield [
+                       new TitleValue( 200, 'tea', 'Fragment', 'wikicode' ),
+                       'wikicode:200:tea#Fragment'
+               ];
+       }
+
+       /**
+        * @dataProvider provideTestToString
+        */
+       public function testToString( TitleValue $value, $expected ) {
+               $this->assertSame(
+                       $expected,
+                       $value->__toString()
+               );
+       }
 }
diff --git a/tests/phpunit/languages/classes/LanguageCrhTest.php b/tests/phpunit/languages/classes/LanguageCrhTest.php
new file mode 100644 (file)
index 0000000..f34288c
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+
+class LanguageCrhTest extends LanguageClassesTestCase {
+       /**
+        * @dataProvider provideAutoConvertToAllVariants
+        * @covers Language::autoConvertToAllVariants
+        */
+       public function testAutoConvertToAllVariants( $result, $value ) {
+               $this->assertEquals( $result, $this->getLang()->autoConvertToAllVariants( $value ) );
+       }
+
+       public static function provideAutoConvertToAllVariants() {
+               return [
+                       [ // general words, covering more of the alphabet
+                               [
+                                       'crh'      => 'рузгярнынъ ruzgârnıñ Париж Parij',
+                                       'crh-cyrl' => 'рузгярнынъ рузгярнынъ Париж Париж',
+                                       'crh-latn' => 'ruzgârnıñ ruzgârnıñ Parij Parij',
+                               ],
+                               'рузгярнынъ ruzgârnıñ Париж Parij'
+                       ],
+                       [ // general words, covering more of the alphabet
+                               [
+                                       'crh'      => 'чёкюч çöküç элифбени elifbeni полициясы politsiyası',
+                                       'crh-cyrl' => 'чёкюч чёкюч элифбени элифбени полициясы полициясы',
+                                       'crh-latn' => 'çöküç çöküç elifbeni elifbeni politsiyası politsiyası',
+                               ],
+                               'чёкюч çöküç элифбени elifbeni полициясы politsiyası'
+                       ],
+                       [ // general words, covering more of the alphabet
+                               [
+                                       'crh'      => 'хусусында hususında акъшамларны aqşamlarnı опькеленюв öpkelenüv',
+                                       'crh-cyrl' => 'хусусында хусусында акъшамларны акъшамларны опькеленюв опькеленюв',
+                                       'crh-latn' => 'hususında hususında aqşamlarnı aqşamlarnı öpkelenüv öpkelenüv',
+                               ],
+                               'хусусында hususında акъшамларны aqşamlarnı опькеленюв öpkelenüv'
+                       ],
+                       [ // general words, covering more of the alphabet
+                               [
+                                       'crh'      => 'кулюмсиреди külümsiredi айтмайджагъым aytmaycağım козьяшсыз közyaşsız',
+                                       'crh-cyrl' => 'кулюмсиреди кулюмсиреди айтмайджагъым айтмайджагъым козьяшсыз козьяшсыз',
+                                       'crh-latn' => 'külümsiredi külümsiredi aytmaycağım aytmaycağım közyaşsız közyaşsız',
+                               ],
+                               'кулюмсиреди külümsiredi айтмайджагъым aytmaycağım козьяшсыз közyaşsız'
+                       ],
+                       [ // exception words
+                               [
+                                       'crh'      => 'инструменталь instrumental гургуль gürgül тюшюнмемек tüşünmemek',
+                                       'crh-cyrl' => 'инструменталь инструменталь гургуль гургуль тюшюнмемек тюшюнмемек',
+                                       'crh-latn' => 'instrumental instrumental gürgül gürgül tüşünmemek tüşünmemek',
+                               ],
+                               'инструменталь instrumental гургуль gürgül тюшюнмемек tüşünmemek'
+                       ],
+                       [ // multi part words
+                               [
+                                       'crh'      => 'эки юз eki yüz',
+                                       'crh-cyrl' => 'эки юз эки юз',
+                                       'crh-latn' => 'eki yüz eki yüz',
+                               ],
+                               'эки юз eki yüz'
+                       ],
+                       [ // ALL CAPS, made up acronyms
+                               [
+                                       'crh'      => 'ÑAB QIC ĞUK COT НЪАБ КЪЫДж ГЪУК ДЖОТ CA ДЖА',
+                                       'crh-cyrl' => 'НЪАБ КЪЫДж ГЪУК ДЖОТ НЪАБ КЪЫДж ГЪУК ДЖОТ ДЖА ДЖА',
+                                       'crh-latn' => 'ÑAB QIC ĞUK COT ÑAB QIC ĞUK COT CA CA',
+                               ],
+                               'ÑAB QIC ĞUK COT НЪАБ КЪЫДж ГЪУК ДЖОТ CA ДЖА'
+                       ],
+               ];
+       }
+}
index 7912f97..cbc74f4 100644 (file)
@@ -182,8 +182,7 @@ class ApiStructureTest extends MediaWikiTestCase {
 
                foreach ( [ $paramsPlain, $paramsForHelp ] as $params ) {
                        foreach ( $params as $param => $config ) {
-                               if (
-                                       isset( $config[ApiBase::PARAM_ISMULTI_LIMIT1] )
+                               if ( isset( $config[ApiBase::PARAM_ISMULTI_LIMIT1] )
                                        || isset( $config[ApiBase::PARAM_ISMULTI_LIMIT2] )
                                ) {
                                        $this->assertTrue( !empty( $config[ApiBase::PARAM_ISMULTI] ), $param
@@ -199,6 +198,15 @@ class ApiStructureTest extends MediaWikiTestCase {
                                                $config[ApiBase::PARAM_ISMULTI_LIMIT2], $param
                                                . 'PARAM_ISMULTI limit cannot be smaller for users with apihighlimits rights' );
                                }
+                               if ( isset( $config[ApiBase::PARAM_MAX_BYTES] )
+                                       || isset( $config[ApiBase::PARAM_MAX_CHARS] )
+                               ) {
+                                       $default = isset( $config[ApiBase::PARAM_DFLT] ) ? $config[ApiBase::PARAM_DFLT] : null;
+                                       $type = isset( $config[ApiBase::PARAM_TYPE] ) ? $config[ApiBase::PARAM_TYPE]
+                                               : gettype( $default );
+                                       $this->assertContains( $type, [ 'NULL', 'string', 'text', 'password' ],
+                                               'PARAM_MAX_BYTES/CHARS is only supported for string-like types' );
+                               }
                        }
                }
        }