Wozu dient die Eigenschaft DoNot?
Die Eigenschaft DoNot speichert die Namen der Elemente, die Sie nicht übersetzen möchten.
Sie werden im Stringtabelleneditor per Klick links auf den blauen Punkt oder auch im
Menu 'Edit | Toggle Component' gewält.
Siehe auch den folgenden Tip:: Leere strings von der Übersetzung ausschließen
Zurück zum Anfang
Leere strings von der Übersetzung ausschließen
Eine typische Situation: Ein Panel ohne Text soll aus der Stringtabelle dauerhaft verschwinden.
Lösung:
In der Stringtabelle ganz links auf den blauen Punkt (links von 'Panel1' zum Beispiel) klicken.
Es erscheint ein roter Punkt. Alternativ kann auch in Menu 'Edit | Toggle Component' gewält werden.
Dann Alt + R (oder per Menü 'View | Refilter') und die rot markierten Komponenten werden ausgeblendet.
Nach jedem Update (Ctrl + U), erscheinen die 'roten' wieder und es muß mit Alt+R gefiltert werden.
Sinn der Sache: Komponenten ohne Text oder mit internationalem Text (z.B. 'ok') müssen nicht eingetragen werden.
Zurück zum Anfang
OK/CANCEL/HELP in MessageDlg übersetzen
Anstelle von Borland's MessageDlg-Funktion, sollte Folgendes verwendet werden:
Application.MessageBox()
Die Schalter werden dann dank Windows automatisch in der richtigen Sprache erscheinen.
Zurück zum Anfang
Quelltexte (*.pas) ohne Form (*.dfm) (*.dfm)
Für strings in Units (ohne Form) müssen Sie die Methode .GetText verwenden.
(Siehe nächsten Tip zu diesem Thema).
Wo wird die TMultiLang Komponente erzeugt wenn kein Formular da ist?
Am besten ist es, ein TDataModule zu kreieren und die TMultiLang-Komponente darauf abzulegen.
Sie wird dann wie folgt angesprochen:
with DataModule1.MultiLang1 do
ShowMessage (GetText ('@hello'));
Zurück zum Anfang
Konstante Strings in Quelltexten statt auf Formularen
Für diese eingebetteten Strings müssen Sie die Methode .GetText verwenden und Pseudoeinträge in die Stringtabelle einfügen.
Diese Pseudoeinträge müssen mit dem Zeichen '@' beginnen.
Das Beispielprogramm (Demo) zeigt dies an einer Stelle: Wenn Sie auf den Schalter auf der ersten Seite klicken, erscheint eine Nachricht,
die mit ShowMessage angezeigt wird.
Quelltext:
Anstelle von
ShowMessage ('Hello World')
nun:
ShowMessage (MultiLang1.GetText('@hello'));
und in der Stringtabelle:
@hello Hello World Hallo Welt ...
Wie ermitteln Sie diese Strings?
Leider müssen Sie diese Strings von Hand zusammentragen. Ein Tip:
Ich äderte die Farbeinstellung in der IDE für die Darstellung von Stringkonstanten, so daß sie leicht erkennbar sind.
Z.B. "Schwarzer Text auf ROTEM Hintergrund" (alles andere wird auf weißem Hintergrund dargestellt).
Zurück zum Anfang
Wo werden die Übersetzungen gespeichert?
Die Übersetzungen werden in Ihren *.DFM Dateien gespeichert.
Wenn Sie sich in der IDE befinden, und die übersetzte Form ist geöffnet,
klicken Sie auf die Form (so daß nicht der Quelltext, sondern die Form im Vordergrund ist)
und drücken Sie dann ALT+F12.. die Übersetzungen werden dann sichtbar sein..
Zur Laufzeit sind die Übersetzungen in der ausführbaren EXE Datei gespeichert.
Zurück zum Anfang
Wie destalliere ich TMultiLang?
Die neuesten Versionen der Komponente TMultiLang legen einen Ordner mit einem Verweis auf ein automatisches Destallationsprogramm an.
Falls Sie nicht die neueste Version installiert haben und bereits Dateien gelöscht haben, werden Sie
bei jedem Start von Delphi mit einer Meldung konfrontiert, daß der Experte für TMultiLang
(Datei MultiLangExpert.DLL) nicht gefunden werden kann.
Diese Schritte müssen für eine komplette Destallation durchgeführt werden:
- Löschen Sie das Verzeichnis, in dem Sie TMultiLang installiert haben, z.B. c:\MLang3 und entfernen Sie dieses Verzeichnis innerhalb der Delphi-IDE von Ihrem Bibliotheks-Suchpfad
- Falls Sie TMultiLang in einem existierenden Verzeichnis installierten, müssen Sie diese Dateien löschen:
- MultiLang*.*
- MLang.*
- MLBase.pas
- User*.inc
- Vendor.txt
- Readme.txt
- entfernen Sie das Unterverzeichnis \DEMO
- starten Sie REGEDIT.EXE
- Öffnen Sie Schlüssel (falls Delphi 3)
"HKEY_CURRENT_USER\Software\Borland\Delphi\3.0\Experts"
Auf der rechten Seite sehen Sie einen Eintrag "MLang" - löschen Sie ihn.
Für Delphi 2, öffnen Sie bitte diesen Schlüssel:
"HKEY_CURRENT_USER\Software\Borland\Delphi\2.0\Experts"
Zurück zum Anfang
Kann ich mehrere externe Übersetzer einsetzen?
Ja. Sie können dies folgenderweise machen:
- die Programmierung fertigstellen (zumindest das Formdesign)
- eine TMultiLangkomponente auf das Formular plazieren
- die Stringtabelle mit TMultiLang exportieren und an die Übersetzer verteilen
- die Übersetzer liefern z.B. Dateien english.csv, french.csv, spanish.csv
- mit der "import csv" Funktion im file Menu die erste Übersetzung english.csv laden
- mit der "add csv" Funktion im file Menu weitere Ûbersetzungen laden.
Zurück zum Anfang
Wie sieht es mit dem Urheberrecht aus?
Sie dürfen
- die Komponente in allen Ihren Anwendungen benutzen
- den Sourcecode anpassen (evtl. mit Info an mich, so daß andere davon profitieren können
- Ihre Anwendungen verkaufen, aber nicht den Sourcecode von TMultiLang
Sie dürfen nicht
- den Sourcecode von TMultiLang weitergeben
- den Sourcecode geringfügig ändern und als Konkurrenzprodukt verteilen
- das .DCU-File der Vollversion verteilen
Ich denke, daß diese Regeln sinnvoll sind und niemandem ein Hindernis sein werden.
Zurück zum Anfang
Gibt es eine 16bit-Version für Delphi 1?
Nein.
Es wird auch in Zukunft keine 16bit-Version geben. Entsprechende Versuche zeigten, daß der Aufwand gemessen an der Nachfrage und dem zu erwartenden Verkaufserlös einfach zu hoch ist.
Leider müssen Delphi 1-Programmierer eine andere Lösung suchen.
Zurück zum Anfang
Kann ich die Texte extern übersetzen?
Ja - der eingebaute String-Editor hat zwei Buttons zum Exportieren in ein CSV-File sowie zum Importieren eines CSV-Files.
Das CSV-Format kann von vielen Programmen wie z.B. Excel und Access eingelesen werden. Beide Programme eignen sich durchaus für die externe Übersetzung.
Letztendlich kann das CSV-Format auch von einer Textverarbeitung gelesen werden; ein Makro für die optische Aufbereitung ist hier allerdings zu empfehlen.
Zurück zum Anfang
Lange Strings in Doublebyte-Zeichensätzen
Bei langen Strings, die von den VCL-Elementen automatisch umgebrochen werden, wird u.U. ein double-byte-Zeichen in zwei Hälften gebrochen.
Die Zeichen in der folgenden Zeile sind entsprechend falsch.
Zitat Ashley Saldanha, Benutzer von TMultiLang:
Compatibility only extends to single lines of text.
Components that auto-wrap to a second line (e.g., message box strings,
TLabels, TMemos, etc.), are likely to be corrupted, because a double
byte character could be broken into two character bytes, causing garbage
at the end of the wrapped line and beginning of the new line...
To get around this, programmers should try to use shorter strings
with manual breaks and then concantenate them.
This is not, of course, a bug in MLang, but rather a limitation
MLang inherits from the VCL...
Zurück zum Anfang
Funktioniert TMultiLang mit Delphi 3?
Delphi 3 übersetzt TMultiLang's Quelltext ohne Änderungen.
Tests zeigten, daß das ausführbare Programm genauso zuverlässig
wie ein Delphi 2-Kompilat arbeitet.
Zurück zum Anfang
Behandlung von File Open/Save-Dialogen?
TMultiLang enthält keine übersetzten Version dieser Dialoge, da
jeder Benutzer von Windows automatisch eine passende Version dieser Dialoge hat.
Kurz gesagt: diese Standarddialoge sind Bestandteil von Windows, nicht Ihrer Anwendung.
Natürlich ist es mit TMultiLang möglich, relevante Properties wie z.B. den Titeltext
solcher Komponenten zu übersetzen.
(Titeltext seit Version 1.9)
Zurück zum Anfang
TMultiLang vergrößert meine EXE-Datei
Es stimmt, TMultiLang vergrößert kleine Anwendungen erheblich.
Dies hat eine einfache Ursache:
TMultiLang muß die Struktur aller existierenden Kontrollelemente kennen,
z.B. die aus COMCTRLS.
Selbst wenn Ihr Programm z.B. keine Statuszeile verwendet, enthält TMultiLang etwas
Code zur Behandlung dieses Elementtyps.
Programme, die von den meisten Kontrollelementen Gebrauch machen, werden nur unwesentlich
vergrößert - sie importieren COMCTRLS usw. sowieso.
Seit Version 2.2 von TMultiLang können Sie auch das Compilersymbol SUPPORT_DB abschalten. Falls Ihre Anwendung keine Datenbankanwendung ist, ändern Sie die folgende Zeile
{$DEFINE SUPPORT_DB}
in Datei MLang.pas in
{.$DEFINE SUPPORT_DB}
Datenbank-Komponenten werden nun von TMultiLang nicht unterstützt und daher nicht unnötig in die EXE-Datei gelinkt. Dies spart etwa 180kB.
Zurück zum Anfang
Wie erhalte ich kleinere EXE-Dateien?
Wenn Sie die kleinstmögliche EXE-Datei erhalten möchten, nehmen Sie den Source-Code
von TMultiLang und legen Sie eine Kopie im Projektverzeichnis an.
Kommentieren Sie in dieser Kopie die nicht benötigten Teile aus;
dies findet an 3 Stellen im Quelltext statt:
- in Routine BtnUpdClick(Sender: TObject); diese wird bei Klicken
auf den "Update"-Schalter aufgerufen
- im "Ausgabe"teil im Quelltext erscheint die gleiche Programmstruktur.
Entfernen Sie die gleichen Kontrollelemente..
- im "Eingabe"teil im Quelltext: achten Sie auf nicht benötigte
Kontrollelemente wie z.B. TStatusBar oder TMemo usw.
Jedes Kontrollelement wird in 2 Zeilen behandelt, ein Beispiel:
-----------------
(Components[i] is TTreeView) or
...
else if aComponent is TTreeView then
WriteTreeView ((aComponent as TTreeView).Items)
......
else if aComponent is TTreeView then
ReadTreeView ((aComponent as TTreeView).Items)
-----------------
Kommentieren Sie diese 5 Zeilen aus und der Kode für TTreeView
wird nicht mehr in Ihrer EXE-Datei enthalten sein.
Zurück zum Anfang
Kann ich den String-Editor aus meiner EXE-Datei entfernen?
Nein. Da das Programm zur Laufzeit den Propertyeditor nicht aufrufen kann, wird er ohnehin nicht
in die EXE-Datei eingebunden. <grins>.
Zurück zum Anfang
Werden asiaische Sprachen unterstützt?
Ja, Wide-Char-Zeichenketten arbeiten problemlos sogar mit der
Sharewareversion der Komponente.
Ashley Saldanha schrieb dazu folgendes:
"I've installed Traditional Chinese Windows and Delphi, and tried your demo - and it does, indeed, work...
A tribute to a well-designed program. My compliments..."
Zurück zum Anfang
Werden eingebettete Zeichenketten behandelt?
Ja - seit Version 1.8. TMultiLang hat seit dieser Version eine neue Methode .GetText,
mit der Zeichenketten, die nicht einem Kontrollelement zugeordnet sind, abgerufen
werden können.
Das Demonstrations-Projekt zeigt bei der Behandlungsroutine OnClick
die Benutzung dieser Methode.
Zurück zum Anfang
Funktioniert es auch mit Oracle?
Ja. TMultiLang ist in keiner Hinsicht an eine spezielle Datenbank gebunden.
Das Beispielprojekt benutzt eine Paradox-Tabelle um zu zeigen, daß
Datenbankbezogene Teile übersetzt werden können.
TMultiLang selbst ist keine Datenbankanwendung und benötigt auch keine BDE.
Zurück zum Anfang
Wie entferne ich eine Sprache?
Zur Zeit kann nur die jeweils zuletzt hinzugefügte Sprache entfernt werden.
Dies geschieht, indem Sie den Wert der Eigenschaft "Languages"
verringern.
Bemerkung: Die Anzahl der Sprachen kann auf diese Weise auch erhöht werden.
Zurück zum Anfang
Übersetzung von MDI-Kindfenstern
Jede Instanz eines MDI-Kindfensters hat einen individuellen Namen, der zur Laufzeit
vergeben wird. Daher kann die Titelzeile eines solchen MDI-Kindfensters nicht
durch zuweisen eines Strings wie gewöhnlich geschehen (Form1, Form2 usw.).
Seit Version 1.5 addressiert TMultiLang die Titelzeile eines Fensters mit dem
symbolischen Namen %Form%.
Für nicht-MDI-Kindfenster kann weiterhin der Name des Formulares direkt
benutzt werden, dies ist jedoch nicht empfohlen.
Zurück zum Anfang
Installation mit Delphi 2.0
Es gibt geringfügige Unterschiede in einigen DCUs zwischen den Versionen von
Delphi 2.0 und Delphi 2.01. Die meisten Entwickler haben derzeit Version 2.01, so daß
diese Version in der Sharewareversion standardmäßig installiert wird.
Falls Sie mit Delphi 2.0 arbeiten, können Sie Datei MLANG20.DCU verwenden -
es handelt sich um die mit Delphi 2.0 kompilierte Version von TMultiLang.
Kopieren Sie bitte MLANG20.DCU als MLANG.DCU in Ihr Bibliotheksverzeichnis.
Zurück zum Anfang
Übersetzung einer TStrings-Eigenschaft
Frage: Wie kann ich eine TStrings-Eigenschaft einer Komponente eines Drittanbieters
übersetzen, wenn deren Quellcode nicht vorliegt?
Antwort: Falls die Eigenschaft von TMultiLang nicht bereits unterstützt wird,
müssen Sie den Quellcode von TMultiLang erwerben ($29).
Es müssen nur ca. 5 Zeilen Code hinzugefügt werden, da es bereits andere
Komponenten gibt, die TStrings-Eigenschaften haben.
Zurück zum Anfang
Wie wird die BDE unterstützt?
Frage: Kann ich auch BDE Nachrichten mit TMultiLang übersetzen?
Antwort: Nein. Die gegenwärtige Version von TMultiLang erlaubt das
Übersetzen von Eigenschaften von Elementen auf Formularen, Formularen sowie
eingebetteten Zeichenketten.
Borland bietet übersetzte Versionen der BDE an.
Durch entsprechende Programmierung (Abfragen) kann allerdings verhindert werden,
daß die BDE Fenster öffnet wie z.B.
Beide unterscheiden zwischen verschiedenen Komponententypen bevor
sie eine Standardbehandlung einleiten. Falls Sie eine zusätzliche Komponente
einfügen möchten, muß der Code an diesen Stellen eingefügt werden.
Sie können die Standardprozeduren verwenden, mit denen Eigenschaften der Typen
TStrings, TStatusPanels, string, Hint (=string,
falls ein Hint exisitiert).
Zurück zum Anfang