Merge "Don't apply CSS columns if less than 3 results were found on AllPages & Prefix...
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 10 Nov 2015 00:22:04 +0000 (00:22 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 10 Nov 2015 00:22:04 +0000 (00:22 +0000)
33 files changed:
includes/api/i18n/es.json
includes/api/i18n/fr.json
includes/api/i18n/gl.json
includes/api/i18n/it.json
includes/api/i18n/uk.json
includes/cache/LinkCache.php
includes/cache/LocalisationCache.php
includes/cache/MessageBlobStore.php
includes/cache/MessageCache.php
includes/filebackend/SwiftFileBackend.php
includes/filerepo/file/LocalFile.php
includes/installer/i18n/fr.json
includes/installer/i18n/mr.json
includes/installer/i18n/sl.json
includes/installer/i18n/vi.json
includes/resourceloader/ResourceLoader.php
languages/i18n/ar.json
languages/i18n/be-tarask.json
languages/i18n/cs.json
languages/i18n/eu.json
languages/i18n/fr.json
languages/i18n/gl.json
languages/i18n/ja.json
languages/i18n/lad.json
languages/i18n/mr.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/ru.json
languages/i18n/sl.json
languages/i18n/ta.json
maintenance/cleanupRemovedModules.php
resources/src/mediawiki.special/mediawiki.special.preferences.js

index ff80444..91d8faf 100644 (file)
        "apihelp-help-param-helpformat": "Formato de salida de la ayuda.",
        "apihelp-help-param-toc": "Incluir una tabla de contenidos en la salida HTML.",
        "apihelp-help-example-main": "Ayuda del módulo principal",
+       "apihelp-help-example-submodules": "Ayuda para <kbd>action=query</kbd> y todos sus submódulos.",
        "apihelp-help-example-recursive": "Toda la ayuda en una página",
        "apihelp-help-example-help": "Ayuda del módulo de ayuda en sí",
        "apihelp-help-example-query": "Ayuda para dos submódulos de consulta.",
index 4e7662c..7eb49d2 100644 (file)
        "apihelp-help-param-wrap": "Inclut la sortie dans une structure de réponse API standard.",
        "apihelp-help-param-toc": "Inclure une table des matières dans la sortir HTML.",
        "apihelp-help-example-main": "Aide pour le module principal",
+       "apihelp-help-example-submodules": "Aide pour <kbd>action=query</kbd> et tous ses sous-modules.",
        "apihelp-help-example-recursive": "Toute l’aide sur une page",
        "apihelp-help-example-help": "Aide pour le module d’aide lui-même",
        "apihelp-help-example-query": "Aide pour deux sous-modules de recherche",
        "apihelp-query+revisions+base-param-section": "Récupérer uniquement le contenu de ce numéro de section.",
        "apihelp-query+revisions+base-param-diffto": "ID de révision à comparer à chaque révision. Utiliser <kbd>prev</kbd>, <kbd>next</kbd> et <kbd>cur</kbd> pour la version précédente, suivante et actuelle respectivement.",
        "apihelp-query+revisions+base-param-difftotext": "Texte auquel comparer chaque révision. Compare uniquement un nombre limité de révisions. Écrase <var>$1diffto</var>. Si <var>$1section</var> est positionné, seule cette section sera comparée avec ce texte",
+       "apihelp-query+revisions+base-param-difftotextpst": "Effectuer une transformation avant enregistrement sur le texte avant de le comparer. Valide uniquement quand c’est utilisé avec <var>$1difftotext</var>.",
        "apihelp-query+revisions+base-param-contentformat": "Format de sérialisation utilisé pour <var>$1difftotext</var> et attendu pour la sortie du contenu.",
        "apihelp-query+search-description": "Effectuer une recherche en texte intégral.",
        "apihelp-query+search-param-search": "Rechercher les titres de page ou le contenu correspondant à cette valeur. Vous pouvez utiliser la chaîne de recherche pour invoquer des fonctionnalités de recherche spéciales, selon ce que le serveur de recherche du wiki implémente.",
        "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Ajoute l’horodatage de la dernière notification de la modification à l’utilisateur.",
        "apihelp-query+watchlist-paramvalue-prop-loginfo": "Ajoute l’information de trace le cas échéant.",
        "apihelp-query+watchlist-param-show": "Afficher uniquement les éléments qui correspondent à ces critères. Par exemple, pour voir uniquement les modifications mineures faites par des utilisateurs connectés, mettre $1show=minor|!anon.",
-       "apihelp-query+watchlist-param-type": "Quels types de modification afficher :\n;edit:Modifications ordinaires de page.\n;external:Modifications externes.\n;new:Créations de page.\n;log:Entrées du journal.",
+       "apihelp-query+watchlist-param-type": "Quels types de modification afficher :",
+       "apihelp-query+watchlist-paramvalue-type-edit": "Modifications normales de page",
+       "apihelp-query+watchlist-paramvalue-type-external": "Modifications externes.",
        "apihelp-query+watchlist-paramvalue-type-new": "Créations de pages.",
        "apihelp-query+watchlist-paramvalue-type-log": "Entrées du journal.",
+       "apihelp-query+watchlist-paramvalue-type-categorize": "Modifications d’appartenance aux catégories.",
        "apihelp-query+watchlist-param-owner": "Utilisé avec $1token pour accéder à la liste de suivi d’un autre utilisateur.",
        "apihelp-query+watchlist-param-token": "Un jeton de sécurité (disponible dans les [[Special:Preferences#mw-prefsection-watchlist|préférences]] de l’utilsiateur) pour autoriser l’accès à la liste de suivi d&un autre utilisateur.",
        "apihelp-query+watchlist-example-simple": "Lister la révision de tête des pages récemment modifiées dans la liste de suivi de l’utilisateur actuel",
index fd561d9..db69e78 100644 (file)
        "apihelp-help-param-wrap": "Incluír a saída nunha estrutura de resposta API estándar.",
        "apihelp-help-param-toc": "Incluír unha táboa de contidos na saída por HTML",
        "apihelp-help-example-main": "Axuda para o módulo principal",
+       "apihelp-help-example-submodules": "Axuda para <kbd>action=query</kbd> e todos os seus submódulos.",
        "apihelp-help-example-recursive": "Toda a axuda nunha páxina",
        "apihelp-help-example-help": "Axuda do módulo de axuda en si",
        "apihelp-help-example-query": "Axuda para dous submódulos de consulta.",
index 89e2701..78dd9b3 100644 (file)
@@ -17,8 +17,8 @@
        "apihelp-main-param-format": "Formato dell'output.",
        "apihelp-main-param-assert": "Verifica che l'utente sia loggato se si è impostato <kbd>utente</kbd>, o che abbia i permessi di bot se si è impostato <kbd>bot</kbd>.",
        "apihelp-main-param-requestid": "Tutti i valori forniti saranno implementati nella risposta. Potrebbero venir utilizzati per distinguere le richieste.",
-       "apihelp-main-param-servedby": "Includi nei risultati il nome dell'host che ha servito la richiesta.",
-       "apihelp-main-param-curtimestamp": "Includere il timestamp corrente nel risultato.",
+       "apihelp-main-param-servedby": "Includi nel risultato il nome dell'host che ha servito la richiesta.",
+       "apihelp-main-param-curtimestamp": "Includi nel risultato il timestamp attuale.",
        "apihelp-block-description": "Blocca  un utente.",
        "apihelp-block-param-user": "Nome utente, indirizzo IP o range di IP da bloccare.",
        "apihelp-block-param-reason": "Motivo del blocco.",
index 9068582..79e2e9c 100644 (file)
        "apihelp-help-param-wrap": "Помістити результат у стандартну структуру API-відповіді.",
        "apihelp-help-param-toc": "Включити зміст у HTML-результат.",
        "apihelp-help-example-main": "Довідка для головного модуля.",
+       "apihelp-help-example-submodules": "Довідка для <kbd>action=query</kbd> та усіх її підмодулів.",
        "apihelp-help-example-recursive": "Уся довідка на одній сторінці.",
        "apihelp-help-example-help": "Довідка для самого модуля довідки.",
        "apihelp-help-example-query": "Довідка для двох підмодулів запитів.",
        "apihelp-parse-param-pst": "Зробіть трансформацію вхідних даних перед збереженням і аналізом. Дійсне лише при використанні з текстом.",
        "apihelp-parse-param-onlypst": "Зробіть трансформацію вхідних даних перед збереженням (PST), але не аналізуйте. Видає той самий вікітекст, після застосування PST. Дійсне лише у разі використання з <var>$1text</var>.",
        "apihelp-parse-param-effectivelanglinks": "Включає мовні посилання, додані розширеннями (для використання з <kbd>$1prop=langlinks</kbd>).",
-       "apihelp-parse-param-section": "Ð\92идаÑ\94 Ð²Ð¼Ñ\96Ñ\81Ñ\82 Ð»Ð¸Ñ\88е Ñ\80оздÑ\96лÑ\83 Ð· Ñ\86им Ð½Ð¾Ð¼ÐµÑ\80ом Ð°Ð±Ð¾ Ð¿Ñ\80и <kbd>new</kbd> Ñ\81Ñ\82воÑ\80еннÑ\96 Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ñ\80оздÑ\96лÑ\83.\n\n<kbd>new</kbd> Ñ\80оздÑ\96л Ð²Ñ\96дзнаÑ\87аÑ\94Ñ\82Ñ\8cÑ\81Ñ\8f Ð»Ð¸Ñ\88е Ð¿Ñ\80и Ð²ÐºÐ°Ð·Ð°Ð½Ð½Ñ\96 Ñ\82екÑ\81Ñ\82у <var>text</var>.",
+       "apihelp-parse-param-section": "РозÑ\96бÑ\80аÑ\82и Ð²Ð¼Ñ\96Ñ\81Ñ\82 Ð»Ð¸Ñ\88е Ñ\80оздÑ\96лÑ\83 Ð· Ñ\86им Ð½Ð¾Ð¼ÐµÑ\80ом .\n\nЯкÑ\89о <kbd>new</kbd>, Ñ\80озÑ\96бÑ\80аÑ\82и <var>$1text</var> Ñ\82а <var>$1sectiontitle</var>, Ñ\8fк Ð½Ñ\96би Ð½Ð¾Ð²Ð¸Ð¹ Ñ\80оздÑ\96л Ð´Ð¾Ð´Ð°Ñ\94Ñ\82Ñ\8cÑ\81Ñ\8f Ð½Ð° Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83.\n\n<kbd>new</kbd> Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\8fÑ\94Ñ\82Ñ\8cÑ\81Ñ\8f Ð»Ð¸Ñ\88е Ð¿Ñ\80о Ð²ÐºÐ°Ð·Ð°Ð½Ð¾Ð¼у <var>text</var>.",
        "apihelp-parse-param-sectiontitle": "Заголовок нового розділу, коли <var>section</var> має значення <kbd>new</kbd>.\n\nНа відміну від редагування сторінки, це не повертається до <var>summary</var>, якщо пропустити чи лишити порожнім.",
        "apihelp-parse-param-disablelimitreport": "Пропустити звіт про ліміти («NewPP limit report») на виході аналізу.",
        "apihelp-parse-param-disablepp": "Використати натомість <var>$1disablelimitreport</var>.",
        "apihelp-query+revisions+base-param-section": "Витягнути вміст лише розділу з цим номером.",
        "apihelp-query+revisions+base-param-diffto": "ID версії, з якою порівняти кожну версію. Використайте <kbd>prev</kbd>, <kbd>next</kbd> і <kbd>cur</kbd> для попередньої, наступної та поточної версій відповідно.",
        "apihelp-query+revisions+base-param-difftotext": "Текст, з яким порівняти кожну версію. Порівнює лише обмежену кількість версій. Перевизначає <var>$1diffto</var>. Якщо вказано <var>$1section</var>, лише ця версія буде порівняна з цим текстом.",
+       "apihelp-query+revisions+base-param-difftotextpst": "Виконати попередню трансформацію тексту перед виведенням дифу. Дійсне лише з використанням <var>$1difftotext</var>.",
        "apihelp-query+revisions+base-param-contentformat": "Формат серіалізації, використаний для <var>$1difftotext</var> й очікуваний для контенту-результату.",
        "apihelp-query+search-description": "Виконати повнотекстовий пошук.",
        "apihelp-query+search-param-search": "Шукати назви сторінок або вміст, що співпадає з цим значенням. Ви можете використати рядок пошуку для виклику спеціальних функцій пошуку, залежно від внутрішніх установок пошуку у вікі.",
        "apihelp-query+siteinfo-paramvalue-prop-usergroups": "Видає групи користувачів і пов'язані дозволи.",
        "apihelp-query+siteinfo-paramvalue-prop-libraries": "Видає бібліотеки, встановлені у вікі.",
        "apihelp-query+siteinfo-paramvalue-prop-extensions": "Видає розширення, встановлені у вікі.",
-       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Видає список розширень файлів, які дозволено завантажувати.",
+       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Видає список розширень файлів (типів файлів), які дозволено завантажувати.",
        "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Видає інформацію щодо прав (ліцензії) вікі, якщо наявна.",
        "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Видає інформацію про наявні типи обмежень (захисту).",
        "apihelp-query+siteinfo-paramvalue-prop-languages": "Видає список мов, які підтримує MediaWiki (за бажанням локалізовані через <var>$1inlanguagecode</var>).",
        "apihelp-query+watchlist-paramvalue-prop-notificationtimestamp": "Додає мітку часу, коли користувач був востаннє сповіщений про редагування.",
        "apihelp-query+watchlist-paramvalue-prop-loginfo": "Додає інформацію журналу, де це доречно.",
        "apihelp-query+watchlist-param-show": "Показати лише елементи, що задовільняють ці критерії. Наприклад, для перегляду лише незначних змін, здійснених користувачами, що увійшли до системи, вкажіть $1show=minor|!anon.",
-       "apihelp-query+watchlist-param-type": "Які типи змін показувати:\n;edit:Звичайні редагування сторінки.\n;external:Зовнішні зміни.\n;new:Створення сторінок.\n;log:Записи журналу.",
+       "apihelp-query+watchlist-param-type": "Які типи змін показувати:",
        "apihelp-query+watchlist-paramvalue-type-edit": "Регулярні сторінки правок.",
        "apihelp-query+watchlist-paramvalue-type-external": "Зовнішні зміни.",
        "apihelp-query+watchlist-paramvalue-type-new": "Сторінка створена.",
        "apihelp-query+watchlist-paramvalue-type-log": "Записи в журналі.",
+       "apihelp-query+watchlist-paramvalue-type-categorize": "Зміни членства в категорії.",
        "apihelp-query+watchlist-param-owner": "Використовується разом з $1token для доступу до списку спостереження різних користувачів.",
        "apihelp-query+watchlist-param-token": "Токен безпеки (доступний у [[Special:Preferences#mw-prefsection-watchlist|налаштуваннях]] користувача) для отримання доступу до списку спостереження іншого користувача.",
        "apihelp-query+watchlist-example-simple": "Перелічити верхні версії для нещодавно змінених сторінок у списку спостереження поточного користувача.",
        "apihelp-php-description": "Виводити дані у форматі серіалізованого PHP.",
        "apihelp-php-param-formatversion": "Форматування виводу:\n;1:Формат зворотної сумісності (булеви XML-стилю, <samp>*</samp> ключі для вузлів вмісту тощо).\n;2:Експериментальний сучасний формат. Деталі можуть змінюватись.\n;latest:Використовувати найостанніший формат (наразі <kbd>2</kbd>). Може змінюватись без попередження.",
        "apihelp-phpfm-description": "Виводити дані у форматі серіалізованого PHP (вивід відформатованого коду за допомогою HTML).",
-       "apihelp-rawfm-description": "Виводити дані у форматі JSON разом з елементами налагодження (вивід відформатованого коду за допомогою HTML).",
+       "apihelp-rawfm-description": "Виводити дані, включно з елементами налагодження, у форматі JSON (вивід відформатованого коду за допомогою HTML).",
        "apihelp-txt-description": "Виводити дані у форматі PHP <code>print_r()</code>.",
        "apihelp-txtfm-description": "Виводити дані у форматі PHP <code>print_r()</code> (вивід відформатованого коду за допомогою HTML).",
        "apihelp-xml-description": "Виводити дані у форматі XML.",
index 93b4b57..5ea926b 100644 (file)
  */
 class LinkCache {
        /**
-        * @var MapCacheLRU
+        * @var HashBagOStuff
         */
        private $mGoodLinks;
        /**
-        * @var MapCacheLRU
+        * @var HashBagOStuff
         */
        private $mBadLinks;
        private $mForUpdate = false;
@@ -49,8 +49,8 @@ class LinkCache {
        protected static $instance;
 
        public function __construct() {
-               $this->mGoodLinks = new MapCacheLRU( self::MAX_SIZE );
-               $this->mBadLinks = new MapCacheLRU( self::MAX_SIZE );
+               $this->mGoodLinks = new HashBagOStuff( array( 'maxKeys' => self::MAX_SIZE ) );
+               $this->mBadLinks = new HashBagOStuff( array( 'maxKeys' => self::MAX_SIZE ) );
        }
 
        /**
@@ -58,32 +58,35 @@ class LinkCache {
         *
         * @return LinkCache
         */
-       static function &singleton() {
-               if ( self::$instance ) {
-                       return self::$instance;
+       public static function &singleton() {
+               if ( !self::$instance ) {
+                       self::$instance = new LinkCache;
                }
-               self::$instance = new LinkCache;
 
                return self::$instance;
        }
 
        /**
-        * Destroy the singleton instance, a new one will be created next time
-        * singleton() is called.
+        * Destroy the singleton instance
+        *
+        * A new one will be created next time singleton() is called.
+        *
         * @since 1.22
         */
-       static function destroySingleton() {
+       public static function destroySingleton() {
                self::$instance = null;
        }
 
        /**
         * Set the singleton instance to a given object.
+        *
         * Since we do not have an interface for LinkCache, you have to be sure the
         * given object implements all the LinkCache public methods.
+        *
         * @param LinkCache $instance
         * @since 1.22
         */
-       static function setSingleton( LinkCache $instance ) {
+       public static function setSingleton( LinkCache $instance ) {
                self::$instance = $instance;
        }
 
@@ -103,32 +106,30 @@ class LinkCache {
 
        /**
         * @param string $title
-        * @return int
+        * @return int Page ID or zero
         */
        public function getGoodLinkID( $title ) {
-               if ( $this->mGoodLinks->has( $title ) ) {
-                       $info = $this->mGoodLinks->get( $title );
-                       return $info['id'];
-               } else {
+               $info = $this->mGoodLinks->get( $title );
+               if ( !$info ) {
                        return 0;
                }
+               return $info['id'];
        }
 
        /**
         * Get a field of a title object from cache.
-        * If this link is not good, it will return NULL.
+        * If this link is not a cached good title, it will return NULL.
         * @param Title $title
         * @param string $field ('length','redirect','revision','model')
-        * @return string|null
+        * @return string|int|null
         */
        public function getGoodLinkFieldObj( $title, $field ) {
                $dbkey = $title->getPrefixedDBkey();
-               if ( $this->mGoodLinks->has( $dbkey ) ) {
-                       $info = $this->mGoodLinks->get( $dbkey );
-                       return $info[$field];
-               } else {
+               $info = $this->mGoodLinks->get( $dbkey );
+               if ( !$info ) {
                        return null;
                }
+               return $info[$field];
        }
 
        /**
@@ -136,8 +137,8 @@ class LinkCache {
         * @return bool
         */
        public function isBadLink( $title ) {
-               // We need to use get here since has will not call ping.
-               return $this->mBadLinks->get( $title ) !== null;
+               // Use get() to ensure it records as used for LRU.
+               return $this->mBadLinks->get( $title ) !== false;
        }
 
        /**
@@ -150,7 +151,7 @@ class LinkCache {
         * @param int $revision Latest revision's ID
         * @param string|null $model Latest revision's content model ID
         */
-       public function addGoodLinkObj( $id, $title, $len = -1, $redir = null,
+       public function addGoodLinkObj( $id, Title $title, $len = -1, $redir = null,
                $revision = 0, $model = null
        ) {
                $dbkey = $title->getPrefixedDBkey();
@@ -170,7 +171,7 @@ class LinkCache {
         * @param stdClass $row Object which has the fields page_id, page_is_redirect,
         *  page_latest and page_content_model
         */
-       public function addGoodLinkObjFromRow( $title, $row ) {
+       public function addGoodLinkObjFromRow( Title $title, $row ) {
                $dbkey = $title->getPrefixedDBkey();
                $this->mGoodLinks->set( $dbkey, array(
                        'id' => intval( $row->page_id ),
@@ -184,7 +185,7 @@ class LinkCache {
        /**
         * @param Title $title
         */
-       public function addBadLinkObj( $title ) {
+       public function addBadLinkObj( Title $title ) {
                $dbkey = $title->getPrefixedDBkey();
                if ( !$this->isBadLink( $dbkey ) ) {
                        $this->mBadLinks->set( $dbkey, 1 );
@@ -200,32 +201,31 @@ class LinkCache {
         */
        public function clearLink( $title ) {
                $dbkey = $title->getPrefixedDBkey();
-               $this->mBadLinks->clear( array( $dbkey ) );
-               $this->mGoodLinks->clear( array( $dbkey ) );
+               $this->mBadLinks->delete( $dbkey );
+               $this->mGoodLinks->delete( $dbkey );
        }
 
        /**
         * Add a title to the link cache, return the page_id or zero if non-existent
         *
         * @param string $title Title to add
-        * @return int
+        * @return int Page ID or zero
         */
        public function addLink( $title ) {
                $nt = Title::newFromDBkey( $title );
-               if ( $nt ) {
-                       return $this->addLinkObj( $nt );
-               } else {
+               if ( !$nt ) {
                        return 0;
                }
+               return $this->addLinkObj( $nt );
        }
 
        /**
         * Add a title to the link cache, return the page_id or zero if non-existent
         *
         * @param Title $nt Title object to add
-        * @return int
+        * @return int Page ID or zero
         */
-       public function addLinkObj( $nt ) {
+       public function addLinkObj( Title $nt ) {
                global $wgContentHandlerUseDB;
 
                $key = $nt->getPrefixedDBkey();
@@ -241,25 +241,22 @@ class LinkCache {
                        return 0;
                }
 
-               # Some fields heavily used for linking...
-               if ( $this->mForUpdate ) {
-                       $db = wfGetDB( DB_MASTER );
-               } else {
-                       $db = wfGetDB( DB_SLAVE );
-               }
+               // Some fields heavily used for linking...
+               $db = $this->mForUpdate ? wfGetDB( DB_MASTER ) : wfGetDB( DB_SLAVE );
 
-               $f = array( 'page_id', 'page_len', 'page_is_redirect', 'page_latest' );
+               $fields = array( 'page_id', 'page_len', 'page_is_redirect', 'page_latest' );
                if ( $wgContentHandlerUseDB ) {
-                       $f[] = 'page_content_model';
+                       $fields[] = 'page_content_model';
                }
 
-               $s = $db->selectRow( 'page', $f,
+               $row = $db->selectRow( 'page', $fields,
                        array( 'page_namespace' => $nt->getNamespace(), 'page_title' => $nt->getDBkey() ),
-                       __METHOD__ );
-               # Set fields...
-               if ( $s !== false ) {
-                       $this->addGoodLinkObjFromRow( $nt, $s );
-                       $id = intval( $s->page_id );
+                       __METHOD__
+               );
+
+               if ( $row !== false ) {
+                       $this->addGoodLinkObjFromRow( $nt, $row );
+                       $id = intval( $row->page_id );
                } else {
                        $this->addBadLinkObj( $nt );
                        $id = 0;
index 03841d6..fad8ee8 100644 (file)
@@ -1147,29 +1147,32 @@ interface LCStore {
  * This will work on any MediaWiki installation.
  */
 class LCStoreDB implements LCStore {
+       /** @var string */
        private $currentLang;
+       /** @var bool */
        private $writesDone = false;
-
-       /** @var DatabaseBase */
+       /** @var IDatabase */
        private $dbw;
        /** @var array */
        private $batch = array();
-
+       /** @var bool */
        private $readOnly = false;
 
        public function get( $code, $key ) {
-               if ( $this->writesDone ) {
-                       $db = wfGetDB( DB_MASTER );
+               if ( $this->writesDone && $this->dbw ) {
+                       $db = $this->dbw; // see the changes in finishWrite()
                } else {
                        $db = wfGetDB( DB_SLAVE );
                }
-               $row = $db->selectRow( 'l10n_cache', array( 'lc_value' ),
-                       array( 'lc_lang' => $code, 'lc_key' => $key ), __METHOD__ );
-               if ( $row ) {
-                       return unserialize( $db->decodeBlob( $row->lc_value ) );
-               } else {
-                       return null;
-               }
+
+               $value = $db->selectField(
+                       'l10n_cache',
+                       'lc_value',
+                       array( 'lc_lang' => $code, 'lc_key' => $key ),
+                       __METHOD__
+               );
+
+               return ( $value !== false ) ? unserialize( $db->decodeBlob( $value ) ) : null;
        }
 
        public function startWrite( $code ) {
@@ -1180,6 +1183,7 @@ class LCStoreDB implements LCStore {
                }
 
                $this->dbw = wfGetDB( DB_MASTER );
+               $this->readOnly = $this->dbw->isReadOnly();
 
                $this->currentLang = $code;
                $this->batch = array();
@@ -1192,10 +1196,13 @@ class LCStoreDB implements LCStore {
                        throw new MWException( __CLASS__ . ': must call startWrite() before finishWrite()' );
                }
 
-               $this->dbw->begin( __METHOD__ );
+               $this->dbw->startAtomic( __METHOD__ );
                try {
-                       $this->dbw->delete( 'l10n_cache',
-                               array( 'lc_lang' => $this->currentLang ), __METHOD__ );
+                       $this->dbw->delete(
+                               'l10n_cache',
+                               array( 'lc_lang' => $this->currentLang ),
+                               __METHOD__
+                       );
                        foreach ( array_chunk( $this->batch, 500 ) as $rows ) {
                                $this->dbw->insert( 'l10n_cache', $rows, __METHOD__ );
                        }
@@ -1207,7 +1214,7 @@ class LCStoreDB implements LCStore {
                                throw $e;
                        }
                }
-               $this->dbw->commit( __METHOD__ );
+               $this->dbw->endAtomic( __METHOD__ );
 
                $this->currentLang = null;
                $this->batch = array();
@@ -1223,7 +1230,8 @@ class LCStoreDB implements LCStore {
                $this->batch[] = array(
                        'lc_lang' => $this->currentLang,
                        'lc_key' => $key,
-                       'lc_value' => $this->dbw->encodeBlob( serialize( $value ) ) );
+                       'lc_value' => $this->dbw->encodeBlob( serialize( $value ) )
+               );
        }
 }
 
index 6290eae..ab7e171 100644 (file)
@@ -41,6 +41,16 @@ class MessageBlobStore {
         */
        protected $blobCache = array();
 
+       /* @var ResourceLoader */
+       protected $resourceloader;
+
+       /**
+        * @param ResourceLoader $resourceloader
+        */
+       public function __construct( ResourceLoader $resourceloader = null ) {
+               $this->resourceloader = $resourceloader;
+       }
+
        /**
         * Get the singleton instance
         *
@@ -131,29 +141,14 @@ class MessageBlobStore {
                                array( 'IGNORE' )
                        );
 
-                       if ( $success ) {
-                               if ( $dbw->affectedRows() == 0 ) {
-                                       // Blob was already present, fetch it
-                                       $blob = $dbw->selectField( 'msg_resource', 'mr_blob', array(
-                                                       'mr_resource' => $name,
-                                                       'mr_lang' => $lang,
-                                               ),
-                                               __METHOD__
-                                       );
-                               } else {
-                                       // Update msg_resource_links
-                                       $rows = array();
-
-                                       foreach ( $module->getMessages() as $key ) {
-                                               $rows[] = array(
-                                                       'mrl_resource' => $name,
-                                                       'mrl_message' => $key
-                                               );
-                                       }
-                                       $dbw->insert( 'msg_resource_links', $rows,
-                                               __METHOD__, array( 'IGNORE' )
-                                       );
-                               }
+                       if ( $success && $dbw->affectedRows() == 0 ) {
+                               // Blob was already present, fetch it
+                               $blob = $dbw->selectField( 'msg_resource', 'mr_blob', array(
+                                               'mr_resource' => $name,
+                                               'mr_lang' => $lang,
+                                       ),
+                                       __METHOD__
+                               );
                        }
                } catch ( DBError $e ) {
                        wfDebug( __METHOD__ . " failed to update DB: $e\n" );
@@ -180,8 +175,6 @@ class MessageBlobStore {
                        return null;
                }
 
-               // Save the old and new blobs for later
-               $oldBlob = $row->mr_blob;
                $newBlob = $this->generateMessageBlob( $module, $lang );
 
                try {
@@ -196,36 +189,6 @@ class MessageBlobStore {
                                array( array( 'mr_resource', 'mr_lang' ) ),
                                $newRow, __METHOD__
                        );
-
-                       // Figure out which messages were added and removed
-                       $oldMessages = array_keys( FormatJson::decode( $oldBlob, true ) );
-                       $newMessages = array_keys( FormatJson::decode( $newBlob, true ) );
-                       $added = array_diff( $newMessages, $oldMessages );
-                       $removed = array_diff( $oldMessages, $newMessages );
-
-                       // Delete removed messages, insert added ones
-                       if ( $removed ) {
-                               $dbw->delete( 'msg_resource_links', array(
-                                               'mrl_resource' => $name,
-                                               'mrl_message' => $removed
-                                       ), __METHOD__
-                               );
-                       }
-
-                       $newLinksRows = array();
-
-                       foreach ( $added as $message ) {
-                               $newLinksRows[] = array(
-                                       'mrl_resource' => $name,
-                                       'mrl_message' => $message
-                               );
-                       }
-
-                       if ( $newLinksRows ) {
-                               $dbw->insert( 'msg_resource_links', $newLinksRows, __METHOD__,
-                                       array( 'IGNORE' ) // just in case
-                               );
-                       }
                } catch ( Exception $e ) {
                        wfDebug( __METHOD__ . " failed to update DB: $e\n" );
                }
@@ -273,26 +236,36 @@ class MessageBlobStore {
                                }
                        } while ( count( $updates ) );
 
-                       // No need to update msg_resource_links because we didn't add
-                       // or remove any messages, we just changed their contents.
                } catch ( Exception $e ) {
                        wfDebug( __METHOD__ . " failed to update DB: $e\n" );
                }
        }
 
        public function clear() {
-               // TODO: Give this some more thought
                try {
                        // Not using TRUNCATE, because that needs extra permissions,
                        // which maybe not granted to the database user.
                        $dbw = wfGetDB( DB_MASTER );
                        $dbw->delete( 'msg_resource', '*', __METHOD__ );
-                       $dbw->delete( 'msg_resource_links', '*', __METHOD__ );
                } catch ( Exception $e ) {
                        wfDebug( __METHOD__ . " failed to update DB: $e\n" );
                }
        }
 
+       /**
+        * @return ResourceLoader
+        */
+       protected function getResourceLoader() {
+               // For back-compat this class supports instantiation without passing ResourceLoader
+               // Lazy-initialise this property because most callers don't need it.
+               if ( $this->resourceloader === null ) {
+                       wfDebug( __CLASS__ . ' created without a ResourceLoader instance' );
+                       $this->resourceloader = new ResourceLoader();
+               }
+
+               return $this->resourceloader;
+       }
+
        /**
         * Create an update queue for updateMessage()
         *
@@ -304,11 +277,15 @@ class MessageBlobStore {
                $dbw = wfGetDB( DB_MASTER );
 
                if ( is_null( $prevUpdates ) ) {
+                       $rl = $this->getResourceLoader();
+                       $moduleNames = $rl->getModulesByMessage( $key );
                        // Fetch all blobs referencing $key
                        $res = $dbw->select(
-                               array( 'msg_resource', 'msg_resource_links' ),
+                               array( 'msg_resource' ),
                                array( 'mr_resource', 'mr_lang', 'mr_blob', 'mr_timestamp' ),
-                               array( 'mrl_message' => $key, 'mr_resource=mrl_resource' ),
+                               array(
+                                       'mr_resource' => $moduleNames,
+                               ),
                                __METHOD__
                        );
                } else {
index ae746e3..2818d2f 100644 (file)
@@ -578,7 +578,8 @@ class MessageCache {
                }
 
                // Update the message in the message blob store
-               $blobStore = new MessageBlobStore();
+               $resourceloader = RequestContext::getMain()->getOutput()->getResourceLoader();
+               $blobStore = $resourceloader->getMessageBlobStore();
                $blobStore->updateMessage( $wgContLang->lcfirst( $msg ) );
 
                Hooks::run( 'MessageCacheReplace', array( $title, $text ) );
index 8097549..72a877d 100644 (file)
@@ -861,7 +861,7 @@ class SwiftFileBackend extends FileBackendStore {
                if ( !empty( $params['topOnly'] ) ) {
                        $status = $this->objectListing( $fullCont, 'names', $limit, $after, $prefix, '/' );
                        if ( !$status->isOk() ) {
-                               return $dirs; // error
+                               throw new FileBackendError( "Iterator page I/O error: {$status->getMessage()}" );
                        }
                        $objects = $status->value;
                        foreach ( $objects as $object ) { // files and directories
@@ -880,7 +880,7 @@ class SwiftFileBackend extends FileBackendStore {
                        $status = $this->objectListing( $fullCont, 'names', $limit, $after, $prefix );
 
                        if ( !$status->isOk() ) {
-                               return $dirs; // error
+                               throw new FileBackendError( "Iterator page I/O error: {$status->getMessage()}" );
                        }
 
                        $objects = $status->value;
@@ -956,7 +956,7 @@ class SwiftFileBackend extends FileBackendStore {
 
                // Reformat this list into a list of (name, stat array or null) entries
                if ( !$status->isOk() ) {
-                       return $files; // error
+                       throw new FileBackendError( "Iterator page I/O error: {$status->getMessage()}" );
                }
 
                $objects = $status->value;
index cd64f0d..12d4007 100644 (file)
@@ -1365,8 +1365,6 @@ class LocalFile extends File {
                $logId = $logEntry->insert();
 
                if ( $descTitle->exists() ) {
-                       // Page exists, do RC entry now (otherwise we wait for later)
-                       $logEntry->publish( $logId );
                        // Use own context to get the action text in content language
                        $formatter = LogFormatter::newFromEntry( $logEntry );
                        $formatter->setContext( RequestContext::newExtraneousContext( $descTitle ) );
@@ -1407,6 +1405,8 @@ class LocalFile extends File {
                ) {
                        # Update memcache after the commit
                        $that->invalidateCache();
+                       # Page exists, do RC entry now (otherwise we wait for later)
+                       $logEntry->publish( $logId );
 
                        if ( $newPageContent ) {
                                # New file page; create the description page.
@@ -1423,7 +1423,6 @@ class LocalFile extends File {
                                // Now that the page exists, make an RC entry.
                                // This relies on the resetArticleID() call in WikiPage::insertOn(),
                                // which is triggered on $descTitle by doEditContent() above.
-                               $logEntry->publish( $logId );
                                if ( isset( $status->value['revision'] ) ) {
                                        /** @var $rev Revision */
                                        $rev = $status->value['revision'];
index 87f3374..370874b 100644 (file)
        "config-db-install-account": "Compte d'utilisateur pour l'installation",
        "config-db-username": "Nom d’utilisateur de la base de données :",
        "config-db-password": "Mot de passe de la base de données :",
-       "config-db-password-empty": "Veuillez entrer un mot de passe pour le nouveau compte de la base de données : $1.\nBien qu'il soit possible de créer un compte sans mot de passe, ce n'est pas recommandé pour des questions de sécurité.",
-       "config-db-username-empty": "Vous devez entrer une valeur pour « {{int:config-db-username}} ».",
        "config-db-install-username": "Entrez le nom d’utilisateur qui sera utilisé pour se connecter à la base de données pendant le processus d'installation. Il ne s’agit pas du nom d’utilisateur du compte MediaWiki, mais du nom d’utilisateur pour votre base de données.",
        "config-db-install-password": "Entrez le mot de passe qui sera utilisé pour se connecter à la base de données pendant le processus d'installation. Il ne s’agit pas du mot de passe du compte MediaWiki, mais du mot de passe pour votre base de données.",
        "config-db-install-help": "Entrez le nom d'utilisateur et le mot de passe qui seront utilisés pour se connecter à la base de données pendant le processus d'installation.",
        "config-nofile": "Le fichier « $1 » est introuvable. A-t-il été supprimé ?",
        "config-extension-link": "Saviez-vous que votre wiki supporte [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions des extensions] ?\n\nVous pouvez consulter les [//www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensions par catégorie].",
        "mainpagetext": "<strong>MediaWiki a été installé avec succès.</strong>",
-       "mainpagedocfooter": "Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.\n\n== Pour démarrer ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]"
+       "mainpagedocfooter": "Consultez le [//meta.wikimedia.org/wiki/Help:Contents/fr Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel de wiki.\n\n== Pour démarrer ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Liste des paramètres de configuration]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/fr Questions courantes sur MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Liste de discussion sur les distributions de MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Adaptez MediaWiki dans votre langue]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Apprendre comment lutter contre le pourriel dans votre wiki]"
 }
index 312f3ff..03f236b 100644 (file)
@@ -61,5 +61,5 @@
        "config-install-tables-failed": "<strong>त्रूटी:</strong>खालील त्रूटीमुळे सारणी बनविणे अयशस्वी:$1",
        "config-help": "साहाय्य",
        "mainpagetext": "'''मीडियाविकीचे इन्स्टॉलेशन पूर्ण.'''",
-       "mainpagedocfooter": "विकी सॉफ्टवेअर वापरण्याकरिता [//meta.wikimedia.org/wiki/Help:Contents यूजर गाईड] पहा.\n\n== सुरुवात ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings कॉन्फिगरेशन सेटींगची यादी]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ मीडियाविकी नेहमी विचारले जाणारे प्रश्न]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce मीडियाविकि मेलिंग लिस्ट]"
+       "mainpagedocfooter": "विकी सॉफ्टवेअर वापरण्याकरिता [//meta.wikimedia.org/wiki/Help:Contents यूजर गाईड] पहा.\n\n== सुरुवात करा ==\n\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings रचित मांडण्याची यादी]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ मिडियाविकि FAQ]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-मिडियाविकिची मेलिंग यादीचे विमोचनाची उद्घोषणाannounce MediaWiki release mailing list]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources आपल्या भाषेसाठी मिडियाविकिचे स्थानिकिकरण करा]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam आपल्या विकिवर स्पॅमशी दोन हात कशे करावे ते शिका]"
 }
index d7f435e..f5eb7fa 100644 (file)
@@ -48,7 +48,6 @@
        "config-env-bad": "Okolje je pregledano.\nNe morete namestiti MediaWiki.",
        "config-env-php": "Nameščen je PHP $1.",
        "config-env-hhvm": "HHVM $1 je nameščen.",
-       "config-unicode-using-utf8": "Uporaba utf8_normalize.so Briona Vibberja za normalizacijo unikoda.",
        "config-unicode-using-intl": "Uporaba [http://pecl.php.net/intl razširitve PECL intl] za normalizacijo unikoda.",
        "config-memory-raised": "PHP-jev <code>memory_limit</code> je $1, dvignjen na $2.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] je nameščen",
@@ -66,8 +65,6 @@
        "config-db-install-account": "Uporabniški račun za namestitev",
        "config-db-username": "Uporabniško ime zbirke podatkov:",
        "config-db-password": "Geslo zbirke podatkov:",
-       "config-db-password-empty": "Prosimo, vnesite geslo za novega uporabnika podatkovne zbirke: $1. Morda je mogoče ustvarjati uporabnike brez gesel, ni pa varno.",
-       "config-db-username-empty": "Vnesti morate vrednost za \"{{int:config-db-username}}\".",
        "config-db-install-username": "Vnesite uporabniško ime za povezavo s podatkovno zbirko med postopkom nameščanja.\nTo ni uporabniško ime računa MediaWiki, pač pa uporabniško ime za vašo podatkovno zbirko.",
        "config-db-install-password": "Vnesite geslo za povezavo s podatkovno zbirko med postopkom nameščanja.\nTo ni geslo računa MediaWiki, pač pa geslo za vašo podatkovno zbirko.",
        "config-db-install-help": "Vnesite uporabniško ime in geslo za povezavo s podatkovno zbirko med postopkom nameščanja.",
        "config-download-localsettings": "Prenesi <code>LocalSettings.php</code>",
        "config-help": "pomoč",
        "mainpagetext": "'''Programje MediaWiki je bilo uspešno nameščeno.'''",
-       "mainpagedocfooter": "Oglejte si [//meta.wikimedia.org/wiki/Help:Contents Uporabniški priročnik] za informacije o uporabi programja wiki.\n\n== Kako začeti ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Seznam konfiguracijskih nastavitev]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Poogsto zastavljena vprašanja MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Poštni seznam izdaj MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Prevedite MediaWiki v svoj jezik]"
+       "mainpagedocfooter": "Oglejte si [//meta.wikimedia.org/wiki/Help:Contents Uporabniški priročnik] za informacije o uporabi programja wiki.\n\n== Kako začeti ==\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Seznam konfiguracijskih nastavitev]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Poogsto zastavljena vprašanja MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Poštni seznam izdaj MediaWiki]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Prevedite MediaWiki v svoj jezik]\n* [//www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Izvedite, kako se boriti proti smetju na svojem wikiju]"
 }
index 3923f7e..3d85b7b 100644 (file)
@@ -4,7 +4,8 @@
                        "පසිඳු කාවින්ද",
                        "Minh Nguyen",
                        "Withoutaname",
-                       "Dinhxuanduyet"
+                       "Dinhxuanduyet",
+                       "Nguyên Lê"
                ]
        },
        "config-desc": "Trình cài đặt MediaWiki",
@@ -22,7 +23,7 @@
        "config-no-session": "Đã mất dữ liệu phiên làm việc của bạn! Kiểm tra tập tin php.ini và đảm bảo rằng <code>session.save_path</code> đã được đặt thành một thư mục thích hợp.",
        "config-your-language": "Ngôn ngữ của bạn:",
        "config-your-language-help": "Chọn một ngôn ngữ để sử dụng trong quá trình cài đặt.",
-       "config-wiki-language": "Ngôn ngữ wiki:",
+       "config-wiki-language": "Ngôn ngữ của wiki:",
        "config-wiki-language-help": "Chọn ngôn ngữ chủ yếu của nội dung trong wiki này.",
        "config-back": "← Lùi",
        "config-continue": "Tiếp →",
index d9416e4..6995642 100644 (file)
@@ -274,7 +274,7 @@ class ResourceLoader implements LoggerAwareInterface {
                        $this->registerTestModules();
                }
 
-               $this->setMessageBlobStore( new MessageBlobStore() );
+               $this->setMessageBlobStore( new MessageBlobStore( $this ) );
        }
 
        /**
@@ -1069,6 +1069,23 @@ MESSAGE;
                return $out;
        }
 
+       /**
+        * Get names of modules that use a certain message.
+        *
+        * @param string $messageKey
+        * @return array List of module names
+        */
+       public function getModulesByMessage( $messageKey ) {
+               $moduleNames = array();
+               foreach ( $this->getModuleNames() as $moduleName ) {
+                       $module = $this->getModule( $moduleName );
+                       if ( in_array( $messageKey, $module->getMessages() ) ) {
+                               $moduleNames[] = $moduleName;
+                       }
+               }
+               return $moduleNames;
+       }
+
        /* Static Methods */
 
        /**
index 0f80cd1..5fd8fc3 100644 (file)
        "showingresultsinrange": "بالأسفل {{PLURAL:$1|نتيجة واحدة|<strong>$1</strong> نتائج|<strong>$1</strong> نتيجة}} في النطاق من <strong>$2</strong> إلى <strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|النتائج <strong>$1</strong> من <strong>$3</strong>|النتائج <strong>$1 - $2</strong> من أصل <strong>$3</strong>}}",
        "search-nonefound": "لا توجد نتائج تطابق الاستعلام.",
+       "search-nonefound-thiswiki": "لا توجد نتائج تطابق الاستعلام في هذا الموقع.",
        "powersearch-legend": "بحث متقدم",
        "powersearch-ns": "بحث في النطاقات:",
        "powersearch-togglelabel": "اختر:",
        "rcshowhidemine": "$1 تعديلاتي",
        "rcshowhidemine-show": "أظهر",
        "rcshowhidemine-hide": "أخف",
+       "rcshowhidecategorization-show": "أظهر",
+       "rcshowhidecategorization-hide": "أخف",
        "rclinks": "أظهر آخر $1 تعديل في آخر $2 يوم<br />$3",
        "diff": "فرق",
        "hist": "تاريخ",
index 0171456..a45a4d3 100644 (file)
        "logentry-block-reblock": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} тэрмін блякаваньня {{GENDER:$4|$3}} на пэрыяд $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|заблякаваў|заблякавала}} {{GENDER:$4|$3}} на тэрмін $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} тэрмін блякаваньня {{GENDER:$4|$3}} на пэрыяд $5 $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|імпартаваў|імпартавала}} $3 праз загрузку файлу",
        "logentry-merge-merge": "$1 {{GENDER:$2|аб’яднаў|аб’яднала}} $3 у $4 (вэрсіі да $5)",
        "logentry-move-move": "$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|перанёс|перанесла}} старонку $3 у $4 без пакінутага перанакіраваньня",
index 5f82e89..c2e8831 100644 (file)
        "missingarticle-rev": "(číslo revize: $1)",
        "missingarticle-diff": "(Rozdíl: $1, $2)",
        "readonly_lag": "Databáze byla automaticky dočasně uzamčena kvůli zpoždění ostatních databázových serverů oproti hlavnímu",
+       "nonwrite-api-promise-error": "Byla odeslána HTTP hlavička „Promise-Non-Write-API-Action“, ale požadavek směřoval na API modul pro zápis.",
        "internalerror": "Vnitřní chyba",
        "internalerror_info": "Vnitřní chyba: $1",
        "internalerror-fatal-exception": "Kritická výjimka typu „$1“",
index cd9b4cf..f160f09 100644 (file)
@@ -29,6 +29,7 @@
        "tog-hideminor": "Ezkutatu azken aldaketetan aldaketa txikiak",
        "tog-hidepatrolled": "Ezkutatu patruilatutako aldaketa azken aldaketetan",
        "tog-newpageshidepatrolled": "Ezkutatu patruilatutako orriak, orri-zerrenda berritik",
+       "tog-hidecategorization": "Orrialdeen kategorizazioa ezkutatu",
        "tog-extendwatchlist": "Jarraipen-zerrenda zabaldu aldaketa guztiak ikusteko, ez bakarrik azken aldaketak",
        "tog-usenewrc": "Azken aldaketetan eta jarraipen-zerrendan aldaketak orrialdearen arabera taldekatu",
        "tog-numberheadings": "Goiburukoak automatikoki zenbakitu",
@@ -39,6 +40,7 @@
        "tog-watchdefault": "Aldatzen ditudan orrialdeak eta fitxategiak nire jarraipen-zerrendara gehitu",
        "tog-watchmoves": "Izena aldatutako orrialdeak eta fitxategiak jarraipen-zerrendara gehitu",
        "tog-watchdeletion": "Ezabatzen ditudan orrialdeak eta fitxategiak nire jarraipen-zerrendara gehitu",
+       "tog-watchrollback": "Nire jarraipen zerrendan rollbacka egin dudan orrialdeak erakutsi",
        "tog-minordefault": "Lehenetsi bezala aldaketa txiki bezala markatu guztiak",
        "tog-previewontop": "Aurrebista aldaketa koadroaren aurretik erakutsi",
        "tog-previewonfirst": "Lehen aldaketan aurrebista erakutsi",
@@ -57,6 +59,7 @@
        "tog-watchlisthideliu": "Ezkutatu izena emana duten lankideen aldaketak, jarraitze-zerrendan",
        "tog-watchlisthideanons": "Ezkutatu lankide anonimoen aldaketak, jarraitze-zerrendan",
        "tog-watchlisthidepatrolled": "Ezkutatu patruilatutako aldaketak jarraitze-zerrendan",
+       "tog-watchlisthidecategorization": "Orrialdeen kategorizazioa ezkutatu",
        "tog-ccmeonemails": "Beste erabiltzaileei bidaltzen dizkiedan mezuen kopiak niri ere bidali",
        "tog-diffonly": "''Diff''-ak agertzen direnean, orrialdearen edukiera ezkutatu",
        "tog-showhiddencats": "Ikusi kategoria ezkutuak",
        "view": "Ikusi",
        "view-foreign": "$1(e)n ikusi",
        "edit": "Aldatu",
+       "edit-local": "Aldatu deskribapen lokala",
        "create": "Sortu",
        "create-local": "Gehitu deskribapen lokala",
        "editthispage": "Orri hau aldatu",
        "pool-timeout": "Lock-a itxoiten denbora amaitu da",
        "pool-queuefull": "Prozesuen zerrenda beteta dago",
        "pool-errorunknown": "Errore ezezaguna",
+       "pool-servererror": "Pool kontadore zerbitzua ez dago eskuragarri ($1)",
        "poolcounter-usage-error": "Erabilera-errorea: $1",
        "aboutsite": "{{SITENAME}} guneari buruz",
        "aboutpage": "Project:Honi_buruz",
        "content-model-text": "testu laua",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-json-empty-object": "Objetu hustua",
+       "content-json-empty-array": "Matrize hutsa",
        "expensive-parserfunction-warning": "Adi: Orrialde honek parser funtzio deialdi oso garesti gehiegi ditu.\n\n$2 {{PLURAL:$2|deialdi|deialdi}} baino gutxiago eduki beharko lituzke, eta orain $1 {{PLURAL:$1|dago|daude}}.",
        "expensive-parserfunction-category": "Parser funtzio deialdi oso garesti gehiegi dituzten orrialdeak",
        "post-expand-template-inclusion-warning": "Kontuz: Txantiloiak sartzen duena oso handia da.\nTxantiloi batzuk ez dira erabiliko.",
        "history-feed-description": "Wikiko orrialde honen berrikuspenen historia",
        "history-feed-item-nocomment": "nork: $1 noiz: $2",
        "history-feed-empty": "Eskatutako orrialdea ez da existitzen. Baliteke wikitik ezabatu edo izenez aldatu izana. Saiatu [[Special:Search|wikian zerikusia duten orrialdeak bilatzen]].",
+       "history-edit-tags": "Hautatutako berrikuspenen etiketak aldatu",
        "rev-deleted-comment": "(aldaketa laburpena ezabatu da)",
        "rev-deleted-user": "(erabiltzailea ezabatu da)",
-       "rev-deleted-event": "(log ekintza ezabatu da)",
+       "rev-deleted-event": "(log xehetasunak ezabatu dira)",
        "rev-deleted-user-contribs": "[lankide izena edo Ip helbidea ezabatua - aldatu ezkutapena ekarpenetatik]",
        "rev-deleted-text-permission": "Orrialdearen berrikuspen hau '''ezabatua''' izan da.\nXehetasunak [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ezabaketa erregistroan] ikus daitezke.",
        "rev-deleted-text-unhide": "Orriaren bertsio hau '''ezabatu''' da.\nXehetasunak ikusgai daude [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} ezabatze erregistroan].\nAdministratzailea zarenez, oraindik [$1 bertsio hau ikus dezakezu], nahi izanez gero.",
        "searchrelated": "erlazionatua",
        "searchall": "guztia",
        "showingresults": "Jarraian {{PLURAL:$1|emaitza '''1''' ikus daiteke|'''$1''' emaitza ikus daitezke}}, #'''$2'''.etik hasita.",
+       "showingresultsinrange": "Jarraian {{PLURAL:$1|emaitza '''1''' ikus daiteke|'''$1''' emaitza ikus daitezke}}, #'''$2'''.etik hasi eta #<strong>$3</strong>.eraino.",
        "search-showingresults": "{{PLURAL:$4|Emaitza <strong>$1</strong><strong>$3</strong>(e)tik|Results <strong>$1 - $2</strong><strong>$3</strong>(e)tik}}",
        "search-nonefound": "Ez dago eskaerarekin bat egiten duten emaitzarik.",
        "powersearch-legend": "Bilaketa aurreratua",
        "columns": "Zutabeak:",
        "searchresultshead": "Bilaketa",
        "stub-threshold": "<a href=\"#\" class=\"stub\">stub link</a> formaturako atalasea (byteak):",
+       "stub-threshold-sample-link": "adibidea",
        "stub-threshold-disabled": "Ezgaitua",
        "recentchangesdays": "Aldaketa berrietan erakutsi beharreko egun kopurua:",
        "recentchangesdays-max": "(gehienez {{PLURAL:$1|egun bat|$1 egun}})",
        "prefs-help-recentchangescount": "Honek azken aldaketak, orrialdeen historiak eta logak barne-biltzen ditu.",
        "prefs-help-watchlist-token2": "Hau da zure jarraipen zerrendako web jarioaren giltza sekretua.\nEzagutzen duen orok zure jarraipen zerrenda irakurtzeko aukera izango du, ez partekatu.\n[[Special:ResetTokens|Klik egin hemen berrezarri behar baduzu]]",
        "savedprefs": "Zure hobespenak gorde egin dira.",
+       "savedrights": "{{GENDER:$1|$1}} erabiltzailearen eskubideak gorde dira.",
        "timezonelegend": "Ordu-eremua:",
        "localtime": "Ordu lokala:",
        "timezoneuseserverdefault": "Erabili lehenetsitako wikia ($1)",
        "group-bot-member": "{{GENDER:$1|bot-a}}",
        "group-sysop-member": "{{GENDER:$1|administratzailea}}",
        "group-bureaucrat-member": "{{GENDER:$1|burokrata}}",
-       "group-suppress-member": "{{GENDER:$1|gainikuslea}}",
+       "group-suppress-member": "{{GENDER:$1|ezabatzailea}}",
        "grouppage-user": "{{ns:project}}:Lankideak",
        "grouppage-autoconfirmed": "{{ns:project}}:Erabiltzaile autokonfirmatuak",
        "grouppage-bot": "{{ns:project}}:Bot-ak",
        "grouppage-sysop": "{{ns:project}}:Administratzaileak",
        "grouppage-bureaucrat": "{{ns:project}}:Burokratak",
-       "grouppage-suppress": "{{ns:project}}:Gainikuspena",
+       "grouppage-suppress": "{{ns:project}}:Ezabatzea",
        "right-read": "Irakurri orriak",
        "right-edit": "Orriak aldatu",
        "right-createpage": "Orrialdeak sortu (eztabaida orrialdeak ez direnak)",
        "right-move": "Mugitu orriak",
        "right-move-subpages": "Mugitu orrialdeak bere azpiorrialdeekin",
        "right-move-rootuserpages": "Erro-lankidearen orriak mugitu",
+       "right-move-categorypages": "Kategoria orrialdeak mugitu",
        "right-movefile": "Mugitu fitxategiak",
        "right-suppressredirect": "Orri bat mugitzean, ez sortu birbideratzea jatorrizko izenetik",
        "right-upload": "Fitxategia igo",
        "rcshowhidemine": "$1 nire ekarpenak",
        "rcshowhidemine-show": "Erakutsi",
        "rcshowhidemine-hide": "Ezkutatu",
+       "rcshowhidecategorization": "orrialde baten kategorizazioa $1",
        "rcshowhidecategorization-show": "Erakutsi",
        "rcshowhidecategorization-hide": "Ezkutatu",
        "rclinks": "Erakutsi azken $2 egunetako $1 aldaketak<br />$3",
        "recentchangeslinked-page": "Orriaren izena:",
        "recentchangeslinked-to": "Lotutako orrietarako aldaketak erakutsi emandako orriaren ordez",
        "recentchanges-page-added-to-category": "[[:$1]] Kategoriara gehitua",
+       "autochange-username": "MediaWiki aldaketa automatikoa",
        "upload": "Fitxategia igo",
        "uploadbtn": "Fitxategia igo",
        "reuploaddesc": "Igotzeko formulariora itzuli.",
        "unusedimages": "Erabili gabeko fitxategiak",
        "wantedcategories": "Eskatutako kategoriak",
        "wantedpages": "Eskatutako orrialdeak",
+       "wantedpages-summary": "Lotura gehien dituzten eta existitzen ez diren orrialdeen zerrenda da hau, eurengana birzuzenketak baino ez dituzten orrialdeak kenduta. Eurenganako birzuzenketak dituzten baina existitzen ez diren orrialdeen zerrenda bat ikusteko, [[{{#special:BrokenRedirects}}|apurtutako birzuzenketen zerrendara]] jo dezakezu.",
        "wantedpages-badtitle": "Izenburu okerra hautatutako emaitzetan: $1",
        "wantedfiles": "Eskatutako fitxategiak",
        "wantedtemplates": "Eskatutako txantiloiak",
        "protectedpages-timestamp": "Denbora-marka",
        "protectedpages-page": "Orria",
        "protectedpages-expiry": "Epemuga:",
+       "protectedpages-performer": "Erabiltzailea babesten",
+       "protectedpages-params": "Babesaren parametroak",
        "protectedpages-reason": "Arrazoia",
        "protectedpages-unknown-timestamp": "Ezezaguna",
        "protectedpages-unknown-performer": "Erabiltzaile ezezaguna",
        "nopagetext": "Zuk ezarri duzun helburuko orrialdea ez da existitzen.",
        "pager-newer-n": "{{PLURAL:$1|berriago den 1|berriagoak diren $1}}",
        "pager-older-n": "{{PLURAL:$1|zaharragoa den 1|zaharragoak diren $1}}",
-       "suppress": "Gain-ikuspena",
+       "suppress": "Ezabatu",
        "querypage-disabled": "Orrialde berezi hau desgaituta dago funtzionamendu arrazoiengatik.",
        "apihelp": "API laguntza",
        "apihelp-no-such-module": "Ez da \"$1\" modulua aurkitu.",
        "listgrouprights-addgroup-self-all": "Talde guztiak norbere kontura gehitu",
        "listgrouprights-removegroup-self-all": "Talde guztiak norbere kontutik ezabatu",
        "listgrouprights-namespaceprotection-namespace": "Izen-tartea",
+       "trackingcategories-nodesc": "Ez dago deskribapenik eskuragarri.",
        "trackingcategories-disabled": "Kategoria desgaitua dago",
        "mailnologin": "Bidalketa helbiderik ez",
        "mailnologintext": "Beste erabiltzaileei e-posta mezuak bidaltzeko [[Special:UserLogin|saioa hasi]] eta baliozko e-posta helbidea behar duzu izan zure [[Special:Preferences|hobespenetan]].",
        "protect-othertime": "Beste denbora:",
        "protect-othertime-op": "beste denbora",
        "protect-existing-expiry": "Iraungitze ordua: $2, $3",
+       "protect-existing-expiry-infinity": "Oraingo iraungitze denbora: infinitoa",
        "protect-otherreason": "Bestelako arrazoiak (edo gehigarriak):",
        "protect-otherreason-op": "Bestelako arrazoiak",
        "protect-dropdown": "*Babesteko arrazoi ohikoenak\n** Gehiegizko bandalismoa\n** Gehiegizko spama\n** Produkzioaren aurkakoa den edizio gerra\n** Trafiko handiko orrialdea",
        "autoblockid": "Blokeo automatikoa #$1",
        "block": "Blokeatu erabiltzailea",
        "unblock": "Erabiltzailea desblokeatu",
-       "blockip": "Blokeatu erabiltzailea",
+       "blockip": "Blokeatu {{GENDER:$1|erabiltzailea}}",
        "blockip-legend": "Blokeatu erabiltzailea",
        "blockiptext": "IP helbide edo erabiltzaile izen bati idazketa baimenak kentzeko beheko formularioa erabil dezakezu. Ekintza hau bandalismoa saihesteko baino ez da burutu behar, eta beti ere [[{{MediaWiki:Policy-url}}|politikak]] errespetatuz. Blokeoaren arrazoi bat ere zehaztu ezazu (adibidez, orrialde batzuk zehaztuz).",
        "ipaddressorusername": "IP Helbidea edo erabiltzaile izena",
        "tags-delete-title": "Etiketa ezabatu",
        "tags-delete-reason": "Arrazoia:",
        "tags-delete-not-found": "\"$1\" etiketa  ez da existitzen.",
+       "tags-activate-title": "Etiketa aktibatu",
+       "tags-activate-question": "\"$1\" etiketa aktibatzear zaude.",
        "tags-activate-reason": "Arrazoia:",
+       "tags-activate-not-allowed": "Ezin izan da \"$1\" etiketa aktibatu.",
+       "tags-activate-not-found": "\"$1\" etiketa ez da existitzen.",
        "tags-activate-submit": "Aktibatu",
+       "tags-deactivate-title": "Etiketa desaktibatu",
+       "tags-deactivate-question": "\"$1\" etiketa desaktibatzear zaude.",
        "tags-deactivate-reason": "Arrazoia:",
+       "tags-deactivate-not-allowed": "Ezin izan da \"$1\" etiketa desaktibatu.",
        "tags-deactivate-submit": "Desaktibatu",
        "tags-edit-title": "Etiketak aldatu",
        "tags-edit-manage-link": "Etiketak kudeatu",
        "tags-edit-existing-tags": "Existitzen diren etiketak:",
+       "tags-edit-existing-tags-none": "\"Bat ere ez\"",
        "tags-edit-new-tags": "Etiketa berriak:",
        "tags-edit-add": "Gehitu etiketa hauek:",
        "tags-edit-remove": "Kendu etiketa hauek:",
        "htmlform-chosen-placeholder": "Aukeratu",
        "htmlform-cloner-create": "Gehitu gehiago",
        "htmlform-cloner-delete": "Kendu",
+       "htmlform-title-not-creatable": "\"$1\" ez da sor daitekeen orrialde baten izenburua",
        "htmlform-title-not-exists": "$1 ez da existitzen.",
+       "htmlform-user-not-exists": "<strong>$1</strong> ez da existitzen.",
+       "htmlform-user-not-valid": "<strong>$1</strong> erabiltzaile izena ezin da erabili.",
        "sqlite-has-fts": "$1 testu osoan bilatzeko laguntzarekin",
        "sqlite-no-fts": "$1 testu osoan bilatzeko laguntzarik gabe",
        "logentry-delete-delete": "$1 {{GENDER:$2|wikilariak}} «$3» orria ezabatu du",
        "duration-centuries": "{{PLURAL:$1|Mende $1|$1 mende}}",
        "duration-millennia": "{{PLURAL:$1|Milurteko $1|$1 milurteko}}",
        "rotate-comment": "Irudia erlojuaren norantzan {{PLURAL:$1|gradu 1|$1 gradu}} biratua izan da",
+       "limitreport-title": "Parser profilaren datuak:",
        "limitreport-cputime": "CPU denbora erabilpena",
        "limitreport-cputime-value": "{{PLURAL:$1|Segundu $1|$1 segundu}}",
        "limitreport-walltime": "Denbora errealeko erabilpena",
        "expand_templates_input": "Sarrerako testua:",
        "expand_templates_output": "Emaitza",
        "expand_templates_xml_output": "XML irteera",
+       "expand_templates_html_output": "HTML irteera gordina",
        "expand_templates_ok": "Ados",
        "expand_templates_remove_comments": "Iruzkinak kendu",
        "expand_templates_remove_nowiki": "Ezabatu <nowiki> etiketen emaitzak",
        "log-name-pagelang": "Hizkuntza aldatu:",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (gaituta)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''desgaituta''')",
+       "mediastatistics": "Media estatistikak",
+       "mediastatistics-summary": "Igotako fitxategien estatistikak. Hemen ikus daitekeena fitxategiaren azken bertsioa baino ez da. Fitxategiaren bertsio zahar edo ezabatuak kanpo daude.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 byte}} ($2; %$3)",
        "mediastatistics-table-mimetype": "MIME mota",
+       "mediastatistics-table-extensions": "Luzapen posibleak",
        "mediastatistics-table-count": "Fitxategi kopurua",
+       "mediastatistics-table-totalbytes": "Konbinatuta tamaina",
        "mediastatistics-header-unknown": "Ezezaguna",
        "mediastatistics-header-bitmap": "Bit-mapako irudiak",
        "mediastatistics-header-drawing": "Marrazkiak (irudi bektorialak)",
        "mediastatistics-header-audio": "Audioa",
        "mediastatistics-header-video": "Bideoak",
+       "mediastatistics-header-multimedia": "Media aberatsa",
        "mediastatistics-header-office": "Bulego",
+       "mediastatistics-header-text": "Testuala",
+       "mediastatistics-header-executable": "Exekutagarriak",
+       "mediastatistics-header-archive": "Formatu konprimatuak",
        "json-error-syntax": "Sintaxi-errorea",
+       "headline-anchor-title": "Lotura sekzio honetara",
        "special-characters-group-latin": "Latina",
        "special-characters-group-latinextended": "Latin hedatua",
        "special-characters-group-ipa": "NAF",
        "special-characters-group-greek": "Greziera",
        "special-characters-group-cyrillic": "Zirilikoa",
        "special-characters-group-arabic": "Arabiera",
+       "special-characters-group-arabicextended": "Arabiera hedatua",
        "special-characters-group-persian": "Persiera",
        "special-characters-group-hebrew": "Hebreera",
        "special-characters-group-bangla": "Bangla",
        "special-characters-group-telugu": "Telugu",
        "special-characters-group-sinhala": "Sinhala",
        "special-characters-group-gujarati": "Guajarati",
+       "special-characters-group-devanagari": "Devanagari",
        "special-characters-group-thai": "Thaiera",
        "special-characters-group-lao": "Laosera",
        "special-characters-group-khmer": "Khmerrera",
+       "special-characters-title-endash": "en lerroa",
+       "special-characters-title-emdash": "em lerroa",
        "special-characters-title-minus": "minus zeinua",
        "mw-widgets-dateinput-no-date": "Ez duzu datarik aukeratu",
-       "mw-widgets-titleinput-description-redirect": "$1ra birzuzendu"
+       "mw-widgets-titleinput-description-new-page": "orrialde hori oraindik ez da existitzen",
+       "mw-widgets-titleinput-description-redirect": "$1ra birzuzendu",
+       "api-error-blacklisted": "Aukera ezazu, mesedez, izenburu ezberdin eta deskriptiboago bat."
 }
index 3bc0344..78e8d39 100644 (file)
        "missingarticle-rev": "(numéro de version : $1)",
        "missingarticle-diff": "(diff : $1, $2)",
        "readonly_lag": "La base de données a été automatiquement verrouillée pendant que les serveurs secondaires rattrapent leur retard sur le serveur principal.",
+       "nonwrite-api-promise-error": "L’entête HTTP 'Promise-Non-Write-API-Action' a été envoyé mais la requête a été faite à un module d’écriture de l’API.",
        "internalerror": "Erreur interne",
        "internalerror_info": "Erreur interne : $1",
        "internalerror-fatal-exception": "Erreur fatale de type « $1 »",
        "permissionserrors": "Erreur de permissions",
        "permissionserrorstext": "Vous n'avez pas la permission d'effectuer l'opération demandée pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :",
        "permissionserrorstext-withaction": "Vous ne pouvez pas $2, pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :",
+       "contentmodelediterror": "Vous ne pouvez pas modifier cette révision car son modèle de contenu est <code>$1</code>, et le modèle de contenu actuel de la page est <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Attention : vous êtes en train de recréer une page qui a été précédemment supprimée.'''\n\nAssurez-vous qu'il est pertinent de poursuivre les modifications sur cette page. Le journal des suppressions et des déplacements est affiché ci-dessous :",
        "moveddeleted-notice": "Cette page a été supprimée. Le journal des suppressions et des déplacements est affiché ci-dessous pour référence.",
        "moveddeleted-notice-recent": "Désolé, cette page a été récemment supprimée (dans les dernières 24 heures).\nLes journaux des suppressions et des renommages pour la page sont fournis ci-dessous à titre d’information.",
        "showingresultsinrange": "Afficher ci-dessous jusqu’à {{PLURAL:$1|<strong>1</strong> résultat|<strong>$1</strong> résultats}} dans la série #<strong>$2</strong> à #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Résultat <strong>$1</strong> parmi <strong>$3</strong>|Résultats <strong>$1 à $2</strong> parmi <strong>$3</strong>}}",
        "search-nonefound": "Il n'y a aucun résultat correspondant à la requête.",
+       "search-nonefound-thiswiki": "Il n’y a pas de résultats correspondant à la requête sur ce site.",
        "powersearch-legend": "Recherche avancée",
        "powersearch-ns": "Rechercher dans les espaces de noms :",
        "powersearch-togglelabel": "Cocher :",
index 69ad63e..010f0da 100644 (file)
        "foreign-structured-upload-form-label-not-own-work-local-local": "Quizais tamén queira probar [[Special:Upload|a páxina predeterminada de subidas]].",
        "foreign-structured-upload-form-label-own-work-message-default": "Comprendo que estou a cargar este ficheiro nun repositorio compartido. Confirmo que fago isto seguindo os termos de uso e políticas de licenza existentes alí.",
        "foreign-structured-upload-form-label-not-own-work-message-default": "Se non é capaz de cargar este ficheiro baixo as políticas do repositorio compartido, por favor peche este diálogo e intente outro método.",
-       "foreign-structured-upload-form-label-not-own-work-local-default": "Tamén pode interesarlle usar [[Especial:Upload|a páxina de carga en {{SITENAME}}]], se este ficheiro pode ser cargado alí baixo as súas políticas.",
+       "foreign-structured-upload-form-label-not-own-work-local-default": "Tamén pode interesarlle usar [[Special:Upload|a páxina de carga en {{SITENAME}}]], se este ficheiro pode ser cargado alí baixo as súas políticas.",
        "backend-fail-stream": "Non se puido transmitir o ficheiro \"$1\".",
        "backend-fail-backup": "Non se puido facer unha copia de seguridade do ficheiro \"$1\".",
        "backend-fail-notexists": "O ficheiro \"$1\" non existe.",
index dc72199..473112a 100644 (file)
        "action-browsearchive": "削除されたページの検索",
        "action-undelete": "このページの復元",
        "action-suppressrevision": "隠された版の確認と復元",
-       "action-suppressionlog": "この非公開記録の閲覧",
+       "action-suppressionlog": "非公開記録の閲覧",
        "action-block": "この利用者の編集ブロック",
        "action-protect": "このページの保護レベルの変更",
        "action-rollback": "特定ページを最後に編集した利用者の編集の即時巻き戻し",
index f5d4d17..fcc7501 100644 (file)
        "mar": "Mar",
        "apr": "Abr",
        "may": "May",
-       "jun": "Juñ",
+       "jun": "Jun",
        "jul": "Jul",
        "aug": "Ago",
        "sep": "Set",
index eaba292..cb6c27b 100644 (file)
        "allpagesbadtitle": "दिलेले शीर्षक चुकीचे किंवा आंतरभाषीय किंवा आंतरविकि शब्दाने सुरू होणारे होते. त्यात एक किंवा अधिक शीर्षकात न वापरता येणारी अक्षरे असावीत.",
        "allpages-bad-ns": "{{SITENAME}}मध्ये \"$1\" हे नामविश्व नाही.",
        "allpages-hide-redirects": "पुनर्निर्देशने लपवा",
-       "cachedspecial-viewing-cached-ttl": "तà¥\81मà¥\8dहà¥\80 à¤¯à¤¾ à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\80 à¤\95à¥\85à¤\9aडà¥\8d à¤\86वà¥\83तà¥\8dतà¥\80 à¤ªà¤¹à¤¾à¤¤ à¤\86हात. à¤ªà¤¾à¤¹à¤¤ à¤\86हात à¤¯à¤¾ à¤ªà¤¾à¤ à¤¯à¤¾ à¤\9aà¥\80 à¤\9bà¥\8bà¤\9fà¥\80  à¤\86वà¥\83तà¥\8dतà¥\80,à¤\9cà¥\80 $1 à¤\88तà¤\95à¥\80 à¤\9cà¥\81नी असू शकते.",
-       "cachedspecial-viewing-cached-ts": "तà¥\81मà¥\8dहà¥\80 à¤¯à¤¾ à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\80 à¤\95à¥\85à¤\9aडà¥\8d à¤\86वà¥\83तà¥\8dतà¥\80 à¤ªà¤¹à¤¾à¤¤ à¤\86हात. à¤ªà¤¾à¤¹à¤¤ à¤\86हात à¤¯à¤¾ à¤ªà¤¾à¤ à¤¯à¤¾ à¤\9aà¥\80 à¤\9bà¥\8bà¤\9fà¥\80  à¤\86वà¥\83तà¥\8dतà¥\80,à¤\9cà¥\80 à¤ªà¥\81रà¥\8dणतà¤\83 à¤®à¥\81ळ आवृत्ती नसू शकते.",
+       "cachedspecial-viewing-cached-ttl": "तà¥\81मà¥\8dहà¥\80 à¤¯à¤¾ à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\80 à¤\95à¥\85शà¥\87मधà¥\80ल à¤\86वà¥\83तà¥\8dतà¥\80 à¤ªà¤¹à¤¾à¤¤ à¤\86हात à¤\9cà¥\80, $1 à¤\88तà¤\95à¥\80 à¤\9cà¥\82नी असू शकते.",
+       "cachedspecial-viewing-cached-ts": "तà¥\81मà¥\8dहà¥\80 à¤¯à¤¾ à¤ªà¤¾à¤¨à¤¾à¤\9aà¥\80 à¤\95à¥\85शà¥\87तà¥\80ल à¤\86वà¥\83तà¥\8dतà¥\80 à¤ªà¤¹à¤¾à¤¤ à¤\86हात à¤\9cà¥\80, à¤ªà¥\81रà¥\8dणतà¤\83 à¤®à¥\82ळ आवृत्ती नसू शकते.",
        "cachedspecial-refresh-now": "नुकतेच केलेले दाखवा.",
        "categories": "वर्ग",
        "categoriespagetext": "विकिवर खालील वर्ग {{PLURAL:$1|आहे|आहेत}}.\n[[Special:UnusedCategories|न वापरलेले वर्ग]] येथे दाखवलेले नाहीत.\nहेही पहा: [[Special:WantedCategories|पाहिजे असलेले वर्ग]].",
index 2b1ba0e..88ab689 100644 (file)
        "yourname": "کارن-نوم:",
        "userlogin-yourname": "کارن-نوم",
        "userlogin-yourname-ph": "کارن-نوم مو وليکئ",
-       "createacct-another-username-ph": "كارن نوم مو وركړۍ",
+       "createacct-another-username-ph": "كارن نوم مو وركړئ",
        "yourpassword": "پټنوم:",
        "userlogin-yourpassword": "پټنوم",
        "userlogin-yourpassword-ph": "پټنوم مو وليکئ",
        "createacct-emailrequired": "برېښليک پته",
        "createacct-emailoptional": "برېښليک پته (اختياري)",
        "createacct-email-ph": "برېښليک پته مو وټاپئ",
-       "createacct-another-email-ph": "برېښليک پته مو ورکړۍ",
+       "createacct-another-email-ph": "برېښليک پته مو ورکړئ",
        "createaccountmail": "يو لنډمهاله ناټاکلی پټنوم کارول او ځانگړې شوې برېښليک پتې ته ورلېږل",
        "createacct-realname": "آر نوم (اختياري)",
        "createaccountreason": "سبب:",
index 6b83c4b..5ebe6f2 100644 (file)
        "badsiglength": "A sua assinatura é muito longa.\nEla deve ter menos de $1 {{PLURAL:$1|caractere|caracteres}}.",
        "yourgender": "Como você prefere ser descrito(a)?",
        "gender-unknown": "Ao mencionar você, o software usará palavras do gênero neutro sempre que possível",
-       "gender-male": "Ele edita páginas wiki",
-       "gender-female": "Ela edita páginas wiki",
+       "gender-male": "Ele é um usuário",
+       "gender-female": "Ela é uma usuária",
        "prefs-help-gender": "A configuração desta preferência é opcional.\nO software utiliza seu valor para tratá-lo(a) e mencioná-lo(a) a outros usando o gênero gramatical adequado.\nEsta informação será pública.",
        "email": "E-mail",
        "prefs-help-realname": "O fornecimento de seu nome verdadeiro é opcional.\nCaso decida fornecê-lo, este será utilizado para dar-lhe crédito pelo seu trabalho.",
index 86eae05..eaa7568 100644 (file)
        "badsiglength": "A sua assinatura é demasiado longa.\nNão deverá conter mais de $1 {{PLURAL:$1|carácter|caracteres}}.",
        "yourgender": "Como prefere ser descrito?",
        "gender-unknown": "Ao mencioná-lo, o software irá utilizar palavras de género neutro sempre que possível",
-       "gender-male": "Ele edita páginas wiki",
-       "gender-female": "Ela edita páginas wiki",
+       "gender-male": "Ele é um utilizador",
+       "gender-female": "Ela é uma utilizadora",
        "prefs-help-gender": "Esta preferência é opcional.\nO software usa o seu valor para o endereçar e para o mencionar a outros usando o género gramatical apropriado.\nEsta informação será pública.",
        "email": "Correio eletrónico",
        "prefs-help-realname": "O fornecimento do nome verdadeiro é opcional.\nSe optar por revelá-lo, será utilizado para atribuir-lhe crédito pelo seu trabalho.",
index f79efe1..685422f 100644 (file)
        "next-page": "Следующая страница",
        "prevn-title": "{{PLURAL:$1|Предыдущая $1 запись|Предыдущие $1 записи|Предыдущие $1 записей}}",
        "nextn-title": "{{PLURAL:$1|Следующая $1 запись|Следующие $1 записи|Следующие $1 записей}}",
-       "shown-title": "Ð\9fоказÑ\8bваÑ\82Ñ\8c $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81ей|запиÑ\81и}} на странице",
+       "shown-title": "Ð\9fоказÑ\8bваÑ\82Ñ\8c $1 {{PLURAL:$1|запиÑ\81Ñ\8c|запиÑ\81и|запиÑ\81ей}} на странице",
        "viewprevnext": "Просмотреть ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''В этой вики есть страница «[[:$1]]»'''",
        "searchmenu-new": "<strong>Создать страницу «[[:$1]]» в этом вики-проекте!</strong>\n{{PLURAL:$2|0=|См. также страницу, найденную по результатами вашего поиска.|См. также найденные результаты поиска.}}",
        "tags-apply-not-allowed-multi": "{{PLURAL:$2|Следующая метка не может быть применена|Следующие метки не могут быть применены}} вручную: $1",
        "tags-update-no-permission": "У вас нет права на добавление или изменение меток изменения из отдельных версий или записей журналов.",
        "tags-update-add-not-allowed-one": "Тег \"$1\" не может быть добавлен вручную.",
-       "tags-update-add-not-allowed-multi": "Следующее {{PLURAL:$2|tag is|tags are}} не может быть добавлено вручную: $1",
+       "tags-update-add-not-allowed-multi": "{{PLURAL:$2|Следующий тег|Следующие теги}} нельзя добавлять вручную: $1",
        "tags-update-remove-not-allowed-one": "Метка «$1» не может быть удалена.",
        "tags-update-remove-not-allowed-multi": "{{PLURAL:$2|Следующая метка не может быть удалена|Следующие метки не могут быть удалены}} вручную: $1",
        "tags-edit-title": "Редактировать теги",
index 5b4393f..6dca4f7 100644 (file)
        "missingarticle-rev": "(redakcija št.: $1)",
        "missingarticle-diff": "(Primerjanje: $1, $2)",
        "readonly_lag": "Podatkovna zbirka se je samodejno zaklenila, dokler se podrejeni strežniki ne uskladijo z glavnim.",
+       "nonwrite-api-promise-error": "Prejeli smo glavo HTTP 'Promise-Non-Write-API-Action', vendar zahteva je bila poslana na modul API za zapisovanje.",
        "internalerror": "Notranja napaka",
        "internalerror_info": "Notranja napaka: $1",
        "internalerror-fatal-exception": "Usodna izjema vrste »$1«",
index 8b8ab4e..906f616 100644 (file)
        "nstab-template": "வார்ப்புரு",
        "nstab-help": "உதவிப் பக்கம்",
        "nstab-category": "பகுப்பு",
+       "mainpage-nstab": "முதற் பக்கம்",
        "nosuchaction": "அவ்வித செயற்பாடுகள் எதுவுமில்லை",
        "nosuchactiontext": "யூ.ஆர்.எல். குறித்த செயற்பாடு விக்கி மென்பொருளினால் அடையாளம் காணப்படவில்லை",
        "nosuchspecialpage": "அவ்வாறான சிறப்புப் பக்கங்கள் எதுவுமில்லை",
        "createaccountreason": "காரணம்:",
        "createacct-reason": "காரணம்",
        "createacct-reason-ph": "தாங்கள் ஏன் மற்றொரு கணக்கைத் துவங்குகிறீர்கள்?",
-       "createacct-captcha": "பாதுகாப்பு சோதனை",
-       "createacct-imgcaptcha-ph": "மேலே காணும் சொற்களை உள்ளிடுக",
        "createacct-submit": "உங்கள் கணக்கை உருவாக்குக",
        "createacct-another-submit": "கணக்கை உருவாக்கவும்",
        "createacct-benefit-heading": "{{SITENAME}} தங்களைப் போன்றோர்களால் உருவாக்கப்பட்டது",
index a4e66ca..ae05930 100644 (file)
@@ -72,19 +72,6 @@ class CleanupRemovedModules extends Maintenance {
                        wfWaitForSlaves();
                } while ( $numRows > 0 );
                $this->output( "done\n" );
-
-               $this->output( "Cleaning up msg_resource_links table...\n" );
-               $i = 1;
-               $msgResLinks = $dbw->tableName( 'msg_resource_links' );
-               do {
-                       $where = $moduleList ? "mrl_resource NOT IN ($moduleList)" : '1=1';
-                       $dbw->query( "DELETE FROM $msgResLinks WHERE $where LIMIT $limit", __METHOD__ );
-                       $numRows = $dbw->affectedRows();
-                       $this->output( "Batch $i: $numRows rows\n" );
-                       $i++;
-                       wfWaitForSlaves();
-               } while ( $numRows > 0 );
-               $this->output( "done\n" );
        }
 }
 
index dd6c2ed..bebda10 100644 (file)
                        }
                }
 
-               // Disable the button to save preferences unless preferences have changed
-               $( '#prefcontrol' ).prop( 'disabled', true );
-               $( '#preferences > fieldset' ).one( 'change keydown mousedown', function () {
-                       $( '#prefcontrol' ).prop( 'disabled', false );
-               } );
-
                // Enable keyboard users to use left and right keys to switch tabs
                $preftoc.on( 'keydown', function ( event ) {
                        var keyLeft = 37,