Embûches
Voici quelques erreurs courantes que vous découvririez peut-être par vous-même. Mais il se peut que ce paragraphe vous aide à les éviter.
- XXVI.IV.I. Mêmes chaînes, sémantiques différentes
- XXVI.IV.II. Composition de chaînes
- XXVI.IV.III. Hypothèse concernant la taille d'affichage des chaînes
- XXVI.IV.IV. Mots inhabituels
- XXVI.IV.V. Utilisation de caractères non-ASCII dans les chaînes
XXVI.IV.I. Mêmes chaînes, sémantiques différentes
Quelquefois deux chaînes en anglais sont identiques, mais ont des significations différentes selon le contexte ; elles ne mériteraient donc probablement pas d'être traduites de la même façon. Comme les chaînes en anglais sont utilisées comme clés de recherche, cela pose problème.
Dans ce cas, vous pouvez ajouter des caractères supplémentaires à la chaîne. Par exemple, écrivez "jumps[noun]" et "jumps[verb]" au lieu de "jumps" uniquement et extrayez-les à nouveau avec un appel à gettext. Si vous ajoutez des caractères supplémentaires, vous devez également ajouter un commentaire pour les traducteurs avant l'appel de gettext. De tels commentaires s'affichent dans les fichiers .po. Par exemple :
// note to translators: don't translate the "[noun]" part - it is // just here to distinguish the string from another "jumps" string text = strip(gettext("jumps[noun]"), "[noun]");
XXVI.IV.II. Composition de chaînes
Les programmeurs C se servent de la fonction sprintf() pour composer et concaténer des chaînes. Le C++ favorise les flux, mais malheureusement, cette approche rend la traduction difficile, parce que chaque fragment de texte est traduit séparément sans permettre aux traducteurs de les ré-agencer selon la grammaire de la langue.
Par exemple, ce code risque d'être sujet à problèmes :
std::cout << _("Current amount: ") << amount << _(" Future: ") << future << std::endl; label.set_text(_("Really delete ") + filename + _(" now?"));
Vous devez, soit éviter de tels cas, soit revenir à la fonction sprintf() du style C. Une autre solution possible est d'utiliser la bibliothèque compose qui prend en charge des syntaxes telles que :
label.set_text(compose(_("Really delete %1 now?"), filename));
XXVI.IV.III. Hypothèse concernant la taille d'affichage des chaînes
Vous ne savez jamais quel sera l'espace pris à l'écran par une chaîne après traduction. Il est tout à fait possible qu'elle soit deux fois plus longue que la chaîne originelle en anglais. Par chance, la plupart des éléments graphiques gtkmm se redimensionnent à la taille voulue lors de l'exécution.
XXVI.IV.IV. Mots inhabituels
Vous devez éviter les abréviations mystérieuses, l'argot ou du jargon de spécialiste. Ces termes sont généralement difficiles à traduire et souvent même à comprendre pour les autochtones. Par exemple, préférez « application » à « app ».
XXVI.IV.V. Utilisation de caractères non-ASCII dans les chaînes
Actuellement, gettext ne prend pas en charge les caractères non-ASCII (c'est-à-dire tout caractère de code supérieur à 127) dans le code source. Par exemple, vous ne pouvez pas utiliser le signe de copyright (©).
Pour contourner ce problème, vous pouvez écrire un commentaire dans le code source juste avant la chaîne, indiquant au traducteur qu'il peut utiliser le caractère spécial s'il est disponible dans leur langue. Pour l'anglais, vous pouvez ensuite faire une traduction américain-anglais dans en_US.po en utilisant ce caractère spécial.