[C++] programmation multilangues - variables externe

programmation multilangues - variables externe [C++] - C++ - Programmation

Marsh Posté le 26-04-2006 à 15:40:07    

Bonjour a tous,
 
J'essaye de realiser un programme multilangue a la compilation. Pour ce faire je definis mes variables dans un fichiers que je choisi a la compilation en fonction d'une macro predifinie. Les messages multilangues sont uniquement des messages d'erreurs. Ils sont donc inclus dans un unique fichier, qui est lui inclut dans de nombreux autres.
Mon message d'erreur est le suivant :

Code :
  1. obj/chainmail.o(.data+0x0):chainmail.cc: multiple definition of `valueNegativeMsg'
  2. obj/main.o(.data+0x0):main.cc: first defined here
  3. obj/chainmail.o(.data+0x4):chainmail.cc: multiple definition of `valueTooSmallMsg'
  4. obj/main.o(.data+0x4):main.cc: first defined here
  5. obj/chainmail.o(.data+0x8):chainmail.cc: multiple definition of `valueTooBigMsg'
  6. obj/main.o(.data+0x8):main.cc: first defined here
  7. obj/pr2d.o(.data+0x0):pr2d.cc: multiple definition of `valueNegativeMsg'
  8. obj/main.o(.data+0x0):main.cc: first defined here
  9. obj/pr2d.o(.data+0x4):pr2d.cc: multiple definition of `valueTooSmallMsg'
  10. obj/main.o(.data+0x4):main.cc: first defined here
  11. obj/pr2d.o(.data+0x8):pr2d.cc: multiple definition of `valueTooBigMsg'
  12. obj/main.o(.data+0x8):main.cc: first defined here
  13. obj/pr2d-neighborarea.o(.data+0x0):pr2d-neighborarea.cc: multiple definition of `valueNegativeMsg'
  14. obj/main.o(.data+0x0):main.cc: first defined here
  15. obj/pr2d-neighborarea.o(.data+0x4):pr2d-neighborarea.cc: multiple definition of `valueTooSmallMsg'
  16. obj/main.o(.data+0x4):main.cc: first defined here
  17. obj/pr2d-neighborarea.o(.data+0x8):pr2d-neighborarea.cc: multiple definition of `valueTooBigMsg'
  18. obj/main.o(.data+0x8):main.cc: first defined here
  19. obj/shape.o(.data+0x0):shape.cc: multiple definition of `valueNegativeMsg'
  20. obj/main.o(.data+0x0):main.cc: first defined here
  21. obj/shape.o(.data+0x4):shape.cc: multiple definition of `valueTooSmallMsg'
  22. obj/main.o(.data+0x4):main.cc: first defined here
  23. obj/shape.o(.data+0x8):shape.cc: multiple definition of `valueTooBigMsg'
  24. obj/main.o(.data+0x8):main.cc: first defined here


 
Le contenu de mes fichiers sont :
 
msg.en.h

Code :
  1. const char *valueNegativeMsg = "value is negative, that why this exception has been throw.";
  2. const char *valueTooSmallMsg = "value is smaller than limit, therefore modification can not be apply.";
  3. const char *valueTooBigMsg = "value is bigger than limit, therefore modification can not be apply.";


 
msg.fr.h

Code :
  1. const char *valueNegativeMsg = ("value est negatif, c'est pourquoi cette exception fut jetee." );
  2. const char *valueTooSmallMsg = ("value est plus petit que limit, donc la modification ne peut pas etre appliquee." );
  3. const char *valueTooBigMsg = ("value est plus grande que limit, donc la modification ne peut pas etre appliquee." );


 
msg.h

Code :
  1. #ifndef __MSG_H__
  2. #define __MSG_H__
  3. extern const char *valueNegativeMsg;
  4. extern const char *valueTooSmallMsg;
  5. extern const char *valueTooBigMsg;
  6. #if defined(__EN__)
  7. #include "en/msg.en.h"
  8. #elif defined(__FR__)
  9. #include "fr/msg.fr.h"
  10. #endif
  11. #endif // __MSG_H__


 
exceptions.h

Code :
  1. #ifndef __EXPCEPTIONS_H__
  2. #define __EXPCEPTIONS_H__
  3. #define __FR__
  4. #include <string>
  5. #include <stdexcept>
  6. #include "lang/msg.h"
  7. ...


 
Et comme je vous l'ai de nombreux fichiers (ceux qui sont la source de mes messages d'erreur) incluent exceptions.h
 
Comment puis je regler ce probleme ? L'utilisation du mot clef 'extern' est elle justifiee ?
Que puis je faire pour obtenir un programme multilangues (a la compilation ou al'execution) avec une autre solution ?
 
Merci de votre attention,
 
Thomas

Reply

Marsh Posté le 26-04-2006 à 15:40:07   

Reply

Marsh Posté le 26-04-2006 à 15:41:07    

quel environnement ?

Reply

Marsh Posté le 26-04-2006 à 16:02:55    

beurk ton truc, utilise gettext.
 
sinon des définitions de chaines doivent être dans un .cpp et pas dans un .h

Reply

Marsh Posté le 26-04-2006 à 20:03:48    

Pour conclure :
 
L'alternative est gettext.
 
Les deux solutions sont sur :
 
http://www.commentcamarche.net/for [...] s-externes
 
Bye bye,
Thomas

Reply

Marsh Posté le 26-04-2006 à 21:36:55    

pfff, sur ccm, ils n'ont rien compris à définition/déclaration

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed