Veröffentlicht 11. Juni 20187 j Hallo, ich möchte einen meldungstext übersetzen. Der code sieht bisher in etwa so aus: Quelltext | Drucken #define _(STRING) gettext(STRING) #define M sprintf(meldung #define EM );printf(_("%s")) main () { char meldung[100]; bindtextdomain(xxxxxx); textdomain(xxxx); M "Das ist ein Test" EM return 0; } #define _(STRING) gettext(STRING) #define M sprintf(Meldung, #define EM );printf(_("%s")) main () { char meldung[100]; bindtextdomain(xxxxxx); textdomain(xxxx); M "Das ist ein Test" EM return 0; } Dieser code kann ohne probleme kompiliert werden, erstelle ich jedoch eine pot oder po datei steht in dieser nur "%s" und nicht der Text. Schreibe ich das Makro EM mit printf(_("%s", meldung)) kann das Programm nicht mehr kompiliert werden. Hat jemand einen Tipp für mich? Viele Grüße, Sanastasia
12. Juni 20187 j Lösung Klar, printf(_("%s")) expandiert dann ja zu printf(gettext("%s")) und gettext wird dementsprechend vor printf aufgerufen. vor 17 Stunden schrieb Gast Sanastasia: Schreibe ich das Makro EM mit printf(_("%s", meldung)) kann das Programm nicht mehr kompiliert werden. Das liegt an der Klammerung, mit printf(_("s"),meldung) würde es gehen, wenn auch wieder so wie oben. Grundsätzlich solltest du das gettext-Makro möglichst da aufrufen wo auch der zu übersetzende Text steht. vor 17 Stunden schrieb Gast Sanastasia: #define M sprintf(Meldung, #define EM );printf(_("%s")) Solche Konstruktionen mit halboffenen Klammern und Semikolon im rechten Teil des Makros solltest du unbedingt vermeiden.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.