Translation Retriever

Introduction

Translation Retriever est un outil d'aide à la traduction de mods pour l'Infinity Engine. Il travaille sur la base des fichiers TRA qui constituent les fichiers de texte des mods écrits avec WeiDU. Bien qu'il soit basé sur ces fichiers et donc surtout destiné aux mods écrits avec WeiDU, il peut aussi servir pour les mods plus anciens distribués avec un fichier dialog.tlk.

L'idée de Translation Retriever a commencé à germer avec les sorties de nouvelles versions basées sur WeiDU de pour les mods "historiques", Dark Side of the Sword Coast (DSotSC) pour Baldur's Gate) et The Darkest Day (TDD) pour Baldur's Gate II, à l'origine distribués avec un fichier dialog.tlk. Ces deux mods ont bénéficié d'une traduction française sous leur forme originale. En raison de la réécriture de ces mods pour une installation avec WeiDU, les traductions disponibles ne sont pas rééutilisables telles quelles. Les textes sont désormais répartis dans de nombreux fichiers. Récupérer la traduction existante exige d'identifier les textes identiques en VO entre les deux versions du mod (originale et WeiDU) puis reporter le texte équivalent en français dans le fichier français correspondant pour la version WeiDU. C'est un travail fastidieux déjà pour une ligne de texte. Sachant que DSotSC représentait environ 3000 lignes et TDD environ 11500, cela représente un travail considérable, même en tenant compte du fait qu'il y a beaucoup de doublons (en raison des éditeurs ayant servi à créer ces mods) et de lignes désormais superflues.

Etant donné l'aspect répétitif et relativement simple du principal travail (comparer des textes puis récupérer et placer au bon endroit la traduction correspondante), il est vite apparu qu'un programme serait un grand soutien pour accomplir le portage de la traduction sur les nouvelles versions WeiDU de ces mods. Les bases de Translation Retriever étaient jetées.

Le développement du programme s'est déroulé sur une très longue période (manque de temps, de motivation ...) qui a permis aux idées initiales de murir. Il s'est avéré que moyennant des ajustements mineurs de l'idée d'origine, le programme pouvait s'avérer utile pour la traduction de mods conçus dès le départ pour WeiDU. En particulier certains mods reprennent des textes du jeu de base pour diverses raisons (par exemple des descriptions d'objets génériques) et on peut donc assimiler ce cas à la récupération de textes déjà traduits. De même, certains mods précédemment ont perdu au fil des versions leur traduction (en raison de modifications majeures ou de l'indisponibilité du traducteur). Dans ce cas, Translation Retriever offre aussi le moyen d'identifier et de récupérer des traductions depuis la version antérieure. Ce dernier usage s'avère néanmoins plus lourd que les autres mais présente tout de même l'intérêt pour le traducteur d'éviter une bonne partie d'un travail fastidieux.

Principe de fonctionnement

La description qui suit est basée sur la récupération des traductions des mods cités dans l'introduction (DSotSC et TDD). Néanmoins il est facile de généraliser aux autres usages en changeant simplement les fichiers pris comme références décrits ci-après.

Le mod non WeiDU (ou le jeu de base) est constitué d'un fichier dialog.tlk contenant les textes (pour la langue anglaise, il n'y a que ce fichier). La version française se présente sous la forme de deux fichiers, dialog.tlk et dialogF.tlk (ce dernier contient des textes modifiés lorsque l'interlocuteur du groupe est une femme pour un dialogue avec un autre personnage). Par nature, ces fichiers correspondent parfaitement : à un indice donné, on trouve le texte en VO ou sa traduction selon le fichier. Ils serviront de référence car la correspondance entre les langues est directe. Pour opérer, Translation Retriever a besoin d'une conversion sous forme de fichiers TRA de ces fichiers (voir chapitre Obtention des fichiers de référence). Ces deux fichiers TRA constituent les fichiers de référence VO et traduit pour la récupération de textes traduits.

Le mod à traduire se présente sous la forme d'un certain nombre de fichiers TRA, regroupés dans un même répertoire, chaque fichier comportant des textes à traduire et ayant chacun un indice sous la forme @ suivi d'un nombre. Translation Retriever détermine les fichiers contenant des textes à traduire en parcourant tous les fichiers portant l'extension TRA dans ce répertoire, qu'il considère comme le répertoire source.

La première tâche consiste à identifier tous les textes de la version WeiDU du mod en chargeant les fichiers du répertoire source. Pour chaque texte à traduire, le programme recherche dans le fichier de référence en VO une correspondance exacte (au caractère près, la seule différence actuellement tolérée est le passage majuscule-minuscule).

S'il trouve le texte identique, Translation Retriever note l'indice du texte dans le fichier de référence en VO va alors récupérer le texte au même indice dans le fichier de référence traduit.

S'il ne trouve pas de correspondance exacte, Translation Retriever découpe le texte à traduire en mots puis parcourt à nouveau les textes de la référence en effectuant une comparaison au niveau des mots.

Dans un premier temps, il compare les mots dans l'ordre de la phrase (le premier mot de l'une avec le premier de l'autre, le deuxième avec le deuxième, ...). S'il ne trouve aucune différence jusqu'à 90% des mots du texte à chercher, Translation Retriever considère que le texte du fichier de référence est une correspondance probable. Il évalue alors la probabilité comme le rapport du nombre de mots identiques sur le nombre de mots du texte à chercher, moins le rapport de la différence de taille des textes.

S'il y a une différence de mots avant d'atteindre 90% des mots du texte, Translation Retriever effectue une comparaison des mots sans respecter l'ordre des mots dans le texte. Dans ce cas, la probabilité est alors évaluée comme le rapport du nombre de mots identiques sur le nombre de mots du texte à chercher, moins le rapport de la différence de taille des textes et un autre facteur destiné à réduire la probabilité par rapport au cas où les mots sont dans le bon ordre. Ceci autorise l'ajout, la modification ou la suppression d'un mot en début de texte sans trop pénaliser la probabilité.

Après avoir comparé le texte à tous les textes du fichier de référence, Translation Retriever conserver l'identifiant dans le fichier de référence des 5 textes ayant les plus fortes probabilités et les indique dans le fichier résultat. Puisqu'aucune correspondance exacte n'a été trouvée, c'est le texte non traduit qui reste dans le fichier .tra traduit.

Dans tous les cas, le programme copie ensuite le texte dans le fichier TRA résultat dans le répertoire désigné pour recevoir les fichiers TRA traduits du mod WeiDU. Dans le meilleur cas, il copie le texte traduit récupéré en lui attribuant l'indice de texte identique à celui du fichier à traduire. S'il n'a pas trouvé le texte dans le fichier de référence, le programme se contente de recopier le texte non traduit en indiquant qu'il n'a pas réussi à trouver une correspondance exacte.

En d'autres termes, Translation Retriever automatise le processus décrit ci-dessous :

Processus de récupération d'un texte déjà traduit

Si le fichier de référence traduit comporte un texte avec une variation au féminin, les deux versions masculine et féminine seront bien reportées dans le fichier résultat.

En ce qui concerne les noms des fichiers sons externes associables à un texte (cas d'un personnage avec un doublage de la voix), Translation Retriever se contente de recopier le nom indiqué dans le fichier de mod à traduire (et ignore le nom qui pourrait éventuellement se trouver dans le fichier de référence). Ainsi le son choisi par le mod sera préservé.

Bien évidemment, pour que le processus de récupération fonctionne, il est impératif que les deux fichiers de référence, en VO et traduit, correspondent bien au même contenu (même nombre de textes, même jeu de base, même mod).

Utilisation

Cas général

Au démarrage, Translation Retriever ouvre la fenêtre suivante :

Fenêtre principale du programme

Les deux premières lignes permettent la sélection des deux fichiers de référence. Les deux lignes suivantes permettent la sélection du répertoire contenant l'ensemble des fichiers à traduire et le répertoire dans lequel créer les fichiers résultats comprenant les traductions récupérées.

Le premier fichier correspond au fichier TRA contenant les textes du mod dont on veut reprendre les traductions, dans la langue d'origine du mod (typiquement en anglais). C'est ce que Translation Retriever considère comme le fichier de référence en VO. Lorsqu'on utilise Translation Retriever pour récupérer des textes d'origine Bioware (du jeu de base), il faut donc utiliser un fichier de référence en VO issu d'un fichier dialog.tlk VO. On trouve assez facilement ce fichier sur Internet (voir chapitre Références).

Le second fichier correspond au fichier TRA contenant les textes traduits correspondant au fichier de référence VO.

Les troisième et quatrième lignes permettent d'indiquer les répertoires source et destination des fichiers du mod à traduire.

La troisième ligne sert à indiquer dans quel répertoire sont rassemblés tous les fichiers TRA à traduire et . S'il s'avérait que le mod ne place pas tous les fichiers de sa langue d'origine dans le même répertoire, il faudrait préalablement les regrouper tous dans un même répertoire (à condition qu'ils aient tous des noms différents) avant d'utiliser Translation Retriever.

La dernière cellule doit indiquer un répertoire existant (et de préférence vide) dans lequel l'utilisateur veut que Translation Retriever crée les fichiers résultats. Il est très important que ce ne soit pas le même que le répertoire source, sous peine d'écraser les fichiers TRA en VO !

Le choix d'un fichier ou d'un répertoire s'effectue en cliquant sur le bouton correspondant sur la droite. Le programme présente alors la fenêtre habituelle d'ouverture de fichier ou de choix d'un répertoire.

Importation

Après la sélection des fichiers de référence et des répertoires source et destination, il ne reste plus qu'à cliquer sur le bouton Import.

Translation Retriever charge alors les fichiers de référence puis il identifie les fichiers à traduire dans le répertoire source. Ensuite il traite chacun des fichiers TRA du répertoire source à la suite les uns des autres.

Translation Retriever indique dans les barres de progression les fichiers qu'il est en train de traiter et le degré d'avancement. Les pourcentages sont des indications basées sur le nombre de fichiers et de textes à traiter à l'intérieur d'un fichier et ne sont pas forcément révélateurs du temps écoulé et du temps restant. Si le dernier fichier à traiter comprend 80 % des textes du mod, on pourra être à 99 % des fichiers traités mais n'avoir réalisé que 20 % du travail. Patience donc !

Une fois l'importation terminée, Translation Retriever présente une courte synthèse, comme dans l'exemple suivant (pour TDD) :

Résultats d'importation pour TDD

Je vous invite à prendre une capture d'écran ou à noter les résultats de la dernière ligne. Ils donnent une bonne indication de la réussite de la recherche et du travail qui restera donc à faire à la main. Dans cet exemple, Translation Retriever a réussi à récupérer 4127 textes ("Exact match") et identifié de possibles correspondances ("Likely matches") pour 57 textes supplémentaires sur les 4210 que comportent le mod (ici les dialogues de TDD). Il peut arriver que les 26 manquantes soient parmi les plus compliquées mais le résultat est déjà plutôt exceptionnel.

La valeur de "Likely match" indique le nombre de textes pour lequel le programme a identifié des textes du fichier de référence en VO ayant une forte probabilité de correspondre à des textes à traduire et pour lesquels il serait donc possible de récupérer une traduction (moyennant quelques ajustements, le cas échéant, par exemple si quelques mots ont changé).

Vous trouverez les explications sur le contenu des fichiers générés par dans le chapitre Exploitation des fichiers obtenus.

Cas particulier pour la récupération à partir d'un mod déjà sous la forme de plusieurs fichiers tra

Ce cas se présente pour des mods qui ont connu une version traduite dans leur passé mais qui a été abandonnée par la suite.

Le principe consiste ici à considérer que les couples de fichiers TRA VO-VF de la vieille version constituent à tour de rôle le couple de fichiers de références.

Dès lors, il est possible de lancer la récupération par Translation Retriever pour tout ou partie des fichiers TRA de la dernière version du mod.

Attention!

Translation Retriever écrase systématiquement les fichiers dans le répertoire destination. Il faudra donc recopier, après le traitement d'un couple de fichiers de référence, les textes qu'il aura réussi à récupérer dans une autre arborescence dans laquelle on constituera les fichiers de traduction effectifs.

Exemple 1 :

Les évolutions du mod font que beaucoup de fichiers TRA ont changé de nom ou qu'il y a de nouveaux fichiers.

L'importation à partir du premier couple de fichiers de référence, Ref1.TRA, permet de récupérer le texte @1 de Toto.TRA et le texte @5 de Titi.TRA. On met alors de côté les fichiers de destination dans un répertoire de sauvegarde avant de lancer une importation sur d'autres couples de fichiers de références.

Le deuxième couple de fichiers de référence, Ref2.TRA, permet ensuite de récupérer le texte @7 de Toto.TRA et le texte @2 de Titi.TRA. Il faut alors recopier le texte @7 de Toto.TRA et la recopier dans le fichier du même nom dans le répertoire de sauvegarde (en y effaçant le texte @7 qui y était resté en VO) et faire de même pour le texte @2 de Titi.TRA.

Et ainsi de suite... On constitue alors, dans le répertoire de sauvegarde, la consolidation des traductions récupérées dans les différents fichiers de référence. Une fois tous les fichiers de référence traités, il ne reste plus qu'à traduire ce qui manque ! ;-)

Exemple 2 :

L'auteur du mod a probablement continué à modifier son mod à partir de fichiers d qui contiennent directement le texte et ne font pas appel à des fichiers tra. Du coup la nouvelle version du mod ne tient pas compte des fichiers tra traduits. Le mod doit à nouveau être "traifié" mais cela entraîne une renumérotation complète des textes dans les fichiers tra. Il faut donc reprendre tous les fichiers tra traduits à l'origine et vérifier d'une part que les textes en VO n'ont pas changé et réaffecter le texte ave le bon indice @ dans le fichier. Desecration of Souls, pour ne pas le nommer...

Les noms de fichiers d et tra n'ont pas changé. On peut supposer que seul le fichier de même nom mais de l'ancienne génération pourra contenir les mêmes textes. On traitera donc les fichiers tra du mod un par un.

Comme fichiers de référence, on indique un coup de fichier TRA VO et traduit provenant de la version avant retraification. Dans le répertoire désigné comme source, on place seulement le fichier TRA de même nom issu de la traification de la nouvelle version du mod.

Après importation, on obtient dans le répertoire destination le fichier TRA traduit dont on a récupéré les textes qui n'avaient pas changé entre les différentes versions du mod.

En répétant l'opération pour tous les fichiers TRA pris isolément, on obtient dans le répertoire destination l'ensemble des fichiers TRA du mod. Il ne reste "plus qu'à" compléter le travail de recherche et à reprendre quelques traductions.

Autre méthode pour la récupération à partir d'un mod déjà sous la forme de plusieurs fichiers tra

Dans le cadre de la récupération de la traduction espagnole de BG1 NPC Project pour passer de la version 14 à la version 15, j'ai proposé une autre méthode basée sur l'installation du mod pour obtenir un fichier .tlk, facile à convertir en fichier .tra, incluant tous les textes des fichiers .tra. Cette méthode s'appuie sur l'utilisation d'un fichier dialog.tlk vide pour ne garder que les textes des fichiers .tra du mod.

Pour plus de détails et l'obtention de ce fichier dialog.tlk vide, je vous invite à consulter le sujet créé dans le forum consacré à la traduction de BG1 NPC Project dans l'atelier des d'Oghmatiques.

Obtention des fichiers de référence

Pour obtenir un fichier de référence avec les anciens mods non WeiDU ou avec les jeux de base, il est nécessaire de convertir les fichiers TLK sous forme de fichier TRA. Ceci s'effectue simplement à l'aide de l'outil WeiDU.

Par le passé, j'ai pu constater que WeiDU avait l'habitude d'aller chercher dans le répertoire d'installation de Baldur's Gate II (d'après les informations de la base de registres) ce qu'il ne trouvait pas dans le répertoire local. Cela a parfois des conséquences fâcheuses pour notre opération. La procédure que je décris par la suite contourne ce problème et m'a toujours donné satisfaction, en dépit de sa légère lourdeur.

WeiDU est capable d'agréger les versions masculines et féminines des textes, réparties dans les fichiers dialog.TLK et et dialogF.TLK, en un seul et unique fichier TRA contenant deux textes pour un indice uniquement lorsque les versions masculines et féminines diffèrent. C'est très pratique pour obtenir la version français e en un seul fichier mais en contrepartie il faut faire attention à ne pas garder le fichier dialogF.tlk pour générer le fichier TRA pour la version anglaise (il n'y a pas de fichier dialogF.TLK, le passage au féminin est obtenu par d'autres moyens).

La commande pour convertir le fichier dialog.TLK (et le fichier dialogF.tlk, s'il existe) est la suivante :

weidu --traify-tlk --out dialog.tra

Pour éviter d'avoir à ouvrir une invite de commande et à se placer dans le répertoire du jeu avant de lancer la commande, le plus simple est de créer un fichier TLKtoTRA.bat avec le bloc notes et d'y écrire cette commande. Attention, il y a deux '-' avant traify-tlk et out et un seul '-' entre traify et tlk (utiliser un copier-coller depuis ce document pour éviter les erreurs). Il suffit alors de placer ce fichier bat dans le répertoire du jeu puis de le lancer depuis l'Explorateur Windows pour obtenir le fichier dialog.TRA.

Pour obtenir le fichier pour la version anglaise :

  1. Renommer dialog.tlk (en français) sous un autre nom (exemple Fr_dialog.tlk)
  2. Renommer dialogF.tlk (en français) sous un autre nom (exemple : Fr_dialogF.tlk)
  3. Placer le fichier dialog.tlk anglais dans le répertoire du jeu
  4. Exécuter le fichier TLKtoTRA.bat
  5. Renommer le fichier dialog.tra sous le nom dialogAnglais.tra (par exemple)
  6. Supprimer le fichier dialog.tlk (anglais)
  7. Remettre les noms dialog.tlk et dialogF.tlk aux fichiers français mis de côté

Pour obtenir le fichier pour la version française (maintenant qu'on a bien renommé les fichiers)

  1. Exécuter le fichier TLKtoTRA.bat
  2. Renommer le fichier dialog.tra sous le nom dialogFrancais.tra (par exemple). Notez que celui-ci contient aussi les adaptations au féminin des textes qui le nécessitent.

Désormais les fichiers dialogAnglais.tra et dialogFrancais.tra peuvent servir de fichiers de références dans Translation Retriever.

Exploitation des fichiers obtenus

Le répertoire de destination contient les mêmes fichiers que le répertoire des fichiers à traduire. Les éléments récupérés depuis le fichier de référence traduit sont bien évidemment traduits dans les fichiers de destination. Tous les textes que le programme n'a pas retrouvés exactement dans le fichier de référence en VO et n'a donc pas pu traduire sont précédés d'un commentaire sur la ligne précédente.

En outre Translation Retriever conserve la mise en page des fichiers TRA à traduire, plus particulièrement les lignes vides ainsi que les commentaires placés par l'auteur du mod (évidemment en VO).

Les textes pour lesquels Translation Retriever a trouvé une correspondance exacte se trouvent remplacés par les traductions venant du fichier de référence.

Remarques

Les textes pour lesquels le programme a identifié des correspondances probables sont précédées d'un ou plusieurs commentaires fournissant l'idenfiant (avec la numérotation du fichier .tra de référence) des textes probables ainsi que le pourcentage évalué de probabilité. N'apparaissent que les textes dont la probabilité est supérieure à 50% et seulement les 5 de plus forte probabilité.

//Translation Retriever: Likely string found in reference at Id 73121, likeliness 99.2
// Translation Retriever: Likely string found in reference at Id 30652, likeliness 93.3
// Translation Retriever: Likely string found in reference at Id 61713, likeliness 93.3
@nn = ~original string~

Une probabilité supérieure à 99% indique en général un texte dont les seules différentes sont la ponctuation. Il est même possible d'obtenir une probabilité de 100.0%, par exemple quand il s'agit juste d'un caractère de ponctuation substitué par un autre.

Une probabilité supérieure à 90% indique une forte similitude des mots, dans l'ordre strict des phrases ou non.

Les textes sans correspondance ou dont les correspondances ont une probabilité évaluée à moins de 50% sont précédés d'un commentaire signalant l'échec de récupération :

// Translation Retriever: Exact match not found
@nn = ~original string~

En pratique, il suffit de faire une recherche de commentaire de Translation Retriever (commençant par // Translation Retriever) pour identifier tous les éléments d'un fichier .tra nécessitant une reprise.

Evolutions

Version 1.0

Version 2.0

Version 2.0.1

Version 2.0.2

Version 2.0.3

Version 2.0.4

Version 2.0.5

Version 2.0.6

Outils complémentaires

Remarque : information reprise du document en anglais, non traduit.

Comparing likely strings with the searched string is not always easy when there are subtile changes. I would suggest using a file comparison tool to help highlighting the changes in the strings. I would particularly recommend a free tool called KDiff3, which has the major benefit of highlighting differences down to character level, for instance addition or removal of a space or a comma. Most other similar tools stop at highlighting lines.

The simple way is to create two temporary files, one with the searched string, the other one with the likely string, then to ask KDiff3 to compare them. You just need to update one or the two files with a new string and then select Reload from the Kdiff3 File menu to ask it to compare them again, saving the time to repeat selection of the files to compare.

KDiff3 also handles file merging from up to 3 sources. This can be handy when trying to merge translations retrieved from several references for a single .tra file.

Pour chercher un texte particulier dans un ensemble de fichier, il existe un très bon programme, bien meilleur que la recherche de Windows (sous XP, en tout cas) dès qu'il s'agit de chercher un texte à l'intérieur de fichiers. Il s'agit de Agent Ransack. Il peut s'avérer utile pour chercher des textes qui ont échappé au programme (probabilité trop faible) alors qu'il semble à l'oeil nu qu'ils existent.

Références

A compléter : liens vers des fichiers TLK de référence

Textes de Baldur's Gate (+ son extension) en anglais

Textes de Baldur's Gate (+ son extension) en anglais, version Baldurdash (quelques corrections) : utile si l'auteur du mod est reparti des textes corrigés

Textes de Baldur's Gate (+ son extension) en français

Textes de Baldur's Gate II (+ son extension) en anglais

Textes de Baldur's Gate (+ son extension) en anglais, version Baldurdash (quelques corrections) : utile si l'auteur du mod est reparti des textes corrigés

Textes de Baldur's Gate II (+ son extension) en français

Remerciements

Les premières idées concernant ce programme n'auraient jamais vu le jour sans des discussions avec Egrevyn ou Graoumf concernant le portage des traductions des mods Dark Side of the Sword Coast et The Darkest Day après la sortie des versions WeiDU de ces mods.

Le programme lui-même n'aurait jamais dépassé le stade des idées sans quelques relances et encouragements de Graoumf au fil des années. Ca m'apprendra à me taire la prochaine fois ! ;-)

Isaya (isaya_ie AT hotmail POINT com)