Irgendwie steh ich im Moment ein wenig auf dem Schlauch. Wie kann man in C die auszugebenden Texte elegant zweisprachig verwalten? Bis jetzt gab es je ein deutsch- und ein englischsprachiges Gerät, verschiedene Versionen mit bedingter Compilierung. Wie so oft, ändert sich das nun, soll per Menüpunkt umschaltbar sein. Irgendwie habe ich keine Lust, jede Ausgabe mit einer if/else Abfrage zu versehen (das wäre das, was mir im Moment einfällt). Texte stehen im flash.
wie wäre es mit einer Tabelle mit 2 Spalten, tabelle[0,0] = deutscher Text tabelle[0,1] = englischer text tabelle[1,0] = ausgang tabelle[1,1} = exit prüf ob es geht, ist nur eine Idee Michael
Hallo, die einfachste Variante ist ein mehrdimensionales Array. Alle Texte werden Zeilenweise (oder entsprechend deiner Ausgabe) gesplittet, die zweite Dimension gibt dann die Sprache vor. Wenn Du für die verschieden Sprachen ein ENUM definierst kannst beliebig (Speicher beachten!!!) viele Sprachen verwalten.
Gängige Unix-localization-Projekte lösen das, indem sie alle Strings mit dem Macro _() versehen. Statt printf("Hello world!"); steht dann printf(_("Hello world!")); Der Macro evaluiert während der Entwicklungsarbeiten erstmal zu nichts, d. h. reicht seinen String durch. Später kann man sich ihn dann mit Werkzeugen (gettext) herausziehen und lokalisierte `message catalogs' daraus erstellen. Die Lokalisierung wird dann im fertigen Produkt durch einen Initialisierungsaufruf am Anfang von main() aktiviert, und der Makro erweitert in einen Bibliotheksaufruf (der bei Nichtvorhandensein einer lokalisierten Variante auch automatisch den Originalstring von sich gibt). Allerdings benötigt das Ganze natürlich einen Hash des Originalstrings, mit dem dann die Ersetzung gesucht wird.
@Jörg Heisst das, dass du in die avr-libc endlich gettext einbaust? :-) Und wo lege ich die .mo Files dann ab?
> Heisst das, dass du in die avr-libc endlich gettext einbaust? :-) Ich werde mich schwer hüten, gettext anzufassen -- so oft, wie sich der Krempel inkompatibel ändert. ;-) > Und wo lege ich die .mo Files dann ab? In einem Atmel dataflash?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.