From: jenkins-bot Date: Fri, 24 Jun 2016 18:21:21 +0000 (+0000) Subject: Merge "Chinese Conversion Table Update 2016-4" X-Git-Tag: 1.31.0-rc.0~6525 X-Git-Url: http://git.heureux-cyclage.org/?a=commitdiff_plain;h=d0cbde8a53b0a54bc7fb407f31fa627489c87b13;hp=56b97b194f468f19aae2f4103b5e7298ee939771;p=lhc%2Fweb%2Fwiklou.git Merge "Chinese Conversion Table Update 2016-4" --- diff --git a/.stylelintrc b/.stylelintrc index 6b94db6722..62dbeb69ed 100644 --- a/.stylelintrc +++ b/.stylelintrc @@ -10,7 +10,7 @@ "declaration-colon-space-after": [ "always" ], "declaration-colon-space-before": [ "never" ], - "font-family-name-quotes": [ "single-unless-keyword" ], + "font-family-name-quotes": [ "always-unless-keyword" ], "font-weight-notation": [ "named-where-possible" ], "function-calc-no-unspaced-operator": true, @@ -20,7 +20,7 @@ "function-comma-space-before": [ "never" ], "function-parentheses-newline-inside": [ "never-multi-line" ], "function-parentheses-space-inside": [ "always" ], - "function-url-quotes": [ "none" ], + "function-url-quotes": [ "never" ], "function-whitespace-after": [ "always" ], } } diff --git a/RELEASE-NOTES-1.28 b/RELEASE-NOTES-1.28 index 6beeac9344..c6251435eb 100644 --- a/RELEASE-NOTES-1.28 +++ b/RELEASE-NOTES-1.28 @@ -51,6 +51,8 @@ changes to languages because of Phabricator reports. === Other changes in 1.28 === * (T128697) Improved handling of large diffs. +* [BREAKING CHANGE] $wgExtendedLoginCookies has been removed. You can + use or update a custom session provider if needed. == Compatibility == diff --git a/autoload.php b/autoload.php index e729b6f9f1..87ba2254e6 100644 --- a/autoload.php +++ b/autoload.php @@ -791,7 +791,6 @@ $wgAutoloadLocalClasses = [ 'MediaTransformOutput' => __DIR__ . '/includes/media/MediaTransformOutput.php', 'MediaWiki' => __DIR__ . '/includes/MediaWiki.php', 'MediaWikiI18N' => __DIR__ . '/includes/skins/MediaWikiI18N.php', - 'MediaWikiPageLinkRenderer' => __DIR__ . '/includes/title/MediaWikiPageLinkRenderer.php', 'MediaWikiSite' => __DIR__ . '/includes/site/MediaWikiSite.php', 'MediaWikiTitleCodec' => __DIR__ . '/includes/title/MediaWikiTitleCodec.php', 'MediaWikiVersionFetcher' => __DIR__ . '/includes/MediaWikiVersionFetcher.php', @@ -1004,7 +1003,6 @@ $wgAutoloadLocalClasses = [ 'PageArchive' => __DIR__ . '/includes/specials/SpecialUndelete.php', 'PageExists' => __DIR__ . '/maintenance/pageExists.php', 'PageLangLogFormatter' => __DIR__ . '/includes/logging/PageLangLogFormatter.php', - 'PageLinkRenderer' => __DIR__ . '/includes/title/PageLinkRenderer.php', 'PageProps' => __DIR__ . '/includes/PageProps.php', 'PageQueryPage' => __DIR__ . '/includes/specialpage/PageQueryPage.php', 'Pager' => __DIR__ . '/includes/pager/Pager.php', diff --git a/docs/extension.schema.json b/docs/extension.schema.json index 1fccf17d28..c69cbe340c 100644 --- a/docs/extension.schema.json +++ b/docs/extension.schema.json @@ -535,6 +535,14 @@ "type": "object", "description": "Central ID lookup providers" }, + "ChangeCredentialsBlacklist": { + "type": "object", + "description": "AuthenticationRequest classes which can only be used internally for credentials change" + }, + "RemoveCredentialsBlacklist": { + "type": "object", + "description": "AuthenticationRequest classes which can only be used internally for credentials removal" + }, "namespaces": { "type": "array", "description": "Method to add extra namespaces", diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index f176556c48..39e22a0277 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -5817,14 +5817,6 @@ $wgProxyList = []; */ $wgCookieExpiration = 180 * 86400; -/** - * The identifiers of the login cookies that can have their lifetimes - * extended independently of all other login cookies. - * - * @var string[] - */ -$wgExtendedLoginCookies = [ 'UserID', 'Token' ]; - /** * Default login cookie lifetime, in seconds. Setting * $wgExtendLoginCookieExpiration to null will use $wgCookieExpiration to diff --git a/includes/EditPage.php b/includes/EditPage.php index 7fb71f7291..2a80ea68d8 100644 --- a/includes/EditPage.php +++ b/includes/EditPage.php @@ -3513,6 +3513,14 @@ HTML if ( Hooks::run( 'EditPageBeforeConflictDiff', [ &$this, &$wgOut ] ) ) { $stats = $wgOut->getContext()->getStats(); $stats->increment( 'edit.failures.conflict' ); + if ( $this->mTitle->isTalkPage() ) { + $stats->increment( 'edit.failures.conflict.byType.talk' ); + } else { + $stats->increment( 'edit.failures.conflict.byType.subject' ); + } + if ( $this->mTitle->getNamespace() === NS_PROJECT ) { + $stats->increment( 'edit.failures.conflict.byNamespace.project' ); + } $wgOut->wrapWikiMsg( '

$1

', "yourdiff" ); diff --git a/includes/api/i18n/ko.json b/includes/api/i18n/ko.json index a826f60162..2f5b93dfcf 100644 --- a/includes/api/i18n/ko.json +++ b/includes/api/i18n/ko.json @@ -38,7 +38,7 @@ "apihelp-block-param-allowusertalk": "자신의 토론 문서를 편집할 수 있도록 허용합니다. ([[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]] 값에 따라 다름)", "apihelp-block-param-reblock": "사용자가 이미 차단된 경우, 기존 차단 설정을 바꿉니다.", "apihelp-block-param-watchuser": "해당 사용자 또는 IP 주소의 사용자 문서 및 토론 문서를 주시합니다.", - "apihelp-block-example-ip-simple": "IP 192.0.2.5에 대해 First strike라는 이유로 3일간 차단하기", + "apihelp-block-example-ip-simple": "IP 192.0.2.5에 대해 First strike라는 이유로 3일 간 차단하기", "apihelp-block-example-user-complex": "사용자 Vandal을 Vandalism이라는 이유로 무기한 차단하며 계정 생성 및 이메일 발송을 막기", "apihelp-checktoken-param-type": "테스트되는 토큰의 종류.", "apihelp-checktoken-param-token": "테스트할 토큰", diff --git a/includes/api/i18n/uk.json b/includes/api/i18n/uk.json index a2879ce66d..d99945d4b7 100644 --- a/includes/api/i18n/uk.json +++ b/includes/api/i18n/uk.json @@ -61,6 +61,8 @@ "apihelp-compare-param-torev": "Друга версія для порівняння.", "apihelp-compare-example-1": "Створити порівняння версій 1 і 2.", "apihelp-createaccount-description": "Створити новий обліковий запис користувача.", + "apihelp-createaccount-param-preservestate": "Якщо запит [[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]] повернув істину для hasprimarypreservedstate, запити позначені як primary-required повинні бути пропущені. Якщо він повернув не порожнє значення для preservedusername, це ім'я користувача повинно бути використано для параметру username.", + "apihelp-createaccount-example-create": "Почати процес створення користувача Example з паролем ExamplePassword.", "apihelp-createaccount-param-name": "Ім'я користувача.", "apihelp-createaccount-param-password": "Пароль (ігнорується, якщо встановлено $1mailpassword).", "apihelp-createaccount-param-domain": "Домен для зовнішньої аутентифікації (опціонально).", @@ -148,6 +150,7 @@ "apihelp-feedcontributions-param-deletedonly": "Показати лише вилучений внесок.", "apihelp-feedcontributions-param-toponly": "Показати лише редагування, які є останніми версіями.", "apihelp-feedcontributions-param-newonly": "Показати лише редагування, які є створеннями сторінок.", + "apihelp-feedcontributions-param-hideminor": "Приховати незначні редагування.", "apihelp-feedcontributions-param-showsizediff": "Показати різницю розміру між версіями.", "apihelp-feedcontributions-example-simple": "Вивести внесок для користувача Example.", "apihelp-feedrecentchanges-description": "Видає стрічку нових редагувань.", @@ -209,7 +212,11 @@ "apihelp-import-param-namespace": "Імпортувати у цей простір назв. Не можна використати разом з $1rootpage.", "apihelp-import-param-rootpage": "Імпортувати як підсторінку цієї сторінки. Не можна використати разом з $1namespace.", "apihelp-import-example-import": "Імпортувати [[meta:Help:ParserFunctions]] у простір назв 100 з повною історією.", + "apihelp-linkaccount-description": "Пов'язати обліковий запис третьої сторони з поточним користувачем.", + "apihelp-linkaccount-example-link": "Почати процес пов'язування з обліковм записом з Example.", "apihelp-login-description": "Увійти в систему й отримати куки автентифікації.\n\nЦю дію треба використовувати лише в комбінації з [[Special:BotPasswords]]; використання для входу в основний обліковий запис застаріле і може ламатися без попередження. Щоб безпечно увійти в основний обліковий запис, використовуйте [[Special:ApiHelp/clientlogin|action=clientlogin]].", + "apihelp-login-description-nobotpasswords": "Увійти й отримати куки автентифікації.\n\nЦя дія застаріла і може ламатися без попередження. Щоб безпечно входити в систему, використовуйте [[Special:ApiHelp/clientlogin|action=clientlogin]].", + "apihelp-login-description-nonauthmanager": "Увійти й отримати куки автентифікації.\n\nУ випадку успішного входження в систему будуть включені в заголовки відповіді HTTP. У випадку невдалого входження подальші спроби можуть бути урізані, щоб обмежити атаки автоматичного вгадування пароля.", "apihelp-login-param-name": "Ім'я користувача.", "apihelp-login-param-password": "Пароль.", "apihelp-login-param-domain": "Домен (необов'язково).", @@ -541,6 +548,12 @@ "apihelp-query+allusers-param-activeusers": "Перерахувати лише користувачів, що були активні $1 {{PLURAL:$1|останній день|останні дні|останніх днів}}.", "apihelp-query+allusers-param-attachedwiki": "Із $1prop=centralids, також вказати, чи користувач має приєднану вікі, визначену цим ідентифікатором.", "apihelp-query+allusers-example-Y": "Перерахувати користувачів, починаючи з Y.", + "apihelp-query+authmanagerinfo-description": "Отримати інформацію про поточний стан автентифікації.", + "apihelp-query+authmanagerinfo-param-securitysensitiveoperation": "Перевірити, чи поточний стан автентифікації користувача є достатнім для даної конфіденційної операції.", + "apihelp-query+authmanagerinfo-param-requestsfor": "Отримати інформацію про запити автентифікації, потрібні для даної дії автентифікації.", + "apihelp-query+filerepoinfo-example-login": "Вибірка запитів, що можуть бути використані при початку входу.", + "apihelp-query+filerepoinfo-example-login-merged": "Отримати запити, які можуть бути використані при початку входу, з об'єднаними полями форми.", + "apihelp-query+filerepoinfo-example-securitysensitiveoperation": "Перевірити чи автентифікація є достатньою для дії foo.", "apihelp-query+backlinks-description": "Знайти усі сторінки, що посилаються на подану сторінку.", "apihelp-query+backlinks-param-title": "Назва для пошуку. Не можна використати разом з $1pageid.", "apihelp-query+backlinks-param-pageid": "ID сторінки для пошуку. Не можна використати разом з $1title.", @@ -882,6 +895,7 @@ "apihelp-query+prefixsearch-param-limit": "Максимальна кількість результатів для виведення.", "apihelp-query+prefixsearch-param-offset": "Кількість результатів, які пропустити.", "apihelp-query+prefixsearch-example-simple": "Шукати назви сторінок, які починаються з meaning.", + "apihelp-query+prefixsearch-param-profile": "Профіль пошуку для використання.", "apihelp-query+protectedtitles-description": "Вивести список усіх назв, захищених від створення.", "apihelp-query+protectedtitles-param-namespace": "Перерахувати назви лише в цих просторах назв.", "apihelp-query+protectedtitles-param-level": "Перерахувати лише назви з цими рівням захисту.", @@ -994,6 +1008,7 @@ "apihelp-query+search-param-what": "Який тип пошуку виконати.", "apihelp-query+search-param-info": "Які метадані отримати.", "apihelp-query+search-param-prop": "Які властивості для виведення:", + "apihelp-query+search-param-qiprofile": "Незалежний профіль запиту для використання (впливає на алгоритм ранжування).", "apihelp-query+search-paramvalue-prop-size": "Додає розмір сторінки в байтах.", "apihelp-query+search-paramvalue-prop-wordcount": "Додає кількість слів на сторінці.", "apihelp-query+search-paramvalue-prop-timestamp": "Додає часову мітку останнього редагування сторінки.", @@ -1139,6 +1154,7 @@ "apihelp-query+users-paramvalue-prop-emailable": "Помічає чи хоче користувач отримувати електронну пошту через [[Special:Emailuser]].", "apihelp-query+users-paramvalue-prop-gender": "Помічає стать користувача. Повертає \"male\", \"female\", або \"unknown\".", "apihelp-query+users-paramvalue-prop-centralids": "Додає центральні ідентифікатори і стан приєднання для користувача.", + "apihelp-query+users-paramvalue-prop-cancreate": "Вказує, чи можна створити обліковий запис для допустимих, але незареєстрованих імен користувачів.", "apihelp-query+users-param-attachedwiki": "Із $1prop=centralids, вказати, чи користувач має приєднану вікі, визначену цим ідентифікатором.", "apihelp-query+users-param-users": "Список користувачів, для яких отримати інформацію.", "apihelp-query+users-param-token": "Використати натомість [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].", @@ -1187,10 +1203,20 @@ "apihelp-query+watchlistraw-param-show": "Перелічити лише елементи, які відповідають цим критеріям.", "apihelp-query+watchlistraw-param-owner": "Використовується разом з $1token для доступу до списку спостереження різних користувачів.", "apihelp-query+watchlistraw-param-token": "Токен безпеки (доступний у [[Special:Preferences#mw-prefsection-watchlist|налаштуваннях]] користувача) для отримання доступу до списку спостереження іншого користувача.", + "apihelp-query+watchlistraw-param-dir": "Напрямок, у якому перелічити.", "apihelp-query+watchlistraw-param-fromtitle": "Назва (з префіксом простору назв), з якої почати перерахування.", "apihelp-query+watchlistraw-param-totitle": "Назва (з префіксом простору назв), якою закінчити перерахування.", "apihelp-query+watchlistraw-example-simple": "Перелічити сторінки у списку спостереження поточного користувача.", "apihelp-query+watchlistraw-example-generator": "Вибрати інформацію про сторінку для сторінок у списку спостереження поточного користувача.", + "apihelp-removeauthenticationdata-description": "Вилучити параметри автентифікації для поточного користувача.", + "apihelp-removeauthenticationdata-example-simple": "Спроба вилучити дані поточного користувача для FooAuthenticationRequest.", + "apihelp-resetpassword-description": "Відправити користувачу лист для відновлення пароля.", + "apihelp-resetpassword-description-noroutes": "Немає доступних способів відновити пароль.\n\nУвімкніть способи у [[mw:Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]], щоб використовувати цей модуль.", + "apihelp-resetpassword-param-user": "Користувача відновлено.", + "apihelp-resetpassword-param-email": "Адреса електронної пошти користувача відновлено.", + "apihelp-resetpassword-param-capture": "Повернути тимчасові паролі, які були надіслані. Вимагає право користувача passwordreset.", + "apihelp-resetpassword-example-user": "Надіслати лист для скидання пароля користувачу Example.", + "apihelp-resetpassword-example-email": "Надіслати лист для скидання пароля усім користувачам з адресою електронної пошти user@example.com.", "apihelp-revisiondelete-description": "Вилучити або відновити версії.", "apihelp-revisiondelete-param-type": "Тип здійснюваного вилучення версії.", "apihelp-revisiondelete-param-target": "Назва сторінки, версію якої вилучити, якщо вимагається для цього типу.", @@ -1230,6 +1256,7 @@ "apihelp-stashedit-param-contentmodel": "Модель вмісту нового вмісту.", "apihelp-stashedit-param-contentformat": "Формат серіалізації вмісту, використовуваний для введеного тексту.", "apihelp-stashedit-param-baserevid": "Ідентифікатор базової версії.", + "apihelp-stashedit-param-summary": "Змінити опис.", "apihelp-tag-description": "Додати або вилучити зміни міток з окремих версій або записів журналу.", "apihelp-tag-param-rcid": "Один або більше ідентифікаторів останніх змін, до яких додати або вилучити мітки.", "apihelp-tag-param-revid": "Один або більше ідентифікатор з якого додати або вилучити мітку.", @@ -1259,6 +1286,7 @@ "apihelp-undelete-param-watchlist": "Безумовно додати або вилучити сторінку із списку спостереження поточного користувача, використати налаштування, або не змінювати статус (не)спостереження.", "apihelp-undelete-example-page": "Відновити сторінку Main Page.", "apihelp-undelete-example-revisions": "Відновити дві версії сторінки Main Page.", + "apihelp-unlinkaccount-description": "Вилучити пов'язаний обліковий запис третьої сторони з поточного користувача.", "apihelp-upload-description": "Завантажити файл, або отримати статус завантажень у процесі.\n\nДоступні декілька методів:\n* Завантажити вміст файлу напряму, використовуючи параметр $1file.\n* Завантажити файл шматками, використовуючи параметри $1filesize, $1chunk, та $1offset.\n* Змусити сервер Медіавікі отримати файл за URL, використовуючи параметр $1url.\n* Завершити раніше розпочате завантаження, яке не вдалось через попередження, використовуючи параметр $1filekey.\nЗауважте, що HTTP POST повинен бути здійснений як завантаження файлу (наприклад, використовуючи multipart/form-data)", "apihelp-upload-param-filename": "Цільова назва файлу.", "apihelp-upload-param-comment": "Коментар завантаження. Також використовується як початковий текст сторінок для нових файлів, якщо $1text не вказано.", @@ -1368,6 +1396,9 @@ "api-help-permissions-granted-to": "{{PLURAL:$1|Надано|Надані}}: $2", "api-help-right-apihighlimits": "Використовувати вищі ліміти у запитах API (повільні запити: $1; швидкі запити: $2). Ліміти для повільних запитів також застосовуються до багатозначних параметрів.", "api-help-open-in-apisandbox": "[відкрити в пісочниці]", + "api-help-authmanagerhelper-messageformat": "Формат до використання для повернення повідомлень.", + "api-help-authmanagerhelper-mergerequestfields": "Об'єднати інформацію всіх автентифікаційних запитів у один масив.", + "api-help-authmanagerhelper-preservestate": "Зберегти статус з попередньої спроби входу, що не вдалась, якщо можливо.", "api-credits-header": "Автор(и)", "api-credits": "Розробники API:\n* Roan Kattouw (головний розробник вер. 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (творець, головний розробник вер. 2006 – вер. 2007)\n* Brad Jorsch (головний розробник 2013 – тепер)\n\nБудь ласка, надсилайте свої коментарі, пропозиції та запитання на mediawiki-api@lists.wikimedia.org\nабо зафайліть звіт про баґ на https://phabricator.wikimedia.org/." } diff --git a/includes/installer/i18n/de.json b/includes/installer/i18n/de.json index 68a726b670..fd4456bd60 100644 --- a/includes/installer/i18n/de.json +++ b/includes/installer/i18n/de.json @@ -315,6 +315,7 @@ "config-install-extension-tables": "Erstellung der Tabellen für die aktivierten Erweiterungen", "config-install-mainpage-failed": "Die Hauptseite konnte nicht erstellt werden: $1", "config-install-done": "'''Herzlichen Glückwunsch!'''\nMediaWiki wurde erfolgreich installiert.\n\nDas Installationsprogramm hat die Datei LocalSettings.php erzeugt.\nSie enthält alle vorgenommenen Konfigurationseinstellungen.\n\nDiese Datei muss nun heruntergeladen und anschließend in das Stammverzeichnis der MediaWiki-Installation hochgeladen werden. Dies ist dasselbe Verzeichnis, in dem sich auch die Datei index.php befindet. Das Herunterladen sollte inzwischen automatisch gestartet worden sein.\n\nSofern dies nicht der Fall war, oder das Herunterladen unterbrochen wurde, kann der Vorgang durch einen Klick auf den folgenden Link erneut gestartet werden:\n\n$3\n\n'''Hinweis:''' Die Konfigurationsdatei sollte jetzt unbedingt heruntergeladen werden. Sie wird nach Beenden des Installationsprogramms, nicht mehr zur Verfügung stehen.\n\nSobald alles erledigt wurde, kann auf das '''[$2 Wiki zugegriffen werden]'''. Wir wünschen viel Spaß und Erfolg mit dem Wiki.", + "config-install-done-path": "Herzlichen Glückwunsch!\nDu hast MediaWiki installiert.\n\nDas Installationsprogramm hat eine Datei „LocalSettings.php“ erzeugt.\nSie enthält deine gesamte Konfiguration.\n\nDu musst sie herunterladen und unter $4 ablegen. Der Download sollte automatisch gestartet sein.\n\nFalls der Download nicht angeboten wird oder du ihn abgebrochen hast, kannst du ihn durch Anklicken des folgenden Links neu starten:\n\n$3\n\nHinweis: Falls du dies jetzt nicht tust, wird die erzeugte Konfigurationsdatei später nicht verfügbar sein, wenn du die Installation ohne Herunterladen verlässt.\n\nBei Fertigstellung kannst du [$2 dein Wiki aufrufen].", "config-download-localsettings": "LocalSettings.php herunterladen", "config-help": "Hilfe", "config-help-tooltip": "Zum Expandieren klicken", diff --git a/includes/installer/i18n/fr.json b/includes/installer/i18n/fr.json index 54a6d7d578..9bdab7f818 100644 --- a/includes/installer/i18n/fr.json +++ b/includes/installer/i18n/fr.json @@ -326,6 +326,7 @@ "config-install-extension-tables": "Création de tables pour les extensions activées", "config-install-mainpage-failed": "Impossible d’insérer la page principale : $1", "config-install-done": "Félicitations!\nVous avez installé MediaWiki.\n\nLe programme d'installation a généré un fichier LocalSettings.php. Il contient tous les paramètres de votre configuration.\n\nVous devrez le télécharger et le mettre à la racine de votre installation wiki (dans le même répertoire que index.php). Le téléchargement devrait démarrer automatiquement.\n\nSi le téléchargement n'a pas été proposé, ou que vous l'avez annulé, vous pouvez redémarrer le téléchargement en cliquant ce lien :\n\n$3\n\nNote : Si vous ne le faites pas maintenant, ce fichier de configuration généré ne sera pas disponible plus tard si vous quittez l'installation sans le télécharger.\n\nLorsque c'est fait, vous pouvez [$2 accéder à votre wiki] .", + "config-install-done-path": "Félicitations !\nVous avez installé MédiaWiki.\n\nL’installeur a généré un fichier LocalSettings.php.\nIl contient toute votre configuration.\n\nVous devez le télécharger et le mettre dans $4. Le téléchargement devrait démarrer automatiquement.\n\nSi le téléchargement n’est pas proposé, ou si vous l’avez annulé, vous pouvez le redémarrer en cliquant sur le lien ci-dessous :\n\n$3\n\nNote : Si vous ne le faites pas maintenant, ce fichier de configuration généré ne sera plus disponible ultérieurement si vous quittez l’installation sans le télécharger.\n\nUne fois ceci fait, vous pouvez [$2 entrer dans votre wiki].", "config-download-localsettings": "Télécharger LocalSettings.php", "config-help": "aide", "config-help-tooltip": "cliquer pour agrandir", diff --git a/includes/installer/i18n/he.json b/includes/installer/i18n/he.json index e6ec5a54bb..6f519ec4d6 100644 --- a/includes/installer/i18n/he.json +++ b/includes/installer/i18n/he.json @@ -304,7 +304,8 @@ "config-install-mainpage": "יצירת דף ראשי עם תוכן התחלתי", "config-install-extension-tables": "יצירת טבלאות להרחבות מופעלות", "config-install-mainpage-failed": "לא הצליחה הכנסת דף ראשי: $1.", - "config-install-done": "מזל טוב!\nהתקנתם בהצלחה את מדיה־ויקי.\n\nתוכנת ההתקנה יצרה את הקובץ LocalSettings.php.\nהוא מכיל את כל ההגדרות שלכם.\n\nתצטרכו להוריד אותו ולשים אותו בבסיס ההתקנה של הוויקי שלכם (אותה התיקייה שבה נמצא הקובץ index.php). ההורדה הייתה אמורה להתחיל באופן אוטומטי.\n\nאם ההורדה לא התחילה, או אם ביטלתם אותה, אפשר להתחיל אותה מחדש בלחיצה על הקישור הבא:\n\n$3\n\nשימו לב: אם לא תעשו זאת עכשיו, קובץ ההגדרות המחוּלל לא יהיה זמין לכם שוב.\n\nאחרי שתעשו את זה, תוכלו [$2 להיכנס לוויקי שלכם].", + "config-install-done": "מזל טוב!\nהתקנת את תוכנת מדיה־ויקי.\n\nתוכנת ההתקנה יצרה את הקובץ LocalSettings.php.\nהוא מכיל את כל ההגדרות שלך.\n\nיש להוריד אותו ולהכניס אותו לתיקיית הבסיס שבה הותקן הוויקי שלך (אותה התיקייה שבה נמצא הקובץ index.php). ההורדה אמורה להתחיל באופן אוטומטי.\n\nאם ההורדה לא התחילה, או אם ביטלת אותה, אפשר להתחיל אותה מחדש באמצעות לחיצה על הקישור הבא:\n\n$3\n\nלתשומת לבך: אם ההורדה לא תבוצע כעת, קובץ ההגדרות לא יהיה זמין מאוחר יותר אם תוכנת ההתקנה תיסגר לפני שהקובץ יורד.\n\nלאחר שביצעת את הפעולות שלהלן, באפשרותך [$2 להיכנס לאתר הוויקי שלך].", + "config-install-done-path": "מזל טוב!\nהתקנת את תוכנת מדיה־ויקי.\n\nתוכנת ההתקנה יצרה את הקובץ LocalSettings.php.\nהוא מכיל את כל ההגדרות שלך.\n\nיש להוריד אותו ולהכניס אותו לתיקייה $4. ההורדה אמורה להתחיל באופן אוטומטי.\n\nאם ההורדה לא התחילה, או אם ביטלת אותה, אפשר להתחיל אותה מחדש באמצעות לחיצה על הקישור הבא:\n\n$3\n\nלתשומת לבך: אם ההורדה לא תבוצע כעת, קובץ ההגדרות לא יהיה זמין מאוחר יותר אם תוכנת ההתקנה תיסגר לפני שהקובץ יורד.\n\nלאחר שביצעת את הפעולות שלהלן, באפשרותך [$2 להיכנס לאתר הוויקי שלך].", "config-download-localsettings": "הורדת LocalSettings.php", "config-help": "עזרה", "config-help-tooltip": "להרחיב", diff --git a/includes/installer/i18n/ru.json b/includes/installer/i18n/ru.json index b3a614daab..163297240d 100644 --- a/includes/installer/i18n/ru.json +++ b/includes/installer/i18n/ru.json @@ -33,7 +33,7 @@ "config-localsettings-badkey": "Вы указали неправильный ключ обновления", "config-upgrade-key-missing": "Обнаружена существующая установленная копия MediaWiki.\nЧтобы обновить обнаруженную установку, пожалуйста, добавьте следующую строку в конец вашего файла LocalSettings.php:\n\n$1", "config-localsettings-incomplete": "Похоже, что существующий файл LocalSettings.php неполон.\nНе установлена переменная $1.\nПожалуйста, измените LocalSettings.php так, чтобы значение этой переменной было задано, затем нажмите «{{int:Config-continue}}».", - "config-localsettings-connection-error": "Произошла ошибка при подключении к базе данных с помощью настроек, указанных в LocalSettings.php или LocalSettings.php. Пожалуйста, исправьте эти настройки и повторите попытку.\n\n$1", + "config-localsettings-connection-error": "Произошла ошибка при подключении к базе данных с использованием настроек, указанных в LocalSettings.php. Пожалуйста, исправьте эти настройки и повторите попытку.\n\n$1", "config-session-error": "Ошибка при запуске сессии: $1", "config-session-expired": "Ваша сессия истекла.\nСессии настроены на длительность $1.\nВы её можете увеличить, изменив session.gc_maxlifetime в php.ini.\nПерезапустите процесс установки.", "config-no-session": "Данные сессии потеряны!\nПроверьте ваш php.ini и убедитесь, что session.save_path установлен в соответствующий каталог.", diff --git a/includes/installer/i18n/uk.json b/includes/installer/i18n/uk.json index 2385e1e920..8bc18b0b7b 100644 --- a/includes/installer/i18n/uk.json +++ b/includes/installer/i18n/uk.json @@ -308,6 +308,7 @@ "config-install-extension-tables": "Створення таблиць для увімкнених розширень", "config-install-mainpage-failed": "Не вдається вставити головну сторінку: $1", "config-install-done": "Вітаємо!\nВи успішно встановили MediaWiki.\n\nІнсталятор згенерував файл LocalSettings.php, який містить усі Ваші налаштування.\n\nВам необхідно завантажити його і помістити у кореневу папку Вашої вікі (туди ж, де index.php). Завантаження мало початись автоматично.\n\nЯкщо завантаження не почалось або Ви його скасували, можете заново його почати, натиснувши на посилання внизу:\n\n$3\n\nПримітка: Якщо Ви не зробите цього зараз, цей файл не буде доступним пізніше, коли Ви вийдете з встановлення, не скачавши його.\n\nПісля виконання дій, описаних вище, Ви зможете [$2 увійти у свою вікі].", + "config-install-done-path": "Вітаємо!\nВи встановили Медіавікі.\n\nІнсталятор створив файл LocalSettings.php.\nУ ньому містяться всі Ваші налаштування.\n\nВам потрібно завантажити його й помістити в $4. Завантаження повинно було автоматично розпочатись.\n\nЯкщо завантаження не було запропоновано, або Ви його скасували, Ви можете перезапустити завантаження натиснувши на посилання нижче:\n\n$3\n\nЗверніть увагу: Якщо Ви не зробите це зараз, цей згенерований файл налаштувань не буде доступним для Вас пізніше якщо Ви вийдете зі встановлення не завантаживши його.\n\nКоли це було зроблено Ви можете [$2 зайти до своєї вікі].", "config-download-localsettings": "Завантажити LocalSettings.php", "config-help": "допомога", "config-help-tooltip": "натисніть, щоб розгорнути", diff --git a/includes/parser/Parser.php b/includes/parser/Parser.php index 65dde2148b..26b4bd9242 100644 --- a/includes/parser/Parser.php +++ b/includes/parser/Parser.php @@ -1470,10 +1470,14 @@ class Parser { ' ' => '', 'x' => 'X', ] ); - $titleObj = SpecialPage::getTitleFor( 'Booksources', $num ); - return 'ISBN $isbn"; + return $this->getLinkRenderer()->makeKnownLink( + SpecialPage::getTitleFor( 'Booksources', $num ), + "ISBN $isbn", + [ + 'class' => 'internal mw-magiclink-isbn', + 'title' => false // suppress title attribute + ] + ); } else { return $m[0]; } diff --git a/includes/registration/ExtensionProcessor.php b/includes/registration/ExtensionProcessor.php index 2205f9538f..f1f7c2e18e 100644 --- a/includes/registration/ExtensionProcessor.php +++ b/includes/registration/ExtensionProcessor.php @@ -28,6 +28,8 @@ class ExtensionProcessor implements Processor { 'SessionProviders', 'AuthManagerAutoConfig', 'CentralIdLookupProviders', + 'ChangeCredentialsBlacklist', + 'RemoveCredentialsBlacklist', 'RateLimits', 'RecentChangesFlags', 'MediaHandlers', diff --git a/includes/session/CookieSessionProvider.php b/includes/session/CookieSessionProvider.php index 3df0daefde..79fc720d1e 100644 --- a/includes/session/CookieSessionProvider.php +++ b/includes/session/CookieSessionProvider.php @@ -221,7 +221,7 @@ class CookieSessionProvider extends SessionProvider { if ( $value === false ) { $response->clearCookie( $key, $options ); } else { - $expirationDuration = $this->getLoginCookieExpiration( $key ); + $expirationDuration = $this->getLoginCookieExpiration( $key, $session->shouldRememberUser() ); $expiration = $expirationDuration ? $expirationDuration + time() : null; $response->setCookie( $key, (string)$value, $expiration, $options ); } @@ -271,7 +271,10 @@ class CookieSessionProvider extends SessionProvider { $response = $request->response(); if ( $set ) { if ( $backend->shouldRememberUser() ) { - $expirationDuration = $this->getLoginCookieExpiration( 'forceHTTPS' ); + $expirationDuration = $this->getLoginCookieExpiration( + 'forceHTTPS', + true + ); $expiration = $expirationDuration ? $expirationDuration + time() : null; } else { $expiration = null; @@ -397,23 +400,40 @@ class CookieSessionProvider extends SessionProvider { } public function getRememberUserDuration() { - return min( $this->getLoginCookieExpiration( 'UserID' ), - $this->getLoginCookieExpiration( 'Token' ) ) ?: null; + return min( $this->getLoginCookieExpiration( 'UserID', true ), + $this->getLoginCookieExpiration( 'Token', true ) ) ?: null; + } + + /** + * Gets the list of cookies that must be set to the 'remember me' duration, + * if $wgExtendedLoginCookieExpiration is in use. + * + * @return string[] Array of unprefixed cookie keys + */ + protected function getExtendedLoginCookies() { + return [ 'UserID', 'UserName', 'Token' ]; } /** * Returns the lifespan of the login cookies, in seconds. 0 means until the end of the session. + * + * Cookies that are session-length do not call this function. + * * @param string $cookieName + * @param boolean $shouldRememberUser Whether the user should be remembered + * long-term * @return int Cookie expiration time in seconds; 0 for session cookies */ - protected function getLoginCookieExpiration( $cookieName ) { + protected function getLoginCookieExpiration( $cookieName, $shouldRememberUser ) { + $extendedCookies = $this->getExtendedLoginCookies(); $normalExpiration = $this->config->get( 'CookieExpiration' ); - $extendedExpiration = $this->config->get( 'ExtendedLoginCookieExpiration' ); - $extendedCookies = $this->config->get( 'ExtendedLoginCookies' ); - if ( !in_array( $cookieName, $extendedCookies, true ) ) { + if ( $shouldRememberUser && in_array( $cookieName, $extendedCookies, true ) ) { + $extendedExpiration = $this->config->get( 'ExtendedLoginCookieExpiration' ); + + return ( $extendedExpiration !== null ) ? (int)$extendedExpiration : (int)$normalExpiration; + } else { return (int)$normalExpiration; } - return ( $extendedExpiration !== null ) ? (int)$extendedExpiration : (int)$normalExpiration; } } diff --git a/includes/specials/SpecialCategories.php b/includes/specials/SpecialCategories.php index d7d338ccf9..84d1f7c7fd 100644 --- a/includes/specials/SpecialCategories.php +++ b/includes/specials/SpecialCategories.php @@ -26,11 +26,6 @@ */ class SpecialCategories extends SpecialPage { - /** - * @var PageLinkRenderer - */ - protected $linkRenderer = null; - public function __construct() { parent::__construct( 'Categories' ); @@ -39,42 +34,18 @@ class SpecialCategories extends SpecialPage { // using the initServices() method. } - /** - * Initialize or override the PageLinkRenderer SpecialCategories collaborates with. - * Useful mainly for testing. - * - * @todo the pager should also be injected, and de-coupled from the rendering logic. - * - * @param PageLinkRenderer $linkRenderer - */ - public function setPageLinkRenderer( - PageLinkRenderer $linkRenderer - ) { - $this->linkRenderer = $linkRenderer; - } - - /** - * Initialize any services we'll need (unless it has already been provided via a setter). - * This allows for dependency injection even though we don't control object creation. - */ - private function initServices() { - if ( !$this->linkRenderer ) { - $lang = $this->getContext()->getLanguage(); - $titleFormatter = new MediaWikiTitleCodec( $lang, GenderCache::singleton() ); - $this->linkRenderer = new MediaWikiPageLinkRenderer( $titleFormatter ); - } - } - public function execute( $par ) { - $this->initServices(); - $this->setHeaders(); $this->outputHeader(); $this->getOutput()->allowClickjacking(); $from = $this->getRequest()->getText( 'from', $par ); - $cap = new CategoryPager( $this->getContext(), $from, $this->linkRenderer ); + $cap = new CategoryPager( + $this->getContext(), + $from, + $this->getLinkRenderer() + ); $cap->doQuery(); $this->getOutput()->addHTML( diff --git a/includes/specials/SpecialLinkSearch.php b/includes/specials/SpecialLinkSearch.php index 1ecbee007e..d4886f026b 100644 --- a/includes/specials/SpecialLinkSearch.php +++ b/includes/specials/SpecialLinkSearch.php @@ -30,11 +30,6 @@ class LinkSearchPage extends QueryPage { /** @var array|bool */ private $mungedQuery = false; - /** - * @var PageLinkRenderer - */ - protected $linkRenderer = null; - function setParams( $params ) { $this->mQuery = $params['query']; $this->mNs = $params['namespace']; @@ -49,39 +44,11 @@ class LinkSearchPage extends QueryPage { // using the setServices() method. } - /** - * Initialize or override the PageLinkRenderer LinkSearchPage collaborates with. - * Useful mainly for testing. - * - * @todo query logic and rendering logic should be split and also injected - * - * @param PageLinkRenderer $linkRenderer - */ - public function setPageLinkRenderer( - PageLinkRenderer $linkRenderer - ) { - $this->linkRenderer = $linkRenderer; - } - - /** - * Initialize any services we'll need (unless it has already been provided via a setter). - * This allows for dependency injection even though we don't control object creation. - */ - private function initServices() { - global $wgContLang; - if ( !$this->linkRenderer ) { - $titleFormatter = new MediaWikiTitleCodec( $wgContLang, GenderCache::singleton() ); - $this->linkRenderer = new MediaWikiPageLinkRenderer( $titleFormatter ); - } - } - function isCacheable() { return false; } public function execute( $par ) { - $this->initServices(); - $this->setHeaders(); $this->outputHeader(); @@ -277,7 +244,7 @@ class LinkSearchPage extends QueryPage { */ function formatResult( $skin, $result ) { $title = new TitleValue( (int)$result->namespace, $result->title ); - $pageLink = $this->linkRenderer->renderHtmlLink( $title ); + $pageLink = $this->getLinkRenderer()->makeLink( $title ); $url = $result->url; $urlLink = Linker::makeExternalLink( $url, $url ); diff --git a/includes/specials/SpecialMovepage.php b/includes/specials/SpecialMovepage.php index f49d730009..20a508d47e 100644 --- a/includes/specials/SpecialMovepage.php +++ b/includes/specials/SpecialMovepage.php @@ -601,13 +601,14 @@ class MovePageForm extends UnlistedSpecialPage { $out = $this->getOutput(); $out->setPageTitle( $this->msg( 'pagemovedsub' ) ); - $oldLink = Linker::link( + $linkRenderer = $this->getLinkRenderer(); + $oldLink = $linkRenderer->makeLink( $ot, null, [ 'id' => 'movepage-oldlink' ], [ 'redirect' => 'no' ] ); - $newLink = Linker::linkKnown( + $newLink = $linkRenderer->makeKnownLink( $nt, null, [ 'id' => 'movepage-newlink' ] @@ -723,7 +724,7 @@ class MovePageForm extends UnlistedSpecialPage { # be longer than 255 characters. $newSubpage = Title::makeTitleSafe( $newNs, $newPageName ); if ( !$newSubpage ) { - $oldLink = Linker::linkKnown( $oldSubpage ); + $oldLink = $linkRenderer->makeKnownLink( $oldSubpage ); $extraOutput[] = $this->msg( 'movepage-page-unmoved' )->rawParams( $oldLink ) ->params( Title::makeName( $newNs, $newPageName ) )->escaped(); continue; @@ -731,7 +732,7 @@ class MovePageForm extends UnlistedSpecialPage { # This was copy-pasted from Renameuser, bleh. if ( $newSubpage->exists() && !$oldSubpage->isValidMoveTarget( $newSubpage ) ) { - $link = Linker::linkKnown( $newSubpage ); + $link = $linkRenderer->makeKnownLink( $newSubpage ); $extraOutput[] = $this->msg( 'movepage-page-exists' )->rawParams( $link )->escaped(); } else { $success = $oldSubpage->moveTo( $newSubpage, true, $this->reason, $createRedirect ); @@ -740,14 +741,14 @@ class MovePageForm extends UnlistedSpecialPage { if ( $this->fixRedirects ) { DoubleRedirectJob::fixRedirects( 'move', $oldSubpage, $newSubpage ); } - $oldLink = Linker::link( + $oldLink = $linkRenderer->makeLink( $oldSubpage, null, [], [ 'redirect' => 'no' ] ); - $newLink = Linker::linkKnown( $newSubpage ); + $newLink = $linkRenderer->makeKnownLink( $newSubpage ); $extraOutput[] = $this->msg( 'movepage-page-moved' ) ->rawParams( $oldLink, $newLink )->escaped(); ++$count; @@ -759,8 +760,8 @@ class MovePageForm extends UnlistedSpecialPage { break; } } else { - $oldLink = Linker::linkKnown( $oldSubpage ); - $newLink = Linker::link( $newSubpage ); + $oldLink = $linkRenderer->makeKnownLink( $oldSubpage ); + $newLink = $linkRenderer->makeLink( $newSubpage ); $extraOutput[] = $this->msg( 'movepage-page-unmoved' ) ->rawParams( $oldLink, $newLink )->escaped(); } @@ -804,8 +805,9 @@ class MovePageForm extends UnlistedSpecialPage { $out->addWikiMsg( 'movesubpagetext', $this->getLanguage()->formatNum( $count ) ); $out->addHTML( "\n" ); diff --git a/includes/specials/SpecialNewpages.php b/includes/specials/SpecialNewpages.php index 41890f2ca7..718a6dc794 100644 --- a/includes/specials/SpecialNewpages.php +++ b/includes/specials/SpecialNewpages.php @@ -188,9 +188,13 @@ class SpecialNewpages extends IncludableSpecialPage { unset( $changed['offset'] ); // Reset offset if query type changes $self = $this->getPageTitle(); + $linkRenderer = $this->getLinkRenderer(); foreach ( $filters as $key => $msg ) { $onoff = 1 - $this->opts->getValue( $key ); - $link = Linker::link( $self, $showhide[$onoff], [], + $link = $linkRenderer->makeLink( + $self, + new HtmlArmor( $showhide[$onoff] ), + [], [ $key => $onoff ] + $changed ); $links[$key] = $this->msg( $msg )->rawParams( $link )->escaped(); @@ -307,28 +311,25 @@ class SpecialNewpages extends IncludableSpecialPage { $spanTime = Html::element( 'span', [ 'class' => 'mw-newpages-time' ], $lang->userTimeAndDate( $result->rc_timestamp, $this->getUser() ) ); - $time = Linker::linkKnown( + $linkRenderer = $this->getLinkRenderer(); + $time = $linkRenderer->makeKnownLink( $title, - $spanTime, + new HtmlArmor( $spanTime ), [], - [ 'oldid' => $result->rc_this_oldid ], - [] + [ 'oldid' => $result->rc_this_oldid ] ); $query = $title->isRedirect() ? [ 'redirect' => 'no' ] : []; - // Linker::linkKnown() uses 'known' and 'noclasses' options. - // This breaks the colouration for stubs. - $plink = Linker::link( + $plink = $linkRenderer->makeKnownLink( $title, null, [ 'class' => 'mw-newpages-pagename' ], - $query, - [ 'known' ] + $query ); - $histLink = Linker::linkKnown( + $histLink = $linkRenderer->makeKnownLink( $title, - $this->msg( 'hist' )->escaped(), + $this->msg( 'hist' )->text(), [], [ 'action' => 'history' ] ); diff --git a/includes/specials/SpecialSearch.php b/includes/specials/SpecialSearch.php index 36ea983893..45d24152be 100644 --- a/includes/specials/SpecialSearch.php +++ b/includes/specials/SpecialSearch.php @@ -485,7 +485,9 @@ class SpecialSearch extends SpecialPage { protected function getDidYouMeanHtml( SearchResultSet $textMatches ) { # mirror Go/Search behavior of original request .. $params = [ 'search' => $textMatches->getSuggestionQuery() ]; - if ( $this->fulltext != null ) { + if ( $this->fulltext === null ) { + $params['fulltext'] = 'Search'; + } else { $params['fulltext'] = $this->fulltext; } $stParams = array_merge( $params, $this->powerSearchOptions() ); @@ -519,7 +521,9 @@ class SpecialSearch extends SpecialPage { // Search instead for '$orig' $params = [ 'search' => $textMatches->getQueryAfterRewrite() ]; - if ( $this->fulltext != null ) { + if ( $this->fulltext === null ) { + $params['fulltext'] = 'Search'; + } else { $params['fulltext'] = $this->fulltext; } $stParams = array_merge( $params, $this->powerSearchOptions() ); diff --git a/includes/specials/pagers/CategoryPager.php b/includes/specials/pagers/CategoryPager.php index cba4952b6f..b78fed89d5 100644 --- a/includes/specials/pagers/CategoryPager.php +++ b/includes/specials/pagers/CategoryPager.php @@ -18,6 +18,7 @@ * @file * @ingroup Pager */ +use MediaWiki\Linker\LinkRenderer; /** * @ingroup Pager @@ -25,16 +26,16 @@ class CategoryPager extends AlphabeticPager { /** - * @var PageLinkRenderer + * @var LinkRenderer */ protected $linkRenderer; /** * @param IContextSource $context * @param string $from - * @param PageLinkRenderer $linkRenderer + * @param LinkRenderer $linkRenderer */ - public function __construct( IContextSource $context, $from, PageLinkRenderer $linkRenderer + public function __construct( IContextSource $context, $from, LinkRenderer $linkRenderer ) { parent::__construct( $context ); $from = str_replace( ' ', '_', $from ); @@ -74,7 +75,7 @@ class CategoryPager extends AlphabeticPager { $this->mResult->rewind(); foreach ( $this->mResult as $row ) { - $batch->addObj( Title::makeTitleSafe( NS_CATEGORY, $row->cat_title ) ); + $batch->addObj( new TitleValue( NS_CATEGORY, $row->cat_title ) ); } $batch->execute(); $this->mResult->rewind(); @@ -85,7 +86,7 @@ class CategoryPager extends AlphabeticPager { function formatRow( $result ) { $title = new TitleValue( NS_CATEGORY, $result->cat_title ); $text = $title->getText(); - $link = $this->linkRenderer->renderHtmlLink( $title, $text ); + $link = $this->linkRenderer->makeLink( $title, $text ); $count = $this->msg( 'nmembers' )->numParams( $result->cat_pages )->escaped(); return Html::rawElement( 'li', null, $this->getLanguage()->specialList( $link, $count ) ) . "\n"; diff --git a/includes/title/MediaWikiPageLinkRenderer.php b/includes/title/MediaWikiPageLinkRenderer.php deleted file mode 100644 index a565271019..0000000000 --- a/includes/title/MediaWikiPageLinkRenderer.php +++ /dev/null @@ -1,134 +0,0 @@ -formatter = $formatter; - $this->baseUrl = $baseUrl; - } - - /** - * Returns the (partial) URL for the given page (including any section identifier). - * - * @param LinkTarget $page The link's target - * @param array $params Any additional URL parameters. - * - * @return string - */ - public function getPageUrl( LinkTarget $page, $params = [] ) { - // TODO: move the code from Linker::linkUrl here! - // The below is just a rough estimation! - - $name = $this->formatter->getPrefixedText( $page ); - $name = str_replace( ' ', '_', $name ); - $name = wfUrlencode( $name ); - - $url = $this->baseUrl . $name; - - if ( $params ) { - $separator = ( strpos( $url, '?' ) ) ? '&' : '?'; - $url .= $separator . wfArrayToCgi( $params ); - } - - $fragment = $page->getFragment(); - if ( $fragment !== '' ) { - $url = $url . '#' . wfUrlencode( $fragment ); - } - - return $url; - } - - /** - * Returns an HTML link to the given page, using the given surface text. - * - * @param LinkTarget $linkTarget The link's target - * @param string $text The link's surface text (will be derived from $page if not given). - * - * @return string - */ - public function renderHtmlLink( LinkTarget $linkTarget, $text = null ) { - if ( $text === null ) { - $text = $this->formatter->getFullText( $linkTarget ); - } - - // TODO: move the logic implemented by Linker here, - // using $this->formatter and $this->baseUrl, and - // re-implement Linker to use a HtmlPageLinkRenderer. - - $title = Title::newFromLinkTarget( $linkTarget ); - $link = Linker::link( $title, htmlspecialchars( $text ) ); - - return $link; - } - - /** - * Returns a wikitext link to the given page, using the given surface text. - * - * @param LinkTarget $page The link's target - * @param string $text The link's surface text (will be derived from $page if not given). - * - * @return string - */ - public function renderWikitextLink( LinkTarget $page, $text = null ) { - if ( $text === null ) { - $text = $this->formatter->getFullText( $page ); - } - - $name = $this->formatter->getFullText( $page ); - - return '[[:' . $name . '|' . wfEscapeWikiText( $text ) . ']]'; - } -} diff --git a/includes/title/PageLinkRenderer.php b/includes/title/PageLinkRenderer.php deleted file mode 100644 index e26fe1a2d5..0000000000 --- a/includes/title/PageLinkRenderer.php +++ /dev/null @@ -1,69 +0,0 @@ -İqaz: Şıma be hesabê xo nêkewtê cı. \nAdresê şımayê IP tarixê vırnayışê na pele de do qeyd bo. Eke şıma [$1 cıkewê] ya zi [$2 hesab vırazê], vurnayışê şıma be zewbina kare ra nameyê şıma rê bar beno.", "anonpreviewwarning": "\"Şıma be hesabê xo nêkewtê cı. Eke qeyd kerê, adresê şımaê IP tarixê vırnayışê na pele de do qeyd bo.\"", "missingsummary": "'''DİQET:''' Şıma jû xulasa nênuşte.\nEke şıma \"{{int:savearticle}}\" reyna bıtıknê, vırnayışê şıma bê xulasa qeyd beno.", @@ -749,6 +749,7 @@ "history-feed-description": "Wiki de tarixê çımraviyarnayışê na pele", "history-feed-item-nocomment": "$1 miyanê $2i de", "history-feed-empty": "Pela cıgeyrayiye çıniya.\nBeno ke ena esteriya, ya zi namê cı vuriyo.\nSeba pelanê muhimanê newan [[Special:Search|cıgeyrayışê wiki de]] bıcerebne.", + "history-edit-tags": "Etiketa weçinaye rewizyoni timar ke", "rev-deleted-comment": "(Timarkerdışe enay hewadeyayo)", "rev-deleted-user": "(nameyê karberi esteriyo)", "rev-deleted-event": "(fealiyetê cıkewtışi esteriyo)", @@ -765,7 +766,7 @@ "rev-suppressed-unhide-diff": "Nê Timarkerdışi ra yewi '''çap biyo'''.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rocaneyê vındertışi] de teferru'ati esti.\nEke şıma serkari u devam bıkeri [$1 no vurnayiş şıma eşkeni bıvini].", "rev-deleted-diff-view": "Jew timarkerdışê ena versiyon '''wedariyayo''.\nÎdarekarî şenê ena versiyon bivîne; belki tiya de [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} wedarnayişî] de teferruat esto.", "rev-suppressed-diff-view": "Jew timarkerdışê ena versiyon '''Ploxneyış'' biyo.\nÎdarekarî eşkeno ena dif bivîne; belki tiya de [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} ploxnayış] de teferruat esto.", - "rev-delundel": "bımocne/bınımne", + "rev-delundel": "bıasne/bınımne", "rev-showdeleted": "bıasene", "revisiondelete": "Çımraviyarnayışan bestere/peyser biya", "revdelete-nooldid-title": "Çımraviyarnayışo waşte nêvêreno", @@ -818,7 +819,7 @@ "mergehistory-into": "Pela destinasyonî", "mergehistory-list": "tarixê vurnayîşî ke eşkeno yew bi.", "mergehistory-merge": "[[:$1]] qey ney revizyonê cêrini [[:$2]] şıma ekeni piyawani. Benatê wexto muwaqqet de piyayanayişê rezizyonan de tuşa radyo bıxebitne.", - "mergehistory-go": "Vernayîşê yewbiyayeni bimocne", + "mergehistory-go": "Yew bıyaye vurriyayışa bıasne", "mergehistory-submit": "revizyonî yew bike", "mergehistory-empty": "Revizyonî yew nibenê.", "mergehistory-done": "$1 ra $3 {{PLURAL:$3|revizyon|revizyoni}} [[:$2]] de {{PLURAL:$3|biyo|biyê}} têmiyan.", @@ -1004,7 +1005,7 @@ "prefs-advancedrendering": "Tercihê raverberdey", "prefs-advancedsearchoptions": "Tercihê raverberdey", "prefs-advancedwatchlist": "Tercihê raverberdey", - "prefs-displayrc": "Tercihan bımocne", + "prefs-displayrc": "Tercihê asenayışi", "prefs-displaywatchlist": "Weçinayışê mocnayışi", "prefs-tokenwatchlist": "Morge", "prefs-diffs": "Ferqi", @@ -1184,7 +1185,7 @@ "recentchanges-legend-plusminus": "''(±123)''", "recentchanges-submit": "Bıasene", "rcnotefrom": "Cêr de $2 ra nata vurnayışiyê asenê (tewr vêşi $1 asenê).", - "rclistfrom": "$3 $2 ra tepiya vurnayışanê neweyan bımocne", + "rclistfrom": "$3 $2 ra tepiya vurriyayışanê neweyan bıasne", "rcshowhideminor": "vurnayışê werdiyi $1", "rcshowhideminor-show": "Bıasene", "rcshowhideminor-hide": "Bınımne", @@ -1651,10 +1652,11 @@ "checkbox-select": "Weçinaye: $1", "checkbox-all": "Pêro", "checkbox-none": "Temam", + "checkbox-invert": "Doç kerdış", "allpages": "Peli pêro", "nextpage": "Pela badê cû ($1)", "prevpage": "Pela verêne ($1)", - "allpagesfrom": "Pelanê ke be ena herfe dest pêkenê bımocne", + "allpagesfrom": "Pera liste kerdışi bıasne:", "allpagesto": "Pelanê ke be ena herfe qediyenê bımocne:", "allarticles": "Wesiqey pêro", "allinnamespace": "Peli pênro ( $1 cayênameyî)", @@ -1669,7 +1671,7 @@ "categories": "Kategoriy", "categories-submit": "Bıasene", "categoriespagetext": "{{PLURAL:$1|Kategoriya cêrene|Kategoriyanê cêrênan}} de peli ya zi medya estê.\n[[Special:UnusedCategories|Kategoriyê ke nêxebetiyenê]] tiya de nêmocniyayê.\n[[Special:WantedCategories|Kategoriyanê waşteyeyan]] de zi bıvêne.", - "categoriesfrom": "Kategoriyê ke be ninan dest pêkenê, bımocne:", + "categoriesfrom": "Kategoriyê ke eneyra bas benê bıasne:", "deletedcontributions": "İştırakê karberi esterdi", "deletedcontributions-title": "İştırakê karberi esterdi", "sp-deletedcontributions-contribs": "iştıraqi", @@ -1772,7 +1774,7 @@ "wlshowlast": "Peyni de vurnayışan ra $1 seata u $2 roca bımocnê", "watchlist-hide": "Bınımne", "watchlist-submit": "Bıasene", - "wlshowtime": "Peyênan bımocne:", + "wlshowtime": "Asenayışa periyoda zemani:", "wlshowhideminor": "vurnayışê werdiyi", "wlshowhidebots": "boti", "wlshowhideliu": "karberê qeydıni", @@ -1901,7 +1903,7 @@ "restriction-level-sysop": "tam pawiyayo", "restriction-level-autoconfirmed": "nêm pawiyayo", "restriction-level-all": "kamci be sewiya", - "undelete": "Peleyê ke besterneyayê enê bımocnê", + "undelete": "Peranê esteryayan bıasne", "undeletepage": "bıewn revizyonê peli yê hewn a şiyayeyan u tepiya biyar", "undeletepagetitle": "'''pelo [[:$1|$1]] cêrın, wayirê revizyonê hewn a şiyayeyan o'''.", "viewdeletedpage": "Pelanê esteriyayeyan bımocne", @@ -2507,7 +2509,7 @@ "variantname-shi": "shi", "metadata": "Melumato serên", "metadata-help": "Ena dosya dı zafyer informasyoni esto. Belki ena dosya yew kamareyo dijital ya zi skaner ra vıraziyo.\nEg ena dosya, kondisyonê orcinali ra bıvuriya, belki detayanê hemi nıeseno.", - "metadata-expand": "Detayan bımocne", + "metadata-expand": "Detayan bıasne", "metadata-collapse": "melumati bınımne", "metadata-fields": "Resımê meydanê metadataê ke na pele de benê lista, pela resımmocnaene de ke tabloê metadata gına waro, gureniyenê.\nÊ bini zey sayekerdoğan nımiyenê.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude", "metadata-langitem": "'''$2:''' $1", diff --git a/languages/i18n/fi.json b/languages/i18n/fi.json index fc7778cd6a..0708ce4250 100644 --- a/languages/i18n/fi.json +++ b/languages/i18n/fi.json @@ -3731,6 +3731,7 @@ "authmanager-authplugin-setpass-failed-message": "Varmennuslisäosa esti salasanan muuttamisen.", "authmanager-authplugin-create-fail": "Varmennuslisäosa esti tunnuksen luonnin.", "authmanager-authplugin-setpass-denied": "Varmennuslisäosa ei salli salasanojen muuttamista.", + "authmanager-authplugin-setpass-bad-domain": "Virheellinen domain.", "authmanager-autocreate-noperm": "Automaattinen tunnustenluonti ei ole sallittu.", "authmanager-autocreate-exception": "Automaattinen tunnuksenluonti on tilapäisesti poistettu käytöstä aikaisempien virheiden vuoksi.", "authmanager-userdoesnotexist": "Käyttäjätunnusta ”$1” ei ole rekisteröity.", diff --git a/languages/i18n/fr.json b/languages/i18n/fr.json index a1ca75e198..61da65150e 100644 --- a/languages/i18n/fr.json +++ b/languages/i18n/fr.json @@ -1359,8 +1359,8 @@ "rightslogtext": "Voici l’historique des modifications des droits des utilisateurs.", "action-read": "lire cette page", "action-edit": "modifier cette page", - "action-createpage": "créer des pages", - "action-createtalk": "créer des pages de discussion", + "action-createpage": "créer cette page", + "action-createtalk": "créer cette page de discussion", "action-createaccount": "créer ce compte utilisateur", "action-autocreateaccount": "créer automatiquement ce compte utilisateur externe", "action-history": "afficher l’historique de cette page", diff --git a/languages/i18n/got.json b/languages/i18n/got.json index f9663c704f..020e6be6d8 100644 --- a/languages/i18n/got.json +++ b/languages/i18n/got.json @@ -36,11 +36,11 @@ "july": "𐌾𐌿𐌻𐌹𐌿𐍃", "august": "𐌰𐌲𐌿𐍃𐍄𐌿𐍃", "september": "𐍃𐌰𐌹𐍀𐍄𐌰𐌹𐌼𐌱𐌰𐌹𐍂", - "october": "𐌽𐌰𐌿𐌱𐌰𐌹𐌼𐌱𐌰𐌹𐍂", + "october": "𐌰𐌿𐌺𐍄𐍉𐌱𐌰𐌹𐍂", "november": "𐌽𐌰𐌿𐌱𐌰𐌹𐌼𐌱𐌰𐌹𐍂", "december": "𐌾𐌹𐌿𐌻𐌴𐌹𐍃", "january-gen": "𐌰𐍆𐍄𐌿𐌼𐌹𐌽𐍃 𐌾𐌹𐌿𐌻𐌴𐌹𐍃", - "february-gen": "𐍆𐌰𐌽𐌹𐌼𐌴𐌽𐍉𐌸𐌹𐍃", + "february-gen": "𐍆𐌰𐌹𐌱𐍂𐌿𐌰𐍂𐌴𐌹𐍃", "march-gen": "𐌺𐌰𐌻𐌳𐌼𐌴𐌽𐍉𐌸𐌹𐍃", "april-gen": "𐌲𐍂𐌰𐍃𐌼𐌴𐌽𐍉𐌸𐌹𐍃", "may-gen": "𐌱𐌻𐍉𐌼𐌰𐌼𐌴𐌽𐍉𐌸𐌹𐍃", @@ -51,25 +51,25 @@ "october-gen": "𐍅𐌴𐌹𐌽𐌼𐌴𐌽𐍉𐌸𐌹𐍃", "november-gen": "𐍆𐍂𐌿𐌼𐌹𐌽𐍃 𐌾𐌹𐌿𐌻𐌴𐌹𐍃", "december-gen": "𐌾𐌹𐌿𐌻𐌴𐌹𐍃", - "jan": "𐌰𐍆𐍄", + "jan": "𐌾𐌰𐌽", "feb": "𐍆𐌰𐌽", - "mar": "𐌺𐌰𐌻", - "apr": "𐌲𐍂𐌰", - "may": "𐌱𐌻𐍉", - "jun": "𐍅𐌰𐍂", - "jul": "𐌷𐌰𐍅", - "aug": "𐌰𐍃𐌰", - "sep": "𐌰𐌺𐍂", - "oct": "𐍅𐌴𐌹", - "nov": "𐍆𐍂𐌿", - "dec": "𐌾𐌹𐌿", + "mar": "𐌼𐌰𐍂", + "apr": "𐌰𐍀𐍂", + "may": "𐌼𐌰𐌾", + "jun": "𐌾𐌿𐌽", + "jul": "𐌾𐌿𐌻", + "aug": "𐌰𐍀𐍂", + "sep": "𐍃𐌰𐌹𐍀", + "oct": "𐌰𐌿𐌺", + "nov": "𐌽𐌰𐌿𐌱", + "dec": "𐌳𐌰𐌹𐌺", "september-date": "𐍃𐌰𐌹𐍀𐍄𐌰𐌹𐌼𐌱𐌰𐌹𐍂 $1", "november-date": "𐌽𐌰𐌿𐌱𐌰𐌹𐌼𐌱𐌰𐌹𐍂 $1", "pagecategories": "{{PLURAL:$1|𐌺𐌿𐌽𐌹|𐌺𐌿𐌽𐌾𐌰}}", "category_header": "𐌻𐌰𐌿𐌱𐍉𐍃 𐌹𐌽 𐌺𐌿𐌽𐌾𐌰 \"$1\"", "subcategories": "Dalaþkunjos", "category-media-header": "𐌼𐌴𐌳𐌾𐌰 𐌹𐌽𐌽 𐌺𐌿𐌽𐌾𐌰 \"$1\"", - "hidden-categories": "{{PLURAL:$1|𐍆𐌿𐌻𐌲𐌹𐌽𐍃 𐌺𐌰𐍄𐌴𐌲𐍉𐍂𐌹|𐍆𐌿𐌻𐌲𐌹𐌽𐌰𐌹 𐌺𐌰𐍄𐌴𐌲𐍉𐍂𐌾𐍉𐍃}}", + "hidden-categories": "{{PLURAL:$1|𐌰𐍆𐍆𐌹𐌻𐌷𐌰𐌽 𐌺𐌿𐌽𐌹|𐌰𐍆𐍆𐌹𐌻𐌷𐌰𐌽𐌰 𐌺𐌿𐌽𐌾𐌰}}", "category-subcat-count": "{{PLURAL:$2|𐌸𐌰𐍄𐌰 𐌺𐌿𐌽𐌹 𐌷𐌰𐌱𐌰𐌹𐌸 𐌸𐌰𐍄𐌴𐌹𐌽𐌴𐌹 𐌹𐍆𐍄𐌿𐌼 𐌼𐌹𐌽𐌽𐌹𐌶𐍉𐌽 𐌺𐌿𐌽𐌹|𐌸𐌰𐍄𐌰 𐌺𐌿𐌽𐌹 𐌷𐌰𐌱𐌰𐌹𐌸 {{PLURAL:$1|𐌼𐌹𐌽𐌽𐌹𐌶𐍉𐌽 𐌺𐌿𐌽𐌹|𐌹𐍆𐍄𐌿𐌼𐌰 $1 𐌼𐌹𐌽𐌽𐌹𐌶𐍉𐌽𐌰 𐌺𐌿𐌽𐌾𐌰}}, 𐌰𐌻𐌻𐌰𐌹𐌶𐌴 $2 𐌺𐌿𐌽𐌾𐌴.}}", "category-article-count": "{{PLURAL:$2|𐌸𐌰𐍄𐌰 𐌺𐌿𐌽𐌹 𐌷𐌰𐌱𐌰𐌹𐌸 𐌸𐌰𐍄𐌰𐌹𐌽𐌴𐌹 𐌹𐍆𐍄𐌿𐌼𐌰𐌽 𐌻𐌰𐌿𐍆.|𐌹𐍆𐍄𐌿𐌼𐌰(𐌽𐍃) {{PLURAL:$1|𐌻𐌰𐌿𐍆𐍃 𐌹𐍃𐍄|$1 𐌻𐌰𐌿𐌱𐍉𐍃 𐍃𐌹𐌽𐌳}} 𐌹𐌽 𐌸𐌰𐌼𐌼𐌰 𐌺𐌿𐌽𐌾𐌰, 𐌰𐌻𐌻𐌰𐌹𐌶𐌴 $2 𐌻𐌰𐌿𐌱𐌴.}}", "about": "𐌿𐍆𐌰𐍂", @@ -87,7 +87,7 @@ "qbmyoptions": "𐌼𐌴𐌹𐌽𐌰 𐍃𐌴𐌹𐌳𐍉𐍃", "actions": "𐍅𐌰𐌿𐍂𐍃𐍄𐍅𐌴𐌹𐌽𐍃", "namespaces": "𐌽𐌰𐌼𐍉𐍂𐌿𐌼𐌰", - "variants": "𐌼𐌹𐍃𐍃𐌰𐌻𐌴𐌹𐌽𐍃", + "variants": "𐌼𐌹𐍃𐍃𐌰𐌻𐌴𐌹𐌺", "errorpagetitle": "𐍆𐌰𐌹𐍂𐌹𐌽𐌰 𐌳𐍅𐌰𐌻𐌹𐍃", "returnto": "𐌲𐌰𐍅𐌰𐌽𐌳𐌾𐌰𐌽 𐌰𐍄 $1.", "tagline": "𐍆𐍂𐌰𐌼 {{SITENAME}}", @@ -97,9 +97,9 @@ "go": "𐌲𐌰𐌲𐌲𐌰", "searcharticle": "𐌰𐍆𐌲𐌰𐌲𐌲𐌰𐌽", "history": "𐌻𐌰𐌿𐌱𐌰𐍃𐍀𐌹𐌻𐌻", - "history_short": "𐌰𐌹𐍂𐌹𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃", + "history_short": "𐍃𐍀𐌹𐌻𐌻", "printableversion": "𐌿𐍃𐌼𐌴𐍂𐌴𐌹𐌽𐍃 𐌳𐌿 𐌿𐍃𐌼𐌴𐌻𐌾𐌰𐌽", - "permalink": "𐍃𐌹𐌽𐍄𐌴𐌹𐌽𐍉 𐍃𐍄𐌰𐌽𐌳𐌰𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐌰", + "permalink": "𐌰𐌹𐍅𐌴𐌹𐌽𐌰 𐌲𐌰𐍅𐌹𐍃𐍃", "view": "𐍃𐌰𐌹𐍈", "view-foreign": "𐍃𐌰𐌹𐍈 𐌰𐌽𐌰 $1", "edit": "𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹", @@ -117,7 +117,7 @@ "talkpage": "𐌼𐌰𐌸𐌻𐌰𐍃𐌴𐌹𐌳𐌰", "talkpagelinktext": "𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰", "specialpage": "𐌿𐍃𐍃𐌹𐌽𐌳𐌰𐍃𐌴𐌹𐌳𐍉𐍃", - "personaltools": "𐍅𐌰𐌹𐍂𐌻𐌴𐌹𐌺𐍃 𐌱𐍂𐌿𐌺𐍅𐌰𐌹𐌷𐍄𐍃", + "personaltools": "𐍃𐍅𐌴𐍃𐌰𐌹 𐍃𐌰𐍂𐍅𐌰𐌽𐍃", "talk": "𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰", "views": "𐍃𐌹𐌿𐌽𐌴𐌹𐍃", "toolbox": "𐍃𐌰𐍂𐍅𐌰𐌽𐍃", @@ -126,15 +126,15 @@ "redirectpagesub": "𐍄𐌰𐌹𐌺𐌾𐌰𐍃𐌴𐌹𐌳𐍉", "lastmodifiedat": "𐍃𐌰 𐌻𐌰𐌿𐍆𐍃 𐌸𐌰𐍄𐌰 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄 𐌹𐌽𐌼𐌰𐌹𐌳𐌹𐌸𐍃 𐍅𐌰𐍃 ($1) ($2).", "jumpto": "𐌲𐌰𐌲𐌲 𐌳𐌿:", - "jumptonavigation": "𐍃𐌴𐌹𐌳𐍉𐌲𐌰𐍅𐌹𐍃𐍃", + "jumptonavigation": "𐌻𐌰𐌿𐌱𐌰𐌲𐌰𐍅𐌹𐍃𐍃𐌴𐌹𐍃", "jumptosearch": "𐍃𐍉𐌺𐌴𐌹", "aboutsite": "𐌱𐌹 {{SITENAME}}", "aboutpage": "Project:𐌱𐌹", "copyrightpage": "{{ns:project}}:𐌼𐌰𐌽𐌻𐌴𐌹𐌺𐌰𐍅𐌹𐍄𐍉𐌸𐌰", "currentevents": "𐌽𐌹𐌿𐌾𐌰 𐍅𐌰𐌹𐌷𐍄𐍃", "currentevents-url": "Project:𐌽𐌹𐌿𐌾𐌰 𐍅𐌰𐌹𐌷𐍄𐍃", - "disclaimers": "𐍅𐌰𐌳𐌾𐍉𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃", - "disclaimerpage": "Project:𐍅𐌰𐌳𐌾𐌹𐍃 𐌱𐌹𐌻𐌰𐌲𐌴𐌹𐌽𐍃", + "disclaimers": "𐌲𐌰𐍂𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃 𐍂𐌰𐌹𐌷𐍄𐌰𐌹𐍃", + "disclaimerpage": "Project:𐌲𐌰𐌼𐌰𐌹𐌽𐌰 𐌲𐌰𐍂𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐍂𐌰𐌹𐌷𐍄𐌰𐌹𐍃", "edithelp": "𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐌷𐌹𐌻𐍀𐌰", "mainpage": "𐌰𐌽𐌰𐍃𐍄𐍉𐌳𐌴𐌹𐌽𐌹𐌻𐌰𐌿𐍆𐍃", "mainpage-description": "𐌰𐌽𐌰𐍃𐍄𐍉𐌳𐌴𐌹𐌽𐌹𐌻𐌰𐌿𐍆𐍃", @@ -144,11 +144,11 @@ "privacypage": "Project:𐌲𐌰𐍂𐌴𐌳𐌴𐌹𐌽𐍉𐍃 𐍃𐌿𐌽𐌳𐍂𐍉𐍅𐌹𐍃𐌰𐌽𐌰", "retrievedfrom": "𐌲𐌰𐌽𐌿𐌼𐌰𐌽 𐍆𐍂𐌰𐌼 \"$1\"", "youhavenewmessages": "𐌸𐌿 𐌷𐌰𐌱𐌹𐍃 $1 ($2).", - "editsection": "𐌼𐌰𐌹𐌳𐌴𐌹", + "editsection": "𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹", "editold": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽", "editlink": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽", "viewsourcelink": "𐍃𐌰𐌹𐍈 𐌱𐍂𐌿𐌽𐌽𐌰𐌽", - "editsectionhint": "𐌼𐌰𐌹𐌳𐌴𐌹 𐌳𐌰𐌹𐌻: $1", + "editsectionhint": "𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹 𐌳𐌰𐌹𐌻: $1", "toc": "𐌹𐌽𐌽𐌰𐌽𐌰", "showtoc": "𐌰𐌿𐌲𐌾𐌰", "hidetoc": "𐍆𐌹𐌻𐌷𐌰𐌽", @@ -165,7 +165,7 @@ "nstab-image": "𐍆𐌴𐌹𐌻𐌰", "nstab-template": "𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽𐍃", "nstab-help": "𐌷𐌹𐌻𐍀𐌰", - "nstab-category": "𐌷𐌰𐌽𐍃𐌰", + "nstab-category": "𐌺𐌿𐌽𐌹", "mainpage-nstab": "𐌰𐌽𐌰𐍃𐍄𐍉𐌳𐌴𐌹𐌽𐌹𐌻𐌰𐌿𐍆𐍃", "error": "𐌰𐌹𐍂𐌶𐌴𐌹", "databaseerror-error": "𐌰𐌹𐍂𐌶𐌴𐌹: $1", @@ -228,7 +228,7 @@ "showdiff": "𐍅𐌹𐍄𐌰𐌽 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃", "loginreqlink": "𐌰𐍄𐌲𐌰𐌲𐌲", "newarticle": "(Niu)", - "newarticletext": "𐌻𐌰𐌹𐍃𐍄𐌹𐌳𐌴𐍃 𐌲𐌰𐍅𐌹𐍃 𐌳𐌿 𐌻𐌰𐌿𐌱𐌰 𐍃𐌰𐌴𐌹 𐌽𐌹𐍃𐍄. 𐌳𐌿 𐍃𐌺𐌰𐍀𐌾𐌰𐌽 𐌸𐌰𐌽𐌰 𐌻𐌰𐌿𐍆, 𐌰𐌽 𐌰𐍃𐍄𐍉𐌳𐌴𐌹 𐌼𐌴𐌻𐌾𐌰𐌽 𐌹𐌽 𐌰𐍂𐌺𐌰𐌹 𐌿𐍆 (𐍃𐌰𐌹𐍈 [$1 𐌷𐌹𐌻𐍀𐌰𐌻𐌰𐌿𐍆] 𐌼𐌰𐌽𐌰𐌲𐌹𐌶𐌹𐌽 𐌺𐌿𐌽𐌸𐌾𐌰). 𐌾𐌰𐌱𐌰𐌹 𐌹𐍃 𐌷𐌴𐍂 𐌹𐌽 𐌰𐌹𐍂𐌶𐌴𐌹𐌽𐍃, 𐌲𐌰𐌲𐌲 𐌳𐌿 <𐍃𐍄𐍂𐍉𐌽𐌲>𐌹𐌱𐌿𐌺𐌰𐌺𐌽𐌿𐍀𐍀𐌰𐌹.", + "newarticletext": "𐌻𐌰𐌹𐍃𐍄𐌹𐌳𐌴𐍃 𐌲𐌰𐍅𐌹𐍃 𐌳𐌿 𐌻𐌰𐌿𐌱𐌰 𐍃𐌰𐌴𐌹 𐌽𐌹𐍃𐍄. 𐌳𐌿 𐍃𐌺𐌰𐍀𐌾𐌰𐌽 𐌸𐌰𐌽𐌰 𐌻𐌰𐌿𐍆, 𐌰𐌽 𐌰𐍃𐍄𐍉𐌳𐌴𐌹 𐌼𐌴𐌻𐌾𐌰𐌽 𐌹𐌽 𐌰𐍂𐌺𐌰𐌹 𐌿𐍆 (𐍃𐌰𐌹𐍈 [$1 𐌷𐌹𐌻𐍀𐌰𐌻𐌰𐌿𐍆] 𐌼𐌰𐌽𐌰𐌲𐌹𐌶𐌹𐌽 𐌺𐌿𐌽𐌸𐌾𐌰). 𐌾𐌰𐌱𐌰𐌹 𐌹𐍃 𐌷𐌴𐍂 𐌹𐌽 𐌰𐌹𐍂𐌶𐌴𐌹𐌽𐍃, 𐌲𐌰𐌲𐌲 𐌳𐌿 <𐍃𐍄𐍂𐍉𐌽𐌲>𐌹𐌱𐌿𐌺𐌰𐌷𐌰𐌿𐌱𐌹𐌳𐌹𐌻𐍉𐌽.", "noarticletext": "𐌽𐌿 𐌽𐌹 𐍃𐌹𐌽𐌳 𐌱𐍉𐌺𐍉𐍃 𐌹𐌽 𐌸𐌰𐌼𐌼𐌰 𐌻𐌰𐌿𐌱𐌰.\n𐌼𐌰𐌲𐍄 [[Special:Search/{{PAGENAME}}|𐍃𐍉𐌺𐌾𐌰𐌽 𐌸𐌰𐍄𐌰 𐌻𐌰𐌿𐌱𐌰-𐌿𐍆𐌰𐍂𐌼𐌴𐌻𐌹]] 𐌹𐌽 𐌰𐌽𐌸𐌰𐍂𐌰𐌹𐌼 𐌻𐌰𐌿𐌱𐌰𐌼, [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 𐍃𐍉𐌺𐌾𐌰𐌽 𐌲𐌰𐌷𐌰𐌷𐌾𐍉 𐌲𐌰𐍆𐌰𐍃𐍄𐍉𐍃], 𐌰𐌹𐌸𐌸𐌰𐌿 [{{fullurl:{{FULLPAGENAME}}|action=edit}} 𐍃𐌺𐌰𐍀𐌾𐌰𐌽 𐌸𐌰𐌽𐌰 𐌻𐌰𐌿𐍆.]", "noarticletext-nopermission": "𐌽𐌿 𐌽𐌹 𐍃𐌹𐌽𐌳 𐌱𐍉𐌺𐍉𐍃 𐌹𐌽 𐌸𐌰𐌼𐌼𐌰 𐌻𐌰𐌿𐌱𐌰.\n𐌼𐌰𐌲𐍄 [[Special:Search/{{PAGENAME}}|𐍃𐍉𐌺𐌾𐌰𐌽 𐌸𐌰𐍄𐌰 𐌻𐌰𐌿𐌱𐌰-𐌿𐍆𐌰𐍂𐌼𐌴𐌻𐌹]] 𐌹𐌽 𐌰𐌽𐌸𐌰𐍂𐌰𐌹𐌼 𐌻𐌰𐌿𐌱𐌰𐌼, 𐌸𐌰𐌿 [{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 𐍃𐍉𐌺𐌾𐌰𐌽 𐌲𐌰𐌷𐌰𐌷𐌾𐍉 𐌲𐌰𐍆𐌰𐍃𐍄𐍉𐍃], 𐌹𐌸 𐌽𐌹 𐌷𐌰𐌱𐌰𐌹𐍃 𐌰𐌽𐌳𐌻𐌴𐍄 𐍃𐌺𐌰𐍀𐌾𐌰𐌽 𐌸𐌰𐌽𐌰 𐌻𐌰𐌿𐍆.", "updated": "(Nuwisan)", @@ -237,7 +237,7 @@ "editingsection": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1 (𐍆𐌴𐍂𐌰)", "editingcomment": "𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌰𐍆 $1 (𐍂𐍉𐌳𐌾𐌰𐍆𐌴𐍂𐌰)", "yourdiff": "𐌼𐌹𐍃𐍃𐌰𐌻𐌴𐌹𐌺𐍉𐍃", - "template-protected": "(𐌲𐌰𐌱𐌰𐌹𐍂𐌲𐌾𐌰𐌽)", + "template-protected": "(𐌷𐌰𐌱𐌰𐌹𐌸 𐌼𐌿𐌽𐌳)", "template-semiprotected": "(halb-gabaírgjan)", "hiddencategories": "𐍃𐌰 𐌻𐌰𐌿𐍆𐍃 𐌹𐍃𐍄 𐌲𐌰𐌳𐌰𐌹𐌻𐌰 {{PLURAL:$1|1 𐌰𐌽𐌰𐌻𐌰𐌿𐌲𐌽𐌹𐍃 𐌺𐌿𐌽𐌾𐌹𐍃|$1 𐌰𐌽𐌰𐌻𐌰𐌿𐌲𐌽𐌰𐌹𐌶𐌴 𐌺𐌿𐌽𐌾𐌴}}:‎", "permissionserrorstext-withaction": "𐌽𐌹 𐌷𐌰𐌱𐌰𐌹𐍃 𐌰𐌽𐌳𐌻𐌴𐍄 𐌳𐌿 $2, 𐌹𐌽 {{PLURAL:$1|𐌹𐍆𐍄𐌿𐌼𐌰𐌹𐌶𐍉𐍃 𐍅𐌰𐌹𐌷𐍄𐌰𐌹𐍃|𐌹𐍆𐍄𐌿𐌼𐌰𐌹𐌶𐍉 𐍅𐌰𐌹𐌷𐍄𐌴}}:", @@ -264,8 +264,8 @@ "lineno": "𐍃𐍄𐍂𐌹𐌺𐍃 $1:", "editundo": "𐍃𐌺𐌰𐍀𐌴𐌹 𐌰𐍆𐍄𐍂𐌰", "diff-multi-sameuser": "({{PLURAL:$1|𐌰𐌹𐌽𐌰 𐌼𐌹𐌳𐌿𐌼𐌰𐌲𐌰𐌱𐍉𐍄𐌴𐌹𐌽𐍃|$1 𐌼𐌹𐌳𐌿𐌼𐌰 𐌲𐌰𐌱𐍉𐍄𐌴𐌹𐌽𐍉𐍃}} 𐍆𐍂𐌰𐌼 𐍃𐌰𐌼𐌹𐌽 𐌱𐍂𐌿𐌺𐌾𐌹𐌽 𐌽𐌹 𐌰𐍄𐌰𐌿𐌲𐌹𐌳𐌰/𐌰𐍄𐌰𐌿𐌲𐌹𐌳𐍉𐍃)", - "searchresults": "𐍃𐍉𐌺𐌽𐌹𐍃 𐍄𐌰𐌿𐌾𐍉𐍃", - "searchresults-title": "𐍃𐍉𐌺𐌽𐌹𐍃 𐍄𐌰𐌿𐌾𐍉𐍃 𐍆𐌰𐌿𐍂 \"$1\"", + "searchresults": "𐍃𐍉𐌺𐌴𐌹𐌽𐌰𐌹𐍃 𐍄𐍉𐌾𐌰", + "searchresults-title": "𐍃𐍉𐌺𐌴𐌹𐌽𐌰𐌹𐍃 𐍄𐍉𐌾𐌰 𐍆𐌰𐌿𐍂 \"$1\"", "prevn": "𐌰𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|$1}}", "nextn": "𐌹𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|$1}}", "prevn-title": "𐍆𐌰𐌹𐍂𐌽𐌰 $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐌰𐌿𐌾𐍉𐍃}}", @@ -286,6 +286,7 @@ "search-section": "(𐍆𐌴𐍂𐌰 $1)", "search-suggest": "𐍄𐌰𐌹𐌺𐌽𐌹𐌳𐌰 𐌸𐌿: $1", "searchall": "𐌰𐌻𐌻𐍃", + "search-showingresults": "{{ZPLURAL:$4|𐍄𐌰𐌿𐌹 $1 𐍅𐌰𐌹𐌷𐍄𐌰𐌹𐍃 $3|𐍄𐍉𐌾𐌰 $1 - $2 𐍅𐌰𐌹𐌷𐍄𐌰𐌹𐍃 $3}}", "search-nonefound": "𐌽𐌹 𐌰𐌹𐌽𐌷𐌿𐌽 𐌲𐌰𐌲𐌹𐌱𐌾𐍉 𐍆𐌿𐌻𐌻𐌾𐌹𐌸 𐍃𐍉𐌺𐌴𐌹𐌽", "powersearch-legend": "𐍃𐍉𐌺𐌴𐌹𐌸", "preferences": "𐌼𐌴𐌹𐌽𐍉𐍃 𐌱𐍂𐌿𐌺𐌾𐌰𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌴𐌹𐍃", @@ -295,12 +296,12 @@ "saveprefs": "Melja", "searchresultshead": "Sokeiþ", "grouppage-sysop": "{{ns:project}}:𐍃𐌴𐌹𐌳𐍉𐍆𐌰𐌸𐍃", - "right-writeapi": "𐌱𐍂𐌿𐌺𐌴𐌹𐌽𐍃 𐌰𐍀𐌹 𐌼𐌴𐌻𐌴𐌹𐌽𐌰𐌹𐍃", + "right-writeapi": "𐌱𐍂𐌿𐌺𐌴𐌹𐌽𐍃 API 𐌼𐌴𐌻𐌴𐌹𐌽𐌰𐌹𐍃", "rightslog": "Niutandis stutjanlog", "nchanges": "$1 {{PLURAL:$1|máidein|máideins}}", "enhancedrc-history": "𐍃𐍀𐌹𐌻𐌻", - "recentchanges": "𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍉𐍃 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃", - "recentchanges-summary": "𐌰𐍆𐌰𐍂𐌻𐌰𐌹𐍃𐍄𐌴𐌹 𐌸𐌰𐌹𐌼 𐌰𐌽𐌳𐍅𐌰𐌹𐍂𐌸𐌹𐍃𐍄𐍉𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃 𐌳𐌿 𐍅𐌹𐌺𐌾𐌰 𐌰𐌽𐌰 𐌸𐌰𐌼𐌼𐌰 𐌻𐌰𐌿𐌱𐌰.", + "recentchanges": "𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍉𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃", + "recentchanges-summary": "𐌰𐍆𐌰𐍂𐌻𐌰𐌹𐍃𐍄𐌴𐌹 𐌸𐌰𐌹𐌼 𐌰𐌽𐌳𐍅𐌰𐌹𐍂𐌸𐌹𐍃𐍄𐍉𐌼 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐌼 𐌳𐌿 𐍅𐌹𐌺𐌾𐌰 𐌰𐌽𐌰 𐌸𐌰𐌼𐌼𐌰 𐌻𐌰𐌿𐌱𐌰.", "recentchanges-label-newpage": "𐍃𐍉 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐌲𐌰𐍃𐌺𐍉𐍀 𐌽𐌹𐌿𐌾𐌰𐌽𐌰 𐌻𐌰𐌿𐍆", "recentchanges-label-minor": "𐍃𐍉 𐌹𐍃𐍄 𐌻𐌴𐌹𐍄𐌹𐌻𐌰 𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃", "recentchanges-label-bot": "𐍃𐍉 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 𐍄𐍉𐌾𐌰𐌳𐌰 𐍅𐌰𐍂𐌸 𐍆𐍂𐌰𐌼 𐌼𐌰𐌷𐍄𐌹𐍃𐌺𐌰𐌻𐌺𐌰 (𐌱𐌰𐌿𐍄)", @@ -320,8 +321,8 @@ "rcshowhidemine-show": "𐌰𐍄𐌰𐌿𐌲𐌴𐌹", "rcshowhidemine-hide": "𐌰𐍆𐍆𐌹𐌻𐌷", "rclinks": "𐌰𐍄𐌰𐌿𐌲𐌴𐌹 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍉𐍃 $1 𐌹𐌽𐌼𐌰𐌹𐌳𐌹𐌽𐌹𐌽𐍃 𐌹𐌽 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐌰𐌹𐌼 $2 𐌳𐌰𐌲𐌰𐌼
$3", - "diff": "𐌻𐌴𐌹𐌺𐍃", - "hist": "𐍆𐍂𐌼𐌵", + "diff": "𐌼𐌹𐍃𐍃", + "hist": "𐍃𐍀𐌹𐌻𐌻", "hide": "𐍆𐌹𐌻𐌷𐌰𐌽", "show": "𐌷𐌿𐌻𐌾𐌰𐌽", "minoreditletter": "l", @@ -336,7 +337,7 @@ "upload": "𐌿𐍃𐌷𐌻𐌰𐌸𐌰𐌽 𐍆𐌴𐌹𐌻𐌰𐌽𐍃", "uploadbtn": "Ushlaþaiþ Feilans", "uploadlogpage": "Log af Ushlaþan", - "filedesc": "𐌼𐌰𐌿𐍂𐌲𐌰 𐍃𐌺𐌴𐌹𐍂𐌴𐌹𐌽𐍃", + "filedesc": "𐌼𐌰𐌿𐍂𐌲𐌿𐍃 𐍃𐌺𐌴𐌹𐍂𐌴𐌹𐌽𐍃", "watchthisupload": "Witan so seido", "imgfile": "Feilans", "listfiles": "Feilans tala", @@ -345,19 +346,19 @@ "filehist-help": "𐌰𐍄𐍄𐌴𐌺 𐌳𐌰𐌲/𐌼𐌴𐌻 𐌳𐌿 𐌰𐍄𐌰𐌿𐌲𐌾𐌰𐌽 𐌳𐌰𐍄𐌰 𐍃𐍅𐌰𐍃𐍅𐌴 𐌲𐌰𐌱𐌰𐌹𐍂𐌷𐍄𐌹𐌳𐌰 𐌹𐌽 𐌸𐌰𐌼𐌼𐌰 𐌼𐌴𐌻𐌰.", "filehist-current": "𐌽𐌿", "filehist-datetime": "𐍈𐌴𐌹𐌻𐌰", - "filehist-thumb": "𐍆𐍉𐍂𐍃𐌾𐌰𐌿", + "filehist-thumb": "𐌻𐌴𐌹𐍄𐌹𐌻𐌰 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐍃", "filehist-thumbtext": "𐌻𐌴𐌹𐍄𐌹𐌻𐌰𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐍃 𐌿𐍃𐌼𐌴𐍂𐌾𐌰 𐌹𐌽 $1", - "filehist-user": "𐌽𐌹𐌿𐍄𐌰𐌽𐌳𐌹𐍃", + "filehist-user": "𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐌳𐍃/𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐌳𐌹", "filehist-dimensions": "𐍅𐌰𐌷𐍃𐍄𐌿𐍃", "filehist-filesize": "Feilans wahstus", - "filehist-comment": "𐌻𐌴𐌹𐍄𐌻𐌰𐍃𐍀𐌹𐌻𐌻𐍉𐌽", + "filehist-comment": "𐍅𐌰𐌿𐍂𐌳", "imagelinks": "𐍆𐌴𐌹𐌻𐌹𐌽𐍃 𐌱𐍂𐌿𐌺𐌹𐍃", "linkstoimage": "𐌰𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|𐍃𐍉 𐍃𐌴𐌹𐌳𐍉 𐌻𐌴𐌹𐌽𐌺𐍉𐌸|𐌸𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐌳}} 𐌸𐌹𐌶𐍉𐌶𐌿𐌷 𐍆𐌴𐌹𐌻𐍉𐍃", "sharedupload-desc-here": "𐍃𐍉 𐌳𐌰𐍄𐌰 𐌹𐍃𐍄 𐍆𐍂𐌰𐌼 $1 𐌾𐌰𐌷 𐌼𐌰𐌲 𐌱𐍂𐌿𐌺𐌾𐌰𐌳𐌰 𐍆𐍂𐌰𐌼 𐌰𐌽𐌸𐌰𐍂𐌰𐌹𐌼 𐍆𐌰𐌿𐍂𐌰𐍅𐌰𐌿𐍂𐍀𐍉𐌼.\n𐌲𐌰𐍃𐌺𐌴𐌹𐍂𐌴𐌹𐌽𐍃 𐌰𐌽𐌰 𐍃𐌴𐌹𐌽𐌰𐌼𐌼𐌰 [$2 𐌳𐌰𐍄𐌰 𐍃𐌺𐌴𐌹𐍂𐌴𐌹𐌽𐌹𐌻𐌰𐌿𐌱𐌰] 𐌾𐌰𐌹𐌽𐌰𐍂 𐌰𐍄𐌰𐌿𐌲𐌹𐌸𐍃 𐌹𐍃𐍄 𐌿𐍆.", "filedelete-submit": "Taíran", "mimesearch": "MIME sokeiþ", "listredirects": "𐍄𐌰𐌻𐌰 𐌰𐍆 𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐍃𐌴𐌹𐌳𐍉𐍃", - "randompage": "𐌸𐌿𐍃 𐌿𐌽𐌺𐌿𐌽𐌸𐌰𐌽 𐌻𐌰𐌿𐍆", + "randompage": "𐌸𐌿𐍃 𐌿𐌽𐌺𐌿𐌽𐌸𐍃 𐌻𐌰𐌿𐍆𐍃", "statistics": "𐍃𐌴𐌹𐌳𐍉𐍃𐍄𐌰𐍄𐌹𐍃𐍄𐌹𐌺", "brokenredirects-edit": "(𐌼𐌰𐌹𐌳𐌾𐌰𐌽)", "brokenredirects-delete": "(𐍄𐌰𐌹𐍂𐌰𐌽)", @@ -384,7 +385,7 @@ "prevpage": "𐌰𐍆𐍄𐌿𐌼𐌰 𐍃𐌴𐌹𐌳𐍉 ($1)", "allarticles": "𐌰𐌻𐌻𐌰𐌹 𐌻𐌰𐌿𐌱𐍉𐍃", "allpagessubmit": "𐌰𐍆𐌲𐌰𐌲𐌲𐌰𐌽", - "categories": "𐌺𐌿𐌽𐌾𐍉𐍃", + "categories": "𐌺𐌿𐌽𐌾𐌰", "linksearch-ns": "𐍃𐌴𐌹𐌳𐍉𐍆𐌴𐍂𐌰:", "emailuser": "𐍃𐌰𐌽𐌳𐌾𐌰𐌽 𐌸𐍉 𐌽𐌹𐌿𐍄𐌰𐌽𐌳 𐌱𐍉𐌺𐍉𐌼", "watchlist": "𐌼𐌴𐌹𐌽𐍉𐍃 𐍅𐌹𐍄𐌰𐌽𐌳𐍃𐌻𐌴𐌹𐍃𐍄𐌰", @@ -402,7 +403,7 @@ "dellogpage": "𐍄𐌰𐌹𐍂𐌰 𐌰𐌹𐍂𐍅𐌱𐍉𐌺𐌰", "deleteotherreason": "𐌰𐌽𐌸𐌰𐍂/𐌼𐌰𐌹𐍃 𐌼𐌹𐍄𐍉𐌽𐍃:", "deletereasonotherlist": "𐌰𐌽𐌸𐌰𐍂 𐌼𐌹𐍄𐍉𐌽𐍃", - "rollbacklink": "𐌰𐍆𐍅𐌰𐌻𐍅𐌾𐌰𐌽", + "rollbacklink": "𐌰𐍆𐍅𐌰𐌻𐍅𐌴𐌹", "protectlogpage": "Log af Baírgjan", "prot_1movedto2": "[[$1]] skiubiþ du [[$2]]", "protect-level-sysop": "𐍃𐌴𐌹𐌳𐍉𐍆𐌰𐌸𐍃 𐌰𐌹𐌽𐌰𐌷𐌰", @@ -426,7 +427,7 @@ "sp-contributions-newbies-sub": "Faúr niujis niutandis", "sp-contributions-blocklog": "Logboka af afdraúsjan", "sp-contributions-talk": "Maþleiseido", - "whatlinkshere": "𐍈𐌰𐍂𐌾𐌹𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌷𐌻𐌰𐌲𐌺𐌾𐌰𐌽𐌳 𐌷𐌹𐌳𐍂𐌴", + "whatlinkshere": "𐌰𐌻𐌻𐌰𐌹 𐌻𐌰𐌿𐌱𐍉𐍃 𐌸𐌰𐌹𐌴𐌹 𐌱𐍂𐌹𐌲𐌲𐌰𐌽𐌳 𐌸𐌿𐌺 𐌷𐌹𐌳𐍂𐌴", "whatlinkshere-title": "𐌻𐌰𐌿𐌱𐍉𐍃 𐌸𐌰𐌹𐌴𐌹 𐍄𐌰𐌹𐌺𐌽𐌾𐌰𐌽𐌳 𐌳𐌿 \"$1\"", "whatlinkshere-page": "𐌻𐌰𐌿𐍆𐍃:", "isredirect": "𐍄𐌰𐌹𐌺𐌾𐌰𐍃𐌴𐌹𐌳𐍉", @@ -443,7 +444,7 @@ "blocklink": "𐍅𐌰𐍂𐌲𐌾𐌰𐌽", "unblocklink": "𐍅𐌰𐌽𐌳𐌾𐌰𐌽", "change-blocklink": "𐌲𐌰𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐍅𐌰𐌿𐍂𐌾𐌰𐍅𐌰𐌳𐌳𐌾𐌿𐍃", - "contribslink": "𐌲𐌹𐌱𐍉𐍃", + "contribslink": "𐌱𐌹𐌰𐌿𐌺𐌰𐌹𐌽𐌴𐌹𐍃", "blocklogpage": "𐌻𐍉𐌲𐌱𐍉𐌺𐌰 𐌰𐍆 𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌾𐌰𐌽", "blocklogentry": "𐌰𐍆𐌳𐍂𐌰𐌿𐍃𐌹𐌸 [[$1]] 𐍆𐌰𐌿𐍂 $2 $3", "newtitle": "𐌳𐌿 𐌽𐌹𐌿𐌾𐌹𐍃 𐌽𐌰𐌼𐍉𐍃:", @@ -459,7 +460,7 @@ "tooltip-pt-preferences": "{{GENDER:|Your}} 𐌲𐌰𐌻𐌴𐌹𐌺𐌰𐌽𐌳𐌴𐌹𐌽𐍃 𐍅𐌰𐌹𐌷𐍄𐍃", "tooltip-pt-watchlist": "𐍅𐌹𐌺𐍉 𐌻𐌰𐌿𐌱𐌴 𐌸𐌹𐌶𐌴𐌴𐌹 𐌰𐍄𐍅𐌰𐌹𐍃𐍄 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐌼", "tooltip-pt-mycontris": "A list of {{GENDER:|your}} 𐌱𐌹𐌰𐌿𐌺𐌰𐌹𐌽𐌴𐌹𐍃 𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐌳𐌹𐍃", - "tooltip-pt-login": "𐌸𐌿 𐌹𐍃 𐌲𐌰𐍈𐌰𐍄𐌾𐌰𐌽𐌳𐍃 𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽; 𐌰𐌸𐌸𐌰𐌽, 𐌽𐌹𐍃𐍄 𐌸𐌰𐌿𐍂𐌱𐌰𐌽𐍃", + "tooltip-pt-login": "𐍄𐌹𐌼𐍂𐌾𐌰𐌶𐌰 𐌳𐌿 𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽, 𐌹𐌸 𐌽𐌹𐍃𐍄 𐍃𐌺𐌿𐌻𐌳 𐌸𐌿𐍃", "tooltip-pt-logout": "𐌻𐌴𐌹𐌸𐌰𐌽", "tooltip-pt-createaccount": "𐌱𐌰𐍄𐌹𐌶𐍉 𐌹𐍃𐍄 𐌸𐌿𐍃 𐍃𐌺𐌰𐍀𐌾𐌰𐌽 𐌺𐌰𐍅𐍄𐍃𐌾𐍉𐌽, 𐌹𐌸 𐍃𐌺𐌿𐌻𐌳 𐌽𐌹𐍃𐍄", "tooltip-ca-talk": "𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌹 𐌱𐌹 𐌷𐌰𐌱𐌰𐌽𐌳𐌰𐌽 𐌻𐌰𐌿𐍆", @@ -479,16 +480,16 @@ "tooltip-n-mainpage-description": "𐌲𐌰𐍅𐌴𐌹𐍃 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐌻𐌰𐌿𐌱𐌹𐍃", "tooltip-n-portal": "𐌱𐌹 𐍆𐌰𐌿𐍂𐌰𐍅𐌰𐌿𐍂𐍀𐌰, 𐍈𐌰 𐌼𐌰𐌲𐍄 𐍄𐌰𐌿𐌾𐌰𐌽, 𐍈𐌰𐍂 𐌱𐌹𐌲𐌹𐍄𐌹𐍃 𐍅𐌰𐌹𐌷𐍄𐌹𐌽𐍃", "tooltip-n-currentevents": "𐌱𐌹𐌲𐌹𐌸𐌹𐍃 𐌱𐌰𐌺𐌲𐌰𐌷𐌰𐌱𐌹 𐌱𐌹 𐌽𐌹𐌿𐌾𐌰𐌽𐍃 𐍅𐌰𐌹𐌷𐍄𐌰𐌽𐍃", - "tooltip-n-recentchanges": "𐌻𐌴𐌹𐍃𐍄𐌰 𐌼𐌰𐌹𐌳𐌾𐌴𐌹𐌽𐌴 𐌽𐌿 𐌰𐌽𐌰 𐌸𐌰𐌼𐌼𐌰 𐍅𐌹𐌺𐌾𐌰", - "tooltip-n-randompage": "𐌿𐍃𐌱𐍂𐌹𐌲𐌲 𐌸𐌿𐍃 𐌿𐌽𐌺𐌿𐌽𐌸𐌰𐌽 𐌻𐌰𐌿𐍆", - "tooltip-n-help": "𐍃𐌰 𐍃𐍄𐌰𐌸𐍃 𐍆𐌹𐌽𐌸𐌰𐌽", + "tooltip-n-recentchanges": "𐍅𐌹𐌺𐍉 𐌰𐌽𐌳𐍅𐌰𐌹𐍂𐌸𐌰𐌹𐌶𐍉 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉 𐌹𐌽 𐌸𐌰𐌼𐌼𐌰 𐍅𐌹𐌺𐌾𐌰", + "tooltip-n-randompage": "𐌿𐍃𐌱𐍂𐌹𐌲𐌲 𐌸𐌿𐍃 𐌿𐌽𐌺𐌿𐌽𐌸𐌰𐌽𐌰 𐌻𐌰𐌿𐍆", + "tooltip-n-help": "𐍃𐌰 𐍃𐍄𐌰𐌸𐍃 𐌳𐌿 𐌱𐌹𐌲𐌹𐍄𐌰𐌽", "tooltip-t-whatlinkshere": "𐍅𐌹𐌺𐍉 𐌰𐌻𐌻𐌰𐌹𐌶𐌴 𐍅𐌹𐌺𐌾𐌰𐌻𐌰𐌿𐌱𐌴 𐌸𐌹𐌶𐌴𐌴𐌹 𐌱𐍂𐌹𐌲𐌲𐌰𐌽𐌳 𐌸𐌿𐌺 𐌷𐌹𐌳𐍂𐌴", "tooltip-t-recentchangeslinked": "𐌰𐌽𐌳𐍅𐌰𐌹𐍂𐌸𐍉𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃 𐌹𐌽 𐌻𐌰𐌿𐌱𐌰𐌼 𐌲𐌰𐍅𐌹𐌳𐌰𐌽𐌰𐌹𐌼 𐌰𐍆 𐌸𐌰𐌼𐌼𐌰 𐌻𐌰𐌿𐌱𐌰.", "tooltip-feed-atom": "𐌰𐍄𐍉𐌼 𐍆𐍉𐌳𐌴𐌹𐌽𐍃 𐌸𐌰𐌼𐌼𐌰 𐌻𐌰𐌿𐌱𐌰", "tooltip-t-contributions": "𐍅𐌹𐌺𐍉 𐌱𐌹𐌰𐌿𐌺𐌰𐌹𐌽𐌴 𐍆𐍂𐌰𐌼 {{GENDER:$1|𐌸𐌰𐌼𐌼𐌰 𐌱𐍂𐌿𐌺𐌾𐌹𐌽}}", "tooltip-t-upload": "𐌿𐍃𐌷𐌻𐌰𐌸𐌰𐌽 𐍆𐌴𐌹𐌻𐌰𐌽𐍃", "tooltip-t-specialpages": "𐍅𐌹𐌺𐍉 𐌰𐌻𐌻𐌰𐌹𐌶𐌴 𐌿𐍃𐍃𐌹𐌽𐌳𐌰𐌹𐌶𐌴 𐌻𐌰𐌿𐌱𐌴", - "tooltip-t-print": "𐌿𐍃𐌼𐌴𐍂𐌹 𐌸𐌹𐍃 𐌻𐌰𐌿𐌱𐌹𐍃 𐌸𐌹𐌶𐌴𐌹 𐌼𐌰𐌲𐍄 𐌸𐍂𐌿𐌺𐌾𐌰𐌽", + "tooltip-t-print": "𐌿𐍃𐌼𐌴𐍂𐌴𐌹𐌽𐍃 𐌸𐌹𐍃 𐌻𐌰𐌿𐌱𐌹𐍃 𐌳𐌿 𐌿𐍃𐌼𐌴𐌻𐌾𐌰𐌽", "tooltip-t-permalink": "𐌰𐌹𐍅𐌴𐌹𐌽𐌰 𐌲𐌰𐍅𐌹𐍃𐍃 𐌳𐌿 𐌸𐌹𐌶𐌰𐌹 𐌰𐍆𐍄𐍂𐌰𐍃𐌹𐌿𐌽𐌰𐌹 𐌸𐌹𐍃 𐌻𐌰𐌿𐌱𐌹𐍃", "tooltip-ca-nstab-main": "𐍃𐌰𐌹𐍈 𐌷𐌰𐌱𐌰𐌽𐌳𐌰𐌽 𐌻𐌰𐌿𐍆", "tooltip-ca-nstab-user": "𐍃𐌰𐌹𐍈 𐌱𐍂𐌿𐌺𐌾𐌰𐌻𐌰𐌿𐍆", @@ -512,7 +513,7 @@ "ilsubmit": "Sokeiþ", "metadata": "𐌿𐍆𐌰𐍂𐌳𐌰𐍄𐌰", "exif-colorspace": "𐍆𐌰𐍂𐍅𐌰𐍂𐌿𐌼", - "exif-orientation-1": "𐌱𐌹𐌿𐌷𐍄", + "exif-orientation-1": "𐌱𐌹 𐌱𐌹𐌿𐌷𐍄𐌾𐌰", "namespacesall": "𐌰𐌻𐌻𐌹𐍃", "monthsall": "𐌰𐌻𐌻𐌹𐍃", "imgmultigo": "Afgaggan!", diff --git a/languages/i18n/he.json b/languages/i18n/he.json index e8be90882d..cc3ab5015e 100644 --- a/languages/i18n/he.json +++ b/languages/i18n/he.json @@ -157,7 +157,7 @@ "category_header": "דפים בקטגוריה \"$1\"", "subcategories": "קטגוריות משנה", "category-media-header": "קובצי מדיה בקטגוריה \"$1\"", - "category-empty": "קטגוריה זו אינה מכילה כרגע דפים או קובצי מדיה.", + "category-empty": "קטגוריה זו אינה מכילה כרגע דפים או קובצי מדיה.", "hidden-categories": "{{PLURAL:$1|קטגוריה מוסתרת|קטגוריות מוסתרות}}", "hidden-category-category": "קטגוריות מוסתרות", "category-subcat-count": "{{PLURAL:$2|קטגוריה זו כוללת את קטגוריית המשנה הבאה בלבד.|קטגוריה זו כוללת את {{PLURAL:$1|קטגוריית המשנה המוצגת להלן|$1 קטגוריות המשנה המוצגות להלן}}, וכוללת בסך־הכול $2 קטגוריות משנה.}}", @@ -659,7 +659,7 @@ "showdiff": "הצגת שינויים", "blankarticle": "אזהרה: הדף שאתם יוצרים הוא ריק.\nאם תלחצו שוב על \"{{int:savearticle}}\", הדף ייווצר ללא תוכן.", "anoneditwarning": "אזהרה: אינכם מחוברים לחשבון. כתובת ה־IP שלכם תוצג בפומבי אם תבצעו עריכות כלשהן. אם [$1 תיכנסו לחשבון] או [$2 תיצרו חשבון], העריכות שלכם תיוחסנה לשם המשתמש שלכם ותקבלו גם יתרונות אחרים.", - "anonpreviewwarning": "''אינכם מחוברים לחשבון. שמירה תגרום לכתובת ה־IP שלכם להירשם בהיסטוריית העריכות של הדף.''", + "anonpreviewwarning": "אתם לא מחוברים לחשבון. שמירה תגרום לכתובת ה־IP שלכם להירשם בהיסטוריית העריכות של הדף.", "missingsummary": "תזכורת: לא הזנת תקציר עריכה.\nלחיצה חוזרת על הכפתור \"{{int:savearticle}}\" תגרום לעריכה שלך להישמר בלעדיו.", "selfredirect": "אזהרה: ניסית ליצור הפניה מדף זה לעצמו.\nאולי כתבת יעד שגוי להפניה, ואולי ערכת את הדף הלא־נכון.\nלחיצה חוזרת על הכפתור \"{{int:savearticle}}\" תגרום להפניה להיווצר בכל זאת.", "missingcommenttext": "יש להקליד את ההודעה למטה.", @@ -3156,7 +3156,11 @@ "size-kilopixel": "{{PLURAL:$1|קילו־פיקסל אחד|$1 קילו־פיקסלים}}", "size-megapixel": "{{PLURAL:$1|מגה־פיקסל אחד|$1 מגה־פיקסלים}}", "size-gigapixel": "{{PLURAL:$1|ג'יגה־פיקסל אחד|$1 ג'יגה־פיקסלים}}", + "size-terapixel": "{{PLURAL:$1|טרה־פיקסל אחד|$1 טרה־פיקסלים}}", + "size-petapixel": "{{PLURAL:$1|פטה־פיקסל אחד|$1 פטה־פיקסלים}}", "size-exapixel": "{{PLURAL:$1|אקסה־פיקסל אחד|$1 אקסה־פיקסלים}}", + "size-zetapixel": "{{PLURAL:$1|זטה־פיקסל אחד|$1 זטה־פיקסלים}}", + "size-yottapixel": "{{PLURAL:$1|יוטה־פיקסל אחד|$1 יוטה־פיקסלים}}", "lag-warn-normal": "שינויים שבוצעו לפני פחות מ{{PLURAL:$1|שנייה אחת|־$1 שניות}} אינם מוצגים ברשימה זו.", "lag-warn-high": "בגלל עיכוב בעדכון בסיס הנתונים, שינויים שבוצעו לפני פחות מ{{PLURAL:$1|שנייה אחת|־$1 שניות}} אינם מוצגים ברשימה זו.", "watchlistedit-normal-title": "עריכת רשימת המעקב", diff --git a/languages/i18n/inh.json b/languages/i18n/inh.json index 314e2c33ca..f9a5e2ea8f 100644 --- a/languages/i18n/inh.json +++ b/languages/i18n/inh.json @@ -210,7 +210,7 @@ "imagepage": "Файла оагIон бIаргтоха", "mediawikipage": "Хьахьокха хоам бара оагIув", "templatepage": "Лера оагIон бIаргтоха", - "viewhelppage": "ГӀо хьаэцар", + "viewhelppage": "Новкъостал эцар", "categorypage": "Категорен оагIон бIаргтоха", "viewtalkpage": "Дувца оттадара бIаргтоха", "otherlanguages": "Кхыча меттаех", @@ -236,7 +236,7 @@ "disclaimers": "Бехктокхам тIацаэцар", "disclaimerpage": "Project:Бехктокхам тIацаэцар", "edithelp": "Хувцам бара новкъостал", - "helppage-top-gethelp": "ГӀо", + "helppage-top-gethelp": "Новкъoстал", "mainpage": "Керттера оагӀув", "mainpage-description": "Керттера оагӀув", "policy-url": "Project:Бокъонаш", @@ -261,9 +261,9 @@ "editsectionhint": "Дáкъа хувца: $1", "toc": "Чудар", "showtoc": "хьахьокха", - "hidetoc": "къайладаккха", + "hidetoc": "хьулде", "collapsible-collapse": "дIахьулде", - "collapsible-expand": "хьадоаржаде", + "collapsible-expand": "доаржаде", "confirmable-yes": "XӀа-а", "confirmable-no": "A", "thisisdeleted": "БIаргтоха е юхаметтаоттае $1?", @@ -283,7 +283,7 @@ "nstab-image": "Файл", "nstab-mediawiki": "Хоамбар", "nstab-template": "Ло", - "nstab-help": "ГӀо", + "nstab-help": "Новкъостал", "nstab-category": "Категори", "mainpage-nstab": "Керттера", "nosuchaction": "Цу тайпара ардам дац", @@ -308,7 +308,7 @@ "yourname": "Дагара йоазон цIи:", "userlogin-yourname": "Доакъашхочун цӀи", "userlogin-yourname-ph": "Iочуязъе хьай учёта яздара (доакъашхочун) цӀи", - "createacct-another-username-ph": "Чуйоалае доакъашхочун цӀи", + "createacct-another-username-ph": "Iочуязъе доакъашхочун цӀи", "yourpassword": "КъайладIоагIа:", "userlogin-yourpassword": "Пароль", "userlogin-yourpassword-ph": "Iочуязъе хьа пароль", @@ -364,7 +364,7 @@ "retypenew": "Юхаязде керда къайладIоагӀа:", "botpasswords-label-appid": "Бóта цӀи:", "botpasswords-label-create": "Хьакхолла", - "botpasswords-label-update": "Кердаяккха", + "botpasswords-label-update": "Кердадаккха", "botpasswords-label-cancel": "Эшац", "botpasswords-label-delete": "ДIадаккха", "botpasswords-label-resetpassword": "Пароль тIеракхоссар", @@ -548,8 +548,8 @@ "gender-male": "ВикиоагIонаш нийсaеш ва из", "gender-female": "ВикиоагIонаш нийсaеш я из", "email": "Email", - "prefs-help-email": "Д-хоамни моттиг ала эшаш дац, амма новкъа даца, наггахь санна къайладIоагIа шоана дийцалой, цу тIа хьатIадайтаргда.", - "prefs-help-email-others": "Кхыбола дакъалаьцархоша шоаца бувзам я йийшхургья шун оагIува тIа гIолла, д-хоамни хьаела ца езаш.", + "prefs-help-email": "Электронни почта адрес оттаде параз дац, амма из эшаш хургда, нагахьа санна хьона хьа къайладIоагIа дицлой.", + "prefs-help-email-others": "Иштта цунца кхыболча доакъашхошта аьттув хургба шоаца бувзам бе а, шун оагIон тIа е шун дувца оттадара оагIон тIа йола тIахьожаяргаца.\nШун электронни почта адрес цхьаннена гуш хургъяц.", "prefs-signature": "Кулг яздар", "prefs-preview": "Хьалххе бIаргтохар", "userrights-user-editname": "Iочуязъе доакъашхочун цӀи:", @@ -558,7 +558,7 @@ "userrights-groupsmember": "Дакъа лоаца тоабаш чу:", "userrights-reason": "Бахьан:", "userrights-changeable-col": "Оаш хувца мегаш йола тоабаш", - "userrights-unchangeable-col": "Оаш хувца мегаш йоаца тоабаш", + "userrights-unchangeable-col": "Хьа хувца йиш йоаца тоабаш", "group": "Тоаба:", "group-user": "Доакъашхой", "group-bot": "Бóташ", @@ -701,32 +701,32 @@ "allarticles": "Еррига оагIонаш", "allpagessubmit": "Кхоачашде", "categories": "Категореш", - "linksearch": "Т|ера|инкаш лахар", + "linksearch": "Арахьара тIахьожаяргаш лахар", "linksearch-ns": "ЦIерий аренаш:", "linksearch-ok": "Хьалáха", - "linksearch-line": "$1 тIа Iинк $2 юкъера", - "listgrouprights-members": "(тоабий дагарче)", + "linksearch-line": "$2 — тIахьожаярг укхаз $1", + "listgrouprights-members": "(доакъашхой хьаязъяьр)", "listgrouprights-namespaceprotection-namespace": "ЦIерий аре", "emailuser": "Доакъашхочоа каьхат", "watchlist": "Зем бара хьаязъяьр", "mywatchlist": "Зем бара хьаязъяьр", - "watchlistfor2": "$1 $2 царна", + "watchlistfor2": "Цунна $1 $2", "addedwatchtext": "\"[[:$1]]\" оагIув, шун [[Special:Watchlist|теркама дагаршкахь]] чуяккха я. \nТехьара мел йола укх оагIувни хувцамаш цу дагаршкахь хоам беш хургья. Вешта [[Special:RecentChanges|керда хувцама дагаршкаехь]] сома къоалмаца хьакъоастлуш хургья.", "removedwatchtext": "\"[[:$1]]\" оагIув, шун [[Special:Watchlist|теркама дарагчера]] дIаяккха хиннай.", "watch": "Зем бе", - "watchthispage": "Укх оагIува теркам бе", - "unwatch": "Лора ма де", + "watchthispage": "Зем бе укх оагӀон", + "unwatch": "Ма бе зем", "notanarticle": "Статья яц", "watchlist-details": "Шун теркама дагарченгахь йола $1 {{PLURAL:$1|1=оагIув|оагIувнаш}}, дувцама оагIувнаш ца лоархIаш.", "wlshowlast": "Тlехьара $1 сахьаташ $2 денош хьахьокха", - "watchlist-options": "Зем баккха дагарена хувцамаш", - "watching": "Тохкам беча оагIув тIа тIадаккха", - "unwatching": "Тохкам беча оагIув тIера дIадаккха", + "watchlist-options": "Зем бара хьаязъяьра тоадараш", + "watching": "Зем бара хьаязъяьр чу тIатохар", + "unwatching": "Зем бара хьаязъяьр чура дIадаккхар", "deletepage": "ДIаяккха оагIув", - "confirmdeletetext": "Оаш оагIувни (е сурти) барча дIадаккхар хьайийхай кха еррига хувцамий истори долама ковчера. \nДехар да, жоп дала, шоай из бокъонцахь де безам болаш да, шоай даьчоахь хургдолчоахь кхеташ долга, [[{{MediaWiki:Policy-url}}]] декъамачу Iоязадаь дола адаташ ца из деш долга.", + "confirmdeletetext": "Оаш дIадийхад бIарчча дIадаккхар оагIон а (е сурта), цун деррига хувцара истори а. '''Дехар да''', бакъде шоай из бокъонца де безам болаш долга а, из дича хургдар кхеташ долга а, из дар укх [[{{MediaWiki:Policy-url}}|бокъонашца]] долга.", "actioncomplete": "Ардам кхоачашдаьд", "actionfailed": "Ардам кхоачашдаьдац", - "deletedtext": "\"$1\" дIаяьккха хиннай.\nТIехьара дIадаьккха дагарчена хьожаргволаш/хьожаргьйолаш, $2 хьажа.", + "deletedtext": "«$1» дIаяьккхай.\nХьажа $2 тIехьара дIадаккхарий хьаязъяьрга бIаргтохаргболаш.", "dellogpage": "ДIадаккхарай тептар", "deletecomment": "Бахьан:", "deleteotherreason": "Кхыдола бахьан/тIатохар:", @@ -734,29 +734,29 @@ "rollbacklink": "юхаяккха", "rollbacklinkcount": "юхататта $1 {{PLURAL:$1|нийсдар}}", "protectlogpage": "ГIон тептар", - "protectedarticle": "\"[[$1]]\" оагIув лорам деж я", - "modifiedarticleprotection": "\"[[$1]]\" оагIувни лорама лагIа хувцаяьннай", + "protectedarticle": "Лораяьй оагӀув «[[$1]]»", + "modifiedarticleprotection": "Лорадара лагIа хийцад оагIон «[[$1]]»", "protectcomment": "Бахьан:", - "protectexpiry": "Кхоачалуш латта:", - "protect_expiry_invalid": "Чакхабоала лорама харца ха", - "protect_expiry_old": "Чакхайоала ха - яха зама я.", - "protect-text": "'''$1''' укхаз шоана шоай оагIув лорамлагIа хувца a бIаргтасса a йийш хургья.", - "protect-locked-access": "Шун лархIама йоазуви нидза кхоачаш бац оагIувни лорама лагIа хувца. '''$1''' оагIувни дIаоттамаш:", + "protectexpiry": "Чакхдоала:", + "protect_expiry_invalid": "Лорадар чакхадоала харцахьа ха", + "protect_expiry_old": "Чакхадалара ха — дахáр да.", + "protect-text": "Хьа йиш я оагIон '''$1''' лорадара лагIа бIаргтоха a, хувца a .", + "protect-locked-access": "Хьа дагара йоазонга тоъал бокъо яц оагIон лорадара лагIа хувца. '''$1''' оагIон карара оттадараш:", "protect-cascadeon": "{{PLURAL:$1|1=КIалхахь хьагойташ йола оагIувчу|КIалхахь хьагойташ йола оагIувнашчу}} ер оагIув чуяккха халарахь, лорам Iоттая я, хурхала лорам Iоттая я. Укх оагIувни лорама лагIа хувца йийш йолаш я, амма хурхала лорам хувцлургдац.", "protect-default": "Лорадар доацаш", "protect-fallback": "\"$1\" пурам эша", "protect-level-autoconfirmed": "Керда а, дакъалаьцабоацачаьрахь а лораде", "protect-level-sysop": "Мазакулгалхо мара чувала бокъо яц", "protect-summary-cascade": "каскадни", - "protect-expiring": "чакхайоала $1 (UTC)", - "protect-cascade": "Укх оагIувач чуяьккха оагIуваш лорае (хурхала лорам)", - "protect-cantedit": "Шун укх оагIувни лорама лагIа хувца мегаш дац, гIалатнийсдара шун бокъо йоацандаь.", + "protect-expiring": "чакхъйоала $1 (UTC)", + "protect-cascade": "Лорае укх оагIон чуяьккха оагIонаш (каскадни лорадар)", + "protect-cantedit": "Хьа хувца йиш яц укх оагIон лорадара лагIа, цун хувцам бе хьа бокъо ца хиларах.", "restriction-type": "Бокъонаш:", "restriction-level": "ТIакхоачилга лагIа:", "restriction-edit": "Хувцам", "restriction-move": "ЦIи хувцаp", "restriction-create": "Хьакхоллар", - "restriction-upload": "Чудаккхар", + "restriction-upload": "Доттар", "undeletelink": "бIаргтоха/юхадаккха", "undeleteviewlink": "хьажа", "undelete-search-submit": "Хьалáха", @@ -767,10 +767,10 @@ "tooltip-namespace_association": "Оттае ер белгало, иштта хержа цIерий ареца вIашагIъювзаенна дувца оттадара цIерий аре (е кхыяр) юкъейоаккхаргйолаш", "blanknamespace": "(Кертера)", "contributions": "{{GENDER:$1|Доакъашхочун}} къахьегам", - "contributions-title": "$1 дакъалаьцархочунна къахьегам", + "contributions-title": "{{GENDER:$1|Доакъашхочун}} $1 къахьегам", "mycontris": "Са къахьегам", "anoncontribs": "Къахьегам", - "contribsub2": "{{GENDER:$3|$1}} ($2) баь болх", + "contribsub2": "Къахьегам {{GENDER:$3|$1}} ($2)", "uctop": "(карара)", "month": "Укх бетт (кхы хьалхагIа)", "year": "Укх шер (кхы хьалхагIа):", @@ -799,9 +799,9 @@ "whatlinkshere-hidelinks": "$1 тIахьожаяргаш", "whatlinkshere-hideimages": "$1 суртIинкаш", "whatlinkshere-filters": "Фильтраш", - "blockip": "Укх {{GENDER:$1|доакъошхочоа}} ч|ега бола", + "blockip": "ЧIега тоха {{GENDER:$1|доакъашхочун}}", "ipboptions": "2 сахьат:2 hours,1 ди:1 day,3 ди:3 days,1 кIира:1 week,2 кIира:2 weeks,1 бутт:1 month,3 бутт:3 months,6 бутт:6 months,1 шу:1 year,хоадаяь ха йоаца:infinite", - "ipblocklist": "ЧIега бела дакъалаьцархой", + "ipblocklist": "ЧIега теха доакъашхой", "ipblocklist-submit": "Хьалáха", "blocklink": "чIегa тоха", "unblocklink": "чIега баста", @@ -903,7 +903,7 @@ "show-big-image-size": "$1 × $2 пиксель", "noimages": "Суртaш дац.", "ilsubmit": "Хьалáха", - "bad_image_list": "Бустам цу тайпара хила беза:\n\nДагарлен хьаракъаш мара лоарх|аш хургьяц (укх тамагIалгацa * дувлашду мугIараш).\nМугIарен хьалхара Iинк, сурт Iоттае пурам доаца Iинка, хила еза. \nЦу мугIара тIехьайоагIа Iинкаш, арадаккхар мо лоарх|аш хургья, вешта аьлча, йоазувашка чуIоттаде мегаш дола сурт санна ларх|а мега.", + "bad_image_list": "Формат хила еза иштта:\n\nЛоархIаш хургда алхха хьаязъяьра элементаш (укх * бехкама белгалонаца долалуш дола могIараш).\nМогIара цхьоаллагIа тIахьожаярг чуоттаде мегаш доаца сурта тIахьожавеш хила еза.\nЦу могIара тIехьайоагIа тIахьожаяргаш лоархIаш хургья эргамаш (исключения) санна, вешта аьлча, сурт чуоттаде мегаш йола статьяш санна.", "metadata": "Мета-дараш", "metadata-help": "Файло кхыдола дараш чулоаца, цифровой суртдоакхарго е сканеро тIатохаш дола. Нагахьа файл чуякхачул тIехьа хийца хинна дале, цхьаццайола параметраш хIанзара сурта тIара йоацаш хила мегаш я.", "metadata-expand": "Хьахьокха кхыдола дараш", @@ -952,7 +952,7 @@ "watchlisttools-edit": "Хьажа а хувца а хьаязъяьр", "watchlisttools-raw": "Массаза йола текст санна хувца", "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|дувца оттадар]])", - "duplicate-defaultsort": "Зем бе. Сатийна дIа-хьа хьоржама доагI \"$2\" хьалхара сатийна дIа-хьа хьоржама доагI \"$1\" хьахьоржа.", + "duplicate-defaultsort": "Теркам. Долча тайпара дIанийсдара дIоагIа «$2» юхакъоастаду долча тайпара дIанийсдара хьалха хинна дIоагIа «$1».", "version": "Верси", "version-specialpages": "ГIулакха оагӀонаш", "version-version": "($1)", @@ -963,7 +963,7 @@ "specialpages-group-users": "Доакъашхойи бокъонаши", "specialpages-group-pages": "ОагIонай хьаязъяьраш", "specialpages-group-pagetools": "ОагIонашта дола гIирсаш", - "external_image_whitelist": "#Ер мугI ший долаш тайпара дита
\n#Каст-каста оаламаш укхаза дIаязаде(юкъе дола дакъа //)\n#арара суртий URLца дIанийсалургда уш.\n#Пайдан дола, сурташ мо хьахьекха хургья, дахIодараш, сурта тIа Iинкаш мо хуpгья хьахьекха.\n#Укх # тамагIалгаца дIадувлаш дола мугIанаш, оалам мо лоархаш да.\n#МугIанаш яздaтакха каьда да\n\n#Каст-каста оаламаш укх мугIа лакхе дIаязаде. Из мугI ший долаш тайпара дита
", + "external_image_whitelist": "#Ер мугI ший болча тайпара бита
\n#Укхаз оттаде кастта дувлача выражений фрагменташ (// юкъе дола дакъа)\n#арахьара суртий URL адресашца дIанийсалургда уш.\n#Мегаргдола сурташ санна хьахьекха хургда, дIаходараш, сурташта тIахьожаяргаш санна хьахьекха хургда.\n#Укханца # долалуш дола могIараш алараш санна лоархIаш да.\n#МогIараш регистраца кIаьда дац\n\n#Укх могIара лакхе оттаде кастта дувлача выражений фрагменташ. Ер мугI ший болча тайпара бита
", "tag-filter": "[[Special:Tags|Белгалонай]] фильтр:", "tag-filter-submit": "Литта", "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|1=Белгало|Белгалонаш}}]]: $2)", diff --git a/languages/i18n/ko.json b/languages/i18n/ko.json index 31937b89a2..881cd27d1b 100644 --- a/languages/i18n/ko.json +++ b/languages/i18n/ko.json @@ -1451,9 +1451,9 @@ "uploaddisabledtext": "파일 올리기 기능이 비활성화되어 있습니다.", "php-uploaddisabledtext": "PHP 파일 올리기가 비활성화되었습니다. 파일 올리기 설정을 확인하십시오.", "uploadscripted": "이 파일에는 HTML이나 다른 스크립트 코드가 포함되어 있어, 웹 브라우저에서 오류를 일으킬 수 있습니다.", - "upload-scripted-pi-callback": "XML 스타일시트 프로세싱 명령을 포함하는 파일은 업로드 할 수 없습니다.", - "uploaded-script-svg": "업로드 된 SVG 파일에서 스크립트로 만들 수 있는 \"$1\" 요소를 발견했습니다.", - "uploaded-hostile-svg": "업로드 된 SVG 파일의 스타일 요소에 안전하지 못한 CSS가 있습니다.", + "upload-scripted-pi-callback": "XML 스타일시트 처리 명령을 포함하는 파일은 업로드할 수 없습니다.", + "uploaded-script-svg": "업로드된 SVG 파일에서 스크립트로 만들 수 있는 \"$1\" 요소를 발견했습니다.", + "uploaded-hostile-svg": "업로드된 SVG 파일의 스타일 요소에 안전하지 않은 CSS가 있습니다.", "uploaded-event-handler-on-svg": "이벤트 핸들러 속성 $1=\"$2\" 설정은 SVG 파일에서 사용할 수 없습니다.", "uploaded-href-attribute-svg": "SVG 파일의 href 속성은 http:// 또는 https:// 대상의 링크만 허용되지만 <$1 $2=\"$3\">를 발견했습니다.", "uploaded-href-unsafe-target-svg": "안전하지 않은 데이터를 가리키는 href를 발견했습니다: 업로드된 SVG 파일의 URI 대상 <$1 $2=\"$3\">", @@ -1744,7 +1744,7 @@ "unusedimages": "사용하지 않는 파일 목록", "wantedcategories": "필요한 분류 목록", "wantedpages": "필요한 문서 목록", - "wantedpages-summary": "다른 문서들에 링크는 걸려 있지만 존재하지 않는 문서들 중, 넘겨주기 문서를 제외한 목록입니다.\n존재하지 않는 문서로 넘겨주는 문서 목록을 보려면 [[{{#special:BrokenRedirects}}|the list of broken redirects]]를 참조하세요.", + "wantedpages-summary": "다른 문서들에 링크는 걸려 있지만 존재하지 않는 문서들 중, 넘겨주기 문서를 제외한 목록입니다. 존재하지 않는 문서로 넘겨주는 문서 목록을 보려면 [[{{#special:BrokenRedirects}}|끊긴 넘겨주기 목록]]을 참조하세요.", "wantedpages-badtitle": "문서 제목이 잘못되었습니다: $1", "wantedfiles": "필요한 파일 목록", "wantedfiletext-cat": "다음 파일은 쓰이고는 있지만 없는 파일입니다. 바깥 저장소에 있는 파일은 실제로는 있지만 여기 올라 있을 수 있습니다. 그런 오류는 삭제선이 그어질 것입니다. 또한 없는 파일을 포함하고 있는 문서는 [[:$1]]에 올라 있습니다.", @@ -3541,7 +3541,7 @@ "api-error-ratelimited": "짧은 시간 안에 위키가 허용하는 것 보다 더 많은 파일을 업로드하려고 합니다.\n몇 분 뒤에 다시 시도해 주십시오.", "api-error-stashfailed": "내부 오류: 서버가 임시 파일을 저장하지 못했습니다.", "api-error-publishfailed": "내부 오류: 서버가 임시 파일을 게시하지 못했습니다.", - "api-error-stasherror": "파일을 안전한 곳으로 업로드 하는 동안 오류가 발생했습니다.", + "api-error-stasherror": "파일을 미공개 위치로 업로드하는 동안 오류가 발생했습니다.", "api-error-stashedfilenotfound": "임시 저장된 파일이 임시 저장소에서 올리려고 했을 때 찾을 수 없었습니다.", "api-error-stashpathinvalid": "임시 저장된 파일이 존재해야 할 경로에 유효한 파일이 없습니다.", "api-error-stashfilestorage": "파일을 임시 저장하는 동안 오류가 발생했습니다.", @@ -3726,7 +3726,7 @@ "log-action-filter-upload-overwrite": "다시 업로드", "authmanager-authn-not-in-progress": "인증이 진행 중이 아니거나 세션 데이터를 분실했습니다. 처음부터 다시 시작해 주십시오.", "authmanager-authn-no-primary": "제공된 자격 증명으로 인증할 수 없습니다.", - "authmanager-authn-no-local-user": "자격 증명으로 이 위키의 어느 사용자로도 로그인 할 수 없습니다.", + "authmanager-authn-no-local-user": "자격 증명으로 이 위키의 어느 사용자로도 로그인할 수 없습니다.", "authmanager-authn-no-local-user-link": "제공된 자격 증명은 유효하지만 이 위키의 어느 사용자와도 연결되어 있지 않습니다. 다른 방식으로 로그인하거나, 새로운 사용자를 생성하면 자격 증명을 계정에 추가할 수 있게 됩니다.", "authmanager-authn-autocreate-failed": "로컬 계정 자동 생성 실패: $1", "authmanager-create-disabled": "계정 만들기가 금지되어 있습니다.", diff --git a/languages/i18n/lb.json b/languages/i18n/lb.json index c7349cdcbc..0f0d6a1308 100644 --- a/languages/i18n/lb.json +++ b/languages/i18n/lb.json @@ -1172,8 +1172,8 @@ "rightslogtext": "Dëst ass d'Lëscht vun den Ännerunge vu Benotzerrechter.", "action-read": "dës Säit ze liesen", "action-edit": "dës Säit z'änneren", - "action-createpage": "Säiten unzelleeën", - "action-createtalk": "Diskussiounssäiten unzeleeën", + "action-createpage": "dës Säit uleeën", + "action-createtalk": "dës Diskussiounssäit uleeën", "action-createaccount": "dëse Benotzerkont unzeleeën", "action-history": "d'Versioune vun dëser Säit weisen", "action-minoredit": "dës Ännerung als kleng Ännerung ze markéieren", diff --git a/languages/i18n/nl.json b/languages/i18n/nl.json index 1ebaf5879e..48558c4cc5 100644 --- a/languages/i18n/nl.json +++ b/languages/i18n/nl.json @@ -3671,7 +3671,10 @@ "log-action-filter-block-unblock": "Opheffing van blokkade", "log-action-filter-delete-delete": "Verwijderen van pagina", "log-action-filter-delete-restore": "Terugplaatsen van pagina", + "log-action-filter-newusers-create": "Aangemaakt door een anonieme gebruiker", + "log-action-filter-newusers-create2": "Aangemaakt door een geregistreerde gebruiker", "log-action-filter-newusers-autocreate": "Automatische aanmaak", + "log-action-filter-newusers-byemail": "Aangemaakt met wachtwoord verzonden via e-mail", "log-action-filter-patrol-patrol": "Handmatige markering", "log-action-filter-patrol-autopatrol": "Automatische markering", "log-action-filter-protect-protect": "Beveiliging", @@ -3682,8 +3685,11 @@ "log-action-filter-rights-autopromote": "Automatische aanpassing", "log-action-filter-upload-upload": "Nieuwe upload", "log-action-filter-upload-overwrite": "Herupload", + "authmanager-authn-autocreate-failed": "Het automatisch aanmaken van een lokaal account is mislukt: $1", + "authmanager-create-disabled": "Het aanmaken van accounts is uitgeschakeld.", "authmanager-email-label": "E-mail", "authmanager-email-help": "E-mailadres", "authmanager-realname-label": "Echte naam", + "authmanager-realname-help": "Echte naam van de gebruiker", "authmanager-provider-temporarypassword": "Tijdelijk wachtwoord" } diff --git a/languages/i18n/oc.json b/languages/i18n/oc.json index 1c59e49464..75c020f23b 100644 --- a/languages/i18n/oc.json +++ b/languages/i18n/oc.json @@ -585,7 +585,7 @@ "loginreqlink": "connectar", "loginreqpagetext": "Vos cal vos $1 per veire las autras paginas.", "accmailtitle": "Senhal mandat.", - "accmailtext": "Un senhal generat aleatòriament per [[User talk:$1|$1]] es estat mandat a $2.\nLo senhal per aqueste compte novèl pòt èsser cambiat sus la pagina ''[[Special:ChangePassword|Cambiament de senhal]]'' aprèp s'èsser connectat.", + "accmailtext": "Un senhal generat aleatòriament per [[User talk:$1|$1]] es estat mandat a $2.\nLo senhal per aqueste compte novèl pòt èsser cambiat sus la pagina ''[[Special:ChangePassword|Cambiament de senhal]]'' aprèp connexion.", "newarticle": "(Novèl)", "newarticletext": "Avètz seguit un ligam cap a una pagina qu’existís pas encara o qu'es estada [{{fullurl:Special:Log|type=delete&page={{FULLPAGENAMEE}}}} escafada].\nPer crear aquesta pagina, picatz vòstre tèxte dins la bóstia çaijós (podètz consultar [$1 la pagina d’ajuda] per mai d’entresenhas).\nSe sètz arribat(ada) aicí per error, clicatz sul boton '''retorn''' de vòstre navigador.", "anontalkpagetext": "---- ''Sètz sus la pagina de discussion d'un utilizaire anonim qu'a pas encara creat un compte o que n'utiliza pas.\nPer aquesta rason, devèm utilizar son adreça IP per l'identificar. Una adreça d'aqueste tipe pòt èsser partejada entre mantun utilizaire. Se sètz un utilizaire anonim e se constatatz que de comentaris que vos concernisson pas vos son estats adreçats, podètz [[Special:CreateAccount|crear un compte]] o [[Special:UserLogin|vos connectar]] per evitar tota confusion venenta amb d’autres contributors anonims.''", diff --git a/languages/i18n/pt-br.json b/languages/i18n/pt-br.json index b97319ce4d..16b3e72f9c 100644 --- a/languages/i18n/pt-br.json +++ b/languages/i18n/pt-br.json @@ -97,7 +97,8 @@ "Ryuu", "Luan", "Anderson Costa", - "LucyDiniz" + "LucyDiniz", + "Tusca" ] }, "tog-underline": "Sublinhar links:", @@ -999,7 +1000,7 @@ "shown-title": "Mostrar $1 {{PLURAL:$1|resultado|resultados}} por página", "viewprevnext": "Ver ($1 {{int:pipe-separator}} $2) ($3).", "searchmenu-exists": "Há uma página com o nome \"[[:$1]]\" nesta wiki. {{PLURAL:$2|0=|Veja também os outros resultados da pesquisa encontrados.}}", - "searchmenu-new": "Criar a página \"[[:$1]]\" nesta wiki! {{PLURAL:$2|0=|Veja também a página encontrada com sua pesquisa.|Veja também os resultados da pesquisa encontrados.}}", + "searchmenu-new": "Crear la página \"[[:$1]]\" en esta wiki! {{PLURAL:$2|0=|Véase también lo encontrado con tu búsqueda.|Ver también resultados de la búsqueda encontrados.}}", "searchprofile-articles": "Páginas de conteúdo", "searchprofile-images": "Multimídia", "searchprofile-everything": "Tudo", diff --git a/languages/i18n/sl.json b/languages/i18n/sl.json index 9b238be97d..b103e5cb1c 100644 --- a/languages/i18n/sl.json +++ b/languages/i18n/sl.json @@ -1223,8 +1223,8 @@ "rightslogtext": "Prikazan je dnevnik sprememb uporabniških pravic.", "action-read": "branje te strani", "action-edit": "urejanje te strani", - "action-createpage": "ustvarjenje strani", - "action-createtalk": "ustvarjanje pogovornih strani", + "action-createpage": "ustvarjenje te strani", + "action-createtalk": "ustvarjanje te pogovorne strani", "action-createaccount": "registracija tega uporabniškega računa", "action-autocreateaccount": "samodejno ustvarjanje zunanjega uporabniškega računa", "action-history": "ogled zgodovine strani", diff --git a/languages/i18n/uk.json b/languages/i18n/uk.json index b7a8fa06d9..79a6f94459 100644 --- a/languages/i18n/uk.json +++ b/languages/i18n/uk.json @@ -1286,8 +1286,8 @@ "rightslogtext": "Це протокол зміни прав користувачів.", "action-read": "перегляд цієї сторінки", "action-edit": "редагування цієї сторінки", - "action-createpage": "створення сторінок", - "action-createtalk": "створення сторінок обговорень", + "action-createpage": "створити цю сторінку", + "action-createtalk": "створити цю сторінку обговорення", "action-createaccount": "створення цього облікового запису", "action-autocreateaccount": "автоматичне створення цього зовнішнього облікового запису користувача", "action-history": "переглядати історію цієї сторінки", @@ -1507,7 +1507,7 @@ "upload-http-error": "Відбулася помилка HTTP: $1", "upload-copy-upload-invalid-domain": "З цього домену завантаження неможливе.", "upload-foreign-cant-upload": "Ця вікі не налаштована на завантаження файлів у запитаний сторонній файловий репозиторій.", - "upload-foreign-cant-load-config": "Завантаження конфігурації завантаження файлу на зовнішнє сховище файлів не вдалося.", + "upload-foreign-cant-load-config": "Завантаження конфігурації завантаження файлів на зовнішнє сховище файлів не вдалося.", "upload-dialog-disabled": "Завантаження файлів з допомогою цього діалогового вікна відключені у цій вікі.", "upload-dialog-title": "Завантажити файл", "upload-dialog-button-cancel": "Скасувати", diff --git a/package.json b/package.json index 6fde2e043f..d96dcf92c7 100644 --- a/package.json +++ b/package.json @@ -14,12 +14,12 @@ "grunt-jscs": "2.8.0", "grunt-jsonlint": "1.0.7", "grunt-karma": "0.12.2", - "grunt-stylelint": "0.3.0", + "grunt-stylelint": "0.4.0", "karma": "0.13.22", "karma-chrome-launcher": "0.2.2", "karma-firefox-launcher": "0.1.7", "karma-qunit": "0.1.9", "qunitjs": "1.22.0", - "stylelint-config-wikimedia": "0.1.0" + "stylelint-config-wikimedia": "0.2.2" } } diff --git a/resources/Resources.php b/resources/Resources.php index 90510fc125..e31e77e8c7 100644 --- a/resources/Resources.php +++ b/resources/Resources.php @@ -1417,7 +1417,6 @@ return [ 'mediawiki.action.edit.styles', 'jquery.textSelection', 'jquery.byteLimit', - 'jquery.getAttrs', 'mediawiki.api', ], 'position' => 'top', diff --git a/resources/src/mediawiki.action/mediawiki.action.edit.stash.js b/resources/src/mediawiki.action/mediawiki.action.edit.stash.js index 2069ac5005..2ae05dd6e5 100644 --- a/resources/src/mediawiki.action/mediawiki.action.edit.stash.js +++ b/resources/src/mediawiki.action/mediawiki.action.edit.stash.js @@ -13,7 +13,11 @@ $form = $( '#editform' ), $text = $form.find( '#wpTextbox1' ), $summary = $form.find( '#wpSummary' ), - data = {}, + section = $form.find( '#wpSection' ).val(), + model = $form.find( '#model' ).val(), + format = $form.find( '#format' ).val(), + revId = $form.find( '#parentRevId' ).val(), + lastText = $text.textSelection( 'getContents' ), timer = null; // Send a request to stash the edit to the API. @@ -25,19 +29,19 @@ } api.getToken( 'csrf' ).then( function ( token ) { - data = $form.serializeObject(); + lastText = $text.textSelection( 'getContents' ); pending = api.post( { action: 'stashedit', token: token, title: mw.config.get( 'wgPageName' ), - section: data.wpSection, + section: section, sectiontitle: '', - text: data.wpTextbox1, - summary: data.wpSummary, - contentmodel: data.model, - contentformat: data.format, - baserevid: data.parentRevId + text: lastText, + summary: $summary.textSelection( 'getContents' ), + contentmodel: model, + contentformat: format, + baserevid: revId } ); } ); } @@ -45,9 +49,8 @@ // Check if edit body text changed since the last stashEdit() call or if no edit // stash calls have yet been made function isChanged() { - // Normalize line endings to CRLF, like $.fn.serializeObject does. - var newText = $text.val().replace( /\r?\n/g, '\r\n' ); - return newText !== data.wpTextbox1; + var newText = $text.textSelection( 'getContents' ); + return newText !== lastText; } function onEditorIdle() { diff --git a/resources/src/mediawiki/mediawiki.jqueryMsg.js b/resources/src/mediawiki/mediawiki.jqueryMsg.js index 50fef14ec6..44b9117799 100644 --- a/resources/src/mediawiki/mediawiki.jqueryMsg.js +++ b/resources/src/mediawiki/mediawiki.jqueryMsg.js @@ -15,6 +15,8 @@ slice = Array.prototype.slice, parserDefaults = { magic: { + PAGENAME: mw.config.get( 'wgPageName' ), + PAGENAMEE: mw.util.wikiUrlencode( mw.config.get( 'wgPageName' ) ), SITENAME: mw.config.get( 'wgSiteName' ) }, // Whitelist for allowed HTML elements in wikitext. diff --git a/tests/phpunit/includes/TestUser.php b/tests/phpunit/includes/TestUser.php index 8b8cbcd4d9..86f4ae789d 100644 --- a/tests/phpunit/includes/TestUser.php +++ b/tests/phpunit/includes/TestUser.php @@ -6,25 +6,19 @@ */ class TestUser { /** - * @deprecated Since 1.25. Use TestUser::getUser()->getName() - * @private * @var string */ - public $username; + private $username; /** - * @deprecated Since 1.25. Use TestUser::getPassword() - * @private * @var string */ - public $password; + private $password; /** - * @deprecated Since 1.25. Use TestUser::getUser() - * @private * @var User */ - public $user; + private $user; private function assertNotReal() { global $wgDBprefix; diff --git a/tests/phpunit/includes/api/ApiTestCase.php b/tests/phpunit/includes/api/ApiTestCase.php index 31f3daa6c9..ac4d2c92ca 100644 --- a/tests/phpunit/includes/api/ApiTestCase.php +++ b/tests/phpunit/includes/api/ApiTestCase.php @@ -24,7 +24,7 @@ abstract class ApiTestCase extends MediaWikiLangTestCase { $this->setMwGlobals( [ 'wgAuth' => $wgDisableAuthManager ? new AuthPlugin : new MediaWiki\Auth\AuthManagerAuthPlugin, 'wgRequest' => new FauxRequest( [] ), - 'wgUser' => self::$users['sysop']->user, + 'wgUser' => self::$users['sysop']->getUser(), ] ); $this->apiContext = new ApiTestContext(); @@ -183,11 +183,11 @@ abstract class ApiTestCase extends MediaWikiLangTestCase { return $data; } - protected function getTokenList( $user, $session = null ) { + protected function getTokenList( TestUser $user, $session = null ) { $data = $this->doApiRequest( [ 'action' => 'tokens', 'type' => 'edit|delete|protect|move|block|unblock|watch' - ], $session, false, $user->user ); + ], $session, false, $user->getUser() ); if ( !array_key_exists( 'tokens', $data[0] ) ) { throw new MWException( 'Api failed to return a token list' ); diff --git a/tests/phpunit/includes/api/ApiTokensTest.php b/tests/phpunit/includes/api/ApiTokensTest.php index fbe97893d8..1f7c00b0a8 100644 --- a/tests/phpunit/includes/api/ApiTokensTest.php +++ b/tests/phpunit/includes/api/ApiTokensTest.php @@ -15,10 +15,10 @@ class ApiTokensTest extends ApiTestCase { } } - protected function runTokenTest( $user ) { + protected function runTokenTest( TestUser $user ) { $tokens = $this->getTokenList( $user ); - $rights = $user->user->getRights(); + $rights = $user->getUser()->getRights(); $this->assertArrayHasKey( 'edittoken', $tokens ); $this->assertArrayHasKey( 'movetoken', $tokens ); diff --git a/tests/phpunit/includes/search/SearchEngineTest.php b/tests/phpunit/includes/search/SearchEngineTest.php index 055e982377..40a33d9ab5 100644 --- a/tests/phpunit/includes/search/SearchEngineTest.php +++ b/tests/phpunit/includes/search/SearchEngineTest.php @@ -50,6 +50,10 @@ class SearchEngineTest extends MediaWikiLangTestCase { return; } + // Reset the search type back to default - some extensions may have + // overridden it. + $this->setMwGlobals( [ 'wgSearchType' => null ] ); + $this->insertPage( 'Not_Main_Page', 'This is not a main page' ); $this->insertPage( 'Talk:Not_Main_Page', diff --git a/tests/phpunit/includes/session/CookieSessionProviderTest.php b/tests/phpunit/includes/session/CookieSessionProviderTest.php index b35b6850df..da4b06ec83 100644 --- a/tests/phpunit/includes/session/CookieSessionProviderTest.php +++ b/tests/phpunit/includes/session/CookieSessionProviderTest.php @@ -22,7 +22,6 @@ class CookieSessionProviderTest extends MediaWikiTestCase { 'CookieHttpOnly' => true, 'SessionName' => false, 'CookieExpiration' => 100, - 'ExtendedLoginCookies' => [ 'UserID', 'Token' ], 'ExtendedLoginCookieExpiration' => 200, ] ); } @@ -148,6 +147,14 @@ class CookieSessionProviderTest extends MediaWikiTestCase { $this->assertTrue( $provider->persistsSessionId() ); $this->assertTrue( $provider->canChangeUser() ); + $extendedCookies = [ 'UserID', 'UserName', 'Token' ]; + + $this->assertEquals( + $extendedCookies, + \TestingAccessWrapper::newFromObject( $provider )->getExtendedLoginCookies(), + 'List of extended cookies (subclasses can add values, but we\'re calling the core one here)' + ); + $msg = $provider->whyNoSession(); $this->assertInstanceOf( 'Message', $msg ); $this->assertSame( 'sessionprovider-nocookies', $msg->getKey() ); @@ -506,10 +513,10 @@ class CookieSessionProviderTest extends MediaWikiTestCase { 'httpOnly' => $config->get( 'CookieHttpOnly' ), 'raw' => false, ]; + + $normalExpiry = $config->get( 'CookieExpiration' ); $extendedExpiry = $config->get( 'ExtendedLoginCookieExpiration' ); $extendedExpiry = (int)( $extendedExpiry === null ? 0 : $extendedExpiry ); - $this->assertEquals( [ 'UserID', 'Token' ], $config->get( 'ExtendedLoginCookies' ), - 'sanity check' ); $expect = [ 'MySessionName' => [ 'value' => (string)$sessionId, @@ -517,10 +524,11 @@ class CookieSessionProviderTest extends MediaWikiTestCase { ] + $defaults, 'xUserID' => [ 'value' => (string)$user->getId(), - 'expire' => $extendedExpiry, + 'expire' => $remember ? $extendedExpiry : $normalExpiry, ] + $defaults, 'xUserName' => [ 'value' => $user->getName(), + 'expire' => $remember ? $extendedExpiry : $normalExpiry ] + $defaults, 'xToken' => [ 'value' => $remember ? $user->getToken() : '', @@ -807,12 +815,20 @@ class CookieSessionProviderTest extends MediaWikiTestCase { $provider->setConfig( $config ); $provider->setManager( SessionManager::singleton() ); - $this->assertSame( 200, $provider->getLoginCookieExpiration( 'Token' ) ); - $this->assertSame( 100, $provider->getLoginCookieExpiration( 'User' ) ); + // First cookie is an extended cookie, remember me true + $this->assertSame( 200, $provider->getLoginCookieExpiration( 'Token', true ) ); + $this->assertSame( 100, $provider->getLoginCookieExpiration( 'User', true ) ); + + // First cookie is an extended cookie, remember me false + $this->assertSame( 100, $provider->getLoginCookieExpiration( 'UserID', false ) ); + $this->assertSame( 100, $provider->getLoginCookieExpiration( 'User', false ) ); $config->set( 'ExtendedLoginCookieExpiration', null ); - $this->assertSame( 100, $provider->getLoginCookieExpiration( 'Token' ) ); - $this->assertSame( 100, $provider->getLoginCookieExpiration( 'User' ) ); + $this->assertSame( 100, $provider->getLoginCookieExpiration( 'Token', true ) ); + $this->assertSame( 100, $provider->getLoginCookieExpiration( 'User', true ) ); + + $this->assertSame( 100, $provider->getLoginCookieExpiration( 'Token', false ) ); + $this->assertSame( 100, $provider->getLoginCookieExpiration( 'User', false ) ); } } diff --git a/tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php b/tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php deleted file mode 100644 index c79471d5e8..0000000000 --- a/tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php +++ /dev/null @@ -1,168 +0,0 @@ -setMwGlobals( [ - 'wgContLang' => Language::factory( 'en' ), - ] ); - } - - /** - * Returns a mock GenderCache that will return "female" always. - * - * @return GenderCache - */ - private function getGenderCache() { - $genderCache = $this->getMockBuilder( 'GenderCache' ) - ->disableOriginalConstructor() - ->getMock(); - - $genderCache->expects( $this->any() ) - ->method( 'getGenderOf' ) - ->will( $this->returnValue( 'female' ) ); - - return $genderCache; - } - - public static function provideGetPageUrl() { - return [ - [ - new TitleValue( NS_MAIN, 'Foo_Bar' ), - [], - '/Foo_Bar' - ], - [ - new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ), - [ 'foo' => 'bar' ], - '/User:Hansi_Maier?foo=bar#stuff' - ], - ]; - } - - /** - * @dataProvider provideGetPageUrl - */ - public function testGetPageUrl( TitleValue $title, $params, $url ) { - // NOTE: was of Feb 2014, MediaWikiPageLinkRenderer *ignores* the - // WikitextTitleFormatter we pass here, and relies on the Linker - // class for generating the link! This may break the test e.g. - // of Linker uses a different language for the namespace names. - - $lang = Language::factory( 'en' ); - - $formatter = new MediaWikiTitleCodec( $lang, $this->getGenderCache() ); - $renderer = new MediaWikiPageLinkRenderer( $formatter, '/' ); - $actual = $renderer->getPageUrl( $title, $params ); - - $this->assertEquals( $url, $actual ); - } - - public static function provideRenderHtmlLink() { - return [ - [ - new TitleValue( NS_MAIN, 'Foo_Bar' ), - 'Foo Bar', - '!Foo Bar!' - ], - [ - // NOTE: Linker doesn't include fragments in "broken" links - // NOTE: once this no longer uses Linker, we will get "2" instead of "User" for the namespace. - new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ), - 'Hansi Maier\'s Stuff', - '!renderWikitextLink( $title, $text ); - - $this->assertEquals( $expected, $actual ); - } -} diff --git a/tests/phpunit/includes/upload/UploadStashTest.php b/tests/phpunit/includes/upload/UploadStashTest.php index e0b57a797b..9b25505c68 100644 --- a/tests/phpunit/includes/upload/UploadStashTest.php +++ b/tests/phpunit/includes/upload/UploadStashTest.php @@ -7,7 +7,7 @@ */ class UploadStashTest extends MediaWikiTestCase { /** - * @var array Array of UploadStashTestUser + * @var TestUser[] Array of UploadStashTestUser */ public static $users; @@ -55,7 +55,7 @@ class UploadStashTest extends MediaWikiTestCase { * @todo give this test a real name explaining what is being tested here */ public function testBug29408() { - $this->setMwGlobals( 'wgUser', self::$users['uploader']->user ); + $this->setMwGlobals( 'wgUser', self::$users['uploader']->getUser() ); $repo = RepoGroup::singleton()->getLocalRepo(); $stash = new UploadStash( $repo ); diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js index aa68bb2ee6..71330398a0 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.jqueryMsg.test.js @@ -1,6 +1,6 @@ ( function ( mw, $ ) { var formatText, formatParse, formatnumTests, specialCharactersPageName, expectedListUsers, - expectedListUsersSitename, expectedEntrypoints, + expectedListUsersSitename, expectedLinkPagenamee, expectedEntrypoints, mwLanguageCache = {}, hasOwn = Object.hasOwnProperty; @@ -16,6 +16,8 @@ this.parserDefaults = mw.jqueryMsg.getParserDefaults(); mw.jqueryMsg.setParserDefaults( { magic: { + PAGENAME: '2 + 2', + PAGENAMEE: mw.util.wikiUrlencode( '2 + 2' ), SITENAME: 'Wiki' } } ); @@ -25,6 +27,7 @@ expectedListUsers = '注册用户'; expectedListUsersSitename = '注册用户' + 'Wiki'; + expectedLinkPagenamee = 'Test'; expectedEntrypoints = 'index.php'; @@ -77,6 +80,7 @@ 'jquerymsg-test-statistics-users': '注册[[Special:ListUsers|用户]]', 'jquerymsg-test-statistics-users-sitename': '注册[[Special:ListUsers|用户{{SITENAME}}]]', + 'jquerymsg-test-link-pagenamee': '[https://example.org/wiki/Foo?bar=baz#val/{{PAGENAMEE}} Test]', 'jquerymsg-test-version-entrypoints-index-php': '[https://www.mediawiki.org/wiki/Manual:index.php index.php]', @@ -385,7 +389,7 @@ process( tasks ); } ); - QUnit.test( 'Links', 14, function ( assert ) { + QUnit.test( 'Links', 15, function ( assert ) { var testCases, expectedDisambiguationsText, expectedMultipleBars, @@ -468,6 +472,12 @@ 'Piped wikilink with parser function in the text' ); + assert.htmlEqual( + formatParse( 'jquerymsg-test-link-pagenamee' ), + expectedLinkPagenamee, + 'External link with parser function in the URL' + ); + testCases = [ [ 'extlink-html-full',