Changement de langues

Bonjour à tous :slight_smile:

Je vais bientôt attaquer un “gros” morceau de mon jeu : le changement de langues :open_mouth:

A l’instinct, j’aurais envie de procéder ainsi :

  • Faire un fichier texte pour chaque langue
  • Dans le jeu, mettre chaque morceau de texte (du fichier txt) dans une variable texte de la scène (en fcn de la langue voulue)
  • Afficher cette variable dans un “objet texte” de la scène.

Cette solution doit fonctionner je pense. Cependant, pour les scène ou il y a plein de bouts de texte, je vais me retrouver avec pleins d’objets textes, ce qui n’est pas vraiment super.

j’aurais aimé avoir votre avis sur la question ^^
Il y a surement des solutions que je n’ai pas du envisager (avec des structures parents/enfants peut être)

Merci de votre aide ! :slight_smile:

Avoir des fichier/variable es pas mal je pense car l’ajout de langue deviens moins compliqué.
Mais le problème es en effet a utiliser ça peut vite devenir un bordel.

Je voit pas de solution plus pratique pour faire cela.

Salut, je l’ai finalement fait ce week-end avec la méthode suivante (au cas où ça pourrait intéresser d’autres personnes):

  • Création d’un fichier texte “langue” pour chaque langue
  • Dans la scène, création d’un seul objet “texte”
  • Dans les événements de la scène :
    Si variable “Langue” = “Français”, alors :
  • Créer l’objet “texte” à la position 400,400 (par exemple)
  • Lire “traduction1” du fichier “langue” et stocker le texte dans la variable 'Phrase1"
  • Faire Variable(Prase1) au texte de “texte”

On répète cette séquence pour chaque morceau de phrase que l’on désire traduire, et pour chaque langue.

Ca fait un peu une programmation à rallonge, mais ça fonctionne.

Voili Voilou

A++

Ludo

Pourrais tu me dire à quoi ressemble ton fichier texte, car moi je sèche un peu :confused:

EDIT : Désolé, j’ai trouvé, cela n’est pas simple :wink:
Pour les autres un exemple :

<?xml version="1.0" encoding="UTF-8" ?> <L1> <phrase01 texte="Bonjour" /> </L1>

<?xml version="1.0" encoding="UTF-8" ?> <L1> <phrase01 texte="Hello" /> </L1>

ce qui donne dans Develop :

Lire "L1/phrase01" du fichier "francais.txt" et stocker le texte dans text1

Exactement !

A la nuance prêt que tu ne devrait pas encoder le fichier texte “UFT8” mais en “ISO-8859-1”

<?xml version="1.0" encoding="ISO-8859-1" ?>

Ca te permettra de pouvoir gérer les accents et autres caractères comme les langues orientales ou asiatiques. :wink:

Dans GDevelopp, voilà à quoi ressemble chaque événement dans mon programme :

A++

Surtout pas, l’ISO-8859-1 ne gere rien d’autre que les langues occidentales. Il faut bien qu’il laisse le fichier en UTF-8. D’ailleurs, ce que tu montres n’est que l’en-tete du fichier qui donne une indication de l’encodage mais ne definit pas l’encodage du fichier (qui doit rester en UTF-8 aussi). GDevelop ignore d’ailleurs cette indication.

GDevelop n’a qu’un P.

Salut Victor,

Désolé si j’ai donné une fausse info.
J’ai changé l’encodage car l’UFT-8 ne semblait pas gérer la langue chinoise.

ISO-8859-1 permet de le gérer, c’est sûr, car ça fonctionne actuellement dans mon jeu. J’ai cependant encore un comportement bizarre parfois lors du choix de la calligraphie (font).

J’en avait essayé d’autres encodages également, mais ça posait des problèmes avec les accents cette fois ci…

En fait, officiellement, que faudrait’il choisir ? Quel encodage permet de faire quoi ? pour quelles langues ? :slight_smile:

Comme j’ai dit, l’ISO que tu cites ne gère que les langues occidentales et sûrement pas le chinois alors que l’utf8 gère tout. Je veux bien une preuve que ton fichier est en ISO et contient des caractères chinois car cela n’est pas possible (l’entête du fichier XML n’est pas une preuve car GDevelop 4.* Considère toujours les fichiers XML comme étant en UTF8!).

-En ASCII, les caractères sont codés sur 7 bits, soit un code composé de sept chiffres qui sont tous égaux à 0 ou à 1. Il permet donc de représenter 2^7 soit 128 caractères différents. 128 caractères sont suffisant pour mémoriser notre alphabet, les chiffres, des élements de ponctuation (…), mais pas suffisant pour stocker nos caractères spéciaux (accents, cédilles…)
-En ISO 8859-1 (souvent appelée Latin-1), les caractères sont codés sur 8 bits. Il permet donc de représenter 28 soit 256 caractères différents. 256 caractères sont suffisant pour mémoriser notre alphabet latin avec les caractères spéciaux (accents, cédilles…)
-L’ISO 8859-15 (souvent appelée Latin-9) est une variante réactualisée du Latin-1. Toujours codée sur 8 bits, il ajoute notamment le caractère euro (€) et les caractères œ et Œ à la place de certains caractères peu utilisés.
Le Windows-1252 (parfois appelé AINSI) est un encodage propre aux ordinateurs Windows. S’il est lui aussi codé sur 8 bits, certains caractères diffèrent des codages ISO vu ci-dessus.
-Le MacRoman est un encodage propre aux ordinateurs Apple Macintosh. S’il est lui aussi codé sur 8 bits, certains caractères diffèrent des codages ISO et Windows-1252 vu ci-dessus.
-L’UTF-8 est un encodage dit “Unicode”. L’Unicode vise à donner à tout caractère quelque soit son alphabet (latin, cyrillique, asiatique…) un code unique et compatible sur toutes les plateformes (Windows, Mac, Unix). L’UTF-8 est codé sur 8 à 32 bits ce qui permet d’encoder un nombre de caractères quasi illimité.
Source

Petite précision:

L’unicode est une norme qui donne un nombre sur 32 bits à chaque caractère possible. L’UTF8 est une façon de l’encoder qui permet d’éviter d’avoir 32 bits pour les caractères les plus communs (les caractères occidentaux entre autres). Les caractères Unicode encodés en UTF8 peuvent faire entre 8 bits (1 octets) et 48 bits (6 octets) car il faut rajouter des bits pour connaître la longueur d’un caractère encodé.

Hello tout le monde,

Je me suis déjà penché sur ce sujet il y a quelques mois, la méthode la plus simple que j’aie trouvée pour cela est la suivante :

1 : Dans le fichier des paramètres du jeu (celui ou vous enregistrez la taille de l’écran, les pref sonores, etc. vous mettez une partie dédiée à la langue, par exemple :

<langue> <langueaafficher texte="Français" /> <languetype texte="fr-fr" /> </langue>
Pensez à charger ce paramètre dans une variable globale au chargement du jeu.

2 : Dans vos scènes, vos créez un groupe contenant tous les textes qui seront traduits (si vous n’utilisez qu’un seul objet texte ce n’est pas nécessaire bien entendu). Nommez le par exemple ATraduire.

3 : Lors de l’édition de vos scènes, utilisez une variable interne a chaque instance d’objet texte qui contient un court texte qui identifie la phrase à aller chercher, par exemple “score”

4 : Créez un fichier XML qui ressemble à ça :

<fr-fr>
     <score texte="Vous avez un score de : " />
     ...
</fr-fr>
<en-us>
     <score texte="Your score is : " />
     ...
</en-us>

5 : Créez un groupe d’évènements externes appelé ChangementLangue et dans celui ci :

Condition : Au lancement de la scène
Pour chaque objet : ATraduire
Lire GlobalVariableString(langue)+"/"+ATraduire.VariableString(texte) et enregistrer le texte dans temp
Faire =VariableString(temp) au texte de ATraduire

Si vous rafraichissez souvent l’affichage sans changer de scène (il subit de grosses modifications), vous pouvez, en utilisant l’extension Évènements Fonctions, créer une fonction qui contient le Pour Chaque Objet, et appeler cette fonction au lancement de la scène et quand l’affichage est rafraichi.

C’est la méthode la plus simple et adaptée aux gros projets. Le groupe d’évènements externes permet d’être utilisé dans toutes les scènes en même temps !

J’espère avoir été assez clair, n’hésitez pas si vos voulez plus de précisions :smiley:

ok ! :smiley: :smiley: :smiley: :smiley:

je vais refaire quelques tests alors ! ^^

Merci pour les infos !