Page MenuHomePhabricator

Special:PageMigration does not split pages into translation units consistently
Open, LowPublicBUG REPORT

Description

In general, the Translate extension will split groups of text separated by a blank line (text\n\ntext) into separate translation units. However, Special:PageMigration does not do this consistently. Sometimes it will convert the two newlines to a single newline, but in other cases it will split the text into separate units.

For example, https://commons.wikimedia.org/w/index.php?title=Commons:Tools/oc&oldid=572631973&action=edit was edited to add a blank line between text that should be separate units, like in lists, and between section headers and content.

However, when the page is imported with Special:PageMigration, some of the text is combined into one unit while others are correctly split into different units.

Original
=== GeocodingToDo : Recherche des images non géocodées ===

L'outil GeocodingToDo permet de détecter les images qui ne sont pas [[:fr:géocodage|géocodées]] à condition qu'elles soient rattachées à au moins une catégorie.

* [http://tools.wikimedia.de/~para/GeoCommons/geocodingtodo.php  Accès à l'outil]

=== Bad Old Ones : Liste des images d'une catégorie avec leurs caractéristiques ===

L'outil Bad Old Ones liste toutes les images d'une catégorie (et de ses sous-catégories) avec la date de leur dernière modification, leur vignette, leur description et leur utilisation dans tous les autres projets Wikimedia. L'outil permet de parcourir les catégories contenant des images ayant des caractéristiques mal spécifiées, par exemple [[:Category:Unknown]]. Développé par [[User:Magnus Manske|l'utilisateur Magnus Manske]].

* [http://tools.wikimedia.de/~magnus/bad_old_ones.php Accès à l'outil]


=== Commons sum-it-up : Génération d'en-tête descriptif multilingue pour une page Commons  ===

Cet outil permet de générer dans une page située dans Commons un en-tête construit en allant chercher le premier paragraphe dans chaque Wikipédia locale auquel la page renvoie par les liens interwiki. Il détecte également les liens interwikis manquants. 
* Développé par [[User:Magnus Manske|l'utilisateur Magnus Manske]].

* [http://tools.wikimedia.de/~magnus/commons_sumitup.php Accès à l'outil]

===LicenseToKill : Suppressions en série (réservé aux administrateurs) ===

[[Image:Licensetokill-0.1.jpg|thumb|right|100px|Copie d'écran LicenseToKill]]
Cet outil permet de supprimer simplement plusieurs fichiers figurant dans une catégorie ou une liste. Cet outil ne peut être mis en œuvre que par les administrateurs du wiki dans lequel se trouvent les fichiers. Utilisable uniquement sous Windows avec .NET 2.0. Développé par [[User:Dake|l'utilisateur Dake]].

* [http://licensetokill.sourceforge.net/ Accès à l'outil]

=== Add information : Mise au format standard de la description d'une image ===

Cet outil analyse le texte contenu dans la description d'une image et tente de la mettre au format standard en utilisant le modèle {{tl|Information}}. Développé par [[User:Magnus Manske|l'utilisateur Magnus Manske]].

* [http://tools.wikimedia.de/~magnus/add_information.php Accès à l'outil]

=== My "No Information" : Recherche des images ayant une description non standard  ===

Cet outil liste toutes les images déposées par un utilisateur donné n'utilisant pas le modèle {{tl|Information}}. Utilise l'outil "Add information".

* [http://tools.wikimedia.de/~magnus/mynoinfo.php Accès à l'outil]

=== ComDel : Génération du code à conserver/à supprimer (vote) ===

Comdel permet à un utilisateur de donner rapidement son avis sur toutes les images qui ont été soumises à une procédure de suppression durant une période de temps passé en paramètre.
* [http://tools.wikimedia.de/~magnus/comdel.php Accès à l'outil]

=== What is that? : Génération de description à partir des légendes des vignettes ===

Cet outil permet de générer la description d'une image dans les différentes langues en agrégeant la légende des vignettes (thumbnail) de l'image figurant dans les articles des différents wikipédia locaux qui l'utilisent.

* [http://tools.wikimedia.de/~magnus/whatisthat.php Accès à l'outil]
A single unit
=== GeocodingToDo : Recherche des images non géocodées ===
L'outil GeocodingToDo permet de détecter les images qui ne sont pas [[:fr:géocodage|géocodées]] à condition qu'elles soient rattachées à au moins une catégorie.
* [http://tools.wikimedia.de/~para/GeoCommons/geocodingtodo.php  Accès à l'outil]
=== Bad Old Ones : Liste des images d'une catégorie avec leurs caractéristiques ===
L'outil Bad Old Ones liste toutes les images d'une catégorie (et de ses sous-catégories) avec la date de leur dernière modification, leur vignette, leur description et leur utilisation dans tous les autres projets Wikimedia. L'outil permet de parcourir les catégories contenant des images ayant des caractéristiques mal spécifiées, par exemple [[:Category:Unknown]]. Développé par [[User:Magnus Manske|l'utilisateur Magnus Manske]].
* [http://tools.wikimedia.de/~magnus/bad_old_ones.php Accès à l'outil]
=== Commons sum-it-up : Génération d'en-tête descriptif multilingue pour une page Commons  ===
Cet outil permet de générer dans une page située dans Commons un en-tête construit en allant chercher le premier paragraphe dans chaque Wikipédia locale auquel la page renvoie par les liens interwiki. Il détecte également les liens interwikis manquants. 
* Développé par [[User:Magnus Manske|l'utilisateur Magnus Manske]].
* [http://tools.wikimedia.de/~magnus/commons_sumitup.php Accès à l'outil]
===LicenseToKill : Suppressions en série (réservé aux administrateurs) ===
[[Image:Licensetokill-0.1.jpg|thumb|right|100px|Copie d'écran LicenseToKill]]
Cet outil permet de supprimer simplement plusieurs fichiers figurant dans une catégorie ou une liste. Cet outil ne peut être mis en œuvre que par les administrateurs du wiki dans lequel se trouvent les fichiers. Utilisable uniquement sous Windows avec .NET 2.0. Développé par [[User:Dake|l'utilisateur Dake]].
* [http://licensetokill.sourceforge.net/ Accès à l'outil]
=== Add information : Mise au format standard de la description d'une image ===
Cet outil analyse le texte contenu dans la description d'une image et tente de la mettre au format standard en utilisant le modèle {{tl|Information}}. Développé par [[User:Magnus Manske|l'utilisateur Magnus Manske]].
* [http://tools.wikimedia.de/~magnus/add_information.php Accès à l'outil]
=== My "No Information" : Recherche des images ayant une description non standard  ===
Cet outil liste toutes les images déposées par un utilisateur donné n'utilisant pas le modèle {{tl|Information}}. Utilise l'outil "Add information".
* [http://tools.wikimedia.de/~magnus/mynoinfo.php Accès à l'outil]
=== ComDel : Génération du code à conserver/à supprimer (vote) ===
Comdel permet à un utilisateur de donner rapidement son avis sur toutes les images qui ont été soumises à une procédure de suppression durant une période de temps passé en paramètre.
* [http://tools.wikimedia.de/~magnus/comdel.php Accès à l'outil]
=== What is that? : Génération de description à partir des légendes des vignettes ===
Cet outil permet de générer la description d'une image dans les différentes langues en agrégeant la légende des vignettes (thumbnail) de l'image figurant dans les articles des différents wikipédia locaux qui l'utilisent.
* [http://tools.wikimedia.de/~magnus/whatisthat.php Accès à l'outil]

The lines before and after this excerpt were also separated by a blank line (\n\n), but were split into different units.

This bug means I spend much more time copying and pasting instead of quickly moving units around. I have a feeling this is related to T274715: Special:PageMigration inserts comma instead of new line but haven't investigated further.

Event Timeline

Nikerabbit moved this task from Backlog to page migration on the MediaWiki-extensions-Translate board.
Nikerabbit changed the subtype of this task from "Task" to "Bug Report".

I've figured out what's going on here. alignHeaders in rETRA resources/js/ext.translate.special.pagemigration.js:296 will add empty units or merge adjacent units in a naive attempt to make level 2 headings line up. It assumes that level 2 headings will always be in the same order or at least that all new headings are at the end. This is not a valid assumption. Sections are commonly added and moved around as pages grow and evolve.

I've thought about a few different ways to fix this, in order from least to most complex:

  1. Document that Special:PageMigration expects level 2 headings to match between source and translation pages and make the user fix it before migration.
  2. Put an "align headings" checkbox on the form so the user can skip alignment if it produces bad results.
  3. Try to guess when the assumption is not valid based on the total number of translation units. If the source page has more units than the translation page by some percentage, don't perform any merges.
  4. Try to guess when the assumption is not valid based on the number of headings. If the source page has more headings than the translation, don't perform any merges. Empty units would be added as appropriate until a merge is required, then stop trying to align headings.
  5. Stop trying to align headings if it would require merging more than n units
  6. Stop trying to align headings if it would merge a subheading (level 3 or above).

1 doesn't really fix anything. 5 and 6 would cut down on the bad merges, but wouldn't eliminate them. 3 and 4 would prevent most bad merges but also some useful merges. 2 means the user has to make another request, but is probably the best option (along with some documentation).

2 means the user has to make another request,

Not necessarily, it depends on how it’s implemented (and what you mean by a “request”): if there’s a checkbox on the default form, no additional HTTP request is necessary (but the checkbox will be there even if it makes no difference).

but is probably the best option (along with some documentation).

I agree.