[I7] Extension française

ok, je vais essayer de regarder.

Pour les points de suspensions, ça ne s’affiche pas dans gargoyle, et sans doute dans d’autres interpréteurs. Par contre avec parchment, ça va : iplayif.com/?story=http://ificti … calia6L.z8

En attendant que ça fonctionne partout, peut-être serait-il judicieux de remplacer par 3 points, visuellement c’est pareil, et apparemment sémantiquement aussi : fr.wikipedia.org/wiki/Points_de_suspension

hmm… les pronoms… tiens tiens tiens… AH OUI ! JE SAIS… hi hi hi !

C’est peut-être la police par défaut qui n’est pas unicode et/ou n’a pas les bons glyphes. Comment sous linux, modifier les paramètres pour Gargoyle, je voudrais changer Bocfel par Frotz et éventuellement la police ?

en fait vous avez raison, ça s’affiche correctement dans gargoyle, je n’avais regardé que le transcript (qui est exporté en iso-machin et pas utf8).

Pour changer d’interpréteur, de police, il faut modifier le garglk.ini, voir un exemple ici :
bitbucket.org/farvardin/dotfile … at=default

par contre c’est dommage il me semble que gargoyle ne permet plus de définir une police autrement que par son nom dans le système, ce qui empêche de joindre un fichier de police qui s’ouvrira avec le jeu distribué.

J’ai recopié le code de l’extension précédente et maintenant, les pronoms refonctionnent. Apparemment, j’avais écris un commentaire, et c’est ce commentaire qui causait ce bug. Vraiment bizarre…

Quoi qu’il en soit, je pense que l’extension peut être considéré comme presque finie. Il faut juste chasser les bugs et nettoyer le code au besoin.

du bon travail (ainsi que le reste des autres commits), effectivement je ne vois pas pourquoi ça posait problème parce que c’était correctement commenté.

Salut !
De passage pour vous signaler qu’il y avait ce problème sur la version 6G : https://forum.fiction-interactive.fr/t/apostrophe/729/1
Peut-être que via la traduction vous avez moyen d’arranger d’une meilleure façon le problème ?

@ciseur68 : oui, c’est pénible ce problème d’apostrophes. Natrium a corrigé cela récemment dans la nouvelle version d’Inform, donc c’est une très bonne chose (à tester plus amplement pour être sûr que tout va bien)

En parlant de problème étrange, qui n’existe pas dans la version anglaise, et qui n’existait pas dans la version précédente des bibliothèques, si on a par exemples des backdrop avec des noms qui se chevauchent, l’outil pour retirer l’ambiguïté bloque sur la réponse du joueur attendue par le parseur, indéfiniment, alors qu’avant ça ne posait la question qu’une seule fois, du style « précisez, le décor, ou la plaine ? »

The decor is a backdrop in grottes. Understand "paturages" or "mer" as decor. La plaine is a backdrop in Grottes. Understand "paturages" or "vallée" as plaine.

Mais heureusement ça n’a pas duré longtemps, et un récent commit a corrigé tout ça !

Oui, il y avait une bug encore plus étrange. Si on tapait « > donner », le jeu répondait « Pouvez-vous préciser ce qui est concerné par cette action ? » indéfiniment, quoi qu’on écrive par la suite. Ça a été corrigé par la suppression du commentaire qui créait bizarrement des bugs.

Pour ce qui est des apostrophes, je suis pas sûr que ça a été corrigé. Devrais-je inclure par défaut l’extension Punctuation Removal by Emily Short ? Je pense que c’est la seule solution, et l’extension italienne le fait aussi, il me semble.

Il ne manquerait pas le verbe souffler (sur/dans) dans la grammaire i7 ?
Il manque souffler ‹ sur › dans la grammaire i6. Souffler sur les braises.

Je viens de mettre à jour l’extension par rapport aux changements de la nouvelle version d’I7 (6L38, qui est juste une version de correction de bugs). Il y avait deux réponses à modifier, et une à ajouter pour une extension.

Pour ceux qui sont sur mac, c’est assez compliqué, car la nouvelle version est buggé, on ne peut plus ouvrir ou créer un projet ni installer des extensions. Pour ça, il y a zarf qui a fait un hybride (6L38 avec l’interface de 6L02). Mais cet hybride ne peut pas ouvrir les extensions, alors là, il faut repasser par la version 6L02 original. Enfin bref, c’est compliqué quoi.

Aussi, ne pas oublier de changer de nouveau le fichier « about.txt » dans les fichiers d’Inform.

faudrait leur dire qu’ils le changent directement dans la version qu’ils éditent…

Il reste quelques aspects à finir sur l’extension, et entre autres, j’aurais besoin d’experts en Inform 6 (mule, auraes, stormi, otto, yoruk… pas moi en tout cas).

Voilà vos missions, si vous les acceptez :

[size=90]ACCOMPLI : Affichage des nombres en lettres[/size]
[size=85]Les nombres semblent bien s’écrire, mais pour cela, j’ai dû enlever deux print qui affichaient des espaces. Le problème, c’est que je ne les ai pas vraiment enlevés, je les ai juste fait afficher du texte vide («  »). Si quelqu’un peut les enlever, car j’ai essayé mais ça faisait planter le compilateur (chercher « Natrium » dans la source). Aussi, on peut tout réécrire from scratch, si jamais il y a un moyen plus optimisé de le faire.
[spoiler][code]Include (-
Array LanguageNumbers table
‹ un › 1 ‹ une › 1 ‹ deux › 2 ‹ trois › 3 ‹ quatre › 4 ‹ cinq › 5
‹ six › 6 ‹ sept › 7 ‹ huit › 8 ‹ neuf › 9 ‹ dix › 10
‹ onze › 11 ‹ douze › 12 ‹ treize › 13 ‹ quatorze › 14 ‹ quinze › 15
‹ seize › 16 ‹ dix-sept › 17 ‹ dix-huit › 18 ‹ dix-neuf › 19 ‹ vingt › 20
‹ vingt et un › 21 ‹ vingt-deux › 22 ‹ vingt-trois › 23 ‹ vingt-quatre › 24
‹ vingt-cinq › 25 ‹ vingt-six › 26 ‹ vingt-sept › 27 ‹ vingt-huit › 28
‹ vingt-neuf › 29 ‹ trente › 30
;

[ LanguageNumber n f;
if (n==0) { print « zéro »; rfalse; }
if (n<0) { print "moins "; n=-n; }
#Iftrue (WORDSIZE == 4);
if (n >= 1000000000) {
if (f == 1) print " « ;
print (LanguageNumber) n/1000000000, " milliards »; n = n%1000000000; f = 1;
}
if (n >= 1000000) {
if (f == 1) print " « ;
print (LanguageNumber) n/1000000, " millions »; n = n%1000000; f = 1;
}
#Endif;
if (n >= 1000) {
if (f == 1) print " ";
if (n/1000 == 1) print "mille ";
else print (LanguageNumber) n/1000, " mille ";
n = n%1000; f = 1;
}
if (n>=100) {
if (f == 1) print «  »; ! Natrium729 : à enlever ? Ça fonctionne sans, en tout cas.
if (n/100 == 1) print «  »; ! Natrium729 : à enlever ? Ça fonctionne sans, en tout cas.
else print (LanguageNumber) n/100, " ";
if (n%100 ~= 0) print "cent ";
else print « cents »;
n=n%100; f = 1;
}

if (n==0) rfalse;
switch(n)
{
    1:  print "un";
    2:  print "deux";
    3:  print "trois";
    4:  print "quatre";
    5:  print "cinq";
    6:  print "six";
    7:  print "sept";
    8:  print "huit";
    9:  print "neuf";
    10: print "dix";
    11: print "onze";
    12: print "douze";
    13: print "treize";
    14: print "quatorze";
    15: print "quinze";
    16: print "seize";
    17: print "dix-sept";
    18: print "dix-huit";
    19: print "dix-neuf";
    20 to 99:
        switch(n/10)
        {
            2:  print "vingt";
                if (n%10 == 1) {print " et un"; return; }
            3:  print "trente";
                if (n%10 == 1) {print " et un"; return; }
            4:  print "quarante";
                if (n%10 == 1) {print " et un"; return; }
            5:  print "cinquante";
                if (n%10 == 1) {print " et un"; return; }
            6:  print "soixante";
                if (n%10 == 1) {print " et un"; return; }
            7:  print "soixante";
                if (n%10 == 1) {print " et onze"; return; } !*!
                print "-"; LanguageNumber(10 + n%10); return;
            8:  if (n%10 == 0) {print "quatre-vingts"; return; }
                print "quatre-vingt";
            9:  print "quatre-vingt-"; LanguageNumber(10+ n%10); return;
        }
        if (n%10 ~= 0)
        {
            print "-"; LanguageNumber(n%10);
        }
}

];
-) instead of « Numbers » in « Language.i6t ».[/code][/spoiler][/size]
[size=90]ACCOMPLI : Affichage des heures en lettres[/size]
[size=85]Pareil que pour les nombres, il y avait des erreurs (comme « une heures ») et elle n’était pas au format 24 heures (« quatre heures » au lieu de « seize heures », par exemple). Encore une fois, ce serait à modifier ou à recommencer si on peut faire plus optimisé (ça, je peux toujours essayer, car ça n’a pas l’air d’être du code très compliqué, il faut juste que je cherche un algorithme sur internet). J’ai pour l’instant remplacé ce bout de code par du code I7 provisoire.
[spoiler][code]Include (-
[ PrintTimeOfDayEnglish t h m dir aop say_minutes quad;
! adapted the spanish version by Sebastian Arg
quad = 1; ! =1 es la primera media hora, =2 es la segunda
h = (t/60) % 12; m = t%60; if (h==0) h=12;
if (m==0) { if(h==1) {print « une » ;print " heure"; return ;} else print (number) h;print " heures"; return; } !infsp hack
dir = « heures »;! infsp hack
if (m > 30) { m = 60-m; h = (h+1)%12; if (h==0) h=12; dir = « heures moins »; quad=2; } !infsp hack
switch(m) {
1: say_minutes = « une »;
2: say_minutes = « deux »;
3: say_minutes = « trois »;
4: say_minutes = « quatre »;
5: say_minutes = « cinq »;
6: say_minutes = « six »;
7: say_minutes = « sept »;
8: say_minutes = « huit »;
9: say_minutes = « neuf »;
10: say_minutes = « dix »;
11: say_minutes = « onze »;
12: say_minutes = « douze »;
13: say_minutes = « treize »;
14: say_minutes = « quatorze »;
15: if (quad==2) say_minutes = « le quart »; else say_minutes = « et quart »;
16: say_minutes = « seize »;
17: say_minutes = « dix-sept »;
18: say_minutes = « dix-huit »;
19: say_minutes = « dix-neuf »;
20: say_minutes = « vingt »;
21: say_minutes = « vingt et une »;
22: say_minutes = « vingt-deux »;
23: say_minutes = « vingt-trois »;
24: say_minutes = « vingt-quatre »;
25: say_minutes = « vingt-cinq »;
26: say_minutes = « vingt-six »;
27: say_minutes = « vingt-sept »;
28: say_minutes = « vingt-huit »;
29: say_minutes = « vingt-neuf »;
30: say_minutes = « et demie »;
default:
if (quad == 2){
print (number) m;
if (m%5 ~= 0) {
if (m == 1) print " minute"; else print " minutes"; ! infsp hack
}
}
if (quad == 1){
if (h==1) { print (number) h," heure « ; print (number) m; } else print (number) h, » heures "; print (number) m;
if (m%5 ~= 0) {
if (m == 1) print «  »; else print «  »; ! infsp hack
}
}
return;
}
if (h==1) print « une »; else print (number) h; print " ", (string) dir, " ", (string) say_minutes;!infsp hack
];
-) instead of « Analogue Printing » in « Time.i6t ».

[Voilà ce que j’ai ajouté]
To say (T - a time) in words:
let HP be the hours part of T;
let MP be the minutes part of T;
if MP > 30, increment HP;
let H be « [if HP is 0 or HP is 24]minuit[else if HP is 12]midi[else][HP in words] heure[s][end if] »;
let M be « [if MP is 0][else if MP is 30]et demie[else if MP > 30]moins [60 - MP in words][else][MP in words][end if] »;
if MP is 15 or MP is 45, replace the text « quinze » in M with « [if MP is 15]et[else]le[end if] quart »;
let heure finale be « [H] [M] »;
replace the text « un » in heure finale with « une »;
say « [heure finale] ».[/code][/spoiler][/size]
[size=120]Le code Translation to Informese[/size]
Tout le Part 4.6 - Informese translation of commands est à revoir (je le colle pas ici, parce que c’est un gros morceau).

Il faudrait revoir la transformation des mots « dessus » et « dessous » en « sur-lui » et « sous-lui », car ça empêche la compréhension d’action comme « >regarder en dessous du tapis ».

[size=85]ACCOMPLI : Il y a un code qui ajoute une espace après chaque apostrophe qui est devenu inutile (je pense) car j’ai ajouté du code qui enlève les apostrophes directement (grâce à l’extension Punctuation Removal d’Emily Short). Ou alors, il faut aller fouiller dans cette extension, et coller son code dans le code de l’extension.
En plus, faire ça résoudrait sûrement un bug qui est causé par mon code qui enlève les apostrophes : les pronoms élidés ne fonctionnent plus : « >la ouvrir » marche, mais plus « l’ouvrir », car la dernière commande est transformée en « l ouvrir » (sans apostrophes donc).
Ce qu’il faudrait faire, c’est d’abord remplacer les pronoms élidés, puis enlever les apostrophes, je pense.
(j’espère que ce que je viens d’expliquer est compréhensible…)[/size]

Les commandes qui commencent par « je » enlève le « je », mais je pense que c’est complètement inutile, étant donné que de toute façon, il n’y a que les commandes à l’infinitif qui sont acceptées (et qui donc ne commenceront jamais par « je »).

[size=85]ACCOMPLI : Les pronoms concernant le joueur ne fonctionnent plus non plus quand il sont élidés (m’, s’, …) à cause encore une fois des apostrophes qui sont enlevées.[/size]

[size=85]ACCOMPLI : Le dernier problème que je peux voir, c’est qu’il faut spécifier dans les lignes de compréhension « à/a » à chaque fois, alors qu’il faudrait juste écrire « a », l’accent supposant s’enlever.[/size]

Enfin, il y a une tonne de commentaires dans cette partie du code I6, donc à voir s’il n’y a pas moyen d’optimiser tout ça (mais on risque de casser quelque chose…).

Je sais que c’est beaucoup, et qu’il y a des risques que plus rien ne fonctionnent, mais il y a des problèmes vraiment importants, je trouve (comme les pronoms élidés).
Merci à ceux qui s’en chargeront !

Pour translation to Informese, c’est du code qui vient directement de la bibliothèque I6, donc si on veut le modifier ça impliquerait de modifier le code de la bibliothèque I6, pour être cohérents :slight_smile: (j’y suis absolument pas opposé, mais je préviens juste!)

Pour les histoires de ‹ à ›/‹ a ›, auraes avait proposé un fix il y a quelques temps mais il n’a pas été implanté dans la bibliothèque (en fait, je sais même pas si ça marche). Je fais un test bientôt, et si ça marche je te dis comment modifier la bibliothèque I7.

Pour le ‹ je ›, dans la bibli I6 on avait du code pour « déconjuguer » les verbes (à moins que ça soit désactivé par des flags de style « DESACTIVER_IMPERATIF_DPP »). Par exemple « je vais à l’ouest » était transformé en >aller à l’ouest, puis parsé. C’est dans « UnknownVerb », dans FrenchG.h. Je crois que ce code n’est pas présent dans l’extension I7, j’en déduis que vous ne comptiez pas l’ajouter ? Si non, alors en effet il n’y a que l’infinitif de reconnu et on peut sûrement supprimer le je.

Sinon, question naïve concernant les apostrophes : pourquoi les enlèves-tu ? La façon dont c’est fait dans les bibliothèques I6 c’est en effet de décoller les mots avec apostrophe en ajoutant un espace, et pour les reconnaître il faut écrire un mot comme ‹ l^ › (le ^ veut dire apostrophe). Donc par exemple ‹ penne › ‹ all^ › ‹ arrabiata ›. Ca marche plus en I7 ça ? Il me semble que c’est une bonne façon de procéder… Bref, pas sûr qu’enlever les apostrophes soit une bonne idée :slight_smile:

Oui, je suis au courant que c’est tiré directement du la bibliothèque d’I6. C’est pour ça que je demande : je suis capable de comprendre le code, de le modifier un peu, mais dans ce cas il faudrait aussi le modifier dans la bibli I6.

Pour ce qui est des apostrophes, la ligne suivante ne fonctionne pas par défaut :

Understand "aujourd'hui" as maintenant.

Mais avec l’extension Punctuation Removal d’Emily Short, si on enlève les apostrophes avant l’interprétation d’une commande, on peut alors écrire :

Understand "aujourd hui" as maintenant. [Noter l'espace à la place de l'apostrophe]

Ceci dit, je pense que les pronoms sont plus importants, car c’est rare que le nom d’un objet contienne une apostrophe ; je pense alors à deux solutions :
[]J’enlève tout bonnement le code, et si jamais l’auteur en a besoin, il n’a qu’à le rajouter, en n’enlevant les apostrophes que les cas spécifiques présents dans son jeu (comme ça, ça n’interfère avec les pronoms).[/][]Je laisse le code, mais n’enlève pas les apostrophes situées au début de la commande, juste après un « l », un « m », etc. (comme ça, seule la deuxième apostrophe sera enlevée dans « >m’asseoir sur aujourd’hui »). (Mais je viens de remarquer que l’extension ne permet que d’enlever toutes les apostrophes, donc ça ferait du code en plus pour en enlever que certaines : stocker le « m’ » dans une variable, l’effacer de la commande, enlever les apostrophes et recoller le « m’ ». Enfin bref.)[/]
(je penche pour la première option, pour pas que ça pénalise les jeux qui n’auront jamais besoin de comprendre des apostrophes.)

Sinon, pour le reste (écriture des nombres et de l’heure en lettres), je pense être capable de me débrouiller, car c’est pas du code compliqué.

Est-ce que « aujourd[']hui » marcherait? (est-ce que ca marche dans la bibli anglaise?)

En tout cas ta première solution me semble être la plus prudente… (et peut-etre la plus simple aussi!) Interférer avec les pronoms semble dangereux, et encore pire pour les articles parce qu’il me semble qu’un joueur novice a plutôt tendance à taper tous les mots (>regarder l’avion, >prendre l’uniforme, etc) ; du coup on rendrait la chose plus compliquée ou arbitraire pour les débutants.

Pour l’écriture des nombres, je me rappelle plus, ça s’utilise dans quel contexte? (C’est juste une fonctionnalité sympa pour un auteur ou y’a des trucs importants qui l’utilisent?)

Mettre l’apostrophe entre crochet ne fonctionne pas, car Inform le comprendrait alors comme un grammar token (cf. je ne sais plus quelle section du chapitre « Understanding » de la doc) qu’on aurait pas défini. Je vais essayer de poser la question sur intfiction.org.

Pour les nombres et l’heure en lettres, c’est super utile (pour moi en tout cas), ça permet de les écrire en lettres plutôt qu’en chiffres dans un texte : « il était quatorze heures trente-deux » plutôt que « Il était 14 h 32 ». (théoriquement, quand écrit de la littérature, on écrit en lettres. :slight_smile: )

EDIT : Effectivement, « Understand « aujourd’hui » as maintenant » fonctionne si on écrit le jeu en anglais. Quelque chose dans le code I6 doit empêcher la compréhension des apostrophes.

La solution m’est venu d’un coup pour les apostrophes, et en fait, c’était vraiment bête ! Puisque le bout de code Translation to Informese ajoute une espace après les apostrophes, il suffisait aussi de l’ajouter dans les lignes de compréhension :

Understand "aujourd' hui" as maintenant. [Noter l'apostrophe ET l'espace qui le suit]

Et voilà, un problème en moins !
(à vrai dire, c’était ce sujet qui m’avait fait enlever les apostrophes dans les commandes du joueur, alors qu’il n’y en avait pas besoin.)

Tout bête mais il fallait y penser :slight_smile: Bravo !

Ok, alors, pour le truc des à/a : dans la bibliothèque I6 il suffit de supprimer tous les ‹ à › des lignes de grammaire, mais pas le ‹ à › de enleve_accents ; ça fait sortir le mot ‹ à › du dictionnaire, ce qui fait que quand le jeu tombe dessus il le connaît pas, et il enlève l’accent, et là c’est bon il le connaît. Auraes avait évoqué cette solution dans le sujet sur la bibli francophone I6, mais ça n’avait pas été implanté. Ca marche chez moi, et je crois que c’est la bonne façon de faire. (De même, y’a une occurence de ‹ clé › dans une ligne de grammaire qu’il faut supprimer, sans ça un objet avec nom ‹ cle › ne sera pas reconnu par ‹ >x clé ›) C’est fait sur mon Bitbucket.

Pour l’extension I7, j’ai cherché toutes les occurences de « à/ » : si c’était dans un « understand… », j’ai supprimé ; mais y’a aussi un « To say à/au/aux », et je savais pas trop quoi faire (j’ai pas réussi à voir où c’était utilisé…), alors j’ai transformé en « a/au/aux ». J’ai pas eu le temps de tout tester, mais avec « Le Roi de Fihnargaia » « aller à nord » puis « parler à roi » marchent tous les deux ; le seul truc qui me fait peur, c’est ce « To say a/au/aux », j’espère qu’il est pas cassé… :stuck_out_tongue:
Cf fichier joint - fais un diff entre ta version et la mienne si tu veux voir précisément ce que j’ai changé !

Au passage, il faut faire attention dans le code de Fihnargaia, à la ligne 8 vous avez un « Include French by Nathanael Marion » alors que vous dites qu’il ne faut pas l’inclure ! (dans le readme de la racine du dépôt) Je l’ai enlevé et ça marche (6L02).

Ça semble marcher, merci ! (même si je me demande : s’il suffisait de l’enlever du dictionnaire, pourquoi l’y avoir mis en premier lieu ? :angry: )

Par contre, pour le To say à/au/aux, il fallait pas le changer, c’est une fonction qui permet d’afficher la bonne préposition dans un texte. Mais comme un code source vaut mille mots : :wink:

Instead of giving la bombe to someone (called cible): say "Vous donnez rapidement la bombe [à la cible].".
Ça affichera « au soldat » ou « à l’infirmière » ou « aux troupes » ou…

Donc ça n’affecte en rien le dictionnaire (apparemment) et j’ai remis le « à ».

Pour ce qui est du Roi de Fihnargaia, c’est juste que l’exemple n’a pas vraiment suivi toutes les modifications qui ont été apportés à l’extension.

Encore une fois, merci ! Il ne reste plus que les nombres et les heures en lettres, le « dessous » et « dessus » à revoir et la suppression du « je » en début de commande.