Stringtable



  • Hallo

    Was ist der Sinn von Stringtables als Resourcen? Warum kann ich nicht direkt in den Quellcode schreiben?

    chrische



  • chrische5 schrieb:

    Hallo
    Was ist der Sinn von Stringtables als Resourcen? Warum kann ich nicht direkt in den Quellcode schreiben?
    chrische

    nachträglich austauschen um die ganze anwenung nach finnisch zu übersetzen. oder sogar gleich mehrere tables anbieten und es wird automagisch die genommen, die der user für sein windows eingestellt hat.



  • 1. finden
    bei einem projekt mit mehr als 100 h und die dazu gehoerigen 100 cpp files - finde da mal den string
    "A:"
    viel spass {o;
    so halt - rc suchen - string table auf und direkt editieren

    2. zusammen gesetzte sachen
    wenn strings im quelltext zusammengesetzt wurde - und dieser muss grundlegend geaendert werden ist es in der stringtabel leichter zu aendern - und vor allem sind tippfehler die das compile unmoeglichen machen koennen aussgeschlossen

    zb kommt in ein string ein " vor - in der string table kein problem, aber im quelltext, aender das mal {o;

    3. mehrfachverwendung
    zb der string "Zurück"
    im quelltext jedesmal schreiben geht schon, aber wenn man es nach "Rückwärts" aendern will, mach das mal bei den 100 files

    4. uebersetzungen
    ich zb arbeite in der software-localisierung, wir uebersetzen programme, das machen wir indem wir die rc datei uebersetzen {string table, menue, dialoge usw}
    mit einzelnen quelltexten wuerde das gar nicht funktionieren - wie soll der kunde sprache wechseln - ne andere exe starten ? dann muesste man das programm ja in jeder sprache ausliefern {bei unseren 26 sprachen {o;

    5. uebersicht
    -man sieht was uebersetzt werden muss bzw welche string man aendern kann ohne im code einzugreifen
    -man kann einzelne string tables an uebersetzer weiterreichen ohne das die den code bekommen muessen
    -man sieht wieviel uebersetzt werden muss



  • Hallo

    Erstmal danke für die Antworten. Wenn ich nun eine ComboBox mit einem String aus der Table bestücken will, muss ich dann immer des Umweg über einen neun String gehen, oder kann ich den String auch direkt reinschrieben?

    CString Temp;
    Temp.LoadString(IDS_String);
    ctlComboBox.AddString(Temp);
    

    Kann ich das auch kürzer machen?

    chrische



  • Du musst die Resource leider immer in ein CString Objekt laden bevor du es der Liste hinzufügst.



  • Ich würde, wenn ich komplett über Stringtables arbeiten würde, wohl erstmal für alle Controls eigene Klassen machen, wo man dem AddString dann z.B. einfach einen UINT geben kann.
    Und eine eigene CString Klasse, der man nen UINT zuweisen oder zuaddieren kann.

    Dann wärs wohl langsam wieder ein vernünftiges Arbeiten. 😉



  • Hallo

    Dann arbeite ich doch lieber mit Dateien und lade alle benötigten Strings zum Start in ein StringArray. Das würde zwar auch per Ressource gehe, aber so kann ich unabhängig von der exe die Strings ändern.

    chrische



  • Schreib dir doch eine Hilfsfunktion die dir einen CString zurückgibt.



  • Hallo

    55 schrieb:

    Schreib dir doch eine Hilfsfunktion die dir einen CString zurückgibt.

    Klar das geht, aber es scheint mir schwerfällig zu sein immer erst einn eigenen String zu erschaffen, um ihn dann in die Box zu packen.

    chrische



  • Der Ansatz von estartu ist doch gut. Hier könntest du wie schon erwähnt einfach die AddStringmethode überschreiben, dass man dieser ein UINT übergeben kann.
    Wenn du es mit Dateien machst, könntest du eventuell eine XML oder INI Datei nutzen, so mal als Vorschlag zwischenrein geschmissen.



  • Hallo

    Ich habe leider noch nie mit ini-Dateien gearbeitet, aber vielleicht schaue ich mir das mal an. Kennt jemand einen guten Link?

    chrische




Anmelden zum Antworten