Merci à tous pour vos réponses
Je ne vois pas bien comment ça pourrait marcher. Actuellement, mes deux fichiers .h contiennent simplement une liste de "#define MSG00001 blabla" jusqu'à "#define MSG00150 blabla" et je dois choisir à la compilation lequel inclure dans mon code.
Mais peut-être que ce que tu veux dire se rapproche de ce que propose "Un Programmeur".
Un Programmeur a écrit :
Le plus portable: tu ecris un petit preprocesseur qui initialise une variable globale avec le contenu du fichier.
Sinon, il y a des outils qui sont capables de faire ca directement pour certains type de fichiers objet (objcopy par exemple, voir l'option -B).
|
Oui, j'y ai pensé (pour la variable globale), mais d'un point de vue propreté du code, je trouve ça bof.
Si je comprends bien, j'aurais un fichier dans le code contenant des instructions du type :
Code :
- map<int, string> mapFr;
- mapFr[1] = "blabla1_fr";
- mapFr[2] = "blabla2_fr";
- ...
- mapFr[150] = "blabla150_fr";
|
et l'équivalent pour l'anglais dans un autre fichier.
Et ensuite, dans le code, j'irais chercher les chaînes de caractères dans mapFr ou mapEn selon la langue choisie.
J'envisageais de faire ça, mais vraiment en dernier recours. Ce qui me gêne, c'est qu'un développeur qui veut ajouter un nouveau message dans le code doit l'ajouter "manuellement" (en ajoutant une ligne mapFr[151] = "blabla151_fr" ). Je trouve ça un peu plus élégant d'ajouter une ligne #define MSG00150 "blabla150" dans un .h.
Mais bon, si c'est le seul moyen...
gilou a écrit :
Citation :
Solution 2 : avoir des fichiers .txt à part de l'exécutable : un fichier contenant tous les messages en français, et un fichier contenant tous les messages en anglais, les charger dans un tableau (map) au début de l'exécution et piocher dans l'un ou l'autre selon la langue choisie. Problème : ça oblige à avoir des fichiers texte qui se baladent en dehors de l'exe. Ce n'est pas super propre.
|
Avantage, si un client de Lituanie ou du Boukistan achète ton produit, il peut localiser lui même ton soft pour ses besoins, c'est particulièrement pratique.
Tu peux très bien avoir une table de chaines câblée en dur dans l'exe, et des ressources externes qui prennent le pas si elles sont présentes.
A+,
|
Tout à fait (pour la Lituanie).
Cela dit, il y a un autre inconvénient pour moi : plusieurs exécutables vont utiliser ce système et piocher dans le même fichier de messages. Donc si jamais (et ça arrive) je dois livrer une nouvelle version d'un seul exécutable, il se peut que ce nouvel exe utilise une version plus à jour de mes fichiers de langue .txt.
Du coup, je suis obligé de livrer également les nouvelles versions des fichiers .txt. C'est un peu pénible mais gérable.
Et surtout : les différentes versions des fichiers .txt ne seront pas forcément compatibles entre elles. Si j'enlève ou je rajoute un "%d" dans un message, tout d'un coup un ancien exécutable va planter avec la nouvelle version des fichier .txt.
En plus, je n'aime pas trop l'idée qu'un utilisateur puisse aller voir tous les messages du programme ^^'
Je pensais aussi à une autre solution mais c'est tordu et je ne sais pas si c'est possible techniquement.
En gros, dans un fichier .h, j'aurais une suite de ligne :
Code :
- #define MSG00001 = "blabla1_fr";
- #define MSG00002 = "blablabla2_fr";
- ...
- #define MSG00150 = "blabl150_fr";
|
Est-ce que ce serait possible de faire une boucle sur ces define pour remplir une map dans mon code ? Si c'est possible, alors ça me permettra de remplir une "mapFr" dont je parlais plus haut, et aussi de la même façon une "mapEn", et ce serait (en tout cas de mon point de vue) assez propre avec des fichier de define bien séparés du reste du code.
Message édité par Mozz_ le 23-11-2011 à 10:08:51