Wie Texte zweisprachig verwalten?

Gast #105212
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.
Gast #105213
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
Gast #105214
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.
Gast #105215
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.
Gast #105217
> 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?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.