tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
1431
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Beginnerin Beginnerin ist offline Mitglied Bronze
    Registriert seit
    Sep 2005
    Beiträge
    37
    Hallo,

    ich muss mein Programm mehrsprachig machen.
    Ich verwende VC++6.0 und hab über den Assistenten eine dialogbasierte MFC Anwendung erstellt.
    Ich weiß bereits, dass es String Tables gibt und dass man die irgendwie laden können muss.
    Wenn ich allerdings im Ressourcen- Editor nachsehe, finde ich derzeit nur zur "About"-Dialogbox einen Eintrag.
    Kann ich denn eine solche String-Tabelle generieren lassen?
    Oder muss ich jetzt für jede ID den deutschen Titel per Hand einfügen? Dass ich die zweite Tabelle dann manuell machen muss ist klar, aber die deutsche müsste auch so zu erzeugen sein, oder?

    Wie generiere ich also die deutsche String Table?

    Vielen Dank bereits für die Antwort!!
     

  2. #2
    Avatar von Dennis Wronka
    Dennis Wronka Dennis Wronka ist offline Soulcollector
    Registriert seit
    Apr 2002
    Ort
    Hong Kong
    Beiträge
    12.296
    Blog-Einträge
    231
    Ich weiss jetzt nicht ob es gettext auch fuer Windows gibt, aber das ist auf jeden Fall eine einfache Moeglichkeit Programme multilingual zu gestalten.
     
    PHP Class Collection - PHP-Klassen fuer PHP 5 (und Teilweise auch fuer PHP 4)
    Updates: Catcher 1.1, FTPConnection 1.2, MultiSQL 1.1, RSS2 1.1, SMTPConnection 1.4
    __________________
    EasyLFS - Hintergrundinformationen, Installationsanleitung, Softwareliste und Download
    EasyLFS Projektthread - Informationen, Status und Diskussion zu meiner Linux-Distribution
    __________________
    Ich bin die Schildkroete, mein Sohn. Ich habe das Universum erschaffen, aber bitte mach mir daraus keinen Vorwurf; ich hatte Bauchschmerzen.
    __________________
    Zitat Zitat von Friedrich Nietzsche
    Man muss noch Chaos in sich haben, um einen tanzenden Stern gebaeren zu koennen.

  3. #3
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Bei der Realisierung von Mehrsprachigkeit basierend auf den Ressourcen läuft es darauf hinaus, die Ressource-Datei (.rc) in mehrenen Sprachversionen vorzuhalten. Das beinhaltet nicht nur die Stringtabelle sondern auch alle anderen Komponenten, wie z.B. Menüs oder Dialogtemplates.
    Die Stringtabelle sollte dazu verwendet werden, um alle Texte die irgendwie im Quelltext auftauchen (z.B. bei MessageBoxen), dort zu hinterlegen, z.B.
    Code :
    1
    2
    
    [b]ID[/b]                  [b]Wert[/b]    [b]Titel[/b]      
    IDS_PROGRAMQUIT     33333   Wollen Sie das Programm wirklich beenden?
    und die dann so verwendet werden können:
    Code :
    1
    2
    3
    4
    5
    6
    
    CString strText;
    strText.LoadString(IDS_PROGRAMMQUIT); // strText kann jetzt für Ausgaben verwendet werden
     
    // oder
     
    AfxMessageBox(IDS_PROGRAMMQUIT);
    Die Stringtabelle musst du selber pflegen, also alle benötigten Texte dort per Hand einfügen.

    Um die Mehrsprachigkeit dann technisch zu realisieren, kannst du entweder verschiedene .rc-Dateien vorhalten, die dann je nach gewünschter Sprache immer im Projekt ausgetauscht werden oder die Resourcen werden in externe DLLs ausgelagert (macht etwas mehr Arbeit).

    Zum Thema "mehrsprachige Resourcen" solltest du dir mal diesen Link anschauen: www.codeproject.com/tools/localizerc.asp

    Es gibt natürlich auch noch Lösungen, um die Mehrsprachigkeit ohne Ressourcen zu realisieren, etwa über spezielle Sprachdateien bzw. -datenbanken. Allerdings beeinflusst sowas dann ziemlich stark die konzeptionelle Planung der jeweiligen Projekte und sollte damit eigentlich schon vor Projektbeginn festgelegt werden.
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  4. #4
    Beginnerin Beginnerin ist offline Mitglied Bronze
    Registriert seit
    Sep 2005
    Beiträge
    37
    Hallo MCoder,

    es geht um zu viele Strings, so dass ich sie nicht alles durch LoadString laden kann.
    Zusätzlich soll mein Programm eben zwei Checkboxen anbieten und je nachdem welche gewählt wurde ständig die Sprache wechseln können.

    Wie lagere ich die Resourcen in DLLs aus? Ich hab mir den Link schon angesehen - komm aber damit nicht zurecht Ich verwende doch VC++ 6.0 und die Angaben sind nicht für die Version. Und leider auch nicht so einfach übertragbar

    Ich bin echt am verzweifeln - so schwer kann doch das nicht sein?!

    Danke nochmal!
     

  5. #5
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Zitat Zitat von Beginnerin
    es geht um zu viele Strings, so dass ich sie nicht alles durch LoadString laden kann.
    Sofern die Strings alle im Quelltext stehen, kommst du nicht drum herum, sie dort herauszuziehen, in der Stringtabelle abzulegen und dann durch die entsprechenden Aufrufe via LoadString o.ä. zu ersetzen.

    Für das Auslagern von Resourcen in eine DLL gibt's eine Anleitung in der MSDN.
    Soweit ich mich errinnere, klappt damit allerdings nicht das dynamische Umschalten zur Laufzeit, d.h. es ist eine Neustart des Programmes nötig.
    Der Link, den ich dir vorher gepostet hatte, enthält ein meiner Meinung nach recht brauchbares Tool zum Übersetzen der Resourcen.

    Zitat Zitat von Beginnerin
    so schwer kann doch das nicht sein
    Ganz trivial ist es leider auch nicht. Es ist vor allem dann mühsehlig, wenn es nachträglich ergänzt wird, d.h. in der ursprünglichen Konzeption noch nicht berücksichtigt wurde.
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  6. #6
    Beginnerin Beginnerin ist offline Mitglied Bronze
    Registriert seit
    Sep 2005
    Beiträge
    37
    Hallo MCoder,

    das mit den DLL's hab ich nicht hinbekommen
    Aber ich hab auch immer wieder gelesen, dass die nur bei Programmstart, nicht bei Laufzeit eingebunden werden können. Somit waren sie für mich sowieso nicht das richtige.

    Ich habe jetzt eine ini- Datei angelegt. In dieser steht die ID des Steuerelementes, und darunter mit Länderkürzel die beiden Übersetzungen.
    Auf fast jede Maske habe ich zwei Radiobuttons zum umschalten eingebaut. Wird dort umgeschaltet, lade ich einfach die neue Bezeichnung mit SetDlgItemText neu.

    Jede der Masken hat nun eine Variable, die die aktuelle Sprache speichert. Beim Wechseln zwischen Dialogen übergebe ich diese dann.

    Die Lösung ist etwas "billig", weil ich ja ab jettz ständig die ini mitzupflegen habe und die auch mit verteilen muss. Außerdem es war gut-viel Kopierarbeit
    Aber es funktioniert

    Vielen Dank nochmal für deine Hilfe!
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 20.02.09, 08:30
  2. BufferedReader durch string ersetzen
    Von sim26 im Forum Java
    Antworten: 3
    Letzter Beitrag: 12.03.07, 13:58
  3. HEIGHT - tables mit flexiblen höhen durch prozent
    Von blableblu im Forum HTML & XHTML
    Antworten: 4
    Letzter Beitrag: 09.05.06, 12:18
  4. String Tables in Visual Studio .net (C++)
    Von DanceDevil im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 14.07.04, 12:46
  5. String durch Code ersetzen
    Von tomi im Forum PHP
    Antworten: 2
    Letzter Beitrag: 01.06.04, 15:53