ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
1431
1431
EMPFEHLEN
-
24.10.05 16:36 #1
- 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!!
-
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 von Friedrich Nietzsche
-
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.und die dann so verwendet werden können:Code :1 2
[b]ID[/b] [b]Wert[/b] [b]Titel[/b] IDS_PROGRAMQUIT 33333 Wollen Sie das Programm wirklich beenden?
Die Stringtabelle musst du selber pflegen, also alle benötigten Texte dort per Hand einfügen.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);
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
-
25.10.05 12:24 #4
- 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!
-
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.
Zitat von Beginnerin
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.
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.
Zitat von Beginnerin
"The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
--- Larry Wall
-
27.10.05 12:54 #6
- 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
-
Eclipse: externalize String mit Mehrsprachigkeit
Von mschlegel im Forum JavaAntworten: 1Letzter Beitrag: 20.02.09, 08:30 -
BufferedReader durch string ersetzen
Von sim26 im Forum JavaAntworten: 3Letzter Beitrag: 12.03.07, 13:58 -
HEIGHT - tables mit flexiblen höhen durch prozent
Von blableblu im Forum HTML & XHTMLAntworten: 4Letzter Beitrag: 09.05.06, 12:18 -
String Tables in Visual Studio .net (C++)
Von DanceDevil im Forum C/C++Antworten: 1Letzter Beitrag: 14.07.04, 12:46 -
String durch Code ersetzen
Von tomi im Forum PHPAntworten: 2Letzter Beitrag: 01.06.04, 15:53





Zitieren

Login






