Merge "Before pseudo elements are not always perfectly in line"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 3 Dec 2014 21:30:34 +0000 (21:30 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 3 Dec 2014 21:30:34 +0000 (21:30 +0000)
42 files changed:
RELEASE-NOTES-1.25
docs/hooks.txt
docs/scripts.txt
includes/DefaultSettings.php
includes/OutputPage.php
includes/Title.php
includes/api/ApiMain.php
includes/api/i18n/fr.json
includes/api/i18n/he.json
includes/api/i18n/sv.json
includes/api/i18n/zh-hans.json
includes/content/ContentHandler.php
includes/db/Database.php
includes/installer/DatabaseUpdater.php
includes/installer/MysqlUpdater.php
includes/installer/SqliteUpdater.php
includes/installer/i18n/ksh.json
includes/profiler/output/ProfilerOutputDb.php
includes/profiler/output/ProfilerOutputUdp.php
languages/i18n/diq.json
languages/i18n/fr.json
languages/i18n/hr.json
languages/i18n/hy.json
languages/i18n/ksh.json
languages/i18n/ml.json
languages/i18n/pms.json
languages/i18n/sv.json
languages/i18n/ur.json
languages/i18n/zh-hant.json
maintenance/removeInvalidEmails.php [new file with mode: 0644]
profileinfo.php
resources/lib/oojs-ui/i18n/ca.json
resources/lib/oojs-ui/i18n/hr.json
resources/lib/oojs-ui/oojs-ui-apex.css
resources/lib/oojs-ui/oojs-ui-apex.js
resources/lib/oojs-ui/oojs-ui-apex.svg.css
resources/lib/oojs-ui/oojs-ui-mediawiki.css
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui-mediawiki.svg.css
resources/lib/oojs-ui/oojs-ui.js
tests/phpunit/includes/content/JsonContentTest.php
tests/phpunit/includes/db/DatabaseSqliteTest.php

index 92e0a2c..2b347b9 100644 (file)
@@ -250,6 +250,22 @@ changes to languages because of Bugzilla reports.
   fail for custom tokens registered only via the deprecated ApiTokensGetTokenTypes
   hook. The ApiQueryTokensRegisterTypes hook should be used for this to work.
 * Added wgRelevantArticleId to the client-side config, for use on special pages.
+* Deprecated the TitleIsCssOrJsPage hook. Superseded by the
+  ContentHandlerDefaultModelFor hook since MediaWiki 1.21.
+* Deprecated the TitleIsWikitextPage hook. Superseded by the
+  ContentHandlerDefaultModelFor hook since MediaWiki 1.21.
+* Changed parsing of variables in schema (.sql) files:
+** The substituted values are no longer parsed. (Formerly, several passes
+   were made for each variable, so depending on the order in which variables
+   were defined, variables might have been found inside encoded values. This
+   is no longer the case.)
+** Variables are no longer string encoded when the /*$var*/ syntax is used.
+   If string encoding is necessary, use the '{$var}' syntax instead.
+** Variable names must only consist of one or more of the characters
+   "A-Za-z0-9_".
+** In source text of the form '{$A}'{$B}' or `{$A}`{$B}`, where variable A
+   does not exist yet variable B does, the latter may not be replaced.
+   However, this difference is unlikely to arise in practice.
 
 == Compatibility ==
 
index a4e02c6..062a0c8 100644 (file)
@@ -2692,7 +2692,8 @@ that can be applied.
 $title: The title in question.
 &$types: The types of protection available.
 
-'TitleIsCssOrJsPage': Called when determining if a page is a CSS or JS page.
+'TitleIsCssOrJsPage': DEPRECATED! Use ContentHandlerDefaultModelFor instead.
+Called when determining if a page is a CSS or JS page.
 $title: Title object that is being checked
 $result: Boolean; whether MediaWiki currently thinks this is a CSS/JS page.
   Hooks may change this value to override the return value of
@@ -2713,7 +2714,8 @@ $result: Boolean; whether MediaWiki currently thinks this page is movable.
   Hooks may change this value to override the return value of
   Title::isMovable().
 
-'TitleIsWikitextPage': Called when determining if a page is a wikitext or should
+'TitleIsWikitextPage': DEPRECATED! Use ContentHandlerDefaultModelFor instead.
+Called when determining if a page is a wikitext or should
 be handled by separate handler (via ArticleViewCustom).
 $title: Title object that is being checked
 $result: Boolean; whether MediaWiki currently thinks this is a wikitext page.
index c6fa674..178bb15 100644 (file)
@@ -34,7 +34,7 @@ Primary scripts:
     To save the profiling information in the database (required to use this
     script), you have to modify StartProfiler.php to use the Profiler class and
     not the stub profiler which is enabled by default.
-    You will also need to set $wgProfileToDatabase to true in LocalSettings.php
+    You will also need to set $wgProfiler['output'] to 'db' in LocalSettings.php
     to force the profiler to save the informations in the database and apply the
     maintenance/archives/patch-profiling.sql patch to the database.
 
index 7523193..ca41088 100644 (file)
@@ -5378,8 +5378,10 @@ $wgProfileCallTree = false;
 
 /**
  * Should application server host be put into profiling table
+ *
+ * @deprecated set $wgProfiler['perhost'] = true instead
  */
-$wgProfilePerHost = false;
+$wgProfilePerHost = null;
 
 /**
  * Host for UDP profiler.
@@ -5387,14 +5389,18 @@ $wgProfilePerHost = false;
  * The host should be running a daemon which can be obtained from MediaWiki
  * Git at:
  * http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile
+ *
+ * @deprecated set $wgProfiler['udphost'] instead
  */
-$wgUDPProfilerHost = '127.0.0.1';
+$wgUDPProfilerHost = null;
 
 /**
  * Port for UDP profiler.
  * @see $wgUDPProfilerHost
+ *
+ * @deprecated set $wgProfiler['udpport'] instead
  */
-$wgUDPProfilerPort = '3811';
+$wgUDPProfilerPort = null;
 
 /**
  * Format string for the UDP profiler. The UDP profiler invokes sprintf() with
@@ -5404,8 +5410,10 @@ $wgUDPProfilerPort = '3811';
  *
  * @see $wgStatsFormatString
  * @since 1.22
+ *
+ * @deprecated set $wgProfiler['udpformat'] instead
  */
-$wgUDPProfilerFormatString = "%s - %d %f %f %f %f %s\n";
+$wgUDPProfilerFormatString = null;
 
 /**
  * Output debug message on every wfProfileIn/wfProfileOut
index 2936ca3..fb2d6f4 100644 (file)
@@ -366,6 +366,16 @@ class OutputPage extends ContextSource {
                array_push( $this->mMetatags, array( $name, $val ) );
        }
 
+       /**
+        * Returns the current <meta> tags
+        *
+        * @since 1.25
+        * @return array
+        */
+       public function getMetaTags() {
+               return $this->mMetatags;
+       }
+
        /**
         * Add a new \<link\> tag to the page header.
         *
@@ -377,6 +387,16 @@ class OutputPage extends ContextSource {
                array_push( $this->mLinktags, $linkarr );
        }
 
+       /**
+        * Returns the current <link> tags
+        *
+        * @since 1.25
+        * @return array
+        */
+       public function getLinkTags() {
+               return $this->mLinktags;
+       }
+
        /**
         * Add a new \<link\> with "rel" attribute set to "meta"
         *
@@ -398,6 +418,17 @@ class OutputPage extends ContextSource {
                $this->mCanonicalUrl = $url;
        }
 
+       /**
+        * Returns the URL to be used for the <link rel=canonical> if
+        * one is set.
+        *
+        * @since 1.25
+        * @return bool|string
+        */
+       public function getCanonicalUrl() {
+               return $this->mCanonicalUrl;
+       }
+
        /**
         * Get the value of the "rel" attribute for metadata links
         *
index f913859..638da08 100644 (file)
@@ -1250,9 +1250,9 @@ class Title {
 
                # @note This hook is also called in ContentHandler::getDefaultModel.
                #   It's called here again to make sure hook functions can force this
-               #   method to return true even outside the mediawiki namespace.
+               #   method to return true even outside the MediaWiki namespace.
 
-               wfRunHooks( 'TitleIsCssOrJsPage', array( $this, &$isCssOrJsPage ) );
+               wfRunHooks( 'TitleIsCssOrJsPage', array( $this, &$isCssOrJsPage ), '1.25' );
 
                return $isCssOrJsPage;
        }
index 004bfae..7600066 100644 (file)
@@ -526,6 +526,7 @@ class ApiMain extends ApiBase {
                if ( $matchOrigin ) {
                        $response->header( "Access-Control-Allow-Origin: $originParam" );
                        $response->header( 'Access-Control-Allow-Credentials: true' );
+                       $response->header( 'Access-Control-Allow-Headers: Api-User-Agent' );
                        $this->getOutput()->addVaryHeader( 'Origin' );
                }
 
index 59f2def..450a5db 100644 (file)
        "apihelp-expandtemplates-description": "Développe tous les modèles en wikitexte.",
        "apihelp-expandtemplates-param-title": "Titre de la page.",
        "apihelp-expandtemplates-param-text": "Wikitexte à convertir.",
+       "apihelp-expandtemplates-param-revid": "ID de révision, pour <nowiki>{{REVISIONID}}</nowiki> et les variables semblables.",
        "apihelp-expandtemplates-param-prop": "Quelles informations récupérer :\n;wikitext:Le wikitexte développé.\n;categories:Toutes les catégories présentes dans l’entrée qui ne sont pas représentées dans le wikitexte de sortie.\n;volatile:Si la sortie est volatile et ne devrait pas être réutilisée ailleurs dans la page.\n;ttl:Le délai maximal après lequel les caches du résultat devraient être invalidés.\n;parsetree:L’arbre d’analyse XML de l’entrée.\nNoter que si aucune valeur n’est sélectionnée, le résultat contiendra le wikitexte, mais la sortie sera dans un format obsolète.",
        "apihelp-expandtemplates-param-includecomments": "S’il faut inclure les commentaires HTML dans la sortie.",
        "apihelp-expandtemplates-param-generatexml": "Générer l’arbre d’analyse XML (remplacé par $1prop=parsetree).",
        "apihelp-opensearch-param-limit": "Nombre maximal de résultats à renvoyer.",
        "apihelp-opensearch-param-namespace": "Espaces de nom à rechercher.",
        "apihelp-opensearch-param-suggest": "Ne rien faire si [https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest] vaut faux.",
+       "apihelp-opensearch-param-redirects": "Comment gérer les redirections :\n;return:Renvoie la redirection elle-même.\n;resolve:Renvoie la page cible. Peut renvoyer moins de $1limit résultats.\nPour des raisons historiques, la valeur par défaut est « return » pour $1format=json et « resolve » pour les autres formats.",
        "apihelp-opensearch-param-format": "Le format de sortie.",
        "apihelp-opensearch-example-te": "Trouver les pages commençant par « Te »",
        "apihelp-options-description": "Modifier les préférences de l’utilisateur courant.\n\nSeules les options enregistrées dans le cœur ou dans l’une des extensions installées, ou les options avec une clé préfixée par « userjs- » (devant être utilisées dans les scripts utilisateur), peuvent être définies.",
        "apihelp-query+prefixsearch-param-search": "Chaîne de recherche.",
        "apihelp-query+prefixsearch-param-namespace": "Espaces de nom à rechercher.",
        "apihelp-query+prefixsearch-param-limit": "Nombre maximal de résultats à renvoyer.",
+       "apihelp-query+prefixsearch-param-offset": "Nombre de résultats à sauter.",
        "apihelp-query+prefixsearch-example-simple": "Rechercher les titres de page commençant par « meaning »",
        "apihelp-query+protectedtitles-description": "Lister tous les titres protégés en création.",
        "apihelp-query+protectedtitles-param-namespace": "Lister uniquement les titres dans ces espaces de nom.",
        "apihelp-query+stashimageinfo-example-params": "Renvoie les vignettes pour deux fichiers mis en réserve",
        "apihelp-query+tags-description": "Lister les balises de modification.",
        "apihelp-query+tags-param-limit": "Le nombre maximal de balises à lister.",
-       "apihelp-query+tags-param-prop": "Quelles propriétés récupérer :\n;name:Ajoute le nom de la balise.\n;displayname:Ajoute le message système pour la balise.\n;description:Ajoute la description de la balise.\n;hitcount:Ajoute le nombre de révisions qui ont cette balise.",
+       "apihelp-query+tags-param-prop": "Quelles propriétés récupérer :\n;name:Ajoute le nom de la balise.\n;displayname:Ajoute le message système pour la balise.\n;description:Ajoute la description de la balise.\n;hitcount:Ajoute le nombre de révisions qui ont cette balise.\n;defined:Indique si la balise est définie.",
        "apihelp-query+tags-example-simple": "Lister les balises disponibles",
        "apihelp-query+templates-description": "Renvoie toutes les pages incluses dans les pages fournies.",
        "apihelp-query+templates-param-namespace": "Afficher les modèles uniquement dans ces espaces de nom.",
        "apihelp-query+userinfo-example-data": "Obtenir des informations supplémentaires sur l’utilisateur actuel",
        "apihelp-query+users-description": "Obtenir des information sur une liste d’utilisateurs",
        "apihelp-query+users-param-prop": "Quelles informations inclure :\n;blockinfo:Marque si l’utilisateur est bloqué, par qui, et pour quelle raison.\n;groups:Liste tous les groupes auquel appartient chaque utilisateur.\n;implicitgroups:Liste tous les groupes dont un utilisateur est automatiquement membre.\n;rights:Liste tous les droits qu’a un utilisateur.\n;editcount:Ajoute le compteur de modifications de l’utilisateur.\n;registration:Ajoute l’horodatage d’inscription de l’utilisateur.\n;emailable:Marque si l’utilisateur peut et veut recevoir des courriels via [[Special:Emailuser]].\n;gender:Marque le sexe de l’utilisateur. Renvoie « male », « female », ou « unknown ».",
+       "apihelp-query+users-param-users": "Une liste des utilisateurs sur lesquels obtenir de l’information.",
+       "apihelp-query+users-param-token": "Utiliser plutôt [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+       "apihelp-query+users-example-simple": "Renvoyer des informations pour [[User:Exemple]]",
+       "apihelp-query+watchlist-description": "Obtenir les modifications récentes des pages dans la liste de suivi de l’utilisateur connecté.",
+       "apihelp-query+watchlist-param-allrev": "Inclure les multiples révisions de la même page dans l’intervalle de temps fourni.",
+       "apihelp-query+watchlist-param-start": "L’horodatage auquel démarrer l’énumération.",
+       "apihelp-query+watchlist-param-end": "L’horodatage auquel arrêter l’énumération.",
+       "apihelp-query+watchlist-param-namespace": "Filtrer les modifications aux seuls espaces de nom fournis.",
+       "apihelp-query+watchlist-param-user": "Lister uniquement les modifications par cet utilisateur.",
+       "apihelp-query+watchlist-param-excludeuser": "Ne pas lister les modifications faites par cet utilisateur.",
+       "apihelp-query+watchlist-param-limit": "Combien de résultats au total renvoyer par demande.",
+       "apihelp-query+watchlist-param-prop": "Quels éléments supplémentaires obtenir :\n;ids:Ajoute les IDs de révision et de page.\n;title:Ajoute le titre de la page.\n;flags:Ajoute les marques de la modification.\n;user:Ajoute l’utilisateur ayant fait la modification.\n;userid:Ajoute l’ID de l’utilisateur ayant fait la modification.\n;comment:Ajoute le commentaire de la modification.\n;parsedcomment:Ajoute le commentaire analysé de la modification.\n;timestamp:Ajoute l’horodatage de la modification.\n;patrol:Marque les modifications patrouillées.\n;sizes:Ajoute les ancienne et nouvelle tailles de la page.\n;notificationtimestamp:Ajoute l’horodatage de quand l’utilisateur a été notifié de la modification la dernière fois.\n;loginfo:Ajoute l’information du journal quand c’est approprié.",
+       "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 de page normale.\n;external:Modifications externes.\n;new:Créations de page.\n;log:Entrées du journal.",
+       "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",
+       "apihelp-query+watchlist-example-props": "Chercher des informations supplémentaires sur la révision de tête des pages récemment modifiées de la liste de suivi de l’utilisateur actuel",
+       "apihelp-query+watchlist-example-allrev": "Chercher les informations sur toutes les modifications récentes des pages de la liste de suivi de l’utilisateur actuel",
+       "apihelp-query+watchlist-example-generator": "Chercher l’information de la page sur les pages récemment modifiées de la liste de suivi de l’utilisateur actuel",
+       "apihelp-query+watchlist-example-generator-rev": "Chercher l’information de la révision pour les modifications récentes des pages de la liste de suivi de l’utilisateur actuel",
+       "apihelp-query+watchlist-example-wlowner": "Lister la révision de tête des pages récemment modifiées de la liste de suivi de [[User:Exemple]]",
+       "apihelp-query+watchlistraw-description": "Obtenir toutes les pages de la liste de suivi de l’utilisateur connecté.",
+       "apihelp-query+watchlistraw-param-namespace": "Lister uniquement les pages dans les espaces de nom fournis.",
+       "apihelp-query+watchlistraw-param-limit": "Combien de résultats renvoyer au total par requête.",
+       "apihelp-query+watchlistraw-param-prop": "Quelles propriétés supplémentaires obtenir :\n;changed:Ajoute l’horodatage de la dernière notification de l’utilisateur à propos de la modification.",
+       "apihelp-query+watchlistraw-param-show": "Lister uniquement les éléments correspondant à ces critères.",
+       "apihelp-query+watchlistraw-param-owner": "Utilisé avec $1token pour accéder à la liste de suivi d’un autre utilisateur.",
+       "apihelp-query+watchlistraw-param-token": "Un jeton de sécurité (disponible dans les [[Special:Preferences#mw-prefsection-watchlist|préférences]] de l’utilisateur) pour permettre l’accès à la liste de suivi d’un autre utilisateur.",
        "apihelp-format-example-generic": "Mettre en forme le résultat de la requête dans le format $1",
        "apihelp-dbg-description": "Extraire les données au format de var_export() de PHP.",
        "apihelp-dbgfm-description": "Extraire les données au format de var_export() de PHP (affiché proprement en HTML).",
index 5055e05..2774af3 100644 (file)
@@ -20,6 +20,7 @@
        "apihelp-help-description": "הצגת עזרה עבור היחידות שצוינו.",
        "apihelp-help-param-toc": "לכלול תוכן עניינים בפלט HTML.",
        "apihelp-query+categories-param-limit": "כמה קטגוריות להחזיר.",
+       "apihelp-query+prefixsearch-param-offset": "מספר תוצאות לדילוג.",
        "apihelp-query+tokens-example-types": "אחזור אסימון של רשימת המעקב ואסימון של ניטור",
        "apihelp-xml-param-xslt": "אם צוין, מוסיף &lt;xslt&gt; כגליון סגנונות. זה צריך להיות דף ויקי במרחב השם מדיה ויקי ששמו מסתיים ב\".xsl\".",
        "api-format-title": "תוצאה של API של מדיה־ויקי",
index 5d3c18e..1475a84 100644 (file)
@@ -4,7 +4,8 @@
                        "Jopparn",
                        "Lokal Profil",
                        "WikiPhoenix",
-                       "Victorsa"
+                       "Victorsa",
+                       "Albinomamba"
                ]
        },
        "apihelp-main-param-action": "Vilken åtgärd som ska utföras.",
@@ -34,6 +35,7 @@
        "apihelp-createaccount-param-realname": "Användarens riktiga namn (valfritt).",
        "apihelp-createaccount-example-pass": "Skapa användaren \"testuser\" med lösenordet \"test123\"",
        "apihelp-delete-description": "Radera en sida.",
+       "apihelp-delete-param-reason": "Orsak till radering. Om orsak inte ges kommer en orsak att automatiskt genereras och användas.",
        "apihelp-delete-param-watch": "Lägg till sidan i din bevakningslista.",
        "apihelp-delete-param-unwatch": "Ta bort sidan från din bevakningslista.",
        "apihelp-delete-example-simple": "Radera huvudsidan",
index 0f954cd..b0c3e4f 100644 (file)
        "apihelp-query+alldeletedrevisions-param-to": "列出至此标题为止。",
        "apihelp-query+alldeletedrevisions-param-namespace": "只列出此名字空间的页面。",
        "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "'''注意:'''由于[https://www.mediawiki.org/wiki/Manual:$wgMiserMode miser模式],同时使用$1user和$1namespace将导致继续前返回少于“$1limit”个结果,在极端条件下可能不返回任何结果。",
+       "apihelp-query+alldeletedrevisions-example-user": "列出由User:Example作出的最近50次已删除贡献",
+       "apihelp-query+alldeletedrevisions-example-ns-main": "列出最近50次已删除的主名字空间修订",
        "apihelp-query+allfileusages-param-dir": "罗列所采用的方向。",
        "apihelp-query+allfileusages-example-unique": "列出唯一性的文件标题",
        "apihelp-query+allfileusages-example-unique-generator": "获取所有文件标题,并标记出缺失者",
        "apihelp-query+langbacklinks-example-generator": "获取链接至[[:fr:Test]]的页面的信息",
        "apihelp-query+langlinks-param-limit": "返回多少语言链接。",
        "apihelp-query+langlinks-param-url": "是否获取完整URL(不能与$1prop一起使用)。",
+       "apihelp-query+langlinks-param-title": "要搜索的链接。必须与$1lang一起使用。",
        "apihelp-query+langlinks-param-inlanguagecode": "本地化语言名称的语言代码。",
        "apihelp-query+langlinks-example-simple": "从[[首页]]获取跨语言链接",
        "apihelp-query+links-param-limit": "返回多少链接。",
        "apihelp-query+pageswithprop-example-generator": "获取有关前10个使用_&#95;NOTOC_&#95;的页面的信息",
        "apihelp-query+prefixsearch-param-search": "搜索字符串。",
        "apihelp-query+prefixsearch-param-namespace": "搜索的名字空间。",
+       "apihelp-query+prefixsearch-param-offset": "跳过的结果数。",
        "apihelp-query+protectedtitles-param-namespace": "只列出这些名字空间的标题。",
        "apihelp-query+protectedtitles-param-limit": "返回的总计页面数。",
        "apihelp-query+protectedtitles-example-simple": "受保护标题列表",
        "apihelp-userrights-param-reason": "更改原因。",
        "apihelp-userrights-example-user": "将用户FooBot添加至“机器人”用户组,并从“管理员”和“行政员”组移除",
        "apihelp-userrights-example-userid": "将ID为123的用户加入至“机器人”组,并将其从“管理员”和“行政员”组移除",
+       "apihelp-watch-param-title": "要(取消)监视的页面。也可使用$1titles。",
        "apihelp-watch-example-watch": "监视页面“首页”",
        "apihelp-watch-example-unwatch": "取消监视页面“首页”",
        "apihelp-dbg-description": "输出数据为PHP的var_export()格式。",
index ac41722..9aa42dd 100644 (file)
@@ -214,7 +214,7 @@ abstract class ContentHandler {
                }
 
                // Hook can force JS/CSS
-               wfRunHooks( 'TitleIsCssOrJsPage', array( $title, &$isCssOrJsPage ) );
+               wfRunHooks( 'TitleIsCssOrJsPage', array( $title, &$isCssOrJsPage ), '1.25' );
 
                // Is this a .css subpage of a user page?
                $isJsCssSubpage = NS_USER == $ns
@@ -229,7 +229,7 @@ abstract class ContentHandler {
                $isWikitext = $isWikitext && !$isCssOrJsPage && !$isJsCssSubpage;
 
                // Hook can override $isWikitext
-               wfRunHooks( 'TitleIsWikitextPage', array( $title, &$isWikitext ) );
+               wfRunHooks( 'TitleIsWikitextPage', array( $title, &$isWikitext ), '1.25' );
 
                if ( !$isWikitext ) {
                        switch ( $ext ) {
index fc13eeb..1124617 100644 (file)
@@ -3907,47 +3907,49 @@ abstract class DatabaseBase implements IDatabase {
         *
         * - '{$var}' should be used for text and is passed through the database's
         *   addQuotes method.
-        * - `{$var}` should be used for identifiers (eg: table and database names),
-        *   it is passed through the database's addIdentifierQuotes method which
+        * - `{$var}` should be used for identifiers (e.g. table and database names).
+        *   It is passed through the database's addIdentifierQuotes method which
         *   can be overridden if the database uses something other than backticks.
-        * - / *$var* / is just encoded, besides traditional table prefix and
-        *   table options its use should be avoided.
+        * - / *_* / or / *$wgDBprefix* / passes the name that follows through the
+        *   database's tableName method.
+        * - / *i* / passes the name that follows through the database's indexName method.
+        * - In all other cases, / *$var* / is left unencoded. Except for table options,
+        *   its use should be avoided. In 1.24 and older, string encoding was applied.
         *
         * @param string $ins SQL statement to replace variables in
         * @return string The new SQL statement with variables replaced
         */
-       protected function replaceSchemaVars( $ins ) {
-               $vars = $this->getSchemaVars();
-               foreach ( $vars as $var => $value ) {
-                       // replace '{$var}'
-                       $ins = str_replace( '\'{$' . $var . '}\'', $this->addQuotes( $value ), $ins );
-                       // replace `{$var}`
-                       $ins = str_replace( '`{$' . $var . '}`', $this->addIdentifierQuotes( $value ), $ins );
-                       // replace /*$var*/
-                       $ins = str_replace( '/*$' . $var . '*/', $this->strencode( $value ), $ins );
-               }
-
-               return $ins;
-       }
-
-       /**
-        * Replace variables in sourced SQL
-        *
-        * @param string $ins
-        * @return string
-        */
        protected function replaceVars( $ins ) {
-               $ins = $this->replaceSchemaVars( $ins );
-
-               // Table prefixes
-               $ins = preg_replace_callback( '!/\*(?:\$wgDBprefix|_)\*/([a-zA-Z_0-9]*)!',
-                       array( $this, 'tableNameCallback' ), $ins );
-
-               // Index names
-               $ins = preg_replace_callback( '!/\*i\*/([a-zA-Z_0-9]*)!',
-                       array( $this, 'indexNameCallback' ), $ins );
-
-               return $ins;
+               $that = $this;
+               $vars = $this->getSchemaVars();
+               return preg_replace_callback(
+                       '!
+                               /\* (\$wgDBprefix|[_i]) \*/ (\w*) | # 1-2. tableName, indexName
+                               \'\{\$ (\w+) }\'                  | # 3. addQuotes
+                               `\{\$ (\w+) }`                    | # 4. addIdentifierQuotes
+                               /\*\$ (\w+) \*/                     # 5. leave unencoded
+                       !x',
+                       function ( $m ) use ( $that, $vars ) {
+                               // Note: Because of <https://bugs.php.net/bug.php?id=51881>,
+                               // check for both nonexistent keys *and* the empty string.
+                               if ( isset( $m[1] ) && $m[1] !== '' ) {
+                                       if ( $m[1] === 'i' ) {
+                                               return $that->indexName( $m[2] );
+                                       } else {
+                                               return $that->tableName( $m[2] );
+                                       }
+                               } elseif ( isset( $m[3] ) && $m[3] !== '' && array_key_exists( $m[3], $vars ) ) {
+                                       return $that->addQuotes( $vars[$m[3]] );
+                               } elseif ( isset( $m[4] ) && $m[4] !== '' && array_key_exists( $m[4], $vars ) ) {
+                                       return $that->addIdentifierQuotes( $vars[$m[4]] );
+                               } elseif ( isset( $m[5] ) && $m[5] !== '' && array_key_exists( $m[5], $vars ) ) {
+                                       return $vars[$m[5]];
+                               } else {
+                                       return $m[0];
+                               }
+                       },
+                       $ins
+               );
        }
 
        /**
@@ -3976,26 +3978,6 @@ abstract class DatabaseBase implements IDatabase {
                return array();
        }
 
-       /**
-        * Table name callback
-        *
-        * @param array $matches
-        * @return string
-        */
-       protected function tableNameCallback( $matches ) {
-               return $this->tableName( $matches[1] );
-       }
-
-       /**
-        * Index name callback
-        *
-        * @param array $matches
-        * @return string
-        */
-       protected function indexNameCallback( $matches ) {
-               return $this->indexName( $matches[1] );
-       }
-
        /**
         * Check to see if a named lock is available. This is non-blocking.
         *
index dac4337..a5540db 100644 (file)
@@ -1058,6 +1058,31 @@ abstract class DatabaseUpdater {
                }
        }
 
+       /**
+        * Enable profiling table when it's turned on
+        */
+       protected function doEnableProfiling() {
+               global $wgProfiler;
+
+               if ( !$this->doTable( 'profiling' ) ) {
+                       return true;
+               }
+
+               $profileToDb = false;
+               if ( isset( $wgProfiler['output'] ) ) {
+                       $out = $wgProfiler['output'];
+                       if ( $out === 'db' ) {
+                               $profileToDb = true;
+                       } elseif( is_array( $out ) && in_array( 'db', $out ) ) {
+                               $profileToDb = true;
+                       }
+               }
+
+               if ( $profileToDb && !$this->db->tableExists( 'profiling', __METHOD__ ) ) {
+                       $this->applyPatch( 'patch-profiling.sql', false, 'Add profiling table' );
+               }
+       }
+
        /**
         * Rebuilds the localisation cache
         */
index 990b5b0..c3dedbc 100644 (file)
@@ -924,18 +924,6 @@ class MysqlUpdater extends DatabaseUpdater {
                }
        }
 
-       protected function doEnableProfiling() {
-               global $wgProfileToDatabase;
-
-               if ( !$this->doTable( 'profiling' ) ) {
-                       return true;
-               }
-
-               if ( $wgProfileToDatabase === true && !$this->db->tableExists( 'profiling', __METHOD__ ) ) {
-                       $this->applyPatch( 'patch-profiling.sql', false, 'Add profiling table' );
-               }
-       }
-
        protected function doMaybeProfilingMemoryUpdate() {
                if ( !$this->doTable( 'profiling' ) ) {
                        return true;
index ab5ab7d..91cbb04 100644 (file)
@@ -168,11 +168,4 @@ class SqliteUpdater extends DatabaseUpdater {
                        $this->output( "...fulltext search table appears to be in order.\n" );
                }
        }
-
-       protected function doEnableProfiling() {
-               global $wgProfileToDatabase;
-               if ( $wgProfileToDatabase === true && !$this->db->tableExists( 'profiling', __METHOD__ ) ) {
-                       $this->applyPatch( 'patch-profiling.sql', false, 'Add profiling table' );
-               }
-       }
 }
index 4292b5b..367db40 100644 (file)
@@ -20,9 +20,9 @@
        "config-session-expired": "De Daate för Ding Setzung sinn wall övverholld of afjeloufe.\nDe Setzungunge sin esu enjeshtallt, nit mieh wi $1 ze doore.\nDat kanns De verlängere, endämm dat De de <code lang=\"en\">session.gc_maxlifetime</code> en dä Dattei <code>php.ini</code> jrüüßer määß.\nDon dat Projramm för et Opsäze norr_ens aanschmiiße.",
        "config-no-session": "De Daate för Ding Setzung sinn verschött jejange.\nDonn en dä Dattei <code>php.ini</code> nohloore, ov dä <code lang=\"en\">session.save_path</code> op e zopaß Verzeijschneß zeisch.",
        "config-your-language": "De Schprohch beim Enreeschte:",
-       "config-your-language-help": "Donn heh di Shprooch ußsöhke, di dat Enshtallzjuhnsprojramm kalle sull.",
+       "config-your-language-help": "Donn heh di Schprohch ußsöhke, di dat Enschtallzjuhnsprojramm kalle sull.",
        "config-wiki-language": "Dem Wiki sing Schprohch:",
-       "config-wiki-language-help": "Donn heh di Shprooch ußsöhke, di et Wiki shtandattmääßesch kalle sull.",
+       "config-wiki-language-help": "Donn heh di Schprohch ußsöhke, di et Wiki schtandattmääßesch kalle sull.",
        "config-back": "← Retuur",
        "config-continue": "Wigger →",
        "config-page-language": "Schprohch",
index f988238..ab42802 100644 (file)
  * @since 1.25
  */
 class ProfilerOutputDb extends ProfilerOutput {
+       /** @var bool Whether to store host data with profiling calls */
+       private $perHost = false;
+
+       public function __construct( Profiler $collector, array $params ) {
+               parent::__construct( $collector, $params );
+               global $wgProfilePerHost;
+
+               // Initialize per-host profiling from config, back-compat if available
+               if ( isset( $this->params['perHost'] ) ) {
+                       $this->perHost = $this->params['perHost'];
+               } elseif( $wgProfilePerHost ) {
+                       $this->perHost = $wgProfilePerHost;
+               }
+       }
+
        public function canUse() {
                # Do not log anything if database is readonly (bug 5375)
                return !wfReadOnly();
        }
 
        public function log( array $stats ) {
-               global $wgProfilePerHost;
-
-               if ( $wgProfilePerHost ) {
-                       $pfhost = wfHostname();
-               } else {
-                       $pfhost = '';
-               }
+               $pfhost = $this->perHost ? wfHostname() : '';
 
                try {
                        $dbw = wfGetDB( DB_MASTER );
index a938861..d5c7e5c 100644 (file)
  * @since 1.25
  */
 class ProfilerOutputUdp extends ProfilerOutput {
+       /** @var int port to send profiling data to */
+       private $port = 3811;
+
+       /** @var string host to send profiling data to */
+       private $host = '127.0.0.1';
+
+       /** @var string format string for profiling data */
+       private $format = "%s - %d %f %f %f %f %s\n";
+
+       public function __construct( Profiler $collector, array $params ) {
+               parent::__construct( $collector, $params );
+               global $wgUDPProfilerPort, $wgUDPProfilerHost, $wgUDPProfilerFormatString;
+
+               // Initialize port, host, and format from config, back-compat if available
+               if ( isset( $this->params['udpport'] ) ) {
+                       $this->port = $this->params['udpport'];
+               } elseif( $wgUDPProfilerPort ) {
+                       $this->port = $wgUDPProfilerPort;
+               }
+
+               if ( isset( $this->params['udphost'] ) ) {
+                       $this->host = $this->params['udphost'];
+               } elseif( $wgUDPProfilerHost ) {
+                       $this->host = $wgUDPProfilerHost;
+               }
+
+               if ( isset( $this->params['udpformat'] ) ) {
+                       $this->format = $this->params['udpformat'];
+               } elseif( $wgUDPProfilerFormatString ) {
+                       $this->format = $wgUDPProfilerFormatString;
+               }
+       }
+
        public function canUse() {
                # Sockets are not enabled
                return function_exists( 'socket_create' );
        }
 
        public function log( array $stats ) {
-               global $wgUDPProfilerHost, $wgUDPProfilerPort, $wgUDPProfilerFormatString;
-
                $sock = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
                $plength = 0;
                $packet = "";
                foreach ( $stats as $pfdata ) {
-                       $pfline = sprintf( $wgUDPProfilerFormatString,
+                       $pfline = sprintf( $this->format,
                                $this->collector->getProfileID(),
                                $pfdata['calls'],
                                $pfdata['cpu'] / 1000, // ms => sec
@@ -53,13 +84,13 @@ class ProfilerOutputUdp extends ProfilerOutput {
                        );
                        $length = strlen( $pfline );
                        if ( $length + $plength > 1400 ) {
-                               socket_sendto( $sock, $packet, $plength, 0, $wgUDPProfilerHost, $wgUDPProfilerPort );
+                               socket_sendto( $sock, $packet, $plength, 0, $this->host, $this->port );
                                $packet = "";
                                $plength = 0;
                        }
                        $packet .= $pfline;
                        $plength += $length;
                }
-               socket_sendto( $sock, $packet, $plength, 0x100, $wgUDPProfilerHost, $wgUDPProfilerPort );
+               socket_sendto( $sock, $packet, $plength, 0x100, $this->host, $this->port );
        }
 }
index f36a000..c455a76 100644 (file)
        "gotaccountlink": "Cı kewe",
        "userlogin-resetlink": "Melumatê cıkewtışi xo vira kerdê?",
        "userlogin-resetpassword-link": "Parola xo kerda xo vira?",
-       "userlogin-helplink2": "Heqde ronıştışi peşti",
+       "userlogin-helplink2": "Heqa qeydbiyayışi de peşti bıgêrên",
        "userlogin-loggedin": "Tı xora namey {{GENDER:$1|$1}} ra kewtê/kewtay cı.\nFormê cêrêni bıgureyne ke namey karberio bin ra cı kewê.",
        "userlogin-createanother": "Zewbi hesab vıraz",
        "createacct-emailrequired": "Adresa e-postey",
        "specialpages-group-wiki": "Melumat u haceti",
        "specialpages-group-redirects": "Pela xasîyê ke heteneyayê",
        "specialpages-group-spam": "haletê spami",
+       "specialpages-group-developer": "Xacetanê raverberdoğî",
        "blankpage": "Pela venge",
        "intentionallyblankpage": "Ena pel bi zanayişî weng mendo.",
        "external_image_whitelist": "  #no satır zey xo verde/raverde<pre>\n#parçeyê ifadeya rêzbiyayeyani (têna zerreyê ıney de // ) u çıtayo/çiyo zi mende cêr de têare kerê.\n#ney URL ya (hotlink) resmê teberi de hemcıta benî.\n#Ê yê ke hemcıt (eşleşmek-hemçift) biyê zey resımi asenî, eqsê hal de zi zey gıreyê resmi aseno.\nsatır ê ke pê ney # # destpêkenê zey mışore/mıjore muamele vineno.\n#herfa gırd û qıci ferq nêkeno\n\n#parçeyê ifadeya rêzbiyayeyani bıerzê serê ney satıri. no satır zey xo verde/raverde </pre>",
index 2016aa3..3f65920 100644 (file)
        "right-protect": "Modifier les niveaux de protection et modifier les pages protégées en cascade",
        "right-editprotected": "Modifier les pages protégées avec « {{int:protect-level-sysop}} »",
        "right-editsemiprotected": "Modifier les pages protégées avec « {{int:protect-level-autoconfirmed}} »",
+       "right-editcontentmodel": "Modifier le modèle de contenu d’une page",
        "right-editinterface": "Modifier l'interface utilisateur",
        "right-editusercssjs": "Modifier les fichiers CSS et JavaScript d'autres utilisateurs",
        "right-editusercss": "Modifier les fichiers CSS d'autres utilisateurs",
        "action-viewmywatchlist": "afficher votre liste de suivi",
        "action-viewmyprivateinfo": "voir vos informations personnelles",
        "action-editmyprivateinfo": "modifier vos informations personnelles",
+       "action-editcontentmodel": "modifier le modèle de contenu d’une page",
        "nchanges": "$1 modification{{PLURAL:$1||s}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|depuis la dernière visite}}",
        "enhancedrc-history": "historique",
        "specialpages-group-wiki": "Données et outils",
        "specialpages-group-redirects": "Pages spéciales redirigées",
        "specialpages-group-spam": "Outils anti-pourriel",
+       "specialpages-group-developer": "Outils du développeur",
        "blankpage": "Page vide",
        "intentionallyblankpage": "Cette page est laissée intentionnellement (presque) vide.",
        "external_image_whitelist": " #Laisser cette ligne exactement telle quelle.<pre>\n#Indiquer les fragments d'expressions rationnelles (juste la partie indiquée entre les //) ci-dessous.\n#Ils correspondront avec les URL des images externes.\n#Celles qui correspondent s'afficheront comme des images, sinon seul un lien vers l'image sera affiché.\n#Les lignes commençant par un # seront considérées comme des commentaires.\n#Cette liste n'est pas sensible à la casse.\n\n#Mettez tous les fragments d'expressions rationnelles au-dessus de cette ligne. Laissez cette dernière ligne telle quelle.</pre>",
        "expand_templates_generate_xml": "Voir l’arborescence d’analyse XML",
        "expand_templates_generate_rawhtml": "Afficher le HTML brut",
        "expand_templates_preview": "Aperçu du rendu",
+       "expand_templates_preview_fail_html": "<em>Comme {{SITENAME}} a HTML brut activé et qu’il y a eu une perte de données de session, l’aperçu est masqué par précaution contre les attaques JavaScript.</em>\n\n<strong>Si c’est une demande d’aperçu légitime, veuillez réessayer.</strong>\nSi cela ne fonctionne toujours pas, essayez de [[Special:UserLogout|vous déconnecter]] et vous reconnecter.",
+       "expand_templates_preview_fail_html_anon": "<em>Comme {{SITENAME}} a HTML brut activé et que vous n’êtes pas connecté, l’aperçu est masqué par précaution contre les attaques JavaScript.</em>\n\n<strong>Si c’est une demande d’aperçu légitime, veuillez [[Special:UserLogin|vous connecter]] et réessayer.</strong>",
        "pagelanguage": "Sélecteur de langue de la page",
        "pagelang-name": "Page",
        "pagelang-language": "Langue",
        "log-name-pagelang": "Tracer les changements de langue",
        "log-description-pagelang": "Ceci est un journal des changements dans les langues des pages.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|a changé}} la langue de la page $3 de $4 à $5.",
-       "default-skin-not-found": "Oups ! L’habillage par défaut pour votre wiki, défini par <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVotre installation semble inclure les habillages suivants. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de configuration des habillages] pour savoir comment les activer et choisir celui par défaut.\n\n$2\n\n; Si vous venez juste d’installer MediaWiki :\n: Vous l’avez probablement installé depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en:\n:* Téléchargeant le [https://www.mediawiki.org/wiki/Download fichier tar de l’installeur], qui comprend plusieurs habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code dir=\"ltr\">skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git, si vous êtes un développeur de MediaWiki.\n\n; Si vous venez juste de mettre à jour MediaWiki :\n: MediaWiki 1.24 et au-delà n’active plus automatiquement les habillages installés (voyez [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery le manuel sur la découverte automatique des habillages]). Vous pouvez coller les lignes suivantes dans <code>LocalSettings.php</code> pour activer tous les habillages actuellement installés :\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si vous venez de modifier <code>LocalSettings.php</code> :\n: Vérifiez deux fois le nom des habillages pour éviter les erreurs de frappe.",
-       "default-skin-not-found-no-skins": "Oups ! L’habillage par défaut pour votre wiki , défini par <code>$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVous n’avez aucun habillage d’installé.\n\n; Si vous venez juste d’installer ou de mettre à jour MediaWiki :\n: Vous l’avez sans doute fait depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. MediaWiki 1.24 et au-delà n’inclut aucun habillage dans le dépôt principal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en :\n:* Téléchargeant [https://www.mediawiki.org/wiki/Download le fichier tar de l’installeur], qui comprend différents habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:*Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code dir=\"ltr\">skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git si vous êtes un développeur de MediaWiki. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de la configuration des habillages] pour des instructions sur la manière d’activer les habillages et choisir celui par défaut.",
+       "default-skin-not-found": "Oups ! L’habillage par défaut pour votre wiki, défini par <code dir=\"ltr\">$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVotre installation semble inclure les habillages suivants. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de configuration des habillages] pour savoir comment les activer et choisir celui par défaut.\n\n$2\n\n; Si vous venez juste d’installer MediaWiki :\n: Vous l’avez probablement installé depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en:\n:* Téléchargeant le [https://www.mediawiki.org/wiki/Download fichier tar de l’installeur], qui comprend plusieurs habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Téléchargeant les fichiers tar d’habillage individuel depuis [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code dir=\"ltr\">skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git, si vous êtes un développeur de MediaWiki.\n\n; Si vous venez juste de mettre à jour MediaWiki :\n: MediaWiki 1.24 et au-delà n’active plus automatiquement les habillages installés (voyez [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery le manuel sur la découverte automatique des habillages]). Vous pouvez coller les lignes suivantes dans <code>LocalSettings.php</code> pour activer tous les habillages actuellement installés :\n\n<pre dir=\"ltr\">$3</pre>\n\n; Si vous venez de modifier <code>LocalSettings.php</code> :\n: Vérifiez deux fois le nom des habillages pour éviter les erreurs de frappe.",
+       "default-skin-not-found-no-skins": "Oups ! L’habillage par défaut pour votre wiki , défini par <code>$wgDefaultSkin</code> comme <code>$1</code>, n’est pas disponible.\n\nVous n’avez aucun habillage d’installé.\n\n; Si vous venez juste d’installer ou de mettre à jour MediaWiki :\n: Vous l’avez sans doute fait depuis git, ou directement depuis le code source avec une autre méthode. C’est normal. MediaWiki 1.24 et au-delà n’inclut aucun habillage dans le dépôt principal. Essayez d’installer des habillages depuis [https://www.mediawiki.org/wiki/Category:All_skins le répertoire des habillages de mediawiki.org], en :\n:* Téléchargeant [https://www.mediawiki.org/wiki/Download le fichier tar de l’installeur], qui comprend différents habillages et extensions. Vous pouvez copier et coller le répertoire <code>skins/</code> depuis là.\n:* Téléchargeant les fichiers tar d’habillage individuel depuis [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:*Clonant un des dépôts <code>mediawiki/skins/*</code> via git dans le répertoire <code dir=\"ltr\">skins/</code> de votre installation de MediaWiki.\n: Faire ainsi ne devrait pas interférer avec votre dépôt git si vous êtes un développeur de MediaWiki. Voyez [https://www.mediawiki.org/wiki/Manual:Skin_configuration le manuel de la configuration des habillages] pour des instructions sur la manière d’activer les habillages et choisir celui par défaut.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (activé)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''désactivé''')",
        "mediastatistics": "Statistiques sur les médias",
index 4b9c4fc..b5f4a8b 100644 (file)
        "querypage-disabled": "Ova posebna stranica onemogućena je jer bi usporila funkcioniranje projekta.",
        "booksources": "Pretraživanje po ISBN-u",
        "booksources-search-legend": "Traženje izvora za knjigu",
+       "booksources-search": "Traži",
        "booksources-text": "Ovdje je popis vanjskih poveznica na internetskim stranicama koje prodaju nove i rabljene knjige, ali mogu sadržavati i ostale podatke o knjigama koje tražite:",
        "booksources-invalid-isbn": "Čini se da dani ISBN nije valjan; provjerite greške kopirajući iz izvornika.",
        "specialloguserlabel": "Suradnik:",
        "unwatchthispage": "Prekini praćenje",
        "notanarticle": "Nije članak",
        "notvisiblerev": "Izmjena je obrisana",
-       "watchlist-details": "{{PLURAL:$1|$1 stranica|$1 stranice|$1 stranica}} se nalazi na popisu praćenja, ne brojeći stranice za razgovor.",
+       "watchlist-details": "{{PLURAL:$1|$1 stranica se nalazi|$1 stranice se nalaze|$1 stranica se nalazi}} na popisu praćenja, ne brojeći stranice za razgovor.",
        "wlheader-enotif": "Uključeno je izvješćivanje e-poštom.",
-       "wlheader-showupdated": "Stranice koje su promijenjene od Vašeg posljednjeg posjeta prikazane su '''podebljano'''",
+       "wlheader-showupdated": "Stranice koje su promijenjene od Vašeg posljednjeg posjeta prikazane su '''podebljano'''.",
        "wlnote": "Ovdje {{PLURAL:$1|je posljednja $1 promjena|su posljednje $1 promjene|je posljednjih $1 promjena}} u {{PLURAL:$2|posljednjem '''$2''' satu|posljednja '''$2''' sata|posljednjih '''$2''' sati}}, od $3, $4.",
        "wlshowlast": "Prikaži posljednjih $1 sati $2 dana",
        "watchlist-options": "Izbornik popisa praćenja",
index d2b2948..03fc60e 100644 (file)
        "editwarning-warning": "Այս էջը լքելով դուք կարող եք կորցնել ձեր կատարած փոփոխությունները։\nԵթե դուք գրանցված եք համակարգում, կարող եք անջատել այս նախազգուշացումը ձեր նախընրությունների «{{int:prefs-editing}}» բաժնում։",
        "content-model-wikitext": "վիքիտեքստ",
        "content-model-javascript": "ՋավաՍկրիպտ",
+       "content-model-css": "ՍիԷսԷս",
        "undo-success": "Խմբագրումը կարող է հետ շրջվել։ Ստուգեք տարբերակների համեմատությունը ստորև, որպեսզի համոզվեք, որ դա է ձեզ հետաքրքրող փոփոխությունը և մատնահարեք «Հիշել էջը»՝ գործողությունն ավարտելու համար։",
        "undo-failure": "Խմբագրումը չի կարող հետ շրջվել միջանկյալ խմբագրումների ընդհարման պատճառով։",
        "undo-summary": "Հետ է շրջվում $1 խմբագրումը, որի հեղինակն է՝ [[Special:Contributions/$2|$2]] ([[User talk:$2|քննարկում]]) {{GENDER:$2|մասնակիցը|մասնակցուհին}}",
index 95c11f5..65fa28a 100644 (file)
        "post-expand-template-argument-category": "Sigge met övverjange Parrammeeter fun Schablone",
        "parser-template-loop-warning": "Schablon roofe sesch em Kringel op: [[$1]]",
        "parser-template-recursion-depth-warning": "Schablone refe sesch zo öff sellver op ($1)",
-       "language-converter-depth-warning": "Zoh vill Verschachtelunge (övver $1) beim Täx-Ömwandelle vun ein Shprooch en andere.",
+       "language-converter-depth-warning": "Zoh vill Verschachtelonge (övver $1) beim Täx-Ömwandelle vun eine Schprohch udder Schrevv en en anndere.",
        "node-count-exceeded-category": "Sigge, woh dä <i lang=\"en\" xml:lang=\"en\">node-count</i> övverschredde es",
        "node-count-exceeded-warning": "Heh di Sigg hät dä <i lang=\"en\" xml:lang=\"en\">node-count</i> övverschredde",
        "expansion-depth-exceeded-category": "Sigge, woh de <i lang=\"en\" xml:lang=\"en\">expansion depth</i> övverschredde es",
index 8f27068..6fdd349 100644 (file)
        "right-protect": "സംരക്ഷണ മാനത്തിൽ മാറ്റം വരുത്തുക, നിർഝരിത മാർഗ്ഗത്തിൽ സംരക്ഷിക്കപ്പെട്ടിരിക്കുന്ന താളുകൾ തിരുത്തുക",
        "right-editprotected": "\"{{int:protect-level-sysop}}\" എന്ന് അടയാളപ്പെടുത്തി സംരക്ഷിച്ചിട്ടുള്ള താളുകൾ തിരുത്തുക",
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" എന്നടയാളപ്പെടുത്തി സംരക്ഷിച്ചിട്ടുള്ള താളുകൾ തിരുത്തുക",
+       "right-editcontentmodel": "താളിന്റെ ഉള്ളടക്ക രീതി തിരുത്തുക",
        "right-editinterface": "ഉപയോക്തൃ സമ്പർക്കമുഖത്തിൽ മാറ്റം വരുത്തുക",
        "right-editusercssjs": "മറ്റ് ഉപയോക്താക്കളുടെ CSS, JS പ്രമാണങ്ങൾ തിരുത്തുക",
        "right-editusercss": "മറ്റ് ഉപയോക്താക്കളുടെ CSS പ്രമാണങ്ങൾ തിരുത്തുക",
        "action-viewmywatchlist": "താങ്കൾ ശ്രദ്ധിക്കുന്നവയുടെ പട്ടിക കാണുക",
        "action-viewmyprivateinfo": "താങ്കളുടെ സ്വകാര്യവിവരങ്ങൾ കാണുക",
        "action-editmyprivateinfo": "താങ്കളുടെ സ്വകാര്യവിവരങ്ങൾ തിരുത്തുക",
+       "action-editcontentmodel": "താളിന്റെ ഉള്ളടക്ക രീതി തിരുത്തുക",
        "nchanges": "{{PLURAL:$1|ഒരു മാറ്റം|$1 മാറ്റങ്ങൾ}}",
        "enhancedrc-since-last-visit": "കഴിഞ്ഞ സന്ദർശനത്തിനു ശേഷം {{PLURAL:$1|ഒരെണ്ണം|$1 എണ്ണം}}",
        "enhancedrc-history": "നാൾവഴി",
        "expand_templates_generate_xml": "എക്സ്.എം.എൽ. പാഴ്‌സർ ട്രീ പ്രദർശിപ്പിക്കുക",
        "expand_templates_generate_rawhtml": "അസംസ്കൃത എച്ച്.റ്റി.എം.എൽ. പ്രദർശിപ്പിക്കുക",
        "expand_templates_preview": "എങ്ങനെയുണ്ടെന്നു കാണുക",
+       "expand_templates_preview_fail_html": "<em>{{SITENAME}} സംരംഭത്തിൽ അസംസ്കൃത എച്ച്.റ്റി.എം.എൽ സജ്ജമാക്കിയിരിക്കുന്നതിനാൽ, സെഷൻ വിവരങ്ങൾ നഷ്ടപ്പെട്ടിരിക്കുന്നു, ജാവാസ്ക്രിപ്റ്റ് ആക്രമണങ്ങൾക്കെതിരെയുള്ള മുൻകരുതൽ എന്ന നിലയിൽ എങ്ങനെയുണ്ടെന്ന് കാണൽ മറച്ചിരിക്കുകയാണ്.</em>\n\n<strong>ഇത് എങ്ങനെയുണ്ടെന്ന് കാണാനുള്ള യഥാർത്ഥശ്രമമാണെങ്കിൽ വീണ്ടും ശ്രമിക്കുക.</strong>\nഇപ്പോഴും പ്രവർത്തിക്കുന്നില്ലെങ്കിൽ, [[Special:UserLogout|പുറത്ത് കടന്ന്]] വീണ്ടും പ്രവേശിച്ച ശേഷം പരീക്ഷിക്കുക.",
+       "expand_templates_preview_fail_html_anon": "<em>{{SITENAME}} സംരംഭത്തിൽ അസംസ്കൃത എച്ച്.റ്റി.എം.എൽ സജ്ജമാക്കിയിരിക്കുന്നതിനാൽ, സെഷൻ വിവരങ്ങൾ നഷ്ടപ്പെട്ടിരിക്കുന്നു, ജാവാസ്ക്രിപ്റ്റ് ആക്രമണങ്ങൾക്കെതിരെയുള്ള മുൻകരുതൽ എന്ന നിലയിൽ എങ്ങനെയുണ്ടെന്ന് കാണൽ മറച്ചിരിക്കുകയാണ്.</em>\n\n<strong>ഇത് എങ്ങനെയുണ്ടെന്ന് കാണാനുള്ള യഥാർത്ഥശ്രമമാണെങ്കിൽ [[Special:UserLogin|പ്രവേശിച്ച ശേഷം]] വീണ്ടും ശ്രമിക്കുക.</strong>",
        "pagelanguage": "താളിന്റെ ഭാഷാ തിരഞ്ഞെടുപ്പ് സൗകര്യം",
        "pagelang-name": "താൾ",
        "pagelang-language": "ഭാഷ",
        "log-name-pagelang": "ഭാഷ മാറ്റലിന്റെ രേഖ",
        "log-description-pagelang": "താളുകളുടെ ഭാഷകൾ മാറ്റിയതിന്റെ രേഖകൾ ഇവിടെക്കാണാം.",
        "logentry-pagelang-pagelang": "$3 എന്ന താളിന്റെ ഭാഷയായിരുന്ന $4, $1 $5 ആയി {{GENDER:$2|മാറ്റി}}.",
-       "default-skin-not-found": "അയ്യോ! <code dir=\"ltr\"> $wgDefaultSkin</code> നിർവചിക്കപ്പെട്ടതുപ്രകാരമുള്ള താങ്കളുടെ വിക്കിയുടെ സ്വതേയുള്ള ദൃശ്യരൂപമായ <code>$1</code>, ലഭ്യമല്ല.\n\nതാങ്കളുടെ ഇൻസ്റ്റലേഷനിൽ താഴെക്കൊടുക്കുന്ന ദൃശ്യരൂപങ്ങൾ ഉണ്ടാകേണ്ടതാണ്. അവ എങ്ങനെ ക്രമീകരിക്കാം എന്നും സ്വതേ വേണ്ടത് എങ്ങനെ സജ്ജമാക്കാം എന്നും [https://www.mediawiki.org/wiki/Manual:Skin_configuration ദൃശ്യരൂപം സജ്ജമാക്കൽ സഹായിയിൽ] കാണുക.\n\n$2\n\n; താങ്കൾ മീഡിയവിക്കി ഇൻസ്റ്റോൾ ചെയ്തതേ ഉള്ളുവെങ്കിൽ:\n: ഗിറ്റിൽ നിന്ന് അല്ലെങ്കിൽ മറ്റെങ്കിലും മാർഗ്ഗം ഉപയോഗിച്ച് സോഴ്സ് കോഡ് നേരിട്ട് ഉപയോഗിക്കുകയായിരിന്നെങ്കിൽ ഇത് സംഭവിച്ചേക്കാം. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's ദൃശ്യരൂപ ഡയറക്ടറിയിൽ നിന്ന്], ഇനിക്കൊടുക്കുന്ന മാർഗ്ഗങ്ങൾ ഉപയോഗിച്ച് ഏതാനം ദൃശ്യരൂപങ്ങൾ ഇൻസ്റ്റോൾ ചെയ്യാൻ നോക്കുക:\n:* [https://www.mediawiki.org/wiki/Download ടാർബോൾ ഇൻസ്റ്റോളർ] ഡൗൺലോഡ് ചെയ്യുക, അതിൽ നിരവധി ദൃശ്യരൂപങ്ങളും അനുബന്ധങ്ങളും ഉൾപ്പെടുത്തിയിരിക്കുന്നു. അതിൽ നിന്നും താങ്കൾക്ക് <code>skins/</code> ഡയറക്ടറി പകർത്താവുന്നതാണ്.\n:* താങ്കളുടെ മീഡിയവിക്കി ഇൻസ്റ്റലേഷന്റെ <code dir=\"ltr\">skins/</code> ഡയറക്ടറിയിലേക്ക് ഗിറ്റ് ഉപയോഗിച്ച് <code>mediawiki/skins/*</code> റെപ്പോസിറ്ററികളിലൊന്ന് ക്ലോൺ ചെയ്യുക.\n: താങ്കളൊരു മീഡിയവിക്കി ഡവലപ്പറാണെങ്കിൽ ഇത് താങ്കളുടെ ഗിറ്റ് ഡെപ്പോസിറ്ററിയെ ബാധിക്കുന്നതല്ല.\n\n; മീഡിയവിക്കി താങ്കൾ അപ്ഗ്രേഡ് ചെയ്തതേ ഉള്ളുവെങ്കിൽ:\n: മീഡിയവിക്കി 1.24 ഒപ്പം അതിനു ശേഷമുള്ളവയും ഇൻസ്റ്റോൾ ചെയ്തിട്ടുള്ള ദൃശ്യരൂപങ്ങൾ സ്വതേ സജ്ജമാക്കുന്നില്ല ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery ദൃശ്യരൂപം ഓട്ടോഡിസ്കവറി സഹായം] കാണുക). ഇൻസ്റ്റോൾ ചെയ്തിട്ടുള്ള ദൃശ്യരൂപങ്ങൾ സജ്ജമാക്കുന്നതിനായി ഇനിക്കൊടുക്കുന്ന വരികൾ <code>LocalSettings.php</code> എന്നതിലോട്ട് പകർത്തുക:\n\n<pre dir=\"ltr\">$3</pre>\n\n; <code>LocalSettings.php</code> താളിൽ മാറ്റം വരുത്തിയതേയുള്ളുവെങ്കിൽ:\n: ദൃശ്യരൂപങ്ങളുടെ പേരിൽ അക്ഷരപിശകുകളുണ്ടോയെന്ന് ആവർത്തിച്ച് പരിശോധിക്കുക.",
-       "default-skin-not-found-no-skins": "അയ്യോ! <code dir=\"ltr\"> $wgDefaultSkin</code> നിർവചിക്കപ്പെട്ടതുപ്രകാരമുള്ള താങ്കളുടെ വിക്കിയുടെ സ്വതേയുള്ള ദൃശ്യരൂപമായ <code>$1</code>, ലഭ്യമല്ല.\n\nതാങ്കൾ ദൃശ്യരൂപങ്ങളൊന്നും ഇൻസ്റ്റോൾ ചെയ്തിട്ടില്ല.\n\n; താങ്കൾ മീഡിയവിക്കി ഇൻസ്റ്റോൾ ചെയ്തതേ അല്ലെങ്കിൽ അപ്‌ഗ്രേഡ് ചെയ്തതേ ഉള്ളുവെങ്കിൽ:\n: ഗിറ്റിൽ നിന്ന് അല്ലെങ്കിൽ മറ്റെങ്കിലും മാർഗ്ഗം ഉപയോഗിച്ച് സോഴ്സ് കോഡ് നേരിട്ട് ഉപയോഗിക്കുകയായിരിന്നെങ്കിൽ ഇത് സംഭവിച്ചേക്കാം. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's ദൃശ്യരൂപ ഡയറക്ടറിയിൽ നിന്ന്], ഇനിക്കൊടുക്കുന്ന മാർഗ്ഗങ്ങൾ ഉപയോഗിച്ച് ഏതാനം ദൃശ്യരൂപങ്ങൾ ഇൻസ്റ്റോൾ ചെയ്യാൻ നോക്കുക:\n:* [https://www.mediawiki.org/wiki/Download ടാർബോൾ ഇൻസ്റ്റോളർ] ഡൗൺലോഡ് ചെയ്യുക, അതിൽ നിരവധി ദൃശ്യരൂപങ്ങളും അനുബന്ധങ്ങളും ഉൾപ്പെടുത്തിയിരിക്കുന്നു. അതിൽ നിന്നും താങ്കൾക്ക് <code>skins/</code> ഡയറക്ടറി പകർത്താവുന്നതാണ്.\n:* താങ്കളുടെ മീഡിയവിക്കി ഇൻസ്റ്റലേഷന്റെ <code dir=\"ltr\">skins/</code> ഡയറക്ടറിയിലേക്ക് ഗിറ്റ് ഉപയോഗിച്ച് <code>mediawiki/skins/*</code> റെപ്പോസിറ്ററികളിലൊന്ന് ക്ലോൺ ചെയ്യുക.\n: താങ്കളൊരു മീഡിയവിക്കി ഡവലപ്പറാണെങ്കിൽ ഇത് താങ്കളുടെ ഗിറ്റ് ഡെപ്പോസിറ്ററിയെ ബാധിക്കുന്നതല്ല. ദൃശ്യരൂപങ്ങൾ എങ്ങനെ ക്രമീകരിക്കാം എന്നും സ്വതേ വേണ്ടത് എങ്ങനെ സജ്ജമാക്കാം എന്നും [https://www.mediawiki.org/wiki/Manual:Skin_configuration ദൃശ്യരൂപം സജ്ജമാക്കൽ സഹായിയിൽ] കാണുക.",
+       "default-skin-not-found": "à´\85à´¯àµ\8dà´¯àµ\8b! <code dir=\"ltr\"> $wgDefaultSkin</code> à´¨à´¿àµ¼à´µà´\9aà´¿à´\95àµ\8dà´\95à´ªàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fà´¤àµ\81à´ªàµ\8dà´°à´\95ാരമàµ\81à´³àµ\8dà´³ à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´µà´¿à´\95àµ\8dà´\95à´¿à´¯àµ\81à´\9fàµ\86 à´¸àµ\8dവതàµ\87à´¯àµ\81à´³àµ\8dà´³ à´¦àµ\83à´¶àµ\8dയരàµ\82പമായ <code>$1</code>, à´²à´­àµ\8dയമലàµ\8dà´².\n\nതാà´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´\87ൻസàµ\8dà´±àµ\8dറലàµ\87ഷനിൽ à´¤à´¾à´´àµ\86à´\95àµ\8dà´\95àµ\8aà´\9fàµ\81à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99ൾ à´\89à´£àµ\8dà´\9fà´¾à´\95àµ\87à´£àµ\8dà´\9fതാണàµ\8d. à´\85à´µ à´\8eà´\99àµ\8dà´\99à´¨àµ\86 à´\95àµ\8dà´°à´®àµ\80à´\95à´°à´¿à´\95àµ\8dà´\95à´¾à´\82 à´\8eà´¨àµ\8dà´¨àµ\81à´\82 à´¸àµ\8dവതàµ\87 à´µàµ\87à´£àµ\8dà´\9fà´¤àµ\8d à´\8eà´\99àµ\8dà´\99à´¨àµ\86 à´¸à´\9càµ\8dà´\9cമാà´\95àµ\8dà´\95à´¾à´\82 à´\8eà´¨àµ\8dà´¨àµ\81à´\82 [https://www.mediawiki.org/wiki/Manual:Skin_configuration à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\82 à´¸à´\9càµ\8dà´\9cമാà´\95àµ\8dà´\95ൽ à´¸à´¹à´¾à´¯à´¿à´¯à´¿àµ½] à´\95ാണàµ\81à´\95.\n\n$2\n\n; à´¤à´¾à´\99àµ\8dà´\95ൾ à´®àµ\80ഡിയവിà´\95àµ\8dà´\95à´¿ à´\87ൻസàµ\8dà´±àµ\8dà´±àµ\8bൾ à´\9aàµ\86à´¯àµ\8dതതàµ\87 à´\89à´³àµ\8dà´³àµ\81à´µàµ\86à´\99àµ\8dà´\95ിൽ:\n: à´\97à´¿à´±àµ\8dറിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\8d à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´®à´±àµ\8dà´±àµ\86à´\99àµ\8dà´\95à´¿à´²àµ\81à´\82 à´®à´¾àµ¼à´\97àµ\8dà´\97à´\82 à´\89പയàµ\8bà´\97à´¿à´\9aàµ\8dà´\9aàµ\8d à´¸àµ\8bà´´àµ\8dà´¸àµ\8d à´\95àµ\8bà´¡àµ\8d à´¨àµ\87à´°à´¿à´\9fàµ\8dà´\9fàµ\8d à´\89പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95àµ\81à´\95യായിരിനàµ\8dà´¨àµ\86à´\99àµ\8dà´\95ിൽ à´\87à´¤àµ\8d à´¸à´\82ഭവിà´\9aàµ\8dà´\9aàµ\87à´\95àµ\8dà´\95à´¾à´\82. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's à´¦àµ\83à´¶àµ\8dയരàµ\82à´ª à´¡à´¯à´±à´\95àµ\8dà´\9fറിയിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\8d], à´\87നിà´\95àµ\8dà´\95àµ\8aà´\9fàµ\81à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´®à´¾àµ¼à´\97àµ\8dà´\97à´\99àµ\8dà´\99ൾ à´\89പയàµ\8bà´\97à´¿à´\9aàµ\8dà´\9aàµ\8d à´\8fതാനà´\82 à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99ൾ à´\87ൻസàµ\8dà´±àµ\8dà´±àµ\8bൾ à´\9aàµ\86à´¯àµ\8dയാൻ à´¨àµ\8bà´\95àµ\8dà´\95àµ\81à´\95:\n:* [https://www.mediawiki.org/wiki/Download à´\9fാർബàµ\8bൾ à´\87ൻസàµ\8dà´±àµ\8dà´±àµ\8bളർ] à´¡àµ\97ൺലàµ\8bà´¡àµ\8d à´\9aàµ\86à´¯àµ\8dà´¯àµ\81à´\95, à´\85തിൽ à´¨à´¿à´°à´µà´§à´¿ à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99à´³àµ\81à´\82 à´\85à´¨àµ\81ബനàµ\8dà´§à´\99àµ\8dà´\99à´³àµ\81à´\82 à´\89ൾപàµ\8dà´ªàµ\86à´\9fàµ\81à´¤àµ\8dതിയിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81. à´\85തിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\81à´\82 à´¤à´¾à´\99àµ\8dà´\95ൾà´\95àµ\8dà´\95àµ\8d <code>skins/</code> à´¡à´¯à´±à´\95àµ\8dà´\9fറി à´ªà´\95ർതàµ\8dതാവàµ\81à´¨àµ\8dനതാണàµ\8d.\n:* à´\93à´°àµ\8bà´°àµ\8b à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99à´³àµ\81à´\82 à´\9fാർബàµ\8bà´³àµ\81à´\95ളായി à´\92à´±àµ\8dറയàµ\8dà´\95àµ\8dà´\95àµ\8aà´±àµ\8dറയàµ\8dà´\95àµ\8dà´\95àµ\81à´\82  [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org à´¸à´\82à´°à´\82à´­à´¤àµ\8dതിൽ] à´¨à´¿à´¨àµ\8dà´¨àµ\81à´\82 à´¡àµ\97ൺലàµ\8bà´¡àµ\8d à´\9aàµ\86à´¯àµ\8dയാവàµ\81à´¨àµ\8dനതാണàµ\8d.\n:* à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´®àµ\80ഡിയവിà´\95àµ\8dà´\95à´¿ à´\87ൻസàµ\8dà´±àµ\8dറലàµ\87à´·à´¨àµ\8dà´±àµ\86 <code dir=\"ltr\">skins/</code> à´¡à´¯à´±à´\95àµ\8dà´\9fറിയിലàµ\87à´\95àµ\8dà´\95àµ\8d à´\97à´¿à´±àµ\8dà´±àµ\8d à´\89പയàµ\8bà´\97à´¿à´\9aàµ\8dà´\9aàµ\8d <code>mediawiki/skins/*</code> à´±àµ\86à´ªàµ\8dà´ªàµ\8bസിറàµ\8dററിà´\95ളിലàµ\8aà´¨àµ\8dà´¨àµ\8d à´\95àµ\8dà´²àµ\8bൺ à´\9aàµ\86à´¯àµ\8dà´¯àµ\81à´\95.\n: à´¤à´¾à´\99àµ\8dà´\95à´³àµ\8aà´°àµ\81 à´®àµ\80ഡിയവിà´\95àµ\8dà´\95à´¿ à´¡à´µà´²à´ªàµ\8dപറാണàµ\86à´\99àµ\8dà´\95ിൽ à´\87à´¤àµ\8d à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´\97à´¿à´±àµ\8dà´±àµ\8d à´¡àµ\86à´ªàµ\8dà´ªàµ\8bസിറàµ\8dററിയàµ\86 à´¬à´¾à´§à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dനതലàµ\8dà´².\n\n; à´®àµ\80ഡിയവിà´\95àµ\8dà´\95à´¿ à´¤à´¾à´\99àµ\8dà´\95ൾ à´\85à´ªàµ\8dà´\97àµ\8dà´°àµ\87à´¡àµ\8d à´\9aàµ\86à´¯àµ\8dതതàµ\87 à´\89à´³àµ\8dà´³àµ\81à´µàµ\86à´\99àµ\8dà´\95ിൽ:\n: à´®àµ\80ഡിയവിà´\95àµ\8dà´\95à´¿ 1.24 à´\92à´ªàµ\8dà´ªà´\82 à´\85തിനàµ\81 à´¶àµ\87à´·à´®àµ\81à´³àµ\8dളവയàµ\81à´\82 à´\87ൻസàµ\8dà´±àµ\8dà´±àµ\8bൾ à´\9aàµ\86à´¯àµ\8dതിà´\9fàµ\8dà´\9fàµ\81à´³àµ\8dà´³ à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99ൾ à´¸àµ\8dവതàµ\87 à´¸à´\9càµ\8dà´\9cമാà´\95àµ\8dà´\95àµ\81à´¨àµ\8dനിലàµ\8dà´² ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\82 à´\93à´\9fàµ\8dà´\9fàµ\8bà´¡à´¿à´¸àµ\8dà´\95വറി à´¸à´¹à´¾à´¯à´\82] à´\95ാണàµ\81à´\95). à´\87ൻസàµ\8dà´±àµ\8dà´±àµ\8bൾ à´\9aàµ\86à´¯àµ\8dതിà´\9fàµ\8dà´\9fàµ\81à´³àµ\8dà´³ à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99ൾ à´¸à´\9càµ\8dà´\9cമാà´\95àµ\8dà´\95àµ\81à´¨àµ\8dനതിനായി à´\87നിà´\95àµ\8dà´\95àµ\8aà´\9fàµ\81à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´µà´°à´¿à´\95ൾ <code>LocalSettings.php</code> à´\8eà´¨àµ\8dനതിലàµ\8bà´\9fàµ\8dà´\9fàµ\8d à´ªà´\95ർതàµ\8dà´¤àµ\81à´\95:\n\n<pre dir=\"ltr\">$3</pre>\n\n; <code>LocalSettings.php</code> à´¤à´¾à´³à´¿àµ½ à´®à´¾à´±àµ\8dà´±à´\82 à´µà´°àµ\81à´¤àµ\8dതിയതàµ\87à´¯àµ\81à´³àµ\8dà´³àµ\81à´µàµ\86à´\99àµ\8dà´\95ിൽ:\n: à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99à´³àµ\81à´\9fàµ\86 à´ªàµ\87രിൽ à´\85à´\95àµ\8dഷരപിശà´\95àµ\81à´\95à´³àµ\81à´£àµ\8dà´\9fàµ\8bà´¯àµ\86à´¨àµ\8dà´¨àµ\8d à´\86വർതàµ\8dതിà´\9aàµ\8dà´\9aàµ\8d à´ªà´°à´¿à´¶àµ\8bധിà´\95àµ\8dà´\95àµ\81à´\95.",
+       "default-skin-not-found-no-skins": "à´\85à´¯àµ\8dà´¯àµ\8b! <code dir=\"ltr\"> $wgDefaultSkin</code> à´¨à´¿àµ¼à´µà´\9aà´¿à´\95àµ\8dà´\95à´ªàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fà´¤àµ\81à´ªàµ\8dà´°à´\95ാരമàµ\81à´³àµ\8dà´³ à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´µà´¿à´\95àµ\8dà´\95à´¿à´¯àµ\81à´\9fàµ\86 à´¸àµ\8dവതàµ\87à´¯àµ\81à´³àµ\8dà´³ à´¦àµ\83à´¶àµ\8dയരàµ\82പമായ <code>$1</code>, à´²à´­àµ\8dയമലàµ\8dà´².\n\nതാà´\99àµ\8dà´\95ൾ à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99à´³àµ\8aà´¨àµ\8dà´¨àµ\81à´\82 à´\87ൻസàµ\8dà´±àµ\8dà´±àµ\8bൾ à´\9aàµ\86à´¯àµ\8dതിà´\9fàµ\8dà´\9fà´¿à´²àµ\8dà´².\n\n; à´¤à´¾à´\99àµ\8dà´\95ൾ à´®àµ\80ഡിയവിà´\95àµ\8dà´\95à´¿ à´\87ൻസàµ\8dà´±àµ\8dà´±àµ\8bൾ à´\9aàµ\86à´¯àµ\8dതതàµ\87 à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´\85à´ªàµ\8dâ\80\8cà´\97àµ\8dà´°àµ\87à´¡àµ\8d à´\9aàµ\86à´¯àµ\8dതതàµ\87 à´\89à´³àµ\8dà´³àµ\81à´µàµ\86à´\99àµ\8dà´\95ിൽ:\n: à´\97à´¿à´±àµ\8dറിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\8d à´\85à´²àµ\8dà´²àµ\86à´\99àµ\8dà´\95ിൽ à´®à´±àµ\8dà´±àµ\86à´\99àµ\8dà´\95à´¿à´²àµ\81à´\82 à´®à´¾àµ¼à´\97àµ\8dà´\97à´\82 à´\89പയàµ\8bà´\97à´¿à´\9aàµ\8dà´\9aàµ\8d à´¸àµ\8bà´´àµ\8dà´¸àµ\8d à´\95àµ\8bà´¡àµ\8d à´¨àµ\87à´°à´¿à´\9fàµ\8dà´\9fàµ\8d à´\89പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95àµ\81à´\95യായിരിനàµ\8dà´¨àµ\86à´\99àµ\8dà´\95ിൽ à´\87à´¤àµ\8d à´¸à´\82ഭവിà´\9aàµ\8dà´\9aàµ\87à´\95àµ\8dà´\95à´¾à´\82. [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's à´¦àµ\83à´¶àµ\8dയരàµ\82à´ª à´¡à´¯à´±à´\95àµ\8dà´\9fറിയിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\8d], à´\87നിà´\95àµ\8dà´\95àµ\8aà´\9fàµ\81à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´®à´¾àµ¼à´\97àµ\8dà´\97à´\99àµ\8dà´\99ൾ à´\89പയàµ\8bà´\97à´¿à´\9aàµ\8dà´\9aàµ\8d à´\8fതാനà´\82 à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99ൾ à´\87ൻസàµ\8dà´±àµ\8dà´±àµ\8bൾ à´\9aàµ\86à´¯àµ\8dയാൻ à´¨àµ\8bà´\95àµ\8dà´\95àµ\81à´\95:\n:* [https://www.mediawiki.org/wiki/Download à´\9fാർബàµ\8bൾ à´\87ൻസàµ\8dà´±àµ\8dà´±àµ\8bളർ] à´¡àµ\97ൺലàµ\8bà´¡àµ\8d à´\9aàµ\86à´¯àµ\8dà´¯àµ\81à´\95, à´\85തിൽ à´¨à´¿à´°à´µà´§à´¿ à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99à´³àµ\81à´\82 à´\85à´¨àµ\81ബനàµ\8dà´§à´\99àµ\8dà´\99à´³àµ\81à´\82 à´\89ൾപàµ\8dà´ªàµ\86à´\9fàµ\81à´¤àµ\8dതിയിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81. à´\85തിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\81à´\82 à´¤à´¾à´\99àµ\8dà´\95ൾà´\95àµ\8dà´\95àµ\8d <code>skins/</code> à´¡à´¯à´±à´\95àµ\8dà´\9fറി à´ªà´\95ർതàµ\8dതാവàµ\81à´¨àµ\8dനതാണàµ\8d.\n:* à´\93à´°àµ\8bà´°àµ\8b à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99à´³àµ\81à´\82 à´\9fാർബàµ\8bà´³àµ\81à´\95ളായി à´\92à´±àµ\8dറയàµ\8dà´\95àµ\8dà´\95àµ\8aà´±àµ\8dറയàµ\8dà´\95àµ\8dà´\95àµ\81à´\82  [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org à´¸à´\82à´°à´\82à´­à´¤àµ\8dതിൽ] à´¨à´¿à´¨àµ\8dà´¨àµ\81à´\82 à´¡àµ\97ൺലàµ\8bà´¡àµ\8d à´\9aàµ\86à´¯àµ\8dയാവàµ\81à´¨àµ\8dനതാണàµ\8d.\n:* à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´®àµ\80ഡിയവിà´\95àµ\8dà´\95à´¿ à´\87ൻസàµ\8dà´±àµ\8dറലàµ\87à´·à´¨àµ\8dà´±àµ\86 <code dir=\"ltr\">skins/</code> à´¡à´¯à´±à´\95àµ\8dà´\9fറിയിലàµ\87à´\95àµ\8dà´\95àµ\8d à´\97à´¿à´±àµ\8dà´±àµ\8d à´\89പയàµ\8bà´\97à´¿à´\9aàµ\8dà´\9aàµ\8d <code>mediawiki/skins/*</code> à´±àµ\86à´ªàµ\8dà´ªàµ\8bസിറàµ\8dററിà´\95ളിലàµ\8aà´¨àµ\8dà´¨àµ\8d à´\95àµ\8dà´²àµ\8bൺ à´\9aàµ\86à´¯àµ\8dà´¯àµ\81à´\95.\n: à´¤à´¾à´\99àµ\8dà´\95à´³àµ\8aà´°àµ\81 à´®àµ\80ഡിയവിà´\95àµ\8dà´\95à´¿ à´¡à´µà´²à´ªàµ\8dപറാണàµ\86à´\99àµ\8dà´\95ിൽ à´\87à´¤àµ\8d à´¤à´¾à´\99àµ\8dà´\95à´³àµ\81à´\9fàµ\86 à´\97à´¿à´±àµ\8dà´±àµ\8d à´¡àµ\86à´ªàµ\8dà´ªàµ\8bസിറàµ\8dററിയàµ\86 à´¬à´¾à´§à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dനതലàµ\8dà´². à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\99àµ\8dà´\99ൾ à´\8eà´\99àµ\8dà´\99à´¨àµ\86 à´\95àµ\8dà´°à´®àµ\80à´\95à´°à´¿à´\95àµ\8dà´\95à´¾à´\82 à´\8eà´¨àµ\8dà´¨àµ\81à´\82 à´¸àµ\8dവതàµ\87 à´µàµ\87à´£àµ\8dà´\9fà´¤àµ\8d à´\8eà´\99àµ\8dà´\99à´¨àµ\86 à´¸à´\9càµ\8dà´\9cമാà´\95àµ\8dà´\95à´¾à´\82 à´\8eà´¨àµ\8dà´¨àµ\81à´\82 [https://www.mediawiki.org/wiki/Manual:Skin_configuration à´¦àµ\83à´¶àµ\8dയരàµ\82à´ªà´\82 à´¸à´\9càµ\8dà´\9cമാà´\95àµ\8dà´\95ൽ à´¸à´¹à´¾à´¯à´¿à´¯à´¿àµ½] à´\95ാണàµ\81à´\95.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (സജ്ജം)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''സജ്ജമല്ല''')",
        "mediastatistics": "മീഡിയ സ്ഥിതിവിവരക്കണക്കുകൾ",
index a1d4b66..304c515 100644 (file)
        "right-protect": "Cambié ij livej ëd protession e modifiché le pàgine protegiùe an cascada",
        "right-editprotected": "Modifiché le pàgine protegiùe con «{{int:protect-level-sysop}}»",
        "right-editsemiprotected": "Modifiché le pàgine protegiùe con «{{int:protect-level-autoconfirmed}}»",
+       "right-editcontentmodel": "Modifiché ël model ëd contnù ëd na pàgina",
        "right-editinterface": "Modifiché l'antërfacia utent",
        "right-editusercssjs": "Modifiché j'archivi CSS e JavaScript d'àutri utent",
        "right-editusercss": "Modifiché j'archivi CSS d'àutri utent",
        "action-viewmywatchlist": "vëdde la lista ëd la ròba ch'as ten sot-euj",
        "action-viewmyprivateinfo": "vëdde soe anformassion përsonaj",
        "action-editmyprivateinfo": "modifiché soe anformassion përsonaj",
+       "action-editcontentmodel": "modifiché ël model ëd contnù ëd na pàgina",
        "nchanges": "$1 {{PLURAL:$1|modìfica|modìfiche}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|da l'ùltima visita}}",
        "enhancedrc-history": "stòria",
        "specialpages-group-wiki": "Dat e utiss",
        "specialpages-group-redirects": "Pàgine speciaj ëd ridiression",
        "specialpages-group-spam": "Utiss contra la rumenta",
+       "specialpages-group-developer": "Utiss dël dësvlupador",
        "blankpage": "Pàgina bianca",
        "intentionallyblankpage": "Costa pàgina a l'é lassà veuida a pòsta.",
        "external_image_whitelist": "  #Lassé costa riga-sì pròpi 'me ch'a l'é<pre>\n#Buté ij fragment d'espression regolar (mach la part che a va antra le //) sì-sota\n#Coste-sì a saran confrontà con le liure dle figure esterne\n#Cole che as cobio a saran visualisà com figure, dësnò a sarà mach mostrà na liura a la figura\n#Le linie che a ancamin-o con # a saran tratà com coment\n#La lista a l'é indiferenta a minùscol o majùscol\n\n#Buté tùit ij fragment d'espression regolar sota sta linia-sì. Lassé costa linia pròpi com a l'é</pre>",
        "expand_templates_generate_xml": "Mosta l'erbo ëd parse XML",
        "expand_templates_generate_rawhtml": "Smon-e l'HTML sempi",
        "expand_templates_preview": "Preuva",
+       "expand_templates_preview_fail_html": "<em>Dagià che {{SITENAME}} a l'ha l'HTML ëd base abilità e a-i é staje na pèrdita ëd dàit ëd session, la previsualisassion a l'é stërmà për precaussion contra dj'atach ëd JavaScript.</em>\n\n<strong>Si cost a l'é un tentativ ëd previsualisassion legìtim, për piasì ch'a preuva torna.</strong>\nS'a marcia ancor nen, ch'a preuva a [[Special:UserLogout|seurte dal sistema]] e a rintré torna.",
+       "expand_templates_preview_fail_html_anon": "<em>Dagià che {{SITENAME}} a l'ha l'HTML ëd base abilità e chiel a l'é nen rintrà ant ël sistema, la previsualisassion a l'é stërmà coma precaussion contra j'atach ëd JavaScript.</em>\n\n<strong>Si cost a l'é un tentativ ëd previsualisassion legìtim, për piasì [[Special:UserLogin|ch'a rintra ant ël sistema]] e ch'a preuva torna.</strong>",
        "pagelanguage": "Seletor ëd lenga dla pàgina",
        "pagelang-name": "Pàgina",
        "pagelang-language": "Lenga",
        "log-name-pagelang": "Argistr dij cangiament ëd lenga",
        "log-description-pagelang": "Cost-sì a l'é n'argistr dij cangiament ant le lenghe dle pàgine.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|a l'ha cangià}} la lenga dla pàgina $3 da $4 a $5.",
-       "default-skin-not-found": "Tension! La pel predeterminà për soa wiki, definìa an <code dir=\"ltr\">$wgDefaultSkin</code> tanme <code>$1</code>, a l'é nen disponìbil.\n\nSoa anstalassion a smija anclude le pel sì-dapress. Ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_configuration ël manual ëd configurassion dle pel] për d'anformassion su coma abiliteje e serne cola predefinìa.\n\n$2\n\n; S'a l'ha pen-a anstalà MediaWiki:\n: A l'é probàbil che a l'abia anstalalo da git, o diretaman dal còdes sorgiss an n'àutra manera. A l'é normal. Ch'a preuva a anstalé dle pej da [https://www.mediawiki.org/wiki/Category:All_skins la lista dle pel ëd mediawiki.org], parèj:\n:* Dëscariand l' [https://www.mediawiki.org/wiki/Download archivi tar ëd l'anstalador], ch'a comprend vàire pel e estension. A peul copié e ancolé la lista dle <code>pel/</code> d'ambelelà.\n:* Clonand un dij depòsit <code>mediawiki/skins/*</code> via git ant la lista <code dir=\"ltr\">skins/</code> ëd soa anstalassion ëd MediaWiki.\n: Sòn a dovrìa nen antërferì con sò depòsit git si chiel a l'é un dësvlupador ëd MediaWiki.\n\n; S'a l'ha pen-a agiornà MediaWiki:\n: MediaWiki 1.24 e pi neuv a përmet pi nen an automàtich le pel anstalà (ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery manual an sla dëscuverta automàtica dle pel]). A peul copié le linie sì-dapress an <code>LocalSettings.php</code> për abilité tute le pel ch'a son anstalà al moment:\n\n<pre dir=\"ltr\">$3</pre>\n\n; S'a l'ha pen-a modificà <code>LocalSettings.php</code>:\n: Ch'a verìfica torna ël nòm ëd dle pej për evité ij boro.",
-       "default-skin-not-found-no-skins": "Darmagi! La pel dë stàndard për soa wiki, definìa da <code>$wgDefaultSkin</code> tanme <code>$1</code>, a l'é nen disponìbil.\n\nChiel a l'ha gnun-a pel anstalà.\n\n; S'a l'ha pen-a anstalà o agiornà MediaWiki:\n: A l'é probàbil ch'a l'abia falo da git, o diret dal còdes sorgiss an n'àutra manera. A l'é normal. MediaWiki 1.24 e pi recent doesn't a ancludo gnun-a pel ant ël depòsit prinsipal. Ch'a preuva a anstalé chèiche pel da [https://www.mediawiki.org/wiki/Category:All_skins la lista dle pel ëd mediawiki.org]:\n:* Dëscariand [https://www.mediawiki.org/wiki/Download l'archivi tar dl'anstalador], ch'a comprend vàire pel e estension. A peul copié e ancolé la lista <code>skins/</code> da là.\n:* Clonand un dij depòsit <code>mediawiki/skins/*</code> via git ant la lista <code dir=\"ltr\">skins/</code> ëd soa anstalassion ëd MediaWiki.\n: Fé sòn a dovrìa nen antërferì con sò depòsit git se chiel a l'é un dësvlupador ëd MediaWiki. Ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: ël manual dla configurassion dle pel] për d'anformassion su coma ativé le pel e serne cola predefinìa.",
+       "default-skin-not-found": "Tension! La pel predeterminà për soa wiki, definìa an <code dir=\"ltr\">$wgDefaultSkin</code> tanme <code>$1</code>, a l'é nen disponìbil.\n\nSoa anstalassion a smija anclude le pel sì-dapress. Ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_configuration ël manual ëd configurassion dle pel] për d'anformassion su coma abiliteje e serne cola predefinìa.\n\n$2\n\n; S'a l'ha pen-a anstalà MediaWiki:\n: A l'é probàbil che a l'abia anstalalo da git, o diretaman dal còdes sorgiss an n'àutra manera. A l'é normal. Ch'a preuva a anstalé dle pej da [https://www.mediawiki.org/wiki/Category:All_skins la lista dle pel ëd mediawiki.org], parèj:\n:* Dëscariand l' [https://www.mediawiki.org/wiki/Download archivi tar ëd l'anstalador], ch'a comprend vàire pel e estension. A peul copié e ancolé la lista dle <code>pel/</code> d'ambelelà.\n:* Dëscariand j'archivi tar për pel sìngole da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonand un dij depòsit <code>mediawiki/skins/*</code> via git ant la lista <code dir=\"ltr\">skins/</code> ëd soa anstalassion ëd MediaWiki.\n: Sòn a dovrìa nen antërferì con sò depòsit git si chiel a l'é un dësvlupador ëd MediaWiki.\n\n; S'a l'ha pen-a agiornà MediaWiki:\n: MediaWiki 1.24 e pi neuv a përmet pi nen an automàtich le pel anstalà (ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery manual an sla dëscuverta automàtica dle pel]). A peul copié le linie sì-dapress an <code>LocalSettings.php</code> për abilité tute le pel ch'a son anstalà al moment:\n\n<pre dir=\"ltr\">$3</pre>\n\n; S'a l'ha pen-a modificà <code>LocalSettings.php</code>:\n: Ch'a verìfica torna ël nòm ëd dle pej për evité ij boro.",
+       "default-skin-not-found-no-skins": "Darmagi! La pel dë stàndard për soa wiki, definìa da <code>$wgDefaultSkin</code> tanme <code>$1</code>, a l'é nen disponìbil.\n\nChiel a l'ha gnun-a pel anstalà.\n\n; S'a l'ha pen-a anstalà o agiornà MediaWiki:\n: A l'é probàbil ch'a l'abia falo da git, o diret dal còdes sorgiss an n'àutra manera. A l'é normal. MediaWiki 1.24 e pi recent doesn't a ancludo gnun-a pel ant ël depòsit prinsipal. Ch'a preuva a anstalé chèiche pel da [https://www.mediawiki.org/wiki/Category:All_skins la lista dle pel ëd mediawiki.org]:\n:* Dëscariand [https://www.mediawiki.org/wiki/Download l'archivi tar dl'anstalador], ch'a comprend vàire pel e estension. A peul copié e ancolé la lista <code>skins/</code> da là.\n:* Dëscariand j'archivi tar ëd pel sìngole da [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Clonand un dij depòsit <code>mediawiki/skins/*</code> via git ant la lista <code dir=\"ltr\">skins/</code> ëd soa anstalassion ëd MediaWiki.\n: Fé sòn a dovrìa nen antërferì con sò depòsit git se chiel a l'é un dësvlupador ëd MediaWiki. Ch'a vëdda [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: ël manual dla configurassion dle pel] për d'anformassion su coma ativé le pel e serne cola predefinìa.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (abilità)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''disabilità''')",
        "mediastatistics": "Statìstiche an sij mojen",
index 58445fd..55192df 100644 (file)
@@ -59,7 +59,8 @@
                        "לערי ריינהארט",
                        "아라",
                        "Abbedabb",
-                       "Platinawolf"
+                       "Platinawolf",
+                       "Albinomamba"
                ]
        },
        "tog-underline": "Stryk under länkar:",
        "log-name-pagelang": "Språkändringslogg",
        "log-description-pagelang": "Detta är en logg över ändringar i sidspråken.",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|ändrade}} sidspråket för $3 från $4 till $5.",
-       "default-skin-not-found": "Ojsan! Standardutseendet för din wiki, definierad i <code dir=\"ltr\">$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDin installation verkar innehålla följande utseenden. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur dessa aktiveras och hur standard väljs.\n\n$2\n\n; Om du precis installerat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är att förvänta. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klipp-och-klistra in <code>skins/</code>-katalogen från den.\n:* Klona ett av <code>mediawiki/skins/*</code>-centralförvaren in i <code dir=\"ltr\">skins/</code>-katalogen i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git-centralförvar om du är en MediaWiki-utvecklare.\n\n; Om du precis har uppgraderat MediaWiki:\n: MediaWiki 1.24 och nyare aktiverar ej längre automatiskt utseenden (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Automatisk identifiering av utseenden]). Du kan klistra in följande rader i <code>LocalSettings.php</code> för att aktivera alla för närvarande installerade utseenden:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Om du precis har ändrat i <code>LocalSettings.php</code>:\n: Dubbelkolla namnen för utseendena för att identifiera stavfel.",
+       "default-skin-not-found": "Ojsan! Standardutseendet för din wiki, definierad i <code dir=\"ltr\">$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDin installation verkar innehålla följande utseenden. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur du aktiverar dem och hur standard väljs.\n\n$2\n\n; Om du precis installerat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är normalt. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klippa och klistra in <code>skins/</code> katalogen från den.\n:* Ladda ner individuella skin tarbells från[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* Klona ett av <code>mediawiki/skins/*</code> centralförvaren in i <code dir=\"ltr\">skins/</code> arkiven i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git arkivet om du är en MediaWiki-utvecklare. \n\n; Om du precis har uppgraderat MediaWiki:\n: MediaWiki 1.24 och nyare aktiverar ej längre automatiskt installerade utseenden (se [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Automatisk identifiering av utseenden]). Du kan klistra in följande rader i <code>LocalSettings.php</code> för att aktivera alla för närvarande installerade utseenden:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Om du precis har modifierat <code>LocalSettings.php</code>:\n: Dubbelkolla namnen för utseendena för att identifiera stavfel.",
        "default-skin-not-found-no-skins": "Ojsan! Standardutseendet för din wiki, definierad i <code>$wgDefaultSkin</code> som <code>$1</code>, är inte tillgängligt.\n\nDu har inga installerade utseenden.\n\n; Om du precis installerat eller uppdaterat MediaWiki:\n: Du installerade troligen från git, eller direkt från källkoden via någon annan metod. Detta är att förvänta. MediaWiki 1.24 och nyare inkluderar inte några utseenden i det huvudsakliga centralförvaret. Försök att installera några utseenden från [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org:s utseendekatalog], genom att:\n:* Ladda ner [https://www.mediawiki.org/wiki/Download tarball-installeraren], som kommer med flera utseenden och tillägg. Du kan klipp-och-klistra in <code dir=\"ltr\">skins/</code>-katalogen från den.\n* Klona ett av <code>mediawiki/skins/*</code>-centralförvaren in i <code>skins/</code>-katalogen i din MediaWiki-installation.\n: Att göra detta borde inte påverka ditt git-centralförvar om du är en MediaWiki-utvecklare. Se [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manualen: Utseendeinställningar] för information om hur utseenden aktiveras och hur standardutseendet väljs.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiverad)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''inaktiverad''')",
index 73d8eef..ca9b49c 100644 (file)
        "history-feed-description": "ویکی پر اِس صفحہ کا تاریخچۂ نظرثانی",
        "history-feed-item-nocomment": "بہ $2 $1",
        "history-feed-empty": "درخواست شدہ صفحہ موجود نہیں.\nیا تو یہ ویکی سے حذف کیا گیا ہے اور یا اِس کا نام تبدیل کردیا گیا ہے.\nآپ متعلقہ نئے صفحات کیلئے [[Special:Search|ویکی پر تلاش]] کرسکتے ہیں.",
-       "rev-deleted-comment": "(تبصرہ ہٹایا گیا ہے)",
+       "rev-deleted-comment": "(تبصرہ حذف کی گيا ہے)",
+       "rev-deleted-user": "(صارف نام حذف کیا گيا ہے)",
        "rev-delundel": "دکھاؤ/چھپاؤ",
        "rev-showdeleted": "دکھاؤ",
        "revisiondelete": "نظرثانی حذف کریں/واپس لائیں",
        "revdelete-hide-comment": "ترمیمی تبصرہ چھپاؤ",
        "revdelete-hide-user": "ترمیم کار کا اسمِ صارف / آئی.پی پتہ چُھپاؤ",
        "revdelete-radio-same": "(تبدیل مت کرو)",
-       "revdelete-radio-set": "ہاں",
-       "revdelete-radio-unset": "نہیں",
+       "revdelete-radio-set": "پوشیدہ",
+       "revdelete-radio-unset": "ظاہر",
        "revdelete-unsuppress": "بحال شدہ نظرثانیوں پر پابندیاں ہٹاؤ",
        "revdelete-log": "وجہ",
        "revdelete-success": "'''رؤیتِ نظرثانی کی تجدید کامیابی سے ہوئی.'''",
        "prefs-rc": "حالیہ تبدیلیاں",
        "prefs-watchlist": "زیرِنظر فہرست",
        "prefs-watchlist-days": "زیرِنظر فہرست میں نظر آنے والے ایام:",
-       "prefs-watchlist-days-max": "Maximum $1 {{PLURAL:$1|day|days}}",
+       "prefs-watchlist-days-max": "زیادا سے زیادہ $1 {{PLURAL:$1|یوم|ایام}}",
        "prefs-watchlist-edits": "عریض زیرِنظرفہرست میں نظر آنے والی تبدیلیوں کی زیادہ سے زیادہ تعداد:",
        "prefs-watchlist-edits-max": "(زیادہ سے زیادہ تعداد: 1000)",
        "prefs-misc": "دیگر",
        "prefs-email": "اختیاراتِ برقی ڈاک",
        "prefs-rendering": "ظاہریت",
        "saveprefs": "محفوظ",
-       "restoreprefs": "تمام بےنقص ترتیبات بحال کیجئے",
+       "restoreprefs": "تمام بےنقص ترتیبات بحال کریں",
        "prefs-editing": "تدوین",
        "rows": "صفیں:",
        "columns": "قطاریں:",
        "timezoneregion-indian": "بحر ہند",
        "timezoneregion-pacific": "بحر الکاہل",
        "allowemail": "دوسرے صارفین کو برقی خظ لکھنے کا اختیار دیں",
-       "prefs-searchoptions": "اختÛ\8cاراتÙ\90 ØªÙ\84اش",
+       "prefs-searchoptions": "تلاش",
        "prefs-namespaces": "جائے نام",
        "default": "طے شدہ",
        "prefs-files": "مسلات",
        "prefs-custom-js": "خودساختہ JS",
        "prefs-emailconfirm-label": "برقی پتہ کی تصدیق:",
        "youremail": "٭ برقی خط",
-       "username": "اسÙ\85 ØµØ§Ø±Ù\81",
+       "username": "صارÙ\81:",
        "prefs-memberingroups": "{{PLURAL:$1|گروہ|گروہوں}} کا رُکن:",
        "prefs-registration": "وقتِ اندراج:",
        "yourrealname": "* اصلی نام",
        "gender-female": "عورت",
        "prefs-help-gender": "اختیاری: مصنع‌لطیف کی طرف سے صحیح‌الجنس تخاطب کیلئے استعمال ہوتا ہے. یہ معلومات عام ہوگی.",
        "email": "برقی خط",
-       "prefs-help-realname": "حقیقی نام اختیاری ہے.\nاگر آپ اِسے مہیّا کرتے ہیں، تو اِسے آپ کے کام کیلئے آپ کو انتساب دینے کیلئے استعمال کیا جائے گا.",
+       "prefs-help-realname": "حقیقی نام اختیاری ہے۔\nاگر آپ اسے مہیّا کرتے ہیں، تو اسے آپ کے کام کیلئے آپ کو انتساب دینے کیلئے استعمال کیا جائے گا۔",
        "prefs-help-email": "برقی ڈاک کا پتہ اختیاری ہے، لیکن یہ اُس وقت مفید ثابت ہوسکتا ہے جب آپ اپنا پارلفظ بھول گئے ہوں.",
        "prefs-help-email-others": "آپ یہ بھی منتخب کرسکتے ہیں کہ دوسرے صارفین آپ کے تبادلۂ خیال صفحہ پر ایک ربط کے ذریعے آپ کو برقی ڈاک بھیجیں.\nجب دوسرے صارفین آپ سے رابطہ کرتے ہیں تو آپ کا برقی ڈاک کا پتہ افشا نہیں کیا جاتا۔",
        "prefs-help-email-required": "برقی ڈاک پتہ چاہئے.",
        "userrights-lookup-user": "گروہائے صارف کا انتظام",
        "userrights-user-editname": "کوئی اسم‌صارف داخل کیجئے:",
        "editusergroup": "ترمیم گروہائے صارف",
-       "editinguser": "تبدÛ\8cÙ\84ئ Ø­Ù\82Ù\88Ù\82 برائے صارف '''[[صارف:$1|$1]]''' $2",
+       "editinguser": "تبدÛ\8cÙ\84ئ Ø§Ø®ØªÛ\8cارات برائے صارف '''[[صارف:$1|$1]]''' $2",
        "userrights-editusergroup": "ترمیم گروہائے صارف",
        "saveusergroups": "گروہائے صارف محفوظ",
        "userrights-groupsmember": "رکنِ:",
        "group-suppress": "نگران",
        "group-all": "(تمام)",
        "group-user-member": "صارف",
-       "group-autoconfirmed-member": "خودتصدیق شدہ صارف",
+       "group-autoconfirmed-member": "خودتوثیق شدہ صارف",
        "group-bot-member": "خودکار صارف",
        "group-sysop-member": "منتظم",
        "group-bureaucrat-member": "{{GENDER:$1|مامور اداری}}",
        "grouppage-autoconfirmed": "{{ns:project}}:خود توثیق شدہ صارف",
        "grouppage-bot": "{{ns:project}}:روبہ جات",
        "grouppage-sysop": "{{ns:project}}:منتظمین",
+       "grouppage-bureaucrat": "بیورو کریٹ",
        "right-upload": "ملفات زبراثقال (اپ لوڈ) کریں",
        "right-delete": "صفحات حذف کریں",
        "right-sendemail": "دیگر صارفین کو برقی ڈاک بھیجیں",
        "rcshowhideminor": "معمولی ترامیم $1",
        "rcshowhidebots": "خودکار صارف $1",
        "rcshowhideliu": "داخل شدہ صارف $1",
+       "rcshowhideliu-show": "دکھاؤ",
+       "rcshowhideliu-hide": "چھپائیں",
        "rcshowhideanons": "گمنام صارف $1",
+       "rcshowhideanons-show": "دکھاؤ",
+       "rcshowhideanons-hide": "چھپائیں",
        "rcshowhidepatr": "$1 مراجعت شدہ ترامیم",
+       "rcshowhidepatr-show": "دکھاؤ",
+       "rcshowhidepatr-hide": "چھپائيں",
        "rcshowhidemine": "ذاتی ترامیم $1",
+       "rcshowhidemine-show": "دکھاؤ",
+       "rcshowhidemine-hide": "چھپائیں",
        "rclinks": "آخری $2 روز میں ہونے والی $1 تبدیلیوں کا مشاہدہ کریں<br />$3",
        "diff": "فرق",
        "hist": "تاریخچہ",
        "minoreditletter": "م",
        "newpageletter": "نیا ..",
        "boteditletter": " خودکار",
+       "rc_categories_any": "کوئی بھی",
        "rc-enhanced-expand": "تفصیلات دِکھائیں (JavaScript درکار)",
        "rc-enhanced-hide": "تفصیلات چھپائیے",
        "recentchangeslinked": "متعلقہ تبدیلیاں",
        "license": "اجازہ:",
        "license-header": "اجازہ کاری",
        "listfiles": "فہرست فائل",
+       "listfiles_date": "تاریخ",
+       "listfiles_name": "نام",
+       "listfiles_user": "صارف",
+       "listfiles_size": "حجم",
+       "listfiles_description": "تفصیل",
+       "listfiles_count": "ورژن",
+       "listfiles-latestversion": "موجودہ ورژن",
+       "listfiles-latestversion-yes": "ہاں",
+       "listfiles-latestversion-no": "نہیں",
        "file-anchor-link": "مسل",
        "filehist": "ملف کی تاریخ",
        "filehist-help": "یہ دیکھنے کیلئے کہ کسی خاص وقت پر ملف کس طرح ظاہر ہوتا تھا اُس تاریخ یا وقت پر طق کیجئے۔",
+       "filehist-deleteall": "سب حذف",
+       "filehist-deleteone": "حذف",
        "filehist-revert": "رجوع",
        "filehist-current": "حالیہ",
        "filehist-datetime": "تاریخ/وقت",
        "filehist-thumb": "اظفورہ",
        "filehist-user": "صارف",
        "filehist-dimensions": "ابعاد",
+       "filehist-filesize": "تصویر کا حجم",
        "filehist-comment": "تبصرہ",
        "imagelinks": "ملف کا استعمال",
        "linkstoimage": "اِس ملف کے ساتھ درج ذیل {{PLURAL:$1|صفحہ مربوط ہے|$1 صفحات مربوط ہیں}}",
        "nolinkstoimage": "ایسے کوئی صفحات نہیں جو اس ملف (فائل) سے رابطہ رکھتے ہوں۔",
+       "filedelete-comment": "وجہ:",
+       "filedelete-submit": "حذف کریں",
+       "filedelete-success": " (\"اقدام مکمل ہوا\")۔",
+       "filedelete-success-old": " (\"اقدام مکمل ہوا\")",
        "download": "زیراثقال (ڈاؤن لوڈ)",
        "listredirects": "فہرست متبادل ربط",
        "unusedtemplates": "غیر استعمال شدہ سانچے",
+       "unusedtemplateswlh": "دیگر روابط",
        "randompage": "بےترتیب صفحہ",
        "randomincategory-category": "زمرہ:",
        "statistics": "اعداد و شمار",
        "unusedimages": "غیر استعمال شدہ فائلیں",
        "wantedcategories": "طلب شدہ زمرہ جات",
        "wantedpages": "درخواست شدہ مضامین",
+       "wantedfiles": "مطلوب تصاویر",
+       "wantedtemplates": "مطلوب سانچے",
        "mostlinked": "سب سے زیادہ ربط والے مضامین",
        "mostlinkedcategories": "سب سے زیادہ ربط والے زمرہ جات",
        "mostcategories": "سب سے زیادہ زمرہ جات والے مضامین",
        "shortpages": "چھوٹے صفحات",
        "longpages": "طویل ترین صفحات",
        "deadendpages": "مردہ صفحات",
+       "protectedpages": "محفوظ شدہ صفحات",
+       "protectedpages-reason": "وجہ",
+       "protectedpages-unknown-timestamp": "نامعلوم",
+       "protectedpages-unknown-performer": "نامعلوم صارف",
        "listusers": "فہرست ارکان",
        "usercreated": "{{GENDER:$3|تخلیق شدہ}}  بتاریخ $1 بوقت $2",
        "newpages": "جدید صفحات",
+       "newpages-username": "صارف نام:",
        "ancientpages": "قدیم ترین صفحات",
        "move": "منتقـل",
        "movethispage": "یہ صفحہ منتقل کیجئے",
        "pager-newer-n": "{{PLURAL:$1|جدید 1|جدید $1}}",
        "pager-older-n": "{{PLURAL:$1|پُرانا 1|پُرانے $1}}",
+       "apihelp": "معاونت اے پی آئی",
+       "apihelp-no-such-module": "ماڈیول \"$1\" نہیں ملا",
        "booksources": "کتابی وسائل",
        "booksources-search-legend": "تلاش برائے مآخذاتِ کتاب",
+       "booksources-search": "تلاش",
        "specialloguserlabel": "صارف:",
        "speciallogtitlelabel": "عنوان:",
        "log": "نوشتہ جات",
        "allpagesprefix": "مطلوبہ سابقہ سے شروع ہونے والے صفحات کی نمائش:",
        "categories": "زمرہ",
        "categoriespagetext": "مندرجہ ذیل زمرہ جات اس وکی میں موجود ہیں۔\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
+       "linksearch-ok": "تلاش",
        "linksearch-line": "$1 مربوط ہے $2 سے",
+       "listusers-submit": "دکھاؤ",
+       "listusers-noresult": "یہ صارف نہیں ملا",
+       "activeusers": "متحرک صارفین کی فہرست",
+       "activeusers-hidebots": "پوشیدہ خود کار صارف",
+       "activeusers-hidesysops": "پوشیدہ منتظمین",
+       "activeusers-noresult": "یہ صارف نہیں مل سکا",
+       "listgrouprights-rights": "اختیارات",
        "listgrouprights-members": "(اراکین کی فہرست)",
+       "listgrouprights-namespaceprotection-namespace": "فضائے نام",
        "mailnologintext": "دیگر ارکان کو برقی خط ارسال کرنے کیلیۓ لازم ہے کہ آپ [[Special:UserLogin|داخل شدہ]] حالت میں ہوں اور آپ کی [[Special:Preferences|ترجیحات]] ایک درست برقی خط کا پتا درج ہو۔",
        "emailuser": "صارف کو برقی خط لکھیں",
+       "emailuser-title-notarget": "ای میل صارف",
+       "emailpage": "صارف کو برقی خط لکھیں",
        "defemailsubject": "{{SITENAME}} سے برقی خط",
-       "noemailtext": "اس صارف نے برقی خط کے لیے کوئی پتہ فراہم نہیں کیا، یا یہ چاہتا ہے کا اس سے کوئی صارف رابطہ نہ کرے۔",
-       "emailsubject": "عنوان",
+       "noemailtext": "اس صارف نے برقی خط کے لیے پتہ فراہم نہیں کیا، یا یہ چاہتا ہے کا اس سے کوئی صارف رابطہ نہ کرے۔",
+       "emailusername": "صارف نام:",
+       "emailsubject": "موضوع:",
        "emailmessage": "پیغام:",
+       "emailsend": "بھیجیں",
        "watchlist": "میری زیرنظرفہرست",
        "mywatchlist": "میری زیرنظرفہرست",
        "watchlistfor2": "براۓ $1 ($2)",
        "whatlinkshere-hidelinks": "روابط $1",
        "whatlinkshere-hideimages": "روابطِ تصاویر $1",
        "whatlinkshere-filters": "فلٹرذ",
-       "blockip": "داخلہ ممنوع براۓ صارف",
+       "blockip": "داخلہ ممنوع برائے صارف",
+       "blockip-legend": "ممنوع کردہ صارفین",
        "ipbreason": "وجہ:",
        "ipbsubmit": "اس صارف کا داخلہ ممنوع کریں",
        "ipboptions": "2 گھنٹے:2 hours,1 یوم:1 day,3 ایام:3 days,1 ہفتہ:1 week,2 ہفتے:2 weeks,1 مہینہ:1 month,3 مہینے:3 months,6 مہینے:6 months,1 سال:1 year,لامحدود:infinite",
index 31be674..88fadab 100644 (file)
        "searchprofile-advanced-tooltip": "搜尋自訂命名空間",
        "search-result-size": "$1 ($2 個字)",
        "search-result-category-size": "$1 位成員 ($2 個子分類,$3 個檔案)",
-       "search-redirect": "(重新導向 $1)",
+       "search-redirect": "(重新導向自 $1 )",
        "search-section": "(章節 $1)",
        "search-category": "(分類 $1)",
        "search-file-match": "(符合檔案內容)",
        "tooltip-search": "搜尋 {{SITENAME}}",
        "tooltip-search-go": "若與此名稱相符的頁面存在,前往該頁面",
        "tooltip-search-fulltext": "搜尋使用此文字的頁面",
-       "tooltip-p-logo": "å\8f\83è§\80主é \81é\9d¢",
-       "tooltip-n-mainpage": "å\8f\83è§\80主é \81é\9d¢",
-       "tooltip-n-mainpage-description": "å\8f\83è§\80主é \81é\9d¢",
-       "tooltip-n-portal": "關於本專案您可以做什麼、哪裡可以找到事情",
+       "tooltip-p-logo": "å\89\8då¾\80主é \81é\9d¢",
+       "tooltip-n-mainpage": "å\89\8då¾\80主é \81é\9d¢",
+       "tooltip-n-mainpage-description": "å\89\8då¾\80主é \81é\9d¢",
+       "tooltip-n-portal": "關於本專案您可以做什麼、哪裡可以找到事情",
        "tooltip-n-currentevents": "尋找新聞中最新動態的背景資訊",
        "tooltip-n-recentchanges": "列出此 Wiki 中的近期變更清單",
        "tooltip-n-randompage": "隨機進入一個頁面",
diff --git a/maintenance/removeInvalidEmails.php b/maintenance/removeInvalidEmails.php
new file mode 100644 (file)
index 0000000..7ff69a1
--- /dev/null
@@ -0,0 +1,78 @@
+<?php
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * A script to remove emails that are invalid from
+ * the user_email column of the user table. Emails
+ * are validated before users can add them, but
+ * this was not always the case so older users may
+ * have invalid ones.
+ *
+ * By default it does a dry-run, pass --commit
+ * to actually update the database.
+ */
+class RemoveInvalidEmails extends Maintenance {
+
+       private $commit = false;
+
+       public function __construct() {
+               parent::__construct();
+               $this->addOption( 'commit', 'Whether to actually update the database', false, false );
+               $this->setBatchSize( 500 );
+       }
+       public function execute() {
+               $this->commit = $this->hasOption( 'commit' );
+               $dbr = $this->getDB( DB_SLAVE );
+               $dbw = $this->getDB( DB_MASTER );
+               $lastId = 0;
+               do {
+                       $rows = $dbr->select(
+                               'user',
+                               array( 'user_id', 'user_email' ),
+                               array(
+                                       'user_id > ' . $dbr->addQuotes( $lastId ),
+                                       'user_email != ""',
+                                       'user_email_authenticated IS NULL'
+                               ),
+                               __METHOD__,
+                               array( 'LIMIT' => $this->mBatchSize )
+                       );
+                       $count = $rows->numRows();
+                       $badIds = array();
+                       foreach ( $rows as $row ) {
+                               if ( !Sanitizer::validateEmail( trim( $row->user_email ) ) ) {
+                                       $this->output( "Found bad email: {$row->user_email} for user #{$row->user_id}\n" );
+                                       $badIds[] = $row->user_id;
+                                       if ( $row->user_id > $lastId ) {
+                                               $lastId = $row->user_id;
+                                       }
+                               }
+                       }
+
+                       if ( $badIds ) {
+                               $badCount = count( $badIds );
+                               if ( $this->commit ) {
+                                       $this->output( "Removing $badCount emails from the database.\n" );
+                                       $dbw->update(
+                                               'user',
+                                               array( 'user_email' => '' ),
+                                               array( 'user_id' => $badIds ),
+                                               __METHOD__
+                                       );
+                                       foreach ( $badIds as $badId ) {
+                                               User::newFromId( $badId )->invalidateCache();
+                                       }
+                                       wfWaitForSlaves();
+                               } else {
+                                       $this->output( "Would have removed $badCount emails from the database.\n" );
+
+                               }
+                       }
+               } while ( $count !== 0 );
+               $this->output( "Done.\n" );
+       }
+}
+
+$maintClass = 'RemoveInvalidEmails';
+require_once RUN_MAINTENANCE_IF_MAIN;
index b930f42..4e3fb5a 100644 (file)
@@ -27,7 +27,7 @@
 
 ini_set( 'zlib.output_compression', 'off' );
 
-$wgEnableProfileInfo = $wgProfileToDatabase = false;
+$wgEnableProfileInfo = false;
 require __DIR__ . '/includes/WebStart.php';
 
 header( 'Content-Type: text/html; charset=utf-8' );
@@ -149,8 +149,8 @@ $dbr = wfGetDB( DB_SLAVE );
 
 if ( !$dbr->tableExists( 'profiling' ) ) {
        echo '<p>No <code>profiling</code> table exists, so we can\'t show you anything.</p>'
-               . '<p>If you want to log profiling data, enable <code>$wgProfileToDatabase</code>'
-               . ' in your LocalSettings.php and run <code>maintenance/update.php</code> to'
+               . '<p>If you want to log profiling data, enable <code>$wgProfiler[\'output\'] = \'db\'</code>'
+               . ' in your StartProfiler.php and run <code>maintenance/update.php</code> to'
                . ' create the profiling table.'
                . '</body></html>';
        exit( 1 );
index c3e80fe..f1c6ea3 100644 (file)
@@ -15,6 +15,8 @@
        "ooui-outline-control-move-down": "Baixa element",
        "ooui-outline-control-move-up": "Puja element",
        "ooui-toolbar-more": "Més",
+       "ooui-toolgroup-expand": "Més",
+       "ooui-toolgroup-collapse": "Menys",
        "ooui-dialog-process-dismiss": "Descarta",
        "ooui-dialog-process-retry": "Torneu-ho a provar"
 }
index c3724cf..9118898 100644 (file)
@@ -11,6 +11,8 @@
        "ooui-outline-control-move-up": "Premjesti stavku gore",
        "ooui-outline-control-remove": "Ukloni",
        "ooui-toolbar-more": "Više",
+       "ooui-toolgroup-expand": "Više",
+       "ooui-toolgroup-collapse": "Manje",
        "ooui-dialog-message-accept": "U redu",
        "ooui-dialog-message-reject": "Odustani",
        "ooui-dialog-process-error": "Nešto je pošlo po zlu",
index 1099933..2756079 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.2.3
+ * OOjs UI v0.2.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-11-26T23:37:12Z
+ * Date: 2014-12-02T18:45:30Z
  */
 .oo-ui-progressBarWidget-slide-frames from {
        margin-left: -40%;
index ad75557..bf7e39f 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.2.3
+ * OOjs UI v0.2.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-11-26T23:37:00Z
+ * Date: 2014-12-02T18:45:19Z
  */
 /* Instantiation */
 
index aa2dfb4..7d4acb5 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.2.3
+ * OOjs UI v0.2.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-11-26T23:37:12Z
+ * Date: 2014-12-02T18:45:30Z
  */
 .oo-ui-progressBarWidget-slide-frames from {
        margin-left: -40%;
index d8d3653..e360991 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.2.3
+ * OOjs UI v0.2.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-11-26T23:37:12Z
+ * Date: 2014-12-02T18:45:30Z
  */
 .oo-ui-progressBarWidget-slide-frames from {
        margin-left: -40%;
index 89338d6..875dab4 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.2.3
+ * OOjs UI v0.2.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-11-26T23:37:00Z
+ * Date: 2014-12-02T18:45:19Z
  */
 /**
  * @class
index d8aedd3..644eadc 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.2.3
+ * OOjs UI v0.2.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-11-26T23:37:12Z
+ * Date: 2014-12-02T18:45:30Z
  */
 .oo-ui-progressBarWidget-slide-frames from {
        margin-left: -40%;
index d42139e..1209434 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.2.3
+ * OOjs UI v0.2.4
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2014 OOjs Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2014-11-26T23:37:00Z
+ * Date: 2014-12-02T18:45:19Z
  */
 ( function ( OO ) {
 
@@ -1751,25 +1751,46 @@ OO.ui.Window.prototype.getSize = function () {
 };
 
 /**
- * Get the height of the dialog contents.
+ * Disable transitions on window's frame for the duration of the callback function, then enable them
+ * back.
  *
- * @return {number} Content height
+ * @private
+ * @param {Function} callback Function to call while transitions are disabled
  */
-OO.ui.Window.prototype.getContentHeight = function () {
+OO.ui.Window.prototype.withoutSizeTransitions = function ( callback ) {
        // Temporarily resize the frame so getBodyHeight() can use scrollHeight measurements.
        // Disable transitions first, otherwise we'll get values from when the window was animating.
-       var bodyHeight, oldHeight, oldTransition,
+       var oldTransition,
                styleObj = this.$frame[0].style;
        oldTransition = styleObj.transition || styleObj.OTransition || styleObj.MsTransition ||
                styleObj.MozTransition || styleObj.WebkitTransition;
        styleObj.transition = styleObj.OTransition = styleObj.MsTransition =
                styleObj.MozTransition = styleObj.WebkitTransition = 'none';
-       oldHeight = styleObj.height;
-       styleObj.height = '1px';
-       bodyHeight = this.getBodyHeight();
-       styleObj.height = oldHeight;
+       callback();
+       // Force reflow to make sure the style changes done inside callback really are not transitioned
+       this.$frame.height();
        styleObj.transition = styleObj.OTransition = styleObj.MsTransition =
                styleObj.MozTransition = styleObj.WebkitTransition = oldTransition;
+};
+
+/**
+ * Get the height of the dialog contents.
+ *
+ * @return {number} Content height
+ */
+OO.ui.Window.prototype.getContentHeight = function () {
+       var bodyHeight,
+               win = this,
+               styleObj = this.$frame[0].style;
+
+       // Temporarily resize the frame so getBodyHeight() can use scrollHeight measurements.
+       // Disable transitions first, otherwise we'll get values from when the window was animating.
+       this.withoutSizeTransitions( function () {
+               var oldHeight = styleObj.height;
+               styleObj.height = '1px';
+               bodyHeight = win.getBodyHeight();
+               styleObj.height = oldHeight;
+       } );
 
        return Math.round(
                // Add buffer for border
@@ -1965,17 +1986,31 @@ OO.ui.Window.prototype.setSize = function ( size ) {
  * @chainable
  */
 OO.ui.Window.prototype.setDimensions = function ( dim ) {
-       // Apply width before height so height is not based on wrapping content using the wrong width
+       var height,
+               win = this,
+               styleObj = this.$frame[0].style;
+
+       // Calculate the height we need to set using the correct width
+       if ( dim.height === undefined ) {
+               this.withoutSizeTransitions( function () {
+                       var oldWidth = styleObj.width;
+                       win.$frame.css( 'width', dim.width || '' );
+                       height = win.getContentHeight();
+                       styleObj.width = oldWidth;
+               } );
+       } else {
+               height = dim.height;
+       }
+
        this.$frame.css( {
                width: dim.width || '',
                minWidth: dim.minWidth || '',
-               maxWidth: dim.maxWidth || ''
-       } );
-       this.$frame.css( {
-               height: ( dim.height !== undefined ? dim.height : this.getContentHeight() ) || '',
+               maxWidth: dim.maxWidth || '',
+               height: height || '',
                minHeight: dim.minHeight || '',
                maxHeight: dim.maxHeight || ''
        } );
+
        return this;
 };
 
@@ -5924,6 +5959,20 @@ OO.ui.MessageDialog.static.actions = [
 
 /* Methods */
 
+/**
+ * @inheritdoc
+ */
+OO.ui.MessageDialog.prototype.setManager = function ( manager ) {
+       OO.ui.MessageDialog.super.prototype.setManager.call( this, manager );
+
+       // Events
+       this.manager.connect( this, {
+               resize: 'onResize'
+       } );
+
+       return this;
+};
+
 /**
  * @inheritdoc
  */
@@ -5932,6 +5981,18 @@ OO.ui.MessageDialog.prototype.onActionResize = function ( action ) {
        return OO.ui.MessageDialog.super.prototype.onActionResize.call( this, action );
 };
 
+/**
+ * Handle window resized events.
+ */
+OO.ui.MessageDialog.prototype.onResize = function () {
+       var dialog = this;
+       dialog.fitActions();
+       // Wait for CSS transition to finish and do it again :(
+       setTimeout( function () {
+               dialog.fitActions();
+       }, 300 );
+};
+
 /**
  * Toggle action layout between vertical and horizontal.
  *
@@ -6093,10 +6154,11 @@ OO.ui.MessageDialog.prototype.attachActions = function () {
                special.primary.toggleFramed( false );
        }
 
-       this.manager.updateWindowSize( this );
-       this.fitActions();
-
-       this.$body.css( 'bottom', this.$foot.outerHeight( true ) );
+       if ( !this.isOpening() ) {
+               // If the dialog is currently opening, this will be called automatically soon.
+               // This also calls #fitActions.
+               this.manager.updateWindowSize( this );
+       }
 };
 
 /**
@@ -6106,6 +6168,7 @@ OO.ui.MessageDialog.prototype.attachActions = function () {
  */
 OO.ui.MessageDialog.prototype.fitActions = function () {
        var i, len, action,
+               previous = this.verticalActionLayout,
                actions = this.actions.get();
 
        // Detect clipping
@@ -6117,6 +6180,12 @@ OO.ui.MessageDialog.prototype.fitActions = function () {
                        break;
                }
        }
+
+       if ( this.verticalActionLayout !== previous ) {
+               this.$body.css( 'bottom', this.$foot.outerHeight( true ) );
+               // We changed the layout, window height might need to be updated.
+               this.manager.updateWindowSize( this );
+       }
 };
 
 /**
@@ -9874,12 +9943,13 @@ OO.ui.TextInputWidget.prototype.setReadOnly = function ( state ) {
 OO.ui.TextInputWidget.prototype.adjustSize = function () {
        var $clone, scrollHeight, innerHeight, outerHeight, maxInnerHeight, measurementError, idealHeight;
 
-       if ( this.multiline && this.autosize ) {
+       if ( this.multiline && this.autosize && this.$input.val() !== this.valCache ) {
                $clone = this.$input.clone()
                        .val( this.$input.val() )
                        // Set inline height property to 0 to measure scroll height
-                       .css( { height: 0 } )
+                       .css( 'height', 0 )
                        .insertAfter( this.$input );
+               this.valCache = this.$input.val();
                scrollHeight = $clone[0].scrollHeight;
                // Remove inline height property to measure natural heights
                $clone.css( 'height', '' );
index 77b542f..d4151a5 100644 (file)
@@ -6,15 +6,6 @@
  */
 class JsonContentTest extends MediaWikiLangTestCase {
 
-       /**
-        * @dataProvider provideValidConstruction
-        */
-       public function testValidConstruct( $text, $modelId, $isValid, $expected ) {
-               $obj = new JsonContent( $text, $modelId );
-               $this->assertEquals( $isValid, $obj->isValid() );
-               $this->assertEquals( $expected, $obj->getJsonData() );
-       }
-
        public static function provideValidConstruction() {
                return array(
                        array( 'foo', CONTENT_MODEL_JSON, false, null ),
@@ -24,11 +15,12 @@ class JsonContentTest extends MediaWikiLangTestCase {
        }
 
        /**
-        * @dataProvider provideDataToEncode
+        * @dataProvider provideValidConstruction
         */
-       public function testBeautifyUsesFormatJson( $data ) {
-               $obj = new JsonContent( FormatJson::encode( $data ) );
-               $this->assertEquals( FormatJson::encode( $data, true ), $obj->beautifyJSON() );
+       public function testValidConstruct( $text, $modelId, $isValid, $expected ) {
+               $obj = new JsonContent( $text, $modelId );
+               $this->assertEquals( $isValid, $obj->isValid() );
+               $this->assertEquals( $expected, $obj->getJsonData() );
        }
 
        public static function provideDataToEncode() {
@@ -41,6 +33,14 @@ class JsonContentTest extends MediaWikiLangTestCase {
                );
        }
 
+       /**
+        * @dataProvider provideDataToEncode
+        */
+       public function testBeautifyUsesFormatJson( $data ) {
+               $obj = new JsonContent( FormatJson::encode( $data ) );
+               $this->assertEquals( FormatJson::encode( $data, true ), $obj->beautifyJSON() );
+       }
+
        /**
         * @dataProvider provideDataToEncode
         */
@@ -67,16 +67,6 @@ class JsonContentTest extends MediaWikiLangTestCase {
                        ->getMock();
        }
 
-       /**
-        * @dataProvider provideDataAndParserText
-        */
-       public function testFillParserOutput( $data, $expected ) {
-               $obj = new JsonContent( FormatJson::encode( $data ) );
-               $parserOutput = $obj->getParserOutput( $this->getMockTitle(), null, null, true );
-               $this->assertInstanceOf( 'ParserOutput', $parserOutput );
-               $this->assertEquals( $expected, $parserOutput->getText() );
-       }
-
        public static function provideDataAndParserText() {
                return array(
                        array(
@@ -111,4 +101,14 @@ class JsonContentTest extends MediaWikiLangTestCase {
                        ),
                );
        }
+
+       /**
+        * @dataProvider provideDataAndParserText
+        */
+       public function testFillParserOutput( $data, $expected ) {
+               $obj = new JsonContent( FormatJson::encode( $data ) );
+               $parserOutput = $obj->getParserOutput( $this->getMockTitle(), null, null, true );
+               $this->assertInstanceOf( 'ParserOutput', $parserOutput );
+               $this->assertEquals( $expected, $parserOutput->getText() );
+       }
 }
index 98b4ca0..588e544 100644 (file)
@@ -272,7 +272,7 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
         * @todo Currently only checks list of tables
         */
        public function testUpgrades() {
-               global $IP, $wgVersion, $wgProfileToDatabase;
+               global $IP, $wgVersion, $wgProfiler;
 
                // Versions tested
                $versions = array(
@@ -291,7 +291,18 @@ class DatabaseSqliteTest extends MediaWikiTestCase {
 
                $currentDB = new DatabaseSqliteStandalone( ':memory:' );
                $currentDB->sourceFile( "$IP/maintenance/tables.sql" );
-               if ( $wgProfileToDatabase ) {
+
+               $profileToDb = false;
+               if ( isset( $wgProfiler['output'] ) ) {
+                       $out = $wgProfiler['output'];
+                       if ( $out === 'db' ) {
+                               $profileToDb = true;
+                       } elseif( is_array( $out ) && in_array( 'db', $out ) ) {
+                               $profileToDb = true;
+                       }
+               }
+
+               if ( $profileToDb ) {
                        $currentDB->sourceFile( "$IP/maintenance/sqlite/archives/patch-profiling.sql" );
                }
                $currentTables = $this->getTables( $currentDB );