IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Problème de texte UNICODE


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 31
    Points : 35
    Points
    35
    Par défaut Problème de texte UNICODE
    Bonjour,
    J'ai donc une appli. unicode, contenant des textes en chinois et en russe.
    Ils sont sous la forme _T("Texte chinois ou russe").

    Pour pouvoir compiler (et afficher ces textes), la langue de windows doit être en chinois (pour les textes en chinois) ou en russe (pour les texte en russe).

    Mon problème est que je j'arrive pas à compiler mon appli lorsque mon windows est en chinois. J'ai des erreurs sur mes textes en russe car les guillemets de la chaine de caractères sont bouffés. ex : _T("ØÒÐÈÕ ÊÎÄ?) le guillemet semble remplacé par un ?, sur certain texte.

    Lorsque je commute mon window en russe, je n'ai aucun problème, ni avec les textes chinois ni avec les russes (les ? redeviennent des ").

    La solution serait d'avoir une directive de compilation pour le chinois et pour le russe. Le russe exclurait les texte chinois et réciproquement. Mais j'aimerais éviter ceci. Il y' a-t-il une solution autre ?

    Merci d'avance à tout ceux qui m'auront lu....

  2. #2
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 474
    Points
    11 474
    Billets dans le blog
    11
    Par défaut
    Une question con, tes fichiers sources sont-ils bien en unicode ? (Normalement oui, mais sait-on jamais).
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    La première question que je voudrais te poser, c'est "es-tu sur que ton fichier est bien sauvegardé en UTF, avec en-tête BOM et tout ce qu'il faut

    La deuxième question que je voudrais te poser, c'est : si ton application doit parler chinois et russe en fonction de la langue, pourquoi ne pas t'orienter vers une solution qui consisterait à fournir les fichiers de langues séparément (à base de gettext ou de boost::translate ou autre)

    De cette manière, tout ton code pourrait n'utiliser qu'une seule langue (l'anglais ) et chaque langue serait prise en charge par un fichier séparé.

    Ainsi, tu éviterais les risques de conversion de caractères "foireuse"
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 31
    Points : 35
    Points
    35
    Par défaut
    Oui, bien sur.
    Le russe s'affiche parfaitement dans un éditeur et un windows en russe
    Idem pour le chinois.

    L'idée était de ne diffuser qu'une seule version de l'application, le code embarquant tous les messages.

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par Alro_gr Voir le message
    Oui, bien sur.
    Le russe s'affiche parfaitement dans un éditeur et un windows en russe
    Idem pour le chinois.
    Encore heureux

    Ceci dit, je crois avoir lu il n'y a pas si longtemps que cela un article qui traitait du problème...

    Si mes souvenirs sont bons, il indiquait que la plupart des code pages respectaient les 127 premiers caractères ASCII, mais que, justement, le chinois y introduisait une ou deux différence(s).

    Je ne pourrais pas jurer qu'il ne s'agisse, justement, pas des guillemets

    Je n'ai, bien évidemment, plus l'url sous la main, car c'était durant une séance de suivi de différents liens

    Mais, si je ne me trompe pas, je crois vraiment que la solution "idéale" est de passer par un système de traduction "externe" (comprends : grâce auquel les différentes chaines de caractères sont gérées dans des fichiers distincts).

    Je viens, justement, de répondre à ==>cette question<== qui, à défaut de résoudre le problème (qui risque d'ailleurs d'être insoluble ) , pourrait au moins te donner donner des pistes intéressantes
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 31
    Points : 35
    Points
    35
    Par défaut
    Merci pour ta réponse.
    Mais je ne peux pas utiliser des fichiers externes.
    Ton idée est bien que l'appli vienne piocher dedans les message, lors de l' exécution ?
    Mon appli. va tourner sur une carte SD (donc assez lent) et je veux pas charger tous les messages au démarrage, pour des problèmes d'allocation mémoire.
    L'appli est une appli CE 5.......

    Une précision sur les messages, certains conservent le " et certains le perdent (celui de fin).

  7. #7
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par Alro_gr Voir le message
    Merci pour ta réponse.
    Mais je ne peux pas utiliser des fichiers externes.
    Ton idée est bien que l'appli vienne piocher dedans les message, lors de l' exécution ?
    A peu près, oui
    Mon appli. va tourner sur une carte SD (donc assez lent)
    cd n'est normalement pas cela qui ralentira ton application
    et je veux pas charger tous les messages au démarrage, pour des problèmes d'allocation mémoire.
    Attends, on ne parle pas de toute l'application, là, on parle juste des chaines de caractères qui devront être affichées.

    Si cela te pose des problèmes de mémoire, c'est qu'il y en a déjà "par ailleurs" et qu'il serait très utile d'y remédier .

    Et, surtout, entre le fait d'avoir le texte en chinois et en russe dans ton code et celui de les avoir dans des fichiers séparés, tu n'utiliseras de toutes manière pas d'avantage de mémoire
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Ton idée est bien que l'appli vienne piocher dedans les message, lors de l' exécution ?
    Mon appli. va tourner sur une carte SD (donc assez lent) et je veux pas charger tous les messages au démarrage, pour des problèmes d'allocation mémoire.
    L'appli est une appli CE 5.......
    Si tu les mets dans l’exécutable, ils seront forcément chargés en mémoire.

    Si tu les mets dans un fichier à part (avec gettext, par exemple), ils seront chargés à la demande.

    ==> si tu mets plusieurs langues dans l’exécutable, au final tu augmentes ton occupation mémoire.

    gettext est quand même pas mal optimisé. C’est un à priori de ne pas l’utiliser (auquel cas, utilise gettext et simplifie-toi la vie), ou c’est le résultats de tests qui ont montré que ça posait un réel problème ?

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 31
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Si cela te pose des problèmes de mémoire, c'est qu'il y en a déjà "par ailleurs" et qu'il serait très utile d'y remédier .

    Et, surtout, entre le fait d'avoir le texte en chinois et en russe dans ton code et celui de les avoir dans des fichiers séparés, tu n'utiliseras de toutes manière pas d'avantage de mémoire
    La différence c'est que les messages seront dans la zone "code". Et j'ai beaucoup de messages.
    Les fichiers externes me poseront aussi des problèmes lors des mises à jour par la suite (j'en ai déjà fait l'expérience). Je ne veux pas lier un exécutable a un fichier externe contenant des textes, sachant que j'aurais surement des mises à jour à faire, un peu partout dans le monde, et assez fréquemment.

    Je crois que malheureusement, je vais devoir me tourner vers les deux versions : une pour le russe, et l'autre pour le reste du monde.

  10. #10
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Je ne comprends vraiment pas tes objections.

    Gettext est le système de base sur lequel est basée l’internationalisation de linux, qui fonctionne aussi bien sur pc qu'en embarqué.

    Et l'on est malgré tout loin des problèmes rencontrés avec des applications manipulant plusieurs fichiers, dans le sens où, si une chaine n'est pas traduite, ce n'est pas "catastrophique": le système retombe sur la chaine originale (celle qui se trouve dans le code).

    A mon sens, tu te feras beaucoup plus de mal à vouloir gérer en parallèle une version chinoise et une version russe qu'à utiliser un système d'internationalisation utilisé par des milliers de développeurs

    J'ai personnellement travaillé sur des applications qui étaient internationalisées, aussi bien avec Qt (et son QLinguist qui fait la même chose que gettext) qu'avec gettext, et je peux t'assurer, même si je ne connais pas la mécanique interne sur le bout des doigts (loin de là, d'ailleurs ) que c'est parfaitement au point
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 31
    Points : 35
    Points
    35
    Par défaut
    Merci pour la réponse, je me pencherais dessus.

    Mais de toute façon, il me faudra dans tous les cas faire deux compilations avec un environnement windows différents (en russe et chinois).

  12. #12
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Justement, non, pas si tu utilises les possibilités d'internationalisation!!!

    Tu écris ton code, tes messages en anglais (c'est le langage le plus souvent utilisé en tout cas pour les messages), tu compiles uniquement l'application avec les messages en anglais, puis tu traduits les messages en russe, en chinois, en papou si tu veux, mais tu n'as même plus à recompiler l'application: il "suffit" de définir la locale (au besoin via une option du programme) pour que la magie opère
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 31
    Points : 35
    Points
    35
    Par défaut
    Effectivement, c'est séduisant ....
    Je ferais le test sur ma prochaine version.
    Mais je pense avoir un souci quand même....je sais je suis compliqué...

    En fait, les textes en question qui m'embêtent sont les traductions de textes d'un appareil connecté sur mon système. Le soucis c'est qu'en fonction de la langue, l'ordre des textes est différents. Par exemple, le troisième texte de ma table en chinois ne sera pas forcément le troisième de ma table en russe. C'est l'appareil lui-même qui me donne l'index.

    On se traine de sacré boulet ....

  14. #14
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Mais l'ordre dans lequel les messages sont affichés ne pose aucun problème : ce qui compte, c'est l'endroit du code où tu "crées" ta chaine pour qu'elle contienne les informations à afficher.

    Par exemple, tu pourrais créer une chaine proche de
    "You have ${1} black dogs and ${2} red cats"
    (les champs ${1} et ${2} correspondant au nombre de chiens et de chats envisagé )

    Gettext va retrouver cette chaine et te demander "comment voulez vous traduire cette chaine ?" et tu n'auras qu'à lui donner la traduction en utilisant ${1} quand il s'agira d'introduire le nombre de chiens noirs et ${2} quand il s'agira d'introduire le nombre de chats rouge, et basta.

    Après, que cette chaine de caractères soit utilisée en premier lieu, en troisième lieu ou au milieu d'une autre chaine, sur un bouton, dans un champs éditable ou pour un label ne changera pas grand chose : elle sera traduite
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. [Dreamweaver] problèmes de texte
    Par goma771 dans le forum Dreamweaver
    Réponses: 8
    Dernier message: 12/08/2005, 18h00
  2. [JLabel] Problème de texte tronqué
    Par mister3957 dans le forum Composants
    Réponses: 3
    Dernier message: 06/08/2005, 11h12
  3. [Debutant(e)] Problème fichier texte et vue
    Par solenn dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 21/07/2004, 09h23
  4. Problème de conversion unicode
    Par djmalo dans le forum C
    Réponses: 5
    Dernier message: 09/03/2004, 11h48
  5. problèmes de textes dynamique dynamiquement générés
    Par stephane eyskens dans le forum Flash
    Réponses: 18
    Dernier message: 05/09/2003, 13h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo