WikidataBuilder has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/344589 )

Change subject: New Wikidata Build - 2017-03-24T10:00:01+0000
......................................................................

New Wikidata Build - 2017-03-24T10:00:01+0000

Change-Id: Ibc141d58cad359370c7149ca0fe44cee03bba53a
---
M composer.lock
M extensions/Wikibase/client/i18n/ar.json
M extensions/Wikibase/client/i18n/de.json
M extensions/Wikibase/client/i18n/fr.json
M extensions/Wikibase/client/i18n/gl.json
M extensions/Wikibase/client/i18n/he.json
M extensions/Wikibase/client/i18n/it.json
M extensions/Wikibase/client/i18n/qqq.json
M extensions/Wikibase/client/i18n/zh-hans.json
M 
extensions/Wikibase/client/includes/Hooks/ChangesListSpecialPageHookHandlers.php
M extensions/Wikibase/client/includes/Hooks/MagicWordHookHandlers.php
M extensions/Wikibase/repo/i18n/gl.json
A extensions/Wikibase/repo/tests/testDispatchCoordinator.php
M extensions/WikimediaBadges/package.json
M vendor/composer/installed.json
15 files changed, 300 insertions(+), 76 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikidata 
refs/changes/89/344589/1

diff --git a/composer.lock b/composer.lock
index e57fab6..322a5ae 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1556,12 +1556,12 @@
             "source": {
                 "type": "git",
                 "url": 
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git";,
-                "reference": "f37e244cd624ead83bc9552ff0b5d4c23880948e"
+                "reference": "eb0756f3f2d86da9f8ce684234a59b04fedea5c8"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/f37e244cd624ead83bc9552ff0b5d4c23880948e";,
-                "reference": "f37e244cd624ead83bc9552ff0b5d4c23880948e",
+                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/eb0756f3f2d86da9f8ce684234a59b04fedea5c8";,
+                "reference": "eb0756f3f2d86da9f8ce684234a59b04fedea5c8",
                 "shasum": ""
             },
             "require": {
@@ -1635,7 +1635,7 @@
                 "wikibaserepo",
                 "wikidata"
             ],
-            "time": "2017-03-22 22:11:13"
+            "time": "2017-03-24 03:39:57"
         },
         {
             "name": "wikibase/wikimedia-badges",
@@ -1643,7 +1643,7 @@
             "source": {
                 "type": "git",
                 "url": 
"https://gerrit.wikimedia.org/r/mediawiki/extensions/WikimediaBadges";,
-                "reference": "d9546983a02b4b693f66f095916a0b3e043722c4"
+                "reference": "d4a58bada110d31d1a5c6a9a02b2778950c4cd27"
             },
             "require": {
                 "php": ">=5.3.0"
@@ -1677,7 +1677,7 @@
             "support": {
                 "irc": "irc://irc.freenode.net/wikidata"
             },
-            "time": "2017-02-20 23:04:34"
+            "time": "2017-03-23 18:33:02"
         },
         {
             "name": "wikimedia/assert",
diff --git a/extensions/Wikibase/client/i18n/ar.json 
b/extensions/Wikibase/client/i18n/ar.json
index ada4bd7..ccc0d58 100644
--- a/extensions/Wikibase/client/i18n/ar.json
+++ b/extensions/Wikibase/client/i18n/ar.json
@@ -85,6 +85,7 @@
        "wikibase-rc-show-wikidata-pref": "إظهار تعديلات {{WBREPONAME}} في صفحة 
أحدث التغييرات",
        "wikibase-rc-wikibase-edit-letter": "د",
        "wikibase-rc-wikibase-edit-title": "تعديل {{WBREPONAME}}",
+       "wikibase-rcfilters-hide-wikibase-label": "تعديلات {{WBREPONAME}}",
        "wikibase-replicationnote": "قد يلزم وقت لتظهر التعديلات في جميع 
الويكيات.",
        "wikibase-watchlist-show-changes-pref": "إظهار تعديلات {{WBREPONAME}} 
في قائمة مراقبتك",
        "wikibase-error-deserialize-error": "فشل إلغاء تسلسل البيانات.",
diff --git a/extensions/Wikibase/client/i18n/de.json 
b/extensions/Wikibase/client/i18n/de.json
index 3503c63..3abb7da 100644
--- a/extensions/Wikibase/client/i18n/de.json
+++ b/extensions/Wikibase/client/i18n/de.json
@@ -73,6 +73,12 @@
        "wikibase-rc-show-wikidata-pref": "Bearbeitungen auf {{WBREPONAME}} in 
den „Letzten Änderungen“ anzeigen",
        "wikibase-rc-wikibase-edit-letter": "D",
        "wikibase-rc-wikibase-edit-title": "{{WBREPONAME}}-Bearbeitung",
+       "wikibase-rcfilters-hide-wikibase-label": 
"{{WBREPONAME}}-Bearbeitungen",
+       "wikibase-rcfilters-hide-wikibase-description": "Bearbeitungen, die von 
{{WBREPONAME}} abstammen.",
+       "wikibase-rcfilters-hide-wikibase-conflicts-ores": "Dieser Filter 
befindet sich in Konflikt mit einem oder mehreren Beitragqualitäts- oder 
Benutzerabsichtfiltern. Qualitäts- und Absichtprognosen sind für 
{{WBREPONAME}}-Bearbeitungen nicht verfügbar.",
+       "wikibase-rcfilters-hide-wikibase-conflicts-ores-global": "Der Filter 
„{{WBREPONAME}}-Bearbeitungen“ befindet sich in Konflikt mit einem oder 
mehreren Beitragqualitäts- oder Benutzerabsichtfiltern. Qualitäts- und 
Absichtprognosen sind für {{WBREPONAME}}-Bearbeitungen nicht verfügbar. Die 
kollidierenden Filter sind oben im Bereich der aktiven Filter markiert.",
+       "wikibase-rcfilters-damaging-conflicts-hide-wikibase": 
"Beitragqualitätsprognosen sind für bestimmte Änderungstypen nicht verfügbar, 
so dass sich dieser Filter in Konflikt mit {{PLURAL:$2|dem folgenden 
Änderungstypfilter|den folgenden Änderungstypfiltern}} befindet: $1",
+       "wikibase-rcfilters-goodfaith-conflicts-hide-wikibase": 
"Benutzerabsichtprognosen sind für bestimmte Änderungstypen nicht verfügbar, so 
dass sich dieser Filter in Konflikt mit {{PLURAL:$2|dem folgenden 
Änderungstypfilter|den folgenden Änderungstypfiltern}} befindet: $1",
        "wikibase-replicationnote": "Bitte bedenke, dass es einige Minuten 
dauern kann, bis die Änderungen auf allen Wikis sichtbar sind.",
        "wikibase-watchlist-show-changes-pref": "Bearbeitungen auf 
{{WBREPONAME}} in der Beobachtungsliste anzeigen",
        "wikibase-error-deserialize-error": "Daten konnten nicht deserialisiert 
werden.",
diff --git a/extensions/Wikibase/client/i18n/fr.json 
b/extensions/Wikibase/client/i18n/fr.json
index b6f8020..12465a9 100644
--- a/extensions/Wikibase/client/i18n/fr.json
+++ b/extensions/Wikibase/client/i18n/fr.json
@@ -90,6 +90,12 @@
        "wikibase-rc-show-wikidata-pref": "Afficher les modifications de 
{{WBREPONAME}} dans les modifications récentes",
        "wikibase-rc-wikibase-edit-letter": "D",
        "wikibase-rc-wikibase-edit-title": "Modification de {{WBREPONAME}}.",
+       "wikibase-rcfilters-hide-wikibase-label": "Modifications 
{{WBREPONAME}}",
+       "wikibase-rcfilters-hide-wikibase-description": "Modifications qui 
proviennent de {{WBREPONAME}}.",
+       "wikibase-rcfilters-hide-wikibase-conflicts-ores": "Ce filtre est en 
conflit avec au moins un filtre de Qualité de la contribution ou d’intention de 
l’utilisateur. Les prédictions de qualité ou d’intention ne sont pas 
disponibles pour les modifications de {{WBREPONAME}}.",
+       "wikibase-rcfilters-hide-wikibase-conflicts-ores-global": "Le filtre « 
modifications {{WBREPONAME}} » est en conflit avec au moins un filtre de 
Qualité de la contribution ou d’intention de l’utilisateur. Les prédictions de 
qualité et d’intention ne sont pas disponibles pour les modifications 
{{WBREPONAME}}. Les filtres en conflit sont marqués dans la zone des filtres 
actifs ci-dessus.",
+       "wikibase-rcfilters-damaging-conflicts-hide-wikibase": "Les prédictions 
de Qualité de la contribution ne sont pas disponibles pour certains types de 
modification, donc ce filtre est en conflit avec {{PLURAL:$2|le filtre de type 
de modification suivant|les filtres de type de modification suivants}} : $1",
+       "wikibase-rcfilters-goodfaith-conflicts-hide-wikibase": "Les 
prédictions d’Intention de l’utilisateur ne sont pas disponibles pour certains 
types de modification, donc ce filtre est en conflit avec {{PLURAL:$2|le filtre 
de type de modification suivant|les filtres de type de modification suivants}} 
: $1",
        "wikibase-replicationnote": "Veuillez noter que cela peut prendre 
plusieurs minutes avant que les modifications soient visibles sur tous les 
wikis.",
        "wikibase-watchlist-show-changes-pref": "Voir les modifications de 
{{WBREPONAME}} dans votre liste de suivi",
        "wikibase-error-deserialize-error": "Échec à la désérialisation des 
données.",
diff --git a/extensions/Wikibase/client/i18n/gl.json 
b/extensions/Wikibase/client/i18n/gl.json
index be3372a..ec2fce3 100644
--- a/extensions/Wikibase/client/i18n/gl.json
+++ b/extensions/Wikibase/client/i18n/gl.json
@@ -71,6 +71,8 @@
        "wikibase-rc-show-wikidata-pref": "Mostrar as modificacións de 
{{WBREPONAME}} nos cambios recentes",
        "wikibase-rc-wikibase-edit-letter": "D",
        "wikibase-rc-wikibase-edit-title": "Edición de {{WBREPONAME}}",
+       "wikibase-rcfilters-hide-wikibase-label": "Edicións de {{WBREPONAME}}",
+       "wikibase-rcfilters-hide-wikibase-description": "Edicións con orixe en 
{{WBREPONAME}}.",
        "wikibase-replicationnote": "Teña en conta que pode levar varios 
minutos que as modificacións sexan visibles en todos os wikis.",
        "wikibase-watchlist-show-changes-pref": "Mostrar as modificacións de 
{{WBREPONAME}} na súa lista de vixilancia",
        "wikibase-error-deserialize-error": "Erro ao deseriar os datos.",
diff --git a/extensions/Wikibase/client/i18n/he.json 
b/extensions/Wikibase/client/i18n/he.json
index 5a5e90f..a6394e7 100644
--- a/extensions/Wikibase/client/i18n/he.json
+++ b/extensions/Wikibase/client/i18n/he.json
@@ -75,6 +75,12 @@
        "wikibase-rc-show-wikidata-pref": "הצגת עריכות שנעשו 
ב{{GRAMMAR:תחילית|{{WBREPONAME}}}} בדף השינויים האחרונים",
        "wikibase-rc-wikibase-edit-letter": "נ",
        "wikibase-rc-wikibase-edit-title": "עריכה 
ב{{GRAMMAR:תחילית|{{WBREPONAME}}}}",
+       "wikibase-rcfilters-hide-wikibase-label": "עריכות {{WBREPONAME}}",
+       "wikibase-rcfilters-hide-wikibase-description": "עריכות שמקורן 
ב{{GRAMMAR:תחילית|{{WBREPONAME}}}}",
+       "wikibase-rcfilters-hide-wikibase-conflicts-ores": "המסנן הזה מתנגש עם 
אחד ממסנני איכות תרומות או כוונת משתמש. חיזויי איכות וכוונה אינם זמינים לעריכות 
{{WBREPONAME}}.",
+       "wikibase-rcfilters-hide-wikibase-conflicts-ores-global": "מסנן 
\"עריכות {{WBREPONAME}}\" מתנגש עם אחד ממסנני \"איכות תרומות\" או \"כוונת 
משתמש\". חיזויי איכות וכוונה אינם זמינים לעריכות {{WBREPONAME}}. המסננים 
המתנגשים מסומנים באזור המסננים הפעילים לעיל.",
+       "wikibase-rcfilters-damaging-conflicts-hide-wikibase": "חיזויי איכות 
תרומות אינם זמינים לסוגים מסוימים של שינויים, אז המסנן הזה מתנגש עם 
{{PLURAL:$2|מסנן סוג השינוי הבא|מסנני סוג השינוי הבאים}}: $1",
+       "wikibase-rcfilters-goodfaith-conflicts-hide-wikibase": "חיזויי כוונת 
משתמש אינם זמינים לסוגים מסוימים של שינויים, אז המסנן הזה מתנגש עם 
{{PLURAL:$2|מסנן סוג השינוי הבא|מסנני סוג השינוי הבאים}}: $1",
        "wikibase-replicationnote": "יש לשים לב שייתכן שייקח מספר דקות עד 
שהשינויים יוצגו בכל אתרי הוויקי.",
        "wikibase-watchlist-show-changes-pref": "הצגת עריכות שנעשו 
ב{{GRAMMAR:תחילית|{{WBREPONAME}}}} ברשימת המעקב",
        "wikibase-error-deserialize-error": "הוצאת נתונים מהסדרה לא עבדה.",
diff --git a/extensions/Wikibase/client/i18n/it.json 
b/extensions/Wikibase/client/i18n/it.json
index 494304a..3fda05a 100644
--- a/extensions/Wikibase/client/i18n/it.json
+++ b/extensions/Wikibase/client/i18n/it.json
@@ -84,6 +84,8 @@
        "wikibase-rc-show-wikidata-pref": "Mostra le modifiche di 
{{WBREPONAME}} nelle ultime modifiche",
        "wikibase-rc-wikibase-edit-letter": "D",
        "wikibase-rc-wikibase-edit-title": "Modifica effettuata su 
{{WBREPONAME}}",
+       "wikibase-rcfilters-hide-wikibase-label": "modifiche {{WBREPONAME}}",
+       "wikibase-rcfilters-hide-wikibase-description": "Modifiche che hanno 
origine da {{WBREPONAME}}.",
        "wikibase-replicationnote": "Potrebbero essere necessari diversi minuti 
prima che le modifiche siano visibili su tutti i wiki",
        "wikibase-watchlist-show-changes-pref": "Mostra le modifiche su 
{{WBREPONAME}} nella tua lista degli osservati speciali",
        "wikibase-error-deserialize-error": "Errore nella deserializzazione dei 
dati.",
diff --git a/extensions/Wikibase/client/i18n/qqq.json 
b/extensions/Wikibase/client/i18n/qqq.json
index 91f05e2..a845e92 100644
--- a/extensions/Wikibase/client/i18n/qqq.json
+++ b/extensions/Wikibase/client/i18n/qqq.json
@@ -86,7 +86,7 @@
        "wikibase-rc-show-wikidata-pref": "Option in the recent changes section 
of preferences to show wikibase changes by default in recent changes.",
        "wikibase-rc-wikibase-edit-letter": "Very short form of \"'''wikidata 
edit'''\". Used in [[Special:RecentChanges]] and [[Special:Watchlist]].\n\nSee 
also:\n* {{msg-mw|Newpageletter}}\n* {{msg-mw|Minoreditletter}}\n* 
{{msg-mw|Boteditletter}}\n* {{msg-mw|Unpatrolledletter}}",
        "wikibase-rc-wikibase-edit-title": "Tooltip for 
{{msg-mw|wikibase-rc-wikibase-edit-letter}}.\n\nSee also:\n* 
{{msg-mw|Recentchanges-label-newpage}}\n* 
{{msg-mw|Recentchanges-label-minor}}\n* {{msg-mw|Recentchanges-label-bot}}\n* 
{{msg-mw|Recentchanges-label-unpatrolled}}\n{{Identical|Edit}}",
-       "wikibase-rcfilters-hide-wikibase-label": "Label for 'Wikidata edits' 
filter on ChangesList pages (such as RecentChanges)",
+       "wikibase-rcfilters-hide-wikibase-label": "Label for \"Wikidata edits\" 
filter on ChangesList pages (such as RecentChanges).",
        "wikibase-rcfilters-hide-wikibase-description": "Description for 
'Wikidata edits' filter on ChangesList pages (such as RecentChanges)",
        "wikibase-rcfilters-hide-wikibase-conflicts-ores": "Tooltip shown when 
hovering over a 'Wikidata edits' filter tag, when a ORES filter is also 
selected.\n* 'Contribution quality' is based on 
{{msg-mw|Ores-rcfilters-damaging-title}}.\n* 'User intent' is based on 
{{msg-mw|Ores-rcfilters-goodfaith-title}}.",
        "wikibase-rcfilters-hide-wikibase-conflicts-ores-global": "Message 
shown in the result area when both an ORES filter and the 'Wikidata edits' 
filter are selected.  This indicates that no results will be shown because 
propagated Wikidata edits do not have ORES scores available.\n\n* \"Wikidata 
edits\" is {{msg-mw|wikibase-rcfilters-hide-wikibase-label}}.\n* \"Contribution 
quality\" is based on {{msg-mw|Ores-rcfilters-damaging-title}}.\n* \"User 
intent\" is based on {{msg-mw|Ores-rcfilters-goodfaith-title}}.\n* \"Active 
Filters\" is based on {{msg-mw|rcfilters-activefilters}}.",
diff --git a/extensions/Wikibase/client/i18n/zh-hans.json 
b/extensions/Wikibase/client/i18n/zh-hans.json
index e25d88a..9a12470 100644
--- a/extensions/Wikibase/client/i18n/zh-hans.json
+++ b/extensions/Wikibase/client/i18n/zh-hans.json
@@ -85,6 +85,12 @@
        "wikibase-rc-show-wikidata-pref": "在最近更改中显示{{WBREPONAME}}编辑",
        "wikibase-rc-wikibase-edit-letter": "数",
        "wikibase-rc-wikibase-edit-title": "{{WBREPONAME}}编辑",
+       "wikibase-rcfilters-hide-wikibase-label": "{{WBREPONAME}}编辑",
+       "wikibase-rcfilters-hide-wikibase-description": "在{{WBREPONAME}}引起的编辑。",
+       "wikibase-rcfilters-hide-wikibase-conflicts-ores": 
"该过滤器与一个或多个贡献质量或用户目的过滤器冲突。质量和目的预测不可用于{{WBREPONAME}}的编辑。",
+       "wikibase-rcfilters-hide-wikibase-conflicts-ores-global": 
"“{{WBREPONAME}}编辑”过滤器与一个或多个贡献质量或用户目的过滤器冲突。质量和目的预测不可用于{{WBREPONAME}}编辑。冲突过滤器已在上方活跃过滤器中被标记。",
+       "wikibase-rcfilters-damaging-conflicts-hide-wikibase": 
"贡献质量预测对于某些更改类型不可用,因此该过滤器与以下更改{{PLURAL:$2|过滤器}}类型相冲突:$1",
+       "wikibase-rcfilters-goodfaith-conflicts-hide-wikibase": 
"用户目的预测对于某些更改类型不可用,因此该过滤器与以下更改{{PLURAL:$2|过滤器}}类型相冲突:$1",
        "wikibase-replicationnote": "该更改可能需要几分钟才能在所有的维基项目上显示,请谅解。",
        "wikibase-watchlist-show-changes-pref": "在您的监视列表中显示{{WBREPONAME}}编辑",
        "wikibase-error-deserialize-error": "无法反序列化数据。",
diff --git 
a/extensions/Wikibase/client/includes/Hooks/ChangesListSpecialPageHookHandlers.php
 
b/extensions/Wikibase/client/includes/Hooks/ChangesListSpecialPageHookHandlers.php
index 2e0f963..b1f525e 100644
--- 
a/extensions/Wikibase/client/includes/Hooks/ChangesListSpecialPageHookHandlers.php
+++ 
b/extensions/Wikibase/client/includes/Hooks/ChangesListSpecialPageHookHandlers.php
@@ -233,20 +233,24 @@
 
                if ( $extensionRegistry->isLoaded( 'ORES' ) ) {
                        $damagingGroup = $specialPage->getFilterGroup( 
'damaging' );
-                       $wikidataFilter->conflictsWith(
-                               $damagingGroup,
-                               
'wikibase-rcfilters-hide-wikibase-conflicts-ores-global',
-                               
'wikibase-rcfilters-hide-wikibase-conflicts-ores',
-                               
'wikibase-rcfilters-damaging-conflicts-hide-wikibase'
-                       );
+                       if ( $damagingGroup ) {
+                               $wikidataFilter->conflictsWith(
+                                       $damagingGroup,
+                                       
'wikibase-rcfilters-hide-wikibase-conflicts-ores-global',
+                                       
'wikibase-rcfilters-hide-wikibase-conflicts-ores',
+                                       
'wikibase-rcfilters-damaging-conflicts-hide-wikibase'
+                               );
+                       }
 
                        $goodfaithGroup = $specialPage->getFilterGroup( 
'goodfaith' );
-                       $wikidataFilter->conflictsWith(
-                               $goodfaithGroup,
-                               
'wikibase-rcfilters-hide-wikibase-conflicts-ores-global',
-                               
'wikibase-rcfilters-hide-wikibase-conflicts-ores',
-                               
'wikibase-rcfilters-goodfaith-conflicts-hide-wikibase'
-                       );
+                       if ( $goodfaithGroup ) {
+                               $wikidataFilter->conflictsWith(
+                                       $goodfaithGroup,
+                                       
'wikibase-rcfilters-hide-wikibase-conflicts-ores-global',
+                                       
'wikibase-rcfilters-hide-wikibase-conflicts-ores',
+                                       
'wikibase-rcfilters-goodfaith-conflicts-hide-wikibase'
+                               );
+                       }
                }
        }
 
diff --git 
a/extensions/Wikibase/client/includes/Hooks/MagicWordHookHandlers.php 
b/extensions/Wikibase/client/includes/Hooks/MagicWordHookHandlers.php
index f01a177..30e5b36 100644
--- a/extensions/Wikibase/client/includes/Hooks/MagicWordHookHandlers.php
+++ b/extensions/Wikibase/client/includes/Hooks/MagicWordHookHandlers.php
@@ -6,6 +6,7 @@
 use Message;
 use Parser;
 use ResourceLoaderContext;
+use Wikibase\NoLangLinkHandler;
 use Wikibase\SettingsArray;
 use Wikibase\Client\WikibaseClient;
 
diff --git a/extensions/Wikibase/repo/i18n/gl.json 
b/extensions/Wikibase/repo/i18n/gl.json
index 6c90fcf..7da9609 100644
--- a/extensions/Wikibase/repo/i18n/gl.json
+++ b/extensions/Wikibase/repo/i18n/gl.json
@@ -434,17 +434,17 @@
        "apihelp-wbgetentities-param-sitefilter": "Filtrar ligazóns de sitios 
en entidades a aquellos con estos identificadores de sitio.",
        "apihelp-wbgetentities-example-1": "Obter entidades con identificador 
<samp>Q42</samp> con todos os atributos dispoñibles en todos os idiomas 
dispoñibles",
        "apihelp-wbgetentities-example-2": "Obter entidades con identificador 
<samp>P17</samp> con todos os atributos dispoñibles en todos os idiomas 
dispoñibles",
-       "apihelp-wbgetentities-example-3": "Obter entidades con identificadores 
Q42 e P17 con todos os atributos dispoñibles en todos os idiomas dispoñibles",
-       "apihelp-wbgetentities-example-4": "Obter entidades con identificador 
Q42 con todos os atributos dispoñibles en inglés",
-       "apihelp-wbgetentities-example-5": "Obter entidades con identificador 
Q42 con todos os atributos dispoñibles en calquera redución de idiomas posible 
para o idioma ii",
-       "apihelp-wbgetentities-example-6": "Obter entidades con identificador 
Q42 con todas as etiquetas en todos os idiomas dispoñibles",
-       "apihelp-wbgetentities-example-7": "Obter entidades con identificadores 
P17 e P3 que só teñen tipos de datos",
-       "apihelp-wbgetentities-example-8": "Obter entidades con identificador 
Q42 con todos os seus alias en inglés",
-       "apihelp-wbgetentities-example-9": "Obter entidades con identificadores 
Q1 e Q42 con descricións en inglés, alemán e francés",
-       "apihelp-wbgetentities-example-10": "Obtén o elemento para a páxina 
\"Berlín\" no sitio \"enwiki\", cos atributos de idioma en inglés",
-       "apihelp-wbgetentities-example-11": "Obtén o elemento da páxina 
\"Berlín\" no sitio \"enwiki\" despois de normalizar o título a \"berlín\"",
-       "apihelp-wbgetentities-example-12": "Obter as ligazóns de sitio do 
elemento Q42",
-       "apihelp-wbgetentities-example-13": "Obter as entidades con 
identificador Q42 que só teñen ligazóns de sitio de \"enwiki\"",
+       "apihelp-wbgetentities-example-3": "Obter entidades con identificadores 
<samp>Q42</samp> e <samp>P17</samp> con todos os atributos dispoñibles en todos 
os idiomas dispoñibles",
+       "apihelp-wbgetentities-example-4": "Obter entidades con identificador 
<samp>Q42</samp> con todos os atributos dispoñibles en inglés",
+       "apihelp-wbgetentities-example-5": "Obter entidades con identificador 
<samp>Q42</samp> con todos os atributos dispoñibles en calquera redución de 
idiomas posible para o idioma <var>ii</var>",
+       "apihelp-wbgetentities-example-6": "Obter entidades con identificador 
<samp>Q42</samp> con todas as etiquetas en todos os idiomas dispoñibles",
+       "apihelp-wbgetentities-example-7": "Obter entidades con identificadores 
<samp>P17</samp> e <samp>P3</samp> que só teñen tipos de datos",
+       "apihelp-wbgetentities-example-8": "Obter entidades con identificador 
<samp>Q42</samp> con todos os seus alias en inglés",
+       "apihelp-wbgetentities-example-9": "Obter entidades con identificadores 
<samp>Q1</samp> e <samp>Q42</samp> con descricións en inglés, alemán e francés",
+       "apihelp-wbgetentities-example-10": "Obtén o elemento para a páxina 
\"<var>Berlin</var>\"  no sitio \"<var>enwiki</var>\", cos atributos de idioma 
en inglés",
+       "apihelp-wbgetentities-example-11": "Obtén o elemento da páxina 
\"<var>Berlin</var>\" no sitio \"<var>enwiki</var>\" despois de normalizar o 
título a \"<var>berlin</var>\"",
+       "apihelp-wbgetentities-example-12": "Obter as ligazóns de sitio do 
elemento <samp>Q42</samp>",
+       "apihelp-wbgetentities-example-13": "Obter as entidades con 
identificador <samp>Q42</samp> que só teñen ligazóns de sitio de 
\"<var>enwiki</var>\"",
        "apihelp-wblinktitles-description": "Asocia dous artigos en dúas wikis 
diferentes cun elemento Wikibase.",
        "apihelp-wblinktitles-param-tosite": "Un identificador para o sitio no 
que reside a páxina.\nÚseo xunto con <var>totitle</var> para crear unha ligazón 
completa ó sitio.",
        "apihelp-wblinktitles-param-totitle": "Título da páxina a 
asociar.\nÚseo xunto con <var>tosite</var> para crear unha ligazón completa ó 
sitio.",
@@ -455,15 +455,15 @@
        "apihelp-wbmergeitems-description": "Fusiona varios elementos.",
        "apihelp-wbmergeitems-param-fromid": "O identificador desde o que 
fusionar",
        "apihelp-wbmergeitems-param-toid": "O identificador co que fusionar",
-       "apihelp-wbmergeitems-param-ignoreconflicts": "Matriz de elementos do 
obxecto para os que ignorar conflitos, só pode conter valores de 
\"description\" (descrición) e ou \"sitelink\" (ligazón de sitio) e ou 
\"statement\" (declaración)",
+       "apihelp-wbmergeitems-param-ignoreconflicts": "Matriz de elementos do 
obxecto para os que ignorar conflitos. Só pode conter valores de 
\"<var>description</var>\" (descrición), \"<var>sitelink</var>\" (ligazón de 
sitio) e \"<var>statement</var>\" (declaración)",
        "apihelp-wbmergeitems-param-summary": "Resumo da edición.\nEngadirase 
un comentario xenerado automaticamente. O límite de lonxitude do autocomentario 
xunto co seu resumo é de 260 caracteres. Teña en conta que todo o que exceda 
dese límite non será tido en conta.",
        "apihelp-wbmergeitems-param-bot": "Marcar esta edición como bot. Esta 
etiqueta de URL só será respectada se o usuario pertence ó grupo \"bot\".",
-       "apihelp-wbmergeitems-example-1": "Fusiona datos desde Q42 en Q222",
-       "apihelp-wbmergeitems-example-2": "Fusiona datos desde Q555 en Q3",
-       "apihelp-wbmergeitems-example-3": "Fusiona datos desde Q66 en Q99 
ignorando calquera ligazón de sitio conflitiva",
-       "apihelp-wbmergeitems-example-4": "Fusiona datos desde Q66 en Q99 
ignorando calquera ligazón de sitio ou descricións conflitivas",
-       "apihelp-wbparsevalue-description": "Analiza valores usando un 
analizador de valores.",
-       "apihelp-wbparsevalue-param-parser": "Identificador do analizador de 
valores a usar. <span class=\"apihelp-deprecated\">Obsoleto</span>. Utilice o 
parámetro <var>datatype</var> no seu lugar.",
+       "apihelp-wbmergeitems-example-1": "Fusiona datos desde <samp>Q42</samp> 
en <samp>Q222</samp>",
+       "apihelp-wbmergeitems-example-2": "Fusiona datos desde 
<samp>Q555</samp> en <samp>Q3</samp>",
+       "apihelp-wbmergeitems-example-3": "Fusiona datos desde <samp>Q66</samp> 
en <samp>Q99</samp> ignorando calquera ligazón de sitio conflitiva",
+       "apihelp-wbmergeitems-example-4": "Fusiona datos desde <samp>Q66</samp> 
en <samp>Q99</samp> ignorando calquera ligazón de sitio ou descricións 
conflitivas",
+       "apihelp-wbparsevalue-description": "Analiza valores usando un 
<code>ValueParser</code> (analizador de valores).",
+       "apihelp-wbparsevalue-param-parser": "Identificador do 
<code>ValueParser</code> (analizador de valores) a usar. <span 
class=\"apihelp-deprecated\">Obsoleto</span>. Utilice o parámetro 
<var>datatype</var> no seu lugar.",
        "apihelp-wbparsevalue-param-datatype": "Tipo de datos do valor a 
analizar. Determina o analizador a utilizar.",
        "apihelp-wbparsevalue-param-validate": "Se adicionalmente verificar os 
datos transmitidos.",
        "apihelp-wbparsevalue-param-values": "Valores a analizar",
@@ -479,18 +479,18 @@
        "apihelp-wbremoveclaims-example-1": "Eliminar afirmación con GUID de 
\"Q42$D8404CDA-25E4-4334-AF13-A3290BCD9C0N\"",
        "apihelp-wbremovequalifiers-description": "Elimina un cualificador 
dunha afirmación.",
        "apihelp-wbremovequalifiers-param-baserevid": "Identificador numérico 
para a revisión na que basear a edición.\nÚsase para detectar conflitos durante 
a gravación.",
-       "apihelp-wbremovequalifiers-param-bot": "Marcar esta edición como bot. 
Esta etiqueta de URL só será respectada se o usuario pertence ó grupo \"bot\".",
+       "apihelp-wbremovequalifiers-param-bot": "Marcar esta edición como bot. 
Esta etiqueta de URL só será respectada se o usuario pertence ó grupo 
\"{{int:group-bot}}\".",
        "apihelp-wbremovequalifiers-param-claim": "O GUID que identifica a 
afirmación da que eliminar os cualificadores",
        "apihelp-wbremovequalifiers-param-qualifiers": "Función hash do snak 
dos cualificadores a eliminar",
        "apihelp-wbremovequalifiers-param-summary": "Resumo da 
edición.\nEngadirase un comentario xenerado automaticamente. O límite de 
lonxitude do autocomentario xunto co seu resumo é de 260 caracteres. Teña en 
conta que todo o que exceda dese límite non será tido en conta.",
-       "apihelp-wbremovequalifiers-example-1": "Eliminar o cualificador con 
función hash \"1eb8793c002b1d9820c833d234a1b54c8e94187e\" da afirmación con 
GUID \"Q42$D8404CDA-25E4-4334-AF13-A3290BCD9C0F\"",
+       "apihelp-wbremovequalifiers-example-1": "Eliminar o cualificador con 
función hash \"<var>1eb8793c002b1d9820c833d234a1b54c8e94187e</var>\" da 
afirmación con GUID \"<var>Q42$D8404CDA-25E4-4334-AF13-A3290BCD9C0F</var>\"",
        "apihelp-wbremovereferences-description": "Elimina un ou máis 
referencias á mesma declaración.",
        "apihelp-wbremovereferences-param-baserevid": "Identificador numérico 
para a revisión na que basear a edición.\nÚsase para detectar conflitos durante 
a gravación.",
-       "apihelp-wbremovereferences-param-bot": "Marcar esta edición como bot. 
Esta etiqueta de URL só será respectada se o usuario pertence ó grupo \"bot\".",
+       "apihelp-wbremovereferences-param-bot": "Marcar esta edición como bot. 
Esta etiqueta de URL só será respectada se o usuario pertence ó grupo 
\"{{int:group-bot}}\".",
        "apihelp-wbremovereferences-param-statement": "Un GUID que identifica a 
declaración para a que se vai fixar a referencia",
        "apihelp-wbremovereferences-param-summary": "Resumo da 
edición.\nEngadirase un comentario xenerado automaticamente. O límite de 
lonxitude do autocomentario xunto co seu resumo é de 260 caracteres. Teña en 
conta que todo o que exceda dese límite non será tido en conta.",
        "apihelp-wbremovereferences-param-references": "As funcións hash das 
referencias que deben ser eliminadas",
-       "apihelp-wbremovereferences-example-1": "Eliminar a referencia coa 
función hash \"455481eeac76e6a8af71a6b493c073d54788e7e9\" da declaración con 
GUID \"Q42$D8404CDA-25E4-4334-AF13-A3290BCD9C0F\"",
+       "apihelp-wbremovereferences-example-1": "Eliminar a referencia coa 
función hash \"<var>455481eeac76e6a8af71a6b493c073d54788e7e9</var>\" da 
declaración con GUID \"<var>Q42$D8404CDA-25E4-4334-AF13-A3290BCD9C0F</var>\"",
        "apihelp-wbsearchentities-description": "Busca entidades usando 
etiquetas e alias.\nDevolve unha etiqueta e descrición para a entidade na 
lingua do usuario, se é posible.\nDevolve os detalles do termo asociado.\nO 
texto do termo asociado tamén está presente na clave alias se se é diferente da 
etiqueta que se visualiza.",
        "apihelp-wbsearchentities-param-search": "Buscar este texto.",
        "apihelp-wbsearchentities-param-language": "Buscar neste idioma.",
@@ -515,8 +515,8 @@
        "apihelp-query+wbsubscribers-param-entities": "Entidades das que obter 
os subscritores",
        "apihelp-query+wbsubscribers-param-prop": "Propiedades a engadir ó 
resultado",
        "apihelp-query+wbsubscribers-param-limit": "Número máximo de 
resultados",
-       "apihelp-query+wbsubscribers-example-1": "Obter os subscritores á 
entidade Q42",
-       "apihelp-query+wbsubscribers-example-2": "Obter os subscritores á 
entidade Q42 coa URL a Special:EntityUsage incluída",
+       "apihelp-query+wbsubscribers-example-1": "Obter os subscritores á 
entidade <samp>Q42</samp>",
+       "apihelp-query+wbsubscribers-example-2": "Obter os subscritores á 
entidade <samp>Q42</samp> coa URL a <code>Special:EntityUsage</code> incluída",
        "apihelp-wbsetaliases-description": "Fixa os alias para unha entidade 
de Wikibase.",
        "apihelp-wbsetaliases-param-id": "Identificador da entidade, incluíndo 
o prefixo. \nUse <var>id</var> ou <var>site</var> e <var>title</var> xuntos.",
        "apihelp-wbsetaliases-param-new": "Si se establece, se creará una 
entidad nueva.\nEstablece esto al tipo de entidad que quieres crear.",
@@ -524,32 +524,32 @@
        "apihelp-wbsetaliases-param-title": "Título da páxina a asociar.\nÚseo 
xunto con <var>site</var> para crear unha ligazón completa ó sitio.",
        "apihelp-wbsetaliases-param-baserevid": "Identificador numérico para a 
revisión na que basear a edición.\nÚsase para detectar conflitos durante a 
gravación.",
        "apihelp-wbsetaliases-param-summary": "Resumo da edición.\nEngadirase 
un comentario xenerado automaticamente. O límite de lonxitude do autocomentario 
xunto co seu resumo é de 260 caracteres. Teña en conta que todo o que exceda 
dese límite non será tido en conta.",
-       "apihelp-wbsetaliases-param-bot": "Marcar esta edición como bot. Esta 
etiqueta de URL só será respectada se o usuario pertence ó grupo \"bot\".",
+       "apihelp-wbsetaliases-param-bot": "Marcar esta edición como bot. Esta 
etiqueta de URL só será respectada se o usuario pertence ó grupo 
\"{{int:group-bot}}\".",
        "apihelp-wbsetaliases-param-add": "Lista de alias a engadir (pode 
combinarse con <var>remove</var>)",
        "apihelp-wbsetaliases-param-remove": "Lista de alias a eliminar (pode 
combinarse con <var>add</var>)",
        "apihelp-wbsetaliases-param-set": "Lista de alias que reemprazarán á 
lista actual (non pode ser combinada con <var>add</var> nin con 
<var>remove</var>)",
        "apihelp-wbsetaliases-param-language": "Idioma para o cal fixar os 
alias",
-       "apihelp-wbsetaliases-example-1": "Fixar os alias en inglés para a 
entidade con identificador Q1 a Foo e Bar",
-       "apihelp-wbsetaliases-example-2": "Engadir Foo e Bar á lista de alias 
en inglés para a entidade con identificador Q1",
-       "apihelp-wbsetaliases-example-3": "Eliminar Foo e Bar da lista de alias 
en inglés para a entidade con identificador Q1",
-       "apihelp-wbsetaliases-example-4": "Eliminar Foo da lista de alias en 
inglés para a entidade con identificador Q1 e engadirlle o alias Bar",
+       "apihelp-wbsetaliases-example-1": "Fixar os alias en inglés para a 
entidade con identificador <samp>Q1</samp> a <var>Foo</var> e <var>Bar</var>",
+       "apihelp-wbsetaliases-example-2": "Engadir <var>Foo</var> e 
<var>Bar</var> á lista de alias en inglés para a entidade con identificador 
<samp>Q1</samp>",
+       "apihelp-wbsetaliases-example-3": "Eliminar <var>Foo</var> e 
<var>Bar</var> da lista de alias en inglés para a entidade con identificador 
<samp>Q1</samp>",
+       "apihelp-wbsetaliases-example-4": "Eliminar <var>Foo</var> da lista de 
alias en inglés para a entidade con identificador <samp>Q1</samp> e engadirlle 
<var>Bar</var>",
        "apihelp-wbsetclaim-description": "Crea ou actualiza unha declaración 
ou afirmación enteira.",
        "apihelp-wbsetclaim-param-claim": "Serialización de declaración ou 
afirmación",
        "apihelp-wbsetclaim-param-index": "Índice dentro da lista de 
declaracións de entidades ó que mover a declaración. Opcional. Teña coidado de 
que cando se asigne un índice que especifica unha posición que non está a 
continuación dunha declaración cuxo snak principal non presenta a mesma 
propiedade, todo o grupo de declaracións cuxo snak principal presenta a mesma 
propiedade será movido. Cando non se indica, unha declaración existente seguirá 
no mesmo lugar mentres que unha declaración nova será engadida á última cuxo 
snak principal presente a mesma propiedade.",
        "apihelp-wbsetclaim-param-summary": "Resumo da edición.\nEngadirase un 
comentario xenerado automaticamente. O límite de lonxitude do autocomentario 
xunto co seu resumo é de 260 caracteres. Teña en conta que todo o que exceda 
dese límite non será tido en conta.",
        "apihelp-wbsetclaim-param-baserevid": "Identificador numérico para a 
revisión na que basear a edición.\nÚsase para detectar conflitos durante a 
gravación.",
-       "apihelp-wbsetclaim-param-bot": "Marcar esta edición como bot. Esta 
etiqueta de URL só será respectada se o usuario pertence ó grupo \"bot\".",
-       "apihelp-wbsetclaim-example-1": "Fixar a afirmación co identificador 
indicado e a propiedade P1 coa cadea de texto co valor de \"City\" (cidade)",
-       "apihelp-wbsetclaim-example-2": "Asignar a afirmación co identificador 
dado á propiedade P1 coa cadea de texto con valor \"City\" (cidade) e mover a 
afirmación á posición superior dentro do subgrupo de afirmacións da entidade 
que presentan a propiedade snak P1 principal. Adicionalmente, move todo o 
subgrupo á parte superior de todos os subgrupos engadidos por propiedade.",
-       "apihelp-wbsetclaim-example-3": "Asignar a declaración co identificador 
dado á propiedade P1 cunha cadea de texto de valor \"City\" (cidade) e asignar 
as referencias da declaración a unha referencia simple coa cadea de texto de 
valor \"The Economy of Cities\" (A economía das cidades) asignada á propiedade 
P2.",
+       "apihelp-wbsetclaim-param-bot": "Marcar esta edición como bot. Esta 
etiqueta de URL só será respectada se o usuario pertence ó grupo 
\"{{int:group-bot}}\".",
+       "apihelp-wbsetclaim-example-1": "Fixar a afirmación co identificador 
indicado e a propiedade <samp>P1</samp> coa cadea de texto co valor de 
\"<var>City</var>\" (cidade)",
+       "apihelp-wbsetclaim-example-2": "Asignar a afirmación co identificador 
dado á propiedade <samp>P1</samp> coa cadea de texto con valor 
\"<var>City</var>\" (cidade) e mover a afirmación á posición superior dentro do 
subgrupo de afirmacións da entidade que presentan a propiedade snak 
<samp>P1</samp> principal. Adicionalmente, move todo o subgrupo á parte 
superior de todos os subgrupos engadidos por propiedade.",
+       "apihelp-wbsetclaim-example-3": "Asignar a declaración co identificador 
dado á propiedade <samp>P1</samp> cunha cadea de texto de valor 
\"<var>City</var>\" (cidade) e asignar as referencias da declaración a unha 
referencia simple coa cadea de texto de valor \"<var>The Economy of 
Cities</var>\" (A economía das cidades) asignada á propiedade <samp>P2</samp>.",
        "apihelp-wbsetclaimvalue-description": "Fixa o valor dunha afirmación 
Wikibase.",
        "apihelp-wbsetclaimvalue-param-claim": "GUID que identifica a 
afirmación",
        "apihelp-wbsetclaimvalue-param-snaktype": "O tipo do snak",
        "apihelp-wbsetclaimvalue-param-value": "Valor para fixar o Valor de 
Dato do snak principal da afirmación",
        "apihelp-wbsetclaimvalue-param-summary": "Resumo da 
edición.\nEngadirase un comentario xenerado automaticamente. O límite de 
lonxitude do autocomentario xunto co seu resumo é de 260 caracteres. Teña en 
conta que todo o que exceda dese límite non será tido en conta.",
        "apihelp-wbsetclaimvalue-param-baserevid": "Identificador numérico para 
a revisión na que basear a edición.\nÚsase para detectar conflitos durante a 
gravación.",
-       "apihelp-wbsetclaimvalue-param-bot": "Marcar esta edición como bot. 
Esta etiqueta de URL só será respectada se o usuario pertence ó grupo \"bot\".",
-       "apihelp-wbsetclaimvalue-example-1": "Fixa a afirmación co GUID de 
Q42$D8404CDA-25E4-4334-AF13-A3290BCD9C0F a un valor de Q1",
+       "apihelp-wbsetclaimvalue-param-bot": "Marcar esta edición como bot. 
Esta etiqueta de URL só será respectada se o usuario pertence ó grupo 
\"{{int:group-bot}}\".",
+       "apihelp-wbsetclaimvalue-example-1": "Fixa a afirmación co GUID de 
<var>Q42$D8404CDA-25E4-4334-AF13-A3290BCD9C0F</var> a un valor de 
<samp>Q1</samp>",
        "apihelp-wbsetdescription-description": "Fixa unha descrición para unha 
soa entidade de Wikibase.",
        "apihelp-wbsetdescription-param-id": "Identificador da entidade, 
incluíndo o prefixo. \nUse <var>id</var> ou <var>site</var> e <var>title</var> 
xuntos.",
        "apihelp-wbsetdescription-param-new": "Se se establece, crearase unha 
entidade nova.\nEstableza isto ó tipo de entidade que quere crear.",
@@ -557,11 +557,11 @@
        "apihelp-wbsetdescription-param-title": "Título da páxina a 
asociar.\nÚseo xunto con <var>site</var> para crear unha ligazón completa ó 
sitio.",
        "apihelp-wbsetdescription-param-baserevid": "Identificador numérico 
para a revisión na que basear a edición.\nÚsase para detectar conflitos durante 
a gravación.",
        "apihelp-wbsetdescription-param-summary": "Resumo da 
edición.\nEngadirase un comentario xenerado automaticamente. O límite de 
lonxitude do autocomentario xunto co seu resumo é de 260 caracteres. Teña en 
conta que todo o que exceda dese límite non será tido en conta.",
-       "apihelp-wbsetdescription-param-bot": "Marcar esta edición como bot. 
Esta etiqueta de URL só será respectada se o usuario pertence ó grupo \"bot\".",
+       "apihelp-wbsetdescription-param-bot": "Marcar esta edición como bot. 
Esta etiqueta de URL só será respectada se o usuario pertence ó grupo 
\"{{int:group-bot}}\".",
        "apihelp-wbsetdescription-param-language": "Idioma da descrición",
        "apihelp-wbsetdescription-param-value": "Valor para fixar a descrición",
-       "apihelp-wbsetdescription-example-1": "Asignar ca cadea de texto \"An 
encyclopedia that everyone can edit\" para a páxina con identificador \"Q42\" 
como a súa descrición en inglés",
-       "apihelp-wbsetdescription-example-2": "Asignar a cadea de texto \"An 
encyclopedia that everyone can edit\" como a descrición en inglés para a páxina 
cunha ligazón ó sitio enwiki:Wikipedia",
+       "apihelp-wbsetdescription-example-1": "Asignar ca cadea de texto 
\"<var>An encyclopedia that everyone can edit</var>\" para a páxina con 
identificador \"<samp>Q42</samp>\" como a súa descrición en inglés",
+       "apihelp-wbsetdescription-example-2": "Asignar a cadea de texto 
\"<var>An encyclopedia that everyone can edit</var>\" como a descrición en 
inglés para a páxina cunha ligazón ó sitio <var>enwiki:Wikipedia</var>",
        "apihelp-wbsetlabel-description": "Fixa unha etiqueta para unha soa 
entidade de Wikibase.",
        "apihelp-wbsetlabel-param-id": "Identificador da entidade, incluíndo o 
prefixo. \nUse <var>id</var> ou <var>site</var> e <var>title</var> xuntos.",
        "apihelp-wbsetlabel-param-new": "Se se establece, crearase unha 
entidade nova.\nEstableza isto ó tipo de entidade que quere crear.",
@@ -569,11 +569,11 @@
        "apihelp-wbsetlabel-param-title": "Título da páxina a asociar.\nÚseo 
xunto con <var>site</var> para crear unha ligazón completa ó sitio.",
        "apihelp-wbsetlabel-param-baserevid": "Identificador numérico para a 
revisión na que basear a edición.\nÚsase para detectar conflitos durante a 
gravación.",
        "apihelp-wbsetlabel-param-summary": "Resumo da edición.\nEngadirase un 
comentario xenerado automaticamente. O límite de lonxitude do autocomentario 
xunto co seu resumo é de 260 caracteres. Teña en conta que todo o que exceda 
dese límite non será tido en conta.",
-       "apihelp-wbsetlabel-param-bot": "Marcar esta edición como bot. Esta 
etiqueta de URL só será respectada se o usuario pertence ó grupo \"bot\".",
+       "apihelp-wbsetlabel-param-bot": "Marcar esta edición como bot. Esta 
etiqueta de URL só será respectada se o usuario pertence ó grupo 
\"{{int:group-bot}}\".",
        "apihelp-wbsetlabel-param-language": "Idioma da etiqueta",
        "apihelp-wbsetlabel-param-value": "Valor da etiqueta",
-       "apihelp-wbsetlabel-example-1": "Asignar a cadea de texto \"Wikimedia\" 
para a páxina con identificador \"Q42\" como etiqueta en inglés e notificalo 
como presentación json",
-       "apihelp-wbsetlabel-example-2": "Asignar a etiqueta en inglés a 
\"Earth\" para o obxecto coa ligazón ó sitio enwiki => \"Earth\".",
+       "apihelp-wbsetlabel-example-1": "Asignar a cadea de texto \"Wikimedia\" 
para a páxina con identificador \"<samp>Q42</samp>\" como etiqueta en inglés e 
notificalo como presentación JSON.",
+       "apihelp-wbsetlabel-example-2": "Asignar a etiqueta en inglés a 
\"<var>Earth</var>\" para o obxecto coa ligazón ó sitio <var>enwiki</var> => 
\"<var>Earth</var>\".",
        "apihelp-wbsetqualifier-description": "Crea un cualificador ou asigna o 
valor dun xa existente.",
        "apihelp-wbsetqualifier-param-claim": "Un GUID que identifica a 
afirmación para a que se vai fixar un cualificador",
        "apihelp-wbsetqualifier-param-property": "Identificador da propiedade 
snak.\nSó debe ser proporcionado cando se crea un cualificador novo ou cando se 
cambia a propiedade dun xa existente.",
@@ -582,8 +582,8 @@
        "apihelp-wbsetqualifier-param-snakhash": "A función hash do snak a 
modificar. Só debe proporcionarse para cualificadores existentes.",
        "apihelp-wbsetqualifier-param-summary": "Resumo da edición.\nEngadirase 
un comentario xenerado automaticamente. O límite de lonxitude do autocomentario 
xunto co seu resumo é de 260 caracteres. Teña en conta que todo o que exceda 
dese límite non será tido en conta.",
        "apihelp-wbsetqualifier-param-baserevid": "Identificador numérico para 
a revisión na que basear a edición.\nÚsase para detectar conflitos durante a 
gravación.",
-       "apihelp-wbsetqualifier-param-bot": "Marcar esta edición como bot. Esta 
etiqueta de URL só será respectada se o usuario pertence ó grupo \"bot\".",
-       "apihelp-wbsetqualifier-example-1": "Asignar o cualificador da 
afirmación indicada coa propiedade P1 ó valor de cadea de texto GdyjxP8I6XB3",
+       "apihelp-wbsetqualifier-param-bot": "Marcar esta edición como bot. Esta 
etiqueta de URL só será respectada se o usuario pertence ó grupo 
\"{{int:group-bot}}\".",
+       "apihelp-wbsetqualifier-example-1": "Asignar o cualificador da 
afirmación indicada coa propiedade <samp>P1</samp> ó valor de cadea de texto 
<var>GdyjxP8I6XB3</var>",
        "apihelp-wbsetreference-description": "Crea unha referencia ou asigna o 
valor dunha xa existente.",
        "apihelp-wbsetreference-param-statement": "Un GUID que identifica a 
declaración para a que se vai fixar a referencia",
        "apihelp-wbsetreference-param-snaks": "Snak a asignar á referencia. O 
obxecto JSON con identificadores de propiedade apuntado a matrices contendo os 
snaks para esa propiedade",
diff --git a/extensions/Wikibase/repo/tests/testDispatchCoordinator.php 
b/extensions/Wikibase/repo/tests/testDispatchCoordinator.php
new file mode 100644
index 0000000..4047f1e
--- /dev/null
+++ b/extensions/Wikibase/repo/tests/testDispatchCoordinator.php
@@ -0,0 +1,190 @@
+<?php
+
+namespace Wikibase\Repo\Tests;
+
+use LockManagerGroup;
+use LogicException;
+use Maintenance;
+use MediaWiki\MediaWikiServices;
+use MWException;
+use WANObjectCache;
+use Wikibase\Repo\Store\Sql\LockManagerSqlChangeDispatchCoordinator;
+use Wikibase\Repo\WikibaseRepo;
+use Wikibase\SettingsArray;
+use Wikibase\Store\ChangeDispatchCoordinator;
+use Wikibase\Store\Sql\SqlChangeDispatchCoordinator;
+
+$basePath = getenv( 'MW_INSTALL_PATH' ) !== false ? getenv( 'MW_INSTALL_PATH' 
) : __DIR__ . '/../../../..';
+
+require_once $basePath . '/maintenance/Maintenance.php';
+
+/**
+ * Test maintenance script that runs two dispatching and checks if they 
conflict.
+ * The main purpose of this file is to test dispatchChanges.php maintenance 
script.
+ *
+ * @license GPL-2.0+
+ * @author Amir Sarabadani <ladsgr...@gmail.com>
+ */
+class TestDispatchCoordinator extends Maintenance {
+
+       /**
+        * @var WANObjectCache $cache
+        */
+       private $cache;
+
+       const TABLE_PREFIX = 'fake_';
+
+       public function __construct() {
+               parent::__construct();
+
+               $this->addDescription(
+                       "Test maintenance script that runs two dispatching and 
checks if they conflict.\n" .
+                       "See docs/change-propagation.wiki for an overview of 
the change propagation mechanism."
+               );
+               $this->addOption( 'lock', 'Name of the lock manager to test', 
false, true, 'l' );
+               $this->addOption( 'number', 'Number of tries for a lock 
manager', false, true, 'n' );
+
+       }
+
+       /**
+        * @return string[] A mapping of client wiki site IDs to logical 
database names.
+        */
+       private function getClientWikis() {
+               return [ 'test1wiki' => 'test1wiki1', 'test2wiki' => 
'test2wiki' ];
+       }
+
+       /**
+        * Maintenance script entry point.
+        */
+       public function execute() {
+               if ( !defined( 'WBL_VERSION' ) ) {
+                       throw new MWException( "WikibaseLib has not been 
loaded." );
+               }
+
+               $this->cache = 
MediaWikiServices::getInstance()->getMainWANObjectCache();
+               $wikibaseRepo = WikibaseRepo::getDefaultInstance();
+
+               $iterations = (int)$this->getOption( 'number', 30 );
+               $this->createFakeTables( $iterations );
+
+               $coordinatorOne = $this->createCoordinator( 
$wikibaseRepo->getSettings() );
+               $coordinatorOne->initState( $this->getClientWikis() );
+
+               for ( $i = 1; $i <= $iterations; $i++ ) {
+                       $this->log( "--- Pass $i of $iterations ---" );
+                       $this->testCoordinator( $coordinatorOne );
+               }
+       }
+
+       /**
+        * Find and return the proper ChangeDispatchCoordinator
+        *
+        * @param SettingsArray $settings
+        *
+        * @return ChangeDispatchCoordinator
+        */
+       private function createCoordinator( SettingsArray $settings ) {
+               $repoID = wfWikiID();
+               $lockManagerName = $this->getOption(
+                       'lock',
+                       $settings->getSetting( 'dispatchingLockManager' )
+               );
+               if ( !is_null( $lockManagerName ) ) {
+                       $lockManager = LockManagerGroup::singleton( wfWikiID() 
)->get( $lockManagerName );
+                       $coordinator = new 
LockManagerSqlChangeDispatchCoordinator(
+                               $lockManager,
+                               $settings->getSetting( 'changesDatabase' ),
+                               $repoID
+                       );
+               } else {
+                       $coordinator = new SqlChangeDispatchCoordinator(
+                               $settings->getSetting( 'changesDatabase' ),
+                               $repoID
+                       );
+               }
+               $coordinator->setChangesTable( self::TABLE_PREFIX . 
'wb_changes' );
+               $coordinator->setStateTable( self::TABLE_PREFIX . 
'wb_changes_dispatch' );
+               $coordinator->setLockGraceInterval( 2 );
+               $coordinator->setDispatchInterval( 2 );
+
+               return $coordinator;
+       }
+
+       /**
+        * @param ChangeDispatchCoordinator $coordinator
+        */
+       private function testCoordinator( ChangeDispatchCoordinator 
$coordinator ) {
+               $clientId = null;
+               $state = null;
+
+               while ( true ) {
+                       $this->log( "Trying to get a lock on a client wiki..." 
);
+                       $state = $coordinator->selectClient();
+
+                       if ( $state ) {
+                               $clientId = $state['chd_site'];
+                               $this->log( "Got a lock on clinet wiki 
$clientId" );
+                               break;
+                       } else {
+                               $this->log( "Could not get a lock on any client 
wiki. Sleep and retry." );
+                               sleep( 1 );
+                       }
+               };
+
+               $this->writeTestValue( $clientId, 0 );
+
+               sleep( 1 );
+               $this->assertSame( 0, $this->readTestValue( $clientId ) );
+               $this->writeTestValue( $clientId, 1 );
+
+               sleep( 1 );
+               $this->assertSame( 1, $this->readTestValue( $clientId ) );
+
+               $state['chd_seen'] += 1;
+               $coordinator->releaseClient( $state );
+       }
+
+       private function readTestValue( $key ) {
+               $memcKey = wfMemcKey( 'test-dispatch-coordinator-' . $key );
+               $value = $this->cache->get( $memcKey );
+               $this->log( "Got cache key $key: $value" );
+               return is_string( $value ) ? (int)$value : $value;
+       }
+
+       private function writeTestValue( $key, $value ) {
+               $memcKey = wfMemcKey( 'test-dispatch-coordinator-' . $key );
+               $this->cache->set( $memcKey, $value, WANObjectCache::TTL_MINUTE 
* 15 );
+               $this->log( "Set cache key $key to $value" );
+       }
+
+       private function createFakeTables( $maxIter ) {
+               $dbw = wfGetDB( DB_MASTER );
+               $tables = [ 'wb_changes_dispatch', 'wb_changes' ];
+               foreach ( $tables as $table ) {
+                       $dbw->duplicateTableStructure( $table, 
self::TABLE_PREFIX . $table, true );
+               }
+
+               // Inserting a fake change to fool the dispatch coordinator
+               // Since we count up chd_seen in testCoordinator(), change_id 
has to be greater than
+               // the number of times we run the test.
+               $dbw->insert( self::TABLE_PREFIX . 'wb_changes', [ 'change_id' 
=> $maxIter + 10 ] );
+       }
+
+       /**
+        * @param string $message
+        */
+       public function log( $message ) {
+               $this->output( date( 'H:i:s' ) . '     ' . $message . "\n", 
'dispatchChanges::log' );
+               $this->cleanupChanneled();
+       }
+
+       private function assertSame( $expected, $actual ) {
+               if ( $expected !== $actual ) {
+                       throw new LogicException( "Test failed: $actual is not 
the same as expected $expected" );
+               }
+       }
+
+}
+
+$maintClass = TestDispatchCoordinator::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/extensions/WikimediaBadges/package.json 
b/extensions/WikimediaBadges/package.json
index 7e17e83..914df3e 100644
--- a/extensions/WikimediaBadges/package.json
+++ b/extensions/WikimediaBadges/package.json
@@ -1,10 +1,10 @@
 {
-  "devDependencies": {
-    "grunt": "1.0.1",
-    "grunt-banana-checker": "0.5.0",
-    "grunt-jsonlint": "1.1.0"
-  },
-  "scripts": {
-       "test": "grunt test"
-  }
+       "devDependencies": {
+               "grunt": "1.0.1",
+               "grunt-banana-checker": "0.5.0",
+               "grunt-jsonlint": "1.1.0"
+       },
+       "scripts": {
+               "test": "grunt test"
+       }
 }
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index f07fb06..2264eea 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -1357,12 +1357,12 @@
         "source": {
             "type": "git",
             "url": 
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git";,
-            "reference": "f37e244cd624ead83bc9552ff0b5d4c23880948e"
+            "reference": "eb0756f3f2d86da9f8ce684234a59b04fedea5c8"
         },
         "dist": {
             "type": "zip",
-            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/f37e244cd624ead83bc9552ff0b5d4c23880948e";,
-            "reference": "f37e244cd624ead83bc9552ff0b5d4c23880948e",
+            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/eb0756f3f2d86da9f8ce684234a59b04fedea5c8";,
+            "reference": "eb0756f3f2d86da9f8ce684234a59b04fedea5c8",
             "shasum": ""
         },
         "require": {
@@ -1394,7 +1394,7 @@
             "jakub-onderka/php-parallel-lint": ">=0.3 <0.10",
             "mediawiki/mediawiki-codesniffer": ">=0.4 <0.8"
         },
-        "time": "2017-03-22 22:11:13",
+        "time": "2017-03-24 03:39:57",
         "type": "mediawiki-extension",
         "installation-source": "dist",
         "autoload": {
@@ -1446,12 +1446,12 @@
         "source": {
             "type": "git",
             "url": 
"https://gerrit.wikimedia.org/r/mediawiki/extensions/WikimediaBadges";,
-            "reference": "d9546983a02b4b693f66f095916a0b3e043722c4"
+            "reference": "d4a58bada110d31d1a5c6a9a02b2778950c4cd27"
         },
         "require": {
             "php": ">=5.3.0"
         },
-        "time": "2017-02-20 23:04:34",
+        "time": "2017-03-23 18:33:02",
         "type": "mediawiki-extension",
         "installation-source": "source",
         "autoload": {

-- 
To view, visit https://gerrit.wikimedia.org/r/344589
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibc141d58cad359370c7149ca0fe44cee03bba53a
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikidata
Gerrit-Branch: master
Gerrit-Owner: WikidataBuilder <wikidata-servi...@wikimedia.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to