Aller au contenu

Segments

phil/translation-memory

Un Segment est un morceau d'un document à traduire dans une langue. C'est une valeur : chaque changement retourne une copie.

PropriétéSens
keyL'endroit où se trouve le morceau dans son document : de 1 à 255 octets d'UTF-8, unique dans le document
sourceLe texte à traduire, en HTML en ligne
fingerprintLa Fingerprint de la source, calculée
stateUn SegmentState
targetLa traduction, en HTML en ligne, ou null
translatedSourceLa source pour laquelle la cible a été écrite, ou null

Empreintes

Fingerprint::of($text) est le SHA-256, en hexadécimal, du texte dont chaque suite d'espaces est réduite à une seule espace, sans espace à l'une ou l'autre extrémité. Deux sources qui ne diffèrent que par les espaces ont la même empreinte ; un mot, un signe de ponctuation ou une balise la change. Fingerprint::fromString() en relit une depuis le stockage et refuse tout ce qui n'est pas 64 chiffres hexadécimaux en minuscules.

États

ÉtatCibleUtilisableSens
untranslatedaucunenonRien n'est encore écrit
suggestedouinonProposée par la mémoire, une machine ou une importation ; personne ne l'a acceptée
translatedouiouiÉcrite ou acceptée par un traducteur
reviewedouiouiTraduite, puis vérifiée par un réviseur
staleouinonÉcrite pour une source qui a changé depuis

SegmentState::isUsable() dit si une cible peut être publiée ; hasTarget(), si l'état en contient une. Le constructeur refuse une cible sans état et un état sans cible.

Transitions

$segment = new Segment('b1/text', 'Hello world');   // untranslated
$segment = $segment->suggest('Bonjour monde');      // suggested
$segment = $segment->translate('Bonjour le monde'); // translated
$segment = $segment->review();                      // reviewed
$segment = $segment->withSource('Hello, world');    // stale: the target and the source it translated are kept
$segment = $segment->confirm();                     // translated again: the target still holds
$segment = $segment->clear();                       // untranslated
  • translate() et suggest() règlent la cible pour la source courante, à partir de n'importe quel état.
  • review() accepte une cible proposée ou traduite, et refuse un segment non traduit ou périmé.
  • confirm() ramène un segment périmé à l'état traduit, sa cible inchangée ; tout autre état est refusé.
  • withSource() garde le segment tel quel quand la nouvelle source a la même empreinte, laisse non traduit un segment non traduit, rend périmé un segment qui a une cible (en gardant la source pour laquelle sa cible a été écrite), et rend de nouveau traduit un segment périmé quand la source revient à ce texte.
  • withKey() déplace le segment vers une autre clé.

Ce qui a changé dans une source périmée

SourceChange compare, par phil/text-diff, les mots de la source pour laquelle une cible a été écrite avec la source courante. Il donne du HTML échappé avec <del> et <ins> : l'endroit à regarder avant de réviser la cible.

echo new SourceChange()->of($stale);
// The <del>red</del><ins>blue</ins> door

Il donne null quand le segment n'a pas de source antérieure, ou quand les mots sont les mêmes et que seules les balises ont changé.