To a programmer they’re easy, to a localiser well you’ll see... For a great article on these issues see Text Fragmentation and Reuse in User Interfaces by Richard Ishida
English speakers assume that language order will not change. In many languages the order of sentences will be different from that of English. Many systems allow for variables to be reoordered. Please ensure that your variables can be reordered.
A fictitious translation of the above examples may appear like this:
msgid "%s returned %s after %s" msgstr "Returning %2s was %1s after %3s"
As you can see by allowing reordering the translator can convery the message in the structure of their language.
Check with the implementation of Gettext (or other localisation framework) on how to allow for reordering.
Don’t confuse translators, choose numbers or letters that cannot be confused with other letter or numbers. In OpenOffice.org there is a section that has a variables %O (% oh) which almost all translators translate as %0 (% zero) as that is the more logical option for them, they’re used to %1, %2, etc. If they do not have a font that makes it clear that this is a letter then they won’t see it and they break the translation.