Merge "Datatable: Apply `padding` only on `th` & `td` elements"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 23 Jan 2019 04:18:29 +0000 (04:18 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 23 Jan 2019 04:18:29 +0000 (04:18 +0000)
100 files changed:
RELEASE-NOTES-1.33
autoload.php
docs/extension.schema.v1.json
docs/extension.schema.v2.json
includes/GlobalFunctions.php
includes/api/i18n/de.json
includes/api/i18n/es.json
includes/api/i18n/mk.json
includes/api/i18n/zh-hant.json
includes/filerepo/file/LocalFile.php
includes/htmlform/HTMLSelectLanguageField.php [deleted file]
includes/htmlform/fields/HTMLSelectLanguageField.php [new file with mode: 0644]
includes/http/MWHttpRequest.php
includes/installer/WebInstallerOutput.php
includes/installer/i18n/ca.json
includes/installer/i18n/ko.json
includes/libs/mime/MSCompoundFileReader.php [new file with mode: 0644]
includes/libs/mime/MimeAnalyzer.php
includes/libs/rdbms/database/DatabasePostgres.php
includes/libs/rdbms/field/PostgresField.php
includes/registration/ExtensionRegistry.php
includes/shell/Command.php
includes/upload/UploadBase.php
includes/upload/UploadStash.php
includes/utils/ZipDirectoryReader.php
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/bqi.json
languages/i18n/ca.json
languages/i18n/cdo.json
languages/i18n/ce.json
languages/i18n/da.json
languages/i18n/dty.json
languages/i18n/es.json
languages/i18n/exif/ro.json
languages/i18n/fi.json
languages/i18n/gom-latn.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/hy.json
languages/i18n/ig.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/ka.json
languages/i18n/lb.json
languages/i18n/lv.json
languages/i18n/mk.json
languages/i18n/mr.json
languages/i18n/my.json
languages/i18n/myv.json
languages/i18n/nb.json
languages/i18n/ne.json
languages/i18n/nn.json
languages/i18n/pnb.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/ses.json
languages/i18n/sr-ec.json
languages/i18n/ta.json
languages/i18n/tcy.json
languages/i18n/uk.json
languages/i18n/ur.json
package.json
resources/Resources.php
resources/src/jquery/jquery.suggestions.js
resources/src/mediawiki.action/mediawiki.action.edit.collapsibleFooter.css
resources/src/mediawiki.action/mediawiki.action.view.dblClickEdit.js
resources/src/mediawiki.legacy/commonPrint.css
resources/src/mediawiki.legacy/shared.css
resources/src/mediawiki.pager.tablePager/TablePager.less
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.RclTargetPageWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SavedLinksListItemWidget.js
resources/src/mediawiki.special.apisandbox/apisandbox.js
resources/src/mediawiki.widgets.datetime/CalendarWidget.js
resources/src/mediawiki.widgets.datetime/CalendarWidget.less
resources/src/mediawiki.widgets.datetime/DateTimeInputWidget.js
resources/src/mediawiki.widgets.datetime/mediawiki.widgets.datetime.definitions.less
resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.SearchInputWidget.js
tests/phpunit/data/MSCompoundFileReader/calc.xls [new file with mode: 0644]
tests/phpunit/data/MSCompoundFileReader/dir-beyond-end.xls [new file with mode: 0644]
tests/phpunit/data/MSCompoundFileReader/excel2016-compat97.xls [new file with mode: 0755]
tests/phpunit/data/MSCompoundFileReader/fat-loop.xls [new file with mode: 0644]
tests/phpunit/data/MSCompoundFileReader/gnumeric.xls [new file with mode: 0644]
tests/phpunit/data/MSCompoundFileReader/impress.ppt [new file with mode: 0644]
tests/phpunit/data/MSCompoundFileReader/invalid-signature.xls [new file with mode: 0644]
tests/phpunit/data/MSCompoundFileReader/powerpoint2016-compat97.ppt [new file with mode: 0755]
tests/phpunit/data/MSCompoundFileReader/word2016-compat97.doc [new file with mode: 0755]
tests/phpunit/data/MSCompoundFileReader/writer.doc [new file with mode: 0644]
tests/phpunit/data/media/zip-in-doc.doc [new file with mode: 0644]
tests/phpunit/includes/api/RandomImageGenerator.php
tests/phpunit/includes/libs/composer/ComposerInstalledTest.php
tests/phpunit/includes/libs/composer/ComposerJsonTest.php
tests/phpunit/includes/libs/composer/ComposerLockTest.php
tests/phpunit/includes/libs/mime/MSCompoundFileReaderTest.php [new file with mode: 0644]
tests/phpunit/includes/libs/mime/MimeAnalyzerTest.php
tests/phpunit/includes/utils/ZipDirectoryReaderTest.php

index 80e3bbd..443dd01 100644 (file)
@@ -20,7 +20,6 @@ production.
   IP addresses, internationalized domain names, and possibly mailto links.
 * (T193868) $wgChangeTagsSchemaMigrationStage — This temporary setting, added in
   MediaWiki 1.32, now defaults to MIGRATION_NEW instead of MIGRATION_WRITE_BOTH.
-* …
 
 ==== Removed configuration ====
 * (T199334) $wgTagStatisticsNewTable — This temporary setting, added in
@@ -31,7 +30,6 @@ production.
   $wgTidyConf, $wgTidyOpts, $wgTidyInternal, and $wgDebugTidy, all
   deprecated since 1.26, have now all been removed. The $wgTidyConfig
   setting remains only for Remex experimental features or debugging.
-* …
 
 === New features in 1.33 ===
 * (T96041) __EXPECTUNUSEDCATEGORY__ on a category page causes the category
@@ -41,14 +39,12 @@ production.
   additional information about the authentication event.
 * TextContent::getText() was introduced as a replacement for
   Content::getNativeData() for text-based content models.
-* …
 
 === External library changes in 1.33 ===
 
 ==== New external libraries ====
 * Added wikimedia/password-blacklist 0.1.4.
 * Added guzzlehttp/guzzle 6.3.3.
-* …
 
 ==== Changed external libraries ====
 * Updated wikimedia/xmp-reader from 0.6.0 to 0.6.1.
@@ -57,15 +53,12 @@ production.
   * The deprecated IPSet\IPSet alias was removed, Wikimedia\IPSet must be
     used instead.
 * Updated qunitjs from 2.6.2 to 2.9.1.
-* …
 
 ==== Removed external libraries ====
-* …
 
 === Bug fixes in 1.33 ===
 * (T164211) Special:UserRights could sometimes fail with a
   "conflict detected" error when there weren't any conflicts.
-* …
 
 === Action API changes in 1.33 ===
 * (T198913) Added 'ApiOptions' hook.
@@ -97,7 +90,6 @@ production.
   hyphen. Methods such as ApiBase::dieWithError() and
   ApiMessageTrait::setApiCode() will throw an InvalidArgumentException if
   passed a bad code.
-* …
 
 === Languages updated in 1.33 ===
 MediaWiki supports over 350 languages. Many localisations are updated regularly.
@@ -179,6 +171,13 @@ because of Phabricator reports.
   * getTimeZoneList()
 * mw.util.jsMessage(), deprecated in 1.20, was removed. Use mw.notify instead.
 * (T61113) User::EDIT_TOKEN_SUFFIX was removed. It was deprecated since 1.27.
+* The 'mediawiki.api' module aliases, deprecated in 1.32, have been removed.
+  Specifically: mediawiki.api.category, mediawiki.api.edit,
+  mediawiki.api.login, mediawiki.api.options, mediawiki.api.parse,
+  mediawiki.api.upload, mediawiki.api.user, mediawiki.api.watch,
+  mediawiki.api.messages, and mediawiki.api.rollback.
+* The 'jquery.byteLimit' module alias for 'jquery.lengthLimit',
+  deprecated in 1.31, was removed.
 
 === Deprecations in 1.33 ===
 * The configuration option $wgUseESI has been deprecated, and is expected
@@ -212,14 +211,15 @@ because of Phabricator reports.
   Wikimedia\Services. The old name is still supported, but deprecated.
 * (T155582) Content::getNativeData has been deprecated. Please use model-
   specific getters, such as TextContent::getText().
-* …
+* The class WebInstallerOutput is now marked as @private.
+* (T209699) The jquery.async module has been deprecated. JavaScript code that
+  needs asynchronous behaviour should use Promises.
 
 === Other changes in 1.33 ===
 * (T208871) The hard-coded Google search form on the database error page was
   removed.
 * (T201747) Html::openElement() warns if given an element name wiht a space
   in it.
-* …
 
 == Compatibility ==
 MediaWiki 1.33 requires PHP 7.0.0 or later. Although HHVM 3.18.5 or later is
index afc187f..e9f13d7 100644 (file)
@@ -604,7 +604,7 @@ $wgAutoloadLocalClasses = [
        'HTMLRestrictionsField' => __DIR__ . '/includes/htmlform/fields/HTMLRestrictionsField.php',
        'HTMLSelectAndOtherField' => __DIR__ . '/includes/htmlform/fields/HTMLSelectAndOtherField.php',
        'HTMLSelectField' => __DIR__ . '/includes/htmlform/fields/HTMLSelectField.php',
-       'HTMLSelectLanguageField' => __DIR__ . '/includes/htmlform/HTMLSelectLanguageField.php',
+       'HTMLSelectLanguageField' => __DIR__ . '/includes/htmlform/fields/HTMLSelectLanguageField.php',
        'HTMLSelectLimitField' => __DIR__ . '/includes/htmlform/fields/HTMLSelectLimitField.php',
        'HTMLSelectNamespace' => __DIR__ . '/includes/htmlform/fields/HTMLSelectNamespace.php',
        'HTMLSelectNamespaceWithButton' => __DIR__ . '/includes/htmlform/fields/HTMLSelectNamespaceWithButton.php',
@@ -816,6 +816,7 @@ $wgAutoloadLocalClasses = [
        'LonelyPagesPage' => __DIR__ . '/includes/specials/SpecialLonelypages.php',
        'LongPagesPage' => __DIR__ . '/includes/specials/SpecialLongpages.php',
        'MIMEsearchPage' => __DIR__ . '/includes/specials/SpecialMIMEsearch.php',
+       'MSCompoundFileReader' => __DIR__ . '/includes/libs/mime/MSCompoundFileReader.php',
        'MWCallableUpdate' => __DIR__ . '/includes/deferred/MWCallableUpdate.php',
        'MWContentSerializationException' => __DIR__ . '/includes/exception/MWContentSerializationException.php',
        'MWCryptHKDF' => __DIR__ . '/includes/utils/MWCryptHKDF.php',
index 7e42035..dc0abdc 100644 (file)
@@ -72,7 +72,7 @@
                                                        "description": "Version constraint string against PHP."
                                                }
                                        },
-                                       "patternProprties": {
+                                       "patternProperties": {
                                                "^ext-": {
                                                        "type": "string",
                                                        "description": "Required PHP extension.",
index c5c3b5d..9da636f 100644 (file)
@@ -73,7 +73,7 @@
                                                        "description": "Version constraint string against PHP."
                                                }
                                        },
-                                       "patternProprties": {
+                                       "patternProperties": {
                                                "^ext-": {
                                                        "type": "string",
                                                        "description": "Required PHP extension.",
index 9f29114..a74060c 100644 (file)
@@ -148,6 +148,7 @@ function wfArrayDiff2_cmp( $a, $b ) {
  * @return array
  */
 function wfArrayFilter( array $arr, callable $callback ) {
+       wfDeprecated( __FUNCTION__, '1.32' );
        return array_filter( $arr, $callback, ARRAY_FILTER_USE_BOTH );
 }
 
@@ -160,6 +161,7 @@ function wfArrayFilter( array $arr, callable $callback ) {
  * @return array
  */
 function wfArrayFilterByKey( array $arr, callable $callback ) {
+       wfDeprecated( __FUNCTION__, '1.32' );
        return array_filter( $arr, $callback, ARRAY_FILTER_USE_KEY );
 }
 
index f626d2b..081ad94 100644 (file)
        "apihelp-query+revisions+base-paramvalue-prop-content": "Inhalt eines jeden Versionsschlitzes.",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "Markierungen für die Version.",
        "apihelp-query+revisions+base-paramvalue-prop-roles": "Die Liste enthält Schlitzregeln, die in der Version vorhanden sind.",
+       "apihelp-query+search-summary": "Führt eine Volltextsuche aus.",
        "apihelp-query+search-param-what": "Welcher Suchtyp ausgeführt werden soll.",
        "apihelp-query+search-param-info": "Welche Metadaten zurückgegeben werden sollen.",
        "apihelp-query+search-param-prop": "Eigenschaften zur Rückgabe:",
        "apihelp-query+search-param-qiprofile": "Zu verwendendes anfrageunabhängiges Profil (wirkt sich auf den Ranking-Algorithmus aus).",
        "apihelp-query+search-paramvalue-prop-wordcount": "Ergänzt den Wortzähler der Seite.",
        "apihelp-query+search-paramvalue-prop-extensiondata": "Ergänzt zusätzliche von Erweiterungen erzeugte Daten.",
+       "apihelp-query+search-paramvalue-prop-hasrelated": "Ignoriert.",
        "apihelp-query+search-param-limit": "Wie viele Seiten insgesamt zurückgegeben werden sollen.",
        "apihelp-query+search-param-sort": "Legt die Sortierreihenfolge der zurückgegebenen Ergebnisse fest.",
        "apihelp-query+search-example-simple": "Nach <kbd>meaning</kbd> suchen.",
index 224eca5..26d09c3 100644 (file)
@@ -36,7 +36,7 @@
                        "Jelou"
                ]
        },
-       "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentación]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de correo]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anuncios API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Errores y peticiones]\n</div>\n<strong>Estado:</strong> La API de MediaWiki es una interfaz madura y estable que se mejora y prueba activamente. Aunque tratamos de evitarlo, es posible que ocasionalmente debamos hacer cambios importantes. Suscríbase a la [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de correo mediawiki-api-announce] para recibir avisos de actualizaciones.\n\n<strong>Solicitudes erróneas:</strong> Cuando se envían solicitudes erróneas a la API, se enviará un encabezado HTTP con la clave «MediaWiki-API-Error» y, luego, el valor del encabezado y el código de error devuelto se establecerán en el mismo valor. Para obtener más información, consulte [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errores y advertencias]].\n\n<p class=\"mw-apisandbox-link\"><strong>Pruebas:</strong> Para facilitar la comprobación de las solicitudes de API, consulte [[Special:ApiSandbox]].</p>",
+       "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentación]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de correo]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anuncios API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Errores y peticiones]\n</div>\n<strong>Estado:</strong> La API de MediaWiki es una interfaz madura y estable que se mejora y prueba activamente. Aunque tratamos de evitarlo, es posible que ocasionalmente debamos hacer cambios importantes. Suscríbete a la [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de correo mediawiki-api-announce] para recibir avisos de actualizaciones.\n\n<strong>Solicitudes erróneas:</strong> Cuando se envían solicitudes erróneas a la API, se enviará un encabezado HTTP con la clave «MediaWiki-API-Error» y, luego, el valor del encabezado y el código de error devuelto se establecerán en el mismo valor. Para obtener más información, consulta [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errores y advertencias]].\n\n<p class=\"mw-apisandbox-link\"><strong>Pruebas:</strong> Para facilitar la comprobación de las solicitudes de API, consulta [[Special:ApiSandbox]].</p>",
        "apihelp-main-param-action": "Qué acción se realizará.",
        "apihelp-main-param-format": "El formato de la salida.",
        "apihelp-main-param-maxlag": "Se puede usar el retardo máximo cuando se instala MediaWiki en un clúster replicado de base de datos. Para evitar acciones que causen más retardo en la replicación del sitio, este parámetro puede hacer que el cliente espere hasta que el retardo en la replicación sea menor que el valor especificado. En caso de retardo excesivo, se devuelve el código de error <samp>maxlag</samp> con un mensaje como <samp>Esperando a $host: $lag segundos de retardo</samp>.<br />Consulta [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: parámetro Maxlag]] para más información.",
@@ -67,7 +67,7 @@
        "apihelp-block-param-reblock": "Si la cuenta ya está bloqueada, sobrescribir el bloqueo existente.",
        "apihelp-block-param-watchuser": "Vigilar las páginas de usuario y de discusión del usuario o de la dirección IP.",
        "apihelp-block-param-tags": "Cambiar las etiquetas que aplicar a la entrada en el registro de bloqueos.",
-       "apihelp-block-param-partial": "Bloquear a un usuario de determinadas páginas o espacios de nombres en lugar del sitio entero.",
+       "apihelp-block-param-partial": "Bloquear a un usuario en determinadas páginas o espacios de nombres en lugar del sitio entero.",
        "apihelp-block-example-ip-simple": "Bloquear la dirección IP <kbd>192.0.2.5</kbd> durante 3 días por el motivo <kbd>First strike</kbd>.",
        "apihelp-block-example-user-complex": "Bloquear al usuario <kbd>Vandal</kbd> indefinidamente con el motivo <kbd>Vandalism</kbd> y evitar que se cree nuevas cuentas o envíe correos.",
        "apihelp-changeauthenticationdata-summary": "Cambiar los datos de autentificación para el usuario actual.",
        "apihelp-query+search-param-interwiki": "Incluir resultados interwiki en la búsqueda, si es posible.",
        "apihelp-query+search-param-backend": "Qué servidor de búsqueda utilizar, si no es el servidor por defecto.",
        "apihelp-query+search-param-enablerewrites": "Habilitar la reescritura de consultas internas. Algunos servidores de búsqueda pueden reescribir la consulta a una que considere que da mejores resultados, por ejemplo, corrigiendo las faltas ortográficas.",
-       "apihelp-query+search-param-sort": "Fijar la ordenación de los resultados devueltos.",
+       "apihelp-query+search-param-sort": "Establecer el orden de clasificación de los resultados devueltos.",
        "apihelp-query+search-example-simple": "Buscar <kbd>meaning</kbd>.",
        "apihelp-query+search-example-text": "Buscar <kbd>meaning</kbd> en los textos.",
        "apihelp-query+search-example-generator": "Obtener información acerca de las páginas devueltas por una búsqueda de <kbd>meaning</kbd>.",
        "apierror-badvalue-notmultivalue": "El separador multivalor U+001F solo se puede utilizar en parámetros multivalorados.",
        "apierror-blockedfrommail": "Se te ha bloqueado de enviar email.",
        "apierror-blocked": "Se te ha bloqueado de editar.",
-       "apierror-blocked-partial": "Se te ha bloqueado de editar esta página.",
+       "apierror-blocked-partial": "Se ha bloqueado tu edición en esta página.",
        "apierror-botsnotsupported": "Esta interfaz no está disponible para bots.",
        "apierror-cannotreauthenticate": "Esta acción no está disponible, ya que tu identidad no se puede verificar.",
        "apierror-cannotviewtitle": "No tienes permiso para ver $1.",
index 5aca99d..5837eee 100644 (file)
        "apihelp-feedrecentchanges-param-limit": "Највеќе ставки во исходот за прикажување.",
        "apihelp-feedrecentchanges-param-from": "Прикажи ги промените оттогаш.",
        "apihelp-feedrecentchanges-param-hideminor": "Скриј ги ситните промени.",
-       "apihelp-feedrecentchanges-param-hidebots": "Скриј ги промените напарвени од ботови.",
+       "apihelp-feedrecentchanges-param-hidebots": "Скриј ги промените направени од ботови.",
        "apihelp-feedrecentchanges-param-hideanons": "Скриј ги промените направени од анонимни корисници.",
        "apihelp-feedrecentchanges-param-hideliu": "Скриј ги промените направени од регистрирани корисници.",
        "apihelp-feedrecentchanges-param-hidepatrolled": "Скриј ги испатролираните промени.",
index 5b73d41..90901e5 100644 (file)
        "apihelp-compare-param-fromrev": "要比對的第一個修訂。",
        "apihelp-compare-param-frompst": "在 <var>fromtext-&#x7B;slot}</var> 進行預先儲存轉換。",
        "apihelp-compare-param-fromslots": "覆蓋由 <var>fromtitle</var>、<var>fromid</var> 或 <var>fromrev</var> 指定的修訂內容。\n\n此參數指定要變動的間隔。使用 <var>fromtext-&#x7B;slot}</var>、<var>fromcontentmodel-&#x7B;slot}</var>、與 <var>fromcontentformat-&#x7B;slot}</var> 來指定各間隔的內容。",
+       "apihelp-compare-param-fromtext-{slot}": "指定間隔的文字。若忽略的話,間隔會從修訂中移除。",
        "apihelp-compare-param-fromcontentmodel-{slot}": "<var>fromtext-&#x7B;slot}</var> 內容模組。若不提供,則會根據其它參數猜測。",
        "apihelp-compare-param-fromcontentformat-{slot}": "<var>fromtext-&#x7B;slot}</var> 的內容序列化格式。",
        "apihelp-compare-param-fromtext": "指定 <kbd>fromslots=main</kbd> 並改用 <var>fromtext-main</var>。",
        "apihelp-compare-param-fromcontentmodel": "指定 <kbd>fromslots=main</kbd> 並改使用 <var>fromcontentmodel-main</var>。",
        "apihelp-compare-param-fromcontentformat": "指定 <kbd>fromslots=main</kbd> 並改使用 <var>fromcontentformat-main</var>。",
+       "apihelp-compare-param-fromsection": "僅使用 'from' 內容的指定段落。",
        "apihelp-compare-param-totitle": "要比對的第二個標題。",
        "apihelp-compare-param-toid": "要比對的第二個頁面 ID。",
        "apihelp-compare-param-torev": "要比對的第二個修訂。",
        "apihelp-compare-param-topst": "在 <var>totext</var> 執行預先保存轉換。",
+       "apihelp-compare-param-totext-{slot}": "指定間隔的文字。若忽略的話,間隔會從修訂中移除。",
        "apihelp-compare-param-tocontentmodel-{slot}": "<var>totext-&#x7B;slot}</var> 內容模組。若不提供,則會基於其它參數來猜測。",
        "apihelp-compare-param-tocontentformat-{slot}": "<var>totext-&#x7B;slot}</var> 的內容序列化格式。",
        "apihelp-compare-param-totext": "指定 <kbd>toslots=main</kbd> 並改用 <var>totext-main</var>。",
        "apihelp-compare-param-tocontentmodel": "指定 <kbd>toslots=main</kbd> 並改使用 <var>tocontentmodel-main</var>。",
        "apihelp-compare-param-tocontentformat": "指定 <kbd>toslots=main</kbd> 並改使用 <var>tocontentformat-main</var>。",
+       "apihelp-compare-param-tosection": "僅使用 'to' 內容的指定段落。",
        "apihelp-compare-param-prop": "要取得的資訊部份。",
        "apihelp-compare-paramvalue-prop-diff": "HTML 差異。",
        "apihelp-compare-paramvalue-prop-diffsize": "以位元組為單位的 HTML 差異大小。",
@@ -94,6 +98,7 @@
        "apihelp-compare-paramvalue-prop-comment": "「from」與「to」修訂的註釋。",
        "apihelp-compare-paramvalue-prop-parsedcomment": "「from」與「to」修訂的解析註釋。",
        "apihelp-compare-paramvalue-prop-size": "「from」與「to」修訂的大小。",
+       "apihelp-compare-param-slots": "回傳這些間隔的個別差異,而不是由所有間隔所合併出的單一差異。",
        "apihelp-compare-example-1": "建立修訂 1 與 1 的差異檔",
        "apihelp-createaccount-summary": "建立新使用者帳號。",
        "apihelp-createaccount-example-create": "開始建立使用者 <kbd>Example</kbd> 與密碼 <kbd>ExamplePassword</kbd> 的過程。",
        "apihelp-parse-param-pst": "在解析之前執行在輸入裡的預先儲存轉換。僅當與文字使用時有效。",
        "apihelp-parse-param-onlypst": "在輸入裡進行預先儲存轉換(pre-save transform、PST)但不解析。在 PST 已套用後回傳相同的 wiki 文字。僅與 <var>$1text</var> 使用時有效。",
        "apihelp-parse-param-effectivelanglinks": "包含由擴充提供的語言連結(與 <kbd>$1prop=langlinks</kbd> 一起使用)。",
+       "apihelp-parse-param-sectiontitle": "新段落標題當 <var>section</var> 為 <kbd>new</kbd> 時。\n\n不像頁面編輯,當省略或為空時不會退至 <var>summary</var>。",
        "apihelp-parse-param-disablelimitreport": "從解析輸出內容裡省略限制報告(\"NewPP limit report\")。",
        "apihelp-parse-param-disablepp": "請改用<var>$1disablelimitreport</var>。",
        "apihelp-parse-param-disableeditsection": "從解析輸出內容省略編輯段落連結。",
        "apihelp-query+mystashedfiles-paramvalue-prop-size": "索取檔案大小與圖片尺寸。",
        "apihelp-query+mystashedfiles-paramvalue-prop-type": "索取檔案的 MIME 類型以及媒體類型。",
        "apihelp-query+mystashedfiles-param-limit": "要取得的檔案數量。",
+       "apihelp-query+mystashedfiles-example-simple": "取得檔案鍵、檔案大小、以及在目前使用者上傳儲藏裡的檔案像素尺寸。",
        "apihelp-query+alltransclusions-summary": "列出所有嵌入(頁面使用 &#123;&#123;x&#125;&#125; 來內嵌),包含不存在的。",
        "apihelp-query+alltransclusions-param-from": "要起始列舉的嵌入標題。",
        "apihelp-query+alltransclusions-param-to": "要終止列舉的嵌入標題。",
        "apihelp-query+allusers-param-activeusers": "僅列出在最近 $1 {{PLURAL:$1|天|天}}裡活躍的使用者。",
        "apihelp-query+allusers-example-Y": "列出以<kbd>Y</kbd>開頭的使用者。",
        "apihelp-query+authmanagerinfo-summary": "取得目前身分核對狀態的資訊。",
+       "apihelp-query+authmanagerinfo-param-requestsfor": "索取關於指定驗證操作所需的驗證請求方面資訊。",
        "apihelp-query+authmanagerinfo-example-login": "索取當開始登入時可能會用到的請求。",
        "apihelp-query+authmanagerinfo-example-securitysensitiveoperation": "測試用於操作 <kbd>foo</kbd> 的認證是否足夠。",
        "apihelp-query+backlinks-summary": "找出連結至指定頁面的所有頁面。",
        "apihelp-query+categorymembers-example-simple": "取得在 <kbd>Category:Physics</kbd> 裡前 10 項的頁面。",
        "apihelp-query+categorymembers-example-generator": "取得在 <kbd>Category:Physics</kbd> 裡前 10 個頁面的頁面資訊。",
        "apihelp-query+contributors-summary": "取得頁面上登入貢獻者以及匿名貢獻者數量的清單。",
+       "apihelp-query+contributors-param-group": "僅包含在指定群組的使用者。不包含隱含或是自動晉升群組,像是:*、使用者、或是自動確認。",
+       "apihelp-query+contributors-param-excludegroup": "排除在指定群組的使用者。不包含隱含或是自動晉升群組,像是:*、使用者、或是自動確認。",
+       "apihelp-query+contributors-param-rights": "僅包含有指定權限的使用者。不包含透過由隱含或是自動晉升群組所授予的權限,像是:*、使用者、或是自動確認。",
+       "apihelp-query+contributors-param-excluderights": "排除有指定權限的使用者。不包含透過由隱含或是自動晉升群組所授予的權限,像是:*、使用者、或是自動確認。",
        "apihelp-query+contributors-param-limit": "要回傳的貢獻人員數量。",
        "apihelp-query+contributors-example-simple": "顯示頁面 <kbd>Main Page</kbd> 的貢獻者。",
        "apihelp-query+deletedrevisions-summary": "取得已刪除修訂的資訊。",
        "apihelp-query+filerepoinfo-paramvalue-prop-canUpload": "檔案是否可上傳至此儲存庫,例如透過 CORS 與共享驗證。",
        "apihelp-query+filerepoinfo-paramvalue-prop-displayname": "人類可讀的儲存庫 wiki 名稱。",
        "apihelp-query+filerepoinfo-paramvalue-prop-favicon": "儲存庫 wiki 的網頁圖標 URL,來自於 <var>[[mw:Special:MyLanguage/Manual:$wgFavicon|$wgFavicon]]</var>。",
+       "apihelp-query+filerepoinfo-paramvalue-prop-fetchDescription": "當檢視本地端檔案描述頁面時,是否從該儲存庫檢索檔案描述頁面。",
        "apihelp-query+filerepoinfo-paramvalue-prop-initialCapital": "檔案是否隱式地以大寫字母開頭。",
        "apihelp-query+filerepoinfo-paramvalue-prop-local": "儲存庫是否為本地端。",
        "apihelp-query+filerepoinfo-paramvalue-prop-name": "儲存庫的要點 - 使用在像是 <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> 與 [[Special:ApiHelp/query+imageinfo|imageinfo]] 所回傳的值。",
        "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "由使用者對於修訂所解析的註釋。",
        "apihelp-query+revisions+base-paramvalue-prop-content": "各修訂間隔的內容。",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "修訂標籤。",
+       "apihelp-query+revisions+base-paramvalue-prop-roles": "列出存在於修訂的內容間隔作用。",
        "apihelp-query+revisions+base-paramvalue-prop-parsetree": "請改用 <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> 或 <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>。修訂內容的 XML 解析樹狀(需要內容模組 <code>$1</code>)。",
        "apihelp-query+revisions+base-param-limit": "限制所回傳的修訂數量。",
        "apihelp-query+revisions+base-param-expandtemplates": "請改用 <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd>。在修訂內容裡展開模板(需要 $1prop=content)。",
        "apihelp-query+userinfo-paramvalue-prop-ratelimits": "列出所有套用到目前使用者的速率限制。",
        "apihelp-query+userinfo-paramvalue-prop-realname": "添加使用者的真實姓名。",
        "apihelp-query+userinfo-paramvalue-prop-email": "添加使用者的電子郵件地址與電子郵件驗證日期。",
+       "apihelp-query+userinfo-paramvalue-prop-acceptlang": "回響由在架構化格式客戶端所發送的 <code>Accept-Language</code> 標頭。",
        "apihelp-query+userinfo-paramvalue-prop-registrationdate": "添加使用者的註冊日期。",
        "apihelp-query+userinfo-paramvalue-prop-unreadcount": "添加未讀頁面數目在使用者的監視清單(最多 $1,若有更多則回傳 <samp>$2</samp>)。",
        "apihelp-query+userinfo-paramvalue-prop-centralids": "替使用者添加中心 ID 與附加狀態。",
+       "apihelp-query+userinfo-param-attachedwiki": "以 <kbd>$1prop=centralids</kbd> 來表明使用者是否附加於由此 ID 所識別出的 wiki。",
        "apihelp-query+userinfo-example-simple": "取得目前使用者的資訊。",
        "apihelp-query+userinfo-example-data": "取得目前使用者的額外資訊。",
        "apihelp-query+users-summary": "取得有關使用者清單的資訊。",
        "apihelp-query+users-paramvalue-prop-gender": "標記使用者性別。回傳「male」、「female」、或「unknown」。",
        "apihelp-query+users-paramvalue-prop-centralids": "替使用者添加中心 ID 與附加狀態。",
        "apihelp-query+users-paramvalue-prop-cancreate": "表明是否可替有效但尚未註冊的使用者名稱建立帳號。",
+       "apihelp-query+users-param-attachedwiki": "以 <kbd>$1prop=centralids</kbd> 來表明使用者是否附加於由此 ID 所識別出的 wiki。",
        "apihelp-query+users-param-users": "要獲取的使用者清單。",
        "apihelp-query+users-param-userids": "要獲取的使用者 ID 清單。",
        "apihelp-query+users-param-token": "請改用 <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>。",
        "apihelp-watch-example-generator": "監視在主命名空間最前的幾個頁面。",
        "apihelp-format-example-generic": "以 $1 格式傳回查詢結果。",
        "apihelp-json-summary": "使用 JSON 格式輸出資料。",
+       "apihelp-json-param-callback": "若有指定,將輸出包在指定的函式調用。出於安全考量,會限制所有使用者特定資料。",
        "apihelp-json-param-ascii": "若有指定,編碼所有使用十六進位轉義序列的非 ASCII。預設當 <var>formatversion</var> 為 <kbd>1</kbd> 時。",
        "apihelp-jsonfm-summary": "使用 JSON 格式輸出資料 (使用 HTML 格式顯示)。",
        "apihelp-none-summary": "不輸出。",
        "api-pageset-param-titles": "要使用的標題清單。",
        "api-pageset-param-pageids": "要使用的頁面 ID 清單。",
        "api-pageset-param-revids": "要使用的修訂 ID 清單。",
+       "api-pageset-param-generator": "按執行指定查詢模組來取得進行的頁面清單。\n\n<strong>注意:</strong>產生器參數名稱必須以 \"g\" 作為前綴,請查看範例。",
        "api-pageset-param-redirects-generator": "自動解決在 <var>$1titles</var>、<var>$1pageids</var>、<var>$1revids</var>,以及由 <var>$1generator</var> 所回傳頁面裡的重新導向。",
        "api-pageset-param-redirects-nogenerator": "自動解決在 <var>$1titles</var>、<var>$1pageids</var>,與 <var>$1revids</var> 的重新導向。",
        "api-help-title": "MediaWiki API 說明",
index f883dea..878e82d 100644 (file)
@@ -1320,7 +1320,7 @@ class LocalFile extends File {
 
                $srcPath = ( $src instanceof FSFile ) ? $src->getPath() : $src;
                if ( !$props ) {
-                       if ( $this->repo->isVirtualUrl( $srcPath )
+                       if ( FileRepo::isVirtualUrl( $srcPath )
                                || FileBackend::isStoragePath( $srcPath )
                        ) {
                                $props = $this->repo->getFileProps( $srcPath );
@@ -1863,7 +1863,7 @@ class LocalFile extends File {
                $archiveRel = $this->getArchiveRel( $archiveName );
 
                if ( $repo->hasSha1Storage() ) {
-                       $sha1 = $repo->isVirtualUrl( $srcPath )
+                       $sha1 = FileRepo::isVirtualUrl( $srcPath )
                                ? $repo->getFileSha1( $srcPath )
                                : FSFile::getSha1Base36FromPath( $srcPath );
                        /** @var FileBackendDBRepoWrapper $wrapperBackend */
diff --git a/includes/htmlform/HTMLSelectLanguageField.php b/includes/htmlform/HTMLSelectLanguageField.php
deleted file mode 100644 (file)
index 98cf3b1..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-/**
- * Language select field.
- */
-class HTMLSelectLanguageField extends HTMLSelectField {
-       public function __construct( $params ) {
-               parent::__construct( $params );
-
-               if ( $this->mParent instanceof HTMLForm ) {
-                       $config = $this->mParent->getConfig();
-                       $languageCode = $config->get( 'LanguageCode' );
-               } else {
-                       global $wgLanguageCode;
-                       $languageCode = $wgLanguageCode;
-               }
-
-               $languages = Language::fetchLanguageNames( null, 'mw' );
-
-               // Make sure the site language is in the list;
-               // a custom language code might not have a defined name…
-               if ( !array_key_exists( $languageCode, $languages ) ) {
-                       $languages[$languageCode] = $languageCode;
-               }
-
-               ksort( $languages );
-
-               foreach ( $languages as $code => $name ) {
-                       $this->mParams['options'][$code . ' - ' . $name] = $code;
-               }
-
-               if ( !array_key_exists( 'default', $params ) ) {
-                       $this->mParams['default'] = $languageCode;
-               }
-       }
-}
diff --git a/includes/htmlform/fields/HTMLSelectLanguageField.php b/includes/htmlform/fields/HTMLSelectLanguageField.php
new file mode 100644 (file)
index 0000000..98cf3b1
--- /dev/null
@@ -0,0 +1,36 @@
+<?php
+
+/**
+ * Language select field.
+ */
+class HTMLSelectLanguageField extends HTMLSelectField {
+       public function __construct( $params ) {
+               parent::__construct( $params );
+
+               if ( $this->mParent instanceof HTMLForm ) {
+                       $config = $this->mParent->getConfig();
+                       $languageCode = $config->get( 'LanguageCode' );
+               } else {
+                       global $wgLanguageCode;
+                       $languageCode = $wgLanguageCode;
+               }
+
+               $languages = Language::fetchLanguageNames( null, 'mw' );
+
+               // Make sure the site language is in the list;
+               // a custom language code might not have a defined name…
+               if ( !array_key_exists( $languageCode, $languages ) ) {
+                       $languages[$languageCode] = $languageCode;
+               }
+
+               ksort( $languages );
+
+               foreach ( $languages as $code => $name ) {
+                       $this->mParams['options'][$code . ' - ' . $name] = $code;
+               }
+
+               if ( !array_key_exists( 'default', $params ) ) {
+                       $this->mParams['default'] = $languageCode;
+               }
+       }
+}
index 2cf5320..1991239 100644 (file)
@@ -466,6 +466,7 @@ abstract class MWHttpRequest implements LoggerAwareInterface {
         * request has been executed.  Because some headers
         * (e.g. Set-Cookie) can appear more than once the, each value of
         * the associative array is an array of the values given.
+        * Header names are always in lowercase.
         *
         * @return array
         */
@@ -480,7 +481,7 @@ abstract class MWHttpRequest implements LoggerAwareInterface {
        /**
         * Returns the value of the given response header.
         *
-        * @param string $header
+        * @param string $header case-insensitive
         * @return string|null
         */
        public function getResponseHeader( $header ) {
index 950aaf7..ae07d0c 100644 (file)
@@ -31,6 +31,7 @@
  *
  * @ingroup Deployment
  * @since 1.17
+ * @private
  */
 class WebInstallerOutput {
 
@@ -166,7 +167,7 @@ class WebInstallerOutput {
 
                $rlContext = new ResourceLoaderContext( $resourceLoader, new FauxRequest( [
                                'debug' => 'true',
-                               'lang' => $this->getLanguageCode(),
+                               'lang' => $this->getLanguage()->getCode(),
                                'only' => 'styles',
                ] ) );
 
@@ -220,21 +221,13 @@ class WebInstallerOutput {
        }
 
        /**
-        * @return string
-        */
-       public function getDir() {
-               global $wgLang;
-
-               return is_object( $wgLang ) ? $wgLang->getDir() : 'ltr';
-       }
-
-       /**
-        * @return string
+        * @since 1.33
+        * @return Language
         */
-       public function getLanguageCode() {
+       private function getLanguage() {
                global $wgLang;
 
-               return is_object( $wgLang ) ? $wgLang->getCode() : 'en';
+               return is_object( $wgLang ) ? $wgLang : Language::factory( 'en' );
        }
 
        /**
@@ -242,8 +235,8 @@ class WebInstallerOutput {
         */
        public function getHeadAttribs() {
                return [
-                       'dir' => $this->getDir(),
-                       'lang' => LanguageCode::bcp47( $this->getLanguageCode() ),
+                       'dir' => $this->getLanguage()->getDir(),
+                       'lang' => $this->getLanguage()->getHtmlCode(),
                ];
        }
 
@@ -287,7 +280,7 @@ class WebInstallerOutput {
        <?php echo Html::linkedScript( 'config.js' ) . "\n"; ?>
 </head>
 
-<?php echo Html::openElement( 'body', [ 'class' => $this->getDir() ] ) . "\n"; ?>
+<?php echo Html::openElement( 'body', [ 'class' => $this->getLanguage()->getDir() ] ) . "\n"; ?>
 <div id="mw-page-base"></div>
 <div id="mw-head-base"></div>
 <div id="content" class="mw-body">
index 797fdc1..35088ed 100644 (file)
@@ -68,9 +68,9 @@
        "config-apc": "L'[https://secure.php.net/apc APC] està instal·lat",
        "config-apcu": "L'[https://secure.php.net/apcu APCu] està instal·lat",
        "config-wincache": "[https://www.iis.net/downloads/microsoft/wincache-extension WinCache] està instal·lat",
-       "config-diff3-bad": "No s'ha trobat el GNU diff3.",
+       "config-diff3-bad": "No s'ha trobat el GNU diff3. Podeu ignorar-ho per ara, però us podeu trobar amb conflictes d'edició més habitualment.",
        "config-git": "S'ha trobat el programari de control de versions Git: <code>$1</code>.",
-       "config-git-bad": "No s'ha trobat el programari de control de versions Git.",
+       "config-git-bad": "No s'ha trobat el programari de control de versions Git. Podeu ignorar-ho per ara, però la pàgina Especial:Versió no mostrarà els resums de publicacions.",
        "config-imagemagick": "S'ha trobat ImageMagick: <code>$1</code>.\nS'habilitaran les miniatures d'imatges si habiliteu les càrregues.",
        "config-gd": "S'ha trobat la biblioteca gràfica GD integrada.\nS'habilitaran les miniatures d'imatges si habiliteu les càrregues.",
        "config-no-scaling": "No s'ha pogut trobar la biblioteca GD o ImageMagick.\nS'inhabilitaran les miniatures de les imatges.",
        "config-install-pg-plpgsql": "S'està comprovant si hi ha llenguatge PL/pgSQL",
        "config-pg-no-plpgsql": "Necessiteu instal·lar l'idioma PL/pgSQL a la base de dades $1",
        "config-pg-no-create-privs": "El compte que heu especificat per a la instal·lació no té suficients permisos per crear un compte.",
+       "config-pg-not-in-role": "El compte que heu especificat de l'usuari web ja existeix.\nEl compte que heu especificat per a la instal·lació no és un superusuari i és no és un mebre del grup d'usuaris web; per tant, no pot crear els objectes que pertanyen a l'usuari web.\n\nAra per ara, MediaWiki necessita que les taules pertanyin a l'usuari web. Especifiqueu un altre nom de compte web, o feu clic a «Enrere» i especifiqueu un usuari d'instal·lació amb els privilegis adequats.",
        "config-install-user": "S'està creant l'usuari de la base de dades",
        "config-install-user-alreadyexists": "L'usuari «$1» ja existeix",
        "config-install-user-create-failed": "La creació de l'usuari «$1» ha fallat: $2",
index 6839c22..1a2aa5b 100644 (file)
@@ -12,7 +12,8 @@
                        "Macofe",
                        "Mooozi",
                        "Ykhwong",
-                       "Jerrykim306"
+                       "Jerrykim306",
+                       "Comjun04"
                ]
        },
        "config-desc": "미디어위키를 위한 설치 관리자",
@@ -75,7 +76,7 @@
        "config-mod-security": "<strong>경고:</strong> 웹 서버에 [https://modsecurity.org/ mod_security]가 허용되었습니다. 잘못 설정된 경우 미디어위키나 사용자가 임의의 내용을 게시할 수 있는 다른 소프트웨어에 대한 문제를 일으킬 수 있습니다.\n[https://modsecurity.org/documentation/ mod_security] 문서를 참고하거나 임의의 오류가 발생할 경우 호스트의 지원 요청에 문의하십시오.",
        "config-diff3-bad": "GNU diff3를 찾을 수 없습니다.",
        "config-git": "Git 버전 관리 소프트웨어를 찾았습니다: <code>$1</code>.",
-       "config-git-bad": "Git 버전 관리 소프트웨어를 찾을 수 없습니다.",
+       "config-git-bad": "Git 버전 관리 소프트웨어를 찾을 수 없습니다. 당신은 이 메세지를 무시할 수 있습니다. 특수:버전이 커밋 해시를 표시하지 않을 것임을 기억하세요.",
        "config-imagemagick": "ImageMagick를 찾았습니다: <code>$1</code>.\n올리기를 활성화할 경우 그림 섬네일이 활성화됩니다.",
        "config-gd": "내장된 GD 그래픽 라이브러리를 찾았습니다.\n올리기를 활성화할 경우 그림 섬네일이 활성화됩니다.",
        "config-no-scaling": "GD 라이브러리나 ImageMagick를 찾을 수 없습니다.\n그림 섬네일이 비활성화됩니다.",
diff --git a/includes/libs/mime/MSCompoundFileReader.php b/includes/libs/mime/MSCompoundFileReader.php
new file mode 100644 (file)
index 0000000..51407a7
--- /dev/null
@@ -0,0 +1,355 @@
+<?php
+/*
+ * Copyright 2019 Wikimedia Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed
+ * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+// strlen() is actually pretty fast compared to just about any loop body
+// phpcs:disable Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+
+/**
+ * Read the directory of a Microsoft Compound File Binary file, a.k.a. an OLE
+ * file, and detect the MIME type.
+ *
+ * References:
+ *  - MS-CFB https://msdn.microsoft.com/en-us/library/dd942138.aspx
+ *  - MS-XLS https://msdn.microsoft.com/en-us/library/cc313154.aspx
+ *  - MS-PPT https://msdn.microsoft.com/en-us/library/cc313106.aspx
+ *  - MS-DOC https://msdn.microsoft.com/en-us/library/cc313153.aspx
+ *  - Python olefile https://github.com/decalage2/olefile
+ *  - OpenOffice.org's Documentation of the Microsoft Compound Document
+ *    File Format https://www.openoffice.org/sc/compdocfileformat.pdf
+ *
+ * @since 1.33
+ */
+class MSCompoundFileReader {
+       private $file;
+       private $header;
+       private $mime;
+       private $mimeFromClsid;
+       private $error;
+       private $errorCode;
+       private $valid = false;
+
+       private $sectorLength;
+       private $difat;
+       private $fat = [];
+       private $fileLength;
+
+       const TYPE_UNALLOCATED = 0;
+       const TYPE_STORAGE = 1;
+       const TYPE_STREAM = 2;
+       const TYPE_ROOT = 5;
+
+       const ERROR_FILE_OPEN = 1;
+       const ERROR_SEEK = 2;
+       const ERROR_READ = 3;
+       const ERROR_INVALID_SIGNATURE = 4;
+       const ERROR_READ_PAST_END = 5;
+       const ERROR_INVALID_FORMAT = 6;
+
+       private static $mimesByClsid = [
+               // From http://justsolve.archiveteam.org/wiki/Microsoft_Compound_File
+               '00020810-0000-0000-C000-000000000046' => 'application/vnd.ms-excel',
+               '00020820-0000-0000-C000-000000000046' => 'application/vnd.ms-excel',
+               '00020906-0000-0000-C000-000000000046' => 'application/msword',
+               '64818D10-4F9B-11CF-86EA-00AA00B929E8' => 'application/vnd.ms-powerpoint',
+       ];
+
+       /**
+        * Read a file by name
+        *
+        * @param string $fileName The full path to the file
+        * @return array An associative array of information about the file:
+        *    - valid: true if the file is valid, false otherwise
+        *    - error: An error message in English, should be present if valid=false
+        *    - errorCode: One of the self::ERROR_* constants
+        *    - mime: The MIME type detected from the directory contents
+        *    - mimeFromClsid: The MIME type detected from the CLSID on the root
+        *      directory entry
+        */
+       public static function readFile( $fileName ) {
+               $handle = fopen( $fileName, 'r' );
+               if ( $handle === false ) {
+                       return [
+                               'valid' => false,
+                               'error' => 'file does not exist',
+                               'errorCode' => self::ERROR_FILE_OPEN
+                       ];
+               }
+               return self::readHandle( $handle );
+       }
+
+       /**
+        * Read from an open seekable handle
+        *
+        * @param resource $fileHandle The file handle
+        * @return array An associative array of information about the file:
+        *    - valid: true if the file is valid, false otherwise
+        *    - error: An error message in English, should be present if valid=false
+        *    - errorCode: One of the self::ERROR_* constants
+        *    - mime: The MIME type detected from the directory contents
+        *    - mimeFromClsid: The MIME type detected from the CLSID on the root
+        *      directory entry
+        */
+       public static function readHandle( $fileHandle ) {
+               $reader = new self( $fileHandle );
+               $info = [
+                       'valid' => $reader->valid,
+                       'mime' => $reader->mime,
+                       'mimeFromClsid' => $reader->mimeFromClsid
+               ];
+               if ( $reader->error ) {
+                       $info['error'] = $reader->error;
+                       $info['errorCode'] = $reader->errorCode;
+               }
+               return $info;
+       }
+
+       private function __construct( $fileHandle ) {
+               $this->file = $fileHandle;
+               try {
+                       $this->init();
+               } catch ( RuntimeException $e ) {
+                       $this->valid = false;
+                       $this->error = $e->getMessage();
+                       $this->errorCode = $e->getCode();
+               }
+       }
+
+       private function init() {
+               $this->header = $this->unpackOffset( 0, [
+                       'header_signature' => 8,
+                       'header_clsid' => 16,
+                       'minor_version' => 2,
+                       'major_version' => 2,
+                       'byte_order' => 2,
+                       'sector_shift' => 2,
+                       'mini_sector_shift' => 2,
+                       'reserved' => 6,
+                       'num_dir_sectors' => 4,
+                       'num_fat_sectors' => 4,
+                       'first_dir_sector' => 4,
+                       'transaction_signature_number' => 4,
+                       'mini_stream_cutoff_size' => 4,
+                       'first_mini_fat_sector' => 4,
+                       'num_mini_fat_sectors' => 4,
+                       'first_difat_sector' => 4,
+                       'num_difat_sectors' => 4,
+                       'difat' => 436,
+               ] );
+               if ( $this->header['header_signature'] !== "\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1" ) {
+                       $this->error( 'invalid signature: ' . bin2hex( $this->header['header_signature'] ),
+                               self::ERROR_INVALID_SIGNATURE );
+               }
+               $this->sectorLength = 1 << $this->header['sector_shift'];
+               $this->readDifat();
+               $this->readDirectory();
+
+               $this->valid = true;
+       }
+
+       private function sectorOffset( $sectorId ) {
+               return $this->sectorLength * ( $sectorId + 1 );
+       }
+
+       private function decodeClsid( $binaryClsid ) {
+               $parts = unpack( 'Va/vb/vc/C8d', $binaryClsid );
+               return sprintf( "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",
+                       $parts['a'],
+                       $parts['b'],
+                       $parts['c'],
+                       $parts['d1'],
+                       $parts['d2'],
+                       $parts['d3'],
+                       $parts['d4'],
+                       $parts['d5'],
+                       $parts['d6'],
+                       $parts['d7'],
+                       $parts['d8']
+               );
+       }
+
+       private function unpackOffset( $offset, $struct ) {
+               $block = $this->readOffset( $offset, array_sum( $struct ) );
+               return $this->unpack( $block, 0, $struct );
+       }
+
+       private function unpackSector( $sectorNumber, $struct ) {
+               $offset = $this->sectorOffset( $sectorNumber );
+               return $this->unpackOffset( $offset, array_sum( $struct ) );
+       }
+
+       private function unpack( $block, $offset, $struct ) {
+               $data = [];
+               foreach ( $struct as $key => $length ) {
+                       if ( $length > 4 ) {
+                               $data[$key] = substr( $block, $offset, $length );
+                       } else {
+                               $data[$key] = $this->bin2dec( $block, $offset, $length );
+                       }
+                       $offset += $length;
+               }
+               return $data;
+       }
+
+       private function bin2dec( $str, $offset, $length ) {
+               $value = 0;
+               for ( $i = $length - 1; $i >= 0; $i-- ) {
+                       $value *= 256;
+                       $value += ord( $str[$offset + $i] );
+               }
+               return $value;
+       }
+
+       private function readOffset( $offset, $length ) {
+               $this->fseek( $offset );
+               Wikimedia\suppressWarnings();
+               $block = fread( $this->file, $length );
+               Wikimedia\restoreWarnings();
+               if ( $block === false ) {
+                       $this->error( 'error reading from file', self::ERROR_READ );
+               }
+               if ( strlen( $block ) !== $length ) {
+                       $this->error( 'unable to read the required number of bytes from the file',
+                               self::ERROR_READ_PAST_END );
+               }
+               return $block;
+       }
+
+       private function readSector( $sectorId ) {
+               return $this->readOffset( $this->sectorOffset( $sectorId ), 1 << $this->header['sector_shift'] );
+       }
+
+       private function error( $message, $code ) {
+               throw new RuntimeException( $message, $code );
+       }
+
+       private function fseek( $offset ) {
+               Wikimedia\suppressWarnings();
+               $result = fseek( $this->file, $offset );
+               Wikimedia\restoreWarnings();
+               if ( $result !== 0 ) {
+                       $this->error( "unable to seek to offset $offset", self::ERROR_SEEK );
+               }
+       }
+
+       private function readDifat() {
+               $binaryDifat = $this->header['difat'];
+               $nextDifatSector = $this->header['first_difat_sector'];
+               for ( $i = 0; $i < $this->header['num_difat_sectors']; $i++ ) {
+                       $block = $this->readSector( $nextDifatSector );
+                       $binaryDifat .= substr( $block, 0, $this->sectorLength - 4 );
+                       $nextDifatSector = $this->bin2dec( $block, $this->sectorLength - 4, 4 );
+                       if ( $nextDifatSector == 0xFFFFFFFE ) {
+                               break;
+                       }
+               }
+
+               $this->difat = [];
+               for ( $pos = 0; $pos < strlen( $binaryDifat ); $pos += 4 ) {
+                       $fatSector = $this->bin2dec( $binaryDifat, $pos, 4 );
+                       if ( $fatSector < 0xFFFFFFFC ) {
+                               $this->difat[] = $fatSector;
+                       } else {
+                               break;
+                       }
+               }
+       }
+
+       private function getNextSectorIdFromFat( $sectorId ) {
+               $entriesPerSector = intdiv( $this->sectorLength, 4 );
+               $fatSectorId = intdiv( $sectorId, $entriesPerSector );
+               $fatSectorArray = $this->getFatSector( $fatSectorId );
+               return $fatSectorArray[$sectorId % $entriesPerSector];
+       }
+
+       private function getFatSector( $fatSectorId ) {
+               if ( !isset( $this->fat[$fatSectorId] ) ) {
+                       $fat = [];
+                       if ( !isset( $this->difat[$fatSectorId] ) ) {
+                               $this->error( 'FAT sector requested beyond the end of the DIFAT', self::ERROR_INVALID_FORMAT );
+                       }
+                       $absoluteSectorId = $this->difat[$fatSectorId];
+                       $block = $this->readSector( $absoluteSectorId );
+                       for ( $pos = 0; $pos < strlen( $block ); $pos += 4 ) {
+                               $fat[] = $this->bin2dec( $block, $pos, 4 );
+                       }
+                       $this->fat[$fatSectorId] = $fat;
+               }
+               return $this->fat[$fatSectorId];
+       }
+
+       private function readDirectory() {
+               $dirSectorId = $this->header['first_dir_sector'];
+               $binaryDir = '';
+               $seenSectorIds = [];
+               while ( $dirSectorId !== 0xFFFFFFFE ) {
+                       if ( isset( $seenSectorIds[$dirSectorId] ) ) {
+                               $this->error( 'FAT loop detected', self::ERROR_INVALID_FORMAT );
+                       }
+                       $seenSectorIds[$dirSectorId] = true;
+
+                       $binaryDir .= $this->readSector( $dirSectorId );
+                       $dirSectorId = $this->getNextSectorIdFromFat( $dirSectorId );
+               }
+
+               $struct = [
+                       'name_raw' => 64,
+                       'name_length' => 2,
+                       'object_type' => 1,
+                       'color' => 1,
+                       'sid_left' => 4,
+                       'sid_right' => 4,
+                       'sid_child' => 4,
+                       'clsid' => 16,
+                       'state_bits' => 4,
+                       'create_time_low' => 4,
+                       'create_time_high' => 4,
+                       'modify_time_low' => 4,
+                       'modify_time_high' => 4,
+                       'first_sector' => 4,
+                       'size_low' => 4,
+                       'size_high' => 4,
+               ];
+               $entryLength = array_sum( $struct );
+
+               for ( $pos = 0; $pos < strlen( $binaryDir ); $pos += $entryLength ) {
+                       $entry = $this->unpack( $binaryDir, $pos, $struct );
+
+                       // According to [MS-CFB] size_high may contain garbage due to a
+                       // bug in a writer, it's best to pretend it is zero
+                       $entry['size_high'] = 0;
+
+                       $type = $entry['object_type'];
+                       if ( $type == self::TYPE_UNALLOCATED ) {
+                               continue;
+                       }
+
+                       $name = iconv( 'UTF-16', 'UTF-8', substr( $entry['name_raw'], 0, $entry['name_length'] - 2 ) );
+
+                       $clsid = $this->decodeClsid( $entry['clsid'] );
+                       if ( $type == self::TYPE_ROOT && isset( self::$mimesByClsid[$clsid] ) ) {
+                               $this->mimeFromClsid = self::$mimesByClsid[$clsid];
+                       }
+
+                       if ( $name === 'Workbook' ) {
+                               $this->mime = 'application/vnd.ms-excel';
+                       } elseif ( $name === 'WordDocument' ) {
+                               $this->mime = 'application/msword';
+                       } elseif ( $name === 'PowerPoint Document' ) {
+                               $this->mime = 'application/vnd.ms-powerpoint';
+                       }
+               }
+       }
+}
index b93084a..a2075dc 100644 (file)
@@ -653,7 +653,6 @@ EOT;
                                "Seeking $tailLength bytes from EOF failed in " . __METHOD__ );
                }
                $tail = $tailLength ? fread( $f, $tailLength ) : '';
-               fclose( $f );
 
                $this->logger->info( __METHOD__ .
                        ": analyzing head and tail of $file for magic numbers.\n" );
@@ -724,6 +723,12 @@ EOT;
                        return "image/webp";
                }
 
+               /* Look for MS Compound Binary (OLE) files */
+               if ( strncmp( $head, "\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1", 8 ) == 0 ) {
+                       $this->logger->info( __METHOD__ . ': recognized MS CFB (OLE) file' );
+                       return $this->detectMicrosoftBinaryType( $f );
+               }
+
                /**
                 * Look for PHP.  Check for this before HTML/XML...  Warning: this is a
                 * heuristic, and won't match a file with a lot of non-PHP before.  It
@@ -797,9 +802,16 @@ EOT;
                }
 
                // Check for ZIP variants (before getimagesize)
-               if ( strpos( $tail, "PK\x05\x06" ) !== false ) {
-                       $this->logger->info( __METHOD__ . ": ZIP header present in $file\n" );
-                       return $this->detectZipType( $head, $tail, $ext );
+               $eocdrPos = strpos( $tail, "PK\x05\x06" );
+               if ( $eocdrPos !== false ) {
+                       $this->logger->info( __METHOD__ . ": ZIP signature present in $file\n" );
+                       // Check if it really is a ZIP file, make sure the EOCDR is at the end (T40432)
+                       $commentLength = unpack( "n", $tail, $eocdrPos + 20 )[0];
+                       if ( $eocdrPos + 22 + $commentLength !== strlen( $tail ) ) {
+                               $this->logger->info( __METHOD__ . ": ZIP EOCDR not at end. Not a ZIP file." );
+                       } else {
+                               return $this->detectZipType( $head, $tail, $ext );
+                       }
                }
 
                // Check for STL (3D) files
@@ -945,6 +957,26 @@ EOT;
                return $mime;
        }
 
+       /**
+        * Detect the type of a Microsoft Compound Binary a.k.a. OLE file.
+        * These are old style pre-ODF files such as .doc and .xls
+        *
+        * @param resource $handle An opened seekable file handle
+        * @return string The detected MIME type
+        */
+       function detectMicrosoftBinaryType( $handle ) {
+               $info = MSCompoundFileReader::readHandle( $handle );
+               if ( !$info['valid'] ) {
+                       $this->logger->info( __METHOD__ . ': invalid file format' );
+                       return 'unknown/unknown';
+               }
+               if ( !$info['mime'] ) {
+                       $this->logger->info( __METHOD__ . ": unrecognised document subtype" );
+                       return 'unknown/unknown';
+               }
+               return $info['mime'];
+       }
+
        /**
         * Internal MIME type detection. Detection is done using the fileinfo
         * extension if it is available. It can be overriden by callback, which could
index 5f04e39..0935d5a 100644 (file)
@@ -816,7 +816,7 @@ __INDEXATTR__;
                        . ' WHERE relkind = \'r\''
                        . ' AND nspname = ' . $this->addQuotes( $this->getCoreSchema() )
                        . ' AND relname = ' . $this->addQuotes( $oldName )
-                       . ' AND adsrc LIKE \'nextval(%\'',
+                       . ' AND pg_get_expr(adbin, adrelid) LIKE \'nextval(%\'',
                        $fname
                );
                $row = $this->fetchObject( $res );
@@ -851,10 +851,10 @@ __INDEXATTR__;
                        }
 
                        $oid = $this->fetchObject( $res )->oid;
-                       $res = $this->query( 'SELECT adsrc FROM pg_attribute a'
+                       $res = $this->query( 'SELECT pg_get_expr(adbin, adrelid) AS adsrc FROM pg_attribute a'
                                . ' JOIN pg_attrdef d ON (a.attrelid=d.adrelid and a.attnum=d.adnum)'
                                . " WHERE a.attrelid = $oid"
-                               . ' AND adsrc LIKE \'nextval(%\'',
+                               . ' AND pg_get_expr(adbin, adrelid) LIKE \'nextval(%\'',
                                $fname
                        );
                        $row = $this->fetchObject( $res );
index 53c3d33..7596a3b 100644 (file)
@@ -17,7 +17,7 @@ class PostgresField implements Field {
 SELECT
  attnotnull, attlen, conname AS conname,
  atthasdef,
- adsrc,
pg_get_expr(adbin, adrelid) AS adsrc,
  COALESCE(condeferred, 'f') AS deferred,
  COALESCE(condeferrable, 'f') AS deferrable,
  CASE WHEN typname = 'int2' THEN 'smallint'
index e3bd542..88d9fd3 100644 (file)
@@ -433,9 +433,11 @@ class ExtensionRegistry {
         * @since 1.33
         */
        public function setAttributeForTest( $name, array $value ) {
+               // @codeCoverageIgnoreStart
                if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
                        throw new RuntimeException( __METHOD__ . ' can only be used in tests' );
                }
+               // @codeCoverageIgnoreEnd
                if ( isset( $this->testAttributes[$name] ) ) {
                        throw new Exception( "The attribute '$name' has already been overridden" );
                }
index 2afc548..d504611 100644 (file)
@@ -553,4 +553,15 @@ class Command {
 
                return new Result( $retval, $buffers[1], $buffers[2] );
        }
+
+       /**
+        * Returns the final command line before environment/limiting, etc are applied.
+        * Use string conversion only for debugging, don't try to pass this to
+        * some other execution medium.
+        *
+        * @return string
+        */
+       public function __toString() {
+               return "#Command: {$this->command}";
+       }
 }
index a579b69..d9e8e99 100644 (file)
@@ -296,7 +296,7 @@ abstract class UploadBase {
         */
        public function getRealPath( $srcPath ) {
                $repo = RepoGroup::singleton()->getLocalRepo();
-               if ( $repo->isVirtualUrl( $srcPath ) ) {
+               if ( FileRepo::isVirtualUrl( $srcPath ) ) {
                        /** @todo Just make uploads work with storage paths UploadFromStash
                         *  loads files via virtual URLs.
                         */
index 8ddbd04..babbe3a 100644 (file)
@@ -599,7 +599,7 @@ class UploadStashFile extends UnregisteredLocalFile {
                $this->fileKey = $key;
 
                // resolve mwrepo:// urls
-               if ( $repo->isVirtualUrl( $path ) ) {
+               if ( FileRepo::isVirtualUrl( $path ) ) {
                        $path = $repo->resolveVirtualUrl( $path );
                } else {
                        // check if path appears to be sane, no parent traversals,
index 46f1aaa..e7846f4 100644 (file)
@@ -228,7 +228,9 @@ class ZipDirectoryReader {
                $this->eocdr['EOCDR size'] = $structSize + $this->eocdr['file comment length'];
 
                if ( $structSize + $this->eocdr['file comment length'] != strlen( $block ) - $sigPos ) {
-                       $this->error( 'zip-bad', 'trailing bytes after the end of the file comment' );
+                       // T40432: MS binary documents frequently embed ZIP files
+                       $this->error( 'zip-wrong-format', 'there is a ZIP signature but it is not at ' .
+                               'the end of the file. It could be an OLE file with a ZIP file embedded.' );
                }
                if ( $this->eocdr['disk'] !== 0
                        || $this->eocdr['CD start disk'] !== 0
index bf3321c..e265d17 100644 (file)
        "pageswithprop-reverse": "Сартаваць у адваротным парадку",
        "pageswithprop-sortbyvalue": "Сартаваць паводле значэньня ўласьцівасьці",
        "pageswithprop-submit": "Паказаць",
-       "pageswithprop-prophidden-long": "доўгае тэкставае значэньне ўласьцівасьці схавана ($1)",
-       "pageswithprop-prophidden-binary": "двайковае значэньне ўласьцівасьці схавана ($1)",
+       "pageswithprop-prophidden-long": "доўгае тэкставае значэньне ўласьцівасьці схаванае ($1)",
+       "pageswithprop-prophidden-binary": "двайковае значэньне ўласьцівасьці схаванае ($1)",
        "doubleredirects": "Двайныя перанакіраваньні",
        "doubleredirectstext": "На гэтай старонцы пададзены сьпіс перанакіраваньняў на іншыя перанакіраваньні. Кожны радок утрымлівае спасылкі на першае і другое перанакіраваньне, а таксама мэтавую старонку другога перанакіраваньня, якая звычайна зьяўляецца «сапраўднай» мэтавай старонкай, куды павіннае спасылацца першае перанакіраваньне.\n<del>Закрэсьленыя</del> элемэнты былі выпраўленыя.",
        "double-redirect-fixed-move": "[[$1]] была перанесеная.\nСтаронка аўтаматычна абноўленая і цяпер перанакіроўвае на [[$2]].",
index 0db509d..613f5c9 100644 (file)
        "pager-older-n": "{{PLURAL:$1|по-стара 1|по-стари $1}}",
        "suppress": "Подтискане",
        "querypage-disabled": "Тази специална страница е изключена, защото затруднява производителността на уикито.",
-       "apihelp": "Помощ за API",
-       "apihelp-no-such-module": "Модул \"$1\" не беше намерен.",
+       "apihelp": "Помощ за приложението",
+       "apihelp-no-such-module": "Модул „$1“ не беше намерен.",
        "apisandbox": "Пясъчник за API",
        "apisandbox-submit": "Направи запитване",
        "apisandbox-reset": "Изчистване",
index 9515e2b..d94f48b 100644 (file)
        "protect_change": "آلإشت کونين",
        "unprotect": "هناڌاری زاْ بٱلٛگاْ",
        "newpage": "صفحه تازه",
-       "talkpagelinktext": "چٱک چناٛ",
+       "talkpagelinktext": "چٱک چنٱ",
        "specialpage": "صفحه مخصوص",
-       "personaltools": "ابزارهای شخصی",
+       "personaltools": "ٱڤزارٱل شٱسقی",
        "talk": "گٱپ",
-       "views": "مشاهدات",
-       "toolbox": "ٱۋزارا",
+       "views": "دیڌنی یٱل",
+       "toolbox": "ٱۋزارٱل",
        "tool-link-userrights": "آلشڌ بنکۊیٱل {{GENDER:$1|مؽنتور}}",
        "tool-link-userrights-readonly": "نماونیڌن بنکۊیٱلاٛ {{GENDER:$1|مؽنتور}}",
        "tool-link-emailuser": "کل کرڌن ناماٛ ڤ {{GENDER:$1|مؽنتور}}",
        "viewhelppage": "دیدن صفحه کمک",
        "categorypage": "دیدن صفحه طبقه بندی",
        "viewtalkpage": "دیدن بحث ها",
-       "otherlanguages": "درزباÙ\86Ù\87اÛ\8c Ø¯Û\8cگر",
-       "redirectedfrom": "(تصحیح مجدداز$1)",
+       "otherlanguages": "Ù\85Û\8cÙ\9bÙ\86 Ø²Ú¤Ù\88Ù\86ا Ø¯Û\8cÙ±",
+       "redirectedfrom": "(ڤاگٱردۊنی سی $1)",
        "redirectpagesub": "صفحه تصحیح وهدایت مجدد",
        "redirectto": "ڤاگردۈنی سی:",
-       "lastmodifiedat": "اÛ\8c Ø¨Ù\84Ú¯Ù± ØªØ§Ø²Ø§Ù\9bÛ\8cÛ\8cا Ù\85اÙ\9bÙ\86 $1 Ù\88 Ù\85اÙ\9bÙ\86 $2 Û\8bÛ\8cراÛ\8cشد Û\8bابÛ\8cاÙ\9b.",
+       "lastmodifiedat": "اÛ\8c Ø¨Ù±Ù\84Ú¯Ù± ØªØ§Ø²Ø§Ù\9bÛ\8cÛ\8cا Ù\85اÙ\9bÙ\86 $1 Ù\88 Ù\85Û\8cÙ\9bÙ\86 $2 Ø¢Ù\84شدکارÛ\8c Ú¤Ø§Ø¨Û\8cÚ\8cاÙ\92.",
        "viewcount": "این صفحه قابل دسترسی شده است {{PLURAL:$1|once|$1 times}}.",
        "protectedpage": "بٱلگاْ پٱر و پیم ڤابیڌاْ",
        "jumpto": "پراٛستن سی:",
-       "jumptonavigation": "راندن یا هدایت کردن",
-       "jumptosearch": "جستن",
+       "jumptonavigation": "ناڤجۊری",
+       "jumptosearch": "جوستن",
        "view-pool-error": "مونٱسفاناٛ سرڤرٱل ایساْ دیلٛ ڤارٱزافاْ هؽڌن\nبورفرٱی زاْ مؽنتورٱل هنؽ تٱقلا اْکونن کاْ ای بٱلٛگاْ ناْ ساٛل کونن.\nلوتفٱن نهاتٱر زاْ تٱقلا دوکرت سی ساٛل کرڌن ای بٱلٛگاْ قٱلیلؽ دٱسنیٱ کونین",
        "generic-pool-error": "موتٱسفاْناٛ سرڤرٱل ایساْ دوچار ڤارٱزافی آڤیڌناْ.\nبورفرٱئی زاْ مؽنتوروݩ هنؽ تٱقلا اْکونن کاْ  ای بٱلٛگاْ ساٛل کونن.\nلوتفٱن نهاتر زاْ تقلادوکرت سی ساٛل کرڌن ای بٱلٛگاْ قٱلیلؽ دٱس نیٱڌارین",
        "pool-timeout": "تٱ هٱرت تؽڤرٱئی سی قولف",
        "pool-errorunknown": "خطا نادیار",
        "pool-servererror": "سرڤیس باٛنٱتگر کۊگٱ ڤ دٱسرٱس نؽڌا",
        "poolcounter-usage-error": "خٱتای اْسفاْڌاْ:$1",
-       "aboutsite": "راجوۋ باٛ {{SITENAME}}",
-       "aboutpage": "Project:راجڤ ب",
+       "aboutsite": "راجوڤ ب {{SITENAME}}",
+       "aboutpage": "Project:راجوڤ ب",
        "copyright": "محتوا باای شماره قابل دسترسیه\n $1.",
        "copyrightpage": "{{ns:project}}:کپی رایت",
-       "currentevents": "اتÙ\81اÙ\82ات Ø¬Ø§Ø±Û\8c",
-       "currentevents-url": "Project:اتÙ\81اÙ\82ات Ø¬Ø§Ø±Û\8c",
-       "disclaimers": "تی پۊشنیڌنیا",
-       "disclaimerpage": "Project: تیە پوشنیدٙئنئ کولی",
-       "edithelp": "کمک برای اصلاح",
+       "currentevents": "رÙ\88Ø® Ú¤Ù±Ù\86دٱÙ\84 ØªØ§Ø²Ø§Ù\92",
+       "currentevents-url": "Project:رÙ\88Ø® Ú¤Ù±Ù\86دٱÙ\84 ØªØ§Ø²Ø§Ù\92",
+       "disclaimers": "تی پۊشنیڌنیٱل",
+       "disclaimerpage": "Project: تی پۊشنیڌنی کولی",
+       "edithelp": "هومیاری سی آلشدکاری",
        "helppage-top-gethelp": "هومیاري",
        "mainpage": "سرتال",
-       "mainpage-description": "صÙ\81Ø­Ù\87 Ø§ØµÙ\84Û\8c",
+       "mainpage-description": "سرتاÙ\84",
        "policy-url": "Project:خط مشی",
-       "portal": "درگاÙ\87 Ú©Ø§Ø±Ø¨Ø±Ø§ن",
-       "portal-url": "Project:درگاÙ\87 Ú©Ø§Ø±Ø¨Ø±Ø§ن",
-       "privacy": "رأدیارکونی رازڤادٙاری",
+       "portal": "سرآسÛ\8aÙ\86اÙ\92 Ú©Ø§Ø±Û\8cارÛ\8aن",
+       "portal-url": "Project:سرآسÛ\8aÙ\86اÙ\92 Ú©Ø§Ø±Û\8cارÛ\8aن",
+       "privacy": "رٱدیارکونی رازڤادٙاری",
        "privacypage": "Project:رٱدیارکونی رازڤاڌاری",
        "badaccess": "خطا :اجازه بگیر",
        "badaccess-group0": "ایسا اجازه انجام کاری که خواستین را ندارین",
        "versionrequiredtext": "یه نسخه زه ویکی مدیا($1) نیازمند ه به استفاده زه ای صفحه\nبوین :[[Special:Version|version page]].",
        "ok": "خووه",
        "pagetitle-view-mainpage": "سرصفحه",
-       "retrievedfrom": "دÙ\88ڤارتئ Ø¬Ù\88Ù\99ری ز \"$1\"",
+       "retrievedfrom": "دÙ\88ڤارتاÙ\92 Ø¬Û\8aری ز \"$1\"",
        "youhavenewmessages": "پیام تاره داری $1 ($2).",
        "youhavenewmessagesfromusers": "اؽسا زاْ{{PLURAL:$3|یٱ مؽنتور داٛهر|$3  مؽنتور}} $1 دارین ($2).",
        "youhavenewmessagesmanyusers": "اؽسا زاْ بورؽ مؽنتور $1 دارین($2).",
        "newmessageslinkplural": "\n{{PLURAL:$1|پاٛخوم نۊ|999=پاٛخومٱل نۊ}}",
        "newmessagesdifflinkplural": "$1 {{PLURAL:$1|آلشڌ|آلشڌا}}",
        "youhavenewmessagesmulti": "ایسا پیام تازه دارین منه\n$1",
-       "editsection": "ۋیرایشد کردن",
+       "editsection": "آلشدکاری کردن",
        "editold": "اصلاح",
        "viewsourceold": "دیدن منبع",
-       "editlink": "ڤیرایئشت",
-       "viewsourcelink": "سئیل سرچشمه کنین",
-       "editsectionhint": "ۋیرایشد بٱرجا: $1",
-       "toc": "محتواها",
+       "editlink": "آلشدکاری کردن",
+       "viewsourcelink": "سئیل سرچشماْ کونین",
+       "editsectionhint": "آلشدکاری بٱرجا: $1",
+       "toc": "مینۊناْیٱل",
        "showtoc": "نمایش",
        "hidetoc": "قایم",
        "collapsible-collapse": "جأم كردن",
        "feed-invalid": "اشتراک  زه راه  تایپ باطله",
        "feed-unavailable": "خوراکٱل هوڤال خوݩ ڤاْ دٱسرٱس نؽڌا",
        "site-rss-feed": "خبرخو RSS سی $1",
-       "site-atom-feed": "حأڤال خوٙنئ Atom سی $1",
+       "site-atom-feed": "هٱڤال خۊنی Atom سی $1",
        "page-rss-feed": "خبرخو RSS سی «$1»",
-       "page-atom-feed": "هأڤال خۈن Atom سي $1",
-       "red-link-title": "$1 (Ú\86Ù\88Ù\86Ù\88 Ø¨Ù\84گاÙ\9bیی نیڌس)",
+       "page-atom-feed": "هٱڤال خۊن Atom سی $1",
+       "red-link-title": "$1 (Ú\86Ù\88Ù\86Ù\88 Ø¨Ù\84گاÙ\92یی نیڌس)",
        "sort-descending": "ڤدین یٱک کٱم آڤیڌن",
-       "nstab-main": "بÙ\84Ú¯Ù\87",
+       "nstab-main": "بٱÙ\84Ú¯Ù±",
        "nstab-user": "صفحه کاربر",
        "nstab-media": "بلگأ ڤارسگأري",
-       "nstab-special": "بألگه ڤیجه",
+       "nstab-special": "بٱلگاْ ڤیجٱ",
        "nstab-project": "صفحه پروژه",
-       "nstab-image": "فایل",
+       "nstab-image": "جانیا",
        "nstab-mediawiki": "پیغوم",
        "nstab-template": "قالب یا الگو",
        "nstab-help": "بألگإ هومیاری",
-       "nstab-category": "دسته",
+       "nstab-category": "دٱسدٱ",
        "mainpage-nstab": "سرتال",
        "nosuchaction": "چونوݩ عملؽ نؽڌآ",
        "nosuchactiontext": "عمل دزاْ آڤیڌاْ ڤاْ تیرنشون مؽنتوری بؽ اْتڤار هؽڌآ\nمومکن هؽڌآ تیرنشون مؽنتوری ناْ پٱلارنیڌ ڤامؽ کرڌاْ ڤۊهین یا دینا یٱ پاٛڤٱن بٱی ڌارؽ ناْ گریڌیناْ.\nهٱمچونوݩ مومکن هؽڌآ بٱی ڤ نٱرم ٱفزار ڤ کارگریداْ آڤیڌاْ در{{SITENAME}} ڤیڌاْ ڤۊهاْ",
        "title-invalid-talk-namespace": "اوڌڤان بٱلٛگاْ خاساْ ڤیڌا ڤاْ بٱلٛگاْ بٱئسؽ کاْ نؽڌآ اْرجا اْکوناْ",
        "title-invalid-characters": "اوڌڤان بٱلٛگاْ خاساْ آڤیڌاْ هؽلڤیڌاْ ناموجاز داراْ$1",
        "title-invalid-relative": "اوڌڤان دارای دزاٛئی هؽڌآ.اوڌڤانٱل کاْ دزاٛئی نسمی(چی /.یا/...) ناموجاز هؽڌن چیناکاْ ڤا موڌیگر مؽنتورٱل قاڤل دٱسرٱسی نؽڌن",
-       "viewsource": "مشاهده منبع",
+       "viewsource": "دیئن سرچشمٱ",
        "actionthrottled": "نها کار اؽسا گریداٛ آڤیڌ",
        "actionthrottledtext": "ڤ سی نهاگری زاْ ؤولٱ ڤیڌن چۊلکاری،اْجازاٛ نارین کاْ چونوݩ کارؽ ناْ ڤؽشڌر زاْ چٱن کرٱت ڤ یٱ رات کول ٱنجوم ڤڌین\nلوتفٱن دیناتٱر زاْ چٱن دٱیخاْ سٱرزنۊ پلرڌ کونین",
        "protectedpagetext": "ای بٱلٛگاْ سی نهاگری راْ آلشڌکاری یا جومجیل دهرؽ پلڌاری آڤیڌاْ",
        "accountcreated": "هساڤ راسد ڤابي",
        "createaccount-title": "هساڤ سي {{SITENAME}} راسد ڤابي",
        "loginlanguagelabel": "زۈن:$1",
-       "pt-login": "ڤامین اوڤیڌن",
+       "pt-login": "ڤامین ٱڤوڌن",
        "pt-login-button": "ڤامین اوڤیڌن",
-       "pt-createaccount": "راسد کردن هساڤ کارياري",
+       "pt-createaccount": "راسد کردن هساڤ کاریاری",
        "pt-userlogout": "ز سامۈنإ درأڤوڌن",
        "changepassword": "آلشد کردن رازينإ گوڤأرتن",
        "oldpassword": "رازينإ گوڤأرتن ديندایي:",
        "resettokens-watchlist-token": "شناسانٱنڌاٛ خوراک ڤباٛی [[Special:Watchlist|آلشڌ بٱلٛگیٱلؽ کاْ دیناگری اْکونین]] (ٱتم/آراْس‌اْس)",
        "resettokens-done": "دوکرتشناسی شناسانٱنڌاٛیٱل",
        "resettokens-resetbutton": "دوکرتشناسی شناسانٱنڌاٛیٱل دزاْ آڤیڌاْ",
-       "bold_sample": "متن گپ نما",
-       "bold_tip": "متن گپ نما",
-       "italic_sample": "Ù\85تÙ\86 Ø´Ú©Ø³ØªÙ\87",
-       "italic_tip": "Ù\85تÙ\86 Ø´Ú©Ø³ØªÙ\87",
-       "link_sample": "عÙ\86Ù\88اÙ\86 Ù\84Û\8cÙ\86Ú©",
-       "link_tip": "Ù\84Û\8cÙ\86Ú© داخلی",
-       "extlink_sample": "http://www.example.com Ø¹Ù\86Ù\88اÙ\86 Ù\84Û\8cÙ\86Ú©",
-       "extlink_tip": "(به خاطر بسپار http:// prefix)\nلینک خارجی",
-       "headline_sample": "سرخط متن",
-       "headline_tip": "2سرخط یکسان",
-       "nowiki_sample": "متن شکل نداده یافرمت نوابیده را ایچو بنین",
-       "nowiki_tip": "زه فرمت کردن یا شکل دادن ویکی چشم پوشی کن",
-       "image_tip": "فایل محاط وابید",
-       "media_tip": "لینک فایل",
-       "sig_tip": "اÙ\85ضاÛ\8c Ø§Û\8cسا Ù\88 Ø¨Ø±Ú\86سب Ø²Ù\85اÙ\86",
-       "hr_tip": "خط افقی (کم استفاده کنین)",
-       "summary": "خلاصه:",
+       "bold_sample": "Ù\85تÙ\86 Ú¯Ù±Ù¾ Ù\86Ù\85ا",
+       "bold_tip": "Ù\85تÙ\86 Ú¯Ù±Ù¾ Ù\86Ù\85ا",
+       "italic_sample": "Ù\85تÙ\86 Ø§Û\8cتاÙ\84Û\8cÚ©",
+       "italic_tip": "Ù\85تÙ\86 Ø§Û\8cتاÙ\84Û\8cÚ©",
+       "link_sample": "داسÛ\8aÙ\86 Ù\87Ù\88Ù\85پاÙ\9bÛ\8cÚ¤Ù±Ù\86د",
+       "link_tip": "Ù\87Ù\88Ù\85پاÙ\9bÛ\8cÚ¤Ù±Ù\86د داخلی",
+       "extlink_sample": "http://www.example.com Ø¯Ø§Ø³Û\8aÙ\86 Ù\87Ù\88Ù\85پاÙ\9bÛ\8cÚ¤Ù±Ù\86د",
+       "extlink_tip": "(ڤٱن ڤا ڤیرت http:// prefix)\nهومپاٛیڤٱند  خارجی",
+       "headline_sample": "سرخٱت متن",
+       "headline_tip": "ریتراز 2 سرخٱت",
+       "nowiki_sample": "ز ایچو متن بی شیڤات خوتۊناْ ڤارڌ کونین",
+       "nowiki_tip": "ز شیڤات ڤیکی تی پۊشی کو.",
+       "image_tip": "جانیا چارقر گرهڌاْ",
+       "media_tip": "جانیا هومپاٛیڤٱند",
+       "sig_tip": "اÙ\92Ù\85زا Ø§Û\8cسا Ú¤Ø§ Ú¯Ø§ØªØ¯Û\8cساÙ\92",
+       "hr_tip": "خٱت ٱوفوتی (کم ڤٱنین ڤا کار)",
+       "summary": "چکستٱ:",
        "subject": "داسۈن",
        "minoredit": "ای یه اصلاح ریزه-رز",
-       "watchthis": "پیگیری ای صفحه",
-       "savearticle": "صÙ\81Ø­Ù\87 Ø¶Ø¨Ø· Ø¨Ù\88Ù\87",
+       "watchthis": "پاٛگری ای بٱلگاْ",
+       "savearticle": "بٱÙ\84گاÙ\92 Ø§Ù\92Ù\85اÛ\8cاÙ\92 Ú¤Ø§Ø¨Û\8a",
        "savechanges": "کۊکرڌن آلشڌٱل",
        "publishpage": "تیژنیڌن بٱلٛگاْ",
        "publishchanges": "تیژنیڌن آلشڌٱل",
        "savearticle-start": "کۊنیڌن بٱلٛگاْ",
        "preview": "پیش نمایش",
-       "showpreview": "Ù¾Û\8cØ´â\80\8cÙ\86Ù\85اÛ\8cØ´",
-       "showdiff": "نشودادن تغییرات",
+       "showpreview": "Ù\86Ø´Û\8aÙ\86 Ø¯Ø§Ø¦Ù\86 Ù¾Û\8cØ´ Ø³Ø§Ù\9bÛ\8cÙ\84",
+       "showdiff": "نشۊن دائن آلشدا",
        "anoneditwarning": "<strong>زئنار:</strong> شوما هأنی نیوٙمایتە ڤامین. تیرنئشوٙن آی پی شوما سی هأر گاتی کئ آلئشتکاری بأکیت سی کول خألک دیاری می کە. أر <strong>[$1 روئیت ڤامین]</strong> یا <strong>[$2 یئ گئل حئساڤ کاریاری راس بأکیت]</strong>، ڤیرایئشتیا شوما ڤئ نوم کاریاری خوتوٙ دیاری می کە و سی شوما بیتأرە.",
        "summary-preview": "پیش نمایش - خلاصه:",
        "blockedtext": " \"'''دسترسی نام کاربری یا نشانی اینترنتی ایسا بسته وابیده.'''\nای کار توسط $1 انجام شده‌است.\nدلیلی که گده اینه: $2''\n* آغاز قطع دسترسی: $8\n* زمان اتمام ای قطع دسترسی: $6\n* کاربری که قطع دسترسی‌اش در نظر بیده: $7\nایساترین با $1 یا یکی از [[{{MediaWiki:Grouppage-sysop}}|مدیران]] تماس بگیرین و در ای باره صحبت کنین.\nتوجه کنین که ایسا نترین زه امکان «ارسال پست الکترونیکی به ای کاربر» استفاده کنین مگر این که نشانی پست الکترونیکی معتبری در [[Special:Preferences|اولویتهای کاربری]]خود ثبت کرده بوین.\nنشانی IP ایسا $3 و شماره قطع دسترسی ایسا $5 است. لطفاً ای شماره‌ها را در همه کاوشهاتون ذکر کنین.\nایسا ترین با $1 یا یکی دیه زه [[{{MediaWiki:Grouppage-sysop}}|مدیران]] تماس بگیرین، تا در باره ای قطع دسترسی صحبت کنین.\nدقت کنین که سی ارسال پست الکترونیکی در ویکی، وا پست الکترونیکی خود را زه طریق صفحه[[Special:Preferences|تنظیمات]] فعال کرده بوین، و نیز، وا امکان استفاده زه ای ویژگی سی ایساقطع نبوه.\nنشانی اینترنتی الان ایسا $3 است و شماره قطع دسترسی $5 است.\nلطفاً ای شماره را در هر درخواستی که در ای مورد مطرح اکنین ذکر کنین",
        "loginreqtitle": "ڤامإن إڤوڌن لازومإ",
-       "loginreqlink": "ڤامین اوڤیڌن",
+       "loginreqlink": "ڤامین ٱڤوڌن",
        "accmailtitle": "رازينإ گوڤأرتن فرشناڌإ ڤابيڌإ",
        "newarticle": "(تازه)",
        "newarticletext": "ايسا ز دين یأ هومپیڤأندي هڌين کإ نيڌس. سي رأڤأندياري بألگإ شورۈ کونين مإن اي جأڤإ دإڤۈني بنڤيسين(سي دونسدن بیشدر سإیل [$1]کونین).\nأر ايسا سي إشتڤاکاري ايچونين، دوگمإ رأهڌن ڤاپوشد نأ بپۈرنين.",
-       "noarticletext": " ايسإ اي بألگإ نإڤشدإیي نارإ، ايسا تإرين [[Special:Search/{{PAGENAME}}داسۈن اي بألگإ نإ مإن بألگإآ ديأري پی جۈري کونين]] یا [{{fullurl:{{FULLPAGENAME}}|action=edit}} اي بألگإ نأ ڤيرایشد کونين].",
+       "noarticletext": " ایساْ ای بٱلگاْ نڤشداْیی ناراْ، ایسا تاْرین [[Special:Search/{{PAGENAME}}داسۊن ای بٱلگاْ نٱ میٛن بٱلگاْیٱل دیٱری پاٛی جۊری کونین]] یا [{{fullurl:{{FULLPAGENAME}}|action=edit}} ای بٱلگاْ نٱ آلشدکاری کونين].",
        "noarticletext-nopermission": " ايسإ اي بألگإ نإڤشدإیي نارإ، ايسا تإرين [[Special:Search/{{PAGENAME}}داسۈن اي بألگإ نإ مإن بألگإآ ديأري پی جۈري کونين]] یا [{{fullurl:{{FULLPAGENAME}}|action=edit}} اي بألگإ نأ ڤيرایشد کونين].",
        "previewnote": "'''ای فقط یه پیش نمایشه;\nتغییراتی که ایسا دادین هنی ضبط نوابیده!'''",
        "editing": "درحال اصلاح $1",
        "copyrightwarning": "لطفاً دقت کنین که درنظر گریده ابوه که همه شراکتهای ایسا  {{SITENAME}} تحت «$2» منتشر ابون ).\n\n\n(سی دیدن  جزئیات بیشتر به $1 برین\n\nایر نه خوین نوشته‌هاتو بی‌رحمانه اصلاح بوه و به دلخواه ارسال بوه، ایچو نفرستن.<br />\nدرضمن ایسادارین به ایما قول ادین که خودتو یونه نوشتین یا هونه زه یک منبع آزاد با مالکیت عمومی یا مثل هو ورداشتین. '''کارهای دارای کارهای دارای حق کپی رایت را بی‌اجازه نفرستین!'''',",
        "templatesused": "{{PLURAL:$1|چوٙأ|چوٙأیل}} ب کار گرهڌأ ڤابيڌإ مإن اي بألگأ:",
        "templatesusedpreview": "قالڤٱل یا اولگۊیٱل ڤاْ کار رٱئڌاْ مؽن ای نهانماو",
-       "template-protected": "(تحت حمایت)",
-       "template-semiprotected": "(نیمه حمایت وابیده)",
+       "template-protected": "(پٱر و پیم ڤابیڌٱ)",
+       "template-semiprotected": "(نسم نیماْ پٱر و پیم ڤابیڌاْ)",
        "hiddencategories": "اي بلگأ یکي ز أندوما {{PLURAL:$1|1 hidden category|$1 hidden categories}} إ:",
        "nocreatetext": "{{SITENAME}}قابلیت درست کردن صفحات تازه را محدود کرده‌. ترین برگردین و صفحه‌ موجود را اصلاح کنین یا اینکه  [[Special:UserLogin|به سیستم داخل بوین یا حساب کاربری درست کنین]].",
        "permissionserrors": "پٱلاْ:اْجازاْ ڤگرا",
        "viewpagelogs": "نشودادن نمایه ها سی ای صفحه",
        "currentrev": "نسخه جاری",
        "currentrev-asof": "آخرين ڤانيأري جۈر $1",
-       "revisionasof": "اصلاح $1",
+       "revisionasof": "ڤانیٱری چی $1",
        "revision-info": "نوسقإ ڤانيأري ڤابيڌإ جۈر $1 ڤا $2",
-       "previousrevision": "← اصلاح قبلی",
+       "previousrevision": "← ڤانیٱری دیندایی",
        "nextrevision": "نسخه بعدی →",
        "currentrevisionlink": "نسخه جاری",
-       "cur": "فعلی",
+       "cur": "ایسنی",
        "next": "نيایي",
-       "last": "قبلی",
+       "last": "دیندایی",
        "page_first": "اولین",
        "page_last": "آخری",
        "histlegend": "انتخاب متفاوت: علامت بنین رو رادیو جعبه ها زه آن نسخه ها سی مقایسه وامتیاز دادن ویا داخل تکمه های زیر سی مسابقه بوین  .<br />\n'شرح: (فعلی) = تفاوت با نسخه جاری\n(قبلی) = تفاوت با نسخه قبلی، جز = ویرایش جزئی',",
        "mergelog": "سیائاْ ؤریٱک",
        "history-title": "دڤارتإ دیئن ڤيرگار $1",
        "difference-title": "فرخ مإنجقا ڤانإیريا \"$1\"",
-       "lineno": "سطر $1:",
+       "lineno": "خٱت $1:",
        "compareselectedversions": "مقایسه نسخه‌های انتخاب‌ وابیده",
-       "editundo": "Ù\84غÙ\88 Ø§ØµÙ\84اح Ø¢Ø®Ø±",
+       "editundo": "Ù±Ù\86جÙ\88Ù\85Ø´Û\8cÚ¤ Ú©Ø±Ø¯Ù\86",
        "diff-multi-sameuser": "({{PLURAL:$1|یٱ دۊناٛ نوسقاٛ مؽنجخایی|$1 نوسقاٛیٱل مؽنجخایی}} ب دٱسد{{PLURAL:$2|کاریاری ديٱ|$2 کاريارا}} نشۊن دیاری نٱکرداْ)",
-       "searchresults": "Ù\86تÙ\8aجأ Ø¢ Ù¾Û\8c Ø¬Û\88رÙ\8a Ø³Ù\8a",
-       "searchresults-title": "Ù\86تÙ\8aجإ Ø¢ Ù¾Û\8c Ø¬Ù\88رÙ\8a Ø³Ù\8a \"$1\"",
-       "prevn": "قبلی {{PLURAL:$1|$1}}",
-       "nextn": "بعدی {{PLURAL:$1|$1}}",
+       "searchresults": "Ù\86تÙ\8aجاÙ\92Û\8cÙ±Ù\84 Ù¾Ø§Ù\9bÛ\8c Ø¬Û\8aرÛ\8c",
+       "searchresults-title": "Ù\86تÙ\8aجاÙ\92Û\8cÙ±Ù\84 Ù¾Ø§Ù\9bÛ\8c Ø¬Û\8aرÛ\8c Ø³Û\8c \"$1\"",
+       "prevn": "دیندایی {{PLURAL:$1|$1}}",
+       "nextn": "نیایی {{PLURAL:$1|$1}}",
        "nextn-title": "نيایي $1 {{PLURAL:$1|نتيجه|نتيجإآ}}",
-       "shown-title": "Ù\86إشÛ\88Ù\86 Ø¯Ø§Ø¦Ù\86 $1 {{PLURAL:$1|Ù\86تÙ\8aجأ|Ù\86تÙ\8aجإ Ø¢}} Ø³Ù\8a Ù\87ر Ø¨Ø£Ù\84گأ",
-       "viewprevnext": "مشاهده ($1 {{int:pipe-separator}} $2) ($3)",
+       "shown-title": "Ù\86Ø´Û\8aÙ\86 Ø¯Ø§Ø¦Ù\86 $1 {{PLURAL:$1|Ù\86تÛ\8cجاÙ\92\86تÛ\8cجاÙ\92Û\8cÙ±Ù\84}} Ø³Û\8c Ù\87ر Ø¨Ù±Ù\84Ú¯Ù±",
+       "viewprevnext": "دیئن ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-new": "<strong>اي بلگإ نأ مإن \"[[:$1]]\" اي ڤيکي راسد کو!</strong> {{PLURAL:$2|0=|See also the page found with your search.|See also the search results found.}}",
-       "searchprofile-articles": "بÙ\84Ú¯Ù\87 Ø¢ Ù\85Û\8cÙ\86Ù\88Ù\86Ù\87 دار",
-       "searchprofile-images": "ڤارسگرا خلکمند",
-       "searchprofile-everything": "Ù\87Ù\85Ù\87 چی",
-       "searchprofile-advanced": "Ù¾Û\8cشکردÙ\87",
-       "searchprofile-articles-tooltip": "بگرد مئن $1",
-       "searchprofile-images-tooltip": "جانیاانه پی جوری کو",
-       "searchprofile-everything-tooltip": "Ù\87Ù\85Ø¥ Ù\85Ø¥Ù\86Û\88Ù\86Ø¥ Ø¢ Ù\86Ø£ Ù¾Û\8c Ø¬Û\88رÙ\8a Ú©Ù\88(د Ú¤Ø± Ú¯Ø±Ù\87Ú\8cØ¥ Ø¨Ø£Ù\84گإÛ\8cÙ\84 Ú\86Ø£Ú© Ú\86Ù\86Ø£)",
-       "searchprofile-advanced-tooltip": "Ù\86Ù\88Ù\85 Ø¬Ø§Û\8cÙ\84 Ù\86Ù\88Ù\85 Ø¯Ù\8aار Ù\86Ø£ Ø¨Ú¯رد.",
-       "search-result-size": "$1 ({{PLURAL:$2|1 ڤاجه یل|$2 ڤاجه یل}})",
+       "searchprofile-articles": "بٱÙ\84گاÙ\92Û\8cÙ±Ù\84 Ù\85Û\8cÙ\86Û\8aÙ\86اÙ\92 دار",
+       "searchprofile-images": "مۊلتی مدیا",
+       "searchprofile-everything": "Ù\87Ù±Ù\85اÙ\92 چی",
+       "searchprofile-advanced": "Ù¾Û\8cشکردٱ",
+       "searchprofile-articles-tooltip": "بگٱرد میٛن $1",
+       "searchprofile-images-tooltip": "جانیایٱل ناْ پاٛی جۊری کو",
+       "searchprofile-everything-tooltip": "Ù\87Ù±Ù\85اÙ\92 Ù\85Û\8cÙ\86Û\8aÙ\86اÙ\92Û\8cÙ±Ù\84 Ù\86Ù± Ù¾Ø§Ù\9bÛ\8c Ø¬Û\8aرÛ\8c Ú©Ù\88(ز Ú¤Ù±Ø±Ú¯Ø±Ù\87Ú\8cاÙ\92 Ø¨Ù±Ù\84گاÙ\92Û\8cÙ±Ù\84 Ú\86Ù±Ú© Ú\86Ù\86Ù±)",
+       "searchprofile-advanced-tooltip": "Ù\86Ù\88Ù\85 Ø¬Ø§Û\8cÙ±Ù\84 Ù\86Ù\88Ù\85 Ø¯Û\8cار Ù\86Ù± Ø¨Ú¯Ù±رد.",
+       "search-result-size": "$1 ({{PLURAL:$2|1 ڤاجاْیٱل|$2 ڤاجاْیٱل}})",
        "search-result-category-size": "\n{{PLURAL:$1|یٱهومڤٱن|$1 هومڤٱن}} ({{PLURAL:$2|یٱزؽر بنکۊ|$2 زؽر بنکۊ}}، {{PLURAL:$3|یٱ پٱرڤٱناْ|$3 پٱرڤٱناْ}})",
-       "search-redirect": "(ڤاگردۈني ز $1)",
-       "search-section": "(بÙ\87رجا $1)",
+       "search-redirect": "(ڤاگٱردۊنی ز $1)",
+       "search-section": "(بٱرجا $1)",
        "search-suggest": "منزۈرت یو بي:$1",
        "search-interwiki-more": "(بيشدر)",
        "searchall": "همه",
-       "search-showingresults": "{{PLURAL:$4|نتیجه یل<strong>$1</strong> د <strong>$3</strong>|نتیجه یل<strong>$1 - $2</strong د <strong>$3</strong>}}",
-       "search-nonefound": "هیژ نتیجه یی وا پی جست تو یکی نئ.",
+       "search-showingresults": "{{PLURAL:$4|نتیجاْیٱل<strong>$1</strong> ز <strong>$3</strong>|نتیجاْ یٱل<strong>$1 - $2</strong ز <strong>$3</strong>}}",
+       "search-nonefound": "هیژ نتیجاْیی ڤا پاٛی جوست تۊن یکی نیڌ.",
        "powersearch-toggleall": "همأ",
        "powersearch-togglenone": "هيش کوم",
        "preferences": "اولویتها",
        "group-sysop": "سٱردیڤۊنکارۊن",
        "grouppage-bot": "{{ns:project}}:بوتا",
        "grouppage-sysop": "{{ns:project}}:مدیران",
-       "right-writeapi": "سÙ\8a Ù\86ڤشدÙ\86 Ø§Ù\8a Ù¾ Ø¢Û\8c Ú¤Ø£نين ڤاکار",
-       "newuserlogpage": "راسد ڤابیه وا کاریار",
+       "right-writeapi": "سÙ\8a Ù\86ڤشدÙ\86 Ø§Ù\92Û\8c Ù¾Û\8c Ø¢Û\8c Ú¤Ù±نين ڤاکار",
+       "newuserlogpage": "راسد ڤابیاْ ڤا کاریار",
        "rightslog": "نمایه حقوق کاربر",
        "action-edit": "ای بلگٱ نٱ ۋیرایشد کو",
        "action-createaccount": "ڤاکل ای هساْڤ مؽنتوری",
        "nchanges": "$1 {{PLURAL:$1|تغییر|تغییرات}}",
        "enhancedrc-history": "ڤیرگار",
-       "recentchanges": "تغÛ\8cÛ\8cرات Ø§Ø®Û\8cر",
-       "recentchanges-legend": "گزينإ آ آلشدا ايسإني",
+       "recentchanges": "Ø¢Ù\84شدکارÛ\8cا Ø§Û\8cسÙ\86Û\8c",
+       "recentchanges-legend": "گوزیناْیٱل آلشدکاریٱل ایسنی",
        "recentchanges-summary": "دو بیشتر آلشدا تازباو نه د ویکی نه د ای بلگه پیگری کو.",
        "recentchanges-feed-description": "ردیابی آخرین تغییرات  ویکی در ای خورد",
-       "recentchanges-label-newpage": "ای ويرايشت يه بلگه تازه راس كرده",
-       "recentchanges-label-minor": "Û\8cÙ\88 Û\8cÙ\87 Ù\88Ù\8aراÙ\8aشت Ú©Ù\88Ú\86Ù\8aرÙ\87",
-       "recentchanges-label-bot": "اي ڤيرایشد نأ یأ بوت أنجوم داڌإ",
-       "recentchanges-label-unpatrolled": "ای ويرايشت هنی تيه واداشت نوابيه",
-       "recentchanges-label-plusminus": "أندازإ بألگأ ب شومار اي بایتا آلشد کردإ.",
-       "recentchanges-legend-heading": "<strong>Ù\85Û\8cراث:</strong>",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Ù\87Ù±Ú\86Ù\88Ù\86Ù\88Ý© Ú¤Ø§Ù\92[[Special:NewPages|Ù\81اÙ\9bئرست بٱلٛگیٱل نۊ]] ساٛل ؤوٱنین)",
+       "recentchanges-label-newpage": "ای آلشدکای یٱ بٱلگاْ تازاْ راسد کرداْ",
+       "recentchanges-label-minor": "Û\8cÙ\88 Û\8cÙ± Ú¤Û\8cراÛ\8cشد Ú©Û\8aÚ\86Û\8cراÙ\92",
+       "recentchanges-label-bot": "ای ڤیرایشتاْ نٱ یٱ بوت ٱنجوم دائاْ",
+       "recentchanges-label-unpatrolled": "ای آلشدکاری هٱنی تیاْڤاڌاشت نٱڤابیڌاْ",
+       "recentchanges-label-plusminus": "ٱندازاْ بٱلگاْ ب شومار ای بایتٱل آلشد کرداْ.",
+       "recentchanges-legend-heading": "<strong>Ù\85Û\8cراس:</strong>",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (Ù\87Ù±Ú\86Ù\88Ù\86Ù\88Ý© Ú¤Ø§Ù\92[[Special:NewPages|Ù\86Ù\88Ù\85Ú¯Ù± بٱلٛگیٱل نۊ]] ساٛل ؤوٱنین)",
        "rcnotefrom": "ۋازیر {{PLURAL:$5|ۋیرایشد|ۋیرایشدا}}ز ۋیرگار strong>$3, $4</strong> تا ۋیرگار <strong>$1</strong>  دیاری اٛکونن .",
-       "rclistfrom": "نشودادن تغییرات تازه با شروع زه $3 $2",
-       "rcshowhideminor": "اصÙ\84احات Ú©Ù\88Ú\86Û\8cÚ© $1",
+       "rclistfrom": "دیار کردن آلشدکاریٱل ز $3 $2",
+       "rcshowhideminor": "Ø¢Ù\84شدکارÛ\8c Ú©Û\8aÚ\86Û\8cر $1",
        "rcshowhideminor-show": "نشون دائن",
        "rcshowhideminor-hide": "قام کردن",
-       "rcshowhidebots": "$1 Ø±Ø¨Ø§Øªâ\80\8cÙ\87ا Û\8cا Ø¨Ù\88تÙ\87ا",
-       "rcshowhidebots-show": "نشون دائن",
+       "rcshowhidebots": "$1 Ø¨Ù\88تا",
+       "rcshowhidebots-show": "نشۊن دائن",
        "rcshowhidebots-hide": "قام کردن",
-       "rcshowhideliu": "$1 کاریارا ثوت نام کرده",
+       "rcshowhideliu": "$1 کاریارٱل سٱڤت نام کرداْ",
        "rcshowhideliu-show": "دیار کردن",
-       "rcshowhideliu-hide": "Ù\82اÙ\85 Ú©Ø¦Ø±Ø¯Ø¦ن",
-       "rcshowhideanons": "$1 کاربران داخل نوابیده",
+       "rcshowhideliu-hide": "Ù\82اÙ\85 Ú©Ø±Ø¯ن",
+       "rcshowhideanons": "$1 کاریارٱل ڤامیٛن نٱڤوڌاْ",
        "rcshowhideanons-show": "نشون دائن",
-       "rcshowhideanons-hide": "Ù\82اÙ\85 Ú©Ø¦Ø±Ø¯Ø¦ن",
+       "rcshowhideanons-hide": "Ù\82اÙ\85 Ú©Ø±Ø¯ن",
        "rcshowhidepatr": "$1 اصلاحات پاسداری شده",
-       "rcshowhidemine": "$1 Ø§ØµÙ\84احات مو",
+       "rcshowhidemine": "$1 Ø¢Ù\84شدکارÛ\8cا مو",
        "rcshowhidemine-show": "نشون دائن",
-       "rcshowhidemine-hide": "Ù\82اÙ\85 Ú©Ø¦Ø±Ø¯Ø¦ن",
-       "rclinks": "نماونیڌن دینائی $1 آلشڌ مؽن $2 رۊز ٱخیر",
-       "diff": "تفاوت",
-       "hist": "گزارش",
+       "rcshowhidemine-hide": "Ù\82اÙ\85 Ú©Ø±Ø¯ن",
+       "rclinks": "دیاری کردن دینائی $1 آلشڌ مؽن $2 رۊز دیندایی",
+       "diff": "فٱرخ",
+       "hist": "گوزارشت",
        "hide": "قایم شدن",
        "show": "نشودادن",
-       "minoreditletter": "رز",
-       "newpageletter": "تا",
-       "boteditletter": "ر",
-       "rc-change-size-new": "$1 {{PLURAL:$1|بایت|بایتا}} بئ نیا آلئشتکاری",
-       "recentchangeslinked": "تغÛ\8cÛ\8cرات Ù\85رتبط",
+       "minoreditletter": "م",
+       "newpageletter": "ن",
+       "boteditletter": "ب",
+       "rc-change-size-new": "$1 {{PLURAL:$1|بایت|بایتا}} نیا آلشدکاری",
+       "recentchangeslinked": "Ø¢Ù\84شدکارÛ\8cÙ±Ù\84 ØªØ§Ù\92 Û\8cÙ±Ú©",
        "recentchangeslinked-feed": "تغییرات مرتبط",
-       "recentchangeslinked-toolbox": "تغÛ\8cÛ\8cرات Ù\85رتبط",
-       "recentchangeslinked-title": "تغÛ\8cÛ\8cرÙ\87اÛ\8c Ù\85رتبط Ø¨Ø§ $1",
+       "recentchangeslinked-toolbox": "Ø¢Ù\84شدکارÛ\8cÙ±Ù\84 ØªØ§Ù\92 Û\8cÙ±Ú©",
+       "recentchangeslinked-title": "Ø¢Ù\84شدکارÛ\8cÙ±Ù\84 ØªØ§Ù\9b Û\8cÚ©Û\8c Ø³Û\8c $1",
        "recentchangeslinked-summary": "نوم یٱ بٱلٛگاْ ناْ ڤامؽ کونین تا آلشڌکاری بٱلٛگیٱل کاْ ڤاْ هومؽنڌارکرڌیناْ یا زاْ هو مؽنڌاری گریڌین ناْ ڤڤینین(سی نیٱشڌن هوم ڤٱنوناْ یٱ بنکۊ چونوݩ چی ائی ناْ ڤزٱنین:نوم بونکۊ). \nآلشڌکاریٱل بلٛگیٱلؽ کاْ مؽن[[Special:Watchlist|فاٛئرست دیناگریٱل اؽسا]] هؽڌن <strong>ؤٱرڌار</strong> نمای اْڤۊهاْ",
-       "recentchangeslinked-page": "نوم بألگە:",
-       "recentchangeslinked-to": "Ø¢Ù\84شتÛ\8cاÛ\8cÛ\8c Ú©Ù\87 Ø¯ Ø¨Ù\84Ú¯Ù\87 Û\8cا Ù\87Ù\88Ù\85 Ù¾Û\8cÙ\88Ù\86د Ø¨Û\8cÙ\86Ù\87 Ù\88Ù\87 Ø¬Ø§ Ø¨Ù\84Ú¯Ù\87 Ø¯Ø¦Û\8cÙ\87 Ø¨Û\8cÙ\87 Ù\86Ø´Ù\88 Ø¨Û\8cÙ\87",
-       "upload": "آپÙ\84Ù\88د Ù\81اÛ\8cÙ\84",
+       "recentchangeslinked-page": "نوم بٱلگاْ:",
+       "recentchangeslinked-to": "Ø¢Ù\84شدکارÛ\8cÙ±Ù\84Û\8c Ú©Ø§Ù\92 Ù\85Û\8cÙ\9bÙ\86 Ø¨Ù±Ù\84گاÙ\92Û\8cÙ±Ù\84 Ù\87Ù\88Ù\85پاÙ\9bÛ\8cÚ¤Ù±Ù\86د Ø¨Û\8cÙ\86اÙ\92 Ø¨ Ø¬Ø§ Ø¨Ù±Ù\84گاÙ\92 Ø¯Ø§Ú\8cاÙ\92 Ú¤Ø§Ø¨Û\8cÚ\8cاÙ\92 Ø¯Û\8cارÛ\8cسÛ\8aÙ\86 Ú©Ù\88",
+       "upload": "سÙ\88ڤار Ú©Ø±Ø¯Ù\86 Ø¬Ø§Ù\86Û\8cا",
        "uploadbtn": "آپلود فایل",
        "uploadlogpage": "نمایه آپلود",
-       "filedesc": "چكستأ",
+       "filedesc": "چكستٱ",
        "license": "ماٛن حال و بال لیسانس دار ۋابیاٛن",
        "license-header": "ب حال وبال ليسانس دار ڤابيڌن",
        "imgfile": "جانيا",
        "listfiles": "لیست فایل",
-       "file-anchor-link": "فایل",
-       "filehist": "گزارش ØªØ§Ø±Û\8cØ®Û\8c Ù\81اÛ\8cÙ\84",
-       "filehist-help": "رو تاریخ‌ها کلیک کنید تا نسخه مرتبط را ببینین.",
+       "file-anchor-link": "جانیا",
+       "filehist": "Ú¤Û\8cرگار Ø¬Ø§Ù\86Û\8cا",
+       "filehist-help": "ری ڤیرگار بپۊرنین تا نوسقاْیی کاْ خاین باْنیٱرین",
        "filehist-revert": "لرنیئن",
-       "filehist-current": "جارÛ\8c",
-       "filehist-datetime": "تاریخ/زمان",
-       "filehist-thumb": "عسگ کۈچير وابيه",
-       "filehist-thumbtext": "Ù\83Û\88Ú\86Ù\8aر Ú©Ø±Ø¯Ù\86 Ø³Û\8c Ù\86Ù\88سÙ\82Ø¥ $1",
+       "filehist-current": "تازاÙ\92 Ø¨Ø§Ú¤",
+       "filehist-datetime": "گات/مجال",
+       "filehist-thumb": "ٱسگ بٱن کاْلکی",
+       "filehist-thumbtext": "Ù\83Û\8aÚ\86Û\8cر Ú©Ø±Ø¯Ù\86 Ø³Û\8c Ù\86Ù\88سÙ\82اÙ\92 $1",
        "filehist-nothumb": "نڤیڌن بٱن کلکی",
-       "filehist-user": "کاربر",
-       "filehist-dimensions": "ابعاد",
+       "filehist-user": "کاریار",
+       "filehist-dimensions": "ڤٱرگٱیٱل",
        "filehist-filesize": "اندازه فایل",
-       "filehist-comment": "توضیح",
-       "imagelinks": "به کار گرهڌن جانيا",
-       "linkstoimage": "ذیل الذکر {{PLURAL:$1|لینکهای صفحه|$1 لینک صفحات}} به ای فایل:",
+       "filehist-comment": "ڤیر و باڤٱر",
+       "imagelinks": "ڤا کار ڤٱندن جانیا",
+       "linkstoimage": "پیشٱر گوهڌاْ ڤابیڌاْ {{PLURAL:$1|ڤا کار ڤٱندن بٱلگاْیٱل|$1 ڤا کار ڤٱندن بٱگاْیٱل }} سی ای جانیا:",
        "nolinkstoimage": "ای پٱرڤٱناْ مؽن هیچ بٱلٛیاْ نؽڌا",
        "sharedupload": "ای فایل یک آپلود اشتراکی هده و ممکنه زه طریق  پروژه‌های دیگه  هم قابل دسترسی بوه",
-       "sharedupload-desc-here": "جانيایي کإ مإن $1 گاشا مإن پوروجأیل هإني ب کار گرهڌإ وابيڌإ.\nتۉزي سي [$2 file description page] مإن دإڤۈن دياري کردإ",
+       "sharedupload-desc-here": "جانیایی کاْ میٛن $1 گاشا میٛن پوروجٱیٱل هٱنی ٱم ب کار گرهڌاْ ڤابیڌاْ بۊ.\nتۉزی سی [$2 file description page] میٛن دڤۊن دیاراْ",
        "uploadnewversion-linktext": "آپلود کردن یه نسخه تازه زه ای فایل",
-       "upload-disallowed-here": "اÙ\8aسا Ù\86ترÙ\8aÙ\86 Ø§Ù\8a Ø¬Ø§Ù\86Ù\8aا Ù\86Ø£ Ø² Ù\86Û\89 Ø³Ù\88ڤار Ú©Ù\88Ù\86Ù\8aن",
+       "upload-disallowed-here": "اÙ\8aسا Ù\86اÙ\92ترÛ\8cÙ\86 Ø§Û\8c Ø¬Ø§Ù\86Û\8cا Ù\86Ù± Ø² Ù\86Û\89 Ø³Ù\88ڤار Ú©Ù\88Ù\86Û\8cن",
        "mimesearch": "MIME جستجو رو پایه",
        "listredirects": "لیست تغییر مسیرها",
        "unusedtemplates": "قالبها یا الگوهای استفاده نوابیده",
-       "randompage": "صÙ\81Ø­Ù\87 Ø§ØªÙ\81اÙ\82ی",
+       "randompage": "بٱÙ\84گاÙ\92 Ø´Ø§Ù\85سٱکی",
        "randomredirect": "تغییر مسیر اتفاقی",
        "statistics": "آمار",
        "doubleredirects": "تغییر مسیر دوبله",
        "deadendpages": "صفحات بن بست ولاینحل",
        "protectedpages": "صفحات حفاظت وحمایت وابیده",
        "listusers": "لیست کاربر",
-       "newpages": "صÙ\81حات ØªØ§Ø²Ù\87",
+       "newpages": "بٱÙ\84گاÙ\92Û\8cÙ±Ù\84 Ù\86Û\8f",
        "ancientpages": "کهنه ترین صفحات",
        "move": "جابجا کردن",
        "movethispage": "جابجایی ای صفحه",
        "booksources-search": "پی جۈري",
        "specialloguserlabel": "مؽنتور:",
        "speciallogtitlelabel": "اوڌڤان:",
-       "log": "Ù\86Ù\85اÛ\8cÙ\87 Ù\87ا",
+       "log": "پاÙ\92رستÙ\86Ù\88Ù\85اÙ\92Û\8cÙ±Ù\84",
        "all-logs-page": "گشڌنمائیٱل",
        "allpages": "همه صفحات",
        "nextpage": "صفحه بعدی ($1)",
        "prevpage": "صفحه قبلی($1)",
        "allpagesfrom": "نمایش دادن صفحات با شروع زه:",
        "allarticles": "همه صفحات",
-       "allpagessubmit": "برÙ\88",
+       "allpagessubmit": "رÛ\89",
        "allpagesprefix": "نشو دادن صفحات همراه با پیشوند:",
        "allpages-hide-redirects": "بؽ دیارنیڌن آلشڌتورٱل",
        "categories": "دسته آ",
        "removedwatchtext": "آن صفحه\"[[:$1]]\" جابجا وابیده زه[[Special:لیست پیگیری|لیست پیگیری ایسا]].",
        "watch": "پی‌گیری",
        "watchthispage": "پیگیری ای صفحه",
-       "unwatch": "پيگري نبيڎه",
+       "unwatch": "پاٛیگری نٱڤابیڌاْ",
        "watchlist-details": "{{PLURAL:$1|$1 بٱلٛگاْ|$1 بٱلٛگیٱل}} مؽن لیست دیناگری ایسا,هؽڌا",
        "wlheader-showupdated": "بٱلٛگیٱلؽ کاْ دیناتٱر زاْ آخرین ساٛل اؽسا آلشڌ آڤیڌ ناْ<strong>پورٱنڳ</strong> نماونیڌاْ آڤیڌناْ",
        "wlnote": "ڤاْ لٱم {{PLURAL:$1|آلشڌؽ|<strong>$1</strong> آلشڌؽ}} کاْ ڤاْ {{PLURAL:$2|سات|<strong>$2</strong> سات}} رٱئڌاْ انجوم آڤؽڌ مۉجۊڌ هؽڌا،ؤرگار دوکرٱت ڤینی دینائی: $3، $4",
        "deletecomment": "دلیل:",
        "deleteotherreason": "دیه/دلیل اضافی:",
        "deletereasonotherlist": "دلیل دیه",
-       "rollbacklink": "عقب گرد",
+       "rollbacklink": "ڤورگٱشتن",
        "rollbacklinkcount": "چڤاسإ کردن $1 {{PLURAL:$1|ویرایشت|ویرایشتیا}}",
        "protectlogpage": "نمایه حفاظت وحمایت",
        "protectedarticle": "پٱر و پیم ڤابیڌاٛ \"[[$1]]\"",
        "restriction-edit": "ڤيرایشت کردن",
        "restriction-move": "جا ڤا جا کردن",
        "undeletebtn": "بازیافت",
-       "namespace": "Ù\81ضاÛ\8c Ù\86اÙ\85:",
-       "invert": "انتخاب برعکس بوه",
-       "tooltip-invert": "ز ري اي جأڤأ بپۈرنين و آلشدایي نأ کإ مإنجقا نوم ڤأرگأ إنتخاڤ ڤابيڌن أنجوم داڌإ ڤابيڌنإ قام کونين.",
-       "namespace_association": "Ù\86Ù\88Ù\85 Ø¬Ø§Û\8cÙ\84 Û\8cأکاگرÙ\87Ú\8cØ£",
-       "tooltip-namespace_association": "اي جأڤإ نأ ڤارسي کونين اي جأڤأ د ڤأرگرهڌإ چأک چنإ آ داسۈن نوم ڤأرگأ شريکي و نوم ڤأرگأ گولإڤورچينإ.",
-       "blanknamespace": "(اصلی)",
-       "contributions": "{{GENDER:$1|کاریار}} هومیاریا",
+       "namespace": "Ù\86Ù\88Ù\85 Ø¬Ø§:",
+       "invert": "گولڤورچین کردن بٱرٱسگ بۊ",
+       "tooltip-invert": "ز ری ای جٱڤاْ بپۊرنین و آلشدٱلی ناْ کاْ ماٛنجقا نوم ڤٱرگٱ گولاْڤورچین ڤابیڌن و ٱنجوم داڌاْ ڤابیڌناْ قام کونین.",
+       "namespace_association": "Ù\86Ù\88Ù\85 Ø¬Ø§Û\8cÙ±Ù\84 Û\8cٱکاگرÙ\87Ú\8cاÙ\92",
+       "tooltip-namespace_association": "ای جٱڤاْ نٱ ڤارسی کونین نأ ڤارسي کونين، ای جٱڤاْ  ز ڤٱرگرهڌاْ چٱک چناْ یٱل داسۊن نوم ڤٱرگٱ شریکی و نوم ڤٱرگٱ گولاْڤورچیناْ.",
+       "blanknamespace": "(ٱسلی)",
+       "contributions": "{{GENDER:$1|کاریار}} هومیاریٱل",
        "contributions-title": "هومیاری كاریارآ سی $1",
        "mycontris": "هومياریا",
        "anoncontribs": "هومياریا",
        "sp-contributions-search": "سی هومیاریا پاٛی جۊری ۋابۊ",
        "sp-contributions-username": "نوم ناٛشۊن آی پی یا نوم کاریاری",
        "sp-contributions-submit": "پاٛی جۊری",
-       "whatlinkshere": "لینک های ای صفحه",
+       "whatlinkshere": "کوم هومپاٛیندٱل ایچونن",
        "whatlinkshere-title": "صفحات آن لینک به \"$1\"",
        "whatlinkshere-page": "بألگە",
        "linkshere": "لینک صفحات ذیل الذکر به '''$2''':",
        "ipboptions": "۲ ساعت:2 hours,۱ روز:1 day,۳ روز:3 days,۱ هفته:1 week,۲ هفته:2 weeks,۱ ماه:1 month,۳ ماه:3 months,۶ ماه:6 months,۱ سال:1 year,بی‌نهایت:infinite",
        "ipblocklist": "آدرسهای  آی پی وکاربران بسته وابیدند",
        "infiniteblock": "بؽ تٱ",
-       "blocklink": "بسته بوه !",
+       "blocklink": "نیاگری ڤابۊ !",
        "unblocklink": "باز بوه",
-       "contribslink": "ھأیاری",
+       "contribslink": "هٱیاری",
        "blocklogpage": "نمایه _ بسته‌وابیده‌ها",
        "blocklogentry": "بسته وابید [[$1]] با سپری وابیدن وقت زه $2 $3",
        "reblock-logentry": "ساموکارٱل بورسناْ دٱسرٱسی [[$1]]آلشڌ ڤاْ تٱهاْ بورسناْ دٱسرٱسی مؽن $2 $3",
        "revertmove": "واگردانی",
        "export": "صفحات صادره",
        "allmessages": "پیامهای سیستم",
-       "thumbnail-more": "گپ کردن",
+       "thumbnail-more": "گٱپ Ú©Ø±Ø¯Ù\86",
        "thumbnail_error": "خطا سی درست کردن ناخن دانه: $1",
        "importlogpage": "داخل نمایه کردن",
        "tooltip-pt-userpage": "{{GENDER:|بألگأ کارياريتۈن}} بألگأ",
        "tooltip-pt-preferences": "{{GENDER:|ايسا}} أصل کاريا",
        "tooltip-pt-watchlist": "لیست صفحه‌هایی که ایسا تغییرات هونو  دنبال اکنین",
        "tooltip-pt-mycontris": "یأ نومگأ ز هومياري {{GENDER:|ايسا}}",
-       "tooltip-pt-login": "تÙ\88صÛ\8cÙ\87 Ø§Ø¨Ù\88Ù\87 Ú©Ù\87 Ø¨Ù\87 Ø³Û\8cستÙ\85 Ø¯Ø§Ø®Ù\84 Ø¨Ù\88Û\8cÙ\86 Ø§Ù\85ا Ø§Ø¬Ø¨Ø§Ø±Û\8c Ù\86Ù\87.",
+       "tooltip-pt-login": "اÛ\8cÙ\85ا Ø§Ù\9bÚ¯Û\8aÛ\8cÙ\85 Ú©Ø§Ù\92 Ø±Û\89Û\8cÙ\86 Ú¤Ø§Ù\85Û\8cÙ\86 Ø³Ø§Ù\85Û\8aÙ\86Ú¯Ù±: Ú¤Ø§Ù\92Ù\84Û\8c Ú\86Ù\88Ù\86Ù\88 Ú©Ø§Ø±Û\8c Ø§Ù\9bÚ\98بارÛ\8c Ù\86Û\8c",
        "tooltip-pt-logout": "رهدن زه سیستم",
-       "tooltip-pt-createaccount": "ايسا پشت گرم ڤابيڌينإ کإ یأ هساڤ راسد کونين و بياین ڤامإن. ب هرهال اي کار إژباري نارإ.",
-       "tooltip-ca-talk": "صحبت درباره صفحه محتوا",
-       "tooltip-ca-edit": "ڤيرایشت اي بلگه",
-       "tooltip-ca-addsection": "Ø´Ù\88رÛ\88 Ú©Ø±Ø¯Ù\86 Û\8cÙ\87 Ø¨Ù\87رجا Ø¯Û\8cÙ\87",
-       "tooltip-ca-viewsource": "اÛ\8c ØµÙ\81Ø­Ù\87  ØªØ­Øª Ø­Ù\85اÛ\8cتÙ\87 Ø§Û\8cساترÛ\8cÙ\86 Ù\85Ù\86بعسÙ\87 Ø¨Ù\88Û\8cنین",
-       "tooltip-ca-history": "دوواره ديئن ای بلگه",
+       "tooltip-pt-createaccount": "ايسا پوشت گٱرم ڤابیڌیناْ کاْ یٱ هساڤ راسد کونین و بیائین ڤامین. ڤاْلی چونو کاری اٛژباری نی.",
+       "tooltip-ca-talk": "چٱک چناْ سی مینۊناْ بٱلگٱ",
+       "tooltip-ca-edit": "ای بٱلگاْ نٱ آلشدکاری کو",
+       "tooltip-ca-addsection": "Ø´Ù\88رÛ\8a Ú©Ø±Ø¯Ù\86 Û\8cÙ± Ø¨Ù±Ø±Ø¬Ø§ Ø¯Û\8cÙ±",
+       "tooltip-ca-viewsource": "اÛ\8c Ø¨Ù±Ù\84گاÙ\92 Ù¾Ù±Ø± Ù\88 Ù¾Û\8cÙ\85 Ú¤Ø§Ø¨Û\8cÚ\8cاÙ\92.\nاÛ\8cسا ØªØ§Ù\92رÛ\8cÙ\86 Ø³Ø±Ú\86Ø´Ù\85اÙ\92ساÙ\92 Ø¨Ú¤نین",
+       "tooltip-ca-history": "دڤوارتاْ دیئن ای بٱلگٱ",
        "tooltip-ca-protect": "حفاظت وحمایت زه ای صفحه",
        "tooltip-ca-delete": "حذف ای صفحه",
        "tooltip-ca-move": "جابجاکردن ای صفحه",
-       "tooltip-ca-watch": "اضاف کردن ای صفحه به لیست پیگیریهاتو",
+       "tooltip-ca-watch": "اْزاف کردن ای بٱلگٱ ب سئیل بٱرگ خوتۊن",
        "tooltip-ca-unwatch": "حذف ای صفحه زه لیست پی‌گیری‌های ایسا",
-       "tooltip-search": "جستن {{SITENAME}}",
-       "tooltip-search-go": "رۉ مإن بألگإیي کإ یأ نوم راستکي داشدإ بۈ.",
-       "tooltip-search-fulltext": "بألگأ آنأ سي چونو نإڤشدإیي پإی جۈري کو",
-       "tooltip-p-logo": "بإنیرين بإ سرآسۈنأ",
-       "tooltip-n-mainpage": "دÛ\8cدÙ\86 ØµÙ\81Ø­Ù\87 Ø§ØµÙ\84Û\8c",
-       "tooltip-n-mainpage-description": "بإنیرين به سرآسونه",
-       "tooltip-n-portal": "دربارÙ\87 Ø§Û\8c Ù¾Ø±Ù\88Ú\98Ù\87 Ú\86Ù\87 ØªØ±Û\8cÙ\86  Ú©Ù\86Û\8cÙ\86 Ù\88  Ú©Û\8cÙ\87  ØªØ±Û\8cÙ\86 Ø¢Ù\86 Ø¬Û\8cزÙ\87ا Ø±Ù\88 Ù¾Û\8cدا Ú©Ù\86ین",
-       "tooltip-n-currentevents": "پیداکردن اطلاعات زمینه یاسابقه اطلاعات در اتفاقات جاری",
-       "tooltip-n-recentchanges": "فهرست  تغییرات آخری درویکی",
-       "tooltip-n-randompage": "لود کردن یه صفحه بطور اتفاقی",
-       "tooltip-n-help": "محلی برای کشف کردن",
-       "tooltip-t-whatlinkshere": "فهرست همه صفحات ویکی که ایچو لینک دارن",
-       "tooltip-t-recentchangeslinked": "تغÛ\8cÛ\8cرات Ø¢Ø®Ø±Û\8c  Ø¯Ø±ØµÙ\81حاتÛ\8c Ú©Ù\87 Ù\84Û\8cÙ\86Ú© Ø´Ø¯Ù\87 Ø§Ù\86د Ø¨Ù\87 Ø§Û\8c ØµÙ\81Ø­Ù\87",
+       "tooltip-search": "جوستن {{SITENAME}}",
+       "tooltip-search-go": "رۉ میٛن بٱلگاْیٱلی کاْ نوم راستٱکی داشتاْ بۊن",
+       "tooltip-search-fulltext": "بٱلگاْیٱل نٱ سی چونو نڤشداْیٱلی پاٛی جۊری کو",
+       "tooltip-p-logo": "بنیٱرین ب سرآسۊنٱ",
+       "tooltip-n-mainpage": "بÙ\86Û\8cٱرÛ\8cÙ\86 Ø¨ Ø³Ø±Ø¢Ø³Û\8aÙ\86Ù±",
+       "tooltip-n-mainpage-description": "بنیٱرین ب سرآسۊنٱ",
+       "tooltip-n-portal": "سÛ\8c Ú\86Ù\88Ù\86Ù\88 Ù¾Ù\88رÙ\88جاÙ\92Û\8cÛ\8cØ\8c Ø§Û\8cسا Ú¤Ø§ Ú\86 Ú©Ù\88Ù\86Û\8cÙ\86Ø\8c Û\8cا Ø² Ú©Ù\88جاÙ\92 Ú\86Ù\88Ù\86Ù\88 Ú\86Û\8cاÛ\8cÛ\8c Ù\86اÙ\92 Ø¨Ø¬Û\8aرین",
+       "tooltip-n-currentevents": "جوستن دۊنسمٱندیٱل زمینٱ سی روخڤٱندا جاری",
+       "tooltip-n-recentchanges": "یٱ نومگٱ ز آلشدکاریٱل ایسنی میٛن ڤیکی",
+       "tooltip-n-randompage": "سوڤارکرد شامسٱکی بٱلگٱ",
+       "tooltip-n-help": "جاگٱیی سی دۊنستن",
+       "tooltip-t-whatlinkshere": "یو نومگٱ تٱموم بٱلگاْیٱلی ڤیکی پڌیائن کاْ ایچو هومپاٛیڤٱند دارن",
+       "tooltip-t-recentchangeslinked": "Ø¢Ù\84شدکارÛ\8cÙ±Ù\84 ØªØ§Ø²Ø§Ù\92باڤ Ù\85Û\8cÙ\9bÙ\86 Ø¨Ù±Ù\84گاÙ\92Û\8cÙ±Ù\84Û\8c Ú©Ø§Ù\92 Ù\87Ù\88Ù\85پاÙ\9bÛ\8cÚ¤Ù±Ù\86د Ú¤Ø§Ø¨Û\8cÚ\8cÙ\86اÙ\92 Ø¨ Ø§Û\8c Ø¨Ù±Ù\84Ú¯Ù±",
        "tooltip-feed-rss": "تغذیه آراس اس برای ای صفحه",
-       "tooltip-feed-atom": "تغذیه کوچیک ترین جزء  ای صفحه",
+       "tooltip-feed-atom": "هٱڤال خۊن ٱتومی سی ای بٱلگاْ",
        "tooltip-t-contributions": "ديإن نومگأآیي کإ {{GENDER:$1|اي کاریار}} هومياريسۈن کردإ",
        "tooltip-t-emailuser": "فرشناڌن ب ٱنجوماناماْ {{GENDER:$1|ای کاریار}}",
-       "tooltip-t-upload": "آپÙ\84Ù\88دکردÙ\86 Ù\81اÛ\8cÙ\84Ù\87ا",
-       "tooltip-t-specialpages": "فهرست همه صفحات مخصوص",
-       "tooltip-t-print": "نسخه فابل پرینت ای صفحه",
-       "tooltip-t-permalink": "Ù\84Û\8cÙ\86Ú© Ø¯Ø§Û\8cÙ\85Û\8c Ø¨Ù\87 Ø§Û\8c Ù\86سخÙ\87 Ø§Ø² ØµÙ\81Ø­Ù\87",
-       "tooltip-ca-nstab-main": "دیدن آن صفحه محتوا",
+       "tooltip-t-upload": "سÙ\88ڤار Ú©Ø±Ø¯Ù\86 Ø¬Ø§Ù\86Û\8cاÛ\8cÙ±Ù\84",
+       "tooltip-t-specialpages": "یٱ نومگٱ ز بٱلگاْیٱل ڤیجٱ",
+       "tooltip-t-print": "نوسقاْ پرینت گرهڌنی سی ای بٱلگٱ",
+       "tooltip-t-permalink": "Ù\87Ù\88Ù\85پاÙ\9bÛ\8cÚ¤Ù±Ù\86د Ø¯Ø§Û\8cÙ\88Ù\85Û\8c Ø³Û\8c Ú¤Ø§Ù\86Û\8cٱرÛ\8c Ø¨Ù±Ù\84Ú¯Ù±",
+       "tooltip-ca-nstab-main": "دیڌن مینۊنٱ بٱلگٱ",
        "tooltip-ca-nstab-user": "دیدن صفحه کاربر",
        "tooltip-ca-nstab-media": "دیدن صفحه مدیا",
-       "tooltip-ca-nstab-special": "اي بلگه بلگه ویجه و ايسا نترين هونه ڤیرایشت کونین",
+       "tooltip-ca-nstab-special": "ای بٱلگاْ یٱ بٱلگاْ ڤیجاْ، و نیبۊ آلشدکاریس کونین",
        "tooltip-ca-nstab-project": "دیدن صفحه پروژه",
-       "tooltip-ca-nstab-image": "دÛ\8cدÙ\86 ØµÙ\81Ø­Ù\87 Ù\81اÛ\8cÙ\84",
+       "tooltip-ca-nstab-image": "دÛ\8cئÙ\86 Ø¨Ù±Ù\84گاÙ\92 Ø¬Ø§Ù\86Û\8cا",
        "tooltip-ca-nstab-mediawiki": "دیدن پیام سیستم",
        "tooltip-ca-nstab-template": "دیدن قالب قابل تغییر",
        "tooltip-ca-nstab-help": "دیدن صفحه کمک",
-       "tooltip-ca-nstab-category": "دÛ\8cدÙ\86 ØµÙ\81Ø­Ù\87 Ø·Ø¨Ù\82Ù\87 Ø¨ندی",
+       "tooltip-ca-nstab-category": "دÛ\8cئÙ\86 Ø¨Ù±Ù\84گاÙ\92 Ø¯Ù±Ø³Ø¯Ø§Ù\92 Ø¨Ù±ندی",
        "tooltip-minoredit": "علامت نهادن به این به عنوان اصلاح حداقل یاکم",
-       "tooltip-save": "ضبط Ú©Ø±Ø¯Ù\86 ØªØºÛ\8cÛ\8cرات",
-       "tooltip-preview": " زه قبل دیدن تغییرات قبل از ضبط کردن سی مطمئن وابیدن لطفا استفاده کنید قبل از ضبط کردن",
-       "tooltip-diff": "دÛ\8cدÙ\86 ØªØºÛ\8cÛ\8cراتÛ\8c Ú©Ù\87 Ø§Û\8cسا Ù\85Ù\86 Ø§Û\8c Ù\85تÙ\86 Ø§Ù\86جاÙ\85 Ø¯Ø§Ø¯Û\8cÙ\86",
+       "tooltip-save": "اÙ\92Ù\85اÛ\8cاÙ\92 Ú©Ø±Ø¯Ù\86 Ø¢Ù\84شدکارÛ\8cتÛ\8aÙ\86",
+       "tooltip-preview": "پیش سئیل آلشدکاریٱلتۊن، لوتف کونین یۊنونٱ دیندا اْمایاْ کردن ڤٱنین ڤا کار.",
+       "tooltip-diff": "دÛ\8cئÙ\86 Ø¢Ù\84شدکارÛ\8cÙ±Ù\84Û\8c Ú©Ø§Ù\92 Ø§Û\8cسا Ù\85Û\8cÙ\9bÙ\86 Ø§Û\8c Ù\85تÙ\86 Ø±Ø§Ø³Øª Ú©Ø±Ø¯Û\8cÙ\86اÙ\92.",
        "tooltip-compareselectedversions": "دیدن تفاوتهای بین دونسخه انتخاب وابیده زه ای صفحه",
        "tooltip-watch": "اضاف کردن ای صفحه به فهرست مشاهداتتان",
        "tooltip-recreate": "دوباره درست کردن صفحه ای که زه رو کینه وغرض پاک وابیده",
        "tooltip-upload": "شروع آپلود",
-       "tooltip-rollback": "\"اعاده\" برگرداندن به وضع اولیه سی ای صفحه که بخاطر مشارکت  آخر اصلاح وابیده بایک کلیک",
+       "tooltip-rollback": "\"ڤورگٱنیئن\" لرنیڌن سی هال و بال ٱڤٱل ای بٱلگٱ سی یو کاْ هومیاری نیایی سی بیتٱر کردن بۊ ٱلڤٱت ڤا یٱ کرٱت پۊرنیڌن.",
        "tooltip-undo": "انجوم نگرتن ای ویرایشت ورگن و همه فرمیا ویرایشت تانه که حالت پیش سیل واکو.یه اجازه میئه سی اضاف کردن یه دلیل د چکسته.",
-       "tooltip-summary": "یأ چکسدأ کۈچير ڤارڌ کونين",
-       "simpleantispam-label": "Anti-spam check.\nپور<strong>نکنين</strong> ايچو نأ!",
+       "tooltip-summary": "یٱ چکستاْ کۊچیر ناْ بیارین ڤامیٛن",
+       "simpleantispam-label": "Anti-spam check.\nپور<strong>نکنين</strong> ایچو ناْ!",
        "pageinfo-title": "ڌونائی زاْ «$1»",
        "pageinfo-header-basic": "ڌونائیٱل بٱلٛگاْ",
        "pageinfo-header-edits": "ڤیرایشت ڤیرگار",
        "pageinfo-magic-words": "{{PLURAL:$1|قساْ|قساْ}} جادۊیی ($1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1| بنکۊ|بنکۊ}} بؽ دیار ( $1 )",
        "pageinfo-templates": "{{PLURAL:$1|اولگۊیٱل|اولگۊیٱل}} اْسفاڌاْ آڤیڌاْ ($1)",
-       "pageinfo-toolboxlink": "دونسمندیا بلگه",
+       "pageinfo-toolboxlink": "ڌونائیٱل بٱلٛگاْ",
        "pageinfo-contentpage": "باٛئنٱت آڤیڌاْ ڤاْ اوڌڤان بٱلٛگاْ موهتٱڤائی",
        "pageinfo-contentpage-yes": "هٱراٛ",
        "patrol-log-page": "سیاهاْ لاٛر",
        "previousdiff": "← اصلاح قدیمی",
        "nextdiff": "تفاوت بعدی→",
-       "file-info-size": "$1 × $2 پیکسل, اندازه فایل: $3, MIME نوع: $4",
+       "file-info-size": "$1 × $2 پیکسل, ٱندازاْ جانیا: $3, MIME جۊر: $4",
        "file-info-size-pages": "<span style=\"direction:ltr\">$1 × $2</span> نوخڌاْ، مٱشلٱقی پٱرڤٱناْ: $3، نوع MIME پٱرڤٱناْ: $4، $5 بٱلٛگاْ",
        "file-nohires": "قابلیت تفکیک بالاتری در دسترس نه.",
        "svg-long-desc": "SVG فایل, تقریبا$1 × $2 پیکسل, اندازه فایل: $3",
-       "show-big-image": "جانیا اصلی",
-       "show-big-image-preview": "أندازإ اي پیش سیل:$1.",
-       "show-big-image-other": "هنی{{PLURAL:$2|گپ نما کردن|گپ نما کردنیا}}: $1.",
+       "show-big-image": "جانیا ٱسلی",
+       "show-big-image-preview": "ٱندازاْ ای پیش سئیل:$1.",
+       "show-big-image-other": "هاْنی{{PLURAL:$2|گٱپ نما کردن|گٱپ نما کردنیٱل}}: $1.",
        "show-big-image-size": "$1 × $2 پیکسل",
        "newimages": "گالری فایلهای تازه",
        "bad_image_list": "اطلاعات را وا به ای شکل وارد کنین:\n\nفقط سطرهایی که با * آغاز ابون در نظر گریده ابون. اولین لینک در هر سطر، باید لینکی به یک تصویر بد باشد.\nلینکهای بعدی در همان سطر، به عنوان موارد استثنا در نظر گریده ابون",
-       "metadata": "Ù\81رادادÙ\87",
-       "metadata-help": " ای فایل دارای اطلاعات اضافه‌ای است که احتمالاً با دوربین دیجیتالی‌ یا پویشگری که سی ایجاد یا دیجیتالی‌کردن آن به کار رهده اضاف وابیده . ایر فایل زه وضعیت اولیه اس تغییر داده وابیده بوه ممکنه همه توضیحات موجود اطلاعات عکس را منعکس نکنه",
+       "metadata": "Ù\85تاداÙ\9bÛ\8cتا",
+       "metadata-help": "ای جانیا ز ڤٱرگرهڌاْ دۊنسمٱندیٱل اْزافیاْ کاْ هونو گاشا(شایڌ) ڤا دیربین دیجیتالی یا اْسکٱنر سی ڤا کار ڤٱندن یا راست کردنسۊن یا دیجیتالی کردنسۊن اْزاف ڤابیناْ. ٱر جانیا ز هال و بال ٱڤلی خو آلشد ڤابیڌاْ بۊ شایڌ تٱموم تۉزیات دۊنسمٱندیٱل ٱسگ نٱ دیاری نٱکوناْ.",
        "metadata-expand": "نشودادن جزئیات تفصیلی",
        "metadata-collapse": "قایم کردن جزئیات تفصیلی",
-       "metadata-fields": "رشنه یا یا گپ دونسمنیا که د ای پیغوم نومگه کاری بینه د ور گرته بلگه عسگ ن که گات وختی که جدول گپ دونسمنیا واز بوئه نشون دئیه بوئن.\nچی یا هنی سی یه که پیش فرضن قام بوئن.\n*راست کو\n*مدل\n*دم وخت اصل\n*وخت آشگار\n*اف ان شماره\n*ایزو نرخ من سرعت\n*فوکالنس\n*هنرمن\n*کپی رایت\n*حالت جی پی اس \n*جی پی اس گپ حالت\n*جی پی اس همه حالت",
-       "namespacesall": "Ù\87Ù\85Ù\87",
+       "metadata-fields": "رشناْیٱل گٱپ دۊنسمٱندیٱلی کاْ میٛن ای پاٛیغوم نومگٱ کاری ڤابیڌاْ ناْ ز ڤٱر گرهڌاْ بٱلگاْ ٱسگی کاْ گات ڤٱختی کاْ جٱدڤٱل گٱپ دۊنسمٱندیٱل ڤا اْبۊن دیاری کونن.\n*راست کو\n*مودل\n*مجال گات ٱسل\n*گات آشگار\n*اْف اْن شومارٱ\n*ایزو نرخ میٛن سورٱت\n*فوکالنس\n*هونٱرمٱند\n*کوپی رایت\n*هال و بال جی پی اْس \n*جی پی اْس گٱپ\n*جی پی اْس هٱماْ جۊرٱ",
+       "namespacesall": "Ù\87Ù±Ù\85Ù±",
        "monthsall": "همه ماهها",
        "semicolon-separator": "؛&#32;",
        "imgmultipagenext": "بٱلٛگاْ دینائی",
        "redirect-user": "نوم دیارکون کاریار:",
        "redirect-page": "دیارکار بٱلٛگاْ",
        "redirect-file": "نوم جانیا",
-       "specialpages": "بÙ\84گاÙ\9b Ø¢ Û\8bیجٱ",
-       "tag-filter": "[[Special:سٱرڌیسا|سٱرديس]]فیلتر:",
+       "specialpages": "بٱÙ\84گاÙ\92Û\8cÙ±Ù\84 Ú¤یجٱ",
+       "tag-filter": "[[Special:سٱرڌیسٱل|سٱرديس]]فیلتر:",
        "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|سرديس|سرديسا}}]]: $2",
        "tags-active-yes": "هٱراٛ",
        "tags-active-no": "نٱ",
        "logentry-move-move": "$1 {{GENDER:$2|جا ب جا کردإ}} بألگأ $3 نأ سي $4",
        "logentry-move-move_redir": "$1 بٱلٛگاْ $3 ناْ ڤاْ $4 کاْ آلشڌ تور ڤیڌاْ {{GENDER:$2|کل کرڌ}}",
        "logentry-patrol-patrol-auto": "$1 نوسخهٔ $4 بٱلٛگاْ $3 ناْ خودکار ڤاْ عنڤان لرخوؤٱرداٛ {{GENDER:$2|دزاْ کونین}}",
-       "logentry-newusers-create": "هساڤ کارياري $1 {{GENDER:$2|راسد ڤابي}}",
+       "logentry-newusers-create": "هساڤ کاریاری $1 {{GENDER:$2|راسد ڤابی}}",
        "logentry-newusers-autocreate": "حساڤ $1  ڤاْ بارت خوڌکار {{GENDER:$2|ؤرکل آڤیڌاْ}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|سوڤار کرده}} $3",
-       "searchsuggest-search": "جستن {{SITENAME}}",
+       "searchsuggest-search": "جوستن {{SITENAME}}",
        "duration-days": "$1 رۊز",
        "randomrootpage": "بٱلٛگاْ بونی تٱساڌفی"
 }
index 56fc976..72da302 100644 (file)
        "uploadstash-bad-path-invalid": "El camí no és vàlid.",
        "uploadstash-bad-path-unknown-type": "El tipus «$1» és desconegut.",
        "uploadstash-bad-path-unrecognized-thumb-name": "Nom de miniatura no reconegut.",
+       "uploadstash-bad-path-no-handler": "No s'ha trobat cap gestor per al tipus MIME $1 del fitxer $2.",
        "uploadstash-bad-path-bad-format": "La clau «$1» no està en un format adequat.",
        "uploadstash-file-not-found-no-thumb": "No s'ha pogut obtenir una miniatura.",
+       "uploadstash-file-not-found-no-local-path": "No hi ha cap camí local per a l'element escalat.",
        "uploadstash-file-not-found-missing-content-type": "Manca una capçalera de tipus de contingut.",
        "uploadstash-file-not-found-not-exists": "No es pot trobar el camí, o bé no és un fitxer pla.",
        "uploadstash-file-too-large": "No es pot servir un fitxer més gran de $1 bytes.",
        "ipb-blocklist": "Llista els blocatges existents",
        "ipb-blocklist-contribs": "Contribucions de {{GENDER:$1|$1}}",
        "ipb-blocklist-duration-left": "$1 restant",
+       "block-actions": "Accions per blocar:",
        "block-expiry": "Venciment",
+       "block-options": "Opcions adicionals:",
+       "block-prevent-edit": "Modificació",
+       "block-reason": "Motiu:",
+       "block-target": "Nom d'usuari o adreça IP:",
        "unblockip": "Desbloca l'usuari",
        "unblockiptext": "Empreu el següent formulari per restaurar l'accés d'escriptura a una adreça IP o un usuari prèviament blocat.",
        "ipusubmit": "Desbloca aquesta adreça",
index b3ed892..a3f2ce2 100644 (file)
        "content-model-text": "純文本",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "undo-failure": "Ĭng-ôi gūi bĭh biĕng-cĭk cĭ-găng ô chṳ̆ng-dók, cī bĭh biĕng-cĭk mâ̤-sāi huàng-nguòng.",
        "undo-summary": "Chṳ̄-siĕu [[Special:Contributions/$2|$2]]([[User talk:$2|Páng-gōng]])sū có̤ gì siŭ-gāi $1",
        "viewpagelogs": "看茲頁其歷史",
        "nohistory": "茲頁無修改歷史。",
index b8ce1a8..fac44a6 100644 (file)
        "prefs-help-email-required": "Электронан поштан адрес яздан деза.",
        "prefs-info": "Коьрта хаам",
        "prefs-i18n": "Кхин параметраш",
-       "prefs-signature": "КуьгтаӀор",
+       "prefs-signature": "Куьг",
        "prefs-dateformat": "Терахьан формат",
        "prefs-timeoffset": "Хенан  гӀирс",
        "prefs-advancedediting": "Юкъара параметреш",
index 26b09f5..c81af8a 100644 (file)
        "content-json-empty-object": "Tomt objekt",
        "content-json-empty-array": "Tomt matrix",
        "deprecated-self-close-category": "Sider, der bruger ugyldige, selvlukkende HTML-tags",
-       "deprecated-self-close-category-desc": "Siden bruger ugyldige selvlukkende HTML tags, som <code>&lt;b/></code> eller <code>&lt;span/></code>. De vil snart blive ændret i overensstemmelse med HTML5 specifikationen, så de ikke kan bruges i wikitext.",
+       "deprecated-self-close-category-desc": "Siden bruger ugyldige selvlukkende HTML tags, som <code>&lt;b/></code> eller <code>&lt;span/></code>. De vil snart blive ændret i overensstemmelse med HTML5-specifikationen, så de ikke kan bruges i wikitext.",
        "duplicate-args-category": "Sider der bruger samme argument mere end en gang i en skabelon",
        "duplicate-args-category-desc": "Siden indeholder en skabelon hvor et argument er brugt mere end en gang, som <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> eller <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Advarsel: Der er for mange beregningstunge oversætter-funktionskald på denne side.\n\nDer bør være færre end {{PLURAL:$2|$2 kald}}, lige nu er der {{PLURAL:$1|$1 kald}}.",
index 52d8104..dbed2cb 100644 (file)
        "statistics-header-edits": "सम्पादनहरूको तथ्याङ्क",
        "statistics-files": "अपलोड गर्याका फाइलहरू",
        "statistics-users": "दर्ता भयाऽ प्रयोगकर्ताअन",
-       "statistics-users-active": "सà¤\95à¥\8dरिय à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82",
-       "statistics-users-active-desc": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82 à¤\9cà¥\8b {{PLURAL:$1|बितà¥\87à¤\95à¥\8b à¤\8fà¤\95 à¤¦à¤¿à¤¨|बितà¥\87à¤\95ा $1 à¤¦à¤¿à¤¨à¤¹à¤°à¥\82}} à¤¬à¤ à¥\87 à¤¸à¤\95à¥\8dरिय छन्",
+       "statistics-users-active": "सà¤\95à¥\8dरिय à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\85न",
+       "statistics-users-active-desc": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\85न à¤\9cà¥\88 à¤²à¥\87 à¤\97या {{PLURAL:$1|दिन|$1 à¤¦à¤¿à¤¨}} à¤¬à¤ à¥\87à¤\87 à¤\95à¥\8dरियाà¤\95लापà¤\85न à¤\97रिराà¤\87छन्",
        "nbytes": "$1 {{PLURAL:$1|बाइट|बाइटहरू}}",
        "nlinks": "$1 {{PLURAL:$1|लिंक|लिंकहरू}}",
        "nmembers": "$1 {{PLURAL:$1|सदस्य|सदस्यहरू}}",
        "allpagesprefix": "यी सुरुका अक्षरसहितका पानाहरू हेद्या:",
        "categories": "श्रेणीहरू",
        "listusers-noresult": "प्रयोगकर्ता भेटियानन्",
-       "activeusers": "सà¤\95à¥\8dरिय à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताहरà¥\82à¤\95à¥\8b सूची",
+       "activeusers": "सà¤\95à¥\8dरिय à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dताà¤\85न à¤\95ि सूची",
        "activeusers-intro": "यो सूची ती प्रयोगकर्तानको हो जनले विगत $1 {{PLURAL:$1|दिन| दिन}}मी  गतिविधि देखायाकाछन्।",
        "activeusers-count": "विगत {{PLURAL:$3|दिनमी|$3 दिनहरूमी}}  $1 {{PLURAL:$1|सम्पादन गरियो|सम्पादनहरू गरिया}}",
        "activeusers-from": "यहाँबठे सुरु हुन्या प्रयोगकर्ताहरू धेकाओ:",
        "tags-create-warnings-below": "क्या तमी यो ट्याग बनाउन्या काम जारी राख्न चाहन्छौ ?",
        "tags-delete-explanation-initial": "तमी ट्याग \"$1\" लाई डाटावेसबठे हटाउँन लाग्याछौ ।",
        "tags-delete-explanation-warning": "यो क्रिया <strong>अपरिवर्तनीय</strong> हो र <strong>त्यसलाई परिवर्तन गर्न नाईसकिंदो</strong>, डेटाबेस प्रवन्धक पनि यैलाई केहि गद्द सक्दाइनन् । विश्वासपूर्ण रूपले तम तय गर कि तमी यै ट्यागलाई हटाउन चाहन्छौ ।",
-       "tags-activate-question": "तमी ट्याग \"$1\"लाई सक्रिय गद्द लाग्याछौ ।",
+       "tags-activate-question": "तमी ट्याग \"$1\" लाइ सक्रिय गद्द लाग्याछौ।",
        "tags-deactivate-question": "तमी ट्याग \"$1\" लाई निस्क्रिय गद्द लाग्याछौ ।",
        "compare-invalid-title": "तमीले खुलायाको शिर्षक अमान्य छ ।",
        "compare-title-not-exists": "तमीले खुलायाको शिर्षक उपलब्ध छैन ।",
index ed7b93d..6c2a931 100644 (file)
        "textmatches": "Resultados por texto de página",
        "notextmatches": "No hay resultados por texto de página",
        "prevn": "$1 {{PLURAL:$1|anterior|anteriores}}",
-       "nextn": "{{PLURAL:$1|siguiente|siguientes $1}}",
+       "nextn": "{{PLURAL:$1|siguiente|$1 siguientes}}",
        "prev-page": "página anterior",
        "next-page": "página siguiente",
        "prevn-title": "$1 {{PLURAL:$1|resultado anterior|resultados anteriores}}",
        "isredirect": "página redirigida",
        "istemplate": "transclusión",
        "isimage": "enlace de archivo",
-       "whatlinkshere-prev": "{{PLURAL:$1|previa|previas $1}}",
-       "whatlinkshere-next": "{{PLURAL:$1|siguiente|siguientes $1}}",
+       "whatlinkshere-prev": "{{PLURAL:$1|anterior|$1 anteriores}}",
+       "whatlinkshere-next": "{{PLURAL:$1|siguiente|$1 siguientes}}",
        "whatlinkshere-links": "← enlaces",
        "whatlinkshere-hideredirs": "$1 redirecciones",
        "whatlinkshere-hidetrans": "$1 transclusiones",
index c5d47d2..821a48c 100644 (file)
@@ -8,7 +8,8 @@
                        "Mihai",
                        "Minisarm",
                        "Silviubogan",
-                       "Stelistcristi"
+                       "Stelistcristi",
+                       "Strainu"
                ]
        },
        "exif-imagewidth": "Lățime",
        "exif-compression-6": "JPEG (vechi)",
        "exif-copyrighted-true": "Sub incidența drepturilor de autor",
        "exif-copyrighted-false": "Statutul drepturilor de autor nu este definit",
+       "exif-photometricinterpretation-0": "Negru și alb (0 pentru alb)",
        "exif-photometricinterpretation-1": "Negru și alb (0 pentru negru)",
+       "exif-photometricinterpretation-3": "Paletă",
+       "exif-photometricinterpretation-4": "Mască de transparență",
+       "exif-photometricinterpretation-5": "Separat (Probabil CMYK)",
        "exif-unknowndate": "Dată necunoscută",
        "exif-orientation-1": "Normală",
        "exif-orientation-2": "Oglindită orizontal",
index 6fbce9c..e55b6d4 100644 (file)
                        "Kyykaarme",
                        "Surjection",
                        "OneMember",
-                       "Valtlait"
+                       "Valtlait",
+                       "Laurianttila"
                ]
        },
        "tog-underline": "Linkkien alleviivaus:",
-       "tog-hideminor": "Piilota pienet muutokset tuoreet muutokset -listasta",
-       "tog-hidepatrolled": "Piilota tarkastetut muutokset tuoreet muutokset -listasta",
+       "tog-hideminor": "Piilota pienet muutokset \"tuoreet muutokset\" -listasta",
+       "tog-hidepatrolled": "Piilota tarkastetut muutokset \"tuoreet muutokset\" -listasta",
        "tog-newpageshidepatrolled": "Piilota tarkastetut sivut uusien sivujen listalta",
        "tog-hidecategorization": "Piilota sivujen luokittelu",
        "tog-extendwatchlist": "Laajenna tarkkailulista näyttämään kaikki tehdyt muutokset, eikä vain viimeisimmät",
        "limitreport-expansiondepth": "Suurin laajennussyvyys",
        "limitreport-expensivefunctioncount": "Vaativien jäsenninfunktioiden lukumäärä",
        "limitreport-unstrip-depth": "Unstrip-rekursion syvyys",
-       "limitreport-unstrip-size": "Unstrip laajennuksen jälkeinen koko",
+       "limitreport-unstrip-size": "Unstrip-laajennuksen jälkeinen koko",
        "limitreport-unstrip-size-value": "$1/$2 {{PLURAL:$2|tavu|tavua}}",
        "expandtemplates": "Laajenna mallineet",
        "expand_templates_intro": "Tämä toimintosivu ottaa syötteeksi wikitekstiä ja laajentaa kaikki siinä olevat mallineet rekursiivisesti.\nSe myös laajentaa tuetut parserifunktiot kuten\n<code><nowiki>{{</nowiki>#language:...}}</code> ja -muuttujat kuten\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nKäytännössä se laajentaa melkein kaiken, joka on kaksoisaaltosulkeiden sisällä.",
index e796ea9..471b4bf 100644 (file)
        "mergelog": "Vilin korpacho sotr",
        "revertmerge": "Doxim kor",
        "history-title": "\"$1\" hachea uzollnnecho itihas",
-       "difference-title": "\"$1\"-chea avruttint ontor",
+       "difference-title": "\"$1\"-chea avrutint ontor",
        "lineno": "Line ank $1:",
        "compareselectedversions": "Nivodloleo uzollneo comparar kor",
        "editundo": "kel'lem portavchem",
index 2cb2039..bd5c2ac 100644 (file)
        "passwordreset-domain": "תחום:",
        "passwordreset-email": "כתובת דוא\"ל:",
        "passwordreset-emailtitle": "פרטי חשבון ב{{grammar:תחילית|{{SITENAME}}}}",
-       "passwordreset-emailtext-ip": "מישהו (ככל הנראה אתם, מכתובת ה־IP מספר $1) ביקש איפוס של\nהסיסמה שלכם ב{{grammar:תחילית|{{SITENAME}}}}&rlm; ($4). {{PLURAL:$3|חשבון המשתמש הבא שייך|חשבונות המשתמש הבאים שייכים}}\nלכתובת הדואר האלקטרוני הזאת:\n\n$2\n\n{{PLURAL:$3|סיסמה זמנית זו תפקע|סיסמאות זמניות אלה יפקעו}} תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.\nעליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או אם נזכרתם בסיסמתכם\nהמקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה\nהישנה.",
-       "passwordreset-emailtext-user": "המשתמש $1 ב{{GRAMMAR:תחילית|{{SITENAME}}}} ביקש איפוס של הסיסמה שלכם ב{{GRAMMAR:תחילית|{{SITENAME}}}}&rlm;\n($4). {{PLURAL:$3|חשבון המשתמש הבא שייך|חשבונות המשתמש הבאים שייכים}} לכתובת הדואר האלקטרוני הזאת:\n\n$2\n\n{{PLURAL:$3|סיסמה זמנית זו תפקע|סיסמאות זמניות אלה יפקעו}} תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.\nעליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או אם נזכרתם בסיסמתכם\nהמקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה\nהישנה.",
+       "passwordreset-emailtext-ip": "מישהו (ככל הנראה אתם, מכתובת ה־IP מספר $1) ביקש איפוס של\nהסיסמה שלכם באתר {{SITENAME}} (שכתובתו $4). {{PLURAL:$3|חשבון המשתמש הבא שייך|חשבונות המשתמש הבאים שייכים}}\nלכתובת הדואר האלקטרוני הזאת:\n\n$2\n\n{{PLURAL:$3|סיסמה זמנית זו תפקע|סיסמאות זמניות אלה יפקעו}} תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.\nעליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או אם נזכרתם בסיסמתכם\nהמקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה\nהישנה.",
+       "passwordreset-emailtext-user": "המשתמש $1 ב{{GRAMMAR:תחילית|{{SITENAME}}}} ביקש איפוס של הסיסמה שלכם ב{{GRAMMAR:תחילית|{{SITENAME}}}}\n(שכתובתו $4). {{PLURAL:$3|חשבון המשתמש הבא שייך|חשבונות המשתמש הבאים שייכים}} לכתובת הדואר האלקטרוני הזאת:\n\n$2\n\n{{PLURAL:$3|סיסמה זמנית זו תפקע|סיסמאות זמניות אלה יפקעו}} תוך {{PLURAL:$5|יום|יומיים|$5 ימים}}.\nעליכם להיכנס ולבחור סיסמה חדשה עכשיו. אם מישהו אחר ביצע בקשה זו, או אם נזכרתם בסיסמתכם\nהמקורית ואינכם רוצים עוד לשנות אותה, באפשרותכם להתעלם מהודעה זו ולהמשיך להשתמש בסיסמה\nהישנה.",
        "passwordreset-emailelement": "שם משתמש:\n$1\n\nסיסמה זמנית:\n$2",
        "passwordreset-emailsentemail": "אם כתובת הדואר האלקטרוני הזאת משויכת לחשבון שלך, אז יישלח דואר אלקטרוני לאיפוס הסיסמה.",
        "passwordreset-emailsentusername": "אם יש כתובת דואר אלקטרוני שמשויכת לשם המשתמש הזה, אז יישלח דואר אלקטרוני לאיפוס הסיסמה.",
        "notanarticle": "זהו אינו דף תוכן",
        "notvisiblerev": "הגרסה האחרונה שנוצרה על־ידי משתמש אחר נמחקה",
        "watchlist-details": "ברשימת המעקב שלך יש {{PLURAL:$1|דף אחד|$1 דפים}} (ובנוסף {{PLURAL:$1|אליו, דף|להם, דפי}} שיחה).",
-       "wlheader-enotif": "×\94×\95×\93×¢×\95ת ×\93×\95×\90\"×\9c ×\9e×\90×\95פשרות.",
+       "wlheader-enotif": "×\94×\95×\93×¢×\95ת ×\93×\95×\90\"×\9c ×\9e×\95פע×\9cות.",
        "wlheader-showupdated": "דפים שהשתנו מאז ביקורך האחרון בהם מוצגים ב<strong>הדגשה</strong>.",
        "wlnote": "להלן {{PLURAL:$1|השינוי האחרון|<strong>$1</strong> השינויים האחרונים}} {{PLURAL:$2|בשעה האחרונה|בשעתיים האחרונות|ב־<strong>$2</strong> השעות האחרונות}}, עד $4, $3.",
        "wlshowlast": "הצגת $1 שעות אחרונות $2 ימים אחרונים",
index 1b9a70a..29ceecb 100644 (file)
@@ -95,7 +95,8 @@
                        "Fitoschido",
                        "Tavleen",
                        "Jayantanth",
-                       "Gopalindians"
+                       "Gopalindians",
+                       "Prong$31"
                ]
        },
        "tog-underline": "कड़ी रेखांकित:",
        "returnto": "$1 को लौटें।",
        "tagline": "{{SITENAME}} से",
        "help": "सहायता",
+       "help-mediawiki": "मीडियाविकि के बारे में सहायता",
        "search": "खोज",
        "search-ignored-headings": " #<!-- इस पंक्ति को जैसा है वैसा ही रहने दें। --> <pre>\n# शीर्षक, जिसे खोजते समय अनदेखा कर दिया जाता है।\n# इसमें कोई भी बदलाव तुरंत दिखाई देता है, जब वह शीर्षक इंडेक्स हो जाता है।\n# आप किसी पृष्ठ को फिर से इंडेक्स करने के लिए रिक्त सम्पादन कर सकते हैं।\n# इन चिन्हों का पालन करें:\n#   * हर चीज जो \"#\" से शुरू होता है, वह केवल टिप्पणी है।\n#   * हर बिना रिक्त पंक्ति एक सटीक शीर्षक है, जो रूप आदि हर चीज को अनदेखा कर देता है।\nसन्दर्भ\nबाहरी कड़ियाँ\nइन्हें भी देखें\n #</pre> <!-- इस पंक्ति को जैसा है वैसा ही रहने दें।  -->",
        "searchbutton": "खोजें",
        "editpage-invalidcontentmodel-text": "सामग्री मॉडल \"$1\" समर्थित नहीं है।",
        "editpage-notsupportedcontentformat-title": "सामग्री स्वरूप समर्थित नहीं है",
        "editpage-notsupportedcontentformat-text": "$1 सामग्री स्वरूप $2 सामग्री मॉडल द्वारा समर्थित नहीं है।",
+       "slot-name-main": "मुख्य",
        "content-model-wikitext": "विकिपाठ्य",
        "content-model-text": "सामान्य पाठ",
        "content-model-javascript": "जावास्क्रिप्ट",
        "group-autoconfirmed": "स्वतः स्थापित सदस्य",
        "group-bot": "बॉट",
        "group-sysop": "प्रबंधक",
+       "group-interface-admin": "अन्तरफलक प्रबंधक",
        "group-bureaucrat": "प्रशासक",
        "group-suppress": "छुपाने वाले",
        "group-all": "(सभी)",
        "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",
        "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": "परिणाम",
        "speciallogtitlelabel": "लक्ष्य (शीर्षक या \"{{ns:user}}:सदस्यनाम\" सदस्य हेतु):",
        "log": "लॉग",
        "logeventslist-submit": "दिखाएँ",
+       "logeventslist-patrol-log": "परीक्षण लॉग",
        "all-logs-page": "सभी सार्वजनिक लॉग",
        "alllogstext": "{{SITENAME}} की सभी उपलब्ध लॉगों की प्रविष्टियों का मिला-जुला प्रदर्शन।\nआप और बारीकी के लिए लॉग का प्रकार, सदस्य नाम (लघु-दीर्घ-अक्षर संवेदी), या प्रभावित पृष्ठ (लघु-दीर्घ-अक्षर संवेदी) चुन सकते हैं।",
        "logempty": "लॉग में ऐसी प्रविष्टि नहीं है।",
        "dellogpage": "हटाने का लॉग",
        "dellogpagetext": "नीचे हाल में हटाए गये पृष्ठों की सूची है।",
        "deletionlog": "हटाने का लॉग",
+       "log-name-create": "पृष्ठ निर्माण लॉग",
        "reverted": "पुराने अवतरण को पूर्ववत किया",
        "deletecomment": "कारण:",
        "deleteotherreason": "अन्य/अतिरिक्त कारण:",
        "ipb-disableusertalk": "इस प्रयोक्ता को अवरुद्ध होने पर स्वयं का वार्ता पृष्ठ सम्पादन करने से रोकें",
        "ipb-change-block": "इन जमावों के साथ सदस्य को फिर से अवरोधित करें",
        "ipb-confirm": "अवरोधण की पुष्टि करें",
+       "ipb-pages-label": "पृष्ठ",
        "badipaddress": "अमान्य आईपी पता।",
        "blockipsuccesssub": "अवरोधन सफल ।(संपादन करने से रोक दिया गया है)",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] को ब्लॉक किया जा चुका है।<br />\nब्लॉकों की समीक्षा के लिए [[Special:BlockList|ब्लॉक लॉग]] देखें।",
        "ipb-blocklist-contribs": "{{GENDER:$1|$1}} के लिए योगदान",
        "ipb-blocklist-duration-left": "$1 बाकी",
        "block-expiry": "समाप्ति:",
+       "block-reason": "कारण:",
        "unblockip": "सदस्य को अनब्लॉक करें",
        "unblockiptext": "पहले ब्लॉक किये हुए आईपी एड्रेस या सदस्यनाम को अनब्लॉक करने के लिये नीचे दिया गया फार्म भरें।",
        "ipusubmit": "यह अवरोध हटाएँ",
        "thumbnail_dest_directory": "लक्ष्य डाइरेक्टरी बना नहीं पा रहें हैं",
        "thumbnail_image-type": "इस प्रकार की छवि समर्थित नहीं है",
        "thumbnail_gd-library": "अवैध जीडी लाइब्रेरी जमाव: कार्यसमूह $1 मौजूद नहीं है",
+       "thumbnail_image-size-zero": "चित्र का आकार शून्य प्रतीत हो रहा है",
        "thumbnail_image-missing": "लगता है संचिका नामौजूद है: $1",
        "thumbnail_image-failure-limit": "हाल के समय में इस थंबनेल को दूसरा रूप देने के कई असफल प्रयास हुए हैं ($1 या उससे अधिक) । कृपया फिर से प्रयास कुछ समय बाद कीजिए।",
        "import": "पृष्ठ आयात करें",
        "pageinfo-display-title": "प्रदर्शित शीर्षक",
        "pageinfo-default-sort": "डिफ़ॉल्ट सॉर्ट की",
        "pageinfo-length": "पृष्ठ आकार (बाइट्स में)",
+       "pageinfo-namespace": "नामस्थान",
        "pageinfo-article-id": "पृष्ठ आइ॰डी",
        "pageinfo-language": "पृष्ठ सामग्री भाषा",
        "pageinfo-language-change": "परिवर्तन",
        "confirm-unwatch-top": "यह पृष्ठ अपने ध्यानसूचीसे हटाएं?",
        "confirm-rollback-button": "ठीक है",
        "confirm-rollback-top": "इस पृष्ठ के सम्पादन पूर्ववत करें?",
+       "mcrundofailed": "वापस लेना असफल रहा",
        "semicolon-separator": ";",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← पिछला पृष्ठ",
        "version-specialpages": "विशेष पृष्ठ",
        "version-parserhooks": "पार्सर हूक",
        "version-variables": "वेरिएबल",
+       "version-editors": "सम्पादक",
        "version-antispam": "अवांछित-ईमेल रोकथाम",
        "version-other": "अन्य",
        "version-mediahandlers": "मीडिया संचालक",
index 8c14e0e..651a2d3 100644 (file)
        "right-deletedtext": "Pregled izbrisanog teksta i izmjena između izbrisanih izmjena",
        "right-browsearchive": "Traženje obrisanih stranica",
        "right-undelete": "Vraćanje stranica",
-       "right-suppressrevision": "Pregledavanje, skrivanje i vraćanje izmjena na suradničkim stranicama bilo kojega suradnika",
+       "right-suppressrevision": "Pregledavanje, skrivanje i vraćanje određenih izmjena stranica od bilo kojega suradnika",
        "right-viewsuppressed": "Prikaži izmjene skrivene od svih suradnika",
        "right-suppressionlog": "Gledanje privatnih evidencija",
        "right-block": "Blokiranje suradnika u uređivanju",
        "pager-older-n": "{{PLURAL:$1|starija $1|starije $1|starijih $1}}",
        "suppress": "Izvrši nadgled",
        "querypage-disabled": "Ova posebna stranica onemogućena je jer bi usporila funkcioniranje projekta.",
-       "apihelp": "Pomoć za API",
+       "apihelp": "Pomoć za prilog",
        "apihelp-no-such-module": "Modul »$1« nije pronađen.",
        "apisandbox": "Stranica za vježbanje API-ja",
        "apisandbox-submit": "Napraviti zahtjev",
index 5c9c6a4..df88276 100644 (file)
        "cachedspecial-refresh-now": "A legfrissebb változat megjelenítése.",
        "categories": "Kategóriák",
        "categories-submit": "Mutat",
-       "categoriespagetext": "A következő {{PLURAL:$1|kategória tartalmaz|kategóriák tartalmaznak}} lapokat vagy fájlokat.\nA [[Special:UnusedCategories|nem használt kategóriák]] nem jelennek meg.\nLásd még a [[Special:WantedCategories|keresett kategóriák]] listáját.",
+       "categoriespagetext": "A következő {{PLURAL:$1|kategória tartalmaz|kategóriák tartalmaznak}} lapokat vagy fájlokat.\nA nem használt kategóriák nem jelennek meg.\nLásd még a [[Special:WantedCategories|keresett kategóriák]] listáját.",
        "categoriesfrom": "Kategóriák listázása a következő névtől kezdve:",
        "deletedcontributions": "Törölt szerkesztések",
        "deletedcontributions-title": "Törölt szerkesztések",
index 0908cd2..db44cc4 100644 (file)
        "createaccount": "Ստեղծել նոր հաշիվ",
        "userlogin-resetpassword-link": "Մոռացե՞լ եք գաղտնաբառը",
        "userlogin-helplink2": "Մուտք գործելու օգնություն",
-       "userlogin-loggedin": "Դուք արդեն մտել է որպես {{GENDER:$1|$1}}.\nՕգտագործեք ստորև բերված ձևը մուտք գործելու համար այլ հաշից",
+       "userlogin-loggedin": "Դուք արդեն մտել է որպես {{GENDER:$1|$1}}։\nՕգտագործե՛ք ստորև բերված ձևը այլ մասնակցային անվամբ մուտք գործելու համար։",
        "userlogin-reauth": "Դուք պետք է կրկին մուտք գործեք համակարգ` հաստատելու, որ դուք դուք եք {{GENDER:$1|$1}}։",
        "userlogin-createanother": "Ստեղծել այլ հաշիվ",
        "createacct-emailrequired": "Էլ–փոստի հասցե",
index 36d2fd4..ee08349 100644 (file)
        "otherlanguages": "Nà asụ̀sụ̀ ndị ọ̀zọ",
        "redirectedfrom": "(Dupụ̀rụ̀ sì $1)",
        "redirectpagesub": "Kufù ebe ihü nka na ga",
-       "lastmodifiedat": "Há rüchàrà na ihü nka na $1, mgbe $2",
+       "lastmodifiedat": "Oge ikpeazu Edeziri ihuakwụkwọ a bụ $1, mgbe $2",
        "viewcount": "Ha banyere ihü nka na {{PLURAL:$1|otu|$1 mgbe ole}}.",
        "protectedpage": "Ihü a cẹdolu a cẹdo",
        "jumpto": "Wụ̀ ga:",
        "accmailtitle": "mkpurụ okwu ejị a gafẹ a sipuole.",
        "newarticle": "(Nke ohúrù)",
        "newarticletext": "Í sòrò jikodo na ihü nke adíghị bòdì.\nÍ chȯrí ké ihü nke áhù, bìdó Í pị áka nà igbé nȯr nà àlà ngá (lé [$1 ihü nkwádo] màkà ụmà ozor).\nȮ bú nà Í byàrà ngá na aghọ, piá mpiá otúzor-intanet gi nke '''àzú'''.",
-       "noarticletext": "Mkpụrụ edemede à díghị na ihü nke.\nÍ nwèríkí [[Special:Search/{{PAGENAME}}|tuó íshí ihü nke á]] na ihü ndi ozor,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chọwa na ndetu nchètá di nwanne],\nmà [{{fullurl:{{FULLPAGENAME}}|action=edit}} Í nwèríkí rü nà ihü á]</span>.",
+       "noarticletext": "Mkpụrụ edemede à díghị na ihü nke a.\nÍ nwèríke [[Special:Search/{{PAGENAME}}|chọ ísí ihu nke á]] na ihu ndi ọzọ,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} chọwa na ndetu nchètá di nwanne],\nmà [{{fullurl:{{FULLPAGENAME}}|action=edit}} Í nwèríkí rü nà ihü á]</span>.",
        "userpage-userdoesnotexist-view": "Bùwá ọ'bànifé \"$1 à díghị na nsónùsòrò.",
        "blocked-notice-logextract": "Ha gbàchìrì ọ'bànifé nke.\nNdetu nchèta mbgàchì ǹkè ógè nso di na àlà màkà ádià má àmá:",
        "usercssyoucanpreview": "'''Lè kwá:''' Jí mpiá \"{{int:showpreview}}\" Í létú òtù CSS gí di mgbe Í donyèrè ya.",
        "recentchanges": "Mgbánwè ógè nso",
        "recentchanges-legend": "Nràlụ màkà Ihe gbanwere ubwá",
        "recentchanges-feed-description": "Chóputà ihe ógẹ ǹsò na wiki ímé órírí nke á.",
+       "recentchanges-label-newpage": "Ndezi a mmepụtara ihuakwukwọ ọhuru",
        "recentchanges-label-minor": "Ihe bu orü ntakírí",
        "recentchanges-label-bot": "Bot deziri ihe a",
        "recentchanges-legend-newpage": "$1 - ihü ohúrù",
        "linkstoimage": "{{PLURAL:$1|Ihü nká|Ihü nke $1}} na jikodo gá usòrò nká:",
        "nolinkstoimage": "Àdíghị ihü na jikodo usòrò nke.",
        "sharedupload": "Ákwúkwó runotu nke shì $1 na ó nwèríkí di na orürü nke ndi ozor.",
+       "sharedupload-desc-here": "Failụ a si na $1,enwekwara ike iji ya eme ihe na arụmarụ ọzọ. Nkọwa na [$2 ihuakwukwọ nkọwa failụ] eziri na okpuru.",
        "uploadnewversion-linktext": "Tinyé usòrò di òhúrù na élú nke",
        "shared-repo-from": "shí $1",
        "filerevert": "Nwèlaàzụ $1",
        "tooltip-pt-mycontris": "Ndetù màkà ihe {{GENDER:|ị}} mètàrà",
        "tooltip-pt-login": "Anyi si ka Í gbanyé; chetákwá na nsogbu adighi I gbanye ma Í chógị gbànyé",
        "tooltip-pt-logout": "Fwuör",
+       "tooltip-pt-createaccount": "Ọ gadi nma ka immepe ihuakwukwọ ma tinye akara nbanye, mana ọ bụghị iwu.",
        "tooltip-ca-talk": "Akíkó maka ihe di na ihü nka",
        "tooltip-ca-edit": "Mèzi ihuâ",
        "tooltip-ca-addsection": "Binyíte nkeji ohúrù",
        "tooltip-t-permalink": "Jikodo nke dìrì e dí nke na gá ngbàzì ihü nka",
        "tooltip-ca-nstab-main": "Zi ihe nor na ihüá",
        "tooltip-ca-nstab-user": "Zi ihü ọ'bànifé",
-       "tooltip-ca-nstab-special": "Ihü mkpà, a nweriki ru na ya onwe ya",
+       "tooltip-ca-nstab-special": "Ihe a bụ ihuakwukwo pụrụ iche anapụgi idezi",
        "tooltip-ca-nstab-project": "Lé ihü hé chèdòlù",
        "tooltip-ca-nstab-image": "Zi ihü usòrò",
        "tooltip-ca-nstab-template": "Zi mkpurụ ihü",
        "file-info-size": "$1 × $2 pixel, ívù akwukwo orunótu: $3, MIME nke: $4",
        "file-nohires": "Nke káchá mmá na ányá àdíghị.",
        "svg-long-desc": "usòrò SVG, nà áhà pixel $1 × $2, ívụ usòrò: $3",
-       "show-big-image": "Hü ya ka o dị",
+       "show-big-image": "Failụ si na nke mbu",
+       "show-big-image-size": "$1 × $2 piksels",
        "file-info-gif-looped": "etemte",
        "newimages-legend": "Nzàtà",
        "noimages": "Ọ díghì ihe di ngá Í lé.",
index 5e14dfb..a4fc223 100644 (file)
        "logentry-block-block": "$1 {{GENDER:$2|ha bloccato}} {{GENDER:$4|$3}} con una scadenza di $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|ha sbloccato}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|ha modificato}} le impostazioni del blocco per {{GENDER:$4|$3}} con una scadenza di $5 $6",
-       "logentry-partialblock-block": "$1 {{GENDER:$2|ha bloccato}} {{GENDER:$4|$3}} dalla modifica {{PLURAL:$8|della pagina|delle pagine}} $7 con una scadenza di $5 $6",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|ha bloccato}} {{GENDER:$4|$3}} nella scrittura {{PLURAL:$8|di|delle pagine}} $7 con una scadenza di $5 $6",
        "logentry-partialblock-reblock": "$1 {{GENDER:$2|ha modificato}} le impostazioni del blocco per {{GENDER:$4|$3}} bloccando la modifica {{PLURAL:$8|della pagina|delle pagine}} $7 con una scadenza di $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|ha bloccato}} {{GENDER:$4|$3}} in specifiche azioni non di scrittura con una scadenza di $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|ha bloccato}} {{GENDER:$4|$3}} con una scadenza di $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|ha modificato}} le impostazioni del blocco per {{GENDER:$4|$3}} con una scadenza di $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|ha importato}} $3 tramite caricamento",
index e826f23..1d91d0e 100644 (file)
        "upload-form-label-infoform-date": "日付",
        "upload-form-label-own-work-message-generic-local": "私は {{SITENAME}} 上での以下の利用規約とライセンス方針で、このファイルをアップロードしていることを確認します。",
        "upload-form-label-not-own-work-message-generic-local": "もし、あなたは {{SITENAME}} の方針の下で、このファイルをアップロードすることができない場合には、このダイアログを閉じて、別の方法をお試しください。",
-       "upload-form-label-not-own-work-local-generic-local": "また、[[Special:Upload|デフォルトのアップロードページ]]を試してみてください。",
+       "upload-form-label-not-own-work-local-generic-local": "また、[[Special:Upload|既定のアップロードページ]]を試してみてください。",
        "upload-form-label-own-work-message-generic-foreign": "私は共有リポジトリにこのファイルをアップロードしていることを理解しています。私は、そこにサービスやライセンス方針を以下のようにやっていることを、確認します。",
        "upload-form-label-not-own-work-message-generic-foreign": "もし、あなたは共有リポジトリの方針の下で、このファイルをアップロードすることができない場合には、このダイアログを閉じて、別の方法をお試しください。",
-       "upload-form-label-not-own-work-local-generic-foreign": "このファイルはその方針の下でそこにアップロードすることができれば、また、 [[Special:Upload|the upload page on {{SITENAME}}]]を使用してみてください",
+       "upload-form-label-not-own-work-local-generic-foreign": "{{SITENAME}} の方針の下でこのファイルをアップロードできる場合は、[[Special:Upload|{{SITENAME}} のアップロードページ]]を使用してみてください。",
        "backend-fail-stream": "ファイル $1 をストリームできませんでした。",
        "backend-fail-backup": "ファイル $1 をバックアップできませんでした。",
        "backend-fail-notexists": "ファイル $1 は存在しません。",
index 95f93af..2e85a45 100644 (file)
        "showdiff": "ცვლილებების ჩვენება",
        "blankarticle": "გაფრთხილება: გვერდი, რომელსაც ქმნით, ცარიელია. თუკი კვლავ დააჭერთ ღილაკს \"$1\", გვერდი შეიქმნება შემცვლელობის გარეშე.",
        "anoneditwarning": "<strong>გაფრთხილება:</strong> თქვენ არ ხართ ავტორიზირებული. თქვენი IP მისამართი საჯაროდ ხილული იქნება, თუკი განახორციელებთ რედაქტირებას. თუ თქვენ გაივლით <strong>[$1 ავტორიზაციას]</strong> ან <strong>[$2 შექმნით ანგარიშს]</strong>, სხვა უპირატესობებთან ერთად, თქვენი რედაქტირებები დაუკავშირდება თქვენს მომხმარებლის სახელს.",
-       "anonpreviewwarning": "''თქვენ არ შესულხართ სისტემაში. თქვენი IP მისამართი შეინახება გვერდის ისტორიაში. ''",
+       "anonpreviewwarning": "''თქვენ არ შესულხართ სისტემაში. თქვენი IP-მისამართი შეინახება გვერდის ისტორიაში. ''",
        "missingsummary": "'''შეხსენება:''' თქვენ არ მიგითითებიათ რედაქტირების რეზიუმე.\nთუ ისევ დააწკაპუნებთ შენახვაზე, თქვენი რედაქტირება რეზიუმეს გარეშე დამახსოვრდება.",
        "selfredirect": "გაფრთხილება: თქვენ გადამისამართებას იმავე გვერდზე ქმნით. შესაძლოა, თქვენ გადამისამართებისთვის აირჩიეთ არასწორი სამიზნე გვერდი ან არედაქტირებთ არასამიზნე გვერდს. \n\nთუ თქვენ კიდევ ერთხელ დააჭერთ ღილაკს \"$1\", გადამისამართება შეიქმნება.",
        "missingcommenttext": "გთხოვთ შეიყვანოთ კომენტარი.",
        "blocklist-nousertalk": "ვერ შეასწორებთ განხილვის გვერდს",
        "blocklist-editing": "რედაქტირება",
        "ipblocklist-empty": "დაბლოკვის სია ცარიელია.",
-       "ipblocklist-no-results": "მოთხოვნილი IP-მისამართი არ არის დაბლკილი",
+       "ipblocklist-no-results": "á\83\9bá\83\9dá\83\97á\83®á\83\9dá\83\95á\83\9cá\83\98á\83\9aá\83\98 IP-á\83\9bá\83\98á\83¡á\83\90á\83\9bá\83\90á\83 á\83\97á\83\98 á\83\90á\83  á\83\90á\83 á\83\98á\83¡ á\83\93á\83\90á\83\91á\83\9aá\83\9dá\83\99á\83\98á\83\9aá\83\98",
        "blocklink": "ბლოკირება",
        "unblocklink": "ბლოკის მოხსნა",
        "change-blocklink": "ბლოკის შეცვლა",
index 24502f7..736c8e9 100644 (file)
        "undo-success": "D'Ännerung gëtt réckgängeg gemaach. Iwwerpréift w.e.g. de Verglach ënnendrënner fir nozekuckeen ob et sou richteg ass, duerno späichert w.e.g d'Ännerungen of, fir dës Aktioun ofzeschléissen.",
        "undo-failure": "D'Ännerung konnt net réckgängeg gemaach ginn, wëll de betraffenen Abschnitt an der Tëschenzäit geännert gouf.",
        "undo-norev": "D'Ännerung kann net zréckgesat ginn, well et se net gëtt oder well se scho geläscht ass.",
-       "undo-nochange": "D'Ännerung gouf anscheinend schonn zeréckgesat.",
+       "undo-nochange": "D'Ännerung gouf anscheinend schonn zréckgesat.",
        "undo-summary": "Ännerung $1 vu(n) [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskussioun]] | [[Special:Contributions/$2|{{MediaWiki:Contribslink}}]]) annulléieren.",
        "undo-summary-username-hidden": "Versioun $1 vun engem verstoppte Benotzer zrécksetzen",
        "cantcreateaccount-text": "D'Opmaache vu Benotzerkonten vun dëser IP Adress ('''$1''') gouf vum [[User:$3|$3]] gespaart.\n\nDe Benotzer $3 huet \"$2\" als Grond uginn.",
index 13550d6..830e9a1 100644 (file)
        "badarticleerror": "Šo darbību nevar veikt šajā lapā.",
        "cannotdelete": "Nevar izdzēst lapu vai failu $1. Iespējams, to jau ir izdzēsis kāds cits.",
        "cannotdelete-title": "Nevar izdzēst lapu \"$1\"",
+       "delete-scheduled": "Lapas \"$1\" dzēšana ir ieplānota.\nSaglabā pacietību.",
        "delete-hook-aborted": "Aizķere pārtraukusi dzēšanas operāciju.\nPaskaidrojums nav saņemts.",
        "no-null-revision": "Neizdevās izveidot jaunu nulles versiju lapai \"$1\"",
        "badtitle": "Nepiemērots nosaukums",
        "prefs-advancedwatchlist": "Papildu iespējas",
        "prefs-displayrc": "Pamatuzstādījumi",
        "prefs-displaywatchlist": "Pamatuzstādījumi",
+       "prefs-changesrc": "Rādītās izmaiņas",
+       "prefs-changeswatchlist": "Rādītās izmaiņas",
        "prefs-pageswatchlist": "Uzraudzītās lapas",
        "prefs-tokenwatchlist": "Marķieris",
        "prefs-diffs": "Izmaiņas",
index 9dbde82..719c403 100644 (file)
        "filerenameerror": "Не можев да ја преименувам податотеката „$1“ во „$2“.",
        "filedeleteerror": "Не може да се избрише податотеката „$1“.",
        "directorycreateerror": "Не можеше да се создаде именикот „$1“.",
-       "directoryreadonlyerror": "Ð\9fапкаÑ\82а â\80\9e$1â\80\9c Ð½Ðµ Ðµ Ð·Ð°Ð¿Ð¸Ñ\81лива.",
+       "directoryreadonlyerror": "Ð\9fапкаÑ\82а â\80\9e$1â\80\9c Ðµ Ñ\81амо Ð·Ð° Ñ\87иÑ\82аÑ\9aе.",
        "directorynotreadableerror": "Папката „$1“ не е читлива.",
        "filenotfound": "Не може да се најде податотеката „$1“.",
        "unexpected": "Неочекувана вредност: „$1“=„$2“.",
        "iranian-calendar-m10": "Деј",
        "iranian-calendar-m11": "Бахман",
        "iranian-calendar-m12": "Есфанд",
-       "hijri-calendar-m1": "Ð\9cÑ\83Ñ\85аÑ\80ам",
-       "hijri-calendar-m2": "Сафар",
-       "hijri-calendar-m3": "Раби ел-ауал",
-       "hijri-calendar-m4": "Раби ел-тани",
-       "hijri-calendar-m5": "Џумада ел-ауал",
-       "hijri-calendar-m6": "Џумада ел-тани",
-       "hijri-calendar-m7": "Раџаб",
-       "hijri-calendar-m8": "Шабан",
-       "hijri-calendar-m9": "Рамадан",
-       "hijri-calendar-m10": "Шавал",
-       "hijri-calendar-m11": "Ð\94Ñ\83 ÐµÐ»-Ð\9aида",
-       "hijri-calendar-m12": "Ð\94Ñ\83 ÐµÐ»-ХиÑ\9fа",
+       "hijri-calendar-m1": "мÑ\83Ñ\85аÑ\80ем",
+       "hijri-calendar-m2": "сафер",
+       "hijri-calendar-m3": "реби ул-евел",
+       "hijri-calendar-m4": "реби ул-ахир",
+       "hijri-calendar-m5": "џумаде ел-евел",
+       "hijri-calendar-m6": "џумаде ел-ухра",
+       "hijri-calendar-m7": "реџеб",
+       "hijri-calendar-m8": "шабан",
+       "hijri-calendar-m9": "рамазан",
+       "hijri-calendar-m10": "шевал",
+       "hijri-calendar-m11": "зÑ\83л ÐºÐ°Ð´Ðµ",
+       "hijri-calendar-m12": "зÑ\83л Ñ\85иÑ\9fе",
        "hebrew-calendar-m1": "тишри",
        "hebrew-calendar-m2": "хешван",
        "hebrew-calendar-m3": "кислев",
index 9aaddc1..d56dbb1 100644 (file)
        "prefs-emailconfirm-label": "विपत्र निश्चितीकरण:",
        "youremail": "विपत्र:",
        "username": "{{GENDER:$1|सदस्यनाम}}:",
-       "prefs-memberingroups": "{{PLURAL:$1|गटातील|गटांतील}}{{GENDER:$2|सदस्य}} :",
+       "prefs-memberingroups": "या {{PLURAL:$1|गटातील|गटांतील}} {{GENDER:$2|सदस्य}}:",
        "group-membership-link-with-expiry": "$1 ($2 पर्यंत)",
        "prefs-registration": "नोंदणीची वेळ:",
        "yourrealname": "खरे नाव:",
        "prefs-advancedwatchlist": "प्रगत पर्याय",
        "prefs-displayrc": "दर्शन पर्याय",
        "prefs-displaywatchlist": "प्रदर्शन पर्याय",
+       "prefs-changesrc": "दाखविलेले बदल",
+       "prefs-changeswatchlist": "दाखविलेले बदल",
        "prefs-tokenwatchlist": "ओळखचिन्ह",
        "prefs-diffs": "फरक",
        "prefs-help-prefershttps": "हा पसंतीक्रम आपल्या पुढील आल्याची नोंद केल्यानंतर कार्यान्वित होईल.",
index 49b5fcb..3bc3856 100644 (file)
        "ipbreason": "အ​ကြောင်း​ပြ​ချက်:",
        "ipbreason-dropdown": "*ယေဘုယျ ပိတ်ပင်တားဆီးရခြင်း အကြောင်းပြချက်များ\n** မှားယွင်းအချက်အလက်များကို ထည့်သွင်းမှု\n** စာမျက်နှာများမှ အကြောင်းအရာကို ဖယ်ရှားမှု\n** ပြင်ပဆိုဒ်များသို့လင့်ခ်ချိတ်၍ ဖွမှု\n** စာမျက်နှာများတွင် ပေါက်တတ်ကရများ ထည့်သွင်းမှု\n** ခြိမ်းခြောက်ခြင်း အပြုအမူ/အနှောက်အယှက်ပေးခြင်း\n** အကောင့်များစွာကို အလွဲသုံးစားလုပ်မှု\n** လက်ခံနိုင်ဖွယ်မရှိသော အသုံးပြုသူအမည်",
        "ipb-hardblock": "ဤအိုင်ပီလိပ်စာမှ လော့ဂ်အင်ဝင်ထားသော အသုံးပြုသူများကို တည်းဖြတ်ခြင်းမှ တားမြစ်ရန်",
-       "ipbcreateaccount": "á\80¡á\80\80á\80±á\80¬á\80\84á\80·á\80ºá\80¡á\80\9eá\80\85á\80ºá\80\95á\80¼á\80¯á\80\9cá\80¯á\80\95á\80ºá\80\81á\80¼á\80\84á\80ºá\80¸á\80\80á\80­á\80¯ á\80\90á\80¬á\80¸á\80\86á\80®á\80¸á\80\9bá\80\94á\80º",
+       "ipbcreateaccount": "á\80¡á\80\80á\80±á\80¬á\80\84á\80·á\80ºá\80\96á\80\94á\80ºá\80\90á\80®á\80¸á\80\81á\80¼á\80\84á\80ºá\80¸",
        "ipbemailban": "အီးမေးပို့ခြင်းမှ အသုံးပြုသူကို တားဆီးရန်",
        "ipbenableautoblock": "ဤအသုံးပြုသူ အသုံးပြုသော အိုင်ပီလိပ်စာနှင့် သူတို့ ပြင်ဆင်ရန် ကြိုးစားသည့် နောက်ဆက်တွဲ အိုင်ပီလိပ်စာများကိုပါ အလိုအလျောက်ပိတ်ပင်ရန်",
        "ipbsubmit": "ဤအသုံးပြုသူကို ပိတ်ပင်ရန်",
index e55d65e..0373bee 100644 (file)
        "nav-login-createaccount": "Совамо / тейть совамотарка",
        "logout": "Лисеме",
        "userlogout": "Лисеме",
-       "notloggedin": "Ð\90пак Ñ\81оваво",
+       "notloggedin": "ЭзиÑ\82Ñ\8c Ñ\81ова",
        "userlogin-noaccount": "Совамотаркат арась?",
        "userlogin-joinproject": "Совак «{{SITENAME}}» сайтэнь теицякс",
        "createaccount": "Теемс теицянь од лопа",
        "loginerror": "Совамсто ильведькс",
        "createacct-error": "Совамо таркань шкамосо-теемасо ильведевкс",
        "createaccounterror": "Совамо тарка эзь теевть: $1",
-       "nocookiesnew": "Совамо таркась шкавсь, ансяк зярс эзить сова.\n {{SITENAME}} сайтэв совават cookies функция вельде.\nАрсемашинасот cookies функциятне тевс апак нолда.\nВасня нолдытя функциятнень тевс, мейле совак: сёрмадыть од совамо леметь ды салава валот.",
+       "nocookiesnew": "Совамо таркась шкавсь, ансяк зярс эзить сова.\n {{SITENAME}} сайтэв совават «нумолонь кшинеть» функция вельде.\nАрсемашинасот «нумолонь кшинеть» функциятне тевс апак нолда.\nВасня нолдытя функциятнень тевс, мейле совак: сёрмадыть од совамо леметь ды салава валот.",
        "nocookieslogin": "{{SITENAME}} лопасо теицятнень содавтомга «нумолонь кшинеть» функциясь эряви. Ней содымашинасот «нумолонь кшинеть» функциясь апак нолда. Инескеть нолдытя тевс «нумолонь кшинеть» функциянть, мейле одов совак.",
+       "nocookiesfornew": "Совамо таркась эзь шкаво, эзь кемекставо тенк косто саевсь. \nВарштыка «нумолонь кшинеть» функциясь тевс нолдазь -- апак. Мейле одкстомтык те лопанть ды одов варчик.",
        "noname": "Зярс эзить максо кемекстазь теицянь лем.",
        "loginsuccesstitle": "Совавить",
        "loginsuccess": "'''Тон совить {{SITENAME}}-с кода \"$1\".'''",
        "summary-preview": "Цётомань седеикелев вановкс:",
        "subject-preview": "Темань/коняксонь васнянь невтема:",
        "blockedtitle": "Совицясь аравтозь саймас",
-       "blockedtext": "'''Тонть теицянь леметь эли IP-тешкстэть совавтозь саймас.'''\n\nСаймас совавтынзеть $1 прявт кирдицясь. Максозь истямо тувталось: ''«$2»''.\n\n* Саймас совавтозят: $8\n* Саймасто нолдамсат: $6\n* Саймас совавтозесь: $7\n\nУли мелеть пачтт сёрма теицянтень $1 эли лиятненень [[{{MediaWiki:Grouppage-sysop}}|прявт кирдицятненень]], сынст марто маштови кортамс саймас совавтомадонть.\nМель явт, эзик максо е-почта сёрмапаргот (адресэть) [[Special:Preferences|эсеть аравтоматнесэ]], а нолдави тевс 'сёрмадт те теицянтень' функциясь. Истяжо функциясь а нолдави сестэяк, зярдо тосояк саймас совавтозят.\n\nIP-тешкстэть — $3, саймас совавтоманть ID-сь — #$5. Инескеть, кевкстемат улить, невттяя нетнень лангс.",
+       "blockedtext": "<strong>Тонть теицянь леметь эли IP-тешкстэть совавтозь саймас.</strong>\n\nСаймас совавтынзеть $1.\nМаксозь тувталось  <em>«$2»</em>.\n\n* Саймас совавтозят: $8\n* Саймасто нолдамсат: $6\n* Саймас совавтозесь: $7\n\nУли мелеть пачтт сёрма теицянтень $1 эли лиятненень [[{{MediaWiki:Grouppage-sysop}}|прявткирдицянтень]], сонзэ марто маштови кортамс саймас совавтомадот.\nМель явт, эзик максо е-почта сёрмапаргот (адресэть) [[Special:Preferences|эсеть аравтоматнесэ]], а нолдави тевс 'сёрмадт те теицянтень' функциясь. Истяжо функциясь а нолдави сестэяк, зярдо тосояк саймас совавтозят.\n\nНеень IP-тешксэть — $3, саймас совавтомань ID-сь — #$5.\nИнескеть, кевкстемат улить, невттяя неть тешкстнэнь-индикатортнэнь лангс.",
        "blockednoreason": "тувтал апак максо",
        "whitelistedittext": "Лопанть витнемс - петнемс эряви $1.",
        "nosuchsectiontitle": "Явксось а муеви",
        "postedit-confirmation-published": "Витнемат-петнемат нолдазь оляс.",
        "edit-already-exists": "Од лопась кодаяк эзь тееве; сон уш ули.",
        "defaultmessagetext": "Пачтямнень свалонь текст",
+       "content-model-wikitext": "вики-текст",
        "post-expand-template-inclusion-warning": "Ванок: Парцунлопатнеде кельгстят пек ламо.\nСовавтовомо аволь весе парцунлопатне кельгить.",
        "post-expand-template-inclusion-category": "Лопатне, конатнень лопапарцун марто покшолмаст пек ламо",
        "post-expand-template-argument-warning": "'''Ванок''': Те лопасонть ули лопапарцунонь вейке эли седе ламо аргумент, конась вельть покш. Сеть аргументтнэ нардазь.",
        "lineno": "Киксэсь $1:",
        "compareselectedversions": "Кочказь версиятнень аравтомс карадо-каршо",
        "editundo": "Велявтомс мекев мезе витнинь-петнинь",
+       "diff-empty": "(А явови)",
        "searchresults": "Мезе муевсь",
        "searchresults-title": "Мезе муевсь \"$1\" вешнемасо",
        "titlematches": "Лопанть коняксонзо марто вейтьс прась",
        "recentchangeslinked-feed": "Сюлмавозь лиякстоматне",
        "recentchangeslinked-toolbox": "Сюлмавозь лиякстоматне",
        "recentchangeslinked-title": "Полавтнемат-лиякстомтомат конат кандовить теватезэнь \"$1\"",
-       "recentchangeslinked-summary": "Ули мелеть неемс полавтнемат, конат теезь кодамояк лопас сюлмазь лопатнес, сёрмадт лопанть лемензэ. (Ули мелеть неемс категорияс совавтовицят, сёрмадт Категория:\"Категориянть лемензэ\".) Лопатнес теезь витнемат-петнемат тешкставить [[Special:Watchlist|Ванома лопасот]] <strong>эчкстэ</strong>",
+       "recentchangeslinked-summary": "Ули мелеть неемс полавтнемат, конат теезь кодамояк лопас сюлмазь лопатнес, сёрмадт лопанть лемензэ. (Ули мелеть неемс категорияс совавтовицят, сёрмадт {{ns:category}}:«Категориянть лемензэ».) Лопатнес теезь витнемат-петнемат тешкставить [[Special:Watchlist|Ванома лопасот]] <strong>эчкстэ</strong>",
        "recentchangeslinked-page": "Лопанть лемезэ:",
        "recentchangeslinked-to": "Тень таркас невтить те лопанть марто сюлмазь лопатнесэ полавтнематнень",
        "upload": "Ёкстамс файла",
        "filehist-filesize": "Файланть покшолмазо",
        "filehist-comment": "Мельполадкс",
        "imagelinks": "Ков файлась нолдави тевс",
-       "linkstoimage": "Те файланть марто сюлмавозь вана {{PLURAL:$1|истямо сюлмавома пене|$1 истят сюлмавома пенеть}}:",
+       "linkstoimage": "Те файланть марто сюлмавозь вана {{PLURAL:$1|истямо лопа|$1 истят лопат}}:",
        "nolinkstoimage": "Арась вейкеяк лопа, кона сюлмавови те файланть марто.",
        "sharedupload": "Те файлась саезь \"$1\" файлань пусмосто, сон нолдави тевс лия проектсэяк.",
        "sharedupload-desc-here": "Те файлась сась истямо $1 таркасто, паряк сон нолдави тевс лия проектсэ.\nКувалманзо сёрмадовксось [$2 файладонть ёвтнема лопазо] невтезь ало.",
        "allpagessubmit": "Молемс",
        "allpagesprefix": "Невтевкс лопась полаткс марто:",
        "allpages-bad-ns": "{{SITENAME}} сайтсэнть арась лем потмо \"$1\".",
+       "allpages-hide-redirects": "Кекшемс лияв печтематнень",
        "categories": "Категорият",
        "categoriespagetext": "{{PLURAL:$1|Те категориясонть|Неть категориятнесэ}} улить лопат эли медият.\n[[Special:UnusedCategories|тевс апак нолда категориятне]] тесэ а невтевить.\nИстяжо ванытя [[Special:WantedCategories|вешема категориятнень]].",
        "sp-deletedcontributions-contribs": "путовксонзо",
        "unwatch": "А ванстнемс тень мельга",
        "unwatchthispage": "Лоткамс ванстомадонзо",
        "notvisiblerev": "Лиякстомтомась нардазь",
-       "watchlist-details": "Ванома лемрисьмесэть {{PLURAL:$1|$1 лопа|$1 лопат}}, кортнема лопатнень лангс апак вано.",
+       "watchlist-details": "Ванома лемрисьмесэть (кортнема лопатнесэяк) {{PLURAL:$1|$1 лопа|$1 лопат}}.",
        "wlshowlast": "Невтемс меельце $1 цяст $2 чить",
        "watchlist-options": "Ванома потмонь аравтнемат",
        "watching": "Ванома...",
        "unwatching": "Аванома...",
+       "enotif_reset": "Путомс тешкс весе лопатнес, козонь совсян",
        "enotif_impersonal_salutation": "{{SITENAME}} теицясь",
        "enotif_lastdiff": "Те полавтоманть ваномга вант $1.",
        "enotif_anon_editor": "лемтеме теиця $1",
        "contributions": "{{GENDER:$1|Теицянть}} путовксонзо",
        "contributions-title": "Теицянть путовксонзо $1 таркантень",
        "mycontris": "Монь путовкстнэ",
+       "anoncontribs": "Путовкст",
        "contribsub2": "{{GENDER:$3|$1}}-нь кладозо ($2)",
        "uctop": "течеме чинь",
        "month": "Ковстонть (ды седе икеле):",
        "tooltip-feed-rss": "\"RSS\" чидикерькске те лопантень",
        "tooltip-feed-atom": "Атом лезкс те лопантень",
        "tooltip-t-contributions": "Невтть мезе {{GENDER:$1|те теицясь}} полавтсь",
-       "tooltip-t-emailuser": "Те Ñ\82еиÑ\86Ñ\8fнÑ\82енÑ\8c ÐºÑ\83Ñ\87омÑ\81 Ðµ-Ñ\81Ñ\91Ñ\80ма",
+       "tooltip-t-emailuser": "Ð\9aÑ\83Ñ\87омÑ\81 Ðµ-Ñ\81Ñ\91Ñ\80ма {{GENDER:$1|Ñ\82е Ñ\82еиÑ\86Ñ\8fнÑ\82енÑ\8c}}",
        "tooltip-t-upload": "Йовкстамс файлат",
        "tooltip-t-specialpages": "Башка тевень лопатне мельга-мельцек",
        "tooltip-t-print": "Лопанть конёв лангс нолдавома версиязо",
        "pageinfo-header-restrictions": "Лопанть ванстоманзо",
        "pageinfo-header-properties": "Лопанть уликсчинзэ",
        "pageinfo-display-title": "Коняксонть таргамс лангс",
+       "pageinfo-default-sort": "Сортировамонь васень панжома",
+       "pageinfo-length": "Лопанть покшолмазо (байтасо)",
        "pageinfo-article-id": "Лопа ID",
+       "pageinfo-language": "Лопасонть текстэнь келесь",
+       "pageinfo-content-model": "Лопапотмонь парцун",
+       "pageinfo-robot-policy": "Вешнема машинань индексэнь путомась",
        "pageinfo-robot-index": "Маштови",
        "pageinfo-few-watchers": "$1 эли седе ламо {{PLURAL:$1|ваныцянзо}} арасть",
+       "pageinfo-redirects-name": "Зяро лопат печтевтезь те лопас",
        "pageinfo-subpages-name": "Те лопанть явкслопанзо",
        "pageinfo-firstuser": "Лопанть шкицязо",
        "pageinfo-firsttime": "Лопась шказель",
        "pageinfo-lasttime": "Меельцеде витнезель-петнезель",
        "pageinfo-edits": "Зяроксть витнезь-петнезь",
        "pageinfo-authors": "Весемезэ зяро авторонзо",
+       "pageinfo-recent-edits": "Зяро витнемат-петнемат (меельце «$1»-сто)",
        "pageinfo-toolboxlink": "Лопадо иформация",
        "pageinfo-contentpage": "Текст марто лопакс ловови",
        "pageinfo-contentpage-yes": "Истя",
        "watchlistedit-raw-submit": "Мезе мельга ванстнят, спискаст одкстомтомс",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 конякс поладозель|$1 конякст поладозельть}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 конякс нардазель|$1 конякст нардазельть}}:",
+       "watchlisttools-clear": "Чамдомс ванома лемрисьменть",
        "watchlisttools-view": "Лиякстоматьне лопатнесэ потмоксстонть",
        "watchlisttools-edit": "Ваномс ды витнемс-петнемс мезе мельга ванстнят",
        "watchlisttools-raw": "Витнемс-петнемс верек ваномалопанть",
        "version-software": "Нолдань программат",
        "version-software-product": "Шкавкс-нолдавкс",
        "version-software-version": "Верзия",
+       "redirect-submit": "Молемс",
+       "redirect-lookup": "Вешнемс:",
        "redirect-user": "Теицянь идентификатор",
+       "redirect-page": "Лопа ID",
+       "redirect-file": "Файлань лем",
        "fileduplicatesearch": "Вешнемс кавтаське файлат",
        "fileduplicatesearch-filename": "Файла лем:",
        "fileduplicatesearch-submit": "Вешнемс",
        "intentionallyblankpage": "Те лопась арьсезь-содазь чавосто кадозь",
        "tag-filter": "[[Special:Tags|Tag]] сувтемесь:",
        "tag-filter-submit": "Сувтемень пачк нолдамс",
+       "tags-active-yes": "Истя",
+       "tags-active-no": "Аволь",
        "tags-edit": "витнемс-петнемс",
        "compare-page1": "Лопа 1",
        "compare-page2": "Лопа 2",
index 1a1b018..6c2a867 100644 (file)
        "specialpages-group-developer": "Utviklerverktøy",
        "blankpage": "Tom side",
        "intentionallyblankpage": "Denne siden er tom med vilje",
+       "disabledspecialpage-disabled": "Denne siden har blitt slått av av en systemadministrator.",
        "external_image_whitelist": "#La denne linja være som den er<pre>\n#Skriv fragmenter av regulære uttrykk (delen som går mellom //) nedenfor\n#Disse vil sjekkes mot adresser til bilder fra eksterne sider\n#De som blir godkjent vil vises, ellers vil det gis en lenke til bildet\n#Linjer som begynner med # anses som kommentarer\n#Det skilles ikke mellom store og små bokstaver\n\n#Skriv alle fragmenter av regulære uttrykk over denne lina. La denne linja være som den er</pre>",
        "tags": "Gyldige endringstagger",
        "tag-filter": "Filter for [[Special:Tags|tagger]]:",
index 3cff993..3b2c2e1 100644 (file)
@@ -32,7 +32,8 @@
                        "Tulsi Bhagat",
                        "ديفيد",
                        "Haribanshi",
-                       "Parbat subedi"
+                       "Parbat subedi",
+                       "पर्वत सुबेदी"
                ]
        },
        "tog-underline": "रेखाङ्कित लिङ्क:",
        "ipb-blocklist": "हाल रहेका निषेधहरू हेर्नुहोस्",
        "ipb-blocklist-contribs": "{{GENDER:$1|$1}}को लागि योगदान",
        "block-expiry": "सकिने:",
+       "block-options": "अतिरिक्त विकल्पहरू",
+       "block-prevent-edit": "सम्पादन हुँदैछ",
+       "block-reason": "कारण:",
+       "block-target": "प्रयोगकर्ता नाम वा आइपी ठेगाना",
        "unblockip": "प्रयोगकर्ताको निषेध खारेज गर्नुहोस्",
        "unblockiptext": "IP ठेगाना अथवा प्रयोगकर्तामाथि पहिले लगाइएको रोक फुकुवा गर्न तलको प्रपत्र प्रयोग गर्नुहोस्।",
        "ipusubmit": "यो रोक हटाउने",
index e2ba377..a27e4d1 100644 (file)
        "wlshowhidemine": "mine endringar",
        "wlshowhidecategorization": "kategorisering av sider",
        "watchlist-options": "Alternativ for overvakingslista",
-       "watching": "Overvakar...",
+       "watching": "Overvaker …",
        "unwatching": "Fjernar frå overvakinglista...",
        "watcherrortext": "Det oppstod ein feil under endringa av overvakingsinnstillingane dine for «$1».",
        "enotif_reset": "Merk alle sidene som vitja",
index 8228b25..9ddd327 100644 (file)
        "versionrequired": "میڈیا وکی دا $1 ورژن چائیدا اے۔",
        "versionrequiredtext": "میڈیا وکی دا $1 ورژن اس صفحے نوں ویکھن واسطے چائیدا اے۔\n[[Special:Version|ورژن آلا صفحہ]] وکیھو",
        "ok": "ٹھیک اے",
+       "backlinksubtitle": "→ $1",
        "retrievedfrom": "\"$1\" توں لیا",
        "youhavenewmessages": "تواڈے لئی $1 ($2).",
        "youhavenewmessagesmulti": "تھاڈے ل‏ی $1 تے نوں سنیعہ اے۔",
        "nospecialpagetext": "<strong>تساں اک ناں منیا جان والا خاص صفہ منگیا اے.</strong>\n\nاک لسٹ خاص منے جان والے صفیاں تے ایتھے مل سکدی اے[[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "غلطی",
        "databaseerror": "ڈیٹابیس دی غلطی",
+       "databaseerror-error": "ایرر: $1",
        "laggedslavemode": "'''خبردار:''' صفے تے نیڑےتریڈے ہون والیاں تبدیلیاں کوئی نیں۔",
        "readonly": "ڈیٹابیس تے تالا",
        "enterlockreason": "تالا لان دی وجہ دسو تے اہ وی دسو جے کدوں تالا کھلے گا",
index 1984fd5..069224f 100644 (file)
        "prefs-editor": "Used in [[Special:Preferences]], tab \"Editing\" ({{int:prefs-editing}}).\n\n{{Identical|Editor}}",
        "prefs-preview": "Used in [[Special:Preferences]], tab \"Editing\".\n{{Identical|Preview}}",
        "prefs-advancedrc": "Used in [[Special:Preferences]], tab \"Recent changes\".\n{{Identical|Advanced options}}",
-       "prefs-advancedrendering": "Used in [[Special:Preferences]], tab \"Appearence\".\n{{Identical|Advanced options}}",
+       "prefs-advancedrendering": "Used in [[Special:Preferences]], tab \"Appearance\".\n{{Identical|Advanced options}}",
        "prefs-advancedsearchoptions": "Used in [[Special:Preferences]], tab \"Search options\".\n{{Identical|Advanced options}}",
        "prefs-advancedwatchlist": "Used in [[Special:Preferences]], tab \"Watchlist\".\n{{Identical|Advanced options}}",
        "prefs-displayrc": "\"Display\" is a noun that specifies the kind of \"options\". So translate as \"options about display\", not as \"display the options\".\n\nUsed in [[Special:Preferences]], tab \"Recent changes\". The display options refer to:\n* {{msg-mw|Recentchangesdays}}\n* {{msg-mw|Recentchangescount}}",
index 5f627d1..4f0e020 100644 (file)
        "returnto": "Înapoi la $1.",
        "tagline": "De la {{SITENAME}}",
        "help": "Ajutor",
+       "help-mediawiki": "Ajutor despre MediaWiki",
        "search": "Căutare",
        "search-ignored-headings": " #<!-- nu modificați acest rând --> <pre>\n# Titluri de secțiuni care vor fi ignorate de motorul de căutare.\n# Modificările efectuate aici își vor face efectul de îndată ce pagina care conține titlul de secțiune va fi indexată.\n# Puteți forța reindexarea paginii efectuând o modificare vidă.\n# Sintaxa este următoarea:\n#   * Orice rând precedat de caracterul „#” reprezintă un comentariu.\n#   * Orice rând nevid reprezintă exact titlu de secțiune de ignorat.\nReferințe\nLegături externe\nVezi și\n #</pre> <!-- nu modificați acest rând -->",
        "searchbutton": "Căutare",
        "editpage-invalidcontentmodel-text": "Modelul de conținut \"$1\" nu este acceptat.",
        "editpage-notsupportedcontentformat-title": "Formatul conținutului nu este acceptat",
        "editpage-notsupportedcontentformat-text": "Formatul de conținut $1 nu este acceptat de modelul de conținut $2.",
+       "slot-name-main": "Principal",
        "content-model-wikitext": "wikitext",
        "content-model-text": "text simplu",
        "content-model-javascript": "JavaScript",
        "localtime": "Ora locală:",
        "timezoneuseserverdefault": "Folosește ora implicită a wikiului ($1)",
        "timezoneuseoffset": "Altul (specifică diferența)",
+       "timezone-useoffset-placeholder": "Exemple de valori: \"-07:00\" sau \"01:00\"",
        "servertime": "Ora serverului:",
        "guesstimezone": "Încearcă determinarea automată a diferenței",
        "timezoneregion-africa": "Africa",
        "prefs-advancedwatchlist": "Opțiuni avansate",
        "prefs-displayrc": "Opțiuni de afișare",
        "prefs-displaywatchlist": "Opțiuni de afișare",
+       "prefs-changesrc": "Schimbări afișate",
+       "prefs-changeswatchlist": "Schimbări afișate",
        "prefs-pageswatchlist": "Pagini urmărite",
        "prefs-tokenwatchlist": "Jeton",
        "prefs-diffs": "Diferențe",
        "rcfilters-watchlist-markseen-button": "Marchează toate schimbările ca văzute",
        "rcfilters-watchlist-edit-watchlist-button": "Editați lista de pagini urmărite",
        "rcfilters-watchlist-showupdated": "Paginile care au fost modificate după ultima dumneavoastră vizită sunt afișate <strong>îngroșat</strong>.",
-       "rcfilters-preference-label": "Ascunde versiunea îmbunătățită a Schimbărilor Recente",
-       "rcfilters-preference-help": "Ascunde interfața schimbată în 2017 și toate uneltele adăugate de atunci.",
-       "rcfilters-watchlist-preference-label": "Ascunde versiunea îmbunătățită a liste de pagini urmărite",
+       "rcfilters-preference-label": "Folosește versiunea fără JavaScript",
+       "rcfilters-preference-help": "Încarcă Schimbările recente fără filtre de căutare sau evidențierea rezultatelor.",
+       "rcfilters-watchlist-preference-label": "Folosește versiunea fără JavaScript",
        "rcfilters-filter-showlinkedfrom-label": "Arată schimbările pe paginile către care există legături în",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Pages la care trimite</strong> pagina selectată",
        "rcfilters-filter-showlinkedto-label": "Arată schimbările din paginile ce trimit la",
        "ipb-blocklist-duration-left": "$1 a mai rămas",
        "block-actions": "Acțiuni pentru a bloca:",
        "block-expiry": "Expiră",
+       "block-options": "Opțiuni adiționale:",
+       "block-prevent-edit": "Modificare",
+       "block-reason": "Motiv:",
        "unblockip": "Deblochează adresă IP",
        "unblockiptext": "Folosiți formularul de mai jos pentru a restaura permisiunea de scriere pentru adrese IP sau nume de utilizator blocate anterior.",
        "ipusubmit": "Elimină blocarea",
        "pageinfo-display-title": "Titlu afișat",
        "pageinfo-default-sort": "Cheie de sortare implicită",
        "pageinfo-length": "Lungimea paginii (în octeți)",
+       "pageinfo-namespace": "Spațiu de nume",
        "pageinfo-article-id": "ID pagină",
        "pageinfo-language": "Limba conținutului paginii",
        "pageinfo-language-change": "modificare",
index b3c4d6a..c782555 100644 (file)
        "tog-watchlisthidebots": "Maršin fasalyaney tugu hawgayhayey ra",
        "tog-watchlisthideminor": "Fasalyan kayney tugu hawgayhayey ra",
        "tog-watchlisthideliu": "Goykaw hurantey fasalyaney tugu hawgayhayey ra",
+       "tog-watchlistreloadautomatically": "Hawgayhayey zumandi taaga ngey bonše waati kul kaŋ faya jinay ga barmay (JavaScript ga waažibi)",
+       "tog-watchlistunwatchlinks": "Muray/guna šilbay tenjanteyaŋ tonton ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) moo gunantey nda barmay ga (JavaScript ga waažibi ka goyoo woo tee)",
        "tog-watchlisthideanons": "Goykaw tugantey fasalyaney tugu hawgayhayey ra",
        "tog-watchlisthidepatrolled": "Faslayan kurantey tugu hawgayhayey ra",
+       "tog-watchlisthidecategorization": "Moo dumi kayandiyan tugu",
        "tog-ccmeonemails": "Batagawey kaŋ ay g'i sanba goykaw taney se gaabu yane",
        "tog-diffonly": "Ma ši moo gundekuna cebe fayarey cire",
        "tog-showhiddencats": "Duni tugantey cebe",
index b69d4cf..097499d 100644 (file)
        "right-noratelimit": "отпорност на ограничења",
        "right-import": "увожење страница из других викија",
        "right-importupload": "увожење страница из отпремљене датотеке",
-       "right-patrol": "означавање туђих измена патролираним",
-       "right-autopatrol": "аутоматско означавање измена патролираним",
-       "right-patrolmarks": "прегледање ознака за патролирање унутар скорашњих измена",
+       "right-patrol": "означавање измена других корисника патролираним",
+       "right-autopatrol": "аутоматско означавање сопствених измена патролираним",
+       "right-patrolmarks": "преглед ознака за патролирање у скорашњим изменама",
        "right-unwatchedpages": "прегледање списка ненадгледаних страница",
        "right-mergehistory": "обједињавање историја страница",
        "right-userrights": "уређивање свих корисничких права",
        "action-rollback": "брзо вратите измене последњег корисника који је уређивао одређену страницу",
        "action-import": "увозите странице из другог викија",
        "action-importupload": "увозите странице путем отпремања датотеке",
-       "action-patrol": "означите туђе измене као патролиране",
-       "action-autopatrol": "ознаÑ\87иÑ\82е Ñ\81опÑ\81Ñ\82вене Ð¸Ð·Ð¼ÐµÐ½Ðµ ÐºÐ°Ð¾ Ð¿Ð°Ñ\82Ñ\80олиÑ\80ане",
+       "action-patrol": "означите измене других корисника патролираним",
+       "action-autopatrol": "ознаÑ\87иÑ\82е Ñ\81опÑ\81Ñ\82вене Ð¸Ð·Ð¼ÐµÐ½Ðµ Ð¿Ð°Ñ\82Ñ\80олиÑ\80аним",
        "action-unwatchedpages": "прегледате списак ненадгледаних страница",
        "action-mergehistory": "обједините историју ове странице",
        "action-userrights": "уређујете сва корисничка права",
        "undelete-revision-row2": "$1 ($2) $3 . . $4 $5 $6 $7 $8",
        "namespace": "Именски простор:",
        "invert": "Обрни избор",
-       "tooltip-invert": "Означите ову кутијуцу да бисте сакрили промене на страницама у изабраном именском простору (и повезаним именским просторима, ако је означено)",
-       "tooltip-whatlinkshere-invert": "Означите ову кутијицу за сакривање веза са страница у изабраном именском простору.",
+       "tooltip-invert": "Означите ово поље да бисте сакрили промене на страницама у изабраном именском простору (и повезаним именским просторима, ако је означено)",
+       "tooltip-whatlinkshere-invert": "Означите ово поље да бисте сакрили везе са страница унутар изабраног именског простора.",
        "namespace_association": "Повезани именски простор",
-       "tooltip-namespace_association": "Означите ову кутијицу да бисте укључили и разговор или именски простор теме која је повезана са изабраним именским простором",
+       "tooltip-namespace_association": "Означите ово поље да бисте укључили разговор или именски простор теме која је повезана са изабраним именским простором",
        "blanknamespace": "(главни)",
        "contributions": "{{GENDER:$1|Доприноси корисника|Доприноси кориснице|Кориснички доприноси}}",
        "contributions-title": "Доприноси {{GENDER:$1|корисника|кориснице}} $1",
        "unlockconfirm": "Желим да откључам базу.",
        "lockbtn": "Закључај базу",
        "unlockbtn": "Откључај базу",
-       "locknoconfirm": "Нисте проверили потврдну кутију.",
+       "locknoconfirm": "Нисте потврдили поље за потврду.",
        "lockdbsuccesssub": "База је закључана",
        "unlockdbsuccesssub": "База је откључана",
        "lockdbsuccesstext": "База података је закључана.<br />\nСетите се да је [[Special:UnlockDB|откључате]] када завршите с одржавањем.",
        "pageinfo-user-id": "ID корисника",
        "pageinfo-file-hash": "Hash вредност",
        "pageinfo-view-protect-log": "Прикажи дневник заштите за ову страницу.",
-       "markaspatrolleddiff": "Ð\9eзнаÑ\87и ÐºÐ°Ð¾ Ð¿Ð°Ñ\82Ñ\80олиÑ\80ано",
-       "markaspatrolledtext": "Означи страницу као патролирану",
-       "markaspatrolledtext-file": "Ð\9eзнаÑ\87и Ð¾Ð²Ñ\83 Ð²ÐµÑ\80зиÑ\98Ñ\83 Ð´Ð°Ñ\82оÑ\82еке ÐºÐ°Ð¾ Ð¿Ð°Ñ\82Ñ\80олиÑ\80анÑ\83",
-       "markedaspatrolled": "Ð\9eзнаÑ\87ено ÐºÐ°Ð¾ Ð¿Ð°Ñ\82Ñ\80олиÑ\80ано",
-       "markedaspatrolledtext": "Ð\98забÑ\80ана Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86е [[:$1]] Ð¾Ð·Ð½Ð°Ñ\87ена Ñ\98е ÐºÐ°Ð¾ Ð¿Ð°Ñ\82Ñ\80олиÑ\80ана.",
+       "markaspatrolleddiff": "Ð\9eзнаÑ\87и Ð¿Ð°Ñ\82Ñ\80олиÑ\80аном",
+       "markaspatrolledtext": "Означи ову страницу патролираном",
+       "markaspatrolledtext-file": "Ð\9eзнаÑ\87и Ð¾Ð²Ñ\83 Ð²ÐµÑ\80зиÑ\98Ñ\83 Ð´Ð°Ñ\82оÑ\82еке Ð¿Ð°Ñ\82Ñ\80олиÑ\80аном",
+       "markedaspatrolled": "Ð\9eзнаÑ\87ено Ð¿Ð°Ñ\82Ñ\80олиÑ\80аним",
+       "markedaspatrolledtext": "Ð\98забÑ\80ана Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86е [[:$1]] Ð¾Ð·Ð½Ð°Ñ\87ена Ñ\98е Ð¿Ð°Ñ\82Ñ\80олиÑ\80аном.",
        "rcpatroldisabled": "Патролирање скорашњих измена је онемогућено",
        "rcpatroldisabledtext": "Функција патролирања скорашњих измена је тренутно онемогућена.",
-       "markedaspatrollederror": "Ð\9dиÑ\98е Ð¼Ð¾Ð³Ñ\83Ñ\9bе Ð¾Ð·Ð½Ð°Ñ\87иÑ\82и ÐºÐ°Ð¾ Ð¿Ð°Ñ\82Ñ\80олиÑ\80ано",
-       "markedaspatrollederrortext": "Ð\9cоÑ\80аÑ\82е Ð½Ð°Ð²ÐµÑ\81Ñ\82и Ð¸Ð·Ð¼ÐµÐ½Ñ\83 Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ñ\98е Ð¾Ð·Ð½Ð°Ñ\87или ÐºÐ°Ð¾ Ð¿Ð°Ñ\82Ñ\80олиÑ\80анÑ\83.",
-       "markedaspatrollederror-noautopatrol": "Ð\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¾Ð·Ð½Ð°Ñ\87иÑ\82е Ñ\81воÑ\98е Ð¿Ñ\80омене ÐºÐ°Ð¾ Ð¿Ð°Ñ\82Ñ\80олиÑ\80ане.",
-       "markedaspatrollednotify": "Ð\9eва Ð¿Ñ\80омена Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86и â\80\9e$1â\80\9d Ð¾Ð·Ð½Ð°Ñ\87ена Ñ\98е ÐºÐ°Ð¾ Ð¿Ð°Ñ\82Ñ\80олиÑ\80ана.",
-       "markedaspatrollederrornotify": "Ð\9eзнаÑ\87аваÑ\9aе Ð¾Ð²Ðµ Ð¸Ð·Ð¼ÐµÐ½Ðµ Ð¿Ð°Ñ\82Ñ\80олиÑ\80аном Ð½Ð¸Ñ\98е Ñ\83Ñ\81пело.",
+       "markedaspatrollederror": "Ð\9dиÑ\98е Ð¼Ð¾Ð³Ñ\83Ñ\9bе Ð¾Ð·Ð½Ð°Ñ\87иÑ\82и Ð¿Ð°Ñ\82Ñ\80олиÑ\80аним",
+       "markedaspatrollederrortext": "Ð\9cоÑ\80аÑ\82е Ð½Ð°Ð²ÐµÑ\81Ñ\82и Ð¸Ð·Ð¼ÐµÐ½Ñ\83 Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ñ\98е Ð¾Ð·Ð½Ð°Ñ\87или Ð¿Ð°Ñ\82Ñ\80олиÑ\80аном.",
+       "markedaspatrollederror-noautopatrol": "Ð\9dиÑ\98е Ð²Ð°Ð¼ Ð´Ð¾Ð·Ð²Ð¾Ñ\99ено Ð´Ð° Ð¾Ð·Ð½Ð°Ñ\87аваÑ\82е Ñ\81опÑ\81Ñ\82вене Ð¿Ñ\80омене Ð¿Ð°Ñ\82Ñ\80олиÑ\80аним.",
+       "markedaspatrollednotify": "Ð\9eва Ð¿Ñ\80омена Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86и â\80\9e$1â\80\9d Ð¾Ð·Ð½Ð°Ñ\87ена Ñ\98е Ð¿Ð°Ñ\82Ñ\80олиÑ\80аном.",
+       "markedaspatrollederrornotify": "Означавање патролираном није успело.",
        "patrol-log-page": "Дневник патролирања",
        "patrol-log-header": "Ово је дневник патролираних измена.",
        "confirm-markpatrolled-button": "У реду",
-       "confirm-markpatrolled-top": "Ð\9eзнаÑ\87иÑ\82и Ð¸Ð·Ð¼ÐµÐ½Ñ\83 $3 Ñ\81Ñ\82Ñ\80аниÑ\86е $2 ÐºÐ°Ð¾ Ð¿Ð°Ñ\82Ñ\80олиÑ\80анÑ\83?",
+       "confirm-markpatrolled-top": "Ð\9eзнаÑ\87иÑ\82и Ð¸Ð·Ð¼ÐµÐ½Ñ\83 $3 Ñ\81Ñ\82Ñ\80аниÑ\86е $2 Ð¿Ð°Ñ\82Ñ\80олиÑ\80аном?",
        "deletedrevision": "Избрисана стара измена $1.",
        "filedeleteerror-short": "Грешка при брисању датотеке: $1",
        "filedeleteerror-long": "Дошло је до грешака при брисању датотеке:\n\n$1",
        "logentry-move-move-noredirect": "$1 је {{GENDER:$2|преместио|преместила}} страницу $3 на $4 без остављања преусмерења",
        "logentry-move-move_redir": "$1 је {{GENDER:$2|преместио|преместила}} страницу $3 на $4 преко преусмерења",
        "logentry-move-move_redir-noredirect": "$1 је {{GENDER:$2|преместио|преместила}} страницу $3 на $4 преко преусмерења без остављања преусмерења",
-       "logentry-patrol-patrol": "$1 Ñ\98е {{GENDER:$2|ознаÑ\87ио|ознаÑ\87ила}} Ð¸Ð·Ð¼ÐµÐ½Ñ\83 $4 Ñ\81Ñ\82Ñ\80аниÑ\86е $3 ÐºÐ°Ð¾ Ð¿Ð°Ñ\82Ñ\80олиÑ\80анÑ\83",
-       "logentry-patrol-patrol-auto": "$1 Ñ\98е Ð°Ñ\83Ñ\82омаÑ\82Ñ\81ки {{GENDER:$2|ознаÑ\87ио|ознаÑ\87ила}} Ð¸Ð·Ð¼ÐµÐ½Ñ\83 $4 Ñ\81Ñ\82Ñ\80аниÑ\86е $3 ÐºÐ°Ð¾ Ð¿Ð°Ñ\82Ñ\80олиÑ\80анÑ\83",
+       "logentry-patrol-patrol": "$1 Ñ\98е {{GENDER:$2|ознаÑ\87ио|ознаÑ\87ила}} Ð¸Ð·Ð¼ÐµÐ½Ñ\83 $4 Ñ\81Ñ\82Ñ\80аниÑ\86е $3 Ð¿Ð°Ñ\82Ñ\80олиÑ\80аном",
+       "logentry-patrol-patrol-auto": "$1 Ñ\98е Ð°Ñ\83Ñ\82омаÑ\82Ñ\81ки {{GENDER:$2|ознаÑ\87ио|ознаÑ\87ила}} Ð¸Ð·Ð¼ÐµÐ½Ñ\83 $4 Ñ\81Ñ\82Ñ\80аниÑ\86е $3 Ð¿Ð°Ñ\82Ñ\80олиÑ\80аном",
        "logentry-newusers-newusers": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог",
        "logentry-newusers-create": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог",
        "logentry-newusers-create2": "$1 је {{GENDER:$2|отворио|отворила}} кориснички налог $3",
index 1c0708d..ca74993 100644 (file)
        "ipbreason": "காரணம்:",
        "ipbreason-dropdown": "*பொதுவான தடைக் காரணங்கள்\n** பொய்யான தகவல்களை இடல்\n** பக்கங்களிலிருந்து உள்ளடக்கங்களை நீக்கல்\n** எரித இணைப்புகளை வெளியிணைப்பாக கொடுத்தல்\n** பக்கங்களுக்கு அர்த்தமற்ற உள்ளடக்கங்களை இணைத்தல்\n** பொறுப்பற்ற நடிவடிக்கைகள்\n** ஒரு பயனர் பல கணக்குகளைப் பேணல்\n** ஏற்றுக்கொள்ளப்படமுடியாத பயனர் பெயர்",
        "ipb-hardblock": "இந்த IP முகவரியில் இருந்து புகுபதிகை செய்த பயனர்கள் தொகுப்பதைத் தடுக்கவும்",
-       "ipbcreateaccount": "கணக்குகள் தொடங்குவதைத் தடு",
-       "ipbemailban": "பயனரà¯\8d à®®à®¿à®©à¯\8dனà®\9eà¯\8dà®\9aலà¯\8d à®\9aà¯\86யà¯\8dவதà¯\88தà¯\8d à®¤à®\9fà¯\81",
+       "ipbcreateaccount": "கணக்கு உருவாக்கம்",
+       "ipbemailban": "மினà¯\8dனà®\9eà¯\8dà®\9aலà¯\8d à®\85னà¯\81பà¯\8dபà¯\81தலà¯\8d",
        "ipbenableautoblock": "தானியக்கமாக இப்பயனர் கடைசியாகப் பயன்படுத்திய ஐ.பி முகவரியையும் பங்களிக்க முயலும் ஐ.பி. முகவரிகளையும் தடை செய்",
        "ipbsubmit": "இப் பயனரைத் தடு",
        "ipbother": "வேறு நேரம்:",
index 38f7521..d96d053 100644 (file)
        "postedit-confirmation-created": "ಈ ಪುಟೋನು ಉಂಡು ಮಾನ್ತುಂಡು.",
        "postedit-confirmation-saved": "ಇರೇನಾ ಸಂಪಾದನೆನ್ ಒರಿಪಾತುಂಡು.",
        "edit-already-exists": "ಪೊಸ ಪುಟೋನು ಉಂಡು ಮಲ್ಪರೆ ಅಯಿಜಿ. ಅವ್ವು ದುಂಬೇ ಉಂಡು.",
+       "slot-name-main": "ಮುಕ್ಯ",
        "content-model-wikitext": "ವಿಕಿಪಠ್ಯ",
+       "content-model-text": "ಸುಲಬೊತ ಪಠ್ಯ",
+       "content-model-javascript": "ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್",
+       "content-json-empty-object": "ಖಾಲಿ ವಿಸಯೊ",
        "undo-failure": "ನೆತ್ತ ನಡುಟು ಬೇತೆ ಬದಲಾವಣೆಲು ಆಯಿನೆಡ್ದಾತ್ರ ಈ ಬದಲಾವಣೆನ್ ದುಂಬುದಲೆಕೊ ಮಲ್ಪೆರೆ ಸಾದ್ಯೊ ಇಜ್ಜಿ.",
        "viewpagelogs": "ಈ ಪುಟೊತ ದಾಕಲೆಲೆನ್ ತೂಲೆ",
        "nohistory": "ಈ ಪುಟಕ್ ಬದಲಾವಣೆದ ಇತಿಹಾಸ ಇಜ್ಜಿ",
index 489ead6..8dbd8eb 100644 (file)
        "filerenameerror": "Не вдалося перейменувати файл «$1» на «$2».",
        "filedeleteerror": "Не вдалося вилучити файл «$1».",
        "directorycreateerror": "Не вдалося створити каталог \"$1\".",
-       "directoryreadonlyerror": "Каталог \"$1\" доступний лише для читання.",
+       "directoryreadonlyerror": "Каталог «$1» доступний лише для читання.",
        "directorynotreadableerror": "Каталог \"$1\" нечитабельний.",
        "filenotfound": "Не вдалося знайти файл «$1».",
        "unexpected": "Неочікуване значення: «$1»=«$2».",
index dda88f9..a2440ea 100644 (file)
        "noindex-category": "غیر فہرست شدہ صفحات",
        "broken-file-category": "فائلوں کے شکستہ روابط پر مشتمل صفحات",
        "categoryviewer-pagedlinks": "($1) ($2)",
+       "category-header-numerals": "$1–$2",
        "about": "تعارف",
        "article": "صفحہ مواد",
        "newwindow": "(نئی ونڈو میں کھولیں)",
        "helppage-top-gethelp": "مدد",
        "mainpage": "صفحۂ اول",
        "mainpage-description": "صفحۂ اول",
-       "policy-url": "Project:حکمتِ عملی",
+       "policy-url": "Project:حکمت عملی",
        "portal": "دیوان عام",
        "portal-url": "Project:دیوان عام",
        "privacy": "اخفائے راز کے اصول",
        "versionrequired": "میڈیا ویکی کا $1 نسخہ لازمی چاہئیے.",
        "versionrequiredtext": "اِس صفحہ کو استعمال کرنے کیلئے میڈیاویکی کا $1 نسخہ چاہئیے.\n\n\nدیکھئے [[خاص:نسخہ|صفحۂ نسخہ]]",
        "ok": "ٹھیک ہے",
+       "pagetitle": "$1 - {{SITENAME}}",
        "pagetitle-view-mainpage": "{{SITENAME}}",
        "backlinksubtitle": "→ $1",
        "retrievedfrom": "اخذ کردہ از «$1»",
        "ns-specialprotected": "خاص صفحات کی تدوین نہیں کی جاسکتی.",
        "titleprotected": "اس عنوان کو [[User:$1|$1]] نے تخلیق سے محفوظ کیا ہے.\nوجہ یہ بتائی گئی ہے: <em>$2</em>.",
        "filereadonlyerror": "فائل «$1» میں تبدیلی ممکن نہیں کیونکہ خزانہ فائل «$2» فقط خواندگی حالت میں ہے۔\n\nانتظامیہ کی جانب سے مقفل کرنے کی حسب ذیل توجیہ پیش کی گئی ہے:\n\n«$3»",
+       "invalidtitle": "غلط عنوان",
        "invalidtitle-knownnamespace": "«$2» نام فضا میں «$3» متن پر مشتمل عنوان نادرست ہے",
        "invalidtitle-unknownnamespace": "نامعلوم نام فضا عدد «$1» اور «$2» متن پر مشتمل عنوان نادرست ہے",
        "exception-nologin": "غیر داخل نوشتہ",
        "nocookiesnew": "کھاتۂ صارف بنادیا گیا ہے، لیکن آپ کا داخلہ نہیں ہوا۔\nصارفین کے داخلہ کے لیے {{SITENAME}} کوکیز استعمال کرتا ہے۔\nآپ کے ہاں کوکیز غیر فعال ہیں۔\nبراہِ مہربانی، انہیں فعال کریں، اور پھر اپنے نئے صارف نام اور کلمۂ شناخت (پاسورڈ) کے ساتھ داخل ہو جائیں۔",
        "nocookieslogin": "صارفین کے داخل ہونے کیلئے {{SITENAME}} کوکیز استعمال کرتا ہے.\nآپ کے ہاں کوکیز غیر فعال ہیں.\nانہیں فعال کرنے کے بعد پھر کوشش کیجئے.",
        "nocookiesfornew": "اس صارف نام کا کھاتہ نہیں بن سکا۔ہم اس بات کی وضاحت نہیں کر سکتے (کہ ایسا کیوں ہوا)، براہ مہربانی! آپ\nیقین کر لیں کہ آپ کی کوکیز فعال ہیں، صفحہ تازہ کریں اور پھر کوشش کریں۔",
+       "nocookiesforlogin": "{{int:nocookieslogin}}",
        "createacct-loginerror": "کھاتہ بن چکا ہے لیکن آپ اس میں خودکار طور پر داخل نہیں ہو سکے۔ براہ کرم [[Special:UserLogin|دستی طور پر داخل ہونے کی کوشش کریں]]۔",
        "noname": "آپ نے صحیح صارف نام نہیں چنا۔",
        "loginsuccesstitle": "داخلہ کامیاب",
        "autoblockid": "خودکار پابندی #$1",
        "block": "صارف مسدود کریں",
        "unblock": "صارف سے پابندی ہٹائیں",
-       "blockip": "داخلہ ممنوع برائے صارف",
+       "blockip": "{{GENDER:$1|صارف}} پر پابندی لگائیں",
+       "blockiptext": "کسی خاص آئی پی یا صارف کو بلاک کرنے کے لیے درج ذیل فارم استعمال کریں۔\nخیال رہے کہ یہ کارروائی محض تخریب کاری کی روک تھام کے لیے اور [[{{MediaWiki:Policy-url}}|پالیسی]] کے مطابق ہونی چاہیے۔ ذیل میں پابندی لگانے کی وجہ پوری وضاحت کے ساتھ درج کریں (مثلاً جن صفحوں میں تخریب کاری ہوئی ہے ان کے نام لکھیں)۔ آپ [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] سنٹیکس کی مدد سے آئی پی رینج کو بھی بلاک کر سکتے ہیں جن کی زیادہ سے زیادہ حد IPv4 کے لیے /$1 اور IPv6 کے لیے /$2 ہے۔",
        "ipaddressorusername": "آئی پی پتہ یا صارف نام:",
        "ipbreason": "وجہ:",
        "ipbreason-dropdown": "* پابندی کی عام وجوہات\n** غلط معلومات کا اندراج\n** صفحات سے متن کا مٹانا\n** بیرونی روابط میں بے کار روابط کی فاضل کاری\n** صفحات میں لغو چیزوں کا اندراج\n** بدتمیزی/بداخلاقی\n** متعدد کھاتوں کا استعمال\n** ناقابلِ قبول صارف نام",
index 3b8ea58..c0570cf 100644 (file)
@@ -10,7 +10,6 @@
     "selenium-test": "wdio ./tests/selenium/wdio.conf.js"
   },
   "devDependencies": {
-    "deepmerge": "1.3.2",
     "eslint-config-wikimedia": "0.10.0",
     "grunt": "1.0.3",
     "grunt-banana-checker": "0.6.0",
index 1971001..2987a12 100644 (file)
@@ -183,11 +183,6 @@ return [
                'dependencies' => 'mediawiki.String',
                'targets' => [ 'desktop', 'mobile' ],
        ],
-       'jquery.byteLimit' => [
-               'dependencies' => 'jquery.lengthLimit',
-               'deprecated' => 'Use "jquery.lengthLimit" instead.',
-               'targets' => [ 'desktop', 'mobile' ],
-       ],
        'jquery.checkboxShiftClick' => [
                'scripts' => 'resources/src/jquery/jquery.checkboxShiftClick.js',
                'targets' => [ 'desktop', 'mobile' ],
@@ -888,54 +883,6 @@ return [
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
-       'mediawiki.api.category' => [
-               'deprecated' => 'Use "mediawiki.api" instead.',
-               'dependencies' => 'mediawiki.api',
-       ],
-       'mediawiki.api.edit' => [
-               'deprecated' => 'Use "mediawiki.api" instead.',
-               'dependencies' => [
-                       'mediawiki.api',
-               ],
-               'targets' => [ 'desktop', 'mobile' ],
-       ],
-       'mediawiki.api.login' => [
-               'deprecated' => 'Use "mediawiki.api" instead.',
-               'dependencies' => 'mediawiki.api',
-       ],
-       'mediawiki.api.options' => [
-               'deprecated' => 'Use "mediawiki.api" instead.',
-               'dependencies' => 'mediawiki.api',
-               'targets' => [ 'desktop', 'mobile' ],
-       ],
-       'mediawiki.api.parse' => [
-               'deprecated' => 'Use "mediawiki.api" instead.',
-               'dependencies' => 'mediawiki.api',
-               'targets' => [ 'desktop', 'mobile' ],
-       ],
-       'mediawiki.api.upload' => [
-               'deprecated' => 'Use "mediawiki.api" instead.',
-               'dependencies' => 'mediawiki.api',
-               'targets' => [ 'desktop', 'mobile' ],
-       ],
-       'mediawiki.api.user' => [
-               'deprecated' => 'Use "mediawiki.api" instead.',
-               'dependencies' => 'mediawiki.api',
-               'targets' => [ 'desktop', 'mobile' ],
-       ],
-       'mediawiki.api.watch' => [
-               'deprecated' => 'Use "mediawiki.api" instead.',
-               'dependencies' => 'mediawiki.api',
-       ],
-       'mediawiki.api.messages' => [
-               'deprecated' => 'Use "mediawiki.api" instead.',
-               'dependencies' => 'mediawiki.api',
-               'targets' => [ 'desktop', 'mobile' ],
-       ],
-       'mediawiki.api.rollback' => [
-               'deprecated' => 'Use "mediawiki.api" instead.',
-               'dependencies' => 'mediawiki.api',
-       ],
        'mediawiki.content.json' => [
                'styles' => 'resources/src/mediawiki.content.json.less',
        ],
index f2251f5..01d2ba5 100644 (file)
                                        context.data.$textbox.val( result.data( 'text' ) );
                                        // .val() doesn't call any event handlers, so
                                        // let the world know what happened
-                                       context.data.$textbox.change();
+                                       context.data.$textbox.trigger( 'change' );
                                }
                                context.data.$textbox.trigger( 'change' );
                        }
                                                                }
                                                                // Always bring focus to the textbox, as that's probably where the user expects it
                                                                // if they were just typing.
-                                                               context.data.$textbox.focus();
+                                                               context.data.$textbox.trigger( 'focus' );
                                                        } )
                                        )
                                        .append(
                                                                }
                                                                // Always bring focus to the textbox, as that's probably where the user expects it
                                                                // if they were just typing.
-                                                               context.data.$textbox.focus();
+                                                               context.data.$textbox.trigger( 'focus' );
                                                        } )
                                                        .on( 'mousemove', function ( e ) {
                                                                context.data.selectedWithMouse = true;
index 1af4a7a..b5a9665 100644 (file)
@@ -11,7 +11,7 @@
 }
 
 /* Show/hide animation is incorrect if the table has a margin set. Extra
- * "table.wikitable" is needed in the selector for CSS specificity. */
-table.wikitable.preview-limit-report {
+ * ".wikitable" is needed in the selector for CSS specificity. */
+.wikitable.preview-limit-report {
        margin: 0;
 }
index e359416..1e7a6e4 100644 (file)
@@ -3,7 +3,7 @@
  */
 ( function () {
        $( function () {
-               mw.util.$content.dblclick( function ( e ) {
+               mw.util.$content.on( 'dblclick', function ( e ) {
                        var $a;
                        // Recheck preference so extensions can do a hack to disable this code.
                        if ( parseInt( mw.user.options.get( 'editondblclick' ), 10 ) ) {
index acec9ca..c21b254 100644 (file)
@@ -283,8 +283,8 @@ img.thumbborder {
 /**
  * Table rendering
  */
-/* Compare `table.wikitable` in shared.css */
-table.wikitable,
+/* Compare `.wikitable` in shared.css */
+.wikitable,
 .mw_metadata {
        background: #fff;
        margin: 1em 0;
@@ -293,16 +293,16 @@ table.wikitable,
        font-size: 10pt;
 }
 
-table.wikitable > caption,
+.wikitable > caption,
 .mw_metadata caption {
        padding: 5px;
        font-size: 10pt;
 }
 
-table.wikitable > tr > th,
-table.wikitable > tr > td,
-table.wikitable > * > tr > th,
-table.wikitable > * > tr > td,
+.wikitable > tr > th,
+.wikitable > tr > td,
+.wikitable > * > tr > th,
+.wikitable > * > tr > td,
 .mw_metadata th,
 .mw_metadata td {
        /* Important is required to override any inline styles provided by editors */
@@ -313,8 +313,8 @@ table.wikitable > * > tr > td,
        padding: 0.4em 0.6em;
 }
 
-table.wikitable > tr > th,
-table.wikitable > * > tr > th,
+.wikitable > tr > th,
+.wikitable > * > tr > th,
 .mw_metadata th {
        text-align: center;
 }
index b40273d..affa153 100644 (file)
@@ -326,7 +326,7 @@ a.new {
  * wikitable class for skinning normal tables
  * keep in sync with commonPrint.css
  */
-table.wikitable {
+.wikitable {
        background-color: #f8f9fa;
        color: #222;
        margin: 1em 0;
@@ -334,21 +334,21 @@ table.wikitable {
        border-collapse: collapse;
 }
 
-table.wikitable > tr > th,
-table.wikitable > tr > td,
-table.wikitable > * > tr > th,
-table.wikitable > * > tr > td {
+.wikitable > tr > th,
+.wikitable > tr > td,
+.wikitable > * > tr > th,
+.wikitable > * > tr > td {
        border: 1px solid #a2a9b1;
        padding: 0.2em 0.4em;
 }
 
-table.wikitable > tr > th,
-table.wikitable > * > tr > th {
+.wikitable > tr > th,
+.wikitable > * > tr > th {
        background-color: #eaecf0;
        text-align: center;
 }
 
-table.wikitable > caption {
+.wikitable > caption {
        font-weight: bold;
 }
 
index bea197a..a8ab818 100644 (file)
@@ -7,6 +7,12 @@
 
 .TablePager {
        min-width: 80%;
+
+       // Remove as soon as `.mw-datatable` receives this `padding`, see T214208
+       td,
+       th {
+               padding: 0.2em 0.4em;
+       }
 }
 
 .TablePager .TablePager_sort-ascending a {
index d0cc117..6d45144 100644 (file)
                mw.rcfilters.ui.FilterTagMultiselectWidget.parent.prototype.doInputEscape.call( this );
 
                // Blur the input
-               this.input.$input.blur();
+               this.input.$input.trigger( 'blur' );
        };
 
        /**
index 426c47f..dc76085 100644 (file)
@@ -57,7 +57,7 @@
         * Respond to the user choosing a title
         */
        mw.rcfilters.ui.RclTargetPageWidget.prototype.onLookupMenuItemChoose = function () {
-               this.titleSearch.$input.blur();
+               this.titleSearch.$input.trigger( 'blur' );
        };
 
        /**
index 3882a95..f1364d1 100644 (file)
                        this.saveButton.toggle( isEdit );
 
                        if ( isEdit ) {
-                               this.editInput.$input.focus();
+                               this.editInput.$input.trigger( 'focus' );
                        }
                        this.editing = isEdit;
                }
index 83a39d4..19eac98 100644 (file)
                                } ).done( function ( ok ) {
                                        ok = ok || suppressErrors;
                                        that.setIcon( ok ? null : 'alert' );
-                                       that.setIconTitle( ok ? '' : mw.message( 'apisandbox-alert-field' ).plain() );
+                                       that.setTitle( ok ? '' : mw.message( 'apisandbox-alert-field' ).plain() );
                                } );
                        }
                },
                        apiCheckValid: function () {
                                var ok = this.getApiValue() !== undefined || suppressErrors;
                                this.setIcon( ok ? null : 'alert' );
-                               this.setIconTitle( ok ? '' : mw.message( 'apisandbox-alert-field' ).plain() );
+                               this.setTitle( ok ? '' : mw.message( 'apisandbox-alert-field' ).plain() );
                                return $.Deferred().resolve( ok ).promise();
                        }
                },
                                }
 
                                this.setIcon( ok ? null : 'alert' );
-                               this.setIconTitle( ok ? '' : mw.message( 'apisandbox-alert-field' ).plain() );
+                               this.setTitle( ok ? '' : mw.message( 'apisandbox-alert-field' ).plain() );
                                return $.Deferred().resolve( ok ).promise();
                        },
                        createTagItemWidget: function ( data, label ) {
                        apiCheckValid: function () {
                                var ok = this.getValue() !== null || suppressErrors;
                                this.setIcon( ok ? null : 'alert' );
-                               this.setIconTitle( ok ? '' : mw.message( 'apisandbox-alert-field' ).plain() );
+                               this.setTitle( ok ? '' : mw.message( 'apisandbox-alert-field' ).plain() );
                                return $.Deferred().resolve( ok ).promise();
                        }
                }
                                                isInteger: true
                                        } );
                                        widget.setIcon = widget.input.setIcon.bind( widget.input );
-                                       widget.setIconTitle = widget.input.setIconTitle.bind( widget.input );
+                                       widget.setTitle = widget.input.setTitle.bind( widget.input );
                                        widget.getValidity = widget.input.getValidity.bind( widget.input );
                                        widget.paramInfo = pi;
                                        $.extend( widget, WidgetMethods.textInputWidget );
                this.outlineItem.setLevel( this.indentLevel );
                this.outlineItem.setLabel( this.displayText );
                this.outlineItem.setIcon( this.apiIsValid || suppressErrors ? null : 'alert' );
-               this.outlineItem.setIconTitle(
+               this.outlineItem.setTitle(
                        this.apiIsValid || suppressErrors ? '' : mw.message( 'apisandbox-alert-page' ).plain()
                );
        };
                                that.apiIsValid = Array.prototype.indexOf.call( arguments, false ) === -1;
                                if ( that.getOutlineItem() ) {
                                        that.getOutlineItem().setIcon( that.apiIsValid || suppressErrors ? null : 'alert' );
-                                       that.getOutlineItem().setIconTitle(
+                                       that.getOutlineItem().setTitle(
                                                that.apiIsValid || suppressErrors ? '' : mw.message( 'apisandbox-alert-page' ).plain()
                                        );
                                }
index 3ad6e29..b545164 100644 (file)
        mw.widgets.datetime.CalendarWidget.prototype.onPrevClick = function () {
                this.setFocusedDate( this.adjustDate( this.getFocusedDate(), 'month', -1 ) );
                if ( !this.$widget || OO.ui.contains( this.$element[ 0 ], document.activeElement, true ) ) {
-                       this.$element.focus();
+                       this.$element.trigger( 'focus' );
                }
        };
 
        mw.widgets.datetime.CalendarWidget.prototype.onNextClick = function () {
                this.setFocusedDate( this.adjustDate( this.getFocusedDate(), 'month', 1 ) );
                if ( !this.$widget || OO.ui.contains( this.$element[ 0 ], document.activeElement, true ) ) {
-                       this.$element.focus();
+                       this.$element.trigger( 'focus' );
                }
        };
 
                this.setFocusedDate( $button.getData() );
                this.setSelected( [ $button.getData() ] );
                if ( !this.$widget || OO.ui.contains( this.$element[ 0 ], document.activeElement, true ) ) {
-                       this.$element.focus();
+                       this.$element.trigger( 'focus' );
                }
        };
 
index 5e4df47..dff313d 100644 (file)
                        .oo-ui-buttonElement-button {
                                width: 100%;
                                border: 1px solid rgba( 255, 255, 255, 0 );
-                               .oo-ui-transition(
-                                       background-color @transition-base,
-                                       color @transition-base,
-                                       border-color @transition-base
-                               );
+                               .oo-ui-transition( ~'background-color @{transition-base}, color @{transition-base}, border-color @{transition-base}' );
                        }
 
                        &.mw-widgets-datetime-calendarWidget-extra .oo-ui-buttonElement-button {
index f4ad578..fee27c5 100644 (file)
         */
        mw.widgets.datetime.DateTimeInputWidget.prototype.focus = function () {
                if ( !this.getFocusedField().length ) {
-                       this.$fields.find( '.mw-widgets-datetime-dateTimeInputWidget-editField' ).first().focus();
+                       this.$fields.find( '.mw-widgets-datetime-dateTimeInputWidget-editField' ).first().trigger( 'focus' );
                }
                return this;
        };
index a0d6f4a..1dfc73b 100644 (file)
@@ -25,8 +25,7 @@
        }
 }
 
-.oo-ui-transition( @value1, @value2: X, ... ) {
-       @value: ~`'@{arguments}'.replace(/[\[\]]|\,\sX/g, '')`; // stylelint-disable-line function-comma-space-after, function-parentheses-space-inside, function-whitespace-after, value-keyword-case
+.oo-ui-transition( @value ) {
        -webkit-transition: @value;
        -moz-transition: @value;
        transition: @value;
index 4d58f18..3a71760 100644 (file)
                                                // Tabbing backward from text input: normal browser behavior
                                        } else {
                                                // Tabbing forward from text input: just focus the calendar
-                                               this.calendar.$element.focus();
+                                               this.calendar.$element.trigger( 'focus' );
                                                return false;
                                        }
                                }
                                if ( e.which === OO.ui.Keys.TAB ) {
                                        if ( e.shiftKey ) {
                                                // Tabbing backward from calendar: just focus the text input
-                                               this.textInput.$input.focus();
+                                               this.textInput.$input.trigger( 'focus' );
                                                return false;
                                        } else {
                                                // Tabbing forward from calendar: focus the text input, then allow normal browser
                                                // behavior to move focus to next focusable after it
-                                               this.textInput.$input.focus();
+                                               this.textInput.$input.trigger( 'focus' );
                                        }
                                }
                        }.bind( this ) );
                if ( userSelected ) {
                        // Prevent focusing the handle from reopening the calendar
                        this.closing = true;
-                       this.$handle.focus();
+                       this.$handle.trigger( 'focus' );
                        this.closing = false;
                }
 
                this.textInput.toggle( true );
                this.calendar.toggle( true );
 
-               this.textInput.$input.focus();
+               this.textInput.$input.trigger( 'focus' );
        };
 
        /**
index f1c0c6f..55d8cf5 100644 (file)
                mw.widgets.SearchInputWidget.parent.prototype.onLookupMenuItemChoose.apply( this, arguments );
 
                if ( this.performSearchOnClick ) {
-                       this.$element.closest( 'form' ).submit();
+                       this.$element.closest( 'form' ).trigger( 'submit' );
                }
        };
 
diff --git a/tests/phpunit/data/MSCompoundFileReader/calc.xls b/tests/phpunit/data/MSCompoundFileReader/calc.xls
new file mode 100644 (file)
index 0000000..f15e2c1
Binary files /dev/null and b/tests/phpunit/data/MSCompoundFileReader/calc.xls differ
diff --git a/tests/phpunit/data/MSCompoundFileReader/dir-beyond-end.xls b/tests/phpunit/data/MSCompoundFileReader/dir-beyond-end.xls
new file mode 100644 (file)
index 0000000..b2aebf4
Binary files /dev/null and b/tests/phpunit/data/MSCompoundFileReader/dir-beyond-end.xls differ
diff --git a/tests/phpunit/data/MSCompoundFileReader/excel2016-compat97.xls b/tests/phpunit/data/MSCompoundFileReader/excel2016-compat97.xls
new file mode 100755 (executable)
index 0000000..8895407
Binary files /dev/null and b/tests/phpunit/data/MSCompoundFileReader/excel2016-compat97.xls differ
diff --git a/tests/phpunit/data/MSCompoundFileReader/fat-loop.xls b/tests/phpunit/data/MSCompoundFileReader/fat-loop.xls
new file mode 100644 (file)
index 0000000..ef8e1ad
Binary files /dev/null and b/tests/phpunit/data/MSCompoundFileReader/fat-loop.xls differ
diff --git a/tests/phpunit/data/MSCompoundFileReader/gnumeric.xls b/tests/phpunit/data/MSCompoundFileReader/gnumeric.xls
new file mode 100644 (file)
index 0000000..4e4995d
Binary files /dev/null and b/tests/phpunit/data/MSCompoundFileReader/gnumeric.xls differ
diff --git a/tests/phpunit/data/MSCompoundFileReader/impress.ppt b/tests/phpunit/data/MSCompoundFileReader/impress.ppt
new file mode 100644 (file)
index 0000000..8e39c4b
Binary files /dev/null and b/tests/phpunit/data/MSCompoundFileReader/impress.ppt differ
diff --git a/tests/phpunit/data/MSCompoundFileReader/invalid-signature.xls b/tests/phpunit/data/MSCompoundFileReader/invalid-signature.xls
new file mode 100644 (file)
index 0000000..b8d9c2c
Binary files /dev/null and b/tests/phpunit/data/MSCompoundFileReader/invalid-signature.xls differ
diff --git a/tests/phpunit/data/MSCompoundFileReader/powerpoint2016-compat97.ppt b/tests/phpunit/data/MSCompoundFileReader/powerpoint2016-compat97.ppt
new file mode 100755 (executable)
index 0000000..1fcafbb
Binary files /dev/null and b/tests/phpunit/data/MSCompoundFileReader/powerpoint2016-compat97.ppt differ
diff --git a/tests/phpunit/data/MSCompoundFileReader/word2016-compat97.doc b/tests/phpunit/data/MSCompoundFileReader/word2016-compat97.doc
new file mode 100755 (executable)
index 0000000..edd25e9
Binary files /dev/null and b/tests/phpunit/data/MSCompoundFileReader/word2016-compat97.doc differ
diff --git a/tests/phpunit/data/MSCompoundFileReader/writer.doc b/tests/phpunit/data/MSCompoundFileReader/writer.doc
new file mode 100644 (file)
index 0000000..b51df91
Binary files /dev/null and b/tests/phpunit/data/MSCompoundFileReader/writer.doc differ
diff --git a/tests/phpunit/data/media/zip-in-doc.doc b/tests/phpunit/data/media/zip-in-doc.doc
new file mode 100644 (file)
index 0000000..0b4c574
Binary files /dev/null and b/tests/phpunit/data/media/zip-in-doc.doc differ
index 75e73be..41cd039 100644 (file)
@@ -23,6 +23,8 @@
  * @author Neil Kandalgaonkar <neilk@wikimedia.org>
  */
 
+use MediaWiki\Shell\Shell;
+
 /**
  * RandomImageGenerator: does what it says on the tin.
  * Can fetch a random image, or also write a number of them to disk with random filenames.
@@ -310,16 +312,16 @@ class RandomImageGenerator {
                // for now (only works if you have exiv2 installed, a program to read
                // and manipulate exif).
                if ( $wgExiv2Command ) {
-                       $cmd = wfEscapeShellArg( $wgExiv2Command )
-                               . " -M "
-                               . wfEscapeShellArg( "set Exif.Image.Orientation " . $orientation['exifCode'] )
-                               . " "
-                               . wfEscapeShellArg( $filename );
-
-                       $retval = 0;
-                       $err = wfShellExec( $cmd, $retval );
+                       $command = Shell::command( $wgExiv2Command,
+                               '-M',
+                               "set Exif.Image.Orientation {$orientation['exifCode']}",
+                               $filename
+                       )->includeStderr();
+
+                       $result = $command->execute();
+                       $retval = $result->getExitCode();
                        if ( $retval !== 0 ) {
-                               print "Error with $cmd: $retval, $err\n";
+                               print "Error with $command: $retval, {$result->getStdout()}\n";
                        }
                }
        }
@@ -396,22 +398,25 @@ class RandomImageGenerator {
         */
        public function writeImageWithCommandLine( $spec, $format, $filename ) {
                global $wgImageMagickConvertCommand;
-               $args = [];
-               $args[] = "-size " . wfEscapeShellArg( $spec['width'] . 'x' . $spec['height'] );
-               $args[] = wfEscapeShellArg( "xc:" . $spec['fill'] );
+
+               $args = [
+                       $wgImageMagickConvertCommand,
+                       '-size',
+                       $spec['width'] . 'x' . $spec['height'],
+                       "xc:{$spec['fill']}",
+               ];
                foreach ( $spec['draws'] as $draw ) {
                        $fill = $draw['fill'];
                        $polygon = self::shapePointsToString( $draw['shape'] );
                        $drawCommand = "fill $fill  polygon $polygon";
-                       $args[] = '-draw ' . wfEscapeShellArg( $drawCommand );
+                       $args[] = '-draw';
+                       $args[] = $drawCommand;
                }
-               $args[] = wfEscapeShellArg( $filename );
+               $args[] = $filename;
 
-               $command = wfEscapeShellArg( $wgImageMagickConvertCommand ) . " " . implode( " ", $args );
-               $retval = null;
-               wfShellExec( $command, $retval );
+               $result = Shell::command( $args )->execute();
 
-               return ( $retval === 0 );
+               return ( $result->getExitCode() === 0 );
        }
 
        /**
index 05ae2a3..58e617c 100644 (file)
@@ -1,13 +1,12 @@
 <?php
 
-class ComposerInstalledTest extends MediaWikiTestCase {
+class ComposerInstalledTest extends PHPUnit\Framework\TestCase {
 
        private $installed;
 
        public function setUp() {
                parent::setUp();
-               global $IP;
-               $this->installed = "$IP/tests/phpunit/data/composer/installed.json";
+               $this->installed = __DIR__ . "/../../../data/composer/installed.json";
        }
 
        /**
@@ -16,7 +15,7 @@ class ComposerInstalledTest extends MediaWikiTestCase {
         */
        public function testGetInstalledDependencies() {
                $installed = new ComposerInstalled( $this->installed );
-               $this->assertArrayEquals( [
+               $this->assertEquals( [
                'leafo/lessphp' => [
                        'version' => '0.5.0',
                        'type' => 'library',
@@ -494,6 +493,6 @@ class ComposerInstalledTest extends MediaWikiTestCase {
                        ],
                        'description' => 'The PHP Unit Testing framework.',
                ],
-               ], $installed->getInstalledDependencies(), false, true );
+               ], $installed->getInstalledDependencies() );
        }
 }
index ded5f8f..720fa6e 100644 (file)
@@ -1,14 +1,13 @@
 <?php
 
-class ComposerJsonTest extends MediaWikiTestCase {
+class ComposerJsonTest extends PHPUnit\Framework\TestCase {
 
        private $json, $json2;
 
        public function setUp() {
                parent::setUp();
-               global $IP;
-               $this->json = "$IP/tests/phpunit/data/composer/composer.json";
-               $this->json2 = "$IP/tests/phpunit/data/composer/new-composer.json";
+               $this->json = __DIR__ . "/../../../data/composer/composer.json";
+               $this->json2 = __DIR__ . "/../../../data/composer/new-composer.json";
        }
 
        /**
@@ -17,12 +16,12 @@ class ComposerJsonTest extends MediaWikiTestCase {
         */
        public function testGetRequiredDependencies() {
                $json = new ComposerJson( $this->json );
-               $this->assertArrayEquals( [
+               $this->assertEquals( [
                        'cdb/cdb' => '1.0.0',
                        'cssjanus/cssjanus' => '1.1.1',
                        'leafo/lessphp' => '0.5.0',
                        'psr/log' => '1.0.0',
-               ], $json->getRequiredDependencies(), false, true );
+               ], $json->getRequiredDependencies() );
        }
 
        public static function provideNormalizeVersion() {
index c765438..f5fcdbe 100644 (file)
@@ -1,13 +1,12 @@
 <?php
 
-class ComposerLockTest extends MediaWikiTestCase {
+class ComposerLockTest extends PHPUnit\Framework\TestCase {
 
        private $lock;
 
        public function setUp() {
                parent::setUp();
-               global $IP;
-               $this->lock = "$IP/tests/phpunit/data/composer/composer.lock";
+               $this->lock = __DIR__ . "/../../../data/composer/composer.lock";
        }
 
        /**
@@ -16,7 +15,7 @@ class ComposerLockTest extends MediaWikiTestCase {
         */
        public function testGetInstalledDependencies() {
                $lock = new ComposerLock( $this->lock );
-               $this->assertArrayEquals( [
+               $this->assertEquals( [
                        'wikimedia/cdb' => [
                                'version' => '1.0.1',
                                'type' => 'library',
@@ -115,7 +114,7 @@ class ComposerLockTest extends MediaWikiTestCase {
                                        'and configure its support in an easy way. ' .
                                        'Main features are language selection, input methods and web fonts.',
                        ],
-               ], $lock->getInstalledDependencies(), false, true );
+               ], $lock->getInstalledDependencies() );
        }
 
 }
diff --git a/tests/phpunit/includes/libs/mime/MSCompoundFileReaderTest.php b/tests/phpunit/includes/libs/mime/MSCompoundFileReaderTest.php
new file mode 100644 (file)
index 0000000..4509a61
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+/*
+ * Copyright 2019 Wikimedia Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed
+ * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+ * OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+/**
+ * @group Media
+ * @covers MSCompoundFileReader
+ */
+class MSCompoundFileReaderTest extends PHPUnit\Framework\TestCase {
+       public static function provideValid() {
+               return [
+                       [ 'calc.xls', 'application/vnd.ms-excel' ],
+                       [ 'excel2016-compat97.xls', 'application/vnd.ms-excel' ],
+                       [ 'gnumeric.xls', 'application/vnd.ms-excel' ],
+                       [ 'impress.ppt', 'application/vnd.ms-powerpoint' ],
+                       [ 'powerpoint2016-compat97.ppt', 'application/vnd.ms-powerpoint' ],
+                       [ 'word2016-compat97.doc', 'application/msword' ],
+                       [ 'writer.doc', 'application/msword' ],
+               ];
+       }
+
+       /** @dataProvider provideValid */
+       public function testReadFile( $fileName, $expectedMime ) {
+               global $IP;
+
+               $info = MSCompoundFileReader::readFile( "$IP/tests/phpunit/data/MSCompoundFileReader/$fileName" );
+               $this->assertTrue( $info['valid'] );
+               $this->assertSame( $expectedMime, $info['mime'] );
+       }
+
+       public static function provideInvalid() {
+               return [
+                       [ 'dir-beyond-end.xls', 'ERROR_READ_PAST_END' ],
+                       [ 'fat-loop.xls', 'ERROR_INVALID_FORMAT' ],
+                       [ 'invalid-signature.xls', 'ERROR_INVALID_SIGNATURE' ],
+               ];
+       }
+
+       /** @dataProvider provideInvalid */
+       public function testReadFileInvalid( $fileName, $expectedError ) {
+               global $IP;
+
+               $info = MSCompoundFileReader::readFile( "$IP/tests/phpunit/data/MSCompoundFileReader/$fileName" );
+               $this->assertFalse( $info['valid'] );
+               $this->assertSame( constant( MSCompoundFileReader::class . '::' . $expectedError ),
+                       $info['errorCode'] );
+       }
+}
index fbe5a2b..1947812 100644 (file)
@@ -128,4 +128,13 @@ class MimeAnalyzerTest extends PHPUnit\Framework\TestCase {
                $actualType = $this->doGuessMimeType( [ $file, 'mp3' ] );
                $this->assertEquals( 'audio/mpeg', $actualType );
        }
+
+       /**
+        * A ZIP file embedded in the middle of a .doc file is still a Word Document.
+        */
+       function testZipInDoc() {
+               $file = __DIR__ . '/../../../data/media/zip-in-doc.doc';
+               $actualType = $this->doGuessMimeType( [ $file, 'doc' ] );
+               $this->assertEquals( 'application/msword', $actualType );
+       }
 }
index 9f18e5a..a1a3fd7 100644 (file)
@@ -61,7 +61,8 @@ class ZipDirectoryReaderTest extends PHPUnit\Framework\TestCase {
        }
 
        public function testTrailingBytes() {
-               $this->readZipAssertError( 'trail.zip', 'zip-bad',
+               // Due to T40432 this is now zip-wrong-format instead of zip-bad
+               $this->readZipAssertError( 'trail.zip', 'zip-wrong-format',
                        'Trailing bytes error' );
        }