WxWidgets Unicode comment mettre les accents ?

Resalut,

Maintenant que tu utilises WxWidgets en unicode, je voudrais savoir comment on fait pour mettre les accents.
Je m’explique : j’ai beau avoir tous mes fichiers sources en UTF-8, et wxUSE_UNICODE=1, les accents ne s’affichent pas correctement et même exactement comme si on était en ISO-8879-1 (ASCII).

Et bien, je ne fais rien de plus que de laisser mes sources en ISO-8879-1 (ASCII). Ça compile sans soucis, à part si j’utilise la macro wxT() avec une chaine avec des accents, mais les seules fois où je les avais dans mon code c’était une erreur.

Tu pourrais donc essayer de passer les fichiers sous cette encodage, mais c’est pas recommandé. La documentation de wxWidgets dit que ça ne marche pas si l’encodage du système n’est pas ISO-8879-1 ( ASCII ) .
Donc à mon avis il faut mieux rester en UTF-8 mais coder les accents directement avec leur “code unicode”. La documentation de wxWidgets donne ceci par exemple :

wxMessageBox(L"Salut \u00E0 toi!"); // U+00E0 is "Latin Small Letter a with Grave"

Le L indique une chaine de caractère unicode. Je sais pas comment ça se passe pour l’utilisation de la macro _(), sans doute qu’il faut alors procéder ainsi :

wxMessageBox(_(L"Salut \u00E0 toi!")); // U+00E0 is "Latin Small Letter a with Grave"

Normalement, on avec ça une chaine de caractère traduisible et qui affiche les accents correctements.

Merci, mais comment je fais avec WxSmith ?

Déjà, j’ai testé en mettant un fichier en UTF8, _(L"Salut \u00E0 toi!") affiche correctement le à, et idem si je met _(L"Salut à toi!").

Cependant, c’est étrange, car j’ai trouvé ça au détour d’une page :

Donc à priori _(Salut à toi!") devrait faire l’affaire, la macro se chargeant de rajouter elle même le L pour indiquer que la chaine est en unicode, mais ce n’est pas le cas…

J’ai posé la question directement sur le forum de wxWidgets car ça me parait pas normal toute cette histoire : forums.wxwidgets.org/viewtopic.php?f=1&t=35642

J’ai réussi avec une petit bidouillage :

#undef _ #define _(s) wxGetTranslation((L##s))
Cela permet à _(“blabla”) de se mettre en Unicode (ça ajoute un L)
Il faut placer ces 2 lignes après tous les includes des ******Editor.cpp .

Oui, au pire on peut faire ça pour le moment, mais j’aime pas trop utiliser ce genre de hack. ( Enfin, il y a rien de dangereux dans celui là, c’est juste par acquis de conscience )
J’ai aussi posé la question sur la mailing list wx-users : groups.google.com/forum/?fromgr … DgnKG_iMJE[1-25]

Bon, a priori, après quelques questions sur la mailing list précédente ( groups.google.com/forum/?fromgr … DgnKG_iMJE[1-25] ), il semblerait que le plus simple et portable serait d’écrire toutes les chaines en anglais, puis de traduire en français.

[…]

Oui, plutôt mourir que d’utiliser ça donc :smiley:

Oui, donc ce que fait gettext, autant rester avec :slight_smile:

Tout ça me parait bien compliqué.

Mais de toute façon tu arrives un peu en retard, la solution est déjà en place depuis : J’ai écrit un programme qui a inversé les chaines de traduction entre l’anglais et le français.
Donc maintenant, GD est intégralement écrit en anglais et un fichier de traduction est disponible pour la langue française. :slight_smile:

En pratique, l’utilisateur n’y verra que du feu. De plus, je conserve tous les avantages de gettext, à savoir un système éprouvé et simples à utiliser pour les traducteurs ( Pour traduire dans une nouvelle langue : Créer un nouveau répertoire avec le code de la langue, copier GD.po dedans, traduire avec poEdit. ), cross platform, et qui n’engendrera plus de soucis de traductions erronées dues à des caractères accentués dans le code.

Attention, dis comme ça, ça fait genre l’unique soucis pour compiler GD sous un autre système est la gestion des traductions, alors qu’au final ça a pas grand chose à voir : Ce qui importe est la possibilité d’utiliser SFML+LLVM+wxWidgets sur le système en question. Le reste devient alors du détail.

[…]