BL Traduire Bannerlord, le futur outil de traduction

Users who are viewing this thread

Status
Not open for further replies.

Daneel53

Sergeant Knight at Arms
Bonjour,
Comme certains le savent, j'ai développé depuis 2009 un outil pour aider aux traductions de M&B et Warband qui s'est appelé dans un premier temps Fusion M&B et qui a aujourd'hui le nom de Traduire M&B.

Vu la syntaxe totalement différente des fichiers à traduire de Bannerlord, cet outil n'y servira à rien tel qu'il est. J'ai donc décidé de commencer à développer un nouvel outil dédié à Bannerlord.

J'ai fait simple : j'ai créé un nouveau projet et j'y a copié tout le code de Traduire M&B. Le travail à réaliser va consister dans un premier temps à modifier tout le code de lecture et écriture des fichiers .csv pour le remplacer par du code adapté à la syntaxe des fichiers string_translation_data.xml de Bannerlord. Je commencerai par les fonctions de base et j'étendrai progressivement l'adaptation aux fonctions plus complexes.

Afin de voir où j'allais, j'ai pour l'instant simplement adapté le code de lecture du fichier VA pour m'assurer que je saurai le faire et ça donne ceci  :

fXfWBSK.png


Alors soyons clair : c'est un travail de très longue haleine, surtout que la structure des fichiers à traduire peut encore changer, je ne sais pas à quoi ressembleront les fichiers anglais générés par le jeu, je ne sais pas combien de fichiers il y aura au total pour remplacer les 17 fichiers de Warband, etc.

Mais je voulais juste vous faire savoir que le développement est enclenché, il se poursuivra tranquillement cet hiver. Je vous tiendrai au courant des avancées quand cela me semblera digne d'être signalé.  :smile:
 
Bonjour,

Juste un petit mot pour signaler que j'ai mis au point les fonctions élémentaires de mon programme : lecture des fichiers VA et VF, déplacement dans les fichiers, saisie du texte français et sauvegarde du fichier en français. Il est donc désormais possible de générer la VF de Bannerlord.

Le programme :
xF8drrV.png
Le fichier test de départ :
nam9GKP.png
Et le fichier traduit :
XiSeSP9.png
L'adaptation des fonctions du programme à la nouvelle structure des textes à traduire se fera tranquillement ces prochaines semaines, et notamment le lien avec les bibliothèques de traduction automatique, même si, du fait de l'introduction de toutes les nouvelles variables et syntaxes, la plupart des textes historiques de Warband toujours présents dans Bannerlord (et il y en a beaucoup !) ont un peu changé, ce qui va interdire leur traduction automatique.  :smile:
 
Bonsoir,

J'ai créé une méga bibliothèque de traduction de 33000 lignes en compilant les 17 bibliothèques de Warband en une seule vu que pour l'instant il n'y a dans Bannerlord qu'un seul gros fichier à traduire qui regroupe tout.

Puis j'ai réussi à écrire une partie du code nécessaire au traitement de ce fichier par la bib (le fichier généré est encore au format csv de Warband, mais je modifierai ça plus tard).

Résultat ? La bibliothèque permet de traduire directement 4600 lignes sur les 16220 que compte le fichier de textes de Bannerlord. Voilà 4600 lignes que nous n'aurons pas à traiter à la main !  :grin:

Et donc, en passant, 30% des textes de Bannerlord de ce fichier sont repris à l'identique de Warband. Je suppose que cela ne vous surprend guère. Et encore, il faudrait ajouter à cela les textes repris qui n'ont changé qu'à cause des nouvelles syntaxes des variables et expressions et non à cause du contenu intrinsèque, mais là je ne pourrai pas les comptabiliser car aucun processus automatique ne pourrait les reconnaitre. Ces lignes là, il faudra se les taper à la main... sauf si TaleWorlds se fend d'une VF officielle.

Ceci dit, je viens de jeter un coup d’œil très rapide à la vidéo de gameplay "sandbox" de 26 minutes qu'ils ont mis en ligne récemment et je confirme que la totalité des textes de Bannerlord ne figure pas dans le fichier string_translation_data. Si je regarde par exemple ce qui est écrit dans l'extrait de l’encyclopédie à 04:11, la description de Belgir, baron des Vlandiens, ne se trouve pas dans le fichier. Donc soit ce fichier est incomplet, par exemple parce que la beta ne concerne que le mode multi, soit il existe d'autres fichiers de textes ailleurs, mais comme je ne dispose pas de la distribution de la beta, je ne peux pas chercher.
 
Bonjour,

L'adaptation de mon programme se poursuit. J'ai changé le format de sortie de l'initialisation par la bibliothèque et je sors désormais directement un fichier au format de string_translation_data adapté au français.

Malheureusement, comme je l'ai expliqué dans le sujet sur l'analyse des fichiers, les anciennes syntaxes de Warband ne sont plus acceptées par Bannerlord et certains textes issus de la VF de Warband font planter Bannerlord au chargement du fichier string_translation_data localisé partiellement.

C'est un problème qui ne pourra pas se résoudre sans en savoir davantage sur les nouvelles syntaxes des variables incluses dans les textes de Bannerlord. En attendant je poursuivrai tranquilement ces prochaines semaines la migration complète de mon programme pour s'adapter à la structure des fichiers de Bannerlord.  :smile:
 
S'il y a besoin de faire des traductions pour Bannerlord, je veux bien participer.

Pour éviter les problèmes d'intégration de traduction qui pourraient survenir (comme tu as déjà eu le cas), chaque personne qui traduit peut mettre une phrase du genre. Que je mets en ce qui me concerne :
Je suis d'accord pour traduire et mes traductions peuvent être utilisées librement, même par TW, même sans citer mon nom.

Si tu penses qu'il faut ajouter d'autres éléments à cette phrase, n'hésite pas à le dire.
Comme ça, on anticipe les futurs soucis :grin:
 
Oh, je pense qu'il n'y a pas de phrase à mettre. TW veut juste avoir une seule personne physique en face d'elle, qui serait la seule propriétaire de la traduction et avec qui elle pourra signer un contrat, entre autre de maintenance au cours du temps, et éventuellement de rétribution pour le travail réalisé.  :twisted:

Ceci dit, je garde en tête ta proposition d'aide en cas de besoin.  :smile: 
 
Bonjour, je sais coder. Je connais tous les languages en .Net Framework et .Net CORE sauf F# (ouais... ça fait deux). Je connais bien l'utilitaire Windows Forms de Visual Studio ainsi que celui de SharpDevelop.

J'ai déjà fait du C++ avec QT et Allegro, mais j'admets être rouillé (Java m'a rendu mou et C# m'a achevé).

J'ai de bonne connaissances avec les technologies qui se rapportent au XML: XPath, XSLT (1.0) et XQuery.

Si vous avez besoin d'un cerveau de plus, faites-moi signe!
 
Bonjour Zombie Warrior,

Je te remercie pour ta proposition. Pour l'instant je n'ai pas besoin d'aide car je me contente de modifier mon programme, écrit en Visual Basic sous Visual Studio, en l'adaptant à la nouvelle structure des fichiers à traduire.

Pour l'instant on en sait trop peu pour aller beaucoup plus loin, mais je n'exclus pas d'avoir besoin un jour d'écrire des procédures pour extraire des informations d'autres fichiers que string_translation_data. On verra à ce moment là et si besoin je te ferai signe.  :grin:
 
Salut,

Voilà, j'ai fini le Traduire Bannerlord dérivé de Traduire M&B :
  • Je sais lire et éditer le fichier string_translation_data.
  • Je sais générer une VF de ce fichier et la faire prendre en compte par Bannerlord Beta.
  • Je sais initialiser une VF à partir des bibliothèques faites pour les mods de Warband parce que je conserve la même structure de bib entre les deux programmes.
  • Je sais maintenant générer une bibliothèque toute neuve depuis la VF de Bannerlord si nécessaire.
  • Les dernières modifs sur les niveaux de priorité des sources d'initialisation ont été reprises de Traduire M&B et sont ici aussi fonctionnelles.
  • Bien entendu, au passage des fonctions inutiles dans Bannerlord comme la modification du fichier menus.txt ou l'ajout de lignes anti-bug dans les fichiers .csv ont été enlevées.
Finalement tout cela m'aura pris bien moins de temps que prévu. Que faire maintenant tant que Bannerlord n'est pas sorti ?

Traduire les 15000 lignes existantes de string_translation_data ? Ce serait une vraie perte de temps si une localisation française vient avec le programme quand il sortira, c'est à dire en 2021.
Donner au programme une double interface française et anglaise ? Peut-être, j'y pense, de façon à ce que ce programme puisse être utilisé pour des localisations autres que le français. Et puis je n'ai pas encore fait de programme bilingue, ça m'intéresse de voir comment faire sous Visual Studio.
Passer à totalement autre chose en attendant que Bannerlord sorte. C'est probablement ce que je vais faire. Warband se meurt, continuer à faire des VF de mods devient un peu inutile et, je l'ai déjà dit, j'en ai un peu marre, même si je viens de faire une exception pour la VF de Star Wars Conquest mais c'était parce qu'elle était courte (8000 lignes), finie à 90% et que l'univers me changeait agréablement du moyen-âge.

On va voir....

A +  :smile:

 
Bonjour,

Voici deux mois que je n'ai pas posté ici, et pourtant le programme a bien évolué.:smile:

Tout d'abord, comme le nombre de fichiers à traduire dans Bannerlord est passé de 1 à 6, puis à 27, j'ai fait évoluer la fonction de traduction automatique à partir des bibliothèques de traduction. L'écran correspondant a désormais la tête suivante :
Gllq2MT.png
Comme on le voit, le programme passé sur les 27 fichiers a permis de traduire un peu plus de 2000 lignes sur les 7320 contenus dans les 27 fichiers. Bon, depuis la beta 0.6.2 les fichiers à traduire sont à nouveau au nombre de 6, mais peu importe pour l'instant, je suis prêt à en traduire jusqu'à 27 si nécessaire.

L'autre ajout notable se passe sur l'écran principal, au niveau du fichier VA.
Io8hFoQ.png
Comme déjà signalé, la traduction automatique ne fonctionne que si le texte à traduire est strictement identique entre la ligne de la VA et le contenu de la bibliothèque. Ici elle a fonctionné par exemple pour la ligne 1 qui est inchangée depuis Warband. Mais, du fait notamment du changement de la structure des variables dans Bannerlord par rapport à celle de Warband, beaucoup de textes ont légèrement changé, même si le fond est toujours là. Ces lignes ne sont par conséquent pas traduites, alors qu'elles sont presque identiques.
J'avais évoqué la possibilité d'écrire une fonction de logique flou, pour traiter ce presque pareil, mais c'est quelque chose d'assez compliqué à écrire. J'ai donc décidé de faire plus simple.

A suivre dans une heure ou deux...
 
Bonjour Germain ! C'est quoi cette photo ??? :grin:

Bon, je continue... La nouveauté, ce sont les deux boutons qui sont apparus à côté du fichier VA : "Copier Texte VA" et "Chercher dans Bib" :
h86iGCw.png
Plutôt que d'implémenter une logique floue, j'ai choisi de pouvoir prendre une partie du texte de la VA et de pouvoir rechercher cet extrait dans la bib. Pourquoi ? Parce que souvent, à force d'avoir traduit de nombreux mods, en traduisant suite au passage de l'initialisation automatique, je me dis "Tiens, ce n'est pas traduit, ça ? Pourtant ce texte me dis quelque chose...". Mais je l'ai dit, il suffit d'une lettre qui change pour que l'initialisation à partir de la bib ne fonctionne pas. Alors je prend quelques mots et je cherche dans la bib. Voyons l'exemple ci-dessus.

Ce texte ligne 323, je suis presque certain de l'avoir déjà lu (et donc traduit) un jour. Alors j'ai simplement sélectionné "We defeated them", cliqué sur le bouton "Copier Texte VA" puis sur "Chercher dans Bib"... et le programme m'a proposé cela :
E9Oa6fz.png
Voilà qui ressemble fortement à la traduction recherchée. Un appui sur "Oui" et hop, le texte est mis dans la VF.
QEUjx0c.png
Alors d'accord, le texte de Bannerlord a un peu changé par rapport à celui de Warband et il a fallu le reprendre un peu, mais en tout cas j'ai été beaucoup plus vite que si j'avais dû traduire l'intégralité du texte. Et sur d'autres exemples, le texte retrouvé était beaucoup plus proche du texte anglais.

Donc voilà, c'est ma façon d'implémenter ce que je vais appeler la "logique floue manuelle" : c'est moi qui décide des mots à retrouver dans le texte et non un algorithme automatique, mais le résultat est là : on retrouve les phrases qui sont presque pareilles ! :smile:

Bien entendu tout cela va encore évoluer : je vais sans doute ajouter un bouton "suivant" si la phrase proposée ne me convient pas pour obliger le programme à en chercher une autre, je vais peut-être réunir les deux boutons en un seul, ou déporter la fonction sur le texte de la VF qui est en anglais tant qu'il n'est pas traduit. Je verrai à l'utilisation. L'important est que mon programme fonctionne et qu'il permet bel et bien de traduire efficacement les textes de Bannerlord sans m'obliger à traduire toutes les phrases sans exception. Aujourd'hui le premier fichier des 27 à traduire de Bannerlord 0.6.1 est entièrement traduit. Le reste suivra tranquilement durant les prochaines semaines.

Tout ce que j'aurai traduit de la Beta sera mis dans une bibliothèque Bannerlord dédiée qui elle-même servira à traduire par la suite les textes de la version Early Access qui devrait sortir dans deux mois. Je vais avancer tranquilement, rien ne presse... :xf-cool:
 
Tout d'abord, comme le nombre de fichiers à traduire dans Bannerlord est passé de 1 à 6, puis à 27, j'ai fait évoluer la fonction de traduction automatique à partir des bibliothèques de traduction. L'écran correspondant a désormais la tête suivante:
[...]
Comme on le voit, le programme passé sur les 27 fichiers a permis de traduire un peu plus de 2000 lignes sur les 7320 contenus dans les 27 fichiers. Bon, depuis la beta 0.6.2 les fichiers à traduire sont à nouveau au nombre de 6, mais peu importe pour l'instant, je suis prêt à en traduire jusqu'à 27 si nécessaire.
Pourquoi se limiter jusqu'à 27? J'aurais fait faire un scan du répertoire et ajuster selon le nombre de fichier, puis j'aurais lancé le processus de traduction en multithread du même coup. En fait, je me suis dit que j'aillais écrire le code et que tu pourrais t'en inspirer pour améliorer ton application:
Code:
' Imports System.IO
' Imports System.Threading

' ce code est à réécrire dans la classe du formulaire.

Private Sub ScannerPuisTraduire()
            
    ' La signature de la méthode changera peut-être mais il est impératif qu'elle soit membre d'instance.
    ' De plus, il est possible que tu veuilles faire passer le nom du dossier en paramètre à place d'une
    ' constante.
            
    Const nomDossier As String = "F:\Test Bannerlord\VA Bannerlord\"
    Dim nomsFichiers As String()

    Try
            
        nomsFichiers = Directory.GetFiles(nomDossier)
                
    Catch e As DirectoryNotFoundException
            
        MessageBox.Show("Erreur 404!")
        Return
    End Try
            
    ' string -> nom de fichier
    Dim fils = New Dictionary(String, Thread)()
            
    ' Ces valeurs devront être changées pour ton form.
    Const incrementation As Byte = 10
    Const x As Byte = 0
    Dim y As Integer = -incrementation

    For Each nom In nomsFichiers
            
        ' remplacer « Traduire » par le nom actuel de la méthode, sans parenthèses!
        fils.Add(New Thread(nom, AddressOf Traduire))
        
        ' Je ne sais pas quel type de contrôle tu utilises dans ton programme. J'assume que tu
         ' utilises checkbox. Si ce n'est pas le cas, aucune panique, juste à changer le type du
         ' contrôle car ils partagent les propriétés utilisées ici.
            
         ' En passant, cette boucle ajoutera chaque élément l'un en dessous de l'autre dans le
         ' formulaire. Tu souhaiteras sans doute modifier ce comportement.
    
        Dim nouvControle = New CheckBox()
        nouvControle.Text = nom
        y += incrementation
        nouvControle.Location = New Point(x, y)
                
        Controls.Add(nouvControle)
    Next
            
    

    For Each element In fils
            
        element.Value.Start(element.Key)
    Next
End Sub
        
' La signature de la méthode devra soit être vide ou n'avoir qu'un paramètre de type object.
Private Sub Traduire(ByVal nomFichier As Object)
            
    ' ne pas oublier de caster!
    Dim nomF = CStr(nomFichier)
            
    ' ...
    ' ...
    ' ...
End Sub

En fait, je suis pas aussi à l'aise en VB .Net qu'en C#, j'ai donc traduit mon code de C# à VB en espérant ne pas avoir fait trop d'erreurs de traductions. Je laisse ici la version C#, qui compilait pour windows form, au cas ou t'en aurais besoin:
C#:
void ScannerPuisTraduire()
{
    /*
        La signature de la méthode changera peut-être mais il est impératif qu'elle soit membre d'instance.
        De plus, il est possible que tu veuilles faire passer le nom du dossier en paramètre à place d'une
        constante.
    */
    const string nomDossier = "F:\\Test Bannerlord\\VA Bannerlord\\";
    string[] nomsFichiers;
            
    try
    {
        nomsFichiers = Directory.GetFiles(nomDossier);
    }
            
    catch(DirectoryNotFoundException)
    {
        MessageBox.Show("Erreur 404!");
        return;
    }
            
    // string -> nom de fichier
    var fils = new Dictionary<string, Thread>();
            
    // Ces valeurs devront être changées pour ton form.
    const byte incrementation = 10;
    const byte x = 0;
    int y = -incrementation;
            
    foreach (var nom in nomsFichiers)
    {
        // remplacer « Traduire » par le nom actuel de la méthode, sans parenthèses!
        fils.Add(new Thread(Traduire), nom);
                
        /*
             Je ne sais pas quel type de contrôle tu utilises dans ton programme. J'assume que tu
             utilises checkbox. Si ce n'est pas le cas, aucune panique, juste à changer le type du
             contrôle car ils partagent les propriétés utilisées ici.
                    
             En passant, cette boucle ajoutera chaque élément l'un en dessous de l'autre dans le
             formulaire. Tu souhaiteras sans doute modifier ce comportement.
          */
                  
          var nouvControle = new CheckBox();
          nouvControle.Text = nom;
          nouvControle.Location = new Point(x, (y += incrementation));
          Controls.Add(nouvControle);
    }
            
    foreach (var element in fils)
        element.Value.Start(element.Key);
}
        
// La signature de la méthode devra soit être vide ou n'avoir qu'un paramètre de type object.
void Traduire(object nomFichier)
{
    // ne pas oublier de caster!
    var nomF = (string)nomFichier;
            
    /*
        ...
        ...
        ...
    */
}
 
Pourquoi se limiter jusqu'à 27?
Parce qu'indépendamment de la liste des fichiers, dont les noms peuvent évidemment être indicés dans une boucle, le programme utilise aussi pas mal d'objets graphiques dont les noms sont eux aussi indicés et passés en paramètre d'une sous-routine, comme les Progressbars et les Textboxs où on écrit les résultats {***} / Total.
Il faudrait donc aussi indicer les nom de ces objets graphiques avant appel à la sous-routine, et comme ce programme change sans arrêt il est bien plus facile dans un premier temps de faire un copier-coller des appels en changeant les numéros à chaque ligne que d'écrire du code pour changer les noms des objets.sans compter les routines d'initialisation de variables globales et de remise à zéro qu'il aurait aussi fallu transformer en boucles, comme ici par exemple :
Code:
        ' Réinit des barres de progression
        PBStringTD0.Value = 0
        PBStringTD1.Value = 0
        PBStringTD2.Value = 0
Quand le nombre (et peut-être les noms) des fichiers à traduire seront figés, il sera toujours temps de voir où on en est et si passer à une boucle de traitement avec des noms d'objets indicés peut être plus "joli".

Ne t'inquiètes pas pour moi, j'ai des dizaines de milliers de lignes de Fortran, Pascal, C, C++ et Basic derrière moi (sans compter d'autres langages plus exotiques). :xf-wink:
 
Je pense comprendre un peu où ton programme en ai et le pourquoi du comment.
J'ai commencé plus tard que toi à coder, donc je n'ai pas les mêmes habitudes; mon manque d'expérience et le fait que j'ai surtout baigné dans l'orienté objet à la java ont probablement quelque chose à dire là dessus.

J'ai pas l'habitude du hard code ou des global, donc j'aurais mis le moins possible de global et j'aurais tout généré d'un coup. Mais je comprends que cela rendrai la tâche plus abstraite et complexe sur le coup. Je pense que ce que tu fais fait du sens.

En passant, je m'inquiète pas:
1. Je voulais être certain que ce que j'avance soit possible à réaliser, donc je l'ai écrit. Il m'arrive parfois de suggérer sans vraiment réfléchir.
2. J'ai tendance à trop commenter mon code, on me l'a déjà dit. Désolé, si c'est à cause de ça que j'ai l'air inquiété.
3. Tout ce que je voulait dire est qu'il serait possible (et même possiblement souhaitable) d'avoir un nombre d'éléments variable plutôt que constant, justement parce que ce nombre change tout le temps.

La programmation est mon seul autre passe-temps en dehors de warband et youtube, donc je peux pas m'empêcher de trouver une excuse pour en faire ou en parler. Mais je vais bientôt me calmer car je suis en train d'apprendre l'assembleur 6502. Je penses que je partirai peut-être un autre thread de discussion sur la programmation en général...
 
il serait possible (et même possiblement souhaitable) d'avoir un nombre d'éléments variable plutôt que constant
Oui, mais on tombe sur l'obligation de devoir représenter à l'écran autant de ProgressBars et de résultats que de fichiers à traiter, et on ne peux pas générer la Form (l'écran) de façon dynamique en fonction du nombre de fichiers, sauf à se compliquer considérablement l'existence. Donc là j'avais 27 fichiers à traiter, alors j'ai mis en place 27 séries d'objets graphiques, là où pour Warband il y en avait 16. Quand ce nombre sera définitivement figé et les noms des fichiers également, alors la version finale de mon programme ne montrera plus que le strict nécessaire.

Pour l'instant, Bannerlord change sans arrêt, alors moi je fais juste au plus simple et au plus rapide pour m'adapter. Le tout en restant dans la lignée du code de ce programme que je maintiens depuis maintenant dix ans. :xf-smile:
 
Bonjour,

Je viens de passer une semaine sur la VF d'un mod de Warband, Diplomacy 4.3+. Pour ce faire j'ai reporté mes nouveautés relatives à la copie de VA et la recherche en bib dans Traduire M&B et dans la foulée j'ai poursuivi et amelioré la fonction. Finalement, si on refuse une traduction proposée, la recherche se poursuit jusqu'à ce qu'on en accepte une ou qu'on ait atteint la fin de la bibliothèque.

En retour j'ai reporté ces améliorations dans Traduire Bannerlord et maintenant je poursuis tranquilement avec mon programme la traduction du deuxième fichier de Bannerlord, string_translation_data_1.xml. Deuxième sur 27 car j'ai conservé les 27 fichiers de la 6.1, même si depuis ils ont été regroupés en 6 fichiers plus gros, car des fichiers de 250 lignes environ, ça fait moins peur à attaquer et donne l'impression d'avancer plus vite. :xf-wink:
 
Last edited:
Bonjour,

Depuis la 0.7.1, les textes à traduire ont commencé à être rangés par catégories avec des noms de fichiers adaptés, comme dans Warband : std_info_pages, std_item_modifiers, std_module_strings, etc. Maintenant que le pli est pris, je ne pense pas qu'ils reviendront en arrière, donc j'ai adapté mon programme à ces nouveaux noms de fichier.

Puis, pour vérifier la viabilité de ma future démarche, j'ai complété std_item_modifiers qui est, comme pour Warband, un petit fichier de 38 lignes. J'ai fait ajouter ces 38 lignes traduites à ma bibliothèque de traduction par mon programme puis j'ai relancé une initialisation de tous les fichiers, m'attendant à obtenir un item_modifiers totalement traduit. Mais à ma grande surprise ce ne fut pas le cas : environ la moitié des lignes sont restées en anglais. WTF ?

J'ai vérifié, les lignes en question étaient bien dans la bibliothèque, alors pourquoi n'étaient-elles pas traduites ? S'en est suivi une longue séance de débug pour essayer de comprendre pourquoi la routine de lecture de bibliothèque ne trouvait pas le texte à traduire qui pourtant était bien là jusqu'à ce qu'enfin je mette le doigt sur le problème : la bibliothèque, a priori dans l'ordre alphabétique, ne l'est en réalité pas tant que ça. Pour une raison qui m'échappe totalement, la procédure de tri du .Net que j'utilise pour mettre en ordre alphabétique la bibliothèque présente en mémoire avant de la ranger en fichier (la méthode Sort de base) considère qu'un texte qui commence par une apostrophe ' prend l'ordre alphabétique de la lettre qui le suit. C'est à dire que dans ma bibliothèque je trouve les lignes suivantes :
He spent...
'He was...
Head armor


Or, comme ma bibliothèque globale pour Bannerlord fait actuellement 33800 lignes, j'ai codé un test sur la première lettre afin de ne pas fouiller la bibliothèque plus loin que nécessaire : si on a dépassé la lettre H et que l'on n'a pas trouvé par exemple "Head shot", alors inutile de fouiller la suite de la bib, on est certain qu'on ne l'y trouvera plus puisque la bib est ordonnée alphabétiquement. Sauf que là, quand on tombe sur le texte 'He was, la première lettre a changé, donc j'arrête la lecture de la bib en considérant qu'on a fini les H alors qu'en réalité on n'a pas lu tous les textes commençant par H, et notamment pas celui où est traduit Head shot qui se trouve plus loin. Bingo !

Avant d'essayer de comprendre un de ces jours pourquoi le Sort fait ça et comment éventuellement l'en empêcher, j'ai donc changé mon test de fin pour faire une exception sur le caractère ' afin de ne plus arrêter le parcours de la bib sur ce caractère. Je relance, je regarde le résultat : item_modifiers a bien des textes supplémentaires traduits, dont celui commençant par H qui manquait, mais tout n'est toujours pas traduit ! Re WTF !

Re séance de débug, plus rapide parce que j'avais mis en place les outils pour pister le truc, et j'ai fini par découvrir qu'il y a aussi des lignes commençant par le caractère tiret qui sont glissées au milieu de autres. J'ajoute un deuxième exception pour le caractère -, je relance... et enfin la totalité de item_modifiers est traduite. Ouf !

Rétrospectivement je comprend maintenant pourquoi, en traduisant les fichiers de Bannerlord initialisés par ma routine automatique, il m'est arrivé de m'étonner que telle ou telle phrase ne soit pas traduite. En effet, je la trouvais en bibliothèque grâce à la fonction de recherche des phrases presque pareilles et je ne voyais pas en quoi la phrase était presque pareille puisque à première vue elle était exactement pareille. Je comprend maintenant que beaucoup de textes n'ont pas été traduits à cause du phénomène ci-dessus : un balayage de bibliothèque terminé trop tôt.

J'ai fini ma soirée en allant jusqu'au bout du processus. Comme j'ai actuellement traduit les septs premiers des anciens fichiers string_translation_data_0 à 6, j'ai ajouté le contenu de ces sept fichiers à ma bibliothèque et j'ai lancé une initialisation sur les 14 nouveaux fichiers de la 0.7.1. Résultat ? 3434 lignes traduites sur les 7688 que contiennent ces quatorze fichiers. On avance ! :xf-smile:
 
Salut !

Un petit mot en passant pour dire que puisque la traduction de la Beta ne peut plus être testée depuis la version 0.8.6, j'ai entamé la transformation de Traduire Bannerlord en logiciel bilingue français et anglais. Comme ça ce programme pourrra quitter la communauté strictement française pour être utilisé par des étrangers pour les traductions dans d'autres langues que le français.

Il y en a pour quelques jours, mais vu qu'on est confinés chez nous pour plusieurs semaines, autant que ça soit utile... :confused:
 
Fantastique! C'est un grand cadeau que tu fais aux allophones.
Sera-t'il possible de traduire Traduire Bannerlord en d'autres langues? :wink: et oui je ne pose cette question que pour faire ce jeu de mot.
 
Status
Not open for further replies.
Back
Top Bottom