Assistant de traduction de jeux en BASIC

Un seul programme, plusieurs langues

J’aime les jeux d’aventure programmés en BASIC, en langue anglaise et en langue française. Il y a quelques temps, j’ai eu pour projet de traduire « The treasure of Elgon » en français. Mais c’est fastidieux, le texte à traduire étant noyé dans les instructions du BASIC.

J’ai donc développé un outil d’assistance à la traduction. Ce dernier, écrit en Python, va lire chaque ligne du programme BASIC, en extraire le texte (i.e. les caractères entre des guillemets) et l’écrire dans un fichier. Celui-ci peut ensuite être traduit, soit à la main, soit en utilisant un site de traduction en ligne tel que DeepL ou Google Translate.

Une fois la traduction effectuée, le fichier peut être réintroduit dans le programme BASIC initial et l’on obtient ainsi un programme fonctionnel dans la langue cible.

PROGRAMME D’EXEMPLE

Pour plus de clarté, voici en exemple le programme test.bas (écrit en BASIC ) qui est un embryon de programme d’aventure, en langue française, et que nous allons traduire en anglais :

10 REM ***** PROGRAMME DE TEST DE bastrad.py *****
20 REM OUTIL DE "TRADUCTION" DE PROGRAMMES BASIC
100 A$ = "QUE FAITES-VOUS "
110 DIM L$(5), MO$(4)
120 L = 1 : M = 1
130 FOR I = 1 TO 5 : READ L$(I) : NEXT I
140 FOR I = 1 TO 4 : READ M$(I) : NEXT I
150 HOME
200 REM ** BOUCLE PRINCIPALE **
210 IF L < 1 THEN L = 5
220 IF L > 5 THEN L = 1
250 PRINT "Vous etes ";L$(L)
260 PRINT "Vous voyez " + M$(M) : REM ""
270 PRINT : PRINT A$; : INPUT R$
280 IF R$ = "Q" THEN PRINT "Au revoir" : END
290 IF R$ = "N" THEN L = L - 1 : GOTO 200
300 IF R$ = "S" THEN L = L + 1 : GOTO 200
310 IF R$ = "E" OR R$ = "O" THEN M = INT(RND(1)*4) + 1 : GOTO 200
320 PRINT : PRINT "ACTION IMPOSSIBLE ! " : PRINT "JE NE COMPRENDS PAS"
330 PRINT ""
340 GOTO 200
999 REM ** DONNEES **
1000 DATA "DANS UNE GROTTE", "SUR UNE TOUR", "DEVANT LE CHATEAU", "AU BORD DU FLEUVE", "DANS UNE FORET SOMBRE"
1010 DATA "UN DRAGON", "UNE FEE", "UNE EPEE", "UN LOUP DES MONTAGNES"
1020 REM
1030 REM "FIN DU PROGRAMME"

Pour traduire ce programme en anglais, la première étape est d’en extraire les chaînes de caractères grâce à l’utilitaire bastrad.py :

bastrad.py -x text_fr.txt test.bas

L’option -x permet l’extraction du texte vers le fichier text_fr.txt :

100,"QUE FAITES-VOUS "
250,"Vous etes "
260,"Vous voyez "
280,"Q","Au revoir"
290,"N"
300,"S"
310,"E","O"
320,"ACTION IMPOSSIBLE ! ","JE NE COMPRENDS PAS"
330,""
1000,"DANS UNE GROTTE","SUR UNE TOUR","DEVANT LE CHATEAU","AU BORD DU FLEUVE","DANS UNE FORET SOMBRE"
1010,"UN DRAGON","UNE FEE","UNE EPEE","UN LOUP DES MONTAGNES"

La deuxième étape est la traduction proprement dite. Ici, j’utilise Google Translate. Voici le résultat de la traduction automatique français -> anglais (avec quelques reprises mineures tel que le remplacement de « O » par « W » à la ligne 310) que je copie ensuite dans le fichier text_en.txt :

100, "WHAT ARE YOU DOING"
250, "You are "
260, "You see "
280, "Q", "Goodbye"
290, "N"
300, "S"
310, "E", "W"
320, "IMPOSSIBLE ACTION!", "I DON'T UNDERSTAND"
330, ""
1000, "IN A CAVE", "ON A TOWER", "IN FRONT OF THE CASTLE", "BY THE RIVER", "IN A DARK FOREST"
1010, "A DRAGON", "A FAIRY", "A SWORD", "A MOUNTAIN WOLF"

La dernière étape est de réintroduire le texte traduit de façon à obtenir un programme BASIC fonctionnel, en anglais :

bastrad.py -r text_en.txt -o test_en.bas test.bas

L’option -r permet de remplacer les chaines de caractères du programme initial test.bas par celles lues dans text_en.txt , et de générer le programme de sortie défini par l’option -o, ici test_en.bas :

10 REM ***** PROGRAMME DE TEST DE bastrad.py *****
20 REM OUTIL DE "TRADUCTION" DE PROGRAMMES BASIC
100 A$ = "WHAT ARE YOU DOING"
110 DIM L$(5), MO$(4)
120 L = 1 : M = 1
130 FOR I = 1 TO 5 : READ L$(I) : NEXT I
140 FOR I = 1 TO 4 : READ M$(I) : NEXT I
150 HOME
200 REM ** BOUCLE PRINCIPALE **
210 IF L < 1 THEN L = 5
220 IF L > 5 THEN L = 1
250 PRINT "You are ";L$(L)
260 PRINT "You see " + M$(M) : REM ""
270 PRINT : PRINT A$; : INPUT R$
280 IF R$ = "Q" THEN PRINT "Goodbye" : END
290 IF R$ = "N" THEN L = L - 1 : GOTO 200
300 IF R$ = "S" THEN L = L + 1 : GOTO 200
310 IF R$ = "E" OR R$ = "W" THEN M = INT(RND(1)*4) + 1 : GOTO 200
320 PRINT : PRINT "IMPOSSIBLE ACTION!" : PRINT "I DON'T UNDERSTAND"
330 PRINT ""
340 GOTO 200
999 REM ** DONNEES **
1000 DATA "IN A CAVE", "ON A TOWER", "IN FRONT OF THE CASTLE", "BY THE RIVER", "IN A DARK FOREST"
1010 DATA "A DRAGON", "A FAIRY", "A SWORD", "A MOUNTAIN WOLF"
1020 REM
1030 REM "FIN DU PROGRAMME"

Vous pouvez tester ce programme avec avec un Apple II (émulé on non), il fonctionne ! Vous remarquerez que l’outil bastrad.py ignore les commentaires (i.e.. tout ce qui suit la commande REM).

L’OUTIL BASTRAD.PY

Voici l’outil que vous pouvez télécharger librement, au format tar :

L’aide en ligne est la suivante :

Usage: bastrad.py  <parameters> <BASIC file>
Parameters are :
 -x txt_file   extract text from BASIC file to txt_file
 -r txt_file   replace text from BASIC file with text from txt_file
 -o file       output BASIC file (to be used with -r option only)
 -h            display this help

PERSPECTIVES

Le prochain projet est d’utiliser l’utilitaire bastrad.py pour traduire un jeu d’aventure complet, tel que « The treasure of Elgon » , de l’anglais vers le français cette fois. Mais ceci fera l’objet d’un prochain article…

A suivre… To be continued… Continuará… Fortsetzung folgt…Continua…

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *