• 07 Juin 2026, 00:54:41


Auteur Sujet: include système de langues  (Lu 3070 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : include système de langues
« Réponse #15 le: 08 Septembre 2008, 12:05:18 »
Le problème d'un include c'est que tu ne pourras pas surcharger les callbacks comme on peut le faire avec un FS.
Si une callback existe dans ton include, tu ne pourras pas mettre la même dans ton GM (erreur de compil car fonction définie 2 fois).
Le mieux, dans ton include c'est de définir une variable qui donne la langue choisie (ou imposée).
Ensuite, comme tu l'as fait précédement, tu redéfinies les fonctions d'affichage de texte (SendClientMessage, ...) pour qu'elles affichent le message dans la bonne langue.
Pour faire ça, il faut passer par des identifiants de chaines.
Ensuite, dans un tableau, tu stockes les chaines pour chaque langue.
Exemple :
#define CHAINE_BIENVENUE   1    /* Identifiant de la chaine de bienvenue */
#define CHAINE_CONNECTION 2
...
new Chaine_FR[NB_MAX_CHAINES][255]; /* Chaines en français */
new Chaine_EN[NB_MAX_CHAINES][255]; /* Chaines en anglais */

/* Fonction d'affichage */
SendClientMessageLangue (playerid, IdMessage, Langue, Couleur)
{
   /* Selon la langue */
   switch (Langue)
   {
      case FRANCAIS:
         SendClientMessage (playerid, Couleur, Chaine_FR[IdMessage]);
      break;
      case ANGLAIS:
         SendClientMessage (playerid, Couleur, Chaine_EN[IdMessage]);
      break;
      default:
         SendClientMessage (playerid, Couleur, Chaine_FR[IdMessage]); // Français par défaut
      break;
   }
}

/* Exemple d'utilisation */
SendClientMessageLangue (playerid, CHAINE_BIENVENUE, LangueJoueur[playerid], 0x00FF00AA);

Et il faut aussi initialiser toutes les chaines :
Chaine_FR[CHAINE_BIENVENUE] = "Bienvenu(e) sur notre serveur";
Chaine_EN[CHAINE_BIENVENUE] = "Welcome on our server";
Chaine_FR[CHAINE_CONNECTION] = "Vous êtes connecté(e)";
Chaine_EN[CHAINE_CONNECTION] = "You are connected";

Par contre, cette façon de faire ne permet pas de mettre des données variables dans les chaines.
Si on veut faire cela, il faut faire des fonctions à arguments variables (sur le principe de printf). Mais c'est un peu compliqué (pas trop quand même). Et l'implementation des fonctions à arguments variables n'est pas très pratique en PAWN.
Mais ceci permettrait de déclarer des chaines du genre "Bienvenu(e) %s sur notre serveur" et de passer le nom du joueur dans la fonction SendClientMessageLangue.

++
Syg

Courtesy of GtaManiac