Le jeu traduit ne démarre plus ? Trouvez la ligne
Votre jeu traduit s'ouvre et se referme, ou reste bloqué indéfiniment sur l'écran de chargement. Une des lignes que vous avez traduites n'a jamais été du texte : un identifiant, un chemin, un indicateur que le jeu compare. Vérifiez d'abord que la traduction est bien en cause, puis trouvez la ligne en coupant en deux : environ treize exports suffisent à ramener cinq mille lignes à une seule.
La fenêtre s'ouvre. La fenêtre se referme. Hier ce jeu fonctionnait, puis vous avez passé une soirée à le traduire, et maintenant il est mort.
Quelque part dans ces lignes il y en a une qui n'a jamais été du texte : un nom de scène, un chemin de fichier, un indicateur que le jeu compare. Le moteur est tombé dessus et a renoncé avant de dessiner quoi que ce soit.
Vous n'allez pas lire cinq mille lignes pour la trouver. Vous allez poser une question par oui ou non environ treize fois.
La réponse courte. Prouvez d'abord que la traduction est en cause, puis coupez en deux : traduisez la moitié des suspectes, exportez, lancez. La moitié qui échoue contient votre ligne. Recommencez sur cette moitié jusqu'à ce qu'il n'en reste qu'une.
Avant de chercher : est-ce vraiment la traduction ?
- Lancez le jeu d'origine. Pas votre export, la copie intacte. Si celle-là échoue aussi, le problème vient de votre machine, du dossier ou du jeu lui-même.
- Traduisez une seule ligne courte et inoffensive, exportez, lancez. Un mot de menu que vous voyez à l'écran fera l'affaire.
- Ce n'est qu'ensuite que vous cherchez une ligne.
L'étape 2 dit une ligne, pas aucune, et c'est volontaire. Plusieurs adaptateurs s'arrêtent net quand il n'y a rien à écrire : un export vide teste donc une copie de fichiers plutôt que la livraison, et il peut passer alors que la vraie chose échoue.
Si la version à une ligne échoue aussi, aucune ligne particulière n'est en cause et couper en deux ne trouvera rien. Réexportez vers un dossier vide tout neuf, vérifiez que vous lancez bien la copie exportée et non l'originale, et lisez les avertissements de l'export. Si cela échoue encore, signalez-le comme un problème de livraison.
Le tri coûte deux lancements et un export : quelques minutes sur un petit projet RPG Maker, davantage sur un gros jeu Unity. Il vous épargne une soirée à chercher une ligne qui n'existe pas.
Deux fausses pistes. Des carrés, des points d'interrogation ou du latin abîmé alors que le jeu tourne, c'est un problème de police ou d'encodage. Un plantage juste après l'installation d'un plugin ou d'un overlay, c'est l'outil, pas vos lignes.
Trouver la ligne en coupant en deux
La plupart des projets contiennent beaucoup de fichiers, et la liste de fichiers est ce qu'il y a de plus simple à couper en deux.
- Réinitialiser toutes les traductions depuis la barre d'outils.
- Ouvrez Sélectionner les fichiers à traduire, qui s'explique tout seul : « Choisissez les fichiers à traduire. Les fichiers non cochés sont laissés intacts. » Décochez la moitié des fichiers et traduisez le reste.
- Exportez vers un dossier vide tout neuf et lancez le jeu.
- S'il démarre, votre ligne est dans la moitié que vous avez laissée tranquille ; sinon, dans celle que vous venez de traduire. Dans les deux cas votre liste est deux fois plus petite, et vous oubliez l'autre moitié.
- Réinitialiser toutes les traductions à nouveau, couper en deux la liste restante, exporter, lancer.
- Recommencez jusqu'à ce qu'il ne reste qu'un fichier, puis coupez en deux à l'intérieur de ce fichier jusqu'à ce qu'il ne reste qu'une ligne.
Couper par fichier est plus grossier que couper par ligne, donc le nombre de tours suit votre nombre de fichiers : quarante fichiers font environ six tours pour atteindre le fichier, puis vous recommencez à l'intérieur.
Les projets à fichier unique — un script NScripter, un jeu Kirikiri ou Wolf à scénario unique — n'ont pas de liste de fichiers à couper. Tracez plutôt un cadre sur les lignes : les cases et la barre d'actions apparaissent d'elles-mêmes, et Retraduire la sélection fait le reste. Pour un balayage plus large, réduisez d'abord les lignes avec le filtre et la recherche, puis utilisez Tout sélectionner (visible). Attention avec celle-là : elle prend exactement ce que le filtre affiche, donc un filtre que vous avez oublié de vider contamine silencieusement tous les tours suivants. Notez le filtre utilisé.
Un lot cassé de cent lignes, joué jusqu'au bout :
- Tour 1 — 100 suspectes, traduisez les 50 premières : ça démarre, donc c'est dans les 50 autres.
- Tour 2 — 50 suspectes, traduisez les 25 premières : ça casse, donc c'est dans ces 25.
- Tour 3 — 25 suspectes, traduisez les 13 premières : ça démarre, donc c'est dans les 12 autres.
- Tour 4 — 12 suspectes, traduisez les 6 premières : ça casse, donc c'est dans ces 6.
- Tour 5 — 6 suspectes, traduisez les 3 premières : ça casse, donc c'est dans ces 3.
- Tour 6 — 3 suspectes, traduisez les 2 premières : ça démarre, il reste une ligne.
Sept exports, c'est le pire cas à partir de cent lignes, et environ treize le pire à partir de cinq mille.
Ce que coûte un tour
Un export, un lancement, et le temps que met le jeu à atteindre sa première ligne de dialogue. Deux ou trois minutes sur un petit projet RPG Maker. Sur un gros jeu Unity, où l'export recopie le jeu entier et où l'écran-titre prend son temps, plutôt dix.
Treize tours, c'est donc presque une soirée entière. Cela reste l'option économique, parce que l'alternative est de lire cinq mille lignes et de deviner juste.
Deux choses tournent mal à la main. Exportez vers un dossier vide tout neuf à chaque tour, car certains moteurs montent les patchs de façon cumulative, et le tour 3 posé sur les tours 1 et 2 teste les trois à la fois. Réinitialiser veut dire réinitialiser : utilisez Réinitialiser toutes les traductions, jamais une modification manuelle, car cela restaure le texte capturé à la création du projet même si vous avez écrasé le dossier source depuis.
Si ça échoue encore après avoir remis votre ligne
Alors il y en avait plus d'une, ce qui est le résultat normal d'un premier passage tout-traduire sur un moteur sensible à l'analyse. Laissez votre ligne en langue d'origine et relancez la boucle sur tout ce qui reste traduit. Un second coupable est très souvent le même genre de chaîne que le premier, dans le même fichier.
La prochaine fois, traduisez par lots
Les lots ne font pas économiser d'exports ; ce sont des exports que vous alliez faire de toute façon, et chaque échec arrive déjà circonscrit. Ça a cassé dans le dernier lot, donc la coupe en deux part de cent lignes au lieu de cinq mille. Commencez à 100, et passez à 500 ou à un fichier entier quand plusieurs lots passent proprement.
Quels moteurs cassent si vous traduisez la mauvaise ligne ?
On parle de moteurs stricts et de moteurs souples. Ce qui décide vraiment, c'est l'endroit où atterrit votre traduction.
Certains moteurs la lisent comme des données : un fichier à part et un point d'accroche à l'exécution chez Ren'Py, du JSON échappé chez RPG Maker, une valeur .locres dont les empreintes de clé restent intactes chez Unreal. La structure du jeu ne voit jamais votre texte, donc une mauvaise ligne vous coûte une mauvaise ligne. D'autres l'insèrent dans un fichier que le jeu analyse comme du script, du balisage ou un flux d'octets, et votre phrase devient une partie de la structure de ce fichier. Là, deux-points, un crochet, un octet de trop ou une chaîne qui servait aussi de clé de recherche suffisent à arrêter le jeu.
C'est toute la règle. Trouvez votre moteur, lisez sa ligne, et passez à la suite.
- RPG Maker MV/MZ — rien de structurel : JSON et CSV échappés, et seul un ensemble fixe de commandes d'événement est proposé. Le seul vrai risque est un plugin qui compare un nom de locuteur à l'identique, et l'export réécrit aussi la clé de ce plugin.
- Ren'Py — très peu. Le code source n'est jamais réécrit, donc une chaîne qui sert aussi de clé logique est à l'abri.
- Unreal Engine — aucun mode de défaillance au niveau de la ligne que nous ayons vu : les chaînes
.locressont du texte affiché par construction. Le risque ici, c'est du texte manquant, pas une version morte. - Unity — grave et silencieux : noms de scènes, clés de variables et rappels sont stockés exactement comme du dialogue. Attendez-vous à un chargement infini, un bouton mort ou un écran noir.
- Godot — grave. Les chemins de nœuds, les StringName et les références
res://sont l'adresse que le moteur consulte ; la réécriture les refuse. - Wolf RPG — le format le plus fragile ici. Un octet de décalage désynchronise tout le flux et le processus s'interrompt avant qu'une fenêtre existe.
- Kirikiri / KAG — grave : les crochets sont de la syntaxe et les noms de stockage sont des noms de fichiers. Un nom de balise traduit, un crochet converti ou un nom d'image traduit arrêtent chacun le jeu net.
- Electron VN — grave. Un espace réservé de gabarit écrit dans le JavaScript vivant de
app.asarest une erreur de syntaxe, pas une mauvaise traduction. - TyranoBuilder / TyranoScript — même famille que Kirikiri : les balises KAG sont du balisage, donc une balise traduite est de la syntaxe. Les références de personnage en ligne ne sont jamais réécrites.
- NScripter — grave et de façon unique :
?,%et$sont des sigles de variables, donc un seul égaré est une erreur de syntaxe. - YU-RIS — grave, parce qu'une grande partie de ce que le format appelle chaîne est en fait un opérande. Les séparer a fait passer un jeu de 40 678 lignes actives à 8 914, sans perdre de dialogue.
D'autres moteurs ont leur propre page, chacune avec un guide, dans moteurs.
Trois lignes qui ont tué un jeu
Chaque règle d'exclusion de RuneTranslate a été payée par un jeu qui a cessé de démarrer. Ces trois-là sont corrigées. À chaque fois, la ligne fautive avait l'air parfaitement raisonnable et l'export s'est terminé au vert.
Godot : le jeu invente un personnage. Une ligne disait Warning: the door is locked. De l'anglais parfait. Dialogic échappe chaque deux-points dans le texte stocké, parce qu'un deux-points non échappé est précisément la façon dont il détache un nom de locuteur. Réécrite telle quelle, la phrase a été relue comme un personnage nommé Warning disant the door is locked, et l'extension l'a dûment créé.
Kirikiri : le jeu cherche un fichier appelé `End`. La balise d'un bouton portait un nom d'image et une étiquette de destination, et le masquage ne pouvait pas couvrir une balise contenant ses propres crochets : les deux se sont retrouvés exposés et traduits. L'analyseur comprend maintenant les crochets : il ferme au crochet correspondant, de sorte qu'une expression imbriquée reste dans la balise tandis qu'une balise ordinaire se termine à son premier ].
RPG Maker : un portrait disparaît sans bruit. Un plugin de portraits choisit l'illustration d'un personnage en comparant le nom du locuteur, lettre par lettre, à une table dans sa propre configuration. Traduire le nom est correct ; laisser cette configuration tranquille l'est aussi, puisqu'elle est pleine de clés de ressources. Ensemble, les deux ont brisé l'égalité, et les portraits du personnage ont disparu sans rien dans les journaux.
Les trois exports ont annoncé une réussite. Un export propre n'est pas la preuve d'un jeu qui fonctionne, sur aucun moteur. La seule preuve, c'est de le lancer.
Quand ce ne sont pas vos lignes du tout
Couper en deux ne trouve pas ces cas-là, parce qu'aucune moitié ne démarre : le problème est l'endroit où l'export a atterri. Les jeux Wolf RPG lisent leur archive .wolf avant tout fichier libre posé à côté, si bien que l'un affichait son écran-titre pendant que les données traduites dormaient sur le disque sans être lues. Les Addressables d'Unity refusent un paquet dont les octets ne correspondent plus à sa somme de contrôle, et vous donnent un écran noir sans rien dans aucun journal. Les jeux RPG Maker empaquetés ignorent les fichiers de données posés à côté de l'exécutable. Les trois sont désormais couverts, et c'est pourquoi un échec de livraison mérite un signalement plutôt qu'une chasse.
Existe-t-il un marqueur qui indique quelles lignes sont du dialogue ?
Non. Et méfiez-vous de quiconque affirme le contraire.
Un utilisateur nous a raconté un jour qu'il avait trouvé un jeu Godot qui entourait chaque chaîne de dialogue de || ; il n'a traduit que celles-là et le jeu a tourné. Vraiment utile pour ce jeu-là. C'est l'habitude d'un développeur, pas une convention Godot, et le jeu suivant fera autrement.
Le contre-exemple vient de YU-RIS. Dans un jeu, le canal des accents graves contenait toute la table de chaînes de l'interface, 687 de ses 692 lignes étaient du texte affiché — et pourtant l'accent grave n'y signifie rien. Les trois styles de guillemets compilent vers la même chose, donc une règle fondée sur le délimiteur signale de la vraie prose. L'endroit où vivait la valeur vous disait tout ; la façon dont elle était citée ne vous disait rien.
Fiez-vous plutôt à la position et à la forme, et laissez le jeu vous enseigner les deux. Lancez-le, lisez la première ligne de dialogue à l'écran, puis retrouvez cette ligne exacte dans l'éditeur : son fichier, son groupe et ses voisines, voilà à quoi ressemble le dialogue dans ce jeu. Tout ce qui se trouve ailleurs est un candidat pour ne pas être du dialogue.
Ce que l'application signale, et ce qu'elle ne peut pas savoir
RuneTranslate marque comme exclues les lignes qu'elle croit être du code, des chemins de ressources ou des identifiants. Elles restent visibles plutôt que masquées, teintées d'orange derrière un interrupteur afficher les exclues, pour que vous voyiez ce qu'elle a décidé et puissiez forcer n'importe quelle ligne avec traduire quand même. Vous pouvez aussi ajouter vos propres motifs.
Sélectionnez des lignes exclues et lancez une passe : elle s'arrête pour demander « 12 des 340 lignes que vous avez choisies sont exclues — signalées par vos filtres, ou par RuneTranslate comme du code, des chemins de ressources ou des identifiants. Les traduire peut casser le jeu. Les ignorer les garde exclues. Les traduire les intègre aussi aux passes futures. »
Passer outre ne pose pas de problème. Souvenez-vous seulement que vous l'avez fait, car c'est le premier endroit où regarder quand l'export cesse de démarrer.
Une limite honnête : une exclusion est une supposition sur une chaîne, elle ne peut donc pas savoir qu'une phrase de votre jeu sert aussi de clé de recherche dans un plugin livré avec ce jeu. Un jeu dont la source est déjà en anglais est encore moins protégé, parce que les filtres les plus efficaces demandent si une chaîne contient du texte dans la langue source.
Questions fréquentes
Pourquoi mon jeu ne démarre-t-il plus après la traduction ?
Presque toujours parce qu'une ligne que vous avez traduite était un identifiant, un chemin, un nom de scène ou un indicateur que le jeu compare par chaîne exacte. La changer casse l'analyse, ou la recherche.
Comment trouver quelle ligne traduite a cassé le jeu ?
Coupez en deux. Réinitialisez toutes les traductions, traduisez la moitié, exportez vers un dossier vide, lancez. La moitié qui échoue contient la ligne ; coupez-la en deux et recommencez. Six ou sept tours à partir de cent lignes, environ treize à partir de cinq mille.
Mon jeu traduit se ferme immédiatement — qu'est-ce que ça veut dire ?
Une erreur fatale au démarrage. Sur Kirikiri, les visual novels Electron et NScripter, en général une erreur de syntaxe : un crochet, un guillemet ou un espace réservé traduit ou perdu. Sur Wolf RPG et YU-RIS, un flux désynchronisé.
Pourquoi mon jeu traduit s'ouvre-t-il sur un écran noir ?
En général un chargement qui a échoué dans du code ayant avalé l'exception ; sur Unity, un paquet dont la somme de contrôle ne correspond plus à son entrée de catalogue. Essayez une version avec une seule ligne inoffensive traduite : si elle est noire aussi, c'est la livraison qui est en cause, pas une ligne.
Mon jeu traduit reste bloqué sur l'écran de chargement — est-ce la traduction ?
Très probablement, sur Unity. Un chargement infini est le symptôme classique d'un nom de scène ou d'une clé de variable traduits : le jeu attend un nom qui ne correspond plus, et rien ne lève d'erreur.
Quel genre de lignes ne faut-il jamais traduire ?
Tout ce que le jeu résout par chaîne exacte : chemins, noms de scènes et de nœuds, noms de variables et d'événements, codes de langue, tout ce qui a la forme snake_case ou res://. Si vous n'imaginez pas un joueur le lire à l'écran, laissez-le.
Le jeu tourne mais le texte est fait de carrés ou de points d'interrogation — est-ce le même problème ?
Non. Des carrés uniformes signifient que la police n'a pas de glyphe pour ces caractères ; un point d'interrogation littéral signifie qu'ils ont été perdus à l'écriture du fichier. Les deux sont des problèmes de police ou d'encodage, avec une autre solution.
Et ensuite
Vous démarrez une traduction plutôt que d'en réparer une ? Comment faire un patch de traduction couvre tout le travail.
Quand vous trouvez votre ligne : laissez-la dans la langue d'origine, traduisez tout ce qui l'entoure, exportez vers un dossier vide tout neuf, et lancez-le. Un identifiant non traduit ne coûte rien au joueur.
Prêt à essayer RuneTranslate ?
L'offre gratuite débloque tous les moteurs et tous les fournisseurs de traduction. Supporter (3 $/mois) débloque la vitesse maximale.
Télécharger pour Windows
