Ich denke die erste Frage, die du dir stellen solltest ist: Welche
Zeichensätze sind unbedingt notwendig? Komme ich prinzipiell mit ASCII
durch oder muss ich auf Unicode gehen.
Wenn ASCII ausreicht (ev. mit ein paar Sonderzeichen für den
osteuropäischen Raum, Stichwort 'Hatschek') dann vereinfacht sich
einiges.
Da du sowieso schon, wie du sagst, in Speichernöte kommst, würde ich an
deiner Stelle da keinen großen Aufwand treiben. Ev. noch ein System, mit
dem man Argumente bei einem sprintf in der Reihenfolge umdrehen kann,
und ansonsten genau den #ifdef Ansatz, den du schon in Erwägung gezogen
hast. Keine Strings konkatenieren. Gut überlegen, welche Strings
tatsächlich zusammengezogen werden können (Es kann sein, dass man zb im
Deutschen an 2 Stellen denselben Begrif benutzt, die aber im Englischen
verschieden übersetzen würde). Lieber konservativ arbeiten, als dass die
Einheimischen über einen lachen :-)