Merge "RELEASE-NOTES to HISTORY for 1.27.4/1.28.3/1.29.2"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 27 Nov 2017 16:39:07 +0000 (16:39 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 27 Nov 2017 16:39:08 +0000 (16:39 +0000)
222 files changed:
RELEASE-NOTES-1.31
includes/Feed.php
includes/Html.php
includes/OutputPage.php
includes/Preferences.php
includes/StreamFile.php
includes/api/ApiFormatBase.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiStashEdit.php
includes/api/i18n/de.json
includes/api/i18n/es.json
includes/api/i18n/fr.json
includes/api/i18n/it.json
includes/api/i18n/ko.json
includes/api/i18n/pt.json
includes/api/i18n/sv.json
includes/api/i18n/zh-hans.json
includes/api/i18n/zh-hant.json
includes/diff/DifferenceEngine.php
includes/filebackend/FileBackendGroup.php
includes/filerepo/FileRepo.php
includes/filerepo/RepoGroup.php
includes/filerepo/file/File.php
includes/filerepo/file/ForeignAPIFile.php
includes/filerepo/file/LocalFile.php
includes/filerepo/file/UnregisteredLocalFile.php
includes/installer/InstallDocFormatter.php
includes/installer/i18n/pt.json
includes/libs/objectcache/HashBagOStuff.php
includes/libs/objectcache/WANObjectCache.php
includes/libs/rdbms/database/IDatabase.php
includes/libs/rdbms/lbfactory/LBFactoryMulti.php
includes/libs/rdbms/lbfactory/LBFactorySimple.php
includes/libs/rdbms/loadbalancer/ILoadBalancer.php
includes/libs/rdbms/loadbalancer/LoadBalancer.php
includes/libs/rdbms/loadmonitor/LoadMonitor.php
includes/media/DjVu.php
includes/media/MediaHandler.php
includes/page/ImagePage.php
includes/parser/CoreParserFunctions.php
includes/parser/Sanitizer.php
includes/specials/SpecialMediaStatistics.php
includes/specials/SpecialPasswordReset.php
includes/specials/SpecialRecentchangeslinked.php
includes/specials/SpecialResetTokens.php
includes/specials/SpecialUnblock.php
includes/specials/SpecialUserrights.php
includes/upload/UploadBase.php
includes/upload/UploadStash.php
includes/utils/MWFileProps.php
languages/i18n/ais.json
languages/i18n/ar.json
languages/i18n/az.json
languages/i18n/be-tarask.json
languages/i18n/bn.json
languages/i18n/br.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/ceb.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/dty.json
languages/i18n/egl.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/eu.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/gu.json
languages/i18n/he.json
languages/i18n/hif-latn.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/hy.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jv.json
languages/i18n/khw.json
languages/i18n/ko.json
languages/i18n/lb.json
languages/i18n/li.json
languages/i18n/lv.json
languages/i18n/lzh.json
languages/i18n/mk.json
languages/i18n/my.json
languages/i18n/nb.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/pl.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/war.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/Maintenance.php
maintenance/backup.inc
maintenance/benchmarks/benchmarkJSMinPlus.php
maintenance/benchmarks/benchmarkParse.php
maintenance/benchmarks/benchmarkPurge.php
maintenance/benchmarks/benchmarkTidy.php
maintenance/changePassword.php
maintenance/checkComposerLockUpToDate.php
maintenance/cleanupSpam.php
maintenance/cleanupTitles.php
maintenance/cleanupUploadStash.php
maintenance/compareParsers.php
maintenance/convertExtensionToRegistration.php
maintenance/copyFileBackend.php
maintenance/copyJobQueue.php
maintenance/createAndPromote.php
maintenance/createCommonPasswordCdb.php
maintenance/deleteBatch.php
maintenance/deleteDefaultMessages.php
maintenance/deleteEqualMessages.php
maintenance/dumpBackup.php
maintenance/dumpIterator.php
maintenance/edit.php
maintenance/eraseArchivedFile.php
maintenance/exportSites.php
maintenance/findHooks.php
maintenance/findOrphanedFiles.php
maintenance/fixDoubleRedirects.php
maintenance/fixTimestamps.php
maintenance/formatInstallDoc.php
maintenance/generateJsonI18n.php
maintenance/generateSitemap.php
maintenance/getConfiguration.php
maintenance/getText.php
maintenance/hhvm/makeRepo.php
maintenance/importDump.php
maintenance/importImages.php
maintenance/importTextFiles.php
maintenance/install.php
maintenance/invalidateUserSessions.php
maintenance/language/generateCollationData.php
maintenance/language/generateNormalizerDataAr.php
maintenance/language/langmemusage.php
maintenance/makeTestEdits.php
maintenance/manageJobs.php
maintenance/mctest.php
maintenance/mergeMessageFileList.php
maintenance/migrateFileRepoLayout.php
maintenance/migrateUserGroup.php
maintenance/minify.php
maintenance/moveBatch.php
maintenance/mwdocgen.php
maintenance/pageExists.php
maintenance/populateContentModel.php
maintenance/populateImageSha1.php
maintenance/populateRevisionLength.php
maintenance/populateRevisionSha1.php
maintenance/protect.php
maintenance/pruneFileCache.php
maintenance/purgeParserCache.php
maintenance/reassignEdits.php
maintenance/rebuildFileCache.php
maintenance/rebuildLocalisationCache.php
maintenance/rebuildSitesCache.php
maintenance/rebuildrecentchanges.php
maintenance/rebuildtextindex.php
maintenance/recountCategories.php
maintenance/refreshImageMetadata.php
maintenance/refreshLinks.php
maintenance/removeUnusedAccounts.php
maintenance/renameDbPrefix.php
maintenance/resetUserEmail.php
maintenance/rollbackEdits.php
maintenance/runJobs.php
maintenance/shell.php
maintenance/sql.php
maintenance/sqlite.php
maintenance/storage/checkStorage.php
maintenance/storage/compressOld.php
maintenance/storage/dumpRev.php
maintenance/storage/orphanStats.php
maintenance/syncFileBackend.php
maintenance/undelete.php
maintenance/update.php
maintenance/updateDoubleWidthSearch.php
maintenance/updateExtensionJsonSchema.php
maintenance/updateRestrictions.php
maintenance/updateSpecialPages.php
maintenance/userOptions.php
maintenance/validateRegistrationFile.php
maintenance/view.php
maintenance/wrapOldPasswords.php
package.json
resources/Resources.php
resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
resources/src/mediawiki.rcfilters/mw.rcfilters.UriProcessor.js
tests/parser/parserTests.txt
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/ExtraParserTest.php
tests/phpunit/includes/HtmlTest.php
tests/phpunit/includes/MessageTest.php
tests/phpunit/includes/RevisionTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/content/TextContentTest.php
tests/phpunit/includes/diff/DifferenceEngineTest.php
tests/phpunit/includes/installer/InstallDocFormatterTest.php
tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php
tests/phpunit/includes/media/MediaWikiMediaTestCase.php
tests/phpunit/includes/media/WebPTest.php
tests/phpunit/includes/page/WikiPageTestContentHandlerUseDB.php [deleted file]

index f1fd9d3..3de0e17 100644 (file)
@@ -102,6 +102,9 @@ changes to languages because of Phabricator reports.
   override DifferenceEngine::getDiffBodyCacheKeyParams() instead.
 * The deprecated MW_DIFF_VERSION constant was removed.
   DifferenceEngine::MW_DIFF_VERSION should be used instead.
+* Use of Maintenance::error( $err, $die ) to exit script was deprecated. Use
+  Maintenance::fatalError() instead.
+* Passing a ParserOptions object to OutputPage::parserOptions() is deprecated.
 
 == Compatibility ==
 MediaWiki 1.31 requires PHP 5.5.9 or later. There is experimental support for
index fd223e6..35f2ce9 100644 (file)
@@ -232,7 +232,8 @@ abstract class ChannelFeed extends FeedItem {
                header( "Content-type: $mimetype; charset=UTF-8" );
 
                // Set a sane filename
-               $exts = MimeMagic::singleton()->getExtensionsForType( $mimetype );
+               $exts = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer()
+                       ->getExtensionsForType( $mimetype );
                $ext = $exts ? strtok( $exts, ' ' ) : 'xml';
                header( "Content-Disposition: inline; filename=\"feed.{$ext}\"" );
 
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 4635f99..a5f9c18 100644 (file)
@@ -1573,10 +1573,14 @@ class OutputPage extends ContextSource {
         * Get/set the ParserOptions object to use for wikitext parsing
         *
         * @param ParserOptions|null $options Either the ParserOption to use or null to only get the
-        *   current ParserOption object
+        *   current ParserOption object. This parameter is deprecated since 1.31.
         * @return ParserOptions
         */
        public function parserOptions( $options = null ) {
+               if ( $options !== null ) {
+                       wfDeprecated( __METHOD__ . ' with non-null $options', '1.31' );
+               }
+
                if ( $options !== null && !empty( $options->isBogus ) ) {
                        // Someone is trying to set a bogus pre-$wgUser PO. Check if it has
                        // been changed somehow, and keep it if so.
index e383f03..924e3ad 100644 (file)
@@ -1134,18 +1134,20 @@ class Preferences {
                        $defaultPreferences['watchlisttoken'] = [
                                'type' => 'api',
                        ];
+
+                       $tokenButton = new OOUI\ButtonWidget( [
+                               'href' => SpecialPage::getTitleFor( 'ResetTokens' )->getLinkURL( [
+                                       'returnto' => SpecialPage::getTitleFor( 'Preferences' )->getPrefixedText()
+                               ] ),
+                               'label' => $context->msg( 'prefs-watchlist-managetokens' )->text(),
+                       ] );
                        $defaultPreferences['watchlisttoken-info'] = [
                                'type' => 'info',
                                'section' => 'watchlist/tokenwatchlist',
                                'label-message' => 'prefs-watchlist-token',
-                               'default' => $user->getTokenFromOption( 'watchlisttoken' ),
-                               'help-message' => 'prefs-help-watchlist-token2',
-                       ];
-                       $defaultPreferences['watchlisttoken-info2'] = [
-                               'type' => 'info',
-                               'section' => 'watchlist/tokenwatchlist',
+                               'help-message' => 'prefs-help-tokenmanagement',
                                'raw' => true,
-                               'default' => $context->msg( 'prefs-help-watchlist-token2' )->parse(),
+                               'default' => (string)$tokenButton,
                        ];
                }
        }
index 71113a8..2ad42e5 100644 (file)
@@ -113,7 +113,7 @@ class StreamFile {
                        return 'unknown/unknown';
                }
 
-               $magic = MimeMagic::singleton();
+               $magic = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer();
                // Use the extension only, rather than magic numbers, to avoid opening
                // up vulnerabilities due to uploads of files with allowed extensions
                // but disallowed types.
index c5f2fcf..4348fc8 100644 (file)
@@ -78,7 +78,8 @@ abstract class ApiFormatBase extends ApiBase {
                } elseif ( $this->getIsHtml() ) {
                        return 'api-result.html';
                } else {
-                       $exts = MimeMagic::singleton()->getExtensionsForType( $this->getMimeType() );
+                       $exts = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer()
+                               ->getExtensionsForType( $this->getMimeType() );
                        $ext = $exts ? strtok( $exts, ' ' ) : strtolower( $this->mFormat );
                        return "api-result.$ext";
                }
index 6b896c9..2e9e69c 100644 (file)
@@ -283,6 +283,8 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $data['interwikimagic'] = (bool)$config->get( 'InterwikiMagic' );
                $data['magiclinks'] = $config->get( 'EnableMagicLinks' );
 
+               $data['categorycollation'] = $config->get( 'CategoryCollation' );
+
                Hooks::run( 'APIQuerySiteInfoGeneralInfo', [ $this, &$data ] );
 
                return $this->getResult()->addValue( 'query', $property, $data );
index 4bd6a3f..b4b9321 100644 (file)
@@ -181,9 +181,14 @@ class ApiStashEdit extends ApiBase {
                $title = $page->getTitle();
                $key = self::getStashKey( $title, self::getContentHash( $content ), $user );
 
-               // Use the master DB for fast blocking locks
+               // Use the master DB to allow for fast blocking locks on the "save path" where this
+               // value might actually be used to complete a page edit. If the edit submission request
+               // happens before this edit stash requests finishes, then the submission will block until
+               // the stash request finishes parsing. For the lock acquisition below, there is not much
+               // need to duplicate parsing of the same content/user/summary bundle, so try to avoid
+               // blocking at all here.
                $dbw = wfGetDB( DB_MASTER );
-               if ( !$dbw->lock( $key, __METHOD__, 1 ) ) {
+               if ( !$dbw->lock( $key, __METHOD__, 0 ) ) {
                        // De-duplicate requests on the same key
                        return self::ERROR_BUSY;
                }
index d3273db..ef2776f 100644 (file)
        "api-help-param-disabled-in-miser-mode": "Deaktiviert aufgrund des [[mw:Special:MyLanguage/Manual:$wgMiserMode|Miser-Modus]].",
        "api-help-param-continue": "Falls weitere Ergebnisse verfügbar sind, dies zum Fortfahren verwenden.",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(keine Beschreibung)</span>",
+       "api-help-param-maxbytes": "Kann nicht länger sein als {{PLURAL:$1|ein Byte|$1 Bytes}}.",
+       "api-help-param-maxchars": "Kann nicht länger sein als {{PLURAL:$1|ein|$1}} Zeichen.",
        "api-help-examples": "{{PLURAL:$1|Beispiel|Beispiele}}:",
        "api-help-permissions": "{{PLURAL:$1|Berechtigung|Berechtigungen}}:",
        "api-help-permissions-granted-to": "{{PLURAL:$1|Gewährt an}}: $2",
        "apierror-invalid-file-key": "Kein gültiger Dateischlüssel.",
        "apierror-invalidsection": "Der Parameter <var>section</var> muss eine gültige Abschnittskennung oder <kbd>new</kbd> sein.",
        "apierror-invaliduserid": "Die Benutzerkennung <var>$1</var> ist nicht gültig.",
+       "apierror-maxbytes": "Der Parameter <var>$1</var> kann nicht länger sein als {{PLURAL:$2|ein Byte|$2 Bytes}}",
+       "apierror-maxchars": "Der Parameter <var>$1</var> kann nicht länger sein als {{PLURAL:$2|ein|$2}} Zeichen",
        "apierror-nosuchsection": "Es gibt keinen Abschnitt $1.",
        "apierror-nosuchuserid": "Es gibt keinen Benutzer mit der Kennung $1.",
        "apierror-offline": "Aufgrund von Problemen bei der Netzwerkverbindung kannst du nicht weitermachen. Stelle sicher, dass du eine funktionierende Internetverbindung hast und versuche es erneut.",
index 06cd64f..00ea555 100644 (file)
        "api-help-param-direction": "En qué sentido hacer la enumeración:\n;newer: De más antiguos a más recientes. Nota: $1start debe ser anterior a $1end.\n;older: De más recientes a más antiguos (orden predefinido). Nota: $1start debe ser posterior a $1end.",
        "api-help-param-continue": "Cuando haya más resultados disponibles, utiliza esto para continuar.",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(sin descripción)</span>",
+       "api-help-param-maxbytes": "No puede sobrepasar $1 {{PLURAL:$1|byte|bytes}} de longitud.",
+       "api-help-param-maxchars": "No puede sobrepasar $1 {{PLURAL:$1|carácter|caracteres}} de longitud.",
        "api-help-examples": "{{PLURAL:$1|Ejemplo|Ejemplos}}:",
        "api-help-permissions": "{{PLURAL:$1|Permiso|Permisos}}:",
        "api-help-permissions-granted-to": "{{PLURAL:$1|Concedido a|Concedidos a}}: $2",
        "apierror-invalidurlparam": "Valor no válido para <var>$1urlparam</var> (<kbd>$2=$3</kbd>).",
        "apierror-invaliduser": "Nombre de usuario «$1» no válido.",
        "apierror-invaliduserid": "El identificador de usuario <var>$1</var> no es válido.",
+       "apierror-maxbytes": "El parámetro <var>$1</var> no puede sobrepasar $2 {{PLURAL:$2|byte|bytes}}",
+       "apierror-maxchars": "El parámetro <var>$1</var> no puede sobrepasar $2 {{PLURAL:$2|carácter|caracteres}} de longitud.",
        "apierror-mimesearchdisabled": "La búsqueda MIME está deshabilitada en el modo avaro.",
        "apierror-missingcontent-pageid": "Contenido faltante para la página con identificador $1.",
        "apierror-missingparam-at-least-one-of": "{{PLURAL:$2|El parámetro|Al menos uno de los parámetros}} $1 es necesario.",
index bdaf58c..c5ab016 100644 (file)
        "api-help-param-direction": "Dans quelle direction énumérer :\n;newer:Lister les plus anciens en premier. Note : $1start doit être avant $1end.\n;older:Lister les nouveaux en premier (par défaut). Note : $1start doit être postérieur à $1end.",
        "api-help-param-continue": "Quand plus de résultats sont disponibles, utiliser cela pour continuer.",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(aucune description)</span>",
+       "api-help-param-maxbytes": "Ne peut excéder $1 octet{{PLURAL:$1||s}}.",
+       "api-help-param-maxchars": "Ne peut excéder $1 caractères{{PLURAL:$1||s}}.",
        "api-help-examples": "{{PLURAL:$1|Exemple|Exemples}} :",
        "api-help-permissions": "{{PLURAL:$1|Droit|Droits}} :",
        "api-help-permissions-granted-to": "{{PLURAL:$1|Accordé à}} : $2",
        "apierror-invalidurlparam": "Valeur non valide pour <var>$1urlparam</var> (<kbd>$2=$3</kbd>).",
        "apierror-invaliduser": "Nom d'utilisateur invalide \"$1\".",
        "apierror-invaliduserid": "L'ID d'utilisateur <var>$1</var> n'est pas valide.",
+       "apierror-maxbytes": "Le paramètre <var>$1</var> ne peut excéder $2 octets{{PLURAL:$2||s}}",
+       "apierror-maxchars": "Le paramètre <var>$1</var> ne peut excéder $2 catactères{{PLURAL:$2||s}}",
        "apierror-maxlag-generic": "Attente d’un serveur de base de données : $1 {{PLURAL:$1|seconde|secondes}} de délai.",
        "apierror-maxlag": "Attente de $2 : $1 {{PLURAL:$1|seconed|secondes}} de délai.",
        "apierror-mimesearchdisabled": "La recherche MIME est désactivée en mode Misère.",
index fd88c18..5682036 100644 (file)
        "api-help-param-token": "Un token \"$1\" recuperato da [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
        "api-help-param-continue": "Quando più risultati sono disponibili, usa questo per continuare.",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(nessuna descrizione)</span>",
+       "api-help-param-maxbytes": "Non può essere più lungo di $1 {{PLURAL:$1|byte}}.",
+       "api-help-param-maxchars": "Non può essere più lungo di $1 {{PLURAL:$1|carattere|caratteri}}.",
        "api-help-examples": "{{PLURAL:$1|Esempio|Esempi}}:",
        "api-help-permissions": "{{PLURAL:$1|Permesso|Permessi}}:",
        "api-help-open-in-apisandbox": "<small>[apri in una sandbox]</small>",
        "api-help-authmanagerhelper-additional-params": "Questo modulo accetta parametri aggiuntivi a seconda delle richieste di autenticazione disponibili. Utilizza <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> con <kbd>amirequestsfor=$1</kbd> (o una precedente risposta da questo modulo, se applicabile) per determinare le richieste disponibili e i campi usati da queste.",
        "apierror-invalidoldimage": "Il parametro <var>oldimage</var> ha un formato non valido.",
        "apierror-invaliduserid": "L'ID utente <var>$1</var> non è valido.",
+       "apierror-maxbytes": "Il parametro <var>$1</var> non può essere più lungo di $2 {{PLURAL:$2|byte}}",
+       "apierror-maxchars": "Il parametro <var>$1</var> non può essere più lungo di $2 {{PLURAL:$2|carattere|caratteri}}",
        "apierror-nosuchuserid": "Non c'è alcun utente con ID $1.",
        "apierror-timeout": "Il server non ha risposto entro il tempo previsto.",
        "api-credits-header": "Crediti"
index a2dc344..034a033 100644 (file)
        "api-help-param-token-webui": "호환성을 위해, 웹 UI에 사용된 토큰도 허용합니다.",
        "api-help-param-continue": "더 많은 결과를 이용할 수 있을 때, 계속하려면 이것을 사용하십시오.",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(설명 없음)</span>",
+       "api-help-param-maxbytes": "$1{{PLURAL:$1|바이트}}를 초과할 수 없습니다.",
+       "api-help-param-maxchars": "$1{{PLURAL:$1|자}}를 초과할 수 없습니다.",
        "api-help-examples": "{{PLURAL:$1|예시}}:",
        "api-help-permissions": "{{PLURAL:$1|권한}}:",
        "api-help-permissions-granted-to": "{{PLURAL:$1|다음 그룹에 부여됨}}: $2",
        "apierror-invalidtitle": "잘못된 제목 \"$1\".",
        "apierror-invaliduser": "잘못된 사용자 이름 \"$1\".",
        "apierror-invaliduserid": "<var>$1</var> 사용자 ID는 유효하지 않습니다.",
+       "apierror-maxbytes": "<var>$1</var> 변수는 $2{{PLURAL:$2|바이트}}를 초과할 수 없습니다",
+       "apierror-maxchars": "<var>$1</var> 변수는 $2{{PLURAL:$2|자}}를 초과할 수 없습니다",
        "apierror-maxlag-generic": "데이터베이스 서버 대기 중: $1 {{PLURAL:$1|초}} 지연되었습니다.",
        "apierror-maxlag": "$2 대기 중: $1 {{PLURAL:$1|초}} 지연되었습니다.",
        "apierror-missingcontent-revid": "ID $1 판에 해당하는 내용이 없습니다.",
index 8d4cedc..a4ee954 100644 (file)
        "api-help-param-direction": "A direção da enumeração:\n;newer:Listar o mais antigo primeiro. Nota: $1start tem de estar antes de $1end.\n;older:Listar o mais recente primeiro (padrão). Nota: $1start tem de estar depois de $1end.",
        "api-help-param-continue": "Quando houver mais resultados disponíveis, usar isto para continuar",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(sem descrição)</span>",
+       "api-help-param-maxbytes": "Não pode exceder $1 {{PLURAL:$1|byte|bytes}}.",
+       "api-help-param-maxchars": "Não pode exceder $1 {{PLURAL:$1|carácter|caracteres}}.",
        "api-help-examples": "{{PLURAL:$1|Exemplo|Exemplos}}:",
        "api-help-permissions": "{{PLURAL:$1|Permissão|Permissões}}:",
        "api-help-permissions-granted-to": "{{PLURAL:$1|Concedida a|Concedidas a}}: $2",
        "apierror-invalidurlparam": "Valor inválido para <var>$1urlparam</var> (<kbd>$2=$3</kbd>).",
        "apierror-invaliduser": "Nome de utilizador inválido \"$1\".",
        "apierror-invaliduserid": "O identificador de utilizador <var>$1</var> não é válido.",
+       "apierror-maxbytes": "O parâmetro <var>$1</var> não pode exceder $2 {{PLURAL:$2|byte|bytes}}",
+       "apierror-maxchars": "O parâmetro <var>$1</var> não pode exceder $2 {{PLURAL:$2|carácter|caracteres}}",
        "apierror-maxlag-generic": "À espera de um servidor de base de dados: $1 {{PLURAL:$1|segundo|segundos}} de atraso.",
        "apierror-maxlag": "À espera de $2: $1 {{PLURAL:$1|segundo|segundos}} de atraso.",
        "apierror-mimesearchdisabled": "A pesquisa MIME é desativada no modo avarento.",
index 546bbf5..39025ec 100644 (file)
        "api-help-param-limit": "Inte mer än $1 tillåts.",
        "api-help-param-limit2": "Inte mer än $1 ($2 för robotar) tillåts.",
        "api-help-param-multi-separate": "Separera värden med <kbd>|</kbd> eller [[Special:ApiHelp/main#main/datatypes|alternativ]].",
+       "api-help-param-maxbytes": "Kan inte vara längre än $1 {{PLURAL:$1|byte}}.",
+       "api-help-param-maxchars": "Kan inte vara längre än $1 {{PLURAL:$1|tecken}}.",
        "apierror-articleexists": "Artikeln du försökte skapa har redan skapats.",
        "apierror-baddiff": "Diff kan inte hämtas. En eller båda sidversioner finns inte eller du har inte behörighet för att visa dem.",
        "apierror-invalidoldimage": "Parametern <var>oldimage</var> har ett ogiltigt format.",
        "apierror-invalidsection": "Parametern <var>section</var> måste vara ett giltigt avsnitts-ID eller <kbd>new</kbd>.",
+       "apierror-maxbytes": "Parametern <var>$1</var> kan inte var längre än $2 {{PLURAL:$2|byte}}",
+       "apierror-maxchars": "Parametern <var>$1</var> kan inte vara längre än $2 {{PLURAL:$2|tecken}}",
        "apierror-nosuchuserid": "Det finns ingen användare med ID $1.",
        "apierror-offline": "Kunde inte fortsätta p.g.a. problem med nätverksanslutningen. Se till att du har en fungerande Internetanslutning och försök igen.",
        "apierror-protect-invalidaction": "Ogiltig skyddstyp \"$1\".",
index d09c651..5ee0ec4 100644 (file)
        "api-help-param-direction": "列举的方向:\n;newer:最早的优先。注意:$1start应早于$1end。\n;older:最新的优先(默认)。注意:$1start应晚于$1end。",
        "api-help-param-continue": "当更多结果可用时,使用这个继续。",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(没有说明)</span>",
+       "api-help-param-maxbytes": "不能超过$1{{PLURAL:$1|字节}}。",
+       "api-help-param-maxchars": "不能超过$1个{{PLURAL:$1|字符}}。",
        "api-help-examples": "{{PLURAL:$1|例子}}:",
        "api-help-permissions": "{{PLURAL:$1|权限}}:",
        "api-help-permissions-granted-to": "{{PLURAL:$1|授予}}:$2",
        "apierror-invalidurlparam": "<var>$1urlparam</var>的值无效(<kbd>$2=$3</kbd>)。",
        "apierror-invaliduser": "无效用户名“$1”。",
        "apierror-invaliduserid": "用户ID<var>$1</var>无效。",
+       "apierror-maxbytes": "参数<var>$1</var>不能超过$2{{PLURAL:$2|字节}}",
+       "apierror-maxchars": "参数<var>$1</var>不能超过$2个{{PLURAL:$2|字符}}",
        "apierror-maxlag-generic": "正在等待数据库服务器:已延迟$1{{PLURAL:$1|秒}}。",
        "apierror-maxlag": "正在等待$2:已延迟$1{{PLURAL:$1|秒}}。",
        "apierror-mimesearchdisabled": "MIME搜索在Miser模式中被禁用。",
index ea5f2dd..75baaaa 100644 (file)
        "apihelp-xml-summary": "使用 XML 格式輸出資料。",
        "apihelp-xmlfm-summary": "使用 XML 格式輸出資料 (使用 HTML 格式顯示)。",
        "api-format-title": "MediaWiki API 結果",
+       "api-format-prettyprint-header": "這是$1格式的HTML呈現。HTML適合用於除錯,但不適合應用程式使用。\n\n指定<var>format</var>參數以更改輸出格式。要檢視$1格式的非HTML呈現,設定<kbd>format=$2</kbd>。\n\n參考 [[mw:Special:MyLanguage/API|完整說明文件]] 或 [[Special:ApiHelp/main|API說明]] 以取得更多資訊。",
        "api-pageset-param-titles": "要使用的標題清單。",
        "api-pageset-param-pageids": "要使用的頁面 ID 清單。",
        "api-pageset-param-revids": "要使用的修訂 ID 清單。",
index 03f7212..51b9f15 100644 (file)
@@ -1127,7 +1127,7 @@ class DifferenceEngine extends ContextSource {
         */
        private function addLocalisedTitleTooltips( $text ) {
                return preg_replace_callback(
-                       '/class="mw-diff-movedpara-(left|old)"/',
+                       '/class="mw-diff-movedpara-(left|right)"/',
                        [ $this, 'addLocalisedTitleTooltipsCb' ],
                        $text
                );
index 5d0da6d..0b61979 100644 (file)
@@ -229,7 +229,7 @@ class FileBackendGroup {
         * @since 1.27
         */
        public function guessMimeInternal( $storagePath, $content, $fsPath ) {
-               $magic = MimeMagic::singleton();
+               $magic = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer();
                // Trust the extension of the storage path (caller must validate)
                $ext = FileBackend::extensionFromPath( $storagePath );
                $type = $magic->guessTypesForExtension( $ext );
index 5005280..5d22b8d 100644 (file)
@@ -1543,7 +1543,7 @@ class FileRepo {
         */
        public function getFileProps( $virtualUrl ) {
                $fsFile = $this->getLocalReference( $virtualUrl );
-               $mwProps = new MWFileProps( MimeMagic::singleton() );
+               $mwProps = new MWFileProps( MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer() );
                if ( $fsFile ) {
                        $props = $mwProps->getPropsFromPath( $fsFile->getPath(), true );
                } else {
index 2edd6d0..5e37d67 100644 (file)
@@ -452,7 +452,7 @@ class RepoGroup {
 
                        return $repo->getFileProps( $fileName );
                } else {
-                       $mwProps = new MWFileProps( MimeMagic::singleton() );
+                       $mwProps = new MWFileProps( MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer() );
 
                        return $mwProps->getPropsFromPath( $fileName, true );
                }
index 827f4ca..4e79de2 100644 (file)
@@ -250,7 +250,7 @@ abstract class File implements IDBAccessObject {
                $oldMime = $old->getMimeType();
                $n = strrpos( $new, '.' );
                $newExt = self::normalizeExtension( $n ? substr( $new, $n + 1 ) : '' );
-               $mimeMagic = MimeMagic::singleton();
+               $mimeMagic = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer();
 
                return $mimeMagic->isMatchingExtension( $newExt, $oldMime );
        }
index 43b6855..16c154f 100644 (file)
@@ -286,7 +286,7 @@ class ForeignAPIFile extends File {
         */
        function getMimeType() {
                if ( !isset( $this->mInfo['mime'] ) ) {
-                       $magic = MimeMagic::singleton();
+                       $magic = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer();
                        $this->mInfo['mime'] = $magic->guessTypesForExtension( $this->getExtension() );
                }
 
@@ -300,7 +300,7 @@ class ForeignAPIFile extends File {
                if ( isset( $this->mInfo['mediatype'] ) ) {
                        return $this->mInfo['mediatype'];
                }
-               $magic = MimeMagic::singleton();
+               $magic = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer();
 
                return $magic->getMediaType( null, $this->getMimeType() );
        }
index bb12515..4248f95 100644 (file)
@@ -1284,7 +1284,7 @@ class LocalFile extends File {
                        ) {
                                $props = $this->repo->getFileProps( $srcPath );
                        } else {
-                               $mwProps = new MWFileProps( MimeMagic::singleton() );
+                               $mwProps = new MWFileProps( MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer() );
                                $props = $mwProps->getPropsFromPath( $srcPath, true );
                        }
                }
index cdad5fc..fde68bb 100644 (file)
@@ -151,7 +151,7 @@ class UnregisteredLocalFile extends File {
         */
        function getMimeType() {
                if ( !isset( $this->mime ) ) {
-                       $magic = MimeMagic::singleton();
+                       $magic = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer();
                        $this->mime = $magic->guessMimeType( $this->getLocalRefPath() );
                }
 
index 4163e2f..08cfd86 100644 (file)
@@ -21,7 +21,7 @@
  */
 
 class InstallDocFormatter {
-       static function format( $text ) {
+       public static function format( $text ) {
                $obj = new self( $text );
 
                return $obj->execute();
index a6ebd92..adc3e34 100644 (file)
@@ -35,7 +35,7 @@
        "config-session-expired": "Os seus dados de sessão parecem ter expirado.\nAs sessões estão configuradas para uma duração de $1.\nPode aumentar esta duração configurando <code>session.gc_maxlifetime</code> no php.ini.\nReinicie o processo de instalação.",
        "config-no-session": "Os seus dados de sessão foram perdidos!\nVerifique o seu php.ini e certifique-se de que em <code>session.save_path</code> está definido um diretório apropriado.",
        "config-your-language": "A sua língua:",
-       "config-your-language-help": "Selecione o idioma que será usado durante o processo de instalação.",
+       "config-your-language-help": "Selecione a língua que será usada durante o processo de instalação.",
        "config-wiki-language": "Língua da wiki:",
        "config-wiki-language-help": "Selecione a língua que será predominante na wiki.",
        "config-back": "← Voltar",
index 6d583da..f8e3b17 100644 (file)
@@ -52,7 +52,7 @@ class HashBagOStuff extends BagOStuff {
 
        protected function expire( $key ) {
                $et = $this->bag[$key][self::KEY_EXP];
-               if ( $et == self::TTL_INDEFINITE || $et > time() ) {
+               if ( $et == self::TTL_INDEFINITE || $et > $this->getCurrentTime() ) {
                        return false;
                }
 
@@ -115,4 +115,8 @@ class HashBagOStuff extends BagOStuff {
        public function clear() {
                $this->bag = [];
        }
+
+       protected function getCurrentTime() {
+               return time();
+       }
 }
index 51c4669..f5c561f 100644 (file)
@@ -135,6 +135,9 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
        const TTL_LAGGED = 30;
        /** Idiom for delete() for "no hold-off" */
        const HOLDOFF_NONE = 0;
+       /** Idiom for set()/getWithSetCallback() for "do not augment the storage medium TTL" */
+       const STALE_TTL_NONE = 0;
+
        /** Idiom for getWithSetCallback() for "no minimum required as-of timestamp" */
        const MIN_TIMESTAMP_NONE = 0.0;
 
@@ -204,7 +207,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * @return WANObjectCache
         */
        public static function newEmpty() {
-               return new self( [
+               return new static( [
                        'cache'   => new EmptyBagOStuff(),
                        'pool'    => 'empty'
                ] );
@@ -311,7 +314,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                        $wrappedValues += $this->cache->getMulti( $keysGet );
                }
                // Time used to compare/init "check" keys (derived after getMulti() to be pessimistic)
-               $now = microtime( true );
+               $now = $this->getCurrentTime();
 
                // Collect timestamps from all "check" keys
                $purgeValuesForAll = $this->processCheckKeys( $checkKeysForAll, $wrappedValues, $now );
@@ -426,24 +429,25 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         *      they certainly should not see ones that ended up getting rolled back.
         *      Default: false
         *   - lockTSE : if excessive replication/snapshot lag is detected, then store the value
-        *      with this TTL and flag it as stale. This is only useful if the reads for
-        *      this key use getWithSetCallback() with "lockTSE" set.
+        *      with this TTL and flag it as stale. This is only useful if the reads for this key
+        *      use getWithSetCallback() with "lockTSE" set. Note that if "staleTTL" is set
+        *      then it will still add on to this TTL in the excessive lag scenario.
         *      Default: WANObjectCache::TSE_NONE
         *   - staleTTL : Seconds to keep the key around if it is stale. The get()/getMulti()
         *      methods return such stale values with a $curTTL of 0, and getWithSetCallback()
         *      will call the regeneration callback in such cases, passing in the old value
         *      and its as-of time to the callback. This is useful if adaptiveTTL() is used
         *      on the old value's as-of time when it is verified as still being correct.
-        *      Default: 0.
+        *      Default: WANObjectCache::STALE_TTL_NONE.
         * @note Options added in 1.28: staleTTL
         * @return bool Success
         */
        final public function set( $key, $value, $ttl = 0, array $opts = [] ) {
-               $now = microtime( true );
+               $now = $this->getCurrentTime();
                $lockTSE = isset( $opts['lockTSE'] ) ? $opts['lockTSE'] : self::TSE_NONE;
+               $staleTTL = isset( $opts['staleTTL'] ) ? $opts['staleTTL'] : self::STALE_TTL_NONE;
                $age = isset( $opts['since'] ) ? max( 0, $now - $opts['since'] ) : 0;
                $lag = isset( $opts['lag'] ) ? $opts['lag'] : 0;
-               $staleTTL = isset( $opts['staleTTL'] ) ? $opts['staleTTL'] : 0;
 
                // Do not cache potentially uncommitted data as it might get rolled back
                if ( !empty( $opts['pending'] ) ) {
@@ -590,7 +594,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                        $time = $purge[self::FLD_TIME];
                } else {
                        // Casting assures identical floats for the next getCheckKeyTime() calls
-                       $now = (string)microtime( true );
+                       $now = (string)$this->getCurrentTime();
                        $this->cache->add( $key,
                                $this->makePurgeValue( $now, self::HOLDOFF_TTL ),
                                self::CHECK_KEY_TTL
@@ -609,20 +613,22 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * on all keys that should be changed. When get() is called on those
         * keys, the relevant "check" keys must be supplied for this to work.
         *
-        * The "check" key essentially represents a last-modified field.
-        * When touched, the field will be updated on all cache servers.
-        * Keys using it via get(), getMulti(), or getWithSetCallback() will
-        * be invalidated. It is treated as being HOLDOFF_TTL seconds in the future
-        * by those methods to avoid race conditions where dependent keys get updated
-        * with stale values (e.g. from a DB replica DB).
-        *
-        * This is typically useful for keys with hardcoded names or in some cases
-        * dynamically generated names where a low number of combinations exist.
-        * When a few important keys get a large number of hits, a high cache
-        * time is usually desired as well as "lockTSE" logic. The resetCheckKey()
-        * method is less appropriate in such cases since the "time since expiry"
-        * cannot be inferred, causing any get() after the reset to treat the key
-        * as being "hot", resulting in more stale value usage.
+        * The "check" key essentially represents a last-modified time of an entity.
+        * When the key is touched, the timestamp will be updated to the current time.
+        * Keys using the "check" key via get(), getMulti(), or getWithSetCallback() will
+        * be invalidated. The timestamp of "check" is treated as being HOLDOFF_TTL seconds
+        * in the future by get*() methods in order to avoid race conditions where keys are
+        * updated with stale values (e.g. from a DB replica DB).
+        *
+        * This method is typically useful for keys with hardcoded names or in some cases
+        * dynamically generated names, provided the number of such keys is modest. It sets a
+        * high TTL on the "check" key, making it possible to know the timestamp of the last
+        * change to the corresponding entities in most cases.
+        *
+        * When a few important keys get a large number of hits, a high cache time is usually
+        * desired as well as "lockTSE" logic. The resetCheckKey() method is less appropriate
+        * in such cases since the "time since expiry" cannot be inferred, causing any get()
+        * after the reset to treat the key as being "hot", resulting in more stale value usage.
         *
         * Note that "check" keys won't collide with other regular keys.
         *
@@ -653,12 +659,9 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         *        to, any temporary ejection of that server will cause the value to be
         *        seen as purged as a new server will initialize the "check" key.
         *
-        * The advantage is that this does not place high TTL keys on every cache
-        * server, making it better for code that will cache many different keys
-        * and either does not use lockTSE or uses a low enough TTL anyway.
-        *
-        * This is typically useful for keys with dynamically generated names
-        * where a high number of combinations exist.
+        * The advantage here is that the "check" keys, which have high TTLs, will only
+        * be created when a get*() method actually uses that key. This is better when
+        * a large number of "check" keys are invalided in a short period of time.
         *
         * Note that "check" keys won't collide with other regular keys.
         *
@@ -864,6 +867,11 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         *      Default: WANObjectCache::LOW_TTL.
         *   - ageNew: Consider popularity refreshes only once a key reaches this age in seconds.
         *      Default: WANObjectCache::AGE_NEW.
+        *   - staleTTL: Seconds to keep the key around if it is stale. This means that on cache
+        *      miss the callback may get $oldValue/$oldAsOf values for keys that have already been
+        *      expired for this specified time. This is useful if adaptiveTTL() is used on the old
+        *      value's as-of time when it is verified as still being correct.
+        *      Default: WANObjectCache::STALE_TTL_NONE
         * @return mixed Value found or written to the key
         * @note Options added in 1.28: version, busyValue, hotTTR, ageNew, pcGroup, minAsOf
         * @note Callable type hints are not used to avoid class-autoloading
@@ -953,6 +961,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
        protected function doGetWithSetCallback( $key, $ttl, $callback, array $opts, &$asOf = null ) {
                $lowTTL = isset( $opts['lowTTL'] ) ? $opts['lowTTL'] : min( self::LOW_TTL, $ttl );
                $lockTSE = isset( $opts['lockTSE'] ) ? $opts['lockTSE'] : self::TSE_NONE;
+               $staleTTL = isset( $opts['staleTTL'] ) ? $opts['staleTTL'] : self::STALE_TTL_NONE;
                $checkKeys = isset( $opts['checkKeys'] ) ? $opts['checkKeys'] : [];
                $busyValue = isset( $opts['busyValue'] ) ? $opts['busyValue'] : null;
                $popWindow = isset( $opts['hotTTR'] ) ? $opts['hotTTR'] : self::HOT_TTR;
@@ -968,7 +977,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                $cValue = $this->get( $key, $curTTL, $checkKeys, $asOf ); // current value
                $value = $cValue; // return value
 
-               $preCallbackTime = microtime( true );
+               $preCallbackTime = $this->getCurrentTime();
                // Determine if a cached value regeneration is needed or desired
                if ( $value !== false
                        && $curTTL > 0
@@ -1044,7 +1053,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                // so use a special INTERIM key to pass the new value around threads.
                if ( ( $isTombstone && $lockTSE > 0 ) && $valueIsCacheable ) {
                        $tempTTL = max( 1, (int)$lockTSE ); // set() expects seconds
-                       $newAsOf = microtime( true );
+                       $newAsOf = $this->getCurrentTime();
                        $wrapped = $this->wrap( $value, $tempTTL, $newAsOf );
                        // Avoid using set() to avoid pointless mcrouter broadcasting
                        $this->setInterimValue( $key, $wrapped, $tempTTL );
@@ -1052,6 +1061,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 
                if ( $valueIsCacheable ) {
                        $setOpts['lockTSE'] = $lockTSE;
+                       $setOpts['staleTTL'] = $staleTTL;
                        // Use best known "since" timestamp if not provided
                        $setOpts += [ 'since' => $preCallbackTime ];
                        // Update the cache; this will fail if the key is tombstoned
@@ -1077,7 +1087,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         */
        protected function getInterimValue( $key, $versioned, $minTime, &$asOf ) {
                $wrapped = $this->cache->get( self::INTERIM_KEY_PREFIX . $key );
-               list( $value ) = $this->unwrap( $wrapped, microtime( true ) );
+               list( $value ) = $this->unwrap( $wrapped, $this->getCurrentTime() );
                if ( $value !== false && $this->isValid( $value, $versioned, $asOf, $minTime ) ) {
                        $asOf = $wrapped[self::FLD_TIME];
 
@@ -1492,6 +1502,46 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         *     $ttl = $cache->adaptiveTTL( $mtime, $cache::TTL_DAY );
         * @endcode
         *
+        * Another use case is when there are no applicable "last modified" fields in the DB,
+        * and there are too many dependencies for explicit purges to be viable, and the rate of
+        * change to relevant content is unstable, and it is highly valued to have the cached value
+        * be as up-to-date as possible.
+        *
+        * Example usage:
+        * @code
+        *     $query = "<some complex query>";
+        *     $idListFromComplexQuery = $cache->getWithSetCallback(
+        *         $cache->makeKey( 'complex-graph-query', $hashOfQuery ),
+        *         GraphQueryClass::STARTING_TTL,
+        *         function ( $oldValue, &$ttl, array &$setOpts, $oldAsOf ) use ( $query, $cache ) {
+        *             $gdb = $this->getReplicaGraphDbConnection();
+        *             // Account for any snapshot/replica DB lag
+        *             $setOpts += GraphDatabase::getCacheSetOptions( $gdb );
+        *
+        *             $newList = iterator_to_array( $gdb->query( $query ) );
+        *             sort( $newList, SORT_NUMERIC ); // normalize
+        *
+        *             $minTTL = GraphQueryClass::MIN_TTL;
+        *             $maxTTL = GraphQueryClass::MAX_TTL;
+        *             if ( $oldValue !== false ) {
+        *                 // Note that $oldAsOf is the last time this callback ran
+        *                 $ttl = ( $newList === $oldValue )
+        *                     // No change: cache for 150% of the age of $oldValue
+        *                     ? $cache->adaptiveTTL( $oldAsOf, $maxTTL, $minTTL, 1.5 )
+        *                     // Changed: cache for %50 of the age of $oldValue
+        *                     : $cache->adaptiveTTL( $oldAsOf, $maxTTL, $minTTL, .5 );
+        *             }
+        *
+        *             return $newList;
+        *        },
+        *        [
+        *             // Keep stale values around for doing comparisons for TTL calculations.
+        *             // High values improve long-tail keys hit-rates, though might waste space.
+        *             'staleTTL' => GraphQueryClass::GRACE_TTL
+        *        ]
+        *     );
+        * @endcode
+        *
         * @param int|float $mtime UNIX timestamp
         * @param int $maxTTL Maximum TTL (seconds)
         * @param int $minTTL Minimum TTL (seconds); Default: 30
@@ -1535,7 +1585,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                if ( $this->purgeRelayer instanceof EventRelayerNull ) {
                        // This handles the mcrouter and the single-DC case
                        $ok = $this->cache->set( $key,
-                               $this->makePurgeValue( microtime( true ), self::HOLDOFF_NONE ),
+                               $this->makePurgeValue( $this->getCurrentTime(), self::HOLDOFF_NONE ),
                                $ttl
                        );
                } else {
@@ -1594,7 +1644,9 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * @return bool
         */
        protected function worthRefreshExpiring( $curTTL, $lowTTL ) {
-               if ( $curTTL >= $lowTTL ) {
+               if ( $lowTTL <= 0 ) {
+                       return false;
+               } elseif ( $curTTL >= $lowTTL ) {
                        return false;
                } elseif ( $curTTL <= 0 ) {
                        return true;
@@ -1621,6 +1673,10 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * @return bool
         */
        protected function worthRefreshPopular( $asOf, $ageNew, $timeTillRefresh, $now ) {
+               if ( $ageNew < 0 || $timeTillRefresh <= 0 ) {
+                       return false;
+               }
+
                $age = $now - $asOf;
                $timeOld = $age - $ageNew;
                if ( $timeOld <= 0 ) {
@@ -1742,6 +1798,14 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
                return isset( $parts[1] ) ? $parts[1] : $parts[0]; // sanity
        }
 
+       /**
+        * @return float UNIX timestamp
+        * @codeCoverageIgnore
+        */
+       protected function getCurrentTime() {
+               return microtime( true );
+       }
+
        /**
         * @param string $value Wrapped value like "PURGED:<timestamp>:<holdoff>"
         * @return array|bool Array containing a UNIX timestamp (float) and holdoff period (integer),
index 868c2d4..bbf88dc 100644 (file)
@@ -569,7 +569,8 @@ interface IDatabase {
         * @param string|array $options The query options. See IDatabase::select() for details.
         * @param string|array $join_conds The query join conditions. See IDatabase::select() for details.
         *
-        * @return bool|mixed The value from the field, or false on failure.
+        * @return mixed The value from the field
+        * @throws DBQueryError
         */
        public function selectField(
                $table, $var, $cond = '', $fname = __METHOD__, $options = [], $join_conds = []
@@ -591,7 +592,8 @@ interface IDatabase {
         * @param string|array $options The query options. See IDatabase::select() for details.
         * @param string|array $join_conds The query join conditions. See IDatabase::select() for details.
         *
-        * @return bool|array The values from the field, or false on failure
+        * @return array The values from the field
+        * @throws DBQueryError
         * @since 1.25
         */
        public function selectFieldValues(
@@ -755,10 +757,8 @@ interface IDatabase {
         *
         *    [ 'page' => [ 'LEFT JOIN', 'page_latest=rev_id' ] ]
         *
-        * @return IResultWrapper|bool If the query returned no rows, a IResultWrapper
-        *   with no rows in it will be returned. If there was a query error, a
-        *   DBQueryError exception will be thrown, except if the "ignore errors"
-        *   option was set, in which case false will be returned.
+        * @return IResultWrapper Resulting rows
+        * @throws DBQueryError
         */
        public function select(
                $table, $vars, $conds = '', $fname = __METHOD__,
@@ -799,6 +799,7 @@ interface IDatabase {
         * @param array|string $join_conds Join conditions
         *
         * @return stdClass|bool
+        * @throws DBQueryError
         */
        public function selectRow( $table, $vars, $conds, $fname = __METHOD__,
                $options = [], $join_conds = []
@@ -823,6 +824,7 @@ interface IDatabase {
         * @param string $fname Function name for profiling
         * @param array $options Options for select
         * @return int Row count
+        * @throws DBQueryError
         */
        public function estimateRowCount(
                $table, $vars = '*', $conds = '', $fname = __METHOD__, $options = []
@@ -844,6 +846,7 @@ interface IDatabase {
         * @param array $options Options for select
         * @param array $join_conds Join conditions (since 1.27)
         * @return int Row count
+        * @throws DBQueryError
         */
        public function selectRowCount(
                $tables, $vars = '*', $conds = '', $fname = __METHOD__, $options = [], $join_conds = []
index 0384588..cfa2647 100644 (file)
@@ -107,6 +107,12 @@ class LBFactoryMulti extends LBFactory {
        /** @var string */
        private $lastSection;
 
+       /** @var int */
+       private $maxLag = self::MAX_LAG_DEFAULT;
+
+       /** @var int Default 'maxLag' when unspecified */
+       const MAX_LAG_DEFAULT = 10;
+
        /**
         * @see LBFactory::__construct()
         *
@@ -160,6 +166,7 @@ class LBFactoryMulti extends LBFactory {
         *                                 storage cluster.
         *   - masterTemplateOverrides     Server configuration map overrides for all master servers.
         *   - loadMonitorClass            Name of the LoadMonitor class to always use.
+        *   - maxLag                      Avoid replica DBs with more lag than this many seconds.
         *   - readOnlyBySection           A map of section name to read-only message.
         *                                 Missing or false for read/write.
         */
@@ -171,7 +178,7 @@ class LBFactoryMulti extends LBFactory {
                $optional = [ 'groupLoadsBySection', 'groupLoadsByDB', 'hostsByName',
                        'externalLoads', 'externalTemplateOverrides', 'templateOverridesByServer',
                        'templateOverridesByCluster', 'templateOverridesBySection', 'masterTemplateOverrides',
-                       'readOnlyBySection', 'loadMonitorClass' ];
+                       'readOnlyBySection', 'maxLag', 'loadMonitorClass' ];
 
                foreach ( $required as $key ) {
                        if ( !isset( $conf[$key] ) ) {
@@ -319,6 +326,7 @@ class LBFactoryMulti extends LBFactory {
                        $this->baseLoadBalancerParams(),
                        [
                                'servers' => $this->makeServerArray( $template, $loads, $groupLoads ),
+                               'maxLag' => $this->maxLag,
                                'loadMonitor' => [ 'class' => $this->loadMonitorClass ],
                                'readOnlyReason' => $readOnlyReason
                        ]
index df0a806..9a6aa3a 100644 (file)
@@ -41,6 +41,11 @@ class LBFactorySimple extends LBFactory {
 
        /** @var string */
        private $loadMonitorClass;
+       /** @var int */
+       private $maxLag;
+
+       /** @var int Default 'maxLag' when unspecified */
+       const MAX_LAG_DEFAULT = 10;
 
        /**
         * @see LBFactory::__construct()
@@ -72,6 +77,7 @@ class LBFactorySimple extends LBFactory {
                $this->loadMonitorClass = isset( $conf['loadMonitorClass'] )
                        ? $conf['loadMonitorClass']
                        : 'LoadMonitor';
+               $this->maxLag = isset( $conf['maxLag'] ) ? $conf['maxLag'] : self::MAX_LAG_DEFAULT;
        }
 
        /**
@@ -128,6 +134,7 @@ class LBFactorySimple extends LBFactory {
                        $this->baseLoadBalancerParams(),
                        [
                                'servers' => $servers,
+                               'maxLag' => $this->maxLag,
                                'loadMonitor' => [ 'class' => $this->loadMonitorClass ],
                        ]
                ) );
index 22a5805..86c4335 100644 (file)
@@ -96,6 +96,7 @@ interface ILoadBalancer {
         *  - loadMonitor : Name of a class used to fetch server lag and load.
         *  - readOnlyReason : Reason the master DB is read-only if so [optional]
         *  - waitTimeout : Maximum time to wait for replicas for consistency [optional]
+        *  - maxLag: Avoid replica DB servers with more lag than this [optional]
         *  - srvCache : BagOStuff object for server cache [optional]
         *  - wanCache : WANObjectCache object [optional]
         *  - chronologyProtector: ChronologyProtector object [optional]
index 6bb8945..a67e6e9 100644 (file)
@@ -115,11 +115,13 @@ class LoadBalancer implements ILoadBalancer {
        private $disabled = false;
        /** @var bool */
        private $chronProtInitialized = false;
+       /** @var int */
+       private $maxLag = self::MAX_LAG_DEFAULT;
 
        /** @var int Warn when this many connection are held */
        const CONN_HELD_WARN_THRESHOLD = 10;
 
-       /** @var int Default 'max lag' when unspecified */
+       /** @var int Default 'maxLag' when unspecified */
        const MAX_LAG_DEFAULT = 10;
        /** @var int Seconds to cache master server read-only status */
        const TTL_CACHE_READONLY = 5;
@@ -178,11 +180,16 @@ class LoadBalancer implements ILoadBalancer {
                        $this->readOnlyReason = $params['readOnlyReason'];
                }
 
+               if ( isset( $params['maxLag'] ) ) {
+                       $this->maxLag = $params['maxLag'];
+               }
+
                if ( isset( $params['loadMonitor'] ) ) {
                        $this->loadMonitorConfig = $params['loadMonitor'];
                } else {
                        $this->loadMonitorConfig = [ 'class' => 'LoadMonitorNull' ];
                }
+               $this->loadMonitorConfig += [ 'lagWarnThreshold' => $this->maxLag ];
 
                foreach ( $params['servers'] as $i => $server ) {
                        $this->mLoads[$i] = $server['load'];
@@ -275,7 +282,7 @@ class LoadBalancer implements ILoadBalancer {
                                # How much lag this server nominally is allowed to have
                                $maxServerLag = isset( $this->mServers[$i]['max lag'] )
                                        ? $this->mServers[$i]['max lag']
-                                       : self::MAX_LAG_DEFAULT; // default
+                                       : $this->maxLag; // default
                                # Constrain that futher by $maxLag argument
                                $maxServerLag = min( $maxServerLag, $maxLag );
 
@@ -285,7 +292,7 @@ class LoadBalancer implements ILoadBalancer {
                                                "Server {host} is not replicating?", [ 'host' => $host ] );
                                        unset( $loads[$i] );
                                } elseif ( $lag > $maxServerLag ) {
-                                       $this->replLogger->warning(
+                                       $this->replLogger->info(
                                                "Server {host} has {lag} seconds of lag (>= {maxlag})",
                                                [ 'host' => $host, 'lag' => $lag, 'maxlag' => $maxServerLag ]
                                        );
index 8292c03..74c7765 100644 (file)
@@ -45,9 +45,22 @@ class LoadMonitor implements ILoadMonitor {
 
        /** @var float Moving average ratio (e.g. 0.1 for 10% weight to new weight) */
        private $movingAveRatio;
+       /** @var int Amount of replication lag in seconds before warnings are logged */
+       private $lagWarnThreshold;
 
-       const VERSION = 1; // cache key version
+       /** @var int cache key version */
+       const VERSION = 1;
+       /** @var int Default 'max lag' in seconds when unspecified */
+       const LAG_WARN_THRESHOLD = 10;
 
+       /**
+        * @param ILoadBalancer $lb
+        * @param BagOStuff $srvCache
+        * @param WANObjectCache $wCache
+        * @param array $options
+        *   - movingAveRatio: moving average constant for server weight updates based on lag
+        *   - lagWarnThreshold: how many seconds of lag trigger warnings
+        */
        public function __construct(
                ILoadBalancer $lb, BagOStuff $srvCache, WANObjectCache $wCache, array $options = []
        ) {
@@ -59,6 +72,9 @@ class LoadMonitor implements ILoadMonitor {
                $this->movingAveRatio = isset( $options['movingAveRatio'] )
                        ? $options['movingAveRatio']
                        : 0.1;
+               $this->lagWarnThreshold = isset( $options['lagWarnThreshold'] )
+                       ? $options['lagWarnThreshold']
+                       : self::LAG_WARN_THRESHOLD;
        }
 
        public function setLogger( LoggerInterface $logger ) {
@@ -159,9 +175,10 @@ class LoadMonitor implements ILoadMonitor {
                        // Scale from 10% to 100% of nominal weight
                        $weightScales[$i] = max( $newWeight, 0.10 );
 
+                       $host = $this->parent->getServerName( $i );
+
                        if ( !$conn ) {
                                $lagTimes[$i] = false;
-                               $host = $this->parent->getServerName( $i );
                                $this->replLogger->error(
                                        __METHOD__ . ": host {db_server} is unreachable",
                                        [ 'db_server' => $host ]
@@ -174,11 +191,19 @@ class LoadMonitor implements ILoadMonitor {
                        } else {
                                $lagTimes[$i] = $conn->getLag();
                                if ( $lagTimes[$i] === false ) {
-                                       $host = $this->parent->getServerName( $i );
                                        $this->replLogger->error(
                                                __METHOD__ . ": host {db_server} is not replicating?",
                                                [ 'db_server' => $host ]
                                        );
+                               } elseif ( $lagTimes[$i] > $this->lagWarnThreshold ) {
+                                       $this->replLogger->error(
+                                               "Server {host} has {lag} seconds of lag (>= {maxlag})",
+                                               [
+                                                       'host' => $host,
+                                                       'lag' => $lagTimes[$i],
+                                                       'maxlag' => $this->lagWarnThreshold
+                                               ]
+                                       );
                                }
                        }
 
index aae66d3..eb7b6ba 100644 (file)
@@ -357,7 +357,7 @@ class DjVuHandler extends ImageHandler {
                global $wgDjvuOutputExtension;
                static $mime;
                if ( !isset( $mime ) ) {
-                       $magic = MimeMagic::singleton();
+                       $magic = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer();
                        $mime = $magic->guessTypesForExtension( $wgDjvuOutputExtension );
                }
 
index 481e880..8551a12 100644 (file)
@@ -288,7 +288,7 @@ abstract class MediaHandler {
         * @return array Thumbnail extension and MIME type
         */
        function getThumbType( $ext, $mime, $params = null ) {
-               $magic = MimeMagic::singleton();
+               $magic = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer();
                if ( !$ext || $magic->isMatchingExtension( $ext, $mime ) === false ) {
                        // The extension is not valid for this MIME type and we do
                        // recognize the MIME type
index c4baae4..76ff41b 100644 (file)
@@ -287,10 +287,13 @@ class ImagePage extends Article {
 
        private function getLanguageForRendering( WebRequest $request, File $file ) {
                $handler = $this->displayImg->getHandler();
+               if ( !$handler ) {
+                       return null;
+               }
 
                $requestLanguage = $request->getVal( 'lang' );
                if ( !is_null( $requestLanguage ) ) {
-                       if ( $handler && $handler->validateParam( 'lang', $requestLanguage ) ) {
+                       if ( $handler->validateParam( 'lang', $requestLanguage ) ) {
                                return $requestLanguage;
                        }
                }
index bb0072c..07944d4 100644 (file)
@@ -930,7 +930,8 @@ class CoreParserFunctions {
         */
        public static function anchorencode( $parser, $text ) {
                $text = $parser->killMarkers( $text );
-               return (string)substr( $parser->guessSectionNameFromWikiText( $text ), 1 );
+               $section = (string)substr( $parser->guessSectionNameFromWikiText( $text ), 1 );
+               return Sanitizer::safeEncodeAttribute( $section );
        }
 
        public static function special( $parser, $text ) {
index 7c9f563..20fee2d 100644 (file)
@@ -1150,6 +1150,7 @@ class Sanitizer {
                        '{'    => '&#123;',
                        '}'    => '&#125;', // prevent unpaired language conversion syntax
                        '['    => '&#91;',
+                       ']'    => '&#93;',
                        "''"   => '&#39;&#39;',
                        'ISBN' => '&#73;SBN',
                        'RFC'  => '&#82;FC',
index a6d4a3e..15749b2 100644 (file)
@@ -237,7 +237,8 @@ class MediaStatisticsPage extends QueryPage {
         * @return string Comma separated list of allowed extensions (e.g. ".ogg, .oga")
         */
        private function getExtensionList( $mime ) {
-               $exts = MimeMagic::singleton()->getExtensionsForType( $mime );
+               $exts = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer()
+                       ->getExtensionsForType( $mime );
                if ( $exts === null ) {
                        return '';
                }
index a4f16bd..bf8dea6 100644 (file)
@@ -110,6 +110,8 @@ class SpecialPasswordReset extends FormSpecialPage {
        public function alterForm( HTMLForm $form ) {
                $resetRoutes = $this->getConfig()->get( 'PasswordResetRoutes' );
 
+               $form->setSubmitDestructive();
+
                $form->addHiddenFields( $this->getRequest()->getValues( 'returnto', 'returntoquery' ) );
 
                $i = 0;
index 358a309..e4cc3d1 100644 (file)
@@ -30,6 +30,8 @@ class SpecialRecentChangesLinked extends SpecialRecentChanges {
        /** @var bool|Title */
        protected $rclTargetTitle;
 
+       protected $rclTarget;
+
        function __construct() {
                parent::__construct( 'Recentchangeslinked' );
        }
@@ -44,6 +46,7 @@ class SpecialRecentChangesLinked extends SpecialRecentChanges {
 
        public function parseParameters( $par, FormOptions $opts ) {
                $opts['target'] = $par;
+               $this->rclTarget = $par;
        }
 
        /**
@@ -293,4 +296,15 @@ class SpecialRecentChangesLinked extends SpecialRecentChanges {
        public function prefixSearchSubpages( $search, $limit, $offset ) {
                return $this->prefixSearchString( $search, $limit, $offset );
        }
+
+       /**
+        * Get a self-referential title object
+        * with consideration to the given subpage.
+        *
+        * @return Title
+        * @since 1.23
+        */
+       public function getPageTitle() {
+               return parent::getPageTitle( $this->rclTarget );
+       }
 }
index 964a261..d5b0903 100644 (file)
@@ -121,6 +121,7 @@ class SpecialResetTokens extends FormSpecialPage {
         * @param HTMLForm $form
         */
        protected function alterForm( HTMLForm $form ) {
+               $form->setSubmitDestructive();
                if ( $this->getTokensList() ) {
                        $form->setSubmitTextMsg( 'resettokens-resetbutton' );
                } else {
index 0da9b7a..b2d5a16 100644 (file)
@@ -57,7 +57,7 @@ class SpecialUnblock extends SpecialPage {
 
                $out = $this->getOutput();
                $out->setPageTitle( $this->msg( 'unblockip' ) );
-               $out->addModules( [ 'mediawiki.special', 'mediawiki.userSuggest' ] );
+               $out->addModules( [ 'mediawiki.userSuggest' ] );
 
                $form = HTMLForm::factory( 'ooui', $this->getFields(), $this->getContext() );
                $form->setWrapperLegendMsg( 'unblockip' );
index cf8c3f5..a5f9ab3 100644 (file)
@@ -140,7 +140,7 @@ class UserrightsPage extends SpecialPage {
                $this->setHeaders();
                $this->outputHeader();
 
-               $out->addModuleStyles( 'mediawiki.special.userrights.styles' );
+               $out->addModuleStyles( 'mediawiki.special' );
                $this->addHelpLink( 'Help:Assigning permissions' );
 
                $this->switchForm();
index da3f9f8..c335e2b 100644 (file)
@@ -420,7 +420,7 @@ abstract class UploadBase {
                        $chunk = fread( $fp, 256 );
                        fclose( $fp );
 
-                       $magic = MimeMagic::singleton();
+                       $magic = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer();
                        $extMime = $magic->guessTypesForExtension( $this->mFinalExtension );
                        $ieTypes = $magic->getIEMimeTypes( $this->mTempPath, $chunk, $extMime );
                        foreach ( $ieTypes as $ieType ) {
@@ -446,7 +446,7 @@ abstract class UploadBase {
                        return $status;
                }
 
-               $mwProps = new MWFileProps( MimeMagic::singleton() );
+               $mwProps = new MWFileProps( MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer() );
                $this->mFileProps = $mwProps->getPropsFromPath( $this->mTempPath, $this->mFinalExtension );
                $mime = $this->mFileProps['mime'];
 
@@ -505,7 +505,7 @@ abstract class UploadBase {
                # getTitle() sets some internal parameters like $this->mFinalExtension
                $this->getTitle();
 
-               $mwProps = new MWFileProps( MimeMagic::singleton() );
+               $mwProps = new MWFileProps( MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer() );
                $this->mFileProps = $mwProps->getPropsFromPath( $this->mTempPath, $this->mFinalExtension );
 
                # check MIME type, if desired
@@ -950,7 +950,7 @@ abstract class UploadBase {
                        $this->mFinalExtension = '';
 
                        # No extension, try guessing one
-                       $magic = MimeMagic::singleton();
+                       $magic = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer();
                        $mime = $magic->guessMimeType( $this->mTempPath );
                        if ( $mime !== 'unknown/unknown' ) {
                                # Get a space separated list of extensions
@@ -1207,7 +1207,7 @@ abstract class UploadBase {
         * @return bool
         */
        public static function verifyExtension( $mime, $extension ) {
-               $magic = MimeMagic::singleton();
+               $magic = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer();
 
                if ( !$mime || $mime == 'unknown' || $mime == 'unknown/unknown' ) {
                        if ( !$magic->isRecognizableExtension( $extension ) ) {
index c2ab899..ce087bf 100644 (file)
@@ -218,7 +218,7 @@ class UploadStash {
                        );
                }
 
-               $mwProps = new MWFileProps( MimeMagic::singleton() );
+               $mwProps = new MWFileProps( MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer() );
                $fileProps = $mwProps->getPropsFromPath( $path, true );
                wfDebug( __METHOD__ . " stashing file at '$path'\n" );
 
@@ -490,9 +490,9 @@ class UploadStash {
                        $extension = $n ? substr( $path, $n + 1 ) : '';
                } else {
                        // If not, assume that it should be related to the MIME type of the original file.
-                       $magic = MimeMagic::singleton();
+                       $magic = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer();
                        $mimeType = $magic->guessMimeType( $path );
-                       $extensions = explode( ' ', MimeMagic::singleton()->getExtensionsForType( $mimeType ) );
+                       $extensions = explode( ' ', $magic->getExtensionsForType( $mimeType ) );
                        if ( count( $extensions ) ) {
                                $extension = $extensions[0];
                        }
index e60b9ab..9d05c6a 100644 (file)
@@ -30,9 +30,9 @@ class MWFileProps {
        private $magic;
 
        /**
-        * @param MimeMagic $magic
+        * @param MimeAnalyzer $magic
         */
-       public function __construct( MimeMagic $magic ) {
+       public function __construct( MimeAnalyzer $magic ) {
                $this->magic = $magic;
        }
 
index c3a50ea..12eed53 100644 (file)
        "create": "patizeng",
        "create-local": "cunusen itiniay a buhci tu kamu",
        "delete": "misipu",
+       "undelete_short": "Undelete {{PLURAL:$1|one edit|$1 edits}}",
        "viewdeleted_short": "miciwsace {{PLURAL:$1|1 masipuay tu masumad|$1 masipuay tu masumad}}",
        "protect": "midiput",
        "protect_change": "misumad",
        "redirectpagesub": "miliyaw patatuzu’",
        "redirectto": "miliyaw patatuzu’ i:",
        "lastmodifiedat": "uyni kasabelih sazikuz mikawaway tu kalumyiti i $1 $2.",
-       "viewcount": "tina belih masuped-miala tuway {{PLURAL:$1|$1}}.",
+       "viewcount": "tina kasabelih masuped-miala tuway {{PLURAL:$1|$1}}.",
        "protectedpage": "madiputay a kasabelih",
        "jumpto": "taayaw:",
        "jumptonavigation": "pasubana’ tu miidangay",
        "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}}.",
+       "querypage-no-updates": "ayza mapasatezep tina kasabelih baluh sasahicaan.\ni tina belih a kalunasulitan caay masabaluh tansul.",
        "viewsource": "ciwsace yuensma-kodo",
        "viewsource-title": "ciwsace $1 a sakatizeng banggu",
        "actionthrottled": "makelec 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.",
+       "editinginterface": "<strong>patalaw:</strong> imahini kisu mikawaway-kalumyiti a kasabelih sulit ku sapabeli zwanti taypuolayta pisaungay.\nmisumad tina kasabelih amalawilaw zuma misaungayay itiniay a Wiki maazih a misaungayay taypuolayta.",
        "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.",
        "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.",
+       "throttled-mailpassword": "miliyaw patizeng mima a imyiyo(email) nasawni {{PLURAL:$1|tatukian}} patigami tuway.\na mitena’ patahtah,{{PLURAL:$1|tatukian}} nacacay patigami miliyaw patizeng mima a tigami.",
        "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.",
        "botpasswords-label-delete": "masipu",
        "botpasswords-label-resetpassword": "miliyaw miteka setin mima",
        "botpasswords-label-grants": "matatungusay a tungus:",
+       "botpasswords-help-grants": "pabeli tu kinli kapah mahasa kisu misuped-miala situngusay a misaungayay canghaw nu misu, uyzasa itini miwawah pabeli tu kinli caay taneng misaungayay canghaw misuped-miala inayi’ay a tungus nu misu. piazih tu tatenga’ay [[Special:ListGrants|pabeli tu kinli sapat nu sulit]] maala yadah cesyun.",
        "botpasswords-label-grants-column": "pabeli tu kinli",
        "botpasswords-bad-appid": "kikay-tademaw kalungangan \"$1\" la’cus.",
        "botpasswords-insert-failed": "micunusen kikay-tademaw kalungangan \"$1\" mungnhaw, pacunusen tu haw?",
        "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>",
+       "copyrightwarning2": "piazihen, sacahamin i {{SITENAME}} nasanga’ay a paanin hakay amakawaway-kalumyiti ku zuma paaninay tu kalusasing, misumad saca masipu.\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 (kahica nu kawaw piazih i $1).\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",
+       "protectedpagewarning": "<strong> patalaw: tina kasabelih madiput tuway, situngusay mikuwanay misaungayay dada’ taneng mikawaway-kalumyiti.</strong>\nisasa’ pabeli capi demiad a nasulitan nazipa’an sapaazih tu tatenga’ay.",
        "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}}:",
+       "templatesusedsection": "tina kasabelih 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:",
        "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-warning": "<strong> patalaw:</strong> tina kasabelih masaungay kayadah eluc sisetyimo katahkalan nu kalisiw a tingalaw hansu-sausi.\npisaungay kinapina kanca haycay tu $2, {{PLURAL:$2|pisaungay}}, izaw {{PLURAL:$1|ayza $1 pisaungay}}.",
        "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",
        "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-deleted-text-view": "tina kasabelih masumad nay <strong>masipu</strong>.\nkapah kisu palalid ciwsace masumad, kapah tayza [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} masipu nasulitan nazipa’an] maala pulita cesyun.",
        "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.",
        "revdelete-reasonotherlist": "zuma a mahicaay",
        "revdelete-edit-reasonlist": "masipu a mahicaay nu mikawaway-kalumyiti",
        "revdelete-offender": "masumad nu ayaway  masacudaday:",
-       "suppressionlog": "satezep paazih nasulitan nazipa’an",
+       "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-header": "tina kasabelih kapah tu kisu mikabu nay kasabelih a nazipa’an ta zumaay baluhayay a kasabelih.\npilucekay tu tina sumad taneng palalid hizantu kya kasabelih nasawniay nazipa’an baziyong a masalaliday.",
        "mergehistory-box": "mikabu tatusa kasabelih a sumad:",
        "mergehistory-from": "saangangan kasabelih:",
        "mergehistory-into": "pabalucu’an kasabelih:",
        "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)",
+       "diff-multi-manyusers": "({{PLURAL:$1|$1 ilabuay a sumad nu ayaway}} mangasiw $2 {{PLURAL:$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",
        "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:",
        "yournick": "baluhay sulitan a ngangan:",
        "prefs-help-signature": "i sasukamu kasabelih buhci tu kamu kanca pisaungay \"<nowiki>~~~~</nowiki>\" pangangan, bkya tatebanan nu nisulitan amaliyaw tu sulitan nu ngangan atu tuki.",
        "badsig": "mungangaw a saayaway sulitan a ngangan.\npikinsa HTML aazihen-paya.",
-       "badsiglength": "numisuay a nipangangan tadatanayu’.\nselepen tu $1 ke {{PLURAL:$1|tatebanan nu nisulitan}}",
+       "badsiglength": "sulitan a ngangan nu misu mangaleb tanaya’.\nkya tanaya’ sa amana mangasiw $1 {{PLURAL:$1|tatebanan nu nisulitan.}}",
        "yourgender": "milunguc kisu pisaungay canan a etul muawaw tisuwanan?",
        "gender-unknown": "anu miawaw tisuwan sa, tina zwanti hakay amana misaungay tu etul-sulit.",
        "gender-male": "mikawaway-kalumyiti Wiki kasabelih ciniza",
        "right-viewmywatchlist": "ciwsace misuay a miazihay a piazihan-tu-sulit",
        "right-editmywatchlist": "mikawaway-kalumyiti misuay miazihay a piazihan tu sulit. azihen, kanahatu inayi’ kuyni tungus, izaw hatizaay pisaungay cunusen ku kasabelih katukuh miazihay a piazihan tu sulit",
        "right-viewmyprivateinfo": "ciwsace numisuay a dimut kalunasulitan (tinaku, imyiyo(email) puenengan atu tatenga’ay a ngangan)",
+       "right-editmyprivateinfo": "mikawaway-kalumyiti misuay a midimut kasikazan kalunasulitan (tinaku, imyiyo(email) puenengan atu tatenga’ay a ngangan)",
        "right-editmyoptions": "mikawaway-kalumyiti nucimacimaay a setin tu kanamuhan",
        "right-rollback": "besuchan patiku sazikuzay a misaungayay a mikawaway-kalumyiti kasabelih",
        "right-markbotedits": "sacuzu’ patiku mikawaway-kalumyiti tu tademaw-kikay mikawaway-kalumyiti",
        "recentchangeslinked-page": "kasabelih kalungangan:",
        "recentchangeslinked-to": "Show changes to pages linked to the given page instead\nmisumad ku paazih masasiket tayza matuzu’ay kasabelih a nisumad",
        "recentchanges-page-added-to-category": "[[:$1]] macunus tu ta kakuniza",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] macunus ta kakuniza, [[Special:WhatLinksHere/$1|tina kasabelih mapacaliw ku zuma kasabelih]]",
        "recentchanges-page-removed-from-category": "[[:$1]] masipu tu nay kakuniza",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] nay kakuniza masipu tuway, [[Special:WhatLinksHere/$1|tina kasabelih mapacaliw ku zuma kasabelih]]",
        "autochange-username": "MediaWiki lunuk misumad",
        "upload": "patapabaw ku tangan",
        "reuploaddesc": "palawpes patapabaw satu tatiku patapabaw aazihan cudad",
        "filetype-mime-mismatch": "tangan mikilulay-tangan-ngangan \".$1\" caay katatungus sedap katukuhan tangan MIME nikalahizaan ($2)",
        "filetype-badmime": "amana mahasa patapabaw MIME nikalahizaan ku \"$1\" a tangan.",
        "filetype-bad-ie-mime": "Internet Explorer amitangan itini nikalahizaan mungangaw piazih ku \"$1\", hakay malecay midimutay a mundayk, caay mahasa patapabaw tina nikalahizaan tangan.",
+       "filetype-unwanted-type": "caay patahkal nizateng pisaungay tu tangan nikalahizaan <strong>\".$1\"</strong>.\npatahkal nizateng {{PLURAL:$3| tangan nikalahizaan izaw ku}} $2.",
+       "filetype-banned-type": "<strong>\".$1\"</strong>. {{PLURAL:$4|caay mahasa pisaungay tangan nikalahizaan}}.\nmahasaay a{{PLURAL:$3|tangan nikalahizaan}} ku $2.",
        "filetype-missing": "kya tangan inayi’ mikilulay ngangan nu tangan (tinaku \".jpg\")",
        "empty-file": "patayzaan nu misu a tangan u inayi’ay.",
        "file-too-large": "patayzaan tangan nu misu micalapay.",
        "backend-fail-closetemp": "la’cus miedeb misinga’ tu tangan.",
        "backend-fail-read": "la’cus maasip tangan \"$1\".",
        "backend-fail-create": "la’cus pasulit tu tangan \"$1\".",
+       "backend-fail-maxsize": "la’cus misulit tangan \"$1\" u nanu tangan pinalu mangasiw {{PLURAL:$2|$2 wyiyincu}}.",
        "backend-fail-readonly": "suped-sulu zikuzan \"$1\" ayzaay aasipen muse. mahicaay: <em>$2</em>",
        "backend-fail-synced": "tangan \"$1\" atu ilabuay i zikuzan nu suped-sulu a setyitase caay kalecad",
        "backend-fail-connect": "la’cus misasiket tayza suped-sulu zikuzan malutapiingan \"$1\"",
        "zip-bad": "ZIP tangan malepi’tu saca la’cus miasip.\nla’cus habutud han miteka zahkez kinsa.",
        "zip-unsupported": "ZIP tangan pisaungay tu MediaWiki ayza caay kadama sasahicaan.\nla’cus malecek miteka kazahkez mikinsa.",
        "uploadstash": "patapabaw ku sulu nu pisipetan",
+       "uploadstash-summary": "tina kasabelih kapah misuped-miala mapatapabaway saca mipatapabaw henay uyzasa caay henay i Wiki pabinawlanay a tangan, uyniyay a tangan taneng miciwsac ku patapabaway a misaungayay dada’, zumaay tatemaw la’cus miciwsac.",
        "uploadstash-clear": "palamadac tu suped-sulu nu tangan",
        "uploadstash-nofiles": "inayi’ masupetay a tangan nu misu.",
        "uploadstash-badtoken": "miteka saungay mungangaw. mikawaway-kalumyitiay nu misu a pincen hakay mangasiw, piliyaw aca.",
        "nolinkstoimage": "nayi’ ku kasabelih masasiket katukuh tini a tangan.",
        "morelinkstoimage": "miciwsace masasiket tayza tina a tangan i [[Special:WhatLinksHere/$1|sayadah masasiket]].",
        "linkstoimage-redirect": "$1 (tangan miliyaw patatuzu’) $2",
+       "duplicatesoffile": "isasa’ay a {{PLURAL:$1|tangan masaliyaw}} tu tina tangan  ([[Special:FileDuplicateSearch/$2|matineng pulita kalunasulitan]]):",
        "sharedupload": "tina tangan namakay $1 satu hakay masaungay nu zuma a cwanan.",
        "sharedupload-desc-there": "tina tangan namakay $1 tu hakay masazuma tu ku cwanan tu pisaungay.\nkapiazih tu tatenga’ay [$2 tangan  sapuelac kasabelih] matineng tatalaayaway tu cesyun.",
        "sharedupload-desc-here": "kina tangan nay $1 hakay satu pisaungay tu zuma a cwanan.\nisasaay paazih kuyniay a tangan i [$2 tangan patahkal kasabelih] a patahkalay a lacul.",
        "listredirects": "miliyaw patatuzu’ piazihan tu sulit",
        "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",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]] izaw [[$3|{{PLURAL:$2|a zuma|$2 a misaliyaw tu 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",
        "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",
+       "magiclink-tracking-isbn-desc": "tina kasabelih pisaungay ISBN kaliwaza masasiket a kasabelih, pimiazih tu tatenga’ay [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] a hicaen malimad.",
        "specialloguserlabel": "mileku-misaungayay:",
        "speciallogtitlelabel": "pamutekan (satangahan saca {{ns:user}}: misaungayay pakatineng misaungayay):",
        "log": "nasulitan nakawawan",
        "allpagesbadtitle": "matuzu’ay i kasabelih satangahan la’cus, yamalyilu labu kamu  saca labu’ay a Wiki i saayaway sulit.\nwiza hakay yamalyilu cacay saca yadahay la’cus micukaymas i pyawti a tatebanan nu nisulitan.",
        "allpages-bad-ns": "{{SITENAME}} inayi’ \"$1\" pangangananay a salaedan.",
        "allpages-hide-redirects": "midimut miliyaw patatuzu’ kasabelih",
-       "cachedspecial-viewing-cached-ttl": "imahini kisu miciwsace tina belih a saduba'ay baziyong, pabaw-sahezek izaw $1 a mautang.",
-       "cachedspecial-viewing-cached-ts": "imahini lisu ciwsace tina belih a saduba' baziyong, hakay caay malecad tu tatenga’ay.",
+       "cachedspecial-viewing-cached-ttl": "imahini kisu miciwsace tina kasabelih a saduba’ay baziyong, pabaw-sahezek izaw $1 a mautang.",
+       "cachedspecial-viewing-cached-ts": "imahini lisu ciwsace tina kasabelih a saduba’ baziyong, hakay caay malecad tu tatenga’ay.",
        "cachedspecial-refresh-now": "ciwsace sabaluhay a baziyong.",
        "categories": "kakuniza",
        "categories-submit": "paazih",
        "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_body": "$WATCHINGUSERNAME mahicatu kisu,\n\n$PAGEINTRO $NEWPAGE\n\nmikawaway-kalumyiti pecu’ nu lacul:$PAGESUMMARY $PAGEMINOREDIT\n\nmikawaway-kalumyitiay patakus sasakawawen:\ntigami haku:$PAGEEDITOR_EMAIL\ntina kakacawan:$PAGEEDITOR_WIKI\n\niayaw kisu miciwsace kya kasabelih, kakakilul sa kya sumad sisetyimo caaytu patakus tisuwan aca. kapahtu kisu i miazihay a piazihan tu sulit miliyaw patizeng kisu sacahamin miazih kasabelih takus setyitase.\n\n{{SITENAME}} patakus sisetyimo \n\n--\nmisumad imyiyo(email) patakus setin nu misu, katayza:\n{{canonicalurl:{{#special:Preferences}}}}\n\nmisumad nu misu miazihay a piazihan tu sulit setin, katayza:\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nnay miazihay a piazihan tu sulit masipu tina kasabelih, katayza:\n$UNWATCHURL\n\nmaminay tigami atu miala tatalaayaway a miedap:\n$HELPPAGE",
        "enotif_minoredit": "payni mikilulay a mikawaway-kalumyiti",
        "deletepage": "misipu tu kasabelih",
        "confirm": "malucekaytu",
        "deleteotherreason": "zumaay/nicunusay a mahicaay:",
        "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’",
+       "delete-toobig": "tina kasabelih yamalyilu kayadahay a mikawaway-kalumyiti nazipa’an, mangsiw $1 {{PLURAL:$1|masumad nu ayaway}}.\nmakelec masipu tina kakuniza kasabelih a saungay, kya miliyas talibahalay miketun {{SITENAME}} a saungay.",
+       "delete-warning-toobig": "tina kasabelih izaw yadahay a mikawaway-kalumyiti nazipa’an, mangasiw $1 {{PLURAL:$1|masumad nu ayaway}}. \nmisipu kya kasabelih hakay maketun {{SITENAME}} nasulitan-sulu saungay;\npihaymawi misaungay.",
        "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",
        "protect-locked-blocked": "kasabelih malangat tuway, la’cus misumad midiput kasalaylay.\nisasa’ay kasabelih <strong>$1</strong> ayzaay a setin:",
        "protect-locked-dblock": "nasulitan-sulu maazihen, la’cus misumad midiput kasalaylay.\nzikuz u kasabelih <strong>$1</strong> ayza setin:",
        "protect-locked-access": "numisu a canghaw inayi’ ku tungus mabalic midiput kasaliyliy.\nisasa’ay kasabelih <strong>$1</strong> ayzaay a setin:",
+       "protect-cascadeon": "tina kasabelih madiput ayza, izay kasabelih mamicaliw isasa’ miteka patatusul midiput a {{PLURAL:$1|kasabelih}}.\nmisumad tina kasabelih a madiputay a kasaselal lawilaw patatusul midiput a sasahicaan.",
        "protect-default": "mahasa sacahamin misaungayay",
        "protect-fallback": "mahasa dada’ ku \"$1\" situngusay a misaungayay",
        "protect-level-autoconfirmed": "mahasa dada’ lunuk malucekay tu misaungayay",
        "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.",
+       "undeletehistorynoadmin": "kina kasabelih masipu tu.\nisasa’ay pecu’ nu lacul paazih masipu mahicaay atu masipu ayaw sacahamin  mikawaway-kalumyiti tina kasabelih a misaungayay pulita kalunasulitan.\nuyniyay masipuay tu tatenga’ay a cudad  masumad nu ayaway taneng dada’ tu mikuwanay.",
        "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.",
        "undeleteinvert": "kabelihan mipili’",
        "undeletecomment": "mahicaay:",
        "cannotundelete": "liyad saca hamin a palawpes  misipu mungangaw:\n$1",
+       "undeletedpage": "<strong>$1 mapatiku tuway </strong>\n\npiazih tu tatenga’ay [[Special:Log/delete|masipu nasulitan nazipa’an]] apalalitemuh tu kawaw capi demiad misipu atu patiku a nasulitan",
        "undelete-header": "kapiazih tu tatenga’ay [[Special:Log/delete|masipu nasulitan nazipa’an]] palalitemuh tu kawaw capi demiad masipuay kasabelih.",
        "undelete-search-title": "mikilim masipuay a kasabelih",
        "undelete-search-prefix": "paazih kasabelih miteka nay:",
        "imageinvalidfilename": "papatuzu’an a tangan  kalungangan la’cus.",
        "fix-double-redirects": "misabaluh sacahamin patatuzu’ nuayaway a satangahan miliyaw patatuzu’ kasabelih",
        "move-leave-redirect": "miliwan miliyaw patatuzu’ kasabelih",
+       "protectedpagemovewarning": "<strong>patalaw:tina kasabelih madiput tuway, situngusay mikuwanay misaungayay dada’ taneng mikawaway-kalumyiti.</strong>\nisasa’ pabeli capi demiad a nasulitan nazipa’an sapaazih tu tatenga’ay:",
        "semiprotectedpagemovewarning": "<strong> azihen:</strong> tina kasabelih madiput tuway, u mapanganganay a misaungayay dada’ kapah milimad. \nisasa’ sa, pabeli capi demiad a nasulitan nazipa’an kya kapah miazih tu tatenga’ay:",
        "move-over-sharedrepo": "[[:$1]] mamueneng tu i kapulungan tangan-sulu, u tangan a milimad tayni   satangahan a mitahpu tu kapulungan tangan.",
        "file-exists-sharedrepo": "mipili’ay a tangan kalungangan i kapulungan tangan-sulu masaungay tu ku zuma tangan.\npipili’en ku zuma a 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].",
+       "allmessagesnotsupportedDB": "mapasatezep tuway <strong>$wgUseDatabaseMessages</strong> setin, la’cus pisaungay tina kasabelih.",
        "allmessages-filter-legend": "kilim",
        "allmessages-filter": "kilul misumad zasatu mikilim:",
        "allmessages-filter-unmodified": "caay henay misumad",
        "file-no-thumb-animation": "<strong>azihen: kyu sitaneng mikelec, tina tangan sukep tu zunga nayi’ ku laheci nu tunghwa</strong>",
        "file-no-thumb-animation-gif": "<strong>piazihen: nay sitaneng kiyu makelec, tina nikalahizaan takalaw katingalaw GIF zunga inayi’ kananuwangay a teluc.</strong>",
        "newimages": "baluhay tangan a sulu nu zunga",
+       "imagelisttext": "isasa’ay ku <strong>$1</strong> {{PLURAL:$1|piazihan-tu-sulit}}, $2 kasalaylay.",
        "newimages-summary": "uyni sazumaay a kasabelih paazih sabaluhay patapabaw a tangan",
        "newimages-legend": "kilim",
        "newimages-label": "tangan kalungangan (saca liyad a nipangangan):",
        "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_subject_removed": "{{SITENAME}} pangangan a imyiyo(email) puenengan masipu 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]",
        "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.",
+       "confirmrecreate-noreason": "imahini kisu mikawaway-kalumyiti,misaungayay [[User:$1|$1]] ([[User talk:$1| sasukamu]]) misipu tuway tina kasabelih, piluceki kisu tatenga’ miliyaw patizeng tina kasabelih haw?",
        "recreate": "miliyaw miteka patizeng",
        "confirm-purge-title": "misipu tina kasabelih",
        "confirm_purge_button": "malucekay",
        "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-intro": "tina kasabelih pasilsil sacahamin kapah sapisaungay sacuzu’ mikawaway-kalumyiti lacul a aazihen-paya atu uyniyay aazihen-paya midayhiway a sakaizaway.",
        "tags-tag": "aazihen a paya  kalungangan",
        "tags-display-header": "ilabu nu misumad nasulitan-nazipa’an paazih sasakawawen",
        "tags-description-header": "malekuay mibuhci tu kamu",
        "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",
+       "log-description-tag": "anu misaungayay nay teked masumad nu ayaway saca  nasulitan nazipa’an kasacacay micunus saca misipu [[Special:Tags|aazihen-paya]] sa apaazih i tina kasabelih. tina nasulitan nazipa’an caay pasilsil itawya sakay aazihen-paya sapisanga’ mikawaway-kalumyiti, masipu saca kalahizaan a saungay.",
+       "logentry-tag-update-add-revision": "$1 {{GENDER:$2|macunus}} tina {{PLURAL:$7|tazihan-paya}} $6 ta baziyong $4 nu kasabelih $3",
+       "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|macunusen tuway}}{{PLURAL:$7|aazihen-paya}} $6 ta kasabelih $3 a nasulitan nazipa’an kasacacay $5.",
        "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).",
        "authform-newtoken": "mahedaw mima-sacukcuk. $1",
        "authform-wrongtoken": "mima-sacukcuk mungangaw",
        "specialpage-securitylevel-not-allowed-title": "amana",
-       "specialpage-securitylevel-not-allowed": "ahicanaca, caay mahasa pisaungay tina belih kisu, u nanu ID nu misu caay henay sawantan.",
+       "specialpage-securitylevel-not-allowed": "ahicanaca, caay mahasa pisaungay tina kasabelih kisu, u nanu ID nu misu caay henay sawantan.",
        "authpage-cannot-login": "la’cus miteka patalabu.",
        "authpage-cannot-login-continue": "la’cus milalid patalabu, kasasiketan nu misu hakay mautang tuway.",
        "authpage-cannot-create": "la’cus miteka patizeng tu canghaw.",
index 89cd878..5a70364 100644 (file)
        "cannotdelete-title": "تعذّر حذف الصفحة \"$1\"",
        "delete-hook-aborted": "أجهض خطّاف الحذف.\nلم يقدم أي توضيح.",
        "no-null-revision": "تعذر إنشاء مراجعة جديدة فارغة لصفحة \"$1\"",
-       "badtitle": "عÙ\86Ù\88اÙ\86 Ø³Ù\8aØ¡",
+       "badtitle": "عÙ\86Ù\88اÙ\86 Ø³Ù\8aئ",
        "badtitletext": "عنوان الصفحة المطلوب إما غير صحيح أو فارغ، وربما الرابط بين اللغات أو بين المشاريع خاطئ.\nربما يحوي محارف لا تصلح للاستخدام في العناوين.",
        "title-invalid-empty": "عنوان الصفحة المطلوبة فارغ أو يحتوي اسم النطاق فقط.",
        "title-invalid-utf8": "عنوان الصفحة المطلوب يحتوي سلسلة محارف UTF-8 غير صالحة.",
        "diff-multi-sameuser": "({{PLURAL:$1|لا مراجعات متوسطة|مراجعة متوسطة واحدة|مراجعتان متوسطتان|$1 مراجعات متوسطة|$1 مراجعة متوسطة}} بواسطة نفس المستخدم غير {{PLURAL:$1|معروضة|معروضة|معروضتين|معروضة}})",
        "diff-multi-otherusers": "({{PLURAL:$1|لا مراجعات|مراجعة متوسطة واحدة|مراجعتان متوسطتان|$1 مراجعات متوسطة|$1 مراجعة متوسطة}} بواسطة {{PLURAL:$2|ولا مستخدم|مستخدم واحد آخر|مستخدمين اثنين آخرين|$2 مستخدمين|$2 مستخدماً|$2 مستخدم}} غير {{PLURAL:$1|معروضة|معروضة|معروضتين|معروضة}})",
        "diff-multi-manyusers": "({{PLURAL:$1||مراجعة واحدة متوسطة غير معروضة أجراها|مراجعتان متوسطتان غير معروضتان أجراهما|$1 مراجعات متوسطة غير معروضة أجراها|$1 مراجعة متوسطة غير معروضة أجراها}} أكثر من {{PLURAL:$2||مستخدم واحد|مستخدمين|$2 مستخدمين|$2 مستخدمًا|$2 مستخدم}}.)",
+       "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\"",
        "recentchangesdays-max": "الحد الأقصى {{PLURAL:$1|أقل من يوم|يوم واحد|يومان|$1 أيام|$1 يوما|$1 يوم}}",
        "recentchangescount": "عدد التعديلات الظاهرة مبدئيا:",
        "prefs-help-recentchangescount": "بما في ذلك أحدث التغييرات وتاريخ الصفحات والسجلات.",
-       "prefs-help-watchlist-token2": "هذا هو المفتاح السري لتغذية الويب لقائمة مراقبتك.\nيمكن لأي شخص يعرفه أن يقرأ قائمة مراقبتك، ولذا لا تتشاركه مع أحد. [[Special:ResetTokens|انقر هنا إذا أردت إعادة ضبطه]].",
        "savedprefs": "تم حفظ تفضيلاتك.",
        "savedrights": "حُفظت المجموعات الجديدة {{GENDER:$1|للمستخدم|للمستخدمة}} $1.",
        "timezonelegend": "المنطقة الزمنية:",
        "rcfilters-restore-default-filters": "استرجاع المرشحات الافتراضية",
        "rcfilters-clear-all-filters": "مسح كل المرشحات",
        "rcfilters-show-new-changes": "عرض أحدث التغييرات",
-       "rcfilters-search-placeholder": "رشح التغييرات (استخدم القائمة أو البحث لاسم المرشح)",
+       "rcfilters-search-placeholder": "رشح التغييرات (استخدم القائمة أو ابحث عن اسم المرشح)",
        "rcfilters-invalid-filter": "مرشح غير صحيح",
        "rcfilters-empty-filter": "لا مرشحات فعالة. كل المساهمات معروضة.",
        "rcfilters-filterlist-title": "مرشحات",
index 548fa4c..012d35a 100644 (file)
        "pageinfo-display-title": "Göstərilən başlıq",
        "pageinfo-default-sort": "Susmaya görə çeşidləmə açarı",
        "pageinfo-length": "Səhifənin ölçüsü (baytla)",
-       "pageinfo-article-id": "Səhifə ID-si",
+       "pageinfo-article-id": "Səhifənin identifikatoru",
        "pageinfo-language": "Səhifənin dili",
        "pageinfo-language-change": "dəyiş",
        "pageinfo-content-model": "Səhifə məzmunu modeli",
        "pageinfo-robot-policy": "Robotlar tərəfindən indeksləşmə",
        "pageinfo-robot-index": "İcazə verilir",
        "pageinfo-robot-noindex": "İcazə verilmədi",
-       "pageinfo-watchers": "Səhifəyə baxışların sayı",
+       "pageinfo-watchers": "Səhifəni izləmə siyahısında saxlayanların sayı",
+       "pageinfo-visiting-watchers": "Səhifəni izləmədə saxlayanlardan son dəyişiklikləri görənlərin sayı",
        "pageinfo-few-watchers": "$1 {{PLURAL:$1|izləyicidən|izləyicilərdən}} az",
+       "pageinfo-redirects-name": "Bu səhifəyə yönləndirmələrin sayı",
        "pageinfo-firstuser": "Səhifəni yaradan",
        "pageinfo-firsttime": "Səhifənin yaranma tarixi",
        "pageinfo-lastuser": "Sonuncu redaktor",
        "pageinfo-lasttime": "Sonuncu redaktənin tarixi",
        "pageinfo-edits": "Redaktələrin ümumi sayı",
        "pageinfo-authors": "Fərqli müəlliflərin ümumi sayı",
-       "pageinfo-recent-edits": "Sonuncu redaktə sayı ($1 ərzində)",
+       "pageinfo-recent-edits": "Son redaktələrin sayı ($1 ərzində)",
        "pageinfo-recent-authors": "Sonuncu əhəmiyyətli dəyişiklik etmiş müəlliflər",
        "pageinfo-magic-words": "Sehrli {{PLURAL:$1|1=söz|sözlər}} ($1)",
        "pageinfo-templates": "{{PLURAL:$1|Şablon|Şablonlar}} ($1)",
        "version-libraries-library": "Kitabxana",
        "version-libraries-authors": "Müəlliflər",
        "redirect-user": "İstifadəçi ID-si",
-       "redirect-page": "Səhifə ID-si",
+       "redirect-page": "Səhifənin identifikatoru",
        "fileduplicatesearch": "Dublikat fayl axtarışı",
        "fileduplicatesearch-filename": "Fayl adı:",
        "fileduplicatesearch-submit": "Axtar",
index 2e19771..01b0361 100644 (file)
        "diff-multi-sameuser": "(не {{PLURAL:$1|паказаная $1 прамежная вэрсія|паказаныя $1 прамежныя вэрсіі|паказаныя $1 прамежных вэрсіяў}} аўтарства таго ж удзельніка)",
        "diff-multi-otherusers": "(не {{PLURAL:$1|паказаная $1 прамежная вэрсія|паказаныя $1 прамежныя вэрсіі|паказаныя $1 прамежных вэрсіяў}} аўтарства {{PLURAL:$2|1=яшчэ аднаго ўдзельніка|$2 удзельнікаў}})",
        "diff-multi-manyusers": "($1 {{PLURAL:$1|прамежная вэрсія|прамежныя вэрсіі|прамежных вэрсіяў}} $2 {{PLURAL:$2|удзельніка|удзельнікаў|удзельнікаў}} {{PLURAL:$1|не паказаная|не паказаныя|не паказаныя}})",
+       "diff-paragraph-moved-tonew": "Параграф быў перанесены. Націсьніце, каб перайсьці ў новае месца.",
+       "diff-paragraph-moved-toold": "Параграф быў перанесены. Націсьніце, каб перайсьці ў першапачатковае месца.",
        "difference-missing-revision": "{{PLURAL:$2|$2 вэрсія|$2 вэрсіі|$2 вэрсіяў}} з гэтымі адрозьненьнямі ($1) {{PLURAL:$2|не была|не былі}} знойдзеныя.\n\nЗвычайна гэта здараецца з-за пераходу па састарэлай спасылцы на старонку, якая была выдаленая.\nПадрабязнасьці можна знайсьці ў [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} журнале выдаленьняў].",
        "searchresults": "Вынікі пошуку",
        "searchresults-title": "Вынікі пошуку для «$1»",
        "prefs-watchlist-edits": "Максымальная колькасьць зьменаў для паказу ў сьпісе назіраньня:",
        "prefs-watchlist-edits-max": "Максымальная колькасьць: 1000",
        "prefs-watchlist-token": "Ключ сьпісу назіраньня:",
+       "prefs-watchlist-managetokens": "Кіраваньне токенамі",
        "prefs-misc": "Рознае",
        "prefs-resetpass": "Зьмяніць пароль",
        "prefs-changeemail": "Зьмяніць ці выдаліць адрас электроннай пошты",
        "recentchangesdays-max": "Максымальна $1 {{PLURAL:$1|дзень|дні|дзён}}",
        "recentchangescount": "Колькасьць рэдагаваньняў для паказу па змоўчаньні:",
        "prefs-help-recentchangescount": "Гэта ўключае апошнія зьмены, гісторыі старонак і журналы падзеяў.",
-       "prefs-help-watchlist-token2": "Гэта сакрэтны ключ да стужкі вашага сьпісу назіраньня.\nКожны, хто ведае яго, можа атрымаць доступ да вашага сьпісу назіраньня, таму не дзяліцеся ім.\nКалі вам трэба, [[Special:ResetTokens|вы можаце скінуць яго]].",
+       "prefs-help-tokenmanagement": "Вы можаце праглядзець і скінуць сакрэтны ключ да вашага рахунку, з дапамогай якога вы можаце мець доступ да вэб-стужкі вашага сьпісу назіраньня. Кожны, хто ведае ключ, можа чытаць ваш сьпіс назіраньня, таму не дзяліцеся ім.",
        "savedprefs": "Вашыя налады былі захаваныя.",
        "savedrights": "Групы {{GENDER:$1|ўдзельніка|ўдзельніцы}} $1 былі захаваныя.",
        "timezonelegend": "Часавы пояс:",
        "prefs-namespaces": "Прасторы назваў",
        "default": "па змоўчаньні",
        "prefs-files": "Файлы",
-       "prefs-custom-css": "Ð\86ндÑ\8bвÑ\96дÑ\83алÑ\8cны CSS",
-       "prefs-custom-js": "Ð\86ндÑ\8bвÑ\96дÑ\83алÑ\8cнÑ\8b JS",
-       "prefs-common-css-js": "Агульны CSS/JS для ўсіх афармленьняў:",
-       "prefs-reset-intro": "Ð\92Ñ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е Ð²Ñ\8bкаÑ\80Ñ\8bÑ\81Ñ\82оÑ\9eваÑ\86Ñ\8c Ð³Ñ\8dÑ\82Ñ\83Ñ\8e Ñ\81Ñ\82аÑ\80онкÑ\83 Ð´Ð»Ñ\8f Ð·Ð°Ð¼ÐµÐ½Ñ\8b Ð\92аÑ\88Ñ\8bÑ\85 Ð½Ð°Ð»Ð°Ð´Ð°Ñ\9e Ð½Ð° Ð½Ð°Ð»Ð°Ð´Ñ\8b Ñ\81айÑ\82а Ð¿Ð° Ð·Ð¼Ð¾Ñ\9eÑ\87ванÑ\8cнÑ\96.\nÐ\93Ñ\8dÑ\82ае Ð´Ð·ÐµÑ\8fнÑ\8cне Ð½Ðµ можа быць адмененае.",
+       "prefs-custom-css": "УлаÑ\81ны CSS",
+       "prefs-custom-js": "УлаÑ\81нÑ\8b JavaScript",
+       "prefs-common-css-js": "Агульны CSS/JavaScript для ўсіх тэмаў афармленьня:",
+       "prefs-reset-intro": "Ð\92Ñ\8b Ð¼Ð¾Ð¶Ð°Ñ\86е Ð²Ñ\8bкаÑ\80Ñ\8bÑ\81Ñ\82аÑ\86Ñ\8c Ð³Ñ\8dÑ\82Ñ\83Ñ\8e Ñ\81Ñ\82аÑ\80онкÑ\83 Ð´Ð»Ñ\8f Ð·Ð°Ð¼ÐµÐ½Ñ\8b Ð²Ð°Ñ\88Ñ\8bÑ\85 Ð½Ð°Ð»Ð°Ð´Ð°Ñ\9e Ð½Ð° Ð½Ð°Ð»Ð°Ð´Ñ\8b Ñ\81айÑ\82Ñ\83 Ð¿Ð° Ð·Ð¼Ð¾Ñ\9eÑ\87анÑ\8cнÑ\96.\nÐ\93Ñ\8dÑ\82ае Ð´Ð·ÐµÑ\8fнÑ\8cне Ð½Ñ\8f можа быць адмененае.",
        "prefs-emailconfirm-label": "Пацьверджаньне адрасу электроннай пошты:",
        "youremail": "Адрас электроннай пошты:",
        "username": "Імя {{GENDER:$1|ўдзельніка|ўдзельніцы}}:",
        "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": "Адсутнічае загаловак тыпу зьместу.",
+       "uploadstash-file-not-found-not-exists": "Не атрымалася знайсьці шлях, ці не зьяўляецца простым файлам.",
        "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 03c7ece..23f992e 100644 (file)
        "diff-multi-sameuser": "(একই ব্যবহারকারী দ্বারা সম্পাদিত {{PLURAL:$1|একটি মধ্যবর্তী সংশোধন|$1টি মধ্যবর্তী সংশোধন}} দেখানো হচ্ছে না)",
        "diff-multi-otherusers": "({{PLURAL:$2|একজন|$2 জন}} ব্যবহারকারী দ্বারা সম্পাদিত {{PLURAL:$1|একটি|$1টি}} মধ্যবর্তী সংশোধন দেখানো হচ্ছে না)",
        "diff-multi-manyusers": "($2 জনের বেশি {{PLURAL:$2|ব্যবহারকারীর}} সম্পাদিত {{PLURAL:$1|একটি মধ্যবর্তী সংশোধন|$1টি মধ্যবর্তী সংশোধন}} প্রদর্শিত হচ্ছে না)",
+       "diff-paragraph-moved-tonew": "অনুচ্ছেদ স্থানান্তর করা হয়েছে। নতুন অবস্থানে যাওয়ার জন্য ক্লিক করুন।",
+       "diff-paragraph-moved-toold": "অনুচ্ছেদ স্থানান্তর করা হয়েছে। পুরনো অবস্থানে যাওয়ার জন্য ক্লিক করুন।",
        "difference-missing-revision": "এই পার্থক্যের ($1) অন্তর্গত {{PLURAL:$2|একটি সংশোধিত সংস্করণ|$2টি সংশোধিত সংস্করণ}} খুঁজে পাওয়া যাচ্ছে না।\n\nসাধারণত মুছে ফেলা হয়েছে এমন পাতার মেয়াদ উত্তীর্ণ ইতিহাস পাতার লিংক খোলার কারণে এটি হতে পারে। \n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} পাতা অবলুপ্তি লগে] বিস্তারিত তথ্য জানা যাবে।",
        "searchresults": "অনুসন্ধানের ফলাফল",
        "searchresults-title": "\"$1\" অনুসন্ধানের ফলাফল",
        "prefs-watchlist-edits": "নজরতালিকাতে দেখানোর জন্য সর্বাধিক পরিবর্তনের সংখ্যা:",
        "prefs-watchlist-edits-max": "সর্বোচ্চ সংখ্যা: ১০০০",
        "prefs-watchlist-token": "নজরতালিকা টোকেন:",
+       "prefs-watchlist-managetokens": "টোকেন পরিচালনা করুন",
        "prefs-misc": "বিবিধ",
        "prefs-resetpass": "পাসওয়ার্ড পরিবর্তন",
        "prefs-changeemail": "ইমেইল ঠিকানা পরিবর্তন বা বাতিল করুন",
        "recentchangesdays-max": "সর্বোচ্চ $1 {{PLURAL:$1|দিনের}}",
        "recentchangescount": "সাম্প্রতিক পরিবর্তনে প্রদর্শিত সম্পাদনার পূর্বনির্ধারিত সংখ্যা:",
        "prefs-help-recentchangescount": "এতে সাম্প্রতিক পরিবর্তনগুলি, পাতার ইতিহাসগুলি এবং লগগুলি অন্তর্ভুক্ত।",
-       "prefs-help-watchlist-token2": "এটি আপনার নজরতালিকার ওয়েব ফিডের গোপন চাবি। কেউ যদি এটি জানতে পারেন, তাহলে তিনি আপনার নজরতালিকা পড়তে সক্ষম হবেন, তাই এটি প্রকাশ করবেন না। [[Special:ResetTokens|আপনার এটি পুনঃনির্ধারণ করার প্রয়োজন হলে এখানে ক্লিক করুন]]।",
+       "prefs-help-tokenmanagement": "আপনি আপনার অ্যাকাউন্টের জন্য গোপন চাবি দেখতে এবং পুনরায় নির্ধারন করতে পারবেন যা দিয়ে আপনার নজরতালিকার ওয়েব ফিডে প্রবেশাধিকার পাওয়া যাবে। যে কেউ যিনি এই চাবিটি জানেন তিনি আপনার নজর তালিকাটি পড়তে সক্ষম হবেন, তাই এটি অন্যদের সাথে ভাগ করবেন না।",
        "savedprefs": "আপনার পছন্দগুলি সংরক্ষণ করা হয়েছে।",
        "savedrights": "{{GENDER:$1|$1}}-এর ব্যবহারকারী দল সংরক্ষিত হয়েছে।",
        "timezonelegend": "সময় অঞ্চল:",
        "rcfilters-savedqueries-apply-and-setdefault-label": "পূর্বনির্ধারিত ছাঁকনি তৈরি করুন",
        "rcfilters-savedqueries-cancel-label": "বাতিল",
        "rcfilters-savedqueries-add-new-title": "বর্তমান ছাঁকনির সেটিং সংরক্ষণ করুন",
+       "rcfilters-savedqueries-already-saved": "এই ছাঁকনিগুলি ইতিমধ্যে সংরক্ষণ করা হয়েছে। একটি নতুন সংরক্ষিত ছাঁকনি তৈরি করতে আপনার সেটিং পরিবর্তন করুন।",
        "rcfilters-restore-default-filters": "পূর্বনির্ধারিত ছাঁকনি পুনরুদ্ধার করুন",
        "rcfilters-clear-all-filters": "সব ছাঁকনি পরিষ্কার করুন",
        "rcfilters-show-new-changes": "নতুনতর পরিবর্তনসমূহ দেখুন",
        "htmlform-selectorother-other": "অন্য",
        "htmlform-no": "না",
        "htmlform-yes": "হ্যাঁ",
-       "htmlform-chosen-placeholder": "à¦\85পশন নির্বাচন করুন",
+       "htmlform-chosen-placeholder": "বিà¦\95লà§\8dপ নির্বাচন করুন",
        "htmlform-cloner-create": "আরও যোগ করুন",
        "htmlform-cloner-delete": "অপসারণ",
        "htmlform-cloner-required": "অন্তত একটি মূল্য আবশ্যক।",
index 941f9af..9d705ae 100644 (file)
@@ -68,7 +68,6 @@
        "underline-never": "Morse",
        "underline-default": "Merdeer dre ziouer",
        "editfont-style": "Stil font an takad skridaozañ :",
-       "editfont-default": "Diouzh ar merdeer",
        "editfont-monospace": "Font unesaouennet",
        "editfont-sansserif": "Font hep-serif",
        "editfont-serif": "Font serif",
        "explainconflict": "Enrollet eo bet ar bajenn-mañ war-lerc'h m'ho pefe kroget d'he c'hemmañ.\nE-krec'h an takad aozañ emañ an destenn evel m'emañ enrollet bremañ er bank roadennoù.\nHo kemmoù deoc'h a zeu war wel en takad aozañ traoñ.\nRet e vo deoc'h degas ho kemmoù d'an destenn zo evit poent.\nN'eus '''nemet''' an destenn zo en takad krec'h a vo saveteet pa klikot war \"$1\".",
        "yourtext": "Ho testenn",
        "storedversion": "Stumm enrollet",
-       "nonunicodebrowser": "'''DIWALLIT: N'eo ket skoret an Unicode gant ho merdeer. Un diskoulm da c'hortoz zo bet kavet evit ma c'hallfec'h kemmañ pennadoù : dont a raio war wel an arouezennoù an-ASCII er prenestr skridaozañ evel kodoù eizhdekvedennel.'''",
        "editingold": "'''Diwallit : o kemm ur stumm kozh eus ar bajenn-mañ emaoc'h. Mard enrollit bremañ e vo kollet an holl gemmoù bet graet abaoe ar stumm-se.'''",
        "yourdiff": "Diforc'hioù",
        "copyrightwarning": "Sellet e vez ouzh an holl degasadennoù graet war {{SITENAME}} evel ouzh degasadennoù a zouj da dermenoù ar $2 (Sellet ouzh $1 evit gouzout hiroc'h). Mar ne fell ket deoc'h e vefe embannet ha skignet ho skridoù, arabat kas anezho.<br />\nHeñveldra, prometiñ a rit kemer perzh dre zegas skridoù savet ganeoc'h hepken pe tennet eus ur vammenn frank a wirioù.\n'''NA IMPLIJIT KET LABOURIOÙ GANT GWIRIOÙ AOZER (COPYRIGHT) HEP AOTRE D'OBER KEMENT-SE!'''",
        "recentchangesdays-max": "D'ar muiañ $1 {{PLURAL:$1|deiz|deiz}}",
        "recentchangescount": "Niver a gemmoù da ziskouez dre ziouer",
        "prefs-help-recentchangescount": "Kemer a ra an dra-mañ e kont ar c'hemmoù diwezhañ, istor ar pajennoù hag ar marilhoù.",
-       "prefs-help-watchlist-token2": "Homañ zo an alc'hwez kuzh d'ho roll-evezhiañ davit boued war ar web. Forzh piv a anavez anezhañ a c'hall lenn ho roll-evezhiañ, setu na lavarit grit diwar e benn. M'ho pez ezhomm, e c'hallit [[Special:ResetTokens|assevel anezhañ]].",
        "savedprefs": "Enrollet eo bet ar penndibaboù.",
        "savedrights": "Enrollet eo bet strolladoù implijer {{GENDER:$1|$1}}.",
        "timezonelegend": "Takad eur :",
        "rcfilters-group-results-by-page": "Strollañ an disoc'hoù dre bajenn",
        "rcfilters-grouping-title": "O strollañ",
        "rcfilters-activefilters": "Siloù oberiant",
+       "rcfilters-advancedfilters": "Siloù araokaet",
+       "rcfilters-limit-title": "Kemmoù da vezañ diskouezet",
+       "rcfilters-limit-shownum": "Diskouez {{PLURAL:$1|ar c'hemm|an $1 kemm}} diwezhañ",
        "rcfilters-days-title": "Deizioù paseet",
        "rcfilters-hours-title": "Eurioù paseet",
        "rcfilters-days-show-days": "($1 {{PLURAL:$1|deiz}})",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|eur}}",
        "rcfilters-highlighted-filters-list": "Lakaet war wel : $1",
        "rcfilters-quickfilters": "Siloù enrollet",
-       "rcfilters-quickfilters-placeholder-title": "Liamm ebet enrollet evit c'hoazh",
+       "rcfilters-quickfilters-placeholder-title": "Sil ebet enrollet evit c'hoazh",
        "rcfilters-savedqueries-defaultlabel": "Siloù enrollet",
        "rcfilters-savedqueries-rename": "Adenvel",
        "rcfilters-savedqueries-setdefault": "Gweredekaat dre ziouer",
        "rcfilters-savedqueries-remove": "Dilemel",
        "rcfilters-savedqueries-new-name-label": "Anv",
        "rcfilters-savedqueries-apply-label": "Enrollañ an arventennoù",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "Krouiñ ur sil dre ziouer",
        "rcfilters-savedqueries-cancel-label": "Nullañ",
        "rcfilters-savedqueries-add-new-title": "Enrollañ arventennoù ar sil en implij",
        "rcfilters-restore-default-filters": "Assevel ar siloù dre ziouer",
        "rcfilters-clear-all-filters": "Riñsañ an holl siloù",
+       "rcfilters-show-new-changes": "Gwelet ar c'hemmoù diwezhañ",
        "rcfilters-search-placeholder": "Silañ ar c'hemmoù diwezhañ (merdeiñ pe kregiñ da skrivañ)",
        "rcfilters-invalid-filter": "Sil direizh",
        "rcfilters-empty-filter": "Sil oberiant ebet. War wel emañ an holl gemmoù.",
        "rcfilters-filterlist-title": "Siloù",
-       "rcfilters-filterlist-whatsthis": "Petra eo se ?",
+       "rcfilters-filterlist-whatsthis": "Penaos ez a en-dro ?",
        "rcfilters-filterlist-feedbacklink": "Reiñ ho soñj diwar-benn ar siloù (beta) nevez",
        "rcfilters-highlightbutton-title": "Lakaat an disoc'hoù war wel",
        "rcfilters-highlightmenu-title": "Dibabit ul liv",
        "rcfilters-filter-user-experience-level-unregistered-label": "Divarilh",
        "rcfilters-filter-user-experience-level-unregistered-description": "Aozerien n'int ket kevreet.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Tud nevez-deuet",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Nebeutoc'h eget 10 kemm ha 4 devezh obererezh.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Aozerien enrollet ganto nebeutoc'h eget 10 kemm pe 4 devezh obererezh.",
        "rcfilters-filter-user-experience-level-learner-label": "Deskarded",
-       "rcfilters-filter-user-experience-level-learner-description": "Muioc'h a skiant-prenet eget an \"deraouidi\" hogen nebeutoc'h eget an \"implijerien arroutet\".",
+       "rcfilters-filter-user-experience-level-learner-description": "Aozerien ganto muioc'h a skiant-prenet eget an \"deraouidi\" hogen nebeutoc'h eget an \"implijerien arroutet\".",
        "rcfilters-filter-user-experience-level-experienced-label": "Implijerien arroutet",
-       "rcfilters-filter-user-experience-level-experienced-description": "Ouzhpenn 30 devezh oberiantiz ha 500 kemm.",
+       "rcfilters-filter-user-experience-level-experienced-description": "Aozerien graet ganto ouzhpenn 500 kemm ha dezho 30 devezh oberiantiz .",
        "rcfilters-filtergroup-automated": "Degasadennoù emgefre",
        "rcfilters-filter-bots-label": "Robot",
        "rcfilters-filter-bots-description": "Kemmoù graet gant ostilhoù emgefre.",
        "rcfilters-filter-watchlist-watched-label": "War ar roll evezhiañ",
        "rcfilters-filter-watchlist-watched-description": "Kemmoù graet war pajennoù ho roll evezhiañ.",
        "rcfilters-filter-watchlist-watchednew-label": "Kemmoù nevez er roll evezhiañ",
+       "rcfilters-filter-watchlistactivity-unseen-label": "Kemmoù n'int ket bet gwelet",
+       "rcfilters-filter-watchlistactivity-seen-label": "Kemmoù bet gwelet",
        "rcfilters-filtergroup-changetype": "Seurt kemm",
        "rcfilters-filter-pageedits-label": "Kemmoù pajennoù",
        "rcfilters-filter-pageedits-description": "Kemmoù da danvez ar wiki, d'ar c'haozeadennoù, da zeskrivadurioù rummadoù...",
        "block": "Stankañ an implijer",
        "unblock": "Distankañ an implijer",
        "blockip": "Stankañ an {{GENDER:$1|implijer|implijerez}}",
-       "blockip-legend": "Stankañ an implijer",
        "blockiptext": "Grit gant ar furmskrid a-is evit stankañ ar moned skrivañ ouzh ur chomlec'h IP pe un implijer bennak.\nSeurt diarbennoù n'hallont bezañ kemeret nemet evit mirout ouzh ar vandalerezh hag a-du gant ar [[{{MediaWiki:Policy-url}}|reolennoù da vezañ heuliet]].\nRoit a-is an abeg resis (o verkañ, da skouer, roll ar pajennoù bet graet gaou outo).\nGallout a rit stankañ lijorennoù chomlec'hioù IP en ur ober gant an ereadur [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] syntax; /$1 eo al lijorenn hirañ aotreet evit IPv4 ha /$2 evit IPv6.",
        "ipaddressorusername": "Chomlec'h IP pe anv implijer",
        "ipbexpiry": "Pad ar stankadenn",
        "compare-title-not-exists": "N'eus ket eus an titl spisaet ganeoc'h.",
        "compare-revision-not-exists": "N'eus ket eus an adweladenn spisaet ganeoc'h.",
        "diff-form": "ur '''furmskrid'''",
+       "permanentlink": "Peurliamm",
        "dberr-problems": "Ho tigarez ! Kudennoù teknikel zo gant al lec'hienn-mañ.",
        "dberr-again": "Gortozit un nebeud munutennoù a-raok adkargañ.",
        "dberr-info": "(Dibosupl kevreañ ouzh an diaz roadennoù : $1)",
        "gotointerwiki-invalid": "Direizh eo an titl merket",
        "gotointerwiki-external": "Emaoc'h war-nes kuitaat {{SITENAME}} evit mont da welet [[$2]] hag a zo ul lec'hienn all a-ziforc'h.\n\n[$1 Klikañ amañ evit kenderc'hel war $1].",
        "undelete-cantedit": "N'hallit ket diziverkañ ar bajenn-mañ rak n'oc'h ket aotreet da gemmañ anezhi.",
-       "undelete-cantcreate": "N'hallit ket diziverkañ ar bajenn-mañ rak n'eus pajenn ebet gant an anv-mañ ha n'oc'h ket aotreet da grouiñ ar bajenn-mañ."
+       "undelete-cantcreate": "N'hallit ket diziverkañ ar bajenn-mañ rak n'eus pajenn ebet gant an anv-mañ ha n'oc'h ket aotreet da grouiñ ar bajenn-mañ.",
+       "pagedata-title": "Roadennoù ar bajenn",
+       "pagedata-bad-title": "Titl direizh : $1."
 }
index ffa4bc0..1840b7e 100644 (file)
        "diff-multi-sameuser": "({{PLURAL:$1|Hi ha una revisió intermèdia|Hi ha $1 revisions intermèdies}} del mateix usuari que no es mostren)",
        "diff-multi-otherusers": "({{PLURAL:$1|Una revisió intermèdia|$1 revisions intermèdies}} per {{PLURAL:$2|un altre usuari que no es mostra|$2 usuaris que no es mostren}})",
        "diff-multi-manyusers": "({{PLURAL:$1|Hi ha una revisió intermèdia|Hi ha $1 revisions intermèdies}} sense mostrar fetes per més {{PLURAL:$2|d'un usuari|de $2 usuaris}})",
+       "diff-paragraph-moved-tonew": "S'ha mogut el paràgraf. Feu clic per a saltar una ubicació nova.",
+       "diff-paragraph-moved-toold": "S'ha mogut el paràgraf. Feu clic per a saltar la ubicació antiga.",
        "difference-missing-revision": "{{PLURAL:$2|Una revisió|$2 revisions}} d'aquesta diferència ($1) no {{PLURAL:$2|s'ha|s'han}} trobat.\n\nAixò passa generalment en seguir un enllaç obsolet de diferències a una pàgina que s'ha suprimit.\nEs pot trobar més informació en el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registre de supressions].",
        "searchresults": "Resultats de la cerca",
        "searchresults-title": "Resultats de la cerca de «$1»",
        "recentchangesdays-max": "(màxim $1 {{PLURAL:$1|dia|dies}})",
        "recentchangescount": "Nombre d'edicions a mostrar per defecte:",
        "prefs-help-recentchangescount": "Inclou els canvis recents, els historials de pàgines i els registres.",
-       "prefs-help-watchlist-token2": "Aquesta és la clau secreta pel canal de continguts de la vostra llista de seguiment.\nQualsevol que la conegui podria llegir la vostra llista de seguiment, així que no la compartiu.\n[[Special:ResetTokens|Cliqueu aquí si voleu restaurar-la]].",
        "savedprefs": "S’han desat les vostres preferències.",
        "savedrights": "S'han desat els grups d'usuari de {{GENDER:$1|$1}}.",
        "timezonelegend": "Fus horari:",
        "compare-title-not-exists": "El títol que heu especificat no existeix.",
        "compare-revision-not-exists": "La revisió que heu especificat no existeix.",
        "diff-form": "Diferències",
+       "diff-form-submit": "Mostra les diferències",
+       "permanentlink": "Enllaç permanent",
        "permanentlink-revid": "ID de la revisó",
        "permanentlink-submit": "Vés a la revisió",
        "dberr-problems": "Ho sentim. Aquest lloc web està experimentant dificultats tècniques.",
index 09e47ff..d2fe335 100644 (file)
        "recentchangesdays-max": "Къезиг $1 {{PLURAL:$1|дена}}",
        "recentchangescount": "Ӏадйитаран кепаца гойтуш долу нисдарийн дукхалла",
        "prefs-help-recentchangescount": "Гойту керла нисдарш, агӀонийн истори, тептарш.",
-       "prefs-help-watchlist-token2": "Иза хьан тергаме могӀан къайла догӀа ду.\nМуьлха и хуучунна йиш ю хьан тергаме могӀам беша, цундела ма хаийта иза кхечаьрга. [[Special:ResetTokens|ТӀетаӀа йе кхуза и хьайга кхосса лууш делахь]].",
        "savedprefs": "Хьан гӀирс Ӏалашбина.",
        "savedrights": "{{GENDER:$1|$1}} декъашхочун бакъонаш Ӏалашйина.",
        "timezonelegend": "Сахьтан аса:",
index a0cc596..519f21e 100644 (file)
@@ -55,7 +55,6 @@
        "underline-never": "Ayaw",
        "underline-default": "Default sa brawser",
        "editfont-style": "Font style sa edit area:",
-       "editfont-default": "Default sa brawser",
        "editfont-monospace": "Monospaced font",
        "editfont-sansserif": "Sans-serif font",
        "editfont-serif": "Serif font",
        "anontalk": "Panghisgot-hisgot alang niining IP",
        "navigation": "Tabok-tabok",
        "and": "&#32;ug",
-       "qbfind": "Pangitaa",
-       "qbbrowse": "Browse",
-       "qbedit": "Usba",
-       "qbpageoptions": "Kini nga panid",
-       "qbmyoptions": "Akong mga panid",
        "faq": "FAQ",
-       "faqpage": "Project:FAQ",
        "actions": "Mga lihok",
        "namespaces": "Mga ngalang espasyo",
        "variants": "Mga baryant",
        "edit": "Usba",
        "create": "Himoa",
        "create-local": "Pagpuno og lokal nga deskripsyon",
-       "editthispage": "Usba kining panid",
-       "create-this-page": "Himoa kining panid",
        "delete": "Papasa",
-       "deletethispage": "Papasa kining panid",
        "undelete_short": "Ibalik ang {{PLURAL:$1|usa ka pag-usab|$1 ka mga pag-usab}}",
        "protect": "Protektahi",
        "protect_change": "usba",
-       "protectthispage": "Protektahi kining panid",
        "unprotect": "Ayaw protektahi",
-       "unprotectthispage": "Ayaw na kini protektahi",
        "newpage": "Bag-ong panid",
-       "talkpage": "Hisgoti kining panid",
        "talkpagelinktext": "hisgot",
        "specialpage": "Espesyal nga panid",
        "personaltools": "Personal nga galamiton",
-       "articlepage": "Tan-awa ang panid sa sulod",
        "talk": "Panaghisgot-hisgot",
        "views": "Mga pagtan-aw",
        "toolbox": "Galamiton",
-       "userpage": "Tan-awa ang panid sa gumagamit",
-       "projectpage": "Tan-awa ang panid sa proyekto",
        "imagepage": "Tan-awa ang panid sa medya",
        "mediawikipage": "Tan-awa ang panid sa mensahe",
        "templatepage": "Tan-awa ang panid sa plantilya",
        "redirectedfrom": "(Naredirek gikan sa $1)",
        "redirectpagesub": "Panid sa redirekta",
        "redirectto": "Iadto sa:",
-       "lastmodifiedat": "Kini nga panid kataposang giusab niadtong $2, $1.",
+       "lastmodifiedat": "Kini nga panid kataposang giusab niadtong $2, sa $1.",
        "viewcount": "Naablihan na sa {{PLURAL:$1|maka-usa|$1 ka higayon}} ang kining panid.",
        "protectedpage": "Giprotektahang panid",
        "jumpto": "Ambak sa:",
        "logouttext": "'''Nakabiya ka na.'''\n\nMahimo kang magpadayon sa paggamit sa {{SITENAME}} bisan wala ka magpaila o puyde usab nga <span class='plainlinks'>[$1 mag-log in ka'g usab]</span> o isip laing gumagamit. Palihog hinumdomi nga may ubang mga panid nga magpakita sama nga ikaw naka-log in pa; kini tungod kay wala pa nimo malimpiyohi ang cache sa imong brawser.",
        "yourname": "Ngalan sa tiggamit:",
        "yourpassword": "Pasword:",
+       "userlogin-yourpassword": "Pasword:",
        "yourpasswordagain": "Itayp og usab ang pasword:",
        "yourdomainname": "Ang imong domain:",
        "externaldberror": "May nahitabong authentication database error o kaha wala ka tugoti nga mag-update sa imong eksternal nga akawnt.",
        "search-external": "Eksternal nga pagpangita",
        "searchdisabled": "Pagpangita sa {{SITENAME}} naka-disable.\nPuyde ka mangita gamit ang Google sa kasamtangan.\nHinumdomi nga ang ilang indeks sa sulod sa {{SITENAME}} mahimong dugay-dugay na.",
        "preferences": "Mga preperensiya",
-       "mypreferences": "Akong preperensiya",
+       "mypreferences": "Mga preperensiya",
        "prefs-edits": "Gidaghanon sa nausab:",
        "prefs-skin": "Panit",
        "skin-preview": "Paunang tan-aw",
        "listgrouprights-members": "(talaan sa mga miyembro)",
        "emailuser": "I-email kaning gumagamit",
        "watchlist": "Akong gibantayan",
-       "mywatchlist": "Akong gibantayan",
+       "mywatchlist": "Gibantayan",
        "watchlistfor2": "Para sa $1 $2",
        "addedwatchtext": "Ang panid \"[[:$1]]\" nadugang na sa imong [[Special:Watchlist|gibantayan]].\nAng mga pag-usab puhon sa kining panid ug ang kaubang panid sa hisgot dinhi maitala, ug ang panid mopakita nga '''nakalugom''' sa [[Special:RecentChanges|talaan sa mga bag-ong pag-usab]] aron dali kini pilion.",
        "removedwatchtext": "Ang panid nga \"[[:$1]]\" natangtang na sa imong [[Special:Watchlist|gibantayan]].",
        "blanknamespace": "(Meyn)",
        "contributions": "Mga tampo ning {{GENDER:$1|gumagamit}}",
        "contributions-title": "Mga tampo sa gumagamit para kang $1",
-       "mycontris": "Akong tampo",
+       "mycontris": "Mga tampo",
        "anoncontribs": "Mga tampo",
        "contribsub2": "Para $1 ($2)",
        "uctop": "(hitaas)",
        "whatlinkshere-prev": "{{PLURAL:$1|miaging|miaging $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|sunod|sunod $1}}",
        "whatlinkshere-links": "← mga sumpay",
-       "whatlinkshere-hideredirs": "$1 mga redirek",
-       "whatlinkshere-hidetrans": "$1 mga transklusyon",
-       "whatlinkshere-hidelinks": "$1 mga sumpay",
+       "whatlinkshere-hideredirs": "$1 ka redirek",
+       "whatlinkshere-hidetrans": "$1 ka transklusyon",
+       "whatlinkshere-hidelinks": "$1 ka sumpay",
        "whatlinkshere-filters": "Mga filter",
        "blockip": "I-block ang gumagamit",
        "ipboptions": "2 ka oras:2 hours,1 ka adlaw:1 day,3 ka adlaw:3 days,1 ka semana:1 week,2 ka semana:2 weeks,1 ka buwan:1 month,3 ka buwan:3 months,6 ka buwan:6 months,1 ka tuig:1 year,hangtod-sa-hangtod:infinite",
index d9aea2e..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": "Тафсилятны косьтер",
        "logentry-move-move_redir-noredirect": "$1 адлы къулланыджы $3 саифесининъ адыны ёнетме узеринден янъы бир ёнетме къалдырмайып $4 деп {{GENDER:$2|денъиштирди}}",
        "searchsuggest-search": "Къыдыр",
        "searchsuggest-containing": "ичинде бу олгъан...",
-       "variantname-crh": "Lat./Кир.",
-       "variantname-crh-latn": "Latin",
-       "variantname-crh-cyrl": "Кирил",
        "pagelang-language": "Тиль"
 }
index 016dfe5..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",
        "logentry-move-move_redir-noredirect": "$1 adlı qullanıcı $3 saifesiniñ adını yönetme üzerinden yañı bir yönetme qaldırmayıp $4 dep {{GENDER:$2|deñiştirdi}}",
        "searchsuggest-search": "Qıdır",
        "searchsuggest-containing": "içinde bu olğan...",
-       "variantname-crh": "Lat./Кир.",
-       "variantname-crh-latn": "Latin",
-       "variantname-crh-cyrl": "Кирил",
        "pagelang-language": "Til"
 }
index c682fc9..6f97ed6 100644 (file)
        "toc": "Obsah",
        "showtoc": "zobrazit",
        "hidetoc": "skrýt",
-       "collapsible-collapse": "Sbalit",
-       "collapsible-expand": "Rozbalit",
+       "collapsible-collapse": "sbalit",
+       "collapsible-expand": "rozbalit",
        "confirmable-confirm": "Jste si {{GENDER:$1|jist|jista|jisti}}?",
        "confirmable-yes": "Ano",
        "confirmable-no": "Ne",
        "recentchangesdays-max": "Maximálně $1 {{PLURAL:$1|den|dny|dní}}",
        "recentchangescount": "Počet implicitně zobrazovaných záznamů:",
        "prefs-help-recentchangescount": "Týká se posledních změn, historie stránek a protokolovacích záznamů.",
-       "prefs-help-watchlist-token2": "Toto je tajný klíč k webovému kanálu vašich sledovaných stránek. Kdokoli, kdo bude tento klíč znát, bude moci váš seznam sledovaných stránek číst, takže ho nešiřte.\n[[Special:ResetTokens|Kliknutím sem ho můžete reinicializovat.]]",
        "savedprefs": "Nastavení byla uložena.",
        "savedrights": "Skupiny {{GENDER:$1|uživatele|uživatelky}} $1 byly uloženy.",
        "timezonelegend": "Časové pásmo:",
index 7c3544c..ff0c83e 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“",
        "prefs-watchlist-edits": "Maximale Anzahl der angezeigten Einträge:",
        "prefs-watchlist-edits-max": "Maximal 1.000 Einträge",
        "prefs-watchlist-token": "Token der Beobachtungsliste:",
+       "prefs-watchlist-managetokens": "Token verwalten",
        "prefs-misc": "Verschiedenes",
        "prefs-resetpass": "Passwort ändern",
        "prefs-changeemail": "E-Mail-Adresse ändern oder entfernen",
        "recentchangesdays-max": "Maximal $1 {{PLURAL:$1|Tag|Tage}}",
        "recentchangescount": "Anzahl der standardmäßig angezeigten Bearbeitungen:",
        "prefs-help-recentchangescount": "Dies umfasst die Liste der letzten Änderungen, die Versionsgeschichte und die Logbücher.",
-       "prefs-help-watchlist-token2": "Dies ist der geheime Schlüssel zum Webfeed deiner Beobachtungsliste.\nJeder, der ihn kennt, kann deine Beobachtungsliste lesen. Teile ihn deshalb nicht Anderen mit.\nSofern notwendig, [[Special:ResetTokens|kannst du ihn zurücksetzen]].",
+       "prefs-help-tokenmanagement": "Du kannst den geheimen Schlüssel für dein Benutzerkonto ansehen und zurücksetzen, der auf den Webfeed deiner Beobachtungsliste zugreifen kann. Jeder, der den Schlüssel kennt, kann deine Beobachtungsliste lesen. Deshalb teile ihn nicht anderen mit.",
        "savedprefs": "Deine Einstellungen wurden gespeichert.",
        "savedrights": "Die Benutzergruppen von {{GENDER:$1|$1}} wurden gespeichert.",
        "timezonelegend": "Zeitzone:",
index 14bf37f..7ff84c5 100644 (file)
        "recentchangesdays-max": "Tewr zaf $1 {{PLURAL:$1|roc|roci}}",
        "recentchangescount": "Halê est-amardışi ra mocnayışi rê amarê vırnayışan:",
        "prefs-help-recentchangescount": "Ney de vurnayışê peyêni, tarixê pelan u cıkewteni asenê.",
-       "prefs-help-watchlist-token2": "Na pawıtış nımnayi kılta listada şımaya.\nOke kıliti zano şeno listeya tamaşann bıvino. Poğta coy ra kesiya me hesırne. \n[[Special:ResetTokens|Na kıliti reset kerdışi re tiyay bıploğne]].",
        "savedprefs": "Tecihê şıma qeyd biy.",
        "savedrights": "{{GENDER:$1|$1}}  gruba karberi qeyd  biya.",
        "timezonelegend": "Warey saete:",
index 6dd67a9..e47877e 100644 (file)
@@ -57,7 +57,6 @@
        "underline-never": "कभैई नाई",
        "underline-default": "खोल और ब्राउजर निर्धारित",
        "editfont-style": "फन्ट प्रकार क्षेत्र सम्पादन गर:",
-       "editfont-default": "ब्राउजर पूर्वस्थिति",
        "editfont-monospace": "मोनोस्पेस्ड फन्ट",
        "editfont-sansserif": "सान्स-सेरिफ फन्ट",
        "editfont-serif": "सेरिफ फन्ट",
        "nosuchusershort": " \"$1\" नाउँ भयाः कोइलै प्रयोगकर्ता नाइथिन।\n तमरो हिज्जे जाँचः।",
        "nouserspecified": "प्रयोगकर्ता नाम दिनु अनिवार्य छ।",
        "login-userblocked": "ये प्रयोगकर्तालाई रोक लगाया छ। प्रवेश गददु अनुमति छैन।",
-       "wrongpassword": "पासवरà¥\8dड à¤\97लत à¤¹à¤¾à¤²à¤¿à¤¯à¥\8b।\nà¤\95à¥\83पया à¤\86à¤\9cà¥\80 à¤ªà¥\8dरयास à¤\97रया।",
+       "wrongpassword": "à¤\97लत à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dता à¤¨à¤¾à¤\89à¤\81 à¤¯à¤¾ à¤ªà¤¾à¤¸à¤µà¤°à¥\8dड à¤¹à¤¾à¤²à¤¿à¤¯à¥\8b।\nà¤\95à¥\83पया à¤\86à¤\81à¤\9cà¥\80 à¤ªà¥\8dरयास à¤\97रà¥\8dâ\80\8dयाà¤\83।",
        "wrongpasswordempty": "हालिएया पासवर्ड खालि थ्यो।\nकृपया आजी प्रयास गरया।",
        "passwordtooshort": "पासवर्ड कम्तिमालै {{PLURAL:$1|१ अक्षर|$1 अक्षरन}}को हुनुपडन्छ।",
        "passwordtoolong": "पासवर्ड {{PLURAL:$1|१ अक्षर|$1 अक्षरन}} है लामो हुननाइसक्दो।",
        "watchlisttools-view": "आधारित फेरबदलीहरू हेर",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|कुरडी]])",
        "specialpages": "खास पन्नाअन",
-       "specialpages-note": "* साधारण खास पानाहरू।\n* <span class=\"mw-specialpagerestricted\">निषेधित खास पानाहरू।</span>",
        "specialpages-group-changes": "अल्लैका परिवर्तन लगहरू",
        "tags": "मान्य परिवर्तन ट्यागहरू",
        "tag-filter": "[[Special:Tags|पुछड]] छानिन्या",
index 52595ad..39f54e1 100644 (file)
        "recentchangesdays-max": "Mâsim $1 {{PLURAL:$1|dé}}",
        "recentchangescount": "Nómer ed mudéfichi da fêr vèder per default:",
        "prefs-help-recentchangescount": "A gh'é dèinter al j ûltmi mudéfichi, stôri, e regéster.",
-       "prefs-help-watchlist-token2": "Còsta l'é la cêva secrēta p'r al flós web di tō tgnû 'd ôc specêl. Tót quî che la cgnòsen a sràn bòun ed lēşer i tō tgnû 'd ôc specêl, per còst an spartîrla mìa cun nisûn. [[Special:ResetTokens|Cléca ché s'ét ghê bişògn ed turnêrla impustêr]].",
        "savedprefs": "Al preferèinsi în stêdi salvêdi.",
        "timezonelegend": "Fûş urâri:",
        "localtime": "Ōra lochêla:",
index 17cdcb1..ebce1ba 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\"",
        "recentchangesdays-max": "($1 {{PLURAL:$1|ημέρα|ημέρες}} το μέγιστο)",
        "recentchangescount": "Αριθμός επεξεργασιών που να εμφανίζονται για προεπιλογή.",
        "prefs-help-recentchangescount": "Αυτό περιλαμβάνει τις πρόσφατες αλλαγές, τα ιστορικά των σελίδων, και τα αρχεία διαγραφών.",
-       "prefs-help-watchlist-token2": "Αυτό είναι το μυστικό κλειδί για την web τροφοδοσία  της λίστας παρακολούθησής σας.\nΌποιος το γνωρίζει θα είναι σε θέση να διαβάσει την λίστα παρακολούθησης σας, οπότε μην τον μοιράζεστε.\n[[Special:ResetTokens|Κάνε κλικ εδώ εάν θέλετε να τον επαναφέρετε]].",
        "savedprefs": "Οι προτιμήσεις σας έχουν αποθηκευτεί.",
        "savedrights": "Οι ομάδες χρηστών {{GENDER:$1|του $1|της $1}} έχουν αποθηκευτεί.",
        "timezonelegend": "Ζώνη ώρας:",
index 52ac447..1fecca0 100644 (file)
        "prefs-watchlist-edits": "Maximum number of changes to show in watchlist:",
        "prefs-watchlist-edits-max": "Maximum number: 1000",
        "prefs-watchlist-token": "Watchlist token:",
+       "prefs-watchlist-managetokens": "Manage tokens",
        "prefs-misc": "Misc",
        "prefs-resetpass": "Change password",
        "prefs-changeemail": "Change or remove email address",
        "recentchangesdays-max": "Maximum $1 {{PLURAL:$1|day|days}}",
        "recentchangescount": "Number of edits to show by default:",
        "prefs-help-recentchangescount": "This includes recent changes, page histories, and logs.",
-       "prefs-help-watchlist-token2": "This is the secret key to the web feed of your watchlist.\nAnyone who knows it will be able to read your watchlist, so do not share it.\nIf you need to, [[Special:ResetTokens|you can reset it]].",
+       "prefs-help-tokenmanagement": "You can see and reset the secret key for your account that can access the Web feed of your watchlist. Anyone who knows the key will be able to read your watchlist, so do not share it.",
        "savedprefs": "Your preferences have been saved.",
        "savedrights": "The user groups of {{GENDER:$1|$1}} have been saved.",
        "timezonelegend": "Time zone:",
index 74c2317..508d480 100644 (file)
        "recentchangesdays-max": "(maksimume $1 {{PLURAL:$1|tago|tagoj}})",
        "recentchangescount": "Nombro de redaktoj por montri defaŭlte:",
        "prefs-help-recentchangescount": "Ĉi tiu inkluzivas lastajn ŝanĝojn, paĝajn historiojn, kaj protokolojn.",
-       "prefs-help-watchlist-token2": "Tio estas la sekreta ŝlosilo al la retfluo de via atentaro.\nĈiu, kiu konas ĝin, povas legi vian atentaron. Do, ne kunhavigu ĝin.\nSe vi devas, [[Special:ResetTokens|vi povas rekomencigi ĝin]].",
        "savedprefs": "Viaj preferoj estas konservitaj.",
        "savedrights": "La uzanto-grupoj de {{GENDER:$1|$1}} estis konservitaj.",
        "timezonelegend": "Horzono:",
index b5f65a1..9a6dd93 100644 (file)
        "diff-multi-sameuser": "(No se {{PLURAL:$1|muestra una edición intermedia|muestran $1 ediciones intermedias}} del mismo usuario)",
        "diff-multi-otherusers": "(No se {{PLURAL:$1|muestra una edición intermedia|muestran $1 ediciones intermedias}} de {{PLURAL:$2|otro usuario|$2 usuarios}})",
        "diff-multi-manyusers": "(No se {{PLURAL:$1|muestra una edición intermedia|muestran $1 ediciones intermedias}} de más de {{PLURAL:$2|un usuario|$2 usuarios}})",
+       "diff-paragraph-moved-tonew": "Se trasladó el párrafo. Pulsa para saltar a la ubicación nueva.",
+       "diff-paragraph-moved-toold": "Se trasladó el párrafo. Pulsa para saltar a la ubicación anterior.",
        "difference-missing-revision": "No se {{PLURAL:$2|ha encontrado una revisión|han encontrado $2 revisiones}} de la comparación solicitada ($1).\n\nLa causa de esto suele ser un enlace obsoleto hacia una edición de una página que ha sido borrada.\nPara más información, consulta el [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de borrados].",
        "searchresults": "Resultados de la búsqueda",
        "searchresults-title": "Resultados de la búsqueda de «$1»",
        "recentchangesdays-max": "Máximo {{PLURAL:$1|un día|$1 días}}",
        "recentchangescount": "N.º de ediciones que mostrar de manera predeterminada:",
        "prefs-help-recentchangescount": "Esto incluye cambios recientes, historiales de páginas y registros.",
-       "prefs-help-watchlist-token2": "Esta es la clave secreta del canal de suscripción de tu lista de seguimiento.\nCualquier persona que la conozca podría leer tu lista, así que no la compartas.\n[[Special:ResetTokens|Pulsa aquí si necesitas restablecerla]].",
        "savedprefs": "Se han guardado tus preferencias.",
        "savedrights": "Se han guardado los grupos de {{GENDER:$1|usuario|usuaria}} de $1.",
        "timezonelegend": "Huso horario:",
        "right-reupload-own": "Subir una nueva versión de un archivo propio",
        "right-reupload-shared": "Sobrescribir localmente archivos presentes en el repositorio multimedia compartido",
        "right-upload_by_url": "Subir un archivo a traves de un URL",
-       "right-purge": "Purgar la caché en el servidor sin tener que dar confirmación",
+       "right-purge": "Purgar la antememoria de una página sin confirmación",
        "right-autoconfirmed": "No resultar afectado por los límites de frecuencia de edición para las IP",
        "right-bot": "Ser tratado como un programa automático",
        "right-nominornewtalk": "No accionar el aviso de mensajes nuevos al realizar ediciones menores en páginas de discusión",
        "uploadstash-file-not-found-no-thumb": "No se pudo obtener la miniatura.",
        "uploadstash-file-not-found-no-local-path": "Ningun mood local para objeto escalado.",
        "uploadstash-file-not-found-no-object": "No se pudo crear el objeto del archivo local para la miniatura.",
+       "uploadstash-file-not-found-no-remote-thumb": "Falló la recuperación de miniaturas: $1\nURL = $2",
        "uploadstash-file-not-found-missing-content-type": "Una etiqueta de contenido falta",
        "uploadstash-file-not-found-not-exists": "No puede encontrar el camino, o no un fichero simple.",
-       "uploadstash-file-too-large": "No puede contenir un fichero mas ggrande que $ bytes",
+       "uploadstash-file-too-large": "No se pueden servir archivos mayores que $1 bytes.",
        "uploadstash-not-logged-in": "No ha accedido ningún usuario; los archivos deben pertenecer a un usuario.",
        "uploadstash-wrong-owner": "Este archivo ($1) no pertenece al usuario actual.",
        "uploadstash-no-such-key": "No existe esta clave ($1); no se puede eliminar.",
        "exif-saturation": "Saturación",
        "exif-sharpness": "Agudeza",
        "exif-devicesettingdescription": "Descripción de los ajustes del dispositivo",
-       "exif-subjectdistancerange": "Rango de distancia al sujeto",
+       "exif-subjectdistancerange": "Intervalo de distancia al sujeto",
        "exif-imageuniqueid": "ID único de imagen",
        "exif-gpsversionid": "Versión de la etiqueta GPS",
        "exif-gpslatituderef": "Latitud norte o sur",
index 7fafe29..9fc962d 100644 (file)
        "nosuchusershort": "Ez dago \"$1\" izena duen erabiltzailerik. Egiaztatu ongi idatzi duzula.",
        "nouserspecified": "Erabiltzaile izena zehaztu beharra daukazu.",
        "login-userblocked": "Erabiltzailea blokeatua dago. Ezin du saioa hasi.",
-       "wrongpassword": "Pasahitza ez da zuzena. Saiatu berriz.",
+       "wrongpassword": "Erabiltzailea edo pasahitza txarto sartu egin da. Saiatu berriz.",
        "wrongpasswordempty": "Pasahitza hutsik dago. Saiatu berriz.",
        "passwordtooshort": "Pasahitzek {{PLURAL:$1|karaktere 1|$1 karaktere}} gutxienez eduki behar dituzte.",
        "passwordtoolong": "Pasahitzak ezin dira {{PLURAL:$1|karaktere bat|$1 karaktere}} baino luzeagoak izan.",
        "diff-multi-sameuser": "(Erabiltzaile berdinaren {{PLURAL:$1|erdiko ekarpen bat ez da|$1 erdiko ekarpen ez dira}} erakusten)",
        "diff-multi-otherusers": "({{PLURAL:$1|Tarteko berrikusketa bat|$1 tarteko berrikusketak}}  {{PLURAL:$2|beste erabiltzaile bat|$2 erabiltzaileak}} egina ez da erakusten)",
        "diff-multi-manyusers": "({{PLURAL:$1|Tarteko berrikusketa bat|$1 tarteko berrikusketak}} by more than $2 {{PLURAL:$2|erabiltzaile batek|erabiltzaile batzuek}} baino gehiagok egina ez erakutsia)",
+       "diff-paragraph-moved-tonew": "Paragrafoa mugitu egin da. Egin klik beste kokaleku batera salto egiteko.",
        "difference-missing-revision": " ($1) ezberdinatasunaren  {{PLURAL:$2|Berrikusketa bat|$2 berrikusketa}} ez {{PLURAL:$2|da|dira}} aurkitu.\n\nHau, orokorrean ezabatu egin den orri batera deskonektatua dagoen esteka desegonkor baten ondorioz gertatzen da.\n\nHemen xehetasunak aurki daitezke: [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "searchresults": "Bilaketaren emaitzak",
        "searchresults-title": "«$1» bilaketaren  emaitzak",
        "recentchangesdays-max": "(gehienez {{PLURAL:$1|egun bat|$1 egun}})",
        "recentchangescount": "Erakusteko aldaketa kopurua, lehenetsita:",
        "prefs-help-recentchangescount": "Honek azken aldaketak, orrialdeen historiak eta logak barne-biltzen ditu.",
-       "prefs-help-watchlist-token2": "Hau da zure jarraipen zerrendako web jarioaren giltza sekretua.\nEzagutzen duen orok zure jarraipen zerrenda irakurtzeko aukera izango du, ez partekatu.\n[[Special:ResetTokens|Klik egin hemen berrezarri behar baduzu]]",
        "savedprefs": "Zure hobespenak gorde egin dira.",
        "savedrights": "{{GENDER:$1|$1}} erabiltzailearen taldeak gorde dira.",
        "timezonelegend": "Ordu-eremua:",
index ee86a94..427d3c2 100644 (file)
        "recentchangesdays-max": "Enintään $1 {{PLURAL:$1|päivä|päivää}}",
        "recentchangescount": "Näytettävien muutoksien määrä oletuksena",
        "prefs-help-recentchangescount": "Tämä sisältää tuoreet muutokset, muutoshistoriat ja lokit.",
-       "prefs-help-watchlist-token2": "Tämä on salainen avain tarkkailulistasi verkkosyötteeseen.\nKuka tahansa, joka tietää sen voi lukea tarkkailulistaasi, joten älä paljasta sitä.\n[[Special:ResetTokens|Napsauta tästä, jos sinun pitää uudistaa se]].",
        "savedprefs": "Asetuksesi on tallennettu.",
        "savedrights": "Käyttäjän {{GENDER:$1|$1}} käyttäjäryhmät on tallennettu.",
        "timezonelegend": "Aikavyöhyke",
        "rollback-success": "Käyttäjän {{GENDER:$3|$1}} tekemät muokkaukset kumottiin ja sivu palautettiin käyttäjän {{GENDER:$4|$2}} versioon.",
        "rollback-success-notify": "Kumottiin käyttäjän $1 muokkaukset; palautettiin viimeiseen käyttäjän $2 versioon. [$3 Näytä muutokset]",
        "sessionfailure-title": "Istuntovirhe",
-       "sessionfailure": "Istuntosi kanssa on ongelma. Muutosta ei toteutettu varotoimena istuntokaappauksien takia. Käytä selaimen paluutoimintoa ja päivitä sivu, jolta tulit, ja yritä uudelleen.",
+       "sessionfailure": "Näyttää siltä, että tämänhetkisessä istunnossasi on jokin ongelma. \nTämä toiminto on peruutettu varotoimena, jotta estetään istunnon kaappaaminen.\nMene aikaisemmalle sivulle ja päivitä se. Yritä sitten uudelleen.",
        "changecontentmodel": "Muuta sivun sisältömallia",
        "changecontentmodel-legend": "Muuta sisältömallia",
        "changecontentmodel-title-label": "Sivun otsikko",
index 8892be0..c6160b1 100644 (file)
        "diff-multi-sameuser": "({{PLURAL:$1|Une révision intermédiaire par le même utilisateur non affichée|$1 révisions intermédiaires par le même utilisateur non affichées}})",
        "diff-multi-otherusers": "({{PLURAL:$1|Une révision intermédiaire|$1 révisions intermédiaires}} par {{PLURAL:$2|un autre utilisateur|$2 utilisateurs}} non {{PLURAL:$1|affichée|affichées}})",
        "diff-multi-manyusers": "({{PLURAL:$1|Une révision intermédiaire|$1 révisions intermédiaires}} par plus {{PLURAL:$2|d'un utilisateur|de $2 utilisateurs}} {{PLURAL:$1|est masquée|sont masquées}})",
+       "diff-paragraph-moved-tonew": "Paragraphe renommé. Cliquer pour accéder au nouvel emplacement.",
+       "diff-paragraph-moved-toold": "Le paragraphe a été déplacé. Cliquez pour accéder à l'ancien emplacement.",
        "difference-missing-revision": "{{PLURAL:$2|Une révision|$2 révisions}} de cette différence ($1) {{PLURAL:$2|n’a pas été trouvée|n’ont pas été trouvées}}.\n\nCela survient en général en suivant un lien de différence désuet vers une page qui a été supprimée.\nVous pouvez trouver des détails dans le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} journal des suppressions].",
        "searchresults": "Résultats de la recherche",
        "searchresults-title": "Résultats de recherche pour « $1 »",
        "prefs-watchlist-edits": "Nombre maximum de modifications à afficher dans la liste de suivi :",
        "prefs-watchlist-edits-max": "Nombre maximum : 1000",
        "prefs-watchlist-token": "Jeton pour la liste de suivi :",
+       "prefs-watchlist-managetokens": "Gérer les jetons",
        "prefs-misc": "Préférences diverses",
        "prefs-resetpass": "Changer de mot de passe",
        "prefs-changeemail": "Changer ou supprimer l'adresse de courriel",
        "recentchangesdays-max": "(maximum $1 jour{{PLURAL:$1||s}})",
        "recentchangescount": "Nombre de modifications à afficher par défaut :",
        "prefs-help-recentchangescount": "Ceci inclut les modifications récentes, les pages d'historiques et les journaux.",
-       "prefs-help-watchlist-token2": "Voici la clé secrète du flux Web de votre liste de suivi.\nToute personne la connaissant pourra lire votre liste de suivi, ne la communiquez donc pas.\n[[Special:ResetTokens|Cliquez ici si vous devez la réinitialiser]].",
        "savedprefs": "Les préférences ont été sauvegardées.",
        "savedrights": "Les droits utilisateur de {{GENDER:$1|$1}} ont été enregistrés.",
        "timezonelegend": "Fuseau horaire :",
index 319dc4d..9abd8ef 100644 (file)
        "tooltip-ca-edit": "આ પાનામાં ફેરફાર કરો",
        "tooltip-ca-addsection": "નવો વિભાગ ઉમેરો",
        "tooltip-ca-viewsource": "આ પાનુ સુરક્ષિત છે.\nતમે તેનો સ્રોત જોઇ શકો છો",
-       "tooltip-ca-history": "àª\86 àªªàª¾àª¨àª¾àª¨àª¾àª\82 àª\85àª\97ાàª\89નાàª\82 àª«à«\87રફારà«\8b",
+       "tooltip-ca-history": "àª\86 àªªàª¾àª¨àª¾àª¨à«\80 àª\85àª\97ાàª\89નà«\80 àª\86વà«\83તà«\8dતિàª\93",
        "tooltip-ca-protect": "આ પાનું સુરક્ષિત કરો",
        "tooltip-ca-unprotect": "આ પાનું રક્ષણ બદલો",
        "tooltip-ca-delete": "આ પાનું હટાવો",
index 963dab0..6349228 100644 (file)
        "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\"",
        "prefs-watchlist-edits": "המספר המרבי של העריכות שמוצגות ברשימת המעקב:",
        "prefs-watchlist-edits-max": "לכל היותר: 1,000",
        "prefs-watchlist-token": "אסימון לרשימת המעקב:",
+       "prefs-watchlist-managetokens": "ניהול אסימונים",
        "prefs-misc": "שונות",
        "prefs-resetpass": "שינוי סיסמה",
        "prefs-changeemail": "שינוי או הסרת כתובת דוא\"ל",
        "recentchangesdays-max": "לכל היותר {{PLURAL:$1|יום אחד|יומיים|$1 ימים}}",
        "recentchangescount": "מספר העריכות שמוצגות כברירת מחדל:",
        "prefs-help-recentchangescount": "ההעדפה הזאת כוללת את דף השינויים האחרונים, דפי היסטוריית גרסאות ויומנים.",
-       "prefs-help-watchlist-token2": "זהו המפתח הסודי להזנה של רשימת המעקב שלך.\nכל מי שיודע אותו יכול לקרוא את רשימת המעקב שלך, לכן אין לשתף אותו.\nבמקרה הצורך, אפשר [[Special:ResetTokens|לאפס את האסימון]].",
+       "prefs-help-tokenmanagement": "באפשרותך לצפות במפתח הסודי לחשבונך, שמאפשר גישה ל־Feed האינטרנטי של רשימת המעקב שלך, ולאפס אותו. כל מי שיודע את המפתח יכול לקרוא את רשימת המעקב שלך, לכן אין לשתף אותו.",
        "savedprefs": "ההעדפות שלך נשמרו.",
        "savedrights": "קבוצות {{GENDER:$1|המשתמש|המשתמשת}} של \"$1\" נשמרו.",
        "timezonelegend": "אזור זמן:",
index 4c45688..c0d37fc 100644 (file)
@@ -18,7 +18,8 @@
                        "V6rg",
                        "C.R.",
                        "Smcnarayan",
-                       "Vito Genovese"
+                       "Vito Genovese",
+                       "Maxí"
                ]
        },
        "tog-underline": "Jorr ke niche line khicho:",
        "recentchangesdays-max": "(sab se jaada $1 {{PLURAL:$1|din|din}})",
        "recentchangescount": "Default se ketnaa badlao ke dekhae ke chaahi:",
        "prefs-help-recentchangescount": "Isme hai haali ke badlao, panna ke itihaas aur loga.",
-       "prefs-help-watchlist-token2": "Aap ke dhyan suchi ke web feed ke ii secret key hae.\nAur koi agar iske bare me jaane hae aap ke dhyan suchi ke parrhae sake hae, tab iske aur ki ke nai dena.\n[[Special:ResetTokens|Agar aap iske reset kare mangtaa hae tab hian pe click karo]].",
        "savedprefs": "Aap ke pasand ke save kar lewa gais hai.",
        "savedrights": "{{GENDER:$1|$1}} ke user group ke bachae lewa gais hai.",
        "timezonelegend": "Time ke zone:",
        "rcfilters-view-namespaces-tooltip": "Results ke namespace se filter karo",
        "rcfilters-view-tags-tooltip": "Results ke, edit tags ke kaam me laae ke, filter karo",
        "rcfilters-view-return-to-default-tooltip": "Main filter menu pe lauto",
-       "rcfilters-liveupdates-button": "Live updates",
+       "rcfilters-liveupdates-button": "Breytingar í beinni",
        "rcnotefrom": "Niche {{PLURAL:$5|badlao hae|badlao hae}} <strong>$3, $4</strong> (<strong>$1</strong> talak dekhawa gais) talak.",
        "rclistfromreset": "Taarik ke selection ke reset karo",
        "rclistfrom": "$3 $2 se suruu kar ke nawaa badlao dekhao",
index 696cdf8..faf24ef 100644 (file)
        "recentchangesdays-max": "(maksimalno $1 {{PLURAL:$1|dan|dana}})",
        "recentchangescount": "Zadani broj izmjena koje se prikazuju:",
        "prefs-help-recentchangescount": "Ovo uključuje nedavne promjene, stare izmjene, i evidencije.",
-       "prefs-help-watchlist-token2": "Ovo je tajni ključ prema sažetku Vašeg popisa praćenja. Svaki suradnik kojem je poznat, moći će čitati Vaš popis praćenih stranica. Ne dijelite ga ni s kim. [[Special:ResetTokens|Kliknite ovdje ako ga želite ponovo postaviti]].",
        "savedprefs": "Vaše postavke su sačuvane.",
        "savedrights": "Suradnička su prava {{GENDER:$1|suradnika $1|suradnice $1}} spremljena.",
        "timezonelegend": "Vremenska zona:",
index 7744632..3012d31 100644 (file)
        "nosuchusershort": "Nem létezik „$1” nevű szerkesztő.\nEllenőrizd, hogy helyesen írtad-e be.",
        "nouserspecified": "Meg kell adnod a felhasználói nevet.",
        "login-userblocked": "Ez a szerkesztő blokkolva van, a bejelentkezés nem engedélyezett.",
-       "wrongpassword": "A megadott jelszó érvénytelen. Próbáld meg újra.",
+       "wrongpassword": "A megadott felhasználónév vagy jelszó érvénytelen. Próbáld meg újra.",
        "wrongpasswordempty": "Nem adtál meg jelszót. Próbáld meg újra.",
        "passwordtooshort": "A jelszónak legalább $1 karakterből kell állnia.",
        "passwordtoolong": "A jelszó nem lehet hosszabb $1 karakternél.",
        "diff-multi-sameuser": "({{PLURAL:$1|Egy közbenső módosítás|$1 közbenső módosítás}} ugyanattól a szerkesztőtől nincs mutatva)",
        "diff-multi-otherusers": "({{PLURAL:$1|Egy közbenső módosítás|$1 közbenső módosítás}}, amit {{PLURAL:$2|egy másik szerkesztő végzett|$2 másik szerkesztő végzett}}, nincs mutatva)",
        "diff-multi-manyusers": "({{PLURAL:$1|Egy közbeeső változat|$1 közbeeső változat}} nincs mutatva, amit $2 szerkesztő módosított)",
+       "diff-paragraph-moved-tonew": "A szakaszt áthelyezték. Kattints ide az új helyére való ugráshoz.",
+       "diff-paragraph-moved-toold": "A szakaszt áthelyezték. Kattints ide a régi helyére való ugráshoz.",
        "difference-missing-revision": "Az összehasonlítandó változatok {{PLURAL:$2|egyike ($1) nem található|($1) nem találhatóak}}.\n\nEzt általában egy elavult, törölt oldalra mutató laptörténeti hivatkozás használata okozza. Részletek a [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} törlési naplóban] találhatóak.",
        "searchresults": "A keresés eredménye",
        "searchresults-title": "Keresési eredmények: „$1”",
        "prefs-watchlist-edits": "A figyelőlistán megjelenő szerkesztések maximális száma:",
        "prefs-watchlist-edits-max": "Legfeljebb 1000",
        "prefs-watchlist-token": "A figyelőlista kulcsa:",
+       "prefs-watchlist-managetokens": "Tokenek kezelése",
        "prefs-misc": "Egyéb",
        "prefs-resetpass": "Jelszó megváltoztatása",
        "prefs-changeemail": "E-mail-cím megváltoztatása vagy eltávolítása",
        "recentchangesdays-max": "(maximum {{PLURAL:$1|egy|$1}} nap)",
        "recentchangescount": "Az alapértelmezettként mutatott szerkesztések száma:",
        "prefs-help-recentchangescount": "Ez vonatkozik a friss változtatásokra, laptörténetekre és naplókra is.",
-       "prefs-help-watchlist-token2": "Ez a titkos kulcs a figyelőlistádhoz.\nAki ismeri, meg tudja nézni, milyen lapokat figyelsz, úgyhogy ne oszdd meg másokkal.\n[[Special:ResetTokens|Kattints ide, ha meg akarod változtatni]].",
        "savedprefs": "Az új beállításaid érvénybe léptek.",
        "savedrights": "{{GENDER:$1|$1}} felhasználói csoportjai el lettek mentve.",
        "timezonelegend": "Időzóna:",
index b82a237..a218140 100644 (file)
        "recentchangesdays-max": "($1 {{PLURAL:$1|օրից|օրից}} ոչ ավել)",
        "recentchangescount": "Խմբագրումների թիվը ըստ լռության.",
        "prefs-help-recentchangescount": "Ներառում է վերջին փոփոխությունները, էջերի պատմությունը և տեղեկամատյանները։",
-       "prefs-help-watchlist-token2": "Սա գաղտնի բանալի է հսկականկի օգնույամբ նորություն ստանալու համար:\nՈվ որ գիտի այն կարող է կարդալ ձեր հսկացանկը, ուստի մի տարածեք այն:\nԵթե ձեզ պետք է զրոյացնել հսկացանկի կտրոնը, [[Special:ResetTokens| սեղմեք այստեղ]]:",
        "savedprefs": "Ձեր նախընտրությունները հիշված են։",
        "timezonelegend": "Ժամային գոտի.",
        "localtime": "Տեղական ժամանակ.",
index cb8d5ec..b3174e5 100644 (file)
        "diff-multi-sameuser": "({{PLURAL:$1|Un version intermedie|$1 versiones intermedie}} facite per le mesme usator non es monstrate)",
        "diff-multi-otherusers": "({{PLURAL:$1|Un version intermedie|$1 versiones intermedie}} facite per {{PLURAL:$2|un altere usator|$2 usatores}} non es monstrate)",
        "diff-multi-manyusers": "({{PLURAL:$1|Un version intermedie|$1 versiones intermedie}} facite per plus de $2 {{PLURAL:$2|usator|usatores}} non es monstrate)",
+       "diff-paragraph-moved-tonew": "Le paragrapho ha essite displaciate. Clicca pro saltar al nove position.",
        "difference-missing-revision": "{{PLURAL:$2|Un version|$2 versiones}} de iste differentia ($1) non ha essite trovate.\n\nIsto es generalmente causate per sequer un ligamine de diff obsolete a un pagina que ha essite delite.\nDetalios se trova in le [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de deletiones].",
        "searchresults": "Resultatos del recerca",
        "searchresults-title": "Resultatos del recerca de \"$1\"",
        "prefs-watchlist-edits": "Numero maxime de modificationes a monstrar in le observatorio:",
        "prefs-watchlist-edits-max": "Numero maxime: 1000",
        "prefs-watchlist-token": "Indicio pro le observatorio:",
+       "prefs-watchlist-managetokens": "Gerer indicios",
        "prefs-misc": "Misc",
        "prefs-resetpass": "Cambiar contrasigno",
        "prefs-changeemail": "Cambiar o remover adresse de e-mail",
        "recentchangesdays-max": "(non plus de $1 {{PLURAL:$1|die|dies}})",
        "recentchangescount": "Numero de modificationes a monstrar per predefinition:",
        "prefs-help-recentchangescount": "Isto include modificationes recente, historias de paginas, e registros.",
-       "prefs-help-watchlist-token2": "Isto es le clave secrete pro le syndication web de tu observatorio.\nOmne persona qui lo cognosce pote leger tu observatorio, dunque, non divide lo.\n[[Special:ResetTokens|Clicca hic pro reinitialisar lo]].",
+       "prefs-help-tokenmanagement": "Tu pote vider e reinitialisar le clave secrete pro tu conto que pote acceder al aggregator Web de tu observatorio. Tote persona que cognosce le clave potera leger tu observatorio, dunque non divulga lo.",
        "savedprefs": "Tu preferentias ha essite confirmate.",
        "savedrights": "Le gruppos de usator de {{GENDER:$1|$1}} ha essite salveguardate.",
        "timezonelegend": "Fuso horari:",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:non</strong> $1",
        "rcfilters-exclude-button-off": "Excluder le selection",
        "rcfilters-exclude-button-on": "Selection excludite",
-       "rcfilters-view-advanced-filters-label": "Filtros avantiate",
        "rcfilters-view-tags": "Modificationes con etiquettas",
        "rcfilters-view-namespaces-tooltip": "Filtrar le resultatos per spatio de nomines",
        "rcfilters-view-tags-tooltip": "Filtrar le resultatos usante etiquettas de version",
index dc29549..9175588 100644 (file)
        "recentchangesdays-max": "(maksimum $1 {{PLURAL:$1|hari|hari}})",
        "recentchangescount": "Standar jumlah suntingan yang ditampilkan:",
        "prefs-help-recentchangescount": "Opsi ini berlaku untuk perubahan terbaru, versi terdahulu halaman, dan log.",
-       "prefs-help-watchlist-token2": "Ini adalah kunci rahasia (token) ke umpan web dari daftar pantauan Anda.\nSiapa saja yang tahu akan dapat melihat daftar pantauan Anda, jadi jangan dibagikan. Jika diperlukan\n[[Special:ResetTokens|Anda dapat mengatur ulang kunci tersebut]].",
        "savedprefs": "Preferensi Anda telah disimpan",
        "savedrights": "Kelompok hak pengguna {{GENDER:$1|$1}} telah disimpan.",
        "timezonelegend": "Zona waktu:",
index 6629710..e2a7436 100644 (file)
        "underline-never": "Aldrei",
        "underline-default": "Skinn eða sjálfgefið í vafra",
        "editfont-style": "Leturgerð í breytingareitum:",
-       "editfont-default": "skv. vafrastillingu",
        "editfont-monospace": "Jafnbreitt letur",
-       "editfont-sansserif": "Sans-serif letur",
-       "editfont-serif": "Serif letur",
+       "editfont-sansserif": "Steinskrift",
+       "editfont-serif": "Þverendaletur",
        "sunday": "sunnudagur",
        "monday": "mánudagur",
        "tuesday": "þriðjudagur",
        "nosuchusershort": "Það er enginn notandi með nafnið „$1“. Athugaðu hvort nafnið sé ritað rétt.",
        "nouserspecified": "Þú verður að taka fram notandanafn.",
        "login-userblocked": "Þessi notandi hefur verið settur í bann.  Innskráning ekki leyfð.",
-       "wrongpassword": "Uppgefið lykilorð er rangt. Reyndu aftur.",
+       "wrongpassword": "Rangt notandanafn eða lykilorð.\nReyndu aftur.",
        "wrongpasswordempty": "Lykilorðsreiturinn var auður. Reyndu aftur.",
        "passwordtooshort": "Lykilorð skal vera að minnsta kosti $1 {{PLURAL:$1|stafur|stafir}}.",
        "passwordtoolong": "Lykilorð geta ekki verið lengri en $1 {{PLURAL:$1|stafur|stafir}}.",
        "changepassword-success": "Það tókst að breyta lykilorðinu þínu!",
        "changepassword-throttled": "Þú hefur gert of margar tilraunir til innskráningar að undanförnu.\nBíddu í $1 áður en þú reynir aftur.",
        "botpasswords": "Lykilorð róbóta",
+       "botpasswords-label-appid": "Nafn vélmennis:",
        "botpasswords-label-create": "Búa til",
        "botpasswords-label-update": "Uppfæra",
        "botpasswords-label-cancel": "Hætta við",
        "botpasswords-label-delete": "Eyða",
        "botpasswords-label-resetpassword": "Endurstilla lykilorðið",
+       "botpasswords-bad-appid": "Vélmennanafnið „$1“ er ógilt.",
        "resetpass_forbidden": "Ekki er hægt að breyta lykilorðum",
        "resetpass_forbidden-reason": "Ekki er hægt að breyta lykilorðum: $1",
        "resetpass-no-info": "Þú verður að vera skráð(ur) inn til að hafa aðgang að þessari síðu.",
        "anoneditwarning": "<strong>Viðvörun:</strong> Þú ert ekki innskráð(ur). Vistfang þitt verður sýnt opinberlega ef þú gerir einhverjar breytingar. Ef þú <strong>[$1 skráir þig inn]</strong> eða <strong>[$2 stofnar aðgang]</strong> munu breytingarnar þínar vera tengdar við notandanafn þitt, ásamt öðrum kostum.",
        "anonpreviewwarning": "<em>Þú ert ekki skráð(ur) inn. Vistfang þitt skráist í breytingaskrá síðunnar.</em>",
        "missingsummary": "'''Áminning:''' Þú hefur ekki skrifað breytingarágrip.\nEf þú smellir á Vista aftur, verður breyting þín vistuð án þess.",
-       "missingcommenttext": "Gerðu svo vel og skrifaðu athugasemd fyrir neðan.",
+       "missingcommenttext": "Gerðu svo vel og skrifaðu athugasemd.",
        "missingcommentheader": "<strong>Áminning:</strong> Þú hefur ekki gefið upp umræðuefni.\nEf þú smellir á \"$1\" aftur, verður breyting þín vistuð án þess.",
        "summary-preview": "Forskoða breytingarágrip:",
        "subject-preview": "Forskoðun viðfangsefnis:",
        "explainconflict": "Síðunni hefur verið breytt síðan þú byrjaðir að gera breytingar á henni, textinn í efri reitnum inniheldur núverandi útgáfu úr gagnagrunni og sá neðri inniheldur þína útgáfu, þú þarft hér að færa breytingar sem þú vilt halda úr neðri reitnum í þann efri og vista síðuna. \n'''Aðeins''' texti úr efri reitnum mun vera vistaður þegar þú vistar.",
        "yourtext": "Þinn texti",
        "storedversion": "Geymd útgáfa",
-       "nonunicodebrowser": "'''Viðvörun: Vafrarinn þinn styður ekki unicode.'''\nLausn er í gildi sem leyfir þér að breyta síðum: Stafatákn sem eru ekki í ASCII kerfinu birtast í breytingarglugganum eins og sextándakóðar.",
        "editingold": "'''ATH: Þú ert að breyta gamalli útgáfu þessarar síðu og munu allar breytingar sem gerðar hafa verið á henni frá þeirri útgáfu vera fjarlægðar ef þú vistar.'''",
        "yourdiff": "Mismunur",
        "copyrightwarning": "Vinsamlegast athugaðu að öll framlög á {{SITENAME}} eru álitin leyfisbundin samkvæmt $2 (sjá $1 fyrir frekari upplýsingar).  Ef þú vilt ekki að skrif þín falli undir þetta leyfi og öllum verði frjálst að breyta og endurútgefa efnið samkvæmt því skaltu ekki leggja þau fram hér.<br />\nÞú berð ábyrgð á framlögum þínum, þau verða að vera þín skrif eða afrit texta í almannaeigu eða sambærilegs frjáls texta.\n<strong>AFRITIРEKKI HÖFUNDARRÉTTARVARIN VERK Á ÞESSA SÍÐU ÁN LEYFIS</strong>",
        "mergehistory-done": "$3 {{PLURAL:$3|útgáfa|útgáfur}} af $1 {{PLURAL:$3|var|voru}} sameinaðar í [[:$2]].",
        "mergehistory-fail": "Gat ekki sameinað breytingaskrár. Athugaðu vel síðuna og tímabreyturnar.",
        "mergehistory-fail-bad-timestamp": "Tímamerkið er ógilt.",
+       "mergehistory-fail-invalid-source": "Frumsíðan er ógild.",
        "mergehistory-no-source": "Upprunasíðan $1 er ekki til.",
        "mergehistory-no-destination": "Marksíðan $1 er ekki til.",
        "mergehistory-invalid-source": "Upprunasíðan verður að hafa gildan titil.",
        "lineno": "Lína $1:",
        "compareselectedversions": "Bera saman valdar útgáfur",
        "showhideselectedversions": "Sýna/fela valdar breytingar",
-       "editundo": "afturkalla þessa breytingu",
+       "editundo": "taka aftur þessa breytingu",
        "diff-empty": "(Enginn munur)",
        "diff-multi-sameuser": "($1 {{PLURAL:$1|millibreyting ekki sýnd|millibreytingar ekki sýndar}} frá sama notandanum)",
        "diff-multi-otherusers": "($1 {{PLURAL:$1|millibreyting ekki sýnd|millibreytingar ekki sýndar}} frá $2 {{PLURAL:$2|notanda|notendum}})",
        "timezoneregion-europe": "Evrópa",
        "timezoneregion-indian": "Indlandshaf",
        "timezoneregion-pacific": "Kyrrahaf",
-       "allowemail": "Virkja tölvupóst frá öðrum notendum",
+       "allowemail": "Leyfa öðrum notendum að senda mér tölvupóst",
        "prefs-searchoptions": "Leit",
        "prefs-namespaces": "Nafnrými",
        "default": "sjálfgefið",
        "prefs-editor": "Ritsjóri",
        "prefs-preview": "Forskoðun",
        "prefs-advancedrc": "Háþróaðir möguleikar",
+       "prefs-opt-out": "Hafna endurbótum",
        "prefs-advancedrendering": "Háþróaðir möguleikar",
        "prefs-advancedsearchoptions": "Háþróaðir möguleikar",
        "prefs-advancedwatchlist": "Háþróaðir möguleikar",
        "grant-editprotected": "Breyta vernduðum síðum",
        "grant-highvolume": "Magnbreytingar",
        "grant-oversight": "Fela notendur og bæla útgáfur",
+       "grant-privateinfo": "Skoða einkaupplýsingar",
        "grant-protect": "Vernda og afvernda síður",
+       "grant-rollback": "Afturkalla breytingar á síðum",
        "grant-sendemail": "Senda tölvupóst til annara notenda",
        "grant-uploadeditmovefile": "Hlaða inn, skipta út og færa til skrár",
        "grant-uploadfile": "Hlaða inn nýjum skrám",
        "grant-basic": "Grunnheimildir",
        "grant-viewdeleted": "Skoða skrár og síður sem hefur verið eytt",
        "grant-viewmywatchlist": "Skoða vaktlistann þinn",
+       "grant-viewrestrictedlogs": "Skoða lokaðar skráningar",
        "newuserlogpage": "Skrá yfir nýja notendur",
        "newuserlogpagetext": "Þetta er skrá yfir nýskráða notendur.",
        "rightslog": "Réttindaskrá notenda",
        "action-writeapi": "Nota API skrifun",
        "action-delete": "eyða þessari síðu",
        "action-deleterevision": "eyða breytingar",
+       "action-deletelogentry": "eyða skráningum",
        "action-deletedhistory": "skoða breytingaskrá síðu",
        "action-browsearchive": "leita í eyddum síðum",
        "action-undelete": "endurvekja síður",
        "action-userrights-interwiki": "breyta notandaréttindum annarra notenda á öðrum wiki-verkefnum",
        "action-siteadmin": "læsa eða opna gagnagrunninn",
        "action-sendemail": "senda tölvupósta",
+       "action-editmyoptions": "breyta þínum stillingum",
        "action-editmywatchlist": "breyta vaktlistanum þínum",
        "action-viewmywatchlist": "skoða vaktlistann þinn",
        "action-viewmyprivateinfo": "skoða persónuupplýsingar þínar",
        "action-editmyprivateinfo": "breyta persónuupplýsingum þínum",
        "action-managechangetags": "búa til og (af)virkja merki úr gagnagrunni",
        "action-applychangetags": "virkja merki ásamt öðrum breytingum",
+       "action-deletechangetags": "eyða merkjum úr gagnagrunni",
+       "action-purge": "hreinsa þessa síðu",
        "nchanges": "$1 {{PLURAL:$1|breyting|breytingar}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|síðan síðustu heimsókn}}",
        "enhancedrc-history": "breytingaskrá",
        "recentchanges-legend": "Stillingar nýlegra breytinga",
        "recentchanges-summary": "Hér geturðu fylgst með nýjustu breytingunum.",
        "recentchanges-noresult": "Engar breytingar í uppgefna tímabilinu sem passa við þessa mælikvarða.",
+       "recentchanges-network": "Vegna tæknivillu var ekki hægt að sækja niðurstöður. Vinsamlegast prófaðu að endurhlaða síðuna.",
        "recentchanges-feed-description": "Hér er hægt að fylgjast með nýlegum breytingum á {{SITENAME}}.",
        "recentchanges-label-newpage": "Þessi breyting skapaði nýja síðu",
        "recentchanges-label-minor": "Þetta er minniháttar breyting",
        "recentchanges-submit": "Sýna",
        "rcfilters-tag-remove": "Fjarlægja '$1'",
        "rcfilters-legend-heading": "<strong>Listi yfir styttingar</strong>",
-       "rcfilters-grouping-title": "Hópun",
+       "rcfilters-other-review-tools": "Önnur rýniverkfæri",
+       "rcfilters-group-results-by-page": "Flokka niðurstöður eftir síðum",
+       "rcfilters-grouping-title": "Flokkun",
        "rcfilters-activefilters": "Virkar síur",
        "rcfilters-advancedfilters": "Ítarlegar síur",
        "rcfilters-limit-title": "Breytingar sem á að sýna",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|klukkustund|klukkustundir}}",
        "rcfilters-highlighted-filters-list": "Áherslulitað: $1",
        "rcfilters-quickfilters": "Vistaðar síur",
+       "rcfilters-quickfilters-placeholder-title": "Engar síur vistaðar",
+       "rcfilters-quickfilters-placeholder-description": "Til þess að vista þínar síustillingar og nota þær aftur seinna, smelltu á bókamerkistáknið undir Virkum síum hér fyrir neðan.",
        "rcfilters-savedqueries-defaultlabel": "Vistaðar síur",
        "rcfilters-savedqueries-rename": "Endurnefna",
        "rcfilters-savedqueries-setdefault": "Setja sem sjálfgefið",
        "rcfilters-savedqueries-apply-label": "Búa til síu",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Búa til sjálfgefna síu",
        "rcfilters-savedqueries-cancel-label": "Hætta við",
+       "rcfilters-savedqueries-add-new-title": "Vista núverandi síustillingar",
+       "rcfilters-savedqueries-already-saved": "Þessar síur hafa þegar verið vistaðar. Breyttu þínum stillingum til þess að búa til nýja vistaða síu.",
+       "rcfilters-restore-default-filters": "Endurreisa sjálfgefnar síur",
        "rcfilters-clear-all-filters": "Hreinsa allar síur",
        "rcfilters-show-new-changes": "Skoða nýjustu breytingarnar",
+       "rcfilters-search-placeholder": "Sía breytingar (notaðu valmyndina eða leitaðu að síuheiti)",
+       "rcfilters-invalid-filter": "Ógild sía",
+       "rcfilters-empty-filter": "Engar virkar síur. Öll framlög eru sýnileg.",
        "rcfilters-filterlist-title": "Síur",
+       "rcfilters-filterlist-whatsthis": "Hvernig virkar þetta?",
+       "rcfilters-filterlist-feedbacklink": "Láttu okkur vita hvað þér finnst um þessi (nýju) síuverkfæri",
        "rcfilters-highlightbutton-title": "Áherslulita niðurstöður",
        "rcfilters-highlightmenu-title": "Veldu lit",
+       "rcfilters-highlightmenu-help": "Veldu lit til að merkja þetta einkenni með",
+       "rcfilters-filterlist-noresults": "Engin sía fannst",
+       "rcfilters-noresults-conflict": "Engar niðurstöður fundust því leitarorðin stangast á",
+       "rcfilters-filtergroup-authorship": "Höfundur framlaga",
        "rcfilters-filter-editsbyself-label": "Breytingar eftir þig",
        "rcfilters-filter-editsbyself-description": "Þín eigin framlög.",
        "rcfilters-filter-editsbyother-label": "Breytingar eftir aðra",
        "rcfilters-filter-editsbyother-description": "Allir breytingar nema þínar eigin.",
        "rcfilters-filtergroup-userExpLevel": "Skráning notanda og reynsla",
        "rcfilters-filter-user-experience-level-registered-label": "Skráð/ur",
+       "rcfilters-filter-user-experience-level-registered-description": "Innskráðir notendur.",
        "rcfilters-filter-user-experience-level-unregistered-label": "Óskráður",
+       "rcfilters-filter-user-experience-level-unregistered-description": "Notendur sem ekki eru innskráðir.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Byrjendur",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Skráðir notendur sem hafa gert færri en 10 breytingar eða verið virkir í færri en 4 daga.",
        "rcfilters-filter-user-experience-level-learner-label": "Námshestar",
+       "rcfilters-filter-user-experience-level-learner-description": "Skráðir notendur sem eru á milli þess að vera „byrjendur“ og „reyndir notendur“.",
        "rcfilters-filter-user-experience-level-experienced-label": "Vanir notendur",
+       "rcfilters-filter-user-experience-level-experienced-description": "Skráðir notendur sem hafa gert fleiri en 500 breytingar og verið virkir í fleiri en 30 daga.",
        "rcfilters-filtergroup-automated": "Sjálfvirk framlög",
        "rcfilters-filter-bots-label": "Vélmenni",
+       "rcfilters-filter-bots-description": "Breytingar gerðar af sjálfvirkum verkfærum.",
        "rcfilters-filter-humans-label": "Manneskja (ekki vélmenni)",
+       "rcfilters-filter-humans-description": "Breytingar gerðar af mönnum.",
        "rcfilters-filtergroup-reviewstatus": "Staða yfirferðar",
        "rcfilters-filter-patrolled-label": "Vaktað",
+       "rcfilters-filter-patrolled-description": "Breytingar merktar sem vaktaðar.",
+       "rcfilters-filter-unpatrolled-label": "Óvaktaðar",
+       "rcfilters-filter-unpatrolled-description": "Breytingar ekki merktar sem vaktaðar.",
+       "rcfilters-filtergroup-significance": "Mikilvægi",
        "rcfilters-filter-minor-label": "Minniháttar breytingar",
+       "rcfilters-filter-minor-description": "Breytingar sem höfundurinn merkti sem minniháttar.",
+       "rcfilters-filter-major-label": "Ekki-minniháttar breytingar",
+       "rcfilters-filter-major-description": "Breytingar ekki merktar sem minniháttar.",
+       "rcfilters-filtergroup-watchlist": "Síður á vaktlista",
        "rcfilters-filter-watchlist-watched-label": "Á vaktlista",
+       "rcfilters-filter-watchlist-watched-description": "Breytingar á síðum á þínum vaktlista.",
+       "rcfilters-filter-watchlist-watchednew-label": "Nýjar breytingar á síðum á vaktlista",
+       "rcfilters-filter-watchlist-watchednew-description": "Breytingar á síðum á vaktlista sem þú hefur ekki skoðað síðan breytingarnar voru gerðar.",
+       "rcfilters-filter-watchlist-notwatched-label": "Ekki á vaktlista",
+       "rcfilters-filter-watchlist-notwatched-description": "Allt nema breytingar á síðum á þínum vaktlista.",
+       "rcfilters-filtergroup-watchlistactivity": "Vaktlistavirkni",
+       "rcfilters-filter-watchlistactivity-unseen-label": "Óskoðaðar breytingar",
+       "rcfilters-filter-watchlistactivity-unseen-description": "Breytingar á síðum þú hefur ekki skoðað síðan breytingarnar voru gerðar.",
+       "rcfilters-filter-watchlistactivity-seen-label": "Skoðaðar breytingar",
+       "rcfilters-filter-watchlistactivity-seen-description": "Breytingar á síðum þú hefur skoðað síðan breytingarnar voru gerðar.",
+       "rcfilters-filtergroup-changetype": "Tegund breytinga",
+       "rcfilters-filter-pageedits-label": "Breytingar á síðum",
+       "rcfilters-filter-pageedits-description": "Breytingar á wiki-efni, umræðum, flokkslýsingum...",
+       "rcfilters-filter-newpages-label": "Nýjar síður",
+       "rcfilters-filter-newpages-description": "Breytingar sem skapa nýjar síður.",
+       "rcfilters-filter-categorization-label": "Breytingar á flokkum",
+       "rcfilters-filter-categorization-description": "Skrá um að síðum hefur verið bætt við eða þær fjarlægðar úr flokkum.",
+       "rcfilters-filter-logactions-label": "Skráðar aðgerðir",
+       "rcfilters-filter-logactions-description": "Stjórnendaaðgerðir, nýir aðgangar, eyðingar á síðum, upphleðslur…",
+       "rcfilters-filtergroup-lastRevision": "Nýjustu útgáfur",
+       "rcfilters-filter-lastrevision-label": "Nýjasta útgáfa",
+       "rcfilters-filter-lastrevision-description": "Eingöngu nýjasta breytingin á síðu.",
+       "rcfilters-filter-previousrevision-label": "Ekki nýjasta útgáfa",
+       "rcfilters-filter-previousrevision-description": "Allar breytingar nema sú nýjasta.",
+       "rcfilters-filter-excluded": "Útilokað",
+       "rcfilters-exclude-button-off": "Útiloka val",
+       "rcfilters-view-tags": "Merktar breytingar",
+       "rcfilters-view-namespaces-tooltip": "Sía niðurstöður eftir nafnrými",
+       "rcfilters-view-tags-tooltip": "Sía niðurstöður með breytingarmerkjum",
+       "rcfilters-view-return-to-default-tooltip": "Fara aftur í aðalsíuvalmynd",
+       "rcfilters-view-tags-help-icon-tooltip": "Fræðast meira um merktar breytingar",
+       "rcfilters-liveupdates-button": "Breytingar í beinni",
+       "rcfilters-liveupdates-button-title-on": "Slökkva á breytingum í beinni",
+       "rcfilters-liveupdates-button-title-off": "Sýna nýjar breytingar um leið og þær gerast",
+       "rcfilters-watchlist-markseen-button": "Merkja allar breytingar sem skoðaðar",
+       "rcfilters-watchlist-edit-watchlist-button": "Breyta þínum lista yfir vaktaðar síður",
        "rcnotefrom": "Að neðan {{PLURAL:$5|er breyting síðan|eru breytingar síðan}} <strong>$3, $4</strong> (allt að <strong>$1</strong> sýndar).",
+       "rclistfromreset": "Endurstilla dagsetningarval",
        "rclistfrom": "Sýna breytingar frá og með $3 $2",
        "rcshowhideminor": "$1 minniháttar breytingar",
        "rcshowhideminor-show": "Sýna",
        "uploadstash-errclear": "Tæming listans mistókst.",
        "uploadstash-refresh": "Endurhlaða listann",
        "uploadstash-thumbnail": "skoða smámynd",
+       "uploadstash-bad-path": "Slóðin er ekki til.",
+       "uploadstash-bad-path-invalid": "Slóðin er ógild.",
        "invalid-chunk-offset": "Ógild raðbreyting bunka",
        "img-auth-accessdenied": "Aðgangur óheimill",
        "img-auth-nopathinfo": "PATH_INFO vantar.\nBiðlarinn þínn er ekki stilltur til að gefa upp þessar upplýsingar.\nÞær mega vera CGI-byggðar og mega ekki styðja img_auth.\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
        "listfiles_size": "Stærð (bæti)",
        "listfiles_description": "Lýsing",
        "listfiles_count": "Útgáfur",
-       "listfiles-show-all": "Taka með gamlar útgáfur af myndum",
+       "listfiles-show-all": "Taka með gamlar útgáfur af skrám",
        "listfiles-latestversion": "Núverandi útgáfa",
        "listfiles-latestversion-yes": "Já",
        "listfiles-latestversion-no": "Nei",
        "sp-contributions-uploads": "innsendingar",
        "sp-contributions-logs": "aðgerðaskrá",
        "sp-contributions-talk": "spjall",
-       "sp-contributions-userrights": "Breyta {{GENDER:$1|notandaréttindum}}",
+       "sp-contributions-userrights": "breyta {{GENDER:$1|notandaréttindum}}",
        "sp-contributions-blocked-notice": "Þessi notandi er í banni.\nSíðasta færsla notandans úr bannskrá er sýnd hér fyrir neðan til skýringar:",
        "sp-contributions-blocked-notice-anon": "Þetta vistfang er í banni.\nSíðasta færsla vistfangsins úr bannskrá er sýnd hér fyrir neðan til skýringar:",
        "sp-contributions-search": "Leita að framlögum",
        "sp-contributions-username": "Vistfang eða notandanafn:",
        "sp-contributions-toponly": "Aðeins sýna síðustu breytingar",
        "sp-contributions-newonly": "Aðeins sýna breytingar sem hafa útbúið síðu",
+       "sp-contributions-hideminor": "Fela minniháttar breytingar",
        "sp-contributions-submit": "Leita að breytingum",
        "whatlinkshere": "Hvað tengist hingað",
        "whatlinkshere-title": "Síður sem tengjast „$1“",
        "block": "Banna notanda",
        "unblock": "Afbanna notanda",
        "blockip": "Banna {{GENDER:$1|notanda}}",
-       "blockip-legend": "Banna notanda",
        "blockiptext": "Notaðu eyðublaðið hér að neðan til þess að banna ákveðið IP-vistfang eða notandanafn.\nÞetta ætti einungis að gera til þess að koma í veg fyrir skemmdarverk, og í samræmi við [[{{MediaWiki:Policy-url}}|samþykktir]].\nGefðu nákvæma skýringu að neðan (til dæmis, með því að vísa í þær síður sem voru skemmdar).\nÞú getur bannað svið IP-vistfanga með því að nota [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] málsetningu; stærsta leyfilegt svið er /$1 fyrir IPv4 og /$2 fyrir IPv6.",
        "ipaddressorusername": "Vistfang eða notandanafn:",
        "ipbexpiry": "Bannið rennur út:",
        "lockdbsuccesstext": "Gagnagrunninum hefur verið læst.<br />\nMundu að [[Special:UnlockDB|opna hann aftur]] þegar þú hefur lokið viðgerðum.",
        "unlockdbsuccesstext": "Gagnagrunnurinn hefur verið opnaður.",
        "lockfilenotwritable": "Skrá gagnagrunnslássins er ekki skrifanleg.\nTil þess að læsa eða aflæsa gagnagrunni þarf vefþjónninn að geta skrifað í skrána.",
+       "databaselocked": "Gagnagrunnurinn er þegar læstur.",
        "databasenotlocked": "Gagnagrunnurinn er ekki læstur.",
        "lockedbyandtime": "(af {{GENDER:$1|$1}} kl. $3, $2)",
        "move-page": "Færa $1",
        "cant-move-to-user-page": "Þú hefur ekki leyfi til að færa síðu á notandasíðu (að frátöldum undirsíðum notanda).",
        "cant-move-category-page": "Þú hefur ekki leyfi til að færa flokkasíður.",
        "cant-move-to-category-page": "Þú hefur ekki leyfi til að færa síður yfir á flokkasíður.",
+       "cant-move-subpages": "Þú hefur ekki leyfi til að færa undirsíður.",
+       "namespace-nosubpages": "Nafnrýmið „$1“ leyfir ekki undirsíður.",
        "newtitle": "Nýr titill:",
        "move-watch": "Vakta þessa síðu",
        "movepagebtn": "Færa síðu",
        "movelogpagetext": "Þetta er listi yfir síður sem nýlega hafa verið færðar.",
        "movesubpage": "{{PLURAL:$1|Undirsíða|Undirsíður}}",
        "movesubpagetext": "Þessi síða hefur $1 {{PLURAL:$1|undirsíðu|undirsíður}} sem {{PLURAL:$1|er sýnd|eru sýndar}} hér fyrir neðan.",
+       "movesubpagetalktext": "Samsvarandi spjallsíðan hefur $1 {{PLURAL:$1|undirsíðu|undirsíður}} sem {{PLURAL:$1|er sýnd|eru sýndar}} hér fyrir neðan.",
        "movenosubpage": "Þessi síða hefur engar undirsíður.",
        "movereason": "Ástæða:",
        "revertmove": "taka til baka",
        "delete_and_move_text": "Úttakssíðan „[[:$1]]“ er þegar til. Viltu eyða henni til þess að rýma til fyrir flutningi?",
        "delete_and_move_confirm": "Já, eyða síðunni",
        "delete_and_move_reason": "Eytt til að rýma til fyrir flutning frá \"[[$1]]\"",
-       "selfmove": "Nýja nafnið er það sama og gamla, þú verður að velja annað nafn.",
+       "selfmove": "Nýi titillinn er sá sami og gamli, þú verður að velja annan titil.",
        "immobile-source-namespace": "Get ekki fært síður í nafnrýminu „$1“",
        "immobile-target-namespace": "Get ekki fært síður inn í nafnrýmið „$1“",
        "immobile-target-namespace-iw": "Óheimilt er að færa síðu með tungumálatengli.",
        "tooltip-pt-mycontris": "Listi yfir framlög þín",
        "tooltip-pt-anoncontribs": "Listi yfir breytingar sem hafa verið gerðar frá þessu vistfangi",
        "tooltip-pt-login": "Þú ert hvattur/hvött til að innskrá þig, það er hinsvegar ekki skylda.",
+       "tooltip-pt-login-private": "Þú verður að skrá þig inn til að nota þetta wiki",
        "tooltip-pt-logout": "Útskráning",
        "tooltip-pt-createaccount": "Þú ert hvattur/hvött til að búa til aðgang og skrá þig inn, en það er ekki skylda.",
        "tooltip-ca-talk": "Spallsíða þessarar síðu",
        "newimages-summary": "Þessi kerfissíða sýnir nýlega innhlaðnar skrár.",
        "newimages-legend": "Sía",
        "newimages-label": "Skráarheiti (eða hluti þess):",
+       "newimages-user": "IP-tala eða notandanafn",
+       "newimages-newbies": "Eingöngu sýna framlög frá nýjum aðgöngum",
        "newimages-showbots": "Birta innsend gögn frá vélmennum",
        "newimages-hidepatrolled": "Fela yfirfarnar innsendingar",
+       "newimages-mediatype": "Skrátegund:",
        "noimages": "Ekkert að sjá.",
        "ilsubmit": "Leita",
        "bydate": "eftir dagsetningu",
        "confirmrecreate-noreason": "Notandinn [[User:$1|$1]] ([[User talk:$1|spjall]]) eyddi þessari síðu eftir að þú fórst að breyta henni. Staðfestu að þú viljir í alvörunni endurvekja þessa síðu.",
        "recreate": "Endurvekja",
        "unit-pixel": "px",
+       "confirm-purge-title": "Hreinsa þessa síðu",
        "confirm_purge_button": "Í lagi",
        "confirm-purge-top": "Hreinsa skyndiminni þessarar síðu?",
        "confirm-purge-bottom": "Förgun síðu tæmir skyndiminnið og lætur nýjustu útgáfu síðunnar birtast.",
        "confirm-unwatch-button": "Í lagi",
        "confirm-unwatch-top": "Fjarlægja þessa síðu af vaktlistanum þínum?",
        "confirm-rollback-button": "Í lagi",
+       "confirm-rollback-top": "Afturkalla breytingar á þessari síðu?",
        "semicolon-separator": ";&#32;",
        "comma-separator": ",&#32;",
        "colon-separator": ":&#32;",
        "pagelang-language": "Tungumál",
        "pagelang-use-default": "Nota sjálfgefið tungumál",
        "pagelang-select-lang": "Veldu tungumál",
+       "pagelang-reason": "Ástæða",
        "pagelang-submit": "Senda inn",
+       "pagelang-nonexistent-page": "Síðan „$1“ er ekki til.",
        "right-pagelang": "Breyta tungumáli síðu",
        "action-pagelang": "breyta tungumáli síðunnar",
        "log-name-pagelang": "Annáll yfir breytingar á tungumáli",
        "special-characters-group-ipa": "IPA",
        "special-characters-group-symbols": "Tákn",
        "special-characters-group-greek": "Grískt",
+       "special-characters-group-greekextended": "Viðaukið grískt",
        "special-characters-group-cyrillic": "Kýrillískt",
        "special-characters-group-arabic": "Arabískt",
        "special-characters-group-arabicextended": "Viðaukið arabískt",
        "special-characters-group-thai": "Taílenskt",
        "special-characters-group-lao": "Laoskt",
        "special-characters-group-khmer": "Khmerískt",
+       "special-characters-group-canadianaboriginal": "Kanadískt frumbyggjaletur",
        "special-characters-title-endash": "stutt bandstrik (en dash)",
        "special-characters-title-emdash": "langt bandstrik (em dash)",
        "special-characters-title-minus": "mínustákn",
        "mw-widgets-dateinput-no-date": "Engin dagsetning valin",
        "mw-widgets-dateinput-placeholder-day": "ÁÁÁÁ-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "ÁÁÁÁ-MM",
+       "mw-widgets-mediasearch-input-placeholder": "Leita að efni",
+       "mw-widgets-mediasearch-noresults": "Engar niðurstöður fundust.",
        "mw-widgets-titleinput-description-new-page": "síðan er ekki enn til",
        "mw-widgets-titleinput-description-redirect": "tilvísun á $1",
+       "mw-widgets-categoryselector-add-category-placeholder": "Bæta við flokki…",
+       "mw-widgets-usersmultiselect-placeholder": "Bæta við fleiru…",
+       "date-range-from": "Frá dagsetningu:",
+       "date-range-to": "Til dagsetningar:",
        "sessionmanager-tie": "Get ekki sameinað margar gerðir auðkenningarbeiðna: $1.",
        "sessionprovider-generic": "$1 setur",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "setur með vefkökum",
        "sessionprovider-nocookies": "Vefkökur gætu verið óvirkar. Gakktu úr skugga um að smákökur séu virkar og byrjaðu svo aftur.",
-       "randomrootpage": "Handahófsvalin rótarsíða"
+       "randomrootpage": "Handahófsvalin rótarsíða",
+       "log-action-filter-all": "Allt"
 }
index 14f84c0..45945ec 100644 (file)
        "diff-multi-sameuser": "({{PLURAL:$1|Una versione intermedia|$1 versioni intermedie}} di uno stesso utente non {{PLURAL:$1|è mostrata|sono mostrate}})",
        "diff-multi-otherusers": "({{PLURAL:$1|Una versione intermedia|$1 versioni intermedie}} di {{PLURAL:$2|un altro utente|$2 utenti}} non mostrate)",
        "diff-multi-manyusers": "({{PLURAL:$1|Una versione intermedia|$1 versioni intermedie}} di oltre $2 {{PLURAL:$2|utente|utenti}} non {{PLURAL:$1|mostrata|mostrate}})",
+       "diff-paragraph-moved-tonew": "Il paragrafo è stato spostato. Clicca per passare alla nuova posizione.",
+       "diff-paragraph-moved-toold": "Il paragrafo è stato spostato. Clicca per passare alla vecchia posizione.",
        "difference-missing-revision": "{{PLURAL:$2|Una versione|$2 versioni}} di questa differenza ($1) {{PLURAL:$2|non è stata trovata|non sono state trovate}}.\n\nQuesto si verifica solitamente seguendo un collegamento obsoleto di un diff a una pagina cancellata.\nI dettagli possono essere trovati nel [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro delle cancellazioni].",
        "searchresults": "Risultati della ricerca",
        "searchresults-title": "Risultati della ricerca di \"$1\"",
        "prefs-watchlist-edits": "Numero massimo di modifiche da mostrare negli osservati speciali:",
        "prefs-watchlist-edits-max": "Numero massimo: 1000",
        "prefs-watchlist-token": "Token osservati speciali:",
+       "prefs-watchlist-managetokens": "Gestisci token",
        "prefs-misc": "Varie",
        "prefs-resetpass": "Cambia password",
        "prefs-changeemail": "Modifica o rimuovi indirizzo di posta elettronica",
        "recentchangesdays-max": "(massimo $1 {{PLURAL:$1|giorno|giorni}})",
        "recentchangescount": "Numero di modifiche da mostrare per default:",
        "prefs-help-recentchangescount": "Comprende ultime modifiche, cronologie e registri.",
-       "prefs-help-watchlist-token2": "Questa è la chiave segreta per il feed web dei tuoi osservati speciali.\nChiunque la conosce sarà in grado di leggere i tuoi osservati speciali, per cui non condividerla. [[Special:ResetTokens|Clicca qui se hai bisogno di reimpostarla]].",
+       "prefs-help-tokenmanagement": "Puoi visualizzare e reimpostare la chiave segreta per la tua utenza con cui puoi accedere al feed web dei tuoi osservati speciali. Chiunque conosce la chiave sarà in grado di leggere i tuoi osservati speciali, quindi non condividerla.",
        "savedprefs": "Le preferenze sono state salvate.",
        "savedrights": "I gruppi utente di {{GENDER:$1|$1}} sono stati salvati.",
        "timezonelegend": "Fuso orario:",
index 5141158..b6b6431 100644 (file)
        "nosuchusershort": "「$1」という名前の利用者は存在しません。\n綴りを確認してください。",
        "nouserspecified": "利用者名を指定してください。",
        "login-userblocked": "この利用者はブロックされています。ログインは拒否されます。",
-       "wrongpassword": "パスワードが間違っています。 \nもう一度やり直してください。",
+       "wrongpassword": "利用者名またはパスワードが間違っています。 \nもう一度やり直してください。",
        "wrongpasswordempty": "パスワードを空欄にはできません。\nもう一度やり直してください。",
        "passwordtooshort": "パスワードは {{PLURAL:$1|$1 文字}}以上にしてください。",
        "passwordtoolong": "パスワードは {{PLURAL:$1|$1 文字}}以下にしてください。",
        "showingresultsinrange": "<strong>$2</strong> 件目から<strong>$3</strong> 件目までの範囲内で最大 {{PLURAL:$1|<strong>$1</strong> 件の結果}}を表示しています。",
        "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> 件中の <strong>$1</strong> 件目|<strong>$3</strong> 件中の <strong>$1</strong> 件目から <strong>$2</strong> 件目}}",
        "search-nonefound": "問い合わせに合致する検索結果はありませんでした。",
-       "search-nonefound-thiswiki": "ã\81\93ã\81®ã\82µã\82¤ã\83\88ã\81§ã\81®ã\80\81ã\81\9dã\81®ã\82¯ã\82¨ã\83ªã\81«ä¸\80è\87´ã\81\99ã\82\8bçµ\90æ\9e\9cã\81¯ã\80\81ä½\95ã\82\82ありませんでした。",
+       "search-nonefound-thiswiki": "ã\82¯ã\82¨ã\83ªã\81«ä¸\80è\87´ã\81\99ã\82\8bçµ\90æ\9e\9cã\81¯ã\81\93ã\81®ã\82µã\82¤ã\83\88ã\81«ã\81¯ありませんでした。",
        "powersearch-legend": "高度な検索",
        "powersearch-ns": "名前空間を指定して検索:",
        "powersearch-togglelabel": "チェックを入れる:",
        "recentchangesdays-max": "(最大 $1 {{PLURAL:$1|日|日間}})",
        "recentchangescount": "既定で表示する件数:",
        "prefs-help-recentchangescount": "この設定は最近の更新、ページの履歴、および記録に適用されます。",
-       "prefs-help-watchlist-token2": "これはあなたのウォッチリスト フィードの秘密のコードです。\nこのトークンを知っている人は誰でもあなたのウォッチリストを読めてしまうため、他の人に教えないでください。\n[[Special:ResetTokens|トークンを再設定する必要がある場合はここをクリックしてください]]。",
        "savedprefs": "個人設定を保存しました。",
        "savedrights": "{{GENDER:$1|$1}}の利用者グループが保存されました。",
        "timezonelegend": "タイムゾーン:",
        "rcfilters-restore-default-filters": "標準設定の絞り込み条件を適用",
        "rcfilters-clear-all-filters": "すべてのフィルターをクリア",
        "rcfilters-show-new-changes": "最新の変更を表示",
-       "rcfilters-search-placeholder": "絞り込みを行う(一覧から選択、または検索)",
+       "rcfilters-search-placeholder": "絞り込みを行う(メニューから選択、またはフィルター名で検索)",
        "rcfilters-invalid-filter": "無効なフィルター",
        "rcfilters-empty-filter": "絞り込みは行われていません。全ての項目が表示さます。",
        "rcfilters-filterlist-title": "フィルター",
        "sp-contributions-newonly": "ページ作成を伴う編集のみを表示",
        "sp-contributions-hideminor": "細部の編集を表示しない",
        "sp-contributions-submit": "検索",
+       "sp-contributions-outofrange": "結果を表示できませんでした。要求されたIP範囲はCIDR上限値 /$1 を超えています。",
        "whatlinkshere": "リンク元",
        "whatlinkshere-title": "「$1」へリンクしているページ",
        "whatlinkshere-page": "ページ:",
index 18aaa92..587bd3c 100644 (file)
        "recentchangesdays-max": "(maksimum $1 {{PLURAL:$1|dina|dina}})",
        "recentchangescount": "Cacahing besutan sing dituduhaké kanthi baku:",
        "prefs-help-recentchangescount": "Iki klebu owah-owahan pungkasan, kaca sajarah, lan log.",
-       "prefs-help-watchlist-token2": "Ini adalah kunci rahasia (token) ke web feed dari daftar pantauan Anda.\nSiapa saja yang tahu akan dapat melihat daftar pantauan Anda, jadi jangan dibagikan.\n[[Special:ResetTokens|Klik di sini jika Anda perlu menyetel ulang]].",
        "savedprefs": "Prèferènsi Panjenengan wis disimpen",
        "savedrights": "Golongan panganggo {{GENDER:$1|$1}} wis disimpen.",
        "timezonelegend": "Zona wektu:",
index 1e371db..81ee93d 100644 (file)
@@ -5,7 +5,8 @@
                        "아라",
                        "Obaid Raza",
                        "Macofe",
-                       "Saraiki"
+                       "Saraiki",
+                       "BukhariSaeed"
                ]
        },
        "tog-underline": "ربطو خط کشیدگی",
@@ -51,7 +52,6 @@
        "underline-never": "کیاوت دی نو",
        "underline-default": "براوزرو طے شدہ",
        "editfont-style": "خانۂ تدوینو اندازِ تحریر:",
-       "editfont-default": "ڈیفالٹ براوزر",
        "editfont-monospace": "یکفضائی نویسہ",
        "editfont-sansserif": "بےحلیہ فونٹ",
        "editfont-serif": "حلیہ فونٹ",
        "talkpagelinktext": "مشقولگی",
        "specialpage": "خصوصی صفحہ",
        "personaltools": "ذاتی سماند",
-       "talk": "تبادÙ\84Û\81Ù´ خیال",
+       "talk": "تبادÙ\84Û\82 خیال",
        "views": "خیالات",
        "toolbox": "ٹول بکس",
        "imagepage": "ھوٹوو صفحو لوڑے",
index 1d5f64f..eb23049 100644 (file)
        "diff-multi-sameuser": "(같은 사용자의 {{PLURAL:$1|중간 판 하나|중간 판 $1개}}는 보이지 않습니다)",
        "diff-multi-otherusers": "({{PLURAL:$2|다른 사용자 한 명|사용자 $2명}}의 {{PLURAL:$1|중간 판 하나|중간 판 $1개}}는 보이지 않습니다)",
        "diff-multi-manyusers": "({{PLURAL:$2|사용자}} $2명 이상의 {{PLURAL:$1|중간 판 하나|중간 판 $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\"에 대한 검색 결과",
        "prefs-watchlist-edits": "주시문서 목록에서 볼 최대 변경사항의 수:",
        "prefs-watchlist-edits-max": "최대 개수: 1000",
        "prefs-watchlist-token": "주시문서 목록 토큰:",
+       "prefs-watchlist-managetokens": "토큰 관리",
        "prefs-misc": "기타",
        "prefs-resetpass": "비밀번호 바꾸기",
        "prefs-changeemail": "이메일 주소를 바꾸거나 제거하기",
        "recentchangesdays-max": "최대 $1{{PLURAL:$1|일}}",
        "recentchangescount": "기본으로 보여줄 편집 수:",
        "prefs-help-recentchangescount": "이 설정은 최근 바뀜, 문서 역사와 기록에 적용됩니다.",
-       "prefs-help-watchlist-token2": "내 주시문서 목록의 웹 피드의 비밀 키입니다.\n이 키를 알고 있는 사람은 내 주시문서 목록을 읽을 수 있으니 이 키를 공유하지 마세요.\n필요하다면 [[Special:ResetTokens|이 키를 재설정할 수 있습니다]].",
+       "prefs-help-tokenmanagement": "주시문서 목록의 웹 피드에 접근할 수 있는 계정의 비밀 키를 확인하고 재설정할 수 있습니다. 이 키를 알고 있는 누구든지 주시문서 목록을 읽을 수 있으므로 공유하지 마십시오.",
        "savedprefs": "설정을 저장했습니다.",
        "savedrights": "{{GENDER:$1|$1}}의 사용자 그룹이 저장되었습니다.",
        "timezonelegend": "시간대:",
index 0da01f8..aa47a9d 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.",
        "diff-multi-sameuser": "({{PLURAL:$1|Eng Tëscheversioun|$1 Tëscheversioune}} vun deemselwechte Benotzer net gewisen)",
        "diff-multi-otherusers": "({{PLURAL:$1|Eng Tëscheversioun|$1 Tëscheversioune}} vun {{PLURAL:$2|engem anere|$2}} Benotzer {{PLURAL:$1|gëtt|ginn}} net gewisen)",
        "diff-multi-manyusers": "({{PLURAL:$1|Eng Tëscheversioun|$1 Tëscheversioune}} vu méi wéi $2 {{PLURAL:$2|Benotzer|Benotzer}} ginn net gewisen)",
+       "diff-paragraph-moved-tonew": "Den Abschnitt gouf geréckelt. Klickt fir op déi nei Plaz ze sprangen.",
        "difference-missing-revision": "{{PLURAL:$2|Eng Versioun|$2 Versioune}} vun dëser Differenz ($1) {{PLURAL:$2|gouf|goufen}} net fonnt.\n\nDat geschitt normalerweis wann Dir op e vereelste Link vun enger Versioun vun enger Säit klickt déi geläscht ginn ass.\nDetailer fannt Dir am [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Logbuch vum Läschen].",
        "searchresults": "Resultat vum Sichen",
        "searchresults-title": "Resultater vum Sichen no \"$1\"",
        "recentchangesdays-max": "(Maximal $1 {{PLURAL:$1|Dag|Deeg}})",
        "recentchangescount": "Zuel vun den Ännerungen déi als Standard gewise ginn:",
        "prefs-help-recentchangescount": "Inklusiv Rezent Ännerungen, Versiounshistoriquen a Logbicher.",
-       "prefs-help-watchlist-token2": "Dëst ass de geheime Schlëssel fir de Webfeed vun Ärer Iwwerwaachungslëscht. Jiddwereen deen e kennt kann Är Iwwerwaachungslëscht liesen, dofir sollt Dir en net weider ginn. [[Special:ResetTokens|Klickt hei wann Dir en zrécksetze musst]].",
        "savedprefs": "Är Astellunge goufe gespäichert.",
        "savedrights": "D'Benotzergruppe vum {{GENDER:$1|$1}} goufe gespäichert.",
        "timezonelegend": "Zäitzon:",
        "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 f984762..af2bbc6 100644 (file)
        "nosuchusershort": "De gebroeker \"$1\" besjteit neet. Konterleer de sjriefwieze.",
        "nouserspecified": "Doe deens 'ne gebroekersnaam op te gaeve.",
        "login-userblocked": "Deze gebroeker steit geblokkeerd. Aanmèlje is neet toegestange.",
-       "wrongpassword": "'t Ingegaeve wachwaord is neet zjus. Perbeer 't obbenuujts.",
+       "wrongpassword": "De gebroekersnaom of 't wachwaord is neet zjus. Perbeer 't obbenuujts.",
        "wrongpasswordempty": "'t Ingegaeve wachwoord waor laeg. Perbeer 't obbenuujts.",
        "passwordtooshort": "Dien wachwaord is te kort. 't Mót minstes oet {{PLURAL:$1|1 teike|$1 teikes}} besjtaon.",
        "passwordtoolong": "Wachwäörd kónne neet lenger zeen es {{PLURAL:$1|ei teike| $1 teikes}}.",
        "anonpreviewwarning": "''De bis neet aangemeld.''\n''Door dien bewirking op te sjlaon waert dien IP-adres opgesjlage in de pazjanagesjiedenis.''",
        "missingsummary": "'''Herinnering:''' doe höbs gein samevatting opgegaeve veur dien bewirking. Es te weer op ''Pagina opslaon'' kliks weurt de bewirking zonger samevatting opgesjlage.",
        "selfredirect": "<strong>Waorsjoewing:</strong> Doe höbs 'ne redirek gemaak nao dees pagina.\nMeugelik höbs se 'n verkieërdje bestumming veure redirek gebroek of bewirks se de verkieërdje pagina.\nDoor nans op \"$1\" te klikke wuuertj de redirek tonna gemaak.",
-       "missingcommenttext": "Plaats dien opmèrking hiej onger, a.u.b.",
+       "missingcommenttext": "Plaats dien opmèrking.",
        "missingcommentheader": "'''Let op:''' Doe höbs gén ongerwerp/kop veur deze opmèrking opgegaeve. Esse oppernuuj op \"$1\" kliks, wörd dien verangering zonger ongerwerp/kop opgeslage.",
        "summary-preview": "Veurvertuining van de bewirkingssamevatting:",
        "subject-preview": "Veurvertoeaning van 't óngerwirp:",
        "sectioneditnotsupported-text": "Doe kèns hie gein köpkes bewèrke",
        "permissionserrors": "Foute inne rèchter",
        "permissionserrorstext": "Doe höbs gein rèchter om det te daon om de volgende {{PLURAL:$1|reje|rejer}}:",
-       "permissionserrorstext-withaction": "Dich höbs gein rech óm $2 óm de volgende {{PLURAL:$1|raej|raej}}:",
+       "permissionserrorstext-withaction": "Dich höbs gein rech óm $2 óm de volgende {{PLURAL:$1|raej}}:",
        "contentmodelediterror": "Doe kans dees versie neet bewirke, went 't inhawdsmodel daovan is <code>$1</code> en 't hujig inhawdsmodel van de pagina is <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Waarsjoewing: de bis bezig mit 't aanmake van 'n pagina die in 't verleje eweggesjaf is.'''\n\nBedink of 't terech is dets te wiejer wirks aan dees pagina. Veur dien gemaak sjteit hiejónger 't wislogbook en 't logbook verplaatste pagina's veur dees pagina:",
        "moveddeleted-notice": "Dees pagina is eweggesjaf.\nTer infermasie weurt 't wislogbook, 't beveiligingslogbook en 't logbook verplaatsjde pagina's van dees pagina hiejónger weergegaeve.",
        "rcfilters-filter-watchlist-watchednew-label": "Nuuj volgliesverangeringe",
        "rcfilters-filter-watchlist-notwatched-label": "Neet op de volglies",
        "rcfilters-filter-pageedits-label": "Paginabewirkinge",
+       "rcfilters-filter-newpages-description": "Bewirkinge die 'n nuuj pagina aanmake.",
        "rcfilters-filter-logactions-label": "Geregistreerde akties",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:neet</strong> $1",
        "rcnotefrom": "{{PLURAL:$5|Verangering|Verangeringe}} saer <strong>$3 óm $4</strong> (maximaal <strong>$1</strong> {{PLURAL:$1|verangering|verangeringe}}).",
index 09d616d..2eec11f 100644 (file)
        "post-expand-template-argument-warning": "'''Brīdinājums:''' Šī lapa satur vismaz vienu veidnes argumentu, kura lielums pēc paplašināšanas pārsniedz tehnisko limitu.\nVisi šādi argumenti tiks izlaisti.",
        "post-expand-template-argument-category": "Lapas, kurās ir izlaisti veidņu argumenti",
        "parser-template-loop-warning": "Veidne ir ievietota tādā pašā veidnē: [[$1]]",
+       "template-loop-category": "Lapas ar veidņu ciklu",
        "undo-success": "Šo izmaiņu ir iespējams atcelt.\nLūdzu, pārbaudi zemāk redzamajā salīdzinājumā, vai tu to tiešām vēlies darīt, un pēc tam saglabā lapu, lai pabeigtu izmaiņas atcelšanu.",
        "undo-failure": "Šo labojumu nevar atcelt, jo ir veikti nozīmīgi labojumi vēl pēc šī labojuma izdarīšanas.",
        "undo-norev": "Šo izmaiņu nevar atcelt, jo tādas nav vai tā ir izdzēsta.",
        "recentchangesdays-max": "Ne vairāk kā $1 {{PLURAL:$1|dienas|diena|dienas}}",
        "recentchangescount": "Izmaiņu skaits, kuru rāda pēc noklusējuma:",
        "prefs-help-recentchangescount": "Šis parametrs attiecas uz pēdējo izmaiņu un hronoloģijas lapām, kā arī uz sistēmas žurnāliem",
-       "prefs-help-watchlist-token2": "Šī ir slepena atslēga tavam uzraugāmo lapu sarakstam.\nIkvienam, kas to zinās, būs iespēja apskatīt tavu uzraugāmo lapu sarakstu, tāpēc nedalies ar to.\n[[Special:ResetTokens|Spied šeit, lai to atjaunotu]].",
        "savedprefs": "Jūsu izvēles ir saglabātas.",
        "timezonelegend": "Laika josla:",
        "localtime": "Vietējais laiks:",
        "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",
        "unwatchthispage": "Pārtraukt uzraudzīšanu",
        "notanarticle": "Nav satura lapa",
        "notvisiblerev": "Cita lietotāja pēdējā versija ir izdzēsta",
-       "watchlist-details": "(Tu uzraugi $1 {{PLURAL:$1|lapu|lapas}}, neieskaitot diskusiju lapas.)",
+       "watchlist-details": "Tu uzraugi $1 {{PLURAL:$1|lapas|lapu|lapas}} (neieskaitot diskusiju lapas).",
        "wlheader-enotif": "E-pasta paziņojumi ir ieslēgti.",
        "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",
index 84b95f6..36c0cd0 100644 (file)
@@ -26,7 +26,7 @@
                        "逆襲的天邪鬼"
                ]
        },
-       "tog-underline": "鏈墊線:",
+       "tog-underline": "以底線識鏈接:",
        "tog-hideminor": "隱近校",
        "tog-hidepatrolled": "隱近巡",
        "tog-newpageshidepatrolled": "隱新巡",
@@ -48,7 +48,7 @@
        "tog-previewonfirst": "覽首修",
        "tog-enotifwatchlistpages": "哨新,遣函",
        "tog-enotifusertalkpages": "議新,遣函",
-       "tog-enotifminoredits": "æ ¡æ\96°ï¼\8cé\81£å\87½",
+       "tog-enotifminoredits": "æ¯\8fæ\9c\89ä¿®è¨\82ï¼\8cé\9b\96é\9d\9eé\87\8dè¦\81ä¹\8b屬ï¼\8c亦é\81£é\83µ",
        "tog-enotifrevealaddr": "列余址於書內",
        "tog-shownumberswatching": "放哨有",
        "tog-oldsig": "覽原署名:",
        "tog-watchlisthideown": "不哨己文",
        "tog-watchlisthidebots": "不哨僕文",
        "tog-watchlisthideminor": "不哨細纂",
-       "tog-watchlisthideliu": "不哨有簿",
-       "tog-watchlisthideanons": "不無簿",
-       "tog-watchlisthidepatrolled": "不哨已巡",
-       "tog-watchlisthidecategorization": "隱頁類",
-       "tog-ccmeonemails": "凡所遺書,請存副本。",
-       "tog-diffonly": "異下無示頁",
-       "tog-showhiddencats": "示隱類",
+       "tog-watchlisthideliu": "不監在簿",
+       "tog-watchlisthideanons": "不無簿",
+       "tog-watchlisthidepatrolled": "不監既審",
+       "tog-watchlisthidecategorization": "不示類屬",
+       "tog-ccmeonemails": "凡所遺書,亦謄錄之,存於郵篋。",
+       "tog-diffonly": "方校讎時,下端無庸具示原文",
+       "tog-showhiddencats": "隱類悉示",
        "tog-norollbackdiff": "轉後略異",
        "tog-useeditwarning": "離而未存,示吾",
        "tog-prefershttps": "入簿復用安全鏈",
        "versionrequiredtext": "惠置$1媒維基,見[[Special:Version|版]]。",
        "ok": "可",
        "retrievedfrom": "取自\"$1\"",
-       "youhavenewmessages": "有$1書至子書房也。($2)",
+       "youhavenewmessages": "{{PLURAL:$3|新接}} $1($2)。",
        "youhavenewmessagesfromusers": "子有 $1 自 {{PLURAL:$3|一簿戶也|$3 簿戶也}} ($2)。",
-       "youhavenewmessagesmanyusers": "子有 $1 自多簿戶 ( $2 )",
-       "newmessageslinkplural": "{{PLURAL:$1|一新訊|999=新訊}}",
-       "newmessagesdifflinkplural": "新",
+       "youhavenewmessagesmanyusers": "諸士音信新來。其$1,悉存乎齋($2)。",
+       "newmessageslinkplural": "{{PLURAL:$1|書簡凡一|999=二三書簡}}",
+       "newmessagesdifflinkplural": "新{{PLURAL:$1|易}}",
        "youhavenewmessagesmulti": "新訊於$1",
        "editsection": "纂",
        "editold": "纂",
        "editingcomment": "撰$1",
        "editconflict": "纂沖$1",
        "explainconflict": "子纂與他人沖,上者時也,下者子也,望子合之。\n註,'''$1'''上文儲焉",
-       "yourtext": "å­\90ä¹\9f",
+       "yourtext": "å\90\9bæ\89\80æ\92°è¿°",
        "storedversion": "時也",
        "editingold": "'''\"警示\"子纂舊然。強儲之,則新易失焉。'''",
        "yourdiff": "異",
index da240ab..6ed95e8 100644 (file)
        "nosuchusershort": "Нема корисник со името „$1“.\nПроверете дали правилно сте напишале.",
        "nouserspecified": "Мора да наведете корисничко име.",
        "login-userblocked": "Овој корисник е блокиран. Најавувањето не е дозволено.",
-       "wrongpassword": "Ð\92неÑ\81овÑ\82е Ð¿Ð¾Ð³Ñ\80еÑ\88на Ð»Ð¾Ð·Ð¸Ð½ÐºÐ°. Обидете се повторно.",
+       "wrongpassword": "Ð\92неÑ\81овÑ\82е Ð¿Ð¾Ð³Ñ\80еÑ\88но ÐºÐ¾Ñ\80иÑ\81ниÑ\87ко Ð¸Ð¼Ðµ Ð¸Ð»Ð¸ Ð»Ð¾Ð·Ð¸Ð½ÐºÐ°.\nОбидете се повторно.",
        "wrongpasswordempty": "Внесената лозинка е празна. Обидете се повторно.",
        "passwordtooshort": "Лозинката мора да има најмалку {{PLURAL:$1|1 знак|$1 знаци}}.",
        "passwordtoolong": "Лозинката не треба да има повеќе од {{PLURAL:$1|1 знак|$1 знаци}}.",
        "diff-multi-sameuser": "({{PLURAL:$1|Не е прикажана една меѓувремена преработка|Не се прикажани $1 меѓувремени преработки}} од истиот корисник)",
        "diff-multi-otherusers": "({{PLURAL:$1|Не е прикажана една меѓувремена преработка|Не се прикажани $1 меѓувремени преработки}} од {{PLURAL:$2|еден друг корисник|$2 корисници}})",
        "diff-multi-manyusers": "({{PLURAL:$1|Не е прикажана една меѓувремена преработка направена|Не се прикажани $1 меѓувремени преработки направени}} од повеќе од $2 {{PLURAL:$2|корисник|корисници}})",
+       "diff-paragraph-moved-tonew": "Пасусот е преместен. Стиснете за да прејдете на новото место.",
+       "diff-paragraph-moved-toold": "Пасусот е преместен. Стиснете за да прејдете на старото место.",
        "difference-missing-revision": "Не пронајдов {{PLURAL:$2|една преработка|$2 преработки}} од оваа разлика ($1).\n\nОва обично се должи на застарена врска за разлики што води кон избришана страница.\nПовеќе подробности ќе најдете во [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневникот на бришења].",
        "searchresults": "Исход од пребарувањето",
        "searchresults-title": "Исход од пребарувањето на „$1“",
        "prefs-watchlist-edits": "Највеќе прикажани промени во набљудувањата:",
        "prefs-watchlist-edits-max": "Највеќе: 1000",
        "prefs-watchlist-token": "Шифра на набљудувањата:",
+       "prefs-watchlist-managetokens": "Управување со шифри",
        "prefs-misc": "Други нагодувања",
        "prefs-resetpass": "Смени лозинка",
        "prefs-changeemail": "Смени или отстрани е-пошта",
        "recentchangesdays-max": "(највеќе {{PLURAL:$1|еден ден|$1 дена}})",
        "recentchangescount": "Број на уредувања кои ќе се прикажуваат по основно:",
        "prefs-help-recentchangescount": "Подразбира скорешни промени, истории на страници и дневници.",
-       "prefs-help-watchlist-token2": "Ова е тајна шифра за вашиот канализиран список на набљудувања.\nСекој што ја знае ќе може да ја чита, па затоа ви препорачуваме да не ја кажувате никому.\n[[Special:ResetTokens|Стиснете тука ако треба да зададете нова]].",
+       "prefs-help-tokenmanagement": "Можете да го погледате и одново зададете тајниот клуч з авашата сметка со кој се пристапува до семрежниот канал на вашите набљудувани. Секој еден што го знае клучот може да ви ги ги чита набљудуваните — затоа не го кажувајте никому.",
        "savedprefs": "Вашите нагодувања се зачувани.",
        "savedrights": "Корисничките групи на {{GENDER:$1|$1}} се зачувани.",
        "timezonelegend": "Часовен појас:",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Создај стандарден филтер",
        "rcfilters-savedqueries-cancel-label": "Откажи",
        "rcfilters-savedqueries-add-new-title": "Зачувај тековни филтерски поставки",
-       "rcfilters-savedqueries-already-saved": "Овие филтри се веќе зачувани",
+       "rcfilters-savedqueries-already-saved": "Овие филтри се веќе зачувани. Сменете ги поставките за да направите нов зачуван филтер.",
        "rcfilters-restore-default-filters": "Поврати основни филтри",
        "rcfilters-clear-all-filters": "Тргни ги сите филтри",
        "rcfilters-show-new-changes": "Погл. најнови промени",
index e7527c6..f72ad63 100644 (file)
        "rcfilters-filter-excluded": "ချန်လှပ်",
        "rcfilters-exclude-button-off": "ရွေးချယ်ထားသည်များ ချန်လှပ်ရန်",
        "rcfilters-exclude-button-on": "ရွေးချယ်ထားသည်များ ချန်လှပ်နေသည်",
-       "rcfilters-view-advanced-filters-label": "အဆင့်မြင့် filter များ",
        "rcfilters-view-tags": "စာတွဲမှတ်ထားသော တည်းဖြတ်မှုများ",
        "rcfilters-view-namespaces-tooltip": "အမည်ညွှန်းအလိုက် ရလဒ်များ စစ်ထုတ်ရန်",
        "rcfilters-view-tags-tooltip": "တည်းဖြတ်စာတွဲများ အသုံးပြု၍ ရလဒ်များ စစ်ထုတ်ရန်",
        "dellogpage": "ဖျက်ထားသည်များ မှတ်တမ်း",
        "dellogpagetext": "အောက်ပါတို့သည် မကြာမီက ဖျက်ထားမှုများ စာရင်း ဖြစ်သည်။",
        "deletionlog": "ဖျက်ပစ်သည့်မှတ်တမ်း",
+       "reverted": "ယခင်တည်းဖြတ်မူသို့ နောက်ပြန်ပြင်ပြီးပြီ",
        "deletecomment": "အ​ကြောင်း​ပြ​ချက် -",
        "deleteotherreason": "အခြားသော/နောက်ထပ် အကြောင်းပြချက် -",
        "deletereasonotherlist": "အခြား အကြောင်းပြချက်",
index 7687415..ff70276 100644 (file)
        "nosuchusershort": "Det finnes ingen bruker ved navn «$1». Kontroller stavemåten.",
        "nouserspecified": "Du må oppgi et brukernavn.",
        "login-userblocked": "Brukeren er blokkert. Innlogging er ikke tillatt.",
-       "wrongpassword": "Du har oppgitt et ugyldig passord. Prøv igjen.",
+       "wrongpassword": "Galt brukernavn eller passord oppgitt.\nPrøv igjen.",
        "wrongpasswordempty": "Du oppga ikke noe passord. Prøv igjen.",
        "passwordtooshort": "Passord må ha minst {{PLURAL:$1|ett tegn|$1 tegn}}.",
        "passwordtoolong": "Passord kan ikke overskride {{PLURAL:$1|1 character|$1 characters}}.",
        "diff-multi-sameuser": "({{PLURAL:$1|Én mellomliggende revisjon|$1 mellomliggende revisjoner}} av samme bruker vises ikke)",
        "diff-multi-otherusers": "({{PLURAL:$1|En mellomliggende revisjon|$1 mellomliggende revisjoner}} av {{PLURAL:$2|en annen bruker|$2 brukere}} er ikke vist)",
        "diff-multi-manyusers": "({{PLURAL:$1|Én mellomrevisjon|$1 mellomrevisjoner}} av mer enn $2 {{PLURAL:$2|bruker|brukere}} vises ikke)",
+       "diff-paragraph-moved-tonew": "Avsnittet ble flyttet. Klikk for å hoppe til den nye plasseringen.",
+       "diff-paragraph-moved-toold": "Avsnittet ble flyttet. Klikk for å hoppe til den gamle plasseringen.",
        "difference-missing-revision": "{{PLURAL:$2|En revisjon|$2 revisjoner}} av denne forskjellen ($1) {{PLURAL:$2|ble|ble}} ikke funnet.\n\nDette skyldes som regel at en gammel forskjell-lenke er fulgt til en side som er slettet.\nDetaljer kan finnes i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} sletteloggen].",
        "searchresults": "Søkeresultater",
        "searchresults-title": "Søkeresultater for «$1»",
        "prefs-watchlist-edits": "Maksimalt antall redigeringer som skal vises i overvåkningslisten:",
        "prefs-watchlist-edits-max": "Maksimalt antall: 1000",
        "prefs-watchlist-token": "Nøkkel for overvåkningsliste",
+       "prefs-watchlist-managetokens": "Behandle nøkler",
        "prefs-misc": "Diverse",
        "prefs-resetpass": "Endre passord",
        "prefs-changeemail": "Endre eller fjerne e-postadresse",
        "recentchangesdays-max": "Maks $1 {{PLURAL:$1|dag|dager}}",
        "recentchangescount": "Antall redigeringer som skal vises som standard:",
        "prefs-help-recentchangescount": "Dette inkluderer nylige endringer, sidehistorikk og logger.",
-       "prefs-help-watchlist-token2": "Dette er den hemmelige nøkkelen til webmatingen for din overvåkningsliste.\nEnhver som kjenner nøkkelen vil kunne lese din overvåkningsliste, så ikke vis den til andre.\n[[Special:ResetTokens|Klikk her om du trenger å nullstille nøkkelen]].",
+       "prefs-help-tokenmanagement": "Du kan se og resette den hemmelige nøkkelen for kontoen din som kan få tilgang til matingen med overvåkningslisten din. Alle som har nøkkelen vil kunne lese overvåkningslisten din, så ikke del den.",
        "savedprefs": "Innstillingene ble lagret.",
        "savedrights": "Brukergruppene til {{GENDER:$1|$1}} har blitt lagret.",
        "timezonelegend": "Tidssone:",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Opprett standardfilter",
        "rcfilters-savedqueries-cancel-label": "Avbryt",
        "rcfilters-savedqueries-add-new-title": "Lagre de gjeldende filterinnstillingene",
-       "rcfilters-savedqueries-already-saved": "Disse filtrene er allerede lagret",
+       "rcfilters-savedqueries-already-saved": "Disse filtrene er allerede lagret. Endre innstillingene dine for å opprette et nytt lagret filter.",
        "rcfilters-restore-default-filters": "Gjenopprett standardfiltre",
        "rcfilters-clear-all-filters": "Nullstill alle filtre",
        "rcfilters-show-new-changes": "Vis de nyeste endringene",
index ed13a7b..710619d 100644 (file)
        "diff-multi-sameuser": "({{PLURAL:$1|Een tussenliggende versie|$1 tussenliggende versies}} door dezelfde gebruiker niet weergegeven)",
        "diff-multi-otherusers": "({{PLURAL:$1|Een tussenliggende versie|$1 tussenliggende versies}} door {{PLURAL:$2|een andere gebruiker|$2 gebruikers}} niet weergegeven)",
        "diff-multi-manyusers": "($1 tussenliggende {{PLURAL:$1|versie|versies}} door meer dan $2 {{PLURAL:$2|gebruiker|gebruikers}}  worden niet weergegeven)",
+       "diff-paragraph-moved-tonew": "Deze paragraaf is verplaatst. Klik om naar de nieuwe locatie te springen.",
+       "diff-paragraph-moved-toold": "Deze paragraaf is verplaatst. Klik om naar de oude locatie te springen.",
        "difference-missing-revision": "{{PLURAL:$2|Eén versie|$2 versies}} van deze verschillen ($1) {{PLURAL:$2|is|zijn}} niet aangetroffen.\n\nDit wordt meestal veroorzaakt door het volgen van een verouderde koppeling verschillen voor een pagina die is verwijderd.\nMeer gegevens zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
        "searchresults": "Zoekresultaten",
        "searchresults-title": "Zoekresultaten voor \"$1\"",
        "prefs-watchlist-edits": "Maximaal aantal bewerkingen in de volglijst:",
        "prefs-watchlist-edits-max": "Maximale aantal: 1000",
        "prefs-watchlist-token": "Volglijstsleutel:",
+       "prefs-watchlist-managetokens": "Token beheren",
        "prefs-misc": "Diversen",
        "prefs-resetpass": "Wachtwoord wijzigen",
        "prefs-changeemail": "E-mailadres wijzigen of verwijderen",
        "recentchangesdays-max": "(maximaal $1 {{PLURAL:$1|dag|dagen}})",
        "recentchangescount": "Standaard aantal weer te geven bewerkingen:",
        "prefs-help-recentchangescount": "Dit geldt voor recente wijzigingen, paginageschiedenis en logboekpagina's.",
-       "prefs-help-watchlist-token2": "Dit is de geheime sleutel voor de webfeed van uw volglijst.\nIedereen die het token kent, kan uw volglijst bekijken, dus deel dit token niet.\nU kunt de [[Special:ResetTokens|tokens opnieuw instellen]] als u dat wilt.",
+       "prefs-help-tokenmanagement": "U kunt uw geheime sleutel voor uw account bekijken en resetten. De geheime sleutel biedt toegang tot de webfeed van uw volglijst. Iedereen die het token kent, kan uw volglijst bekijken, dus deel dit token niet.",
        "savedprefs": "Uw voorkeuren zijn opgeslagen.",
        "savedrights": "De gebruikergroepen van {{GENDER:$1|$1}} zijn opgeslagen.",
        "timezonelegend": "Tijdzone:",
index 2fee33e..79872e3 100644 (file)
        "rcfilters-filter-previousrevision-description": "Alle endringar som ikkje er den siste versjonen.",
        "rcfilters-filter-excluded": "Utelate",
        "rcfilters-exclude-button-off": "Utelat dei valde",
-       "rcfilters-view-advanced-filters-label": "Avanserte filter",
        "rcfilters-view-tags": "Endringar med merke",
        "rcfilters-view-namespaces-tooltip": "Filtrer resultat etter namnerom",
        "rcfilters-view-tags-tooltip": "Filtrer resultat etter endringsmerke",
        "rcfilters-liveupdates-button": "Oppdateringar i sanntid",
+       "rcfilters-liveupdates-button-title-on": "Slå av oppdateringar i sanntid",
+       "rcfilters-liveupdates-button-title-off": "Vis nye endringar etter kvart som dei vert gjorde",
        "rcfilters-watchlist-markseen-button": "Merk alle endringar som sette",
        "rcfilters-watchlist-edit-watchlist-button": "Endra lista over sider du overvaker",
        "rcfilters-watchlist-showupdated": "Sider du ikkje har vitja sidan dei vart endra er viste med <strong>feit</strong> skrift.",
index 754e21e..f5e8446 100644 (file)
        "recentchangesdays-max": "(maksymalnie $1 {{PLURAL:$1|dzień|dni}})",
        "recentchangescount": "Domyślna liczba wyświetlanych edycji:",
        "prefs-help-recentchangescount": "Uwzględnia ostatnie zmiany, historię stron i rejestry.",
-       "prefs-help-watchlist-token2": "To jest tajny klucz umożliwiający dostęp do kanału internetowego zmian w obserwowanych przez ciebie stronach.\nKażdy, kto go zna, będzie mógł je zobaczyć, więc zachowaj go dla siebie.\n[[Special:ResetTokens|Kliknij tu, jeśli chcesz go zresetować]].",
        "savedprefs": "Twoje preferencje zostały zapisane.",
        "savedrights": "Zapisano grupy {{GENDER:$1|użytkownika $1|użytkowniczki $1}}.",
        "timezonelegend": "Strefa czasowa:",
index 48bff79..e913e34 100644 (file)
        "diff-multi-sameuser": "({{PLURAL:$1|Uma revisão intermediária|$1 revisões intermediárias}} pelo mesmo usuário não {{PLURAL:$1|está sendo mostrada|estão sendo mostradas}})",
        "diff-multi-otherusers": "({{PLURAL:$1|Uma revisão intermediária por {{PLURAL:$2|um outro usuário|$2 usuários}} não está sendo mostrada|$1 revisões intermediárias por {{PLURAL:$2|um outro usuário|$2 usuários}} não estão sendo mostradas}})",
        "diff-multi-manyusers": "({{PLURAL:$1|Uma edição intermediária|$1 edições intermediárias}} de mais de {{PLURAL:$2|um usuário|$2 usuários}} não {{PLURAL:$1|está sendo mostrada|estão sendo mostradas}})",
+       "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 um link de histórico desatualizado para uma página que foi eliminada.\nOs detalhes podem ser encontrados no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de eliminação].",
        "searchresults": "Resultados da pesquisa",
        "searchresults-title": "Resultados da pesquisa por \"$1\"",
        "prefs-watchlist-edits": "Número máximo de alterações para mostrar na lista de observação:",
        "prefs-watchlist-edits-max": "Número máximo: 1000",
        "prefs-watchlist-token": "Senha para a lista de páginas vigiadas:",
+       "prefs-watchlist-managetokens": "Gerenciar chaves",
        "prefs-misc": "Diversos",
        "prefs-resetpass": "Alterar senha",
        "prefs-changeemail": "Alterar ou remover endereço de email",
        "recentchangesdays-max": "(máximo: $1 {{PLURAL:$1|dia|dias}})",
        "recentchangescount": "Número de edições a serem exibidas por padrão:",
        "prefs-help-recentchangescount": "Isto inclui mudanças recentes, histórico de páginas e registros.",
-       "prefs-help-watchlist-token2": "Esta é a senha secreta para o feed da Web com sua lista de tokens vigiados.\nQualquer pessoa que descobrir esta senha será capaz de ler sua lista, então não a compartilhe.\n[[Special:ResetTokens|Clique aqui para redefini-la]].",
+       "prefs-help-tokenmanagement": "Você pode ver e redefinir a chave secreta para sua conta que pode acessar o feed da Web da sua lista de vigilância. Qualquer pessoa que conheça a chave poderá ler sua lista de observação, então não compartilhe.",
        "savedprefs": "As suas preferências foram salvas.",
        "savedrights": "Os grupos {{GENDER:$1|do usuário|da usuária}} $1 foram gravados.",
        "timezonelegend": "Fuso horário:",
        "rcfilters-filtergroup-userExpLevel": "Registro e experiência do usuário",
        "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-label": "Não registrados",
        "rcfilters-filter-user-experience-level-unregistered-description": "Editores que não estão autenticados.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Recém-chegados",
        "rcfilters-filter-user-experience-level-newcomer-description": "Editores registrados com menos de 10 edições ou 4 dias de atividade.",
        "rcfilters-filtergroup-automated": "Contribuições automatizadas",
        "rcfilters-filter-bots-label": "Robô",
        "rcfilters-filter-bots-description": "Edições feitas por ferramentas automatizadas.",
-       "rcfilters-filter-humans-label": "Humano (não bot)",
+       "rcfilters-filter-humans-label": "Humano (não robô)",
        "rcfilters-filter-humans-description": "Edições feitas por editores humanos.",
        "rcfilters-filtergroup-reviewstatus": "Estado da revisão",
        "rcfilters-filter-patrolled-label": "Patrulhado",
index 2861e8f..0fddd3e 100644 (file)
        "tog-previewontop": "Mostrar a antevisão antes da caixa de edição",
        "tog-previewonfirst": "Mostrar a antevisão na primeira edição",
        "tog-enotifwatchlistpages": "Notificar-me por correio eletrónico quando uma página ou ficheiro vigiado for alterado",
-       "tog-enotifusertalkpages": "Notificar-me por correio eletrónico quando a minha página de discussão é editada",
+       "tog-enotifusertalkpages": "Notificar-me por correio eletrónico quando a minha página de discussão for editada",
        "tog-enotifminoredits": "Notificar-me por correio eletrónico também sobre edições menores de páginas ou ficheiros",
        "tog-enotifrevealaddr": "Revelar o meu endereço de correio eletrónico nas notificações",
        "tog-shownumberswatching": "Mostrar o número de utilizadores a vigiar",
        "tog-oldsig": "A sua assinatura atual:",
-       "tog-fancysig": "Tratar assinatura como texto wiki (sem hiperligações automáticas)",
+       "tog-fancysig": "Tratar assinatura como texto wiki (sem hiperligação automática)",
        "tog-uselivepreview": "Mostrar antevisões sem recarregar a página",
        "tog-forceeditsummary": "Avisar-me se deixar o resumo da edição vazio",
        "tog-watchlisthideown": "Esconder as minhas edições ao listar mudanças às páginas vigiadas",
        "tog-ccmeonemails": "Enviar-me cópias das mensagens por correio eletrónico que eu enviar a outros utilizadores",
        "tog-diffonly": "Não mostrar o conteúdo da página ao comparar duas edições",
        "tog-showhiddencats": "Mostrar categorias ocultas",
-       "tog-norollbackdiff": "Ocultar diferenças depois de reverter edições em bloco",
-       "tog-useeditwarning": "Avisar-me ao abandonar uma página editada sem gravar as alterações.",
+       "tog-norollbackdiff": "Não mostrar diferenças depois de reverter edições em bloco",
+       "tog-useeditwarning": "Avisar-me ao abandonar uma página editada sem gravar as alterações",
        "tog-prefershttps": "Usar sempre uma ligação segura enquanto tiver sessão iniciada",
        "underline-always": "Sempre",
        "underline-never": "Nunca",
        "hidden-categories": "{{PLURAL:$1|Categoria oculta|Categorias ocultas}}",
        "hidden-category-category": "Categorias ocultas",
        "category-subcat-count": "{{PLURAL:$2|Esta categoria só contém a seguinte subcategoria.|Esta categoria contém {{PLURAL:$1|a seguinte subcategoria|as seguintes $1 subcategorias}} (de um total de $2).}}",
-       "category-subcat-count-limited": "Esta categoria tem {{PLURAL:$1|a seguinte subcategoria|as seguintes $1 subcategorias}}.",
+       "category-subcat-count-limited": "Esta categoria contém {{PLURAL:$1|a seguinte subcategoria|as seguintes $1 subcategorias}}.",
        "category-article-count": "{{PLURAL:$2|Esta categoria só contém a seguinte página.|Esta categoria contém {{PLURAL:$1|a seguinte página|as seguintes $1 páginas}} (de um total de $2).}}",
        "category-article-count-limited": "Nesta categoria há {{PLURAL:$1|uma página|$1 páginas}}.",
        "category-file-count": "{{PLURAL:$2|Esta categoria só contém o seguinte ficheiro.|Esta categoria contém {{PLURAL:$1|o seguinte ficheiro|os seguintes $1 ficheiros}} (de um total de $2).}}",
        "delete-hook-aborted": "A eliminação foi cancelada por um \"hook\".\nNão foi dada nenhuma explicação.",
        "no-null-revision": "Não foi possível criar uma nova revisão nula para a página \"$1\"",
        "badtitle": "Título inválido",
-       "badtitletext": "O título de página solicitado era inválido, vazio, ou um link interlínguas ou interwikis incorrecto.\nTalvez contenha um ou mais caracteres que não podem ser usados em títulos.",
-       "title-invalid-empty": "O título da página solicitada está vazio ou contém apenas o nome de um domínio.",
-       "title-invalid-utf8": "O título da página solicitada contém uma sequência UTF-8 inválida.",
-       "title-invalid-interwiki": "O título da página solicitada contém uma ligação interlíngua que não pode ser utilizada em títulos.",
-       "title-invalid-talk-namespace": "O título da página solicitada refere-se a uma página de discussão que não existe.",
-       "title-invalid-characters": "O título da página solicitada contém carateres inválidos: \"$1\".",
-       "title-invalid-relative": "O título contém um caminho relativo. Os títulos relativos (./, ../) são inválidos porque estarão inacessíveis muitas vezes ao serem carregados pelo navegador do utilizador.",
-       "title-invalid-magic-tilde": "O título da página solicitada contém uma sequência de tis inválida (<nowiki>~~~</nowiki>).",
-       "title-invalid-too-long": "O título da página solicitada é demasiado longo. Não deverá ser maior que $1 {{PLURAL:$1|byte|bytes}} na codificação UTF-8.",
-       "title-invalid-leading-colon": "O título da página solicitada contém um erro de pontuação (:) no início.",
+       "badtitletext": "O título de página solicitado era inválido, estava vazio, ou era uma hiperligação interlínguas ou interwikis incorreta.\nTalvez contenha um ou mais caracteres que não podem ser usados em títulos.",
+       "title-invalid-empty": "O título de página solicitado está vazio ou contém apenas o nome de um domínio.",
+       "title-invalid-utf8": "O título de página solicitado contém uma sequência UTF-8 inválida.",
+       "title-invalid-interwiki": "O título de página solicitado contém uma hiperligação interwikis que não pode ser utilizada em títulos.",
+       "title-invalid-talk-namespace": "O título de página solicitado refere-se a uma página de discussão que não pode existir.",
+       "title-invalid-characters": "O título de página solicitado contém carateres inválidos: \"$1\".",
+       "title-invalid-relative": "O título contém um caminho relativo. Os títulos relativos (./, ../) são inválidos porque normalmente são inacessíveis quando tratados pelo navegador do utilizador.",
+       "title-invalid-magic-tilde": "O título de página solicitado contém uma sequência de tis inválida (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "O título de página solicitado é demasiado longo. Não pode exceder $1 {{PLURAL:$1|byte|bytes}} em codificação UTF-8.",
+       "title-invalid-leading-colon": "O título de página solicitado contém um sinal de dois pontos (:) inválido no início.",
        "perfcached": "Os seguintes dados encontram-se armazenados na ''cache'' e podem não estar atualizados. {{PLURAL:$1|Está disponível na ''cache'' um máximo de um resultado|Estão disponíveis na ''cache'' um máximo de $1 resultados}}.",
        "perfcachedts": "Os seguintes dados encontram-se armazenados na ''cache'' e foram atualizados pela última vez a $1. {{PLURAL:$4|Está disponível na ''cache'' um máximo de um resultado|Estão disponíveis na ''cache'' um máximo de $4 resultados}}.",
        "querypage-no-updates": "As atualizações estão presentemente desativadas para esta página.\nPor enquanto, os dados aqui presentes não poderão ser atualizados.",
        "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}}.",
        "bold_tip": "Texto a negrito",
        "italic_sample": "Texto em itálico",
        "italic_tip": "Texto em itálico",
-       "link_sample": "Título da ligação",
+       "link_sample": "Título da hiperligação",
        "link_tip": "Hiperligação interna",
-       "extlink_sample": "http://www.example.com hiperligação externa",
+       "extlink_sample": "http://www.example.com título da hiperligação",
        "extlink_tip": "Hiperligação externa (lembre-se do prefixo http://)",
        "headline_sample": "Texto do cabeçalho",
        "headline_tip": "Secção de nível 2",
        "accmailtitle": "Palavra-passe enviada.",
        "accmailtext": "Uma palavra-passe gerada aleatoriamente para [[User talk:$1|$1]] foi enviada para $2.\n\nEla pode ser alterada na página [[Special:ChangePassword|de alteração da palavra-passe]] após iniciar sessão.",
        "newarticle": "(Nova)",
-       "newarticletext": "Seguiu uma ligação para uma página que ainda não existe.\nPara criá-la, escreva o seu conteúdo na caixa abaixo (consulte a [$1 página de ajuda] para mais detalhes).\nSe chegou aqui por engano, clique o botão <strong>voltar</strong> do seu navegador.",
+       "newarticletext": "Seguiu uma hiperligação para uma página que ainda não existe.\nPara criá-la, escreva o seu conteúdo na caixa abaixo (consulte a [$1 página de ajuda] para mais detalhes).\nSe chegou aqui por engano, clique o botão <strong>voltar</strong> do seu navegador.",
        "anontalkpagetext": "----\n<em>Esta é a página de discussão de um utilizador anónimo que ainda não criou uma conta ou não a utiliza.</em>\nPor isso, temos de utilizar o endereço IP numérico para identificá-lo(a).\nUm mesmo endereço IP pode ser partilhado por vários utilizadores.\nSe é um utilizador anónimo e sente que lhe foram direcionados comentários irrelevantes, [[Special:CreateAccount|crie uma conta]] ou [[Special:UserLogin|inicie sessão]] para evitar futuras confusões com outros utilizadores anónimos.",
        "noarticletext": "Ainda não existe texto nesta página.\nPode [[Special:Search/{{PAGENAME}}|pesquisar o título desta página]] noutras páginas,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} procurar registos relacionados]\nou [{{fullurl:{{FULLPAGENAME}}|action=edit}} criar esta página]</span>.",
        "noarticletext-nopermission": "Ainda não existe texto nesta página.\nPode [[Special:Search/{{PAGENAME}}|pesquisar o título desta página]] noutras páginas, ou <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} procurar registos relacionados]</span>, mas não tem permissão para criar esta página.",
        "sectioneditnotsupported-title": "Edição de secções não suportada",
        "sectioneditnotsupported-text": "A edição de secções não é suportada nesta página.",
        "permissionserrors": "Erro de permissão",
-       "permissionserrorstext": "Não possui permissão para fazer isso, {{PLURAL:$1|pelo seguinte motivo|pelos seguintes motivos}}:",
+       "permissionserrorstext": "Não tem permissão para fazer isso, {{PLURAL:$1|pelo seguinte motivo|pelos seguintes motivos}}:",
        "permissionserrorstext-withaction": "Não tem permissão para $2, {{PLURAL:$1|pelo seguinte motivo|pelos seguintes motivos}}:",
        "contentmodelediterror": "Não pode editar esta revisão porque o modelo de conteúdo é <code>$1</code>, que é diferente do modelo atual da página <code>$2</code>.",
        "recreate-moveddeleted-warn": "<strong>Aviso: Está a recriar uma página anteriormente eliminada.</strong>\n\nVerifique se é apropriado continuar a editar esta página.\nPara sua conveniência, é apresentado abaixo o registo de eliminação e movimentação da página:",
        "mergehistory-from": "Página de origem:",
        "mergehistory-into": "Página de destino:",
        "mergehistory-list": "Histórico de edições fundíveis",
-       "mergehistory-merge": "As seguintes edições de [[:$1]] podem ser fundidas em [[:$2]].\nUsando os botões de opção, pode escolher fundir apenas as edições até àquela que marcar.\nNote que, se usar as ligações de navegação, os botões de opção voltarão aos valores originais.",
+       "mergehistory-merge": "As seguintes edições de [[:$1]] podem ser fundidas em [[:$2]].\nUsando os botões de opção, pode escolher fundir apenas as edições até àquela que marcar.\nNote que, se usar as hiperligações de navegação, os botões de opção voltarão aos valores originais.",
        "mergehistory-go": "Mostrar edições que podem ser fundidas",
        "mergehistory-submit": "Fundir edições",
        "mergehistory-empty": "Não existem revisões fundíveis.",
        "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}})",
-       "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].",
+       "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 hiperligação de diferenças 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\"",
        "titlematches": "Resultados no título das páginas",
        "prefs-watchlist-edits": "Número máximo de edições a mostrar na lista de vigiadas:",
        "prefs-watchlist-edits-max": "Máximo: 1000",
        "prefs-watchlist-token": "Chave secreta da lista de páginas vigiadas:",
+       "prefs-watchlist-managetokens": "Gerir chaves",
        "prefs-misc": "Diversos",
        "prefs-resetpass": "Alterar palavra-passe",
        "prefs-changeemail": "Alterar ou remover correio eletrónico",
        "restoreprefs": "Repor todas as configurações padrão (em todas as secções)",
        "prefs-editing": "Edição",
        "searchresultshead": "Pesquisar",
-       "stub-threshold": "Limite para a formatação de ligações para esboços ($1):",
+       "stub-threshold": "Limite para a formatação de hiperligações para esboços ($1):",
        "stub-threshold-sample-link": "amostra",
        "stub-threshold-disabled": "Desativado",
        "recentchangesdays": "Dias a apresentar nas mudanças recentes:",
        "recentchangesdays-max": "Máximo: $1 {{PLURAL:$1|dia|dias}}",
        "recentchangescount": "Número de edições a apresentar por omissão:",
        "prefs-help-recentchangescount": "Inclui mudanças recentes, histórico de páginas e registos.",
-       "prefs-help-watchlist-token2": "Esta é a chave secreta para o ''feed'' RSS da sua lista de páginas vigiadas.\nQualquer pessoa que conheça a chave será capaz de ler a sua lista de páginas vigiadas, por isso não a divulgue.\n[[Special:ResetTokens|Clique aqui para redefini-la]].",
+       "prefs-help-tokenmanagement": "Pode ver e repor a chave secreta da sua conta que permite aceder ao feed da sua lista de páginas vigiadas. Qualquer pessoa que conheça a chave será capaz de ler a sua lista de páginas vigiadas, por isso não a partilhe.",
        "savedprefs": "As suas preferências foram gravadas.",
        "savedrights": "Os grupos {{GENDER:$1|do utilizador|da utilizadora}} $1 foram gravados.",
        "timezonelegend": "Fuso horário:",
        "email": "Correio eletrónico",
        "prefs-help-realname": "O fornecimento do nome verdadeiro é opcional.\nSe optar por revelá-lo, será utilizado para atribuir-lhe crédito pelo seu trabalho.",
        "prefs-help-email": "Opcional: o endereço de correio eletrónico é opcional, mas será necessário para redefinir a palavra-passe caso esqueça a antiga.",
-       "prefs-help-email-others": "Também pode optar por permitir que outros entrem em contacto consigo por correio eletrónico, através de uma ligação nas suas páginas de utilizador ou de discussão, sem revelar o seu endereço de correio eletrónico.",
+       "prefs-help-email-others": "Também pode optar por permitir que outros entrem em contacto consigo por correio eletrónico, através de uma hiperligação nas suas páginas de utilizador ou de discussão, sem revelar o seu endereço de correio eletrónico.",
        "prefs-help-email-required": "É necessário o endereço de correio eletrónico.",
        "prefs-info": "Informações básicas",
        "prefs-i18n": "Internacionalização",
        "right-userrights": "Editar todos os privilégios de utilizador",
        "right-userrights-interwiki": "Editar privilégios de utilizadores noutras wikis",
        "right-siteadmin": "Bloquear e desbloquear a base de dados",
-       "right-override-export-depth": "Exportar páginas incluindo páginas ligadas até uma profundidade de 5",
+       "right-override-export-depth": "Exportar páginas incluindo páginas hiperligadas até uma profundidade de 5",
        "right-sendemail": "Enviar correio eletrónico a outros utilizadores",
        "right-managechangetags": "Criar e (des)ativar [[Special:Tags|etiquetas]]",
        "right-applychangetags": "Aplicar [[Special:Tags|etiquetas]] juntamente com as alterações",
        "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",
        "recentchangeslinked-title": "Alterações relacionadas com \"$1\"",
        "recentchangeslinked-summary": "Esta é uma lista de mudanças recentes a todas as páginas para as quais a página fornecida contém hiperligações (ou de todas as que pertencem à categoria fornecida).\nAs suas [[Special:Watchlist|páginas vigiadas]] aparecem a <strong>negrito</strong>.",
        "recentchangeslinked-page": "Nome da página:",
-       "recentchangeslinked-to": "Inversamente, mostrar mudanças às páginas que contêm ligações para esta",
+       "recentchangeslinked-to": "Inversamente, mostrar mudanças às páginas que contêm hiperligações para esta",
        "recentchanges-page-added-to-category": "[[:$1]] foi adicionada à categoria",
        "recentchanges-page-added-to-category-bundled": "[[:$1]] adicionada à categoria; [[Special:WhatLinksHere/$1|esta página está incluída noutras]]",
        "recentchanges-page-removed-from-category": "[[:$1]] foi removida da categoria",
        "upload-dialog-title": "Carregar ficheiro",
        "upload-dialog-button-cancel": "Cancelar",
        "upload-dialog-button-back": "Voltar",
-       "upload-dialog-button-done": "Feito",
+       "upload-dialog-button-done": "Concluído",
        "upload-dialog-button-save": "Gravar",
        "upload-dialog-button-upload": "Carregar",
        "upload-form-label-infoform-title": "Detalhes",
        "upload-form-label-own-work-message-generic-local": "Confirmo que estou a carregar este ficheiro segundo as condições de serviço e política de licenças da wiki {{SITENAME}}.",
        "upload-form-label-not-own-work-message-generic-local": "Se não pode carregar este ficheiro de acordo com as normas da wiki {{SITENAME}}, por favor feche esta janela e tente outro método.",
        "upload-form-label-not-own-work-local-generic-local": "Poderá querer experimentar [[Special:Upload|a página padrão de carregamento]].",
-       "upload-form-label-own-work-message-generic-foreign": "Entendo que estou a carregar este ficheiro em um repositório partilhado. Confirmo que estou a fazê-lo cumprindo com os termos de serviço e com as políticas de licenciamento.",
-       "upload-form-label-not-own-work-message-generic-foreign": "Se não é capaz de carregar este ficheiro sob as políticas do repositório partilhado, por favor feche esta janela e tente outro método.",
-       "upload-form-label-not-own-work-local-generic-foreign": "Pode querer tentar utilizar [[Special:Upload|a página de carregamento na wiki {{SITENAME}}]], se este ficheiro puder ser carregado de acordo com as normas da wiki.",
+       "upload-form-label-own-work-message-generic-foreign": "Compreendo que estou a carregar este ficheiro num repositório partilhado. Confirmo que estou a fazê-lo cumprindo as respetivas condições de serviço e normas de licenciamento.",
+       "upload-form-label-not-own-work-message-generic-foreign": "Se não pode carregar este ficheiro cumprindo as normas do repositório partilhado, feche esta janela e tente outro método, por favor.",
+       "upload-form-label-not-own-work-local-generic-foreign": "Também pode tentar usar [[Special:Upload|a página de carregamento da wiki {{SITENAME}}]], se este ficheiro puder ser carregado lá de acordo com as respetivas normas.",
        "backend-fail-stream": "Não foi possível transmitir o ficheiro \"$1\".",
        "backend-fail-backup": "Não foi possível fazer cópia de segurança do ficheiro \"$1\".",
        "backend-fail-notexists": "O ficheiro $1 não existe.",
-       "backend-fail-hashes": "Não foi possível obter os hashes do ficheiro para comparação.",
+       "backend-fail-hashes": "Não foi possível obter os resumos criptográficos dos ficheiros para comparação.",
        "backend-fail-notsame": "Já existe um ficheiro não idêntico em \"$1\" .",
        "backend-fail-invalidpath": "\"$1\" não é um caminho de armazenamento válido.",
        "backend-fail-delete": "Não foi possível eliminar o ficheiro \"$1\".",
-       "backend-fail-describe": "Não foi possível mudar metadados para o ficheiro \"$1\".",
+       "backend-fail-describe": "Não foi possível alterar os metadados do ficheiro \"$1\".",
        "backend-fail-alreadyexists": "O ficheiro \"$1\" já existe.",
        "backend-fail-store": "Não foi possível armazenar o ficheiro \"$1\" em \"$2\".",
        "backend-fail-copy": "Não foi possível copiar o ficheiro \"$1\" para \"$2\".",
        "img-auth-nologinnWL": "Não tem a sessão iniciada e o ficheiro \"$1\" não está na lista branca.",
        "img-auth-nofile": "O ficheiro \"$1\" não existe.",
        "img-auth-isdir": "Está a tentar aceder ao diretório \"$1\".\nSó é permitido o acesso a ficheiros.",
-       "img-auth-streaming": "A fazer a transmissão de \"$1\".",
+       "img-auth-streaming": "A trasmitir \"$1\".",
        "img-auth-public": "A função do img_auth.php é produzir ficheiros a partir de uma wiki privada.\nEsta wiki está configurada como uma wiki pública.\nPara optimizar a segurança, o img_auth.php está impossibilitado de executar.",
        "img-auth-noread": "O utilizador não tem acesso de leitura ao ficheiro \"$1\".",
        "http-invalid-url": "URL inválido: $1",
        "filehist-filesize": "Tamanho do ficheiro",
        "filehist-comment": "Comentário",
        "imagelinks": "Uso do ficheiro",
-       "linkstoimage": "{{PLURAL:$1|A seguinte página contém ligação|As seguintes $1 páginas contêm ligações}} para este ficheiro:",
-       "linkstoimage-more": "Mais de {{PLURAL:$1|uma página contém ligação|$1 páginas contêm ligações}} para este ficheiro.\nA lista abaixo apresenta apenas {{PLURAL:$1|a primeira página|as primeiras $1 páginas}}.\nEncontra-se disponível uma [[Special:WhatLinksHere/$2|lista completa]].",
-       "nolinkstoimage": "Não há nenhuma página que contenha ''links'' para este ficheiro.",
-       "morelinkstoimage": "Ver a [[Special:WhatLinksHere/$1|lista completa]] de páginas que contêm ligações para este ficheiro.",
+       "linkstoimage": "{{PLURAL:$1|A seguinte página contém|As seguintes $1 páginas contêm}} hiperligações para este ficheiro:",
+       "linkstoimage-more": "Mais de {{PLURAL:$1|uma página contém|$1 páginas contêm}} hiperligações para este ficheiro.\nA lista abaixo apresenta apenas {{PLURAL:$1|a primeira página|as primeiras $1 páginas}}.\nEncontra-se disponível uma [[Special:WhatLinksHere/$2|lista completa]].",
+       "nolinkstoimage": "Não há nenhuma página que contenha hiperligações para este ficheiro.",
+       "morelinkstoimage": "Ver a [[Special:WhatLinksHere/$1|lista completa]] de páginas que contêm hiperligações para este ficheiro.",
        "linkstoimage-redirect": "$1 (redirecionamento de ficheiro) $2",
        "duplicatesoffile": "{{PLURAL:$1|O seguinte ficheiro é duplicado|Os seguintes $1 ficheiros são duplicados}} deste ficheiro ([[Special:FileDuplicateSearch/$2|mais detalhes]]):",
        "sharedupload": "Este ficheiro vem da wiki $1 e pode ser usado por outros projetos.",
        "listduplicatedfiles-summary": "Esta é uma lista de ficheiros cuja versões mais recentes são duplicados da versão mais recente de outros ficheiros. Só os ficheiros locais são considerados.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] tem [[$3|{{PLURAL:$2|um duplicado|$2 duplicados}}]].",
        "unusedtemplates": "Predefinições não utilizadas",
-       "unusedtemplatestext": "Esta página lista todas as páginas no domínio {{ns:template}} que não são incluídas em nenhuma outra página. Lembre-se de verificar a existência de outras ligações para as predefinições, antes de eliminá-las.",
-       "unusedtemplateswlh": "outras ligações",
+       "unusedtemplatestext": "Esta página lista todas as páginas no domínio (espaço nominal) {{ns:template}} que não são incluídas em nenhuma outra página. Lembre-se de verificar se existem outras hiperligações para as predefinições, antes de eliminá-las.",
+       "unusedtemplateswlh": "outras hiperligações",
        "randompage": "Página aleatória",
        "randompage-nopages": "Não há páginas {{PLURAL:$2|no seguinte domínio|nos seguintes domínios}}: $1.",
        "randomincategory": "Página aleatória na categoria",
        "pageswithprop-prophidden-long": "foi ocultado o valor da propriedade por ser um texto muito longo ($1)",
        "pageswithprop-prophidden-binary": "foi ocultado o valor da propriedade por ser binário ($1)",
        "doubleredirects": "Redirecionamentos duplos",
-       "doubleredirectstext": "Esta página lista todas as páginas que redirecionam para outras páginas de redirecionamento.\nCada linha contém ligações para o primeiro e segundo redirecionamentos, bem como o destino do segundo redirecionamento, geralmente contendo a verdadeira página de destino, que devia ser o destino do primeiro redirecionamento.\n<del>Entradas cortadas</del> já foram solucionadas.",
+       "doubleredirectstext": "Esta página lista todas as páginas que redirecionam para outras páginas de redirecionamento.\nCada linha contém hiperligações para o primeiro e segundo redirecionamentos, bem como o destino do segundo redirecionamento, geralmente contendo a verdadeira página de destino, que devia ser o destino do primeiro redirecionamento.\n<del>Entradas cortadas</del> já foram solucionadas.",
        "double-redirect-fixed-move": "[[$1]] foi movida.\nEla foi atualizada automaticamente e agora redireciona para [[$2]].",
-       "double-redirect-fixed-maintenance": "A corrigir automaticamente o redirecionamento duplo de [[$1]] para [[$2]], em um trabalho de manutenção.",
+       "double-redirect-fixed-maintenance": "A corrigir automaticamente o redirecionamento duplo de [[$1]] para [[$2]] num processo de manutenção.",
        "double-redirect-fixer": "Corretor de redirecionamentos",
        "brokenredirects": "Redirecionamentos quebrados",
-       "brokenredirectstext": "Os seguintes redirecionamentos contêm ligações para páginas inexistentes:",
+       "brokenredirectstext": "Os seguintes redirecionamentos contêm hiperligações para páginas inexistentes:",
        "brokenredirects-edit": "editar",
        "brokenredirects-delete": "eliminar",
-       "withoutinterwiki": "Páginas sem ligações interlínguas",
+       "withoutinterwiki": "Páginas sem hiperligações interlínguas",
        "withoutinterwiki-summary": "As seguintes páginas não contêm hiperligações para versões noutras línguas.",
        "withoutinterwiki-legend": "Prefixo",
        "withoutinterwiki-submit": "Mostrar",
        "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
        "ncategories": "$1 {{PLURAL:$1|categoria|categorias}}",
        "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikis}}",
-       "nlinks": "$1 {{PLURAL:$1|ligação|ligações}}",
+       "nlinks": "$1 {{PLURAL:$1|hiperligação|hiperligações}}",
        "nmembers": "$1 {{PLURAL:$1|membro|membros}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|membro|membros}}",
        "nrevisions": "$1 {{PLURAL:$1|edição|edições}}",
        "ntransclusions": "usada {{PLURAL:$1|numa página|em $1 páginas}}",
        "specialpage-empty": "Não existem dados para apresentar.",
        "lonelypages": "Páginas órfãs",
-       "lonelypagestext": "As seguintes páginas não são destino de links nem são transcluídas a partir de outras páginas na wiki {{SITENAME}}.",
+       "lonelypagestext": "As seguintes páginas não são destino de hiperligações nem são transcluídas a partir de outras páginas na wiki {{SITENAME}}.",
        "uncategorizedpages": "Páginas não categorizadas",
        "uncategorizedcategories": "Categorias não categorizadas",
        "uncategorizedimages": "Ficheiros não categorizados",
        "unusedimages": "Ficheiros não utilizados",
        "wantedcategories": "Categorias desejadas",
        "wantedpages": "Páginas desejadas",
-       "wantedpages-summary": "Lista de páginas inexistentes com o maior número de ligações a elas, excluindo páginas que possuem apenas redirecionamentos a elas. Para obter uma lista de páginas inexistentes que possuam redirecionamento a elas, veja [[{{#special:BrokenRedirects}}|a lista de redirecionamentos quebrados]].",
+       "wantedpages-summary": "Lista de páginas inexistentes com o maior número de hiperligações para elas, excluindo páginas que só contenham redirecionamentos para elas. Para obter uma lista de páginas inexistentes para as quais existem redirecionamentos, consulte [[{{#special:BrokenRedirects}}|a lista de redirecionamentos quebrados]].",
        "wantedpages-badtitle": "Título inválido no conjunto de resultados: $1",
        "wantedfiles": "Ficheiros desejados",
        "wantedfiletext-cat": "Os seguintes ficheiros são usados, mas não existem. Ficheiros de repositórios externos podem ser listados apesar de existirem. Tais falsos positivos aparecerão <del>riscados</del>. Adicionalmente, as páginas que incorporam ficheiros que não existem estão listadas em [[:$1]].",
        "ancientpages": "Páginas mais antigas",
        "move": "Mover",
        "movethispage": "Mover esta página",
-       "unusedimagestext": "Os seguintes ficheiros existem mas não são usados na wiki.\nNo entanto, outros sítios na Internet podem ter ligação para um ficheiro através de um URL direto e, por isso, podem estar listados ficheiros que estão a ser ativamente usados por entidades externas.",
+       "unusedimagestext": "Os seguintes ficheiros existem mas não são usados em nenhuma página.\nNote que outros sítios na Internet podem ter hiperligações para um ficheiro através de um URL direto e, por isso, podem estar listados ficheiros que estão a ser ativamente usados por entidades externas.",
        "unusedcategoriestext": "As seguintes categorias existem, embora nenhuma página ou categoria faça uso delas.",
        "notargettitle": "Sem alvo",
        "notargettext": "Especifique sobre que página alvo ou utilizador pretende executar esta função.",
        "import-invalid-interwiki": "Não é possível importar da wiki especificada.",
        "import-error-edit": "A página \"$1\" não foi importada porque não tem permissão para editá-la.",
        "import-error-create": "A página \"$1\" não foi importada porque não tem permissão para criá-la.",
-       "import-error-interwiki": "A página \"$1\" não pode ser importada pois o seu nome está reservado para um ligação externa (interlíngua).",
-       "import-error-special": "A página \"$1\" não pode ser importada porque pertence a um domínio especial que não permite páginas.",
-       "import-error-invalid": "A página \"$1\" não pode ser importada porque o seu nome é inválido nesta wiki.",
+       "import-error-interwiki": "A página \"$1\" não foi importada porque o nome dela está reservado para hiperligações externas (interwikis).",
+       "import-error-special": "A página \"$1\" não foi importada porque pertence a um espaço nominal especial que não permite páginas.",
+       "import-error-invalid": "A página \"$1\" não foi importada porque o nome para o qual seria importada é inválido nesta wiki.",
        "import-error-unserialize": "Não foi possível anular a seriação da revisão $2 da página \"$1\". Foi reportado que a revisão usava o modelo de conteúdo $3, seriado como $4.",
        "import-error-bad-location": "A revisão $2, que usa o modelo de conteúdo $3, não pode ser gravada em \"$1\" nesta wiki, porque o modelo não é suportado nessa página.",
        "import-options-wrong": "{{PLURAL:$2|Opção errada|Opções erradas}}: <nowiki>$1</nowiki>",
-       "import-rootpage-invalid": "A raiz da página dada é um título inválido.",
+       "import-rootpage-invalid": "A página de raiz fornecida é um título inválido.",
        "import-rootpage-nosubpage": "O domínio \"$1\" da página de raiz não permite subpáginas.",
        "importlogpage": "Registo de importações",
        "importlogpagetext": "Importações administrativas de páginas com a preservação do histórico de edição de outras wikis.",
        "tags-apply-blocked": "Não pode aplicar etiquetas de modificação nas suas alterações enquanto estiver {{GENDER:$1|bloqueado|bloqueada}}.",
        "tags-apply-not-allowed-one": "A etiqueta \"$1\" não pode ser aplicada manualmente.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|A seguinte etiqueta não pode ser aplicada|As seguintes etiquetas não podem ser aplicadas}} manualmente: $1",
-       "tags-update-no-permission": "Não possui privilégios para adicionar ou remover etiquetas de revisões individuais ou entradas de registo.",
+       "tags-update-no-permission": "Não tem privilégios para adicionar ou remover etiquetas de revisões individuais ou entradas de registo.",
        "tags-update-blocked": "Não pode adicionar ou remover etiquetas de modificação enquanto estiver {{GENDER:$1|bloqueado|bloqueada}}.",
        "tags-update-add-not-allowed-one": "A etiqueta \"$1\" não pode ser adicionada manualmente.",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|A seguinte etiqueta não pode ser adicionada|As seguintes etiquetas não podem ser adicionadas}} manualmente: $1",
        "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%).",
        "revid": "revisão $1",
        "pageid": "identificador de página $1",
        "rawhtml-notallowed": "As etiquetas &lt;html&gt; não podem ser utilizadas fora de páginas normais.",
-       "gotointerwiki": "A sair de {{SITENAME}}",
+       "gotointerwiki": "A sair da wiki {{SITENAME}}",
        "gotointerwiki-invalid": "O título especificado é inválido.",
        "gotointerwiki-external": "Está prestes a sair da wiki {{SITENAME}} para visitar [[$2]], que é um site externo.\n\n'''[$1 Continuar para $1]'''",
-       "undelete-cantedit": "Não pode restaurar esta página, porque não tem privilégios para editar esta página.",
-       "undelete-cantcreate": "Não pode restaurar esta página, porque não existe nenhuma página com este nome e não tem privilégios para criar esta página.",
+       "undelete-cantedit": "Não pode restaurar esta página porque não tem privilégios para a editar.",
+       "undelete-cantcreate": "Não pode restaurar esta página porque não existe nenhuma página com este nome e não tem privilégios para criar esta página.",
        "pagedata-title": "Dados de página",
        "pagedata-text": "Esta página fornece uma interface de dados para páginas. Forneça o título da página no URL, usando a sintaxe de subpáginas, por favor.\n* Aplica-se a negociação de conteúdo com base no cabeçalho Accept do seu cliente. Isto significa que os dados da página serão fornecidos no formato preferido do seu cliente.",
        "pagedata-not-acceptable": "Não foi encontrado nenhum formato correspondente. Tipos MIME suportados: $1",
index e5d4984..654ac6a 100644 (file)
        "prefs-watchlist-edits": "Used in [[Special:Preferences]], tab \"Watchlist\".",
        "prefs-watchlist-edits-max": "Shown as hint in [[Special:Preferences]], tab \"Watchlist\"",
        "prefs-watchlist-token": "Used in [[Special:Preferences]], tab Watchlist.",
+       "prefs-watchlist-managetokens": "Label for the button to see and reset the user's private tokens",
        "prefs-misc": "Tab used on the [[Special:Preferences|user preferences]] special page.",
        "prefs-resetpass": "Button on user data tab in user preferences. When you click the button you go to the special page [[Special:ResetPass]].\n\n{{Identical|Change password}}",
        "prefs-changeemail": "Link on [[Special:Preferences]] to [[Special:ChangeEmail]]. [[Special:ChangeEmail]] also allows removing email address. \n\nSee also:\n* {{msg-mw|prefs-help-email-required|help}}\n* {{msg-mw|prefs-help-email|help}}\n* {{msg-mw|prefs-help-email-others|help}}\n* {{msg-mw|prefs-setemail|link title}}",
        "recentchangesdays-max": "Shown as hint in [[Special:Preferences]], tab \"Recent changes\". Parameters:\n* $1 - number of days\nSee also:\n* {{msg-mw|Prefs-watchlist-days-max}}",
        "recentchangescount": "Used in [[Special:Preferences]], tab \"Recent changes\".",
        "prefs-help-recentchangescount": "Used in [[Special:Preferences]], tab \"Recent changes\".",
-       "prefs-help-watchlist-token2": "Used in [[Special:Preferences]], tab Watchlist. (Formerly in {{msg-mw|prefs-help-watchlist-token}}.)",
+       "prefs-help-tokenmanagement": "Used in [[Special:Preferences]], Watchlist tab.",
        "savedprefs": "This message appears after saving changes to your user preferences.",
        "savedrights": "This message appears after saving the user groups on [[Special:UserRights]].\n* $1 - The user name of the user which groups was saved.",
        "timezonelegend": "{{Identical|Time zone}}",
        "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-crh-cyrl": "{{optional}}\nVariant Option for wikis with variants conversion enabled.",
-       "variantname-crh-latn": "{{optional}}\nVariant Option for wikis with variants conversion enabled.",
-       "variantname-crh": "{{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-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 8212a88..89ac217 100644 (file)
        "recentchangesdays-max": "(massime $1 {{PLURAL:$1|sciurne|sciurne}})",
        "recentchangescount": "Numere de cangiaminde da fà vedè pe default:",
        "prefs-help-recentchangescount": "Quiste 'nglude le urteme cangiaminde, le storie de le pàggene e le archivije.",
-       "prefs-help-watchlist-token2": "Queste jè 'a chiave segrete a le feed d'u web de l'elenghe de le pàggene condrollate tune.\nCengate vò ccu canosce ce pò leggere l'elenghe de le pàggene condrollate tune, accussì non g'ù pò condividere.\n[[Special:ResetTokens|Cazze aqquà ce tìne abbesogne de azzerarle]].",
        "savedprefs": "Le preferenze tue onne state aggiornete.",
        "savedrights": "Le gruppe utinde de {{GENDER:$1$1}} onne state reggistrate.",
        "timezonelegend": "Orarie d'a zone:",
index b8c6fda..a3299ed 100644 (file)
        "recentchangesdays-max": "(не более $1 {{PLURAL:$1|дня|дней}})",
        "recentchangescount": "Количество правок, отображаемое по умолчанию:",
        "prefs-help-recentchangescount": "Включает свежие правки, истории страниц, журналы.",
-       "prefs-help-watchlist-token2": "Это секретный ключ для веб-канала вашего списка наблюдений.\nЛюбой, кто знает его, сможет читать ваш список наблюдения, поэтому не сообщайте его другим. [[Special:ResetTokens|Нажмите здесь, если вам нужно сбросить его]].",
        "savedprefs": "Настройки сохранены.",
        "savedrights": "Группы {{GENDER:$1|участника|участницы}} $1 были сохранены.",
        "timezonelegend": "Часовой пояс:",
index 779b1d2..f0e42bf 100644 (file)
        "editfont-monospace": "Monoespeć fonṭ",
        "editfont-sansserif": "Sans-serif fonṭ",
        "editfont-serif": "Serif fonṭ",
-       "sunday": "Aṭhowar",
-       "monday": "Som",
-       "tuesday": "Mońgol",
+       "sunday": "ᱥᱤᱸᱜᱮ ᱢᱟᱦᱟᱸ",
+       "monday": "ᱚᱛᱮ ᱢᱟᱦᱟᱸ",
+       "tuesday": "ᱵᱟᱞᱮ ᱢᱟᱦᱟᱸ",
        "wednesday": "Budh",
        "thursday": "Lukhibar",
-       "friday": "Sokolbar",
-       "saturday": "Sạnicar",
+       "friday": "ᱡᱟᱹᱨᱩᱢ ᱢᱟᱦᱟᱸ",
+       "saturday": "ᱧᱩᱦᱩᱢ ᱢᱟᱦᱟᱸ",
        "sun": "Aṭhwar",
        "mon": "Som",
-       "tue": "Mongolbar",
+       "tue": "ᱵᱟᱞᱮ ᱢᱟᱦᱟᱸ",
        "wed": "Budhbar",
        "thu": "Lukhibar",
        "fri": "Sokolbar",
        "sat": "Sạnicar",
-       "january": "Jạnuạri",
-       "february": "Februạri",
-       "march": "Marc",
-       "april": "Epril",
-       "may_long": "Me̠",
-       "june": "Jun",
-       "july": "Julại",
-       "august": "A̠go̠sṭ",
-       "september": "Se̠ṕṭembạ̣r",
-       "october": "O̠ḱ́ṭo̠bo̠r",
-       "november": "Nove̠mbo̠r",
-       "december": "á¸\8cisemboÌ r",
+       "january": "ᱡᱟᱱᱩᱣᱟᱨᱤ",
+       "february": "ᱯᱷᱮᱵᱽᱨᱩᱣᱟᱨᱤ",
+       "march": "ᱢᱟᱨᱪ",
+       "april": "ᱮᱯᱨᱤᱞ",
+       "may_long": "ᱢᱮ",
+       "june": "ᱡᱩᱱ",
+       "july": "ᱡᱩᱞᱟᱭ",
+       "august": "ᱟᱜᱚᱥᱴ",
+       "september": "ᱥᱮᱯᱴᱮᱢᱵᱚᱨ",
+       "october": "ᱚᱠᱴᱚᱵᱚᱨ",
+       "november": "ᱱᱚᱵᱷᱮᱢᱵᱚᱨ",
+       "december": "ᱰᱤᱥᱮᱢᱵá±\9fᱨ",
        "january-gen": "Jạnuạri",
-       "february-gen": "Februạri",
+       "february-gen": "ᱯᱷᱮᱵᱽᱨᱩᱣᱟᱨᱤ",
        "march-gen": "Marc",
        "april-gen": "Epril",
        "may-gen": "Me",
        "october-gen": "O̠ḱ́ṭo̠bo̠r",
        "november-gen": "Nove̠mbo̠r",
        "december-gen": "December",
-       "jan": "Jạnuari",
-       "feb": "Phebuari",
-       "mar": "Ma̠r",
-       "apr": "Epr",
-       "may": "Me",
-       "jun": "Ju̠n",
-       "jul": "Ju̠l",
-       "aug": "Ago̠",
-       "sep": "Seṕ",
-       "oct": "Okṭ",
-       "nov": "No̠v",
-       "dec": "Disembor",
+       "jan": "ᱡᱟᱱᱩᱣᱟᱨᱤ",
+       "feb": "ᱯᱷᱮᱵᱽᱨᱩᱣᱟᱨᱤ",
+       "mar": "ᱢᱟᱨᱪ",
+       "apr": "ᱮᱯᱨᱤᱞ",
+       "may": "ᱢᱮ",
+       "jun": "ᱡᱩᱱ",
+       "jul": "ᱡᱩᱞᱟᱭ",
+       "aug": "ᱟᱜᱚᱥᱴ",
+       "sep": "ᱥᱮᱯᱴᱮᱢᱵᱚᱨ",
+       "oct": "ᱚᱠᱴᱚᱵᱚᱨ",
+       "nov": "ᱱᱚᱵᱷᱮᱢᱵᱚᱨ",
+       "dec": "ᱰᱤᱥᱮᱢᱵᱚᱨ",
        "january-date": "ᱡᱟᱱᱩᱣᱟᱨᱤ $1",
        "february-date": "ᱯᱷᱮᱵᱽᱨᱩᱣᱟᱨᱤ $1",
        "march-date": "ᱢᱟᱨᱪ $1",
        "category-file-count": "{{PLURAL:$2 Noa babot reaḱ rokom sokomre do eken latar reaḱ sakam menaḱa. Noa babot reaḱ rokom sokomre emakan moṭhe $2 gan sakam mudre {{PLURAL:$1 gan sakam $1 gan sakam}} latarre uduḱ hoena}}",
        "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",
+       "index-category": "ᱩᱱᱩᱫᱩᱜ-ᱟᱱ ᱥᱟᱦᱴᱟᱠᱚ",
        "noindex-category": "ᱩᱱᱩᱫᱩᱜ ᱵᱟᱹᱱᱩᱜ-ᱟᱱ ᱥᱟᱦᱴᱟᱠᱚ",
        "broken-file-category": "Baṅ kạmi daṛeaḱ chubi joṛao soho sakamko",
        "about": "Lạgitte, Lạgti",
-       "article": "Menaḱakat́ sakam",
+       "article": "ᱩᱱᱩᱫᱩᱜ ᱥᱟᱦᱴᱟ",
        "newwindow": "Nãwã khiṛki jhijme",
        "cancel": "Badme",
        "moredotdotdot": "Aema",
        "mypage": "In̕aḱ sakam",
        "mytalk": "Galmarao",
        "anontalk": "Nui baṅ ńutumanić beoharićaḱ galmarao sakam",
-       "navigation": "Ạcurbaá¹\9ba",
-       "and": "&#31;ar",
+       "navigation": "á±\9fᱹᱪᱩᱨᱵá±\9fá±²á±\9f",
+       "and": "&#32;ᱟᱨ",
        "faq": "Baḍae kupuliko",
        "actions": "Kạmi",
-       "namespaces": "Ńutum reaḱ ṭhai",
-       "variants": "Etaḱko",
-       "navigation-heading": "Ạcurbaá¹\9ba minu",
+       "namespaces": "ᱧᱤᱛᱩᱢ ᱡᱟᱜᱟ",
+       "variants": "ᱮᱴᱟᱜᱠᱳ",
+       "navigation-heading": "á±\9fᱪᱩᱨᱵá±\9fá±²á±\9f á±¢á±®á±±á±©",
        "errorpagetitle": "vul",
        "returnto": "$1 te ruar-rok' me",
-       "tagline": "Oka khoć {{SITENAME}}",
-       "help": "Go̠ṛo̠",
-       "search": "Se̠ndra",
-       "searchbutton": "Se̠ndra",
+       "tagline": " {{SITENAME}} ᱠᱷᱚᱱ",
+       "help": "ᱜᱚᱲᱚ",
+       "search": "ᱥᱮᱸᱫᱽᱨᱟ",
+       "searchbutton": "ᱥᱮᱸᱫᱽᱨᱟ",
        "go": "Calaḱme",
-       "searcharticle": "Calaḱme",
-       "history": "Sakam reaḱ jạṛ",
-       "history_short": "Jạṛ",
+       "searcharticle": "ᱪᱟᱞᱟᱜ ᱢᱮ",
+       "history": "ᱥᱟᱦᱴᱟ ᱱᱟᱜᱟᱢ",
+       "history_short": "ᱱᱟᱜᱟᱢ",
        "history_small": "ᱱᱟᱜᱟᱢ",
        "updatedmarker": "Ińaḱ mucạt hiripor khon nitaḱ halot",
-       "printableversion": "Chapa sodorḱ bharson",
-       "permalink": "Tirejuge joṛao",
+       "printableversion": "ᱪᱷᱟᱯᱟ ᱜᱟᱱᱚᱜ ᱚᱰᱚᱫ",
+       "permalink": "ᱛᱤᱨᱮᱡᱩᱜᱮ ᱡᱚᱱᱚᱲ",
        "print": "Chapa",
-       "view": "Udukme",
+       "view": "ᱩᱰᱩᱜᱽᱢᱮ",
        "view-foreign": "$1 re ńelme",
-       "edit": "Toṅge",
+       "edit": "ᱥᱟᱯᱲᱟᱣ",
        "create": "Tearme",
        "create-local": "ᱢᱮᱥᱟᱭᱢᱮ ᱠᱟᱛᱷᱟ ᱠᱚ",
        "delete": "muchau me",
        "protect": "banchao'",
        "protect_change": "Judạ",
        "unprotect": "Bodol ban̕cao",
-       "newpage": "Nãwã sakam",
-       "talkpagelinktext": "Ro̠ṛme",
-       "specialpage": "Osokayteaḱ sakam",
-       "personaltools": "Nijaḱ jontropạti",
-       "talk": "Galmarao",
-       "views": "Ńelogoḱ",
-       "toolbox": "Jontropạti",
-       "imagepage": "Rẽt sakam uduḱme",
-       "mediawikipage": "Mesag sakam uduḱme",
-       "templatepage": "Ṭempleá¹­ sakam udugmẽ",
-       "viewhelppage": "Goṛoaḱ sakam n̕elme",
+       "newpage": "ᱱᱟᱶᱟ ᱥᱟᱦᱴᱟ",
+       "talkpagelinktext": "ᱨᱚᱲ",
+       "specialpage": "ᱵᱤᱥᱮᱥ ᱥᱟᱦᱴᱟ",
+       "personaltools": "ᱱᱤᱡᱮᱨᱟᱜ ᱦᱟᱹᱛᱤᱭᱟᱹᱨᱠᱳ",
+       "talk": "ᱜᱟᱞᱢᱟᱨᱟᱣ",
+       "views": "ᱧᱮᱞᱚᱜᱚᱜ",
+       "toolbox": "ᱦᱟᱹᱛᱤᱭᱟᱹᱨ",
+       "imagepage": "ᱨᱮᱫ ᱥᱟᱦᱴᱟ ᱧᱮᱞᱢᱮ",
+       "mediawikipage": "ᱠᱷᱚᱵᱚᱨ ᱥᱟᱦᱴᱟ ᱧᱮᱞᱢᱮ",
+       "templatepage": "ᱪᱷá±\9fᱸᱪ á±¥á±\9fᱦᱴá±\9f á±©á±«á±©á±\9cá±½ á±¢á±®",
+       "viewhelppage": "ᱜᱚᱸᱲᱚ ᱥᱟᱦᱴᱟ ᱧᱮᱞᱢᱮ",
        "categorypage": "Babot reaḱ rokom sokom udugmẽ",
        "viewtalkpage": "Galmarao ńelme",
-       "otherlanguages": "Eṭagak pạrsi",
+       "otherlanguages": "ᱮᱴᱟᱜ ᱯᱟᱹᱨᱥᱤ ᱛᱮ",
        "redirectedfrom": "$1 khon ạcur heć akana",
-       "redirectpagesub": "Bań sojhe sakam",
+       "redirectpagesub": "ᱵᱟᱝ ᱥᱚᱡᱽᱦᱮ ᱥᱟᱦᱴᱟ",
        "redirectto": "Ar hõ udugoḱakana:",
        "lastmodifiedat": "ᱱᱚᱶᱟ ᱥᱟᱦᱴᱟ ᱢᱩᱪᱟᱹᱫ ᱫᱷᱟᱣ ᱵᱚᱫᱚᱞ ᱟᱠᱟᱱᱟ  $1 ᱢᱟᱹᱦᱤᱛ,  $2 ᱚᱠᱛᱚᱨᱮ",
        "viewcount": "Noa sakamdo {{PLURAL:$1 dhom $1 dhom}} udug hoena.",
        "protectedpage": "Rukhíạ sakamko",
-       "jumpto": "Donme :",
-       "jumptonavigation": "Ñamme",
-       "jumptosearch": "Sendra",
+       "jumpto": "ᱫᱚᱱᱢᱮ :",
+       "jumptonavigation": "ᱟᱹᱪᱩᱨᱵᱟᱲᱟ",
+       "jumptosearch": "ᱥᱮᱸᱫᱽᱨᱟ",
        "view-pool-error": "Ikạkańmẽ, sarvarre nitoḱ do aḍi cap menaḱa.\nẠḍi aema beoharko noa sakam ńel lạgit́ko kurumuṭueda.\nNãwate noa sakam ńel kurumuṭuy lạgit́te dayakate mit́ghạṛi tạṅgiymẽ.\n$1",
        "pool-timeout": "Somoy paromena cạbi lạgit́te tạṅgi hoyoḱkana",
-       "pool-queuefull": "Pul reaḱ sakam perećena",
+       "pool-queuefull": "Pool queue is full",
        "pool-errorunknown": "Bań baḍayaḱ bhul",
-       "aboutsite": "babo̠tre {{SITENAME}}",
-       "aboutpage": "Project: Babo̠t",
-       "copyright": "$1 re bhitrire ńamoḱa.",
-       "copyrightpage": "{{ns:project}}: Eḱteạr",
-       "currentevents": "Cạlit ghoṭnako",
-       "currentevents-url": "Project: Nitaḱ evenṭ ko",
-       "disclaimers": "Dạbi bạnuḱko",
-       "disclaimerpage": "Project: Sadharon ḍiskleimarko(General disclaimer)",
+       "aboutsite": "ᱵᱟᱵᱚᱛ {{SITENAME}}",
+       "aboutpage": "Project: ᱵᱟᱵᱚᱛ",
+       "copyright": "ᱩᱱᱩᱫᱩᱜ ᱫᱚ ᱧᱟᱢᱚᱜ-ᱟ $1 ᱞᱮᱠᱟᱛᱮ  ᱵᱟᱝᱠᱷᱟᱱ ᱚᱞ ᱛᱟᱦᱮᱱᱟ",
+       "copyrightpage": "{{ns:project}}: ᱮᱠᱛᱤᱭᱟᱨ",
+       "currentevents": "ᱱᱤᱛᱚᱜ ᱠᱷᱚᱵᱚᱨ",
+       "currentevents-url": "Project: ᱱᱤᱛᱚᱜ ᱠᱷᱚᱵᱚᱨᱠᱳ",
+       "disclaimers": "ᱫᱟᱹᱵᱤ ᱵᱟᱱᱩᱜᱠᱳ",
+       "disclaimerpage": "Project: ᱥᱟᱫᱷᱟᱨᱚᱱ ᱫᱟᱹᱵᱤ ᱵᱟᱱᱩᱜᱠᱩ",
        "edithelp": "Tońge goṛo",
        "helppage-top-gethelp": "ᱜᱚᱲᱚ",
-       "mainpage": "Mukhiạ Sakam",
-       "mainpage-description": "Mukhiạ sakam",
+       "mainpage": "ᱢᱩᱬᱩᱛ ᱥᱟᱦᱴᱟ",
+       "mainpage-description": "ᱢᱩᱬᱩᱛ ᱥᱟᱦᱴᱟ",
        "policy-url": "Project:Ritiniti",
-       "portal": "Gusṭi bolon hor",
+       "portal": "ᱜᱩᱥᱴᱤ ᱵᱚᱞᱚᱜ ᱫᱩᱭᱟᱹᱨ",
        "portal-url": "Project:ᱠᱷᱩᱴ ᱵᱚᱞᱚᱱ ᱦᱚᱨ",
-       "privacy": "Oku eḱtear",
-       "privacypage": "Project: Nijaḱ eḱteạr",
+       "privacy": "ᱩᱠᱩ ᱮᱠᱛᱤᱭᱟᱨ",
+       "privacypage": "Project: ᱩᱠᱩ ᱮᱠᱛᱤᱭᱟᱨ",
        "badaccess": "Ektiạr vul",
        "badaccess-group0": "Am do oka kạmi lạgit́em aroj akat́, ona kạmi purạo lạgit́te ạidạri do bạnuḱa.",
        "badaccess-groups": "Am do oka kạmim menjoṅkan ona do khạli {{PLURAL:$2 rạsiạkore noa rạsiạreaḱ mit́ṭenre}} mitṭen beoharić sompadon daṛeyaḱa: $1.",
        "versionrequired": "Meḍiawiki reaḱ $1 nãwã aroe jạruṛa",
        "versionrequiredtext": "Noa sakam beohar lạgit́te meḍiaWikire $1 nambar nãwã araoe jạruṛa.\n[[Special:Version nãwã aroe sakam]] ńelmẽ.",
        "ok": "Ṭhik gea",
-       "retrievedfrom": "\"$1\" khon ñam ạgui",
+       "retrievedfrom": "\"$1\" ᱠᱷᱚᱱ ᱧᱟᱢ ᱟᱹᱜᱩᱭ",
        "youhavenewmessages": "Amaḱ do $1 ($2) menaḱa",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|ᱟᱢ ᱫᱚ}} $1 ᱠᱷᱚᱱ {{PLURAL:$3|ᱟᱨᱢᱤᱫ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ|$3 ᱵᱷᱮᱵᱷᱟᱨᱩᱭᱟᱹ}} ($2) ᱾",
        "newmessageslinkplural": "{{PLURAL:$1|ᱢᱤᱫ ᱱᱟᱶᱟ ᱢᱮᱥᱮᱡᱽ|999=ᱱᱟᱶᱟ ᱢᱮᱥᱮᱡᱽᱠᱚ}}",
        "newmessagesdifflinkplural": "ᱢᱩᱪᱟᱹᱫ {{PLURAL:$1|ᱵᱚᱫᱚᱞ|999=ᱵᱚᱫᱚᱞᱠᱚ}}",
        "youhavenewmessagesmulti": "Amaḱ nãwã mesagko do $1 menaḱa",
-       "editsection": "Tońge",
+       "editsection": "ᱥᱟᱯᱲᱟᱣ",
        "editold": "Toṅge",
        "viewsourceold": "Ńamoḱ jayga",
        "editlink": "Tońge",
-       "viewsourcelink": "vitrireaḱ́ jo̠to̠ ńelme",
-       "editsectionhint": "Toṅge dhara: $1",
-       "toc": "Menaḱaḱko",
+       "viewsourcelink": "ᱯᱷᱮᱰᱟᱛ ᱦᱚᱨ ᱧᱮᱞᱢᱮ",
+       "editsectionhint": "ᱥᱟᱯᱲᱟᱣ ᱡᱟᱭᱜᱟ: $1",
+       "toc": "ᱩᱱᱩᱫᱩᱜ",
        "showtoc": "Uduḱme",
        "hidetoc": "uku, Danaṅ",
        "collapsible-collapse": "Murchạo caba",
        "feed-invalid": "Garhak feed reaḱ rokom do ạnlekate baṅkana",
        "feed-unavailable": "Sinḍikason feed do baṅ ńamoḱkana",
        "site-rss-feed": "$1 RSS feed",
-       "site-atom-feed": " $1 Jom oco",
+       "site-atom-feed": " $1 ᱡᱚᱢ ᱚᱪᱚ",
        "page-rss-feed": "\"$1\" RSS feed",
        "page-atom-feed": "\"$1\" khon khudri jom",
-       "red-link-title": "$1 (niạ sakamdo bạnuḱa)",
+       "red-link-title": "$1 (ᱱᱤᱭᱟᱹ ᱥᱟᱦᱴᱟ ᱫᱚ ᱵᱟᱹᱱᱩᱜ-ᱟ)",
        "sort-descending": "Ulṭạo horop lekate sajao",
        "sort-ascending": "Horop lekate sajao",
-       "nstab-main": "Sakam",
-       "nstab-user": "Laṛcaṛicaḱ sakam",
-       "nstab-media": "Midiạ sakam",
-       "nstab-special": "Osokayteaḱ sakam",
-       "nstab-project": "Porject reaḱ sakam",
+       "nstab-main": "ᱥᱟᱦᱴᱟ",
+       "nstab-user": "ᱵᱮᱵᱦᱟᱹᱨᱤᱭᱟᱹᱜ ᱥᱟᱦᱴᱟ",
+       "nstab-media": "Media ᱥᱟᱦᱴᱟ",
+       "nstab-special": "ᱚᱥᱚᱠᱟᱭᱛᱮᱭᱟᱜ ᱥᱟᱦᱴᱟ",
+       "nstab-project": "ᱯᱨᱚᱡᱮᱠᱴ ᱥᱟᱦᱴᱟ",
        "nstab-image": "Phayel",
        "nstab-mediawiki": "Mesag",
-       "nstab-template": "Sajao sakam",
-       "nstab-help": "Goṛo sakam",
+       "nstab-template": "ᱪᱷᱟᱸᱪ",
+       "nstab-help": "ᱜᱚᱸᱲᱚ ᱥᱟᱦᱴᱟ",
        "nstab-category": "Juṛu ko",
-       "mainpage-nstab": "Mukhiạ sakam",
+       "mainpage-nstab": "ᱢᱩᱬᱩᱛ ᱥᱟᱦᱴᱟ",
        "nosuchaction": "Noṅkanaḱ kạmi bạnuḱa",
        "nosuchactiontext": "Noa URL re goṭa akan kạmi do ạnlekate baṅkana.\nAm do paseć mit́ṭen vul joṛaoem emakada se URL oltem vul akada.\nNoa do noṅkanaḱ menkana je {{SITENAME}} sayeṭre beoharen sofṭower re mit́ṭen vul menaḱa.",
        "nosuchspecialpage": "Noṅkanaḱ asokay sakam do banuḱa",
-       "nospecialpagetext": "<strong>Am do mit́ṭen beạn asokae sakamem nehor akada.</strong>\n[[Special:SpecialPages {{int:specialpages}}]]-re ạn asokae sakamkore mit́ṭen tạlikam ńama.",
+       "nospecialpagetext": "<strong>ᱟᱢ ᱫᱚ ᱡᱟᱦᱟᱸ ᱥᱟᱦᱴᱟ ᱞᱟᱹᱜᱤᱫ ᱮᱢ ᱱᱮᱦᱚᱨ ᱟᱠᱟᱫᱟ ᱚᱱᱟᱫᱚ ᱵᱟᱹᱱᱩᱜ-ᱟ </strong>\nᱡᱟᱦᱟᱸ ᱥᱟᱦᱴᱟᱠᱩ ᱱᱚᱸᱰᱮ ᱢᱮᱱᱟᱜ-ᱟ ᱚᱱᱟᱨᱮᱱᱟᱜ ᱛᱟᱹᱞᱠᱟᱹ ᱱᱚᱸᱰᱮᱢ ᱧᱟᱢᱟ [[Special:SpecialPages|{{int:specialpages}}]]᱾",
        "error": "bhul",
        "databaseerror": "Ḍaṭabase vul",
        "databaseerror-error": "ᱦᱩᱲᱟᱹᱜ: $1",
        "internalerror_info": "Bhitri reaḱ vul: $1",
        "filecopyerror": "\"$1\" rẽt khon \"$2\" rẽt baṅ kopilena.",
        "filerenameerror": "\"$1\" rẽt reaḱ ńutum bodol kate \"$2\" em baṅ hoyoḱ kana.",
-       "filedeleteerror": "$1 sakam do baṅ get́ giḍiḱ lena",
+       "filedeleteerror": "$1 ᱨᱮᱫ ᱫᱚ ᱵᱟᱝ ᱜᱮᱫᱽ ᱜᱤᱰᱤ ᱞᱮᱱᱟ",
        "directorycreateerror": "\"$1\" dayrekṭori do baṅ tearlena.",
        "filenotfound": "\"$1\" rẽt do baṅ sendra ńamoḱ kana.",
        "unexpected": "Baṅ asakan mạn: \"$1\"=\"$2\".",
        "viewsource-title": "$1 renaḱ ńamoḱ ṭhại ńelmẽ",
        "actionthrottled": "Kạmi reaḱ dhara bại",
        "protectedpagetext": "Noa sakam do ol toṅge lạgit́te do bańcao gea.",
-       "viewsourcetext": "Noa sakam do am ńel ar ńamoḱaḱ ṭhạiem kopi hatao daṛeaḱa:",
+       "viewsourcetext": "ᱱᱚᱭᱟ ᱥᱟᱦᱴᱟᱢ ᱧᱮᱞ ᱫᱟᱲᱮᱭᱟᱜ-ᱟ ᱟᱨᱮᱢ ᱠᱚᱯᱤ ᱫᱟᱲᱮᱭᱟᱜ-ᱟ᱾",
        "viewyourtext": "Am do '''Amaḱ sompadon''' noa sakam ńel arem kopi hatao daṛeaḱa:",
        "protectedinterface": "Noa sakam reaḱ babotko do wiki sofṭoyer reaḱ mit́ṭen inṭarfes khobore ema, onate noa do rukhiyạ doho hoeakana.",
        "cascadeprotected": "Noa sakam do sompadon khon rukhiyạre menaḱa, karon sakam do latar reaḱ {{PLURAL:$1 gan sakam reaḱ gan sakam reaḱ}} bhitrire, oka sakam do (cascading) te rukhiyạ menaḱa:\n$2",
        "createacct-submit": "Amaḱ account tearme",
        "createacct-benefit-heading": "{{SITENAME}} am lekan hoṛ hotete tear akan.",
        "createacct-benefit-body1": "{{PLURAL:$1|joṛao|joṛaoko}}",
-       "createacct-benefit-body2": "{{PLURAL:$1|sakam|sakamko}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|ᱥᱟᱦᱴᱟ|ᱥᱟᱦᱴᱟᱠᱳ}}",
        "createacct-benefit-body3": "nahaḱ {{PLURAL:$1|kamiạ|kạmiako}}",
        "badretype": "Am do okaṭaḱ oku nambarkom em keda ona do baṅ milạolena.",
        "userexists": "Laṛcaṛicaḱ ńutum em hoyena ona do beohar hoyakana.\nDayakatet́ eṭagaḱ ńutum bachaome.",
        "createaccount-text": "Okoe co am lạgit́te mitṭen ekaunṭko amaḱ e-mail ṭhikạna lạgit {{SITENAME}} re ($4) ńutum \"$2\", oku nambar \"$3\".\nAm do mesagem baṅ daṛeyaḱa, judi noa ekaunṭ do vulge benaolen khan.",
        "login-throttled": "Am do mitghạri lahare por por aema dhao boloḱem kurumuṭu keda.\nArhõ kurumuṭue lahare dayakate thoṛagan tạṅgiemẽ.",
        "login-abort-generic": "Amaḱ bhitri boloḱ do baṅ hoylena - batena.",
-       "loginlanguagelabel": "Pạrsi: $1",
-       "pt-login": "Bolok' duar",
+       "loginlanguagelabel": "ᱯᱟᱹᱨᱥᱤ: $1",
+       "pt-login": "ᱵᱚᱞᱚᱜ ᱫᱩᱭᱟᱹᱨ",
        "pt-login-button": "Bolon",
-       "pt-createaccount": "Ṭhai benaome",
+       "pt-createaccount": "á±´á±·á±\9fá±­ á±µá±®á±±á±\9fᱣᱢᱮ",
        "pt-userlogout": "Bahre oḍoń",
        "user-mail-no-addy": "Jahan e-mail ṭhikana bạgi kate e-mail kul kurumuṭu hoena.",
        "changepassword": "Uku nombor bodolme",
        "summary": "Guṭ katha",
        "subject": "Bisoy/Bohoḱ katha:",
        "minoredit": "Noa do hudiń joṛao kami",
-       "watchthis": "Noa sakam ńelme",
-       "savearticle": "Sakam dohoeme",
+       "watchthis": "ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱧᱮᱞᱢᱮ",
+       "savearticle": "ᱥᱟᱦᱴᱟ ᱫᱚᱦᱚᱭᱢᱮ",
        "preview": "Ńel, Unuduḱ",
        "showpreview": "Unuduḱ",
        "showdiff": "Bodolko ńeloḱma",
        "accmailtext": "[[User talk:$1 $1]] lạgit́te aćte benaoen uku nambar do $2 kul hoena.\nBhitri bolo kateḱ noa nãwã ekaunṭ lạgit uku nambar \"[[Special:ChangePassword Change password]]\" sakam khonem bodol daṛyakya.",
        "newarticle": "(Nãwa)",
        "newarticletext": "Am do oka mitṭen joṛaoem pańja akada, onaṭak do bạnuḱa.\nOna sakam tear lạgit́te, latar reaḱ baksore ol ehoṕmẽ (arhõ jạsti baḍae lạgit́te [$1 help page] pańjaemẽ).\nAm do judi nonḍe vulkatem heć akan khan, tobe amaḱ sendrakore '''back''' baṭon linmẽ.",
+       "anontalkpagetext": "----\n\n<em>ᱱᱚᱶᱟ ᱫᱚ ᱜᱟᱞᱚᱪ ᱥᱟᱦᱴᱟ ᱠᱟᱱᱟ ᱩᱠᱩᱧᱩᱛᱩᱢ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱠᱚᱣᱟᱜ ᱡᱟᱦᱟᱸᱭ ᱫᱚ ᱠᱷᱟᱛᱟ ᱵᱟᱭ ᱛᱮᱭᱟᱨ ᱟᱠᱟᱫᱟ ᱱᱤᱛ ᱦᱟᱹᱵᱤᱡ, ᱟᱨᱵᱟᱝ ᱡᱟᱦᱟᱸᱭ ᱵᱮᱵᱷᱟᱨ ᱟᱠᱟᱫᱟ ᱱᱚᱶᱟ ᱾</em>\nᱚᱱᱟᱛᱮ ᱟᱞᱮ ᱮᱞᱮᱞ IP ᱞᱮ ᱵᱮᱵᱷᱟᱨᱮᱜ-ᱟ ᱩᱱᱤ ᱪᱤᱱᱦᱟᱹᱣ ᱞᱟᱹᱜᱤᱫ ᱾\nᱚᱱᱠᱟᱱ IP ᱵᱩᱴᱟᱹ ᱫᱚ ᱦᱟᱹᱴᱤᱧ ᱫᱟᱲᱮᱭᱟᱜ-ᱟ ᱛᱤᱢᱤᱱ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱫᱟᱨᱟᱭᱛᱮ ᱾\nᱡᱩᱫᱤ ᱟᱢ ᱩᱠᱩᱧᱩᱛᱩᱢ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱠᱟᱱᱟᱢ ᱟᱨ ᱵᱷᱟᱹᱵᱤᱭᱮᱜ-ᱟᱢ ᱵᱟᱝ ᱡᱚᱲᱟᱣᱟᱱ ᱠᱟᱛᱷᱟ ᱟᱢᱮ ᱩᱫᱩᱜᱢᱮ ᱠᱟᱱᱟ, ᱮᱱᱠᱷᱟᱱ  [[Special:CreateAccount|ᱠᱷᱟᱛᱟ ᱛᱮᱭᱟᱨᱢᱮ]] ᱟᱨᱵᱟᱝ [[Special:UserLogin|ᱞᱚᱜᱤᱱ]] ᱢᱮ ᱫᱟᱨᱟᱭ ᱵᱷᱮᱣᱱᱟ ᱠᱚ ᱥᱟᱦᱟᱭ ᱞᱟᱹᱜᱤᱫ ᱮᱴᱟᱜ ᱩᱠᱩᱧᱩᱛᱩᱢ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱠᱚ ᱥᱟᱶ ᱾",
        "noarticletext": "Nitoḱ noa sakamre do cet́olge bạnuḱa.\n\nAm menlekhan eṭaḱ sakamkore [[Special:Search/{{PAGENAME}}|search for this page title]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],\nor [{{fullurl:{{FULLPAGENAME}}|action=edit}} edit this page]</span>.",
-       "noarticletext-nopermission": "Noa sakamre do nitoḱ o̠l banuḱa.\n\nYou can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,\nor <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>.",
+       "noarticletext-nopermission": "ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟᱨᱮ ᱱᱤᱛᱚᱜ ᱪᱮᱫᱜᱮ ᱚᱞ ᱵᱟᱹᱱᱩᱜ-ᱟ᱾\n\nᱟᱢ [[Special:Search/{{PAGENAME}}|ᱱᱚᱭᱟ ᱥᱟᱦᱴᱟᱨᱮᱱᱟᱜ ᱧᱤᱛᱩᱢᱮᱢ ᱥᱮᱸᱫᱽᱨᱟ ᱫᱟᱲᱮᱭᱟᱜ-ᱟ]] ᱮᱴᱟᱜ ᱥᱟᱦᱴᱟ ᱠᱚᱨᱮᱦᱚᱸ,\nᱟᱨᱵᱟᱝ <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>.",
        "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:",
        "updated": "(Halot ruaṛ)",
        "note": "'''Noṭ:'''",
        "previewnote": "'''kheyalmẽ, noa do eken ńeloḱ lạgit.'''\nAmaḱ bodolaḱ kodo nit habićte bań rukhíạakana!",
-       "continue-editing": "Toṅge calaḱkana",
+       "continue-editing": "ᱥᱟᱯᱲᱟᱣ ᱡᱟᱜᱟ ᱪᱟᱞᱟᱜ ᱢᱮ",
        "editing": "Joṛao do purạena: $1",
-       "creating": "$1 sakam doe tear akada",
+       "creating": "$1 ᱛᱮᱭᱟᱨᱚᱜᱠᱟᱱᱟ",
        "editingsection": "Joṛao $1 (hạṭiń)",
        "editingcomment": "Sompadon akadae $1 (Nãwa pahaṭa)",
        "editconflict": "Sompadon reaḱ bene bạiri: $1",
        "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.",
-       "moveddeleted-notice": "Noa sakam do get giḍiyakana.\nGet ar ocoḱ giḍi sakam do latarre emakan reference lạgit em hoena.",
+       "moveddeleted-notice": "ᱱᱚᱭᱟ ᱥᱟᱦᱴᱟ ᱫᱚ ᱜᱮᱫ ᱜᱤᱰᱤ ᱦᱩᱭ ᱟᱠᱟᱱᱟ᱾\nᱜᱮᱫ ᱥᱮ ᱵᱟᱸᱪᱟᱣ ᱥᱮ ᱚᱪᱚᱜ ᱜᱤᱰᱤᱭᱟᱠᱟᱱ ᱥᱟᱦᱴᱟ ᱨᱮᱱᱟᱜ ᱥᱟᱹᱠᱷᱤ ᱞᱮᱠᱟᱛᱮ ᱞᱟᱛᱟᱨᱨᱮ ᱮᱢ ᱦᱩᱭᱱᱟ᱾",
        "log-fulllog": "Joto cạbi udugmẽ",
        "edit-hook-aborted": "Huk hotete joto sompadonko bạgi hoeakana.\nNoa reaḱ jahan katha do bạnuḱa.",
-       "edit-gone-missing": "Sakam do baṅ halot ruạṛlena.\nPasecc: sakam do ocoǵ hoeakana.",
+       "edit-gone-missing": "ᱥᱟᱦᱴᱟ ᱫᱚ ᱵᱟᱝ ᱦᱟᱞᱚᱛ ᱨᱩᱭᱟᱹᱲᱞᱮᱱᱟ᱾\nᱯᱟᱥᱮᱡᱽ ᱫᱚ ᱚᱪᱚᱜ ᱦᱩᱭ ᱟᱠᱟᱱᱟ᱾",
        "edit-conflict": "Sompadon reṭepeṭe.",
        "edit-no-change": "Amaḱ sompadon do baṅ hataolena, Cedaḱ je olre jahan bodol bạnuḱa.",
-       "edit-already-exists": "Nãwã sakam baṅ tear lena.\nSakam do laha khon menaḱgea.",
+       "edit-already-exists": "ᱱᱟᱣᱟ ᱥᱟᱦᱴᱟ ᱵᱟᱝ ᱛᱮᱭᱟᱨ ᱞᱮᱱᱟ᱾\nᱱᱚᱣᱟ ᱫᱚ ᱞᱟᱦᱟ ᱠᱷᱚᱱ ᱢᱮᱱᱟᱜ ᱜᱮᱭᱟ᱾",
        "defaultmessagetext": "Sedae olko",
        "content-model-wikitext": "ᱣᱤᱠᱤ-ᱚᱞ",
        "post-expand-template-inclusion-warning": "\"Sontoroḱme\" Noa format do lạṭu geya.\nThoṛa format do noare banuḱana.",
        "post-expand-template-inclusion-category": "Sakamko oka borḍre noa tahẽna ona doe paromkeda",
        "post-expand-template-argument-warning": "'''Sontoroḱmẽ:''' Noa sakamre komse kom mitṭen forma joṛao menaḱa ạḍi lạṭute pasnao akana.\nOnate noa ạrgumenṭkodo bạgi giḍi hoena.",
-       "post-expand-template-argument-category": "Bagi forma ạrgumenṭ sapdoho sakam",
+       "post-expand-template-argument-category": "Pages containing omitted template arguments",
        "undo-failure": "ᱥᱟᱯᱲᱟᱣᱠᱚ ᱵᱟᱭ ᱟᱹᱪᱩᱨ ᱨᱩᱣᱟᱹᱲᱚᱜ-ᱟ ᱛᱟᱞᱟ-ᱢᱟᱞᱟ ᱥᱟᱯᱲᱟᱣ ᱵᱤᱨᱚᱫᱽ ᱤᱫᱤᱠᱟᱛᱮ |",
-       "viewpagelogs": "Noa sakam reaḱ cạbi udukme",
+       "viewpagelogs": "ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱨᱮᱭᱟᱜ ᱞᱚᱜᱽᱠᱚ ᱧᱮᱞᱢᱮ",
        "nohistory": "Noa sakam re do jahan sompadon reaḱ jạṛ bạnuḱa.",
        "currentrev": "Mucạt nãwã aroe",
        "currentrev-asof": "Mucạt nãwã aroy",
-       "revisionasof": "Nãwã aro sakam $1 leka",
+       "revisionasof": "Revision as of $1",
        "revision-info": "Revision as of $1 by {{GENDER:$6|$2}}$7",
-       "previousrevision": "Pạhilaḱ paṛhao ruạṛ",
+       "previousrevision": "ᱯᱟᱹᱦᱤᱞ ᱯᱟᱲᱦᱟᱣ ᱨᱩᱭᱟᱹᱣ",
        "nextrevision": "nãwate n'el ruar",
        "currentrevisionlink": "Nitoḱaḱ nãwa aroy",
        "cur": "Boge",
        "page_first": "Pahilaḱ",
        "page_last": "Mucạt́aḱ",
        "histlegend": "Farak bachao: oka nãwã aroeko tulạoem menet́kan, onako cinhạ em kate boloḱ se latar baṭon linmẽ.<br />\nUnuduḱ: '''({{int:cur}})''' = nahaḱ nãwã aroeko saõte tulạo, '''({{int:last}})''' = laha reaḱ nãwã aroe sãote tulạo, '''{{int:minoreditletter}}''' = huḍiń sompadon.",
-       "history-fieldset-title": "Sendray jaṛ",
+       "history-fieldset-title": "ᱧᱮᱞ ᱟᱹᱨᱩ ᱞᱟᱹᱜᱤᱫ ᱥᱮᱸᱫᱽᱨᱟ",
        "history-show-deleted": "khạli get giḍiyaḱ koge",
-       "histfirst": "adi laha-ak'",
-       "histlast": "Nahak",
+       "histfirst": "ᱢᱟᱨᱮᱱᱟᱜ",
+       "histlast": "ᱱᱟᱣᱟᱱᱟᱜ",
        "historysize": "({{PLURAL:$1 1 bayeṭ $1 bayeṭko}})",
        "historyempty": "(banuḱa)",
        "history-feed-title": "Jạṛ nãwã aroy",
        "revdelete-radio-unset": "Baṅ",
        "revdelete-log": "Babot:",
        "revdel-restore": "Judạ lekate ńel",
-       "pagehist": "Sakam reaḱ jạṛ",
+       "pagehist": "ᱥᱟᱦᱴᱟ ᱱᱟᱜᱟᱢ",
        "deletedhist": "Get giḍi jạṛ",
        "revdelete-reasonotherlist": "Eṭaḱak karon",
        "mergehistory-reason": "Babot:",
        "revertmerge": "bań mit́",
        "history-title": "\"$1\": Jạṛ nãwã aroe",
        "difference-title": "\"$1\" ᱨᱮᱱᱟᱜ ᱫᱚᱦᱲᱟᱭᱮᱱ ᱛᱟᱞᱟᱨᱮ ᱯᱷᱟᱨᱟᱠ",
-       "lineno": "Sạr $1:",
+       "lineno": "ᱫᱷᱟᱹᱲ $1:",
        "compareselectedversions": "Noa barea nãwã bachawanaḱ talare tolonayme",
-       "editundo": "ruạṛ",
+       "editundo": "ᱨᱩᱣᱟᱹᱲ ᱟᱹᱜᱩ",
        "diff-empty": "(ᱵᱷᱮᱜᱮᱫ ᱵᱟᱹᱱᱩᱜ)",
        "diff-multi-sameuser": "({{PLURAL:$1|ᱢᱤᱫ ᱛᱟᱞᱟ-ᱢᱟᱞᱟ ᱫᱚᱦᱲᱟ|$1 ᱛᱟᱞᱟ-ᱢᱟᱞᱟ ᱫᱚᱦᱲᱟᱠᱚ}} ᱥᱚᱢᱟᱱ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱫᱟᱨᱟᱭᱛᱮ ᱵᱟᱭ ᱧᱮᱞᱚᱜ-ᱟ)",
        "diff-multi-otherusers": "({{PLURAL:$1|ᱢᱤᱫ ᱛᱟᱞᱟ-ᱢᱟᱞᱟ ᱫᱚᱦᱲᱟ|$1 ᱛᱟᱞᱟ-ᱢᱟᱞᱟ ᱫᱚᱦᱲᱟᱠᱚ}} {{PLURAL:$2|ᱢᱤᱫ ᱮᱴᱟᱜ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ|$2 ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹᱠᱚ}} ᱵᱟᱠᱚ ᱧᱮᱞᱚᱜ-ᱟ)",
-       "searchresults": "Se̠ndra pho̠l",
-       "searchresults-title": "\"$1\"  renaḱ Sẽndra  phol",
+       "searchresults": "ᱥᱮᱸᱫᱽᱨᱟ ᱚᱨᱡᱚᱠᱳ",
+       "searchresults-title": "\"$1\"  ᱨᱮᱱᱟᱜ ᱥᱮᱸᱫᱽᱨᱟ ᱯᱷᱚᱞ",
        "prevn": "Laha reaḱ {{PLURAL:$1|$1}}",
        "nextn": "Táyom teaḱ {{PLURAL:$1|$1}}",
        "prevn-title": "Laha renaḱ sakam $1 {{PLURAL:$1|result|results}}",
        "nextn-title": "Tayom $1 {{PLURAL:$1|result|results}}",
-       "shown-title": "Mit́ ṭen kateć sakam $1 {{PLURAL:$1|result|results}} nelmẽ",
+       "shown-title": "ᱥᱟᱦᱴᱟ $1 {{PLURAL:$1|ᱚᱨᱡᱚ|ᱚᱨᱡᱚᱠᱳ}} ᱩᱰᱩᱜᱽᱢᱮ",
        "viewprevnext": "Ńelme ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''Noa wiki re do \"[[:$1]] ńutum sakam menaḱa",
-       "searchmenu-new": "wiki re [[:$1]]nãwã sakam tear",
-       "searchprofile-articles": "Menaḱaḱ sakamko",
+       "searchmenu-new": "<strong>ᱥᱟᱦᱴᱟ ᱛᱮᱭᱟᱨ ᱢᱮ \"[[:$1]]\" ᱱᱚᱶᱟ ᱣᱤᱠᱤ ᱨᱮ!</strong> {{PLURAL:$2|0=|ᱟᱢᱟᱜ ᱥᱮᱸᱫᱽᱨᱟ ᱛᱮ ᱧᱟᱢᱮᱱ ᱥᱟᱦᱴᱟ ᱧᱮᱞᱢᱮ|ᱧᱟᱢᱮᱱ ᱥᱮᱸᱫᱽᱨᱟ ᱚᱨᱡᱚ ᱠᱚ ᱦᱚᱸ ᱧᱮᱞᱢᱮ}}",
+       "searchprofile-articles": "ᱥᱟᱛᱚᱢ ᱥᱟᱦᱴᱟᱠᱚ",
        "searchprofile-images": "Multimedia",
        "searchprofile-everything": "Sanamaḱ koge",
        "searchprofile-advanced": "Sompadon",
        "searchprofile-articles-tooltip": "$1 re ńelme",
        "searchprofile-images-tooltip": "File sendra",
-       "searchprofile-everything-tooltip": "Sanam ko modre sẽndra ( roṛ sakam modre hõ)",
+       "searchprofile-everything-tooltip": "ᱡᱚᱛᱚ ᱥᱟᱛᱚᱢ ᱥᱟᱦᱴᱟᱨᱮ ᱥᱮᱸᱫᱽᱨᱟᱭ ᱢᱮ (ᱨᱚᱲ ᱥᱟᱦᱴᱟ ᱠᱚᱦᱚᱸ)",
        "searchprofile-advanced-tooltip": "Judạ ńutum re sẽndra",
-       "search-result-size": "$1 ({{PLURAL:$2 1 Aṛaṅ$2 Aṛaṅko}})",
+       "search-result-size": "$1 ({{PLURAL:$2|1 ᱟᱹᱲᱟᱹ|$2 ᱟᱹᱲᱟᱹᱠᱳ}})",
        "search-result-category-size": "{{PLURAL:$1 1 gãoren $1 gãota renko}} ({{PLURAL:$2 1 kạṭic rokom sokom $ 2 goṭen}}, {{PLURAL:$3 1 rẽt $3 rẽtko}})",
        "search-redirect": "(ᱥᱚᱡᱷᱮ ᱦᱤᱡᱩᱜ-ᱟ $1 ᱠᱷᱚᱱ)",
        "search-section": "(Pahaṭa $1)",
        "timezoneregion-america": "Amirika",
        "timezoneregion-asia": "Esiya",
        "timezoneregion-australia": "Ausṭralia",
+       "prefs-searchoptions": "ᱥᱮᱸᱫᱽᱨᱟ",
        "prefs-files": "Rẽtko",
        "youremail": "E-mail:",
        "username": "Beoharićaḱ ńutum:",
        "yourrealname": "Sạri ńutum",
-       "yourlanguage": "Pạrsi:",
+       "yourlanguage": "ᱯᱟᱹᱨᱥᱤ:",
        "gender-male": "Baba hoṛ",
        "gender-female": "Gogo hoṛ, Kuṛi, Kuṛi gidrạ",
        "email": "E-mail",
        "right-createtalk": "Galmarao sakamko benaomẽ",
        "right-createaccount": "Nãwã beoharićaḱ ekaunṭ tearmẽ",
        "right-move": "Sakamko ocogmẽ",
-       "right-move-subpages": "Sakam saõte kạtic sakamko ocogmẽ",
+       "right-move-subpages": "ᱥᱟᱦᱴᱟ ᱥᱟᱦᱟᱦᱟᱭᱢᱮ ᱥᱟᱶᱛᱮᱱ ᱥᱟᱦᱴᱟᱠᱚ ᱥᱟᱶ",
        "right-movefile": "Rẽtko ocogmẽ",
        "right-upload": "Rẽtko rakabmẽ",
        "right-writeapi": "ᱚᱞ API ᱨᱮᱱᱟᱜ ᱵᱮᱵᱷᱟᱨ",
        "right-delete": "Sakamko get giḍiymẽ",
+       "right-browsearchive": "ᱥᱮᱸᱫᱽᱨᱟᱭ ᱢᱮ ᱜᱮᱫ ᱟᱠᱟᱱᱟ ᱥᱟᱦᱴᱟᱠᱚ",
        "newuserlogpage": "Laṛcaṛićaḱ tear cạbi",
        "rightslog": "ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱟᱹᱭᱫᱟᱹᱨ ᱞᱚᱜᱽ",
-       "action-edit": "noa sakam joṛao",
+       "action-edit": "ᱱᱚᱭᱟ ᱥᱟᱦᱴᱟ ᱥᱟᱯᱲᱟᱣᱢᱮ",
        "action-createaccount": "ᱱᱚᱶᱟ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱠᱷᱟᱛᱟ ᱵᱮᱱᱟᱣ",
+       "action-browsearchive": "ᱥᱮᱸᱫᱽᱨᱟᱭ ᱢᱮ ᱜᱮᱫ ᱟᱠᱟᱱᱟ ᱥᱟᱦᱴᱟᱠᱚ",
        "nchanges": "$1 {{PLURAL:$1 bodol bodolko}}",
        "enhancedrc-history": "Jạṛ",
-       "recentchanges": "Nãwã bo̠do̠lko",
+       "recentchanges": "ᱱᱟᱣᱭᱟᱱᱟᱜ ᱵᱚᱫᱚᱞᱠᱳ",
        "recentchanges-legend": "Nahaḱ bodol teaḱko",
        "recentchanges-summary": "Noa sakamre wiki reaḱ joto khon nãwã bodolko paṅjaṅjaymẽ.",
        "recentchanges-noresult": "ᱮᱢᱞᱮᱱ ᱥᱚᱢᱚᱭ ᱵᱷᱤᱛᱤᱨ ᱨᱮ ᱵᱚᱫᱚᱞᱟᱜ ᱠᱚ ᱵᱟᱭ ᱢᱤᱫᱩᱜ ᱠᱟᱱᱟ ᱾",
        "recentchanges-feed-description": "Noa feedre wiki reaḱ joto khon nãwã bodolko paṅjaymẽ",
-       "recentchanges-label-newpage": "Noa sompadon do nãwã mint́ṭen sakame tearkeda",
+       "recentchanges-label-newpage": "ᱱᱚᱣᱟ ᱥᱟᱯᱲᱟᱣ ᱢᱤᱫᱴᱮᱱ ᱱᱟᱣᱟ ᱥᱟᱦᱴᱟᱭ ᱛᱮᱭᱟᱨᱠᱮᱫᱟ",
        "recentchanges-label-minor": "Noado hudiń mạchi toṅge",
        "recentchanges-label-bot": "Noa toṅge do bot hotete purauena",
        "recentchanges-label-unpatrolled": "Noa sompadon do ńit́ hạbić baṅ ńel ńamakana",
        "recentchanges-label-plusminus": "ᱥᱟᱦᱴᱟ ᱫᱚ  ᱵᱚᱫᱚᱞᱮᱱᱟ ᱱᱤᱱᱟᱹᱜ ᱮᱞ ᱵᱟᱭᱤᱴᱥ ᱛᱮ",
        "recentchanges-legend-heading": "<strong>ᱞᱤᱡᱮᱸᱰ:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ᱟᱨᱦᱚᱸ ᱧᱮᱞᱢᱮ [[Special:NewPages|ᱱᱟᱶᱟ ᱥᱟᱦᱴᱟ ᱞᱤᱥᱴᱤ]])",
-       "rcnotefrom": "$2 habić bodolak ko do latare ńeloḱkana",
+       "rcnotefrom": "ᱞᱟᱛᱟᱨ {{PLURAL:$5|ᱵᱚᱫᱚᱞ|ᱵᱚᱫᱚᱞ ᱠᱚ}} <strong>$3, $4</strong> ᱠᱷᱚᱱ (<strong>$1</strong> ᱦᱟᱹᱵᱤᱡ ᱩᱫᱩᱜ-ᱮᱱᱟ)",
        "rclistfrom": "Nãwã  bodolko uduḱme $3 $2 khon ehoṕkate",
        "rcshowhideminor": "$1 kaṭic culuń tońgeko",
        "rcshowhideminor-show": "Uduḱme",
        "rcshowhidemine-show": "Uduḱme",
        "rcshowhidemine-hide": "Danaṅ",
        "rclinks": "$2 din lahare $1 bodol unuduḱme",
-       "diff": "Judạ",
-       "hist": "Jạr",
+       "diff": "ᱡᱩᱫᱟᱹ",
+       "hist": "ᱱᱟᱜᱟᱢ",
        "hide": "Danaṅ",
        "show": "Uduḱme",
        "minoreditletter": "m",
        "rc-old-title": "ᱚᱥᱚᱞᱨᱮ ᱛᱮᱭᱟᱨᱟᱠᱟᱱᱟ \"$1\" ᱞᱮᱠᱟᱛᱮ",
        "recentchangeslinked": "Sãotenaḱ bodolko",
        "recentchangeslinked-feed": "ᱥᱟᱹᱜᱟᱹᱭᱟᱱ ᱵᱚᱫᱚᱞᱠᱚ",
-       "recentchangeslinked-toolbox": "Noṛjoṛ palaṭko",
+       "recentchangeslinked-toolbox": "ᱥᱟᱹᱜᱟᱹᱭᱟᱱ ᱵᱚᱫᱚᱞᱠᱚ",
        "recentchangeslinked-title": "Bodolaḱko do \"$1\" sãote joṛao geya",
-       "recentchangeslinked-summary": "Noa do ona tạlika kana oka do nebetarge bodol hoyakan oka do asokayte hatao akan sakam khon.\n\n[[Special:Watchlist|your watchlist]] renaḱ sakamko do '''bold''' .",
+       "recentchangeslinked-summary": "ᱱᱚᱣᱟ ᱫᱚ ᱚᱱᱟ ᱛᱟᱹᱞᱠᱟᱹ ᱠᱟᱱᱟ ᱚᱠᱟ ᱫᱟ ᱱᱮᱵᱮᱛᱟᱨᱜᱮ ᱵᱚᱫᱚᱞ ᱦᱩᱭ ᱟᱠᱟᱱᱟ ᱚᱠᱟ ᱫᱚ category ᱦᱟᱛᱟᱣ ᱟᱠᱟᱱ ᱥᱟᱠᱟᱢ ᱠᱷᱚᱱ᱾\n\n[[Special:Watchlist|your watchlist]] ᱨᱮᱭᱟᱜ ᱥᱟᱦᱴᱟ ᱫᱚ'''bold''' .",
        "recentchangeslinked-page": "sakạm ńutum",
        "recentchangeslinked-to": "Joṛaoaḱ sakamre ńel ocoyme emaḱ sakam bạgi katet",
-       "upload": "Phayel aploḍme",
+       "upload": "ᱨᱮᱫ ᱞᱟᱫᱮᱢᱮ",
        "uploadbtn": "Rẽt rakabmẽ",
        "uploadlogpage": "Chạbi do uthạome",
        "filename": "Rẽt ńutum",
        "upload-description": "Rẽt reaḱ jạṛ",
        "watchthisupload": "Noa rẽt ńelmẽ",
        "upload-file-error": "Bhitri reaḱ bhul",
+       "upload-form-label-infoform-date": "ᱢᱟᱹᱦᱤᱛ",
        "license": "Laisence benao",
        "license-header": "Laisense benao",
        "imgfile": "Rẽt",
        "listfiles_name": "Ńutum",
        "listfiles_user": "Beoharić, Laṛcaṛic",
        "file-anchor-link": "Re̕t",
-       "filehist": "Phayel reaḱ Jạṛ",
+       "filehist": "ᱨᱮᱫ ᱨᱮᱭᱟᱜ ᱱᱟᱜᱟᱢ",
        "filehist-help": "date re click me/somóy re click me fail reak obostha nel lagit",
        "filehist-deleteall": "Joto get giḍi",
        "filehist-deleteone": "Get giḍi",
        "filehist-current": "Nitaḱ",
        "filehist-datetime": "̣Tạrikh/So̠mo̠y",
        "filehist-thumb": "Ṭip",
-       "filehist-thumbtext": "$1 lekan thambnail varson",
+       "filehist-thumbtext": "Thumbnail for version as of $1",
        "filehist-nothumb": "ᱵᱟᱹᱱᱩᱜ-ᱟ ᱴᱤᱯ-ᱨᱟᱢᱟ",
        "filehist-user": "Laṛcaṛić",
        "filehist-dimensions": "Maṕ",
        "filehist-comment": "Roṛ",
-       "imagelinks": "Phayel bebohar",
-       "linkstoimage": "Latar reaḱ {{PLURAL:$1 sakam $1 sakam}} khon noa rẽtre joṛao menaḱa:",
+       "imagelinks": "ᱯᱷᱟᱭᱤᱞ ᱵᱮᱣᱦᱟᱨ",
+       "linkstoimage": "ᱞᱟᱛᱟᱨ ᱨᱮᱭᱟᱜ {{PLURAL:$1|ᱥᱟᱦᱴᱟ ᱡᱚᱱᱚᱲᱠᱚ|$1 ᱥᱟᱦᱴᱟᱠᱚ ᱡᱚᱱᱚᱲ}} ᱱᱤᱭᱟᱹ ᱨᱮᱫ ᱨᱮ:",
        "linkstoimage-more": "$1 ᱠᱷᱚᱱ ᱵᱟᱹᱲᱛᱤ {{PLURAL:$1|ᱥᱟᱦᱴᱟ ᱡᱚᱯᱲᱟᱣᱠᱚ|ᱥᱟᱦᱴᱟ ᱡᱚᱯᱲᱟᱣ}} ᱢᱮᱱᱟᱜ-ᱟ ᱱᱚᱣᱟ ᱨᱮᱫ ᱥᱟᱶ ᱾\nᱱᱚᱶᱟ ᱞᱤᱥᱴᱤ ᱩᱫᱩᱜᱮᱜ-ᱟᱭ {{PLURAL:$1|ᱮᱛᱚᱦᱚᱵ ᱥᱟᱦᱴᱟ ᱡᱚᱲᱟᱣ|ᱮᱛᱚᱦᱚᱵ $1 ᱥᱟᱦᱴᱟ ᱡᱚᱲᱟᱣᱠᱚ}} ᱥᱩᱢᱩᱝ ᱱᱚᱶᱟ ᱨᱮᱫ ᱥᱟᱶ ᱾\nᱢᱤᱫ [[Special:WhatLinksHere/$2|ᱡᱚᱛᱚ ᱞᱤᱥᱴᱤ]] ᱢᱮᱱᱟᱜ-ᱟ ᱾",
-       "nolinkstoimage": "Nonḍe do noa são joṛao sakam banuka",
+       "nolinkstoimage": "ᱱᱚᱸᱰᱮ ᱫᱚ ᱟᱨ ᱮᱴᱟᱜ ᱥᱟᱦᱴᱟᱠᱚ ᱵᱟᱱᱩᱜ-ᱟ ᱡᱟᱸᱦᱟᱸ ᱥᱟᱶᱛᱮ ᱱᱤᱭᱟᱹ ᱨᱮᱫ ᱨᱮᱱᱟᱜ ᱡᱚᱱᱚᱲ ᱢᱮᱱᱟᱜ-ᱟ",
        "linkstoimage-redirect": "$1 (ᱨᱮᱫ ᱢᱚᱦᱰᱟᱜ-ᱟ) $2",
-       "sharedupload-desc-here": "Noa rẽt do nonḍe khon-  $1 ar paseć eṭaḱaḱ porjekṭko beoharakana.\nNoa reaḱ pasnao katha [$2 rẽt pasnao sakam] latare emena",
+       "sharedupload-desc-here": "ᱱᱚᱣᱟ ᱨᱮᱫ ᱫᱚ ᱱᱚᱸᱰᱮ ᱠᱷᱚᱱ $1 ᱟᱨ ᱯᱟᱥᱮᱡ ᱮᱴᱟᱜ-ᱟ ᱯᱚᱨᱡᱮᱠᱴ ᱨᱮᱦᱚᱸ ᱵᱮᱵᱦᱟᱨᱚᱜ ᱠᱟᱱᱟ᱾\nᱱᱚᱣᱟ ᱨᱮᱭᱟ ᱯᱟᱥᱱᱟᱣ ᱠᱟᱛᱷᱟ [$2 ᱨᱮᱫ ᱯᱟᱥᱱᱟᱣ ᱥᱟᱦᱴᱟ] ᱞᱟᱛᱟᱨᱨᱮ ᱮᱢ ᱮᱱᱟ᱾",
        "filepage-nofile": "ᱱᱚᱶᱟ ᱧᱩᱛᱩᱢᱟᱜ ᱨᱮᱫ ᱵᱟᱹᱱᱩᱜ-ᱟ ᱾",
        "upload-disallowed-here": "Am do noa phayel cetanre bam ol daṛẽaḱa",
-       "randompage": "Joṛao sakam",
+       "mimesearch": "MIME ᱥᱮᱸᱫᱽᱨᱟ",
+       "randompage": "ᱡᱚᱲᱟᱣ ᱥᱟᱦᱴᱟ",
        "statistics": "Halot",
        "statistics-pages": "Sakamko",
        "double-redirect-fixer": "ᱢᱚᱸᱦᱟᱰᱟ ᱴᱷᱟᱹᱣᱠᱟᱹᱭᱤᱡ",
-       "nbytes": "$1 {{PLURAL:$1|baiṭ|baiṭ}}",
+       "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
        "nmembers": "$1 {{PLURAL:$1 Gaõtaren Gaõtarenko}}",
-       "prefixindex": "Sanam sakam re joṛao menaḱ",
+       "prefixindex": "ᱡᱚᱛᱚ ᱥᱟᱦᱴᱟᱠᱚ prefix ᱥᱟᱶ",
        "shortpages": "Huḍiń sakamko",
        "longpages": "Jiliń sakamko",
        "listusers": "beoharićaḱ tạlika",
+       "listusers-creationsort": "ᱛᱮᱭᱟᱨᱟᱠᱟᱱ ᱢᱟᱹᱦᱤᱛ ᱞᱮᱠᱟᱛᱮ ᱯᱟᱱᱛᱮ",
        "usercreated": "{{JẠT: $3 | benawakan}} $1 tarikre $2 okte",
-       "newpages": "Nãwa Patako",
+       "newpages": "ᱱᱟᱶᱟ ᱥᱟᱦᱴᱟᱠᱳ",
        "newpages-username": "Beoharićaḱ ńutum:",
        "ancientpages": "Mare sakamko",
        "move": "Ocoḱme, Kulme",
-       "movethispage": "Noa sakam ocogmẽ",
+       "movethispage": "ᱱᱚᱶᱟ ᱥᱟᱦᱴᱟ ᱥᱟᱦᱟᱭᱢᱮ",
        "pager-newer-n": "{{PLURAL:$1 nãwaw aroyen 1ṭen nãwã aroyen $1ṭen}}",
        "pager-older-n": "{{PLURAL:$1 arhõ mare 1ṭen arhõ mare $1ṭen}}",
        "booksources": "Puthi ńamoḱ ṭhại/jayga",
        "speciallogtitlelabel": "ᱡᱚᱥ (ᱧᱩᱛᱩᱢ ᱟᱨᱵᱟᱝ {{ns:user}}:ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱞᱟᱹᱜᱩᱫ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱧᱩᱛᱩᱢ):",
        "log": "Cạbiko",
        "all-logs-page": "ᱡᱚᱛᱚ ᱫᱤᱥᱣᱟᱹ ᱞᱚᱜᱽ ᱠᱚ",
+       "alllogstext": "ᱢᱮᱥᱟᱠᱟᱛᱮ ᱩᱫᱩᱜᱽᱢᱮ ᱡᱚᱛᱚ ᱢᱮᱱᱟᱜ {{SITENAME}} ᱞᱚᱜᱽᱠᱚ ᱾\nᱧᱮᱞᱚᱜ ᱠᱚᱢ ᱠᱟᱹᱡ ᱫᱟᱲᱮᱭᱟᱠᱚᱣᱟ ᱞᱚᱜᱽ ᱞᱮᱠᱟᱱ, ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ ᱧᱩᱛᱩᱢ (case-sensitive), ᱟᱨᱵᱟᱝ ᱯᱨᱚᱵᱷᱟᱵᱟᱱ ᱥᱟᱦᱴᱟ (also case-sensitive) ᱠᱚ ᱵᱟᱪᱷᱚᱱ ᱠᱟᱛᱮ ᱾",
        "logempty": "ᱞᱚᱜᱽ ᱨᱮ ᱚᱱᱟᱞᱮᱠᱟᱱ ᱡᱤᱱᱤᱥ ᱵᱟᱹᱱᱩᱜ-ᱟ ᱾",
-       "allpages": "joto sakam",
-       "allarticles": "Sanam sakam",
+       "allpages": "ᱡᱚᱛᱚ ᱥᱟᱦᱴᱟ",
+       "allarticles": "ᱡᱚᱛᱚ ᱥᱟᱦᱴᱟᱠᱳ",
        "allpagessubmit": "Calaḱme",
        "allpages-hide-redirects": "ᱢᱚᱦᱰᱟᱦᱟᱜᱠᱚ ᱫᱟᱱᱟᱝ",
        "categories": "rokom sokom",
+       "linksearch-ok": "ᱥᱮᱸᱫᱽᱨᱟ",
        "linksearch-line": "$2 khon $1 re joṛao hoeakana",
        "listusers-submit": "Udugmẽ",
        "listusers-blocked": "(Esetgea)",
        "watchlistfor2": "$1 ($2) lạ̣gitte",
        "watch": "Ńelme",
        "unwatch": "bang nelok' a",
-       "watchlist-details": "Baṅ purạo tạlikare {{PLURAL:$1ṭen sakam $1 ṭen sakam}} menaḱa (roṛ sakamko lekhare baṅ sapkate)",
+       "watchlist-details": "ᱵᱟᱝ ᱯᱩᱨᱟᱹᱣ ᱛᱟᱹᱞᱠᱟᱹᱨᱮ{{PLURAL:$1 ᱥᱟᱦᱴᱟ $1 ᱥᱟᱦᱴᱟ}} ᱢᱮᱱᱟᱜ-ᱟ (ᱨᱚᱲ ᱥᱟᱦᱴᱟ ᱠᱚᱦᱚᱸ)",
+       "wlheader-showupdated": "ᱟᱢᱟᱜ ᱢᱩᱪᱟᱹᱫ ᱵᱚᱞᱚᱝᱨᱮ ᱡᱟᱸᱦᱟᱸ ᱥᱟᱦᱴᱟ ᱠᱚᱢ ᱵᱚᱫᱚᱞ ᱞᱮᱫᱟ ᱚᱱᱟᱠᱩ ᱧᱮᱞᱚᱜ-ᱟ <strong>bold</strong>.",
        "wlnote": "ᱞᱟᱛᱟᱨ ᱨᱮᱱᱟᱜ {{PLURAL:$1|ᱫᱚ ᱢᱩᱪᱟᱹᱫ ᱵᱚᱫᱚᱞ ᱠᱟᱱᱟ|ᱠᱚ ᱫᱚ ᱢᱩᱪᱟᱹᱫ <strong>$1</strong> ᱵᱚᱫᱚᱞᱠᱟᱱᱟ}} ᱢᱩᱪᱟᱹᱫ ᱨᱮ {{PLURAL:$2|ᱴᱟᱲᱟᱝ|<strong>$2</strong> ᱴᱟᱲᱟᱝ}},  $3, $4 ᱞᱮᱠᱟᱛᱮ ᱾",
-       "wlshowlast": "Mucạtet́ udukmẽ $1 baje $2 maha",
+       "wlshowlast": "ᱢᱩᱪᱟᱹᱛ ᱩᱫᱩᱜᱢᱮ $1 ᱴᱟᱲᱟᱝ $2 ᱢᱟᱦᱟᱸ",
        "watchlist-options": "Ńelok tạlika reak sonketko",
        "watching": "Ńeloḱ kana...",
        "enotif_reset": "ᱱᱤᱱᱦᱟᱹᱭᱢᱮ ᱡᱚᱛᱚ ᱥᱟᱦᱴᱟ ᱦᱤᱨᱤᱭᱟᱠᱟᱱᱟ",
        "changed": "Bodolena",
-       "deletepage": "Sakam get giḍikam",
+       "deletepage": "ᱥᱟᱦᱴᱟ ᱜᱮᱫᱽ ᱢᱮ",
        "delete-legend": "Get giḍi",
        "actioncomplete": "kami Chabae-ena",
        "actionfailed": "Kami bang hoe-lena",
        "restriction-create": "Tearmẽ, Benaomẽ",
        "undeletelink": "Ńel/doho ruạṛ",
        "undeleteviewlink": "Ńel",
+       "undelete-search-submit": "ᱥᱮᱸᱫᱽᱨᱟ",
        "namespace": "Ńutum reaḱ ṭhai",
        "invert": "Seć bachao",
        "tooltip-invert": "ᱱᱚᱶᱟ ᱵᱟᱠᱥᱟ ᱴᱤᱠ ᱢᱮ ᱥᱟᱦᱴᱟ ᱠᱷᱚᱱ ᱵᱚᱫᱚᱞᱟᱜᱠᱚ ᱫᱟᱱᱟᱝ ᱞᱟᱹᱜᱤᱫ  ᱵᱟᱛᱷᱚᱱ ᱨᱟᱠᱷᱟ ᱧᱩᱛᱩᱢ ᱥᱟᱶᱛᱮ (ᱟᱨ ᱡᱚᱯᱚᱲᱟᱣᱟᱱ ᱨᱟᱠᱷᱟ ᱧᱩᱛᱩᱢ ᱡᱩᱫᱤ ᱴᱤᱠ ᱟᱠᱟᱱᱟ)",
        "namespace_association": "ᱥᱚᱦᱚᱫᱤᱭᱟᱹ ᱨᱟᱠᱷᱟ ᱧᱩᱛᱩᱢ",
        "tooltip-namespace_association": "ᱱᱚᱶᱟ ᱵᱟᱠᱥᱟ ᱴᱤᱠ ᱢᱮ ᱨᱚᱯᱚᱲ ᱵᱟᱝᱠᱷᱟᱱ ᱥᱟᱛᱟᱢ ᱨᱟᱠᱷᱟ ᱧᱩᱛᱩᱢ ᱵᱟᱪᱷᱚᱱ ᱟᱠᱟᱱ ᱨᱟᱠᱷᱟ ᱧᱩᱛᱩᱢ ᱥᱟᱶ ᱡᱚᱯᱚᱲᱟᱣ ᱟᱠᱟᱱᱟᱜ",
-       "blanknamespace": "Mukhiạ̣",
+       "blanknamespace": "(ᱢᱩᱬᱩᱛ)",
        "contributions": "{{GENDER:$1|Beoharićaḱ }} Kạmiko",
        "contributions-title": "$1 Beoharićaḱ kạmiko",
        "mycontris": "Ińaḱ kạmiko",
        "anoncontribs": "Ińaḱ kạmiko",
-       "contribsub2": "$1 ($2) lạgitte",
+       "contribsub2": "{{GENDER:$3|$1}} ($2) ᱞᱟᱹᱜᱤᱫ ᱛᱮ",
        "nocontribs": "ᱱᱚᱶᱟ ᱮᱢᱟᱜ ᱥᱟᱶ ᱡᱚᱲᱟᱣᱟᱱ ᱵᱚᱫᱚᱞᱠᱚ ᱵᱟᱭ ᱧᱟᱢᱞᱮᱱᱟ |",
        "uctop": "(ᱱᱤᱛᱚᱜ)",
        "month": "Cando khon (ar etohopreaḱ)",
        "sp-contributions-toponly": "Khạli nahaḱ nãwã aroyen joṛao kamiko udukme",
        "sp-contributions-newonly": "ᱥᱩᱢᱩᱝ ᱟᱹᱨᱩᱠᱚ ᱥᱚᱫᱚᱨᱢᱮ ᱡᱟᱦᱟᱸ ᱥᱟᱦᱟᱴᱟ ᱫᱚ ᱥᱤᱨᱡᱟᱹᱣᱟᱜ ᱠᱟᱱᱟ",
        "sp-contributions-submit": "Sendra",
-       "whatlinkshere": "Cet́ link ko no̠nḍe do",
+       "whatlinkshere": "ᱱᱚᱸᱰᱮ ᱫᱚ ᱪᱮᱫ ᱡᱚᱱᱚᱲ ᱠᱳ",
        "whatlinkshere-title": "Oka sakam ko do \"$1\"-re joṛao menaḱa",
-       "whatlinkshere-page": "Sakam",
+       "whatlinkshere-page": "ᱥᱟᱦᱴᱟ",
        "linkshere": "Latar reaḱ sakamko do '''[[:$1]]''' sakamre joṛao menaḱa:",
-       "nolinkshere": "Jahan sakam khon '''[[:$1]]''' sakamre joṛao bạnuḱa",
-       "isredirect": "Bań sojhe sakam",
+       "nolinkshere": "ᱥᱟᱦᱴᱟ ᱡᱚᱱᱚᱲ ᱵᱟᱱᱩᱜ-ᱟ ᱱᱤᱭᱟᱹ <strong>[[:$1]]</strong>.",
+       "isredirect": "ᱵᱟᱝ ᱥᱚᱡᱽᱦᱮ ᱥᱟᱦᱴᱟ",
        "istemplate": "Ar mit́ teć sãote joṛao",
        "isimage": "Ret joṛao",
        "whatlinkshere-prev": "{{PLURAL:$1 Laha reaḱ Laha reaḱ$1ṭen}}",
        "whatlinkshere-hideredirs": "$1 arhõ unuduḱ",
        "whatlinkshere-hidetrans": "Selet́ $1",
        "whatlinkshere-hidelinks": "$1 joṛaoko",
-       "whatlinkshere-hideimages": "$1 Chubi joṛaoko",
+       "whatlinkshere-hideimages": "$1 ᱨᱮᱫ ᱡᱳᱱᱳᱲᱠᱚ",
        "whatlinkshere-filters": "Sapha",
        "block": "Beoharić esedem",
        "blockip": "Beoharić esedem",
        "ipboptions": "2 Ghonṭa : 2 hours, 1 maha:1 day, 3 maha : 3 days,1 hapta :1 week, 2 hapta : 2 weeks, 1 cando :1 month, 3 cando : 3 months,6 cando :6 months,  1 serma :1 year,  Aemamaha : infinite",
+       "autoblocklist-submit": "ᱥᱮᱸᱫᱽᱨᱟ",
        "ipblocklist": "Beoharic esetgeyay",
        "ipblocklist-submit": "Sendra",
        "infiniteblock": "ᱚᱦᱤᱥᱟᱹᱵᱽ",
        "blocklink": "Eset́",
        "unblocklink": "bań block",
        "change-blocklink": "block judạ",
-       "contribslink": "em daṛeaḱ",
+       "contribslink": "ᱮᱱᱮᱢ",
        "emaillink": "E-mail kulmẽ",
        "blocklogpage": "Tala eset",
        "blocklogentry": "Eset [[$1]] sãote cabaḱ okte oka do $2 $3",
        "block-log-flags-noemail": "E-mail do esetgea",
        "block-log-flags-hiddenname": "Beoharićaḱ ńutum do ukugea",
        "proxyblocker": "ᱯᱨᱚᱠᱥᱤ ᱮᱥᱮᱫᱤᱡ",
-       "movepagebtn": "Sakam ocogmẽ, Sakam kulmẽ",
+       "movepagebtn": "ᱥᱟᱦᱴᱟ ᱥᱟᱦᱟᱭᱢᱮ",
        "pagemovedsub": "Ocogoḱ do hoena",
        "movelogpage": "Tala cạbi ocoḱme",
        "revertmove": "ruạr agu",
        "allmessagesdefault": "Bań bhul mesag ol",
        "allmessages-filter-all": "Sanamaḱ",
        "allmessages-filter-submit": "Calaḱmẽ",
-       "thumbnail-more": "Lạṭui mẽ",
+       "thumbnail-more": "ᱞᱟᱹᱴᱩᱭ ᱢᱮ",
        "thumbnail_error": "Benawakan unuduḱ kạṭuṕ do baṅ ṭhika: $1",
        "import-upload-filename": "Rẽt ńutum",
        "importlogpage": "ᱞᱚᱜᱽ ᱟᱹᱜᱩ",
-       "tooltip-pt-userpage": "{{GENDER:|am beoharićaḱ}} sakam",
-       "tooltip-pt-mytalk": "{{GENDER:|Amaḱ}} ro̠ṛreaḱ́ sakam",
+       "tooltip-pt-userpage": "{{GENDER:|ᱟᱢᱟᱜ ᱵᱮᱵᱦᱟᱨᱤᱭᱟᱹ}} ᱥᱟᱦᱴᱟ",
+       "tooltip-pt-mytalk": "{{GENDER:|ᱟᱢᱟᱜ}} ᱨᱚᱲ ᱥᱟᱦᱴᱟ",
        "tooltip-pt-preferences": "{{GENDER:|Amaḱ}} pạsindko",
        "tooltip-pt-watchlist": "Sakam tạlika okaṭak̕katet́ am do nãwã aroy lạgitem ńeleḱkan",
        "tooltip-pt-mycontris": "Mit́ṭen lisṭ {{GENDER:|amaḱ}} kạmiko reaḱ",
-       "tooltip-pt-login": "Am do boloḱ lagit́te udgạoiń emamkana; Nonḍe boloḱ unạḱ jarur do bań kana",
+       "tooltip-pt-login": "ᱟᱢ ᱫᱚ ᱵᱚᱞᱟᱜ ᱞᱟᱹᱜᱤᱛ ᱩᱫᱽᱜᱟᱣᱤᱧ ᱮᱢᱟᱢᱠᱟᱱᱟ; ᱵᱚᱞᱚᱜ ᱞᱟᱜᱟᱜ-ᱟ ᱚᱝᱠᱟ ᱫᱚ ᱵᱟᱝ",
        "tooltip-pt-logout": "O̠nḍo̠ńme",
-       "tooltip-pt-createaccount": "Am do mit́ṭen hisạb jhić katet́ boloniń metamkana, tobe joborjosti katet́ do baṅ.",
-       "tooltip-ca-talk": "Galmãrao bhitri renaḱ sakam lạgit́",
-       "tooltip-ca-edit": "Noa sakam joṛaome",
+       "tooltip-pt-createaccount": "ᱟᱢ ᱫᱚ ᱢᱤᱫᱽᱴᱮᱱ ᱦᱤᱥᱟᱹᱵ ᱡᱷᱤᱪ ᱠᱟᱛᱮ ᱵᱚᱞᱚᱜ ᱞᱟᱹᱜᱤᱛᱤᱧ ᱩᱫᱽᱜᱟᱣᱮᱛ ᱢᱮᱭᱟ; ᱟᱫᱚ ᱡᱟᱹᱨᱩᱲ ᱵᱚᱞᱚᱜ ᱚᱝᱠᱟ ᱫᱚ ᱵᱟᱝ ᱠᱟᱱᱟ",
+       "tooltip-ca-talk": "ᱥᱟᱛᱚᱢ ᱥᱟᱦᱴᱟ ᱞᱟᱹᱜᱤᱛ ᱜᱟᱞᱢᱟᱨᱟᱣ",
+       "tooltip-ca-edit": "ᱱᱚᱭᱟ ᱥᱟᱦᱴᱟ ᱥᱟᱯᱲᱟᱣᱢᱮ",
        "tooltip-ca-addsection": "Nãwã sekson sạrdi",
        "tooltip-ca-viewsource": "Noa sakam do poṭom gea\nOna te source em ńel daṛeaḱ",
-       "tooltip-ca-history": "Noa sakam renaḱ calao parom ńel ruạṛ",
-       "tooltip-ca-protect": "ñia sakam bachaome",
-       "tooltip-ca-delete": "nia sakam muchau me",
-       "tooltip-ca-move": "Noa sakam kulme",
-       "tooltip-ca-watch": "Noa sakam do amaḱ ńelok tạlikare joṛaome",
+       "tooltip-ca-history": "ᱱᱚᱭᱟ ᱥᱟᱦᱴᱟ ᱨᱮᱱᱟᱜ ᱮᱱᱟᱝ ᱱᱟᱝ ᱧᱮᱞ ᱨᱩᱟᱹᱲ",
+       "tooltip-ca-protect": "ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱨᱩᱠᱷᱤᱭᱟᱹᱭ ᱢᱮ",
+       "tooltip-ca-delete": "ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱜᱮᱫᱽ ᱢᱮ",
+       "tooltip-ca-move": "ᱱᱚᱣᱲ ᱥᱟᱦᱴᱟ ᱠᱩᱞᱢᱮ",
+       "tooltip-ca-watch": "ᱱᱚᱭᱟ ᱥᱟᱦᱴᱟ ᱫᱚ ᱟᱢᱟᱜ ᱧᱮᱞᱚᱜ ᱛᱟᱹᱞᱠᱟᱹᱨᱮ ᱡᱚᱲᱟᱣᱢᱮ",
        "tooltip-ca-unwatch": "Amaḱ ńeloḱ tạlika khon noa sakam bagiyam",
-       "tooltip-search": "Sendra {{Saiṭñitum}}",
-       "tooltip-search-go": "Mitṭen sakamre calaḱme one okare noa ńutum menaḱa",
-       "tooltip-search-fulltext": "Noa ol ńam lạgit sakamko ńelme",
-       "tooltip-p-logo": "Mukhiạ sakamre calaḱme",
-       "tooltip-n-mainpage": "Mukhiạ sakamre calaḱme",
-       "tooltip-n-mainpage-description": "Mukhiạ sakamre calaḱme",
-       "tooltip-n-portal": "Niạ pro̠je̠ḱ́ṭreaḱ Biso̠yko, Cet́em ceka daṛia,Okare̠ sendra ñamoḱ́a",
-       "tooltip-n-currentevents": "Nitaḱ events re jos hudis ńãm me",
-       "tooltip-n-recentchanges": "Uikire nãhaḱ bodolko reaḱ tạlikạ",
-       "tooltip-n-randompage": "Ãr hõ sakam ko agui mẽ",
-       "tooltip-n-help": "Sendra ñamreaḱ jayga",
-       "tooltip-t-whatlinkshere": "Sanam wiki sakam renaḱ list ar link do nonde",
-       "tooltip-t-recentchangeslinked": "Noa sakam re nitaḱ bodol akan sakam renaḱ linked",
+       "tooltip-search": "ᱥᱮᱸᱫᱽᱨᱟ {{SITENAME}}",
+       "tooltip-search-go": "ᱱᱚᱭᱟ ᱧᱤᱛᱩᱢᱟᱱ ᱥᱟᱦᱴᱟᱨᱮ ᱪᱟᱞᱟᱜᱢᱮ ᱡᱩᱫᱤ ᱛᱟᱸᱦᱮᱸᱱᱠᱷᱟᱱ",
+       "tooltip-search-fulltext": "ᱱᱚᱣᱟ ᱚᱞ ᱥᱟᱦᱴᱟᱠᱚᱨᱮ ᱥᱮᱸᱫᱽᱨᱟᱭᱢᱮ",
+       "tooltip-p-logo": "ᱢᱩᱬᱩᱛ ᱥᱟᱦᱴᱟᱨᱮ ᱪᱟᱞᱟᱜᱢᱮ",
+       "tooltip-n-mainpage": "ᱢᱩᱬᱩᱛ ᱥᱟᱦᱴᱟ ᱪᱟᱞᱟᱜᱢᱮ",
+       "tooltip-n-mainpage-description": "ᱢᱩᱬᱩᱛ ᱥᱟᱦᱴᱟ ᱪᱟᱞᱟᱜᱢᱮ",
+       "tooltip-n-portal": "ᱱᱤᱭᱟᱹ ᱯᱨᱚᱡᱮᱠᱴ ᱠᱷᱟᱹᱛᱤᱨ, ᱪᱮᱛᱮᱢ ᱪᱮᱠᱟ ᱫᱟᱨᱮᱭᱟᱜ-ᱟ,ᱚᱠᱟᱨᱮ ᱥᱮᱸᱫᱽᱨᱟ ᱧᱟᱢᱚᱜ-ᱟ",
+       "tooltip-n-currentevents": "ᱱᱤᱛᱚᱜ events ᱨᱮ ᱡᱚᱥ ᱦᱩᱫᱤᱥ ᱧᱟᱢ ᱢᱮ",
+       "tooltip-n-recentchanges": "ᱩᱤᱠᱤ ᱨᱮ ᱱᱟᱣᱭᱟ ᱵᱚᱫᱚᱞᱠᱳ ᱨᱮᱭᱟᱜ ᱛᱟᱹᱞᱠᱟᱹ",
+       "tooltip-n-randompage": "ᱟᱨᱦᱚᱸ ᱥᱟᱦᱴᱟᱠᱳ ᱩᱫᱩᱜᱽ ᱢᱮ",
+       "tooltip-n-help": "ᱥᱮᱸᱫᱽᱨᱟ ᱧᱟᱢ ᱨᱮᱭᱟᱜ ᱡᱟᱜᱟ",
+       "tooltip-t-whatlinkshere": "ᱥᱟᱱᱟᱢ ᱩᱤᱠᱤ ᱥᱟᱦᱴᱟ ᱨᱮᱱᱟᱜ ᱛᱟᱹᱞᱠᱟᱹ ᱟᱨ ᱡᱚᱱᱚᱲ ᱫᱚ ᱱᱚᱸᱰᱮ",
+       "tooltip-t-recentchangeslinked": "ᱱᱚᱭᱟ ᱥᱟᱦᱴᱟ ᱨᱮ ᱨᱚᱠᱟ ᱵᱚᱫᱚᱞ ᱟᱠᱟᱱ ᱥᱟᱦᱴᱟ ᱨᱮᱱᱟᱜ ᱡᱚᱱᱚᱲ",
        "tooltip-feed-atom": "Noa sakam lạgit́ atom phiḍ",
-       "tooltip-t-contributions": "Beoharićak kami reaḱ tạ̣lika",
-       "tooltip-t-emailuser": "Nui beoharić mitṭen e-mail kulayme",
-       "tooltip-t-upload": "Phayelko aploḍ̣me",
-       "tooltip-t-specialpages": "Jạruṛ patakureaḱ tạlikạ",
-       "tooltip-t-print": "Printoḱ lekan sakam",
-       "tooltip-t-permalink": "Terejuge joṛaokam ñel sakam",
-       "tooltip-ca-nstab-main": "Bahal sakam ńel me",
-       "tooltip-ca-nstab-user": "Beoharićaḱ sakam uduḱme",
-       "tooltip-ca-nstab-special": "Noa do mit́ṭen bises sakam kana, ar noa do bam joṛao daṛẽaḱa",
-       "tooltip-ca-nstab-project": "projeṭ sakam ńelmẽ",
-       "tooltip-ca-nstab-image": "Fael sakam ńel",
+       "tooltip-t-contributions": "ᱮᱱᱮᱢ ᱨᱮᱱᱟᱜ ᱛᱟᱹᱞᱠᱟᱹ {{GENDER:$1|ᱱᱩᱭ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ}}",
+       "tooltip-t-emailuser": "ᱢᱤᱫ ᱤᱢᱮᱞ ᱠᱩᱞᱟᱭᱢᱮ {{GENDER:$1|ᱱᱩᱭ ᱵᱮᱵᱷᱟᱨᱤᱭᱟᱹ}}",
+       "tooltip-t-upload": "ᱨᱮᱫ ᱠᱚ ᱞᱟᱫᱮᱢᱮ",
+       "tooltip-t-specialpages": "ᱡᱟᱹᱨᱩᱲ ᱥᱟᱦᱴᱟᱠᱳ ᱨᱮᱱᱟᱜ ᱛᱟᱹᱞᱠᱟᱹ",
+       "tooltip-t-print": "ᱱᱤᱭᱟᱹ ᱥᱟᱦᱴᱟ ᱨᱮᱱᱟᱜ ᱯᱨᱤᱱᱴ ᱜᱟᱱᱚᱜ ᱚᱰᱚᱫ",
+       "tooltip-t-permalink": "ᱱᱚᱭᱟ ᱥᱟᱦᱴᱟ ᱨᱮᱱᱟᱜ ᱥᱟᱯᱲᱟᱣᱠᱳ ᱨᱮᱱᱟᱜ ᱛᱤᱨᱮᱡᱩᱜᱮ ᱡᱚᱱᱚᱲ",
+       "tooltip-ca-nstab-main": "ᱩᱱᱩᱫᱩᱜ ᱥᱟᱦᱴᱟ ᱧᱮᱞ ᱢᱮ",
+       "tooltip-ca-nstab-user": "ᱵᱮᱵᱦᱟᱹᱨᱤᱭᱟᱜ ᱥᱟᱦᱴᱟ ᱧᱮᱞᱢᱮ",
+       "tooltip-ca-nstab-special": "ᱱᱚᱭᱟ ᱫᱚ ᱵᱤᱥᱮᱥ ᱥᱟᱦᱴᱟ ᱠᱟᱱᱟ, ᱟᱨ ᱱᱚᱭᱟ ᱫᱚ ᱵᱟᱢ ᱥᱟᱯᱲᱟᱣ ᱫᱟᱲᱮᱭᱟᱜ-ᱟ",
+       "tooltip-ca-nstab-project": "ᱯᱨᱚᱡᱮᱠᱴ ᱥᱟᱦᱴᱟ ᱧᱮᱞᱢᱮ",
+       "tooltip-ca-nstab-image": "ᱨᱮᱫ ᱥᱟᱦᱴᱟ ᱧᱮᱞᱢᱮ",
        "tooltip-ca-nstab-mediawiki": "ᱥᱤᱥᱴᱚᱢ ᱢᱮᱥᱮᱡᱽ ᱧᱮᱞ",
        "tooltip-ca-nstab-template": "Forom uduḱme",
-       "tooltip-ca-nstab-help": "Goṛo sakam ńelmẽ",
+       "tooltip-ca-nstab-help": "ᱜᱚᱸᱲᱚ ᱥᱟᱦᱴᱟ ᱧᱮᱞᱢᱮ",
        "tooltip-ca-nstab-category": "Rokom sokom sakamko udukme",
        "tooltip-minoredit": "Noa do huḍiń joṛao lekate lekhay me",
        "tooltip-save": "Bodolaḱko rukhiyayme",
        "tooltip-preview": "Amaḱ bodolaḱ uduḱme, noa beoharme ạuri rukhiyayre",
        "tooltip-diff": "Uduḱme okaṭaḱ onolem bodolakada",
-       "tooltip-compareselectedversions": "Noa barea sakam talareaḱ bepaneyaḱ nãwã aróme",
+       "tooltip-compareselectedversions": "ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱨᱮᱱᱟᱜ ᱵᱟᱨᱭᱟ ᱧᱮᱞᱟᱹᱨᱩ ᱵᱷᱮᱜᱮᱫ ᱧᱮᱞ ᱢᱮ",
        "tooltip-watch": "Amaḱ ńeloḱ sakamre noa do dohoyme",
-       "tooltip-rollback": "\"Ghurlạ ạcur\" noa sakam taṛam ruạṛ ńel sapha ona do amaḱ mũcạt́ mit́ dhom click re",
+       "tooltip-rollback": "ᱫᱚᱲᱦᱟᱛᱮ ᱢᱤᱫ ᱫᱷᱟᱣ ᱞᱤᱱ ᱛᱮ contributor ᱟᱜ ᱢᱩᱪᱟᱹᱫ ᱥᱟᱯᱲᱟᱣ \"ᱜᱷᱩᱨᱞᱟᱹ ᱟᱹᱪᱩᱨ\" ᱢᱮ",
        "tooltip-undo": "Noa joṛao kạmire ulṭao \"bạgiyaḱme\" ar ńeloḱ lekate noa joṛao jhicme. Noa do am guḍ karon joṛaoe ektiyariye emama.",
        "tooltip-preferences-save": "Pạsindko rukhiyaymẽ",
        "tooltip-summary": "Khaṭote guṭ katha bhoraome",
        "pageinfo-magic-words": "ᱢᱤᱡᱤᱠ {{PLURAL:$1|ᱟᱹᱲᱟ|ᱟᱹᱲᱟᱹᱠᱚ}} ($1)",
        "pageinfo-hidden-categories": "ᱫᱟᱱᱟᱝ {{PLURAL:$1|ᱦᱟᱹᱴᱤᱧ|ᱦᱟᱹᱹᱴᱤᱧᱠᱚ}} ($1)",
        "pageinfo-templates": "ᱚᱞᱩᱪᱟᱹᱲᱟᱜ {{PLURAL:$1|ᱪᱷᱟᱸᱪ|ᱪᱷᱟᱸᱪᱠᱚ}} ($1)",
-       "pageinfo-toolboxlink": "Sakam reaḱ baḍaejońaḱko",
+       "pageinfo-toolboxlink": "ᱥᱦᱟᱴᱟ ᱨᱮᱭᱟᱜ ᱠᱷᱚᱵᱚᱨ",
        "pageinfo-contentpage": "ᱩᱱᱩᱫᱩᱜ ᱥᱟᱦᱴᱟ ᱞᱮᱠᱟᱛᱮ ᱞᱮᱠᱷᱟ ᱦᱟᱠᱟᱱᱟ",
        "pageinfo-contentpage-yes": "ᱦᱮᱸ",
        "patrol-log-page": "ᱛᱩᱱᱠᱷᱤᱭᱤᱡᱟᱜ ᱞᱚᱜᱽ",
        "show-big-image": "Mukhiạ phayel",
        "show-big-image-preview": "Noa ńeloḱ akar do:$1",
        "show-big-image-other": "Eman teaḱ {{PLURAL:$2|resolution|resolutions}}: $1",
-       "show-big-image-size": "$1 X $2 Pikcel",
+       "show-big-image-size": "$1 X $2 Pixels",
        "ilsubmit": "Sendra",
+       "bydate": "ᱢᱟᱹᱦᱤᱛ ᱛᱮ",
+       "monday-at": "ᱚᱛᱮᱢᱟᱦᱟᱸ $1 ᱨᱮ",
+       "tuesday-at": "ᱵᱟᱞᱮᱢᱟᱦᱟᱸ $1 ᱨᱮ",
+       "wednesday-at": "ᱥᱟᱹᱜᱩᱱᱢᱟᱦᱟᱸ $1 ᱨᱮ",
+       "friday-at": "ᱡᱟᱹᱨᱩᱢ ᱢᱟᱦᱟᱸ $1 ᱨᱮ",
+       "saturday-at": "ᱧᱩᱦᱩᱢ ᱢᱟᱦᱟᱸ $1 ᱨᱮ",
+       "yesterday-at": "ᱦᱚᱞᱟ $1 ᱨᱮ",
        "bad_image_list": "Format do latar re leka",
        "metadata": "Meṭa khobor",
        "metadata-help": "Noa rẹt redo bạṛti kathako menaḱa, paseć noa do ḍejiṭal kemera se skenar bebohar hoy kate ḍijiṭal benao. Judi noa ret noa reaḱ asolak khon nãwã aro lenkhan, paseć sanamaḱko thoṛa bań sodoroḱa noa retredo.",
-       "metadata-fields": "Noa ciṭhire menaḱ photo reaḱ metadata jayga ṭalika do photo reaḱ sakamreye uduga, tinre ona metadata tibil do cabaḱa.\nEṭagaḱ sanamko do ońkage eset tahẽna.\nBenao, Teyar\nMoḍel\ntạrik okte asolak\nhire okte\nf nombor\nisospeeddratings\njeleń",
+       "metadata-fields": "Image metadata fields listed in this message will be included on image page display when the metadata table is collapsed.\nOthers will be hidden by default.\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": "Ganḍe",
        "exif-imagelength": "Usul",
        "exif-orientation": "ᱥᱟᱢᱟᱝ",
        "exif-colorspace": "Roṅcoṅ dhạrti",
        "exif-datetimeoriginal": "ᱰᱟᱴᱟ ᱛᱮᱭᱟᱨ ᱨᱮᱱᱟᱜ ᱢᱟᱹᱦᱤᱛ ᱟᱨ ᱚᱠᱛᱚ",
        "exif-datetimedigitized": "ᱰᱤᱡᱤᱴᱟᱭᱡᱤᱝᱟᱜ ᱢᱟᱹᱦᱤᱛ ᱟᱨ ᱚᱠᱛᱚ",
+       "exif-subsectime": "ᱢᱟᱹᱦᱤᱛ ᱚᱠᱛᱚ ᱴᱤᱯᱤᱡ",
+       "exif-exposuretime-format": "$1 ᱴᱤᱯᱤᱡ ($2)",
+       "exif-gpsdatestamp": "GPS ᱢᱟᱹᱦᱤᱛ",
+       "exif-unknowndate": "ᱚᱪᱤᱱᱦᱟᱹᱣ ᱢᱟᱹᱦᱤᱛ",
        "exif-orientation-1": "ᱥᱟᱫᱷᱟᱨᱚᱱ",
+       "exif-dc-date": "ᱢᱟᱹᱦᱤᱛ",
        "namespacesall": "sanam",
        "monthsall": "Sanamak",
+       "quotation-marks": "\"$1\"",
        "imgmultipagenext": "ᱫᱟᱨᱟᱭ ᱥᱟᱦᱴᱟ 'n",
        "imgmultigo": "ᱥᱮᱱᱚᱜ!",
        "imgmultigoto": "ᱥᱮᱱᱚᱜ ᱢᱮ ᱥᱟᱦᱴᱟ $1",
        "redirect-page": "ᱥᱟᱦᱴᱟ ID",
        "redirect-revision": "ᱥᱟᱦᱴᱟ ᱧᱮᱞ-ᱟᱹᱨᱩ",
        "redirect-file": "ᱨᱮᱫᱧᱩᱛᱩᱢ",
-       "specialpages": "Osokayteaḱ sakamko",
+       "fileduplicatesearch": "ᱥᱮᱸᱫᱽᱨᱟᱭ ᱢᱮ ᱵᱟᱹᱲᱤᱡ ᱨᱮᱫᱠᱚ",
+       "fileduplicatesearch-submit": "ᱥᱮᱸᱫᱽᱨᱟ",
+       "specialpages": "ᱵᱤᱥᱮᱥ ᱥᱟᱦᱴᱟᱠᱚ",
        "external_image_whitelist": "#Noa sakam do cet leka menaḱa oṅkage dohoemẽ\n#Sanam okte re jạhiren kuṭrạ latar re (khạli hạtiń //talare) bạisạomẽ\n#Noako do bahre reaḱ (hotlinked) chubi reaḱ URL saõte milạo hoyoḱa\n#Okako milạḱa, onako do chubi lekate udugoḱa, baṅkhan do khali chubi joṛao udugoḱa\n#Noa layen reaḱ ehoṕre # menaḱa ona layenko menko hisapte beohar hoyoḱka\n#Noa do kas-baṅ rimjhạoaḱge\n#Noa dag cetanre regex kuṭrạ bạsạomẽ. Noa layen cetleka menaḱa oṅkage dohoemẽ</pre>",
        "tag-filter": "[[Special:Tags|Tag]] saphay:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ᱥᱟᱛᱚᱢ|ᱥᱟᱛᱚᱢᱠᱩ}}]]: $2)",
        "tags-active-yes": "ᱦᱮᱸ",
        "tags-active-no": "ᱵᱟᱝ",
        "tags-hitcount": "$1 {{PLURAL:$1|ᱟᱹᱨᱩ|ᱟᱹᱨᱩᱠᱚ}}",
+       "compare-page1": "ᱥᱟᱦᱴᱟ ᱑",
+       "compare-rev1": "ᱧᱮᱞᱟᱹᱨᱩ ᱑",
        "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-upload-overwrite": "$1 {{GENDER:$2|ᱞᱟᱫᱮᱭᱮᱱᱟ}} ᱢᱤᱫ ᱱᱟᱶᱟ ᱵᱷᱟᱨᱥᱚᱱ $3 ᱨᱮᱱᱟᱜ",
        "searchsuggest-search": "ᱥᱮᱸᱫᱽᱨᱟ {{SITENAME}}",
        "duration-days": "$1 {{PLURAL:$1|ᱢᱟᱦᱟᱸ|ᱢᱟᱸᱦᱟᱸ}}",
+       "mw-widgets-dateinput-no-date": "ᱢᱟᱹᱦᱤᱛ ᱵᱟᱝ ᱵᱟᱪᱷᱚᱱ ᱟᱠᱟᱱᱟ",
+       "mw-widgets-mediasearch-input-placeholder": "ᱥᱮᱸᱫᱽᱨᱟᱭ ᱢᱮ ᱢᱮᱰᱤᱭᱟ",
+       "date-range-from": "ᱢᱟᱹᱦᱤᱛ ᱠᱷᱚᱱ:",
        "randomrootpage": "ᱟᱹᱛᱷᱟᱣᱲᱤ ᱨᱮᱦᱮᱫ ᱥᱟᱦᱴᱟ"
 }
index 37981db..f6c4069 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«",
        "prefs-watchlist-edits": "Največje število sprememb za prikaz na spisku nadzorov:",
        "prefs-watchlist-edits-max": "Največje število: 1000",
        "prefs-watchlist-token": "Ključ spiska nadzorov:",
+       "prefs-watchlist-managetokens": "Upravljaj žetone",
        "prefs-misc": "Druge nastavitve",
        "prefs-resetpass": "Spremeni geslo",
        "prefs-changeemail": "Sprememba ali odstranitev e-poštnega naslova",
        "recentchangesdays-max": "Največ $1 {{PLURAL:$1|dan|dneva|dnevi|dni}}",
        "recentchangescount": "Privzeto število prikazanih urejanj:",
        "prefs-help-recentchangescount": "Vključuje zadnje spremembe, zgodovine strani in dnevniške zapise.",
-       "prefs-help-watchlist-token2": "To je skrivni ključ do spletnega vira vašega spiska nadzorov. Kdor ve zanj, lahko bere vaš spisek nadzorov, zato ključa ne delite. [[Special:ResetTokens|Kliknite tukaj, če ga želite ponastaviti]].",
+       "prefs-help-tokenmanagement": "Lahko si ogledate ali ponastavite skrivni ključ vašega računa, s katerim lahko dostopate do spletnega vira vašega spiska nadzorov. Vsak, ki pozna vaš ključ, lahko bere vaš spisek nadzorov, zato ga ne delite.",
        "savedprefs": "Spremembe smo uspešno shranili.",
        "savedrights": "Uporabniške skupine {{GENDER:$1|$1}} smo shranili.",
        "timezonelegend": "Časovni pas",
index 85f314e..d787f45 100644 (file)
        "recentchangesdays-max": "Највише $1 {{PLURAL:$1|дан|дана}}",
        "recentchangescount": "Број измена за приказ:",
        "prefs-help-recentchangescount": "Подразумева скорашње измене, историје страница и дневнике.",
-       "prefs-help-watchlist-token2": "Ово је тајни кључ за веб-довод Вашег списка надгледања. \nСвако ко зна овај кључ биће у могућности да види Ваша надгледања; стога, кључ немојте одавати никоме. \nАко је потребно, кључ можете [[Special:ResetTokens|ресетовати]].",
        "savedprefs": "Ваша подешавања су сачувана.",
        "savedrights": "Корисничке групе за {{GENDER:$1|$1}} су сачуване.",
        "timezonelegend": "Временска зона:",
index c26c5e0..58d5704 100644 (file)
        "diff-multi-sameuser": "({{PLURAL:$1|En mellanliggande version|$1 mellanliggande versioner}} av samma användare visas inte)",
        "diff-multi-otherusers": "({{PLURAL:$1|En mellanliggande version|$1 mellanliggande versioner}} av {{PLURAL:$2|en annan användare|$2 användare}} visas inte)",
        "diff-multi-manyusers": "({{PLURAL:$1|En mellanliggande version|$1 mellanliggande versioner}} av mer än $2 användare visas inte)",
+       "diff-paragraph-moved-tonew": "Avsnittet flyttades. Klicka för att hoppa till den nya platsen.",
+       "diff-paragraph-moved-toold": "Avsnittet flyttades. Klicka för att hoppa till den gamla platsen.",
        "difference-missing-revision": "Det gick inte att hitta {{PLURAL:$2|en version|$2 versioner}} av den här differensen ($1).\n\nDetta beror oftast på att du har försökt följa en utgången difflänk till en sida som har raderats.\nMer detaljerad information finns i [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} raderingsloggen].",
        "searchresults": "Sökresultat",
        "searchresults-title": "Sökresultat för \"$1\"",
        "prefs-watchlist-edits": "Maximalt antal redigeringar som visas i bevakningslistan:",
        "prefs-watchlist-edits-max": "Maximalt antal: 1 000",
        "prefs-watchlist-token": "Bevakningslistsnyckel:",
+       "prefs-watchlist-managetokens": "Hantera nycklar",
        "prefs-misc": "Diverse",
        "prefs-resetpass": "Ändra lösenord",
        "prefs-changeemail": "Ändra eller ta bort e-postadress",
        "recentchangesdays-max": "Maximalt $1 {{PLURAL:$1|dygn}}",
        "recentchangescount": "Antal redigeringar som visas som standard:",
        "prefs-help-recentchangescount": "Detta inkluderar senaste ändringarna, sidhistorik och loggar.",
-       "prefs-help-watchlist-token2": "Detta är den hemliga nyckeln till webbflödet i din bevakningslista.\nNågon som vet den kommer att kunna läsa din bevakningslista, så dela inte ut den.\n[[Special:ResetTokens|Klicka här om du behöver återställa den]].",
+       "prefs-help-tokenmanagement": "Du kan se och återställa den hemliga nyckeln för ditt konto som har åtkomst till webbmatningen för din bevakningslista. Alla som vet nyckeln kan läsa din bevakningslista, så dela inte ut den.",
        "savedprefs": "Dina inställningar har sparats",
        "savedrights": "Användargrupperna för {{GENDER:$1|$1}} har sparats.",
        "timezonelegend": "Tidszon:",
index 22d93f5..2045c3e 100644 (file)
        "recentchangesdays-max": "மிக அதிகமாக $1 {{PLURAL:$1|நாள்|நாட்கள்}}",
        "recentchangescount": "மொத்தத் தொகுப்புக்களின் எண்ணிக்கையைத் தானாகவே காட்ட:",
        "prefs-help-recentchangescount": "அண்மைய மாற்றங்களையும், பக்கத்தின் வரலாறுகளையும் பதிவேட்டுப் பதிவுகளையும் உள்ளடக்கியதாகும்.",
-       "prefs-help-watchlist-token2": "உங்கள் கவனிப்புப்பட்டியலின் வலை ஓடைக்கு இது இரகசிய சாவி.\nஇதை அறிந்த எவரும் உங்கள் கவனிப்பு பட்டியலை வாசிக்கலாம், எனவே இதை பகிராதீர்கள்.\nதேவை ஏற்படின், [[Special:ResetTokens|நீங்கள் அதனை புதுப்பிக்கலாம்]].",
        "savedprefs": "உங்கள் விருப்பத்தேர்வுகள் சேமிக்கப்பட்டுள்ளன.",
        "savedrights": "{{GENDER:$1|$1}}-க்கான பயனர் உரிமைகள் சேமிக்கப்பட்டன.",
        "timezonelegend": "நேர வலயம்:",
index 16cca85..e6f5a51 100644 (file)
@@ -25,7 +25,7 @@
                        "LR Guanzon"
                ]
        },
-       "tog-underline": "Pagsasalungguhit ng kawing:",
+       "tog-underline": "Pagsasalungguhit ng link:",
        "tog-hideminor": "Itago ang mga maliliit na pagbabago mula sa mga huling pagbabago",
        "tog-hidepatrolled": "Itago ang mga napatrolyang pagbabago mula sa mga huling pagbabago",
        "tog-newpageshidepatrolled": "Itago ang mga napatrolyang pahina mula talaan ng bagong pahina",
        "history_small": "kasaysayan",
        "updatedmarker": "isinapanahon mula noong huli kong pagdalaw",
        "printableversion": "Bersiyong maililimbag",
-       "permalink": "Permanenteng kawing",
+       "permalink": "Permanenteng link",
        "print": "Ilimbag",
        "view": "Tingnan",
        "view-foreign": "Tingnan sa $1",
index b627abc..8c9288a 100644 (file)
        "anontalk": "اس آئی پی پتہ کا تبادلۂ خیال",
        "navigation": "رہنمائی",
        "and": "&#32;اور",
-       "faq": "عاÙ\85 Ø·Ù\88ر Ù¾ر پوچھے جانے والے سوالات",
+       "faq": "اکثر پوچھے جانے والے سوالات",
        "actions": "اقدامات",
        "namespaces": "نام فضا",
        "variants": "متغیرات",
        "talkpagelinktext": "تبادلۂ خیال",
        "specialpage": "خصوصی صفحہ",
        "personaltools": "ذاتی آلات",
-       "talk": "تبادÙ\84Û\81Ù´ خیال",
+       "talk": "تبادÙ\84Û\82 خیال",
        "views": "مشاہدات",
        "toolbox": "آلات",
        "tool-link-userrights": "حلقہ ہائے {{GENDER:$1|صارف}} میں تبدیلی",
        "content-json-empty-array": "خالی ایرے",
        "deprecated-self-close-category": "صفحات مع نادرست ایچ ٹی ایم ایل ٹیگ",
        "deprecated-self-close-category-desc": "اس صفحہ میں ایچ ٹی ایم ایل کے نادرست ٹیگ مثلاً <code>&lt;b/></code> or <code>&lt;span/></code> استعمال کیے گئے ہیں۔ چونکہ ایچ ٹی ایم ایل 5 میں ان ٹیگوں کا رویہ تبدیل ہو جائے گا، لہذا ویکی متن میں ان کا استعمال متروک ہو چکا ہے۔",
+       "duplicate-args-warning": "<strong>انتباہ:</strong> [[:$1]] پیرامیٹر \"$3\" کی قدر کے ساتھ [[:$2]] کو طلب کررہا ہے۔ محض آخر میں دی گئی قدر دوبارہ استعمال کی ہوگی۔",
        "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 کالز}} ہیں۔",
        "post-expand-template-argument-category": "سانچہ کے ترک کردہ پیرامیٹروں کے حامل صفحات",
        "parser-template-loop-warning": "سانچہ میں تکرار پایا گیا: [[$1]]",
        "template-loop-category": "صفحات مع لوپ سانچہ",
+       "template-loop-category-desc": "یہ صفحہ لوپ سانچے پر مشتمل ہے یعنی ایک سانچہ اعادے یا تکرار کی وجہ سے خود کو طلب کرتا ہے۔",
+       "template-loop-warning": "<strong>انتباہ:</strong> یہ صفحہ [[:$1]] کو طلب کرتا ہے جو ایک لوپ سانچے (ایک لامحدود اعادے یا تکرار کی طلب) کی وجہ بنتا ہے۔",
        "parser-template-recursion-depth-warning": "سانچہ میں تکرار کی گہرائی اپنی حد سے تجاوز کر گئی ($1)",
        "language-converter-depth-warning": "لسانی مبدل کی گہرائی اپنی حد سے تجاوز کر گئی ($1)",
        "node-count-exceeded-category": "گرہوں کی تعداد سے تجاوز کرنے والے صفحات",
        "logdelete-text": "نوشتہ کے حذف شدہ اندراجات نوشتوں میں ظاہر ہوتے رہیں گے لیکن ان کا مواد عام صارفین کے لیے ناقابل رسائی ہوگا۔",
        "revdelete-text-others": "جب تک اضافی پابندیاں نہیں لگائی جاتیں دیگر منتظمین کو اس پوشیدہ مواد تک رسائی اور اسے بحال کرنے کا اختیار حاصل ہوگا۔",
        "revdelete-confirm": "برائے مہربانی! یقین دِہانی کرلیجئے کہ آپ واقعی ایسا کرنا چاہتے ہیں، آپ اِس کے نتائج سے باخبر ہیں، اور آپ یہ [[{{MediaWiki:Policy-url}}|پالیسی]] کے مطابق کررہے ہیں.",
+       "revdelete-suppress-text": "چھپانے کا عمل <strong>صرف</strong> مندرجہ ذیل معاملات میں کرنا چاہیے:\n* امکانی طور پر توہین آمیز معلومات\n* غیر موزوں شخصی معلومات\n*: <em>گھر کے پتے، ٹیلی فون نمبر، قومی شناخت نمبر، وغیرہ</em>",
        "revdelete-legend": "رویتی پابندیاں لگائیں",
        "revdelete-hide-text": "نظرثانی متن چھپاؤ",
        "revdelete-hide-image": "فائل کے مشمولات چھپائیں",
        "mergehistory-from": "مآخذ صفحہ:",
        "mergehistory-into": "صفحۂ مقصود:",
        "mergehistory-list": "قابل ضم تاریخچہ",
+       "mergehistory-merge": "ذیل میں [[:$1]] کے نسخوں کو [[:$2]] میں ضم کیا جاسکتا ہے۔\nمخصوص وقت پر یا اس سے پہلے صرف اس نسخوں میں ریڈیو بٹن کا کالم ضم کرنے کے لیے استعمال کریں۔\nیاد رکھیں کہ نیوی گیشن روابط اس کالم کو ری سیٹ کردیں گے۔",
        "mergehistory-go": "ضم پذیر ترامیم دِکھاؤ",
        "mergehistory-submit": "نظرثانیاں ضم کرو",
        "mergehistory-empty": "نظرثانیاں ضم نہیں کی جاسکتیں.",
        "diff-multi-sameuser": "(ایک ہی صارف کا {{PLURAL: $1 |ایک درمیانی نسخہ نہیں دکھایا گیا| $1 درمیانی نسخے نہیں دکھائے گئے}})",
        "diff-multi-otherusers": "({{PLURAL:$2|ایک دوسرے صارف|$2 صارفین}} {{PLURAL:$1|کا ایک درمیانی نسخہ نہیں دکھایا گیا|$1 کے درمیانی نسخے نہیں دکھائے گئے}})",
        "diff-multi-manyusers": "($2 سے زیادہ {{PLURAL:$2|صارف|صارفین}} {{PLURAL:$1|کا ایک درمیانی نسخہ نہیں دکھایا گیا|$1 کے درمیانی نسخے نہیں دکھائے گئے}})",
+       "diff-paragraph-moved-tonew": "عبارت ہٹا دی گئی تھی۔ نئے مقام پر جانے کے لیے کلک کریں۔",
+       "diff-paragraph-moved-toold": "عبارت ہٹا دی گئی تھی۔ پرانے مقام پر واپس جانے کے لیے کلِک کریں۔",
        "difference-missing-revision": "اس فرق ($1) {{PLURAL:$2|کا ایک نسخہ نہیں ملا|$2 کے نسخے نہیں ملے}}۔\n\nعموماً ایسا اس وقت ہوتا ہے جب کسی حذف شدہ صفحہ کے نسخوں کے درمیان میں فرق تلاش کرنے کی کوشش کی جائے۔\nمزید تفصیلات [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} نوشتہ حذف شدگی] میں دیکھی جا سکتی ہیں۔",
        "searchresults": "تلاش کے نتائج",
        "searchresults-title": "«$1» کے نتائج تلاش",
        "recentchangesdays-max": "زیادہ سے زیادہ $1 {{PLURAL:$1|دن}}",
        "recentchangescount": "دکھائی جانے والی ترامیم کی تعداد:",
        "prefs-help-recentchangescount": "اِس میں حالیہ تبدیلیاں، تاریخچے اور نوشتہ جات شامل ہیں۔",
-       "prefs-help-watchlist-token2": "یہ آپ کی زیر نظر فہرست کے ویب فیڈ کی خفیہ کلید ہے۔\nاسے خفیہ رکھیں، تاکہ کوئی دوسرا شخص آپ کی زیر نظر فہرست نہ دیکھ سکے۔\nاگر آپ کو کلید تبدیل کرنی ہو تو [[Special:ResetTokens|یہاں کلک کریں]]۔",
        "savedprefs": "آپ کی ترجیحات محفوظ ہوگئیں۔",
        "savedrights": "{{GENDER:$1|$1}} کے اختیارات محفوظ ہو گئے۔",
        "timezonelegend": "منطقۂ وقت:",
        "statistics-header-hooks": "دیگر اعداد و شمار",
        "statistics-articles": "مندرج صفحات",
        "statistics-pages": "صفحات",
-       "statistics-pages-desc": "(ویکی اقتباسات کے کل صفحات، بشمولِ تبادلۂ خیال، رجوع مکررات وغیرہ۔)",
+       "statistics-pages-desc": "(وکی اقتباسات کے کل صفحات، بشمولِ تبادلۂ خیال، رجوع مکررات وغیرہ۔)",
        "statistics-files": "اپلوڈ کردہ فائلیں",
        "statistics-edits": "{{SITENAME}} کے آغاز سے کل صفحاتی ترامیم",
        "statistics-edits-average": "فی صفحہ اوسط ترامیم",
        "protect-text": "یہاں آپ <strong>$1</strong> کا درجۂ حفاظت دیکھ اور تبدیل کر سکتے ہیں۔",
        "protect-locked-blocked": "پابندی کے دوران میں آپ درجہ حفاظت میں تبدیلی نہیں کر سکتے۔\nصفحہ <strong>$1</strong> کی حالیہ ترتیبات یہاں دیکھی جا سکتی ہیں:",
        "protect-locked-dblock": "ڈیٹابیس مقفل ہونے کی وجہ سے درجہ حفاظت کو تبدیل نہیں کیا جا سکتا۔\nصفحہ <strong>$1</strong> کی حالیہ ترتیبات یہاں دیکھی جا سکتی ہیں:",
-       "protect-locked-access": "آپ Ú©Ù\88 Ø¯Ø±Ø¬Û\81 حفاظت تبدیل کرنے کا اختیار حاصل نہیں ہے۔\nصفحہ <strong>$1</strong> کی حالیہ ترتیبات یہاں دیکھی جا سکتی ہیں:",
+       "protect-locked-access": "آپ Ú©Ù\88 Ø¯Ø±Ø¬Û\82 حفاظت تبدیل کرنے کا اختیار حاصل نہیں ہے۔\nصفحہ <strong>$1</strong> کی حالیہ ترتیبات یہاں دیکھی جا سکتی ہیں:",
        "protect-cascadeon": "یہ صفحہ محفوظ ہے کیونکہ یہ درج ذیل {{PLURAL:$1|صفحہ|صفحات}} میں شامل ہے جہاں آبشاری حفاظت فعال ہے۔\nآپ اس صفحہ کے درجۂ حفاظت میں تبدیلی کرسکتے ہیں، لیکن یہ آبشاری حفاظت پر اثر انداز نہیں ہوگی۔",
        "protect-default": "تمام صارفین کو اجازت ہے",
        "protect-fallback": "محض «$1» کا اختیار رکھنے والے صارفین کو اجازت ہے",
        "whatlinkshere-hidetrans": "استعمالات $1",
        "whatlinkshere-hidelinks": "روابط $1",
        "whatlinkshere-hideimages": "تصویر کے روابط $1",
-       "whatlinkshere-filters": "مقطرات",
+       "whatlinkshere-filters": "Ù\85Ù\82طارات",
        "whatlinkshere-submit": "ٹھیک",
        "autoblockid": "خودکار پابندی #$1",
        "block": "صارف مسدود کریں",
index dbc2206..970e951 100644 (file)
@@ -41,7 +41,7 @@
        "tog-shownumberswatching": "Igpakita an ihap han mga nangingita nga mga nagamit",
        "tog-oldsig": "Aada nga pirma:",
        "tog-fancysig": "Tratuha it pirma komo uska wikitext (nga waray automatiko nga sumpay)",
-       "tog-uselivepreview": "Gamita an buhi nga pahiuna nga pagawas",
+       "tog-uselivepreview": "Igpakita in mga una-nga-pangita nga waray pagkarga hin utro han pakli",
        "tog-forceeditsummary": "Pasabti ako kun waray ko ginsurat ha dalikyat-nga-tigaman han pagliwat (edit summary)",
        "tog-watchlisthideown": "Tago-a an akon mga ginliwat tikang han angay timan-an",
        "tog-watchlisthidebots": "Tago-a an ginliwat hin bot tikang han angay timan-an",
        "tog-showhiddencats": "Igpakita an mga tinago nga mga kaarangay",
        "tog-norollbackdiff": "Ayaw igpakita an kaiban kahuman himoa an rollback",
        "tog-useeditwarning": "Pasabti ako kun nabaya ako hin ginliwat ng pakli nga waray katipig an mga pagbag-o",
-       "tog-prefershttps": "Pirmihi paggamit hin segurado nga koneksyon kun nakalog-in",
+       "tog-prefershttps": "Gamit pirmi hin sigurado nga pagkonektar samtang nakalog-in",
        "underline-always": "Pirme",
        "underline-never": "Diri",
        "underline-default": "An panmutos o pandalikyat nga aada-nga-daan",
        "editfont-style": "Estilo hin font ha lugar hin pagliwat",
-       "editfont-default": "Pandalikyat nga default",
        "editfont-monospace": "Monospaced nga font",
        "editfont-sansserif": "Sans-serif nga agi",
        "editfont-serif": "Serif nga agi",
        "newwindow": "(nabuklad hin bag-o nga tamboan o bintana)",
        "cancel": "Pasagdi",
        "moredotdotdot": "Damo pa nga…",
-       "morenotlisted": "Diri kompleto ini nga listahan.",
+       "morenotlisted": "Ini nga talaan bangin diri kumpleto.",
        "mypage": "Pakli",
        "mytalk": "Mga akon paghingay",
        "anontalk": "Hiruhimangraw",
        "accmailtext": "Uska hinimo nga random nga tigaman-panakob para kan [[User talk:$1|$1]] in ginpadangat ha $2. Puydi ini mabal-iwan ha ''[[Special:ChangePassword|liwani an tigaman-panakob]]'' nga pakli han paglog-in.",
        "newarticle": "(Bag-o)",
        "newarticletext": "Ginsunod mo an pakli nga waray pa kahihimo.  Para ighimo an pakli, tikanga pagmakinilya ha kahon nga aada ha ubos (kitaa an [$1 nabulig nga pakli] para han kadugangan nga pananabutan).  Kun sayop an imo pagkanhi, igpidlit an imo kanan panngaykay (''browser'') '''balik''' (''back'') nga piridlitan.",
-       "anontalkpagetext": "----\n''Ini in hiruhimangraw-nga-pakli para han waray magpakilala nga gumaramit, nga waray pa hinmimo hin akawnt.''\nMagamit la kami hin IP address para makilal-an hiya.\nSugad hini nga IP address, in puydi sinmaro hiton pipira nga mga gumaramit.\nKun ikaw in waray magpakilala nga gumaramit, ngan pag-abat mo in may mga diri naangay nga komento an ginpapadangat ha imo, alayon nala [[Special:CreateAccount|paghimo hin akawnt]] o [[Special:UserLogin|pag-log in]] para malikyan an sumurunod nga mga pagkalipat nga dapat para ha iba nga waray magpakilala nga mga gumaramit.",
+       "anontalkpagetext": "----\n<em>Ini in hiruhimangraw-nga-pakli para han waray magpakilala nga gumaramit, nga waray pa hinmimo hin akawnt.</em>\nMagamit la kami hin IP address para makilal-an hiya.\nSugad hini nga IP address, in puydi sinmaro hiton pipira nga mga gumaramit.\nKun ikaw in waray magpakilala nga gumaramit, ngan pag-abat mo in may mga diri naangay nga komento an ginpapadangat ha imo, alayon nala [[Special:CreateAccount|paghimo hin akawnt]] o [[Special:UserLogin|pag-log in]] para malikyan an sumurunod nga mga pagkalipat nga dapat para ha iba nga waray magpakilala nga mga gumaramit.",
        "noarticletext": "Waray yana teksto ha sulod hinin nga pakli.\nPuyde ka [[Special:Search/{{PAGENAME}}|mamiling hin titulo hinin nga pakli]] ha iba pa nga mga pakli,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} pamilnga an may mga pagkahisumpay nga mga talaan],\no [{{fullurl:{{FULLPAGENAME}}|action=edit}} igliwat ini nga pakli]</span>.",
        "noarticletext-nopermission": "Waray yana nahasurat hini nga pakli\nPuyde hi ikaw [[Special:Search/{{PAGENAME}}|magbiling han ngaran hini nga pakli]] ha iba nga mga pakli,\no <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} mamiling han mga nanginginlabot nga mga talaan]</span>, kundi diri ka gintutugotan hin paghímò hini nga pakli.",
        "missing-revision": "Waray na an rebisyon #$1 han pakli nga ginngaranan nga  \"{{FULLPAGENAME}}\".\n\nIni in agsob tungod han pagsunod hin daan nga sumpay hin kaagi ha pakli nga ginpara.\nAn mga detalye in mabibilngan ha [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "userpage-userdoesnotexist": "Diri nakarehistro an akawnt han gumaramit nga \"$1\".\nAlayon pagpamuruotbuot kun karuyag mo maghimo/mag-edit hini nga pakli.",
        "userpage-userdoesnotexist-view": "An akawnt han gumaramit ni ''$1'' in diri nakarehistro.",
        "blocked-notice-logextract": "Ini nga gumaramit in nakapugong yana.\nAn pinakaurhi nga log entry han mga pinugong in ginhatag ha ubos para hit reperensya:",
+       "clearyourcache": "<strong>Tigamni:</strong> Katapos hit pagtipig, bangin ka kinahanglan nga lumaktaw han cache hit imo pandalikyat o broswer basi makita an mga pagbabag-o.\n* <strong>Firefox / Safari:</strong> Igduon it <em>Shift</em> samtang na-klik hit <em>Reload</em>, o kundi man pidlita iton <em>Ctrl-F5</em> o kundi man <em>Ctrl-R</em> (<em>⌘-R</em> dida hin Mac)\n* <strong>Google Chrome:</strong> Pidlita it <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> dida hin Mac)\n* <strong>Internet Explorer:</strong> Igduon it <em>Ctrl</em> samtang na-klik ht <em>Refresh</em>, o kundi man pidlita it <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Kadto hit <em>Menu → Settings</em> (<em>Opera → Preferences</em> dida hin Mac) ngan sunod kadto hit <em>Privacy & security → Clear browsing data → Cached images and files</em>.",
        "updated": "(Ginbag-ohan)",
        "note": "'''Pahibaro:'''",
        "previewnote": "'''Hinumdumi nga pahiuna-nga-paggawas pa la ini.'''\n¡Waray pa katipig an imo mga ginbag-o!",
        "editundo": "Igpawara an ginbuhat",
        "diff-empty": "(Waray pagkakaiba)",
        "diff-multi-sameuser": "({{PLURAL:$1|Usa nga intermediate revision|$1 mga intermediate revision}} han pareho nga gumaramit nga waray ginpakita)",
+       "diff-multi-otherusers": "({{PLURAL:$1|Usa nga sapit-nahiuna nga rebisyon|$1 nga mga sapit-nanhiuna nga rebisyon}} hin {{PLURAL:$2|usa pa nga gumaramit|$2 nga mga gumaramit}} in diri ginpapakita)",
        "diff-multi-manyusers": "({{PLURAL:$1|Uska sapit-nahiuna nga rebisyon|$1 nga mga sapit-nanhiuna nga rebisyon}} nga may labaw nga $2 {{PLURAL:$2|gumaramit|mga gumaramit}} in diri ginpapakita)",
        "searchresults": "Mga nabilingan han pagbiling",
        "searchresults-title": "Mga nabilngan han pagbiling para han \"$1\"",
        "recentchangesdays-max": "Pinakadamo $1 {{PLURAL:$1|ka adlaw|ka mga adlaw}}",
        "recentchangescount": "Ihap han mga pagliwat nga igpapakita nga ginpasingada:",
        "prefs-help-recentchangescount": "Ini in naglalakip han mga kabag-ohan nga pagliwat, mga kaagi han pakli, ngan mga talaan.",
-       "prefs-help-watchlist-token2": "Ini in sekreto nga susi ngadto han web feed an imo talaan han binabantayan.\nKun hin-o man it maaram hini in puyde bumasa han imo talaan han binabantayan, tungod hini ayaw ini igsaro ha iba.\n[[Special:ResetTokens|Pidlita ini kun kinahanglan mo igreset ini]].",
        "savedprefs": "Gintipig an im karuyag.",
        "timezonelegend": "Zona hin oras",
        "localtime": "Oras nga lokal",
        "recentchanges": "Mga kabag-ohan",
        "recentchanges-legend": "Mga pirilion han mga lab-as nga pagbag-o",
        "recentchanges-summary": "Nasubay han pinakalab-as nga pagbag-o ha wiki dinhi nga pakli.",
+       "recentchanges-noresult": "Waray mga pagbabag-o han ginhatag nga panahon nahanungod hini nga  mga criteria.",
        "recentchanges-feed-description": "Panultol han pinakalab-as nga pagbabag-o ha wiki dinhi nga panubong.",
        "recentchanges-label-newpage": "Ini nga pagliwat hin naghimo hin bag-o nga pakli",
        "recentchanges-label-minor": "Gutiay ini nga pagliwat",
        "filehist-comment": "Komento",
        "imagelinks": "Mga gamit hin paypay",
        "linkstoimage": "An nasunod nga {{PLURAL:$1|pakli nasumpay|$1 mga pakli nasumpay}} hini nga paypay:",
+       "linkstoimage-more": "Labaw hin $1 {{PLURAL:$1|nga pakli násúmpay|nga mga pakli násúmpay}} ngadâ hini nga paypay là.\nAn nasunód nga taramdan nagpapakita han {{PLURAL:$1|syahan nga pakli nga násúmpay|syahan nga $1 nga pakli nga násúmpay}} ngadâ hini nga paypay là.\nIn [[Special:WhatLinksHere/$2|bug-os nga taramdan]] áadâ.$2",
        "nolinkstoimage": "Waray mga pakli nga nasumpay hini nga fayl.",
        "linkstoimage-redirect": "$1 (redirecta an paypay) $2",
        "sharedupload": "Ini nga fayl tikang han $1 ngan puyde magamit ha iba nga mga proyekto.",
        "log": "Mga talaan",
        "logeventslist-submit": "Igpakita",
        "all-logs-page": "Ngatanan nga mga talaan panpubliko",
+       "alllogstext": "Pinantampo nga pagpakita han ngatanan nga mga log han {{SITENAME}}.\n\nPuydi nimo pahalipoton ini ang lista pinaagi han pagpili han kun ano nga klase nga log, an agnay-gumaramit (case-sensitive), o an apektado nga pakli (case-sensitive gihapon).",
+       "logempty": "Waray nahahanungod nga mga butang dida hit log.",
        "checkbox-all": "Ngatanan",
        "checkbox-none": "Waray",
        "checkbox-invert": "Baliskara",
        "unwatchthispage": "Undangi pagbantay",
        "notanarticle": "Diri uska unod nga pakli",
        "notvisiblerev": "An urhi nga pagliwat han iba nga gumaramit in ginpara",
-       "watchlist-details": "{{PLURAL:$1|$1 nga pakli|$1 nga mga pakli}} nga aada ha imo talaan nga binabantayan, diri bulag nga paglakip han mga hiruhimangraw-nga-pakli.",
+       "watchlist-details": "{{PLURAL:$1|$1 nga pakli|$1 nga mga pakli}} aada ha imo talaan nga binabantayan (upod an mga hiruhimangraw-nga-pakli).",
        "wlshowlast": "Igpakita an katapusan nga $1 ka mga oras $2 ka mga adlaw",
        "watchlist-hide": "Tago-a",
        "watchlist-submit": "Pakit-a",
        "changecontentmodel-submit": "Balyo-a",
        "protectlogpage": "Talaan han pinasaliporan",
        "protectedarticle": "pinasaliporan \"[[$1]]\"",
+       "modifiedarticleprotection": "ginsaliwanan an lebel han pagprotektar para han \"[[$1]]\"",
        "prot_1movedto2": "[[$1]] in ginbalhin ngadto ha [[$2]]",
        "protectcomment": "Katadongan:",
        "protect-default": "Togota an ngatanan nga mga gumaramit",
        "whatlinkshere-hideredirs": "$1 nga mga redirek",
        "whatlinkshere-hidetrans": "$1 nga mga transklusyon",
        "whatlinkshere-hidelinks": "$1 nga mga sumpay",
-       "whatlinkshere-hideimages": "$1 an mga sumpay han paypay",
+       "whatlinkshere-hideimages": "$1 nga mga sumpay hin paypay",
        "whatlinkshere-filters": "Mga panara",
        "whatlinkshere-submit": "Kadto-a",
        "block": "Pugngi an gumaramit",
        "blockip": "Pugngi an {{GENDER:$1|gumaramit}}",
-       "blockip-legend": "Pugngi an gumaramit",
        "ipaddressorusername": "IP address o agnay-hit-gumaramit:",
        "ipbexpiry": "Matitima an dulot:",
        "ipbreason": "Katadungan:",
        "block-log-flags-nousertalk": "diri makakaliwat hit kalugaringon nga hiruhimangraw nga pakli",
        "block-log-flags-hiddenname": "nakatago an agnay-hit-gumaramit",
        "ipb_already_blocked": "\"$1\" in ginpugngan na",
+       "proxyblocker": "Proxy nga pagpugong",
        "ipbnounblockself": "Diri ka gintutugotan hin pagtanggal hit pagpugong ha kalugaringon",
        "lockdb": "Trangkaha an database",
        "unlockdb": "Abreha an database",
        "version-libraries-license": "Lisensya",
        "version-libraries-description": "Deskripsyon",
        "version-libraries-authors": "Mga awtor",
+       "redirect": "Ginredirek hin paypay, gumaramit, pakli, pagliwat, o log nga ID",
        "redirect-summary": "Ini nga pinaurog nga pakli in nagredirect ngadto ha file (ginhatag an filename), usa ka pakli (ginhatag han ID han rebisyon o ID han pakli), usa ka pakli han gumaramit (ginhatag an numero nga ID han gumaramit), o usa ka entrada han log, (ginhatag an ID han log). Paggamit: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], o [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Kadtoa",
+       "redirect-lookup": "Kitaa:",
+       "redirect-value": "Value:",
        "redirect-user": "ID han gumaramit",
        "redirect-page": "ID han pakli",
        "redirect-revision": "Rebisyon han pakli",
        "htmlform-reset": "Igbalik an mga pinamalyuan",
        "htmlform-selectorother-other": "iba",
        "logentry-delete-delete": "Hi $1 {{GENDER:$2|ginpara}} an pakli nga $3",
+       "logentry-delete-revision": "$1 {{GENDER:$2|ginbalyo-an}} an pagkakita hin {{PLURAL:$5|usa nga pagliwat|$5 nga mga pagliwat}} dida han pakli $3: $4",
        "revdelete-content-hid": "sulod nakatago",
        "revdelete-summary-hid": "An halipotay nga masisiring hiton pagliwat in nakatago",
        "revdelete-uname-hid": "nakatago an agnay-hit-gumaramit",
        "logentry-move-move": "$1 {{GENDER:$2|ginbalhin}} an pakli nga $3 ngadto ha $4",
        "logentry-move-move-noredirect": "Hi $1 {{GENDER:$2|ginbalhin}} an pakli nga $3 ngadto ha $4 nga diri nagpapabilin hin redirect",
+       "logentry-move-move_redir": "Hi $1 {{GENDER:$2|nagbalhin}} han pakli nga $3 ngadto ha $4 nga gintumbawan an redirect",
+       "logentry-patrol-patrol-auto": "$1 automatiko nga {{GENDER:$2|nagtigaman}} han pagliwat hin $4 han pakli nga $3 nga ginpatrolya",
        "logentry-newusers-newusers": "An gumaramit nga akawnt nga $1 {{GENDER:$2|ginhimo}}",
        "logentry-newusers-create": "An gumaramit nga akawnt nga $1 {{GENDER:$2|ginhimo}}",
        "logentry-newusers-create2": "An gumaramit nga akawnt nga $3 {{GENDER:$2|ginhimo}} ni $1",
        "logentry-newusers-autocreate": "An gumaramit nga akawnt nga $1 in lugaring nga {{GENDER:$2|ginhimo}}",
        "logentry-upload-upload": "Hi $1 {{GENDER:$2|gin-upload}} an $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|nagkarga}} hin bag-o nga bersyon han $3",
        "rightsnone": "(waray)",
        "feedback-back": "Balik",
        "feedback-cancel": "Pasagdi",
        "mediastatistics-header-audio": "Audio",
        "mediastatistics-header-video": "Mga video",
        "mediastatistics-header-office": "Buhatan",
-       "mediastatistics-header-total": "Ngatanan nga pakli"
+       "mediastatistics-header-total": "Ngatanan nga pakli",
+       "randomrootpage": "Bisan la ano nga gintikangan nga pakli"
 }
index 08e1f8c..9cbf68e 100644 (file)
        "diff-multi-sameuser": "(未显示同一用户的$1个中间版本)",
        "diff-multi-otherusers": "(未显示{{PLURAL:$1|另一用户|$2个用户}}的{{PLURAL:$1|$1个中间版本}})",
        "diff-multi-manyusers": "(未显示超过$2个用户的$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”的搜索结果",
        "prefs-watchlist-edits": "在监视列表中显示的更改的最大数目:",
        "prefs-watchlist-edits-max": "最大数目:1000",
        "prefs-watchlist-token": "监视列表密钥:",
+       "prefs-watchlist-managetokens": "管理令牌",
        "prefs-misc": "其他",
        "prefs-resetpass": "更改密码",
        "prefs-changeemail": "更改或移除电子邮件地址",
        "recentchangesdays-max": "最多$1天",
        "recentchangescount": "默认显示的编辑数:",
        "prefs-help-recentchangescount": "这包括最近更改、页面历史和日志。",
-       "prefs-help-watchlist-token2": "这是您的监视列表的网络feed密钥。\n任何拥有者均可以浏览您的监视列表,因此不要公开该密钥。\n如果有需要,[[Special:ResetTokens|您可以重置密钥]]。",
+       "prefs-help-tokenmanagement": "您可以查看并重置您账户的密钥,它用来访问您监视列表的Web订阅源。任何知道密钥的人都将可以阅读您的监视列表,所以不要分享它。",
        "savedprefs": "您的系统设置已保存。",
        "savedrights": "{{GENDER:$1|$1}}的用户组已被保存。",
        "timezonelegend": "时区:",
        "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 33f569a..0c5f2dc 100644 (file)
        "recentchangesdays-max": "最多 $1 {{PLURAL:$1|天}}",
        "recentchangescount": "預設顯示的編輯數:",
        "prefs-help-recentchangescount": "這包含近期變更、頁面歷史以及日誌。",
-       "prefs-help-watchlist-token2": "訂閱您的監視清單所需的密鑰。\n任何人只要知道密鑰就能夠讀取您的監視清單,所以請勿任意與它人共享。\n若有需要 [[Special:ResetTokens|您可重設密鑰]]。",
        "savedprefs": "已儲存您的偏好設定。",
        "savedrights": "已儲存 {{GENDER:$1|$1}} 的使用者權限。",
        "timezonelegend": "時區:",
        "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": "已註冊",
index d37b990..10082e9 100644 (file)
@@ -398,19 +398,31 @@ abstract class Maintenance {
         * Throw an error to the user. Doesn't respect --quiet, so don't use
         * this for non-error output
         * @param string $err The error to display
-        * @param int $die If > 0, go ahead and die out using this int as the code
+        * @param int $die Deprecated since 1.31, use Maintenance::fatalError() instead
         */
        protected function error( $err, $die = 0 ) {
+               if ( intval( $die ) !== 0 ) {
+                       wfDeprecated( __METHOD__ . '( $err, $die )', '1.31' );
+                       $this->fatalError( $err, intval( $die ) );
+               }
                $this->outputChanneled( false );
                if ( PHP_SAPI == 'cli' ) {
                        fwrite( STDERR, $err . "\n" );
                } else {
                        print $err;
                }
-               $die = intval( $die );
-               if ( $die > 0 ) {
-                       die( $die );
-               }
+       }
+
+       /**
+        * Output a message and terminate the current script.
+        *
+        * @param string $msg Error message
+        * @param int $exitCode PHP exit status. Should be in range 1-254.
+        * @since 1.31
+        */
+       protected function fatalError( $msg, $exitCode = 1 ) {
+               $this->error( $msg );
+               exit( $exitCode );
        }
 
        private $atLineStart = true;
@@ -559,7 +571,7 @@ abstract class Maintenance {
                        $joined = implode( ', ', $missing );
                        $msg = "The following extensions are required to be installed "
                                . "for this script to run: $joined. Please enable them and then try again.";
-                       $this->error( $msg, 1 );
+                       $this->fatalError( $msg );
                }
        }
 
@@ -652,17 +664,17 @@ abstract class Maintenance {
 
                # Abort if called from a web server
                if ( isset( $_SERVER ) && isset( $_SERVER['REQUEST_METHOD'] ) ) {
-                       $this->error( 'This script must be run from the command line', true );
+                       $this->fatalError( 'This script must be run from the command line' );
                }
 
                if ( $IP === null ) {
-                       $this->error( "\$IP not set, aborting!\n" .
-                               '(Did you forget to call parent::__construct() in your maintenance script?)', 1 );
+                       $this->fatalError( "\$IP not set, aborting!\n" .
+                               '(Did you forget to call parent::__construct() in your maintenance script?)' );
                }
 
                # Make sure we can handle script parameters
                if ( !defined( 'HPHP_VERSION' ) && !ini_get( 'register_argc_argv' ) ) {
-                       $this->error( 'Cannot get command line arguments, register_argc_argv is set to false', true );
+                       $this->fatalError( 'Cannot get command line arguments, register_argc_argv is set to false' );
                }
 
                // Send PHP warnings and errors to stderr instead of stdout.
@@ -1177,9 +1189,9 @@ abstract class Maintenance {
                }
 
                if ( !is_readable( $settingsFile ) ) {
-                       $this->error( "A copy of your installation's LocalSettings.php\n" .
+                       $this->fatalError( "A copy of your installation's LocalSettings.php\n" .
                                "must exist and be readable in the source directory.\n" .
-                               "Use --conf to specify it.", true );
+                               "Use --conf to specify it." );
                }
                $wgCommandLineMode = true;
 
index 60b8a7a..341a299 100644 (file)
@@ -419,10 +419,6 @@ class BackupDumper extends Maintenance {
                        fwrite( $this->stderr, $string . "\n" );
                }
        }
-
-       function fatalError( $msg ) {
-               $this->error( "$msg\n", 1 );
-       }
 }
 
 class ExportProgressFilter extends DumpFilter {
index dc92516..fa93f23 100644 (file)
@@ -41,7 +41,7 @@ class BenchmarkJSMinPlus extends Benchmarker {
                $content = file_get_contents( $this->getOption( 'file' ) );
                MediaWiki\restoreWarnings();
                if ( $content === false ) {
-                       $this->error( 'Unable to open input file', 1 );
+                       $this->fatalError( 'Unable to open input file' );
                }
 
                $filename = basename( $this->getOption( 'file' ) );
index 1753250..a613f96 100644 (file)
@@ -106,7 +106,7 @@ class BenchmarkParse extends Maintenance {
 
                $loops = $this->getOption( 'loops', 1 );
                if ( $loops < 1 ) {
-                       $this->error( 'Invalid number of loops specified', true );
+                       $this->fatalError( 'Invalid number of loops specified' );
                }
                $startUsage = getrusage();
                $startTime = microtime( true );
index e006cf5..8566c0b 100644 (file)
@@ -37,7 +37,7 @@ class BenchmarkPurge extends Benchmarker {
        public function execute() {
                global $wgUseSquid, $wgSquidServers;
                if ( !$wgUseSquid ) {
-                       $this->error( "Squid purge benchmark doesn't do much without squid support on.", true );
+                       $this->fatalError( "Squid purge benchmark doesn't do much without squid support on." );
                } else {
                        $this->output( "There are " . count( $wgSquidServers ) . " defined squid servers:\n" );
                        if ( $this->hasOption( 'count' ) ) {
index 1479174..6698db3 100644 (file)
@@ -15,19 +15,19 @@ class BenchmarkTidy extends Maintenance {
        public function execute() {
                $html = file_get_contents( $this->getOption( 'file' ) );
                if ( $html === false ) {
-                       $this->error( "Unable to open input file", 1 );
+                       $this->fatalError( "Unable to open input file" );
                }
                if ( $this->hasOption( 'driver' ) || $this->hasOption( 'tidy-config' ) ) {
                        $config = json_decode( $this->getOption( 'tidy-config', '{}' ), true );
                        if ( !is_array( $config ) ) {
-                               $this->error( "Invalid JSON tidy config", 1 );
+                               $this->fatalError( "Invalid JSON tidy config" );
                        }
                        $config += [ 'driver' => $this->getOption( 'driver', 'RemexHtml' ) ];
                        $driver = MWTidy::factory( $config );
                } else {
                        $driver = MWTidy::singleton();
                        if ( !$driver ) {
-                               $this->error( "Tidy disabled or not installed", 1 );
+                               $this->fatalError( "Tidy disabled or not installed" );
                        }
                }
 
index 9fa6632..d7db321 100644 (file)
@@ -46,10 +46,10 @@ class ChangePassword extends Maintenance {
                } elseif ( $this->hasOption( "userid" ) ) {
                        $user = User::newFromId( $this->getOption( 'userid' ) );
                } else {
-                       $this->error( "A \"user\" or \"userid\" must be set to change the password for", true );
+                       $this->fatalError( "A \"user\" or \"userid\" must be set to change the password for" );
                }
                if ( !$user || !$user->getId() ) {
-                       $this->error( "No such user: " . $this->getOption( 'user' ), true );
+                       $this->fatalError( "No such user: " . $this->getOption( 'user' ) );
                }
                $password = $this->getOption( 'password' );
                try {
@@ -64,7 +64,7 @@ class ChangePassword extends Maintenance {
                        $user->saveSettings();
                        $this->output( "Password set for " . $user->getName() . "\n" );
                } catch ( PasswordError $pwe ) {
-                       $this->error( $pwe->getText(), true );
+                       $this->fatalError( $pwe->getText() );
                }
        }
 }
index e5b4c13..22f5969 100644 (file)
@@ -24,9 +24,8 @@ class CheckComposerLockUpToDate extends Maintenance {
                        // Maybe they're using mediawiki/vendor?
                        $lockLocation = "$IP/vendor/composer.lock";
                        if ( !file_exists( $lockLocation ) ) {
-                               $this->error(
-                                       'Could not find composer.lock file. Have you run "composer install --no-dev"?',
-                                       1
+                               $this->fatalError(
+                                       'Could not find composer.lock file. Have you run "composer install --no-dev"?'
                                );
                        }
                }
@@ -51,10 +50,9 @@ class CheckComposerLockUpToDate extends Maintenance {
                        }
                }
                if ( $found ) {
-                       $this->error(
+                       $this->fatalError(
                                'Error: your composer.lock file is not up to date. ' .
-                                       'Run "composer update --no-dev" to install newer dependencies',
-                               1
+                                       'Run "composer update --no-dev" to install newer dependencies'
                        );
                } else {
                        // We couldn't find any out-of-date dependencies, so assume everything is ok!
index fc3cc5b..3d039fa 100644 (file)
@@ -47,7 +47,7 @@ class CleanupSpam extends Maintenance {
                $username = wfMessage( 'spambot_username' )->text();
                $wgUser = User::newSystemUser( $username );
                if ( !$wgUser ) {
-                       $this->error( "Invalid username specified in 'spambot_username' message: $username", true );
+                       $this->fatalError( "Invalid username specified in 'spambot_username' message: $username" );
                }
                // Hack: Grant bot rights so we don't flood RecentChanges
                $wgUser->addGroup( 'bot' );
@@ -55,7 +55,7 @@ class CleanupSpam extends Maintenance {
                $spec = $this->getArg();
                $like = LinkFilter::makeLikeArray( $spec );
                if ( !$like ) {
-                       $this->error( "Not a valid hostname specification: $spec", true );
+                       $this->fatalError( "Not a valid hostname specification: $spec" );
                }
 
                if ( $this->hasOption( 'all' ) ) {
index 50e17d8..24d6d86 100644 (file)
@@ -165,7 +165,7 @@ class TitleCleanup extends TableCleanup {
                        $title = $verified;
                }
                if ( is_null( $title ) ) {
-                       $this->error( "Something awry; empty title.", true );
+                       $this->fatalError( "Something awry; empty title." );
                }
                $ns = $title->getNamespace();
                $dest = $title->getDBkey();
index 14c6a6b..aeaf150 100644 (file)
@@ -122,7 +122,7 @@ class UploadStashCleanup extends Maintenance {
                $iterator = $tempRepo->getBackend()->getFileList( [ 'dir' => $dir, 'adviseStat' => 1 ] );
                $this->output( "Deleting orphaned temp files...\n" );
                if ( strpos( $dir, '/local-temp' ) === false ) { // sanity check
-                       $this->error( "Temp repo is not using the temp container.", 1 ); // die
+                       $this->fatalError( "Temp repo is not using the temp container." );
                }
                $i = 0;
                $batch = []; // operation batch
index f2540c7..3b09385 100644 (file)
@@ -97,7 +97,7 @@ class CompareParsers extends DumpIterator {
                if ( $this->hasOption( 'tidy' ) ) {
                        global $wgUseTidy;
                        if ( !$wgUseTidy ) {
-                               $this->error( 'Tidy was requested but $wgUseTidy is not set in LocalSettings.php', true );
+                               $this->fatalError( 'Tidy was requested but $wgUseTidy is not set in LocalSettings.php' );
                        }
                        $this->options->setTidy( true );
                }
index 0554949..24391c1 100644 (file)
@@ -82,7 +82,7 @@ class ConvertExtensionToRegistration extends Maintenance {
                unset( $var );
                $arg = $this->getArg( 0 );
                if ( !is_file( $arg ) ) {
-                       $this->error( "$arg is not a file.", true );
+                       $this->fatalError( "$arg is not a file." );
                }
                require $arg;
                unset( $arg );
@@ -160,14 +160,14 @@ class ConvertExtensionToRegistration extends Maintenance {
        protected function handleExtensionFunctions( $realName, $value ) {
                foreach ( $value as $func ) {
                        if ( $func instanceof Closure ) {
-                               $this->error( "Error: Closures cannot be converted to JSON. " .
-                                       "Please move your extension function somewhere else.", 1
+                               $this->fatalError( "Error: Closures cannot be converted to JSON. " .
+                                       "Please move your extension function somewhere else."
                                );
                        }
                        // check if $func exists in the global scope
                        if ( function_exists( $func ) ) {
-                               $this->error( "Error: Global functions cannot be converted to JSON. " .
-                                       "Please move your extension function ($func) into a class.", 1
+                               $this->fatalError( "Error: Global functions cannot be converted to JSON. " .
+                                       "Please move your extension function ($func) into a class."
                                );
                        }
                }
@@ -239,14 +239,14 @@ class ConvertExtensionToRegistration extends Maintenance {
                        }
                        foreach ( $handlers as $func ) {
                                if ( $func instanceof Closure ) {
-                                       $this->error( "Error: Closures cannot be converted to JSON. " .
-                                               "Please move the handler for $hookName somewhere else.", 1
+                                       $this->fatalError( "Error: Closures cannot be converted to JSON. " .
+                                               "Please move the handler for $hookName somewhere else."
                                        );
                                }
                                // Check if $func exists in the global scope
                                if ( function_exists( $func ) ) {
-                                       $this->error( "Error: Global functions cannot be converted to JSON. " .
-                                               "Please move the handler for $hookName inside a class.", 1
+                                       $this->fatalError( "Error: Global functions cannot be converted to JSON. " .
+                                               "Please move the handler for $hookName inside a class."
                                        );
                                }
                        }
index ee103b8..b46cac7 100644 (file)
@@ -81,7 +81,7 @@ class CopyFileBackend extends Maintenance {
                                        'adviseStat' => true // avoid HEADs
                                ] );
                                if ( $srcPathsRel === null ) {
-                                       $this->error( "Could not list files in $container.", 1 ); // die
+                                       $this->fatalError( "Could not list files in $container." );
                                }
                        }
 
@@ -93,7 +93,7 @@ class CopyFileBackend extends Maintenance {
                                        'adviseStat' => true // avoid HEADs
                                ] );
                                if ( $dstPathsRel === null ) {
-                                       $this->error( "Could not list files in $container.", 1 ); // die
+                                       $this->fatalError( "Could not list files in $container." );
                                }
                                $this->statCache = [];
                                foreach ( $dstPathsRel as $dstPathRel ) {
@@ -174,12 +174,12 @@ class CopyFileBackend extends Maintenance {
                $srcPathsRel = $src->getFileList( [
                        'dir' => $src->getRootStoragePath() . "/$backendRel" ] );
                if ( $srcPathsRel === null ) {
-                       $this->error( "Could not list files in source container.", 1 ); // die
+                       $this->fatalError( "Could not list files in source container." );
                }
                $dstPathsRel = $dst->getFileList( [
                        'dir' => $dst->getRootStoragePath() . "/$backendRel" ] );
                if ( $dstPathsRel === null ) {
-                       $this->error( "Could not list files in destination container.", 1 ); // die
+                       $this->fatalError( "Could not list files in destination container." );
                }
                // Get the list of destination files
                $relFilesDstSha1 = [];
@@ -263,7 +263,7 @@ class CopyFileBackend extends Maintenance {
                        $status = $dst->prepare( [ 'dir' => dirname( $dstPath ), 'bypassReadOnly' => 1 ] );
                        if ( !$status->isOK() ) {
                                $this->error( print_r( $status->getErrorsArray(), true ) );
-                               $this->error( "$wikiId: Could not copy $srcPath to $dstPath.", 1 ); // die
+                               $this->fatalError( "$wikiId: Could not copy $srcPath to $dstPath." );
                        }
                        $ops[] = [ 'op' => 'store',
                                'src' => $fsFile->getPath(), 'dst' => $dstPath, 'overwrite' => 1 ];
@@ -280,7 +280,7 @@ class CopyFileBackend extends Maintenance {
                $elapsed_ms = floor( ( microtime( true ) - $t_start ) * 1000 );
                if ( !$status->isOK() ) {
                        $this->error( print_r( $status->getErrorsArray(), true ) );
-                       $this->error( "$wikiId: Could not copy file batch.", 1 ); // die
+                       $this->fatalError( "$wikiId: Could not copy file batch." );
                } elseif ( count( $copiedRel ) ) {
                        $this->output( "\n\tCopied these file(s) [{$elapsed_ms}ms]:\n\t" .
                                implode( "\n\t", $copiedRel ) . "\n\n" );
@@ -317,7 +317,7 @@ class CopyFileBackend extends Maintenance {
                $elapsed_ms = floor( ( microtime( true ) - $t_start ) * 1000 );
                if ( !$status->isOK() ) {
                        $this->error( print_r( $status->getErrorsArray(), true ) );
-                       $this->error( "$wikiId: Could not delete file batch.", 1 ); // die
+                       $this->fatalError( "$wikiId: Could not delete file batch." );
                } elseif ( count( $deletedRel ) ) {
                        $this->output( "\n\tDeleted these file(s) [{$elapsed_ms}ms]:\n\t" .
                                implode( "\n\t", $deletedRel ) . "\n\n" );
index 08e40fd..7dd40b8 100644 (file)
@@ -48,9 +48,9 @@ class CopyJobQueue extends Maintenance {
                $dstKey = $this->getOption( 'dst' );
 
                if ( !isset( $wgJobQueueMigrationConfig[$srcKey] ) ) {
-                       $this->error( "\$wgJobQueueMigrationConfig not set for '$srcKey'.", 1 );
+                       $this->fatalError( "\$wgJobQueueMigrationConfig not set for '$srcKey'." );
                } elseif ( !isset( $wgJobQueueMigrationConfig[$dstKey] ) ) {
-                       $this->error( "\$wgJobQueueMigrationConfig not set for '$dstKey'.", 1 );
+                       $this->fatalError( "\$wgJobQueueMigrationConfig not set for '$dstKey'." );
                }
 
                $types = ( $this->getOption( 'type' ) === 'all' )
index 1872716..8035c3e 100644 (file)
@@ -63,15 +63,15 @@ class CreateAndPromote extends Maintenance {
 
                $user = User::newFromName( $username );
                if ( !is_object( $user ) ) {
-                       $this->error( "invalid username.", true );
+                       $this->fatalError( "invalid username." );
                }
 
                $exists = ( 0 !== $user->idForName() );
 
                if ( $exists && !$force ) {
-                       $this->error( "Account exists. Perhaps you want the --force option?", true );
+                       $this->fatalError( "Account exists. Perhaps you want the --force option?" );
                } elseif ( !$exists && !$password ) {
-                       $this->error( "Argument <password> required!", false );
+                       $this->error( "Argument <password> required!" );
                        $this->maybeHelp( true );
                } elseif ( $exists ) {
                        $inGroups = $user->getGroups();
@@ -133,7 +133,7 @@ class CreateAndPromote extends Maintenance {
                                        $user->saveSettings();
                                }
                        } catch ( PasswordError $pwe ) {
-                               $this->error( $pwe->getText(), true );
+                               $this->fatalError( $pwe->getText() );
                        }
                }
 
index f7e0c0f..e77113a 100644 (file)
@@ -60,12 +60,12 @@ class GenerateCommonPassword extends Maintenance {
                $outfile = $this->getArg( 1 );
 
                if ( !is_readable( $infile ) && $infile !== 'php://stdin' ) {
-                       $this->error( "Cannot open input file $infile for reading", 1 );
+                       $this->fatalError( "Cannot open input file $infile for reading" );
                }
 
                $file = fopen( $infile, 'r' );
                if ( $file === false ) {
-                       $this->error( "Cannot read input file $infile", 1 );
+                       $this->fatalError( "Cannot read input file $infile" );
                }
 
                try {
@@ -109,7 +109,7 @@ class GenerateCommonPassword extends Maintenance {
                                " (out of $i) passwords to $outfile\n"
                        );
                } catch ( \Cdb\Exception $e ) {
-                       $this->error( "Error writing cdb file: " . $e->getMessage(), 2 );
+                       $this->fatalError( "Error writing cdb file: " . $e->getMessage(), 2 );
                }
        }
 }
index 0020446..eceadc1 100644 (file)
@@ -65,7 +65,7 @@ class DeleteBatch extends Maintenance {
                        $user = User::newFromName( $username );
                }
                if ( !$user ) {
-                       $this->error( "Invalid username", true );
+                       $this->fatalError( "Invalid username" );
                }
                $wgUser = $user;
 
@@ -77,7 +77,7 @@ class DeleteBatch extends Maintenance {
 
                # Setup
                if ( !$file ) {
-                       $this->error( "Unable to read file, exiting", true );
+                       $this->fatalError( "Unable to read file, exiting" );
                }
 
                $dbw = $this->getDB( DB_MASTER );
index ba8662a..417aa03 100644 (file)
@@ -72,7 +72,7 @@ class DeleteDefaultMessages extends Maintenance {
                // in order to hide it in RecentChanges.
                $user = User::newFromName( 'MediaWiki default' );
                if ( !$user ) {
-                       $this->error( "Invalid username", true );
+                       $this->fatalError( "Invalid username" );
                }
                $user->addGroup( 'bot' );
                $wgUser = $user;
index 5fc7d18..2a1fe22 100644 (file)
@@ -123,7 +123,7 @@ class DeleteEqualMessages extends Maintenance {
                                $this->fetchMessageInfo( false, $messageInfo );
                        } else {
                                if ( !isset( $langCodes[$langCode] ) ) {
-                                       $this->error( 'Invalid language code: ' . $langCode, 1 );
+                                       $this->fatalError( 'Invalid language code: ' . $langCode );
                                }
                                $this->fetchMessageInfo( $langCode, $messageInfo );
                        }
@@ -164,7 +164,7 @@ class DeleteEqualMessages extends Maintenance {
 
                $user = User::newSystemUser( 'MediaWiki default', [ 'steal' => true ] );
                if ( !$user ) {
-                       $this->error( "Invalid username", true );
+                       $this->fatalError( "Invalid username" );
                }
                global $wgUser;
                $wgUser = $user;
index 9bf1222..4890199 100644 (file)
@@ -87,7 +87,7 @@ TEXT
                } elseif ( $this->hasOption( 'revrange' ) ) {
                        $this->dump( WikiExporter::RANGE, $textMode );
                } else {
-                       $this->error( 'No valid action specified.', 1 );
+                       $this->fatalError( 'No valid action specified.' );
                }
        }
 
index 6dbad94..254f368 100644 (file)
@@ -48,7 +48,7 @@ abstract class DumpIterator extends Maintenance {
 
        public function execute() {
                if ( !( $this->hasOption( 'file' ) ^ $this->hasOption( 'dump' ) ) ) {
-                       $this->error( "You must provide a file or dump", true );
+                       $this->fatalError( "You must provide a file or dump" );
                }
 
                $this->checkOptions();
@@ -70,8 +70,8 @@ abstract class DumpIterator extends Maintenance {
                if ( $this->getOption( 'dump' ) == '-' ) {
                        $source = new ImportStreamSource( $this->getStdin() );
                } else {
-                       $this->error( "Sorry, I don't support dump filenames yet. "
-                               . "Use - and provide it on stdin on the meantime.", true );
+                       $this->fatalError( "Sorry, I don't support dump filenames yet. "
+                               . "Use - and provide it on stdin on the meantime." );
                }
                $importer = new WikiImporter( $source, $this->getConfig() );
 
index 4219ed0..7e50e9e 100644 (file)
@@ -59,7 +59,7 @@ class EditCLI extends Maintenance {
                        $wgUser = User::newFromName( $userName );
                }
                if ( !$wgUser ) {
-                       $this->error( "Invalid username", true );
+                       $this->fatalError( "Invalid username" );
                }
                if ( $wgUser->isAnon() ) {
                        $wgUser->addToDatabase();
@@ -67,13 +67,13 @@ class EditCLI extends Maintenance {
 
                $title = Title::newFromText( $this->getArg() );
                if ( !$title ) {
-                       $this->error( "Invalid title", true );
+                       $this->fatalError( "Invalid title" );
                }
 
                if ( $this->hasOption( 'nocreate' ) && !$title->exists() ) {
-                       $this->error( "Page does not exist", true );
+                       $this->fatalError( "Page does not exist" );
                } elseif ( $this->hasOption( 'createonly' ) && $title->exists() ) {
-                       $this->error( "Page already exists", true );
+                       $this->fatalError( "Page already exists" );
                }
 
                $page = WikiPage::factory( $title );
index d94d49b..24ef1ed 100644 (file)
@@ -50,7 +50,7 @@ class EraseArchivedFile extends Maintenance {
 
                if ( $filekey === '*' ) { // all versions by name
                        if ( !strlen( $filename ) ) {
-                               $this->error( "Missing --filename parameter.", 1 );
+                               $this->fatalError( "Missing --filename parameter." );
                        }
                        $afile = false;
                } else { // specified version
@@ -60,7 +60,7 @@ class EraseArchivedFile extends Maintenance {
                                [ 'fa_storage_group' => 'deleted', 'fa_storage_key' => $filekey ],
                                __METHOD__, [], $fileQuery['joins'] );
                        if ( !$row ) {
-                               $this->error( "No deleted file exists with key '$filekey'.", 1 );
+                               $this->fatalError( "No deleted file exists with key '$filekey'." );
                        }
                        $filename = $row->fa_name;
                        $afile = ArchivedFile::newFromRow( $row );
@@ -68,7 +68,7 @@ class EraseArchivedFile extends Maintenance {
 
                $file = wfLocalFile( $filename );
                if ( $file->exists() ) {
-                       $this->error( "File '$filename' is still a public file, use the delete form.\n", 1 );
+                       $this->fatalError( "File '$filename' is still a public file, use the delete form.\n" );
                }
 
                $this->output( "Purging all thumbnails for file '$filename'..." );
index b1e4fa9..542bdda 100644 (file)
@@ -37,7 +37,7 @@ class ExportSites extends Maintenance {
                $handle = fopen( $file, 'w' );
 
                if ( !$handle ) {
-                       $this->error( "Failed to open $file for writing.\n", 1 );
+                       $this->fatalError( "Failed to open $file for writing.\n" );
                }
 
                $exporter = new SiteExporter( $handle );
index fd36db1..6a21a61 100644 (file)
@@ -143,7 +143,7 @@ class FindHooks extends Maintenance {
                ) {
                        $this->output( "Looks good!\n" );
                } else {
-                       $this->error( 'The script finished with errors.', 1 );
+                       $this->fatalError( 'The script finished with errors.' );
                }
        }
 
index c4cab71..522bbc2 100644 (file)
@@ -37,7 +37,7 @@ class FindOrphanedFiles extends Maintenance {
 
                $repo = RepoGroup::singleton()->getLocalRepo();
                if ( $repo->hasSha1Storage() ) {
-                       $this->error( "Local repo uses SHA-1 file storage names; aborting.", 1 );
+                       $this->fatalError( "Local repo uses SHA-1 file storage names; aborting." );
                }
 
                $directory = $repo->getZonePath( 'public' );
@@ -51,7 +51,7 @@ class FindOrphanedFiles extends Maintenance {
 
                $list = $repo->getBackend()->getFileList( [ 'dir' => $directory ] );
                if ( $list === null ) {
-                       $this->error( "Could not get file listing.", 1 );
+                       $this->fatalError( "Could not get file listing." );
                }
 
                $pathBatch = [];
index 8c9faca..7e29f09 100644 (file)
@@ -48,7 +48,7 @@ class FixDoubleRedirects extends Maintenance {
                if ( $this->hasOption( 'title' ) ) {
                        $title = Title::newFromText( $this->getOption( 'title' ) );
                        if ( !$title || !$title->isRedirect() ) {
-                               $this->error( $title->getPrefixedText() . " is not a redirect!\n", true );
+                               $this->fatalError( $title->getPrefixedText() . " is not a redirect!\n" );
                        }
                } else {
                        $title = null;
index 796ec26..1efbc5f 100644 (file)
@@ -56,7 +56,7 @@ class FixTimestamps extends Maintenance {
                $row = $dbw->fetchObject( $res );
 
                if ( is_null( $row->minrev ) ) {
-                       $this->error( "No revisions in search period.", true );
+                       $this->fatalError( "No revisions in search period." );
                }
 
                $minRev = $row->minrev;
@@ -99,14 +99,14 @@ class FixTimestamps extends Maintenance {
 
                $numBadRevs = count( $badRevs );
                if ( $numBadRevs > $numGoodRevs ) {
-                       $this->error(
+                       $this->fatalError(
                                "The majority of revisions in the search interval are marked as bad.
 
                Are you sure the offset ($offset) has the right sign? Positive means the clock
                was incorrectly set forward, negative means the clock was incorrectly set back.
 
                If the offset is right, then increase the search interval until there are enough
-               good revisions to provide a majority reference.", true );
+               good revisions to provide a majority reference." );
                } elseif ( $numBadRevs == 0 ) {
                        $this->output( "No bad revisions found.\n" );
                        exit( 0 );
index e2b3c41..95d90c1 100644 (file)
@@ -41,8 +41,7 @@ class MaintenanceFormatInstallDoc extends Maintenance {
                        $fileName = $this->getArg( 0 );
                        $inFile = fopen( $fileName, 'r' );
                        if ( !$inFile ) {
-                               $this->error( "Unable to open input file \"$fileName\"" );
-                               exit( 1 );
+                               $this->fatalError( "Unable to open input file \"$fileName\"" );
                        }
                } else {
                        $inFile = STDIN;
@@ -52,8 +51,7 @@ class MaintenanceFormatInstallDoc extends Maintenance {
                        $fileName = $this->getOption( 'outfile' );
                        $outFile = fopen( $fileName, 'w' );
                        if ( !$outFile ) {
-                               $this->error( "Unable to open output file \"$fileName\"" );
-                               exit( 1 );
+                               $this->fatalError( "Unable to open output file \"$fileName\"" );
                        }
                } else {
                        $outFile = STDOUT;
index a84f2ae..ec32aee 100644 (file)
@@ -55,7 +55,7 @@ class GenerateJsonI18n extends Maintenance {
 
                if ( $extension ) {
                        if ( $phpfile ) {
-                               $this->error( "The phpfile is already specified, conflicts with --extension.", 1 );
+                               $this->fatalError( "The phpfile is already specified, conflicts with --extension." );
                        }
                        $phpfile = "$IP/extensions/$extension/$extension.i18n.php";
                }
@@ -101,28 +101,28 @@ class GenerateJsonI18n extends Maintenance {
                        $this->output( "Creating directory $jsondir.\n" );
                        $success = mkdir( $jsondir );
                        if ( !$success ) {
-                               $this->error( "Could not create directory $jsondir", 1 );
+                               $this->fatalError( "Could not create directory $jsondir" );
                        }
                }
 
                if ( !is_readable( $phpfile ) ) {
-                       $this->error( "Error reading $phpfile", 1 );
+                       $this->fatalError( "Error reading $phpfile" );
                }
                $messages = null;
                include $phpfile;
                $phpfileContents = file_get_contents( $phpfile );
 
                if ( !isset( $messages ) ) {
-                       $this->error( "PHP file $phpfile does not define \$messages array", 1 );
+                       $this->fatalError( "PHP file $phpfile does not define \$messages array" );
                }
 
                if ( !$messages ) {
-                       $this->error( "PHP file $phpfile contains an empty \$messages array. " .
-                               "Maybe it was already converted?", 1 );
+                       $this->fatalError( "PHP file $phpfile contains an empty \$messages array. " .
+                               "Maybe it was already converted?" );
                }
 
                if ( !isset( $messages['en'] ) || !is_array( $messages['en'] ) ) {
-                       $this->error( "PHP file $phpfile does not set language codes", 1 );
+                       $this->fatalError( "PHP file $phpfile does not set language codes" );
                }
 
                foreach ( $messages as $langcode => $langmsgs ) {
@@ -142,7 +142,7 @@ class GenerateJsonI18n extends Maintenance {
                                FormatJson::encode( $langmsgs, "\t", FormatJson::ALL_OK ) . "\n"
                        );
                        if ( $success === false ) {
-                               $this->error( "FAILED to write $jsonfile", 1 );
+                               $this->fatalError( "FAILED to write $jsonfile" );
                        }
                        $this->output( "$jsonfile\n" );
                }
index 26a9c39..bed84a8 100644 (file)
@@ -182,7 +182,7 @@ class GenerateSitemap extends Maintenance {
                # Create directory if needed
                $fspath = $this->getOption( 'fspath', getcwd() );
                if ( !wfMkdirParents( $fspath, null, __METHOD__ ) ) {
-                       $this->error( "Can not create directory $fspath.", 1 );
+                       $this->fatalError( "Can not create directory $fspath." );
                }
 
                $this->fspath = realpath( $fspath ) . DIRECTORY_SEPARATOR;
index 65ffe14..18dcc22 100644 (file)
@@ -64,7 +64,7 @@ class GetConfiguration extends Maintenance {
 
                $validFormat = in_array( $format, self::$outFormats );
                if ( !$validFormat ) {
-                       $this->error( "--format set to an unrecognized format", 0 );
+                       $this->error( "--format set to an unrecognized format" );
                        $error_out = true;
                }
 
index f519a79..21a183b 100644 (file)
@@ -42,13 +42,13 @@ class GetTextMaint extends Maintenance {
                $titleText = $this->getArg( 0 );
                $title = Title::newFromText( $titleText );
                if ( !$title ) {
-                       $this->error( "$titleText is not a valid title.\n", true );
+                       $this->fatalError( "$titleText is not a valid title.\n" );
                }
 
                $rev = Revision::newFromTitle( $title );
                if ( !$rev ) {
                        $titleText = $title->getPrefixedText();
-                       $this->error( "Page $titleText does not exist.\n", true );
+                       $this->fatalError( "Page $titleText does not exist.\n" );
                }
                $content = $rev->getContent( $this->hasOption( 'show-private' )
                        ? Revision::RAW
@@ -56,7 +56,7 @@ class GetTextMaint extends Maintenance {
 
                if ( $content === false ) {
                        $titleText = $title->getPrefixedText();
-                       $this->error( "Couldn't extract the text from $titleText.\n", true );
+                       $this->fatalError( "Couldn't extract the text from $titleText.\n" );
                }
                $this->output( $content->serialize() );
        }
index c1aa082..f77f5b9 100644 (file)
@@ -97,7 +97,7 @@ class HHVMMakeRepo extends Maintenance {
 
                $tmpDir = wfTempDir() . '/mw-make-repo' . mt_rand( 0, 1 << 31 );
                if ( !mkdir( $tmpDir ) ) {
-                       $this->error( 'Unable to create temporary directory', 1 );
+                       $this->fatalError( 'Unable to create temporary directory' );
                }
                file_put_contents( "$tmpDir/file-list", implode( "\n", $files ) );
 
@@ -119,11 +119,11 @@ class HHVMMakeRepo extends Maintenance {
                passthru( $cmd, $ret );
                if ( $ret ) {
                        $this->cleanupTemp( $tmpDir );
-                       $this->error( "Error: HHVM returned error code $ret", 1 );
+                       $this->fatalError( "Error: HHVM returned error code $ret" );
                }
                if ( !rename( "$tmpDir/hhvm.hhbc", $this->getOption( 'output' ) ) ) {
                        $this->cleanupTemp( $tmpDir );
-                       $this->error( "Error: unable to rename output file", 1 );
+                       $this->fatalError( "Error: unable to rename output file" );
                }
                $this->cleanupTemp( $tmpDir );
                return 0;
index 206c7ee..cf0e7d8 100644 (file)
@@ -87,7 +87,7 @@ TEXT
 
        public function execute() {
                if ( wfReadOnly() ) {
-                       $this->error( "Wiki is in read-only mode; you'll need to disable it for import to work.", true );
+                       $this->fatalError( "Wiki is in read-only mode; you'll need to disable it for import to work." );
                }
 
                $this->reportingInterval = intval( $this->getOption( 'report', 100 ) );
@@ -134,7 +134,7 @@ TEXT
                if ( strval( $ns ) === $namespace && $wgContLang->getNsText( $ns ) !== false ) {
                        return $ns;
                }
-               $this->error( "Unknown namespace text / index specified: $namespace", true );
+               $this->fatalError( "Unknown namespace text / index specified: $namespace" );
        }
 
        /**
@@ -299,7 +299,7 @@ TEXT
                        $statusRootPage = $importer->setTargetRootPage( $this->getOption( 'rootpage' ) );
                        if ( !$statusRootPage->isGood() ) {
                                // Die here so that it doesn't print "Done!"
-                               $this->error( $statusRootPage->getMessage()->text(), 1 );
+                               $this->fatalError( $statusRootPage->getMessage()->text() );
                                return false;
                        }
                }
index e733b9a..d3aa280 100644 (file)
@@ -133,11 +133,11 @@ class ImportImages extends Maintenance {
 
                # Check Protection
                if ( $this->hasOption( 'protect' ) && $this->hasOption( 'unprotect' ) ) {
-                       $this->error( "Cannot specify both protect and unprotect.  Only 1 is allowed.\n", 1 );
+                       $this->fatalError( "Cannot specify both protect and unprotect.  Only 1 is allowed.\n" );
                }
 
                if ( $this->hasOption( 'protect' ) && trim( $this->getOption( 'protect' ) ) ) {
-                       $this->error( "You must specify a protection option.\n", 1 );
+                       $this->fatalError( "You must specify a protection option.\n" );
                }
 
                # Prepare the list of allowed extensions
@@ -170,7 +170,7 @@ class ImportImages extends Maintenance {
                if ( $commentFile !== null ) {
                        $comment = file_get_contents( $commentFile );
                        if ( $comment === false || $comment === null ) {
-                               $this->error( "failed to read comment file: {$commentFile}\n", 1 );
+                               $this->fatalError( "failed to read comment file: {$commentFile}\n" );
                        }
                } else {
                        $comment = $this->getOption( 'comment', 'Importing file' );
@@ -299,7 +299,7 @@ class ImportImages extends Maintenance {
                                                " publishing {$file} by '{$wgUser->getName()}', comment '$commentText'... "
                                        );
                                } else {
-                                       $mwProps = new MWFileProps( MimeMagic::singleton() );
+                                       $mwProps = new MWFileProps( MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer() );
                                        $props = $mwProps->getPropsFromPath( $file, true );
                                        $flags = 0;
                                        $publishOptions = [];
index 816e745..4681003 100644 (file)
@@ -73,7 +73,7 @@ class ImportTextFiles extends Maintenance {
                                        $files[$filename] = file_get_contents( $filename );
                                }
                                if ( !$found ) {
-                                       $this->error( "Fatal error: The file '$arg' does not exist!", 1 );
+                                       $this->fatalError( "Fatal error: The file '$arg' does not exist!" );
                                }
                        }
                };
@@ -88,7 +88,7 @@ class ImportTextFiles extends Maintenance {
                }
 
                if ( !$user ) {
-                       $this->error( "Invalid username\n", true );
+                       $this->fatalError( "Invalid username\n" );
                }
                if ( $user->isAnon() ) {
                        $user->addToDatabase();
@@ -199,7 +199,7 @@ class ImportTextFiles extends Maintenance {
 
                $this->output( "Done! $successCount succeeded, $skipCount skipped.\n" );
                if ( $exit ) {
-                       $this->error( "Import failed with $failCount failed pages.\n", $exit );
+                       $this->fatalError( "Import failed with $failCount failed pages.\n", $exit );
                }
        }
 }
index cac3009..c996530 100644 (file)
@@ -136,7 +136,7 @@ class CommandLineInstaller extends Maintenance {
                        $dbpass = file_get_contents( $dbpassfile ); // returns false on failure
                        MediaWiki\restoreWarnings();
                        if ( $dbpass === false ) {
-                               $this->error( "Couldn't open $dbpassfile", true );
+                               $this->fatalError( "Couldn't open $dbpassfile" );
                        }
                        $this->mOptions['dbpass'] = trim( $dbpass, "\r\n" );
                }
@@ -153,11 +153,11 @@ class CommandLineInstaller extends Maintenance {
                        $pass = file_get_contents( $passfile ); // returns false on failure
                        MediaWiki\restoreWarnings();
                        if ( $pass === false ) {
-                               $this->error( "Couldn't open $passfile", true );
+                               $this->fatalError( "Couldn't open $passfile" );
                        }
                        $this->mOptions['pass'] = trim( $pass, "\r\n" );
                } elseif ( $this->getOption( 'pass' ) === null ) {
-                       $this->error( 'You need to provide the option "pass" or "passfile"', true );
+                       $this->fatalError( 'You need to provide the option "pass" or "passfile"' );
                }
        }
 
index 8f67acd..6e62cd1 100644 (file)
@@ -49,9 +49,9 @@ class InvalidateUserSesssions extends Maintenance {
                $file = $this->getOption( 'file' );
 
                if ( $username === null && $file === null ) {
-                       $this->error( 'Either --user or --file is required', 1 );
+                       $this->fatalError( 'Either --user or --file is required' );
                } elseif ( $username !== null && $file !== null ) {
-                       $this->error( 'Cannot use both --user and --file', 1 );
+                       $this->fatalError( 'Cannot use both --user and --file' );
                }
 
                if ( $username !== null ) {
@@ -60,7 +60,7 @@ class InvalidateUserSesssions extends Maintenance {
                        $usernames = is_readable( $file ) ?
                                file( $file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES ) : false;
                        if ( $usernames === false ) {
-                               $this->error( "Could not open $file", 2 );
+                               $this->fatalError( "Could not open $file", 2 );
                        }
                }
 
index ccfece0..141f1ea 100644 (file)
@@ -131,16 +131,14 @@ class GenerateCollationData extends Maintenance {
                                $error .= "* $ucdallURL\n";
                        }
 
-                       $this->error( $error );
-                       exit( 1 );
+                       $this->fatalError( $error );
                }
 
                $debugOutFileName = $this->getOption( 'debug-output' );
                if ( $debugOutFileName ) {
                        $this->debugOutFile = fopen( $debugOutFileName, 'w' );
                        if ( !$this->debugOutFile ) {
-                               $this->error( "Unable to open debug output file for writing" );
-                               exit( 1 );
+                               $this->fatalError( "Unable to open debug output file for writing" );
                        }
                }
                $this->loadUcd();
@@ -205,14 +203,12 @@ class GenerateCollationData extends Maintenance {
        function generateFirstChars() {
                $file = fopen( "{$this->dataDir}/allkeys.txt", 'r' );
                if ( !$file ) {
-                       $this->error( "Unable to open allkeys.txt" );
-                       exit( 1 );
+                       $this->fatalError( "Unable to open allkeys.txt" );
                }
                global $IP;
                $outFile = fopen( "$IP/serialized/first-letters-root.ser", 'w' );
                if ( !$outFile ) {
-                       $this->error( "Unable to open output file first-letters-root.ser" );
-                       exit( 1 );
+                       $this->fatalError( "Unable to open output file first-letters-root.ser" );
                }
 
                $goodTertiaryChars = [];
index 34903de..4338a17 100644 (file)
@@ -46,22 +46,19 @@ class GenerateNormalizerDataAr extends Maintenance {
                if ( !$this->hasOption( 'unicode-data-file' ) ) {
                        $dataFile = 'UnicodeData.txt';
                        if ( !file_exists( $dataFile ) ) {
-                               $this->error( "Unable to find UnicodeData.txt. Please specify " .
+                               $this->fatalError( "Unable to find UnicodeData.txt. Please specify " .
                                        "its location with --unicode-data-file=<FILE>" );
-                               exit( 1 );
                        }
                } else {
                        $dataFile = $this->getOption( 'unicode-data-file' );
                        if ( !file_exists( $dataFile ) ) {
-                               $this->error( 'Unable to find the specified data file.' );
-                               exit( 1 );
+                               $this->fatalError( 'Unable to find the specified data file.' );
                        }
                }
 
                $file = fopen( $dataFile, 'r' );
                if ( !$file ) {
-                       $this->error( 'Unable to open the data file.' );
-                       exit( 1 );
+                       $this->fatalError( 'Unable to open the data file.' );
                }
 
                // For the file format, see http://www.unicode.org/reports/tr44/
index 7c16602..cb989bc 100644 (file)
@@ -40,7 +40,7 @@ class LangMemUsage extends Maintenance {
 
        public function execute() {
                if ( !function_exists( 'memory_get_usage' ) ) {
-                       $this->error( "You must compile PHP with --enable-memory-limit", true );
+                       $this->fatalError( "You must compile PHP with --enable-memory-limit" );
                }
 
                $langtool = new Languages();
index 1effb61..cfd5fc2 100644 (file)
@@ -40,7 +40,7 @@ class MakeTestEdits extends Maintenance {
        public function execute() {
                $user = User::newFromName( $this->getOption( 'user' ) );
                if ( !$user->getId() ) {
-                       $this->error( "No such user exists.", 1 );
+                       $this->fatalError( "No such user exists." );
                }
 
                $count = $this->getOption( 'count' );
index 5f39a3d..c1b038c 100644 (file)
@@ -48,7 +48,7 @@ class ManageJobs extends Maintenance {
                } elseif ( $action === 'repush-abandoned' ) {
                        $this->repushAbandoned( $queue );
                } else {
-                       $this->error( "Invalid action '$action'.", 1 );
+                       $this->fatalError( "Invalid action '$action'." );
                }
        }
 
index 60f94a5..14df53c 100644 (file)
@@ -47,7 +47,7 @@ class McTest extends Maintenance {
                $iterations = $this->getOption( 'i', 100 );
                if ( $cache ) {
                        if ( !isset( $wgObjectCaches[$cache] ) ) {
-                               $this->error( "MediaWiki isn't configured with a cache named '$cache'", 1 );
+                               $this->fatalError( "MediaWiki isn't configured with a cache named '$cache'" );
                        }
                        $servers = $wgObjectCaches[$cache]['servers'];
                } elseif ( $this->hasArg() ) {
@@ -58,7 +58,7 @@ class McTest extends Maintenance {
                } elseif ( isset( $wgObjectCaches[$wgMainCacheType]['servers'] ) ) {
                        $servers = $wgObjectCaches[$wgMainCacheType]['servers'];
                } else {
-                       $this->error( "MediaWiki isn't configured for Memcached usage", 1 );
+                       $this->fatalError( "MediaWiki isn't configured for Memcached usage" );
                }
 
                # find out the longest server string to nicely align output later on
index 8d2534e..b749da4 100644 (file)
@@ -61,8 +61,8 @@ class MergeMessageFileList extends Maintenance {
                        && !$this->hasOption( 'list-file' )
                        && !$this->hasOption( 'extensions-dir' )
                ) {
-                       $this->error( "Either --list-file or --extensions-dir must be provided if " .
-                               "\$wgExtensionEntryPointListFiles is not set", 1 );
+                       $this->fatalError( "Either --list-file or --extensions-dir must be provided if " .
+                               "\$wgExtensionEntryPointListFiles is not set" );
                }
 
                $mmfl = [ 'setupFiles' => [] ];
index b2cce3e..536eddd 100644 (file)
@@ -43,11 +43,11 @@ class MigrateFileRepoLayout extends Maintenance {
        public function execute() {
                $oldLayout = $this->getOption( 'oldlayout' );
                if ( !in_array( $oldLayout, [ 'name', 'sha1' ] ) ) {
-                       $this->error( "Invalid old layout.", 1 );
+                       $this->fatalError( "Invalid old layout." );
                }
                $newLayout = $this->getOption( 'newlayout' );
                if ( !in_array( $newLayout, [ 'name', 'sha1' ] ) ) {
-                       $this->error( "Invalid new layout.", 1 );
+                       $this->fatalError( "Invalid new layout." );
                }
                $since = $this->getOption( 'since' );
 
index ad82542..81c2353 100644 (file)
@@ -48,7 +48,7 @@ class MigrateUserGroup extends Maintenance {
                $end = $dbw->selectField( 'user_groups', 'MAX(ug_user)',
                        [ 'ug_group' => $oldGroup ], __FUNCTION__ );
                if ( $start === null ) {
-                       $this->error( "Nothing to do - no users in the '$oldGroup' group", true );
+                       $this->fatalError( "Nothing to do - no users in the '$oldGroup' group" );
                }
                # Do remaining chunk
                $end += $batchSize - 1;
index 16e4d1c..540a4d9 100644 (file)
@@ -48,14 +48,12 @@ class MinifyScript extends Maintenance {
 
        public function execute() {
                if ( !count( $this->mArgs ) ) {
-                       $this->error( "minify.php: At least one input file must be specified." );
-                       exit( 1 );
+                       $this->fatalError( "minify.php: At least one input file must be specified." );
                }
 
                if ( $this->hasOption( 'outfile' ) ) {
                        if ( count( $this->mArgs ) > 1 ) {
-                               $this->error( '--outfile may only be used with a single input file.' );
-                               exit( 1 );
+                               $this->fatalError( '--outfile may only be used with a single input file.' );
                        }
 
                        // Minify one file
@@ -77,7 +75,7 @@ class MinifyScript extends Maintenance {
                        }
 
                        if ( !file_exists( $inPath ) ) {
-                               $this->error( "File does not exist: $arg", true );
+                               $this->fatalError( "File does not exist: $arg" );
                        }
 
                        $extension = $this->getExtension( $inName );
@@ -95,8 +93,7 @@ class MinifyScript extends Maintenance {
        public function getExtension( $fileName ) {
                $dotPos = strrpos( $fileName, '.' );
                if ( $dotPos === false ) {
-                       $this->error( "No file extension, cannot determine type: $fileName" );
-                       exit( 1 );
+                       $this->fatalError( "No file extension, cannot determine type: $fileName" );
                }
 
                return substr( $fileName, $dotPos + 1 );
@@ -108,13 +105,11 @@ class MinifyScript extends Maintenance {
 
                $inText = file_get_contents( $inPath );
                if ( $inText === false ) {
-                       $this->error( "Unable to open file $inPath for reading." );
-                       exit( 1 );
+                       $this->fatalError( "Unable to open file $inPath for reading." );
                }
                $outFile = fopen( $outPath, 'w' );
                if ( !$outFile ) {
-                       $this->error( "Unable to open file $outPath for writing." );
-                       exit( 1 );
+                       $this->fatalError( "Unable to open file $outPath for writing." );
                }
 
                switch ( $extension ) {
index d578a49..fa25a06 100644 (file)
@@ -73,7 +73,7 @@ class MoveBatch extends Maintenance {
 
                # Setup
                if ( !$file ) {
-                       $this->error( "Unable to read file, exiting", true );
+                       $this->fatalError( "Unable to read file, exiting" );
                }
                if ( $user === false ) {
                        $wgUser = User::newSystemUser( 'Move page script', [ 'steal' => true ] );
@@ -81,7 +81,7 @@ class MoveBatch extends Maintenance {
                        $wgUser = User::newFromName( $user );
                }
                if ( !$wgUser ) {
-                       $this->error( "Invalid username", true );
+                       $this->fatalError( "Invalid username" );
                }
 
                # Setup complete, now start
index 43041a4..9447268 100644 (file)
@@ -138,8 +138,7 @@ class MWDocGen extends Maintenance {
 
                $tmpFile = tempnam( wfTempDir(), 'MWDocGen-' );
                if ( file_put_contents( $tmpFile, $conf ) === false ) {
-                       $this->error( "Could not write doxygen configuration to file $tmpFile\n",
-                               /** exit code: */ 1 );
+                       $this->fatalError( "Could not write doxygen configuration to file $tmpFile\n" );
                }
 
                $command = $this->doxygen . ' ' . $tmpFile;
@@ -161,8 +160,7 @@ TEXT
                );
 
                if ( $exitcode !== 0 ) {
-                       $this->error( "Something went wrong (exit: $exitcode)\n",
-                               $exitcode );
+                       $this->fatalError( "Something went wrong (exit: $exitcode)\n", $exitcode );
                }
        }
 }
index b631005..24ec8cb 100644 (file)
@@ -45,7 +45,7 @@ class PageExists extends Maintenance {
                        $code = 1;
                }
                $this->output( $text );
-               $this->error( '', $code );
+               exit( $code );
        }
 }
 
index 7cc829d..a4fac05 100644 (file)
@@ -51,7 +51,7 @@ class PopulateContentModel extends Maintenance {
 
                $ns = $this->getOption( 'ns' );
                if ( !ctype_digit( $ns ) && $ns !== 'all' ) {
-                       $this->error( 'Invalid namespace', 1 );
+                       $this->fatalError( 'Invalid namespace' );
                }
                $ns = $ns === 'all' ? 'all' : (int)$ns;
                $table = $this->getOption( 'table' );
@@ -64,7 +64,7 @@ class PopulateContentModel extends Maintenance {
                                $this->populatePage( $dbw, $ns );
                                break;
                        default:
-                               $this->error( "Invalid table name: $table", 1 );
+                               $this->fatalError( "Invalid table name: $table" );
                }
        }
 
index 2735a1e..84b65ee 100644 (file)
@@ -76,9 +76,7 @@ class PopulateImageSha1 extends LoggedUpdateMaintenance {
                                __METHOD__
                        );
                        if ( !$res ) {
-                               $this->error( "No such file: $file", true );
-
-                               return false;
+                               $this->fatalError( "No such file: $file" );
                        }
                        $this->output( "Populating img_sha1 field for specified files\n" );
                } else {
index 5de5819..cc1a9f1 100644 (file)
@@ -44,9 +44,9 @@ class PopulateRevisionLength extends LoggedUpdateMaintenance {
        public function doDBUpdates() {
                $dbw = $this->getDB( DB_MASTER );
                if ( !$dbw->tableExists( 'revision' ) ) {
-                       $this->error( "revision table does not exist", true );
+                       $this->fatalError( "revision table does not exist" );
                } elseif ( !$dbw->tableExists( 'archive' ) ) {
-                       $this->error( "archive table does not exist", true );
+                       $this->fatalError( "archive table does not exist" );
                } elseif ( !$dbw->fieldExists( 'revision', 'rev_len', __METHOD__ ) ) {
                        $this->output( "rev_len column does not exist\n\n", true );
 
index 89eff02..f3506ec 100644 (file)
@@ -45,9 +45,9 @@ class PopulateRevisionSha1 extends LoggedUpdateMaintenance {
                $db = $this->getDB( DB_MASTER );
 
                if ( !$db->tableExists( 'revision' ) ) {
-                       $this->error( "revision table does not exist", true );
+                       $this->fatalError( "revision table does not exist" );
                } elseif ( !$db->tableExists( 'archive' ) ) {
-                       $this->error( "archive table does not exist", true );
+                       $this->fatalError( "archive table does not exist" );
                } elseif ( !$db->fieldExists( 'revision', 'rev_sha1', __METHOD__ ) ) {
                        $this->output( "rev_sha1 column does not exist\n\n", true );
 
index f6bb253..eae6154 100644 (file)
@@ -59,7 +59,7 @@ class Protect extends Maintenance {
                        $user = User::newFromName( $userName );
                }
                if ( !$user ) {
-                       $this->error( "Invalid username", true );
+                       $this->fatalError( "Invalid username" );
                }
 
                // @todo FIXME: This is reset 7 lines down.
@@ -67,7 +67,7 @@ class Protect extends Maintenance {
 
                $t = Title::newFromText( $this->getArg() );
                if ( !$t ) {
-                       $this->error( "Invalid title", true );
+                       $this->fatalError( "Invalid title" );
                }
 
                $restrictions = [];
index 8e6978d..1035ff5 100644 (file)
@@ -43,25 +43,25 @@ class PruneFileCache extends Maintenance {
                global $wgUseFileCache, $wgFileCacheDirectory;
 
                if ( !$wgUseFileCache ) {
-                       $this->error( "Nothing to do -- \$wgUseFileCache is disabled.", true );
+                       $this->fatalError( "Nothing to do -- \$wgUseFileCache is disabled." );
                }
 
                $age = $this->getOption( 'agedays' );
                if ( !ctype_digit( $age ) ) {
-                       $this->error( "Non-integer 'age' parameter given.", true );
+                       $this->fatalError( "Non-integer 'age' parameter given." );
                }
                // Delete items with a TS older than this
                $this->minSurviveTimestamp = time() - ( 86400 * $age );
 
                $dir = $wgFileCacheDirectory;
                if ( !is_dir( $dir ) ) {
-                       $this->error( "Nothing to do -- \$wgFileCacheDirectory directory not found.", true );
+                       $this->fatalError( "Nothing to do -- \$wgFileCacheDirectory directory not found." );
                }
 
                $subDir = $this->getOption( 'subdir' );
                if ( $subDir !== null ) {
                        if ( !is_dir( "$dir/$subDir" ) ) {
-                               $this->error( "The specified subdirectory `$subDir` does not exist.", true );
+                               $this->fatalError( "The specified subdirectory `$subDir` does not exist." );
                        }
                        $this->output( "Pruning `$dir/$subDir` directory...\n" );
                        $this->prune_directory( "$dir/$subDir", 'report' );
index da2d850..716be3a 100644 (file)
@@ -60,7 +60,7 @@ class PurgeParserCache extends Maintenance {
                } elseif ( $inputAge !== null ) {
                        $date = wfTimestamp( TS_MW, time() + $wgParserCacheExpireTime - intval( $inputAge ) );
                } else {
-                       $this->error( "Must specify either --expiredate or --age", 1 );
+                       $this->fatalError( "Must specify either --expiredate or --age" );
                        return;
                }
                $this->usleep = 1e3 * $this->getOption( 'msleep', 0 );
@@ -72,7 +72,7 @@ class PurgeParserCache extends Maintenance {
                $pc = MediaWikiServices::getInstance()->getParserCache()->getCacheStorage();
                $success = $pc->deleteObjectsExpiringBefore( $date, [ $this, 'showProgressAndWait' ] );
                if ( !$success ) {
-                       $this->error( "\nCannot purge this kind of parser cache.", 1 );
+                       $this->fatalError( "\nCannot purge this kind of parser cache." );
                }
                $this->showProgressAndWait( 100 );
                $this->output( "\nDone\n" );
index 7a0e4fc..de09998 100644 (file)
@@ -186,7 +186,7 @@ class ReassignEdits extends Maintenance {
                } else {
                        $user = User::newFromName( $username );
                        if ( !$user ) {
-                               $this->error( "Invalid username", true );
+                               $this->fatalError( "Invalid username" );
                        }
                }
                $user->load();
index 19d8d06..0b5b9b0 100644 (file)
@@ -60,18 +60,18 @@ class RebuildFileCache extends Maintenance {
                global $wgRequestTime;
 
                if ( !$this->enabled ) {
-                       $this->error( "Nothing to do -- \$wgUseFileCache is disabled.", true );
+                       $this->fatalError( "Nothing to do -- \$wgUseFileCache is disabled." );
                }
 
                $start = $this->getOption( 'start', "0" );
                if ( !ctype_digit( $start ) ) {
-                       $this->error( "Invalid value for start parameter.", true );
+                       $this->fatalError( "Invalid value for start parameter." );
                }
                $start = intval( $start );
 
                $end = $this->getOption( 'end', "0" );
                if ( !ctype_digit( $end ) ) {
-                       $this->error( "Invalid value for end parameter.", true );
+                       $this->fatalError( "Invalid value for end parameter." );
                }
                $end = intval( $end );
 
@@ -87,7 +87,7 @@ class RebuildFileCache extends Maintenance {
                        ? $end
                        : $dbr->selectField( 'page', 'MAX(page_id)', false, __METHOD__ );
                if ( !$start ) {
-                       $this->error( "Nothing to do.", true );
+                       $this->fatalError( "Nothing to do." );
                }
 
                $_SERVER['HTTP_ACCEPT_ENCODING'] = 'bgzip'; // hack, no real client
index 48602de..8f92420 100644 (file)
@@ -92,7 +92,7 @@ class RebuildLocalisationCache extends Maintenance {
                                explode( ',', $this->getOption( 'lang' ) ) );
                        # Bailed out if nothing is left
                        if ( count( $codes ) == 0 ) {
-                               $this->error( 'None of the languages specified exists.', 1 );
+                               $this->fatalError( 'None of the languages specified exists.' );
                        }
                } else {
                        # By default get all languages
index 230e86d..93e6d47 100644 (file)
@@ -55,7 +55,7 @@ class RebuildSitesCache extends Maintenance {
                        $jsonFile = $this->getConfig()->get( 'SitesCacheFile' );
 
                        if ( $jsonFile === false ) {
-                               $this->error( 'Error: No file set in configuration for SitesCacheFile.', 1 );
+                               $this->fatalError( 'Error: No file set in configuration for SitesCacheFile.' );
                        }
                }
 
index 6d4a4bf..bbf91f5 100644 (file)
@@ -61,7 +61,7 @@ class RebuildRecentchanges extends Maintenance {
                        ( $this->hasOption( 'from' ) && !$this->hasOption( 'to' ) ) ||
                        ( !$this->hasOption( 'from' ) && $this->hasOption( 'to' ) )
                ) {
-                       $this->error( "Both 'from' and 'to' must be given, or neither", 1 );
+                       $this->fatalError( "Both 'from' and 'to' must be given, or neither" );
                }
 
                $this->rebuildRecentChangesTablePass1();
index 5971d5e..0e41ff3 100644 (file)
@@ -56,17 +56,17 @@ class RebuildTextIndex extends Maintenance {
                // Shouldn't be needed for Postgres
                $this->db = $this->getDB( DB_MASTER );
                if ( $this->db->getType() == 'postgres' ) {
-                       $this->error( "This script is not needed when using Postgres.\n", true );
+                       $this->fatalError( "This script is not needed when using Postgres.\n" );
                }
 
                if ( $this->db->getType() == 'sqlite' ) {
                        if ( !DatabaseSqlite::getFulltextSearchModule() ) {
-                               $this->error( "Your version of SQLite module for PHP doesn't "
-                                       . "support full-text search (FTS3).\n", true );
+                               $this->fatalError( "Your version of SQLite module for PHP doesn't "
+                                       . "support full-text search (FTS3).\n" );
                        }
                        if ( !$this->db->checkForEnabledSearch() ) {
-                               $this->error( "Your database schema is not configured for "
-                                       . "full-text search support. Run update.php.\n", true );
+                               $this->fatalError( "Your database schema is not configured for "
+                                       . "full-text search support. Run update.php.\n" );
                        }
                }
 
index b4d75c7..ed6a357 100644 (file)
@@ -75,7 +75,7 @@ TEXT
        public function execute() {
                $this->mode = $this->getOption( 'mode' );
                if ( !in_array( $this->mode, [ 'pages', 'subcats', 'files' ] ) ) {
-                       $this->error( 'Please specify a valid mode: one of "pages", "subcats" or "files".', 1 );
+                       $this->fatalError( 'Please specify a valid mode: one of "pages", "subcats" or "files".' );
                }
 
                $this->minimumId = intval( $this->getOption( 'begin', 0 ) );
index f6c0673..dcfed11 100644 (file)
@@ -108,7 +108,7 @@ class RefreshImageMetadata extends Maintenance {
                $dbw = $this->getDB( DB_MASTER );
                $batchSize = $this->getBatchSize();
                if ( $batchSize <= 0 ) {
-                       $this->error( "Batch size is too low...", 12 );
+                       $this->fatalError( "Batch size is too low...", 12 );
                }
 
                $repo = RepoGroup::singleton()->getLocalRepo();
@@ -255,7 +255,7 @@ class RefreshImageMetadata extends Maintenance {
                }
 
                if ( $brokenOnly && $force ) {
-                       $this->error( 'Cannot use --broken-only and --force together. ', 2 );
+                       $this->fatalError( 'Cannot use --broken-only and --force together. ', 2 );
                }
        }
 }
index cea9e0c..4fab146 100644 (file)
@@ -70,7 +70,7 @@ class RefreshLinks extends Maintenance {
                if ( ( $category = $this->getOption( 'category', false ) ) !== false ) {
                        $title = Title::makeTitleSafe( NS_CATEGORY, $category );
                        if ( !$title ) {
-                               $this->error( "'$category' is an invalid category name!\n", true );
+                               $this->fatalError( "'$category' is an invalid category name!\n" );
                        }
                        $this->refreshCategory( $title );
                } elseif ( ( $category = $this->getOption( 'tracking-category', false ) ) !== false ) {
@@ -485,7 +485,7 @@ class RefreshLinks extends Maintenance {
                if ( isset( $cats[$categoryKey] ) ) {
                        return $cats[$categoryKey]['cats'];
                }
-               $this->error( "Unknown tracking category {$categoryKey}\n", true );
+               $this->fatalError( "Unknown tracking category {$categoryKey}\n" );
        }
 }
 
index c750784..767924f 100644 (file)
@@ -53,7 +53,7 @@ class RemoveUnusedAccounts extends Maintenance {
                }
                $touched = $this->getOption( 'ignore-touched', "1" );
                if ( !ctype_digit( $touched ) ) {
-                       $this->error( "Please put a valid positive integer on the --ignore-touched parameter.", true );
+                       $this->fatalError( "Please put a valid positive integer on the --ignore-touched parameter." );
                }
                $touchedSeconds = 86400 * $touched;
                foreach ( $res as $row ) {
index 2772f04..6aefc39 100644 (file)
@@ -62,7 +62,7 @@ class RenameDbPrefix extends Maintenance {
                }
 
                if ( $old === false || $new === false ) {
-                       $this->error( "Invalid prefix!", true );
+                       $this->fatalError( "Invalid prefix!" );
                }
                if ( $old === $new ) {
                        $this->output( "Same prefix. Nothing to rename!\n", true );
index 8d0873f..f59ce6c 100644 (file)
@@ -48,12 +48,12 @@ class ResetUserEmail extends Maintenance {
                        $user = User::newFromName( $userName );
                }
                if ( !$user || !$user->getId() || !$user->loadFromId() ) {
-                       $this->error( "Error: user '$userName' does not exist\n", 1 );
+                       $this->fatalError( "Error: user '$userName' does not exist\n" );
                }
 
                $email = $this->getArg( 1 );
                if ( !Sanitizer::validateEmail( $email ) ) {
-                       $this->error( "Error: email '$email' is not valid\n", 1 );
+                       $this->fatalError( "Error: email '$email' is not valid\n" );
                }
 
                // Code from https://wikitech.wikimedia.org/wiki/Password_reset
index 5ad7d4e..ca9abb1 100644 (file)
@@ -50,7 +50,7 @@ class RollbackEdits extends Maintenance {
                $user = $this->getOption( 'user' );
                $username = User::isIP( $user ) ? $user : User::getCanonicalName( $user );
                if ( !$username ) {
-                       $this->error( 'Invalid username', true );
+                       $this->fatalError( 'Invalid username' );
                }
 
                $bot = $this->hasOption( 'bot' );
index af2a318..0874538 100644 (file)
@@ -59,7 +59,7 @@ class RunJobs extends Maintenance {
                if ( $this->hasOption( 'procs' ) ) {
                        $procs = intval( $this->getOption( 'procs' ) );
                        if ( $procs < 1 || $procs > 1000 ) {
-                               $this->error( "Invalid argument to --procs", true );
+                               $this->fatalError( "Invalid argument to --procs" );
                        } elseif ( $procs != 1 ) {
                                $fc = new ForkController( $procs );
                                if ( $fc->start() != 'child' ) {
index 65c353a..75b2e22 100644 (file)
@@ -58,7 +58,7 @@ class MediaWikiShell extends Maintenance {
 
        public function execute() {
                if ( !class_exists( \Psy\Shell::class ) ) {
-                       $this->error( 'PsySH not found. Please run composer with the --dev option.', 1 );
+                       $this->fatalError( 'PsySH not found. Please run composer with the --dev option.' );
                }
 
                $traverser = new \PhpParser\NodeTraverser();
index 36e55f3..8e276e7 100644 (file)
@@ -72,7 +72,7 @@ class MwSql extends Maintenance {
                                }
                        }
                        if ( $index === null ) {
-                               $this->error( "No replica DB server configured with the name '$replicaDB'.", 1 );
+                               $this->fatalError( "No replica DB server configured with the name '$replicaDB'." );
                        }
                } else {
                        $index = DB_MASTER;
@@ -81,7 +81,7 @@ class MwSql extends Maintenance {
                /** @var IDatabase $db DB handle for the appropriate cluster/wiki */
                $db = $lb->getConnection( $index, [], $wiki );
                if ( $replicaDB != '' && $db->getLBInfo( 'master' ) !== null ) {
-                       $this->error( "The server selected ({$db->getServer()}) is not a replica DB.", 1 );
+                       $this->fatalError( "The server selected ({$db->getServer()}) is not a replica DB." );
                }
 
                if ( $index === DB_MASTER ) {
@@ -92,12 +92,12 @@ class MwSql extends Maintenance {
                if ( $this->hasArg( 0 ) ) {
                        $file = fopen( $this->getArg( 0 ), 'r' );
                        if ( !$file ) {
-                               $this->error( "Unable to open input file", true );
+                               $this->fatalError( "Unable to open input file" );
                        }
 
                        $error = $db->sourceStream( $file, null, [ $this, 'sqlPrintResult' ] );
                        if ( $error !== true ) {
-                               $this->error( $error, true );
+                               $this->fatalError( $error );
                        } else {
                                exit( 0 );
                        }
@@ -157,7 +157,11 @@ class MwSql extends Maintenance {
                        $res = $db->query( $line );
                        $this->sqlPrintResult( $res, $db );
                } catch ( DBQueryError $e ) {
-                       $this->error( $e, $dieOnError );
+                       if ( $dieOnError ) {
+                               $this->fatalError( $e );
+                       } else {
+                               $this->error( $e );
+                       }
                }
        }
 
index e74a86c..fbde417 100644 (file)
@@ -83,7 +83,7 @@ class SqliteMaintenance extends Maintenance {
        private function vacuum() {
                $prevSize = filesize( $this->db->getDbFilePath() );
                if ( $prevSize == 0 ) {
-                       $this->error( "Can't vacuum an empty database.\n", true );
+                       $this->fatalError( "Can't vacuum an empty database.\n" );
                }
 
                $this->output( 'VACUUM: ' );
index 9045870..acf0103 100644 (file)
@@ -134,24 +134,24 @@ class CheckStorage {
                                        // This is a known bug from 2004
                                        // It's safe to just erase the old_flags field
                                        if ( $fix ) {
-                                               $this->error( 'fixed', "Warning: old_flags set to 0", $id );
+                                               $this->addError( 'fixed', "Warning: old_flags set to 0", $id );
                                                $dbw = wfGetDB( DB_MASTER );
                                                $dbw->ping();
                                                $dbw->update( 'text', [ 'old_flags' => '' ],
                                                        [ 'old_id' => $id ], __METHOD__ );
                                                echo "Fixed\n";
                                        } else {
-                                               $this->error( 'fixable', "Warning: old_flags set to 0", $id );
+                                               $this->addError( 'fixable', "Warning: old_flags set to 0", $id );
                                        }
                                } elseif ( count( array_diff( $flagArray, $knownFlags ) ) ) {
-                                       $this->error( 'unfixable', "Error: invalid flags field \"$flags\"", $id );
+                                       $this->addError( 'unfixable', "Error: invalid flags field \"$flags\"", $id );
                                }
                        }
                        $dbr->freeResult( $res );
 
                        // Output errors for any missing text rows
                        foreach ( $missingTextRows as $oldId => $revId ) {
-                               $this->error( 'restore revision', "Error: missing text row", $oldId );
+                               $this->addError( 'restore revision', "Error: missing text row", $oldId );
                        }
 
                        // Verify external revisions
@@ -163,12 +163,15 @@ class CheckStorage {
                                foreach ( $res as $row ) {
                                        $urlParts = explode( '://', $row->old_text, 2 );
                                        if ( count( $urlParts ) !== 2 || $urlParts[1] == '' ) {
-                                               $this->error( 'restore text', "Error: invalid URL \"{$row->old_text}\"", $row->old_id );
+                                               $this->addError( 'restore text', "Error: invalid URL \"{$row->old_text}\"", $row->old_id );
                                                continue;
                                        }
                                        list( $proto, ) = $urlParts;
                                        if ( $proto != 'DB' ) {
-                                               $this->error( 'restore text', "Error: invalid external protocol \"$proto\"", $row->old_id );
+                                               $this->addError(
+                                                       'restore text',
+                                                       "Error: invalid external protocol \"$proto\"",
+                                                       $row->old_id );
                                                continue;
                                        }
                                        $path = explode( '/', $row->old_text );
@@ -204,7 +207,10 @@ class CheckStorage {
                                        $extDb->freeResult( $res );
                                        // Print errors for missing blobs rows
                                        foreach ( $xBlobIds as $blobId => $oldId ) {
-                                               $this->error( 'restore text', "Error: missing target $blobId for one-part ES URL", $oldId );
+                                               $this->addError(
+                                                       'restore text',
+                                                       "Error: missing target $blobId for one-part ES URL",
+                                                       $oldId );
                                        }
                                }
                        }
@@ -225,13 +231,13 @@ class CheckStorage {
                                        $oldId = $row->old_id;
                                        $matches = [];
                                        if ( !preg_match( '/^O:(\d+):"(\w+)"/', $row->header, $matches ) ) {
-                                               $this->error( 'restore text', "Error: invalid object header", $oldId );
+                                               $this->addError( 'restore text', "Error: invalid object header", $oldId );
                                                continue;
                                        }
 
                                        $className = strtolower( $matches[2] );
                                        if ( strlen( $className ) != $matches[1] ) {
-                                               $this->error(
+                                               $this->addError(
                                                        'restore text',
                                                        "Error: invalid object header, wrong class name length",
                                                        $oldId
@@ -249,12 +255,12 @@ class CheckStorage {
                                                case 'historyblobstub':
                                                case 'historyblobcurstub':
                                                        if ( strlen( $row->header ) == $headerLength ) {
-                                                               $this->error( 'unfixable', "Error: overlong stub header", $oldId );
+                                                               $this->addError( 'unfixable', "Error: overlong stub header", $oldId );
                                                                continue;
                                                        }
                                                        $stubObj = unserialize( $row->header );
                                                        if ( !is_object( $stubObj ) ) {
-                                                               $this->error( 'restore text', "Error: unable to unserialize stub object", $oldId );
+                                                               $this->addError( 'restore text', "Error: unable to unserialize stub object", $oldId );
                                                                continue;
                                                        }
                                                        if ( $className == 'historyblobstub' ) {
@@ -264,7 +270,7 @@ class CheckStorage {
                                                        }
                                                        break;
                                                default:
-                                                       $this->error( 'unfixable', "Error: unrecognised object class \"$className\"", $oldId );
+                                                       $this->addError( 'unfixable', "Error: unrecognised object class \"$className\"", $oldId );
                                        }
                                }
                                $dbr->freeResult( $res );
@@ -287,7 +293,7 @@ class CheckStorage {
                                                if ( in_array( 'object', $flags ) ) {
                                                        $urlParts = explode( '/', $row->header );
                                                        if ( $urlParts[0] != 'DB:' ) {
-                                                               $this->error(
+                                                               $this->addError(
                                                                        'unfixable',
                                                                        "Error: unrecognised external storage type \"{$urlParts[0]}",
                                                                        $row->old_id
@@ -303,7 +309,7 @@ class CheckStorage {
                                                                );
                                                        }
                                                } else {
-                                                       $this->error(
+                                                       $this->addError(
                                                                'unfixable',
                                                                "Error: invalid flags \"{$row->old_flags}\" on concat bulk row {$row->old_id}",
                                                                $concatBlobs[$row->old_id] );
@@ -312,7 +318,7 @@ class CheckStorage {
                                                substr( $row->header, 0, strlen( self::CONCAT_HEADER ) ),
                                                self::CONCAT_HEADER
                                        ) ) {
-                                               $this->error(
+                                               $this->addError(
                                                        'restore text',
                                                        "Error: Incorrect object header for concat bulk row {$row->old_id}",
                                                        $concatBlobs[$row->old_id]
@@ -357,7 +363,7 @@ class CheckStorage {
                }
        }
 
-       function error( $type, $msg, $ids ) {
+       function addError( $type, $msg, $ids ) {
                if ( is_array( $ids ) && count( $ids ) == 1 ) {
                        $ids = reset( $ids );
                }
@@ -399,7 +405,7 @@ class CheckStorage {
                                [ 'blob_id IN( ' . implode( ',', $blobIds ) . ')' ], __METHOD__ );
                        foreach ( $res as $row ) {
                                if ( strcasecmp( $row->header, self::CONCAT_HEADER ) ) {
-                                       $this->error(
+                                       $this->addError(
                                                'restore text',
                                                "Error: invalid header on target $cluster/{$row->blob_id} of two-part ES URL",
                                                $oldIds[$row->blob_id]
@@ -411,7 +417,7 @@ class CheckStorage {
 
                        // Print errors for missing blobs rows
                        foreach ( $oldIds as $blobId => $oldIds2 ) {
-                               $this->error(
+                               $this->addError(
                                        'restore text',
                                        "Error: missing target $cluster/$blobId for two-part ES URL",
                                        $oldIds2
index c17ce99..0ae46ae 100644 (file)
@@ -103,8 +103,8 @@ class CompressOld extends Maintenance {
        public function execute() {
                global $wgDBname;
                if ( !function_exists( "gzdeflate" ) ) {
-                       $this->error( "You must enable zlib support in PHP to compress old revisions!\n" .
-                               "Please see http://www.php.net/manual/en/ref.zlib.php\n", true );
+                       $this->fatalError( "You must enable zlib support in PHP to compress old revisions!\n" .
+                               "Please see http://www.php.net/manual/en/ref.zlib.php\n" );
                }
 
                $type = $this->getOption( 'type', 'concat' );
index 437bfcd..d39acd4 100644 (file)
@@ -43,7 +43,7 @@ class DumpRev extends Maintenance {
                        [ 'old_id=rev_text_id', 'rev_id' => $this->getArg() ]
                );
                if ( !$row ) {
-                       $this->error( "Row not found", true );
+                       $this->fatalError( "Row not found" );
                }
 
                $flags = explode( ',', $row->old_flags );
index d7d0b84..eb72915 100644 (file)
@@ -45,7 +45,7 @@ class OrphanStats extends Maintenance {
        public function execute() {
                $dbr = $this->getDB( DB_REPLICA );
                if ( !$dbr->tableExists( 'blob_orphans' ) ) {
-                       $this->error( "blob_orphans doesn't seem to exist, need to run trackBlobs.php first", true );
+                       $this->fatalError( "blob_orphans doesn't seem to exist, need to run trackBlobs.php first" );
                }
                $res = $dbr->select( 'blob_orphans', '*', false, __METHOD__ );
 
index 154f54e..68afde7 100644 (file)
@@ -54,7 +54,7 @@ class SyncFileBackend extends Maintenance {
                if ( $this->hasOption( 'posdump' ) ) {
                        // Just dump the current position into the specified position dir
                        if ( !$this->hasOption( 'posdir' ) ) {
-                               $this->error( "Param posdir required!", 1 );
+                               $this->fatalError( "Param posdir required!" );
                        }
                        if ( $this->hasOption( 'postime' ) ) {
                                $id = (int)$src->getJournal()->getPositionAtTime( $this->getOption( 'postime' ) );
@@ -76,7 +76,7 @@ class SyncFileBackend extends Maintenance {
                }
 
                if ( !$this->hasOption( 'dst' ) ) {
-                       $this->error( "Param dst required!", 1 );
+                       $this->fatalError( "Param dst required!" );
                }
                $dst = FileBackendGroup::singleton()->get( $this->getOption( 'dst' ) );
 
@@ -156,7 +156,7 @@ class SyncFileBackend extends Maintenance {
                $first = true; // first batch
 
                if ( $start > $end ) { // sanity
-                       $this->error( "Error: given starting ID greater than ending ID.", 1 );
+                       $this->fatalError( "Error: given starting ID greater than ending ID." );
                }
 
                $next = null;
index c2d5c2c..278b68d 100644 (file)
@@ -41,7 +41,7 @@ class Undelete extends Maintenance {
 
                $title = Title::newFromText( $pageName );
                if ( !$title ) {
-                       $this->error( "Invalid title", true );
+                       $this->fatalError( "Invalid title" );
                }
                if ( $user === false ) {
                        $wgUser = User::newSystemUser( 'Command line script', [ 'steal' => true ] );
@@ -49,7 +49,7 @@ class Undelete extends Maintenance {
                        $wgUser = User::newFromName( $user );
                }
                if ( !$wgUser ) {
-                       $this->error( "Invalid username", true );
+                       $this->fatalError( "Invalid username" );
                }
                $archive = new PageArchive( $title, RequestContext::getMain()->getConfig() );
                $this->output( "Undeleting " . $title->getPrefixedDBkey() . '...' );
index f8f5dcd..529c069 100755 (executable)
@@ -66,23 +66,21 @@ class UpdateMediaWiki extends Maintenance {
 
                list( $pcreVersion ) = explode( ' ', PCRE_VERSION, 2 );
                if ( version_compare( $pcreVersion, $minimumPcreVersion, '<' ) ) {
-                       $this->error(
+                       $this->fatalError(
                                "PCRE $minimumPcreVersion or later is required.\n" .
                                "Your PHP binary is linked with PCRE $pcreVersion.\n\n" .
                                "More information:\n" .
                                "https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE\n\n" .
-                               "ABORTING.\n",
-                               true );
+                               "ABORTING.\n" );
                }
 
                $test = new PhpXmlBugTester();
                if ( !$test->ok ) {
-                       $this->error(
+                       $this->fatalError(
                                "Your system has a combination of PHP and libxml2 versions that is buggy\n" .
                                "and can cause hidden data corruption in MediaWiki and other web apps.\n" .
                                "Upgrade to libxml2 2.7.3 or later.\n" .
-                               "ABORTING (see https://bugs.php.net/bug.php?id=45996).\n",
-                               true );
+                               "ABORTING (see https://bugs.php.net/bug.php?id=45996).\n" );
                }
        }
 
@@ -94,22 +92,22 @@ class UpdateMediaWiki extends Maintenance {
                                || $this->hasOption( 'schema' )
                                || $this->hasOption( 'noschema' ) )
                ) {
-                       $this->error( "Do not run update.php on this wiki. If you're seeing this you should\n"
+                       $this->fatalError( "Do not run update.php on this wiki. If you're seeing this you should\n"
                                . "probably ask for some help in performing your schema updates or use\n"
                                . "the --noschema and --schema options to get an SQL file for someone\n"
                                . "else to inspect and run.\n\n"
-                               . "If you know what you are doing, you can continue with --force\n", true );
+                               . "If you know what you are doing, you can continue with --force\n" );
                }
 
                $this->fileHandle = null;
                if ( substr( $this->getOption( 'schema' ), 0, 2 ) === "--" ) {
-                       $this->error( "The --schema option requires a file as an argument.\n", true );
+                       $this->fatalError( "The --schema option requires a file as an argument.\n" );
                } elseif ( $this->hasOption( 'schema' ) ) {
                        $file = $this->getOption( 'schema' );
                        $this->fileHandle = fopen( $file, "w" );
                        if ( $this->fileHandle === false ) {
                                $err = error_get_last();
-                               $this->error( "Problem opening the schema file for writing: $file\n\t{$err['message']}", true );
+                               $this->fatalError( "Problem opening the schema file for writing: $file\n\t{$err['message']}" );
                        }
                }
 
@@ -152,7 +150,7 @@ class UpdateMediaWiki extends Maintenance {
                if ( !$status->isOK() ) {
                        // This might output some wikitext like <strong> but it should be comprehensible
                        $text = $status->getWikiText();
-                       $this->error( $text, 1 );
+                       $this->fatalError( $text );
                }
 
                $this->output( "Going to run database updates for " . wfWikiID() . "\n" );
index cb2f125..12056c8 100644 (file)
@@ -53,7 +53,7 @@ class UpdateDoubleWidthSearch extends Maintenance {
 
                $dbw = $this->getDB( DB_MASTER );
                if ( $dbw->getType() !== 'mysql' ) {
-                       $this->error( "This change is only needed on MySQL, quitting.\n", true );
+                       $this->fatalError( "This change is only needed on MySQL, quitting.\n" );
                }
 
                $res = $this->findRows( $dbw );
index 427769f..264f4be 100644 (file)
@@ -14,12 +14,12 @@ class UpdateExtensionJsonSchema extends Maintenance {
        public function execute() {
                $filename = $this->getArg( 0 );
                if ( !is_readable( $filename ) ) {
-                       $this->error( "Error: Unable to read $filename", 1 );
+                       $this->fatalError( "Error: Unable to read $filename" );
                }
 
                $json = FormatJson::decode( file_get_contents( $filename ), true );
                if ( $json === null ) {
-                       $this->error( "Error: Invalid JSON", 1 );
+                       $this->fatalError( "Error: Invalid JSON" );
                }
 
                if ( !isset( $json['manifest_version'] ) ) {
index 334ed27..c0b7b10 100644 (file)
@@ -43,12 +43,12 @@ class UpdateRestrictions extends Maintenance {
                $db = $this->getDB( DB_MASTER );
                $batchSize = $this->getBatchSize();
                if ( !$db->tableExists( 'page_restrictions' ) ) {
-                       $this->error( "page_restrictions table does not exist", true );
+                       $this->fatalError( "page_restrictions table does not exist" );
                }
 
                $start = $db->selectField( 'page', 'MIN(page_id)', false, __METHOD__ );
                if ( !$start ) {
-                       $this->error( "Nothing to do.", true );
+                       $this->fatalError( "Nothing to do." );
                }
                $end = $db->selectField( 'page', 'MAX(page_id)', false, __METHOD__ );
 
index e2c0c61..58f23df 100644 (file)
@@ -72,7 +72,7 @@ class UpdateSpecialPages extends Maintenance {
                                $queryPage = $specialObj;
                        } else {
                                $class = get_class( $specialObj );
-                               $this->error( "$class is not an instance of QueryPage.\n", 1 );
+                               $this->fatalError( "$class is not an instance of QueryPage.\n" );
                                die;
                        }
 
index 7cf16b6..5692f11 100644 (file)
@@ -102,7 +102,7 @@ The new option is NOT validated.' );
                        // Get the options and update stats
                        if ( $option ) {
                                if ( !array_key_exists( $option, $defaultOptions ) ) {
-                                       $this->error( "Invalid user option. Use --list to see valid choices\n", 1 );
+                                       $this->fatalError( "Invalid user option. Use --list to see valid choices\n" );
                                }
 
                                $userValue = $user->getOption( $option );
index aa1f668..ea27a7e 100644 (file)
@@ -9,7 +9,7 @@ class ValidateRegistrationFile extends Maintenance {
        }
        public function execute() {
                $validator = new ExtensionJsonValidator( function ( $msg ) {
-                       $this->error( $msg, 1 );
+                       $this->fatalError( $msg );
                } );
                $validator->checkDependencies();
                $path = $this->getArg( 0 );
@@ -17,7 +17,7 @@ class ValidateRegistrationFile extends Maintenance {
                        $validator->validate( $path );
                        $this->output( "$path validates against the schema!\n" );
                } catch ( ExtensionJsonValidationError $e ) {
-                       $this->error( $e->getMessage(), 1 );
+                       $this->fatalError( $e->getMessage() );
                }
        }
 }
index af7eb2d..8c0237f 100644 (file)
@@ -38,17 +38,17 @@ class ViewCLI extends Maintenance {
        public function execute() {
                $title = Title::newFromText( $this->getArg() );
                if ( !$title ) {
-                       $this->error( "Invalid title", true );
+                       $this->fatalError( "Invalid title" );
                }
 
                $page = WikiPage::factory( $title );
 
                $content = $page->getContent( Revision::RAW );
                if ( !$content ) {
-                       $this->error( "Page has no content", true );
+                       $this->fatalError( "Page has no content" );
                }
                if ( !$content instanceof TextContent ) {
-                       $this->error( "Non-text content models not supported", true );
+                       $this->fatalError( "Non-text content models not supported" );
                }
 
                $this->output( $content->getNativeData() );
index 6a601ad..94bd3cb 100644 (file)
@@ -51,12 +51,12 @@ class WrapOldPasswords extends Maintenance {
 
                // Check that type exists and is a layered type
                if ( !isset( $typeInfo[$layeredType] ) ) {
-                       $this->error( 'Undefined password type', true );
+                       $this->fatalError( 'Undefined password type' );
                }
 
                $passObj = $passwordFactory->newFromType( $layeredType );
                if ( !$passObj instanceof LayeredParameterizedPassword ) {
-                       $this->error( 'Layered parameterized password type must be used.', true );
+                       $this->fatalError( 'Layered parameterized password type must be used.' );
                }
 
                // Extract the first layer type
index faca87d..2878eca 100644 (file)
@@ -2,6 +2,7 @@
   "private": true,
   "scripts": {
     "test": "grunt test",
+    "qunit": "grunt qunit",
     "doc": "jsduck",
     "postdoc": "grunt copy:jsduck",
     "selenium": "killall -0 chromedriver 2>/dev/null || chromedriver --url-base=/wd/hub --port=4444 & grunt webdriver:test; killall chromedriver"
index 55bf65d..a5bfbc5 100644 (file)
@@ -1922,7 +1922,10 @@ return [
                ],
        ],
        'mediawiki.special' => [
-               'styles' => 'resources/src/mediawiki.special/mediawiki.special.css',
+               'styles' => [
+                       'resources/src/mediawiki.special/mediawiki.special.css',
+                       'resources/src/mediawiki.special/mediawiki.special.userrights.css',
+               ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.special.apisandbox.styles' => [
@@ -2237,9 +2240,6 @@ return [
                        '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' => [
@@ -2749,6 +2749,7 @@ return [
                        'oojs-ui.styles.icons-moderation',
                ],
                'messages' => [
+                       'ooui-item-remove',
                        'ooui-outline-control-move-down',
                        'ooui-outline-control-move-up',
                        'ooui-outline-control-remove',
index 5386291..0cec3ff 100644 (file)
         * Reset to default filters
         */
        mw.rcfilters.Controller.prototype.resetToDefaults = function () {
-               if ( this.applyParamChange( this._getDefaultParams() ) ) {
+               var params = this._getDefaultParams();
+               if ( this.applyParamChange( params ) ) {
                        // Only update the changes list if there was a change to actual filters
                        this.updateChangesList();
+               } else {
+                       this.uriProcessor.updateURL( params );
                }
        };
 
                if ( this.applyParamChange( {} ) ) {
                        // Only update the changes list if there was a change to actual filters
                        this.updateChangesList();
+               } else {
+                       this.uriProcessor.updateURL();
                }
 
                if ( highlightedFilterNames ) {
                if ( this.applyParamChange( params ) ) {
                        // Update changes list only if there was a difference in filter selection
                        this.updateChangesList();
+               } else {
+                       this.uriProcessor.updateURL( params );
                }
 
                // Log filter grouping
index 621c200..fe806ed 100644 (file)
@@ -63,7 +63,8 @@
         * @return {mw.Uri} Updated Uri
         */
        mw.rcfilters.UriProcessor.prototype.getUpdatedUri = function ( uriQuery ) {
-               var uri = new mw.Uri(),
+               var titlePieces,
+                       uri = new mw.Uri(),
                        unrecognizedParams = this.getUnrecognizedParams( uriQuery || uri.query );
 
                if ( uriQuery ) {
                        uri.query = uriQuery;
                }
 
+               // Normalize subpage to use &target= so we are always
+               // consistent in Special:RecentChangesLinked between the
+               // ?title=Special:RecentChangesLinked/TargetPage and
+               // ?title=Special:RecentChangesLinked&target=TargetPage
+               if ( uri.query.title && uri.query.title.indexOf( '/' ) !== -1 ) {
+                       titlePieces = uri.query.title.split( '/' );
+
+                       unrecognizedParams.title = titlePieces.shift();
+                       unrecognizedParams.target = titlePieces.join( '/' );
+               }
+
                uri.query = this.filtersModel.getMinimizedParamRepresentation(
                        $.extend(
                                true,
@@ -87,7 +99,6 @@
 
                // Reapply unrecognized params and url version
                uri.query = $.extend( true, {}, uri.query, unrecognizedParams, { urlversion: '2' } );
-
                return uri;
        };
 
index a505cde..7af3a36 100644 (file)
@@ -15181,7 +15181,7 @@ parsoid=wt2html,wt2wt,html2html
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.svg" class="image"><img alt="" src="http://example.com/images/thumb/f/ff/Foobar.svg/180px-Foobar.svg.png" width="180" height="135" class="thumbimage" srcset="http://example.com/images/thumb/f/ff/Foobar.svg/270px-Foobar.svg.png 1.5x, http://example.com/images/thumb/f/ff/Foobar.svg/360px-Foobar.svg.png 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.svg" class="internal" title="Enlarge"></a></div>lang=invalid:language:code</div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/f/ff/Foobar.svg" data-file-width="240" data-file-height="180" data-file-type="drawing" height="165" width="220"/></a><figcaption>lang=invalid.language.code</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.svg"><img resource="./File:Foobar.svg" src="//example.com/images/thumb/f/ff/Foobar.svg/220px-Foobar.svg.png" data-file-width="240" data-file-height="180" data-file-type="drawing" height="165" width="220"/></a><figcaption>lang=invalid:language:code</figcaption></figure>
 !! end
 
 !! test
@@ -17774,7 +17774,7 @@ T4304: HTML attribute safety (link)
 !! wikitext
 <div title="[[Main Page]]"></div>
 !! html
-<div title="&#91;&#91;Main Page]]"></div>
+<div title="&#91;&#91;Main Page&#93;&#93;"></div>
 
 !! end
 
@@ -17837,7 +17837,7 @@ T4304: HTML attribute safety (named web link)
 !! wikitext
 <div title="[http://example.com/ link]"></div>
 !! html
-<div title="&#91;http&#58;//example.com/ link]"></div>
+<div title="&#91;http&#58;//example.com/ link&#93;"></div>
 
 !! end
 
@@ -18549,10 +18549,14 @@ language=sr variant=sr-el
 -{H|foAjrjvi=>sr-el:" onload="alert(1)" data-foo="}-
 
 [[File:Foobar.jpg|alt=-{}-foAjrjvi-{}-]]
-!! html
+!! html/php
 <p>
 </p><p><a href="/wiki/%D0%94%D0%B0%D1%82%D0%BE%D1%82%D0%B5%D0%BA%D0%B0:Foobar.jpg" class="image"><img alt="&quot; onload=&quot;alert(1)&quot; data-foo=&quot;" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
 </p>
+!! html/parsoid
+<p><meta typeof="mw:LanguageVariant" data-mw-variant='{"add":true,"oneway":[{"f":"foAjrjvi","l":"sr-el","t":"\" onload=\"alert(1)\" data-foo=\""}]}'/></p>
+
+<p><span class="mw-default-size" typeof="mw:Image"><a href="./Датотека:Foobar.jpg"><img alt="foAjrjvi" resource="./Датотека:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"alt":"foAjrjvi","resource":"./Датотека:Foobar.jpg","height":"220","width":"1941"},"sa":{"alt":"alt=-{}-foAjrjvi-{}-","resource":"File:Foobar.jpg"}}'/></a></span></p>
 !! end
 
 !! test
@@ -29705,3 +29709,438 @@ wgFragmentMode=[ 'html5', 'legacy' ]
 <p><a href="#Foo_bar">#Foo&#160;bar</a>
 </p>
 !! end
+
+!! test
+T51672: Test for brackets in attributes of elements in external link texts
+!! wikitext
+[http://example.com/ link <span title="title with [brackets]">span</span>]
+[http://example.com/ link <span title="title with &#91;brackets&#93;">span</span>]
+
+!! html/php
+<p><a rel="nofollow" class="external text" href="http://example.com/">link <span title="title with &#91;brackets&#93;">span</span></a>
+<a rel="nofollow" class="external text" href="http://example.com/">link <span title="title with &#91;brackets&#93;">span</span></a>
+</p>
+!! end
+
+!! test
+T72875: Test for brackets in attributes of elements in internal link texts
+!! wikitext
+[[Foo|link <span title="title with [[double brackets]]">span</span>]]
+[[Foo|link <span title="title with &#91;&#91;double brackets&#93;&#93;">span</span>]]
+
+!! html/php
+<p><a href="/wiki/Foo" title="Foo">link <span title="title with &#91;&#91;double brackets&#93;&#93;">span</span></a>
+<a href="/wiki/Foo" title="Foo">link <span title="title with &#91;&#91;double brackets&#93;&#93;">span</span></a>
+</p>
+!! end
+
+!! test
+T179544: {{anchorencode:}} output should be always usable in links
+!! config
+wgFragmentMode=[ 'html5' ]
+!! wikitext
+<span id="{{anchorencode:[foo]}}"></span>[[#{{anchorencode:[foo]}}]]
+!! html/php
+<p><span id="&#91;foo&#93;"></span><a href="#[foo]">#&#91;foo&#93;</a>
+</p>
+!! end
+
+## ------------------------------
+## Parsoid section-wrapping tests
+## ------------------------------
+!! test
+Section wrapping for well-nested sections (no leading content)
+!! options
+parsoid={
+  "wrapSections": true
+}
+!! wikitext
+= 1 =
+a
+
+= 2 =
+b
+
+== 2.1 ==
+c
+
+== 2.2 ==
+d
+
+=== 2.2.1 ===
+e
+
+= 3 =
+f
+!! html/parsoid
+<section data-mw-section-id="1"><h1 id="1"> 1 </h1>
+<p>a</p>
+
+</section><section data-mw-section-id="2"><h1 id="2"> 2 </h1>
+<p>b</p>
+
+<section data-mw-section-id="3"><h2 id="2.1"> 2.1 </h2>
+<p>c</p>
+
+</section><section data-mw-section-id="4"><h2 id="2.2"> 2.2 </h2>
+<p>d</p>
+
+<section data-mw-section-id="5"><h3 id="2.2.1"> 2.2.1 </h3>
+<p>e</p>
+
+</section></section></section><section data-mw-section-id="6"><h1 id="3"> 3 </h1>
+<p>f</p>
+
+</section>
+!! end
+
+!! test
+Section wrapping for well-nested sections (with leading content)
+!! options
+parsoid={
+  "wrapSections": true
+}
+!! wikitext
+Para 1.
+
+Para 2 with a <div>nested in it</div>
+
+Para 3.
+
+= 1 =
+a
+
+= 2 =
+b
+
+== 2.1 ==
+c
+!! html/parsoid
+<section data-mw-section-id="0"><p>Para 1.</p>
+
+<p>Para 2 with a </p><div>nested in it</div>
+
+<p>Para 3.</p>
+
+</section><section data-mw-section-id="1"><h1 id="1"> 1 </h1>
+<p>a</p>
+
+</section><section data-mw-section-id="2"><h1 id="2"> 2 </h1>
+<p>b</p>
+
+<section data-mw-section-id="3"><h2 id="2.1"> 2.1 </h2>
+<p>c</p>
+
+</section></section>
+!! end
+
+!! test
+Section wrapping with template-generated sections (good nesting 1)
+!! options
+parsoid={
+  "wrapSections": true
+}
+!! wikitext
+= 1 =
+a
+
+{{echo|1=
+== 1.1 ==
+b
+}}
+
+== 1.2 ==
+c
+
+= 2 =
+d
+!! html/parsoid
+<section data-mw-section-id="1"><h1 id="1"> 1 </h1>
+<p>a</p>
+
+<section data-mw-section-id="-1"><h2 about="#mwt1" typeof="mw:Transclusion" id="1.1" data-parsoid='{"dsr":[9,33,null,null],"pi":[[{"k":"1","named":true,"spc":["","","\n","\n"]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"== 1.1 ==\nb"}},"i":0}}]}'> 1.1 </h2><span about="#mwt1">
+</span><p about="#mwt1">b</p>
+</section><section data-mw-section-id="3"><h2 id="1.2"> 1.2 </h2>
+<p>c</p>
+
+</section></section><section data-mw-section-id="4"><h1 id="2"> 2 </h1>
+<p>d</p></section>
+!! end
+
+# In this example, the template scope is mildly expanded to incorporate the
+# trailing newline after the transclusion since that is part of section 1.1.1
+!! test
+Section wrapping with template-generated sections (good nesting 2)
+!! options
+parsoid={
+  "wrapSections": true,
+  "modes": ["wt2html", "wt2wt"]
+}
+!! wikitext
+= 1 =
+a
+
+{{echo|1=
+== 1.1 ==
+b
+=== 1.1.1 ===
+d
+}}
+= 2 =
+e
+!! html/parsoid
+<section data-mw-section-id="1"><h1 id="1"> 1 </h1>
+<p>a</p>
+
+<section data-mw-section-id="-1"><h2 about="#mwt1" typeof="mw:Transclusion" id="1.1" data-parsoid='{"dsr":[9,50,null,null],"pi":[[{"k":"1","named":true,"spc":["","","\n","\n"]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"== 1.1 ==\nb\n=== 1.1.1 ===\nd"}},"i":0}},"\n"]}'> 1.1 </h2><span about="#mwt1">
+</span><p about="#mwt1">b</p><span about="#mwt1">
+</span><section data-mw-section-id="-1" about="#mwt1"><h3 about="#mwt1" id="1.1.1"> 1.1.1 </h3><span about="#mwt1">
+</span><p about="#mwt1">d</p><span about="#mwt1">
+</span></section></section></section><section data-mw-section-id="4" data-parsoid="{}"><h1 id="2"> 2 </h1>
+<p>e</p></section>
+!! end
+
+# In this example, the template scope is mildly expanded to incorporate the
+# trailing newline after the transclusion since that is part of section 1.2.1
+!! test
+Section wrapping with template-generated sections (good nesting 3)
+!! options
+parsoid={
+  "wrapSections": true,
+  "modes": ["wt2html", "wt2wt"]
+}
+!! wikitext
+= 1 =
+a
+
+{{echo|1=
+x
+== 1.1 ==
+b
+==1.2==
+c
+===1.2.1===
+d
+}}
+= 2 =
+e
+!! html/parsoid
+<section data-mw-section-id="1" data-parsoid="{}"><h1 id="1"> 1 </h1>
+<p>a</p>
+
+<p about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"dsr":[9,60,0,0],"pi":[[{"k":"1","named":true,"spc":["","","\n","\n"]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"x\n== 1.1 ==\nb\n==1.2==\nc\n===1.2.1===\nd"}},"i":0}},"\n"]}'>x</p><span about="#mwt1">
+</span><section data-mw-section-id="-1" about="#mwt1"><h2 about="#mwt1" id="1.1"> 1.1 </h2><span about="#mwt1">
+</span><p about="#mwt1">b</p><span about="#mwt1">
+</span></section><section data-mw-section-id="-1" about="#mwt1"><h2 about="#mwt1" id="1.2">1.2</h2><span about="#mwt1">
+</span><p about="#mwt1">c</p><span about="#mwt1">
+</span><section data-mw-section-id="-1" about="#mwt1"><h3 about="#mwt1" id="1.2.1">1.2.1</h3><span about="#mwt1">
+</span><p about="#mwt1">d</p><span about="#mwt1">
+</span></section></section></section><section data-mw-section-id="5"><h1 id="2"> 2 </h1>
+<p>e</p></section>
+!! end
+
+# Because of section-wrapping and template-wrapping interactions,
+# the scope of the template is expanded so that the template markup
+# is valid in the presence of <section> tags.
+!! test
+Section wrapping with template-generated sections (bad nesting 1)
+!! options
+parsoid={
+  "wrapSections": true
+}
+!! wikitext
+= 1 =
+a
+
+{{echo|1=
+= 2 =
+b
+== 2.1 ==
+c
+}}
+
+d
+
+= 3 =
+e
+!! html/parsoid
+<section data-mw-section-id="1"><h1 id="1"> 1 </h1>
+<p>a</p>
+
+</section><section data-mw-section-id="-1"><h1 about="#mwt1" typeof="mw:Transclusion" id="2" data-parsoid='{"dsr":[9,45,null,null],"pi":[[{"k":"1","named":true,"spc":["","","\n","\n"]}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"= 2 =\nb\n== 2.1 ==\nc"}},"i":0}},"\n\nd\n\n"]}'> 2 </h1><span about="#mwt1">
+</span><p about="#mwt1">b</p><span about="#mwt1">
+</span><section data-mw-section-id="-1" about="#mwt1"><h2 about="#mwt1" id="2.1"> 2.1 </h2><span about="#mwt1">
+</span><p about="#mwt1">c</p><span about="#mwt1">
+
+</span><p about="#mwt1">d</p><span about="#mwt1">
+
+</span></section></section><section data-mw-section-id="4"><h1 id="3"> 3 </h1>
+<p>e</p></section>
+!! end
+
+# Because of section-wrapping and template-wrapping interactions,
+# additional template wrappers are added to <section> tags
+# so that template wrapping semantics are valid whether section
+# tags are retained or stripped. But, the template scope can expand
+# greatly when accounting for section tags.
+!! test
+Section wrapping with template-generated sections (bad nesting 2)
+!! options
+parsoid={
+  "wrapSections": true,
+  "modes": ["wt2html", "wt2wt"]
+}
+!! wikitext
+= 1 =
+a
+
+{{echo|1=
+== 1.2 ==
+b
+= 2 =
+c
+}}
+
+d
+
+= 3 =
+e
+!! html/parsoid
+<section data-mw-section-id="1" about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":["= 1 =\na\n\n",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"== 1.2 ==\nb\n= 2 =\nc"}},"i":0}},"\n\nd\n\n"]}'><h1 id="1"> 1 </h1>
+<p>a</p>
+
+<section data-mw-section-id="-1"><h2 about="#mwt1" typeof="mw:Transclusion" id="1.2" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"== 1.2 ==\nb\n= 2 =\nc"}},"i":0}}]}'> 1.2 </h2><span about="#mwt1">
+</span><p about="#mwt1">b</p><span about="#mwt1">
+</span></section></section><section data-mw-section-id="-1" about="#mwt1"><h1 about="#mwt1" id="2"> 2 </h1><span about="#mwt1">
+</span><p about="#mwt1">c</p>
+
+<p>d</p>
+</section><section data-mw-section-id="4" data-parsoid="{}"><h1 id="3"> 3 </h1>
+<p>e</p></section>
+!! end
+
+!! test
+Section wrapping with uneditable lead section + div wrapping multiple sections
+!! options
+parsoid={
+  "wrapSections": true
+}
+!! wikitext
+foo
+
+<div style="border:1px solid red;">
+= 1 =
+a
+
+== 1.1 ==
+b
+
+= 2 =
+c
+</div>
+
+= 3 =
+d
+
+== 3.1 ==
+e
+!! html/parsoid
+<section data-mw-section-id="-1"><p>foo</p>
+
+</section><section data-mw-section-id="-2"><div style="border:1px solid red;">
+<section data-mw-section-id="1"><h1 id="1"> 1 </h1>
+<p>a</p>
+
+<section data-mw-section-id="2"><h2 id="1.1"> 1.1 </h2>
+<p>b</p>
+
+</section></section><section data-mw-section-id="-1"><h1 id="2"> 2 </h1>
+<p>c</p>
+</section></div>
+
+</section><section data-mw-section-id="4"><h1 id="3"> 3 </h1>
+<p>d</p>
+
+<section data-mw-section-id="5"><h2 id="3.1"> 3.1 </h2>
+<p>e</p>
+</section></section>
+!! end
+
+!! test
+Section wrapping with editable lead section + div overlapping multiple sections
+!! options
+parsoid={
+  "wrapSections": true
+}
+!! wikitext
+foo
+
+= 1 =
+a
+<div style="border:1px solid red;">
+b
+
+== 1.1 ==
+c
+
+= 2 =
+d
+</div>
+e
+
+= 3 =
+f
+
+== 3.1 ==
+g
+!! html/parsoid
+<section data-mw-section-id="0"><p>foo</p>
+
+</section><section data-mw-section-id="-1"><h1 id="1"> 1 </h1>
+<p>a</p>
+</section><section data-mw-section-id="-2"><div style="border:1px solid red;">
+<p>b</p>
+
+<section data-mw-section-id="2"><h2 id="1.1"> 1.1 </h2>
+<p>c</p>
+
+</section><section data-mw-section-id="-1"><h1 id="2"> 2 </h1>
+<p>d</p>
+</section></div>
+<p>e</p>
+
+</section><section data-mw-section-id="4"><h1 id="3"> 3 </h1>
+<p>f</p>
+
+<section data-mw-section-id="5"><h2 id="3.1"> 3.1 </h2>
+<p>g</p>
+</section></section>
+!! end
+
+!! test
+HTML header tags should not be wrapped in section tags
+!! options
+parsoid={
+  "wrapSections": true
+}
+!! wikitext
+foo
+
+<h1>a</h1>
+
+= b =
+
+<h1>c</h1>
+
+= d =
+!! html/parsoid
+<section data-mw-section-id="0"><p>foo</p>
+
+<h1 id="a" data-parsoid='{"stx":"html"}'>a</h1>
+
+</section><section data-mw-section-id="1"><h1 id="b"> b </h1>
+
+<h1 id="c" data-parsoid='{"stx":"html"}'>c</h1>
+
+</section><section data-mw-section-id="2"><h1 id="d"> d </h1></section>
+!! end
index f04eec7..4d3c37b 100644 (file)
@@ -968,12 +968,13 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         * @since 1.18
         */
        public function needsDB() {
-               # if the test says it uses database tables, it needs the database
+               // If the test says it uses database tables, it needs the database
                if ( $this->tablesUsed ) {
                        return true;
                }
 
-               # if the test says it belongs to the Database group, it needs the database
+               // If the test class says it belongs to the Database group, it needs the database.
+               // NOTE: This ONLY checks for the group in the class level doc comment.
                $rc = new ReflectionClass( $this );
                if ( preg_match( '/@group +Database/im', $rc->getDocComment() ) ) {
                        return true;
index a4e3bb9..aaa135d 100644 (file)
@@ -193,7 +193,6 @@ class ExtraParserTest extends MediaWikiTestCase {
        }
 
        /**
-        * @group Database
         * @covers Parser::parse
         */
        public function testTrackingCategory() {
@@ -207,7 +206,6 @@ class ExtraParserTest extends MediaWikiTestCase {
        }
 
        /**
-        * @group Database
         * @covers Parser::parse
         */
        public function testTrackingCategorySpecial() {
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 912bffe..f99cccd 100644 (file)
@@ -2,6 +2,9 @@
 
 use Wikimedia\TestingAccessWrapper;
 
+/**
+ * @group Database
+ */
 class MessageTest extends MediaWikiLangTestCase {
 
        protected function setUp() {
@@ -467,7 +470,6 @@ class MessageTest extends MediaWikiLangTestCase {
 
        /**
         * FIXME: This should not need database, but Language#formatExpiry does (T57912)
-        * @group Database
         * @covers Message::expiryParam
         * @covers Message::expiryParams
         */
index d933d93..3d0556e 100644 (file)
@@ -34,6 +34,72 @@ class RevisionTest extends MediaWikiTestCase {
                $this->assertEquals( CONTENT_MODEL_JAVASCRIPT, $rev->getContentModel() );
        }
 
+       public function provideConstructFromArray_userSetAsExpected() {
+               yield 'no user defaults to wgUser' => [
+                       [
+                               'content' => new JavaScriptContent( 'hello world.' ),
+                       ],
+                       null,
+                       null,
+               ];
+               yield 'user text and id' => [
+                       [
+                               'content' => new JavaScriptContent( 'hello world.' ),
+                               'user_text' => 'SomeTextUserName',
+                               'user' => 99,
+
+                       ],
+                       99,
+                       'SomeTextUserName',
+               ];
+               // Note: the below XXX test cases are odd and probably result in unexpected behaviour if used
+               // in production code.
+               yield 'XXX: user text only' => [
+                       [
+                               'content' => new JavaScriptContent( 'hello world.' ),
+                               'user_text' => '111.111.111.111',
+                       ],
+                       null,
+                       '111.111.111.111',
+               ];
+               yield 'XXX: user id only' => [
+                       [
+                               'content' => new JavaScriptContent( 'hello world.' ),
+                               'user' => 9989,
+                       ],
+                       9989,
+                       null,
+               ];
+       }
+
+       /**
+        * @dataProvider provideConstructFromArray_userSetAsExpected
+        * @covers Revision::__construct
+        * @covers Revision::constructFromRowArray
+        *
+        * @param array $rowArray
+        * @param mixed $expectedUserId null to expect the current wgUser ID
+        * @param mixed $expectedUserName null to expect the current wgUser name
+        */
+       public function testConstructFromArray_userSetAsExpected(
+               array $rowArray,
+               $expectedUserId,
+               $expectedUserName
+       ) {
+               $testUser = $this->getTestUser()->getUser();
+               $this->setMwGlobals( 'wgUser', $testUser );
+               if ( $expectedUserId === null ) {
+                       $expectedUserId = $testUser->getId();
+               }
+               if ( $expectedUserName === null ) {
+                       $expectedUserName = $testUser->getName();
+               }
+
+               $rev = new Revision( $rowArray );
+               $this->assertEquals( $expectedUserId, $rev->getUser() );
+               $this->assertEquals( $expectedUserName, $rev->getUserText() );
+       }
+
        public function provideConstructFromArrayThrowsExceptions() {
                yield 'content and text_id both not empty' => [
                        [
index b0febe8..5a92b99 100644 (file)
@@ -282,7 +282,6 @@ class TitleTest extends MediaWikiTestCase {
        /**
         * Auth-less test of Title::isValidMoveOperation
         *
-        * @group Database
         * @param string $source
         * @param string $target
         * @param array|string|bool $expected Required error
index b290f8f..1601493 100644 (file)
@@ -212,7 +212,6 @@ class TextContentTest extends MediaWikiLangTestCase {
 
        /**
         * @dataProvider dataIsCountable
-        * @group Database
         * @covers TextContent::isCountable
         */
        public function testIsCountable( $text, $hasLinks, $mode, $expected ) {
index 3a8f4db..57aeb20 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * @covers DifferenceEngine
  *
@@ -117,4 +119,30 @@ class DifferenceEngineTest extends MediaWikiTestCase {
                $this->assertEquals( $revs[2], $diffEngine->getNewid(), 'diff get new id' );
        }
 
+       public function provideLocaliseTitleTooltipsTestData() {
+               return [
+                       'moved paragraph left shoud get new location title' => [
+                               '<a class="mw-diff-movedpara-left">⚫</a>',
+                               '<a class="mw-diff-movedpara-left" title="(diff-paragraph-moved-tonew)">⚫</a>',
+                       ],
+                       'moved paragraph right shoud get old location title' => [
+                               '<a class="mw-diff-movedpara-right">⚫</a>',
+                               '<a class="mw-diff-movedpara-right" title="(diff-paragraph-moved-toold)">⚫</a>',
+                       ],
+                       'nothing changed when key not hit' => [
+                               '<a class="mw-diff-movedpara-rightis">⚫</a>',
+                               '<a class="mw-diff-movedpara-rightis">⚫</a>',
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideLocaliseTitleTooltipsTestData
+        */
+       public function testAddLocalisedTitleTooltips( $input, $expected ) {
+               $this->setContentLang( 'qqx' );
+               $diffEngine = TestingAccessWrapper::newFromObject( new DifferenceEngine() );
+               $this->assertEquals( $expected, $diffEngine->addLocalisedTitleTooltips( $input ) );
+       }
+
 }
index 36b6d64..9584d4b 100644 (file)
@@ -1,12 +1,8 @@
 <?php
-/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
 
 class InstallDocFormatterTest extends MediaWikiTestCase {
        /**
-        * @covers InstallDocFormatter::format
+        * @covers InstallDocFormatter
         * @dataProvider provideDocFormattingTests
         */
        public function testFormat( $expected, $unformattedText, $message = '' ) {
index 934d49a..b779231 100644 (file)
@@ -266,6 +266,46 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase {
                $v = $cache->getWithSetCallback( $key, 30, $func, [ 'pcTTL' => 5 ] + $extOpts );
                $this->assertEquals( $value, $v, "Value still returned after deleted" );
                $this->assertEquals( 1, $wasSet, "Value process cached while deleted" );
+
+               $backToTheFutureCache = new TimeAdjustableWANObjectCache( [
+                       'cache'   => new TimeAdjustableHashBagOStuff(),
+                       'pool'    => 'empty'
+               ] );
+
+               $oldValReceived = -1;
+               $oldAsOfReceived = -1;
+               $checkFunc = function ( $oldVal, &$ttl, array $setOpts, $oldAsOf )
+               use ( &$oldValReceived, &$oldAsOfReceived, &$wasSet ) {
+                       ++$wasSet;
+                       $oldValReceived = $oldVal;
+                       $oldAsOfReceived = $oldAsOf;
+
+                       return 'xxx' . $wasSet;
+               };
+
+               $wasSet = 0;
+               $key = wfRandomString();
+               $v = $backToTheFutureCache->getWithSetCallback(
+                       $key, 30, $checkFunc, [ 'staleTTL' => 50 ] + $extOpts );
+               $this->assertEquals( 'xxx1', $v, "Value returned" );
+               $this->assertEquals( false, $oldValReceived, "Callback got no stale value" );
+               $this->assertEquals( null, $oldAsOfReceived, "Callback got no stale value" );
+
+               $backToTheFutureCache->setTime( microtime( true ) + 40 );
+               $v = $backToTheFutureCache->getWithSetCallback(
+                       $key, 30, $checkFunc, [ 'staleTTL' => 50 ] + $extOpts );
+               $this->assertEquals( 'xxx2', $v, "Value still returned after expired" );
+               $this->assertEquals( 2, $wasSet, "Value recalculated while expired" );
+               $this->assertEquals( 'xxx1', $oldValReceived, "Callback got stale value" );
+               $this->assertNotEquals( null, $oldAsOfReceived, "Callback got stale value" );
+
+               $backToTheFutureCache->setTime( microtime( true ) + 300 );
+               $v = $backToTheFutureCache->getWithSetCallback(
+                       $key, 30, $checkFunc, [ 'staleTTL' => 50 ] + $extOpts );
+               $this->assertEquals( 'xxx3', $v, "Value still returned after expired" );
+               $this->assertEquals( 3, $wasSet, "Value recalculated while expired" );
+               $this->assertEquals( false, $oldValReceived, "Callback got no stale value" );
+               $this->assertEquals( null, $oldAsOfReceived, "Callback got no stale value" );
        }
 
        public static function getWithSetCallback_provider() {
@@ -275,6 +315,66 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase {
                ];
        }
 
+       public function testPreemtiveRefresh() {
+               $value = 'KatCafe';
+               $wasSet = 0;
+               $func = function ( $old, &$ttl, &$opts, $asOf ) use ( &$wasSet, $value )
+               {
+                       ++$wasSet;
+                       return $value;
+               };
+
+               $cache = new NearExpiringWANObjectCache( [
+                       'cache'   => new HashBagOStuff(),
+                       'pool'    => 'empty'
+               ] );
+
+               $wasSet = 0;
+               $key = wfRandomString();
+               $opts = [ 'lowTTL' => 30 ];
+               $v = $cache->getWithSetCallback( $key, 20, $func, $opts );
+               $this->assertEquals( $value, $v, "Value returned" );
+               $this->assertEquals( 1, $wasSet, "Value calculated" );
+               $v = $cache->getWithSetCallback( $key, 20, $func, $opts );
+               $this->assertEquals( 2, $wasSet, "Value re-calculated" );
+
+               $wasSet = 0;
+               $key = wfRandomString();
+               $opts = [ 'lowTTL' => 1 ];
+               $v = $cache->getWithSetCallback( $key, 30, $func, $opts );
+               $this->assertEquals( $value, $v, "Value returned" );
+               $this->assertEquals( 1, $wasSet, "Value calculated" );
+               $v = $cache->getWithSetCallback( $key, 30, $func, $opts );
+               $this->assertEquals( 1, $wasSet, "Value cached" );
+
+               $cache = new PopularityRefreshingWANObjectCache( [
+                       'cache'   => new HashBagOStuff(),
+                       'pool'    => 'empty'
+               ] );
+
+               $now = microtime( true ); // reference time
+               $wasSet = 0;
+               $key = wfRandomString();
+               $opts = [ 'hotTTR' => 900 ];
+               $v = $cache->getWithSetCallback( $key, 60, $func, $opts );
+               $this->assertEquals( $value, $v, "Value returned" );
+               $this->assertEquals( 1, $wasSet, "Value calculated" );
+               $cache->setTime( $now + 30 );
+               $v = $cache->getWithSetCallback( $key, 60, $func, $opts );
+               $this->assertEquals( 1, $wasSet, "Value cached" );
+
+               $wasSet = 0;
+               $key = wfRandomString();
+               $opts = [ 'hotTTR' => 10 ];
+               $cache->setTime( $now );
+               $v = $cache->getWithSetCallback( $key, 60, $func, $opts );
+               $this->assertEquals( $value, $v, "Value returned" );
+               $this->assertEquals( 1, $wasSet, "Value calculated" );
+               $cache->setTime( $now + 30 );
+               $v = $cache->getWithSetCallback( $key, 60, $func, $opts );
+               $this->assertEquals( 2, $wasSet, "Value re-calculated" );
+       }
+
        /**
         * @covers WANObjectCache::getWithSetCallback()
         * @covers WANObjectCache::doGetWithSetCallback()
@@ -1346,3 +1446,44 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase {
                $this->assertEquals( $class, $wanCache->determineKeyClass( $key ) );
        }
 }
+
+class TimeAdjustableHashBagOStuff extends HashBagOStuff {
+       private $timeOverride = 0;
+
+       public function setTime( $time ) {
+               $this->timeOverride = $time;
+       }
+
+       protected function getCurrentTime() {
+               return $this->timeOverride ?: parent::getCurrentTime();
+       }
+}
+
+class TimeAdjustableWANObjectCache extends WANObjectCache {
+       private $timeOverride = 0;
+
+       public function setTime( $time ) {
+               $this->timeOverride = $time;
+               if ( $this->cache instanceof TimeAdjustableHashBagOStuff ) {
+                       $this->cache->setTime( $time );
+               }
+       }
+
+       protected function getCurrentTime() {
+               return $this->timeOverride ?: parent::getCurrentTime();
+       }
+}
+
+class NearExpiringWANObjectCache extends TimeAdjustableWANObjectCache {
+       const CLOCK_SKEW = 1;
+
+       protected function worthRefreshExpiring( $curTTL, $lowTTL ) {
+               return ( ( $curTTL + self::CLOCK_SKEW ) < $lowTTL );
+       }
+}
+
+class PopularityRefreshingWANObjectCache extends TimeAdjustableWANObjectCache {
+       protected function worthRefreshPopular( $asOf, $ageNew, $timeTillRefresh, $now ) {
+               return ( ( $now - $asOf ) > $timeTillRefresh );
+       }
+}
index 196f688..a4e8056 100644 (file)
@@ -76,7 +76,7 @@ abstract class MediaWikiMediaTestCase extends MediaWikiTestCase {
        protected function dataFile( $name, $type = null ) {
                if ( !$type ) {
                        // Autodetect by file extension for the lazy.
-                       $magic = MimeMagic::singleton();
+                       $magic = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer();
                        $parts = explode( $name, '.' );
                        $type = $magic->guessTypesForExtension( $parts[count( $parts ) - 1] );
                }
index f51693d..b8dadaf 100644 (file)
@@ -123,7 +123,7 @@ class WebPHandlerTest extends MediaWikiTestCase {
         * @dataProvider provideTestGetMimeType
         */
        public function testGuessMimeType( $path ) {
-               $mime = MimeMagic::singleton();
+               $mime = MediaWiki\MediaWikiServices::getInstance()->getMimeAnalyzer();
                $this->assertEquals( 'image/webp', $mime->guessMimeType( $path, false ) );
        }
        public function provideTestGetMimeType() {
diff --git a/tests/phpunit/includes/page/WikiPageTestContentHandlerUseDB.php b/tests/phpunit/includes/page/WikiPageTestContentHandlerUseDB.php
deleted file mode 100644 (file)
index 3db7628..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-/**
- * @group ContentHandler
- * @group Database
- * ^--- important, causes temporary tables to be used instead of the real database
- */
-class WikiPageTestContentHandlerUseDB extends WikiPageTest {
-
-       protected function setUp() {
-               parent::setUp();
-               $this->setMwGlobals( 'wgContentHandlerUseDB', false );
-
-               $dbw = wfGetDB( DB_MASTER );
-
-               $page_table = $dbw->tableName( 'page' );
-               $revision_table = $dbw->tableName( 'revision' );
-               $archive_table = $dbw->tableName( 'archive' );
-
-               if ( $dbw->fieldExists( $page_table, 'page_content_model' ) ) {
-                       $dbw->query( "alter table $page_table drop column page_content_model" );
-                       $dbw->query( "alter table $revision_table drop column rev_content_model" );
-                       $dbw->query( "alter table $revision_table drop column rev_content_format" );
-                       $dbw->query( "alter table $archive_table drop column ar_content_model" );
-                       $dbw->query( "alter table $archive_table drop column ar_content_format" );
-               }
-       }
-
-       /**
-        * @covers WikiPage::getContentModel
-        */
-       public function testGetContentModel() {
-               $page = $this->createPage(
-                       "WikiPageTest_testGetContentModel",
-                       "some text",
-                       CONTENT_MODEL_JAVASCRIPT
-               );
-
-               $page = new WikiPage( $page->getTitle() );
-
-               // NOTE: since the content model is not recorded in the database,
-               //       we expect to get the default, namely CONTENT_MODEL_WIKITEXT
-               $this->assertEquals( CONTENT_MODEL_WIKITEXT, $page->getContentModel() );
-       }
-
-       /**
-        * @covers WikiPage::getContentHandler
-        */
-       public function testGetContentHandler() {
-               $page = $this->createPage(
-                       "WikiPageTest_testGetContentHandler",
-                       "some text",
-                       CONTENT_MODEL_JAVASCRIPT
-               );
-
-               // NOTE: since the content model is not recorded in the database,
-               //       we expect to get the default, namely CONTENT_MODEL_WIKITEXT
-               $page = new WikiPage( $page->getTitle() );
-               $this->assertEquals( 'WikitextContentHandler', get_class( $page->getContentHandler() ) );
-       }
-}