Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Sprachdateien von Localizer (Korzh) in Exe einbinden (https://www.delphipraxis.net/170905-sprachdateien-von-localizer-korzh-exe-einbinden.html)

andydp 9. Okt 2012 17:35

Sprachdateien von Localizer (Korzh) in Exe einbinden
 
Hallo Leute

Ich benötige wieder einmal Eure geschätzte Hilfe.

Ich verwende zur Sprachumstelltung das Localizer Tool von Korzh.
Ich bin damit auch sehr zufrieden. Habe aber das Problem, dass ich in Zukunft
dem Setup keine *.lng Files mehr beilegen möchte.
In den Localizer Projekteinstellungen (Pro- Version) kann man die Sprachdateien
direkt in das exe- File einbinden. Hab nun aber das Problem, wie ich dies im Source- Code
bewerkstelligen muss. Es sind leider keine Demos für diesen Fall dabei.

Wäre Euch sehr dankbar, wenn mir jemand ein wenig auf die Sprünge helfen könnte.

Uwe Raabe 9. Okt 2012 18:34

AW: Sprachdateien von Localizer (Korzh) in Exe einbinden
 
In den Localizer Project Settings unter Other Options

andydp 10. Okt 2012 08:30

AW: Sprachdateien von Localizer (Korzh) in Exe einbinden
 
Hi Uwe

Danke für die Info, aber das wusste ich schon.
Ich habe das Problem, dass ich nicht weiss wie ich im Source- Code darauf reagieren muss, wenn die "exe-internen" Spachdateien und nicht die externen dll's verwendet werden.

Welche API- Funktionen muss ich nehmen?

Wäre toll, wenn jemand ein Beispiel hätte...

Uwe Raabe 10. Okt 2012 08:42

AW: Sprachdateien von Localizer (Korzh) in Exe einbinden
 
Soweit ich weiß ändert sich gar nichts. Hast du es probiert? Welche Probleme tauchen auf?

andydp 10. Okt 2012 08:53

AW: Sprachdateien von Localizer (Korzh) in Exe einbinden
 
Ich habe die dll- Sprachdateien aus dem Verzeichnis gelöscht und sie in den Projekteinstellungen zum exe gelinkt.
Beim Aufstarten kann er die Spachdateien nicht mehr finden.

Ich habe in der Projektdatei anstelle von:
LocalizerOnFly.Init(ApplicationDir+'\');
neu
LocalizerOnFly.Init();
eingefügt.

In der Form Create Routine steht: LocalizerOnFly.SwitchToExt('ENG');

Beim Aufstarten kommt die Fehlermeldung: "Invalid File Format" und anschliessend " Localicer is not intialized"

Uwe Raabe 10. Okt 2012 09:24

AW: Sprachdateien von Localizer (Korzh) in Exe einbinden
 
Der Localizer bindet nicht die DLLs ein, sondern die LNG-Dateien.

Uwe Raabe 10. Okt 2012 09:27

AW: Sprachdateien von Localizer (Korzh) in Exe einbinden
 
Zitat:

Zitat von andydp (Beitrag 1186453)
Ich habe die dll- Sprachdateien aus dem Verzeichnis gelöscht und sie in den Projekteinstellungen zum exe gelinkt.
Beim Aufstarten kann er die Spachdateien nicht mehr finden.

Ich habe in der Projektdatei anstelle von:
LocalizerOnFly.Init(ApplicationDir+'\');
neu
LocalizerOnFly.Init();
eingefügt.

In der Form Create Routine steht: LocalizerOnFly.SwitchToExt('ENG');

Beim Aufstarten kommt die Fehlermeldung: "Invalid File Format" und anschliessend " Localicer is not intialized"

Der Pfad beim Init muss zu den LNG-Dateien zeigen; den Pfad zu den DLLs stellt man über DLLDir ein. Du kannst beim Aufruf den Pfad zu den LNGs ruhig drin lassen, dann werden auch zusätzliche Sprachdateien gefunden, die nicht mit eingebunden sind.

andydp 10. Okt 2012 10:25

AW: Sprachdateien von Localizer (Korzh) in Exe einbinden
 
Zitat:

Der Localizer bindet nicht die DLLs ein, sondern die LNG-Dateien.
Da hast Du natürlich vollkommen recht :oops: Es sind natürlich die *.lng Dateien, die ich jeweils im Setup mitliefere und die mit LocalizerOnFly.Init(); eingebunden werden. Das funktioniert ja auch alles ohne Probleme.

(Komischerweise verlangt Win 7 übrigens Administratorenrechte bei der Installation, sonst kommt es zu einer Fehlermeldung beim Aufstarten. Das Exe- File scheint auch schreibend auf die *.lng Dateien zuzugreifen, oder kannst Du mir diesen Sachverhalt erklären?)

Jetzt habe ich aber das Problem, dass ich diese *.lng Dateien nicht mehr mitliefern möchte, sonder dierekt im Exe- File integrieren möchte.
Im den Projekteinstellungen habe ich wie gesagt bei "Link Languages to exe File" gemacht, nun weiss ich einfach nicht, wie ich das im Source- Code bewerkstellingen kann, damit die Texte im Exe beim Aufstarten auch gefunden werden.

Uwe Raabe 10. Okt 2012 10:42

AW: Sprachdateien von Localizer (Korzh) in Exe einbinden
 
Zitat:

Zitat von andydp (Beitrag 1186468)
(Komischerweise verlangt Win 7 übrigens Administratorenrechte bei der Installation, sonst kommt es zu einer Fehlermeldung beim Aufstarten. Das Exe- File scheint auch schreibend auf die *.lng Dateien zuzugreifen, oder kannst Du mir diesen Sachverhalt erklären?)

Localizer erzeugt bei Bedarf die Resourcen-Dateien (DLLs) in besagtem DLLDir. Ist das nicht angegeben, wird das Verzeichnis der EXE genommen. Allerdings ist das häufig schreibgeschützt, was zu den von dir geschilderten Problemen führt. Ich setze daher das DLLDir vor dem Init auf einen eigenen Pfad im AppData-Folder.

Zitat:

Zitat von andydp (Beitrag 1186468)
Jetzt habe ich aber das Problem, dass ich diese *.lng Dateien nicht mehr mitliefern möchte, sonder dierekt im Exe- File integrieren möchte.
Im den Projekteinstellungen habe ich wie gesagt bei "Link Languages to exe File" gemacht, nun weiss ich einfach nicht, wie ich das im Source- Code bewerkstellingen kann, damit die Texte im Exe beim Aufstarten auch gefunden werden.

Wie gesagt, du brauchst dazu eigentlich gar nichts machen. Ich habe das hier bei einer Anwendung probiert: Sind die Sprachen eingebunden und die LNG-Dateien sind nicht vorhanden, läuft es genauso als wenn die Sprachen nur als LNG-Dateien vorliegen.

andydp 10. Okt 2012 15:42

AW: Sprachdateien von Localizer (Korzh) in Exe einbinden
 
Hmmm...

Dann werde ich das wohl noch einmal probieren müssen.
Gebe Dir dann Bescheid.

Herzlichen Dank Uwe.
Wünsche Dir einen schönen Abend.

Gruss Andy

andydp 10. Okt 2012 15:57

AW: Sprachdateien von Localizer (Korzh) in Exe einbinden
 
Habs noch rasch ausprobiert.
Bei einem kleinen Demoprojekt (Loc.exe) läuft es tatsächlich ohne die lng. Files im Verzeichnis des exe- Files.
Habe aber nun das Problem, dass immer beim Schliessen des Programms eine "Loc.ENG" Datei generiert wird.
Kannst Du mir sagen, wie ich das verhindern kann?

Uwe Raabe 10. Okt 2012 17:51

AW: Sprachdateien von Localizer (Korzh) in Exe einbinden
 
Wurde die denn bisher nicht generiert? Das sind die eigentlichen Resource-DLLs, die beim Programmstart gleich die übersetzten Daten laden. Wenn sie nicht existieren oder veraltet sind, werden sie automatisch neu erzeugt. Du brauchst die zwar nicht mitliefern, aber vorhanden sein müssen sie dennoch. Deswegen muss man ja auch über DLLDir ein beschreibbares Verzeichnis angeben, sonst können die nicht erstellt werden.

andydp 11. Okt 2012 12:51

AW: Sprachdateien von Localizer (Korzh) in Exe einbinden
 
Na ja, ich habe eigentlich gehofft, dass es ohne diese zusätzlichen Dateien geht. Weil laufen würde es ja ohne diese mitgelieferten dll's. Die Sprachdateien sind ja schon in der Exe Eingebunden. Ich sehe also nicht ein, wesshalb sie beim Schliessen des Programms noch generiert werden müssen.

Uwe Raabe 14. Okt 2012 14:21

AW: Sprachdateien von Localizer (Korzh) in Exe einbinden
 
Sorry für die lange Pause - ich war ein paar Tage im Urlaub.

Es gib zwei Ansätze in diesem Fall. Zum einen kannst du das Property
Delphi-Quellcode:
DeleteUnusedLDll := true
setzen, dann werden die Resource-DLLs immer wieder gelöscht. Alternativ kannst du auch
Delphi-Quellcode:
SoftMode := true
setzen, dann werden die DLLs gar nicht erst erzeugt. Allerdings musst du dann einen Haufen Kram selbst erledigen - die Hilfe gibt dazu ein paar Hinweise. Die ansonsten sehre einfache Verwendung des Localizers wird damit hinfällig.

Delphi holt sich bei jedem Laden eines Forms die Properties aus der aktuellen Resourcen-DLL. Legt man solche DLLs bei, braucht man überhaupt nichts im Programm einbinden und es läuft trotzdem. Viele Übersetzungstools gehen diesen Weg. Andere hängen sich in den Lademechanismus oder ins OnFormCreate und übersetzen die Properties dynamisch, müssen dafür aber beim Compilieren eingebunden werden.

Die LocOnFly-Lösung des Localizers verbindet beide Methoden: Es werden Resource-DLLs erzeugt, damit beim Laden gleich die richtigen Übersetzungen verwendet werden, und es gibt eine dynamische Umschaltung zur Laufzeit, die alle existierenden Forms verarbeitet. Da sich der Localizer aber nicht in das Form-Loading einklinkt, sind auch für das dynamische Umschalten die entsprechenden Resource-DLLs nötig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz