il y a 6 ans
Ce tutoriel explique comment utiliser l'API de langage de la Gamebuino META.
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.
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".
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);
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:
LANG_EN
LANG_FR
LANG_DE
LANG_ES
LANG_NL
Questions / commentaires / suggestions? Laissez-nous un commentaire plus bas!
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();