Aller au contenu

Traduction automatique

phil/translation-bundle

La traduction automatique propose des cibles pour les segments non traduits d'un document. Elle est désactivée par défaut, et ses cibles ne sont jamais plus que des propositions : chacune est suggested, signalée à l'écran comme produite par une machine, jamais apprise par la mémoire avant qu'une personne la traduise ou la révise, et elle ne crédite personne.

Le port

Un service de traduction automatique s'atteint par un adaptateur qui porte son nom et qui implémente Phil\TranslationBundle\Application\Contract\MachineTranslator :

MéthodeContrat
name(): stringLe nom du service, affiché dans les erreurs
translate(list<string> $sources, LanguageTag $sourceLanguage, LanguageTag $targetLanguage): list<string>Une cible par source, en HTML en ligne, dans le même ordre

Le bundle ne fournit ni adaptateur ni SDK : l'application écrit l'adaptateur du service qu'elle a choisi, sur le client HTTP de Symfony, et le nomme dans la configuration.

phil_translation:
    machine_translation:
        enabled: true
        translator: App\Translation\SomeServiceTranslator

enabled: true sans translator arrête le conteneur avec un message ; un translator sans enabled: true reste désactivé.

Traduire

$count = $translations->machineTranslate('article:42', LanguageTag::of('fr'));

Les segments non traduits du document préparé sont envoyés par lots de 50 (Translations::MACHINE_BATCH). Chaque cible qui contient des mots, en UTF-8 valide, est proposée (suggested) et la ligne est signalée comme produite par une machine (SegmentRecord::isMachine()) ; une cible sans mots est omise. La méthode donne le nombre de segments à qui l'on a proposé une cible.

MachineTranslationFailed est lancée quand la traduction automatique est désactivée, quand le traducteur lance une exception (conservée comme exception précédente) ou quand il ne répond pas une cible par source ; rien n'est alors écrit. NotFound est lancée pour un document qui n'est pas préparé dans la langue. canMachineTranslate() indique si un traducteur est configuré.

À l'écran

Quand un traducteur est configuré, la page montre un bouton qui propose des traductions automatiques pour les segments non traduits (POST /{document}/{language}/machine), puis indique combien ont été proposées. Chaque cible venue de la machine et que personne n'a réécrite porte la marque machine translation. Une défaillance du service répond 502 avec un message qui lui est propre, le même quoi que le service ait répondu : ce que dit l'exception d'un adaptateur (une adresse, un quota, une clé) reste hors de la page, et reste dans la MachineTranslationFailed qu'elle chaîne, pour les journaux de l'application. Sans traducteur, la route répond 404.