[I7] Alterner les languages

Bonjour,
J’écris une IF basée sur la traduction française avec les lignes :Include French by Eric Forgeot. Use French 1PSPr language.
Seulement j’aurais aimé pouvoir, pour un petit passage de mon jeu, retourner à la langue anglaise. Y a-t-il moyen d’écrire quelque chose dans le genre « Use English language » par exemple ?

Merci d’avance.

Vraiment aucune idée ? :frowning:

Salut,

Ca l’air d’être une idée intéressante, mais malheureusement je ne vois pas trop comment faire ça de façon simple ! Je ne crois pas que ça soit autorisé dans Inform : il me semble que pas mal des articles et réponses par défaut sont des constantes dans les bibliothèques d’Inform, c’est à dire des valeurs qui ne peuvent pas être changées après la compilation (à l’intérieur de ton jeu).

Une solution possible serait de simuler un changement de langue, mais ça doit être compliqué à réaliser en code. Il faudrait essentiellement parser ‹ à la main › ce qui est entré par le joueur, et afficher les mêmes messages que ce que la bibliothèque anglaise afficherait. Enfin si t’y arrives, c’est un truc qui peut être une extension intéressante et originale, quoi :wink: (je mets l’idée dans un coin, si un jour ça me démange…)

Une autre solution, peut-être plus faisable, serait d’essayer de définir une variable « anglais » qui vaut 0 (si on parle en français) ou 1 (si on parle en anglais), puis rajouter tous les verbes anglais à la bibliothèque française sous la forme « si on parle anglais reconnaître ‹ push ›, sinon reconnaître ‹ pousser › » ou quelque chose comme ça. Ca impliquerait pas mal de boulot, mais ça pourrait être intéressant. Si tu ne sais pas le faire, je peux essayer de regarder.

Si cette phase de ton jeu est courte, tu pourrais insérer un faux parser (c’est à dire quelque chose que Inform ne verra pas, à base de @read et autres opcodes et tout) qui ne réagit qu’à certaines commandes et qui dit « I don’t understand » à d’autres endroits. C’est assez limité, tu n’as plus la flexibilité du parser, mais pour un petit moment (quelques commandes) ça peut marcher sans que tu te prennes trop la tête. Je saurais comment faire ça en Inform 6 (en fait, c’est ce que j’ai fait pour « La femme qui n’aimait pas les ordinateurs »), mais en Inform 7 je sais pas… Si quelqu’un d’autre a une idée… (ou me montre comment on peut insérer du code I6 dans I7 :wink:)

La dernière technique serait risquée et vraiment pas ce que tu veux, mais bon : tu crées des nouveaux verbes anglais, que tu actives que quand tu veux (avec une variable ‹ anglais › comme précédemment), et le moment venu tu te mets à parler en anglais au joueur et tu actives ces verbes ; avec un peu de chance le joueur comprendra qu’il faut qu’il tape en anglais et tapera la bonne commande, et il n’y verra que du feu. Mais comme tu ne désactives pas les verbes en français avec cette solution, ni les réponses automatiques, avec de la malchance le joueur tapera « pousser door » et ça marchera très bien, ou alors il tapera « push house » et on lui répondra « C’est fixé sur place » ; dans tous les cas, c’est bizarre ! (Mais tu peux faire comme si c’était le but, « pour ne pas désarçonner les gens qui ne parlent pas très bien anglais », et pas que tu ne savais pas le faire autrement :wink:)

Bref. Compliqué, mais pas infaisable, et si t’y arrives c’est sûrement du code qui intéressera les gens ici :slight_smile: Je peux aussi essayer de t’aider à faire ça, éventuellement, même si j’ai pas mal de boulot en ce moment.

[EDIT: en y réfléchissant un peu plus, je ne crois pas que la 2ème solution pourrait marcher, encore une fois à cause des constantes (plus spécifiquement, les constantes de French.h dans I6 - les « et », « encore », « oui », « sauf », « recommencer », etc.), qui devraient être changées dynamiquement alors que c’est des constantes. Je me trompe ?]

En y réfléchissant, je me demande, est-ce qu’il n’y aura pas moyen de « lier » deux fictions, c’est à dire à un moment du jeu, donner une sorte d’instruction à l’interpréteur pour ouvrir une nouvelle fiction… On aurait donc deux fichiers différents pour un les deux langues différentes.

non ça ne peut pas être possible dans un seul jeu parce que les langues sont définies au moment de la compilation et elles s’excluent mutuellement (les réponses-types pour une langue prennent la place de l’autre). En revanche TOUTES commandes anglaises sont acceptées dans Inform7 (il est possible de désactiver cela en modifiant très facilement la bibl. french.i7x).

Mais il me semble que le plus simple serait de lier les 2 parties dans 2 fichiers différents. Seul problème, c’est de réimporter les possessions du joueur d’un jeu à l’autre. C’est faisable avec un fichier texte externe, mais c’est un peu compliqué je pense.

Après réflexion, si la partie anglaise se passe dans un lieu particulier, ou à un moment particulier, il serait faisable de redéfinir chaque action à ce moment, suivant le contexte, par exemple :

instead of smelling something when the scene is EnglishPart, say "It doesn't smell anything special".

en tout cas le joueur pourra entrer indifféremment les commandes en fr ou en

Ca me semble aussi être la meilleure solution, mais il me semble que ça pose un problème au niveau des constantes. Cela étant, j’ai l’impression de chipoter - qui va ouvrir son inventaire en mode ‹ phrase › et s’apercevoir que y’a un problème parce qu’il dit « et » et pas « and » :wink:

Que veux tu dire par « toutes les commandes anglaises sont acceptées dans Inform 7 » ? Que par défaut, un jeu en français peut se jouer avec les verbes anglais ? Ca ne m’était jamais venu à l’esprit d’essayer…

Et pourtant, c’est possible de modifier ça :

instead of taking inventory: let N be indexed text; let N be "[a list of things carried by the player]."; replace the regular expression "et" in N with "and"; replace the regular expression "une" in N with "a"; replace the regular expression "un" in N with "a"; say "[N]".

oui tout à fait.

c’est dans la partie « Part 3 - Replacing English verbs », il suffit de décommenter la partie avec :

Understand the command "take" as something new. Understand the command "carry" as something new. etc

qui peut le plus, peut le moins, autant rendre les jeux plus accessibles pour les anglophones connaissant un peu le français, ainsi qu’au joueur habitué à taper des commandes en anglais.

svn.tuxfamily.org/viewvc.cgi/inf … iew=markup

Je viens de remarquer un petit détail dans ce que tu a mis en lien :

(ligne 268) Understand the command "f asten" as something new. (ligne 309) Understand the command "fasten" as something new.
La ligne 268 est une erreur à supprimer, je suppose ?

Et, en ligne 291, je vois ceci :

Understand the command "" as something new.

Est-ce une erreur ?

En tout cas, si la version française d’Inform 7 accepte les verbes en anglais, nous avons eu de la chance qu’il n’y ait pas eu de confusion entre deux verbes qui seraient les mêmes en français et en anglais mais avec un sens différent !

Tu as raison, il doit y avoir une erreur. En fait j’ai recopié cette liste depuis la version espagnole. Mais c’est pas trop grave, vu qu’elle n’est pas activée, justement pour autoriser les verbes anglais. J’ai quand même corrigé dans ma version de travail, ça sera mis à jour prochainement.

Je ne crois pas qu’il y en ait (la liste des verbes n’est pas énorme), au pire des cas ça peut se régler au coup par coup.

Wow ! Encore un exemple de la puissance d’Inform 7 :slight_smile:

Ok, déjà merci beaucoup de vous être penchés sur mon problème… Suite à toutes ces propositions, je pense m’orienter vers les deux fichiers différents, ça me semble une des choses les plus simple à faire… Pas d’instruction alors dire à l’interpréteur d’ouvrir une nouvelle IF ? Sinon je dirai au joueur d’ouvrir la deuxième partie du jeu.

je ne crois pas qu’il soit possible de lancer un second jeu à partir d’un autre en cours. Le plus simple sera de demander au joueur de le faire lui-même…

Désolé si je remonte un sujet pas très récent, mais je pense que ça va en intéresser plus d’un.

En travaillant sur la nouvelle extension, je me suis dit que c’était assez facile d’alterner les langues avec les réponses personnalisables d’Inform 7 6L02. Voici un code qui fonctionne, même s’il ne traduit pas tous les messages (je n’allais pas écrire les 402 réponses pour chaque langue juste pour un exemple, tout de même :slight_smile: ).

[code]« Bilingue » by Natrium729 (in French)

When play begins, now the story viewpoint is second person plural.

Part 1 - Initialisation

[Les fonctions pour changer de langue.]
To switch to English:
now the language of play is the English language;
now the standard report waiting rule response (A) is « Time [adapt the verb pass from the third person singular]. ».
[Et la même chose pour les 401 autres réponses, à tirer des Standard Rules.]

To switch to French:
now the language of play is the French language;
now the standard report waiting rule response (A) is « Le temps [adapt the verb passes from the third person singular]… ».
[Et la même chose pour les 401 autres réponses, à tirer des l’extension française.]

[La compréhension des commandes en fonction de la langue]
Understand the command « wait » as something new.
Understand the command « attendre » as something new.
Understand « wait » as waiting when the language of play is the English Language.
Understand « attendre » as waiting when the language of play is the French Language.
[Et pareil pour absolument toutes les commandes possibles et imaginables.]

[Règles pour traduire les noms des objets.]
An object has a text called English printed name. The English printed name is usually « [printed name] ».

Rule for printing the name of an object (called O):
if the language of play is the French Language, say « [printed name of O] »;
else say « [English printed name of O] ».

[Traduction des articles des objets.]
A thing can be default-articled or custom-articled. A thing is usually default-articled. [Pour donner un article autre que celui par défaut, il faut qu’il soit custom-articled et spécifier son article dans la source.]

When play begins:
repeat with T running through default-articled things:
if T is plural-named:
now the indefinite article of T is « [if the language of play is the French Language]des[else]some[end if] »;
else:
if T is male:
now the indefinite article of T is « [if the language of play is the French Language]un[else]a[end if] »;
else:
now the indefinite article of T is « [if the language of play is the French Language]une[else]a[end if] ».

Part 2 - Scénario

France est un endroit. « Vous êtes en France, et le Royaume-Uni est au nord. ».

La tour Eiffel is a fixed in place custom-articled thing in France. The indefinite article of la tour is « la ».

The fromage is privately-named in France.
The English printed name is « cheese ».
Understand « fromage » as the fromage when the language of play is the French Language.
Understand « cheese » as the fromage when the language of play is the English Language.

United-Kingdom is north from France. « You are in the United-Kingdom, and France is south. ».

Big Ben is fixed in place in United-Kingdom.

Carry out going to United-Kingdom:
switch to English.

Carry out going to France:
switch to French.

Test me with « wait / attendre / prendre fromage / i / nord / attendre / wait / i ».[/code]
Il doit rester des choses qui restent en français, mais ça marche en tout cas (il n’y a qu’à taper « test me » pour vérifier). Il ne faut pas oublier de remplacer les espaces par des tabulations pour ce qui est de l’indentation. Et bien évidemment, la tâche la plus longue, retranscrire toutes les réponses et les commandes pour les deux langues !

En tout cas, ça me donne des idées ! À voir qui sera le premier à faire une FI bilingue !

P.S. — Est-il possible d’ajouter la coloration syntaxique dans les balises de code ?

Ouah, ça demande un peu de travail, mais effectivement, ça à l’air de marcher très bien ! De la coloration syntaxique ? Tu veux dire directement sur I7 ? Sur un éditeur comme Notepad++ par exemple, tu peux définir tes propres règles de coloration en tous cas.

Si tu veux, je peux te faire une extension qui marche mieux que l’exemple, comme ça ce sera plus simple pour toi, et réutilisable par n’importe qui (moi par exemple :stuck_out_tongue: ). Pour les délais, ça risque d’être un peu long, par contre.

Et pour coloration syntaxique, je parlais de la balise [code] du forum. Mais j’ai fait quelque recherches et ça semble compliqué.

le problème avec ce forum c’est que je ne peux plus le mettre à jour (version obsolète de php sur les serveurs de free), alors je préfère ne pas trop toucher à l’existant :slight_smile:

Pas de problème, ça aurait juste été plus pratique. Et puis, comme je l’ai dit, ça semble compliqué à mettre en place.
Faudra un jour migrer sur un autre serveur style OVH… (mais ce sera pas moi qui payerait l’hébergement, hein :stuck_out_tongue: )

Bref, on dévie du sujet initial…

Je vais sûrement prendre un serveur dédié (j’en ai déjà un pour mageia.madb.org mais je voudrais le changer pour plus puissant), y a moyen d’héberger les sites et services d’ifiction. Le domaine ifiction.fr semble libre en plus.

Retour sur le sujet initial : j’ai créé une extension qui permet à de changer de langue en cours de jeu. J’ai ouvert un sujet ici !