std::cout<<"The captain is "<<age<<" old.\n";std::cout<<std::format("The captain is %d old.\n")%age;
Traditionnellement, pour traduire une phrase on utilise la fonction (ou la macro) _ :
Une version internationalisée (où je considère qu'il existe un overload pour la fonction _(std::stringstream ss) ) :
std::cout<<_("The captain is ")<<age<<_(" old.\n");std::cout<<_(std::stringstream("The captain is ")<<age<<" old.\n");std::cout<<std::format(_("The captain is %d old.\n"))%age;std::cout<<std::format(_("The captain is %1$d old.\n"))%age;
Dans le premier cas, il faudra traduire deux chaînes, qui ne sont pas des phrases complètes. Ici le problème n'est pas très grave, car l'ordre des séquences sera le même en français ou en allemand qu'il l'est en anglais. Mais la traduction risque tout de même de ne pas être correcte ("Le capitaine est ", " vieux.")
Dans le second cas, il y aura autant de chaîne à traduire qu'il y a d'âges possibles. Sans compter que je ne suis pas convaincu gettext supporte l'évaluation d'expressions lors de la création du catalogue de traduction.
Enfin, dans le troisième cas, avec la chaîne de format, il n'y a qu'une chaîne à traduire. Le quatrième permet ici est inutile, mais s'il y a plus d'un arguments à la chaîne (genre le nom du capitaine), il est possible de préciser la position de l'argument, et on pourra donc déplacer l'ordre relatif des placeholders dans la chaîne.
Note qu'en Python, on peut nommer ces arguments et utiliser un dictionnaire pour l'alimenter, ce que certains considéreront plus lisibles, là où d'autres se plaindront de la verbosité.
args={'age':age}print_("The captain is %age old.\n")%args
[^] # Re: Brace yourselves, bullshit is coming.
Posté par LupusMic (site web personnel, Mastodon) . En réponse à la dépêche Concours "Evenja Café", un nouveau paradigme de programmation. Évalué à 6.
Une version non internationalisée :
Traditionnellement, pour traduire une phrase on utilise la fonction (ou la macro) _ :
Une version internationalisée (où je considère qu'il existe un overload pour la fonction _(std::stringstream ss) ) :
Dans le premier cas, il faudra traduire deux chaînes, qui ne sont pas des phrases complètes. Ici le problème n'est pas très grave, car l'ordre des séquences sera le même en français ou en allemand qu'il l'est en anglais. Mais la traduction risque tout de même de ne pas être correcte ("Le capitaine est ", " vieux.")
Dans le second cas, il y aura autant de chaîne à traduire qu'il y a d'âges possibles. Sans compter que je ne suis pas convaincu gettext supporte l'évaluation d'expressions lors de la création du catalogue de traduction.
Enfin, dans le troisième cas, avec la chaîne de format, il n'y a qu'une chaîne à traduire. Le quatrième permet ici est inutile, mais s'il y a plus d'un arguments à la chaîne (genre le nom du capitaine), il est possible de préciser la position de l'argument, et on pourra donc déplacer l'ordre relatif des placeholders dans la chaîne.
Note qu'en Python, on peut nommer ces arguments et utiliser un dictionnaire pour l'alimenter, ce que certains considéreront plus lisibles, là où d'autres se plaindront de la verbosité.