programm design: wie i18n einbauen?



  • hallo,

    das programm an dem ich gerade arbeite, besteht aus zwei prozessen. der eine prozess macht die grafische oberfläche, der andere enthält die business logic. der prozess mit der business logic muss dabei auch sprach-ausgaben machen (blabla fertig, eingabe-fehler etc). diese nachrichten sollen in möglichst vielen sprachen darstellbar sein.
    wie mache ich das jetzt?

    möglichkeit 1:
    der prozess mit der business logic übersetzt alle nachrichten und verwaltet selber die nachrichten als multibyte-chars. die nachrichten werden dann 1:1 von der gui übernommen.

    möglichkeit 2:
    der prozess schickt ascii-nachrichten an die gui, die sich um die übersetzung und die multibyte-chars kümmert.

    möglichkeit 3:
    der nachteil bei 2 ist, dass viele nachrichten zusammmengesetzt sind aus bezeichnern und den nachrichten. afaik müsste die gui das erst wieder trennen, bevor die nachricht übersetzt werden kann. deshalb würde ich nur die nummer der nachricht verschicken und die einzusetzenden werte. die gui schaut dann in einer tabelle nach und übersetzt es.

    möglichkeit 1 mag ich nicht wirklich, weil multibyte-chars in c/c++ nicht richtig funktionieren sollen(?). bei grafischen oberflächen ist das aber kein problem, weshalb ich 2) oder 3) bevorzuge.
    wie mache ich das am besten? wie habt ihr dieses problem gelöst?

    tia, walther



  • Ich würde einfach die Nachrichten in der "Business Logic" mit gettext oä. verwalten. Multibyte funktioniert natürlich wunderbar mit C und C++. Du musst aber beachten, dass die meisten Standardfunktionen erwarten, dass ein Zeichen = ein char/wchar_t ist. Aber da du die Strings vermutlich eh nicht manipulierst und nur weiter schickst, sollte das ohnehin egal sein.



  • das ist ja super, wenn das so einfach ist.
    ich wollte auch gettext verwenden, aber was macht gettext, wenn als locale utf-8 eingestellt ist? die funktion gibt ja nur einen char* zurück.

    mfg walther



  • walther schrieb:

    das ist ja super, wenn das so einfach ist.
    ich wollte auch gettext verwenden, aber was macht gettext, wenn als locale utf-8 eingestellt ist? die funktion gibt ja nur einen char* zurück.

    Dann ist halt ein Zeichen 1-4 char groß. Das Ausgabemedium muss die Zeichenkodierung die du einstellst halt verstehen 😉



  • walther schrieb:

    das ist ja super, wenn das so einfach ist.
    ich wollte auch gettext verwenden, aber was macht gettext, wenn als locale utf-8 eingestellt ist? die funktion gibt ja nur einen char* zurück.

    mfg walther

    Was soll da passieren? UTF-8 wurde doch extra dafür entwickelt, dass man Unicode über einen 8bit großen Kanal schleußt (char*).

    strlen(s) wird dir dann eben nicht die Anzahl der Zeichen liefern :).



  • na wenn das so ist, kann ich ja gleich loslegen. danke für die antworten.

    mfg walther


Log in to reply