Language

Créations

Sorunome

il y a 6 ans

Ce tutoriel explique comment utiliser l'API de langage de la Gamebuino META.

Idée générale

En bref, l'API fournit un type de variable qui remplace une simple chaîne de caractères que vous pouvez passer en paramètre à la plupart des fonctions d'affichage de la bibliothèque. C'est type est const MultiLang[]. Voici un exemple simple qui affichera "Bonjour" en fonction du langage de la console:

const MultiLang hello[] = {
    { LANG_EN, "Hello" },
    { LANG_FR, "Bonjour" },
    { LANG_DE, "Hallo" },
};

gb.display.print(helloWorld);

Comme vous pouvez le voir, d'abord on définit la variable hello de type const Multilang[]. Ce tableau est rempli de toutes les traductions que l'on souhaite pour notre jeu, ici on a l'anglais (EN), le français (FR), et l'allemand (DE).

Mais quelle langue sera affichée? La langue de la console (définie par le joueur) est toujours sélectionnée si possible. Donc si le joueur a mis leur Gamebuino en allemand, tous les jeux seront en allemand! Si un jeu n'offre pas le langage du joueur, la traduction anglaise est choisie par défaut.

Autres utilisations

Ce type de variable (Multilang) peut être utilisé avec à peu près avec toutes les fonctions possibles. Notamment quand on affiche du texte sur l'écran, et quand on utilise l'interface graphique. Dans le cas où vous avez besoin d'une chaîne de caractères traduite, vous pouvez toujours utiliser la fonction gb.language.get comme ceci:

const MultiLang lang_fox[] = {
    { LANG_EN, "Fox" },
    { LANG_FR, "Renard" },
    { LANG_DE, "Fuchs" },
};
const char* fox = gb.language.get(lang_fox);

Et voilà! fox peut être utilisée en tant que chaine de caractère partout où vous voulez la bonne traduction de "renard".

Utilisation avancée

Il existe des caractères spéciaux comme ö, à, â etc. La plupart de ces caractères sont disponibles! Nous utilisons le charset ISO 8859-1. Cependant cela veut aussi dire que le fichier responsable de la mémorisation des définitions MultiLang, avec les caractères à accents, doit être sauvegarder dans le charset ISO-8859-1 (ou équivalent comme le Windows-1252). Sinon, vous devez obligatoirement entrer le code hexadécimal du caractère. Par exemple, ö devient \xF6.

Nous vous recommandons d'avoir toutes vos définitions de variables de langage dans un fichier source (.cpp) à part avec un #include qui inclut un fichier d'entête qui liste toutes les variables de langue. Cet méthode est utilisée pour le loader avec les fichiers language.cpp et language.h .

En mettant les définitions de langage dans un fichier externe, vous aurez surement des erreurs de compilation, étant donné que le compilateur n'est pas capable de savoir combien de langues vous utilisez par variable MultiLang[]. Pour cela, vous pouvez simplement déclarer le nombre de langues dans le paramètre LANGUAGE_DEFAULT_SIZE dans config-gamebuino.h (en savoir plus ici).

#define LANGUAGE_DEFAULT_SIZE 3

Une autre option est de manuellement passer le nombre de langues dans gb.language.get:

const char* string = gb.language.get(lang_string, 3);

Utilisation très avancée

Pour aller plus loin, vous aurez peut-être besoin de savoir quelle langue est actuellement utilisée par la console. pour par exemple, charger la bonne version d'un sprite qui a du texte, ou avoir un bout de texte compressé etc. Pour vous aider, utilisez gb.language.getCurrentLang:

Gamebuino_Meta::LangCode langCode = gb.language.getCurrentLang();
if (langCode == LANG_EN) {
    // notre code si la console est en anglais
} else if (langCode == LANG_DE) {
    // notre code si la console est en français
}

Remarque: cette méthode devrait être utilisée le moins souvent possible, vu que gb.language.get a une option de repli automatique. Si vous utilisez gb.language.getCurrentLang, il est fortement conseillé d'avoir une option de replis.



Mais quelles langues sont présentes? Et bien quasiment toutes! Cependant, les seules que l'on peut choisir dans le loader sont:

  • Anglais LANG_EN
  • Français LANG_FR
  • Allemand LANG_DE
  • Espagnol LANG_ES
  • Néerlandais LANG_NL

Questions / commentaires / suggestions? Laissez-nous un commentaire plus bas!

Voir la création

jicehel

NEW il y a 6 ans

A little mistake in the begin of last example i think:

Going beyond, you might need to be able to detect what the currently set language is. This might be useful if you do other fancy stuff, like swapping out sprites that contain text, have compressed text blobs etc. For that, you can use gb.language.getCurrentLang:

Gamebuino_Meta::LangCode langCode = gtb.language.getCurrentLang();


gtb.language.getCurrentLang(); => gb.language.getCurrentLang();



Sorunome

il y a 6 ans

Fixed by now, thank you!

jicehel

NEW il y a 6 ans

I forgot to gratz you for this other nice tuto ... oups ;) and thanks

Sorunome

NEW il y a 6 ans

jicehel jicehel

Fixed by now, thank you!