J’ai créé un script Python qui permet de traduire des jeux plus facilement.
Concrètement, plus besoin de toucher au code : le script extrait toutes les chaînes de caractères du code source, vous les met dans un fichier à part, et il suffit d’écrire votre traduction dans ce fichier et de relancer le script pour obtenir le code source final. (Avec quelques bidouilles finales, notamment bien ‹ traduire › le nom de la bibliothèque de grammaire si il apparaît, et éventuellement modifier quelques déclarations de verbes.)
Ah, et grâce la façon dont c’est fait, si vous changez votre code original, votre fichier de traduction marchera toujours (il sera juste mis à jour avec les nouvelles chaînes de caractères).
Pas sûr que ça marche super bien pour les jeux où il y a énormément de code adaptatif, mais avec un peu de doigté c’est sûrement possible (ou traduisez les gros morceaux avec le script et finissez en retouchant le code source directement).
Ce qui signifie que si ça vous dirait bien de traduire un jeu mais que vous ne connaissez rien à la programmation, c’est maintenant possible !
Et même si vous savez programmer en Inform, c’est beaucoup mieux d’utiliser ce script, puisque vous ne mettrez plus les mains dans le cambouis, avec tous les risques que ça comporte. J’ai encore en travers de la gorge l’erreur de copier-coller ajoutée à la dernière minute en traduisant vers l’anglais la correction d’un bug dans Gossip, ce qui rendit le NPC qui donnait des indices complètement inutile, ce qui bloqua tout le monde à la dernière scène, ce qui me fit (peut-être, sans doute) finir deuxième à l’IntroComp 2009 ^^ Bref, un accident fatal est si vite arrivé, alors si vous pouvez vous abstenir de toucher au code, nul doute que ça soit préférable.
Je n’ai par contre pas testé avec Inform 7, mais il me semble que ça marchera tout aussi bien (il faut juste expliquer aux traducteurs potentiels que « [if the objet is in the location] » se laisse tel quel). Si quelqu’un pouvait essayer, pour I6 ou I7, et me faire des retours, ça serait super
Merci pour ce script. Je n’ai pas prévu de traduire un jeu pour le moment mais je me fais souvent la réflexion que ce serait super d’avoir plein de bons jeux anglais traduits, alors je suis à fond avec toi au moins moralement (et pour du beta test) !
J’ai voulu télécharger pour voir ce que ça donnerait avec du code I7, mais ça me donne une erreur 404.
Sinon, c’est effectivement pratique. Par contre, est-ce qu’on pourrait avec ça faire passer son texte sans le code qu’il y a autour dans un correcteur (comme Antidote) ?
Je suis tout à fait d’accord, mais à vrai dire ce serait peut-être encore plus utile de traduire des bons jeux d’autres langues (espagnol, italien, allemand…), s’il y a des gens ici qui connaissent ces langues. En ce qui me concerne — et je ne dois pas être le seul dans la communauté IF francophone — je connais suffisamment l’anglais écrit (mais ne me demandez pas de le parler ! ) pour préférer jouer aux jeux anglais en VO, sauf s’ils sont fortement basés sur des jeux de mots ou sur un langage très littéraire ou archaïque ou au contraire très familier. Et vous ?
Je préfère jouer à un jeu en français si la traduction est de qualité, parce que jouer à une IF c’est déjà un effort mental, rajouter la langue par-dessus (même si j’ai un niveau d’anglais lu pas mauvais), ça rend la chose un poil plus difficile. Mais surtout je pense à tous ceux qui sont mauvais en anglais
Mais je n’ai rien contre la traduction depuis d’autres langues, si certains ont les compétences !
@Natrium: oups, en effet, j’avais uploadé le fichier sous le mauvais nom. C’est réparé !
Et pour le correcteur orthographique, je pense que le plus gros problème (outre les [if truc is in truc] d’I7) c’est que le fichier de traduction contient l’original et la traduction, donc le correcteur orthographique trouvera plein d’erreurs qui sont en fait l’autre langue. Mieux vaut utiliser le switch du compilateur qui crache tout le texte du jeu (-r, il me semble)
@Stormi, Eriorg: Oui, moi aussi je trouve que ça serait bien d’avoir plus de jeux traduits ! C’est aussi pour ça que j’ai fait cet outil, pour que ça soit plus facile et plus abordable. Ca serait peut-être pas mal d’avoir un dépôt svn ou git(hub) dont on se servirait pour faire des traductions, qu’on ouvrirait à tout le monde (anglophones, hispanophones, et autres) pour coordonner les efforts et avoir plus de gens qui y travaillent ?
De mon côté, je comprends l’espagnol à un niveau plutôt moyen, et j’aimerais bien un jour peut-être traduire un de leurs jeux ; ils ont notamment des jeux très beaux avec beaucoup d’images (Transilvania Corruption) qui donnent vraiment envie. Le problème, c’est que si leurs jeux sont faits avec InformATE!, c’est plus dur à traduire (en fait, je sais pas comment on ferait : y’a des trucs qu’ils ont inventé, du genre les trucs comme nombre_fp, qui correspond aux synonymes féminins pluriels !).
Mais si on décidait de créer un lieu où les gens se retrouvent pour collaborer sur les traductions de fictions interactives, ça serait utile et chouette je pense
Pour information, à la louche, Capitaine Verdeterre c’était à peu près 1000 chaînes, traduites en 3 mois. Bref, si on veut s’attaquer à des gros projets, il faut probablement être plusieurs
Nécroooopostiiiing
Pour compléter le post précédent, « Shade » a pris 3 mois pour la traduction (à 2, un peu en dilettante) et le bêta-test par Natrium ; sachant que Verdeterre n’avait pas été bêta-testé
Au menu : on change le format de stockage de la traduction, et on passe en format .po !!
Il s’agit d’un format standardisé utilisé pour la traduction de plein de logiciels (notamment les distributions linux et les plugins Wordpress). On trouve plein de programmes sur Internet pour les éditer, comme POEdit, POEditor, Virtaal, etc. ; mais c’est aussi facile dans un bloc-notes, vu que ça ressemble à
Donc voilà, plutôt que de réinventer la roue avec un format fait maison, j’ai préféré avoir un format standardisé et connu (et pas beaucoup plus compliqué). Ca nous permet de mettre « traductions en .po » sur notre CV Mais surtout, j’espère aussi que ça pourra aider à rameuter des traducteurs - vu que le format est connu ça peut faire tomber une barrière à la contribution !
Par contre c’est une version alpha Contrairement à la v1, qui a été testée sur Shade et Life on Mars?, je n’ai pas encore fait de tests sur cette version (enfin, un petit exemple en I6 et c’est tout quoi). Tout rapport de bug est bienvenu, mais le mieux serait qu’on se lance dans un nouveau projet de traduction pour tester, non ?
Super ! Comme je n’avais pas eu l’occasion de tester la v1, j’ai essayé la nouvelle version avec une source I7 (l’exemple 37 du manuel d’Inform) pour voir s’il n’y aurait pas des améliorations à faire de ce côté-là.
Malheureusement, le script ne fonctionne pas : le code python contient à la fois des indentations avec espaces et des indentations avec tabulations, le tout mélangé. J’ai essayé de corriger, mais j’avais du mal à voir quel était le niveau d’indentation pour certaines lignes.
Sinon, je ne suis pas sûr que ça va bien fonctionner avec du code I7, principalement pour 2 raisons : il n’y a pas que les chaînes à traduire, il y a aussi le nom des objets et autres directement dans le code ; et ça ne fonctionnera pas si on traduit depuis une source totalement en français (comme la FI du tuto), puisque là, il faudrait carrément traduire le code en entier.
Mais bon, le dernier cas ne nous concerne pas, et j’imagine que ça doit quand même faciliter la traduction.
Dites-moi, je ne suis pas spécialiste, mais l’I7 n’est pas basé sur l’I6 ? Lors de la compilation, il n’y a pas un passage préalable par le I6 ? Dans tous les cas, à une étape de la compilation, il y a peut-être un moment où on pourrait extraire toutes les chaînes de caractères du jeu, et après, il suffirait de remplacer dans le code source. Est-ce utopiste ?
@ciseur : oui, mais l’ennui c’est que le code I6 généré par Inform 7 est vraiment pas joli x) Tous les fichiers sont inclus dans un gros fichier, c’est pas forcément évident de retrouver ses petits… mais mon script est censé marcher en I7, il suffit de le perfectionner
@Natrium : ah zut C’est quoi le problème exactement ? Je sais pas si j’ai bien compris (et je sais pas quel exemple c’est - Disenchantment Bay 2 ?).
Pourtant je viens d’essayer avec la source du Temple Nâga et ça me fait quelque chose de pas déconnant… (résultat en pièce jointe de ce post) Est-ce que tu y vois ton problème ?
En tout cas merci d’avoir essayé et de me faire remonter les problèmes Oui tu as raison, il faut aussi traduire genre les noms des objets partout, mais c’est vraiment pas évident de les distinguer dans le code, faudrait un parser d’I7 complet… (sans parler de ta traduction x) ) De toute façon je pense pas qu’on puisse arriver à une solution parfaite, il faudra toujours une phase de retouche pour retoucher la grammaire, ajouter des synonymes… Mais au moins on peut extraire la partie à traduire du code en lui-même, et j’y vois plusieurs avantages !
À ciseur68 : c’est une très très très mauvaise idée. Le plus petit code source I7 possible est celui-ci, constitué d’une seule ligne :
There is a room.
I7 génère à partir de ça un code I6 de 54879 lignes ! Et ce code contient tout un tas de chaînes générées automatiquement et qu’il n’y a pas à traduire (les formes conjuguées des verbes, par exemple). Et en fait, l’exemple avec le Temple nâga que Mule vient de faire fonctionne vraiment mieux que ce que je pensait, donc tout va bien !
À Mule : ce n’est pas le code I7 qui est en faute, mais le code python. Comme je l’ai dit, il y a des indentations avec espaces et avec tabulations mélangées. Du coup, Python lève l’erreur « TabError: inconsistent use of tabs and spaces in indentation ». Je me demande comment tu as fait pour le lancer.
J’ai mis une image en pièce jointe pour montrer le problème. Les espaces sont représentées par des points et les tabulations par des triangles.
Mais finalement, ça rend vraiment bien, même avec un code I7. Ça me rappelle de bons souvenirs de traduction de thèmes Wordpress ! À voir si dans la pratique ça fonctionne vraiment bien.
Ma suggestion serait, si possible, de ne pas inclure les name et les Understand dans le .po (ou bien préciser en commentaire qu’il ne s’agit pas de chaînes destinées à être affichées). D’une part parce qu’il s’agit souvent de mots isolés, donc difficile de savoir comment traduire, d’autre part parce que ça semble causer des problème inutiles (comme dans Shade où un même objet avait des names identiques).
Ah, je vois ce que tu veux dire. Je sais pas, c’est le python qui est dans Linux, j’imagine Python 3 ? Il m’a rien dit en tout cas ^^
N’empêche que c’est pas bien (et tu n’es sans doute pas le seul utilisateur qui rencontrera le problème), alors j’essaierai de mettre ça à jour dans la semaine.
Merci pour ta suggestion ! Le format .po inclut le numéro de la ligne pour le contexte - mais rien de plus, c’est vrai. Je me l’écris dans un coin, mais c’est un peu compliqué vu que ça veut dire parser du I7 correctement… j’y réfléchirai.
Dans mon cours de python et sur internet, le mélange des espaces et des tabulations revient assez souvent en tant qu’erreur basique qui empêche le code de fonctionner. Apparemment, Python 2.7 autorisait ce mélange, donc c’est peut-être à cause de ça
Sinon pour les names, c’est sûr que c’est plus difficile avec I7. Avec I6, j’imagine qu’il suffit de voir si la chaîne est entre guillemets simples ou doubles. Mais ne t’embêtes pas trop pour ça non plus, je pense que ce n’est pas non plus ultra-embêtant.
Comme avant, ça prend un HTML d’un Twine 1.4, ça crée un fichier .po avec les chaînes de caractère, et à vous de jouer !
L’alternative étant de trouver le fichier .tws, de cliquer sur chaque passage individuellement, d’éviter le code qui reste, etc. Alors que ce script ne touche pas aux images et aux commandes Twine (<< truc >>), et extrait juste le texte.
Seule limitation, avec du code un peu plus avancé parfois on se retrouve avec un nom de passage dans le .po, et il faut alors faire attention.
Ce sont deux scripts différents car parser du Twine est très différent de parser de l’inform… D’ailleurs je devrais peut-être scinder en scriptTradInform6.py et scriptTradInform7.py.
En espérant que ça puisse aider celles et ceux qui voudraient traduire des œuvres Twine !!