PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ##substitution## bei gcc/qt/kde



microdigi
26-07-2002, 17:25
ersetz-strings sind eine feine sache wenn es sich hierbei um die mutation
eines basis-strings handelt.

bspw der ms-c-compiler:
ABCD_##
daraus kann werden:
ABCD_123
ABCD_ert
...
usw...

die 'ergaenzung' kann man mit einem macro erzeugen:
#define ERGAENZUNG(x) ABCD_##x

...ERGAENZUNG (123)
macht dann ABCD_123

die lattenzaeune sind also nur platzhalter.

-----------------------------------------------------
wie kann ich das unter gcc benutzen?
ich denke, DASS es funzen sollte,
aber die literatur dazu schweigt (wahrscheinlich).

gruss & danke vorab - digi



[B][I]

anda_skoa
26-07-2002, 18:25
Hmm, ich weiß nicht, ob ich verstehe um was es geht, aber das Beispiel hier kompiliert und läuft:



#include <stdio.h>

#define ERG(x) ABC_x

int main()
{
int ERG(abc) = 4;
printf("%d\n", ERG(abc));
return 0;
}


Allerdings frage ich mich, wozu man so etwas braucht.

Ciao,
_

microdigi
26-07-2002, 18:57
hatte die antwort 'abgeschossen'....:(

beispiel wofuer mans gebrauchen kann:

#define INPUT_TEXT_DE "eingabe deutsch"
#define INPUT_TEXT_EN "input english"
....

dann transportiert man den jeweiligen text in eine variable,
und diese variable wird dann zur anzeige genommen anstelle des festen textes

transport:
char INPUT_TEXT_M [laenge des laengsten textes];
memcpy... (INPUT_TEXT_M, und HIER wird jetzt die sprachversion erscheinen:
INPUT_TEXT_DE, laenge);

anstelle dessen kann man ein macro anlegen:
#define TRANSFER_LANGUAGE (##text, ##language) \
memcpy ... (##text_M, ##text_##language, ...laenge...)

und letztlich zum ausfuehren:
TRANSFER_LANGUAGE (INPUT_TEXT, DE);

ergibt in etwa :
memcpy ... (INPUT_TEXT_M, INPUT_TEXT_DE, (anstelle ##)
...laenge...)


dann braucht man nicht immer den gesamten koerper zu tippen.
bei reichlichem text und einigen sprachen bringt das ne menge

die ... sind nur fueller zu erklaerung hier, und sie tun nix zur sache also solche.

gruss - digi. allles klaro ? :)

anda_skoa
26-07-2002, 19:46
Ah, wieder was gelernt :)

Aber das mit Sprachen geht dank xgettext vieeel leichter :D

In KDE geht das zB so:



#include <klocale.h>
#inclued <kmessagebox.h>

QString errorMessage = i18n("Out of Beer Error!\nDevelopment halted");

KMessageBox:.error(0, errorMessage, i18n("Fatal Error"));


Das i18n() Macro markiert einerseits die eingeschlossen Zeichenkette als zu übersetztend, ersetzt zur Laufzeit den String mit der Version der gerade eingestellten Sprache, sofern für diese ein Sprachkatalog verfügbar ist.

Die App templates von kdesdk oder KDevelop generieren Makefile regeln, die mit Hilfe von xgettext diese Strings extrahieren und in ein File schreiben.
Das heißt dann meißt appname.pot
Wenn man nun eine deutsche Version machen möchte, kopiert man dieses File nach zB de.po und übsetzt darin die Strings.

Dann wird das ganze beim make Lauf in ein de.mo File umgewandelt und beim make install installiert.
Wenn in KDE die Sprache auf de steht, wird beim nächsten Start der Applikation automatisch der deutche Text angezeigt.

Das pot file zu obigen Beispiel würden in etwa so aussehen



#: beispiel.cpp:4
msgid "Out of Beer Error!\nDevelopment halted"
msgstr ""

#: beispiel.cpp:6
msgid "Fatal Error"
msgstr ""



Eine deutche Übersetzung im de.po file etwas so



#: beispiel.cpp:4
msgid "Out of Beer Error!\nDevelopment halted"
msgstr "Kein Bier mehr! Entwicklung gestoppt"

#: beispiel.cpp:6
msgid "Fatal Error"
msgstr "Schwerwiegender Fehler"


Bei Qt heißt die Standardünsertzungs Funktion/Macro tr()
Wie dort extrahiert wird, hab ich mir noch nie angeschaut, ich habe privat bisher nut KDE gemacht und beruflich haben wir nur englische GUI

Ciao,
_

microdigi
27-07-2002, 10:36
das mit der standard-uebersetzung habe ich schon verstanden.
vielen dank fuer die muehe, die du hattest !

die sache konnte ich ueber nacht loesen:
es geht so wie eigentlich gedacht;
denn die ## sind bestandteil des standards.

wer lesen kann (sollte ich mal oefter probieren),
ist eindeutig im vorteil.

also hier:
c-programmierung unter linux, helmut herold/joerg arndt,
suse press, isbn 3-035922-08-6
seiten 503 ff

ich bleibe sicherheitshalber bei meiner version;
denn ich kann nicht ausschliessen, dass es cross-compiliert wird.
und dann geht evtl die ganze sache wieder von vorn los...
weil irgendwelche libraries 'fehlen' oder die dateistruktur nicht stimmt,
-oder der mond gruen wird (das waere die m$ version, bei der ja jede
auch noch so unsinnige variante vorkommt :D).

gruss - digi

/neugier an
pswas lernt / macht man eigentlich bei telematik ?
/neugier aus

anda_skoa
27-07-2002, 11:39
Original geschrieben von microdigi
das mit der standard-uebersetzung habe ich schon verstanden.
vielen dank fuer die muehe, die du hattest !


keine Ursache :)
Ich dachte ich schreib es mal, für den Fall, dass du diese Möglichkeit noch nicht kennst.

Der #define Ansatz sah für mich ein bischen nach bösem Hack aus, für Plattformen ohen vernünftiges Internationalisierungsframework.
:rolleyes:



ich bleibe sicherheitshalber bei meiner version;
denn ich kann nicht ausschliessen, dass es cross-compiliert wird.
und dann geht evtl die ganze sache wieder von vorn los...


Wenn das Projekt Qt benutzt, kannst du immer den Asnatzt mit tr() benutzen.
Das geht garantiert auf allen Qt Plattformen, die Jungs bei Trolltech sind bei sowas ziemlich streng :)

Bei reinem C/C++ muß man natürlcih da was eigenes stricken, wenn man auf verschiedenen Plattformen kompilieren will.
Obwohl es möglich sein könnte, das xgettext sogar unter Windows läuft.



pswas lernt / macht man eigentlich bei telematik ?


Telematik, so wie es hier an der TU Graz verstanden wird, ist ein Kunstwort aus Telekommunikation und Informatik.
(Einer unserer Profs. sagt es ist ein Unwort, weil es aus einem Prefix und einem Suffix besteht, aner keinen Hauptteil hat :D)

Das Studium enthält Elemente eines klassischen Informatikstudiums und eines Elektrotechnikstudiums mit der Fachrichtung Nachrichtentechnik/Elektronik.

Die meisten Telematiker die ich persönlich kenne, hängen eher der Informatikseite an :)
Das ist dann ziemlich nahe an den üblichen Technische Informatik Studien.

Ciao,
_

microdigi
27-07-2002, 11:51
>Telematik, so wie es hier an der TU Graz verstanden wird, ist ein Kunstwort aus >Telekommunikation und Informatik.
>(Einer unserer Profs. sagt es ist ein Unwort, weil es aus einem Prefix und einem >Suffix besteht, aber keinen Hauptteil hat )

max nix:
antworte ihm, es habe dennoch 'hand und fuss'.
und das ist doch wichtiger.. oder.. :D :cool:

scheint mir fachlich eine gute verknuepfung zu sein.
so bin ich auch zum kinde gekommen vor 40...50 jahren.
soll ich dir mal mein cv schicken? da hast du was zum schmunzeln.

gruss - digi