software preview: TMultiLang


 
Go
Einführung
Bilder
Mehr Bilder
Download
Architektur
FAQ
Bestellung
Kunden
Übersetzer
Kontakt
 


Sie können sich automatisch per E-Mail benachrichtigen lassen, wenn sich der Inhalt dieser Seite ändert.
Dazu müssen Sie sich hier kostenlos registrieren. Tragen Sie bitte Ihre E-Mail-Adresse ein:


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:

  1. 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
  2. Falls Sie TMultiLang in einem existierenden Verzeichnis installierten, müssen Sie diese Dateien löschen:
    1. MultiLang*.*
    2. MLang.*
    3. MLBase.pas
    4. User*.inc
    5. Vendor.txt
    6. Readme.txt
  3. entfernen Sie das Unterverzeichnis \DEMO
  4. starten Sie REGEDIT.EXE
  5. Ö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:

  1. die Programmierung fertigstellen (zumindest das Formdesign)
  2. eine TMultiLangkomponente auf das Formular plazieren
  3. die Stringtabelle mit TMultiLang exportieren und an die Übersetzer verteilen
  4. die Übersetzer liefern z.B. Dateien english.csv, french.csv, spanish.csv
  5. mit der "import csv" Funktion im file Menu die erste Übersetzung english.csv laden
  6. 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:

  1. in Routine BtnUpdClick(Sender: TObject); diese wird bei Klicken auf den "Update"-Schalter aufgerufen
  2. im "Ausgabe"teil im Quelltext erscheint die gleiche Programmstruktur. Entfernen Sie die gleichen Kontrollelemente..
  3. 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.

"Do you really want to delete this record?"

Zurück zum Anfang


Wird die BDE benötigt?
Frage: Wird die BDE benötigt, um TMultiLang beim Kunden zu installieren?
Antwort: Nein. TMultiLang benutzt keine TTable zur Speicherung von Zeichenketten.
Zurück zum Anfang


Neue Komponenten integrieren
Gegenwärtig kann dies nur getan werden, wenn Sie den Quelltext von TMultiLang haben.
Suchen Sie nach diesen Prozeduren in MLang.pas:

procedure TFEditMultiLang.WriteComponent (aComponent : TComponent; const aRow : integer);
und
procedure TMultiLang.ReadComponent (const aComponent : TComponent; var Position : integer);

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


IHRE Frage oder Tip

Name:   (optional)

Email:    (optional)

Zurück zum Anfang


© Urheberrechtlich geschützt, 1996-2001. Kontakt: Peter Tiemann