Il y a une exception à cette théorie, c'est quand l'ordre des arguments insérés varie d'une langue à l'autre (ex: "Une voiture bleue" vs. "A blue car"). C'est pourquoi la version GNU de printf() supporte des spécificateurs d'emplacement dans les formats.
La GROSSE faille de sécurité que ça ajoute, c'est que ça supporte aussi ces spécificateurs pour %n. Avec ça, les attaques par chaînes de format deviennent beaucoup plus faciles, pour la plus grande joie des pirates.
D'un autre côté, le risque est mitigé si écrire les traductions demande autant de privilèges que modifier le programme. Si tel est le cas, il n'y a pas d'élévation possible de ce côté-ci.
Mais quand même, j'aurais préféré une version de printf() qui prenne
deux chaînes de format: Une pour les données, une pour l'affichage.
//Exemple
printfx("%d%19s", ma_chaine_internationalisee, 42, mon_buffer);