Anzeige:
Ergebnis 1 bis 7 von 7

Thema: ##substitution## bei gcc/qt/kde

  1. #1
    Registrierter Benutzer Avatar von microdigi
    Registriert seit
    13.07.2002
    Ort
    Bad Soden-Salmuenster
    Beiträge
    104

    ##substitution## bei gcc/qt/kde

    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]
    Rentner66 (als Nebenberuf)
    'Fossil' der ersten IT-Stunde, weltweit manches 'ausgefressen'
    0173 1047 047
    Intel P4(686)-2,53 GHz, 1GB, 2x80 GB, 2xNW, Sound, CD-RW, DVD-DL-RW, ATI Radeon 9000,
    LINUX (SuSE-9.3-Prof -- KDEvelop-QT-Professional),
    after ten years m$ VS97: C++ & MFC > NO windows anymore! NEVER-EVER! :eek: ...
    e-commerce networker

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Hmm, ich weiß nicht, ob ich verstehe um was es geht, aber das Beispiel hier kompiliert und läuft:

    Code:
    #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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer Avatar von microdigi
    Registriert seit
    13.07.2002
    Ort
    Bad Soden-Salmuenster
    Beiträge
    104
    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 ?
    Geändert von microdigi (26-07-2002 um 20:35 Uhr)
    Rentner66 (als Nebenberuf)
    'Fossil' der ersten IT-Stunde, weltweit manches 'ausgefressen'
    0173 1047 047
    Intel P4(686)-2,53 GHz, 1GB, 2x80 GB, 2xNW, Sound, CD-RW, DVD-DL-RW, ATI Radeon 9000,
    LINUX (SuSE-9.3-Prof -- KDEvelop-QT-Professional),
    after ten years m$ VS97: C++ & MFC > NO windows anymore! NEVER-EVER! :eek: ...
    e-commerce networker

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Ah, wieder was gelernt

    Aber das mit Sprachen geht dank xgettext vieeel leichter

    In KDE geht das zB so:

    Code:
    #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

    Code:
    #: 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

    Code:
    #: 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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer Avatar von microdigi
    Registriert seit
    13.07.2002
    Ort
    Bad Soden-Salmuenster
    Beiträge
    104
    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 ).

    gruss - digi

    /neugier an
    pswas lernt / macht man eigentlich bei telematik ?
    /neugier aus
    Geändert von microdigi (27-07-2002 um 11:38 Uhr)
    Rentner66 (als Nebenberuf)
    'Fossil' der ersten IT-Stunde, weltweit manches 'ausgefressen'
    0173 1047 047
    Intel P4(686)-2,53 GHz, 1GB, 2x80 GB, 2xNW, Sound, CD-RW, DVD-DL-RW, ATI Radeon 9000,
    LINUX (SuSE-9.3-Prof -- KDEvelop-QT-Professional),
    after ten years m$ VS97: C++ & MFC > NO windows anymore! NEVER-EVER! :eek: ...
    e-commerce networker

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    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.



    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 )

    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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer Avatar von microdigi
    Registriert seit
    13.07.2002
    Ort
    Bad Soden-Salmuenster
    Beiträge
    104
    >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..

    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
    Rentner66 (als Nebenberuf)
    'Fossil' der ersten IT-Stunde, weltweit manches 'ausgefressen'
    0173 1047 047
    Intel P4(686)-2,53 GHz, 1GB, 2x80 GB, 2xNW, Sound, CD-RW, DVD-DL-RW, ATI Radeon 9000,
    LINUX (SuSE-9.3-Prof -- KDEvelop-QT-Professional),
    after ten years m$ VS97: C++ & MFC > NO windows anymore! NEVER-EVER! :eek: ...
    e-commerce networker

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •