Merge "Declare HTMLSelectNamespace::mAllValue"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 26 Jun 2018 15:25:07 +0000 (15:25 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 26 Jun 2018 15:25:07 +0000 (15:25 +0000)
96 files changed:
Gruntfile.js
RELEASE-NOTES-1.32
includes/DefaultSettings.php
includes/GitInfo.php
includes/api/i18n/cs.json
includes/api/i18n/fr.json
includes/api/i18n/ko.json
includes/api/i18n/nl.json
includes/api/i18n/pt-br.json
includes/api/i18n/pt.json
includes/cache/localisation/LCStoreStaticArray.php
includes/installer/i18n/es.json
includes/installer/i18n/he.json
includes/installer/i18n/nl.json
includes/installer/i18n/sr-ec.json
includes/media/FormatMetadata.php
includes/page/WikiPage.php
includes/parser/Parser.php
includes/parser/Sanitizer.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/skins/Skin.php
languages/i18n/ace.json
languages/i18n/as.json
languages/i18n/bar.json
languages/i18n/be-tarask.json
languages/i18n/bn.json
languages/i18n/bpy.json
languages/i18n/br.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/cs.json
languages/i18n/cy.json
languages/i18n/de-formal.json
languages/i18n/de.json
languages/i18n/es.json
languages/i18n/eu.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/he.json
languages/i18n/hr.json
languages/i18n/inh.json
languages/i18n/io.json
languages/i18n/ko.json
languages/i18n/lt.json
languages/i18n/lv.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mni.json [new file with mode: 0644]
languages/i18n/nan.json
languages/i18n/nap.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/pl.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/sh.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/szl.json
languages/i18n/ur.json
languages/i18n/vi.json
languages/i18n/wa.json
languages/i18n/zgh.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/jsduck/eg-iframe.html
maintenance/populateChangeTagDef.php
resources/Resources.php
resources/src/mediawiki.base/mediawiki.base.js [new file with mode: 0644]
resources/src/mediawiki.base/mediawiki.errorLogger.js [new file with mode: 0644]
resources/src/mediawiki.hidpi/hidpi.js [deleted file]
resources/src/mediawiki.hidpi/skip.js [deleted file]
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.less
resources/src/mediawiki.ui/components/checkbox.less
resources/src/mediawiki/mediawiki.base.js [deleted file]
resources/src/mediawiki/mediawiki.errorLogger.js [deleted file]
tests/parser/DbTestRecorder.php
tests/parser/parserTests.txt
tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php
tests/qunit/QUnitTestResources.php
tests/qunit/suites/resources/mediawiki/mediawiki.base.test.js [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.test.js
tests/selenium/pageobjects/watchable.page.js [new file with mode: 0644]
tests/selenium/pageobjects/watchlist.page.js [new file with mode: 0644]
tests/selenium/specs/page.js
tests/selenium/specs/specialrecentchanges.js
tests/selenium/specs/specialwatchlist.js [new file with mode: 0644]
tests/selenium/specs/user.js
tests/selenium/wdio-mediawiki/CHANGELOG.md
tests/selenium/wdio-mediawiki/Util.js [new file with mode: 0644]
tests/selenium/wdio-mediawiki/package.json

index 8018212..6be908e 100644 (file)
@@ -33,9 +33,7 @@ module.exports = function ( grunt ) {
                                '!vendor/**',
                                // Explicitly say "**/*.js" here in case of symlinks
                                '!extensions/**/*.js',
-                               '!skins/**/*.js',
-                               // Skip functions aren't even parseable
-                               '!resources/src/mediawiki.hidpi/skip.js'
+                               '!skins/**/*.js'
                        ]
                },
                jsonlint: {
index 261f4b8..3c60124 100644 (file)
@@ -132,6 +132,7 @@ because of Phabricator reports.
   removed. Use JobQueueGroup::singleton()->push() instead.
 * The jquery.footHovzer module, for mediawiki.debug, was removed.
 * The es5-shim module, empty and deprecated since 1.29, was removed.
+* the dom-level2-shim module, empty and deprecated since 1.29, was removed.
 * The mediawiki.widgets.visibleByteLimit module alias, deprecated in 1.32, was
   removed. Use mediawiki.widgets.visibleLengthLimit instead.
 * The jquery.farbtastic module, unused since 1.18, was removed.
@@ -217,6 +218,7 @@ because of Phabricator reports.
 * (T176526) EditPage::getContextTitle() falling back to $wgTitle when the
   context title is unset is now deprecated; anything creating an EditPage
   instance should set the context title via ::setContextTitle().
+* The 'jquery.hidpi' module (polyfill for IMG srcset) is deprecated.
 
 === Other changes in 1.32 ===
 * …
index 2c98283..3771df1 100644 (file)
@@ -1500,10 +1500,6 @@ $wgDirectoryMode = 0777;
  *
  * This means a 320x240 use of an image on the wiki will also generate 480x360 and 640x480
  * thumbnails, output via the srcset attribute.
- *
- * On older browsers, a JavaScript polyfill switches the appropriate images in after loading
- * the original low-resolution versions depending on the reported window.devicePixelRatio.
- * The polyfill can be found in the jquery.hidpi module.
  */
 $wgResponsiveImages = true;
 
@@ -1896,6 +1892,8 @@ $wgDBmwschema = null;
 
 /**
  * Default group to use when getting database connections.
+ * Will be used as default query group in ILoadBalancer::getConnection.
+ * @since 1.32
  */
 $wgDBDefaultGroup = null;
 
index 6270b27..363d7b8 100644 (file)
@@ -227,6 +227,7 @@ class GitInfo {
                        $date = false;
                        if ( is_file( $wgGitBin ) &&
                                is_executable( $wgGitBin ) &&
+                               !Shell::isDisabled() &&
                                $this->getHead() !== false
                        ) {
                                $cmd = [
index c69f267..09e4106 100644 (file)
@@ -15,7 +15,7 @@
                        "Ilimanaq29"
                ]
        },
-       "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentace]]\n* [[mw:Special:MyLanguage/API:FAQ|Otázky a odpovědi]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-mailová konference]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Oznámení k API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Chyby a požadavky]\n</div>\n<strong>Stav:</strong> Všechny funkce uvedené na této stránce by měly fungovat, ale API se stále aktivně vyvíjí a může se kdykoli změnit. Upozornění na změny získáte přihlášením se k [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-mailové konferenci mediawiki-api-announce].\n\n<strong>Chybné požadavky:</strong> Pokud jsou do API zaslány chybné požadavky, bude vrácena HTTP hlavička s klíčem „MediaWiki-API-Error“ a hodnota této hlavičky a chybový kód budou nastaveny na stejnou hodnotu. Více informací najdete [[mw:Special:MyLanguage/API:Errors_and_warnings|v dokumentaci]].\n\n<strong>Testování:</strong> Pro jednoduché testování požadavků na API zkuste [[Special:ApiSandbox]].",
+       "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentace]]\n* [[mw:Special:MyLanguage/API:FAQ|Otázky a odpovědi]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-mailová konference]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Oznámení k API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Chyby a požadavky]\n</div>\n<strong>Stav:</strong> Všechny funkce uvedené na této stránce by měly fungovat, ale API se stále aktivně vyvíjí a může se kdykoli změnit. Upozornění na změny získáte přihlášením se k [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-mailové konferenci mediawiki-api-announce].\n\n<strong>Chybné požadavky:</strong> Pokud jsou do API zaslány chybné požadavky, bude vrácena HTTP hlavička s klíčem „MediaWiki-API-Error“ a hodnota této hlavičky a chybový kód budou nastaveny na stejnou hodnotu. Více informací najdete [[mw:Special:MyLanguage/API:Errors_and_warnings|v dokumentaci]].\n\n<p class=\"mw-apisandbox-link\"><strong>Testování:</strong> Pro jednoduché testování požadavků na API zkuste [[Special:ApiSandbox]].</p>",
        "apihelp-main-param-action": "Která akce se má provést.",
        "apihelp-main-param-format": "Formát výstupu.",
        "apihelp-main-param-maxlag": "Maximální zpoždění lze použít, když je MediaWiki nainstalováno na cluster s replikovanou databází. Abyste se vyhnuli zhoršování už tak špatného replikačního zpoždění, můžete tímto parametrem nechat klienta čekat, dokud replikační zpoždění neklesne pod uvedenou hodnotu. V případě příliš vysokého zpoždění se vrátí chybový kód „<samp>maxlag</samp>“ s hlášením typu „<samp>Waiting for $host: $lag seconds lagged</samp>“.<br />Více informací najdete v [[mw:Special:MyLanguage/Manual:Maxlag_parameter|příručce]].",
index 3d24743..a80ff50 100644 (file)
        "apihelp-query+filearchive-paramvalue-prop-archivename": "Ajoute le nom de fichier de la version d’archive pour les versions autres que la dernière.",
        "apihelp-query+filearchive-example-simple": "Afficher une liste de tous les fichiers supprimés",
        "apihelp-query+filerepoinfo-summary": "Renvoyer les méta-informations sur les référentiels d’images configurés dans le wiki.",
-       "apihelp-query+filerepoinfo-param-prop": "Quelles propriétés du référentiel récupérer (les propriétés disponibles peuvent varier sur les autres wikis).",
+       "apihelp-query+filerepoinfo-param-prop": "Quelles propriétés récupérer du référentiel (les propriétés disponibles peuvent varier sur les autres wikis).",
        "apihelp-query+filerepoinfo-paramvalue-prop-apiurl": "URL vers l’API du dépôt — utile pour obtenir des informations sur l’image depuis l’hôte.",
        "apihelp-query+filerepoinfo-paramvalue-prop-articlepath": "<var>[[mw:Special:MyLanguage/Manual:$wgArticlePath|$wgArticlePath]]</var> du wiki du dépôt, ou équivalent.",
        "apihelp-query+filerepoinfo-paramvalue-prop-canUpload": "Si les fichiers peuvent être téléchargés sur ce dépôt, par ex. via CORS et l’authentification partagée.",
        "apihelp-query+filerepoinfo-paramvalue-prop-displayname": "Le nom lisible du wiki du dépôt.",
-       "apihelp-query+filerepoinfo-paramvalue-prop-favicon": "L’URL du favicon du wiki, depuis <var>[[mw:Special:MyLanguage/Manual:$wgFavicon|$wgFavicon]]</var>.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-favicon": "URL de l'icône favorite du dépôt du wiki, depuis <var>[[mw:Special:MyLanguage/Manual:$wgFavicon|$wgFavicon]]</var>.",
        "apihelp-query+filerepoinfo-paramvalue-prop-fetchDescription": "Si les pages de description de fichier sont récupérées de ce dépôt lors de l’affichage des pages de description de fichier locales.",
        "apihelp-query+filerepoinfo-paramvalue-prop-initialCapital": "Si les noms de fichier commencent implicitement par une majuscule.",
        "apihelp-query+filerepoinfo-paramvalue-prop-local": "Si ce dépôt est local ou non.",
index c486045..e2b6bb4 100644 (file)
        "apihelp-query+filearchive-paramvalue-prop-metadata": "그림의 버전에 대한 Exif 메타데이터를 나열합니다.",
        "apihelp-query+filearchive-example-simple": "삭제된 모든 파일의 목록을 표시합니다.",
        "apihelp-query+filerepoinfo-summary": "위키에 구성된 그림 저장소에 대한 메타 정보를 반환합니다.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-apiurl": "저장소 API의 URL - 호스트로부터 이미지 정보를 가져오는데 유용합니다.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-canUpload": "파일을 이 저장소에 올릴 수 있는지의 여부. (예: CORS를 통해, 공유 인증을 통해)",
+       "apihelp-query+filerepoinfo-paramvalue-prop-displayname": "사람이 식별할 수 있는 저장소 위키의 이름입니다.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-local": "해당 저장소가 로컬인지 아닌지의 여부입니다.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-rootUrl": "이미지 경로의 루트 URL 경로입니다.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-thumbUrl": "섬네일 경로의 루트 URL 경로입니다.",
        "apihelp-query+filerepoinfo-example-simple": "파일 저장소의 정보를 가져옵니다.",
        "apihelp-query+fileusage-summary": "제시된 파일을 사용하는 모든 문서를 찾습니다.",
        "apihelp-query+fileusage-param-prop": "얻고자 하는 속성:",
index 1da2c02..271e36c 100644 (file)
        "apihelp-opensearch-summary": "In de wiki zoeken met behulp het OpenSearchprotocol.",
        "apihelp-opensearch-param-search": "Zoektekst.",
        "apihelp-opensearch-param-limit": "Het maximale aantal weer te geven resultaten.",
-       "apihelp-opensearch-param-namespace": "Te doorzoeken naamruimten.",
+       "apihelp-opensearch-param-namespace": "Te doorzoeken naamruimten. Wordt genegeerd indien <var>$1search</var> met een geldige naamruimte voorvoegsel begint.",
        "apihelp-opensearch-param-suggest": "Niets doen als <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> onwaar is.",
        "apihelp-opensearch-param-redirects": "Hoe om te gaan met doorverwijzingen:\n;return:Retourneer de doorverwijzing.\n;resolve:Retourneer de doelpagina. Retourneert mogelijk minder dan $1limit resultaten.\nOm historische redenen is \"return\" de standaardinstelling voor <code>$1format=json</code>, en \"resolve\" voor andere formaten.",
        "apihelp-opensearch-param-format": "Het uitvoerformaat.",
index c177d2e..439f811 100644 (file)
        "apihelp-query+filearchive-paramvalue-prop-archivename": "Adiciona o nome do arquivo da versão arquivada para as versões não-mais recentes.",
        "apihelp-query+filearchive-example-simple": "Mostrar uma lista de todos os arquivos excluídos.",
        "apihelp-query+filerepoinfo-summary": "Retorna informações meta sobre repositórios de imagens configurados na wiki.",
-       "apihelp-query+filerepoinfo-param-prop": "Quais propriedades do repositório obter (pode haver mais disponível em algumas wikis):\n;apiurl: URL para a API do repositório - útil para obter informações de imagem do host.\n;name: A chave do repositório - usado em por exemplo, <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> e [[Special:ApiHelp/query+imageinfo|imageinfo]] valores de retorno.\n;displayname: O legível para humanos do repositório wiki.\n;rooturl: URL raiz para caminhos de imagem.\n; local: Se esse repositório é o local ou não.",
+       "apihelp-query+filerepoinfo-param-prop": "As propriedades do repositório que devem ser obtidas (as propriedades disponíveis podem variar noutras wikis).",
+       "apihelp-query+filerepoinfo-paramvalue-prop-apiurl": "URL para a API do repositório - útil para obter informação sobre imagens, do repositório.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-articlepath": "<var>[[mw:Special:MyLanguage/Manual:$wgArticlePath|$wgArticlePath]]</var> da wiki do repositório ou equivalente.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-canUpload": "Indica se podem ser carregados ficheiros neste repositório, por exemplo, via CORS e autenticação partilhada.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-displayname": "O nome legível da wiki do repositório.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-favicon": "O URL da favicon da wiki do repositório, de <var>[[mw:Special:MyLanguage/Manual:$wgFavicon|$wgFavicon]]</var>.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-fetchDescription": "Indica se as páginas de descrição de ficheiro devem ser obtidas deste repositório ao ver as páginas de descrição de ficheiros locais.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-initialCapital": "Indica se os nomes de arquivos começam implicitamente com letra maiúscula.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-local": "Indica se o repositório em questão é o local ou não.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-name": "A chave do repositório - usada, por exemplo, nos valores devolvidos em <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> e [[Special:ApiHelp/query+imageinfo|imageinfo]].",
+       "apihelp-query+filerepoinfo-paramvalue-prop-rootUrl": "Caminho do URL de raiz para os caminhos de imagens.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-scriptDirUrl": "Caminho do URL de raiz para a instalação MediaWiki da wiki do repositório.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-server": "<var>[[mw:Special:MyLanguage/Manual:$wgServer|$wgServer]]</var> da wiki do repositório ou equivalente.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-thumbUrl": "Caminho do URL de raiz para os caminhos das miniaturas.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-url": "Caminho do URL da zona pública.",
        "apihelp-query+filerepoinfo-example-simple": "Obter informações sobre repositórios de arquivos.",
        "apihelp-query+fileusage-summary": "Encontre todas as páginas que usam os arquivos dados.",
        "apihelp-query+fileusage-param-prop": "Quais propriedades obter:",
index 3240c66..ca43981 100644 (file)
        "apihelp-query+filearchive-paramvalue-prop-archivename": "Adiciona o nome de ficheiro da versão arquivada das versões anteriores à última.",
        "apihelp-query+filearchive-example-simple": "Mostrar uma lista de todos os ficheiros eliminados.",
        "apihelp-query+filerepoinfo-summary": "Devolver meta informação sobre os repositórios de imagens configurados na wiki.",
-       "apihelp-query+filerepoinfo-param-prop": "As propriedades do repositório que devem ser obtidas (em algumas wikis poderão haver mais disponíveis):\n;apiurl:URL para a API do repositório - útil para obter informação de imagens do servidor.\n;name:A chave para o repositório - usada, por exemplo, em <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> e nos valores de retorno de [[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:O nome legível da wiki repositório.\n;rooturl:URL de raiz para endereços de imagens.\n;local:Se o repositório é o local ou não.",
+       "apihelp-query+filerepoinfo-param-prop": "As propriedades do repositório que devem ser obtidas (as propriedades disponíveis podem variar noutras wikis).",
+       "apihelp-query+filerepoinfo-paramvalue-prop-apiurl": "URL para a API do repositório - útil para obter informação sobre imagens, do repositório.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-articlepath": "<var>[[mw:Special:MyLanguage/Manual:$wgArticlePath|$wgArticlePath]]</var> da wiki do repositório ou equivalente.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-canUpload": "Indica se podem ser carregados ficheiros neste repositório, por exemplo, via CORS e autenticação partilhada.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-displayname": "O nome legível da wiki do repositório.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-favicon": "O URL da favicon da wiki do repositório, de <var>[[mw:Special:MyLanguage/Manual:$wgFavicon|$wgFavicon]]</var>.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-fetchDescription": "Indica se as páginas de descrição de ficheiro devem ser obtidas deste repositório ao ver as páginas de descrição de ficheiros locais.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-initialCapital": "Indica se os nomes de ficheiros começam implicitamente com letra maiúscula.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-local": "Indica se o repositório em questão é o local ou não.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-name": "A chave do repositório - usada, por exemplo, nos valores devolvidos em <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> e [[Special:ApiHelp/query+imageinfo|imageinfo]].",
+       "apihelp-query+filerepoinfo-paramvalue-prop-rootUrl": "Caminho do URL de raiz para os caminhos de imagens.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-scriptDirUrl": "Caminho do URL de raiz para a instalação MediaWiki da wiki do repositório.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-server": "<var>[[mw:Special:MyLanguage/Manual:$wgServer|$wgServer]]</var> da wiki do repositório ou equivalente.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-thumbUrl": "Caminho do URL de raiz para os caminhos das miniaturas.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-url": "Caminho do URL da zona pública.",
        "apihelp-query+filerepoinfo-example-simple": "Obter informações sobre os repositórios de ficheiros.",
        "apihelp-query+fileusage-summary": "Encontrar todas as páginas que usam os ficheiros indicados.",
        "apihelp-query+fileusage-param-prop": "As propriedades a serem obtidas:",
index 602c0ac..38700b8 100644 (file)
@@ -47,6 +47,13 @@ class LCStoreStaticArray implements LCStore {
        }
 
        public function startWrite( $code ) {
+               if ( !file_exists( $this->directory ) ) {
+                       if ( !wfMkdirParents( $this->directory, null, __METHOD__ ) ) {
+                               throw new MWException( "Unable to create the localisation store " .
+                                       "directory \"{$this->directory}\"" );
+                       }
+               }
+
                $this->currentLang = $code;
                $this->fname = $this->directory . '/' . $code . '.l10n.php';
                $this->data[$code] = [];
index 921844d..41ac945 100644 (file)
        "config-license-help": "Muchos wikis públicos ponen todas las contribuciones bajo una [https://freedomdefined.org/Definition licencia libre].\nEsto ayuda a crear un sentido de propiedad comunitaria y alienta la contribución a largo plazo.\nEsto no es generalmente necesario para un wiki privado o corporativo.\n\nSi deseas poder utilizar texto de Wikipedia, y deseas que Wikipedia pueda aceptar el texto copiado de tu wiki, debes elegir <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nWikipedia utilizaba anteriormente la licencia de documentación libre de GNU (GFDL).\nLa GFDL es una licencia válida, pero es difícil de entender.\nTambién es difícil reutilizar el contenido licenciado bajo la GFDL.",
        "config-email-settings": "Configuración de correo electrónico",
        "config-enable-email": "Activar el envío de correos electrónicos",
-       "config-enable-email-help": "Si quieres que el correo electrónico funcione, la [https://secure.php.net/manual/en/mail.configuration.php configuración PHP de correo electrónico] debe ser configurada correctamente.\nSi no quieres ninguna funcionalidad del correo electrónico, puedes desactivarla aquí.",
+       "config-enable-email-help": "Si quieres que el correo electrónico funcione, la [https://secure.php.net/manual/en/mail.configuration.php configuración PHP de correo electrónico] debe ser la correcta.\nSi no quieres ninguna funcionalidad de correo electrónico, puedes desactivarlas aquí.",
        "config-email-user": "Activar correo electrónico entre usuarios",
        "config-email-user-help": "Permitir que todos los usuarios intercambien correos electrónicos si lo han activado en sus preferencias.",
        "config-email-usertalk": "Activar notificaciones de páginas de discusión de usuarios",
index bc860d9..990b3bc 100644 (file)
        "config-support-info": "מדיה־ויקי תומכת במערכות מסדי הנתונים הבאות:\n\n$1\n\nאם אינך רואה את מסד הנתונים שלך ברשימה, יש לעקוב אחר ההוראות המקושרות לעיל כדי להפעיל את התמיכה.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] הוא היעד העיקרי עבור מדיה־ויקי ולו התמיכה הטובה ביותר. מדיה־ויקי עובדת גם עם [{{int:version-db-mariadb-url}} MariaDB] ועם [{{int:version-db-percona-url}} Percona Server], שתואמים ל־MySQL. (ר׳ [https://secure.php.net/manual/en/mysql.installation.php how to compile PHP with MySQL support])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] הוא מסד נתונים נפוץ בקוד פתוח והוא נפוץ בתור חלופה ל־MySQL. (ר׳ [https://secure.php.net/manual/en/pgsql.installation.php how to compile PHP with PostgreSQL support]).",
-       "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] הוא מסד נתונים קליל עם תמיכה טובה מאוד. (ר׳ [http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], משתמש ב־PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] הוא מסד נתונים עסקי מסחרי. (ר׳ [http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])",
+       "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] הוא מסד נתונים קליל עם תמיכה טובה מאוד. (ר׳ [https://secure.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], משתמש ב־PDO)",
+       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] הוא מסד נתונים עסקי מסחרי. (ר׳ [https://secure.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] הוא מסד נתונים עסקי מסחרי לחלונות. ([https://secure.php.net/manual/en/sqlsrv.installation.php How to compile PHP with SQLSRV support])",
        "config-header-mysql": "הגדרות MySQL",
        "config-header-postgres": "הגדרות PostgreSQL",
        "config-license-help": "אתרי ויקי ציבוריים רבים מפרסמים את כל התרומות [https://freedomdefined.org/Definition ברישיון חופשי].\nזה עוזר ליצור תחושה של בעלות קהילתית ומעודד תרומה לאורך זמן.\nזה בדרך כלל לא נחוץ לאתר ויקי פרטי או אתר של חברה מסחרית.\n\nאם האפשרות להשתמש בטקסט מוויקיפדיה והאפשרות שוויקיפדיה תוכל תקבל עותקים של טקסטים מהוויקי שלך חשובות לך, כדאי לבחור ב<strong>{{int:config-license-cc-by-sa}}</strong>.\n\nויקיפדיה השתמשה בעבר ברישיון החופשי למסמכים של גנו (GNU FDL או GFDL).\nהוא עדיין רישיון תקין, אבל קשה להבנה.\nכמו־כן, קשה לעשות שימוש חוזר ביצירות שפורסמו לפי GFDL.",
        "config-email-settings": "הגדרות דוא״ל",
        "config-enable-email": "להפעיל דוא״ל יוצא",
-       "config-enable-email-help": "אם אתם רוצים שדוא״ל יעבוד, [Config-dbsupport-oracle/manual/en/mail.configuration.php אפשרויות הדוא״ל של PHP] צריכות להיות מוגדרות נכון.\nאם אינכם רוצים להפעיל שום אפשרויות דוא״ל, כבו אותן כאן ועכשיו.",
+       "config-enable-email-help": "אם אתם רוצים שדוא״ל יעבוד, [https://secure.php.net/manual/en/mail.configuration.php אפשרויות הדוא״ל של PHP] צריכות להיות מוגדרות נכון.\nאם אינכם רוצים להפעיל שום אפשרויות דוא״ל, כבו אותן כאן ועכשיו.",
        "config-email-user": "להפעיל שליחת דוא״ל ממשתמש למשתמש",
        "config-email-user-help": "לאפשר לכל המשתמשים לשלוח אחד לשני דוא״ל אם הם הפעילו את זה בהעדפות שלהם.",
        "config-email-usertalk": "להפעיל הודעות על דף שיחת משתמש",
index 6011a8b..2a1d1b1 100644 (file)
        "config-support-info": "MediaWiki ondersteunt de volgende databasesystemen:\n\n$1\n\nAls u het databasesysteem dat u wilt gebruiken niet in de lijst terugvindt, volg dan de handleiding waarnaar hierboven wordt verwezen om ondersteuning toe te voegen.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] is de primaire database voor MediaWiki en wordt het best ondersteund. MediaWiki werkt ook met [{{int:version-db-mariadb-url}} MariaDB] en [{{int:version-db-percona-url}} Percona Server], die MySQL compatibel zijn ([https://secure.php.net/manual/en/mysqli.installation.php hoe PHP te compileren met MySQL-ondersteuning]).",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] is een populair open source databasesysteem als alternatief voor MySQL.([https://secure.php.net/manual/en/pgsql.installation.php Hoe u PHP kunt compileren met ondersteuning voor PostgreSQL])",
-       "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] is een zeer goed ondersteund lichtgewicht databasesysteem ([http://www.php.net/manual/en/pdo.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor SQLite]; gebruikt PDO).",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] is een commerciële database voor grote bedrijven ([http://www.php.net/manual/en/oci8.installation.php PHP compileren met ondersteuning voor OCI8]).",
+       "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] is een zeer goed ondersteund lichtgewicht databasesysteem ([https://secure.php.net/manual/en/pdo.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor SQLite]; gebruikt PDO).",
+       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] is een commerciële database voor grote bedrijven ([https://secure.php.net/manual/en/oci8.installation.php PHP compileren met ondersteuning voor OCI8]).",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] is een commerciële enterprisedatabase voor Windows ([https://secure.php.net/manual/en/sqlsrv.installation.php PHP compileren met ondersteuning voor SQLSRV]).",
        "config-header-mysql": "MySQL-instellingen",
        "config-header-postgres": "PostgreSQL-instellingen",
        "config-license-help": "In veel openbare wiki's zijn alle bijdragen beschikbaar onder een [https://freedomdefined.org/Definition vrije licentie].\nDit helpt bij het creëren van een gevoel van gemeenschappelijk eigendom en stimuleert bijdragen op lange termijn.\nDit is over het algemeen niet nodig is voor een particuliere of zakelijke wiki.\n\nAls u teksten uit Wikipedia wilt kunnen gebruiken en u wilt het mogelijk maken teksten uit uw wiki naar Wikipedia te kopiëren, kies dan de licentie <strong>{{int:config-license-cc-by-sa}}</strong>.\n\nDe GNU Free Documentation License is de oude licentie voor inhoud uit Wikipedia.\nDit is nog steeds een geldige licentie, maar deze licentie is lastig te begrijpen.\nHet is ook lastig inhoud te hergebruiken onder de GFDL.",
        "config-email-settings": "E-mailinstellingen",
        "config-enable-email": "Uitgaande e-mail inschakelen",
-       "config-enable-email-help": "Als u wilt dat e-mailen mogelijk is, dan moeten de [Config-dbsupport-oracle/manual/en/mail.configuration.php e-mailinstellingen van PHP] correct zijn.\nAls u niet wilt dat e-mailen mogelijk is, dan kunt u de instellingen hier uitschakelen.",
+       "config-enable-email-help": "Als u wilt dat e-mailen mogelijk is, dan moeten de [https://secure.php.net/manual/en/mail.configuration.php e-mailinstellingen van PHP] correct zijn.\nAls u niet wilt dat e-mailen mogelijk is, dan kunt u de instellingen hier uitschakelen.",
        "config-email-user": "E-mail tussen gebruikers inschakelen",
        "config-email-user-help": "Gebruikers toestaan e-mail aan elkaar te verzenden als dit in de voorkeuren is ingesteld.",
        "config-email-usertalk": "Gebruikersoverlegmeldingen inschakelen",
        "config-cache-options": "Instellingen voor het cachen van objecten:",
        "config-cache-help": "Het cachen van objecten wordt gebruikt om de snelheid van MediaWiki te verbeteren door vaak gebruikte gegevens te bewaren.\nMiddelgrote tot grote websites wordt geadviseerd dit in te schakelen en ook kleine sites merken de voordelen.",
        "config-cache-none": "Niets cachen.\nEr gaat geen functionaliteit verloren, maar dit kan invloed hebben op de prestaties.",
-       "config-cache-accel": "Cachen van objecten via PHP (APC, APCu, XCache of WinCache)",
+       "config-cache-accel": "Cachen van objecten via PHP (APC, APCu of WinCache)",
        "config-cache-memcached": "Memcached gebruiken (dit vereist aanvullende instellingen)",
        "config-memcached-servers": "Memcachedservers:",
        "config-memcached-help": "Lijst met IP-adressen te gebruiken voor Memcached.\nEén IP-adres per regel met een poortnummer.\nBijvoorbeeld:\n 127.0.0.1:11211\n 192.168.1.25:1234",
        "config-nofile": "Het bestand \"$1\" is niet gevonden. Is het verwijderd?",
        "config-extension-link": "Weet u dat u [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions uitbreidingen] kunt gebruiken voor uw wiki?\n\nU kunt [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category uitbreidingen op categorie] bekijken of ga naar de [https://www.mediawiki.org/wiki/Extension_Matrix uitbreidingenmatrix] om de volledige lijst met uitbreidingen te bekijken.",
        "config-skins-screenshots": "$1 (schermafbeeldingen: $2)",
+       "config-extensions-requires": "$1 (vereist $2)",
        "config-screenshot": "schermafbeelding",
        "mainpagetext": "<strong>De installatie van MediaWiki is geslaagd.</strong>",
        "mainpagedocfooter": "Raadpleeg de [https://meta.wikimedia.org/wiki/Special:MyLanguage/Help:Contents handleiding] voor informatie over het gebruik van de wikisoftware.\n\n== Meer hulp over MediaWiki ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lijst met instellingen]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Veelgestelde vragen (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglijst voor aankondigingen van nieuwe versies]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Maak MediaWiki beschikbaar in uw taal]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Leer hoe u spam kunt voorkomen op uw wiki]"
index fa4ad6d..0957d8b 100644 (file)
@@ -8,7 +8,8 @@
                        "Сербијана",
                        "Zoranzoki21",
                        "Acamicamacaraca",
-                       "Obsuser"
+                       "Obsuser",
+                       "BadDog"
                ]
        },
        "config-desc": "Инсталација за Медијавики",
@@ -32,7 +33,7 @@
        "config-page-upgrade": "Надоградња постојеће инсталације",
        "config-page-dbsettings": "Подешавања базе података",
        "config-page-name": "Назив",
-       "config-page-options": "Ð\9fодеÑ\88аваÑ\9aа",
+       "config-page-options": "Ð\9eпÑ\86иÑ\98е",
        "config-page-install": "Инсталирај",
        "config-page-complete": "Завршено!",
        "config-page-restart": "Поновно покретање инсталације",
index 9ebc63f..b98d7f1 100644 (file)
@@ -271,7 +271,7 @@ class FormatMetadata extends ContextSource {
                                        // TODO: YCbCrCoefficients  #p27 (see annex E)
                                        case 'ExifVersion':
                                        case 'FlashpixVersion':
-                                               $val = "$val" / 100;
+                                               $val = (int)$val / 100;
                                                break;
 
                                        case 'ColorSpace':
index e391df9..b970820 100644 (file)
@@ -202,7 +202,7 @@ class WikiPage implements Page, IDBAccessObject {
         * @param object|string|int $type
         * @return mixed
         */
-       private static function convertSelectType( $type ) {
+       protected static function convertSelectType( $type ) {
                switch ( $type ) {
                        case 'fromdb':
                                return self::READ_NORMAL;
index a1b3064..0270828 100644 (file)
@@ -1353,15 +1353,7 @@ class Parser {
                }
 
                # Clean up special characters, only run once, next-to-last before doBlockLevels
-               $fixtags = [
-                       # French spaces, last one Guillemet-left
-                       # only if there is something before the space
-                       '/(.) (?=\\?|:|;|!|%|\\302\\273)/' => '\\1&#160;',
-                       # french spaces, Guillemet-right
-                       '/(\\302\\253) /' => '\\1&#160;',
-                       '/&#160;(!\s*important)/' => ' \\1', # Beware of CSS magic word !important, T13874.
-               ];
-               $text = preg_replace( array_keys( $fixtags ), array_values( $fixtags ), $text );
+               $text = Sanitizer::armorFrenchSpaces( $text );
 
                $text = $this->doBlockLevels( $text, $linestart );
 
index ff543db..21498f8 100644 (file)
@@ -1141,6 +1141,27 @@ class Sanitizer {
                return $encValue;
        }
 
+       /**
+        * Armor French spaces with a replacement character
+        *
+        * @since 1.32
+        * @param string $text Text to armor
+        * @param string $space Space character for the French spaces, defaults to '&#160;'
+        * @return string Armored text
+        */
+       public static function armorFrenchSpaces( $text, $space = '&#160;' ) {
+               // Replace $ with \$ and \ with \\
+               $space = preg_replace( '#(?<!\\\\)(\\$|\\\\)#', '\\\\$1', $space );
+               $fixtags = [
+                       # French spaces, last one Guillemet-left
+                       # only if there is something before the space
+                       '/(.) (?=[?:;!%»])/u' => "\\1$space",
+                       # French spaces, Guillemet-right
+                       '/(«) /u' => "\\1$space",
+               ];
+               return preg_replace( array_keys( $fixtags ), array_values( $fixtags ), $text );
+       }
+
        /**
         * Encode an attribute value for HTML tags, with extra armoring
         * against further wiki processing.
@@ -1168,6 +1189,9 @@ class Sanitizer {
                        '__'   => '&#95;_',
                ] );
 
+               # Armor against French spaces detection (T5158)
+               $encValue = self::armorFrenchSpaces( $encValue, '&#32;' );
+
                # Stupid hack
                $encValue = preg_replace_callback(
                        '/((?i)' . wfUrlProtocols() . ')/',
index 0416c85..b051d40 100644 (file)
@@ -336,7 +336,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
         * @return array
         */
        public static function getStartupModules() {
-               return [ 'jquery', 'mediawiki' ];
+               return [ 'jquery', 'mediawiki', 'mediawiki.base' ];
        }
 
        public static function getLegacyModules() {
@@ -396,7 +396,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        // This url may be preloaded. See getPreloadLinks().
                        '$VARS.baseModulesUri' => self::getStartupModulesUrl( $context ),
                ] );
-               $pairs['$CODE.registrations()'] = str_replace(
+               $pairs['$CODE.registrations();'] = str_replace(
                        "\n",
                        "\n\t",
                        trim( $this->getModuleRegistrations( $context ) )
@@ -429,8 +429,8 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        // Detect changes to the module registrations
                        'moduleHashes' => $this->getAllModuleHashes( $context ),
 
-                       'fileMtimes' => [
-                               filemtime( "$IP/resources/src/startup.js" ),
+                       'fileHashes' => [
+                               $this->safeFileHash( "$IP/resources/src/startup.js" ),
                        ],
                ];
                return $summary;
index 8384ca0..51be3b6 100644 (file)
@@ -212,11 +212,6 @@ abstract class Skin extends ContextSource {
                        'syndicate' => [],
                ];
 
-               // Support for high-density display images if enabled
-               if ( $config->get( 'ResponsiveImages' ) ) {
-                       $modules['core'][] = 'mediawiki.hidpi';
-               }
-
                // Preload jquery.tablesorter for mediawiki.page.ready
                if ( strpos( $out->getHTML(), 'sortable' ) !== false ) {
                        $modules['content'][] = 'jquery.tablesorter';
index 6b67e8d..605025c 100644 (file)
        "group": "Kawan:",
        "group-user": "Ureueng-ureueng ngui",
        "group-autoconfirmed": "Ureueng ngui nyang meu-konfirmasi otomatis",
+       "group-bot": "Bot",
        "group-sysop": "Ureuëng urôh",
        "group-bureaucrat": "Birôkrat",
        "group-suppress": "Ureueng kalön",
        "action-read": "beuët laman nyoe",
        "action-edit": "andam laman nyoë",
        "action-createpage": "peugöt laman",
+       "action-createaccount": "peugöt akun ureueng ngui nyoe",
        "action-move": "Peupinah laman nyoë",
        "nchanges": "$1 {{PLURAL:$1|neuubah}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|yôh seunaweuë seuneulheuëh kön}}",
        "protect-expiry-options": "1 jeum:1 hour,1 uroë:1 day,1 minggu:1 week,2 minggu:2 weeks,1 buleuën:1 month,3 buleuën:3 months,6 buleuën:6 months,1 thôn:1 year,sabé:infinite",
        "restriction-type": "Lindông:",
        "restriction-level": "Tingkat:",
+       "restriction-edit": "Andam",
+       "restriction-move": "Pupinah",
        "undeletebtn": "Peuriwang!",
        "undeletelink": "eu/peuriwang",
        "undeleteviewlink": "eu",
        "ipboptions": "2 jeum:2 hours,1 uroë:1 day,3 uroë:3 days,1 minggu:1 week,2 minggu:2 weeks,1 buleuën:1 month,3 buleuën:3 months,6 buleuën:6 months,1 thôn:1 year,sabé:infinite",
        "ipblocklist": "Ureuëng ngui teutheun",
        "ipblocklist-submit": "Mita",
+       "infiniteblock": "hana bataih",
        "blocklink": "theun",
        "unblocklink": "peugadöh theun",
        "change-blocklink": "gantoë theun",
        "blocklogentry": "theun [[$1]] ngön watèë maté tanggay $2 $3",
        "unblocklogentry": "peugadöh theun \"$1\"",
        "block-log-flags-nocreate": "pumeugöt akun geupumaté",
+       "proxyblocker": "Ngön theun proxy",
        "movepagetext": "Formulir di yup nyoë geunguy keu jak ubah nan saboh ôn ngön jak peupinah ban dum data riwayat u nan barô. Nan nyang trép euntreuk jeuët keu ôn peupinah u nan nyang barô. Hubông u nan trép hana meu’ubah. Neupeupaseuti keu neupréksa peuninah ôn nyang reulöh atawa meuganda lheuëh neupinah. Droëneuh nyang mat tanggông jaweuëb keu neupeupaseuti meunyo hubông laju teusambông u ôn nyang patôt.\n\nBeu neuingat that meunyo ôn '''h’an''' jan geupeupinah meunyo ka na ôn nyang geunguy nan barô, keucuali meunyo ôn nyan soh atawa nakeuh ôn peuninah ngön hana riwayat andam. Nyoë areutijih Droëneuh jeuët neu’ubah nan ôn keulayi lagèë söt meunyo Droëneuh neupeugöt seunalah, ngön Droëneuh h‘an jeuët neutimpa ôn nyang ka na.\n'''INGAT'''\nNyoë jeuët geupeuakébat neu’ubah nyang h’an neuduga ngön kreuëh ngön bacah keu ôn nyang meuceuhu. Neupeupaseuti Droëneuh meuphôm akébat nibak buët nyoë sigohlom neulanjut.",
        "movepagetalktext": "Ôn peugah haba nyang na hubôngan euntreuk teupinah keudroë '''keucuali meunyo:'''\n\n*Saboh ôn peugah haba nyang hana soh ka na di yup nan barô, atawa\n*Droëneuh hana neubôh tanda cunténg bak kutak di yup nyoë\n\nLam masalah nyoë, meunyo neuhawa, Droëneuh jeuët neupeupinah atawa neupeugabông ôn keudroë.",
        "newtitle": "Nan barô:",
        "pageinfo-language": "Bahsa asoe mieng",
        "pageinfo-content-model": "Modèl asoe mieng",
        "pageinfo-robot-policy": "Geuindèks lé robot",
+       "pageinfo-robot-index": "Geupeuidin",
+       "pageinfo-robot-noindex": "Hana geupeuidin",
        "pageinfo-watchers": "Jumeulah ureueng kalön mieng",
        "pageinfo-redirects-name": "Jumeulah peuninah u mieng nyoe",
+       "pageinfo-firstuser": "Ureueng peugot mieng",
+       "pageinfo-firsttime": "Uroe buleuen pumeugot mieng",
+       "pageinfo-edits": "Jumeulah neuandam ban dum",
+       "pageinfo-recent-edits": "Jumeulah neuandam ban-ban nyoe (lam $1 nyoe)",
        "pageinfo-toolboxlink": "Keutrangan miëng",
+       "pageinfo-contentpage-yes": "Nyo",
+       "patrol-log-page": "Log patroli",
        "previousdiff": "← Bida awai",
        "nextdiff": "Geunantoë lheuëh nyan →",
        "file-info-size": "$1 × $2 piksel, rayek beureukaih: $3, MIME jeunèh: $4",
        "confirm-unwatch-button": "Ka göt",
        "confirm-unwatch-top": "Sampôh laman nyoë nibak dapeuta keunalön droëneuh?",
        "imgmultipageprev": "← laman sigohlomjih",
+       "imgmultipagenext": "mieng lheueh nyoe →",
        "imgmultigo": "Jak!",
        "imgmultigoto": "Jak u mieng $1",
        "autosumm-new": "Geupeugöt laman ngön asoë '$1'",
        "tag-filter": "Saréng [[Special:Tags|tag]]:",
        "tag-filter-submit": "Saréng",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag}}]]: $2)",
+       "tags-active-yes": "Nyo",
+       "tags-active-no": "H`an",
+       "tags-hitcount": "$1 {{PLURAL:$1|neuubah}}",
        "logentry-delete-delete": "$1 {{GENDER:$2|geusampôh}} miëng $3",
        "logentry-move-move": "$1 {{GENDER:$2|geupinah}} mieng $3 u $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|geupinah}} mieng $3 u $4 hana geubôh peuninah",
index ce7e738..7158a62 100644 (file)
@@ -22,7 +22,8 @@
                        "Matma Rex",
                        "চাণক্য কুমাৰ দাস",
                        "Fitoschido",
-                       "Sagsag"
+                       "Sagsag",
+                       "Bodhisattwa"
                ]
        },
        "tog-underline": "সংযোগসমূহ অধোৰেখিত কৰক:",
        "special-characters-group-hebrew": "হিব্ৰু",
        "special-characters-group-bangla": "বাংলা",
        "special-characters-group-tamil": "তামিল",
-       "special-characters-group-telugu": "তà§\87লà§\87গু",
+       "special-characters-group-telugu": "তà§\87লà§\81গু",
        "special-characters-group-sinhala": "সিংহলী",
        "special-characters-group-gujarati": "গুজৰাটী",
        "special-characters-group-devanagari": "দেবনাগৰী",
index 15f06a1..c71494a 100644 (file)
        "permalink": "Permanenta Link",
        "print": "Drucken",
        "view": "Leesen",
-       "view-foreign": "Af $1 åschaung",
+       "view-foreign": "Af $1 ooschaung",
        "edit": "Weakln",
        "create": "Aufbaun",
        "delete": "Leschn",
        "nstab-template": "Vorlog",
        "nstab-help": "Hüfeseiten",
        "nstab-category": "Kategorie",
-       "mainpage-nstab": "Hóamsaiten",
+       "mainpage-nstab": "Hoamseitn",
        "nosuchaction": "De Akzion gibts ned",
        "nosuchactiontext": "Dé in da URL ågeewerne Akzión werd voh MediaWiki néd unterstytzd.\nEs kå a Schreibfeeler in da URL vurlieng óder es is a feelerhofter Link åklickt worn.\nEs kå sé aa um an Prógrammierfeeler in da Software, dé auf {{SITENAME}} bnutzd werd, håndeln.",
        "nosuchspecialpage": "De Speziaalsaiten gibts ned",
        "accountcreatedtext": "'s Benytzerkonto $1 is aigrichtt worn.",
        "loginlanguagelabel": "Sproch: $1",
        "pt-login": "Omejdn",
-       "pt-createaccount": "Benitzerkóntó åléeng",
+       "pt-createaccount": "Nutzakonto ooleng",
        "changepassword": "Posswort ändern",
        "oldpassword": "Oids Posswort:",
        "newpassword": "Neichs Posswort:",
        "action-createpage": "Seiten z' dastön",
        "action-autopatrol": "eigerne Beorweitungen ois kontroilird markirn",
        "nchanges": "$1 {{PLURAL:$1|Endarung|Endarunga}}",
-       "enhancedrc-history": "Valaaf",
+       "enhancedrc-history": "Valaf",
        "recentchanges": "Letzte Endarunga",
        "recentchanges-legend": "Ozoagoptiona",
        "recentchanges-summary": "Auf derer Seiten kåst d' létzden Änderrungen auf '''{{SITENAME}}''' nochévavóing.",
        "rcshowhideminor": "Kloane Endarunga $1",
        "rcshowhideminor-hide": "Ausblendn",
        "rcshowhidebots": "Bots $1",
-       "rcshowhidebots-show": "Åzóang",
+       "rcshowhidebots-show": "Ozoang",
        "rcshowhideliu": "Registriade Nutza $1",
        "rcshowhideliu-hide": "Ausblendn",
        "rcshowhideanons": "Anonyme Nutza $1",
        "newpageletter": "N",
        "boteditletter": "B",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|beówochtender|beówochtende}} Benutzer]",
-       "rc-change-size-new": "$1 {{PLURAL:$1|Byte|Bytes}} noch da Éndarung",
+       "rc-change-size-new": "$1 {{PLURAL:$1|Byte|Bytes}} noch da Endarung",
        "newsectionsummary": "Neicher Obschnit /* $1 */",
        "rc-enhanced-expand": "Details zoagn (braucht JavaScript)",
        "rc-enhanced-hide": "Details vastecka",
        "recentchangeslinked-feed": "Valinkts priaffm",
        "recentchangeslinked-toolbox": "Endarunga af valinktn Seitn",
        "recentchangeslinked-title": "Endarunga wo vo „$1“ valinkt san",
-       "recentchangeslinked-summary": "Gib an Saitennåman aih, um Éndarungen auf Saiten z' seeng, dé af óder voh derer Saiten valinkt san. Daasd Midgliader vo aner Kategorie siagst, gib „{{ns:category}}:''Nåm voh da Kategorie''“ aih. Énderungen voh Saiten af [[Special:Watchlist|dainer Beówochtungslisten]] san<strong>fett</strong> viarerghóom.",
+       "recentchangeslinked-summary": "Gib an Seitnnama oo, damidst de Endarunga siagst, wo zua oda vo da Seitn valinkt san. Damidst Mitglieda vo ana Kategorie siagst, gib „{{ns:category}}:''Nam vo da Kategorie''“ eih. 'Endarunga vo Seitn af [[Special:Watchlist|dainer Beobochtalistn]] san<strong>fett</strong> viaraghom.",
        "recentchangeslinked-page": "Seitn:",
        "recentchangeslinked-to": "Zoagt Änderrungen auf Seiten, dé do her valinken",
        "upload": "Affelodn",
        "sharedupload-desc-there": "De Datei stãmmt aus $1 und deaf bei ãndera Projekte vawendt wean. Schau auf'd [$2 Dateibeschreibungsseitn] fia weidare Infoamazionen.",
        "sharedupload-desc-here": "De Datei stammt aus $1 und deaf vo andan Projektn vawendt wean. De Bschreibung vo da [$2 Dateibschreibungsseitn] wead unen ozoagt.",
        "uploadnewversion-linktext": "A neiche Versión voh derer Daatei aufféloon",
-       "upload-disallowed-here": "Du kåst dé Daatai néd iwerschraim.",
+       "upload-disallowed-here": "Du konst de Datei ned iwaschreim.",
        "filerevert-defaultcomment": "zruckgsétzd auf dé Versión vom $1, $2 ($3)",
        "filerevert-submit": "Zrucksetzen",
        "filedelete-legend": "Lésch dé Daatei",
        "importlogpage": "Import-Logbuach",
        "tooltip-pt-userpage": "Dei Nutzaseitn",
        "tooltip-pt-mytalk": "Dei Dischkriaseitn",
-       "tooltip-pt-preferences": "{{GENDER:|Daine}} Aihstöungen",
+       "tooltip-pt-preferences": "{{GENDER:|Deine}} Prefarenzen",
        "tooltip-pt-watchlist": "A Listn vo Seitn, wos du beobochtest",
        "tooltip-pt-mycontris": "A Listn vo de oagna Beidreg",
        "tooltip-pt-login": "Warad schee, wensd di omejdn dadast, es is oba ned zwingend nedig.",
        "tooltip-pt-logout": "Auslogga",
-       "tooltip-pt-createaccount": "Mir loon di aih, a Benitzerkóntó åzléeng und di åzmöden. Dés is ower dert néd nédig.",
+       "tooltip-pt-createaccount": "Mia lodn di eih, a Nutzakonto oozleng und di oozmejdn; es is owa ned nedig.",
        "tooltip-ca-talk": "Dischkrian iban Seitninhoid",
        "tooltip-ca-edit": "Du konsd de Seitn beorbatn. Bittschee vawendt in Vorschau-Knopf bevorsd speichasd.",
        "tooltip-ca-addsection": "Neichn Obschnitt ofanga",
        "lastmodifiedatby": "Dé Seiten is zletzt am $1 um $2 voh $3 gänderd worn.",
        "othercontribs": "Basiard auf da Orweid voh $1",
        "creditspage": "Seiteninformaziónen",
-       "simpleantispam-label": "Spamschutziwerpriaffung.\nDoda <strong>nichts</strong> aihtroong!",
+       "simpleantispam-label": "Anti-Spam Check.\nDo <strong>nix</strong> eihdrong!",
        "pageinfo-redirects-name": "Ozoi vo de Weidaloatunga zua dea Seitn",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|Weidaloatung|Weidaloatunga}}; $3 {{PLURAL:$3|Untaseitn|Untaseitn}})",
-       "pageinfo-toolboxlink": "Saiteninfórmaziónen",
+       "pageinfo-toolboxlink": "Seitninformation",
        "pageinfo-redirectsto": "Weidaloatunga af",
        "markedaspatrollederrortext": "Du muasst a Seitenänderrung auswön",
        "deletedrevision": "Oide Version $1 glöscht.",
        "tags": "Gütige Änderrungsmarkiarunen",
        "tag-filter": "[[Special:Tags|Markiarungs]]-Fuita:",
        "tag-filter-submit": "Füter",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Markierung|Markiarungen}}]]: $2)",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Markierung|Markiarunga}}]]: $2)",
        "tags-title": "Markiarungen",
        "tags-intro": "Dé Seiten zoagt olle Markiarungen, dé fyr Beorweidungen vawendt wern, sówia dé Bedeitung voh dé.",
        "tags-tag": "Markiarungsnåm",
        "htmlform-selectorother-other": "Åndre",
        "logentry-move-move_redir": "$1 hod de Seitn $3 af $4 {{GENDER:$2|verschom}} und hod dabei a Weidaloatung ibaschriem",
        "logentry-move-move_redir-noredirect": "$1 hod de Seitn $3 af $4 {{GENDER:$2|verschom}} und dabei a Weidaloatung ibaschriem, ohne a neiche ozlegn",
-       "logentry-newusers-create": "Benutzerkóntó $1 is {{GENDER:$2|erstöd}} worn",
+       "logentry-newusers-create": "Nutzakonto $1 is {{GENDER:$2|eastejt}} worn",
        "searchsuggest-search": "Suach (af Boarisch oda Deutsch)",
        "searchsuggest-containing": "Voitextsuach noch ..."
 }
index d024b5d..de9cec0 100644 (file)
        "converter-manual-rule-error": "Знойдзеная памылка ў ручным правіле моўнага канвэртару",
        "undo-success": "Рэдагаваньне можа быць адмененае. Калі ласка, параўнайце адрозьненьні паміж вэрсіямі, каб упэўніцца, што гэта адпаведныя зьмены, а потым запішыце зьмены для сканчэньня рэдагаваньня.",
        "undo-failure": "Рэдагаваньне ня можа быць скасаванае праз канфлікт паміж папярэднімі рэдагаваньнямі.",
+       "undo-main-slot-only": "Праўка ня можа быць адмененая, бо яна ўключае зьмест па-за асноўным месцам.",
        "undo-norev": "Рэдагаваньне ня можа быць адмененае, таму што яно не існуе альбо было выдаленае.",
        "undo-nochange": "Выглядае, што праўка ўжо была адмененая.",
        "undo-summary": "Скасаваньне праўкі $1 {{GENDER:$2|удзельніка|удзельніцы}} [[Special:Contributions/$2|$2]] ([[User talk:$2|гутаркі]])",
        "rcfilters-activefilters-hide": "Схаваць",
        "rcfilters-activefilters-show": "Паказаць",
        "rcfilters-activefilters-hide-tooltip": "Схаваць поле актыўных фільтраў",
+       "rcfilters-activefilters-show-tooltip": "Паказаць поле актыўных фільтраў",
        "rcfilters-advancedfilters": "Пашыраныя фільтры",
        "rcfilters-limit-title": "Паказаць вынікаў",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|зьмена|зьмены|зьменаў}}, $2",
        "tmp-write-error": "Памылка запісу часовага файлу.",
        "large-file": "Рэкамэндаваны памер файлаў — ня болей за $1;\nпамер гэтага файлу — $2.",
        "largefileserver": "Памер гэтага файлу перавышае максымальна дазволены сэрвэрам.",
-       "emptyfile": "Загружаны файл, здаецца, пусты. Магчыма гэты адбылося з-за памылкі ў назьве файла.\nУдакладніце, ці Вы сапраўды жадаеце загрузіць гэты файл.",
+       "emptyfile": "Загружаны файл, здаецца, пусты. Магчыма гэта адбылося з-за памылкі ў назьве файлу. Калі ласка, удакладніце, ці вы сапраўды жадаеце загрузіць гэты файл.",
        "windows-nonascii-filename": "Гэтая вікі не падтрымлівае назвы файлаў з спэцыяльнымі сымбалямі.",
        "fileexists": "Файл з такой назвай ужо існуе. Калі ласка, праверце <strong>[[:$1]]</strong>, калі Вы ня ўпэўненыя, што жадаеце яго замяніць. [[$1|thumb]]",
        "filepageexists": "Старонка апісаньня для гэтага файла ўжо існуе як <strong>[[:$1]]</strong>, але файла з такой назвай няма.\nАпісаньне якое Вы дадалі ня зьявіцца на старонцы апісаньня.\nКаб яно там зьявілася, Вам трэба рэдагаваць яе самастойна.\n[[$1|thumb]]",
index 503f7ec..7585117 100644 (file)
        "resetpass-temp-password": "অস্থায়ী পাসওয়ার্ড:",
        "resetpass-abort-generic": "পাসওয়ার্ড পরিবর্তন একটি এক্সটেনশনের কারণে স্থগিত করা হয়েছে।",
        "resetpass-expired": "আপনার পাসওয়ার্ডের মেয়াদ উত্তীর্ণ হয়েছে। অ্যাকাউন্টে প্রবেশের জন্য অনুগ্রহ করে নতুন পাসওয়ার্ড নির্ধারণ করুন।",
-       "resetpass-expired-soft": "à¦\86পনার à¦ªà¦¾à¦¸à¦\93য়ারà§\8dডà§\87র à¦®à§\87য়াদ à¦\89তà§\8dতà§\80রà§\8dণ à¦¹à¦¯à¦¼à§\87à¦\9bà§\87 à¦\8fবà¦\82 à¦\86পনাà¦\95à§\87 à¦\8fà¦\95à¦\9fি à¦¨à¦¤à§\81ন à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦¨à¦¿à¦°à§\8dধারণ à¦\95রতà§\87 à¦¹à¦¬à§\87। à¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 à¦\8fà¦\96নà¦\87 à¦\8fà¦\95à¦\9fি à¦¨à¦¤à§\81ন à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦¨à¦¿à¦°à§\8dধারণ à¦\95রà§\81ন à¦\85থবা à¦ªà¦°à§\87 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রতà§\87 à¦\9aাà¦\87লà§\87 \"{{int:authprovider-resetpass-skip-label}}\" à¦¬à¦¾à¦\9fনà§\87 ক্লিক করুন।",
-       "resetpass-validity-soft": "à¦\86পনার à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦¬à§\88ধ à¦¨à¦¯à¦¼: $1\n\nদয়া à¦\95রà§\87 à¦\8fà¦\95à¦\9fি à¦¨à¦¤à§\81ন à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦¨à¦¿à¦°à§\8dধারণ করুন অথবা পরে করার জন্য \"{{int:authprovider-resetpass-skip-label}}\" ক্লিক করুন।",
+       "resetpass-expired-soft": "à¦\86পনার à¦ªà¦¾à¦¸à¦\93য়ারà§\8dডà§\87র à¦®à§\87য়াদ à¦\89তà§\8dতà§\80রà§\8dণ à¦¹à¦¯à¦¼à§\87à¦\9bà§\87 à¦\8fবà¦\82 à¦\86পনাà¦\95à§\87 à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রতà§\87 à¦¹à¦¬à§\87। à¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 à¦\8fà¦\96নà¦\87 à¦\8fà¦\95à¦\9fি à¦¨à¦¤à§\81ন à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦¨à¦¿à¦°à§\8dধারণ à¦\95রà§\81ন à¦\85থবা à¦ªà¦°à§\87 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রতà§\87 à¦\9aাà¦\87লà§\87 \"{{int:authprovider-resetpass-skip-label}}\" ক্লিক করুন।",
+       "resetpass-validity-soft": "à¦\86পনার à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦¬à§\88ধ à¦¨à¦¯à¦¼: $1\n\nদয়া à¦\95রà§\87 à¦\8fà¦\95à¦\9fি à¦¨à¦¤à§\81ন à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦\9aয়ন করুন অথবা পরে করার জন্য \"{{int:authprovider-resetpass-skip-label}}\" ক্লিক করুন।",
        "passwordreset": "পাসওয়ার্ড পুনঃস্থাপন করুন",
        "passwordreset-text-one": "ইমেইলের মাধ্যমে একটি অস্থায়ী পাসওয়ার্ড পেতে এই ফরম পূরণ করুন।",
        "passwordreset-text-many": "{{PLURAL:$1|ইমেইলের মাধ্যমে একটি অস্থায়ী পাসওয়ার্ড পেতে ঘরগুলির একটি পূরণ করুন।}}",
        "expansion-depth-exceeded-category-desc": "পাতাটি সর্বোচ্চ এক্সপশন সীমানা অতিক্রম করেছে।",
        "expansion-depth-exceeded-warning": "পাতাটি এক্সেপশন সীমানা অতিক্রম করেছে",
        "parser-unstrip-loop-warning": "ত্রুটিপূর্ণ লুপ খুঁজে পাওয়া গিয়েছে",
-       "unstrip-depth-warning": "লà§\81প à¦°à¦¿à¦\95ারশন সীমানা অতিক্রম করেছে ($1)",
-       "unstrip-depth-category": "পাতাà¦\97à§\81লি à¦¯à§\87à¦\96ানà§\87 unstrip à¦\97ভà§\80রতার à¦¸à§\80মা à¦\85তিà¦\95à§\8dরম à¦\95রà§\87à¦\9bà§\87ন",
+       "unstrip-depth-warning": "à¦\86নসà§\8dà¦\9fà§\8dরিপ à¦\97ভà§\80রতার সীমানা অতিক্রম করেছে ($1)",
+       "unstrip-depth-category": "পাতাসমà§\82হ à¦¯à§\87à¦\96ানà§\87 à¦\86নসà§\8dà¦\9fà§\8dরিপ à¦\97ভà§\80রতার à¦¸à§\80মা à¦\85তিà¦\95à§\8dরম à¦\95রà§\87à¦\9bà§\87",
        "unstrip-size-warning": "Unstrip আকারের সীমা অতিক্রম করেছে ($1)",
+       "unstrip-size-category": "পাতাসমূহ যেখানে আনস্ট্রিপ আকারের সীমা অতিক্রম করেছে",
        "converter-manual-rule-error": "ম্যানুয়াল ভাষা রূপান্তর নিয়মে ত্রুটি পাওয়া গিয়েছে",
        "undo-success": "সম্পাদনাটি বাতিল করা যাবে। অনুগ্রহ করে নিচের তুলনাটি পরীক্ষা করে দেখুন ও নিশ্চিত করুন যে এটাই আপনি করতে চান, এবং তারপর নিচের সম্পাদনাগুলি সংরক্ষণ করে সম্পাদনাটির বাতিল প্রক্রিয়া সমাপ্ত করুন।",
        "undo-failure": "এ সম্পাদনা মধ্যবর্তী সম্পাদনাসমূহের কারণে পূর্বাবস্থায় ফিরিয়ে নেওয়া যাবে না।",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|বাইট}}",
        "limitreport-expansiondepth": "সর্বোচ্চ গভীরতা বিস্তার",
        "limitreport-expensivefunctioncount": "ব্যয়বহুল পার্সার ফাংশন গণনা",
+       "limitreport-unstrip-depth": "Unstrip পুনরাবৃত্তির গভীরতা",
+       "limitreport-unstrip-size": "পরবর্তী-প্রসারিত unstrip আকার",
        "limitreport-unstrip-size-value": "$1/$2 {{PLURAL:$2|বাইট}}",
        "expandtemplates": "টেমপ্লেট সম্প্রসারণ",
        "expand_templates_intro": "এই বিশেষ পাতাটি কিছু উইকিটেক্সট গ্রহণ করে এবং এর ভেতরের সব টেমপ্লেট বারংবার সম্প্রসারিত করে।\nএছাড়াও এটি\n<code><nowiki>{{</nowiki>#language:...}}</code>-এর মত পার্সার ফাংশন,\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>-এর মত ভ্যারিয়েবল\nমোটকথা দ্বিতীয় বন্ধনীর মধ্যে অবস্থিত সবকিছুকেই সম্প্রসারিত করতে পারে।",
        "special-characters-group-hebrew": "হিব্রু",
        "special-characters-group-bangla": "বাংলা",
        "special-characters-group-tamil": "তামিল",
-       "special-characters-group-telugu": "তà§\87লà§\87গু",
+       "special-characters-group-telugu": "তà§\87লà§\81গু",
        "special-characters-group-sinhala": "সিংহলী",
        "special-characters-group-gujarati": "গুজরাটি",
        "special-characters-group-devanagari": "দেবনাগরী",
index 0e1c773..da44540 100644 (file)
@@ -5,7 +5,8 @@
                        "Uttam Singha, Dec 2006",
                        "아라",
                        "Macofe",
-                       "MtDu"
+                       "MtDu",
+                       "Bodhisattwa"
                ]
        },
        "tog-underline": "লিঙ্কর তলে দুরগ দিক:",
        "special-characters-group-persian": "ফারসি",
        "special-characters-group-hebrew": "হিব্রু",
        "special-characters-group-bangla": "বাংলা",
-       "special-characters-group-telugu": "তà§\87লà§\87গু",
+       "special-characters-group-telugu": "তà§\87লà§\81গু",
        "special-characters-group-sinhala": "শিংহলী",
        "special-characters-group-gujarati": "গুজরাতি",
        "special-characters-group-thai": "থাই",
index d93159b..a552b16 100644 (file)
        "customcssprotected": "N'oc'h ket aotreet da gemmañ ar bajenn CSS-mañ rak kavout a reer enni arventennoù personel un implijer all.",
        "customjsprotected": "N'oc'h ket aotreet da gemmañ ar bajenn JavaScript-mañ rak kavout a reer enni arventennoù personel un implijer all.",
        "mycustomcssprotected": "N'oc'h ket aotreet da gemmañ d'ar bajenn CSS-mañ.",
+       "mycustomjsonprotected": "N'oc'h ket aotreet da gemmañ ar bajenn JSON-mañ.",
        "mycustomjsprotected": "N'oc'h ket aotreet da gemmañ d'ar bajenn JavaScript-mañ.",
        "myprivateinfoprotected": "N'ho peus ket ar gwirioù evit kemmañ ho titouroù personel.",
        "mypreferencesprotected": "N'ho peus ket ar gwirioù evit kemmañ ho Penndibaboù.",
        "nosuchusershort": "N'eus perzhiad ebet gantañ an anv « $1 ». Gwiriit ar reizhskrivadur.",
        "nouserspecified": "Ret eo deoc'h spisaat un anv implijer.",
        "login-userblocked": "Stanket eo an implijer-mañ. N'eo ket aotret da gevreañ.",
-       "wrongpassword": "Ger-tremen kamm. Klaskit en-dro.",
+       "wrongpassword": "Ger-tremen pe anv implijer kamm. Klaskit en-dro.",
        "wrongpasswordempty": "Ger-tremen ebet. Lakait unan mar plij.",
        "passwordtooshort": "{{PLURAL:$1|1 arouezenn|$1 arouezenn}} hir a rank bezañ ar gerioù-tremen da nebeutañ.",
        "passwordtoolong": "N'hall ket ar gerioù-tremen bezañ enno ouzhpenn $1 {{PLURAL:$1|1 arouezenn|$1 arouezenn}}.",
-       "passwordtoopopular": "N'haller ket ober gant gerioù-ter boutin betek re. Grit gant ur ger-tremen raloc'h.",
+       "passwordtoopopular": "N'haller ket ober gant gerioù-kuzh boutin betek re. Grit gant ur ger-tremen diaesoc'h da gavout.",
        "password-name-match": "Rankout a ra ho ker-tremen bezañ disheñvel diouzh hoc'h anv implijer.",
        "password-login-forbidden": "Berzet eo ober gant an anv implijer hag ar ger-tremen-mañ.",
        "mailmypassword": "Adderaouekaat ar ger-tremen",
        "botpasswords-existing": "Gerioù-tremen botoù a zo anezho",
        "botpasswords-createnew": "Krouiñ ur ger-tremen bot nevez",
        "botpasswords-editexisting": "Cheñch ger-tremen ur bot a zo anezhañ c'hoazh",
+       "botpasswords-label-needsreset": "(ar ger kuzh a rank bezañ riñset)",
        "botpasswords-label-appid": "Anv ar robot",
        "botpasswords-label-create": "Krouiñ",
        "botpasswords-label-update": "Hizivaat",
        "postedit-confirmation-created": "Krouet eo bet ar bajenn.",
        "postedit-confirmation-restored": "Adsavet eo bet ar bajenn.",
        "postedit-confirmation-saved": "Enrollet eo bet ho kemmoù.",
+       "postedit-confirmation-published": "Embannet eo bet ho kemm.",
        "edit-already-exists": "N'eus ket bet gallet krouiñ ur bajenn nevez.\nKrouet e oa bet c'hoazh.",
        "defaultmessagetext": "Testenn dre ziouer",
        "content-failed-to-parse": "C'hwitet eo dielfennadur endalc'had $2 evit ar patrom $1: $3",
        "diff-multi-sameuser": "({{PLURAL:$1|Ur reizhadenn da c'hortoz|$1 reizhadenn da c'hortoz}} gant ar memes implijer kuzhet)",
        "diff-multi-otherusers": "({{PLURAL:$1|Ur reizhadenn da c'hortoz|$1 reizhadenn da c'hortoz}} gant {{PLURAL:$2|un implijer all|$2 implijer}} kuzhet.)",
        "diff-multi-manyusers": "({{PLURAL:$1|Ur reizhadenn da c'hortoz|$1 reizhadenn da c'hortoz}} gant muioc'h eget $2 {{PLURAL:$2|implijer|implijer}} kuzhet.)",
+       "diff-paragraph-moved-tonew": "Fiñvet eo bet ar rannbennad. Klikit evit mont davet al lec'hiadur nevez.",
+       "diff-paragraph-moved-toold": "Ar rannbennad azo bet fiñvet. Klikit evit mont davet al lec'hiadur gozh.",
        "difference-missing-revision": "!!{{PLURAL:$2|Un adweladur|$2 adweladurioù}} eus an disheñvelder ($1) {{PLURAL:$2|n'eo ket bet kavet|n'int ket bet adkavet}}.\n\nC'hoarvezout a ra peurliesañ pa vez heuliet ul liamm disheñvel dispredet war-zu ur bajenn zo bet dilamet.\nGallout a reot kavout munudoù e [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} renabl an dilamadurioù].",
        "searchresults": "Disoc'hoù enklask",
        "searchresults-title": "Disoc'hoù klask evit \"$1\"",
        "timezoneregion-indian": "Meurvor Indez",
        "timezoneregion-pacific": "Meurvor Habask",
        "allowemail": "Aotren ar posteloù a-berzh implijerien all",
+       "email-allow-new-users-label": "Aotreañ e-bostoù a-berzh an implijerien nevez",
+       "email-blacklist-label": "Difenn d'an implijerien-se da gas un e-bost din:",
        "prefs-searchoptions": "Klask",
        "prefs-namespaces": "Esaouennoù",
        "default": "dre ziouer",
        "prefs-files": "Restroù",
        "prefs-custom-css": "CSS personelaet",
+       "prefs-custom-json": "JSON hiniennel",
        "prefs-custom-js": "JS personelaet",
-       "prefs-common-config": "JavaScript ha CSS kenrannet evit an holl wiskadurioù :",
+       "prefs-common-config": "CSS/JSON/JavaScript kenrannet evit an holl wiskadurioù :",
        "prefs-reset-intro": "Ober gant ar bajenn-mañ a c'hallit evit adlakaat ho penndibaboù dre ziouer evit al lec'hienn-mañ. Kement-se n'hallo ket bezañ disc'hraet da c'houde.",
        "prefs-emailconfirm-label": "Kadarnaat ar postel :",
        "youremail": "Postel :",
        "right-editcontentmodel": "Kemmañ patrom danvez ur bajenn bennak",
        "right-editinterface": "Kemmañ an etrefas implijer",
        "right-editusercss": "Kemmañ restroù CSS implijerien all",
+       "right-edituserjson": "Kemmañ restroù JSON un implijer all",
        "right-edituserjs": "Kemmañ restroù JS implijerien all",
        "right-editmyusercss": "Aozañ ho restroù implijer CSS deoc'h-c'hwi",
+       "right-editmyuserjson": "Aozañ ho restroù implijer JSON deoc'h-c'hwi",
        "right-editmyuserjs": "Aoazañ ho restroù JavaScript implijer deoc'h-c'hwi",
        "right-viewmywatchlist": "Gwelet ho roll-evezhiañ deoc'h-c'hwi",
        "right-editmywatchlist": "Kemmañ ho roll evezhiañ deoc'h-c'hwi. Notit mat e vo c'hoazh ouzhpennet pajennoù hep ar gwir-mañ gant obererezhioù zo.",
        "grant-createaccount": "Krouiñ kontoù",
        "grant-createeditmovepage": "Krouiñ, aozañ ha dilec'hiañ pajennoù",
        "grant-delete": "Diverkañ ar pajennoù, an adweladennoù hag an enmontoù er marilh",
-       "grant-editinterface": "Kemmañ esaouenn anvioù MediaWiki hag ar CSS/JavaScript implijer",
-       "grant-editmycssjs": "Kemmañ ho CSS/JavaScript implijer",
+       "grant-editinterface": "Kemmañ esaouenn anvioù MediaWiki hag implijer CSS/JSON/JavaScript",
+       "grant-editmycssjs": "Kemmañ ho CSS/JSON/JavaScript implijer",
        "grant-editmyoptions": "Kemmañ ho penndibaboù implijer.",
        "grant-editmywatchlist": "Kemmañ ho roll evezhiañ",
        "grant-editpage": "Kemmañ pajennoù a zo anezho c'hoazh",
        "rcfilters-other-review-tools": "Ostilhoù reizhañ all",
        "rcfilters-group-results-by-page": "Strollañ an disoc'hoù dre bajenn",
        "rcfilters-activefilters": "Siloù oberiant",
+       "rcfilters-activefilters-hide": "Kuzhat",
+       "rcfilters-activefilters-show": "Diskouez",
        "rcfilters-advancedfilters": "Siloù araokaet",
        "rcfilters-limit-title": "Kemmoù da vezañ diskouezet",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|kemm|kemmoù}}, $2",
        "rcfilters-hideminor-conflicts-typeofchange-global": "Tabut zo etre ar sil \"Kemmoù dister\" hag unan pe meur a sil a Seurt kemmoù peogwir n'haller merkañ kemmoù zo evel \"dister\". Kavet e vo ar siloù o tabutal e takad ar siloù gweredekaet, a-us.",
        "rcfilters-hideminor-conflicts-typeofchange": "Seurtoù kemmoù zo n'hallont ket bezañ merket evel \"dister,\", rak se ez eus tabut etre ar sil-mañ ha siloù ar Seurtoù kemmoù da heul : $1",
        "rcfilters-typeofchange-conflicts-hideminor": "Tabut zo etre ar sil-mañ Seurt kemmoù gant sil ar \"c'hemmoù dister\". Kemmoù zo n'hallont ket bezañ merket evel \"dister\".",
-       "rcfilters-filtergroup-lastRevision": "Stumm diwezhañ",
-       "rcfilters-filter-lastrevision-label": "Stumm diwezhañ",
+       "rcfilters-filtergroup-lastRevision": "Stumm a-vremañ pe stumm red",
+       "rcfilters-filter-lastrevision-label": "Stumm a-vremañ pe stumm red",
        "rcfilters-filter-lastrevision-description": "Kemm diwezhañ graet ouzh ur bajenn.",
        "rcfilters-filter-previousrevision-label": "Stummoù koshoc'h",
        "rcfilters-filter-previousrevision-description": "An holl gemmoù nemet ar c'hemm diwezhañ graet ouzh ur bajenn.",
+       "rcfilters-filter-excluded": "Skarzhet",
+       "rcfilters-tag-prefix-namespace-inverted": "<strong>:not</strong> $1",
+       "rcfilters-exclude-button-off": "Skarzhañ ar re dibabet",
+       "rcfilters-exclude-button-on": "Re dibabet skarzhet",
+       "rcfilters-filter-showlinkedfrom-label": "Diskouez ar c'hemmoù war ar bajennoù liammet",
        "rcfilters-filter-showlinkedto-label": "Diskouez ar c'hemmoù war ar bajennoù liammet",
        "rcfilters-target-page-placeholder": "Skrivañ anv ar bajenn (pe rummad)",
        "rcnotefrom": "Setu aze {{PLURAL:$5|ar c'hemm|ar c'hemmoù}} c'hoarvezet abaoe an <strong>$3, $4</strong> (<strong>$1</strong> d'ar muiañ).",
        "uploadstash-refresh": "Freskaat roll ar restroù",
        "uploadstash-thumbnail": "gwelet ar munud",
        "uploadstash-exception": "Dibosupl stokañ an enporzhiadenn er sanailh ($1) : \"$2\".",
+       "uploadstash-bad-path-unknown-type": "Obererezh dianav \"$1\".",
+       "uploadstash-zero-length": "Ment ar restr a zo mann",
        "invalid-chunk-offset": "Direizh eo offset ar rannad",
        "img-auth-accessdenied": "Moned nac'het",
        "img-auth-nopathinfo": "Mankout a ra ar PATH_INFO.\nN'eo ket kefluniet ho servijer evit reiñ an titour-mañ.\nMarteze eo diazezet war CGI ha n'hall ket skorañ img_auth.\nGwelet https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
        "pageswithprop-legend": "Pajennoù gant ur perzh pajenn",
        "pageswithprop-text": "Rollañ a ra ar bajenn-mañ ar pajennoù a ra gant ur perzh pajenn dibar",
        "pageswithprop-prop": "Anv ar perzh :",
+       "pageswithprop-reverse": "Renkañ en urzh enep",
        "pageswithprop-submit": "Mont",
        "pageswithprop-prophidden-long": "talvoud perzh testenn hir kuzhet ($1)",
        "pageswithprop-prophidden-binary": "Talvoud perzh binarel kuzhet ($1)",
        "version-specialpages": "Pajennoù dibar",
        "version-parserhooks": "Astennoù an dielfenner",
        "version-variables": "Argemmennoù",
+       "version-editors": "Embannerien",
        "version-antispam": "Mirout ouzh ar strob",
        "version-other": "Diseurt",
        "version-mediahandlers": "Merer danvez liesvedia",
        "compare-revision-not-exists": "N'eus ket eus an adweladenn spisaet ganeoc'h.",
        "diff-form": "ur '''furmskrid'''",
        "permanentlink": "Peurliamm",
+       "permanentlink-submit": "Lammañ d'ar c'hemm",
        "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)",
        "restrictionsfield-badip": "Chomlec'h IP pe lijorenn direizh : $1",
        "restrictionsfield-label": "Lijorennoù IP aotreet :",
        "restrictionsfield-help": "Ur chomlec'h IP pe un esaouenn CIDR dre linenn. Evit gweredekaat pep tra, ober gant <pre>0.0.0.0/0\n::/0</pre>",
+       "edit-error-short": "Fazi : $1",
+       "edit-error-long": "Fazi:\n\n\n$1",
        "revid": "Adweladenn $1",
        "pageid": "ID ar bajenn $1",
        "rawhtml-notallowed": "N'hall an tikedennoù &lt;html&gt; bezañ implijet nemet er pajennoù normal.",
        "pagedata-title": "Roadennoù ar bajenn",
        "pagedata-bad-title": "Titl direizh : $1.",
        "passwordpolicies-group": "Strollad",
-       "passwordpolicies-policies": "Politikerezh"
+       "passwordpolicies-policies": "Politikerezh",
+       "passwordpolicies-policy-passwordcannotmatchusername": "Ar ger-kuzh ne c'hell ket bezañ an anv implijer"
 }
index 04530fa..5556e7e 100644 (file)
@@ -27,7 +27,8 @@
                        "Сербијана",
                        "Asmen",
                        "Obsuser",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "BadDog"
                ]
        },
        "tog-underline": "Podvlačenje linkova:",
        "allmessagesname": "Naziv",
        "allmessagesdefault": "Predodređeni tekst",
        "allmessagescurrent": "Trenutni tekst",
-       "allmessagestext": "Ovo je spisak svih sistemskih poruka u dostupnih u imenskom prostoru MediaWiki.\nPosjetite [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation lokalizaciju MediaWikija] i [https://translatewiki.net translatewiki.net] ako želite doprinijeti općoj lokalizaciji MediaWikija.",
+       "allmessagestext": "Ovo je spisak sistemskih poruka u dostupnih u imenskom prostoru MediaWiki.\nPosjetite [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation lokalizaciju MediaWikija] i [https://translatewiki.net translatewiki.net] ako želite doprinijeti općoj lokalizaciji MediaWikija.",
        "allmessagesnotsupportedDB": "Ova stranica ne može biti korištena jer je <i>wgUseDatabaseMessages</i> isključen.",
        "allmessages-filter-legend": "Filter",
        "allmessages-filter": "Filter po stanju podešavanja:",
        "tooltip-pt-createaccount": "Ohrabrujemo vas da otvorite nalog i prijavite se, međutim to nije obavezno",
        "tooltip-ca-talk": "Razgovor o sadržaju",
        "tooltip-ca-edit": "Uredi ovu stranicu",
-       "tooltip-ca-addsection": "Započnite novu sekciju.",
+       "tooltip-ca-addsection": "Započni novu sekciju.",
        "tooltip-ca-viewsource": "Ova stranica je zaštićena.\nMožete joj vidjeti izvorni kôd",
        "tooltip-ca-history": "Prethodne verzije ove stranice.",
        "tooltip-ca-protect": "Zaštitite stranicu od budućih izmjena",
index 5dac858..2ea950d 100644 (file)
@@ -59,7 +59,8 @@
                        "Xð",
                        "Abella",
                        "Pierpao",
-                       "Amire80"
+                       "Amire80",
+                       "Leptictidium"
                ]
        },
        "tog-underline": "Subratlla els enllaços:",
        "move-page": "Reanomena $1",
        "move-page-legend": "Reanomena la pàgina",
        "movepagetext": "Amb el formulari següent reanomenareu una pàgina, movent tot el seu historial al nou nom.\nEl títol anterior es convertirà en una pàgina de redirecció al nou títol.\nPodeu actualitzar automàticament les redireccions que apuntin al títol original.\nSi no ho feu, assegureu-vos de verificar les redireccions [[Special:DoubleRedirects|dobles]] o [[Special:BrokenRedirects|trencades]].\nSerà de la vostra responsabilitat verificar que els enllaços segueixin apuntant cap a on se suposa que ho han de fer.\n\nTingueu en compte que la pàgina <strong>no</strong> serà traslladada si ja existeix una pàgina amb el títol nou, tret que sigui una redirecció sense més historial.\nAixò significa que podeu reanomenar de nou una pàgina al seu títol original si cometeu un error, i que no podeu sobreescriure una pàgina existent.\n\n<strong>Nota:</strong>\nAçò pot ser un canvi dràstic i inesperat en una pàgina que sigui popular; \nassegureu-vos d'entendre les conseqüències que comporta abans de seguir endavant.",
-       "movepagetext-noredirectfixer": "Amb el formulari següent podeu reanomenar una pàgina movent tot el seu historial al nom nou.\nEl títol anterior es convertirà en una pàgina de redirecció al nou títol. \nAssegureu-vos de verificar les redireccions [[Special:DoubleRedirects|dobles]] o [[Special:BrokenRedirects|trencades]].\nÉs responsabilitat vostra assegurar que els enllaços continuen apuntant cap a on se suposa que han d'anar. \n\nTingueu en compte que la pàgina <strong>no</strong> serà traslladada si ja existeix una pàgina amb el títol nou, tret que sigui una redirecció i no tingui més historial. \nAixò significa que podeu reanomenar de nou una pàgina al seu títol original si cometeu un error, i que no podeu sobreescriure una pàgina existent.\n \n<strong>Nota:</strong>\nAixò pot ser un canvi dràstic i inesperat per una pàgina popular; \nassegureu-vos que sabeu el que feu abans de continuar.",
+       "movepagetext-noredirectfixer": "El formulari següent permet reanomenar una pàgina movent-ne tot l'historial al nom nou.\nEl títol anterior es convertirà en una pàgina de redirecció al nou títol. \nAssegureu-vos de verificar les redireccions [[Special:DoubleRedirects|dobles]] o [[Special:BrokenRedirects|trencades]].\nÉs responsabilitat vostra que els enllaços continuïn apuntant cap on se suposa que han d'anar. \n\nTingueu en compte que la pàgina <strong>no</strong> serà traslladada si ja existeix una pàgina amb el títol nou, tret que sigui una redirecció i no tingui més historial. \nAixò significa que podeu reanomenar de nou una pàgina al seu títol original si cometeu un error, i que no podeu sobreescriure una pàgina existent.\n \n<strong>Nota:</strong>\nAixò pot ser un canvi dràstic i inesperat per a una pàgina popular; \nassegureu-vos que sabeu el que feu abans de continuar.",
        "movepagetalktext": "Si marqueu aquesta casella, la pàgina de discussió associada també serà traslladada automàticament al nou títol, tret que ja existeixi allà una pàgina de discussió no buida.\n\nEn aquest cas, haureu de traslladar o fusionar la pàgina manualment si ho desitgeu.",
        "moveuserpage-warning": "'''Atenció:''' Esteu a punt de moure una pàgina d'usuari. Tingueu en compte que només la pàgina es desplaçarà i que el compte d'usuari ''no'' canviarà de nom.",
        "movecategorypage-warning": "<strong>Avís:</strong> Esteu a punt de moure una pàgina de categoria. Tingueu en compte que només es mourà aquesta pàgina, i que les pàgines dins la categoria antiga <em>no</em> es recategoritzaran automàticament en la nova.",
index 4997046..7b931c4 100644 (file)
        "converter-manual-rule-error": "Detekována chyba v pravidlech manuální jazykové konverze",
        "undo-success": "Editace může být zrušena. Zkontrolujte a pak potvrďte změny zobrazené níže.",
        "undo-failure": "Editace nemohla být zrušena kvůli konfliktu mezilehlých editací.",
+       "undo-main-slot-only": "Editace nemohla být zrušena, protože zapojuje obsah mimo hlavní sloupec",
        "undo-norev": "Tuto editaci není možné vrátit, protože neexistuje nebo byla smazána.",
        "undo-nochange": "Zdá se, že editace již byla zrušena.",
        "undo-summary": "Zrušena verze $1 od uživatele [[Special:Contributions/$2|$2]] ([[User talk:$2|diskuse]])",
        "rcfilters-filter-reviewstatus-unpatrolled-label": "Neprověřené",
        "rcfilters-filter-reviewstatus-manual-description": "Editace ručně označené jako prověřené.",
        "rcfilters-filter-reviewstatus-manual-label": "Ručně prověřené",
-       "rcfilters-filter-reviewstatus-auto-description": "Editace pokročilých uživatelů, jejichž práce je autoamticky označena jako prověřená.",
+       "rcfilters-filter-reviewstatus-auto-description": "Editace pokročilých uživatelů, jejichž práce je automaticky označena jako prověřená.",
        "rcfilters-filter-reviewstatus-auto-label": "Automaticky prověřené",
        "rcfilters-filtergroup-significance": "Důležitost",
        "rcfilters-filter-minor-label": "Malé editace",
        "revid": "revize $1",
        "pageid": "Stránka s ID $1",
        "rawhtml-notallowed": "Značky &lt;html&gt; nelze používat mimo běžné stránky.",
-       "gotointerwiki": "Opustit {{GENDER:4sg|{{SITENAME}}}}",
+       "gotointerwiki": "Opustit {{GRAMMAR:4sg|{{SITENAME}}}}",
        "gotointerwiki-invalid": "Zadaný název je neplatný.",
        "gotointerwiki-external": "Chystáte se opustit {{GRAMMAR:4sg|{{SITENAME}}}} a navštívit [[$2]], což je jiná webová stránka.\n\n'''[$1 Pokračovat na $1].'''",
        "undelete-cantedit": "Tuto stránku nemůžete obnovit, protože ji nejste oprávněni editovat.",
index e9ecf4d..5b2c82d 100644 (file)
@@ -57,7 +57,7 @@
        "tog-watchlisthideminor": "Cuddio golygiadau bychain rhag y rhestr wylio",
        "tog-watchlisthideliu": "Cuddio golygiadau gan ddefnyddwyr mewngofnodedig rhag y rhestr wylio",
        "tog-watchlistreloadautomatically": "Ail-lwyther y Rhestr wylio yn otomatigpan newider ffiltr (angen JavaScript)",
-       "tog-watchlistunwatchlinks": "Ychwanegwch ddolenau 'gwylio/heb eu gwylio' i'r cofnodion rydych yn eu gwylio (angen JavaScript)",
+       "tog-watchlistunwatchlinks": "Ychwanegwch farciau gweld/heb weld  ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) ar ddalennau rydych yn eu wgylio - gyda newidiadau (angen JavaScript)",
        "tog-watchlisthideanons": "Cuddio golygiadau gan ddefnyddwyr anhysbys rhag y rhestr wylio",
        "tog-watchlisthidepatrolled": "Cuddio golygiadau sydd wedi derbyn ymweliad patrôl rhag y rhestr wylio",
        "tog-watchlisthidecategorization": "Cuddiwch y categoriau",
        "resetpass-submit-loggedin": "Newidier y cyfrinair",
        "resetpass-submit-cancel": "Diddymu",
        "resetpass-wrong-oldpass": "Mae'r cyfrinair dros dro neu gyfredol yn annilys.\nEfallai eich bod wedi newid eich cyfrinair neu wedi gofyn am gyfrinair dros dro newydd.",
-       "resetpass-recycled": "Ailosodwch eich cyfrinair os gwelwch yn dda i rywbeth heblaw eich cyfrinair cyfredol.",
+       "resetpass-recycled": "Ailosodwch eich cyfrinair i rywbeth heblaw eich cyfrinair cyfredol.",
        "resetpass-temp-emailed": "Rydych wedi mewngofnodi gyda chod dros dro. I gwbwlhau hyn, mae'n rhaid i chi ailosod eich cyfrinair yma:",
        "resetpass-temp-password": "Cyfrinair dros dro:",
        "resetpass-abort-generic": "Mae estyniad wedi atal newid y cyfrinair.",
        "resetpass-expired": "Mae oes eich cyfrinair wedi dod i ben. Gosodwch gyfrinair newydd i fewngofnodi.",
-       "resetpass-expired-soft": "Mae eich cyfrinair wedi dod i ben ac mae'n rhaid ei ailosod. Dewisiwch gyfrinair newydd sbon nawr, neu cliciwch \"{{int:authprovider-resetpass-skip-label}}\" a'i ailosod rywdro eto.",
-       "resetpass-validity-soft": "Nid yw eich cyfrinair $1 yn dal ddilys.\n\nDewisiwch gyfrinair newydd nawr, neu gliciwch \"{{int:authprovider-resetpass-skip-label}}\" i'w ailosod yn nes ymlaen.",
+       "resetpass-expired-soft": "Mae eich cyfrinair wedi dod i ben ac mae'n rhaid ei ailosod. Dewisiwch gyfrinair newydd sbon nawr, neu gliciwch \"{{int:authprovider-resetpass-skip-label}}\" i'w ailosod rywdro eto.",
+       "resetpass-validity-soft": "Nid yw eich cyfrinair $1 yn ddilys.\n\nDewisiwch gyfrinair newydd nawr, neu gliciwch \"{{int:authprovider-resetpass-skip-label}}\" i'w ailosod.",
        "passwordreset": "Ailosod cyfrinair",
        "passwordreset-text-one": "Cwblhewch y ffurflen hon er mwyn ailosod eich cyfrinair.",
        "passwordreset-text-many": "{{PLURAL:$1|Llanwch un o'r blychau er mwyn derbyn cyfrinair dros dro mewn ebost.}}",
        "savechanges": "Cadw'r holl newidiadau",
        "publishpage": "Cyhoeddi tudalen",
        "publishchanges": "Cyhoeddi newidiadau",
+       "savearticle-start": "Cadw'r ddalen...",
+       "savechanges-start": "Cadw'r newidiadau...",
+       "publishpage-start": "Cyhoeddi'r ddalen...",
+       "publishchanges-start": "Cyhoeddi'r newidiadau...",
        "preview": "Rhagolwg",
        "showpreview": "Dangos rhagolwg",
        "showdiff": "Dangos newidiadau",
        "subject-preview": "Rhagolwg pwnc:",
        "previewerrortext": "Cafwyd nam tra'n ceisio creu rhagolwg o'r newidiadau.",
        "blockedtitle": "Mae'r defnyddiwr hwn wedi cael ei flocio",
-       "blockedtext": "'''Mae eich enw defnyddiwr neu gyfeiriad IP wedi cael ei flocio.'''\n\n$1 a osododd y bloc.\nY rheswm a roddwyd dros y blocio yw: ''$2''.\n\n*Dechreuodd y bloc am: $8\n*Bydd y bloc yn dod i ben am: $6\n*Bwriadwyd blocio: $7\n\nGallwch gysylltu â $1 neu un arall o'r [[{{MediaWiki:Grouppage-sysop}}|gweinyddwyr]] i drafod y bloc.\nSylwch mai dim ond y rhai sydd wedi gosod cyfeiriad e-bost yn eu [[Special:Preferences|dewisiadau defnyddiwr]], a hwnnw heb ei flocio, sydd yn gallu 'anfon e-bost at ddefnyddiwr' trwy'r wici.\n$3 yw eich cyfeiriad IP presennol. Cyfeirnod y bloc yw #$5.\nPan yn ysgrifennu at weinyddwr, cofiwch gynnwys yr holl fanylion uchod, os gwelwch yn dda.",
-       "autoblockedtext": "Rhoddwyd bloc yn awtomatig ar eich cyfeiriad IP oherwydd iddo gael ei ddefnyddio gan ddefnyddiwr arall, a bod bloc wedi ei roi ar hwnnw gan $1.\nY rheswm a roddwyd dros y bloc oedd:\n\n:''$2''\n\n*Dechreuodd y bloc am: $8\n*Daw'r bloc i ben am: $6\n*Bwriadwyd blocio: $7\n\nGallwch gysylltu â $1 neu un arall o'r [[{{MediaWiki:Grouppage-sysop}}|gweinyddwyr]] i drafod y bloc.\n\nSylwch mai dim ond y rhai sydd wedi gosod cyfeiriad e-bost yn eu [[Special:Preferences|dewisiadau defnyddiwr]], a hwnnw heb ei flocio, sydd yn gallu 'anfon e-bost at ddefnyddiwr' trwy'r wici.\n\nEich cyfeiriad IP presennol yw $3. Cyfeirnod y bloc yw $5. Nodwch y manylion hyn wrth drafod y bloc.",
+       "blockedtext": "Mae eich enw defnyddiwr neu gyfeiriad IP wedi cael ei flocio.</strong>\n\n$1 a osododd y bloc.\nY rheswm a roddwyd dros y blocio yw: <em>$2</em>.\n\n*Dechreuodd y bloc am: $8\n*Bydd y bloc yn dod i ben am: $6\n*Defnyddiwr a flociwyd: $7\n\nGallwch gysylltu â $1 neu un arall o'r [[{{MediaWiki:Grouppage-sysop}}|gweinyddwyr]] i drafod y bloc.\nSylwch mai dim ond y rhai sydd wedi gosod cyfeiriad e-bost yn eu [[Special:Preferences|dewisiadau defnyddiwr]], a hwnnw heb ei flocio, sy'n gallu 'anfon e-bost at ddefnyddiwr' trwy'r wici.\n$3 yw eich cyfeiriad IP presennol. Cyfeirnod y bloc yw #$5.\nPan yn ysgrifennu at weinyddwr, cofiwch gynnwys yr holl fanylion uchod, os gwelwch yn dda.",
+       "autoblockedtext": "Rhoddwyd bloc yn awtomatig ar eich cyfeiriad IP oherwydd iddo gael ei ddefnyddio gan ddefnyddiwr arall, a bod bloc wedi ei roi ar hwnnw gan $1.\nY rheswm a roddwyd dros y bloc oedd:\n\n:<em>$2</em>\n\n*Dechreuodd y bloc am: $8\n*Daw'r bloc i ben am: $6\n*Bwriadwyd blocio: $7\n\nGallwch gysylltu â $1 neu un arall o'r [[{{MediaWiki:Grouppage-sysop}}|gweinyddwyr]] i drafod y bloc.\n\nSylwch mai dim ond y rhai sydd wedi gosod cyfeiriad e-bost yn eu [[Special:Preferences|dewisiadau defnyddiwr]], a hwnnw heb ei flocio, sydd yn gallu 'anfon e-bost at ddefnyddiwr' trwy'r wici.\n\nEich cyfeiriad IP presennol yw $3. Cyfeirnod y bloc yw $5. Nodwch y manylion hyn wrth drafod y bloc.",
+       "systemblockedtext": "Mae eich enw defnyddiwr neu eich cyfeiriad IP wedi'i flocio gan MediaWiki.\nY rheswm yw:\n\n:<em>$2</em>\n\n* Dechrau'r bloc: $8\n* Daw'r bloc i ben: $6\n* Y person a geisiwyd ei flocio: $7\n\nEich cyfeiriad IP presennol yw $3.\nPan yn ysgrifennu at weinyddwr, cofiwch gynnwys yr holl fanylion uchod, os gwelwch yn dda.",
        "blockednoreason": "dim rheswm wedi ei roi",
        "whitelistedittext": "Rhaid $1 i olygu tudalennau.",
        "confirmedittext": "Mae'n rhaid i chi gadarnhau eich cyfeiriad e-bost cyn y gallwch ddechrau golygu tudalennau.\nGosodwch eich cyfeiriad e-bost drwy eich [[Special:Preferences|dewisiadau defnyddiwr]] ac yna'i gadarnhau, os gwelwch yn dda.",
        "userjspreview": "'''Cofiwch -- dim ond rhagolwg o'ch JavaScript yw hwn; nid yw wedi'i gadw eto!'''",
        "sitecsspreview": "'''Cofiwch - dim ond rhagolwg o'ch CSS yw hwn.'''\n'''Nid yw wedi'i gadw eto!'''",
        "sitejspreview": "'''Cofiwch - dim ond rhagolwg o'ch côd JavaScript yw hwn.'''\n'''Nid yw wedi'i rhoi ar gadw eto!'''",
-       "userinvalidconfigtitle": "'''Rhybudd:''' Nid oes gwedd o'r enw \"$1\".\nCofiwch bod y tudalennau .css a .js yn defnyddio llythrennau bach, e.e. {{ns:user}}:Foo/vector.css yn hytrach na {{ns:user}}:Foo/Vector.css.",
+       "userinvalidconfigtitle": "<strong>Rhybudd:</strong> Nid oes gwedd o'r enw \"$1\".\nCofiwch bod y tudalennau .css a .js yn defnyddio llythrennau bach, e.e. {{ns:user}}:Foo/vector.css yn hytrach na {{ns:user}}:Foo/Vector.css.",
        "updated": "(Diweddariad)",
        "note": "'''Dalier sylw:'''",
        "previewnote": "'''Cofiwch taw rhagolwg yw hwn.''' Nid yw eich gwaith wedi ei roi ar gadw eto!",
        "longpageerror": "'''GWALL: Mae'r testun yr ydych wedi ei osod yma yn {{PLURAL:$1|$1 cilobeit}} o hyd, ac yn hwy na'r hyd eithaf o {{PLURAL:$2|$2}} cilobeit.\nNi ellir ei roi ar gadw.'''",
        "readonlywarning": "<strong>Rhybudd: Mae'r gronfa ddata wedi'i chloi am gyfnod er mwyn cynnal a chadw, felly fyddwch chi ddim yn gallu cadw'ch golygiadau ar hyn o bryd.</strong>\nGallwch gopïo'r testun a'i gludo i ffeil destun er mwyn ei gadw tan yn hwyrach.\n\nCynigiodd y gweinyddwr a glodd y gronfa ddata y rheswm hwn dros ei chloi: $1",
        "protectedpagewarning": "'''RHYBUDD: Mae'r dudalen hon wedi'i diogelu. Dim ond gweinyddwyr sydd yn gallu ei golygu.'''\nDyma'r cofnod lòg diweddaraf, er gwybodaeth:",
-       "semiprotectedpagewarning": "'''Sylwer:''' Mae'r dudalen hon wedi ei chloi; dim ond defnyddwyr cofrestredig a allant ei golygu.\nDyma'r cofnod lòg diweddaraf, er gwybodaeth:",
-       "cascadeprotectedwarning": "<strong>Gofal:</strong> Mae'r ddalen hon wedi ei chloi fel mai dim ond defnyddwyr â [[Special:ListGroupRights|hawliau arbennig]] all olygu, gan fod y ddalen yn cael ei dynnu i fewn i'r dalennau canlynol:",
+       "semiprotectedpagewarning": "<strong>Sylwer:</strong> Mae'r ddalen hon wedi ei chloi; dim ond defnyddwyr cofrestredig a allant ei golygu.\nDyma'r cofnod lòg diweddaraf, er gwybodaeth:",
+       "cascadeprotectedwarning": "<strong>Gofal:</strong> Mae'r ddalen hon wedi ei chloi fel mai dim ond defnyddwyr â [[Special:ListGroupRights|hawliau arbennig]] all olygu, gan fod y ddalen yn cael ei dynnu i fewn i'r {{PLURAL:$1|ddalen|dalennau}} canlynol:",
        "titleprotectedwarning": "'''RHYBUDD:  Mae'r dudalen hon wedi ei chloi; dim ond rhai defnyddwyr sydd â'r [[Special:ListGroupRights|gallu]] i'w chreu.'''\nDyma'r cofnod lòg diweddaraf, er gwybodaeth:",
        "templatesused": "Defnyddir y {{PLURAL:$1|nodyn hwn|nodyn hwn|nodiadau hyn|nodiadau hyn|nodiadau hyn|nodiadau hyn}} yn y dudalen hon:",
        "templatesusedpreview": "Defnyddir y {{PLURAL:$1|nodyn hwn|nodyn hwn|nodiadau hyn|nodiadau hyn|nodiadau hyn|nodiadau hyn}} yn y rhagolwg hwn:",
index f7796da..9c8a5d5 100644 (file)
        "prefs-help-email": "Die Angabe einer E-Mail-Adresse ist optional, ermöglicht aber die Zusendung eines Ersatzpasswortes, sofern Sie Ihr Passwort vergessen haben.",
        "prefs-help-email-others": "Mit anderen Benutzern können Sie auch über die Benutzerdiskussionsseiten Kontakt aufnehmen, ohne dass Sie Ihre Identität offenlegen müssen.",
        "prefs-help-prefershttps": "Diese Einstellung wird bei Ihrer nächsten Anmeldung wirksam.",
-       "userrights-groups-help": "Sie können die Gruppenzugehörigkeit dieses Benutzers ändern:\n* Ein markiertes Kästchen bedeutet, dass der Benutzer Mitglied dieser Gruppe ist.\n* Ein nichtmarkiertes Kästchen bedeutet, dass der Benutzer nicht Mitglied dieser Gruppe ist.\n* Ein * bedeutet, dass Sie das Benutzerrecht nach Erteilung nicht wieder zurücknehmen können (oder umgekehrt).",
+       "userrights-groups-help": "Sie können die Gruppenzugehörigkeit {{GENDER:$1|dieses Benutzers|dieser Benutzerin}} ändern:\n* Ein markiertes Kästchen bedeutet, dass {{GENDER:$1|der Benutzer|die Benutzerin}} Mitglied dieser Gruppe ist.\n* Ein nicht markiertes Kästchen bedeutet, dass {{GENDER:$1|der Benutzer|die Benutzerin}} nicht dieser Gruppe angehört.\n* Ein * bedeutet, dass Sie das Benutzerrecht nach Erteilung nicht wieder zurücknehmen können, oder umgekehrt.\n* Ein # bedeutet, dass Sie den Zeitpunkt des Ablaufs dieser Gruppenzugehörigkeit nur nach hinten verlegen können. Sie können ihn nicht vorverlegen.",
        "userrights-no-interwiki": "Sie haben nicht die erforderliche Berechtigung, um Benutzerrechte in anderen Wikis ändern zu können.",
        "userrights-changeable-col": "Gruppenzugehörigkeit, die Sie ändern dürfen",
        "userrights-unchangeable-col": "Gruppenzugehörigkeit, die Sie nicht ändern dürfen",
index 7f72179..8fc95fb 100644 (file)
        "converter-manual-rule-error": "Bei der manuellen Sprachkonvertierungsregel wurde ein Fehler entdeckt.",
        "undo-success": "Die Bearbeitung kann rückgängig gemacht werden.\nBitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und speichere dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.",
        "undo-failure": "Die Änderung konnte nicht rückgängig gemacht werden, da der betroffene Abschnitt zwischenzeitlich verändert wurde.",
+       "undo-main-slot-only": "Die Bearbeitung konnte nicht rückgängig gemacht werden, da sie Inhalte außerhalb der Hauptspalte enthält.",
        "undo-norev": "Die Bearbeitung konnte nicht rückgängig gemacht werden, da sie nicht vorhanden ist oder gelöscht wurde.",
        "undo-nochange": "Anscheinend wurde diese Bearbeitung bereits rückgängig gemacht.",
        "undo-summary": "Änderung $1 von [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussion]]) rückgängig gemacht.",
        "userrights-groupsmember": "Mitglied von:",
        "userrights-groupsmember-auto": "Automatisch Mitglied von:",
        "userrights-groupsmember-type": "$2",
-       "userrights-groups-help": "Du kannst die Gruppenzugehörigkeit {{GENDER:$1|dieses Benutzers|dieser Benutzerin}} ändern:\n* Ein markiertes Kästchen bedeutet, dass {{GENDER:$1|der Benutzer|die Benutzerin}} Mitglied dieser Gruppe ist.\n* Ein nicht markiertes Kästchen bedeutet, dass {{GENDER:$1|der Benutzer|die Benutzerin}} nicht Mitglied dieser Gruppe ist.\n* Ein * bedeutet, dass du das Benutzerrecht nach Erteilung nicht wieder zurücknehmen kannst (oder umgekehrt).\n* Ein # bedeutet, dass du den Zeitpunkt des Ablaufs dieser Gruppenmitgliedschaft nur nach hinten verschieben kannst. Du kannst ihn nicht vorverlegen.",
+       "userrights-groups-help": "Du kannst die Gruppenzugehörigkeit {{GENDER:$1|dieses Benutzers|dieser Benutzerin}} ändern:\n* Ein markiertes Kästchen bedeutet, dass {{GENDER:$1|der Benutzer|die Benutzerin}} Mitglied dieser Gruppe ist.\n* Ein nicht markiertes Kästchen bedeutet, dass {{GENDER:$1|der Benutzer|die Benutzerin}} nicht dieser Gruppe angehört.\n* Ein * bedeutet, dass du das Benutzerrecht nach Erteilung nicht wieder zurücknehmen kannst, oder umgekehrt.\n* Ein # bedeutet, dass du den Zeitpunkt des Ablaufs dieser Gruppenzugehörigkeit nur nach hinten verlegen kannst. Du kannst ihn nicht vorverlegen.",
        "userrights-reason": "Grund:",
        "userrights-no-interwiki": "Du hast nicht die erforderliche Berechtigung, um Benutzerrechte in anderen Wikis ändern zu können.",
        "userrights-nodatabase": "Die Datenbank $1 ist nicht vorhanden oder nicht lokal.",
index 53ab74d..95f0955 100644 (file)
        "expansion-depth-exceeded-category": "Páginas que sobrepasan la profundidad de expansión",
        "expansion-depth-exceeded-category-desc": "Esta página sobrepasa la profundidad de expansión máxima.",
        "expansion-depth-exceeded-warning": "La página ha sobrepasado el límite de profundidad de expansión",
-       "parser-unstrip-loop-warning": "Se ha detectado un bucle en la función \"unstrip\"",
-       "unstrip-depth-warning": "Se ha superado el límite de recursividad de la función \"unstrip\" ($1)",
+       "parser-unstrip-loop-warning": "Se ha detectado un bucle en la función «unstrip»",
+       "unstrip-depth-warning": "Se ha superado el límite de recursividad de la función «unstrip» ($1)",
        "unstrip-depth-category": "Páginas en que se excede el límite de profundidad de la función «unstrip»",
        "unstrip-size-warning": "Se excedió el límite de tamaño de la función «unstrip» ($1)",
        "unstrip-size-category": "Páginas en que se excede el límite de tamaño de la función «unstrip»",
index 8677bc8..d51ca07 100644 (file)
@@ -32,7 +32,8 @@
                        "Mikel Ibaiba",
                        "MarcoAurelio",
                        "Iñaki LL",
-                       "Amaia"
+                       "Amaia",
+                       "Matěj Suchánek"
                ]
        },
        "tog-underline": "Azpimarratu loturak:",
        "dellogpage": "Ezabaketa erregistroa",
        "dellogpagetext": "Behean ageri da azken ezabaketen zerrenda.",
        "deletionlog": "ezabaketa erregistroa",
+       "log-name-create": "Orri sorkuntzaren erregistroa",
+       "log-description-create": "Azpian, sortutako azken orrien zerrenda ageri da.",
        "reverted": "Lehenagoko berrikuspen batera itzuli da",
        "deletecomment": "Arrazoia:",
        "deleteotherreason": "Arrazoi gehigarria:",
        "logentry-move-move": "$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du, birzuzenketarik utzi gabe",
        "logentry-move-move_redir": "$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du, birzuzenketaren gainetik",
-       "logentry-move-move_redir-noredirect": "$1 {{GENDER:wikilariak}} «$3» orria «$4» izenera aldatu du, birbideratze bat gainidatzita, birbideratzerik utzi gabe",
+       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|wikilariak}} «$3» orria «$4» izenera aldatu du, birbideratze bat gainidatzita, birbideratzerik utzi gabe",
        "logentry-patrol-patrol": "$1(e)k $3 orrialdearen $4 berrikuspena patruilatutzat {{GENDER:$2|markatu}} du",
        "logentry-patrol-patrol-auto": "$1(e)k $3 orrialdearen $4 berrikuspena patruilatutzat {{GENDER:$2|markatu}} du",
        "logentry-newusers-newusers": "$1 erabiltzaile kontua {{GENDER:$2|sortu da}}",
        "pagedata-title": "Orri data",
        "pagedata-text": "Orrialde honek orrien interfaze datuak eskaintzen ditu. Eman orrialdearen izenburua URLan, azpiorri sintaxia erabiliz.\n*Edukiaren negoziazioa zure bezeroaren onarpen goiburuan oinarritzen erabiltzen da. Horrek esan nahi du orriaren datuak zure bezeroak nahiago duen formatuan emango direla.",
        "pagedata-not-acceptable": "Bat egiten duen formaturik ez da aurkitu. Onartutako MIME motak: $1",
-       "pagedata-bad-title": "Izenburu baliogabea: $1"
+       "pagedata-bad-title": "Izenburu baliogabea: $1",
+       "unregistered-user-config": "Segurtasun arrazoiengatik JavaScript, CSS eta JSON erabiltzaile azpiorriak ezin dira kargatu erregistratu gabeko erabiltzaileen orrietan.",
+       "passwordpolicies": "Pasahitzen inguruko politika",
+       "passwordpolicies-summary": "Hona wiki honetako erabiltzaile taldeentzako pasahitzen politikaren zerrenda.",
+       "passwordpolicies-group": "Taldea",
+       "passwordpolicies-policies": "Politikak",
+       "passwordpolicies-policy-minimalpasswordlength": "Pasahitzak gutxienez {{PLURAL:$1|kraktere $1eko|$1 karaktereko}} luzera izan behar du",
+       "passwordpolicies-policy-minimumpasswordlengthtologin": "Pasahitzak gutxienez {{PLURAL:$1|kraktere $1eko|$1 karaktereko}} luzera izan behar du saioa hasi ahal izateko",
+       "passwordpolicies-policy-passwordcannotmatchusername": "Pasahitza ezin da erabiltzaile izenaren berdina izan",
+       "passwordpolicies-policy-passwordcannotmatchblacklist": "Pasahitza ezin da zerrenda beltzean zehaztutakoren bat izan"
 }
index 060a61b..24064d6 100644 (file)
        "rcfilters-other-review-tools": "Muut arviointityökalut",
        "rcfilters-group-results-by-page": "Ryhmitä tulokset sivujen mukaan",
        "rcfilters-activefilters": "Aktiiviset suodattimet",
+       "rcfilters-activefilters-hide": "Piilota",
+       "rcfilters-activefilters-show": "Näytä",
        "rcfilters-advancedfilters": "Kehittyneet suodattimet",
        "rcfilters-limit-title": "Näytettävät tulokset",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|muutos|muutosta}}, $2",
        "rcfilters-empty-filter": "Ei aktiivisia suodattimia. Kaikki muutokset näytetään.",
        "rcfilters-filterlist-title": "Suodattimet",
        "rcfilters-filterlist-whatsthis": "Miten nämä toimivat?",
-       "rcfilters-filterlist-feedbacklink": "Kerro mielipiteesi (uusista) suodattimista",
+       "rcfilters-filterlist-feedbacklink": "Kerro mielipiteesi näistä suodatintyökaluista",
        "rcfilters-highlightbutton-title": "Korosta tulokset",
        "rcfilters-highlightmenu-title": "Valitse väri",
        "rcfilters-highlightmenu-help": "Valitse korostusväri tälle ominaisuudelle",
        "dellogpage": "Poistoloki",
        "dellogpagetext": "Alla on loki viimeisimmistä poistoista.",
        "deletionlog": "poistoloki",
+       "logentry-create-create": "$1 {{GENDER:$2|loi}} sivun $3",
        "reverted": "Palautettu aikaisempaan versioon",
        "deletecomment": "Syy:",
        "deleteotherreason": "Muu syy tai tarkennus:",
index d2bcc12..6da8aae 100644 (file)
        "password-login-forbidden": "L’utilisation de ce nom d’utilisateur ou de ce mot de passe a été interdite.",
        "mailmypassword": "Réinitialiser le mot de passe",
        "passwordremindertitle": "Nouveau mot de passe temporaire pour {{SITENAME}}",
-       "passwordremindertext": "Quelqu’un (depuis l’adresse IP $1) a demandé un nouveau mot de\npasse pour {{SITENAME}} ($4). Un mot de passe temporaire pour l’utilisateur\n« $2 » a été créé et est « $3 ». Si cela était votre intention,\nvous devrez vous connecter et choisir un nouveau mot de passe.\nVotre mot de passe temporaire expirera dans $5 jour{{PLURAL:$5||s}}.\n\nSi vous n’êtes pas l’auteur de cette demande, ou si vous vous souvenez à présent de\nvotre mot de passe et ne souhaitez plus en changer, vous pouvez ignorer ce message\net continuer à utiliser votre ancien mot de passe.",
+       "passwordremindertext": "Quelqu’un (depuis l’adresse IP $1) a demandé un nouveau mot de\npasse pour {{SITENAME}} ($4). Un mot de passe temporaire pour l’utilisateur\n« $2 » a été créé et est « $3 ». Si cela était votre intention,\nvous devrez vous connecter et choisir un nouveau mot de passe.\nVotre mot de passe temporaire expirera dans $5 jour{{PLURAL:$5||s}}.\n\nSi vous n’êtes pas l’auteur de cette demande, ou si vous vous avez retrouvé votre mot de passe et ne souhaitez plus en changer, vous pouvez ignorer ce message\net continuer à utiliser votre ancien mot de passe.",
        "noemail": "Aucune adresse de courriel n’a été enregistrée pour l’utilisat{{GENDER:$1|eur|rice}} « $1 ».",
        "noemailcreate": "Vous devez fournir une adresse de courriel valide",
        "passwordsent": "Un nouveau mot de passe a été envoyé à l’adresse de courriel de l’utilisat{{GENDER:$1|eur|rice}} « $1 ».\nVeuillez vous reconnecter après l’avoir reçu.",
        "resetpass-submit-loggedin": "Changer de mot de passe",
        "resetpass-submit-cancel": "Annuler",
        "resetpass-wrong-oldpass": "Mot de passe actuel ou temporaire invalide.\nVous avez peut-être déjà changé votre mot de passe ou demandé un nouveau mot de passe temporaire.",
-       "resetpass-recycled": "Veuillez modifier votre mot de passe à quelque chose d’autre que l’actuel.",
+       "resetpass-recycled": "Veuillez modifier votre mot de passe avec autre chose que l’actuel.",
        "resetpass-temp-emailed": "Vous êtes connecté{{GENDER:||e}} avec un code temporaire fourni par courriel.\nPour terminer la connexion, vous devez fournir un nouveau mot de passe ici :",
        "resetpass-temp-password": "Mot de passe temporaire :",
        "resetpass-abort-generic": "La modification du mot de passe a été annulée par une extension.",
        "converter-manual-rule-error": "Erreur détectée dans la règle manuelle de conversion de langue",
        "undo-success": "Cette modification va être annulée.\nVeuillez vérifier les différences ci-dessous, puis publier l’annulation si c’est bien ce que vous voulez faire.",
        "undo-failure": "Cette modification ne peut pas être défaite : cela entrerait en conflit avec les modifications intermédiaires.",
+       "undo-main-slot-only": "La modification n'a pas pu être annulée car elle implique un contenu en dehors de la tranche principale.",
        "undo-norev": "La modification n’a pas pu être défaite parce qu’elle est inexistante ou qu’elle a été supprimée.",
        "undo-nochange": "Il semblerait que la modification ait déjà été annulée.",
        "undo-summary": "Annulation des modifications $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussion]])",
        "whatlinkshere-title": "Pages qui pointent vers « $1 »",
        "whatlinkshere-page": "Page :",
        "linkshere": "Les pages ci-dessous contiennent un lien vers <strong>$2</strong> :",
-       "nolinkshere": "Aucune page ne contient de lien vers <strong>$2</strong>.",
+       "nolinkshere": "Aucune page ne contient de liens vers <strong>$2</strong>.",
        "nolinkshere-ns": "Aucune page ne contient de liens vers <strong>$2</strong> dans l'espace de noms choisi.",
        "isredirect": "page de redirection",
        "istemplate": "inclusion",
index 7aa831d..3b91696 100644 (file)
        "converter-manual-rule-error": "התגלתה שגיאה בכלל המרת שפה ידני",
        "undo-success": "ניתן לבטל את העריכה.\nאנא {{GENDER:|בדוק|בדקי|בדקו}} את השוואת הגרסאות שלהלן כדי לוודא שזה אכן מה {{GENDER:|שאתה רוצה|שאת רוצה|שאתם רוצים}} לעשות, ולאחר מכן {{GENDER:|שמור|שמרי|שמרו}} את השינויים למטה כדי לסיים את ביטול העריכה.",
        "undo-failure": "לא ניתן היה לבטל את העריכה עקב התנגשות עם עריכות מאוחרות יותר.",
+       "undo-main-slot-only": "לא ניתן היה לבטל את העריכה כיוון שהיא כוללת תוכן מחוץ למיקום הראשי.",
        "undo-norev": "לא ניתן היה לבטל את העריכה כי היא אינה קיימת או כי היא נמחקה.",
        "undo-nochange": "נראה שהעריכה כבר בוטלה.",
        "undo-summary": "ביטול גרסה $1 של [[Special:Contributions/$2|$2]] ([[User talk:$2|שיחה]])",
index c72cad6..55eba4d 100644 (file)
@@ -38,7 +38,8 @@
                        "Сербијана",
                        "Wumbolo",
                        "Fitoschido",
-                       "Hamster"
+                       "Hamster",
+                       "BadDog"
                ]
        },
        "tog-underline": "Podcrtavanje poveznica",
        "allmessagesname": "Ime",
        "allmessagesdefault": "Prvotni tekst",
        "allmessagescurrent": "Trenutačni tekst",
-       "allmessagestext": "Ovo je popis svih sistemskih poruka u imenskom prostoru MediaWiki. Molimo posjetite [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation lokalizaciju MediaWikija] i [https://translatewiki.net translatewiki.net] ako želite doprinijeti lokalizaciji MediaWiki softvera.",
+       "allmessagestext": "Ovo je popis sistemskih poruka u imenskom prostoru MediaWiki. Molimo posjetite [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation lokalizaciju MediaWikija] i [https://translatewiki.net translatewiki.net] ako želite doprinijeti lokalizaciji MediaWiki softvera.",
        "allmessagesnotsupportedDB": "Ova stranica ne može biti korištena jer je isključen parametar '''$wgUseDatabaseMessages'''.",
        "allmessages-filter-legend": "Filtriraj",
        "allmessages-filter": "Filtriraj prema prilagođenom obliku:",
        "gotointerwiki-invalid": "Navedeni naslov nije valjan.",
        "gotointerwiki-external": "Napuštate projekt {{SITENAME}} da biste posjetili zasebno mrežno mjesto [[$2]].\n\n<strong>[$1 Nastavljate na $1]</strong>",
        "pagedata-title": "Podatci o stranici",
-       "pagedata-bad-title": "Naslov nije valjan: $1."
+       "pagedata-bad-title": "Naslov nije valjan: $1.",
+       "passwordpolicies": "Pravila za zaporke",
+       "passwordpolicies-summary": "Ovo je popis pravila za zaporke za suradničke grupe definirane na ovom wikiju.",
+       "passwordpolicies-policy-minimalpasswordlength": "Zaporka mora sadržavati najmanje {{PLURAL:$1|1 znak|$1 znaka|$1 znakova}}",
+       "passwordpolicies-policy-minimumpasswordlengthtologin": "Da biste se prijavili, zaporka mora sadržavati najmanje {{PLURAL:$1|1 znak|$1 znaka|$1 znakova}}",
+       "passwordpolicies-policy-passwordcannotmatchusername": "Zaporka ne može biti ista kao i suradničko ime",
+       "passwordpolicies-policy-passwordcannotmatchblacklist": "Zaporka se ne može podudarati sa zaporkama na crnoj listi",
+       "passwordpolicies-policy-maximalpasswordlength": "Zaporka mora biti kraća od {{PLURAL:$1|1 znaka|$1 znaka|$1 znakova}}"
 }
index 757e76d..99c4a8b 100644 (file)
        "rcfilters-filter-minor-description": "Авторо зIамига да аьнна белгалдаь тоадаьраш.",
        "rcfilters-filter-major-label": "ЛерттIа хувцамаш",
        "rcfilters-filter-major-description": "Авторо зIамига да аьнна белгалдаьдоаца тоадаьраш.",
+       "rcfilters-filtergroup-watchlist": "Зема хьаязяьра чура оагӀонаш",
+       "rcfilters-filter-watchlist-watched-label": "Зема хьаязяьра чу",
+       "rcfilters-filter-watchlist-watched-description": "Хьа зема хьаязяьра чура оагӀонашта даь хувцамаш",
+       "rcfilters-filter-watchlist-watchednew-label": "Керда хувцамаш зема хьаязяьра чу",
+       "rcfilters-filter-watchlist-watchednew-description": "Хьа зема хьаязяьра чура оагӀонаш тӀа даь хьона хӀанзехьа бӀаргадайна доаца хувцамаш",
+       "rcfilters-filter-watchlist-notwatched-label": "Яц зема хьаязяьра чу",
+       "rcfilters-filter-watchlist-notwatched-description": "Ерригаш, Iа зем беш йола оагIонаш юкъерайоахаш.",
        "rcfilters-filtergroup-changetype": "Хувцама тайпа",
        "rcfilters-filter-pageedits-label": "ОагӀона тоадаьраш",
        "rcfilters-filter-pageedits-description": "Чулоацами, дувцара оагIонаши, оагIаташи тоаяр",
        "rcfilters-filter-lastrevision-description": "ОагIон тIа алхха тIехьара хинна хувцам.",
        "rcfilters-filter-previousrevision-label": "ТIехьара йоаца эрш",
        "rcfilters-filter-previousrevision-description": "«ТӀехьара эрш» мел доаца тоадаьраш.",
+       "rcfilters-view-tags": "Фосташ",
        "rcfilters-liveupdates-button": "Ши-шегIа кердадувлийта",
        "rcfilters-liveupdates-button-title-on": "ДIадоаде ши-шегIа кердадалар",
        "rcfilters-liveupdates-button-title-off": "Керда хувцам бешше хьахьокха",
        "nbytes": "$1 {{PLURAL:$1|байт}}",
        "nmembers": "$1 {{PLURAL:$1|объект}}",
        "prefixindex": "ОагӀонаш шоай цӀерий хьалхарча алапах хьахокхар",
-       "prefixindex-namespace": "ОагӀоний цӀераш шоай дешхьалхех хьахьокхар (цIерий моттиг «{{ns:$1}}»)",
+       "prefixindex-namespace": "ОагӀоний цӀераш шоай дешхьалхех хьахьокхар (цӀерий моттиг «{{ns:$1}}»)",
        "prefixindex-submit": "Хьахьокха",
        "prefixindex-strip": "ДIакъайлаяха хьелехача оагIоний дешхьалхенаш (префиксаш)",
        "shortpages": "Лоаца оагIонаш",
        "movepagebtn": "ОагIон цIи хувца",
        "pagemovedsub": "ОагӀонах керда цӀи тиллай",
        "movepage-moved": "'''«$1» яхача оагӀонах «$2» яха цӀи тиллай'''",
+       "movepage-moved-redirect": "Хьакхеллад дIа-юхаластар",
        "articleexists": "Иззамо цӀи йола оагӀув тхьовре йолаш я е оаш тилла цӀи мегаш яц.\nДехар да, кхыйола цӀи харжа.",
        "movetalk": "Дувца оттадара оагӀон а хувца цӀи",
        "movelogpage": "ЦӀераш хувцара тептар",
        "importlogpage": "Импорта тептар",
        "tooltip-pt-userpage": "{{GENDER:|Хьа}} доакъашхочун оагIув",
        "tooltip-pt-mytalk": "{{GENDER:|Хьа}} дувца оттадара оагIув",
+       "tooltip-pt-anontalk": "Шун IP-цIайна лаьрхIа дувцара оагӀув",
        "tooltip-pt-preferences": "{{GENDER:|Хьа оттамаш}}",
        "tooltip-pt-watchlist": "Iа зем бу оагIонаш",
        "tooltip-pt-mycontris": "{{GENDER:|Хьа}} хувцамаш",
-       "tooltip-pt-login": "Укхаза хьай цIи аьле чувала/яла йиша я, амма из параз дац",
+       "tooltip-pt-anoncontribs": "Укх IP-цIайна тIара даь хувцамаш",
+       "tooltip-pt-login": "Укхаза ражача чу а даьнна регистраци е йиш я.",
        "tooltip-pt-logout": "Аравала/яла",
-       "tooltip-pt-createaccount": "Ð¥Ñ\8cа Ð±Ð¾ÐºÑ\8aо Ñ\8f Ð´Ð°Ð³Ð°Ñ\80а Ð¹Ð¾Ð°Ð·Ñ\83в Ñ\85Ñ\8cа Ð° ÐºÑ\85елла Ñ\80ажаÑ\87а Ñ\87Ñ\83вала.",
+       "tooltip-pt-createaccount": "ШÑ\83н Ð±Ð¾ÐºÑ\8aо Ñ\8f Ð´Ð°Ð³Ð°Ñ\80а Ð¹Ð¾Ð°Ð·Ñ\83в Ñ\85Ñ\8cа Ð° ÐºÑ\85елла Ñ\80ажаÑ\87а Ñ\87Ñ\83довла.",
        "tooltip-ca-talk": "ОагIон чулоацамах лаьца дувцар",
        "tooltip-ca-edit": "Нийсъе ер оагIув",
        "tooltip-ca-addsection": "Керда дáкъа хьаде",
index dc88124..7f27e4a 100644 (file)
        "rcfilters-filter-humans-label": "Homala (ne 'bot')",
        "rcfilters-filter-humans-description": "Redakturi kreita da homi.",
        "rcfilters-filtergroup-significance": "Senco",
+       "rcfilters-filtergroup-watchlist": "Pagini surveyata",
+       "rcfilters-filter-watchlist-watched-label": "En mea surveyo-listo",
+       "rcfilters-filter-watchlist-watched-description": "Modifikuri en pagini de vua surveyo-listo.",
+       "rcfilters-filter-watchlist-watchednew-label": "Nova modifikuri en la surveyo-listo",
        "rcfilters-filter-pageedits-label": "Redakti di pagini",
        "rcfilters-filter-pageedits-description": "Redakturi en la kontenajo dil Wiki, diskuti, deskriptado di kategorii...",
        "rcfilters-filter-newpages-label": "Kreado di pagini",
        "rcfilters-filter-newpages-description": "Redakturi qui kreas nova pagini.",
-       "rcfilters-filter-categorization-label": "Modifiki di la kategorio",
+       "rcfilters-filter-categorization-label": "Modifikuri di kategorio",
        "rcfilters-filter-logactions-label": "Agadi enrejistrata",
        "rcfilters-filter-logactions-description": "Agadi dal administreri, kreado di konti, efaco di pagini, sendo di arkivi...",
+       "rcfilters-view-tags": "Redakturi etiketizata",
        "rcfilters-liveupdates-button": "Quika aktualigi",
        "rcnotefrom": "Infre {{PLURAL:$5|esas la chanjo|esas la chanji}} de <strong>$3, $4</strong> (montrata til <strong>$1</strong>).",
        "rclistfrom": "Montrar nova chanji startante de $3 $2",
        "recentchangeslinked-summary": "Skribez la nomo di ula pagino por vidar la modifikuri en pagini ligita ad ol. (Por vidar la membri di ula kategoriio, skribez Kategorio:Nomo di la kategorio). Chanji en la pagini qui esas en [[Special:Watchlist|vua surveryo-listo]] aparos en <strong>dika literi</strong>.",
        "recentchangeslinked-page": "Nomo di la pagino:",
        "recentchangeslinked-to": "Montrez chanji a pagini ligita a la specigita pagino vice",
+       "recentchanges-page-added-to-category": "[[:$1]] adjuntita a kategorio",
        "autochange-username": "Automatala chanjo di MediaWiki",
        "upload": "Adkargar arkivo",
        "uploadbtn": "Adkargar arkivo",
        "duration-years": "$1 {{PLURAL:$1|yaro|yari}}",
        "limitreport-title": "Analizo di dati pri profilo:",
        "limitreport-ppvisitednodes": "Quanto di nodi vizitita dal preprocesoro",
+       "limitreport-ppgeneratednodes": "Quanto di nodi kreita dal preprocesoro",
        "limitreport-postexpandincludesize": "Grandeso dil inkluzo pos expanso",
        "limitreport-expansiondepth": "Maxima profundeso di expanso",
        "limitreport-expensivefunctioncount": "Kontado di funcioni kustoza di analizo sintaxala",
index de57a0d..f85711b 100644 (file)
        "rcfilters-activefilters": "사용 중인 필터",
        "rcfilters-activefilters-hide": "숨기기",
        "rcfilters-activefilters-show": "보이기",
+       "rcfilters-activefilters-hide-tooltip": "사용 중인 필터 영역 숨기기",
+       "rcfilters-activefilters-show-tooltip": "사용 중인 필터 영역 표시",
        "rcfilters-advancedfilters": "고급 필터",
        "rcfilters-limit-title": "표시할 결과 수",
        "rcfilters-limit-and-date-label": "{{PLURAL:$1|변경사항}} $1개, $2",
index 5b2b669..a3c83f4 100644 (file)
@@ -38,7 +38,8 @@
                        "Nemo bis",
                        "Nersip",
                        "Manvydasz",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "Matěj Suchánek"
                ]
        },
        "tog-underline": "Nuorodos pabraukimas:",
        "create": "Sukurti",
        "create-local": "Pridėti vietos aprašymą",
        "delete": "Trinti",
-       "undelete_short": "Atkurti $1 {{PLURAL:$1:redagavimą|redagavimus|redagavimų}}",
+       "undelete_short": "Atkurti $1 {{PLURAL:$1|redagavimą|redagavimus|redagavimų}}",
        "viewdeleted_short": "Peržiūrėti $1 {{PLURAL:$1|ištrintą keitimą|ištrintus keitimus|ištrintų keitimų}}",
        "protect": "Užrakinti",
        "protect_change": "keisti",
index 8532d20..5176eaf 100644 (file)
        "grant-generic": "\"$1\" tiesību paka",
        "grant-group-page-interaction": "Darboties ar lapām",
        "grant-group-file-interaction": "Darboties ar multimediju failiem",
+       "grant-group-watchlist-interaction": "Darboties ar tavu uzraugāmo lapu sarakstu",
        "grant-group-email": "Sūtīt e-pastu",
        "grant-group-high-volume": "Veikt liela apjoma aktivitātes",
        "grant-group-administration": "Veikt administratīvās darbības",
        "grant-group-private-information": "Piekļūt privātiem datiem par tevi",
+       "grant-group-other": "Dažādas darbības",
        "grant-blockusers": "Bloķēt un atbloķēt dalībniekus",
        "grant-createaccount": "Izveidot kontu",
        "grant-createeditmovepage": "Izveidot, labot un pārvietot lapas",
        "grant-uploadfile": "Augšupielādēt jaunus failus",
        "grant-basic": "Pamattiesības",
        "grant-viewdeleted": "Skatīt dzēstos failus un lapas",
+       "grant-viewmywatchlist": "Skatīt tavu uzraugāmo rakstu sarakstu",
        "newuserlogpage": "Jauno dalībnieku reģistrs",
        "newuserlogpagetext": "Jauno lietotājvārdu reģistrs.",
        "rightslog": "Dalībnieku tiesību reģistrs",
index 80e6541..0b923d7 100644 (file)
        "converter-manual-rule-error": "Пронајдов грешка во правилото за рачно претворање на јазик",
        "undo-success": "Уредувањето може да се откаже.\nВе молиме споредете ги промените со претходната верзија за да проверите дали тоа е сигурно она што сакате да го направите, а потоа зачувајте ги промените за да го завршите откажувањето на претходното уредување.",
        "undo-failure": "Уредувањето не можеше да се откаже заради меѓувремени спротиставени уредувања.",
+       "undo-main-slot-only": "Уредувањето не може да се отповика бидејќи има содржина вон главниот жлеб.",
        "undo-norev": "Измената не можеше да биде вратена бидејќи не постои или била избришана.",
        "undo-nochange": "Се чини дека измената (уредувањето) е веќе вратена.",
        "undo-summary": "Откажано уредувањето $1 на уредникот [[Special:Contribs/$2|$2]] ([[User talk:$2|разговор]])",
index 61b733b..b4d51b8 100644 (file)
        "botpasswords-label-grants": "ബാധകമായ അനുമതികൾ:",
        "botpasswords-label-grants-column": "അനുവദിച്ചിരിക്കുന്നവ",
        "resetpass_forbidden": "രഹസ്യവാക്കുകൾ മാറ്റുന്നത് അനുവദിക്കുന്നില്ല",
+       "resetpass_forbidden-reason": "രഹസ്യവാക്കുകൾ മാറ്റാൻ കഴിയില്ല: $1",
        "resetpass-no-info": "ഈ താൾ നേരിട്ടു കാണുന്നതിന് താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കണം.",
        "resetpass-submit-loggedin": "രഹസ്യവാക്ക് മാറ്റുക",
        "resetpass-submit-cancel": "റദ്ദാക്കുക",
        "resetpass-wrong-oldpass": "താത്കാലികമായി ലഭിച്ച അല്ലെങ്കിൽ നിലവിലുള്ളതായി നൽകിയ രഹസ്യവാക്ക് അസാധുവാണ്.\nതാങ്കൾ രഹസ്യവാക്ക് വിജയകരമായി മാറ്റിയിട്ടുണ്ടാകാം അല്ലെങ്കിൽ പുതിയ താത്കാലിക രഹസ്യവാക്ക് അഭ്യർത്ഥിച്ചിട്ടുണ്ടാകാം.",
-       "resetpass-recycled": "താà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´¨à´¿à´²à´µà´¿à´²àµ\81à´³àµ\8dളതിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\81à´\82 à´µàµ\8dയതàµ\8dയസàµ\8dതമായതാà´\95àµ\8dà´\95ുക.",
+       "resetpass-recycled": "താà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´¨à´¿à´²à´µà´¿à´²àµ\81à´³àµ\8dളതിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\81à´\82 à´µàµ\8dയതàµ\8dയസàµ\8dതമായതായി à´®à´¾à´±àµ\8dà´±ുക.",
        "resetpass-temp-emailed": "ഇമെയിൽ വഴി ലഭിച്ച താൽക്കാലിക കോഡ് ഉപയോഗിച്ചാണ് താങ്കൾ പ്രവേശിച്ചിരിക്കുന്നത്.\nപ്രവേശനം പൂർത്തിയാക്കാൻ, ഇവിടെ പുതിയ രഹസ്യവാക്ക് സജ്ജമാക്കുക:",
        "resetpass-temp-password": "താത്കാലിക രഹസ്യവാക്ക്:",
        "resetpass-abort-generic": "രഹസ്യവാക്ക് മാറ്റുന്നത് ഒരു അനുബന്ധം തടഞ്ഞിരിക്കുന്നു.",
        "resetpass-expired": "താങ്കളുടെ രഹസ്യവാക്ക് കാലഹരണപ്പെട്ടിരിക്കുന്നു. പ്രവേശിക്കാനായി പുതിയ രഹസ്യവാക്ക് സജ്ജമാക്കുക.",
-       "resetpass-expired-soft": "താà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´\95ാലഹരണപàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fà´¿à´°à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dനതിനാൽ à´ªàµ\81à´¨à´\83à´¸à´\9càµ\8dà´\9càµ\80à´\95à´°à´¿à´\95àµ\8dà´\95àµ\87à´£àµ\8dà´\9fà´¤àµ\81à´£àµ\8dà´\9fàµ\8d. à´\87à´ªàµ\8dà´ªàµ\8bൾ à´¤à´¨àµ\8dà´¨àµ\86 à´ªàµ\81തിയ à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´¤à´¿à´°à´\9eàµ\8dà´\9eàµ\86à´\9fàµ\81à´\95àµ\8dà´\95àµ\81à´\95 à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´ªà´¿à´¨àµ\8dà´¨àµ\80à´\9fàµ\8d à´ªàµ\81à´¨à´\83à´¸à´\9càµ\8dà´\9càµ\80à´\95à´°à´¿à´\95àµ\8dà´\95ാനായി \"{{int:authprovider-resetpass-skip-label}}\" ഞെക്കുക.",
-       "resetpass-validity-soft": "താà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´¸à´¾à´§àµ\81തയàµ\81à´³àµ\8dളതലàµ\8dà´²: $1\n\nദയവായി à´ªàµ\81തിയàµ\8aà´°àµ\81 à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´\87à´ªàµ\8dà´ªàµ\8bൾ à´¤à´¨àµ\8dà´¨àµ\86 à´¤à´¿à´°à´\9eàµ\8dà´\9eàµ\86à´\9fàµ\81à´\95àµ\8dà´\95àµ\81à´\95 à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´ªà´¿à´¨àµ\8dà´¨àµ\80à´\9fàµ\8d à´ªàµ\81à´¨à´\83à´¸à´\9càµ\8dà´\9càµ\80à´\95à´°à´¿à´\95àµ\8dà´\95ുന്നതിനായി \"{{int:authprovider-resetpass-skip-label}}\" ഞെക്കുക.",
+       "resetpass-expired-soft": "താà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´\95ാലഹരണപàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fà´¿à´°à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dനതിനാൽ à´®à´¾à´±àµ\8dà´±àµ\87à´£àµ\8dà´\9fà´¤àµ\81à´£àµ\8dà´\9fàµ\8d. à´\87à´ªàµ\8dà´ªàµ\8bൾ à´¤à´¨àµ\8dà´¨àµ\86 à´ªàµ\81തിയ à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´¤à´¿à´°à´\9eàµ\8dà´\9eàµ\86à´\9fàµ\81à´\95àµ\8dà´\95àµ\81à´\95 à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´ªà´¿à´¨àµ\8dà´¨àµ\80à´\9fàµ\8d à´®à´¾à´±àµ\8dà´±àµ\81à´µാനായി \"{{int:authprovider-resetpass-skip-label}}\" ഞെക്കുക.",
+       "resetpass-validity-soft": "താà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´¸à´¾à´§àµ\81തയàµ\81à´³àµ\8dളതലàµ\8dà´²: $1\n\nദയവായി à´ªàµ\81തിയàµ\8aà´°àµ\81 à´°à´¹à´¸àµ\8dയവാà´\95àµ\8dà´\95àµ\8d à´\87à´ªàµ\8dà´ªàµ\8bൾ à´¤à´¨àµ\8dà´¨àµ\86 à´¤à´¿à´°à´\9eàµ\8dà´\9eàµ\86à´\9fàµ\81à´\95àµ\8dà´\95àµ\81à´\95 à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´ªà´¿à´¨àµ\8dà´¨àµ\80à´\9fàµ\8d à´®à´¾à´±àµ\8dà´±ുന്നതിനായി \"{{int:authprovider-resetpass-skip-label}}\" ഞെക്കുക.",
        "passwordreset": "രഹസ്യവാക്ക് പുനഃക്രമീകരിക്കുക",
        "passwordreset-text-one": "രഹസ്യവാക്ക് പുനർസജ്ജീകരിക്കാനായി ഈ ഫോം പൂരിപ്പിക്കുക.",
        "passwordreset-text-many": "{{PLURAL:$1|ഇമെയിൽ വഴി താത്കാലിക രഹസ്യവാക്ക് ലഭിക്കാനായി താഴെ നൽകിയിരിക്കുന്നവയിൽ ഏതെങ്കിലുമൊന്ന് പൂരിപ്പിച്ചു നൽകുക.}}",
        "default": "സ്വതേ",
        "prefs-files": "പ്രമാണങ്ങൾ",
        "prefs-custom-css": "സ്വന്തം സി.എസ്.എസ്.",
+       "prefs-custom-json": "ഐച്ഛിക ജെസൺ",
        "prefs-custom-js": "സ്വന്തം ജെ.എസ്.",
        "prefs-common-config": "എല്ലാ ദൃശ്യരൂപങ്ങൾക്കുമായി പങ്ക് വെയ്ക്കപ്പെട്ട സി.എസ്.എസ്./ജെസൺ/ജാവാസ്ക്രിപ്റ്റ്:",
        "prefs-reset-intro": "സൈറ്റിൽ സ്വതേയുണ്ടാവേണ്ട ക്രമീകരണങ്ങൾ പുനഃക്രമീകരിക്കാൻ താങ്കൾക്ക് ഈ താൾ ഉപയോഗിക്കാവുന്നതാണ്.\nഇത് തിരിച്ചു ചെയ്യാൻ സാദ്ധ്യമല്ല.",
        "prefs-dateformat": "ദിന ലേഖന രീതി",
        "prefs-timeoffset": "സമയ വ്യത്യാസം",
        "prefs-advancedediting": "പൊതുവായിട്ടുള്ള ഐച്ഛികങ്ങൾ",
+       "prefs-developertools": "വികസന ഉപകരണങ്ങൾ",
        "prefs-editor": "എഡിറ്റർ",
        "prefs-preview": "എങ്ങനെയുണ്ടെന്ന് കാണൽ",
        "prefs-advancedrc": "വിപുലമായ ഉപാധികൾ",
        "rcfilters-other-review-tools": "മറ്റ് സംശോധന ഉപകരണങ്ങൾ",
        "rcfilters-group-results-by-page": "ഫലങ്ങൾ താളനുസരിച്ച് ഗണങ്ങളാക്കുക",
        "rcfilters-activefilters": "സജീവ അരിപ്പകൾ",
+       "rcfilters-activefilters-hide": "മറയ്ക്കുക",
+       "rcfilters-activefilters-show": "പ്രദർശിപ്പിക്കുക",
        "rcfilters-advancedfilters": "വിപുല അരിപ്പകൾ",
        "rcfilters-limit-title": "പ്രദർശിപ്പിക്കേണ്ട ഫലങ്ങൾ",
        "rcfilters-limit-and-date-label": "{{PLURAL:$1|ഒരു മാറ്റം|$1 മാറ്റങ്ങൾ}}, $2",
        "rcfilters-empty-filter": "സജീവ അരിപ്പകൾ ഇല്ല. എല്ലാ സംഭാവനകളും പ്രദർശിപ്പിക്കുന്നു.",
        "rcfilters-filterlist-title": "അരിപ്പകൾ",
        "rcfilters-filterlist-whatsthis": "ഇതെങ്ങനെയാണ് പ്രവർത്തിക്കുന്നത്?",
-       "rcfilters-filterlist-feedbacklink": "ഈ (പുതിയ) അരിച്ചെടുക്കൽ ഉപകരണങ്ങൾ എങ്ങനെയുണ്ടെന്ന് ഞങ്ങളോട് പറയുക",
+       "rcfilters-filterlist-feedbacklink": "ഈ അരിച്ചെടുക്കൽ ഉപകരണങ്ങൾ എങ്ങനെയുണ്ടെന്ന് ഞങ്ങളോട് പറയുക",
        "rcfilters-highlightbutton-title": "ഫലങ്ങൾ പ്രമുഖമാക്കി കാട്ടുക",
        "rcfilters-highlightmenu-title": "നിറം തിരഞ്ഞെടുക്കുക",
        "rcfilters-highlightmenu-help": "ഈ ഇനം പ്രമുഖമാക്കി കാട്ടാൻ ഒരു നിറം തിരഞ്ഞെടുക്കുക",
        "dellogpage": "മായ്ക്കൽ രേഖ",
        "dellogpagetext": "സമീപകാലത്ത് മായ്ക്കപ്പെട്ട താളുകളുടെ പട്ടിക താഴെ കാണാം.",
        "deletionlog": "മായ്ക്കൽ രേഖ",
+       "log-name-create": "താൾ സൃഷ്ടിയുടെ രേഖ",
+       "log-description-create": "സമീപകാലത്ത് സൃഷ്ടിക്കപ്പെട്ട താളുകളുടെ പട്ടിക താഴെ കാണാം.",
+       "logentry-create-create": "$3 എന്ന താൾ $1 {{GENDER:$2|സൃഷ്ടിച്ചു}}",
        "reverted": "പൂർവ്വസ്ഥിതിയിലേക്കാക്കിയിരിക്കുന്നു.",
        "deletecomment": "കാരണം:",
        "deleteotherreason": "മറ്റ്/കൂടുതൽ കാരണങ്ങൾ:",
        "thumbnail_dest_directory": "ലക്ഷ്യ ഡയറക്ടറി സൃഷ്ടിക്കുവാൻ സാധിച്ചില്ല",
        "thumbnail_image-type": "ചിത്രത്തിന്റെ തരം പിന്തുണക്കപ്പെട്ടതല്ല",
        "thumbnail_gd-library": "അപൂർണ്ണമായ ജി.ഡി. ലൈബ്രറി ക്രമീകരണം: ഫങ്ഷൻ $1 ലഭ്യമല്ല",
+       "thumbnail_image-size-zero": "ചിത്രപ്രമാണത്തിന്റെ വലിപ്പം പൂജ്യമായി കാണുന്നു.",
        "thumbnail_image-missing": "പ്രമാണം ലഭ്യമല്ലെന്നു കാണുന്നു: $1",
        "thumbnail_image-failure-limit": "ഈ ലഘുചിത്രം സൃഷ്ടിക്കാൻ നിരവധി പരാജയപ്പെട്ട ശ്രമങ്ങൾ ($1 അല്ലെങ്കിൽ കൂടുതൽ) നടന്നിട്ടുണ്ട്. ദയവായി പിന്നീട് ശ്രമിക്കുക.",
        "import": "താളുകൾ ഇറക്കുമതി ചെയ്യുക",
        "import-mapping-subpage": "ഇനിക്കൊടുക്കുന്ന താളിന്റെ ഉപതാളുകളായി ഇറക്കുമതി ചെയ്യുക:",
        "import-upload-filename": "പ്രമാണത്തിന്റെ പേര്‌",
        "import-upload-username-prefix": "അന്തർവിക്കി പൂർവ്വാക്ഷരങ്ങൾ:",
+       "import-assign-known-users": "പേരുനൽകിയിട്ടുള്ള ഉപയോക്താക്കൾ പ്രാദേശികമായി ഉണ്ടങ്കിൽ തിരുത്തുകൾ പ്രാദേശിക ഉപയോക്താക്കളുടേതായി നൽകുക",
        "import-comment": "കുറിപ്പ്:",
        "importtext": "ദയവായി സ്രോതസ്സ് വിക്കിയിൽ നിന്ന് [[Special:Export|കയറ്റുമതി ഉപകരണം]] ഉപയോഗിച്ച് പ്രമാണം കയറ്റുമതി ചെയ്യുക.\nഅത് താങ്കളുടെ കമ്പ്യൂട്ടറിൽ ശേഖരിച്ച് ഇവിടെ അപ്‌‌ലോഡ് ചെയ്യുക.",
        "importstart": "താളുകൾ ഇറക്കുമതി ചെയ്യുന്നു...",
        "imported-log-entries": "{{PLURAL:$1|രേഖയിലെ ഒരുൾപ്പെടുത്തൽ|രേഖയിലെ $1 ഉൾപ്പെടുത്തലുകൾ}} ഇറക്കുമതി ചെയ്തു.",
        "importfailed": "ഇറക്കുമതി പരാജയപ്പെട്ടു: <nowiki>$1</nowiki>",
        "importunknownsource": "അപരിചിതമായ ഇറക്കുമതി സ്രോതസ്സ് തരം",
+       "importnoprefix": "അന്തർവിക്കി പൂർവ്വപദം ഒന്നും നൽകിയിട്ടില്ലായിരുന്നു",
        "importcantopen": "ഇറക്കുമതി പ്രമാണം തുറക്കാൻ കഴിഞ്ഞില്ല",
        "importbadinterwiki": "മോശമായ അന്തർവിക്കി കണ്ണി",
        "importsuccess": "ഇറക്കുമതി ചെയ്തുകഴിഞ്ഞു!",
        "import-nonewrevisions": "ഒരു നാൾപ്പതിപ്പും ഇറക്കുമതി ചെയ്തിട്ടില്ല (എല്ലാം നിലവിൽ ഉണ്ട്, അല്ലെങ്കിൽ പിഴവുകളുള്ളതിനാൽ ഒഴിവാക്കി).",
        "xml-error-string": "$2 വരിയിൽ $1, നിര $3 (ബൈറ്റ് $4): $5",
        "import-upload": "എക്സ്.എം.എൽ. ഡേറ്റ അപ്‌‌ലോഡ് ചെയ്യുക",
-       "import-token-mismatch": "à´¸àµ\86ഷൻ à´¡à´¾à´±àµ\8dà´± à´¨à´·àµ\8dà´\9fà´ªàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fതിനാൽ à´¦à´¯à´µà´¾à´¯à´¿ à´µàµ\80à´£àµ\8dà´\9fàµ\81à´\82 à´¶àµ\8dരമിà´\95àµ\8dà´\95àµ\82à´\95",
+       "import-token-mismatch": "à´¸àµ\86ഷൻ à´¡àµ\87à´±àµ\8dà´± à´¨à´·àµ\8dà´\9fà´ªàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fà´¿à´°à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81.\n\nതാà´\99àµ\8dà´\95ൾ à´ªàµ\81റതàµ\8dà´¤àµ\8d à´\95à´\9fà´¨àµ\8dനിà´\9fàµ\8dà´\9fàµ\81à´£àµ\8dà´\9fà´¾à´\95à´¾à´\82. '''à´\87à´ªàµ\8dà´ªàµ\8bà´´àµ\81à´\82 à´ªàµ\8dà´°à´µàµ\87ശിà´\9aàµ\8dà´\9aà´¿à´°à´¿à´\95àµ\8dà´\95àµ\81à´\95യാണàµ\86à´¨àµ\8dà´¨àµ\8d à´\89റപàµ\8dà´ªàµ\8d à´µà´°àµ\81à´¤àµ\8dതിയിà´\9fàµ\8dà´\9fàµ\8d à´µàµ\80à´£àµ\8dà´\9fàµ\81à´\82 à´¶àµ\8dരമിà´\95àµ\8dà´\95àµ\81à´\95'''.\nà´\8eà´¨àµ\8dനിà´\9fàµ\8dà´\9fàµ\81à´\82 à´¶à´°à´¿à´¯à´¾à´µàµ\81à´¨àµ\8dനിലàµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ [[Special:UserLogout|à´²àµ\8bà´\97àµ\97à´\9fàµ\8dà´\9fàµ\8d à´\9aàµ\86à´¯àµ\8dതതിനàµ\81 à´¶àµ\87à´·à´\82]] à´µàµ\80à´£àµ\8dà´\9fàµ\81à´\82 à´²àµ\8bà´\97ിൻ à´\9aàµ\86à´¯àµ\8dà´¤àµ\81à´¨àµ\8bà´\95àµ\8dà´\95àµ\81à´\95, à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´¬àµ\8dà´°àµ\97സർ à´\88 à´¸àµ\88à´±àµ\8dറിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\81à´®àµ\81à´³àµ\8dà´³ à´\95àµ\81à´\95àµ\8dà´\95à´¿à´\95ൾ à´\85à´¨àµ\81വദിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81à´£àµ\8dà´\9fàµ\86à´¨àµ\8dà´¨àµ\8d à´\89റപàµ\8dà´ªàµ\81വരàµ\81à´¤àµ\8dà´¤àµ\81à´\95.",
        "import-invalid-interwiki": "താങ്കൾ നിർദ്ദേശിച്ച വിക്കിയിൽനിന്നും ഇറക്കുമതിചെയ്യാൻ സാധിച്ചില്ല",
        "import-error-edit": "\"$1\" എന്ന താൾ തിരുത്താനുള്ള അനുമതി താങ്കൾക്ക് ഇല്ലാത്തതിനാൽ അത് ഇറക്കുമതി ചെയ്തില്ല.",
        "import-error-create": "\"$1\" എന്ന താൾ സൃഷ്ടിക്കാനുള്ള അനുമതി താങ്കൾക്ക് ഇല്ലാത്തതിനാൽ അത് ഇറക്കുമതി ചെയ്തില്ല.",
        "group-bot.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. ബോട്ടുകൾക്ക് ബാധകമായിരിക്കും */",
        "group-sysop.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. കാര്യനിർവാഹകർക്ക് ബാധകമായിരിക്കും */",
        "group-bureaucrat.css": "/* ഇവിടെ നൽകുന്ന സി.എസ്.എസ്. ബ്യൂറോക്രാറ്റുകൾക്ക് ബാധകമായിരിക്കും */",
+       "common.json": "/* ഇവിടെ നൽകുന്ന ജെസൺ എല്ലാ ഉപയോക്താക്കൾക്കും, എല്ലാ താളുകളിലും പ്രവർത്തിക്കുന്നതായിരിക്കും */",
        "common.js": "/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് എല്ലാ ഉപയോക്താക്കൾക്കും, എല്ലാ താളുകളിലും പ്രവർത്തിക്കുന്നതായിരിക്കും */",
        "group-autoconfirmed.js": "/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് യാന്ത്രികമായി സ്ഥിരീകരിക്കപ്പെട്ട ഉപയോക്താക്കൾക്ക് ബാധകമായിരിക്കും */",
        "group-bot.js": "/* ഇവിടെ നൽകുന്ന ജാവാസ്ക്രിപ്റ്റ് ബോട്ടുകൾക്ക് ബാധകമായിരിക്കും */",
        "newimages-hidepatrolled": "റോന്തുചുറ്റപ്പെട്ട അപ്‌ലോഡുകൾ മറയ്ക്കുക",
        "newimages-mediatype": "മീഡിയ തരം:",
        "noimages": "ഒന്നും കാണാനില്ല.",
+       "gallery-slideshow-toggle": "ലഘുചിത്രങ്ങൾ മാറ്റിക്കാണിക്കുക",
        "ilsubmit": "തിരയൂ",
        "bydate": "ദിനക്രമത്തിൽ",
        "sp-newimages-showfrom": "$2, $1 നു ശേഷം അപ്‌ലോഡ് ചെയ്ത പ്രമാണങ്ങൾ പ്രദർശിപ്പിക്കുക",
diff --git a/languages/i18n/mni.json b/languages/i18n/mni.json
new file mode 100644 (file)
index 0000000..d6033e1
--- /dev/null
@@ -0,0 +1,588 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Awangba Mangang"
+               ]
+       },
+       "tog-underline": "ꯃꯔꯤꯂꯩꯅꯥꯍꯜꯂꯨ",
+       "tog-hideminor": "ꯂꯣꯠꯂꯨ ꯈꯖꯤꯛꯇꯪ ꯁꯣꯏꯕꯗꯒꯤ",
+       "tog-hidepatrolled": "ꯂꯣꯠꯂꯨ ꯈꯖꯤꯛꯇꯪ ꯁꯣꯏꯕꯗꯒꯤ ꯍꯧꯖꯤꯛꯀꯤ ꯑꯍꯣꯡꯕꯗꯒꯤ",
+       "tog-newpageshidepatrolled": "Hide patrolled pages from new page list",
+       "tog-hidecategorization": "ꯂꯥꯃꯥꯏꯒꯤ ꯃꯊꯪ ꯃꯅꯥꯎ ꯅꯥꯏꯕꯥ ꯂꯣꯠꯄꯥ",
+       "tog-extendwatchlist": "ꯌꯦꯡꯅꯕꯥ ꯄꯥꯔꯦꯡꯗꯨ ꯄꯥꯛꯊꯣꯛꯍꯟꯂꯨ ꯑꯍꯣꯡꯕꯥ ꯂꯣꯏꯅꯥ ꯎꯅꯕꯥ, ꯍꯧꯖꯤꯛꯀꯤ ꯈꯋꯥꯏꯗꯒꯤ ꯑꯅꯛꯄ ꯑꯍꯣꯡꯕꯗꯨ ꯅꯠꯇꯕꯥ",
+       "tog-usenewrc": "Group changes by page in recent changes and watchlist",
+       "tog-numberheadings": "ꯃꯁꯥ ꯃꯇꯣꯝꯇꯥ-ꯃꯁꯤꯡ-ꯃꯀꯣꯛꯁꯤꯡ",
+       "tog-showtoolbar": "ꯁꯦꯝꯒꯠꯅꯕ ꯇꯨꯜꯕꯥꯔ ꯎꯨꯠꯂꯨ",
+       "tog-editondblclick": "꯲ ꯔꯛ ꯅꯝꯃꯒꯥ ꯂꯥꯃꯥꯏꯗꯨ ꯁꯦꯝꯒꯠꯂꯨ",
+       "tog-editsectiononrightclick": "section titles ꯗ ꯌꯦꯠꯅ ꯅꯝꯗꯨꯅꯥ ꯁꯦꯝꯒꯠꯂꯛꯅꯕꯒꯤ ꯃꯐꯝꯗꯨ ꯌꯥꯍꯟꯂꯨ",
+       "tog-watchcreations": "ꯍꯥꯞꯆꯤꯟꯂꯨ ꯑꯩꯅꯥ ꯁꯦꯝꯂꯛꯄꯥ ꯂꯥꯃꯥꯏꯗꯨ ꯑꯃꯗꯤ ꯑꯩꯅꯥ ꯊꯥꯒꯠꯂꯛꯄꯥ ꯐꯥꯏꯜ ꯗꯨ ꯑꯩꯒꯤ ꯌꯦꯡꯅꯕꯥ ꯄꯔꯦꯡꯗꯥ",
+       "tog-watchdefault": "ꯍꯥꯞꯆꯤꯟꯂꯨ ꯂꯥꯃꯥꯏ ꯑꯃꯗꯤ ꯑꯩꯅꯥ ꯁꯦꯝꯒꯠꯂꯛꯄꯥ ꯐꯥꯏꯜ ꯗꯨ ꯑꯩꯒꯤ ꯌꯦꯡꯅꯕꯥ ꯄꯔꯦꯡꯗ",
+       "tog-watchmoves": "I move to my watchlist ꯍꯥꯞꯆꯤꯟꯂꯨ ꯂꯥꯃꯥꯏ ꯑꯃꯗꯤ ꯐꯥꯏꯜꯁꯤꯡ",
+       "tog-watchdeletion": "ꯍꯥꯞꯆꯤꯟꯂꯨ ꯂꯥꯃꯥꯏ ꯑꯃꯗꯤ ꯐꯥꯏꯜ ꯑꯩꯅꯥ ꯀꯛꯊꯠꯈꯤꯕꯥ ꯗꯨ ꯑꯩꯒꯤ ꯌꯦꯡꯅꯕꯥ ꯄꯔꯦꯡꯗꯥ",
+       "tog-watchuploads": "ꯍꯥꯞꯆꯤꯟꯂꯨ ꯑꯅꯧꯕꯥ ꯐꯥꯏꯜ ꯑꯩꯅꯥ ꯊꯥꯒꯠꯈꯤꯕꯗꯨ ꯑꯩꯒꯤ ꯌꯦꯡꯅꯕꯥ ꯄꯔꯦꯡꯗꯥ",
+       "tog-watchrollback": "ꯂꯥꯃꯥꯏ ꯍꯥꯞꯆꯤꯟꯂꯨ where I have performed a rollback to ꯑꯩꯒꯤ ꯌꯦꯡꯅꯕꯥ ꯄꯔꯦꯡꯗꯥ",
+       "tog-minordefault": "Mark all edits minor by default",
+       "tog-previewontop": "Show preview before edit box",
+       "tog-previewonfirst": "Show preview on first edit",
+       "tog-enotifwatchlistpages": "Email me when a page or a file on my watchlist is changed",
+       "tog-enotifusertalkpages": "Email me when my user talk page is changed",
+       "tog-enotifminoredits": "Email me also for minor edits of pages and files",
+       "tog-enotifrevealaddr": "Reveal my email address in notification emails",
+       "tog-shownumberswatching": " watching users ꯀꯤ ꯃꯁꯤꯡꯗꯨ ꯎꯨꯠꯂꯨ",
+       "tog-oldsig": "ꯅꯪꯒꯤ gi hanna leijariba khutyek",
+       "tog-fancysig": "Khutyek tu wikitext oina khanlu(Mashamatomta Samnafam yaodaba)",
+       "tog-uselivepreview": "Anouba ꯂꯥꯃꯥꯏ chingthadabida hannagido ootlu",
+       "tog-forceeditsummary": "Ahangba semgatlakpa hapchinlak pa matamda hairak o eingonda",
+       "tog-watchlisthideown": " watchlist tagi eigi semgatlakpa c lotlu",
+       "tog-watchlisthidebots": "watchlist tagi bot semgatlakpa du lotlu",
+       "tog-watchlisthideminor": "Yengnaba Parengdagi eigi apikpa semgatlak pa su lotlu",
+       "tog-watchlisthideliu": " watchlist tagi changsinlu sijinnariba shingna semgatlakliba du lotnaba",
+       "tog-watchlistreloadautomatically": "Reload the watchlist automatically whenever a filter is changed (JavaScript required)",
+       "tog-watchlistunwatchlinks": "Add direct unwatch/watch markers ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) to watched pages with changes (JavaScript required for toggle functionality)",
+       "tog-watchlisthideanons": " watchlist tagi changsinlu sijinnariba shingna semgatlakliba du lotnaba",
+       "tog-watchlisthidepatrolled": "Yengnaba Parengdagi eigi apikpa semgatlak pa su lotlu",
+       "tog-watchlisthidecategorization": "ꯂꯥꯃꯥꯏꯒꯤ ꯃꯊꯪ ꯃꯅꯥꯎ ꯅꯥꯏꯕꯥ ꯂꯣꯠꯄꯥ",
+       "tog-ccmeonemails": "Send me copies of emails I send to other users",
+       "tog-diffonly": "ꯂꯥꯃꯥꯏꯒꯤ ꯑꯌꯥꯎꯕꯥꯗꯨ ꯃꯈꯥꯒꯤ diffs ꯇꯥ ꯎꯨꯠꯀꯅꯨ",
+       "tog-showhiddencats": "ꯑꯔꯣꯠꯄꯥ ꯃꯊꯪ ꯃꯅꯥꯎ ꯅꯥꯏꯕꯗꯨ ꯎꯨꯠꯂꯨ",
+       "tog-norollbackdiff": "Don't show diff after performing a rollback",
+       "tog-useeditwarning": "Warn me when I leave an edit page with unsaved changes",
+       "tog-prefershttps": "Always use a secure connection while logged in",
+       "underline-always": "ꯑꯗꯨꯝ",
+       "underline-never": "ꯁꯪꯇꯧ ꯇꯧꯔꯣꯏꯗꯕꯥ",
+       "underline-default": "Skin or browser default",
+       "editfont-style": "font style ꯒꯤ ꯁꯦꯝꯒꯠꯂꯛꯅꯕꯥ ꯃꯐꯝ:",
+       "editfont-monospace": "Monospaced font",
+       "editfont-sansserif": "Sans-serif font",
+       "editfont-serif": "Serif font",
+       "sunday": "ꯅꯣꯡꯃꯥꯏꯖꯤꯡ",
+       "monday": "ꯅꯤꯡꯊꯧꯀꯥꯕꯥ",
+       "tuesday": "ꯂꯩꯄꯥꯛꯄꯣꯛꯄꯥ",
+       "wednesday": "ꯌꯨꯝꯁꯥꯀꯩꯁꯥ",
+       "thursday": "ꯁꯥꯒꯣꯜꯁꯦꯟ",
+       "friday": "ꯏꯔꯥꯏ",
+       "saturday": "ꯊꯥꯡꯖꯥ",
+       "sun": "ꯅꯨꯃꯤꯠ",
+       "mon": "ꯅꯤꯡ",
+       "tue": "ꯂꯩ",
+       "wed": "ꯌꯨꯝ",
+       "thu": "ꯁꯥꯀꯣꯜ",
+       "fri": "ꯏꯔꯥꯏ",
+       "sat": "ꯊꯥꯡ",
+       "january": "ꯖꯥꯅꯨꯋꯥꯔꯤ",
+       "february": "ꯐꯦꯕꯨꯋꯥꯔꯤ",
+       "march": "ꯃꯥꯔꯆ",
+       "april": "ꯑꯦꯄꯔꯤꯜ",
+       "may_long": "ꯃꯦ",
+       "june": "ꯖꯨꯟ",
+       "july": "ꯖꯨꯂꯥꯏ",
+       "august": "ꯑꯥꯒꯥꯁꯇ",
+       "september": "ꯁꯦꯄꯇꯦꯝꯕꯔ",
+       "october": "ꯑꯣꯛꯇꯣꯕꯔ",
+       "november": "ꯅꯣꯕꯦꯝꯕꯔ",
+       "december": "ꯗꯤꯁꯦꯝꯕꯔ",
+       "january-gen": "ꯖꯥꯅꯨꯋꯥꯔꯤ",
+       "february-gen": "ꯐꯦꯕꯨꯋꯥꯔꯤ",
+       "march-gen": "ꯃꯥꯔꯆ",
+       "april-gen": "ꯑꯦꯄꯔꯤꯜ",
+       "may-gen": "ꯃꯦ",
+       "june-gen": "ꯖꯨꯟ",
+       "july-gen": "ꯖꯨꯂꯥꯏ",
+       "august-gen": "ꯑꯥꯒꯥꯁꯇ",
+       "september-gen": "ꯁꯦꯞꯇꯦꯝꯕꯔ",
+       "october-gen": "ꯑꯣꯛꯇꯣꯕꯔ",
+       "november-gen": "ꯅꯣꯕꯦꯝꯕꯔ",
+       "december-gen": "ꯗꯤꯁꯦꯝꯕꯔ",
+       "jan": "ꯖꯥꯟ",
+       "feb": "ꯐꯦꯕ",
+       "mar": "ꯃꯥꯔ",
+       "apr": "ꯑꯦꯄꯔ",
+       "may": "ꯃꯦ",
+       "jun": "ꯖꯨꯟ",
+       "jul": "ꯖꯨꯜ",
+       "aug": "ꯑꯥꯒ",
+       "sep": "ꯁꯦꯞ",
+       "oct": "ꯑꯣꯇ",
+       "nov": "ꯅꯣꯕ",
+       "dec": "ꯗꯦꯈ",
+       "january-date": "$1 ꯖꯥꯅꯨꯋꯥꯔꯤ",
+       "february-date": "$1 ꯄꯦꯕꯔꯨꯋꯥꯔꯤ",
+       "march-date": "$1ꯃꯥꯔꯆ",
+       "april-date": "$1 ꯑꯦꯄꯔꯤꯜ",
+       "may-date": "$1 ꯃꯦ",
+       "june-date": "$1 ꯖꯨꯟ",
+       "july-date": "$1 ꯖꯨꯂꯥꯏ",
+       "august-date": "$1 ꯑꯒꯨꯁꯇ",
+       "september-date": "$1 ꯁꯦꯞꯇꯦꯝꯕꯔ",
+       "october-date": "$1 ꯑꯣꯛꯇꯣꯕꯔ",
+       "november-date": "$1 ꯅꯥꯕꯦꯝꯕꯔ",
+       "december-date": "$1 ꯗꯤꯁꯦꯝꯕꯔ",
+       "period-am": "ꯑꯦ ꯑꯦꯝ",
+       "period-pm": "ꯄꯤ ꯑꯦꯝ",
+       "pagecategories": "{{PLURAL:$1|Category|Categories}}",
+       "category_header": "$1 ꯗꯥ ꯂꯩꯕꯥ ꯂꯥꯃꯥꯏꯒꯤ ꯃꯆꯥꯈꯥꯏꯕꯥ",
+       "subcategories": "ꯃꯆꯥꯈꯥꯏꯕꯥ ꯃꯆꯥ",
+       "category-media-header": "$1 ꯗꯥ ꯂꯩꯕꯥ ꯃꯦꯗꯤꯌꯥꯒꯤ ꯃꯆꯥꯈꯥꯏꯕꯥ",
+       "category-empty": "<em>This category currently contains no pages or media.</em>",
+       "hidden-categories": "{{PLURAL:$1|Hidden category|Hidden categories}}",
+       "hidden-category-category": "ꯑꯔꯣꯠꯄꯥ ꯃꯊꯪ ꯃꯅꯥꯎ ꯅꯥꯏꯕꯥ",
+       "category-subcat-count": "{{PLURAL:$2|This category has only the following subcategory.|This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}, out of $2 total.}}",
+       "category-subcat-count-limited": "This category has the following {{PLURAL:$1|subcategory|$1 subcategories}}.",
+       "category-article-count": "{{PLURAL:$2|This category contains only the following page.|The following {{PLURAL:$1|page is|$1 pages are}} in this category, out of $2 total.}}",
+       "category-article-count-limited": "The following {{PLURAL:$1|page is|$1 pages are}} in the current category.",
+       "category-file-count": "{{PLURAL:$2|This category contains only the following file.|The following {{PLURAL:$1|file is|$1 files are}} in this category, out of $2 total.}}",
+       "category-file-count-limited": "The following {{PLURAL:$1|file is|$1 files are}} in the current category.",
+       "listingcontinuesabbrev": "ꯆꯠꯊꯕꯥ",
+       "index-category": "Indexed ꯂꯥꯃꯥꯏꯁꯤꯡ",
+       "noindex-category": "Noindexed ꯂꯥꯃꯥꯏꯁꯤꯡ",
+       "broken-file-category": " ꯀꯥꯏꯔꯕꯥ file links ꯒꯥ ꯂꯣꯏꯅꯕꯥ ꯂꯥꯃꯥꯏꯁꯤꯡ",
+       "about": "ꯄꯣꯠꯇꯨꯗꯤ ꯃꯔꯝꯗꯥ",
+       "article": "ꯂꯥꯃꯥꯏꯁꯤꯗꯥ ꯌꯥꯎꯕꯥ ꯄꯨꯝꯅꯃꯛ",
+       "newwindow": "ꯑꯅꯧꯕꯥ ꯊꯣꯡꯅꯥꯎꯗꯥ ꯍꯥꯡꯗꯣꯛ ꯎ",
+       "cancel": "ꯀꯛꯊꯠꯄꯥ",
+       "moredotdotdot": "ꯋꯥꯠꯂꯤ",
+       "morenotlisted": "ꯃꯁꯤꯒꯤ ꯄꯔꯦꯡꯁꯤ ꯃꯄꯨꯡ ꯐꯥꯗꯦ",
+       "mypage": "ꯂꯥꯃꯥꯏ",
+       "mytalk": "ꯉꯥꯡꯐꯝ",
+       "anontalk": "ꯉꯥꯡꯐꯝ",
+       "navigation": "ꯆꯠꯄꯥ",
+       "and": "꯱ꯁꯪ #꯳꯲; ꯑꯃꯁꯨꯪ",
+       "faq": "FAQ",
+       "actions": "Actions",
+       "namespaces": "ꯃꯥꯃꯤꯡꯒꯤ ꯃꯐꯝ",
+       "variants": "ꯈꯦꯇꯅꯕꯥ",
+       "navigation-heading": "Chatnaba Yengfam",
+       "errorpagetitle": "ꯑꯔꯥꯟꯕꯥ",
+       "returnto": "$1 ꯗꯥ ꯍꯟꯂꯨ",
+       "tagline": "ꯃꯔꯝꯗꯥ ꯃꯐꯝꯗꯨꯒꯤ ꯃꯃꯤꯡ",
+       "help": "ꯃꯥꯇꯦꯡ",
+       "search": "ꯊꯤꯕꯥ",
+       "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# Headings that will be ignored by search.\n# Changes to this take effect as soon as the page with the heading is indexed.\n# You can force page reindexing by doing a null edit.\n# The syntax is as follows:\n#   * Everything from a \"#\" character to the end of the line is a comment.\n#   * Every non-blank line is the exact title to ignore, case and everything.\nReferences\nExternal links\nSee also\n #</pre> <!-- leave this line exactly as it is -->",
+       "searchbutton": "ꯇꯤꯕꯥ",
+       "go": "ꯆꯠꯂꯨ",
+       "searcharticle": "Chatlu",
+       "history": "ꯂꯥꯃꯥꯏꯒꯤ ꯄꯨꯋꯥꯔꯤ",
+       "history_short": "ꯄꯨꯋꯥꯔꯤ",
+       "history_small": "ꯄꯨꯋꯥꯔꯤ",
+       "updatedmarker": "updated since my last visit",
+       "printableversion": "ꯅꯝꯊꯣꯛꯄꯥꯌꯥꯕꯥ ꯃꯑꯣꯡ",
+       "permalink": "Matampumbagi Samafam",
+       "print": "ꯅꯝꯕꯥ",
+       "view": "ꯃꯤꯠꯌꯦꯡ",
+       "view-foreign": "$1 ꯗꯥ ꯌꯦꯡꯉꯨ",
+       "edit": "ꯁꯦꯝꯒꯠꯄꯥ",
+       "edit-local": "Edit local description",
+       "create": "ꯁꯥꯕꯥ",
+       "create-local": "ꯁꯨꯋꯥꯏꯒꯤ ꯁꯟꯗꯣꯛꯅꯥ ꯇꯥꯛꯄꯗꯨ ꯍꯥꯞꯆꯤꯟꯂꯨ",
+       "delete": "ꯀꯛꯊꯠꯄꯥ",
+       "undelete_short": "Undelete {{PLURAL:$1|one edit|$1 edits}}",
+       "viewdeleted_short": "View {{PLURAL:$1|one deleted edit|$1 deleted edits}}",
+       "protect": "ꯉꯥꯛꯊꯣꯛꯂꯕꯥ",
+       "protect_change": "ꯑꯍꯣꯡꯕꯥ",
+       "unprotect": "ꯍꯥꯛꯊꯣꯛꯂꯕꯥ ꯗꯨ ꯍꯣꯡꯕꯥ",
+       "newpage": "ꯑꯅꯧꯕꯥ ꯂꯥꯃꯥꯏ",
+       "talkpagelinktext": "ꯉꯥꯡꯐꯝ",
+       "specialpage": "MediaWiki:Bs-wikiadmin-mediawiki-akhannaba-lamai-text/mni",
+       "personaltools": "ꯏꯁꯥꯒꯥ ꯂꯣꯏꯅꯕꯥ ꯈꯨꯠꯂꯥꯏ",
+       "talk": "Khanna Neinaba",
+       "views": "ꯃꯤꯠꯌꯦꯡ",
+       "toolbox": "ꯈꯨꯠꯂꯥꯏ",
+       "tool-link-userrights": "Change {{GENDER:$1|user}} groups",
+       "tool-link-userrights-readonly": "View {{GENDER:$1|user}} groups",
+       "tool-link-emailuser": "Email this {{GENDER:$1|user}}",
+       "imagepage": "File lamai du ootlu",
+       "mediawikipage": "ꯄꯥꯎꯖꯦꯜꯒꯤ ꯂꯥꯃꯥꯏꯗꯨ ꯎꯨꯠꯂꯨ",
+       "templatepage": "ꯇꯦꯝꯄꯂꯦꯠꯀꯤ ꯂꯥꯃꯥꯏꯗꯨ ꯎꯨꯠꯂꯨ",
+       "viewhelppage": "ꯃꯇꯦꯡ ꯄꯥꯡꯅꯕꯒꯤ ꯂꯥꯃꯥꯏꯗꯨ ꯎꯨꯠꯂꯨ",
+       "categorypage": "Macahkhaiba lamai oootlooo",
+       "viewtalkpage": "ꯈꯟꯅꯥ ꯅꯩꯅꯕꯗꯨ ꯎꯨꯠꯂꯨ",
+       "otherlanguages": "ꯑꯇꯣꯞꯄꯥ ꯂꯣꯟꯁꯤꯡꯗꯥ",
+       "redirectedfrom": "(Redirected from $1)",
+       "redirectpagesub": "ꯑꯃꯨꯛ ꯍꯟꯂꯛꯄꯥ ꯂꯥꯃꯥꯏ",
+       "redirectto": "Redirect to:",
+       "lastmodifiedat": "$2$1 ꯃꯁꯤꯒꯤ ꯂꯃꯥꯏꯁꯤ ꯑꯔꯣꯏꯕꯥ ꯁꯦꯝꯒꯠꯈꯤꯕꯥ",
+       "viewcount": "This page has been accessed {{PLURAL:$1|once|$1 times}}?",
+       "protectedpage": "ꯍꯥꯛꯊꯣꯛꯂꯕꯥ ꯂꯥꯃꯥꯏ",
+       "jumpto": "ꯑꯗꯨꯗꯥ  ꯆꯣꯡꯈꯠꯄꯥ",
+       "jumptonavigation": "ꯆꯠꯄꯥ",
+       "jumptosearch": "ꯊꯤꯕꯥ",
+       "view-pool-error": "Sorry, the servers are overloaded at the moment.\nToo many users are trying to view this page.\nPlease wait a while before you try to access this page again.\n\n$1",
+       "generic-pool-error": "Sorry, the servers are overloaded at the moment.\nToo many users are trying to view this resource.\nPlease wait a while before you try to access this resource again.",
+       "pool-timeout": "ꯃꯇꯝ ꯍꯦꯟꯂꯦ ꯂꯣꯟꯅꯕꯥꯒꯤ ꯉꯥꯏꯕꯥ",
+       "pool-queuefull": "ꯄꯨꯜꯒꯤ ꯄꯔꯦꯡ ꯊꯟꯂꯦ",
+       "pool-errorunknown": "ꯁꯛꯈꯪꯗꯕꯥ ꯑꯔꯥꯟꯕꯥ",
+       "pool-servererror": "$1 ꯄꯨꯜ ꯀꯥꯎꯟꯇꯔ ꯇꯧꯅꯕꯥ ꯂꯩꯇꯔꯦ",
+       "poolcounter-usage-error": "$1:ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯥ ꯑꯔꯥꯟꯕꯥ",
+       "aboutsite": "ꯃꯔꯝꯗꯥ ꯃꯐꯝꯗꯨꯒꯤ ꯃꯃꯤꯡ",
+       "aboutpage": "Project:ꯃꯔꯝꯗꯥ",
+       "copyright": "$1 ꯒꯤ ꯃꯇꯦꯡꯅ ꯃꯅꯨꯡꯒꯤ ꯑꯌꯥꯑꯣꯕꯥ ꯐꯪꯒꯅꯤ ꯅꯠꯇꯔꯒꯥ ꯏꯁꯤꯟꯗꯔꯤꯒꯩ",
+       "copyrightpage": "{{ns:project}}: ꯁꯤꯟꯗꯣꯔꯛꯄꯒꯤ ꯍꯛ",
+       "currentevents": "Houjikkee thouram",
+       "currentevents-url": "Project:houjikkee thouram",
+       "disclaimers": "ꯌꯥꯅꯤꯡꯗꯕꯥ ꯐꯣꯡꯗꯣꯛꯄꯁꯤꯡ",
+       "disclaimerpage": "Project:ꯃꯌꯥꯝꯒꯤ ꯑꯣꯏꯅꯥ ꯌꯥꯅꯤꯡꯗꯕꯥ ꯐꯣꯡꯗꯣꯔꯛꯄꯥ",
+       "edithelp": "ꯁꯦꯝꯒꯠꯅꯕꯥ ꯃꯥꯇꯦꯡ",
+       "helppage-top-gethelp": "ꯃꯥꯇꯦꯡ",
+       "mainpage": "ꯃꯔꯨ ꯑꯣꯏꯕꯥ ꯂꯃꯥꯏ",
+       "mainpage-description": "ꯃꯔꯨ ꯑꯣꯏꯕꯥ ꯂꯃꯥꯏ",
+       "policy-url": "Project:ꯈꯣꯡꯊꯥꯡ",
+       "portal": "Meeyam gi portal",
+       "portal-url": "Project:Meeyam gi oiba portal",
+       "privacy": "ꯑꯔꯣꯟꯕꯥ ꯊꯧꯔꯥꯡ",
+       "privacypage": "Project:ꯑꯔꯣꯟꯕꯥ ꯊꯧꯔꯥꯡ",
+       "badaccess": "ꯑꯌꯥꯕꯥꯗꯨ ꯁꯣꯏꯔꯦ",
+       "badaccess-group0": "ꯅꯪ ꯍꯧꯖꯤꯛ ꯑꯦꯛꯁꯟ ꯂꯧꯈꯠꯄꯥ ꯌꯥꯗꯔꯤ ꯅꯪꯅꯥ ꯍꯪꯒꯠꯆꯔꯤꯕꯗꯨꯒꯤ ꯃꯇꯥꯡꯗ",
+       "badaccess-groups": "The action you have requested is limited to users in {{PLURAL:$2|the group|one of the groups}}: $1.",
+       "versionrequired": "ꯃꯦꯗꯤꯌꯥ ꯋꯤꯀꯤꯅ ꯋꯥꯠꯂꯤꯕꯥ $1ꯕꯔꯖꯟ",
+       "versionrequiredtext": "ꯃꯦꯗꯤꯌꯥ ꯋꯤꯀꯤꯅ ꯋꯥꯠꯂꯤꯕꯥ $1ꯕꯔꯖꯟ ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤꯗꯥ ꯁꯤꯖꯤꯟꯅꯕꯥ [[Special:Version|version page]].",
+       "ok": "ꯌꯥꯔꯦ",
+       "retrievedfrom": "$1 ꯃꯐꯝꯗꯨꯗꯒꯤ ꯑꯣꯏꯔꯛꯄꯥ",
+       "youhavenewmessages": "{{PLURAL:$3|You have}} $1 ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|You have}} $1 from {{PLURAL:$3|another user|$3 users}} ($2).",
+       "youhavenewmessagesmanyusers": "ꯅꯪ $1 ꯂꯩꯔꯦ $2 ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯥ ꯃꯌꯥꯝꯗꯒꯤ",
+       "newmessageslinkplural": "{{PLURAL:$1|a new message|999=new messages}}",
+       "newmessagesdifflinkplural": "ꯑꯔꯣꯏꯕꯥ {{PLURAL:$1|change|999=changes}}",
+       "youhavenewmessagesmulti": "$1 ꯅꯪꯒꯤ ꯑꯅꯧꯕꯥ ꯃꯦꯁꯦꯁ",
+       "editsection": "ꯁꯦꯝꯒꯠꯄꯥ",
+       "editold": "ꯁꯦꯝꯒꯠꯄꯥ",
+       "viewsourceold": "ꯍꯧꯔꯛꯐꯝ ꯎꯨꯇꯂꯨ",
+       "editlink": "ꯁꯦꯝꯒꯠꯄꯥ",
+       "viewsourcelink": "ꯍꯧꯔꯛꯐꯝ ꯎꯨꯇꯂꯨ",
+       "editsectionhint": "ꯁꯦꯝꯒꯠꯄꯒꯤ ꯁꯔꯨꯛ: $1",
+       "toc": "ꯑꯌꯥꯎꯕꯥ",
+       "showtoc": "ꯎꯨꯠꯂꯨ",
+       "hidetoc": "ꯂꯣꯇꯄꯥ",
+       "collapsible-collapse": "ꯁꯨꯞꯆꯤꯟꯕꯥ",
+       "collapsible-expand": "ꯄꯥꯛꯊꯣꯛꯄꯥ",
+       "confirmable-confirm": "Are {{GENDER:$1|you}} sure?",
+       "confirmable-yes": "ꯍꯣꯏ",
+       "confirmable-no": "ꯅꯠꯇꯦ",
+       "thisisdeleted": "View or restore $1?",
+       "viewdeleted": "$1 ꯌꯦꯡꯍꯟꯂꯨ?",
+       "restorelink": "{{PLURAL:$1|one deleted edit|$1 deleted edits}}",
+       "feedlinks": "ꯐꯤꯗ",
+       "feed-invalid": "ꯌꯥꯎꯗꯕꯥ subscription feed type.",
+       "feed-unavailable": "Syndication feeds are not available",
+       "site-rss-feed": "$1 RSS feed",
+       "site-atom-feed": "$1 ꯑꯦꯇꯣꯝ ꯇꯥꯛꯄꯥ",
+       "page-rss-feed": "\"$1\" RSS feed",
+       "page-atom-feed": "\"$1\" Atom feed",
+       "red-link-title": "$1 ꯂꯃꯥꯏꯗꯨ ꯂꯩꯇꯔꯦ",
+       "sort-descending": "ꯑꯇꯦꯟꯕꯥ ꯍꯟꯊꯔꯛꯂꯤꯕꯥ",
+       "sort-ascending": "ꯑꯇꯦꯟꯕꯥ ꯍꯦꯟꯒꯠꯂꯛꯂꯤꯕꯥ",
+       "nstab-main": "ꯂꯥꯃꯥꯏ",
+       "nstab-user": "Sijinnariba Lamai",
+       "nstab-media": "ꯃꯦꯗꯤꯌꯥꯒꯤ ꯂꯥꯃꯥꯏ",
+       "nstab-special": "MediaWiki:Bs-wikiadmin-mediawiki-akhannaba-lamai-text/mni",
+       "nstab-project": "ꯄꯥꯡꯊꯣꯛꯀꯗꯕꯥ ꯂꯥꯃꯥꯏ",
+       "nstab-image": "ꯈꯣꯝꯖꯤꯟꯗꯨꯅꯥ ꯍꯥꯞꯐꯝ",
+       "nstab-mediawiki": "ꯄꯥꯎꯖꯦꯜ",
+       "nstab-template": "ꯇꯦꯝꯄꯂꯦꯠ",
+       "nstab-help": "ꯂꯥꯃꯥꯏꯒꯤ ꯃꯇꯦꯂꯧꯐꯝ",
+       "nstab-category": "Machakhaiba",
+       "mainpage-nstab": "ꯃꯔꯨ ꯑꯣꯏꯕꯥ ꯂꯃꯥꯏ",
+       "nosuchaction": "ꯃꯁꯤꯒꯨꯕꯥ ꯃꯥꯑꯣꯡꯁꯤ ꯅꯠꯇꯦ",
+       "nosuchactiontext": "The action specified by the URL is invalid.\nYou might have mistyped the URL, or followed an incorrect link.\nThis might also indicate a bug in the software used by {{SITENAME}}.",
+       "nosuchspecialpage": "ꯃꯁꯤꯒꯥ ꯃꯥꯟꯅꯕꯥ ꯑꯈꯟꯅꯕꯥ ꯂꯥꯃꯥꯏ ꯂꯩꯇꯦ",
+       "nospecialpagetext": "<strong>You have requested an invalid special page.</strong>\n\nA list of valid special pages can be found at [[Special:SpecialPages|{{int:specialpages}}]].",
+       "error": "ꯑꯔꯥꯟꯕꯥ",
+       "databaseerror": "ꯗꯇꯥꯕꯦꯁꯀꯤ ꯑꯁꯣꯏꯕꯥ",
+       "databaseerror-text": "A database query error has occurred.\nThis may indicate a bug in the software.",
+       "databaseerror-textcl": "ꯗꯇꯥꯕꯦꯁꯀꯤ ꯅꯪꯉꯥꯏꯇꯕꯥ ꯑꯁꯣꯏꯕꯁꯤ ꯍꯧꯖꯤꯛ ꯃꯌꯣꯛꯅꯔꯤ",
+       "databaseerror-query": "Query: $1",
+       "databaseerror-function": "$1:ꯊꯧꯔꯝ",
+       "databaseerror-error": "ꯑꯁꯣꯏꯕꯥ: $1",
+       "transaction-duration-limit-exceeded": "To avoid creating high replication lag, this transaction was aborted because the write duration ($1) exceeded the $2 second limit.\nIf you are changing many items at once, try doing multiple smaller operations instead.",
+       "laggedslavemode": "<strong>Warning:</strong> Page may not contain recent updates.",
+       "readonly": "ꯗꯇꯥꯕꯦꯁ ꯊꯤꯡꯖꯤꯟꯂꯦ",
+       "enterlockreason": "ꯊꯤꯡꯖꯤꯟꯕꯒꯤ ꯃꯔꯝꯗꯨ ꯍꯥꯞꯄꯨ, ꯑꯦꯁꯇꯤꯃꯦꯠꯀꯥ ꯂꯣꯏꯅꯅ ꯍꯣꯔꯦꯟ ꯊꯤꯡꯖꯤꯟꯂꯤꯕꯗꯨ ꯊꯥꯗꯣꯧꯂꯕꯥ ꯃꯇꯝꯐꯥꯑꯣ",
+       "readonlytext": "The database is currently locked to new entries and other modifications, probably for routine database maintenance, after which it will be back to normal.\n\nThe system administrator who locked it offered this explanation: $1",
+       "missing-article": "The database did not find the text of a page that it should have found, named \"$1\" $2.\n\nThis is usually caused by following an outdated diff or history link to a page that has been deleted.\n\nIf this is not the case, you may have found a bug in the software.\nPlease report this to an [[Special:ListUsers/sysop|administrator]], making note of the URL.",
+       "missingarticle-rev": "(revision#: $1)",
+       "missingarticle-diff": "(Diff: $1, $2)",
+       "readonly_lag": "ꯗꯇꯥꯕꯦꯁ ꯁꯤ ꯃꯁꯥ ꯃꯇꯣꯝꯇꯥ ꯊꯤꯡꯖꯤꯟꯂꯦ while the slave database servers catch up to the master",
+       "nonwrite-api-promise-error": "The 'Promise-Non-Write-API-Action' HTTP header was sent but the request was to an API write module.",
+       "internalerror": "ꯃꯅꯨꯡꯒꯤ ꯑꯁꯣꯏꯕꯥ",
+       "internalerror_info": "ꯃꯅꯪꯨꯒꯤ ꯑꯁꯣꯏꯕꯥ: $1",
+       "internalerror-fatal-exception": "Fatal exception of type \"$1\"",
+       "filecopyerror": "ꯐꯥꯏꯜꯁꯤ ꯁꯤꯟꯗꯣꯛꯄꯥ ꯌꯥꯗꯔꯦ $1 ꯗꯒꯤ $2 ꯗꯥ",
+       "filerenameerror": "ꯐꯥꯏꯜꯁꯤ ꯑꯃꯨꯛ ꯅꯧꯅꯥ ꯃꯃꯤꯡ ꯊꯣꯟꯕꯥ ꯌꯥꯗꯔꯦ $1 ꯗꯒꯤ $2",
+       "filedeleteerror": "$1 ꯐꯥꯏꯜ ꯀꯛꯊꯠꯄꯥ ꯌꯥꯗꯔꯦ",
+       "directorycreateerror": "$1 ꯗꯥꯏꯔꯦꯛꯇꯔꯤ ꯁꯦꯝꯕꯥ ꯌꯥꯗꯔꯦ",
+       "directoryreadonlyerror": "$1 ꯗꯥꯏꯔꯦꯛꯇꯔꯤ ꯁꯤ ꯄꯥꯅꯕꯥ ꯈꯛꯇꯅꯤ",
+       "directorynotreadableerror": "$1 ꯗꯥꯏꯔꯦꯛꯇꯔꯤ ꯁꯤ ꯄꯥꯕꯥ ꯌꯥꯗꯦ",
+       "filenotfound": "$1 ꯐꯥꯏꯜ ꯊꯤꯕꯥ ꯐꯪꯗꯔꯦ",
+       "unexpected": "ꯊꯥꯖꯔꯨꯗꯕꯥ ꯃꯁꯤꯡ $1=$2",
+       "formerror": "ꯑꯔꯥꯟꯕꯥ: ꯐꯣꯝ ꯊꯥꯖꯤꯟꯕꯥ ꯌꯥꯗꯦ",
+       "badarticleerror": "ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤꯗꯥ ꯃꯁꯤꯒꯨꯝꯕꯥ ꯃꯥꯑꯣꯡꯁꯤ ꯄꯥꯡꯊꯣꯛꯄꯥ ꯌꯥꯗꯦ",
+       "cannotdelete": "ꯂꯥꯃꯥꯏ ꯅꯠꯇꯔꯒꯥ $1 ꯐꯥꯏꯜ ꯁꯤ ꯀꯛꯊꯠꯄꯥ ꯌꯥꯗꯦ. \nꯃꯁꯤ ꯍꯥꯟꯅꯅ ꯃꯤꯑꯣꯏ ꯈꯔꯅꯥ ꯀꯛꯊꯠꯈꯔꯦ",
+       "cannotdelete-title": "$1 ꯂꯥꯃꯥꯏꯁꯤ ꯀꯛꯊꯠꯄꯥ ꯌꯥꯗꯦ",
+       "delete-hook-aborted": "ꯀꯛꯊꯠꯄꯥ aborted by hook.\nIt gave no ꯁꯟꯇꯣꯛꯅꯥ ꯇꯥꯛꯄꯥ",
+       "no-null-revision": "$1ꯂꯥꯃꯥꯏꯒꯤ ꯑꯅꯧꯕꯥ ꯀꯔꯤꯝꯇꯥ ꯌꯥꯑꯣꯗꯕꯥ ꯑꯃꯨꯛꯍꯟꯕꯥ ꯃꯤꯠꯌꯦꯡꯗꯥ ꯁꯦꯝꯕꯥ ꯌꯥꯗꯦ",
+       "badtitle": "ꯑꯐꯠꯇꯕꯥ ꯃꯃꯤꯡ",
+       "badtitletext": "The requested page title was invalid, empty, or an incorrectly linked inter-language or inter-wiki title.\nIt may contain one or more characters that cannot be used in titles.",
+       "title-invalid-empty": "The requested page title is empty or contains only the name of a namespace.",
+       "title-invalid-utf8": "The requested page title contains an invalid UTF-8 sequence.",
+       "viewsource": "ꯍꯧꯔꯛꯐꯝ ꯎꯨꯇꯂꯨ",
+       "userlogin-yourname": "Username",
+       "userlogin-yourname-ph": "Enter your username",
+       "userlogin-yourpassword": "ꯆꯪꯁꯤꯟꯅꯕꯥ ꯋꯥꯍꯩ",
+       "createacct-yourpassword-ph": "ꯄꯥꯁꯋ꯭ꯇ ꯏꯔꯛ ꯎ",
+       "createacct-yourpasswordagain": "Confirm password",
+       "createacct-yourpasswordagain-ph": "ꯑꯃꯨꯛ ꯍꯟꯅꯥ ꯄꯥꯁꯋ꯭ꯇ ꯏꯌꯨ",
+       "login": "Chang Sinba",
+       "createaccount": "ꯑꯩꯒꯤ ꯑꯣꯏꯕꯥ ꯑꯃꯥ ꯁꯦꯝꯕꯥ",
+       "createacct-emailoptional": "Email address (ꯑꯇꯣꯞꯄꯥ ꯱)",
+       "createacct-email-ph": "Enter your email address",
+       "createacct-submit": "ꯅꯪꯒꯤ ꯑꯦꯀꯥꯎꯟꯇ ꯁꯦꯝꯕꯥ",
+       "createacct-benefit-heading": "{{SITENAME}} ꯁꯤ ꯅꯪꯒꯥ ꯃꯥꯟꯅꯕꯥ ꯃꯤꯑꯣꯏꯁꯤꯡꯅꯥ ꯁꯦꯝꯕꯅꯤ",
+       "createacct-benefit-body1": "{{PLURAL:$1|edit|edits}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|page|pages}}",
+       "createacct-benefit-body3": "ꯍꯧꯖꯤꯛꯀꯤ {{PLURAL:$1|contributor|contributors}}",
+       "loginlanguagelabel": "$1 ꯂꯣꯟ",
+       "pt-login": "Chang Sinba",
+       "pt-createaccount": "ꯑꯩꯒꯤ ꯑꯣꯏꯕꯥ ꯑꯃꯥ ꯁꯦꯝꯕꯥ",
+       "pt-userlogout": "Log out",
+       "bold_sample": "ꯆꯥꯎꯅꯥ ꯏꯕꯥ",
+       "bold_tip": "ꯆꯥꯎꯅꯥ ꯏꯕꯥ",
+       "italic_sample": "ꯋꯥꯔꯦꯡ ꯐꯆꯅꯥ ꯏꯕꯥ",
+       "italic_tip": "ꯋꯥꯔꯦꯡ ꯐꯩꯅꯥ ꯏꯕꯥ",
+       "link_sample": "ꯃꯩꯃꯤꯡꯃꯤ ꯁꯝꯅꯐꯝ",
+       "link_tip": "ꯃꯅꯨꯡꯒꯥ ꯁꯝꯅꯐꯝ",
+       "extlink_sample": "http://www.example.com link title",
+       "extlink_tip": "ꯑꯇꯣꯞꯄꯥꯒꯥ ꯁꯝꯅꯐꯝ",
+       "headline_sample": "ꯃꯀꯣꯛꯀꯤ ꯋꯥꯔꯦꯡ ꯄꯥꯔꯦꯡ",
+       "headline_tip": "꯲ ꯁꯨꯕꯥ ꯃꯀꯣꯛꯀꯤ ꯄꯔꯦꯡ",
+       "nowiki_sample": "ꯍꯥꯞꯆꯤꯟꯂꯨ non formating ꯋꯥꯔꯦꯡꯗꯨ ꯁꯤꯗꯥ",
+       "nowiki_tip": "ꯋꯤꯀꯤꯒꯤ ꯃꯥꯑꯣꯡ ꯁꯦꯝꯕꯗꯨ ꯊꯧꯑꯣꯏꯗꯕꯥ",
+       "image_tip": "ꯅꯝꯁꯤꯟꯂꯕꯥ ꯐꯥꯏꯜ",
+       "media_tip": "ꯐꯥꯏꯜꯒꯤ ꯁꯝꯅꯐꯝ",
+       "sig_tip": "ꯃꯇꯝꯒꯤ ꯏꯁꯇꯥꯝꯒꯥ ꯂꯣꯏꯟꯅꯥ ꯅꯪꯒꯤ ꯈꯨꯇꯌꯦꯛ",
+       "hr_tip": "ꯐꯩꯅꯥ ꯆꯤꯡꯕꯥ ꯂꯥ ꯏ (ꯃꯔꯤꯛ ꯃꯔꯤꯛ ꯑꯣꯏꯅꯥ ꯁꯤꯖꯤꯟꯅꯧ)",
+       "summary": "ꯑꯇꯦꯟꯕꯥ ꯁꯟꯗꯣꯛꯅꯥ ꯇꯥꯛꯄꯥ",
+       "minoredit": "ꯃꯁꯤ ꯑꯄꯤꯛꯄꯥ ꯁꯦꯝꯒꯠꯄꯅꯤ",
+       "watchthis": "ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤ ꯌꯦꯡꯉꯨ",
+       "savearticle": "ꯂꯥꯃꯥꯏ ꯇꯨꯪꯁꯤꯟꯕꯥ",
+       "showpreview": "ꯍꯥꯟꯅꯒꯤꯗꯨ ꯎꯨꯇꯂꯨ",
+       "showdiff": "ꯑꯍꯣꯡꯕꯗꯨ ꯎꯨꯇꯂꯨ",
+       "anoneditwarning": "<strong>Warning:</strong> You are not logged in. Your IP address will be publicly visible if you make any edits. If you <strong>[$1 log in]</strong> or <strong>[$2 create an account]</strong>, your edits will be attributed to your username, along with other benefits.",
+       "loginreqlink": "Chang Sinba",
+       "noarticletext": "There is currently no text in this page.\nYou can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs],\nor [{{fullurl:{{FULLPAGENAME}}|action=edit}} create this page]</span>.",
+       "noarticletext-nopermission": "There is currently no text in this page.\nYou can [[Special:Search/{{PAGENAME}}|search for this page title]] in other pages, or <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} search the related logs]</span>, but you do not have permission to create this page.",
+       "creating": "Creating $1",
+       "editingsection": "Editing $1 (section)",
+       "template-protected": "ꯉꯥꯛꯊꯣꯛꯂꯕꯥ",
+       "template-semiprotected": "ꯇꯪꯈꯥꯏ ꯉꯥꯛꯊꯣꯛꯂꯕꯥ",
+       "revisionasof": "Revision as of $1",
+       "previousrevision": "ꯑꯔꯤꯕꯥ ꯑꯃꯨꯛ ꯍꯟꯅꯥ ꯌꯦꯡꯕꯥ",
+       "cur": "ꯍꯧ",
+       "last": "ꯃꯥꯃꯥꯡꯒꯤ",
+       "rev-delundel": "ꯑꯍꯣꯡꯕꯥ ꯎꯍꯟꯂꯤꯕꯥ",
+       "difference-title": "$1 ꯒꯤ ꯑꯃꯨꯛꯍꯟꯕꯥ ꯈꯦꯠꯅꯕꯥꯒꯤ ꯃꯔꯛ",
+       "lineno": "ꯂꯥ ꯏ $1",
+       "editundo": "ꯇꯧꯒꯅꯨ",
+       "diff-multi-sameuser": "({{PLURAL:$1|One intermediate revision|$1 intermediate revisions}} by the same user not shown)",
+       "searchresults": "ꯊꯤꯕꯒꯤ ꯐꯣꯜ",
+       "searchresults-title": "Search results for \"$1\"",
+       "prevn": "ꯍꯥꯟꯅꯒꯤ {{PLURAL:$1|$1}}",
+       "nextn": "ꯃꯥꯊꯪ{{PLURAL:$1|$1}}",
+       "nextn-title": "Next $1 {{PLURAL:$1|result|results}}",
+       "shown-title": "Show $1 {{PLURAL:$1|result|results}} per page",
+       "viewprevnext": "ꯎꯨꯇꯂꯨ ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-new": "<strong>Create the page \"[[:$1]]\" on this wiki!</strong> {{PLURAL:$2|0=|See also the page found with your search.|See also the search results found.}}",
+       "searchprofile-articles": "Kamai c da yaoba pumnamak",
+       "searchprofile-images": "Multimedia",
+       "searchprofile-everything": "Pumnamak",
+       "searchprofile-advanced": "Khumangchaoba",
+       "searchprofile-articles-tooltip": "$1 da thiyu",
+       "searchprofile-images-tooltip": "File gi damak thiba",
+       "searchprofile-everything-tooltip": "Mashida yaoriba c loina thiyu (Ngamgani Lamgi ga loinana)",
+       "searchprofile-advanced-tooltip": "Custom gi ming eramdamgi thiyu",
+       "search-result-size": "$1 ({{PLURAL:$2|1 word|$2 words}})",
+       "search-redirect": "(redirect from $1)",
+       "search-section": "(section $1)",
+       "searchall": "ꯄꯨꯂꯞ",
+       "search-showingresults": "{{PLURAL:$4|Result <strong>$1</strong> of <strong>$3</strong>|Results <strong>$1 – $2</strong> of <strong>$3</strong>}}",
+       "search-nonefound": "ꯃꯁꯤꯒꯤ ꯐꯣꯜꯁꯤꯒꯥ ꯆꯥꯟꯅꯕꯥ ꯂꯩꯇꯦ",
+       "mypreferences": "Preferences",
+       "right-writeapi": "API sijinaduna eba",
+       "newuserlogpage": "User creation log",
+       "enhancedrc-history": "ꯄꯨꯋꯥꯔꯤ",
+       "recentchanges": "ꯍꯧꯖꯤꯛꯀꯤ ꯑꯣꯏꯕꯥ ꯑꯍꯣꯡꯕꯁꯤꯡ",
+       "recentchanges-legend": "ꯍꯧꯖꯤꯛꯀꯤ ꯑꯣꯏꯕꯥ ꯑꯍꯣꯡꯕꯥ ꯈꯟꯐꯝꯁꯤꯡ",
+       "recentchanges-summary": "ꯋꯤꯀꯤꯄꯦꯗꯤꯌꯥ ꯂꯃꯥꯏꯒꯤ ꯍꯧꯖꯤꯛꯀꯤ ꯑꯣꯏꯕꯥ ꯑꯍꯣꯡꯕꯒꯤ ꯃꯐꯝ ꯇꯥꯛꯄꯥ",
+       "recentchanges-label-newpage": "ꯃꯁꯤꯒꯤ ꯁꯦꯝꯒꯠꯄꯁꯤꯅꯥ ꯑꯅꯧꯕꯥ ꯂꯥꯃꯥꯏ ꯱ ꯁꯥꯔꯦ",
+       "recentchanges-label-minor": "ꯃꯁꯤ ꯑꯄꯤꯛꯄꯥ ꯁꯦꯝꯒꯠꯄꯅꯤ",
+       "recentchanges-label-bot": "ꯃꯁꯤꯒꯤ ꯁꯦꯝꯒꯠꯄꯁꯤ ꯕ ꯅꯥ ꯄꯥꯡꯊꯣꯛꯄꯅꯤ",
+       "recentchanges-label-unpatrolled": "ꯃꯁꯤꯒꯤ ꯁꯦꯝꯒꯠꯄꯁꯤ ꯍꯧꯖꯤꯛꯐꯥꯎ ꯌꯦꯡꯁꯤꯟꯗ꯭ꯔꯤ",
+       "recentchanges-label-plusminus": "ꯕꯥꯏꯠꯀꯤ ꯑꯍꯣꯡꯕꯒꯤ ꯃꯇꯪ ꯏꯟꯅꯥ ꯂꯥꯃꯥꯏꯁꯤꯒꯤ ꯑꯆꯧꯕꯥ ꯂꯦꯞꯄꯤ",
+       "recentchanges-legend-heading": "<ꯑꯀꯟꯕꯥ>ꯊꯥꯏꯅꯗꯒꯤ</ꯑꯀꯟꯕꯥ>",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (also see [[Special:NewPages|list of new pages]])",
+       "rclistfrom": "$2$3 ꯁꯤꯗꯒꯤ ꯍꯧꯔꯒꯥ ꯑꯅꯧꯕꯥ ꯑꯍꯣꯡꯕꯗꯨ ꯎꯨꯇꯂꯨ",
+       "rcshowhideminor": "$1 ꯄꯤꯛꯅꯥ ꯁꯦꯝꯒꯠꯄꯥ",
+       "rcshowhideminor-hide": "ꯂꯣꯇꯄꯥ",
+       "rcshowhidebots": "$1 bots",
+       "rcshowhidebots-show": "ꯎꯨꯇꯄꯥ",
+       "rcshowhideliu": "ꯃꯃꯤꯡ ꯆꯟꯂꯕꯥ ꯄꯥꯏꯔꯤꯕꯥ $1",
+       "rcshowhideliu-hide": "ꯂꯣꯇꯄꯥ",
+       "rcshowhideanons": "$1 ꯃꯁꯛ ꯃꯥꯅꯥꯗꯕꯥ ꯄꯥꯏꯔꯤꯕꯥ ꯃꯤ",
+       "rcshowhideanons-hide": "ꯂꯣꯇꯄꯥ",
+       "rcshowhidemine": "$1 ꯑꯩꯅꯥ ꯁꯦꯝꯒꯠꯄꯁꯤꯡ",
+       "rcshowhidemine-hide": "ꯂꯣꯇꯄꯥ",
+       "rclinks": "$1 ꯒꯤ ꯑꯔꯣꯏꯕꯥ ꯑꯍꯣꯡꯕꯥꯗꯎ ꯎꯨꯇꯂꯎ $2 ꯃꯅꯨꯡꯗꯥ",
+       "diff": "ꯈꯦꯠ",
+       "hist": "ꯄꯨꯋꯥ",
+       "hide": "ꯂꯣꯇꯄꯥ",
+       "show": "ꯎꯨꯇꯄꯥ",
+       "minoreditletter": "ꯃ",
+       "newpageletter": "ꯟ",
+       "boteditletter": "ꯕ",
+       "rc-change-size-new": "{{PLURAL:$1|$1}} ꯍꯣꯡꯗꯣꯛꯑꯕꯥ ꯃꯇꯨꯪꯗꯥ",
+       "recentchangeslinked": "ꯃꯔꯤꯂꯩꯅꯕꯥ ꯑꯍꯣꯡꯕꯁꯤꯡ",
+       "recentchangeslinked-toolbox": "ꯃꯔꯤꯂꯩꯅꯕꯥ ꯑꯍꯣꯡꯕꯁꯤꯡ",
+       "recentchangeslinked-title": "$1 ꯂꯩꯅꯕꯥ ꯑꯍꯣꯡꯕꯁꯤꯡ",
+       "recentchangeslinked-summary": "Enter a page name to see changes on pages linked to or from that page. (To see members of a category, enter {{ns:category}}:Name of category). Changes to pages on [[Special:Watchlist|your Watchlist]] are in <strong>bold</strong>.",
+       "recentchangeslinked-page": "ꯂꯥꯃꯥꯏ ꯃꯥꯃꯤꯡ",
+       "recentchangeslinked-to": "ꯂꯥꯃꯥꯏꯁꯤꯒꯥ ꯁꯝꯅꯐꯝꯒꯤ ꯑꯍꯣꯡꯕꯗꯨ ꯎꯠꯂꯨ ꯄꯤꯔꯝꯂꯤꯕꯥ ꯂꯥꯃꯥꯏꯗꯨ ꯃꯍꯨꯠꯇꯥ",
+       "upload": "ꯐꯥꯏꯜ ꯊꯥꯒꯠꯂꯨ",
+       "filedesc": "ꯑꯇꯦꯟꯕꯥ ꯁꯟꯗꯣꯛꯅꯥ ꯇꯥꯛꯄꯥ",
+       "license-header": "ꯑꯌꯥꯕꯥ",
+       "file-anchor-link": "ꯈꯣꯝꯖꯤꯟꯗꯨꯅꯥ ꯍꯥꯞꯐꯝ",
+       "filehist": "ꯐꯥꯏꯜꯒꯤ ꯄꯨꯋꯥꯔꯤ",
+       "filehist-help": "Cheichat/Matamda nammmu matam aduda file adu ooonaba",
+       "filehist-current": "Houjikki",
+       "filehist-datetime": "ꯆꯩꯆꯠ/ꯃꯇꯝ",
+       "filehist-thumb": "Khutpina namba",
+       "filehist-thumbtext": "Thumbnail for version as of $1",
+       "filehist-user": "ꯄꯥꯏꯔꯤꯕꯥ",
+       "filehist-dimensions": "ꯄꯥꯛ ꯆꯥꯎꯕꯥ",
+       "filehist-comment": "ꯑꯄꯥꯝꯕꯥ ꯐꯣꯡꯗꯣꯛ ꯎ",
+       "imagelinks": "ꯐꯥꯏꯜꯒꯤ ꯁꯤꯖꯤꯟꯅꯐꯝ",
+       "linkstoimage": "The following {{PLURAL:$1|page links|$1 pages link}} to this file:",
+       "nolinkstoimage": "ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤꯒꯥ ꯃꯔꯤ ꯂꯩꯅꯕꯥ ꯁꯝꯅꯐꯝ ꯐꯥꯏꯜ ꯂꯩꯇꯦ",
+       "sharedupload-desc-here": "This file is from $1 and may be used by other projects.\nThe description on its [$2 file description page] there is shown below.",
+       "upload-disallowed-here": "ꯃꯁꯤꯒꯤ ꯐꯥꯏꯜꯁꯤ ꯅꯪꯅꯥ ꯑꯃꯨꯛ ꯍꯟꯅꯥ ꯏꯕꯥ ꯌꯥꯔꯣꯏ",
+       "randompage": "ꯆꯥꯡ ꯅꯥꯏꯗꯕꯥ ꯂꯥꯃꯥꯏ",
+       "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
+       "newpages": "ꯑꯅꯧꯕꯥ ꯂꯥꯃꯥꯏꯁꯤꯡ",
+       "booksources": "ꯂꯥꯏꯔꯤꯛꯀꯤ ꯍꯧꯔꯛꯐꯝ",
+       "log": "ꯆꯪꯕꯥ",
+       "allpagessubmit": "ꯆꯠꯂꯨ",
+       "mywatchlist": "Watchlist",
+       "watch": "ꯌꯦꯡꯕꯥ",
+       "rollbacklink": "ꯑꯃꯨꯛ ꯍꯟꯍꯟꯕꯥ",
+       "namespace": "ꯃꯥꯃꯤꯡꯒꯤ ꯃꯐꯝ",
+       "invert": "Khanlibadu Makoktagi lak hanba",
+       "tooltip-invert": "Akhannaba maming gi manungda page tungi ahongba lotnaba oopu du yeng ngoo",
+       "namespace_association": "Maming eefam ga marileinaba",
+       "tooltip-namespace_association": "Oopu du yengoo maming eefam gi hiramga mari leinaba khangatlaba maming eefam amadi wa ngangfam manung channaba",
+       "blanknamespace": "ꯃꯔꯨꯑꯣꯏꯕꯥ",
+       "contributions": "{{GENDER:$1|User}} ꯈꯣꯝꯒꯠꯂꯛꯄꯁꯤꯡ",
+       "mycontris": "ꯈꯣꯝꯒꯠꯂꯛꯂꯤꯕꯁꯤꯡ",
+       "anoncontribs": "ꯈꯣꯝꯒꯠꯂꯛꯂꯤꯕꯁꯤꯡ",
+       "month": "ꯃꯗꯨꯒꯤ ꯊꯥꯗꯒꯤ (ꯑꯃꯗꯤ ꯅꯧꯔꯤꯕꯥ)",
+       "year": "ꯃꯗꯨꯒꯤ ꯆꯥꯍꯤꯗꯒꯤ (ꯑꯃꯗꯤ ꯅꯧꯔꯤꯕꯥ)",
+       "whatlinkshere": "ꯃꯁꯤꯗꯥ ꯀꯔꯤ ꯁꯝꯃꯤ",
+       "whatlinkshere-title": "$1 ꯒꯥ ꯃꯔꯤ ꯂꯩꯅꯕꯥ ꯁꯝꯅꯐꯝ",
+       "whatlinkshere-page": "ꯂꯥꯃꯥꯏ",
+       "linkshere": "$2<strong> ꯒꯥ ꯁꯝꯅꯐꯝ ꯑꯣꯏꯕꯥ ꯂꯥꯃꯥꯏꯁꯤꯡ",
+       "isredirect": "ꯑꯃꯨꯛ ꯍꯟꯂꯛꯄꯥ ꯂꯥꯃꯥꯏ",
+       "istemplate": " transclusions",
+       "isimage": "ꯐꯥꯏꯜꯒꯤ ꯁꯝꯅꯐꯝ",
+       "whatlinkshere-prev": "{{PLURAL:$1|previous|previous $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|next|next $1}}",
+       "whatlinkshere-links": " ꯁꯝꯅꯐꯝ",
+       "whatlinkshere-hideredirs": "$1 redirects",
+       "whatlinkshere-hidetrans": "$1 transclusions",
+       "whatlinkshere-hidelinks": "$1 ꯁꯝꯅꯐꯝ",
+       "whatlinkshere-filters": "ꯁꯦꯡꯇꯣꯛꯐꯝ",
+       "blocklink": "Thingba",
+       "contribslink": "ꯐꯪꯉꯛꯄꯥ",
+       "movelogpage": "ꯂꯣꯒ ꯁꯤ ꯂꯦꯡꯍꯟꯂꯨ",
+       "export": "ꯂꯥꯃꯥꯏꯁꯤꯡ ꯄꯨꯊꯣꯛꯈꯣ",
+       "thumbnail-more": "ꯆꯥꯑꯣꯍꯟꯕꯥ",
+       "tooltip-pt-userpage": "{{GENDER:|Your user}} ꯂꯥꯃꯥꯏ",
+       "tooltip-pt-mytalk": "{{GENDER:|Your}} ꯉꯥꯡꯐꯝ ꯂꯥꯃꯥꯏ",
+       "tooltip-pt-preferences": "{{GENDER:|Your}} preferences",
+       "tooltip-pt-watchlist": "ꯑꯍꯣꯡꯕꯗꯥ ꯌꯦꯡꯁꯤꯟꯅꯕꯥ ꯅꯪꯒꯤ ꯂꯥꯃꯥꯏ ꯄꯔꯦꯡ ꯱",
+       "tooltip-pt-mycontris": "A list of {{GENDER:|your}} ꯈꯣꯝꯒꯠꯂꯛꯂꯤꯕꯥ ꯁꯤꯡ",
+       "tooltip-pt-login": "ꯅꯪꯅꯥ ꯃꯅꯨꯡ ꯆꯪꯉꯛꯄꯁꯤ ꯄꯨꯛꯅꯤꯡ ꯊꯧꯒꯠꯂꯤ, ꯇꯧꯕꯇꯕꯨ ꯃꯁꯤ ꯁꯪꯁꯣꯏ ꯁꯣꯏꯗꯅꯥ ꯆꯡꯕꯗꯤ ꯅꯠꯇꯦ",
+       "tooltip-pt-logout": "Log out",
+       "tooltip-pt-createaccount": "ꯅꯪꯒꯤ ꯑꯣꯏꯕꯥ ꯱ ꯁꯦꯝꯕꯥ ꯑꯃꯥꯁꯨꯪ ꯃꯅꯨꯡ ꯆꯪꯁꯤꯟꯕꯥꯁꯤ ꯄꯨꯛꯅꯤꯡ ꯊꯧꯒꯠꯂꯤ, ꯇꯧꯕꯇꯕꯨ ꯃꯁꯤ ꯁꯪꯁꯣꯏ ꯁꯣꯏꯗꯅꯥ ꯆꯡꯕꯗꯤ ꯅꯠꯇꯦ",
+       "tooltip-ca-talk": "ꯃꯅꯨꯡꯆꯟꯂꯤꯕꯥ ꯂꯥꯃꯥꯏꯁꯤꯒꯤ ꯃꯇꯥꯁꯗꯥ ꯈꯟꯅꯥ ꯅꯩꯅꯕꯥ",
+       "tooltip-ca-edit": "ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤ ꯁꯦꯝꯒꯠꯂꯨ",
+       "tooltip-ca-addsection": "Anouba khaidokpadu houro",
+       "tooltip-ca-viewsource": "ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤ ꯉꯥꯛꯊꯣꯛꯂꯦ \nꯅꯪꯅꯥ ꯂꯥꯃꯥꯏꯁꯤꯒꯤ ꯍꯧꯔꯛꯐꯝ ꯎꯒꯅꯤ",
+       "tooltip-ca-history": "ꯍꯧꯈꯔꯕꯥ ꯂꯥꯃꯥꯏ ꯑꯃꯨꯛ ꯍꯟꯅꯥ ꯌꯦꯡꯕꯥ",
+       "tooltip-ca-move": "ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤ ꯂꯦꯡꯍꯟꯂꯨ",
+       "tooltip-ca-watch": "ꯅꯪꯒꯤ ꯌꯦꯡꯅꯕꯥ ꯄꯥꯔꯦꯡꯗꯨꯗꯥ ꯍꯥꯞꯆꯏꯟꯂꯨ ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤ",
+       "tooltip-search": "ꯊꯤꯔꯣ ꯃꯐꯝꯗꯨꯒꯤ ꯃꯃꯤꯡ",
+       "tooltip-search-go": "Leiraga Chatlu madugi chapchaba Lamai Duda",
+       "tooltip-search-fulltext": "ꯏꯔꯤꯕꯥ ꯃꯇꯦꯛꯁꯤꯒꯤ ꯂꯃꯥꯏ ꯁꯤ ꯊꯤꯔꯣ",
+       "tooltip-p-logo": "ꯃꯔꯨ ꯑꯣꯏꯕꯥ ꯂꯥꯃꯥꯏꯗꯨꯗꯥ ꯌꯧꯁꯤꯟꯂꯨ",
+       "tooltip-n-mainpage": "ꯃꯔꯨ ꯑꯣꯏꯕꯥ ꯂꯥꯃꯥꯏꯗꯨꯗꯥ ꯌꯧꯁꯤꯟꯂꯨ",
+       "tooltip-n-mainpage-description": "ꯃꯔꯨ ꯑꯣꯏꯕꯥ ꯂꯥꯃꯥꯏꯗꯨꯗꯥ ꯌꯧꯁꯤꯟꯂꯨ",
+       "tooltip-n-portal": "ꯊꯧꯑꯣꯡ ꯂꯥꯛꯄꯗꯨꯒꯤ ꯃꯔꯝꯗ꯬",
+       "tooltip-n-currentevents": "ꯆꯠꯊꯔꯤꯕꯥ ꯊꯧꯔꯝꯁꯤꯒꯤ ꯃꯅꯨꯒꯤ ꯑꯣꯏꯕꯥ ꯋꯥꯔꯣꯟꯗꯨ ꯄꯨꯊꯣꯛ ꯎ",
+       "tooltip-n-recentchanges": "ꯍꯧꯖꯤꯛꯀꯤ ꯑꯣꯏꯅꯥ ꯋꯤꯀꯤꯄꯦꯗꯤꯌꯥꯗꯥ ꯑꯍꯣꯡꯕꯥꯁꯤꯡꯒꯤ ꯄꯥꯔꯦꯡ",
+       "tooltip-n-randompage": "ꯆꯥꯡ ꯅꯥꯏꯗꯕꯥ ꯂꯃꯥꯏ ꯍꯥꯞꯆꯤꯟꯕꯥ",
+       "tooltip-n-help": "ꯄꯨꯊꯣꯔꯛꯅꯕꯥ ꯃꯐꯝꯅꯤ",
+       "tooltip-t-whatlinkshere": "Mashigi Lamai c da samliba wiki parent ama",
+       "tooltip-t-recentchangeslinked": "ꯃꯁꯤꯒꯤ ꯂꯃꯥꯏꯁꯤꯒꯥ ꯃꯔꯤ ꯂꯩꯅꯕꯥ ꯍꯧꯖꯤꯛꯀꯤ ꯑꯍꯣꯡꯕꯥ ꯂꯥꯃꯥꯏꯁꯤꯡ",
+       "tooltip-feed-atom": "ꯂꯥꯃꯥꯏꯁꯤꯒꯤ ꯃꯁꯥ ꯃꯇꯣꯝꯇꯥ ꯌꯣꯛꯈꯠꯂꯛꯄꯥ",
+       "tooltip-t-contributions": " {{GENDER:$1|this user}} ꯅꯥ ꯈꯣꯝꯖꯤꯟꯂꯛꯂꯤꯕꯥ ꯄꯥꯔꯦꯡ ꯱",
+       "tooltip-t-upload": "ꯐꯥꯏꯜꯁꯤꯡ ꯊꯥꯒꯠꯂꯨ",
+       "tooltip-t-specialpages": "Akhanaba Lamai gi Parent Ama",
+       "tooltip-t-print": "Namba Yaba ma ong  gi Lamai",
+       "tooltip-t-permalink": "Amuk han na yengba lamaisigi Lengdaba Samnafam",
+       "tooltip-ca-nstab-main": "ꯂꯃꯥꯏꯁꯤꯒꯤ ꯑꯌꯥꯎꯕꯁꯤꯡꯗꯨ ꯎꯨꯇꯂꯨ",
+       "tooltip-ca-nstab-user": "ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯥ ꯂꯥꯃꯥꯏꯁꯤ ꯌꯦꯡꯕꯥ",
+       "tooltip-ca-nstab-special": "ꯃꯁꯤ ꯑꯈꯟꯅꯕꯥ ꯂꯥꯃꯥꯏꯅꯤ, ꯁꯦꯝꯒꯠꯄꯥ ꯌꯥꯔꯣꯏ",
+       "tooltip-ca-nstab-image": "File lamai du ootlu",
+       "tooltip-ca-nstab-template": "ꯇꯦꯝꯄꯂꯦꯠ ꯇꯨ ꯎꯨꯠꯂꯨ",
+       "tooltip-ca-nstab-category": "Macahkhaiba lamai sure oootlooo",
+       "tooltip-save": "ꯅꯪꯒꯤ ꯑꯍꯣꯡꯕꯗꯨ ꯇꯨꯡꯁꯤꯟꯂꯨ",
+       "tooltip-preview": "ꯅꯪꯒꯤ ꯑꯍꯣꯡꯕꯗꯨ ꯑꯃꯨꯛ ꯍꯟꯅꯥ ꯎꯠꯂꯨ. ꯆꯥꯟꯕꯤꯗꯨꯅꯥ ꯃꯁꯤ ꯍꯥꯟꯅꯥ ꯁꯤꯖꯤꯅꯧ ꯇꯪꯁꯤꯟꯗ꯭ꯔꯤꯉꯧꯗꯥ",
+       "tooltip-diff": "ꯅꯪꯅꯥ ꯏꯔꯤꯕꯥ ꯄꯥꯔꯦꯡꯗꯨꯗꯥ ꯑꯍꯣꯡꯕꯥ ꯎꯠꯂꯨ",
+       "tooltip-rollback": "ꯑꯔꯣꯏꯕꯥ ꯈꯣꯝꯒꯠꯛꯂꯤꯕꯥꯁꯤꯡꯒꯤ ꯁꯦꯝꯒꯠꯄꯁꯤꯡ ꯗꯨꯒꯤ ꯂꯥꯃꯥꯏ ꯑꯃꯨꯛ ꯅꯝꯕꯗꯥ ꯂꯥꯛꯍꯟꯂꯨ ꯍꯥꯟꯅꯒꯤ ꯃꯐꯝꯗꯨꯗꯥ",
+       "tooltip-undo": "\"Undo\" reverts this edit and opens the edit form in preview mode. It allows adding a reason in the summary.",
+       "tooltip-summary": "ꯑꯇꯦꯟꯕꯥ ꯀꯨꯞꯅꯥ ꯁꯟꯗꯣꯛꯅꯩ ꯇꯥꯛꯄꯥ ꯏꯌꯨ",
+       "simpleantispam-label": "Anti-spam check.\nDo <strong>not</strong> fill this in!",
+       "pageinfo-robot-noindex": "ꯌꯥꯍꯟꯗꯕꯥ",
+       "pageinfo-subpages-name": "ꯂꯥꯃꯥꯏꯁꯤ ꯒꯤ ꯃꯅꯨꯡ ꯆꯟꯕꯥ ꯀꯨꯞꯊꯕꯥ ꯂꯥꯃꯥꯏꯁꯤꯡ",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirect|redirects}}; $3 {{PLURAL:$3|non-redirect|non-redirects}})",
+       "pageinfo-magic-words": "Magic {{PLURAL:$1|word|words}} ($1)",
+       "pageinfo-toolboxlink": "ꯂꯥꯃꯥꯏꯒꯤ ꯃꯇꯥꯡꯗꯥ",
+       "previousdiff": "ꯑꯔꯤꯕꯥ ꯁꯦꯝꯒꯠꯂꯛꯐꯝ",
+       "file-info-size": "$1 × $2 pixels, file size: $3, MIME type: $4",
+       "file-nohires": "ꯃꯁꯤꯗꯒꯤ ꯍꯦꯟꯅꯥ ꯁꯦꯡꯕꯥ ꯂꯩꯇꯔꯦ",
+       "svg-long-desc": "SVG file, nominally $1 × $2 pixels, file size: $3",
+       "show-big-image": "File Asengba",
+       "show-big-image-preview": "Size of this preview: $1.",
+       "show-big-image-other": "Other {{PLURAL:$2|resolution|resolutions}}: $1.",
+       "show-big-image-size": "$1 × $2 pixels",
+       "metadata": "ꯃꯦꯇꯥꯗꯥꯇꯥ",
+       "metadata-help": "This file contains additional information, probably added from the digital camera or scanner used to create or digitize it.\nIf the file has been modified from its original state, some details may not fully reflect the modified file.",
+       "metadata-fields": "ꯃꯥꯇꯥꯗꯥꯇꯥꯒꯤ ꯃꯥꯃꯤꯒꯤ ꯄꯥꯔꯦꯡ ꯑꯗꯨ ꯃꯥꯃꯤꯒꯤ ꯂꯥꯃꯥꯏꯗꯨꯒꯤ ꯄꯥꯎꯖꯦꯜꯗꯥ ꯎꯨꯇꯂꯦ ꯃꯦꯇꯥꯗꯥꯇꯥ ꯒꯤ\nꯎꯨꯇꯊꯣꯛꯐꯝꯗꯨ ꯀꯥꯏꯔꯥꯀꯥꯟꯗꯥ \nꯑꯇꯩꯗꯤ ꯂꯣꯠꯂꯅꯤ ꯎꯨꯇꯄꯥ ꯉꯝꯗꯕꯒꯤ\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-orientation": "ꯃꯐꯝ ꯆꯥꯟꯅꯍꯟꯕꯥ",
+       "exif-xresolution": " resolution ꯐꯩꯅꯥ",
+       "exif-yresolution": " resolution ꯌꯨꯡꯅꯥ",
+       "exif-datetime": "ꯐꯥꯏꯜ ꯍꯣꯡꯕꯒꯤ ꯆꯩꯆꯠ ꯑꯃꯗꯤ ꯃꯇꯝ",
+       "exif-make": "Camera ꯁꯥꯔꯤꯕꯁꯤꯡ",
+       "exif-model": "Camera model",
+       "exif-software": "Software ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯥ",
+       "exif-exifversion": "Exif version",
+       "exif-colorspace": "ꯉꯛꯁꯝꯒꯤ ꯑꯍꯥꯡꯕꯥ",
+       "exif-datetimeoriginal": "data generationꯒꯤ ꯃꯇꯝ ꯑꯝꯗꯤ ꯆꯩꯆꯠ",
+       "exif-datetimedigitized": "ꯃꯥꯃꯤ ꯇꯥꯏꯕꯪꯗꯥ ꯍꯥꯞꯆꯤꯟꯕꯒꯤ ꯃꯇꯝ ꯑꯃꯥꯗꯤ ꯆꯩꯆꯠ",
+       "exif-orientation-1": "ꯆꯥꯡ ꯅꯥꯏꯅꯥ",
+       "namespacesall": "Pullap",
+       "monthsall": "ꯄꯨꯂꯞ",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|talk]])",
+       "specialpages": "MediaWiki:Bs-wikiadmin-mediawiki-akhannaba-lamai-text/mni",
+       "tag-filter": "[[Special:Tags|Tag]] filter:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "logentry-delete-delete": "$1 {{GENDER:$2|deleted}} page $3",
+       "logentry-newusers-create": "User account $1 was {{GENDER:$2|created}}",
+       "searchsuggest-search": "ꯊꯤꯔꯣ ꯃꯐꯝꯗꯨꯒꯤ ꯃꯃꯤꯡ"
+}
index 5adb853..c058b77 100644 (file)
@@ -10,7 +10,8 @@
                        "Macofe",
                        "進也",
                        "Liuxinyu970226",
-                       "Yoxem"
+                       "Yoxem",
+                       "Matěj Suchánek"
                ]
        },
        "tog-underline": "Liân-kiat oē té-sûn:",
        "filemissing": "Bô tóng-àn",
        "import": "Su-ji̍p ia̍h",
        "tooltip-pt-userpage": "{{GENDER:|Lí ê iōng-chiá}} ê ia̍h",
-       "tooltip-pt-mytalk": "{{GENDER:Lí}} ê thó-lūn ia̍h",
+       "tooltip-pt-mytalk": "{{GENDER:|Lí}} ê thó-lūn ia̍h",
        "tooltip-pt-preferences": "{{GENDER:|Lí ê}} siat-tēng",
        "tooltip-pt-watchlist": "你監視的頁有改過的清單",
        "tooltip-pt-mycontris": "{{GENDER:|Lí}} ê kòng-hiàn lia̍t-toaⁿ",
index 3dba87c..55cdb15 100644 (file)
        "backend-fail-usable": "Nun se può lieggere o scrivere 'o file \"$1\" pecché mancano 'e permesse sufficiente o nun esiste 'a cartella/cuntenitore.",
        "filejournal-fail-dbconnect": "Nun se può fà connessione a l'archivio d' 'o database pe' puté astipà archivie 'n rezza \"$1\".",
        "filejournal-fail-dbquery": "Nun se può agghiurnà l'archivio d' 'o database pe' puté astipà l'archivie 'n rezza \"$1\".",
-       "lockmanager-notlocked": "Nun se può sbloccà \"$1\"; nun è bluccato.",
+       "lockmanager-notlocked": "Nun se può sbloccà \"$1\"; nun sta bluccato.",
        "lockmanager-fail-closelock": "Nun se può nchiure 'o file 'e blocco pe' \"$1\".",
        "lockmanager-fail-deletelock": "Nun se può scancellà 'o file 'e blocco pe' \"$1\".",
        "lockmanager-fail-acquirelock": "Nun se può piglià 'o blocco pe' \"$1\".",
        "sorbsreason": "L'indirizzo IP vuosto è elencato comm'a nu proxy araputo dint' 'a lista DNSBL ausata 'a {{SITENAME}}.",
        "sorbs_create_account_reason": "L'indirizzo IP d' 'o vuosto è elencato comm'a nu proxy araputo dint' 'a DNSBL ausata 'a {{SITENAME}}. Nun putite crià nu cunto.",
        "xffblockreason": "N'indirizzo IP prisente dint' 'e cap'e paggena X-Forwarded-For, o chillu d' 'o vuosto o chillu 'e n'atu server proxy ca stat'ausann, è stato bloccato. 'O mutivo origgenale 'e blocco era: $1",
-       "cant-see-hidden-user": "L'utente ca state a bluccà è stato già bluccato e annascunnuto. Si nun tenite 'o deritto ''hideuser'', nun putite veré stu blocco d'utente.",
+       "cant-see-hidden-user": "L'utente ca state fremmanno he sito bluccato e annascunnuto già. Si nun tenite 'o deritto ''hideuser'', nun putite veré stu blocco utente.",
        "ipbblocked": "Nun putite bloccà o sbluccà utente pecche vuje stesso site bluccato.",
        "ipbnounblockself": "Nun avite permesso a ve bluccà vuje stesso.",
        "lockdb": "Nzerra 'o database",
        "lockdbsuccesstext": "'O database è stato bloccato.<br />\nArricuordateve 'e [[Special:UnlockDB|luvà 'o blocco]] appriesso c' 'a manutenziona sarrà fernuta.",
        "unlockdbsuccesstext": "'O database è stato sbluccato.",
        "lockfilenotwritable": "Nun se può scrivere ncopp' 'o file 'e blocco d' 'o database.\nPe' bluccà o sbluccà 'o database abbesuogne 'e scrivere dint' 'o server web.",
-       "databaselocked": "'O database è bluccato già.",
-       "databasenotlocked": "'O database nun è bluccato.",
+       "databaselocked": "'O database sta stutato già.",
+       "databasenotlocked": "'O database nun sta stutato.",
        "lockedbyandtime": "(pe' {{GENDER:$1|$1}} 'o $2 a 'e $3)",
        "move-page": "Mòve $1",
        "move-page-legend": "Mòve paggena",
        "tags-deactivate": "stuta",
        "tags-hitcount": "$1 {{PLURAL:$1|cagnamiento|cagnamiente}}",
        "tags-manage-no-permission": "Nun tenite 'o permesso pe' cagnà 'e tag.",
-       "tags-manage-blocked": "Nun putite cagnà sti tag quanno site bluccato/a.",
+       "tags-manage-blocked": "Nun putite cagnà sti tag quanno state {{GENDER:$1|fremmato|freammata}}.",
        "tags-create-heading": "Crìa nu tag nuovo",
        "tags-create-explanation": "Comme predefinito, 'e tag criate nuove nuove se farranno disponibbele pe ll'ausà ll'utente e re bot",
        "tags-create-tag-name": "Nomme 'e ll'etichetta ('o tag):",
        "tags-apply-not-allowed-one": "'O tag \"$1\" nun è premmesso a se ffà manualmente apprecà.",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|'O tag ccà abbascio nun è|'E tag ccà abbascio nun songo}} premmesse 'e s'apprecà manualmente: $1",
        "tags-update-no-permission": "Nun tenite premmesse pe' putè azzeccà o luvà tag 'e cagnamiento 'a 'e verziune nnividuale o entrate 'o log.",
-       "tags-update-blocked": "Nun putite azzeccà o luvà tag quanno site bluccato/a.",
+       "tags-update-blocked": "Nun putite azzeccà o luvà tag quanno state {{GENDER:$1|bluccato|bluccata}}.",
        "tags-update-add-not-allowed-one": "'O tag \"$1\" nun è premmesso 'e s'azzeccà 'n manuale.",
        "tags-update-add-not-allowed-multi": "{{PLURAL:$2|'O tag ccà abbascio nun è|'E tag ccà abbascio nu so'}} premmesse 'e s'azzeccà manualmente: $1",
        "tags-update-remove-not-allowed-one": "'O tag \"$1\" nun è permesso d' 'o luvà.",
        "revdelete-uname-unhid": "nomme utente fatto avvedè",
        "revdelete-restricted": "restriziune apprecate a ll'ammenistrature",
        "revdelete-unrestricted": "restriziune luvate a ll'ammenistrature",
-       "logentry-block-block": "$1 {{GENDER:$2|ave bluccato}} {{GENDER:$4|$3}} cu na scadenza 'e $5 $6",
+       "logentry-block-block": "$1 {{GENDER:$2|ave fremmato}} {{GENDER:$4|$3}} cu na scadenza 'e $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|ave sbluccato}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|ave cagnato}} 'e mpustaziune 'e blocco pe' {{GENDER:$4|$3}} cu na scadenza 'e $5 $6",
-       "logentry-suppress-block": "$1 {{GENDER:$2|ave bluccato}} {{GENDER:$4|$3}} cu na scadenza 'e $5 $6",
+       "logentry-suppress-block": "$1 {{GENDER:$2|ave fremmato}} {{GENDER:$4|$3}} cu na scadenza 'e $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|cagnaje}} 'e mpustaziune 'e blocco 'e {{GENDER:$4|$3}} ch' 'ammaturasse a nu $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|ave mpurtato}} $3 pe' bbìa d' 'a carreca",
        "logentry-import-upload-details": "$1 {{GENDER:$2|mpurtaje}} $3 pe' carreca 'e file ($4 {{PLURAL:$4|verziona|verziune}})",
index f91ed5b..ea57228 100644 (file)
        "converter-manual-rule-error": "Er is een fout gedetecteerd in een handmatig toegevoegde taalconversieregel.",
        "undo-success": "Deze bewerking kan ongedaan gemaakt worden.\nHieronder staat de tekst waarin de wijziging ongedaan is gemaakt.\nControleer voor het opslaan of het resultaat gewenst is.",
        "undo-failure": "De wijziging kan niet ongedaan gemaakt worden vanwege andere strijdige wijzigingen.",
+       "undo-main-slot-only": "De wijziging kan niet ongedaan gemaakt wordenomdat deze inhoud bevat die niet in het hoofdslot bevind.",
        "undo-norev": "De bewerking kon niet ongedaan gemaakt worden, omdat die niet bestaat of is verwijderd.",
        "undo-nochange": "De bewerking lijkt al ongedaan gemaakt te zijn.",
        "undo-summary": "Versie $1 van [[Special:Contributions/$2|$2]] ([[User talk:$2|overleg]]) ongedaan gemaakt",
        "rcfilters-activefilters": "Actieve filters",
        "rcfilters-activefilters-hide": "Verbergen",
        "rcfilters-activefilters-show": "Weergeven",
+       "rcfilters-activefilters-hide-tooltip": "Verberg actieve filters",
+       "rcfilters-activefilters-show-tooltip": "Toon active filters",
        "rcfilters-advancedfilters": "Geavanceerde filters",
        "rcfilters-limit-title": "Resultaten om te tonen",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|wijziging|wijzigingen}}, $2",
index fde0384..f51ac71 100644 (file)
        "mw-widgets-dateinput-placeholder-month": "ÅÅÅÅ-MM",
        "mw-widgets-titleinput-description-new-page": "sida finst ikkje enno",
        "mw-widgets-titleinput-description-redirect": "omdirigering til $1",
+       "mw-widgets-categoryselector-add-category-placeholder": "Legg til ein kategori …",
        "mw-widgets-usersmultiselect-placeholder": "Legg til fleire …",
        "date-range-from": "Frå dato:",
        "date-range-to": "Til dato:",
index 45fe433..60c36a9 100644 (file)
        "password-login-forbidden": "Wykorzystanie tej nazwy użytkownika lub hasła zostało zabronione.",
        "mailmypassword": "Zresetuj hasło",
        "passwordremindertitle": "Nowe tymczasowe hasło do {{GRAMMAR:D.lp|{{SITENAME}}}}",
-       "passwordremindertext": "Ktoś (prawdopodobnie Ty, spod adresu IP $1)\npoprosił o przesłanie nowego hasła do {{GRAMMAR:D.lp|{{SITENAME}}}} ($4).\nDla użytkownika „$2” zostało wygenerowane tymczasowe hasło i jest nim „$3”.\nJeśli było to zamierzone działanie, to po zalogowaniu się, musisz podać nowe hasło.\nTymczasowe hasło wygaśnie za {{PLURAL:$5|1 dzień|$5 dni}}.\n\nJeśli to nie Ty prosiłeś o przesłanie hasła lub przypomniałeś sobie hasło i nie chcesz go zmieniać, wystarczy, że zignorujesz tę wiadomość i dalej będziesz się posługiwać swoim dotychczasowym hasłem.",
+       "passwordremindertext": "Ktoś (z adresu IP $1) poprosił o przesłanie nowego hasła do {{GRAMMAR:D.lp|{{SITENAME}}}} ($4).\nDla użytkownika „$2” zostało wygenerowane tymczasowe hasło „$3”.\nJeśli było to zamierzone działanie, po zalogowaniu się, musisz podać nowe hasło.\nTymczasowe hasło wygaśnie za {{PLURAL:$5|1 dzień|$5 dni}}.\n\nJeśli to ktoś inny prosił o przesłanie hasła lub przypomniałeś sobie hasło i nie chcesz go zmieniać, wystarczy, że zignorujesz tę wiadomość i dalej będziesz się posługiwał swoim dotychczasowym hasłem.",
        "noemail": "Brak zdefiniowanego adresu e‐mail dla użytkownika „$1”.",
        "noemailcreate": "Musisz podać prawidłowy adres e‐mail",
        "passwordsent": "Nowe hasło zostało wysłane na adres e‐mail użytkownika „$1”.\nPo otrzymaniu go zaloguj się ponownie.",
        "expansion-depth-exceeded-warning": "Strona przekroczyła głębokość rozbudowy",
        "parser-unstrip-loop-warning": "Wykryto nieskończoną pętlę",
        "unstrip-depth-warning": "Przekroczono maksymalną głębokość zagnieżdżania ($1)",
+       "unstrip-depth-category": "Strony, które przekraczają limit zagnieżdżenia",
        "unstrip-size-warning": "Przekroczono maksymalną głębokość zagnieżdżania ($1)",
+       "unstrip-size-category": "Strony, które przekraczają dopuszczalny rozmiar dla funkcji unstrip",
        "converter-manual-rule-error": "Błąd w językowych regułach konwersji",
        "undo-success": "Edycja może zostać wycofana. Porównaj ukazane poniżej różnice między wersjami, a następnie zapisz zmiany.",
        "undo-failure": "Edycja nie może zostać wycofana z powodu konfliktu z wersjami pośrednimi.",
+       "undo-main-slot-only": "Zmiany nie można cofnąć, ponieważ dotyczy treści znajdujących się poza głównym wątkiem.",
        "undo-norev": "Edycja nie może być cofnięta, ponieważ nie istnieje lub została usunięta.",
        "undo-nochange": "Wygląda na to, że edycja została już anulowana.",
        "undo-summary": "Anulowanie wersji $1 autora [[Special:Contributions/$2|$2]] ([[User talk:$2|dyskusja]])",
        "rcfilters-activefilters": "Aktywne filtry",
        "rcfilters-activefilters-hide": "Ukryj",
        "rcfilters-activefilters-show": "Pokaż",
+       "rcfilters-activefilters-hide-tooltip": "Ukryj obszar aktywnych filtrów",
+       "rcfilters-activefilters-show-tooltip": "Pokaż obszar aktywnych filtrów",
        "rcfilters-advancedfilters": "Zaawansowane filtry",
        "rcfilters-limit-title": "Wyników do pokazania",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|zmiana|zmiany|zmian}}, $2",
        "rcfilters-watchlist-showupdated": "<strong>Wytłuszczono</strong> strony, których nie odwiedził{{GENDER:|e|a|e}}ś od czasu zapisania ostatnich zmian.",
        "rcfilters-preference-label": "Wyłącz ulepszenia strony Ostatnich zmian",
        "rcfilters-preference-help": "Wycofuje wszystkie zmiany interfejsu z 2017 i narzędzia dodane od tamtej pory.",
+       "rcfilters-watchlist-preference-label": "Ukryj ulepszoną wersję listy obserwowanych",
+       "rcfilters-watchlist-preference-help": "Wycofaj zmiany wyglądu interfejsu z 2017 i wszystkie narzędzia dodane wtedy i od tego czasu.",
        "rcfilters-filter-showlinkedfrom-label": "Pokaż zmiany na stronach linkowanych z",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Strony linkowane z</strong> zaznaczonej strony",
        "rcfilters-filter-showlinkedto-label": "Pokaż zmiany na stronach linkujących do",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bajt|bajty|bajtów}}",
        "limitreport-expansiondepth": "Największa głębokość ekspansji",
        "limitreport-expensivefunctioncount": "Liczba wywołań kosztownych funkcji parsera",
+       "limitreport-unstrip-depth": "Głębokość rekurencji funkcji unstrip",
+       "limitreport-unstrip-size": "Rozmiar dla funkcji unstrip po rozwinięciu",
        "limitreport-unstrip-size-value": "$1/$2 {{PLURAL:$2|bajt|bajty|bajtów}}",
        "expandtemplates": "Rozwijanie szablonów",
        "expand_templates_intro": "We wprowadzonym na tej stronie tekście źródłowym zostaną rozwinięte rekurencyjnie wszystkie szablony.\nRozwinięte także zostaną funkcje parsera takie jak\n<code><nowiki>{{</nowiki>#language:…}}</code> i zmienne jak\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nW zasadzie rozwijane jest prawie wszystko w podwójnych nawiasach klamrowych.",
index a77ff2d..d9b41c5 100644 (file)
                        "Trigonometria87",
                        "RadiX",
                        "Fitoschido",
-                       "Ed g2s"
+                       "Ed g2s",
+                       "Matěj Suchánek"
                ]
        },
        "tog-underline": "Ligação sublinhada:",
        "createacct-loginerror": "A conta foi criada com êxito, mas não pôde ser autenticado automaticamente. Por favor, faça o [[Special:UserLogin|início de sessão manualmente]].",
        "noname": "Você não colocou um nome de usuário válido.",
        "loginsuccesstitle": "Autenticado",
-       "loginsuccess": "'''Agora você está {{GENDER:autenticado|autenticada}} ao wiki {{SITENAME}} como \"$1\"'''.",
+       "loginsuccess": "'''Agora você está {{GENDER:|autenticado|autenticada}} ao wiki {{SITENAME}} como \"$1\"'''.",
        "nosuchuser": "Não existe nenhum usuário com o nome \"$1\".\nOs nomes de usuário são sensíveis a letras maiúsculas.\nVerifique se digitou corretamente ou [[Special:CreateAccount|crie uma nova conta]].",
        "nosuchusershort": "Não existe um usuário com o nome \"$1\". Verifique o nome que introduziu.",
        "nouserspecified": "Você precisa especificar um nome de usuário.",
        "rcfilters-activefilters": "Filtros ativos",
        "rcfilters-activefilters-hide": "Ocultar",
        "rcfilters-activefilters-show": "Exibir",
+       "rcfilters-activefilters-hide-tooltip": "Ocultar a área dos filtros ativos",
+       "rcfilters-activefilters-show-tooltip": "Mostrar a área dos filtros ativos",
        "rcfilters-advancedfilters": "Filtros avançados",
        "rcfilters-limit-title": "Resultados para mostrar",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|mudança|mudanças}}, $2",
index eed76f1..db51aa6 100644 (file)
@@ -87,7 +87,7 @@
        "tog-hidecategorization": "Ocultar categorização de páginas",
        "tog-extendwatchlist": "Listagem expandida de todas as mudanças às páginas vigiadas, não apenas das mais recentes",
        "tog-usenewrc": "Agrupar alterações por página nas mudanças recentes e páginas vigiadas",
-       "tog-numberheadings": "Auto-numerar cabeçalhos",
+       "tog-numberheadings": "Numerar cabeçalhos automaticamente",
        "tog-showtoolbar": "Mostrar barra de edição",
        "tog-editondblclick": "Editar páginas quando houver um clique duplo",
        "tog-editsectiononrightclick": "Possibilitar a edição de secções por clique com o botão direito no título da secção",
        "protect_change": "alterar",
        "unprotect": "Alterar proteção",
        "newpage": "Página nova",
-       "talkpagelinktext": "Discussão",
+       "talkpagelinktext": "discussão",
        "specialpage": "Página especial",
        "personaltools": "Ferramentas pessoais",
        "talk": "Discussão",
        "viewhelppage": "Ver página de ajuda",
        "categorypage": "Ver página de categoria",
        "viewtalkpage": "Ver discussão",
-       "otherlanguages": "Noutros idiomas",
+       "otherlanguages": "Noutras línguas",
        "redirectedfrom": "(Redirecionado de $1)",
        "redirectpagesub": "Página de redirecionamento",
        "redirectto": "Redireciona para:",
-       "lastmodifiedat": "Esta página foi editada pela última vez à(s) $2 de $1.",
+       "lastmodifiedat": "Esta página foi editada pela última vez às $2 de $1.",
        "viewcount": "Esta página foi acedida {{PLURAL:$1|uma vez|$1 vezes}}.",
        "protectedpage": "Página protegida",
        "jumpto": "Ir para:",
        "sort-descending": "Ordenar por ordem descendente",
        "sort-ascending": "Ordenar por ordem ascendente",
        "nstab-main": "Página",
-       "nstab-user": "Página d{{GENDER:{{BASEPAGENAME}}|o utilizador|a utilizadora|e utilizador(a)}}",
+       "nstab-user": "Página {{GENDER:{{BASEPAGENAME}}|do utilizador|da utilizadora}}",
        "nstab-media": "Multimédia",
        "nstab-special": "Página especial",
        "nstab-project": "Página do projeto",
        "undo-failure": "Não foi possível desfazer a edição por conflito com alterações intermédias.",
        "undo-norev": "Não foi possível desfazer a edição porque não existe ou foi apagada.",
        "undo-nochange": "A edição parece já ter sido desfeita.",
-       "undo-summary": "Desfez a edição $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|Discussão]])",
+       "undo-summary": "Desfez a edição $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|discussão]])",
        "undo-summary-username-hidden": "Desfez a edição $1 de um utilizador oculto",
        "cantcreateaccount-text": "A criação de contas a partir deste endereço IP (<strong>$1</strong>) foi bloqueada por [[User:$3|$3]].\n\nO motivo apresentado por $3 foi <em>$2</em>",
        "cantcreateaccount-range-text": "A criação de conta a partir dos endereços IP no intervalo <strong>$1</strong>, que inclui o seu endereço IP (<strong>$4</strong>), foi bloqueada por [[User:$3|$3]].\n\nO motivo apresentado por $3 foi <em>$2</em>",
        "rev-deleted-comment": "(resumo da edição suprimido)",
        "rev-deleted-user": "(nome de utilizador removido)",
        "rev-deleted-event": "(registos de detalhes eliminados)",
-       "rev-deleted-user-contribs": "[nome de utilizador(a) ou IP removido do histórico – edição ocultada das contribuições públicas]",
+       "rev-deleted-user-contribs": "[nome de utilizador ou IP removido do histórico – edição ocultada das contribuições públicas]",
        "rev-deleted-text-permission": "Esta revisão de página foi <strong>eliminada</strong>.\nEncontrará detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminações].",
        "rev-suppressed-text-permission": "Esta revisão de página foi <strong>suprimida</strong>.\nPode consultar os detalhes no [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} registo de supressões].",
        "rev-deleted-text-unhide": "Esta revisão de página foi <strong>eliminada</strong>.\nEncontrará detalhes no [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registo de eliminações].\nPode mesmo assim [$1 ver esta revisão] se deseja prosseguir.",
        "gender-unknown": "Ao mencioná-lo, o software irá utilizar palavras de género neutro sempre que possível",
        "gender-male": "Ele é um utilizador",
        "gender-female": "Ela é uma utilizadora",
-       "prefs-help-gender": "Esta preferência é opcional.\nO software usa o seu valor para o endereçar e para o mencionar a outros usando o género gramatical apropriado.\nEsta informação será pública.",
+       "prefs-help-gender": "Esta preferência é opcional.\nO ''software'' usa o valor para se dirigir a si e para o mencionar a outros usando o género gramatical apropriado.\nEsta informação será pública.",
        "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.",
        "userrights-lookup-user": "Selecionar um utilizador",
        "userrights-user-editname": "Introduza um nome de utilizador:",
        "editusergroup": "Carregar grupos do utilizador",
-       "editinguser": "A modificar os privilégios {{GENDER:$1|do utilizador|da utilizadora|do(a) utilizador(a)}}  <strong>[[User:$1|$1]]</strong> $2",
+       "editinguser": "A modificar os privilégios {{GENDER:$1|do utilizador|da utilizadora}}  <strong>[[User:$1|$1]]</strong> $2",
        "viewinguserrights": "A ver os privilégios {{GENDER:$1|do utilizador|da utilizadora}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Editar grupos {{GENDER:$1|do utilizador|da utilizadora}}",
        "userrights-viewusergroup": "Ver grupos {{GENDER:$1|do utilizador|da utilizadora}}",
-       "saveusergroups": "Gravar grupos {{GENDER:$1|do utilizador|da utilizadora|do(a) utilizador(a)}}",
+       "saveusergroups": "Gravar grupos {{GENDER:$1|do utilizador|da utilizadora}}",
        "userrights-groupsmember": "Membro de:",
        "userrights-groupsmember-auto": "Membro implícito de:",
        "userrights-groupsmember-type": "$1",
        "group-suppress": "Supressores",
        "group-all": "(todos)",
        "group-user-member": "{{GENDER:$1|utilizador|utilizadora}}",
-       "group-autoconfirmed-member": "{{GENDER:$1|utilizador autoconfirmado|utilizadora autoconfirmada|utilizador(a) autoconfirmado(a)}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|utilizador autoconfirmado|utilizadora autoconfirmada}}",
        "group-bot-member": "{{GENDER:$1|robô}}",
        "group-sysop-member": "{{GENDER:$1|administrador|administradora}}",
        "group-bureaucrat-member": "{{GENDER:$1|burocrata}}",
-       "group-suppress-member": "{{GENDER:$1|supressor|supressora|supressor(a)}}",
+       "group-suppress-member": "{{GENDER:$1|supressor|supressora}}",
        "grouppage-user": "{{ns:project}}:Utilizadores",
        "grouppage-autoconfirmed": "{{ns:project}}:Autoconfirmados",
        "grouppage-bot": "{{ns:project}}:Robôs",
        "rcfilters-activefilters": "Filtros ativos",
        "rcfilters-activefilters-hide": "Ocultar",
        "rcfilters-activefilters-show": "Mostrar",
+       "rcfilters-activefilters-hide-tooltip": "Ocultar a área dos filtros ativos",
+       "rcfilters-activefilters-show-tooltip": "Mostrar a área dos filtros ativos",
        "rcfilters-advancedfilters": "Filtros avançados",
        "rcfilters-limit-title": "Resultados a mostrar",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|mudança|mudanças}}, $2",
        "uploadnewversion-linktext": "Carregar uma nova versão deste ficheiro",
        "shared-repo-from": "de $1",
        "shared-repo": "um repositório partilhado",
+       "filepage.css": "/* Os estilos CSS colocados aqui serão incluídos na página de descrição do ficheiro, também incluída nas wikis clientes externas */",
        "upload-disallowed-here": "Não pode substituir este ficheiro.",
        "filerevert": "Reverter $1",
        "filerevert-legend": "Reverter ficheiro",
        "listusersfrom": "Mostrar utilizadores começados por:",
        "listusers-submit": "Mostrar",
        "listusers-noresult": "Não foram encontrados utilizadores.",
-       "listusers-blocked": "({{GENDER:$1|bloqueado|bloqueada|bloqueado(a)}})",
+       "listusers-blocked": "({{GENDER:$1|bloqueado|bloqueada}})",
        "activeusers": "Utilizadores ativos",
        "activeusers-intro": "Esta é uma lista dos utilizadores com qualquer tipo de atividade {{PLURAL:$1|no último dia|nos últimos $1 dias}}.",
        "activeusers-count": "$1 {{PLURAL:$1|ação|ações}} {{PLURAL:$3|no último dia|nos últimos $3 dias}}",
        "nowikiemailtext": "Este utilizador optou por não receber correio eletrónico de outros utilizadores.",
        "emailnotarget": "O nome do destinatário não existe ou é inválido.",
        "emailtarget": "Introduza o nome do destinatário",
-       "emailusername": "Utilizador(a):",
+       "emailusername": "Utilizador:",
        "emailusernamesubmit": "Enviar",
        "email-legend": "Enviar uma mensagem a outro utilizador da wiki {{SITENAME}}",
        "emailfrom": "De:",
        "mywatchlist": "Páginas vigiadas",
        "watchlistfor2": "Para $1 $2",
        "nowatchlist": "A sua lista de páginas vigiadas está vazia.",
-       "watchlistanontext": "Por favor, inicie sessão para ver ou editar itens da sua lista de páginas vigiadas.",
+       "watchlistanontext": "Para ver ou editar entradas da sua lista de páginas vigiadas, inicie uma sessão, por favor.",
        "watchnologin": "Não está autenticado(a)",
        "addwatch": "Adicionar às páginas vigiadas",
-       "addedwatchtext": "\"[[:$1]]\" e a sua página de discussão foram adicionadas à sua [[Special:Watchlist|lista de páginas vigiadas]].",
-       "addedwatchtext-talk": "\"[[:$1]]\" e a sua página associada foram adicionadas à sua lista de [[Special:Watchlist|páginas vigiadas]].",
-       "addedwatchtext-short": "A página \"$1\" foi adicionada à sua lista de vigiadas.",
+       "addedwatchtext": "\"[[:$1]]\" e a respetiva página de discussão foram adicionadas à sua [[Special:Watchlist|lista de páginas vigiadas]].",
+       "addedwatchtext-talk": "\"[[:$1]]\" e a respetiva página associada foram adicionadas à sua lista de [[Special:Watchlist|páginas vigiadas]].",
+       "addedwatchtext-short": "A página \"$1\" foi adicionada às suas páginas vigiadas.",
        "removewatch": "Remover das páginas vigiadas",
-       "removedwatchtext": "\"[[:$1]]\" e a sua página de discussão foram removidas da sua lista de [[Special:Watchlist|páginas vigiadas]].",
-       "removedwatchtext-talk": "\"[[:$1]]\" e a sua página associada foram removidas da sua lista de [[Special:Watchlist|páginas vigiadas]].",
-       "removedwatchtext-short": "A página \"$1\" foi removida da sua lista de vigiadas.",
+       "removedwatchtext": "\"[[:$1]]\" e a respetiva página de discussão foram removidas da sua lista de [[Special:Watchlist|páginas vigiadas]].",
+       "removedwatchtext-talk": "\"[[:$1]]\" e a respetiva página associada foram removidas da sua lista de [[Special:Watchlist|páginas vigiadas]].",
+       "removedwatchtext-short": "A página \"$1\" foi removida das suas páginas vigiadas.",
        "watch": "Vigiar",
        "watchthispage": "Vigiar esta página",
        "unwatch": "Desinteressar-se",
        "unwatchthispage": "Parar de vigiar esta página",
        "notanarticle": "Não é uma página de conteúdo",
-       "notvisiblerev": "Edição eliminada",
+       "notvisiblerev": "A última revisão feita por um utilizador diferente foi eliminada",
        "watchlist-details": "{{PLURAL:$1|Existe $1 página|Existem $1 páginas}} na sua lista de páginas vigiadas (mais as páginas de discussão).",
        "wlheader-enotif": "A notificação por correio eletrónico está ativa.",
        "wlheader-showupdated": "As páginas modificadas desde a última vez que as visitou aparecem destacadas a <strong>negrito</strong>.",
        "deletepage": "Eliminar página",
        "confirm": "Confirmar",
        "excontent": "o conteúdo era: \"$1\"",
-       "excontentauthor": "o conteúdo era: \"$1\", e {{GENDER:$2|o único editor|a única editora|o(a) único(a) editor(a)}} era [[Special:Contributions/$2|$2]] ([[User talk:$2|discussão]])",
+       "excontentauthor": "o conteúdo era: \"$1\", e {{GENDER:$2|o único editor|a única editora}} era [[Special:Contributions/$2|$2]] ([[User talk:$2|discussão]])",
        "exbeforeblank": "o conteúdo antes de esvaziar era: \"$1\"",
        "delete-confirm": "Eliminar \"$1\"",
        "delete-legend": "Eliminar",
        "undelete-error-long": "Foram encontrados erros ao tentar restaurar o ficheiro:\n\n$1",
        "undelete-show-file-confirm": "Tem a certeza de que quer ver a revisão eliminada do ficheiro \"<nowiki>$1</nowiki>\" de $2 às $3?",
        "undelete-show-file-submit": "Sim",
-       "namespace": "Domínio:",
+       "namespace": "Espaço nominal:",
        "invert": "Inverter seleção",
        "tooltip-invert": "Marque esta caixa para esconder as alterações a páginas no domínio selecionado (e no domínio associado, se escolheu fazê-lo)",
        "tooltip-whatlinkshere-invert": "Marque esta caixa de seleção para ocultar ligações de páginas dentro do domínio selecionado.",
-       "namespace_association": "Domínio associado",
+       "namespace_association": "Espaço nominal associado",
        "tooltip-namespace_association": "Marque esta caixa para incluir também o domínio de conteúdo ou de discussão associado à sua seleção",
        "blanknamespace": "(Principal)",
        "contributions": "Contribuições {{GENDER:$1|do utilizador|da utilizadora}}",
        "javascripttest": "Teste de JavaScript",
        "javascripttest-pagetext-unknownaction": "Ação \"$1\" desconhecida.",
        "javascripttest-qunit-intro": "Consulte a [ $1 documentação de testes] no mediawiki.org.",
-       "tooltip-pt-userpage": "A sua página de {{GENDER:|utilizador|utilizadora|utilizador(a)}}",
+       "tooltip-pt-userpage": "A sua página de {{GENDER:|utilizador|utilizadora}}",
        "tooltip-pt-anonuserpage": "A página de utilizador para o endereço IP que está a usar",
        "tooltip-pt-mytalk": "A {{GENDER:|sua}} página de discussão",
        "tooltip-pt-anontalk": "Discussão sobre edições feitas a partir deste endereço IP",
        "tooltip-t-recentchangeslinked": "Mudanças recentes nas páginas para as quais esta contém hiperligações",
        "tooltip-feed-rss": "''Feed'' RSS desta página",
        "tooltip-feed-atom": "''Feed'' Atom desta página",
-       "tooltip-t-contributions": "Ver as contribuições {{GENDER:$1|deste utilizador|desta utilizadora|deste(a) utilizador(a)}}",
-       "tooltip-t-emailuser": "Enviar uma mensagem de correio a {{GENDER:$1|este utilizador|esta utilizadora|este(a) utilizador(a)}}",
+       "tooltip-t-contributions": "Ver as contribuições {{GENDER:$1|deste utilizador|desta utilizadora}}",
+       "tooltip-t-emailuser": "Enviar uma mensagem de correio a {{GENDER:$1|este utilizador|esta utilizadora}}",
        "tooltip-t-info": "Mais informações sobre esta página",
        "tooltip-t-upload": "Carregar ficheiros",
        "tooltip-t-specialpages": "Lista de páginas especiais",
        "interlanguage-link-title-nonlang": "$1 – $2",
        "common.css": "/* Código CSS colocado aqui será aplicado a todos os temas */",
        "print.css": "/* Código CSS colocado aqui afectará as impressões */",
-       "noscript.css": "/* Os estilos CSS colocados aqui afetarão os utilizadores que tenham o JavaScript desativado em seus navegadores */",
+       "noscript.css": "/* Os estilos CSS colocados aqui afetarão os utilizadores que tenham o JavaScript desativado */",
+       "group-autoconfirmed.css": "/* Os estilos CSS colocados aqui só afetarão os utilizadores autoconfirmados */",
+       "group-user.css": "/* Os estilos CSS colocados aqui só afetarão os utilizadores registados */",
+       "group-bot.css": "/* Os estilos CSS colocados aqui só afetarão robôs */",
+       "group-sysop.css": "/* Os estilos CSS colocados aqui só afetarão os administradores */",
+       "group-bureaucrat.css": "/* Os estilos CSS colocados aqui só afetarão os burocratas */",
        "common.json": "/* Qualquer JSON colocado aqui será carregado para todos os utilizadores em cada carregamento de página. */",
        "common.js": "/* Código Javascript colocado aqui será carregado para todos os utilizadores em cada carregamento de página */",
+       "group-autoconfirmed.js": "/* O código JavaScript colocado aqui só será carregado para utilizadores autoconfirmados */",
+       "group-user.js": "/* O código JavaScript colocado aqui só será carregado para utilizadores registados */",
+       "group-bot.js": "/* O código JavaScript colocado aqui só será carregado para robôs */",
+       "group-sysop.js": "/* O código JavaScript colocado aqui só será carregado para administradores */",
+       "group-bureaucrat.js": "/* O código JavaScript colocado aqui só será carregado para burocratas */",
        "anonymous": "{{PLURAL:$1|Utilizador anónimo|Utilizadores anónimos}} da wiki {{SITENAME}}",
        "siteuser": "$1 da wiki {{SITENAME}}",
        "anonuser": "utilizador anónimo $1 da wiki {{SITENAME}}",
-       "lastmodifiedatby": "Esta página foi editada pela última vez à(s) $2 de $1 por $3.",
+       "lastmodifiedatby": "Esta página foi editada pela última vez às $2 de $1 por $3.",
        "othercontribs": "Baseado no trabalho de $1.",
        "others": "outros",
        "siteusers": "{{PLURAL:$2|um utilizador|$2 utilizadores}} da wiki {{SITENAME}} ($1)",
        "exif-compression-2": "CCITT Grupo 3 1-D Codificação Unidimensional Huffman Modificado e Run Length Encoding",
        "exif-compression-3": "CCITT Grupo 3 codificação de fax",
        "exif-compression-4": "CCITT Grupo 4 codificação de fax",
+       "exif-compression-6": "JPEG (antigo)",
        "exif-copyrighted-true": "Direitos de autor reservados",
        "exif-copyrighted-false": "Estado dos direitos de autor indefinido",
-       "exif-photometricinterpretation-1": "Preto e branco (Preto é 0)",
+       "exif-photometricinterpretation-0": "Preto e branco (branco é 0)",
+       "exif-photometricinterpretation-1": "Preto e branco (preto é 0)",
+       "exif-photometricinterpretation-3": "Palete",
+       "exif-photometricinterpretation-4": "Máscara de transparência",
+       "exif-photometricinterpretation-5": "Separados (provavelmente CMYK)",
+       "exif-photometricinterpretation-9": "CIE L*a*b* (codificação ICC)",
+       "exif-photometricinterpretation-10": "CIE L*a*b* (codificação ITU)",
+       "exif-photometricinterpretation-32803": "Matriz de filtros de cores",
+       "exif-photometricinterpretation-34892": "Linear não processado",
        "exif-unknowndate": "Data desconhecida",
        "exif-orientation-1": "Normal",
        "exif-orientation-2": "Espelhamento horizontal",
        "exif-orientation-8": "Rodado 90° no sentido horário",
        "exif-planarconfiguration-1": "formato irregular",
        "exif-planarconfiguration-2": "formato plano",
+       "exif-xyresolution-i": "$1 ppp",
        "exif-xyresolution-c": "$1 pt/cm",
        "exif-colorspace-65535": "Cor não calibrada",
        "exif-componentsconfiguration-0": "não existe",
        "exif-meteringmode-1": "Média",
        "exif-meteringmode-2": "MédiaPonderadaAoCentro",
        "exif-meteringmode-3": "Ponto",
-       "exif-meteringmode-4": "MultiPonto",
+       "exif-meteringmode-4": "Multiponto",
        "exif-meteringmode-5": "Padrão",
        "exif-meteringmode-6": "Parcial",
        "exif-meteringmode-255": "Outro",
        "autosumm-changed-redirect-target": "Alteração do redirecionamento de [[$1]] para [[$2]]",
        "autosumm-new": "Criou a página com \"$1\"",
        "autosumm-newblank": "Página em branco criada",
-       "lag-warn-normal": "Alterações realizadas {{PLURAL:$1|no último segundo|nos últimos $1 segundos}} podem não constar desta lista.",
-       "lag-warn-high": "Devido a latência elevada no acesso ao servidor da base de dados, as alterações realizadas {{PLURAL:$1|no último segundo|nos últimos $1 segundos}} podem não constar desta lista.",
+       "size-pixel": "$1 {{PLURAL:$1|píxel|píxeis}}",
+       "lag-warn-normal": "As alterações realizadas {{PLURAL:$1|no último segundo|nos últimos $1 segundos}} podem não constar desta lista.",
+       "lag-warn-high": "Devido a uma latência elevada no acesso ao servidor da base de dados, as alterações realizadas {{PLURAL:$1|no último segundo|nos últimos $1 segundos}} podem não constar desta lista.",
        "watchlistedit-normal-title": "Editar lista de páginas vigiadas",
        "watchlistedit-normal-legend": "Remover páginas da lista de páginas vigiadas",
        "watchlistedit-normal-explain": "As suas páginas vigiadas são listadas abaixo.\nPara remover uma página, marque a caixa de seleção correspondente e clique o botão \"{{int:Watchlistedit-normal-submit}}\".\nTambém pode [[Special:EditWatchlist/raw|editar a lista de páginas vigiadas em forma de texto]].",
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|protegeu}} $3 $4 [em cascata]",
        "logentry-protect-modify": "$1 {{GENDER:$2|alterou}} o nível de proteção para $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|alterou}} o nível de proteção para $3 $4 [em cascata]",
-       "logentry-rights-rights": "$1 {{GENDER:$2|modificou}} os privilégios {{GENDER:$3|do utilizador $3|da utilizadora $3|do(a) utilizador(a) $3}} de $4 para $5",
+       "logentry-rights-rights": "$1 {{GENDER:$2|modificou}} os privilégios {{GENDER:$3|do utilizador|da utilizadora}} $3 de $4 para $5",
        "logentry-rights-rights-legacy": "$1 alterou os grupos de $3",
        "logentry-rights-autopromote": "$1 foi automaticamente {{GENDER:$2|promovido|promovida}} de $4 a $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|carregou}} $3",
        "authmanager-email-label": "Correio eletrónico",
        "authmanager-email-help": "Endereço de correio eletrónico",
        "authmanager-realname-label": "Nome verdadeiro",
-       "authmanager-realname-help": "Nome verdadeiro do(a) utilizador(a)",
+       "authmanager-realname-help": "Nome verdadeiro do utilizador",
        "authmanager-provider-password": "Autenticação baseada em palavra-passe",
        "authmanager-provider-password-domain": "Autenticação baseada em palavra-passe e domínio",
        "authmanager-provider-temporarypassword": "Palavra-passe temporária",
index 1af8000..4bc493c 100644 (file)
@@ -10,7 +10,8 @@
                        "Macofe",
                        "Purodha",
                        "Fitoschido",
-                       "Ruthven"
+                       "Ruthven",
+                       "Matěj Suchánek"
                ]
        },
        "tog-underline": "Collegaminde sottolinèate:",
        "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.\nCe è abbesogne, [[Special:ResetTokens|'u puè azzerà]].",
        "savedprefs": "Le preferenze tue onne state aggiornete.",
-       "savedrights": "Le gruppe utinde de {{GENDER:$1$1}} onne state reggistrate.",
+       "savedrights": "Le gruppe utinde de {{GENDER:$1|$1}} onne state reggistrate.",
        "timezonelegend": "Orarie d'a zone:",
        "localtime": "Orarie lochele:",
        "timezoneuseserverdefault": "Ause 'u valore de default de uicchi ($1)",
        "tooltip-feed-rss": "RSS feed pe sta pàgene",
        "tooltip-feed-atom": "Atom feed pe sta pàgene",
        "tooltip-t-contributions": "Vide l'elenghe de le condrebbute de {{GENDER:$1|stu utende}}",
-       "tooltip-t-emailuser": "Manne n'e-mail a {{GENDER:$1stu utende}}",
+       "tooltip-t-emailuser": "Manne n'e-mail a {{GENDER:$1|stu utende}}",
        "tooltip-t-info": "Cchiù 'mbormaziune sus a sta pàgene",
        "tooltip-t-upload": "Careche le file",
        "tooltip-t-specialpages": "Liste de tutte le pàggene speciale",
index 5994991..15ee8d6 100644 (file)
        "converter-manual-rule-error": "Ошибка в ручном правиле преобразования языка",
        "undo-success": "Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.",
        "undo-failure": "Правка не может быть отменена из-за несовместимости промежуточных изменений.",
+       "undo-main-slot-only": "Правка не может быть отменена, поскольку оно включает контент вне основного слота.",
        "undo-norev": "Правка не может быть отменена, так как её не существует или она была удалена.",
        "undo-nochange": "Правка, похоже, уже была отменена.",
        "undo-summary": "Отмена правки $1, сделанной [[Special:Contributions/$2|$2]] ([[User talk:$2|обсуждение]])",
        "rcfilters-activefilters": "Активные фильтры",
        "rcfilters-activefilters-hide": "Скрыть",
        "rcfilters-activefilters-show": "Показать",
+       "rcfilters-activefilters-hide-tooltip": "Скрыть область активных фильтров",
+       "rcfilters-activefilters-show-tooltip": "Показать область активных фильтров",
        "rcfilters-advancedfilters": "Расширенные фильтры",
        "rcfilters-limit-title": "Результаты для показа",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|изменение|изменения|изменений}}, $2",
index b66b47c..f4b87ed 100644 (file)
@@ -16,7 +16,8 @@
                        "Xð",
                        "Сербијана",
                        "Acamicamacaraca",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "BadDog"
                ]
        },
        "tog-underline": "Podvuci linkove:",
        "allmessagesname": "Naziv",
        "allmessagesdefault": "Uobičajeni tekst",
        "allmessagescurrent": "Trenutni tekst",
-       "allmessagestext": "Ovo je spisak svih sistemskih poruka u dostupnih u MediaWiki imenskom prostoru.\nMolimo posjetite [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki lokalizaciju] i [https://translatewiki.net translatewiki.net] ako želite doprinijeti općoj lokalizaciji MediaWikija.",
+       "allmessagestext": "Ovo je spisak sistemskih poruka u dostupnih u MediaWiki imenskom prostoru.\nMolimo posjetite [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki lokalizaciju] i [https://translatewiki.net translatewiki.net] ako želite doprinijeti općoj lokalizaciji MediaWikija.",
        "allmessagesnotsupportedDB": "Ova stranica ne može biti korištena jer je '''$wgUseDatabaseMessages''' isključen.",
        "allmessages-filter-legend": "Filter",
        "allmessages-filter": "Filter po stanju podešavanja:",
index 69a38b4..f1ff7f0 100644 (file)
@@ -37,7 +37,8 @@
                        "LacoR",
                        "Xð",
                        "Pmikolas44",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "Matěj Suchánek"
                ]
        },
        "tog-underline": "Podčiarkovať odkazy:",
        "watcherrortext": "Vyskytla sa chyba počas zmeny nastavenia vášho zoznamu sledovaných pre „$1“.",
        "enotif_reset": "Označiť všetky stránky ako „navštívené“",
        "enotif_impersonal_salutation": "používateľ {{GRAMMAR:genitív|{{SITENAME}}}}",
-       "enotif_subject_deleted": "Stránku {{GENDER:genitív|{{SITENAME}}}} „$1“ odstránil používateľ $2",
-       "enotif_subject_created": "Stránku {{GENDER:genitív|{{SITENAME}}}} „$1“ vytvoril používateľ $2",
-       "enotif_subject_moved": "Stránku {{GENDER:genitív|{{SITENAME}}}} „$1“ presunul používateľ $2",
-       "enotif_subject_restored": "Stránku {{GENDER:genitív|{{SITENAME}}}} „$1“ obnovil používateľ $2",
-       "enotif_subject_changed": "Stránku {{GENDER:genitív|{{SITENAME}}}} „$1“ zmenil používateľ $2",
+       "enotif_subject_deleted": "Stránku {{GRAMMAR:genitív|{{SITENAME}}}} „$1“ odstránil používateľ {{GENDER:$2|$2}}",
+       "enotif_subject_created": "Stránku {{GRAMMAR:genitív|{{SITENAME}}}} „$1“ vytvoril používateľ {{GENDER:$2|$2}}",
+       "enotif_subject_moved": "Stránku {{GRAMMAR:genitív|{{SITENAME}}}} „$1“ presunul používateľ {{GENDER:$2|$2}}",
+       "enotif_subject_restored": "Stránku {{GRAMMAR:genitív|{{SITENAME}}}} „$1“ obnovil používateľ {{GENDER:$2|$2}}",
+       "enotif_subject_changed": "Stránku {{GRAMMAR:genitív|{{SITENAME}}}} „$1“ zmenil používateľ {{GENDER:$2|$2}}",
        "enotif_body_intro_deleted": "Stránka {{GENDER:genitív|{{SITENAME}}}} „$1“ zmazal $PAGEEDITDATE používateľ $2, pozri $3.",
        "enotif_body_intro_created": "Stránka {{GENDER:genitív|{{SITENAME}}}} „$1“ vytvoril $PAGEEDITDATE používateľ $2, pozri aktuálnu verziu $3.",
        "enotif_body_intro_moved": "Stránka {{GENDER:genitív|{{SITENAME}}}} „$1“ presunul $PAGEEDITDATE používateľ $2, pozri aktuálnu verziu $3.",
        "ipb-unblock-addr": "Odblokovať $1",
        "ipb-unblock": "Odblokovať používateľa alebo IP adresu",
        "ipb-blocklist": "Zobraziť existujúce blokovania",
-       "ipb-blocklist-contribs": "Príspevky {{GENDER:redaktora|redaktorky}} $1",
+       "ipb-blocklist-contribs": "Príspevky {{GENDER:$1|redaktora|redaktorky}} $1",
        "ipb-blocklist-duration-left": "zostáva $1",
        "unblockip": "Odblokovať používateľa",
        "unblockiptext": "Použite tento formulár na obnovenie možnosti zápisov\nz/od momentálne zablokovanej IP adresy/používateľa.",
index 90ec173..9f8a28b 100644 (file)
@@ -15,7 +15,8 @@
                        "Matma Rex",
                        "NegativeTwelveDollars",
                        "Xð",
-                       "HairyFotr"
+                       "HairyFotr",
+                       "Upwinxp"
                ]
        },
        "tog-underline": "Podčrtavanje povezav:",
        "converter-manual-rule-error": "Odkril sem napako v ročnem pravilu pretvorbe jezikov",
        "undo-success": "Urejanje ste razveljavili. Prosimo, preverite prikazano primerjavo redakcij in, če ustrezajo, shranite spremembe.",
        "undo-failure": "Zaradi navzkrižij urejanj, ki so se vmes pojavila, tega urejanja ni moč razveljaviti.",
+       "undo-main-slot-only": "Urejanja nismo mogli razveljaviti, ker vključuje vsebino zunaj glavne reže.",
        "undo-norev": "Urejanja ni mogoče razveljaviti, ker ne obstaja ali je bilo izbrisano.",
        "undo-nochange": "Zdi se, da je urejanje nekdo že razveljavil.",
        "undo-summary": "Redakcija $1 uporabnika [[Special:Contributions/$2|$2]] ([[User talk:$2|pogovor]]) razveljavljena",
        "rcfilters-activefilters": "Dejavni filtri",
        "rcfilters-activefilters-hide": "Skrij",
        "rcfilters-activefilters-show": "Prikaži",
+       "rcfilters-activefilters-hide-tooltip": "Skrij območje Aktivnih filtrov",
+       "rcfilters-activefilters-show-tooltip": "Pokaži območje Aktivnih filtrov",
        "rcfilters-advancedfilters": "Napredni filtri",
        "rcfilters-limit-title": "Rezultati za prikaz",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|sprememba|spremembi|spremembe|sprememb}}, $2",
        "exif-lightsource-19": "Običajna svetloba C",
        "exif-lightsource-24": "ISO-ateljejski volfram",
        "exif-lightsource-255": "Drugačen",
-       "exif-flash-fired-0": "Flash se ni sprožil",
-       "exif-flash-fired-1": "Flash se je sprožil",
+       "exif-flash-fired-0": "Bliskavica se ni sprožila",
+       "exif-flash-fired-1": "Bliskavica se je sprožila",
        "exif-flash-return-0": "stroboskop ni uporabil funkcije zaznavanja",
        "exif-flash-return-2": "stroboskop ni zaznal svetlobe",
        "exif-flash-return-3": "stroboskop je zaznal svetlobo",
index d331a95..fe91686 100644 (file)
        "youhavenewmessagesmulti": "Имате нове поруке на $1",
        "editsection": "уреди",
        "editold": "уреди",
-       "viewsourceold": "изворни код",
+       "viewsourceold": "изворни кôд",
        "editlink": "уреди",
-       "viewsourcelink": "изворни код",
+       "viewsourcelink": "изворни кôд",
        "editsectionhint": "Уреди одељак „$1“",
        "toc": "Садржај",
        "showtoc": "прикажи",
        "hidetoc": "сакриј",
-       "collapsible-collapse": "Скупи",
-       "collapsible-expand": "Ð\9fÑ\80икажи",
+       "collapsible-collapse": "скупи",
+       "collapsible-expand": "пÑ\80оÑ\88иÑ\80и",
        "confirmable-confirm": "Да ли {{GENDER:$1|сте}} сигурни?",
        "confirmable-yes": "Да",
        "confirmable-no": "Не",
        "perfcached": "Следећи подаци су кеширани и можда нису ажурирани. У кешу {{PLURAL:$1|је доступан највише један резултат|су доступна највише $1 резултата|је доступно највише $1 резултата}}.",
        "perfcachedts": "Следећи подаци су кеширани и последњи пут ажурирани на датум $2 у $3 ч. У кешу {{PLURAL:$4|је доступан највише један резултат|су доступна највише $4 резултата|је доступно највише $4 резултата}}.",
        "querypage-no-updates": "Ажурирање ове странице је тренутно онемогућено.\nПодаци који се овде налазе могу бити застарели.",
-       "viewsource": "Изворни код",
-       "viewsource-title": "Изворни код за страницу $1",
+       "viewsource": "Изворни кôд",
+       "viewsource-title": "Изворни кôд за страницу $1",
        "actionthrottled": "Радња је успорена",
        "actionthrottledtext": "У циљу борбе против непожељних порука, ограничене су вам измене у одређеном времену, а управо сте прешли то ограничење. Покушајте поново за неколико минута.",
        "protectedpagetext": "Ова страница је закључана за измене и друге радње.",
-       "viewsourcetext": "Можете читати и копирати изворник ове странице.",
-       "viewyourtext": "Можете да погледате и копирате изворник <strong>ваших измена</strong> на овој страници.",
+       "viewsourcetext": "Можете да погледате и копирате изворни кôд ове странице.",
+       "viewyourtext": "Можете да погледате и копирате изворни кôд <strong>Ваших измена</strong> на овој страници.",
        "protectedinterface": "Ова страница садржи текст интерфејса за софтвер на овом викију и заштићена је ради спречавања злоупотребе.\nДа бисте додали или изменили преводе било којег викија, посетите [https://translatewiki.net/ translatewiki.net], пројекат за локализацију Медијавикија.",
        "editinginterface": "<strong>Упозорење:</strong> уређујете страницу која се користи за приказивање текста корисничког окружења.\nИзмене на овој страници ће утицати на све кориснике овог викија.",
        "translateinterface": "Да додате или промените преводе за све викије, посетите [https://translatewiki.net/ Транслејтвики], пројекат за локализацију Медијавикија.",
        "customcssprotected": "Немате дозволу да мењате ову CSS страницу јер садржи лична подешавања другог корисника.",
        "customjsprotected": "Немате дозволу да мењате ову страницу JavaScript јер садржи лична подешавања другог корисника.",
        "mycustomcssprotected": "Немате дозволу за мењање ове CSS странице.",
+       "mycustomjsonprotected": "Немате дозволу за мењање ове JSON странице.",
        "mycustomjsprotected": "Немате дозволу за мењање ове JavaScript странице.",
        "myprivateinfoprotected": "Немате дозволу за мењање ваших личних информација.",
        "mypreferencesprotected": "Немате дозволу за мењање ваших подешавања.",
        "nocookieslogin": "{{SITENAME}} користи колачиће за пријављивање корисника.\nВама су колачићи онемогућени. Омогућите их и покушајте поново.",
        "nocookiesfornew": "Кориснички налог није отворен јер његов извор није потврђен.\nОмогућите колачиће на прегледачу и поново учитајте страницу.",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
+       "createacct-loginerror": "Налог је успешно направљен, али се не можете аутоматски пријавити. Пређите на [[Special:UserLogin|ручно пријављивање]].",
        "noname": "Унели сте неисправно корисничко име.",
        "loginsuccesstitle": "Успешно пријављивање",
        "loginsuccess": "<strong>Пријављени сте на {{SITENAME}} као „$1”.</strong>",
        "wrongpasswordempty": "Нисте унели лозинку. Покушајте поново.",
        "passwordtooshort": "Лозинка мора имати најмање {{PLURAL:$1|један знак|$1 знака|$1 знакова}}.",
        "passwordtoolong": "Лозинке не могу бити дуже од {{PLURAL:$1|$1 знака|$1 знакова}}.",
-       "passwordtoopopular": "ЧеÑ\81Ñ\82о ÐºÐ¾Ñ\80иÑ\88Ñ\9bене Ñ\88иÑ\84Ñ\80е Ð½Ðµ Ð¼Ð¾Ð³Ñ\83 Ð±Ð¸Ñ\82и ÐºÐ¾Ñ\80иÑ\88Ñ\9bене. Ð\9cолимо Ð¸Ð·Ð°Ð±ÐµÑ\80иÑ\82е Ñ\81ложениÑ\98Ñ\83 Ð»Ð¾Ð·Ð¸Ð½ÐºÑ\83.",
+       "passwordtoopopular": "ЧеÑ\81Ñ\82о Ð¸Ð·Ð°Ð±Ñ\80ане Ð»Ð¾Ð·Ð¸Ð½ÐºÐµ Ð½Ðµ Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ñ\81е ÐºÐ¾Ñ\80иÑ\81Ñ\82е. Ð\98забеÑ\80иÑ\82е Ð»Ð¾Ð·Ð¸Ð½ÐºÑ\83 ÐºÐ¾Ñ\98Ñ\83 Ñ\98е Ñ\82еже Ð¿Ð¾Ð³Ð¾Ð´Ð¸Ñ\82и.",
        "password-name-match": "Лозинка се мора разликовати од корисничког имена.",
        "password-login-forbidden": "Коришћење овог корисничког имена и лозинке је забрањено.",
        "mailmypassword": "Ресетуј лозинку",
        "passwordremindertitle": "{{SITENAME}} — привремена лозинка",
-       "passwordremindertext": "Неко, вероватно ви, са IP адресе $1 је затражио нову лозинку на викију {{SITENAME}} ($4).\nСтворена је привремена лозинка за {{GENDER:$2|корисника|корисницу|корисника}} $2 која гласи $3.\nУколико је ово ваш захтев, сада се пријавите и поставите нову лозинку.\nПривремена лозинка истиче за {{PLURAL:$5|један дан|$5 дана}}.\n\nАко је неко други затражио промену лозинке, или сте се сетили ваше лозинке и не желите да је мењате, занемарите ову поруку.",
+       "passwordremindertext": "Неко са IP адресе $1 је затражио нову лозинку на викију {{SITENAME}} ($4).\nСтворена је привремена лозинка за {{GENDER:$2|корисника|корисницу|корисника}} $2 која гласи $3.\nУколико је ово ваш захтев, сада се пријавите и поставите нову лозинку.\nПривремена лозинка истиче за {{PLURAL:$5|један дан|$5 дана}}.\n\nАко је неко други затражио промену лозинке, или сте се сетили ваше лозинке и не желите да је мењате, занемарите ову поруку.",
        "noemail": "Не постоји имејл адреса за {{GENDER:$1|корисника|корисницу}} $1.",
        "noemailcreate": "Морате навести исправну имејл адресу.",
        "passwordsent": "Нова лозинка је послата на имејл адресу {{GENDER:$1|корисника|кориснице|корисника}} $1.\nПријавите се пошто је примите.",
        "blocked-mailpassword": "Ваша IP адреса има забрану уређивања. Ради спречавања злоупотребе, није дозвољено враћање лозинке са ње.",
-       "eauthentsent": "На наведену имејл адресу је послат потврдни код.\nПре него што пошаљемо даљње поруке, пратите упутства с имејла да бисте потврдили да сте Ви отворили налог.",
+       "eauthentsent": "На наведену имејл адресу је послат потврдни кôд.\nПре него што пошаљемо даљње поруке, пратите упутства с имејла да бисте потврдили да сте Ви отворили налог.",
        "throttled-mailpassword": "Порука за промену лозинке је послата у {{PLURAL:$1|1=последњих сат времена|последња $1 сата|последњих $1 сати}}.\nДа бисмо спречили злоупотребу, подсетник шаљемо само једном у року од {{PLURAL:$1|1=сат времена|$1 сата|$1 сати}}.",
        "mailerror": "Грешка при слању поруке: $1",
        "acct_creation_throttle_hit": "Посетиоци овог викија који користе вашу IP адресу су већ отворили {{PLURAL:$1|1=један налог|$1 налога}} претходни $2, што је највећи дозвољени број у том временском периоду.\nЗбог тога посетиоци с ове IP адресе тренутно не могу отворити више налога.",
        "changepassword-throttled": "Превише пута сте покушали да се пријавите.\nМолимо вас да сачекате $1 пре него што покушате поново.",
        "botpasswords": "Лозинке ботова",
        "botpasswords-disabled": "Лозинке ботова су онемогућене.",
+       "botpasswords-no-central-id": "Да би сте користили ботовске лозинке, морате бити пријављени на средишњи налог.",
        "botpasswords-existing": "Постојећа лозинка бота",
        "botpasswords-createnew": "Направи нову лозинку за бота",
        "botpasswords-editexisting": "Измени постојећу лозинку за бота",
+       "botpasswords-label-needsreset": "(лозинку треба ресетовати)",
        "botpasswords-label-appid": "Име бота:",
        "botpasswords-label-create": "Направи",
        "botpasswords-label-update": "Ажурирај",
        "resetpass-submit-loggedin": "Промени лозинку",
        "resetpass-submit-cancel": "Откажи",
        "resetpass-wrong-oldpass": "Неисправна привремена или тренутна лозинка.\nМожда сте већ променили лозинку или сте затражили нову привремену лозинку.",
-       "resetpass-recycled": "Унели сте садашњу лозинку, да бисте ресетовали лозинку морате унети нову.",
+       "resetpass-recycled": "Унели сте садашњу лозинку, да бисте променили лозинку морате унети нову.",
        "resetpass-temp-emailed": "Пријавили сте се са привременим кодом из имејла.\nДа бисте завршили пријављивање морате поставити нову лозинку овде:",
        "resetpass-temp-password": "Привремена лозинка:",
        "resetpass-abort-generic": "Промену лозинке је спречио додатак.",
        "resetpass-expired": "Ваша лозинка је истекла. Поставите нову лозинку да бисте се пријавили.",
-       "resetpass-expired-soft": "Ваша лозинка је истекла и морате поставити нову. Поставите нову лозинку или кликните „{{int:authprovider-resetpass-skip-label}}“ да је поставите касније.",
-       "resetpass-validity-soft": "Ð\92аÑ\88а Ð»Ð¾Ð·Ð¸Ð½ÐºÐ° Ð½Ð¸Ñ\98е Ð¸Ñ\81пÑ\80авна: $1\n\nÐ\9cолимо Ð¸Ð·Ð°Ð±ÐµÑ\80иÑ\82е Ð½Ð¾Ð²Ñ\83 Ð¸Ð»Ð¸ ÐºÐ»Ð¸ÐºÐ½Ð¸Ñ\82е â\80\9e{{int:authprovider-resetpass-skip-label}}â\80\9c Ð´Ð° Ñ\80еÑ\81еÑ\82Ñ\83Ñ\98ете касније.",
+       "resetpass-expired-soft": "Ваша лозинка је истекла и морате је променити. Поставите нову лозинку или кликните „{{int:authprovider-resetpass-skip-label}}“ да је промените касније.",
+       "resetpass-validity-soft": "Ð\92аÑ\88а Ð»Ð¾Ð·Ð¸Ð½ÐºÐ° Ð½Ð¸Ñ\98е Ð¸Ñ\81пÑ\80авна: $1\n\nÐ\9cолимо Ð¸Ð·Ð°Ð±ÐµÑ\80иÑ\82е Ð½Ð¾Ð²Ñ\83 Ð¸Ð»Ð¸ ÐºÐ»Ð¸ÐºÐ½Ð¸Ñ\82е â\80\9e{{int:authprovider-resetpass-skip-label}}â\80\9c Ð´Ð° Ñ\98е Ð¿Ñ\80омените касније.",
        "passwordreset": "Обнављање лозинке",
        "passwordreset-text-one": "Попуните овај образац да бисте добили привремену лозинку на имејл.",
        "passwordreset-text-many": "{{PLURAL:$1|Испуните једно од поља како бисте добили привремену лозинку на имејл.}}",
        "previewerrortext": "Догодила се грешка приликом приказивања ваших измена.",
        "blockedtitle": "Корисник је блокиран",
        "blockedtext": "<strong>Ваше корисничко име или IP адреса је блокирана.</strong>\n\nБлокирање је {{GENDER:$4|извршио|извршила}} $1.\nРазлог је <em>$2</em>.\n\n* Почетак блокирања: $8\n* Истек блокирања: $6\n* Блокирани: $7\n\nМожете да се обратите {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] ради дискусије о блокирању.\nНе можете да користите могућност „{{int:emailuser}}” осим ако сте унели валидну имејл адресу у својим [[Special:Preferences|подешавањима]] налога и нисте блокирани од коришћења исте.\nВаша тренутна IP адреса је $3, а ID блокирања #$5.\nНаведите све информације одозго при стварању било каквих упита.",
-       "autoblockedtext": "Ваша IP адреса је блокирана јер ју је употребљавао други корисник, кога је {{GENDER:$4|блокирао|блокирала}} $1.\nРазлог:\n\n:<em>$2</em>\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\n\nНе можете користити могућност „Пошаљи имејл овом кориснику“ ако нисте унели исправну имејл адресу у [[Special:Preferences|подешавањима]].\n\nВаша блокирана IP адреса је $3, а ID $5.\nНаведите све податке изнад при стварању било каквих упита.",
+       "autoblockedtext": "Ваша IP адреса је блокирана јер ју је употребљавао други корисник, кога је {{GENDER:$4|блокирао|блокирала}} $1.\nРазлог:\n\n:<em>$2</em>\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\n\nНе можете користити могућност „{{int:emailuser}}“ ако нисте унели исправну имејл адресу у [[Special:Preferences|подешавањима]].\n\nВаша блокирана IP адреса је $3, а ID $5.\nНаведите све податке изнад при стварању било каквих упита.",
        "blockednoreason": "разлог није наведен",
        "whitelistedittext": "За уређивање странице је потребно да будете $1.",
        "confirmedittext": "Морате да потврдите своју имејл адресу пре уређивања страница.\nПоставите и потврдите имејл адресу преко [[Special:Preferences|подешавања]].",
        "userpage-userdoesnotexist": "Кориснички налог „<nowiki>$1</nowiki>“ није отворен.\nРазмислите да ли заиста желите да направите/уредите ову страницу.",
        "userpage-userdoesnotexist-view": "Кориснички налог „$1“ није отворен.",
        "blocked-notice-logextract": "Овај корисник је тренутно блокиран.\nИзвештај о последњем блокирању можете погледати испод:",
-       "clearyourcache": "<strong>Напомена:</strong> Након чувања, можда ћете морати да очистите кеш прегледача како бисте видели измене.\n* <strong>Фајерфокс/Сафари:</strong> Држите <em>Shift</em> и кликните на <em>Освежи</em> или притисните <em>Ctrl-F5</em> или <em>Ctrl-R</em> (<em>⌘-R</em> на Меку)\n* <strong>Гугл кроум:</strong> Притисните <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> на Меку)\n* <strong>Интернет експлорер:</strong> Држите <em>Ctrl</em> и кликните на <em>Освежи</em> или притисните <em>Ctrl-F5</em>\n* <strong>Опера:</strong> Идите на <em>Алатке → Подешавања</em> (<em>Опера → Поставке</em> на Меку) и затим <em>Приватност и безбедност → Очистите податке о прегледима → Кеширане слике и датотеке</em>.",
+       "clearyourcache": "<strong>Напомена:</strong> Након чувања, можда ћете морати да очистите кеш прегледача како бисте видели измене.\n* <strong>Фајерфокс / Сафари:</strong> Држите <em>Shift</em> и кликните на <em>Освежи</em> или притисните <em>Ctrl-F5</em> или <em>Ctrl-R</em> (<em>⌘-R</em> на Меку)\n* <strong>Гугл кроум:</strong> Притисните <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> на Меку)\n* <strong>Интернет експлорер:</strong> Држите <em>Ctrl</em> и кликните на <em>Освежи</em> или притисните <em>Ctrl-F5</em>\n* <strong>Опера:</strong> Идите на <em>Алатке → Подешавања</em> (<em>Опера → Подешавања</em> на Меку) и затим <em>Приватност и безбедност → Очистите податке о прегледима → Кеширане слике и датотеке</em>.",
        "usercssyoucanpreview": "<strong>Савет:<strong> кориситите дугме „{{int:showpreview}}“ да испробате свој нови CSS пре него што га сачувате.",
        "userjsyoucanpreview": "<strong>Савет:</strong> кориситите дугме „{{int:showpreview}}“ да испробате свој нови јаваскрипт пре него што га сачувате.",
        "usercsspreview": "<strong>Ово је само преглед CSS-а.\nСтраница још није сачувана!</strong>",
        "currentrevisionlink": "Тренутна измена",
        "cur": "трен",
        "next": "след",
-       "last": "разл",
+       "last": "претх",
        "page_first": "прва",
        "page_last": "последња",
        "histlegend": "Избор разлика: изаберите кутијице измена за упоређивање и притисните ентер или дугме на дну.<br />\nОбјашњење: <strong>({{int:cur}})</strong> = разлика с тренутном изменом, <strong>({{int:last}})</strong> = разлика с претходном изменом, <strong>{{int:minoreditletter}}</strong> = мања измена",
        "prefs-watchlist-edits": "Највећи број измена приказаних на списку надгледања:",
        "prefs-watchlist-edits-max": "Највећа вредност је хиљаду",
        "prefs-watchlist-token": "Жетон списка надгледања:",
+       "prefs-watchlist-managetokens": "Управљај жетонима",
        "prefs-misc": "Друга подешавања",
        "prefs-resetpass": "промени лозинку",
        "prefs-changeemail": "промени или уклони имејл адресу",
        "prefs-dateformat": "Формат датума",
        "prefs-timeoffset": "Временска разлика",
        "prefs-advancedediting": "Главна подешавања",
+       "prefs-developertools": "Програмерске алатке",
        "prefs-editor": "Уређивач",
        "prefs-preview": "Претпреглед",
        "prefs-advancedrc": "Напредна подешавања",
        "prefs-opt-out": "Онемогућавање побољшања",
        "prefs-advancedrendering": "Напредна подешавања",
-       "prefs-advancedsearchoptions": "Ð\9dапÑ\80една Ð¿Ð¾Ð´ÐµÑ\88аваÑ\9aа",
+       "prefs-advancedsearchoptions": "Ð\9dапÑ\80едне Ð¾Ð¿Ñ\86иÑ\98е",
        "prefs-advancedwatchlist": "Напредна подешавања",
        "prefs-displayrc": "Подешавања приказа",
        "prefs-displaywatchlist": "Подешавања приказа",
        "right-editcontentmodel": "мењање модела садржаја странице",
        "right-editinterface": "уређивање корисничког окружења",
        "right-editusercss": "уређивање туђих CSS датотека",
+       "right-edituserjson": "уређивање туђих JSON датотека",
        "right-edituserjs": "уређивање туђих JavaScript датотека",
        "right-editmyusercss": "уређивање сопствених CSS датотека",
+       "right-editmyuserjson": "уређивање сопствених JSON датотека",
        "right-editmyuserjs": "уређивање сопствених JavaScript датотека",
        "right-viewmywatchlist": "преглед сопственог списка надгледања",
        "right-editmywatchlist": "уређивање сопственог списка надгледања; неке предузете радње ће свеједно додати странице на списак и без овог права",
        "grant-delete": "Брисање страница, измена и уноса у дневницима",
        "grant-editinterface": "Уређивање Медијавики именског простора и корисничких CSS/JSON/Јаваскрипт страница",
        "grant-editmycssjs": "Уређивање вашег CSS/JSON/Јаваскрипта",
-       "grant-editmyoptions": "УÑ\80еÑ\92иваÑ\9aе Ð²аших подешавања",
+       "grant-editmyoptions": "УÑ\80еÑ\92иваÑ\9aе Ð\92аших подешавања",
        "grant-editmywatchlist": "Уређивање вашег списка надгледања",
        "grant-editpage": "Уређивање постојећих страница",
        "grant-editprotected": "Уређивање заштићених страница",
        "action-userrights-interwiki": "уређивање корисничких права на другим викијима",
        "action-siteadmin": "закључавање или откључавање базе података",
        "action-sendemail": "слање имејлова",
-       "action-editmyoptions": "Ñ\83Ñ\80еÑ\92иваÑ\9aе Ð²аших подешавања",
+       "action-editmyoptions": "Ñ\83Ñ\80еÑ\92иваÑ\9aе Ð\92аших подешавања",
        "action-editmywatchlist": "измену сопственог списак надгледања",
        "action-viewmywatchlist": "преглед вашег списак надгледања",
        "action-viewmyprivateinfo": "прегледање ваших личних података",
        "recentchanges-summary": "Пратите скорашње измене на овој страници.",
        "recentchanges-noresult": "Нема измена у задатом периоду који одговарају овим критеријумима.",
        "recentchanges-timeout": "Ова претрага је истекла. Можда желите да покушате другачије параметре претраге.",
-       "recentchanges-network": "Ð\97бог Ñ\82еÑ\85ниÑ\87ког Ð¿Ñ\80облема Ð½Ðµ Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ñ\83Ñ\87иÑ\82ам Ñ\80езÑ\83лÑ\82аÑ\82е. Ð\9fокÑ\83Ñ\88аÑ\98Ñ\82е Ð¿Ð¾Ð½Ð¾Ð²Ð½Ð¾ Ð´Ð° Ñ\83Ñ\87иÑ\82ате страницу.",
+       "recentchanges-network": "Ð\97бог Ñ\82еÑ\85ниÑ\87ког Ð¿Ñ\80облема Ð½Ðµ Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ñ\83Ñ\87иÑ\82ам Ñ\80езÑ\83лÑ\82аÑ\82е. Ð\9fокÑ\83Ñ\88аÑ\98Ñ\82е Ð´Ð° Ð¾Ñ\81вежите страницу.",
        "recentchanges-notargetpage": "Унесите назив странице како бисте видели сродне измене.",
        "recentchanges-feed-description": "Пратите скорашње измене уз помоћ овог довода.",
        "recentchanges-label-newpage": "Нова страница",
        "recentchanges-label-minor": "Ово је мања измена",
-       "recentchanges-label-bot": "Ову измену је начинио бот",
+       "recentchanges-label-bot": "Ову измену је направио бот",
        "recentchanges-label-unpatrolled": "Ова измена још није патролирана",
        "recentchanges-label-plusminus": "Промена величине странице у бајтовима",
        "recentchanges-legend-heading": "<strong>Легенда:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|списак нових страница]])",
        "recentchanges-submit": "Прикажи",
-       "rcfilters-tag-remove": "Уклоните филтер „$1”",
+       "rcfilters-tag-remove": "Уклони филтер „$1”",
        "rcfilters-legend-heading": "<strong>Списак скраћеница:</strong>",
-       "rcfilters-other-review-tools": "Ð\9eÑ\81Ñ\82але алатке за преглед",
+       "rcfilters-other-review-tools": "Ð\94Ñ\80Ñ\83ге алатке за преглед",
        "rcfilters-group-results-by-page": "Групиши резултате по страницама",
        "rcfilters-activefilters": "Активни филтери",
+       "rcfilters-activefilters-hide": "Сакриј",
+       "rcfilters-activefilters-show": "Прикажи",
+       "rcfilters-activefilters-hide-tooltip": "Сакриј подручје активних филтера",
+       "rcfilters-activefilters-show-tooltip": "Прикажи подручје активних филтера",
        "rcfilters-advancedfilters": "Напредни филтери",
        "rcfilters-limit-title": "Број измена за приказ",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|измена|измене|измена}}, $2",
-       "rcfilters-date-popup-title": "Временски период",
+       "rcfilters-date-popup-title": "Временски период за претрагу",
        "rcfilters-days-title": "Скорашњи дани",
        "rcfilters-hours-title": "Скорашњи сати",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|дан|дана}}",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|сат|сата}}",
        "rcfilters-highlighted-filters-list": "Истакнуто: $1",
        "rcfilters-quickfilters": "Сачувани филтери",
-       "rcfilters-quickfilters-placeholder-title": "Још увек нема сачуваних филтера",
-       "rcfilters-quickfilters-placeholder-description": "Да бисте сачували своја подешавања филтера и употребљавали их касније, кликните на икону за ознаку у подручју активних филтера, испод.",
+       "rcfilters-quickfilters-placeholder-title": "Још нема сачуваних филтера",
+       "rcfilters-quickfilters-placeholder-description": "Да бисте сачували своја подешавања филтера и поново их употребљавали касније, кликните на икону за обележавање у подручју активних филтера, испод.",
        "rcfilters-savedqueries-defaultlabel": "Сачувани филтери",
        "rcfilters-savedqueries-rename": "Преименуј",
        "rcfilters-savedqueries-setdefault": "Постави као подразумевано",
        "rcfilters-savedqueries-apply-label": "Направи филтер",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Направи подразумевани филтер",
        "rcfilters-savedqueries-cancel-label": "Откажи",
-       "rcfilters-savedqueries-add-new-title": "Сачувајте тренутна подешавања филтера",
+       "rcfilters-savedqueries-add-new-title": "Сачувај тренутна подешавања филтера",
        "rcfilters-savedqueries-already-saved": "Ови филтери су већ сачувани. Измените Ваша подешавања како бисте направили нове сачуване филтере.",
        "rcfilters-restore-default-filters": "Врати подразумеване филтере",
-       "rcfilters-clear-all-filters": "Уклоните све филтере",
-       "rcfilters-show-new-changes": "Ð\9fогледаÑ\98 Ð½ајновије измене",
-       "rcfilters-search-placeholder": "Филтрирајте измене (користите мени или претрагу за име филтера)",
+       "rcfilters-clear-all-filters": "Уклони све филтере",
+       "rcfilters-show-new-changes": "Ð\9dајновије измене",
+       "rcfilters-search-placeholder": "Филтрирај измене (користите мени или претрагу за име филтера)",
        "rcfilters-invalid-filter": "Неисправан филтер",
        "rcfilters-empty-filter": "Нема активних филтера. Сви доприноси су приказани.",
        "rcfilters-filterlist-title": "Филтери",
        "rcfilters-filterlist-whatsthis": "Како ово функционише?",
-       "rcfilters-filterlist-feedbacklink": "Реците нам шта мислите о овим (новим) алаткама за филтрирање",
+       "rcfilters-filterlist-feedbacklink": "Реците нам шта мислите о овим алаткама за филтрирање",
        "rcfilters-highlightbutton-title": "Истакни резултате",
-       "rcfilters-highlightmenu-title": "Ð\9eдабеÑ\80и боју",
+       "rcfilters-highlightmenu-title": "Ð\98забеÑ\80иÑ\82е боју",
        "rcfilters-highlightmenu-help": "Изаберите боју да бисте истакнули ово својство",
        "rcfilters-filterlist-noresults": "Нема пронађених филтера",
        "rcfilters-noresults-conflict": "Није пронађен ниједан резултат јер су критеријуми претраге сукобљени",
        "rcfilters-filter-user-experience-level-unregistered-label": "Нерегистровани",
        "rcfilters-filter-user-experience-level-unregistered-description": "Уредници који нису пријављени.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Новајлије",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Регистровани уредници са мање од 10 измена и 4 дана активности.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Регистровани уредници који имају мање од 10 измена или 4 дана активности.",
        "rcfilters-filter-user-experience-level-learner-label": "Ученици",
-       "rcfilters-filter-user-experience-level-learner-description": "РегиÑ\81Ñ\82Ñ\80овани Ñ\83Ñ\80едниÑ\86и Ñ\81а Ð²Ð¸Ñ\88е Ð¸Ñ\81кÑ\83Ñ\81Ñ\82ва Ð¾Ð´ â\80\9eноваÑ\98лиÑ\98аâ\80\9d, Ð°Ð»Ð¸ Ð¼Ð°Ñ\9aе Ð¾Ð´ „искусних корисника”.",
+       "rcfilters-filter-user-experience-level-learner-description": "РегиÑ\81Ñ\82Ñ\80овани Ñ\83Ñ\80едниÑ\86и Ñ\87иÑ\98е Ñ\98е Ð¸Ñ\81кÑ\83Ñ\81Ñ\82во Ð¸Ð·Ð¼ÐµÑ\92Ñ\83 â\80\9eноваÑ\98лиÑ\98аâ\80\9d Ð¸ „искусних корисника”.",
        "rcfilters-filter-user-experience-level-experienced-label": "Искусни корисници",
        "rcfilters-filter-user-experience-level-experienced-description": "Регистровани уредници са више од 500 измена и 30 дана активности.",
        "rcfilters-filtergroup-automated": "Аутоматизовани доприноси",
        "rcfilters-filter-bots-label": "Бот",
-       "rcfilters-filter-bots-description": "Ð\98змене Ð½Ð°Ð¿Ñ\80авÑ\99ене Ð°Ñ\83Ñ\82омаÑ\82изованим Ð°Ð»Ð°Ñ\82има.",
+       "rcfilters-filter-bots-description": "Ð\98змене Ð½Ð°Ð¿Ñ\80авÑ\99ене Ð°Ñ\83Ñ\82омаÑ\82изованим Ð°Ð»Ð°Ñ\82кама.",
        "rcfilters-filter-humans-label": "Човек (није бот)",
        "rcfilters-filter-humans-description": "Измене које су направили људи-уредници.",
-       "rcfilters-filtergroup-reviewstatus": "Патролираност",
-       "rcfilters-filter-reviewstatus-unpatrolled-description": "Измене нису ручно или аутоматски означене патролираним.",
+       "rcfilters-filtergroup-reviewstatus": "Прегледаност",
+       "rcfilters-filter-reviewstatus-unpatrolled-description": "Ð\98змене ÐºÐ¾Ñ\98е Ð½Ð¸Ñ\81Ñ\83 Ñ\80Ñ\83Ñ\87но Ð¸Ð»Ð¸ Ð°Ñ\83Ñ\82омаÑ\82Ñ\81ки Ð¾Ð·Ð½Ð°Ñ\87ене Ð¿Ð°Ñ\82Ñ\80олиÑ\80аним.",
        "rcfilters-filter-reviewstatus-unpatrolled-label": "Непатролирано",
-       "rcfilters-filter-reviewstatus-manual-description": "Измене ручно означене патролираним.",
+       "rcfilters-filter-reviewstatus-manual-description": "Измене које су ручно означене патролираним.",
        "rcfilters-filter-reviewstatus-manual-label": "Ручно патролирано",
-       "rcfilters-filter-reviewstatus-auto-description": "Ð\98змене Ð¸Ñ\81кÑ\83Ñ\81ниÑ\85 Ñ\83Ñ\80едника чији је рад аутоматски означен патролираним.",
+       "rcfilters-filter-reviewstatus-auto-description": "Ð\98змене Ð½Ð°Ð¿Ñ\80едниÑ\85 ÐºÐ¾Ñ\80иÑ\81ника чији је рад аутоматски означен патролираним.",
        "rcfilters-filter-reviewstatus-auto-label": "Аутоматски патролирано",
        "rcfilters-filtergroup-significance": "Значај",
        "rcfilters-filter-minor-label": "Мање измене",
-       "rcfilters-filter-minor-description": "Ð\98змене ÐºÐ¾Ñ\98е Ñ\98е Ð°Ñ\83Ñ\82оÑ\80 Ð¾Ð·Ð½Ð°Ñ\87ио ÐºÐ°Ð¾ Ð¼Ð°Ñ\9aе.",
+       "rcfilters-filter-minor-description": "Ð\98змене ÐºÐ¾Ñ\98е Ñ\98е Ð°Ñ\83Ñ\82оÑ\80 Ð¾Ð·Ð½Ð°Ñ\87ио Ð¼Ð°Ñ\9aим.",
        "rcfilters-filter-major-label": "Не-мање измене",
-       "rcfilters-filter-major-description": "Ð\98змене ÐºÐ¾Ñ\98е Ð½Ð¸Ñ\81Ñ\83 Ð¾Ð·Ð½Ð°Ñ\87ене ÐºÐ°Ð¾ Ð¼Ð°Ñ\9aе.",
+       "rcfilters-filter-major-description": "Ð\98змене ÐºÐ¾Ñ\98е Ð½Ð¸Ñ\81Ñ\83 Ð¾Ð·Ð½Ð°Ñ\87ене Ð¼Ð°Ñ\9aим.",
        "rcfilters-filtergroup-watchlist": "Странице на списку надгледања",
        "rcfilters-filter-watchlist-watched-label": "На списку надгледања",
        "rcfilters-filter-watchlist-watched-description": "Измене страница на Вашем списку надгледања.",
        "rcfilters-filter-watchlistactivity-unseen-description": "Измене страница које нисте посетили од када су направљене измене.",
        "rcfilters-filter-watchlistactivity-seen-label": "Погледане измене",
        "rcfilters-filter-watchlistactivity-seen-description": "Измене страница које сте посетили од када су направљене измене.",
-       "rcfilters-filtergroup-changetype": "Тип измене",
+       "rcfilters-filtergroup-changetype": "Ð\92Ñ\80Ñ\81Ñ\82а измене",
        "rcfilters-filter-pageedits-label": "Измене страница",
        "rcfilters-filter-pageedits-description": "Измене вики садржаја, расправа, описа категорија…",
        "rcfilters-filter-newpages-label": "Прављење страница",
-       "rcfilters-filter-newpages-description": "Измене којима се стварају нове странице.",
+       "rcfilters-filter-newpages-description": "Измене којима се праве нове странице.",
        "rcfilters-filter-categorization-label": "Измене категорија",
        "rcfilters-filter-categorization-description": "Записи о страницама додатим или уклоњеним из категорија.",
-       "rcfilters-filter-logactions-label": "РадÑ\9aе Ð·Ð°Ð±ÐµÐ»ÐµÐ¶ÐµÐ½Ðµ Ñ\83 Ð´Ð½ÐµÐ²Ð½Ð¸Ñ\86има",
-       "rcfilters-filter-logactions-description": "Административне радње, стварање налога, брисање страница, отпремања…",
+       "rcfilters-filter-logactions-label": "Ð\97абележене Ñ\80адÑ\9aе",
+       "rcfilters-filter-logactions-description": "Административне радње, прављење налога, брисање страница, отпремања…",
        "rcfilters-hideminor-conflicts-typeofchange-global": "Филтер за „мање” измене је у сукобу са једним или више филтера типа измена, зато што одређени типови измена не могу да се означе као „мање”. Сукобљени филтери су означени у подручју Активни филтери, изнад.",
        "rcfilters-hideminor-conflicts-typeofchange": "Одређени типови измена не могу да се означе као „мање”, тако да је овај филтер у сукобу са следећим филтерима типа измена: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "Овај филтер типа измене је у сукобу са филтером за „мање” измене. Одређени типови измена не могу да се означе као „мање”.",
        "rcfilters-exclude-button-off": "Изостави означено",
        "rcfilters-exclude-button-on": "Изостави одабрано",
        "rcfilters-view-tags": "Означене измене",
-       "rcfilters-view-namespaces-tooltip": "Филтрирајте резултате према именском простору",
-       "rcfilters-view-tags-tooltip": "Филтрирајте резултате према ознаци измене",
+       "rcfilters-view-namespaces-tooltip": "Филтрирај резултате према именском простору",
+       "rcfilters-view-tags-tooltip": "Филтрирај резултате према ознаци измене",
        "rcfilters-view-return-to-default-tooltip": "Повратак на главни мени",
        "rcfilters-view-tags-help-icon-tooltip": "Сазнајте више о означеним изменама",
        "rcfilters-liveupdates-button": "Ажурирај уживо",
-       "rcfilters-liveupdates-button-title-on": "Искључите ажурирања уживо",
-       "rcfilters-liveupdates-button-title-off": "Ð\9fÑ\80иказ Ð½Ð¾Ð²Ð¸Ñ\85 Ð¸Ð·Ð¼ÐµÐ½Ð° уживо",
+       "rcfilters-liveupdates-button-title-on": "Искључи ажурирања уживо",
+       "rcfilters-liveupdates-button-title-off": "Ð\9fÑ\80икажи Ð½Ð¾Ð²Ðµ Ð¸Ð·Ð¼ÐµÐ½Ðµ уживо",
        "rcfilters-watchlist-markseen-button": "Означи све измене као погледане",
        "rcfilters-watchlist-edit-watchlist-button": "Промени списак надгледаних страница",
        "rcfilters-watchlist-showupdated": "Измене на страницама које нисте посетили од када је измена извршена су <strong>подебљане</strong>, са испуњеним ознакама.",
        "rcfilters-preference-label": "Сакриј побољшану верзију скорашњих измена",
        "rcfilters-preference-help": "Поништава редизајн интерфејса из 2017. и све алатке додате тада и после.",
+       "rcfilters-watchlist-preference-label": "Сакриј побољшану верзију списка надгледања",
        "rcfilters-filter-showlinkedfrom-label": "Прикажи измене на страницама са којих долазе везе",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Странице са којих долазе везе до</strong> изабране странице",
        "rcfilters-filter-showlinkedto-label": "Прикажи измене на страницама ка којима воде везе",
        "copyuploaddisabled": "Отпремање путем веб-адресе је онемогућено.",
        "uploaddisabledtext": "Отпремање датотека је онемогућено.",
        "php-uploaddisabledtext": "Отпремање датотека је онемогућено у PHP-у.\nПроверите подешавања file_uploads.",
-       "uploadscripted": "Датотека садржи HTML или скриптни код који може бити погрешно протумачен од стране прегледача.",
+       "uploadscripted": "Датотека садржи HTML или скриптни кôд који може бити погрешно протумачен од стране прегледача.",
        "upload-scripted-pi-callback": "Датотека која садржи инструкције за обраду XML стилског облика се не може отпремити.",
        "upload-scripted-dtd": "Није могуће отпремање SVG датотека које садрже нестандардну DTD декларацију.",
        "uploaded-script-svg": "Пронађен скриптни елеменат „$1“ у постављеној SVG датотеци.",
        "destfilename": "Назив:",
        "upload-maxfilesize": "Максимална величина датотеке: $1",
        "upload-description": "Опис датотеке",
-       "upload-options": "Ð\9fодеÑ\88аваÑ\9aа отпремања",
+       "upload-options": "Ð\9eпÑ\86иÑ\98е отпремања",
        "watchthisupload": "Надгледај ову датотеку",
        "filewasdeleted": "Датотека с овим називом је раније послата, али је обрисана.\nПроверите $1 пре него што наставите с поновним слањем.",
        "filename-bad-prefix": "Назив датотеке коју шаљете почиње са <strong>„$1“</strong>, а њега обично додељују дигитални фотоапарати.\nИзаберите назив датотеке који описује њен садржај.",
        "deadendpages": "Странице без унутрашњих веза",
        "deadendpagestext": "Следеће странице немају везе до других страница на овом викију.",
        "protectedpages": "Заштићене странице",
+       "protectedpages-filters": "Филтери:",
        "protectedpages-indef": "Само неограничене заштите",
        "protectedpages-summary": "На овој страници се налази списак тренутно заштићених страница. За списак заштићених наслова види [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Само преносиве заштите",
        "protectedtitles-submit": "Прикажи наслове",
        "listusers": "Списак корисника",
        "listusers-editsonly": "Прикажи само кориснике који су уређивали",
+       "listusers-temporarygroupsonly": "Прикажи само кориснике у привременим корисничким групама",
        "listusers-creationsort": "Поређај по датуму стварања",
        "listusers-desc": "Поређај у опадајућем редоследу",
        "usereditcount": "$1 {{PLURAL:$1|измена|измене|измена}}",
        "apisandbox-dynamic-error-exists": "Параметар под називом \"$1\" већ постоји.",
        "apisandbox-deprecated-parameters": "Застарели параметри",
        "apisandbox-fetch-token": "Аутоматски попуни токен",
+       "apisandbox-add-multi": "Додај",
        "apisandbox-submit-invalid-fields-title": "Нека поља нису исправна",
        "apisandbox-submit-invalid-fields-message": "Молимо Вас поправите означена поља и покушајте поново.",
        "apisandbox-results": "Резултати",
        "wlshowhidepatr": "патролиране измене",
        "wlshowhidemine": "моје измене",
        "wlshowhidecategorization": "категоризацију страница",
-       "watchlist-options": "Ð\9fодеÑ\88аваÑ\9aа списка надгледања",
+       "watchlist-options": "Ð\9eпÑ\86иÑ\98е списка надгледања",
        "watching": "Надгледање…",
        "unwatching": "Уклањање са списка надгледања...",
        "watcherrortext": "Дошло је до грешке при промени поставки вашег списка надгледања за „$1“.",
        "minimum-size": "Најмања величина",
        "maximum-size": "Највећа величина:",
        "pagesize": "(бајтови)",
-       "restriction-edit": "Уређивање",
-       "restriction-move": "Ð\9fремештање",
+       "restriction-edit": "уређивање",
+       "restriction-move": "премештање",
        "restriction-create": "прављење",
        "restriction-upload": "отпремање",
        "restriction-level-sysop": "потпуно заштићено",
        "allmessagesname": "Назив",
        "allmessagesdefault": "Подразумевани текст",
        "allmessagescurrent": "Тренутни текст поруке",
-       "allmessagestext": "Ð\9eво Ñ\98е Ñ\81пиÑ\81ак Ñ\81виÑ\85 Ñ\81иÑ\81Ñ\82емÑ\81киÑ\85 Ð¿Ð¾Ñ\80Ñ\83ка ÐºÐ¾Ñ\98е Ñ\81Ñ\83 Ð´Ð¾Ñ\81Ñ\82Ñ\83пне Ñ\83 Ð¸Ð¼ÐµÐ½Ñ\81ком Ð¿Ñ\80оÑ\81Ñ\82оÑ\80Ñ\83 â\80\9eÐ\9cедиÑ\98авикиâ\80\9c.\nÐ\9fоÑ\81еÑ\82иÑ\82е [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Ð\9cедиÑ\98авики Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ\86иÑ\98Ñ\83] Ð¸ [https://translatewiki.net Ð¢Ñ\80анÑ\81леÑ\98Ñ\82вики] Ð°ÐºÐ¾ Ð¶ÐµÐ»Ð¸Ñ\82е Ð´Ð° Ð¿Ð¾Ð¼Ð¾Ð³Ð½ÐµÑ\82е Ñ\83 Ð¿Ñ\80евоÑ\92еÑ\9aÑ\83.",
+       "allmessagestext": "Ð\9eво Ñ\98е Ñ\81пиÑ\81ак Ñ\81иÑ\81Ñ\82емÑ\81киÑ\85 Ð¿Ð¾Ñ\80Ñ\83ка Ð´Ð¾Ñ\81Ñ\82Ñ\83пниÑ\85 Ñ\83 Ð¸Ð¼ÐµÐ½Ñ\81ком Ð¿Ñ\80оÑ\81Ñ\82оÑ\80Ñ\83 â\80\9eÐ\9cедиÑ\98авикиâ\80\9c.\nÐ\9fоÑ\81еÑ\82иÑ\82е [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Ð\9cедиÑ\98авики Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ\86иÑ\98Ñ\83] Ð¸ [https://translatewiki.net translatewiki.net] Ð°ÐºÐ¾ Ð¶ÐµÐ»Ð¸Ñ\82е Ð´Ð° Ð´Ð¾Ð¿Ñ\80инеÑ\81еÑ\82е Ð¾Ð¿Ñ\88Ñ\82оÑ\98 Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð°Ñ\86иÑ\98и Ð\9cедиÑ\98авикиÑ\98а.",
        "allmessagesnotsupportedDB": "Ова страница не може да се користи јер је '''$wgUseDatabaseMessages''' онемогућен.",
        "allmessages-filter-legend": "Филтер",
        "allmessages-filter": "Филтрирај по стању:",
        "import-error-special": "Не могу да увезем страницу „$1“ јер она припада посебном именском простору које не прихвата странице.",
        "import-error-invalid": "Не могу да увезем страницу „$1“ јер је њен назив неисправан.",
        "import-error-unserialize": "Верзија $2 странице $1 не може бити прочитана/увезена. Записано је да верзија користи $3 тип садржаја у $4 формату.",
-       "import-options-wrong": "{{PLURAL:$2|Ð\9fогÑ\80еÑ\88но Ð¿Ð¾Ð´ÐµÑ\88аваÑ\9aе|Ð\9fогÑ\80еÑ\88на Ð¿Ð¾Ð´ÐµÑ\88аваÑ\9aа}}: <nowiki>$1</nowiki>",
+       "import-options-wrong": "{{PLURAL:$2|Ð\9fогÑ\80еÑ\88на Ð¾Ð¿Ñ\86иÑ\98а|Ð\9fогÑ\80еÑ\88не Ð¾Ð¿Ñ\86иÑ\98е}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Наведена основна страница има неисправан наслов.",
        "import-rootpage-nosubpage": "Именски простор „$1“ основне странице не дозвољава подстранице.",
        "importlogpage": "Дневник увоза",
        "tooltip-pt-logout": "Одјавите се",
        "tooltip-pt-createaccount": "Препоручијемо Вам да отворите налог и пријавите се, иако то није обавезно",
        "tooltip-ca-talk": "Разговор о страници са садржајем",
-       "tooltip-ca-edit": "Уредите ову страницу",
-       "tooltip-ca-addsection": "Започните нови одељак",
-       "tooltip-ca-viewsource": "Ð\9eва Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð·Ð°ÐºÑ\99Ñ\83Ñ\87ана. \nÐ\9cожеÑ\82е Ð¿Ð¾Ð³Ð»ÐµÐ´Ð°Ñ\82и Ð¸Ð·Ð²Ð¾Ñ\80ни Ñ\82екÑ\81Ñ\82.",
+       "tooltip-ca-edit": "Уреди ову страницу",
+       "tooltip-ca-addsection": "Започни нови одељак",
+       "tooltip-ca-viewsource": "Ð\9eва Ñ\81Ñ\82Ñ\80аниÑ\86а Ñ\98е Ð·Ð°ÐºÑ\99Ñ\83Ñ\87ана. \nÐ\9cожеÑ\82е Ð´Ð° Ð¿Ð¾Ð³Ð»ÐµÐ´Ð°Ñ\82е Ñ\9aен Ð¸Ð·Ð²Ð¾Ñ\80ни ÐºÃ´Ð´",
        "tooltip-ca-history": "Претходне измене ове странице",
        "tooltip-ca-protect": "Заштитите ову страницу",
        "tooltip-ca-unprotect": "Промени заштиту ове странице",
        "tooltip-ca-nstab-template": "Погледајте шаблон",
        "tooltip-ca-nstab-help": "Погледајте страницу за помоћ",
        "tooltip-ca-nstab-category": "Погледајте страницу категорија",
-       "tooltip-minoredit": "Означите ову измену као мању",
+       "tooltip-minoredit": "Означи као мању измену",
        "tooltip-save": "Сачувајте своје измене",
-       "tooltip-publish": "Објавите своје измене",
+       "tooltip-publish": "Објави своје измене",
        "tooltip-preview": "Прегледајте своје измене. Користите ово дугме пре чувања.",
        "tooltip-diff": "Погледајте које измене сте направили на тексту",
        "tooltip-compareselectedversions": "Погледаjте разлике између две изабране измене ове странице.",
-       "tooltip-watch": "Додајте ову страницу на свој списак надгледања",
+       "tooltip-watch": "Додај ову страницу на свој списак надгледања",
        "tooltip-watchlistedit-normal-submit": "Уклони наслове",
        "tooltip-watchlistedit-raw-submit": "Ажурирај списак",
        "tooltip-recreate": "Поново направите страницу иако је обрисана",
        "filedelete-archive-read-only": "Сервер не може да пише по складишној фасцикли ($1).",
        "previousdiff": "← Старија измена",
        "nextdiff": "Новија измена →",
-       "mediawarning": "<strong>Упозорење:</strong> ова врста датотеке може садржати штетан код.\nАко га покренете, Ваш рачунар може бити угрожен.",
+       "mediawarning": "<strong>Упозорење:</strong> ова врста датотеке може садржати штетан кôд.\nАко га покренете, Ваш рачунар може бити угрожен.",
        "imagemaxsize": "Ограничење величине слике:<br /><em>(на страницама за опис датотека)</em>",
        "thumbsize": "Величина минијатуре:",
        "widthheight": "$1 × $2",
        "exif-keywords": "Кључне речи",
        "exif-worldregioncreated": "Област света где је сликана фотографија",
        "exif-countrycreated": "Земља где је сликана фотографија",
-       "exif-countrycodecreated": "Код земље где је слика направљена",
+       "exif-countrycodecreated": "Кôд земље где је слика направљена",
        "exif-provinceorstatecreated": "Покрајина или држава где је сликана фотографија",
        "exif-citycreated": "Град где је сликана фотографија",
        "exif-sublocationcreated": "Област града где је сликана фотографија",
        "exif-worldregiondest": "Приказана област света",
        "exif-countrydest": "Приказана земља",
-       "exif-countrycodedest": "Код приказане земље",
+       "exif-countrycodedest": "Кôд приказане земље",
        "exif-provinceorstatedest": "Приказана покрајина или држава",
        "exif-citydest": "Приказани град",
        "exif-sublocationdest": "Приказана област града",
        "exif-urgency": "Хитност",
        "exif-fixtureidentifier": "Назив рубрике",
        "exif-locationdest": "Приказана локација",
-       "exif-locationdestcode": "Код приказаног места",
+       "exif-locationdestcode": "Кôд приказаног места",
        "exif-objectcycle": "Доба дана за који је медиј намењен",
        "exif-contact": "Подаци за контакт",
        "exif-writer": "Писац",
        "exif-contentwarning": "Упозорење о садржају",
        "exif-giffilecomment": "Коментар на датотеку GIF",
        "exif-intellectualgenre": "Врста ставке",
-       "exif-subjectnewscode": "Код предмета",
-       "exif-scenecode": "IPTC код сцене",
+       "exif-subjectnewscode": "Кôд предмета",
+       "exif-scenecode": "IPTC кôд сцене",
        "exif-event": "Приказани догађај",
        "exif-organisationinimage": "Приказана организација",
        "exif-personinimage": "Приказана особа",
        "confirmemail": "Потврда имејл адресе",
        "confirmemail_noemail": "Нисте унели исправну имејл адресу у [[Special:Preferences|подешавањима]].",
        "confirmemail_text": "{{SITENAME}} захтева да потврдите имејл адресу пре него што почнете да користите могућности имејла.\nКликните на дугме испод за слање поруке на вашу адресу.\nУ поруци ће се налазити веза с потврдним кодом;\nунесите је у прегледач да бисте потврдили да је ваша имејл адреса исправна.",
-       "confirmemail_pending": "Потврдни код вам је већ послат. Ако сте управо отворили налог, онда вероватно треба да сачекате неколико минута да пристигне, пре него што поново затражите нови код.",
-       "confirmemail_send": "Пошаљи потврдни код",
+       "confirmemail_pending": "Потврдни кôд вам је већ послат. Ако сте управо отворили налог, онда вероватно треба да сачекате неколико минута да пристигне, пре него што поново затражите нови кôд.",
+       "confirmemail_send": "Пошаљи потврдни кôд",
        "confirmemail_sent": "Потврдна порука је послата.",
-       "confirmemail_oncreate": "Послат је потврдни код на вашу имејл адресу.\nОвај код није потребан за пријављивање, али вам треба да бисте укључили могућности имејла на викију.",
+       "confirmemail_oncreate": "Послат је потврдни кôд на вашу имејл адресу.\nОвај кôд није потребан за пријављивање, али вам треба да бисте укључили могућности имејла на викију.",
        "confirmemail_sendfailed": "{{SITENAME}} не може да пошаље имејл потврду.\nПроверите да ли је имејл адреса правилно написана.\n\nГрешка: $1",
        "confirmemail_invalid": "Потврдни код је неисправан. Вероватно је истекао.",
        "confirmemail_needlogin": "Морате бити $1 да бисте потврдили имејл адресу.",
        "tag-mw-replace-description": "Измене које уклањају више од 90% садржаја странице",
        "tag-mw-rollback": "враћање",
        "tag-mw-rollback-description": "Измене које враћају страницу на претходне измене",
-       "tag-mw-undo": "поништена ранија измена",
+       "tag-mw-undo": "поништење",
        "tag-mw-undo-description": "Измене које поништавају претходне измене",
        "tags-title": "Ознаке",
        "tags-intro": "На овој страници је наведен списак ознака с којима програм може да означи измене и његово значење.",
        "feedback-cancel": "Откажи",
        "feedback-close": "Урађено",
        "feedback-external-bug-report-button": "Пријави грешку",
-       "feedback-dialog-title": "Ð\9fоÑ\88аÑ\99и Ð¿Ð¾Ð²Ñ\80аÑ\82нÑ\83 Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98Ñ\83",
+       "feedback-dialog-title": "СлаÑ\9aе Ð¿Ð¾Ð²Ñ\80аÑ\82не Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98е",
        "feedback-error1": "Грешка: непрепознат резултат од АПИ-ја",
        "feedback-error2": "Грешка: уређивање није успело",
        "feedback-error3": "Грешка: нема одговора од АПИ-ја",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (омогућена)",
        "mediastatistics": "Статистика датотека",
        "mediastatistics-summary": "Статистике о типовима послатих датотека. Овде су урачунате само најновије верзије датотека. Старе или обрисане верзије нису урачунате.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 бајт|$1 бајта|$1 бајтова}} ($2; $3%)",
+       "mediastatistics-bytespertype": "Укупна величина датотеке овог одељка: {{PLURAL:$1|$1 бајт|$1 бајта|$1 бајтова}} ($2; $3%).",
+       "mediastatistics-allbytes": "Укупна величина свих датотека: {{PLURAL:$1|$1 бајт|$1 бајта|$1 бајтова}} ($2).",
        "mediastatistics-table-mimetype": "MIME тип",
        "mediastatistics-table-extensions": "Могуће екстензије",
        "mediastatistics-table-count": "Број датотека",
        "json-error-state-mismatch": "Невалидан или покварени JSON",
        "json-error-ctrl-char": "Грешка контролног симбола, могуће је да је неисправно енкодиран",
        "json-error-syntax": "Грешка у синтакси",
+       "json-error-utf8": "Малформирани UTF-8 знаци, могуће је да су неисправно енкодирани",
+       "json-error-recursion": "Једна или више рекурзивних референци у вредности коју треба енкодирати.",
+       "json-error-inf-or-nan": "Једна или више NAN или INF вредности у вредности коју треба енкодирати",
        "json-error-unsupported-type": "Дата је вреднос врсте која се не може енкодирати",
        "headline-anchor-title": "Веза до овог одељка",
        "special-characters-group-latin": "Латиница",
        "date-range-to": "До датума:",
        "sessionprovider-generic": "$1 сесије",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "сесије са колачићима",
+       "sessionprovider-nocookies": "Колачићи су можда онемогућени. Уверите се да су колачићи омогућени и почните поново.",
        "randomrootpage": "Случајна коренска страница",
        "log-action-filter-block": "Тип блокирања:",
        "log-action-filter-contentmodel": "Тип промене модела садржаја:",
index 141529a..b1c1bc3 100644 (file)
@@ -30,7 +30,8 @@
                        "Prevodim",
                        "Bugoslav",
                        "Acamicamacaraca",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "BadDog"
                ]
        },
        "tog-underline": "Podvlačenje veza:",
        "minimum-size": "Najmanja veličina",
        "maximum-size": "Najveća veličina:",
        "pagesize": "(bajtovi)",
-       "restriction-edit": "Uređivanje",
-       "restriction-move": "Premeštanje",
+       "restriction-edit": "uređivanje",
+       "restriction-move": "premeštanje",
        "restriction-create": "pravljenje",
        "restriction-upload": "otpremanje",
        "restriction-level-sysop": "potpuno zaštićeno",
        "tooltip-ca-talk": "Razgovor o stranici sa sadržajem",
        "tooltip-ca-edit": "Uredi ovu stranicu",
        "tooltip-ca-addsection": "Započnite novi odeljak",
-       "tooltip-ca-viewsource": "Ова страница је закључана. \nМожете погледати изворни текст.",
+       "tooltip-ca-viewsource": "Ova stranica je zaključana. \nMožete da pogledate njen izvorni kôd",
        "tooltip-ca-history": "Prethodne verzije ove stranice",
        "tooltip-ca-protect": "Zaštitite ovu stranicu",
        "tooltip-ca-unprotect": "Promeni zaštitu ove stranice",
index f9cc47d..726da33 100644 (file)
        "converter-manual-rule-error": "Fel upptäcktes i manuell språkkonverteringsregel",
        "undo-success": "Redigeringen kan göras ogjord.\nVar god och kontrollera jämförelsen nedan för att bekräfta att detta är vad du avser att göra, och spara sedan ändringarna nedan för att göra redigeringen ogjord.",
        "undo-failure": "Redigeringen kunde inte göras ogjord på grund av konflikt med mellanliggande redigeringar.",
+       "undo-main-slot-only": "Redigeringen kunde inte göras ogjord eftersom den omfattar innehåll utanför huvudplatsen.",
        "undo-norev": "Redigeringen kan inte göras ogjord eftersom den inte finns eller har raderats.",
        "undo-nochange": "Det verkar som att redigeringen redan har blivit ogjord.",
        "undo-summary": "Gör version $1 av [[Special:Contributions/$2|$2]] ([[User talk:$2|diskussion]]) ogjord",
        "rcfilters-activefilters": "Aktiva filter",
        "rcfilters-activefilters-hide": "Dölj",
        "rcfilters-activefilters-show": "Visa",
+       "rcfilters-activefilters-hide-tooltip": "Dölj området för aktiva filter",
+       "rcfilters-activefilters-show-tooltip": "Visa området för aktiva filter",
        "rcfilters-advancedfilters": "Avancerade filter",
        "rcfilters-limit-title": "Resultat att visa",
        "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|ändring|ändringar}}, $2",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|timme|timmar}}",
        "rcfilters-highlighted-filters-list": "Markerade: $1",
        "rcfilters-quickfilters": "Sparade filter",
-       "rcfilters-quickfilters-placeholder-title": "Inga filter har sparats ännu",
+       "rcfilters-quickfilters-placeholder-title": "Inga filter har ännu sparats",
        "rcfilters-quickfilters-placeholder-description": "För att spara dina filterinställningar och återanvända dem senare, klicka på bokmärkesikonen under \"Aktiva filter\" nedan.",
        "rcfilters-savedqueries-defaultlabel": "Sparade filter",
        "rcfilters-savedqueries-rename": "Döp om",
index 4701127..9e5717c 100644 (file)
@@ -20,7 +20,8 @@
                        "Macofe",
                        "Uostofchuodnego",
                        "Przem(1)s",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "Matěj Suchánek"
                ]
        },
        "tog-underline": "Podsztrychniyniy linkōw:",
        "listusers": "Lista užytkowńikůw",
        "listusers-editsonly": "Pokoż yno użytkowńikůw kere majům sprowjyńa",
        "usereditcount": "$1 {{PLURAL:$1|sprowjyńe|sprowjyńa|sprowjyń}}",
-       "usercreated": "{{GENDER:$3:Utworzono}} $1 uo $2",
+       "usercreated": "{{GENDER:$3|Utworzono}} $1 uo $2",
        "newpages": "Nowe zajty",
        "newpages-username": "Mjano użytkowńika:",
        "ancientpages": "Nojstarše artikle",
index 65c4cc8..45a3874 100644 (file)
        "specialpages-group-media": "میڈیا رپورٹیں اور اپلوڈ کردہ",
        "specialpages-group-users": "صارفین اور اختیارات",
        "specialpages-group-highuse": "کثیر مستعمل صفحات",
-       "specialpages-group-pages": "فہارست صفحات",
+       "specialpages-group-pages": "صفحات کی فہرستیں",
        "specialpages-group-pagetools": "آلات صفحہ",
        "specialpages-group-wiki": "ڈیٹا اور آلات",
        "specialpages-group-redirects": "رجوع مکرر کے حامل خصوصی صفحات",
index a05f234..122c6df 100644 (file)
        "resetpass-submit-loggedin": "Thay đổi mật khẩu",
        "resetpass-submit-cancel": "Hủy bỏ",
        "resetpass-wrong-oldpass": "Mật khẩu tạm hoặc mật khẩu hiện thời không hợp lệ.\nCó thể bạn đã thay đổi mật khẩu của mình hoặc đã yêu cầu cung cấp một mật khẩu tạm mới.",
-       "resetpass-recycled": "Xin vui lòng chọn một mật khẩu khác với mật khẩu hiện tại.",
+       "resetpass-recycled": "Xin vui lòng thay đổi mật khẩu của bạn thành mật khẩu khác.",
        "resetpass-temp-emailed": "Bạn đã đăng nhập bằng mật khẩu tạm gửi qua thư điện tử. Để hoàn tất việc đăng nhập, bạn phải tạo lại mật khẩu mới tại đây:",
        "resetpass-temp-password": "Mật khẩu tạm:",
        "resetpass-abort-generic": "Một phần mở rộng đã hủy bỏ tác vụ thay đổi mật khẩu.",
        "resetpass-expired": "Mật khẩu của bạn đã hết hạn. Xin vui lòng tạo lại mật khẩu mới để đăng nhập.",
-       "resetpass-expired-soft": "Mật khẩu của bạn đã hết hạn và cần được đặt lại. Xin vui lòng chọn một mật khẩu mới lúc bây giờ hoặc bấm “{{int:authprovider-resetpass-skip-label}}” để đặt lại sau.",
-       "resetpass-validity-soft": "Mật khẩu của bạn không hợp lệ: $1\n\nXin hãy chọn mật khẩu mới bây giờ hoặc bấm “{{int:authprovider-resetpass-skip-label}}” để đặt lại sau.",
+       "resetpass-expired-soft": "Mật khẩu của bạn đã hết hạn và cần được thay đổi. Xin vui lòng thay đổi mật khẩu mới lúc bây giờ hoặc bấm “{{int:authprovider-resetpass-skip-label}}” để thay đổi sau.",
+       "resetpass-validity-soft": "Mật khẩu của bạn không hợp lệ: $1\n\nXin hãy chọn mật khẩu mới bây giờ hoặc bấm “{{int:authprovider-resetpass-skip-label}}” để thay đổi sau.",
        "passwordreset": "Tái tạo mật khẩu",
        "passwordreset-text-one": "Hãy điền mẫu đơn này để tái tạo mật khẩu.",
        "passwordreset-text-many": "Điền vào {{PLURAL:$1}}một hộp sau để nhận một mật khẩu tạm thời qua thư điện tử.",
        "rcfilters-other-review-tools": "Công cụ duyệt khác",
        "rcfilters-group-results-by-page": "Nhóm kết quả theo trang",
        "rcfilters-activefilters": "Bộ lọc hiện hành",
+       "rcfilters-activefilters-hide": "Ẩn",
+       "rcfilters-activefilters-show": "Hiện",
        "rcfilters-advancedfilters": "Bộ lọc nâng cao",
        "rcfilters-limit-title": "Số kết quả hiển thị",
        "rcfilters-limit-and-date-label": "$1 thay đổi, $2",
        "uploadstash-file-not-found-no-remote-thumb": "Nạp hình thu nhỏ thất bại: $1\nURL = $2",
        "uploadstash-file-not-found-missing-content-type": "Thiếu đầu đề kiểu-nội-dung (content-type).",
        "uploadstash-not-logged-in": "Người dùng chưa đăng nhập, các tập tin phải do người dùng đã đăng nhập tải lên.",
-       "uploadstash-no-such-key": "Khoá không tồn tại ($1), không thể xoá.",
+       "uploadstash-no-such-key": "Khóa không tồn tại ($1), không thể xóa.",
        "uploadstash-zero-length": "Tập tin có dung lượng bằng không.",
        "invalid-chunk-offset": "Khúc lệch (chunk offset) không hợp lệ",
        "img-auth-accessdenied": "Không cho phép truy cập",
        "dellogpage": "Nhật trình xóa",
        "dellogpagetext": "Dưới đây là danh sách các trang bị xóa gần đây nhất.",
        "deletionlog": "nhật trình xóa",
+       "log-name-create": "Nhật trình tạo trang",
+       "log-description-create": "Dưới đây là danh sách các trang được tạo gần đây nhất.",
        "logentry-create-create": "$1 {{GENDER:$2|đã tạo}} trang $3",
        "reverted": "Đã hồi phục một phiên bản cũ",
        "deletecomment": "Lý do:",
        "autosumm-blank": "Đã tẩy trống trang",
        "autosumm-replace": "Đã thay thế cả nội dung bằng “$1”",
        "autoredircomment": "Đổi hướng đến [[$1]]",
-       "autosumm-removed-redirect": "X đổi hướng đến trang [[$1]]",
+       "autosumm-removed-redirect": "Xóa đổi hướng đến trang [[$1]]",
        "autosumm-changed-redirect-target": "Thay đổi trang đích của đổi hướng từ [[$1]] sang [[$2]]",
        "autosumm-new": "Tạo trang mới với nội dung “$1”",
        "autosumm-newblank": "Đã tạo trang trống",
        "watchlistedit-clear-titles": "Các tiêu đề:",
        "watchlistedit-clear-submit": "Xóa sạch danh sách theo dõi (không thể lùi lại!)",
        "watchlistedit-clear-done": "Đã xóa sạch danh sách theo dõi của bạn.",
-       "watchlistedit-clear-jobqueue": "Danh sách theo dõi của bạn đang bị x. Quá trình này có thể tốn một khoảng thời gian!",
+       "watchlistedit-clear-jobqueue": "Danh sách theo dõi của bạn đang bị xóa. Quá trình này có thể tốn một khoảng thời gian!",
        "watchlistedit-clear-removed": "$1 tựa đề đã được xóa khỏi danh sách:",
        "watchlistedit-too-many": "Danh sách có quá nhiều trang để hiển thị.",
        "watchlisttools-clear": "Xóa sạch danh sách theo dõi",
        "tag-mw-contentmodelchange-description": "Sửa đổi [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel thay đổi kiểu nội dung] của trang",
        "tag-mw-new-redirect": "Trang đổi hướng mới",
        "tag-mw-new-redirect-description": "Các sửa đổi tạo ra trang đổi hướng mới hoặc biến một trang thành trang đổi hướng.",
-       "tag-mw-removed-redirect": "X đổi hướng",
+       "tag-mw-removed-redirect": "Xóa đổi hướng",
        "tag-mw-removed-redirect-description": "Các thay đổi biến một trang đổi hướng thành trang không đổi hướng",
        "tag-mw-changed-redirect-target": "Thay đổi trang đích của đổi hướng",
        "tag-mw-changed-redirect-target-description": "Các thay đổi làm thay đổi trang đích của một trang đổi hướng",
        "tag-mw-blank": "Tẩy trống trang",
-       "tag-mw-blank-description": "Các sửa đổi tẩy trống (x trắng) một trang",
+       "tag-mw-blank-description": "Các sửa đổi tẩy trống (xóa trắng) một trang",
        "tag-mw-replace": "Thay thế nội dung",
        "tag-mw-replace-description": "Các sửa đổi thay đổi trên 90% nội dung của một trang",
        "tag-mw-rollback": "Lùi tất cả",
index de47edf..70ec8d2 100644 (file)
@@ -8,7 +8,8 @@
                        "아라",
                        "Macofe",
                        "Matma Rex",
-                       "Reptilien.19831209BE1"
+                       "Reptilien.19831209BE1",
+                       "Matěj Suchánek"
                ]
        },
        "tog-underline": "Sorlignî les loyéns:",
        "saveusergroups": "Schaper les groupes d' uzeus",
        "userrights-groupsmember": "Mimbe di:",
        "userrights-groupsmember-auto": "Mimbe implicite di:",
-       "userrights-groups-help": "Vos ploz candjî les groupes ki {{GENDER:$1|cist uzeu|ciste uzeuse}} apårtént:\n* Ene boesse clitcheye c' est k' {{GENDER:$|il|elle}} est mimbe do groupe.\n* Ene boesse disclitcheye c' est k' {{GENDER:$|i|ele}} n' end est nén mimbe.\n* Ene sitoele (*) mostere k' on n' pout nén rsaetchî l' groupe on côp k' il a stî radjouté, ou årvierdimint.",
+       "userrights-groups-help": "Vos ploz candjî les groupes ki {{GENDER:$1|cist uzeu|ciste uzeuse}} apårtént:\n* Ene boesse clitcheye c' est k' {{GENDER:$1|il|elle}} est mimbe do groupe.\n* Ene boesse disclitcheye c' est k' {{GENDER:$1|i|ele}} n' end est nén mimbe.\n* Ene sitoele (*) mostere k' on n' pout nén rsaetchî l' groupe on côp k' il a stî radjouté, ou årvierdimint.",
        "userrights-reason": "Råjhon:",
        "userrights-no-interwiki": "Vos n' avoz nén les permissions po candjî les droets des uzeus so ds ôtes wikis.",
        "userrights-nodatabase": "Li båze di dnêyes «$1» n' egzistêye nén ou n' est nén locåle.",
index 4253a3b..997f73d 100644 (file)
        "viewsource": "ⵙⴽⵏ ⴰⵙⴰⴳⵎ",
        "viewsource-title": "ⵥⵕ ⴰⵖⴱⴰⵍⵓ ⵉ $1",
        "viewsourcetext": "ⵜⵣⵎⵔⴷ ⴰⴷ ⵜⵥⵔⴷ ⴷ ⴰⴷ ⵜⵙⵙⵏⵖⵍⴷ ⴰⵙⴰⴳⵎ ⵏ ⵜⴰⵙⵏⴰ ⴰⴷ",
+       "welcomeuser": "ⴰⵏⵙⵓⴼ, $1!",
+       "yourname": "ⵉⵙⵎ ⵏ ⵓⵙⵎⵔⴰⵙ",
        "userlogin-yourname": "ⵉⵙⵎ ⵏ ⵓⵙⵎⵔⴰⵙ",
        "userlogin-yourname-ph": "ⵙⵙⴽⵛⵎ ⵉⵙⵎ ⵏ ⵓⵏⵙⵙⵎⵔⵙ ⵏⵏⵎ/ⴽ",
+       "createacct-another-username-ph": "ⵙⵙⴽⵛⵎ ⵉⵙⵎ ⵏ ⵓⵏⵙⵙⵎⵔⵙ ⵏⵏⵎ/ⴽ",
        "yourpassword": "ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ",
        "userlogin-yourpassword": "ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ",
        "userlogin-yourpassword-ph": "ⵙⵙⴽⵛⵎ ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ ⵏⵏⴽ",
        "createacct-benefit-body1": "{{PLURAL:$1|ⴰⵙⵏⴼⵍ|ⵉⵙⵏⴼⴰⵍ}}",
        "createacct-benefit-body2": "{{PLURAL:$1|ⵜⴰⵙⵏⴰ|ⵜⴰⵙⵏⵉⵡⵉⵏ}}",
        "createacct-benefit-body3": "{{PLURAL:$1|ⴰⵏⴰⵎⵓ|ⵉⵏⴰⵎⵓⵜⵏ}} {{PLURAL:$1|ⴰⵎⴳⴳⴰⵔⵓ|ⵉⵎⴳⴳⵓⵔⴰ}}",
+       "mailmypassword": "ⵔⴰⵔ ⴷ ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ",
        "loginlanguagelabel": "ⵜⵓⵜⵍⴰⵢⵜ: $1",
        "pt-login": "ⴽⵛⵎ",
        "pt-login-button": "ⴽⵛⵎ",
        "botpasswords-label-delete": "ⴽⴽⵙ",
        "resetpass-submit-cancel": "ⵙⵔ",
        "passwordreset": "ⵔⴰⵔ ⴷ ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵔⴰⵢ",
+       "passwordreset-username": "ⵉⵙⵎ ⵏ ⵓⵙⵎⵔⴰⵙ:",
        "changeemail-newemail": "ⵉⵎⴰⵢⵍ ⴰⵎⴰⵢⵏⵓ:",
        "changeemail-none": "(ⵓⵍⴰ ⵢⴰⵏ)",
        "bold_sample": "ⴰⴹⵔⵉⵙ ⴰⵣⵓⵔⴰⵔ",
        "showpreview": "ⵙⴽⵏ ⴰⴱⵔⵉⴼⵢⵓ",
        "showdiff": "ⵙⵎⴰⵍ ⵉⵙⵏⴼⵍⵏ",
        "loginreqlink": "ⴽⵛⵎ",
+       "accmailtitle": "ⵜⴰⴳⵓⵔⵉ ⵓⵣⵔⴰⵢ ⵜⴻⵜⵜⵡⴰⵣⵏ",
        "newarticle": "(ⴰⵎⴰⵢⵏⵓ)",
        "newarticletext": "ⵜⴹⴼⴰⵔⴷ ⵢⴰⵏ ⵓⵙⵖⵏ ⵖⵔ ⵢⴰⵜ ⵜⴰⵙⵏⴰ ⵏⵏⴰ ⵓⵔ ⵜⴰ ⵉⵍⵍⵉⵏ. \nⴰⴼⴰⴷ ⴰⴷ ⵜⵙⵏⵓⵍⴼⵓⴷ ⵜⴰⵙⵏⴰ, ⵙⵙⵏⵜⵉ ⵜⵉⵔⵔⴰ ⴳ ⵓⴼⵏⵉⵇ ⴳ ⵉⵣⴷⴷⴰⵔ (ⵥⵔ [$1 ⵜⴰⵙⵏⴰ ⵏ ⵜⵡⵉⵙⵉ] ⵉ ⵡⵓⴳⴳⴰⵔ ⵏ ⵉⵏⵖⵎⵉⵙⵏ). \nⵎⴽ ⵜⵍⵍⵉⴷ ⴷⴰ ⵙ ⵓⵣⴳⴰⵍ, ⴰⴽⵍ ⵖⴼ <strong>ⴰⵖⵓⵍ</strong> ⴳ ⵓⵙⴰⵔⴰ ⵏⵏⴽ.",
        "noarticletext": "ⵓⵔ ⵉⵍⵍⵉ ⴽⵔⴰ ⵏ ⵓⴹⵔⵉⵙ ⴳ ⵜⴰⵙⵏⴰ ⴰⴷ ⵖⵉⵍⴰ. \nⵜⵣⵎⵔⴷ ⴰⴷ [[Special:Search/{{PAGENAME}}|ⵜⵔⵣⵓⴷ ⵖⴼ ⵓⵣⵡⵍ ⵏⵏⵙ]] ⴳ ⵜⴰⵙⵏⵉⵡⵉⵏ ⵢⴰⴹⵏ, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ⵔⵣⵓ ⵖⴼ logs ⵖⵔⵙ ⵉⵇⵇⵏⴻⵏ],\nⵏⵖ [{{fullurl:{{FULLPAGENAME}}|action=edit}} ⵙⵏⵓⵍⴼⵓ ⵜⴰⵙⵏⴰ]</span>.",
        "editing": "ⴰⵙⵏⴼⵍ ⵏ $1",
        "creating": "ⴰⵙⵏⵓⵍⴼⵓ ⵏ $1",
        "editingsection": "ⵙⵏⴼⵍ ⴰⴳⵣⵣⵓⵎ $1",
+       "yourtext": "ⴰⴹⵕⵉⵙ ⵏⵏⴽ/ⵎ",
        "templatesused": "{{PLURAL:$1|ⵜⴰⵙⴽⴽⴰ|ⵜⴰⵙⴽⴽⵉⵡⵉⵏ}} {{PLURAL:$1|ⵉⵜⵜⵓⵙⵎⵔⵙⵏ|ⵜⵜⵓⵙⵎⵔⵙⵏⵉⵏ}} ⴳ ⵜⴰⵙⵏⴰ ⴰⴷ:",
        "template-protected": "(ⵉⵜⵜⵢⴰⵔⴰⵢ)",
        "template-semiprotected": "(ⵜⵎⵃⴹⴰ ⵙ ⵓⴳⵣⵎⴰⵏ)",
        "filedelete-submit": "ⴽⴽⵙ",
        "download": "ⴰⴳⵎ",
        "randompage": "ⵜⴰⵙⵏⴰ ⵜⴰⴷⵀⵎⴰⵙⵜ",
+       "randomincategory-submit": "ⴷⴷⵓ",
        "statistics": "ⴰⵙⵏⵎⴽⵜⴰ",
        "statistics-pages": "ⵜⴰⵙⵏⵉⵡⵉⵏ",
+       "pageswithprop-submit": "ⴷⴷⵓ",
        "brokenredirects-edit": "ⵙⵏⴼⵍ",
        "brokenredirects-delete": "ⴽⴽⵙ",
        "withoutinterwiki-legend": "ⴰⵣⵡⵉⵔ",
        "whatlinkshere-hidelinks": "$1 ⵉⵙⵖⵓⵏⴻⵏ",
        "whatlinkshere-hideimages": "$1 ⵉⵣⴷⴰⵢⵏ ⵖⵔ ⵓⴼⵉⵍⵢⵓ",
        "whatlinkshere-filters": "ⵜⵉⵙⵜⵜⴰⵢⵉⵏ",
+       "whatlinkshere-submit": "ⴷⴷⵓ",
        "ipbreason": "ⵜⴰⵎⵏⵜⵉⵍⵜ:",
        "ipboptions": "2 ⵜⵙⵔⴰⴳⵉⵏ:2 ⵜⵙⵔⴰⴳⵉⵏ,1 ⵡⴰⵙⵙ:1 ⵡⴰⵙⵙ,3 ⵡⵓⵙⵙⴰⵏ:3 ⵡⵓⵙⵙⴰⵏ,1 ⵉⵎⴰⵍⴰⵙⵙ:1 ⵉⵎⴰⵍⴰⵙⵙ,2 ⵉⵎⴰⵍⴰⵙⵙⵏ:2 ⵉⵎⴰⵍⴰⵙⵙⵏ,1 ⵡⴰⵢⵢⵓⵔ:1 ⵡⴰⵢⵢⵓⵔ,3 ⵉⵢⵢⵉⵔⵏ:3 ⵉⵢⵢⵉⵔⵏ,6 ⵉⵢⵢⵉⵔⵏ:6 ⵉⵢⵢⵉⵔⵏ,1 ⵓⵙⴳⴳⴰⵙ:1 ⵓⵙⴳⴳⴰⵙ,ⴰⵔⵓⵙⵎⵉⵍ:ⴰⵔⵓⵙⵎⵉⵍ",
        "blocklist-reason": "ⵜⴰⵎⵏⵜⵉⵍⵜ",
        "imgmultigo": "ⴷⴷⵓ!",
        "imgmultigoto": "ⴷⴷⵓ ⵖⵔ ⵜⴰⵙⵏⴰ ⴰⴷ $1",
        "img-lang-default": "(ⵜⵓⵜⵍⴰⵢⵜ ⵙ ⵓⵡⵏⵓⵍ)",
+       "img-lang-go": "ⴷⴷⵓ",
+       "table_pager_limit_submit": "ⴷⴷⵓ",
        "watchlistedit-clear-explain": "ⵎⴰⵕⵕⴰ",
        "watchlisttools-clear": "ⵙⴼⴹ ⵜⴰⵍⴳⴰⵎⵜ ⵏ ⵓⴹⴼⴼⵓⵔ",
        "watchlisttools-view": "ⵙⴽⵏ ⵉⵙⵏⵉⴼⵉⵍⵏ ⴷ ⵢⵓⵙⴰⵏ",
index 3528c79..fad61bf 100644 (file)
@@ -98,7 +98,8 @@
                        "逆襲的天邪鬼",
                        "WhitePhosphorus",
                        "A2093064",
-                       "EagerLin"
+                       "EagerLin",
+                       "Deathkon"
                ]
        },
        "tog-underline": "链接下划线:",
        "resetpass-submit-loggedin": "更改密码",
        "resetpass-submit-cancel": "取消",
        "resetpass-wrong-oldpass": "临时密码或当前密码无效。您可能已经更改了您的密码,或者请求了新的临时密码。",
-       "resetpass-recycled": "请更改您的密码为与当前密码不同的密码。",
+       "resetpass-recycled": "请将您的密码更改为除当前密码以外的其他密码。",
        "resetpass-temp-emailed": "您使用了通过电子邮件发送的临时密码登录。要完成登录,您必须在此设置一个新密码:",
        "resetpass-temp-password": "临时密码:",
        "resetpass-abort-generic": "密码更改已经被扩展程序中止。",
        "converter-manual-rule-error": "在手动语言转换规则中检测到错误",
        "undo-success": "该编辑可以被撤销。请检查下面的对比以核实您想要撤销的内容,然后保存下面的更改以完成撤销。",
        "undo-failure": "因存在冲突的中间编辑,本编辑不能撤销。",
+       "undo-main-slot-only": "编辑无法撤销,因为其涉及主位置以外的内容。",
        "undo-norev": "该编辑无法撤消,因为它不存在或已被删除。",
        "undo-nochange": "这次编辑似乎已被撤销。",
        "undo-summary": "撤销[[Special:Contributions/$2|$2]]([[User talk:$2|讨论]])的版本$1",
index 8bfa8dc..a6c497a 100644 (file)
        "thu": "四",
        "fri": "五",
        "sat": "六",
-       "january": "1月",
+       "january": "月",
        "february": "二月",
        "march": "三月",
        "april": "四月",
        "september": "九月",
        "october": "十月",
        "november": "十一月",
-       "december": "12月",
+       "december": "十二月",
        "january-gen": "一月",
        "february-gen": "二月",
        "march-gen": "三月",
        "helppage-top-gethelp": "說明",
        "mainpage": "首頁",
        "mainpage-description": "首頁",
-       "policy-url": "Project:Policy",
+       "policy-url": "Project:方針",
        "portal": "社群入口",
        "portal-url": "Project:社群入口",
        "privacy": "隱私政策",
        "converter-manual-rule-error": "手動語言轉換規則時偵測到錯誤",
        "undo-success": "此編輯可以被還原。\n請檢查以下比較表,確認您是否要還原,然後儲存以下變更以完成編輯還原。",
        "undo-failure": "由於編輯的修訂間有衝突,此編輯不能還原。",
+       "undo-main-slot-only": "編輯無法還原,因為有包含到在主分配之外的內容。",
        "undo-norev": "此編輯不存在或已被刪除,無法還原。",
        "undo-nochange": "此編輯已被還原。",
        "undo-summary": "取消由 [[Special:Contributions/$2|$2]] ([[User talk:$2|對話]]) 所作出的修訂 $1",
        "revdelete-text-file": "已刪除的檔案版本仍會出現於檔案歷史中,但內容將不開放存取。",
        "logdelete-text": "已刪除的日誌活動仍會出現於日誌中,但其部分內容將不會向公眾開放存取。",
        "revdelete-text-others": "若未設定額外條件,其他管理員仍有權限檢視與取消刪除隱藏的內容。",
-       "revdelete-confirm": "è«\8b確èª\8dæ\82¨æ\98¯å\90¦æ\98\8eç\99½æ­¤å\8b\95ä½\9cæ\9c\83é\80 æ\88\90ç\9a\84å¾\8cæ\9e\9cï¼\8c以å\8f\8aæ\82¨æ\89\80å\81\9aç\9a\84å\8b\95ä½\9cæ\98¯å\90¦ç¬¦å\90\88[[{{MediaWiki:Policy-url}}|æ\94¿ç­\96]]規範。",
+       "revdelete-confirm": "è«\8b確èª\8dæ\82¨æ\98¯å\90¦æ\98\8eç\99½æ­¤å\8b\95ä½\9cæ\9c\83é\80 æ\88\90ç\9a\84å¾\8cæ\9e\9cï¼\8c以å\8f\8aæ\82¨æ\89\80å\81\9aç\9a\84å\8b\95ä½\9cæ\98¯å\90¦ç¬¦å\90\88[[{{MediaWiki:Policy-url}}|æ\96¹é\87\9d]]規範。",
        "revdelete-suppress-text": "禁止顯示應<strong>只有</strong>在下述情形時使用:\n* 潛在誹謗的資訊\n* 不恰當的個人資料\n*: <em>住家地址、電話號碼、身分證號碼等。</em>",
        "revdelete-legend": "設定顯示限制",
        "revdelete-hide-text": "修訂文字",
index f19a69b..8475dca 100644 (file)
@@ -43,8 +43,8 @@
        </script>
        <script src="modules/lib/jquery/jquery.js"></script>
        <script src="modules/src/mediawiki/mediawiki.js"></script>
-       <script src="modules/src/mediawiki/mediawiki.base.js"></script>
-       <script src="modules/src/mediawiki/mediawiki.errorLogger.js"></script>
+       <script src="modules/src/mediawiki.base/mediawiki.base.js"></script>
+       <script src="modules/src/mediawiki.base/mediawiki.errorLogger.js"></script>
        <script src="modules/lib/oojs/oojs.jquery.js"></script>
        <script src="modules/lib/oojs-ui/oojs-ui-core.js"></script>
        <script src="modules/lib/oojs-ui/oojs-ui-widgets.js"></script>
index 3b32c00..b2e976c 100644 (file)
@@ -137,7 +137,8 @@ class PopulateChangeTagDef extends Maintenance {
                        'change_tag_def',
                        [ 'ctd_name', 'ctd_id' ],
                        [],
-                       __METHOD__
+                       __METHOD__,
+                       [ 'ORDER BY' => 'ctd_id' ]
                );
 
                foreach ( $changeTagDefs as $row ) {
@@ -150,6 +151,7 @@ class PopulateChangeTagDef extends Maintenance {
                $dbw = $this->lbFactory->getMainLB()->getConnection( DB_MASTER );
                $sleep = (int)$this->getOption( 'sleep', 10 );
                $lastId = 0;
+               $this->output( "Starting to add ct_tag_id = {$tagId} for ct_tag = {$tagName}" );
                while ( true ) {
                        // Given that indexes might not be there, it's better to use replica
                        $ids = $dbr->selectFieldValues(
@@ -157,7 +159,7 @@ class PopulateChangeTagDef extends Maintenance {
                                'ct_id',
                                [ 'ct_tag' => $tagName, 'ct_tag_id' => null, 'ct_id > ' . $lastId ],
                                __METHOD__,
-                               [ 'LIMIT' => $this->getBatchSize() ]
+                               [ 'LIMIT' => $this->getBatchSize(), 'ORDER BY' => 'ct_id' ]
                        );
 
                        if ( !$ids ) {
@@ -170,6 +172,8 @@ class PopulateChangeTagDef extends Maintenance {
                                        "These ids will be changed to have \"{$tagId}\" as tag id: " . implode( ', ', $ids ) . "\n"
                                );
                                continue;
+                       } else {
+                               $this->output( "Updating ct_tag_id = {$tagId} up to row ct_id = {$lastId}" );
                        }
 
                        $dbw->update(
@@ -184,6 +188,8 @@ class PopulateChangeTagDef extends Maintenance {
                                sleep( $sleep );
                        }
                }
+
+               $this->output( "Finished adding ct_tag_id = {$tagId} for ct_tag = {$tagName}" );
        }
 
 }
index b7ecd10..44b028d 100644 (file)
@@ -228,6 +228,7 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'jquery.hidpi' => [
+               'deprecated' => 'Use of the srcset polyfill is deprecated since MediaWiki 1.32.0',
                'scripts' => 'resources/src/jquery/jquery.hidpi.js',
                'targets' => [ 'desktop', 'mobile' ],
        ],
@@ -848,12 +849,18 @@ return [
                'scripts' => [
                        'resources/src/mediawiki/mediawiki.js',
                        'resources/src/mediawiki/mediawiki.requestIdleCallback.js',
-                       'resources/src/mediawiki/mediawiki.errorLogger.js',
-                       'resources/src/mediawiki/mediawiki.base.js',
                ],
                'debugScripts' => 'resources/src/mediawiki/mediawiki.log.js',
                'targets' => [ 'desktop', 'mobile' ],
        ],
+       'mediawiki.base' => [
+               // Keep in sync with maintenance/jsduck/eg-iframe.html
+               'scripts' => [
+                       'resources/src/mediawiki.base/mediawiki.errorLogger.js',
+                       'resources/src/mediawiki.base/mediawiki.base.js',
+               ],
+               'targets' => [ 'desktop', 'mobile' ],
+       ],
        'mediawiki.apihelp' => [
                'styles' => 'resources/src/mediawiki.apihelp.css',
                'targets' => [ 'desktop' ],
@@ -1045,12 +1052,6 @@ return [
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
-       'mediawiki.hidpi' => [
-               'scripts' => 'resources/src/mediawiki.hidpi/hidpi.js',
-               'dependencies' => 'jquery.hidpi',
-               'skipFunction' => 'resources/src/mediawiki.hidpi/skip.js',
-               'targets' => [ 'desktop', 'mobile' ],
-       ],
        'mediawiki.hlist' => [
                'targets' => [ 'desktop', 'mobile' ],
                'styles' => [
@@ -2767,12 +2768,6 @@ return [
                ],
        ],
 
-       /* dom-level2-shim */
-       'dom-level2-shim' => [
-               'deprecated' => 'Use of the "dom-level2-shim" module is deprecated since MediaWiki 1.29.0',
-               'targets' => [ 'desktop', 'mobile' ],
-       ],
-
        /**
         * html5shiv
         *
diff --git a/resources/src/mediawiki.base/mediawiki.base.js b/resources/src/mediawiki.base/mediawiki.base.js
new file mode 100644 (file)
index 0000000..ed24af3
--- /dev/null
@@ -0,0 +1,644 @@
+/*!
+ * This file is currently loaded as part of the 'mediawiki' module and therefore
+ * concatenated to mediawiki.js and executed at the same time. This file exists
+ * to help prepare for splitting up the 'mediawiki' module.
+ * This effort is tracked at https://phabricator.wikimedia.org/T192623
+ *
+ * In short:
+ *
+ * - mediawiki.js will be reduced to the minimum needed to define mw.loader and
+ *   mw.config, and then moved to its own private "mediawiki.loader" module that
+ *   can be embedded within the StartupModule response.
+ *
+ * - mediawiki.base.js and other files in this directory will remain part of the
+ *   "mediawiki" module, and will remain a default/implicit dependency for all
+ *   regular modules, just like jquery and wikibits already are.
+ */
+/* globals mw */
+( function () {
+       'use strict';
+
+       var slice = Array.prototype.slice,
+               mwLoaderTrack = mw.track,
+               trackCallbacks = $.Callbacks( 'memory' ),
+               trackHandlers = [],
+               hasOwn = Object.prototype.hasOwnProperty;
+
+       /**
+        * Object constructor for messages.
+        *
+        * Similar to the Message class in MediaWiki PHP.
+        *
+        * Format defaults to 'text'.
+        *
+        *     @example
+        *
+        *     var obj, str;
+        *     mw.messages.set( {
+        *         'hello': 'Hello world',
+        *         'hello-user': 'Hello, $1!',
+        *         'welcome-user': 'Welcome back to $2, $1! Last visit by $1: $3'
+        *     } );
+        *
+        *     obj = new mw.Message( mw.messages, 'hello' );
+        *     mw.log( obj.text() );
+        *     // Hello world
+        *
+        *     obj = new mw.Message( mw.messages, 'hello-user', [ 'John Doe' ] );
+        *     mw.log( obj.text() );
+        *     // Hello, John Doe!
+        *
+        *     obj = new mw.Message( mw.messages, 'welcome-user', [ 'John Doe', 'Wikipedia', '2 hours ago' ] );
+        *     mw.log( obj.text() );
+        *     // Welcome back to Wikipedia, John Doe! Last visit by John Doe: 2 hours ago
+        *
+        *     // Using mw.message shortcut
+        *     obj = mw.message( 'hello-user', 'John Doe' );
+        *     mw.log( obj.text() );
+        *     // Hello, John Doe!
+        *
+        *     // Using mw.msg shortcut
+        *     str = mw.msg( 'hello-user', 'John Doe' );
+        *     mw.log( str );
+        *     // Hello, John Doe!
+        *
+        *     // Different formats
+        *     obj = new mw.Message( mw.messages, 'hello-user', [ 'John "Wiki" <3 Doe' ] );
+        *
+        *     obj.format = 'text';
+        *     str = obj.toString();
+        *     // Same as:
+        *     str = obj.text();
+        *
+        *     mw.log( str );
+        *     // Hello, John "Wiki" <3 Doe!
+        *
+        *     mw.log( obj.escaped() );
+        *     // Hello, John &quot;Wiki&quot; &lt;3 Doe!
+        *
+        * @class mw.Message
+        *
+        * @constructor
+        * @param {mw.Map} map Message store
+        * @param {string} key
+        * @param {Array} [parameters]
+        */
+       function Message( map, key, parameters ) {
+               this.format = 'text';
+               this.map = map;
+               this.key = key;
+               this.parameters = parameters === undefined ? [] : slice.call( parameters );
+               return this;
+       }
+
+       Message.prototype = {
+               /**
+                * Get parsed contents of the message.
+                *
+                * The default parser does simple $N replacements and nothing else.
+                * This may be overridden to provide a more complex message parser.
+                * The primary override is in the mediawiki.jqueryMsg module.
+                *
+                * This function will not be called for nonexistent messages.
+                *
+                * @return {string} Parsed message
+                */
+               parser: function () {
+                       return mw.format.apply( null, [ this.map.get( this.key ) ].concat( this.parameters ) );
+               },
+
+               /**
+                * Add (does not replace) parameters for `$N` placeholder values.
+                *
+                * @param {Array} parameters
+                * @return {mw.Message}
+                * @chainable
+                */
+               params: function ( parameters ) {
+                       var i;
+                       for ( i = 0; i < parameters.length; i++ ) {
+                               this.parameters.push( parameters[ i ] );
+                       }
+                       return this;
+               },
+
+               /**
+                * Convert message object to its string form based on current format.
+                *
+                * @return {string} Message as a string in the current form, or `<key>` if key
+                *  does not exist.
+                */
+               toString: function () {
+                       var text;
+
+                       if ( !this.exists() ) {
+                               // Use ⧼key⧽ as text if key does not exist
+                               // Err on the side of safety, ensure that the output
+                               // is always html safe in the event the message key is
+                               // missing, since in that case its highly likely the
+                               // message key is user-controlled.
+                               // '⧼' is used instead of '<' to side-step any
+                               // double-escaping issues.
+                               // (Keep synchronised with Message::toString() in PHP.)
+                               return '⧼' + mw.html.escape( this.key ) + '⧽';
+                       }
+
+                       if ( this.format === 'plain' || this.format === 'text' || this.format === 'parse' ) {
+                               text = this.parser();
+                       }
+
+                       if ( this.format === 'escaped' ) {
+                               text = this.parser();
+                               text = mw.html.escape( text );
+                       }
+
+                       return text;
+               },
+
+               /**
+                * Change format to 'parse' and convert message to string
+                *
+                * If jqueryMsg is loaded, this parses the message text from wikitext
+                * (where supported) to HTML
+                *
+                * Otherwise, it is equivalent to plain.
+                *
+                * @return {string} String form of parsed message
+                */
+               parse: function () {
+                       this.format = 'parse';
+                       return this.toString();
+               },
+
+               /**
+                * Change format to 'plain' and convert message to string
+                *
+                * This substitutes parameters, but otherwise does not change the
+                * message text.
+                *
+                * @return {string} String form of plain message
+                */
+               plain: function () {
+                       this.format = 'plain';
+                       return this.toString();
+               },
+
+               /**
+                * Change format to 'text' and convert message to string
+                *
+                * If jqueryMsg is loaded, {{-transformation is done where supported
+                * (such as {{plural:}}, {{gender:}}, {{int:}}).
+                *
+                * Otherwise, it is equivalent to plain
+                *
+                * @return {string} String form of text message
+                */
+               text: function () {
+                       this.format = 'text';
+                       return this.toString();
+               },
+
+               /**
+                * Change the format to 'escaped' and convert message to string
+                *
+                * This is equivalent to using the 'text' format (see #text), then
+                * HTML-escaping the output.
+                *
+                * @return {string} String form of html escaped message
+                */
+               escaped: function () {
+                       this.format = 'escaped';
+                       return this.toString();
+               },
+
+               /**
+                * Check if a message exists
+                *
+                * @see mw.Map#exists
+                * @return {boolean}
+                */
+               exists: function () {
+                       return this.map.exists( this.key );
+               }
+       };
+
+       /**
+        * @class mw
+        * @singleton
+        */
+
+       /**
+        * @inheritdoc mw.inspect#runReports
+        * @method
+        */
+       mw.inspect = function () {
+               var args = arguments;
+               mw.loader.using( 'mediawiki.inspect', function () {
+                       mw.inspect.runReports.apply( mw.inspect, args );
+               } );
+       };
+
+       /**
+        * Format a string. Replace $1, $2 ... $N with positional arguments.
+        *
+        * Used by Message#parser().
+        *
+        * @since 1.25
+        * @param {string} formatString Format string
+        * @param {...Mixed} parameters Values for $N replacements
+        * @return {string} Formatted string
+        */
+       mw.format = function ( formatString ) {
+               var parameters = slice.call( arguments, 1 );
+               return formatString.replace( /\$(\d+)/g, function ( str, match ) {
+                       var index = parseInt( match, 10 ) - 1;
+                       return parameters[ index ] !== undefined ? parameters[ index ] : '$' + match;
+               } );
+       };
+
+       // Expose Message constructor
+       mw.Message = Message;
+
+       /**
+        * Get a message object.
+        *
+        * Shortcut for `new mw.Message( mw.messages, key, parameters )`.
+        *
+        * @see mw.Message
+        * @param {string} key Key of message to get
+        * @param {...Mixed} parameters Values for $N replacements
+        * @return {mw.Message}
+        */
+       mw.message = function ( key ) {
+               var parameters = slice.call( arguments, 1 );
+               return new Message( mw.messages, key, parameters );
+       };
+
+       /**
+        * Get a message string using the (default) 'text' format.
+        *
+        * Shortcut for `mw.message( key, parameters... ).text()`.
+        *
+        * @see mw.Message
+        * @param {string} key Key of message to get
+        * @param {...Mixed} parameters Values for $N replacements
+        * @return {string}
+        */
+       mw.msg = function () {
+               return mw.message.apply( mw.message, arguments ).toString();
+       };
+
+       /**
+        * Track an analytic event.
+        *
+        * This method provides a generic means for MediaWiki JavaScript code to capture state
+        * information for analysis. Each logged event specifies a string topic name that describes
+        * the kind of event that it is. Topic names consist of dot-separated path components,
+        * arranged from most general to most specific. Each path component should have a clear and
+        * well-defined purpose.
+        *
+        * Data handlers are registered via `mw.trackSubscribe`, and receive the full set of
+        * events that match their subcription, including those that fired before the handler was
+        * bound.
+        *
+        * @param {string} topic Topic name
+        * @param {Object} [data] Data describing the event, encoded as an object
+        */
+       mw.track = function ( topic, data ) {
+               mwLoaderTrack( topic, data );
+               trackCallbacks.fire( mw.trackQueue );
+       };
+
+       /**
+        * Register a handler for subset of analytic events, specified by topic.
+        *
+        * Handlers will be called once for each tracked event, including any events that fired before the
+        * handler was registered; 'this' is set to a plain object with a 'timeStamp' property indicating
+        * the exact time at which the event fired, a string 'topic' property naming the event, and a
+        * 'data' property which is an object of event-specific data. The event topic and event data are
+        * also passed to the callback as the first and second arguments, respectively.
+        *
+        * @param {string} topic Handle events whose name starts with this string prefix
+        * @param {Function} callback Handler to call for each matching tracked event
+        * @param {string} callback.topic
+        * @param {Object} [callback.data]
+        */
+       mw.trackSubscribe = function ( topic, callback ) {
+               var seen = 0;
+               function handler( trackQueue ) {
+                       var event;
+                       for ( ; seen < trackQueue.length; seen++ ) {
+                               event = trackQueue[ seen ];
+                               if ( event.topic.indexOf( topic ) === 0 ) {
+                                       callback.call( event, event.topic, event.data );
+                               }
+                       }
+               }
+
+               trackHandlers.push( [ handler, callback ] );
+
+               trackCallbacks.add( handler );
+       };
+
+       /**
+        * Stop handling events for a particular handler
+        *
+        * @param {Function} callback
+        */
+       mw.trackUnsubscribe = function ( callback ) {
+               trackHandlers = trackHandlers.filter( function ( fns ) {
+                       if ( fns[ 1 ] === callback ) {
+                               trackCallbacks.remove( fns[ 0 ] );
+                               // Ensure the tuple is removed to avoid holding on to closures
+                               return false;
+                       }
+                       return true;
+               } );
+       };
+
+       // Fire events from before track() triggred fire()
+       trackCallbacks.fire( mw.trackQueue );
+
+       /**
+        * Registry and firing of events.
+        *
+        * MediaWiki has various interface components that are extended, enhanced
+        * or manipulated in some other way by extensions, gadgets and even
+        * in core itself.
+        *
+        * This framework helps streamlining the timing of when these other
+        * code paths fire their plugins (instead of using document-ready,
+        * which can and should be limited to firing only once).
+        *
+        * Features like navigating to other wiki pages, previewing an edit
+        * and editing itself – without a refresh – can then retrigger these
+        * hooks accordingly to ensure everything still works as expected.
+        *
+        * Example usage:
+        *
+        *     mw.hook( 'wikipage.content' ).add( fn ).remove( fn );
+        *     mw.hook( 'wikipage.content' ).fire( $content );
+        *
+        * Handlers can be added and fired for arbitrary event names at any time. The same
+        * event can be fired multiple times. The last run of an event is memorized
+        * (similar to `$(document).ready` and `$.Deferred().done`).
+        * This means if an event is fired, and a handler added afterwards, the added
+        * function will be fired right away with the last given event data.
+        *
+        * Like Deferreds and Promises, the mw.hook object is both detachable and chainable.
+        * Thus allowing flexible use and optimal maintainability and authority control.
+        * You can pass around the `add` and/or `fire` method to another piece of code
+        * without it having to know the event name (or `mw.hook` for that matter).
+        *
+        *     var h = mw.hook( 'bar.ready' );
+        *     new mw.Foo( .. ).fetch( { callback: h.fire } );
+        *
+        * Note: Events are documented with an underscore instead of a dot in the event
+        * name due to jsduck not supporting dots in that position.
+        *
+        * @class mw.hook
+        */
+       mw.hook = ( function () {
+               var lists = {};
+
+               /**
+                * Create an instance of mw.hook.
+                *
+                * @method hook
+                * @member mw
+                * @param {string} name Name of hook.
+                * @return {mw.hook}
+                */
+               return function ( name ) {
+                       var list = hasOwn.call( lists, name ) ?
+                               lists[ name ] :
+                               lists[ name ] = $.Callbacks( 'memory' );
+
+                       return {
+                               /**
+                                * Register a hook handler
+                                *
+                                * @param {...Function} handler Function to bind.
+                                * @chainable
+                                */
+                               add: list.add,
+
+                               /**
+                                * Unregister a hook handler
+                                *
+                                * @param {...Function} handler Function to unbind.
+                                * @chainable
+                                */
+                               remove: list.remove,
+
+                               /**
+                                * Run a hook.
+                                *
+                                * @param {...Mixed} data
+                                * @return {mw.hook}
+                                * @chainable
+                                */
+                               fire: function () {
+                                       return list.fireWith.call( this, null, slice.call( arguments ) );
+                               }
+                       };
+               };
+       }() );
+
+       /**
+        * HTML construction helper functions
+        *
+        *     @example
+        *
+        *     var Html, output;
+        *
+        *     Html = mw.html;
+        *     output = Html.element( 'div', {}, new Html.Raw(
+        *         Html.element( 'img', { src: '<' } )
+        *     ) );
+        *     mw.log( output ); // <div><img src="&lt;"/></div>
+        *
+        * @class mw.html
+        * @singleton
+        */
+       mw.html = ( function () {
+               function escapeCallback( s ) {
+                       switch ( s ) {
+                               case '\'':
+                                       return '&#039;';
+                               case '"':
+                                       return '&quot;';
+                               case '<':
+                                       return '&lt;';
+                               case '>':
+                                       return '&gt;';
+                               case '&':
+                                       return '&amp;';
+                       }
+               }
+
+               return {
+                       /**
+                        * Escape a string for HTML.
+                        *
+                        * Converts special characters to HTML entities.
+                        *
+                        *     mw.html.escape( '< > \' & "' );
+                        *     // Returns &lt; &gt; &#039; &amp; &quot;
+                        *
+                        * @param {string} s The string to escape
+                        * @return {string} HTML
+                        */
+                       escape: function ( s ) {
+                               return s.replace( /['"<>&]/g, escapeCallback );
+                       },
+
+                       /**
+                        * Create an HTML element string, with safe escaping.
+                        *
+                        * @param {string} name The tag name.
+                        * @param {Object} [attrs] An object with members mapping element names to values
+                        * @param {string|mw.html.Raw|mw.html.Cdata|null} [contents=null] The contents of the element.
+                        *
+                        *  - string: Text to be escaped.
+                        *  - null: The element is treated as void with short closing form, e.g. `<br/>`.
+                        *  - this.Raw: The raw value is directly included.
+                        *  - this.Cdata: The raw value is directly included. An exception is
+                        *    thrown if it contains any illegal ETAGO delimiter.
+                        *    See <https://www.w3.org/TR/html401/appendix/notes.html#h-B.3.2>.
+                        * @return {string} HTML
+                        */
+                       element: function ( name, attrs, contents ) {
+                               var v, attrName, s = '<' + name;
+
+                               if ( attrs ) {
+                                       for ( attrName in attrs ) {
+                                               v = attrs[ attrName ];
+                                               // Convert name=true, to name=name
+                                               if ( v === true ) {
+                                                       v = attrName;
+                                                       // Skip name=false
+                                               } else if ( v === false ) {
+                                                       continue;
+                                               }
+                                               s += ' ' + attrName + '="' + this.escape( String( v ) ) + '"';
+                                       }
+                               }
+                               if ( contents === undefined || contents === null ) {
+                                       // Self close tag
+                                       s += '/>';
+                                       return s;
+                               }
+                               // Regular open tag
+                               s += '>';
+                               switch ( typeof contents ) {
+                                       case 'string':
+                                               // Escaped
+                                               s += this.escape( contents );
+                                               break;
+                                       case 'number':
+                                       case 'boolean':
+                                               // Convert to string
+                                               s += String( contents );
+                                               break;
+                                       default:
+                                               if ( contents instanceof this.Raw ) {
+                                                       // Raw HTML inclusion
+                                                       s += contents.value;
+                                               } else if ( contents instanceof this.Cdata ) {
+                                                       // CDATA
+                                                       if ( /<\/[a-zA-z]/.test( contents.value ) ) {
+                                                               throw new Error( 'mw.html.element: Illegal end tag found in CDATA' );
+                                                       }
+                                                       s += contents.value;
+                                               } else {
+                                                       throw new Error( 'mw.html.element: Invalid type of contents' );
+                                               }
+                               }
+                               s += '</' + name + '>';
+                               return s;
+                       },
+
+                       /**
+                        * Wrapper object for raw HTML passed to mw.html.element().
+                        *
+                        * @class mw.html.Raw
+                        * @constructor
+                        * @param {string} value
+                        */
+                       Raw: function ( value ) {
+                               this.value = value;
+                       },
+
+                       /**
+                        * Wrapper object for CDATA element contents passed to mw.html.element()
+                        *
+                        * @class mw.html.Cdata
+                        * @constructor
+                        * @param {string} value
+                        */
+                       Cdata: function ( value ) {
+                               this.value = value;
+                       }
+               };
+       }() );
+
+       /**
+        * Execute a function as soon as one or more required modules are ready.
+        *
+        * Example of inline dependency on OOjs:
+        *
+        *     mw.loader.using( 'oojs', function () {
+        *         OO.compare( [ 1 ], [ 1 ] );
+        *     } );
+        *
+        * Example of inline dependency obtained via `require()`:
+        *
+        *     mw.loader.using( [ 'mediawiki.util' ], function ( require ) {
+        *         var util = require( 'mediawiki.util' );
+        *     } );
+        *
+        * Since MediaWiki 1.23 this also returns a promise.
+        *
+        * Since MediaWiki 1.28 the promise is resolved with a `require` function.
+        *
+        * @member mw.loader
+        * @param {string|Array} dependencies Module name or array of modules names the
+        *  callback depends on to be ready before executing
+        * @param {Function} [ready] Callback to execute when all dependencies are ready
+        * @param {Function} [error] Callback to execute if one or more dependencies failed
+        * @return {jQuery.Promise} With a `require` function
+        */
+       mw.loader.using = function ( dependencies, ready, error ) {
+               var deferred = $.Deferred();
+
+               // Allow calling with a single dependency as a string
+               if ( typeof dependencies === 'string' ) {
+                       dependencies = [ dependencies ];
+               }
+
+               if ( ready ) {
+                       deferred.done( ready );
+               }
+               if ( error ) {
+                       deferred.fail( error );
+               }
+
+               try {
+                       // Resolve entire dependency map
+                       dependencies = mw.loader.resolve( dependencies );
+               } catch ( e ) {
+                       return deferred.reject( e ).promise();
+               }
+
+               mw.loader.enqueue( dependencies, function () {
+                       deferred.resolve( mw.loader.require );
+               }, deferred.reject );
+
+               return deferred.promise();
+       };
+
+       // Alias $j to jQuery for backwards compatibility
+       // @deprecated since 1.23 Use $ or jQuery instead
+       mw.log.deprecate( window, '$j', $, 'Use $ or jQuery instead.' );
+}() );
diff --git a/resources/src/mediawiki.base/mediawiki.errorLogger.js b/resources/src/mediawiki.base/mediawiki.errorLogger.js
new file mode 100644 (file)
index 0000000..e86aff6
--- /dev/null
@@ -0,0 +1,58 @@
+/**
+ * Try to catch errors in modules which don't do their own error handling.
+ *
+ * @class mw.errorLogger
+ * @singleton
+ */
+( function ( mw ) {
+       'use strict';
+
+       mw.errorLogger = {
+               /**
+                * Fired via mw.track when an error is not handled by local code and is caught by the
+                * window.onerror handler.
+                *
+                * @event global_error
+                * @param {string} errorMessage Error errorMessage.
+                * @param {string} url URL where error was raised.
+                * @param {number} lineNumber Line number where error was raised.
+                * @param {number} [columnNumber] Line number where error was raised. Not all browsers
+                *   support this.
+                * @param {Error|Mixed} [errorObject] The error object. Typically an instance of Error, but anything
+                *   (even a primitive value) passed to a throw clause will end up here.
+                */
+
+               /**
+                * Install a window.onerror handler that will report via mw.track, while preserving
+                * any previous handler.
+                *
+                * @param {Object} window
+                */
+               installGlobalHandler: function ( window ) {
+                       // We will preserve the return value of the previous handler. window.onerror works the
+                       // opposite way than normal event handlers (returning true will prevent the default
+                       // action, returning false will let the browser handle the error normally, by e.g.
+                       // logging to the console), so our fallback old handler needs to return false.
+                       var oldHandler = window.onerror || function () { return false; };
+
+                       /**
+                        * Dumb window.onerror handler which forwards the errors via mw.track.
+                        *
+                        * @param {string} errorMessage
+                        * @param {string} url
+                        * @param {number} lineNumber
+                        * @param {number} [columnNumber]
+                        * @param {Error|Mixed} [errorObject]
+                        * @return {boolean} True to prevent the default action
+                        * @fires global_error
+                        */
+                       window.onerror = function ( errorMessage, url, lineNumber, columnNumber, errorObject ) {
+                               mw.track( 'global.error', { errorMessage: errorMessage, url: url,
+                                       lineNumber: lineNumber, columnNumber: columnNumber, errorObject: errorObject } );
+                               return oldHandler.apply( this, arguments );
+                       };
+               }
+       };
+
+       mw.errorLogger.installGlobalHandler( window );
+}( mediaWiki ) );
diff --git a/resources/src/mediawiki.hidpi/hidpi.js b/resources/src/mediawiki.hidpi/hidpi.js
deleted file mode 100644 (file)
index ecee450..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-jQuery( function ( $ ) {
-       // Apply hidpi images on DOM-ready
-       // Some may have already partly preloaded at low resolution.
-       $( 'body' ).hidpi();
-} );
diff --git a/resources/src/mediawiki.hidpi/skip.js b/resources/src/mediawiki.hidpi/skip.js
deleted file mode 100644 (file)
index 26b63c7..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-/*!
- * Skip function for mediawiki.hdpi.js.
- */
-return 'srcset' in new Image();
index 940d665..fad409b 100644 (file)
        body:not( .mw-rcfilters-ui-initialized ) .rcfilters-spinner {
                display: block;
                // When initializing, display the spinner on top of the area where the UI will appear
-               margin-top: -( @rcfilters-head-min-height + @rcfilters-head-margin-bottom ) / 2;
+               margin-top: -( @rcfilters-head-min-height + @rcfilters-head-margin-bottom ) / 1.5;
        }
        body.mw-rcfilters-ui-loading .rcfilters-spinner {
                display: block;
                // When loading new results, display the spinner on top of the results area
-               margin-top: 2em;
+               margin-top: -( @rcfilters-head-min-height + @rcfilters-head-margin-bottom ) / 8;
        }
 
        #contentSub,
index 0c13daf..a1646a8 100644 (file)
 }
 
 // We use the `:not` selector to cancel out styling on IE 8 and below
-// We also disable this styling on JavaScript disabled devices. This fixes the issue with
-// Opera Mini where checking/unchecking doesn't apply styling but potentially leaves other
-// more capable browsers with unstyled checkboxes.
-.client-js .mw-ui-checkbox:not( #noop ) {
+// Note: This may be broken on older Opera Mini devices.
+.mw-ui-checkbox:not( #noop ) {
        display: table;
        // Position relatively so we can make use of absolute pseudo elements
        position: relative;
diff --git a/resources/src/mediawiki/mediawiki.base.js b/resources/src/mediawiki/mediawiki.base.js
deleted file mode 100644 (file)
index ed24af3..0000000
+++ /dev/null
@@ -1,644 +0,0 @@
-/*!
- * This file is currently loaded as part of the 'mediawiki' module and therefore
- * concatenated to mediawiki.js and executed at the same time. This file exists
- * to help prepare for splitting up the 'mediawiki' module.
- * This effort is tracked at https://phabricator.wikimedia.org/T192623
- *
- * In short:
- *
- * - mediawiki.js will be reduced to the minimum needed to define mw.loader and
- *   mw.config, and then moved to its own private "mediawiki.loader" module that
- *   can be embedded within the StartupModule response.
- *
- * - mediawiki.base.js and other files in this directory will remain part of the
- *   "mediawiki" module, and will remain a default/implicit dependency for all
- *   regular modules, just like jquery and wikibits already are.
- */
-/* globals mw */
-( function () {
-       'use strict';
-
-       var slice = Array.prototype.slice,
-               mwLoaderTrack = mw.track,
-               trackCallbacks = $.Callbacks( 'memory' ),
-               trackHandlers = [],
-               hasOwn = Object.prototype.hasOwnProperty;
-
-       /**
-        * Object constructor for messages.
-        *
-        * Similar to the Message class in MediaWiki PHP.
-        *
-        * Format defaults to 'text'.
-        *
-        *     @example
-        *
-        *     var obj, str;
-        *     mw.messages.set( {
-        *         'hello': 'Hello world',
-        *         'hello-user': 'Hello, $1!',
-        *         'welcome-user': 'Welcome back to $2, $1! Last visit by $1: $3'
-        *     } );
-        *
-        *     obj = new mw.Message( mw.messages, 'hello' );
-        *     mw.log( obj.text() );
-        *     // Hello world
-        *
-        *     obj = new mw.Message( mw.messages, 'hello-user', [ 'John Doe' ] );
-        *     mw.log( obj.text() );
-        *     // Hello, John Doe!
-        *
-        *     obj = new mw.Message( mw.messages, 'welcome-user', [ 'John Doe', 'Wikipedia', '2 hours ago' ] );
-        *     mw.log( obj.text() );
-        *     // Welcome back to Wikipedia, John Doe! Last visit by John Doe: 2 hours ago
-        *
-        *     // Using mw.message shortcut
-        *     obj = mw.message( 'hello-user', 'John Doe' );
-        *     mw.log( obj.text() );
-        *     // Hello, John Doe!
-        *
-        *     // Using mw.msg shortcut
-        *     str = mw.msg( 'hello-user', 'John Doe' );
-        *     mw.log( str );
-        *     // Hello, John Doe!
-        *
-        *     // Different formats
-        *     obj = new mw.Message( mw.messages, 'hello-user', [ 'John "Wiki" <3 Doe' ] );
-        *
-        *     obj.format = 'text';
-        *     str = obj.toString();
-        *     // Same as:
-        *     str = obj.text();
-        *
-        *     mw.log( str );
-        *     // Hello, John "Wiki" <3 Doe!
-        *
-        *     mw.log( obj.escaped() );
-        *     // Hello, John &quot;Wiki&quot; &lt;3 Doe!
-        *
-        * @class mw.Message
-        *
-        * @constructor
-        * @param {mw.Map} map Message store
-        * @param {string} key
-        * @param {Array} [parameters]
-        */
-       function Message( map, key, parameters ) {
-               this.format = 'text';
-               this.map = map;
-               this.key = key;
-               this.parameters = parameters === undefined ? [] : slice.call( parameters );
-               return this;
-       }
-
-       Message.prototype = {
-               /**
-                * Get parsed contents of the message.
-                *
-                * The default parser does simple $N replacements and nothing else.
-                * This may be overridden to provide a more complex message parser.
-                * The primary override is in the mediawiki.jqueryMsg module.
-                *
-                * This function will not be called for nonexistent messages.
-                *
-                * @return {string} Parsed message
-                */
-               parser: function () {
-                       return mw.format.apply( null, [ this.map.get( this.key ) ].concat( this.parameters ) );
-               },
-
-               /**
-                * Add (does not replace) parameters for `$N` placeholder values.
-                *
-                * @param {Array} parameters
-                * @return {mw.Message}
-                * @chainable
-                */
-               params: function ( parameters ) {
-                       var i;
-                       for ( i = 0; i < parameters.length; i++ ) {
-                               this.parameters.push( parameters[ i ] );
-                       }
-                       return this;
-               },
-
-               /**
-                * Convert message object to its string form based on current format.
-                *
-                * @return {string} Message as a string in the current form, or `<key>` if key
-                *  does not exist.
-                */
-               toString: function () {
-                       var text;
-
-                       if ( !this.exists() ) {
-                               // Use ⧼key⧽ as text if key does not exist
-                               // Err on the side of safety, ensure that the output
-                               // is always html safe in the event the message key is
-                               // missing, since in that case its highly likely the
-                               // message key is user-controlled.
-                               // '⧼' is used instead of '<' to side-step any
-                               // double-escaping issues.
-                               // (Keep synchronised with Message::toString() in PHP.)
-                               return '⧼' + mw.html.escape( this.key ) + '⧽';
-                       }
-
-                       if ( this.format === 'plain' || this.format === 'text' || this.format === 'parse' ) {
-                               text = this.parser();
-                       }
-
-                       if ( this.format === 'escaped' ) {
-                               text = this.parser();
-                               text = mw.html.escape( text );
-                       }
-
-                       return text;
-               },
-
-               /**
-                * Change format to 'parse' and convert message to string
-                *
-                * If jqueryMsg is loaded, this parses the message text from wikitext
-                * (where supported) to HTML
-                *
-                * Otherwise, it is equivalent to plain.
-                *
-                * @return {string} String form of parsed message
-                */
-               parse: function () {
-                       this.format = 'parse';
-                       return this.toString();
-               },
-
-               /**
-                * Change format to 'plain' and convert message to string
-                *
-                * This substitutes parameters, but otherwise does not change the
-                * message text.
-                *
-                * @return {string} String form of plain message
-                */
-               plain: function () {
-                       this.format = 'plain';
-                       return this.toString();
-               },
-
-               /**
-                * Change format to 'text' and convert message to string
-                *
-                * If jqueryMsg is loaded, {{-transformation is done where supported
-                * (such as {{plural:}}, {{gender:}}, {{int:}}).
-                *
-                * Otherwise, it is equivalent to plain
-                *
-                * @return {string} String form of text message
-                */
-               text: function () {
-                       this.format = 'text';
-                       return this.toString();
-               },
-
-               /**
-                * Change the format to 'escaped' and convert message to string
-                *
-                * This is equivalent to using the 'text' format (see #text), then
-                * HTML-escaping the output.
-                *
-                * @return {string} String form of html escaped message
-                */
-               escaped: function () {
-                       this.format = 'escaped';
-                       return this.toString();
-               },
-
-               /**
-                * Check if a message exists
-                *
-                * @see mw.Map#exists
-                * @return {boolean}
-                */
-               exists: function () {
-                       return this.map.exists( this.key );
-               }
-       };
-
-       /**
-        * @class mw
-        * @singleton
-        */
-
-       /**
-        * @inheritdoc mw.inspect#runReports
-        * @method
-        */
-       mw.inspect = function () {
-               var args = arguments;
-               mw.loader.using( 'mediawiki.inspect', function () {
-                       mw.inspect.runReports.apply( mw.inspect, args );
-               } );
-       };
-
-       /**
-        * Format a string. Replace $1, $2 ... $N with positional arguments.
-        *
-        * Used by Message#parser().
-        *
-        * @since 1.25
-        * @param {string} formatString Format string
-        * @param {...Mixed} parameters Values for $N replacements
-        * @return {string} Formatted string
-        */
-       mw.format = function ( formatString ) {
-               var parameters = slice.call( arguments, 1 );
-               return formatString.replace( /\$(\d+)/g, function ( str, match ) {
-                       var index = parseInt( match, 10 ) - 1;
-                       return parameters[ index ] !== undefined ? parameters[ index ] : '$' + match;
-               } );
-       };
-
-       // Expose Message constructor
-       mw.Message = Message;
-
-       /**
-        * Get a message object.
-        *
-        * Shortcut for `new mw.Message( mw.messages, key, parameters )`.
-        *
-        * @see mw.Message
-        * @param {string} key Key of message to get
-        * @param {...Mixed} parameters Values for $N replacements
-        * @return {mw.Message}
-        */
-       mw.message = function ( key ) {
-               var parameters = slice.call( arguments, 1 );
-               return new Message( mw.messages, key, parameters );
-       };
-
-       /**
-        * Get a message string using the (default) 'text' format.
-        *
-        * Shortcut for `mw.message( key, parameters... ).text()`.
-        *
-        * @see mw.Message
-        * @param {string} key Key of message to get
-        * @param {...Mixed} parameters Values for $N replacements
-        * @return {string}
-        */
-       mw.msg = function () {
-               return mw.message.apply( mw.message, arguments ).toString();
-       };
-
-       /**
-        * Track an analytic event.
-        *
-        * This method provides a generic means for MediaWiki JavaScript code to capture state
-        * information for analysis. Each logged event specifies a string topic name that describes
-        * the kind of event that it is. Topic names consist of dot-separated path components,
-        * arranged from most general to most specific. Each path component should have a clear and
-        * well-defined purpose.
-        *
-        * Data handlers are registered via `mw.trackSubscribe`, and receive the full set of
-        * events that match their subcription, including those that fired before the handler was
-        * bound.
-        *
-        * @param {string} topic Topic name
-        * @param {Object} [data] Data describing the event, encoded as an object
-        */
-       mw.track = function ( topic, data ) {
-               mwLoaderTrack( topic, data );
-               trackCallbacks.fire( mw.trackQueue );
-       };
-
-       /**
-        * Register a handler for subset of analytic events, specified by topic.
-        *
-        * Handlers will be called once for each tracked event, including any events that fired before the
-        * handler was registered; 'this' is set to a plain object with a 'timeStamp' property indicating
-        * the exact time at which the event fired, a string 'topic' property naming the event, and a
-        * 'data' property which is an object of event-specific data. The event topic and event data are
-        * also passed to the callback as the first and second arguments, respectively.
-        *
-        * @param {string} topic Handle events whose name starts with this string prefix
-        * @param {Function} callback Handler to call for each matching tracked event
-        * @param {string} callback.topic
-        * @param {Object} [callback.data]
-        */
-       mw.trackSubscribe = function ( topic, callback ) {
-               var seen = 0;
-               function handler( trackQueue ) {
-                       var event;
-                       for ( ; seen < trackQueue.length; seen++ ) {
-                               event = trackQueue[ seen ];
-                               if ( event.topic.indexOf( topic ) === 0 ) {
-                                       callback.call( event, event.topic, event.data );
-                               }
-                       }
-               }
-
-               trackHandlers.push( [ handler, callback ] );
-
-               trackCallbacks.add( handler );
-       };
-
-       /**
-        * Stop handling events for a particular handler
-        *
-        * @param {Function} callback
-        */
-       mw.trackUnsubscribe = function ( callback ) {
-               trackHandlers = trackHandlers.filter( function ( fns ) {
-                       if ( fns[ 1 ] === callback ) {
-                               trackCallbacks.remove( fns[ 0 ] );
-                               // Ensure the tuple is removed to avoid holding on to closures
-                               return false;
-                       }
-                       return true;
-               } );
-       };
-
-       // Fire events from before track() triggred fire()
-       trackCallbacks.fire( mw.trackQueue );
-
-       /**
-        * Registry and firing of events.
-        *
-        * MediaWiki has various interface components that are extended, enhanced
-        * or manipulated in some other way by extensions, gadgets and even
-        * in core itself.
-        *
-        * This framework helps streamlining the timing of when these other
-        * code paths fire their plugins (instead of using document-ready,
-        * which can and should be limited to firing only once).
-        *
-        * Features like navigating to other wiki pages, previewing an edit
-        * and editing itself – without a refresh – can then retrigger these
-        * hooks accordingly to ensure everything still works as expected.
-        *
-        * Example usage:
-        *
-        *     mw.hook( 'wikipage.content' ).add( fn ).remove( fn );
-        *     mw.hook( 'wikipage.content' ).fire( $content );
-        *
-        * Handlers can be added and fired for arbitrary event names at any time. The same
-        * event can be fired multiple times. The last run of an event is memorized
-        * (similar to `$(document).ready` and `$.Deferred().done`).
-        * This means if an event is fired, and a handler added afterwards, the added
-        * function will be fired right away with the last given event data.
-        *
-        * Like Deferreds and Promises, the mw.hook object is both detachable and chainable.
-        * Thus allowing flexible use and optimal maintainability and authority control.
-        * You can pass around the `add` and/or `fire` method to another piece of code
-        * without it having to know the event name (or `mw.hook` for that matter).
-        *
-        *     var h = mw.hook( 'bar.ready' );
-        *     new mw.Foo( .. ).fetch( { callback: h.fire } );
-        *
-        * Note: Events are documented with an underscore instead of a dot in the event
-        * name due to jsduck not supporting dots in that position.
-        *
-        * @class mw.hook
-        */
-       mw.hook = ( function () {
-               var lists = {};
-
-               /**
-                * Create an instance of mw.hook.
-                *
-                * @method hook
-                * @member mw
-                * @param {string} name Name of hook.
-                * @return {mw.hook}
-                */
-               return function ( name ) {
-                       var list = hasOwn.call( lists, name ) ?
-                               lists[ name ] :
-                               lists[ name ] = $.Callbacks( 'memory' );
-
-                       return {
-                               /**
-                                * Register a hook handler
-                                *
-                                * @param {...Function} handler Function to bind.
-                                * @chainable
-                                */
-                               add: list.add,
-
-                               /**
-                                * Unregister a hook handler
-                                *
-                                * @param {...Function} handler Function to unbind.
-                                * @chainable
-                                */
-                               remove: list.remove,
-
-                               /**
-                                * Run a hook.
-                                *
-                                * @param {...Mixed} data
-                                * @return {mw.hook}
-                                * @chainable
-                                */
-                               fire: function () {
-                                       return list.fireWith.call( this, null, slice.call( arguments ) );
-                               }
-                       };
-               };
-       }() );
-
-       /**
-        * HTML construction helper functions
-        *
-        *     @example
-        *
-        *     var Html, output;
-        *
-        *     Html = mw.html;
-        *     output = Html.element( 'div', {}, new Html.Raw(
-        *         Html.element( 'img', { src: '<' } )
-        *     ) );
-        *     mw.log( output ); // <div><img src="&lt;"/></div>
-        *
-        * @class mw.html
-        * @singleton
-        */
-       mw.html = ( function () {
-               function escapeCallback( s ) {
-                       switch ( s ) {
-                               case '\'':
-                                       return '&#039;';
-                               case '"':
-                                       return '&quot;';
-                               case '<':
-                                       return '&lt;';
-                               case '>':
-                                       return '&gt;';
-                               case '&':
-                                       return '&amp;';
-                       }
-               }
-
-               return {
-                       /**
-                        * Escape a string for HTML.
-                        *
-                        * Converts special characters to HTML entities.
-                        *
-                        *     mw.html.escape( '< > \' & "' );
-                        *     // Returns &lt; &gt; &#039; &amp; &quot;
-                        *
-                        * @param {string} s The string to escape
-                        * @return {string} HTML
-                        */
-                       escape: function ( s ) {
-                               return s.replace( /['"<>&]/g, escapeCallback );
-                       },
-
-                       /**
-                        * Create an HTML element string, with safe escaping.
-                        *
-                        * @param {string} name The tag name.
-                        * @param {Object} [attrs] An object with members mapping element names to values
-                        * @param {string|mw.html.Raw|mw.html.Cdata|null} [contents=null] The contents of the element.
-                        *
-                        *  - string: Text to be escaped.
-                        *  - null: The element is treated as void with short closing form, e.g. `<br/>`.
-                        *  - this.Raw: The raw value is directly included.
-                        *  - this.Cdata: The raw value is directly included. An exception is
-                        *    thrown if it contains any illegal ETAGO delimiter.
-                        *    See <https://www.w3.org/TR/html401/appendix/notes.html#h-B.3.2>.
-                        * @return {string} HTML
-                        */
-                       element: function ( name, attrs, contents ) {
-                               var v, attrName, s = '<' + name;
-
-                               if ( attrs ) {
-                                       for ( attrName in attrs ) {
-                                               v = attrs[ attrName ];
-                                               // Convert name=true, to name=name
-                                               if ( v === true ) {
-                                                       v = attrName;
-                                                       // Skip name=false
-                                               } else if ( v === false ) {
-                                                       continue;
-                                               }
-                                               s += ' ' + attrName + '="' + this.escape( String( v ) ) + '"';
-                                       }
-                               }
-                               if ( contents === undefined || contents === null ) {
-                                       // Self close tag
-                                       s += '/>';
-                                       return s;
-                               }
-                               // Regular open tag
-                               s += '>';
-                               switch ( typeof contents ) {
-                                       case 'string':
-                                               // Escaped
-                                               s += this.escape( contents );
-                                               break;
-                                       case 'number':
-                                       case 'boolean':
-                                               // Convert to string
-                                               s += String( contents );
-                                               break;
-                                       default:
-                                               if ( contents instanceof this.Raw ) {
-                                                       // Raw HTML inclusion
-                                                       s += contents.value;
-                                               } else if ( contents instanceof this.Cdata ) {
-                                                       // CDATA
-                                                       if ( /<\/[a-zA-z]/.test( contents.value ) ) {
-                                                               throw new Error( 'mw.html.element: Illegal end tag found in CDATA' );
-                                                       }
-                                                       s += contents.value;
-                                               } else {
-                                                       throw new Error( 'mw.html.element: Invalid type of contents' );
-                                               }
-                               }
-                               s += '</' + name + '>';
-                               return s;
-                       },
-
-                       /**
-                        * Wrapper object for raw HTML passed to mw.html.element().
-                        *
-                        * @class mw.html.Raw
-                        * @constructor
-                        * @param {string} value
-                        */
-                       Raw: function ( value ) {
-                               this.value = value;
-                       },
-
-                       /**
-                        * Wrapper object for CDATA element contents passed to mw.html.element()
-                        *
-                        * @class mw.html.Cdata
-                        * @constructor
-                        * @param {string} value
-                        */
-                       Cdata: function ( value ) {
-                               this.value = value;
-                       }
-               };
-       }() );
-
-       /**
-        * Execute a function as soon as one or more required modules are ready.
-        *
-        * Example of inline dependency on OOjs:
-        *
-        *     mw.loader.using( 'oojs', function () {
-        *         OO.compare( [ 1 ], [ 1 ] );
-        *     } );
-        *
-        * Example of inline dependency obtained via `require()`:
-        *
-        *     mw.loader.using( [ 'mediawiki.util' ], function ( require ) {
-        *         var util = require( 'mediawiki.util' );
-        *     } );
-        *
-        * Since MediaWiki 1.23 this also returns a promise.
-        *
-        * Since MediaWiki 1.28 the promise is resolved with a `require` function.
-        *
-        * @member mw.loader
-        * @param {string|Array} dependencies Module name or array of modules names the
-        *  callback depends on to be ready before executing
-        * @param {Function} [ready] Callback to execute when all dependencies are ready
-        * @param {Function} [error] Callback to execute if one or more dependencies failed
-        * @return {jQuery.Promise} With a `require` function
-        */
-       mw.loader.using = function ( dependencies, ready, error ) {
-               var deferred = $.Deferred();
-
-               // Allow calling with a single dependency as a string
-               if ( typeof dependencies === 'string' ) {
-                       dependencies = [ dependencies ];
-               }
-
-               if ( ready ) {
-                       deferred.done( ready );
-               }
-               if ( error ) {
-                       deferred.fail( error );
-               }
-
-               try {
-                       // Resolve entire dependency map
-                       dependencies = mw.loader.resolve( dependencies );
-               } catch ( e ) {
-                       return deferred.reject( e ).promise();
-               }
-
-               mw.loader.enqueue( dependencies, function () {
-                       deferred.resolve( mw.loader.require );
-               }, deferred.reject );
-
-               return deferred.promise();
-       };
-
-       // Alias $j to jQuery for backwards compatibility
-       // @deprecated since 1.23 Use $ or jQuery instead
-       mw.log.deprecate( window, '$j', $, 'Use $ or jQuery instead.' );
-}() );
diff --git a/resources/src/mediawiki/mediawiki.errorLogger.js b/resources/src/mediawiki/mediawiki.errorLogger.js
deleted file mode 100644 (file)
index e86aff6..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Try to catch errors in modules which don't do their own error handling.
- *
- * @class mw.errorLogger
- * @singleton
- */
-( function ( mw ) {
-       'use strict';
-
-       mw.errorLogger = {
-               /**
-                * Fired via mw.track when an error is not handled by local code and is caught by the
-                * window.onerror handler.
-                *
-                * @event global_error
-                * @param {string} errorMessage Error errorMessage.
-                * @param {string} url URL where error was raised.
-                * @param {number} lineNumber Line number where error was raised.
-                * @param {number} [columnNumber] Line number where error was raised. Not all browsers
-                *   support this.
-                * @param {Error|Mixed} [errorObject] The error object. Typically an instance of Error, but anything
-                *   (even a primitive value) passed to a throw clause will end up here.
-                */
-
-               /**
-                * Install a window.onerror handler that will report via mw.track, while preserving
-                * any previous handler.
-                *
-                * @param {Object} window
-                */
-               installGlobalHandler: function ( window ) {
-                       // We will preserve the return value of the previous handler. window.onerror works the
-                       // opposite way than normal event handlers (returning true will prevent the default
-                       // action, returning false will let the browser handle the error normally, by e.g.
-                       // logging to the console), so our fallback old handler needs to return false.
-                       var oldHandler = window.onerror || function () { return false; };
-
-                       /**
-                        * Dumb window.onerror handler which forwards the errors via mw.track.
-                        *
-                        * @param {string} errorMessage
-                        * @param {string} url
-                        * @param {number} lineNumber
-                        * @param {number} [columnNumber]
-                        * @param {Error|Mixed} [errorObject]
-                        * @return {boolean} True to prevent the default action
-                        * @fires global_error
-                        */
-                       window.onerror = function ( errorMessage, url, lineNumber, columnNumber, errorObject ) {
-                               mw.track( 'global.error', { errorMessage: errorMessage, url: url,
-                                       lineNumber: lineNumber, columnNumber: columnNumber, errorObject: errorObject } );
-                               return oldHandler.apply( this, arguments );
-                       };
-               }
-       };
-
-       mw.errorLogger.installGlobalHandler( window );
-}( mediaWiki ) );
index f68f595..2089f64 100644 (file)
@@ -41,7 +41,8 @@ class DbTestRecorder extends TestRecorder {
                        || !$this->db->tableExists( 'testitem' )
                ) {
                        print "WARNING> `testrun` table not found in database. Trying to create table.\n";
-                       $this->db->sourceFile( $this->db->patchPath( 'patch-testrun.sql' ) );
+                       $updater = DatabaseUpdater::newForDB( $this->db );
+                       $this->db->sourceFile( $updater->patchPath( $this->db, 'patch-testrun.sql' ) );
                        echo "OK, resuming.\n";
                }
 
index afddd78..e06a732 100644 (file)
@@ -257,7 +257,7 @@ Weirdo titles!
 !!article
 Template:Bullet
 !!text
-* Bar
+*Bar
 !!endarticle
 
 !!article
@@ -327,23 +327,31 @@ This is a simple paragraph.
 !! test
 Paragraphs with extra newline spacing
 !! wikitext
-foo
+a
 
-bar
+b (+2 nls)
 
 
-baz
+c (+3 nls)
+
+
+
+d (+4 nls)
+
 
 
 
-booz
+e (+5 nls)
 !! html
-<p>foo
-</p><p>bar
+<p>a
+</p><p>b (+2 nls)
 </p><p><br />
-baz
+c (+3 nls)
 </p><p><br />
-</p><p>booz
+</p><p>d (+4 nls)
+</p><p><br />
+</p><p><br />
+e (+5 nls)
 </p>
 !! end
 
@@ -515,7 +523,6 @@ Extra newlines followed by heading
 a
 
 
-
 =b=
 [[a]]
 
@@ -534,19 +541,89 @@ a
 !! end
 
 !! test
-Extra newlines between heading and content are swallowed
+Extra newlines between heading and content are swallowed (Parsoid does not)
 !! wikitext
 =b=
 
 
 
 [[a]]
-!! html
+!! html/php+tidy
 <h1><span class="mw-headline" id="b">b</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: b">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
 <p><a href="/index.php?title=A&amp;action=edit&amp;redlink=1" class="new" title="A (page does not exist)">a</a>
 </p>
+!! html/parsoid
+<h1 id="b">b</h1>
+<p>
+<br></p>
+
+<p><a rel="mw:WikiLink" href="./A" title="A">a</a></p>
+!! end
+
+!! test
+Extra new lines before and after lists are preserved
+!! wikitext
+a
+
+
+*b
+
+
+c
+!! html/php+tidy
+<p>a
+</p><p><br />
+</p>
+<ul><li>b</li></ul>
+<p><br />
+c
+</p>
+!! html/parsoid
+<p>a</p>
+<p>
+<br></p>
+<ul><li>b</li></ul>
+<p>
+<br>
+c</p>
 !! end
 
+# Parsoid regression test
+!!test
+Multiple newlines after tables are converted to p-br-p tags
+!!options
+parsoid=wt2html,wt2wt
+!!wikitext
+{|
+|x
+|}
+
+
+
+
+=b=
+!!html/php+tidy
+<table>
+<tbody><tr>
+<td>x
+</td></tr></tbody></table>
+<p><br />
+</p><p><br />
+</p>
+<h1><span class="mw-headline" id="b">b</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: b">edit</a><span class="mw-editsection-bracket">]</span></span></h1>
+!!html/parsoid
+<table>
+<tbody>
+<tr>
+<td>x</td>
+</tr>
+</tbody>
+</table>
+<p><br/></p>
+<p><br/></p>
+<h1 id="b">b</h1>
+!!end
+
 !! test
 Heading with line break in nowiki
 !! options
@@ -2695,12 +2772,9 @@ parsoid=wt2html
 <pre>x</pre>
 &lt;pre <table></table>
 !! html/parsoid
-<pre about="#mwt1" typeof="mw:Transclusion mw:Extension/pre" data-parsoid='{"a":{"&lt;pre":null},"sa":{"&lt;pre":""},"stx":"html","pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;pre &lt;pre>x&lt;/pre>"}},"i":0}}]}'>x</pre>
-
-
-<p>&lt;pre </p>
+<pre typeof="mw:Transclusion mw:Extension/pre" about="#mwt2" data-parsoid='{"stx":"html","a":{"&lt;pre":null},"sa":{"&lt;pre":""},"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;pre &lt;pre>x&lt;/pre>"}},"i":0}}]}'>x</pre>
 
-<table></table>
+<span data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true}'>&lt;pre </span><table data-parsoid='{"stx":"html"}'></table>
 !! end
 
 !! test
@@ -3311,6 +3385,57 @@ a
 
 !! end
 
+!! test
+2h. Indent pre in tables
+!! options
+parsoid=wt2html,html2html
+!! wikitext
+{|
+ !
+ foo
+ !
+ bar
+ |-
+ |
+ baz
+ {{!}}
+ bam
+ |}
+!! html/php
+<table>
+<tr>
+<th>
+<pre>foo
+</pre>
+</th>
+<th>
+<pre>bar
+</pre>
+</th></tr>
+<tr>
+<td>
+<pre>baz
+</pre>
+</td>
+<td>
+<pre>bam
+</pre>
+</td></tr></table>
+
+!! html/parsoid
+<table>
+ <tbody><tr><th>
+<pre>foo</pre>
+</th><th>
+<pre>bar</pre>
+</th></tr><tr>
+ <td>
+<pre>baz</pre>
+</td><td data-parsoid='{"startTagSrc":"{{!}}"}'>
+<pre>bam</pre>
+</td></tr></tbody></table>
+!! end
+
 !!test
 3a. Indent-Pre and block tags (single-line html)
 !! wikitext
 </pre>
 !! end
 
-!!test
+!! test
 3b. Indent-Pre and block tags (multi-line html)
 !! wikitext
  a <span>foo</span>
- b <div> foo </div>
-!! html
+<!-- comment --> b <div> foo </div>
+!! html/php
 <pre>a <span>foo</span>
 </pre>
  b <div> foo </div>
 
 !! html/parsoid
 <pre>a <span data-parsoid='{"stx":"html"}'>foo</span></pre>
- b <div data-parsoid='{"stx":"html"}'> foo </div>
+<!-- comment --> <p>b </p><div data-parsoid='{"stx":"html"}'> foo </div>
 !! html/php+tidy
 <pre>a <span>foo</span>
 </pre><p>
  b </p><div> foo </div>
-!!end
+!! end
 
 !!test
 3c. Indent-Pre and block tags (pre-content on separate line)
@@ -3802,7 +3927,7 @@ Definition list with bracketed URL link
 !! test
 Definition list with wikilink containing colon
 !! wikitext
-; [[Help:FAQ]]:The least-read page on Wikipedia
+;[[Help:FAQ]]:The least-read page on Wikipedia
 !! html
 <dl><dt><a href="/index.php?title=Help:FAQ&amp;action=edit&amp;redlink=1" class="new" title="Help:FAQ (page does not exist)">Help:FAQ</a></dt>
 <dd>The least-read page on Wikipedia</dd></dl>
@@ -3813,19 +3938,19 @@ Definition list with wikilink containing colon
 !! test
 Definition list with news link containing colon
 !! wikitext
-;news:alt.wikipedia.roxThis isn't even a real newsgroup!
+;news:alt.wikipedia.rox :This isn't even a real newsgroup!
 !! html/php
-<dl><dt><a rel="nofollow" class="external free" href="news:alt.wikipedia.rox">news:alt.wikipedia.rox</a></dt>
+<dl><dt><a rel="nofollow" class="external free" href="news:alt.wikipedia.rox">news:alt.wikipedia.rox</a>&#160;</dt>
 <dd>This isn't even a real newsgroup!</dd></dl>
 
 !! html/parsoid
-<dl><dt>  <a rel="mw:ExtLink" class="external free" href="news:alt.wikipedia.rox" data-parsoid='{"stx":"url"}'>news:alt.wikipedia.rox</a></dt><dd data-parsoid='{"stx":"row"}'>This isn't even a real newsgroup!</dd></dl>
+<dl><dt><a rel="mw:ExtLink" class="external free" href="news:alt.wikipedia.rox" data-parsoid='{"stx":"url"}'>news:alt.wikipedia.rox</a></dt><dd data-parsoid='{"stx":"row"}'>This isn't even a real newsgroup!</dd></dl>
 !! end
 
 !! test
 Malformed definition list with colon
 !! wikitext
-;  news:alt.wikipedia.rox -- don't crash or enter an infinite loop
+;news:alt.wikipedia.rox -- don't crash or enter an infinite loop
 !! html
 <dl><dt><a rel="nofollow" class="external free" href="news:alt.wikipedia.rox">news:alt.wikipedia.rox</a> -- don't crash or enter an infinite loop</dt></dl>
 
@@ -4057,6 +4182,8 @@ should be left alone</p>
 
 !! test
 Definition Lists: Hacky use to indent tables, with comment before table
+!!options
+parsoid=wt2html
 !! wikitext
 ::<!-- foo -->{|
 |foo
@@ -4072,7 +4199,7 @@ Definition Lists: Hacky use to indent tables, with comment before table
 !! test
 Definition Lists: Hacky use to indent tables (WS-insensitive)
 !! wikitext
-: {|
+:{|
 |a
 |} 
 !! html/php
@@ -4082,9 +4209,9 @@ Definition Lists: Hacky use to indent tables (WS-insensitive)
 </td></tr></table></dd></dl>
 
 !! html/parsoid
-<dl><dd> <table>
+<dl><dd><table>
 <tbody><tr><td>a</td></tr>
-</tbody></table> </dd></dl>
+</tbody></table></dd></dl>
 !! end
 
 ## The PHP parser treats : items (dd) without a corresponding ; item (dt)
@@ -5020,7 +5147,7 @@ URL in text: [http://example.com http://example.com]
 <p>URL in text: <a rel="nofollow" class="external text" href="http://example.com">http://example.com</a>
 </p>
 !! html/parsoid
-<p>URL in text: <a rel="mw:ExtLink" class="external free" href="http://example.com">http://example.com</a></p>
+<p>URL in text: <a rel="mw:ExtLink" class="external text" href="http://example.com">http://example.com</a></p>
 !! end
 
 !! test
@@ -5663,7 +5790,7 @@ Examples from RFC 2732, section 2:
 !! html/parsoid
 <p><a rel="mw:ExtLink" class="external free" href="http://[2404:130:0:1000::187:2]/index.php">http://[2404:130:0:1000::187:2]/index.php</a></p>
 
-<p>Examples from <a href="https://tools.ietf.org/html/rfc2373" rel="mw:ExtLink" class="external text">RFC 2373</a>, section 2.2:</p>
+<p>Examples from <a href="https://tools.ietf.org/html/rfc2373" rel="mw:ExtLink" class="external mw-magiclink">RFC 2373</a>, section 2.2:</p>
 <ul><li><a rel="mw:ExtLink" class="external free" href="http://[1080::8:800:200C:417A]/unicast">http://[1080::8:800:200C:417A]/unicast</a></li>
 <li><a rel="mw:ExtLink" class="external free" href="http://[FF01::101]/multicast">http://[FF01::101]/multicast</a></li>
 <li><a rel="mw:ExtLink" class="external free" href="http://[::1]/loopback">http://[::1]/loopback</a></li>
@@ -5671,7 +5798,7 @@ Examples from RFC 2732, section 2:
 <li><a rel="mw:ExtLink" class="external free" href="http://[::13.1.68.3]/ipv4compat">http://[::13.1.68.3]/ipv4compat</a></li>
 <li><a rel="mw:ExtLink" class="external free" href="http://[::FFFF:129.144.52.38]/ipv4compat">http://[::FFFF:129.144.52.38]/ipv4compat</a></li></ul>
 
-<p>Examples from <a href="https://tools.ietf.org/html/rfc2732" rel="mw:ExtLink" class="external text">RFC 2732</a>, section 2:</p>
+<p>Examples from <a href="https://tools.ietf.org/html/rfc2732" rel="mw:ExtLink" class="external mw-magiclink">RFC 2732</a>, section 2:</p>
 <ul><li><a rel="mw:ExtLink" class="external free" href="http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html">http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html</a></li>
 <li><a rel="mw:ExtLink" class="external free" href="http://[1080:0:0:0:8:800:200C:417A]/index.html">http://[1080:0:0:0:8:800:200C:417A]/index.html</a></li>
 <li><a rel="mw:ExtLink" class="external free" href="http://[3ffe:2a00:100:7031::1]">http://[3ffe:2a00:100:7031::1]</a></li>
@@ -5727,7 +5854,7 @@ Examples from RFC 2732, section 2:
 !! html/parsoid
 <p><a rel="mw:ExtLink" class="external text" href="http://[2404:130:0:1000::187:2]/index.php">test</a></p>
 
-<p>Examples from <a href="https://tools.ietf.org/html/rfc2373" rel="mw:ExtLink" class="external text">RFC 2373</a>, section 2.2:</p>
+<p>Examples from <a href="https://tools.ietf.org/html/rfc2373" rel="mw:ExtLink" class="external mw-magiclink">RFC 2373</a>, section 2.2:</p>
 <ul><li><a rel="mw:ExtLink" class="external text" href="http://[1080::8:800:200C:417A]">unicast</a></li>
 <li><a rel="mw:ExtLink" class="external text" href="http://[FF01::101]">multicast</a></li>
 <li><a rel="mw:ExtLink" class="external text" href="http://[::1]/">loopback</a></li>
@@ -5735,7 +5862,7 @@ Examples from RFC 2732, section 2:
 <li><a rel="mw:ExtLink" class="external text" href="http://[::13.1.68.3]">ipv4compat</a></li>
 <li><a rel="mw:ExtLink" class="external text" href="http://[::FFFF:129.144.52.38]">ipv4compat</a></li></ul>
 
-<p>Examples from <a href="https://tools.ietf.org/html/rfc2732" rel="mw:ExtLink" class="external text">RFC 2732</a>, section 2:</p>
+<p>Examples from <a href="https://tools.ietf.org/html/rfc2732" rel="mw:ExtLink" class="external mw-magiclink">RFC 2732</a>, section 2:</p>
 <ul><li><a rel="mw:ExtLink" class="external text" href="http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html">1</a></li>
 <li><a rel="mw:ExtLink" class="external text" href="http://[1080:0:0:0:8:800:200C:417A]/index.html">2</a></li>
 <li><a rel="mw:ExtLink" class="external text" href="http://[3ffe:2a00:100:7031::1]">3</a></li>
@@ -6085,7 +6212,7 @@ A table with nothing but a caption
 A table with caption with default-spaced attributes and a table row
 !! wikitext
 {|
-|+ style="color: red;" | caption1
+|+ style="color: red;" |caption1
 |-
 |foo
 |}
@@ -6369,8 +6496,8 @@ Accept "!!" in table data of mixed wikitext / html syntax
 Accept empty attributes in td/th cells (td/th cells starting with leading ||)
 !! wikitext
 {|
-!| h1
-|| a
+!|h1
+||a
 |}
 !! html
 <table>
@@ -6515,9 +6642,9 @@ Invalid attributes in table cell (T3830)
 Table cell attributes: Pipes protected by nowikis should be treated as a plain character
 !! wikitext
 {|
-| title="foo" |bar
-| title="foo<nowiki>|</nowiki>" |bar
-| title="foo<nowiki>|</nowiki>" bar
+|title="foo" |bar
+|title="foo<nowiki>|</nowiki>" |bar
+|title="foo<nowiki>|</nowiki>" bar
 |}
 !! html/php
 <table>
@@ -6589,7 +6716,7 @@ Element attributes with double ! should not be broken up by <th>
 !! html/php
 <table>
 <tr>
-<td><div style="color: red !important;" data-contrived="put this here &#124;&#124;">hi</div>
+<td><div style="color: red&#32;!important;" data-contrived="put this here &#124;&#124;">hi</div>
 </td></tr></table>
 
 !! html/parsoid
@@ -6610,7 +6737,7 @@ parsoid=wt2html
 !! html/php
 <table>
 <tr>
-<td>style="color: red !important;" data-contrived="put this here</td>
+<td>style="color: red&#160;!important;" data-contrived="put this here</td>
 <td>foo
 </td></tr></table>
 
@@ -6699,8 +6826,8 @@ parsoid={
 |}
 !! wikitext/edited
 {| <span>boo</span> style='border:1px solid black'
-|  <span>boo</span> style='color:blue'  |abc
-|<span>boo</span> style='color:blue'|xyz
+|  <span>boo</span> style='color:blue'  | abc
+|<span>boo</span> style='color:blue'| xyz
 |}
 !! end
 
@@ -6952,7 +7079,7 @@ b
 Table cell with a single comment
 !! wikitext
 {|
-| <!-- c1 -->
+|<!-- c1 -->
 |a
 |}
 !! html
@@ -7211,18 +7338,6 @@ parsoid=html2wt
 '''quux'''
 !! end
 
-!! test
-Parsoid: newline inducing block nodes don't suppress <nowiki>
-!! options
-parsoid=html2wt
-!! html/parsoid
- a<h1>foo</h1>
-!! wikitext
-<nowiki> </nowiki>a
-
-= foo =
-!! end
-
 !! test
 Parsoid: Row-syntax table headings followed by comment & table cells
 !! options
@@ -7244,8 +7359,8 @@ parsoid=wt2html,wt2wt
 
 !! html/parsoid
 <table>
-<tbody><tr><th> foo </th><th> bar
-<!-- foo -->  </th><td> baz </td><td> quux</td></tr>
+<tbody><tr><th>foo</th><th>bar
+<!-- foo --></th><td> baz </td><td>quux</td></tr>
 </tbody></table>
 !! end
 
@@ -7290,6 +7405,22 @@ parsoid=wt2html
 </tbody></table>
 !! end
 
+!! test
+Table with missing opening <tr> tag
+!! options
+parsoid=wt2html,wt2wt
+!! wikitext
+<table>
+<td>foo</td>
+</tr>
+</table>
+!! html+tidy
+<table>
+<tbody><tr><td>foo</td>
+</tr>
+</tbody></table>
+!! end
+
 # T137406: Whitespace in the HTML
 !! test
 1. Generate correct wikitext for tables with thead/tbody/tfoot
@@ -7377,97 +7508,6 @@ parsoid=html2wt
 |}
 !! end
 
-!! test
-Testing serialization after deletion in references
-!! options
-parsoid={
-  "modes": ["wt2wt"],
-  "changes": [
-    ["#x", "remove"]
-  ]
-}
-!! wikitext
-hi <ref><div id="x">ho</div></ref>
-
-<references />
-!! wikitext/edited
-hi <ref></ref>
-
-<references />
-!! end
-
-!!test
-Testing serialization after deletion of table cells
-!!options
-parsoid={
-  "modes": ["wt2wt", "selser"],
-  "changes": [
-    ["#x", "remove"]
-  ]
-}
-!!wikitext
-{|
-!h1 !!h2 !!h3
-| id="x" |c1 {{!}}{{!}}{{!}}c2 |||c3
-|}
-!! wikitext/edited
-{|
-!h1 !!h2 !!h3
-|c2 |||c3
-|}
-!!end
-
-!! test
-Testing selser after addition of new row before first row (T125419)
-!! options
-parsoid={
-  "modes": ["wt2wt", "selser"],
-  "changes": [
-    [ "tr", "before", "<tr><td>X</td></tr>" ]
-  ]
-}
-!! wikitext
-{|
-|a
-|}
-!! wikitext/edited
-{|
-|X
-|-
-|a
-|}
-!! end
-
-!! test
-Serialize new table rows in a HTML table using HTML tags
-!! options
-parsoid={
-  "modes": ["wt2wt", "selser"],
-  "changes": [
-    [ "tr", "before", "<tr><td>X</td></tr>" ]
-  ]
-}
-!! wikitext
-<table><tr><td>a</td></tr></table>
-!! wikitext/edited
-<table><tr><td>X</td></tr><tr><td>a</td></tr></table>
-!! end
-
-!! test
-Serialize new table cells in a HTML row using HTML tags
-!! options
-parsoid={
-  "modes": ["wt2wt", "selser"],
-  "changes": [
-    [ "td", "before", "<td>X</td>" ]
-  ]
-}
-!! wikitext
-<table><tr><td>a</td></tr></table>
-!! wikitext/edited
-<table><tr><td>X</td><td>a</td></tr></table>
-!! end
-
 !! test
 Wikitext tables can be nested inside HTML tables
 !! options
@@ -7490,63 +7530,13 @@ parsoid=html2wt
 </table>
 !! end
 
+###
+### Internal links
+###
 !! test
-Serialize wikitext list items as HTML list items when embedded in a HTML list
-!! options
-parsoid=html2wt
-!! html
-<ul data-parsoid='{"stx": "html"}'>
-<li data-parsoid='{}'>a</li>
-<li>b</li>
-</ul>
-!! wikitext
-<ul>
-<li>a</li>
-<li>b</li>
-</ul>
-!! end
-
-# SSS FIXME: Is this actually a good thing given the
-# odd nested list output that is generated by MW?
-# <ul><li>foo<ul>..</ul></li></ul> instead of
-# <ul><li>foo</li><ul>..</ul></ul>
-!! test
-Wikitext lists can be nested inside HTML lists
-!! options
-parsoid=html2wt
-!! html
-<ul data-parsoid='{"stx": "html"}'>
-<li data-parsoid='{"stx": "html"}'>a
-<ul><li>b</li></ul>
-</li>
-</ul>
-
-<ul data-parsoid='{"stx": "html"}'>
-<li>x
-<ul><li>y</li></ul>
-</li>
-</ul>
-!! wikitext
-<ul>
-<li>a
-* b
-</li>
-</ul>
-
-<ul>
-<li>x
-* y
-</li>
-</ul>
-!! end
-
-###
-### Internal links
-###
-!! test
-Plain link, capitalized
-!! wikitext
-[[Main Page]]
+Plain link, capitalized
+!! wikitext
+[[Main Page]]
 !! html
 <p><a href="/wiki/Main_Page" title="Main Page">Main Page</a>
 </p>
@@ -9050,6 +9040,14 @@ parsoid=wt2html,wt2wt
 <p><a rel="mw:WikiLink" href="./Constructor:foo" title="Constructor:foo" data-parsoid='{"stx":"simple","a":{"href":"./Constructor:foo"},"sa":{"href":"constructor:foo"}}'>constructor:foo</a></p>
 !! end
 
+!! test
+Template parameter named "constructor"
+!! wikitext
+{{echo|  constructor =  |hi}}
+!! html/parsoid
+<p about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"constructor","named":true,"spc":["  "," ","","  "]},{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi"},"constructor":{"wt":""}},"i":0}}]}'>hi</p>
+!! end
+
 !! article
 ko:
 !! text
@@ -9770,6 +9768,16 @@ parsoid
 
 !! end
 
+!! test
+Nested lists 10 (list and span siblings: wt2wt regression)
+!! wikitext
+*a <span>x</span>
+**b <span>y</span>
+!! html/parsoid
+<ul><li>a <span>x</span>
+<ul><li>b <span>y</span></li></ul></li></ul>
+!! end
+
 !! test
 2. Lists with start-of-line-transparent tokens before bullets: Template close
 !! wikitext
@@ -9973,7 +9981,7 @@ parsoid
 !! test
 Parsoid: Test of whitespace serialization with Templated bullets
 !! options
-parsoid
+parsoid=wt2html
 !! wikitext
 * {{bullet}}
 !! html/parsoid
@@ -10093,22 +10101,6 @@ parsoid=wt2html,wt2wt,html2html
 </ul>
 !!end
 
-!! test
-Table with missing opening <tr> tag
-!! options
-parsoid=wt2html,wt2wt
-!! wikitext
-<table>
-<td>foo</td>
-</tr>
-</table>
-!! html+tidy
-<table>
-<tbody><tr><td>foo</td>
-</tr>
-</tbody></table>
-!! end
-
 ###
 ### Magic Words
 ###
@@ -10962,7 +10954,7 @@ RFC 822
 <p><a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc822">RFC 822</a>
 </p>
 !! html/parsoid
-<p><a href="https://tools.ietf.org/html/rfc822" rel="mw:ExtLink" class="external text">RFC 822</a></p>
+<p><a href="https://tools.ietf.org/html/rfc822" rel="mw:ExtLink" class="external mw-magiclink">RFC 822</a></p>
 !! end
 
 !! test
@@ -10973,7 +10965,7 @@ This is RFC 822 but thisRFC 822 is not RFC 822linked.
 <p>This is <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc822">RFC 822</a> but thisRFC 822 is not RFC 822linked.
 </p>
 !! html/parsoid
-<p>This is <a href="https://tools.ietf.org/html/rfc822" rel="mw:ExtLink" class="external text">RFC 822</a> but thisRFC 822 is not RFC 822linked.</p>
+<p>This is <a href="https://tools.ietf.org/html/rfc822" rel="mw:ExtLink" class="external mw-magiclink">RFC 822</a> but thisRFC 822 is not RFC 822linked.</p>
 !! end
 
 !! test
@@ -10988,7 +10980,7 @@ RFC
 822
 </p>
 !! html/parsoid
-<p><a href="https://tools.ietf.org/html/rfc822" rel="mw:ExtLink" class="external text">RFC <span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#0160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#xA0;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#Xa0;","srcContent":" "}'> </span> 822</a>
+<p><a href="https://tools.ietf.org/html/rfc822" rel="mw:ExtLink" class="external mw-magiclink">RFC <span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#0160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#xA0;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#Xa0;","srcContent":" "}'> </span> 822</a>
 RFC
 822</p>
 !! end
@@ -11046,7 +11038,7 @@ PMID 1234
 <p><a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a>
 </p>
 !! html/parsoid
-<p><a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink" class="external text">PMID 1234</a></p>
+<p><a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink" class="external mw-magiclink">PMID 1234</a></p>
 !! end
 
 !! test
@@ -11057,7 +11049,7 @@ This is PMID 1234 but thisPMID 1234 is not PMID 1234linked.
 <p>This is <a class="external mw-magiclink-pmid" rel="nofollow" href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract">PMID 1234</a> but thisPMID 1234 is not PMID 1234linked.
 </p>
 !! html/parsoid
-<p>This is <a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink" class="external text">PMID 1234</a> but thisPMID 1234 is not PMID 1234linked.</p>
+<p>This is <a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink" class="external mw-magiclink">PMID 1234</a> but thisPMID 1234 is not PMID 1234linked.</p>
 !! end
 
 !! test
@@ -11072,7 +11064,7 @@ PMID
 1234
 </p>
 !! html/parsoid
-<p><a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink" class="external text">PMID <span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#0160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#xA0;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#Xa0;","srcContent":" "}'> </span> 1234</a>
+<p><a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink" class="external mw-magiclink">PMID <span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#0160;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#xA0;","srcContent":" "}'> </span><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#Xa0;","srcContent":" "}'> </span> 1234</a>
 PMID
 1234</p>
 !! end
@@ -12984,6 +12976,24 @@ Templates: Support for templates generating attributes and content
 </tbody></table>
 !!end
 
+!! article
+Template:attribute_from_template
+!! text
+class="123"
+!! endarticle
+
+!! test
+Table cell with attribute before expanded attribute
+!! wikitext
+{|
+| align="center" {{attribute_from_template}} |456
+|}
+!! html/parsoid
+<table>
+<tbody><tr><td align="center" class="123" about="#mwt2" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"class","html":"&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&apos;{\"pi\":[[]],\"dsr\":[20,47,null,null]}&apos; data-mw=&apos;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"attribute_from_template\",\"href\":\"./Template:Attribute_from_template\"},\"params\":{},\"i\":0}}]}&apos;>class=\"123\"&lt;/span>"},{"html":""}]]}'>456</td></tr>
+</tbody></table>
+!! end
+
 !! test
 1. Entities and nowikis inside templated attributes should be handled correctly
 !! wikitext
@@ -13471,6 +13481,19 @@ Parser Functions: 2. Nested use (only outermost should be marked up)
 </p>
 !!end
 
+## Note that the templates inside the references are not wrapped
+!! test
+Template nested in extension tag in template
+!! wikitext
+{{echo|hi<ref>[[ho|{{echo|hi}}]]</ref>}}
+{{echo|hi<ref>[http://test.com?q={{echo|ho}}]</ref>}}
+<references />
+!! html/parsoid
+<p><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;ref>[[ho|{{echo|hi}}]]&lt;/ref>"}},"i":0}}]}'>hi</span><sup about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></sup>
+<span about="#mwt7" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;ref>[http://test.com?q={{echo|ho}}]&lt;/ref>"}},"i":0}}]}'>hi</span><sup about="#mwt7" class="mw-ref" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-2"},"attrs":{}}'><a href="./Main_Page#cite_note-2" style="counter-reset: mw-Ref 2;"><span class="mw-reflink-text">[2]</span></a></sup></p>
+<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt10" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text"><a rel="mw:WikiLink" href="./Ho" title="Ho" data-parsoid='{"stx":"piped","a":{"href":"./Ho"},"sa":{"href":"ho"}}'>hi</a></span></li><li about="#cite_note-2" id="cite_note-2"><a href="./Main_Page#cite_ref-2" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-2" class="mw-reference-text"><a typeof="mw:ExpandedAttrs" about="#mwt11" rel="mw:ExtLink" class="external autonumber" href="http://test.com?q=ho" data-mw='{"attribs":[[{"txt":"href"},{"html":"http://test.com?q=ho"}]]}'></a></span></li></ol>
+!! end
+
 ###
 ### Pre-save transform tests
 ###
@@ -14816,6 +14839,25 @@ Image with nested tables in caption
 </figcaption></figure>
 !! end
 
+!! test
+Image with heading and horizontal rule in caption
+!! wikitext
+[[File:Foobar.jpg|thumb|
+===Testing===
+123
+--------------
+]]
+!! html/php
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div><h3><span class="mw-headline" id="Testing">Testing</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Testing">edit</a><span class="mw-editsection-bracket">]</span></span></h3> 123 <hr /></div></div></div>
+
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"\n=== Testing ===\n123\n--------------\n"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{"href":"File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>
+<h3 id="Testing">Testing</h3>
+123
+<hr data-parsoid='{"extra_dashes":10}'/>
+</figcaption></figure>
+!! end
+
 ###################
 # Conflicting image format options.
 # First option specified should 'win'.
@@ -15127,7 +15169,7 @@ T3887: A RFC with a thumbnail
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>This is <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc12354">RFC 12354</a></div></div></div>
 
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>This is <a href="https://tools.ietf.org/html/rfc12354" rel="mw:ExtLink" class="external text">RFC 12354</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>This is <a href="https://tools.ietf.org/html/rfc12354" rel="mw:ExtLink" class="external mw-magiclink">RFC 12354</a></figcaption></figure>
 !! end
 
 !! test
@@ -15464,8 +15506,7 @@ Parsoid-specific image handling - simple image with size and middle alignment
 !! end
 
 !! test
-Parsoid-specific image handling - simple image with size, middle alignment,
-non-standard namespace alias
+Parsoid-specific image handling - simple image with size, middle alignment, non-standard namespace alias
 !! options
 parsoid=wt2wt,wt2html,html2html
 !! wikitext
@@ -15475,8 +15516,7 @@ parsoid=wt2wt,wt2html,html2html
 !! end
 
 !! test
-Parsoid-specific image handling - simple image with size and middle alignment
-(existing content)
+Parsoid-specific image handling - simple image with size and middle alignment (existing content)
 !! wikitext
 [[File:Foobar.jpg|50px|middle]]
 !! html/parsoid
@@ -15484,8 +15524,7 @@ Parsoid-specific image handling - simple image with size and middle alignment
 !! end
 
 !! test
-Parsoid-specific image handling - simple image with size and middle alignment
-and non-standard namespace name
+Parsoid-specific image handling - simple image with size and middle alignment and non-standard namespace name
 !! options
 parsoid=wt2html,wt2wt,html2html
 !! wikitext
@@ -15512,41 +15551,46 @@ Parsoid-specific image handling - simple image with border and size spec
 
 !! test
 Parsoid-specific image handling - thumbnail with halign, valign, and caption
+!! options
+parsoid=wt2html,html2html
 !! wikitext
 [[File:Foobar.jpg|left|baseline|thumb|caption content]]
 !! html/parsoid
-<figure class="mw-default-size mw-halign-left mw-valign-baseline" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption content</figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption content</figcaption></figure>
 !! end
 
 !! test
-Parsoid-specific image handling - thumbnail with halign, valign, and caption
-(existing content)
+Parsoid-specific image handling - thumbnail with halign, valign, and caption (existing content)
+!! options
+parsoid=wt2html,html2html
 !! wikitext
 [[File:Foobar.jpg|thumb|left|baseline|caption content]]
 !! html/parsoid
-<figure class="mw-default-size mw-halign-left mw-valign-baseline" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"left","ak":"left"},{"ck":"baseline","ak":"baseline"},{"ck":"caption","ak":"caption content"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>caption content</figcaption></figure>
+<figure class="mw-default-size mw-halign-left" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"left","ak":"left"},{"ck":"baseline","ak":"baseline"},{"ck":"caption","ak":"caption content"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>caption content</figcaption></figure>
 !! end
 
 !! test
 Parsoid-specific image handling - thumbnail with specific size, halign, valign, and caption
+!! options
+parsoid=wt2html,html2html
 !! wikitext
 [[Image:Foobar.jpg|right|middle|thumb|50x50px|caption]]
 !! html/parsoid
-<figure class="mw-halign-right mw-valign-middle" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-halign-right" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
-Parsoid-specific image handling - thumbnail with specific size, halign,
-valign, and caption (existing content)
+Parsoid-specific image handling - thumbnail with specific size, halign, valign, and caption (existing content)
+!! options
+parsoid=wt2html,html2html
 !! wikitext
 [[File:Foobar.jpg|thumb|50x50px|right|middle|caption]]
 !! html/parsoid
-<figure class="mw-halign-right mw-valign-middle" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"width","ak":"50x50px"},{"ck":"right","ak":"right"},{"ck":"middle","ak":"middle"},{"ck":"caption","ak":"caption"}],"size":"50x50"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-halign-right" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"width","ak":"50x50px"},{"ck":"right","ak":"right"},{"ck":"middle","ak":"middle"},{"ck":"caption","ak":"caption"}],"size":"50x50"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="6" width="50" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"6","width":"50"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
-Parsoid-specific image handling - framed image with specific size and caption
-(size is ignored)
+Parsoid-specific image handling - framed image with specific size and caption (size is ignored)
 !! options
 parsoid=wt2html,wt2wt,html2html
 !! wikitext
@@ -15556,14 +15600,13 @@ parsoid=wt2html,wt2wt,html2html
 !! end
 
 !! test
-Parsoid-specific image handling - framed image with specific size, halign, valign, and caption
-(size is ignored)
+Parsoid-specific image handling - framed image with specific size, halign, valign, and caption (size is ignored)
 !! options
-parsoid=wt2html,wt2wt,html2html
+parsoid=wt2html,html2html
 !! wikitext
 [[File:Foobar.jpg|left|baseline|frame|500x50px|caption]]
 !! html/parsoid
-<figure class="mw-halign-left mw-valign-baseline" typeof="mw:Image/Frame"><a href="./File:Foobar.jpg"><img resource="./File: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"/></a><figcaption>caption</figcaption></figure>
+<figure class="mw-halign-left" typeof="mw:Image/Frame"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>caption</figcaption></figure>
 !! end
 
 !! test
@@ -16106,33 +16149,49 @@ parsoid=wt2html
 !! test
 3. Categories and newlines: newline suppression for last list item should RT properly
 !! wikitext
-* a
-* b 
+*a
+*b
    
 [[Category:Foo]]
    
 [[Category:Bar]]
 [[Category:Baz]]
+
+:c
+
+[[Category:C]]
+
+;d
+
+[[Category:D]]
 !! html/parsoid
-<ul><li> a</li>
-<li> b</li></ul> 
+<ul><li>a</li>
+<li>b</li></ul>
    
-<link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/>
+<link rel="mw:PageProp/Category" href="./Category:Foo"/>
    
-<link rel="mw:PageProp/Category" href="./Category:Bar" data-parsoid='{"stx":"simple","a":{"href":"./Category:Bar"},"sa":{"href":"Category:Bar"}}'/>
-<link rel="mw:PageProp/Category" href="./Category:Baz" data-parsoid='{"stx":"simple","a":{"href":"./Category:Baz"},"sa":{"href":"Category:Baz"}}'/>
+<link rel="mw:PageProp/Category" href="./Category:Bar"/>
+<link rel="mw:PageProp/Category" href="./Category:Baz"/>
+
+<dl><dd>c</dd></dl>
+
+<link rel="mw:PageProp/Category" href="./Category:C"/>
+
+<dl><dt>d</dt></dl>
+
+<link rel="mw:PageProp/Category" href="./Category:D"/>
 !! end
 
 !! test
 4. Categories and newlines: newline suppression for last list item should RT properly
 !! wikitext
-* a
-**** b
+*a
+****b
 
 [[Category:Foo]]
 !! html/parsoid
-<ul><li> a
-<ul><li><ul><li><ul><li> b</li></ul></li></ul></li></ul></li></ul>
+<ul><li>a
+<ul><li><ul><li><ul><li>b</li></ul></li></ul></li></ul></li></ul>
 
 <link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/>
 !! end
@@ -16143,18 +16202,18 @@ parsoid=wt2html
 !! options
 parsoid=wt2html
 !! wikitext
-* a
-** b
+*a
+**b
 [[Category:Foo]]
-* c
-** d
+*c
+**d
 [[Category:Foo]]
 !! html/parsoid
-<ul><li> a
-<ul><li> b
+<ul><li>a
+<ul><li>b
 <link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/></li></ul></li>
-<li> c
-<ul><li> d</li></ul></li></ul>
+<li>c
+<ul><li>d</li></ul></li></ul>
 <link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/>
 !! end
 
@@ -16167,9 +16226,9 @@ parsoid=wt2html
 !! options
 parsoid=wt2html
 !! wikitext
-* a [[Category:Foo]]
+*a [[Category:Foo]]
 !! html/parsoid
-<ul><li>a <link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/></li></ul>
+<ul><li>a<link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/></li></ul>
 !! end
 
 # This test also demonstrates because of newline+category tunneling
@@ -16178,23 +16237,23 @@ parsoid=wt2html
 !! test
 7. Categories and newlines: migrateTrailingCategories dom pass should leave template content alone
 !! wikitext
-* {{echo|a
+*{{echo|a
 [[Category:Foo]]}}
 !! html/parsoid
-<ul><li> <span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n[[Category:Foo]]"}},"i":0}}]}'>a
+<ul><li><span about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n[[Category:Foo]]"}},"i":0}}]}'>a
 </span><link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"}}'/></li></ul>
 !! end
 
 !! test
 8. Categories and newlines: migrateTrailingCategories dom pass should not get tripped by intervening templates
 !! wikitext
-* a
+*a
 
 {{echo|[[Category:Foo]]
 [[Category:Bar]]}}
 [[Category:Baz]]
 !! html/parsoid
-<ul><li> a</li></ul>
+<ul><li>a</li></ul>
 
 <link rel="mw:PageProp/Category" href="./Category:Foo" about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"simple","a":{"href":"./Category:Foo"},"sa":{"href":"Category:Foo"},"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"[[Category:Foo]]\n[[Category:Bar]]"}},"i":0}}]}'/><span about="#mwt1">
 </span><link rel="mw:PageProp/Category" href="./Category:Bar" about="#mwt1" data-parsoid='{"stx":"simple","a":{"href":"./Category:Bar"},"sa":{"href":"Category:Bar"}}'/>
@@ -16202,7 +16261,21 @@ parsoid=wt2html
 !! end
 
 !! test
-9. Categories and newlines: should behave properly with linkprefix (T87753)
+Categories and newlines: migrateTrailingCategories dom pass should not get tripped by comments and whitespace
+!! wikitext
+*a
+
+[[Category:Bar]]<!--boo1--> <!--boo2-->
+[[Category:Baz]]<!--boo3--> <!--boo4-->
+!! html/parsoid
+<ul><li>a</li></ul>
+
+<link rel="mw:PageProp/Category" href="./Category:Bar"/><!--boo1--> <!--boo2-->
+<link rel="mw:PageProp/Category" href="./Category:Baz"/><!--boo3--> <!--boo4-->
+!! end
+
+!! test
+Categories and newlines: should behave properly with linkprefix (T87753)
 !! options
 language=ar
 !! wikitext
@@ -16222,7 +16295,7 @@ foo bar</p>
 !! end
 
 !! test
-10. No regressions on internal links following category (T174639)
+No regressions on internal links following category (T174639)
 !! options
 parsoid=wt2html,html2html
 !! wikitext
@@ -18685,7 +18758,7 @@ Punctuation: CSS !important (T13874)
 !! wikitext
 <div style="width:50% !important">important</div>
 !! html
-<div style="width:50% !important">important</div>
+<div style="width:50%&#32;!important">important</div>
 
 !!end
 
@@ -18694,7 +18767,7 @@ Punctuation: CSS ! important (T13874; with space after)
 !! wikitext
 <div style="width:50% ! important">important</div>
 !! html
-<div style="width:50% ! important">important</div>
+<div style="width:50%&#32;! important">important</div>
 
 !!end
 
@@ -21010,6 +21083,25 @@ File:Foobar.jpg
 </ul>
 !! end
 
+!! test
+Serialize gallery image captions on a line
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "nativeGallery": true
+}
+!! html/parsoid
+<ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{},"body":{}}'>
+<li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px;"><figure-inline typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></figure-inline></div><div class="gallerytext"><p>hi</p><p>ho</p></div></li>
+<li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px;"><figure-inline typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></figure-inline></div><div class="gallerytext">hi<br />ho</div></li>
+</ul>
+!! wikitext
+<gallery>
+File:Foobar.jpg| hi  ho 
+File:Foobar.jpg|hi<br />ho
+</gallery>
+!! end
+
 !! test
 HTML Hex character encoding (spells the word "JavaScript")
 !! options
@@ -21169,18 +21261,22 @@ T24905: <abbr> followed by ISBN followed by </a>
 Double RFC
 !! wikitext
 RFC RFC 1234
-!! html
+!! html/php
 <p>RFC <a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc1234">RFC 1234</a>
 </p>
+!! html/parsoid
+<p>RFC <a href="https://tools.ietf.org/html/rfc1234" rel="mw:ExtLink" class="external mw-magiclink">RFC 1234</a></p>
 !! end
 
 !! test
 Double RFC with a wiki link
 !! wikitext
 RFC [[RFC 1234]]
-!! html
+!! html/php
 <p>RFC <a href="/index.php?title=RFC_1234&amp;action=edit&amp;redlink=1" class="new" title="RFC 1234 (page does not exist)">RFC 1234</a>
 </p>
+!! html/parsoid
+<p>RFC <a rel="mw:WikiLink" href="./RFC_1234" title="RFC 1234">RFC 1234</a></p>
 !! end
 
 !! test
@@ -21191,7 +21287,7 @@ RFC   983&#x20;987
 <p><a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc983">RFC 983</a>&#x20;987
 </p>
 !! html/parsoid
-<p><a href="https://tools.ietf.org/html/rfc983" rel="mw:ExtLink" class="external text" data-parsoid='{"stx":"magiclink"}'>RFC   983</a><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#x20;","srcContent":" "}'> </span>987</p>
+<p><a href="https://tools.ietf.org/html/rfc983" rel="mw:ExtLink" class="external mw-magiclink" data-parsoid='{"stx":"magiclink"}'>RFC   983</a><span typeof="mw:Entity" data-parsoid='{"src":"&amp;#x20;","srcContent":" "}'> </span>987</p>
 !! end
 
 !! test
@@ -21436,9 +21532,9 @@ parsoid=wt2html
 !! test
 Definition list code coverage
 !! wikitext
-;title   : def
-;title : def
-;title: def
+;title   :def
+;title :def
+;title:def
 !! html/php
 <dl><dt>title  &#160;</dt>
 <dd>def</dd>
@@ -21448,9 +21544,9 @@ Definition list code coverage
 <dd>def</dd></dl>
 
 !! html/parsoid
-<dl><dt>title  <span typeof="mw:Placeholder"> </span></dt><dd> def</dd>
-<dt>title<span typeof="mw:Placeholder"> </span></dt><dd> def</dd>
-<dt>title</dt><dd> def</dd></dl>
+<dl><dt>title  <span typeof="mw:Placeholder"> </span></dt><dd>def</dd>
+<dt>title<span typeof="mw:Placeholder"> </span></dt><dd>def</dd>
+<dt>title</dt><dd>def</dd></dl>
 !! end
 
 !! test
@@ -22698,8 +22794,8 @@ gopher://www.google.com
 !! html/parsoid
 <p><a rel="mw:ExtLink" class="external free" href="http://www.google.com">http://www.google.com</a>
 <a rel="mw:ExtLink" class="external free" href="gopher://www.google.com">gopher://www.google.com</a>
-<a rel="mw:ExtLink" class="external free" href="http://www.google.com">http://www.google.com</a>
-<a rel="mw:ExtLink" class="external free" href="gopher://www.google.com">gopher://www.google.com</a>
+<a rel="mw:ExtLink" class="external text" href="http://www.google.com">http://www.google.com</a>
+<a rel="mw:ExtLink" class="external text" href="gopher://www.google.com">gopher://www.google.com</a>
 <a rel="mw:ExtLink" class="external text" href="https://www.google.com">irc://www.google.com</a>
 <a rel="mw:ExtLink" class="external text" href="ftp://www.google.com">www.google.com/ftp://dir</a>
 <a rel="mw:ExtLink" class="external text" href="//www.google.com">www.google.com</a></p>
@@ -23954,10 +24050,10 @@ Play a bit with r67090 and T5158
 <div style="width:50%&#160;!important">&nbsp;</div>
 <div style="border : solid;">&nbsp;</div>
 !! html/php
-<div style="width:50% !important">&#160;</div>
+<div style="width:50%&#32;!important">&#160;</div>
 <div style="width:50% !important">&#160;</div>
 <div style="width:50% !important">&#160;</div>
-<div style="border&#160;: solid;">&#160;</div>
+<div style="border&#32;: solid;">&#160;</div>
 
 !! html/parsoid
 <div style="width:50% !important" data-parsoid='{"stx":"html"}'><span typeof="mw:Entity" data-parsoid='{"srcContent":" "}'> </span></div>
@@ -23967,6 +24063,15 @@ Play a bit with r67090 and T5158
 
 !! end
 
+!! test
+T5158: Test for French spaces in attributes
+!! wikitext
+<br style=" clear : both ; " />
+!! html/php
+<p><br style="clear&#32;: both&#32;;" />
+</p>
+!! end
+
 !! test
 HTML5 data attributes
 !! wikitext
@@ -24881,9 +24986,9 @@ Empty LI and TR nodes should be stripped from template content
 !! test
 Empty LI and TR nodes should not be stripped from top-level content
 !! wikitext
-* a
+*a
 *
-* b
+*b
 
 {|
 |-
@@ -24892,9 +24997,9 @@ Empty LI and TR nodes should not be stripped from top-level content
 |}
 !! html/parsoid
 <ul>
-<li> a</li>
+<li>a</li>
 <li class='mw-empty-elt'></li>
-<li> b</li>
+<li>b</li>
 </ul>
 <table>
 <tbody>
@@ -25811,6 +25916,65 @@ parsoid=html2wt
 
 !! end
 
+!! test
+Tables: 5. Empty table cells should get whitespace to avoid need for nowikis
+!! options
+parsoid=html2wt
+!! html/parsoid
+<table><tr><td></td><td align="center" data-parsoid='{"stx":"row"}'></td><td data-parsoid='{"stx":"row"}'></td></tr></table>
+
+<table><tr><td></td><td align="center"></td><td></td></tr></table>
+
+<table><tr><td></td><td align="center" data-parsoid='{"stx":"row", "startTagSrc":"{{!}}{{!}}"}'></td><td data-parsoid='{"stx":"row"}'></td></tr></table>
+
+<table><tr><th></th><th align="center" data-parsoid='{"stx":"row"}'></th><th data-parsoid='{"stx":"row"}'></th></tr></table>
+!! wikitext
+{|
+| || align="center" | ||
+|}
+
+{|
+|
+| align="center" |
+|
+|}
+
+{|
+| {{!}}{{!}} align="center" | ||
+|}
+
+{|
+! !! align="center" | !!
+|}
+!! html/php+tidy
+<table>
+<tbody><tr>
+<td></td>
+<td align="center"></td>
+<td>
+</td></tr></tbody></table>
+<table>
+<tbody><tr>
+<td>
+</td>
+<td align="center">
+</td>
+<td>
+</td></tr></tbody></table>
+<table>
+<tbody><tr>
+<td></td>
+<td align="center"></td>
+<td>
+</td></tr></tbody></table>
+<table>
+<tbody><tr>
+<th></th>
+<th align="center"></th>
+<th>
+</th></tr></tbody></table>
+!! end
+
 !! test
 T97430: Don't emit empty nowiki pairs around marker meta tags
 !! options
@@ -26340,8 +26504,6 @@ bar <span><nowiki>[[foo]]</nowiki></span>
 !!end
 
 #### ----------------------- PRE --------------------------
-#### 1. Leading whitespace in SOL context should be escaped
-#### ------------------------------------------------------
 !! test
 1. Leading whitespace in SOL context should be escaped
 !! options
@@ -26454,7 +26616,7 @@ parsoid=html2wt
  ==foo==
 !! end
 
-!!test
+!! test
 T95794: nowiki escaping should account for leading space at start-of-line in an indent-pre block
 !! options
 parsoid=html2wt
@@ -26468,21 +26630,66 @@ parsoid=html2wt
  * bar
 !! end
 
-#### --------------- Behavior Switches --------------------
-
 !! test
-1. Valid behavior switches should be escaped
+Whitespace scrubbing in SOL position should account for SOL-sensitive wikitext markup
 !! options
-parsoid=html2wt
+parsoid = {
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
 !! html/parsoid
-__TOC__
-<i>__TOC__</i>
+<p> foo</p>
+<p> %foo</p>
+<p> *foo</p>
+<p> #foo</p>
+<p> =foo=</p>
+<p><link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid="{}"> *foo</p>
+<p> <link rel="mw:PageProp/Category" href="./Category:Foo" data-parsoid="{}">*foo</p>
+<p> <!--boo-->*foo</p>
+<p><!--boo--> *foo</p>
+<p><!--a--> <!--b--> <!--c--> <!--d--> <!--e--> foo</p>
+<p><!--a--> <!--b--> <!--c--> <!--d--> <!--e--> *foo</p>
 !! wikitext
-<nowiki>__TOC__</nowiki>
-''<nowiki>__TOC__</nowiki>''
-!! end
+foo
 
-!! test
+%foo
+
+<nowiki/>*foo
+
+<nowiki/>#foo
+
+<nowiki/>=foo=
+
+[[Category:Foo]]
+<nowiki/>*foo
+
+ [[Category:Foo]]
+<nowiki>*</nowiki>foo
+
+<nowiki/><!--boo-->*foo
+
+<!--boo--><nowiki/>*foo
+
+<!--a--><!--b--><!--c--><!--d--><!--e-->foo
+
+<!--a--><nowiki/><!--b--><!--c--><!--d--><!--e-->*foo
+!! end
+
+#### --------------- Behavior Switches --------------------
+
+!! test
+1. Valid behavior switches should be escaped
+!! options
+parsoid=html2wt
+!! html/parsoid
+__TOC__
+<i>__TOC__</i>
+!! wikitext
+<nowiki>__TOC__</nowiki>
+''<nowiki>__TOC__</nowiki>''
+!! end
+
+!! test
 2. Invalid behavior switches should not be escaped
 !! options
 parsoid=html2wt
@@ -26583,6 +26790,18 @@ parsoid=html2wt
 baz<nowiki></ref></nowiki>
 !! end
 
+!! test
+Parsoid: newline inducing block nodes don't suppress <nowiki>
+!! options
+parsoid=html2wt
+!! html/parsoid
+ a<h1>foo</h1>
+!! wikitext
+<nowiki> </nowiki>a
+
+= foo =
+!! end
+
 #### --------------- Others ---------------
 !! test
 Escaping nowikis
@@ -27034,13 +27253,13 @@ Encapsulate protected attributes from wt
 <div typeof="mw:placeholder stuff" data-mw="whoo" data-parsoid="weird" data-parsoid-other="no" about="time" rel="mw:true">foo</div>
 
 {| typeof="mw:placeholder stuff" data-mw="whoo" data-parsoid="weird" data-parsoid-other="no" about="time" rel="mw:true"
-| ok
+|ok
 |}
 !! html/parsoid
 <div data-x-typeof="mw:placeholder stuff" data-x-data-mw="whoo" data-x-data-parsoid="weird" data-x-data-parsoid-other="no" data-x-about="time" data-x-rel="mw:true">foo</div>
 
 <table data-x-typeof="mw:placeholder stuff" data-x-data-mw="whoo" data-x-data-parsoid="weird" data-x-data-parsoid-other="no" data-x-about="time" data-x-rel="mw:true">
-<tbody><tr><td data-parsoid='{"autoInsertedEnd":true}'> ok</td></tr>
+<tbody><tr><td data-parsoid='{"autoInsertedEnd":true}'>ok</td></tr>
 </tbody></table>
 !!end
 
@@ -27057,64 +27276,64 @@ plain text</pre>
 plain text
 !!end
 
-!!test
+!! test
 1. Ensure fostered text content is wrapped in element nodes
-!!options
+!! options
 parsoid=wt2html
 !! wikitext
 <table>hi</table><table>ho</table>
+!! html/php+tidy
+hi<table></table>ho<table></table>
 !! html/parsoid
-<p>hi</p>
-<table></table>
-<p>ho</p>
-<table></table>
-!!end
+<span data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true}'>hi</span><table data-parsoid='{"stx":"html"}'></table><span data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true}'>ho</span><table data-parsoid='{"stx":"html"}'></table>
+!! end
 
-!!test
+!! test
 2. Ensure fostered text content is wrapped in element nodes (traps regressions around fostered marker on the element getting lost)
-!!options
+!! options
 parsoid=wt2html,wt2wt
 !! wikitext
 <table>
 <tr> || ||
 <td> a
 </table>
+!! html/php+tidy
+ || ||
+<table>
+<tbody><tr><td> a
+</td></tr></tbody></table>
 !! html/parsoid
-<p> || ||
-</p><table>
-<tbody><tr><td> a</td></tr>
-</tbody></table>
-!!end
+<span data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true}'> || ||
+</span><table data-parsoid='{"stx":"html"}'>
+<tbody><tr data-parsoid='{"stx":"html","autoInsertedEnd":true}'><td data-parsoid='{"stx":"html","autoInsertedEnd":true}'> a
+</td></tr></tbody></table>
+!! end
 
-!!test
+!! test
 Encapsulation properly handles null DSR information from foster box
-!!options
+!! options
 parsoid=wt2html,wt2wt
 !! wikitext
 {{echo|<table>foo<tr><td>bar</td></tr></table>}}
 !! html/parsoid
 <span typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;<table>foo<tr><td>bar</td></tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</span><table><tbody><tr><td>bar</td></tr></tbody></table>
-!!end
+!! end
 
-!!test
+!! test
 1. Encapsulate foster-parented transclusion content
-!!options
+!! options
 parsoid=wt2wt,wt2html
 !! wikitext
 <table>{{echo|foo<tr><td>bar</td></tr>}}</table>
+!! html/php+tidy
+foo<table><tbody><tr><td>bar</td></tr></tbody></table>
 !! html/parsoid
-<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo<tr><td>bar</td></tr>&quot;}},&quot;i&quot;:0}},&quot;</table>&quot;]}">foo</p><table>
-<tbody>
-<tr>
-<td>bar</td>
-</tr>
-</tbody>
-</table>
-!!end
+<span about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"firstWikitextNode":"TABLE_html","pi":[[{"k":"1"}]]}' data-mw='{"parts":["&lt;table>",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo&lt;tr>&lt;td>bar&lt;/td>&lt;/tr>"}},"i":0}},"&lt;/table>"]}'>foo</span><table about="#mwt2" data-parsoid='{"stx":"html}'><tbody><tr><td>bar</td></tr></tbody></table>
+!! end
 
-!!test
+!! test
 2. Encapsulate foster-parented transclusion content
-!!options
+!! options
 parsoid=wt2wt,wt2html
 !! wikitext
 <table><div>{{echo|foo}}</div><tr><td>bar</td></tr></table>
@@ -27127,11 +27346,11 @@ parsoid=wt2wt,wt2html
 </tr>
 </tbody>
 </table>
-!!end
+!! end
 
-!!test
+!! test
 3. Encapsulate foster-parented transclusion content
-!!options
+!! options
 parsoid=wt2wt,wt2html
 !! wikitext
 <table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
@@ -27146,11 +27365,11 @@ parsoid=wt2wt,wt2html
 </tr>
 </tbody>
 </table>
-!!end
+!! end
 
-!!test
+!! test
 4. Encapsulate foster-parented transclusion content
-!!options
+!! options
 parsoid=wt2wt,wt2html
 !! wikitext
 <table><div><p>{{echo|foo</p></div><tr><td>}}bar</td></tr></table>
@@ -27165,52 +27384,33 @@ parsoid=wt2wt,wt2html
 </tr>
 </tbody>
 </table>
-!!end
+!! end
 
-!!test
+!! test
 5. Encapsulate foster-parented transclusion content
 !!options
 parsoid=wt2wt,wt2html
 !! wikitext
 <table><tr><td><div><p>{{echo|foo</p></div></td>foo}}</tr></table>
+!! html/php+tidy
+foo<table><tbody><tr><td><div><p>foo</p></div></td></tr></tbody></table>
 !! html/parsoid
-<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><tr><td><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo&quot;}},&quot;i&quot;:0}},&quot;</tr></table>&quot;]}">foo</p>
-<table>
-<tbody>
-<tr>
-<td>
-<div>
-<p>foo</p>
-</div>
-</td>
-</tr>
-</tbody>
-</table>
-!!end
+<span about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"firstWikitextNode":"TABLE_html","pi":[[{"k":"1"}]]}' data-mw='{"parts":["&lt;table>&lt;tr>&lt;td>&lt;div>&lt;p>",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo&lt;/p>&lt;/div>&lt;/td>foo"}},"i":0}},"&lt;/tr>&lt;/table>"]}'>foo</span><table about="#mwt2" data-parsoid='{"stx":"html"}'><tbody><tr><td><div><p>foo</p></div></td></tr></tbody></table>
+!! end
 
-!!test
+!! test
 6. Encapsulate foster-parented transclusion content
-!!options
+!! options
 parsoid=wt2wt,wt2html
 !! wikitext
 <table><tr><td><div><p>{{echo|foo</p></div></td>foo</tr></table>}}<p>ok</p>
+!! html/php+tidy
+foo<table><tbody><tr><td><div><p>foo</p></div></td></tr></tbody></table><p>ok</p>
 !! html/parsoid
-<p typeof="mw:Transclusion" data-mw="{&quot;parts&quot;:[&quot;<table><tr><td><div><p>&quot;,{&quot;template&quot;:{&quot;target&quot;:{&quot;wt&quot;:&quot;echo&quot;,&quot;href&quot;:&quot;./Template:Echo&quot;},&quot;params&quot;:{&quot;1&quot;:{&quot;wt&quot;:&quot;foo</p></div></td>foo</tr></table>&quot;}},&quot;i&quot;:0}}]}">foo</p>
-<table>
-<tbody>
-<tr>
-<td>
-<div>
-<p>foo</p>
-</div>
-</td>
-</tr>
-</tbody>
-</table>
-<p>ok</p>
-!!end
+<span about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"firstWikitextNode":"TABLE_html","pi":[[{"k":"1"}]]}' data-mw='{"parts":["&lt;table>&lt;tr>&lt;td>&lt;div>&lt;p>",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"foo&lt;/p>&lt;/div>&lt;/td>foo&lt;/tr>&lt;/table>"}},"i":0}}]}'>foo</span><table about="#mwt2" data-parsoid='{"stx":"html"}'><tbody><tr><td><div><p>foo</p></div></td></tr></tbody></table><p data-parsoid='{"stx":"html"}'>ok</p>
+!! end
 
-!!test
+!! test
 7. Encapsulate foster-parented transclusion content
 !!options
 parsoid=wt2wt,wt2html
@@ -27225,13 +27425,13 @@ parsoid=wt2wt,wt2html
 </tr>
 </tbody>
 </table>
-!!end
+!! end
 
 # Note that the wt is broken on purpose: the = should be {{=}} if you
 # don't want it to be a template parameter key.
-!!test
+!! test
 8. Encapsulate foster-parented transclusion content
-!!options
+!! options
 parsoid=wt2wt,wt2html
 !! wikitext
 {{echo|a
@@ -27239,30 +27439,36 @@ parsoid=wt2wt,wt2html
 |-
 |b
 |}
-!! html/parsoid
-<p typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n"}},"i":0}}]}'>a</p>
-<span> </span>
-<p typeof="mw:Transclusion" data-mw='{"parts":["{|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"style":{"wt":"&#39;color:red&#39;"}},"i":0}},"\n|-\n|b\n|}"]}'>{{{1}}}</p>
+!! html/php+tidy
+<p>a
+</p>
 <table>
-<tbody>
-<tr>
-<td>b</td>
-</tr>
-</tbody>
-</table>
-!!end
 
-!!test
+<tbody><tr>
+<td>b
+</td></tr></tbody></table>
+!! html/parsoid
+<p about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"a\n"}},"i":0}}]}'>a</p><span about="#mwt1">
+</span><span about="#mwt3" typeof="mw:Transclusion" data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"firstWikitextNode":"TABLE","pi":[[{"k":"style","named":true}]]}' data-mw='{"parts":["{|",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"style":{"wt":"&apos;color:red&apos;"}},"i":0}},"\n|-\n|b\n|}"]}'>{{{1}}}</span><table about="#mwt3">
+<tbody><tr>
+<td>b
+</td></tr></tbody></table>
+!! end
+
+!! test
 9. Encapsulate foster-parented transclusion content
 !!options
 parsoid=wt2wt,wt2html
 !! wikitext
 <table>{{echo|hi</table>hello}}
+!! html/php+tidy
+hi<table></table><p>hello
+</p>
 !! html/parsoid
-<p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":["&lt;table>",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;/table>hello"}},"i":0}}]}' data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"pi":[[{"k":"1"}]]}'>hi</p><table about="#mwt2" data-parsoid='{"stx":"html"}'></table><p about="#mwt2">hello</p>
-!!end
+<span about="#mwt2" typeof="mw:Transclusion" data-parsoid='{"fostered":true,"autoInsertedEnd":true,"autoInsertedStart":true,"firstWikitextNode":"TABLE_html","pi":[[{"k":"1"}]]}' data-mw='{"parts":["&lt;table>",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;/table>hello"}},"i":0}}]}'>hi</span><table about="#mwt2"></table><p about="#mwt2">hello</p>
+!! end
 
-!!test
+!! test
 Table in fosterable position
 !!options
 parsoid=wt2html
@@ -27280,7 +27486,7 @@ parsoid=wt2html
 
 <table>
 </table>
-!!end
+!! end
 
 # Parsoid only for T66747
 !! test
@@ -27925,7 +28131,7 @@ parsoid={
 
 == hi pal ==
 
-<!--foo-->  [[Category:A3]]
+<!--foo-->[[Category:A3]]
 
 == how goes it ==
 
@@ -28249,7 +28455,7 @@ parsoid={
 !! html/parsoid
 <a rel="mw:WikiLink" href="./Football"><i>Foot</i></a><a rel="mw:WikiLink" href="./Football"><i>ball</i></a>
 !! wikitext
-[[Football|''Football'']]
+''[[Football]]''
 !! end
 
 !! test
@@ -28265,6 +28471,98 @@ parsoid={
 [[Football|Foot]][[Football|ball]]
 !! end
 
+!! test
+1. Move format tags outside of WikiLink
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<a rel="mw:WikiLink" href="./Football"><i>Football</i></a>
+<a rel="mw:WikiLink" href="./Football"><i><b>Football</b></i></a>
+<a rel="mw:WikiLink" href="./Football"><u><i><b>Football</b></i></u></a>
+!! wikitext
+''[[Football]]''
+'''''[[Football]]'''''
+<u>'''''[[Football]]'''''</u>
+!! end
+
+!! test
+2. Move format tags outside of WikiLink with mergable A tags
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<a rel="mw:WikiLink" href="./Football"><i><b>Foot</b></i></a><a rel="mw:WikiLink" href="./Football"><i><b>ball</b></i></a>
+!! wikitext
+'''''[[Football]]'''''
+!! end
+
+!! test
+3. Move format tags outside of WikiLink while preserving formats already outside WikiLink
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<font color="red"><a rel="mw:WikiLink" href="./Foo" title="Foo" class="mw-redirect"><u><b>Foo</b></u></a></font>
+!! wikitext
+<font color="red"><u>'''[[Foo]]'''</u></font>
+!! end
+
+!! test
+4. Do not move format tags outside of WikiLink which includes attributes color, style and class
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<a rel="mw:WikiLink" href="./Foo" title="Foo" class="mw-redirect"><font color="red">Foo</font></a>
+<a rel="mw:WikiLink" href="./Foo" title="Foo" class="mw-redirect"><span style="color: blue; font-size: 46px;">Foo></span></a>
+<a rel="mw:WikiLink" href="./Foo" title="Foo" class="mw-redirect"><span class="Bar">Foo</span></a>
+!! wikitext
+[[Foo|<font color="red">Foo</font>]]
+[[Foo|<span style="color: blue; font-size: 46px;">Foo></span>]]
+[[Foo|<span class="Bar">Foo</span>]]
+!! end
+
+!! test
+5. T194083 Regression test: Manual edit test that also enables scrubWikitext to move format tags outside wikilinks
+!! options
+parsoid={
+  "modes": ["selser"],
+  "scrubWikitext": true,
+  "changes": [
+    ["a", "html", "<i>Foo</i>"]
+  ]
+}
+!! wikitext
+[[Foo]]
+!! wikitext/edited
+''[[Foo]]''
+!! end
+
+!! test
+6. Regression test: Manual edit test to ensure diff markers are not lost
+!! options
+parsoid={
+  "modes": ["selser"],
+  "scrubWikitext": true,
+  "changes": [
+    ["i", "wrap", "<a href='./Foo' rel='mw:WikiLink'></a>"]
+  ]
+}
+!! wikitext
+''Foo''
+!! wikitext/edited
+''[[Foo]]''
+!! end
+
 #------------------------------
 # End of tag minimization tests
 #------------------------------
@@ -28504,8 +28802,8 @@ Magic links inside image captions (autolinked)
 <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div><a href="/wiki/Special:BookSources/123456789X" class="internal mw-magiclink-isbn">ISBN 123456789x</a></div></div></div>
 !! html/parsoid
 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a rel="mw:ExtLink" class="external free" href="http://example.com">http://example.com</a></figcaption></figure>
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="https://tools.ietf.org/html/rfc1234" rel="mw:ExtLink" class="external text">RFC 1234</a></figcaption></figure>
-<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink" class="external text">PMID 1234</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="https://tools.ietf.org/html/rfc1234" rel="mw:ExtLink" class="external mw-magiclink">RFC 1234</a></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="//www.ncbi.nlm.nih.gov/pubmed/1234?dopt=Abstract" rel="mw:ExtLink" class="external mw-magiclink">PMID 1234</a></figcaption></figure>
 <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption><a href="./Special:BookSources/123456789X" rel="mw:WikiLink">ISBN 123456789x</a></figcaption></figure>
 !! end
 
@@ -28570,8 +28868,7 @@ parsoid=html2wt,wt2wt
 |<small>-</small>
 |<br />
 -
-|<br />
--
+|<br />-
 |}
 !! html/php+tidy
 <table>
@@ -28592,9 +28889,7 @@ parsoid=html2wt,wt2wt
 <p>-
 </p>
 </td>
-<td><br />
-<p>-
-</p>
+<td><br />-
 </td></tr></tbody></table>
 !! end
 
@@ -28718,6 +29013,147 @@ parsoid=html2wt
 <div id="hello">ok</div>
 !! end
 
+!! test
+Testing serialization after deletion in references
+!! options
+parsoid={
+  "modes": ["wt2wt"],
+  "changes": [
+    ["#x", "remove"]
+  ]
+}
+!! wikitext
+hi <ref><div id="x">ho</div></ref>
+
+<references />
+!! wikitext/edited
+hi <ref></ref>
+
+<references />
+!! end
+
+!!test
+Testing serialization after deletion of table cells
+!!options
+parsoid={
+  "modes": ["wt2wt", "selser"],
+  "changes": [
+    ["#x", "remove"]
+  ]
+}
+!!wikitext
+{|
+!h1 !!h2 !!h3
+| id="x" |c1 {{!}}{{!}}{{!}}c2 |||c3
+|}
+!! wikitext/edited
+{|
+!h1!!h2!!h3
+|c2|||c3
+|}
+!!end
+
+!! test
+Testing selser after addition of new row before first row (T125419)
+!! options
+parsoid={
+  "modes": ["wt2wt", "selser"],
+  "changes": [
+    [ "tr", "before", "<tr><td>X</td></tr>" ]
+  ]
+}
+!! wikitext
+{|
+|a
+|}
+!! wikitext/edited
+{|
+|X
+|-
+|a
+|}
+!! end
+
+!! test
+Serialize new table rows in a HTML table using HTML tags
+!! options
+parsoid={
+  "modes": ["wt2wt", "selser"],
+  "changes": [
+    [ "tr", "before", "<tr><td>X</td></tr>" ]
+  ]
+}
+!! wikitext
+<table><tr><td>a</td></tr></table>
+!! wikitext/edited
+<table><tr><td>X</td></tr><tr><td>a</td></tr></table>
+!! end
+
+!! test
+Serialize new table cells in a HTML row using HTML tags
+!! options
+parsoid={
+  "modes": ["wt2wt", "selser"],
+  "changes": [
+    [ "td", "before", "<td>X</td>" ]
+  ]
+}
+!! wikitext
+<table><tr><td>a</td></tr></table>
+!! wikitext/edited
+<table><tr><td>X</td><td>a</td></tr></table>
+!! end
+
+!! test
+Serialize wikitext list items as HTML list items when embedded in a HTML list
+!! options
+parsoid=html2wt
+!! html
+<ul data-parsoid='{"stx": "html"}'>
+<li data-parsoid='{}'>a</li>
+<li>b</li>
+</ul>
+!! wikitext
+<ul>
+<li>a</li>
+<li>b</li>
+</ul>
+!! end
+
+# SSS FIXME: Is this actually a good thing given the
+# odd nested list output that is generated by MW?
+# <ul><li>foo<ul>..</ul></li></ul> instead of
+# <ul><li>foo</li><ul>..</ul></ul>
+!! test
+Wikitext lists can be nested inside HTML lists
+!! options
+parsoid=html2wt
+!! html
+<ul data-parsoid='{"stx": "html"}'>
+<li data-parsoid='{"stx": "html"}'>a
+<ul><li>b</li></ul>
+</li>
+</ul>
+
+<ul data-parsoid='{"stx": "html"}'>
+<li>x
+<ul><li>y</li></ul>
+</li>
+</ul>
+!! wikitext
+<ul>
+<li>a
+* b
+</li>
+</ul>
+
+<ul>
+<li>x
+* y
+</li>
+</ul>
+!! end
+
 !! test
 WTS change modes
 !! options
@@ -28955,7 +29391,7 @@ parsoid={
 !! html/parsoid
 <h2> <link href="./Category:A2" rel="mw:PageProp/Category" />ok</h2>
 !! wikitext
- [[Category:A2]]
+[[Category:A2]]
 
 == ok ==
 !! end
@@ -29023,7 +29459,7 @@ parsoid={
 !! html/parsoid
 <h2>foo<br/>bar</h2>
 !! wikitext
-== foo<br /> bar ==
+== foo<br />bar ==
 !! end
 
 !! test
@@ -30698,10 +31134,16 @@ headings, and cells. HTML versions of the same should preserve whitespace.
 ##########################################################################
 !! test
 Trim whitespace in wikitext headings, list items, table captions, headings, and cells
+!! options
+parsoid={
+       "modes": ["wt2html"],
+       "preserveIEW": true
+}
 !! wikitext
 __NOTOC__
 ==    <!--c1-->  <!--c2--> Spaces   <!--c3--> <!--c4-->  ==
-==             <!--c2-->       <!--c2--> Tabs          <!--c3--><!--c4-->      ==
+==             <!--c1-->       <!--c2--> Tabs          <!--c3--><!--c4-->      ==
+== <!--Headings with fallback ids--> Личная жизнь ==
 *     <!--c1-->   <!--c2-->  List item <!--c3--> <!--c4-->
 ; <!--term to define--> term : <!--term's definition--> definition
 {|
@@ -30721,6 +31163,7 @@ __NOTOC__
 !! html/php+tidy
 <h2><span class="mw-headline" id="Spaces">Spaces</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: Spaces">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <h2><span class="mw-headline" id="Tabs">Tabs</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=2" title="Edit section: Tabs">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
+<h2><span class="mw-headline" id=".D0.9B.D0.B8.D1.87.D0.BD.D0.B0.D1.8F_.D0.B6.D0.B8.D0.B7.D0.BD.D1.8C">Личная жизнь</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=3" title="Edit section: Личная жизнь">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <ul><li>List item</li></ul>
 <dl><dt>term&#160;</dt>
 <dd>definition</dd></dl>
@@ -30747,11 +31190,37 @@ __NOTOC__
 <td>Table Cell 1</td>
 <td>Table Cell 2
 </td></tr></tbody></table> foo</dd></dl>
+!! html/parsoid
+<meta property="mw:PageProp/notoc">
+<h2 id="Spaces"><!--c1--><!--c2-->Spaces<!--c3--><!--c4--></h2>
+<h2 id="Tabs"><!--c1--><!--c2-->Tabs<!--c3--><!--c4--></h2>
+<h2 id="Личная_жизнь"><span id=".D0.9B.D0.B8.D1.87.D0.BD.D0.B0.D1.8F_.D0.B6.D0.B8.D0.B7.D0.BD.D1.8C" typeof="mw:FallbackId"></span><!--Headings with fallback ids-->Личная жизнь</h2>
+<ul><li><!--c1--><!--c2-->List item<!--c3--><!--c4--></li></ul>
+<dl><dt><!--term to define-->term&nbsp;</dt><dd><!--term's definition-->definition</dd></dl>
+<table>
+<caption><!--c1--><!--c2-->Table Caption<!--c3--><!--c4--></caption>
+<tbody><tr>
+<th><!--c1--><!--c2-->Table Heading 1<!--c3--><!--c4--></th><th>Table Heading 2<!--c5--></th></tr>
+<tr>
+<td><!--c1--><!--c2-->Table Cell 1<!--c3--><!--c4--></td><td>Table Cell 2<!--c5--></td></tr>
+<tr>
+<td>class="foo"</td><td><!--c1--><!--c2-->Table Cell 3<!--c3--><!--c4--></td></tr>
+<tr>
+<td><!--c1-->testing <a rel="mw:WikiLink" href="./One" title="One">two</a> <!--c2--> | <!--c3--> some content</td></tr>
+</tbody></table>
+<dl><dd><table>
+  <tbody><tr><td><!--c1--><!--c2-->Table Cell 1<!--c3--><!--c4--></td><td>Table Cell 2<!--c5--></td></tr>
+  </tbody></table><p> foo   </p><!--c1--></dd></dl>
 !! end
 
 # Looks like <caption> is not accepted in HTML
 !! test
 Do not trim whitespace in HTML headings, list items, table captions, headings, and cells
+!! options
+parsoid={
+       "modes": ["wt2html"],
+       "preserveIEW": true
+}
 !! wikitext
 __NOTOC__
 <h2>    <!--c1-->   <!--c2--> Heading    <!--c3--> <!--c4-->  </h2>
@@ -30767,10 +31236,23 @@ __NOTOC__
 <tbody><tr><th>   Table Heading   </th><th></th></tr>
 <tr><td>   Table Cell   </td><th></th></tr>
 </tbody></table>
+!! html/parsoid
+<meta property="mw:PageProp/notoc"/>
+<h2 id="Heading">    <!--c1-->   <!--c2--> Heading    <!--c3--> <!--c4-->  </h2>
+<ul><li>     <!--c1-->   <!--c2-->  List item <!--c3--> <!--c4-->  </li></ul>
+<table>
+<tbody><tr><th> <!--c1--> <!--c2--> Table Heading <!--c3--> <!--c4--> </th><th></th></tr>
+<tr><td> <!--c1--> <!--c2--> Table Cell <!--c3--> <!--c4--> </td><th></th></tr>
+</tbody></table>
 !! end
 
 !! test
 Do not trim whitespace in links and quotes
+!! options
+parsoid={
+       "modes": ["wt2html"],
+       "preserveIEW": true
+}
 !! wikitext
 foo ''  <!--c1--> italic <!--c2-->   '' and '''  <!--c3-->  bold  <!--c4-->  '''
 [[Foo|  some text  ]]
@@ -30778,6 +31260,9 @@ foo ''  <!--c1--> italic <!--c2-->   '' and '''  <!--c3-->  bold  <!--c4-->  '''
 <p>foo <i>   italic    </i> and <b>    bold    </b>
 <a href="/wiki/Foo" title="Foo">  some text  </a>
 </p>
+!! html/parsoid
+<p>foo <i>  <!--c1--> italic <!--c2-->   </i> and <b>  <!--c3-->  bold  <!--c4-->  </b>
+<a rel="mw:WikiLink" href="./Foo" title="Foo">  some text  </a></p>
 !! end
 
 !! test
index 6983704..810d1fe 100644 (file)
@@ -561,4 +561,32 @@ mw.loader.register( [
                );
        }
 
+       /**
+        * @covers ResourceLoaderStartupModule::getDefinitionSummary
+        */
+       public function testGetVersionHash_varyConfig() {
+               $context = $this->getResourceLoaderContext();
+
+               $this->setMwGlobals( 'wgArticlePath', '/w1' );
+               $module = new ResourceLoaderStartupModule();
+               $version1 = $module->getVersionHash( $context );
+               $module = new ResourceLoaderStartupModule();
+               $version2 = $module->getVersionHash( $context );
+               $this->setMwGlobals( 'wgArticlePath', '/w3' );
+               $module = new ResourceLoaderStartupModule();
+               $version3 = $module->getVersionHash( $context );
+
+               $this->assertEquals(
+                       $version1,
+                       $version2,
+                       'Deterministic version hash'
+               );
+
+               $this->assertNotEquals(
+                       $version1,
+                       $version3,
+                       'Config change impacts version hash'
+               );
+       }
+
 }
index 1ec6f72..3b511c2 100644 (file)
@@ -70,6 +70,7 @@ return [
                        'tests/qunit/suites/resources/mediawiki/mediawiki.template.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.template.mustache.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.test.js',
+                       'tests/qunit/suites/resources/mediawiki/mediawiki.base.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.loader.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.html.test.js',
                        'tests/qunit/suites/resources/mediawiki/mediawiki.inspect.test.js',
diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.base.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.base.test.js
new file mode 100644 (file)
index 0000000..c415953
--- /dev/null
@@ -0,0 +1,126 @@
+( function ( mw ) {
+       QUnit.module( 'mediawiki.base' );
+
+       QUnit.test( 'mw.hook - basic', function ( assert ) {
+               var q = [];
+               mw.hook( 'test.hook.basic' ).add( function () {
+                       q.push( 'basic' );
+               } );
+
+               mw.hook( 'test.hook.basic' ).fire();
+               assert.deepEqual( q, [ 'basic' ], 'Callback' );
+       } );
+
+       QUnit.test( 'mw.hook - name', function ( assert ) {
+               var q = [];
+               mw.hook( 'hasOwnProperty' ).add( function () {
+                       q.push( 'prototype' );
+               } );
+
+               mw.hook( 'hasOwnProperty' ).fire();
+               assert.deepEqual( q, [ 'prototype' ], 'Callback' );
+       } );
+
+       QUnit.test( 'mw.hook - data', function ( assert ) {
+               var q;
+
+               mw.hook( 'test.hook.data' ).add( function ( data1, data2 ) {
+                       q = [ data1, data2 ];
+               } );
+               mw.hook( 'test.hook.data' ).fire( 'example', [ 'two' ] );
+
+               assert.deepEqual( q,
+                       [
+                               'example',
+                               [ 'two' ]
+                       ],
+                       'Data containing a string and an array'
+               );
+       } );
+
+       QUnit.test( 'mw.hook - chainable', function ( assert ) {
+               var hook, add, fire, q = [];
+
+               hook = mw.hook( 'test.hook.chainable' );
+               assert.strictEqual( hook.add(), hook, 'hook.add is chainable' );
+               assert.strictEqual( hook.remove(), hook, 'hook.remove is chainable' );
+               assert.strictEqual( hook.fire(), hook, 'hook.fire is chainable' );
+
+               hook = mw.hook( 'test.hook.detach' );
+               add = hook.add;
+               fire = hook.fire;
+               add( function ( x, y ) {
+                       q.push( x, y );
+               } );
+               fire( 'x', 'y' );
+               assert.deepEqual( q, [ 'x', 'y' ], 'Contextless firing with data' );
+       } );
+
+       QUnit.test( 'mw.hook - memory before', function ( assert ) {
+               var q;
+
+               q = [];
+               mw.hook( 'test.hook.fireBefore' ).fire().add( function () {
+                       q.push( 'X' );
+               } );
+               assert.deepEqual( q, [ 'X' ], 'Remember previous firing for newly added handler' );
+
+               q = [];
+               mw.hook( 'test.hook.fireTwiceBefore' ).fire( 'Y1' ).fire( 'Y2' ).add( function ( data ) {
+                       q.push( data );
+               } );
+               assert.deepEqual( q, [ 'Y2' ], 'Remember only the most recent firing' );
+       } );
+
+       QUnit.test( 'mw.hook - memory before and after', function ( assert ) {
+               var q1 = [], q2 = [];
+               mw.hook( 'test.hook.many' )
+                       .add( function ( chr ) {
+                               q1.push( chr );
+                       } )
+                       .fire( 'x' ).fire( 'y' ).fire( 'z' )
+                       .add( function ( chr ) {
+                               q2.push( chr );
+                       } );
+
+               assert.deepEqual( q1, [ 'x', 'y', 'z' ], 'Multiple fires after callback addition' );
+               assert.deepEqual( q2, [ 'z' ], 'Last fire applied to new handler' );
+       } );
+
+       QUnit.test( 'mw.hook - data variadic', function ( assert ) {
+               var q = [];
+               function callback( chr ) {
+                       q.push( chr );
+               }
+
+               mw.hook( 'test.hook.variadic' )
+                       .add(
+                               callback,
+                               callback,
+                               function ( chr ) {
+                                       q.push( chr );
+                               },
+                               callback
+                       )
+                       .fire( 'x' )
+                       .remove(
+                               function () {
+                                       'not-added';
+                               },
+                               callback
+                       )
+                       .fire( 'y' )
+                       .remove( callback )
+                       .fire( 'z' );
+
+               assert.deepEqual(
+                       q,
+                       [ 'x', 'x', 'x', 'x', 'y', 'z' ],
+                       '"add" and "remove" support variadic arguments. ' +
+                               '"add" does not filter unique. ' +
+                               '"remove" removes all equal by reference. ' +
+                               '"remove" is silent if the function is not found'
+               );
+       } );
+
+}( mediaWiki ) );
index 6458b17..83e695f 100644 (file)
 
                assert.strictEqual( mw.msg( 'int-msg' ), 'Some Other Message', 'int is resolved' );
        } );
-
-       QUnit.test( 'mw.hook', function ( assert ) {
-               var hook, add, fire, chars, callback;
-
-               mw.hook( 'test.hook.unfired' ).add( function () {
-                       assert.ok( false, 'Unfired hook' );
-               } );
-
-               mw.hook( 'test.hook.basic' ).add( function () {
-                       assert.ok( true, 'Basic callback' );
-               } );
-               mw.hook( 'test.hook.basic' ).fire();
-
-               mw.hook( 'hasOwnProperty' ).add( function () {
-                       assert.ok( true, 'hook with name of predefined method' );
-               } );
-               mw.hook( 'hasOwnProperty' ).fire();
-
-               mw.hook( 'test.hook.data' ).add( function ( data1, data2 ) {
-                       assert.strictEqual( data1, 'example', 'Fire with data (string param)' );
-                       assert.deepEqual( data2, [ 'two' ], 'Fire with data (array param)' );
-               } );
-               mw.hook( 'test.hook.data' ).fire( 'example', [ 'two' ] );
-
-               hook = mw.hook( 'test.hook.chainable' );
-               assert.strictEqual( hook.add(), hook, 'hook.add is chainable' );
-               assert.strictEqual( hook.remove(), hook, 'hook.remove is chainable' );
-               assert.strictEqual( hook.fire(), hook, 'hook.fire is chainable' );
-
-               hook = mw.hook( 'test.hook.detach' );
-               add = hook.add;
-               fire = hook.fire;
-               add( function ( x, y ) {
-                       assert.deepEqual( [ x, y ], [ 'x', 'y' ], 'Detached (contextless) with data' );
-               } );
-               fire( 'x', 'y' );
-
-               mw.hook( 'test.hook.fireBefore' ).fire().add( function () {
-                       assert.ok( true, 'Invoke handler right away if it was fired before' );
-               } );
-
-               mw.hook( 'test.hook.fireTwiceBefore' ).fire().fire().add( function () {
-                       assert.ok( true, 'Invoke handler right away if it was fired before (only last one)' );
-               } );
-
-               chars = [];
-
-               mw.hook( 'test.hook.many' )
-                       .add( function ( chr ) {
-                               chars.push( chr );
-                       } )
-                       .fire( 'x' ).fire( 'y' ).fire( 'z' )
-                       .add( function ( chr ) {
-                               assert.strictEqual( chr, 'z', 'Adding callback later invokes right away with last data' );
-                       } );
-
-               assert.deepEqual( chars, [ 'x', 'y', 'z' ], 'Multiple callbacks with multiple fires' );
-
-               chars = [];
-               callback = function ( chr ) {
-                       chars.push( chr );
-               };
-
-               mw.hook( 'test.hook.variadic' )
-                       .add(
-                               callback,
-                               callback,
-                               function ( chr ) {
-                                       chars.push( chr );
-                               },
-                               callback
-                       )
-                       .fire( 'x' )
-                       .remove(
-                               function () {
-                                       'not-added';
-                               },
-                               callback
-                       )
-                       .fire( 'y' )
-                       .remove( callback )
-                       .fire( 'z' );
-
-               assert.deepEqual(
-                       chars,
-                       [ 'x', 'x', 'x', 'x', 'y', 'z' ],
-                       '"add" and "remove" support variadic arguments. ' +
-                               '"add" does not filter unique. ' +
-                               '"remove" removes all equal by reference. ' +
-                               '"remove" is silent if the function is not found'
-               );
-       } );
-
 }( mediaWiki ) );
diff --git a/tests/selenium/pageobjects/watchable.page.js b/tests/selenium/pageobjects/watchable.page.js
new file mode 100644 (file)
index 0000000..896b2f4
--- /dev/null
@@ -0,0 +1,13 @@
+const Page = require( 'wdio-mediawiki/Page' );
+
+class WatchablePage extends Page {
+
+       get confirmWatch() { return browser.element( '#mw-content-text button[type="submit"]' ); }
+
+       watch( title ) {
+               super.openTitle( title, { action: 'watch' } );
+               this.confirmWatch.click();
+       }
+}
+
+module.exports = new WatchablePage();
diff --git a/tests/selenium/pageobjects/watchlist.page.js b/tests/selenium/pageobjects/watchlist.page.js
new file mode 100644 (file)
index 0000000..58a003f
--- /dev/null
@@ -0,0 +1,15 @@
+const Page = require( 'wdio-mediawiki/Page' );
+
+class WatchlistPage extends Page {
+       get titles() {
+               return browser.element( '.mw-changeslist' )
+                       .$$( '.mw-changeslist-line .mw-title' );
+       }
+
+       open() {
+               super.openTitle( 'Special:Watchlist' );
+       }
+
+}
+
+module.exports = new WatchlistPage();
index 069a6aa..032cbf0 100644 (file)
@@ -4,16 +4,13 @@ const assert = require( 'assert' ),
        RestorePage = require( '../pageobjects/restore.page' ),
        EditPage = require( '../pageobjects/edit.page' ),
        HistoryPage = require( '../pageobjects/history.page' ),
-       UserLoginPage = require( '../pageobjects/userlogin.page' );
+       UserLoginPage = require( '../pageobjects/userlogin.page' ),
+       Util = require( 'wdio-mediawiki/Util' );
 
 describe( 'Page', function () {
        var content,
                name;
 
-       function getTestString( suffix = 'defaultsuffix' ) {
-               return Math.random().toString() + '-Iñtërnâtiônàlizætiøn☃-' + suffix;
-       }
-
        before( function () {
                // disable VisualEditor welcome dialog
                UserLoginPage.open();
@@ -22,8 +19,8 @@ describe( 'Page', function () {
 
        beforeEach( function () {
                browser.deleteCookie();
-               content = getTestString( 'beforeEach-content' );
-               name = getTestString( 'beforeEach-name' );
+               content = Util.getTestString( 'beforeEach-content-' );
+               name = Util.getTestString( 'BeforeEach-name-' );
        } );
 
        it( 'should be creatable', function () {
@@ -36,7 +33,7 @@ describe( 'Page', function () {
        } );
 
        it( 'should be re-creatable', function () {
-               let initialContent = getTestString( 'initialContent' );
+               let initialContent = Util.getTestString( 'initialContent-' );
 
                // create
                browser.call( function () {
@@ -63,7 +60,7 @@ describe( 'Page', function () {
                } );
 
                // edit
-               let editContent = getTestString( 'editContent' );
+               let editContent = Util.getTestString( 'editContent-' );
                EditPage.edit( name, editContent );
 
                // check
index d82f78f..ee06971 100644 (file)
@@ -1,19 +1,16 @@
 const assert = require( 'assert' ),
        Api = require( 'wdio-mediawiki/Api' ),
-       RecentChangesPage = require( '../pageobjects/recentchanges.page' );
+       RecentChangesPage = require( '../pageobjects/recentchanges.page' ),
+       Util = require( 'wdio-mediawiki/Util' );
 
 describe( 'Special:RecentChanges', function () {
        let content,
                name;
 
-       function getTestString() {
-               return Math.random().toString() + '-öäü-♠♣♥♦';
-       }
-
        beforeEach( function () {
                browser.deleteCookie();
-               content = getTestString();
-               name = getTestString();
+               content = Util.getTestString();
+               name = Util.getTestString();
        } );
 
        it( 'shows page creation', function () {
diff --git a/tests/selenium/specs/specialwatchlist.js b/tests/selenium/specs/specialwatchlist.js
new file mode 100644 (file)
index 0000000..de36b90
--- /dev/null
@@ -0,0 +1,41 @@
+const assert = require( 'assert' ),
+       Api = require( 'wdio-mediawiki/Api' ),
+       WatchlistPage = require( '../pageobjects/watchlist.page' ),
+       WatchablePage = require( '../pageobjects/watchable.page' ),
+       LoginPage = require( 'wdio-mediawiki/LoginPage' ),
+       Util = require( 'wdio-mediawiki/Util' );
+
+describe( 'Special:Watchlist', function () {
+       let username, password;
+
+       before( function () {
+               username = Util.getTestString( 'user-' );
+               password = Util.getTestString( 'password-' );
+
+               browser.call( function () {
+                       return Api.createAccount( username, password );
+               } );
+       } );
+
+       beforeEach( function () {
+               browser.deleteCookie();
+               LoginPage.login( username, password );
+       } );
+
+       it( 'should show page with new edit', function () {
+               const title = Util.getTestString( 'Title-' );
+
+               browser.call( function () {
+                       return Api.edit( title, Util.getTestString() ); // create
+               } );
+               WatchablePage.watch( title );
+               browser.call( function () {
+                       return Api.edit( title, Util.getTestString() ); // edit
+               } );
+
+               WatchlistPage.open();
+
+               assert.strictEqual( WatchlistPage.titles[ 0 ].getText(), title );
+       } );
+
+} );
index 4d22645..b64d9f5 100644 (file)
@@ -2,7 +2,8 @@ const assert = require( 'assert' ),
        CreateAccountPage = require( '../pageobjects/createaccount.page' ),
        PreferencesPage = require( '../pageobjects/preferences.page' ),
        UserLoginPage = require( 'wdio-mediawiki/LoginPage' ),
-       Api = require( 'wdio-mediawiki/Api' );
+       Api = require( 'wdio-mediawiki/Api' ),
+       Util = require( 'wdio-mediawiki/Util' );
 
 describe( 'User', function () {
        var password,
@@ -16,8 +17,8 @@ describe( 'User', function () {
 
        beforeEach( function () {
                browser.deleteCookie();
-               username = `User-${Math.random().toString()}`;
-               password = Math.random().toString();
+               username = Util.getTestString( 'User-' );
+               password = Util.getTestString();
        } );
 
        it( 'should be able to create account', function () {
@@ -42,7 +43,7 @@ describe( 'User', function () {
        } );
 
        it( 'should be able to change preferences', function () {
-               var realName = Math.random().toString();
+               var realName = Util.getTestString();
 
                // create
                browser.call( function () {
index bfce387..50e940f 100644 (file)
@@ -1,6 +1,10 @@
 # Notable changes
 
-## [Unreleased]
+## v0.2.0
+
+* Util: Added getTestString().
+
+## v0.1.0
 
 * Api: Added initial version.
 * Page: Added initial version.
diff --git a/tests/selenium/wdio-mediawiki/Util.js b/tests/selenium/wdio-mediawiki/Util.js
new file mode 100644 (file)
index 0000000..fe1ebed
--- /dev/null
@@ -0,0 +1,5 @@
+module.exports = {
+       getTestString( prefix = '' ) {
+               return prefix + Math.random().toString() + '-Iñtërnâtiônàlizætiøn☃';
+       }
+};
index be7ed33..56ea045 100644 (file)
@@ -1,6 +1,6 @@
 {
   "name": "wdio-mediawiki",
-  "version": "0.1.0",
+  "version": "0.2.0",
   "description": "WebdriverIO plugin for testing a MediaWiki site.",
   "homepage": "https://gerrit.wikimedia.org/g/mediawiki/core/+/master/tests/selenium/wdio-mediawiki/",
   "license": "MIT",