Wie auf Umgebungsvariablen zugreifen?

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Reveng
Beiträge: 8
Registriert: Fr 4. Apr 2008, 22:33
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Wie auf Umgebungsvariablen zugreifen?

Beitrag von Reveng »

Da mir hier schon mal so super und schnell geantwortet wurde, komme ich noch mal mit einem ungelösten Problem, das auch nach dem obligatorischen Googlen ungelöst blieb:

Wie lese ich die Umgebungsvariablen von Lazarus aus? Ich brauche nämlich konkret den zum Kompilierzeitpunkt benutzten Pfad zum Lazarusordner. Ich stelle mir vor, dass das irgendwie mit ner Compilerdirektive gehen müsste, hab aber keine ahnung, wie.

Vielen Dank im Voraus!
Reneng

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Nö, eine compilerdirektive die umgebungsvariablen ausliest ist wohl etwas sehr weit hergeholt ich kann mir auch nicht vorstelln das die jemand implementiert.

Wozu brauch man sowas ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Wie auf Umgebungsvariablen zugreifen?

Beitrag von Euklid »

Reveng hat geschrieben:Wie lese ich die Umgebungsvariablen von Lazarus aus? Ich brauche nämlich konkret den zum Kompilierzeitpunkt benutzten Pfad zum Lazarusordner.
Hallo Reveng,
wenn es hierfür keine Umgebungsvariablen gibt, könntest du das Problem etwas umständlicher dadurch lösen, dass du die entsprechenden Konfigurationsdateien ausließt. In diesen stehen nämlich die Pfade drin.

Gruß, Euklid

Reveng
Beiträge: 8
Registriert: Fr 4. Apr 2008, 22:33
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Beitrag von Reveng »

Das Problem ist verwandt mit meinem Übersetzungsproblem aus dem anderen Thread.
Die Lösung bestand darin, folgendes auszuführen:

Code: Alles auswählen

TranslateUnitResourceStrings('LCLStrConsts', 'C:\lazarus\lcl\languages\lclstrconsts.de.po');
Aber dieser Pfad ist ja nicht bei jedem, der das Programm kompilieren können soll, gleich. Insbesondere, weil ich das Programm auch für Linux bereitstellen will.
Wie komme ich also an diesen Pfad heran?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Denkfehler, das hat zur compilezeit nichts zu sagen. Die Datei wird erst zur laufzeit geladen. Jeder der das programm benutzt muss also diese Datei in z.b. dem programpfad haben.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Reveng
Beiträge: 8
Registriert: Fr 4. Apr 2008, 22:33
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Beitrag von Reveng »

Danke für die Erklärung, Christian. Dann könnte ich die .po-Datei einfach im Grundverzeichnis meines Programms ausliefern. Allerdings finde ich die Lösung nicht optimal.

Gibt es denn keine Möglichkeit, ohne eine externe Datei zur Ausführungzeit auszukommen?

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Beitrag von knight »

Als Notlösung könnte man die xxx.de.po Datei in xxx.po Datei umbenennen (die beteiligten Dateien natürlich vorher sichern) und dann das Programm kompilieren. Einen Verweis auf die xxx.de.po Datei bräuchte man dann nicht mehr.

knight

Reveng
Beiträge: 8
Registriert: Fr 4. Apr 2008, 22:33
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Beitrag von Reveng »

Ja, das funktioniert auch. Danke, knight.
Und wie es aussieht ist es natürlich nicht der Königsweg, aber dennoch werde ich ihn erstmal beschreiten. ;)
Reveng

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Aber dieser Pfad ist ja nicht bei jedem, der das Programm kompilieren können soll, gleich. Insbesondere, weil ich das Programm auch für Linux bereitstellen will.
Wie komme ich also an diesen Pfad heran?
Wenn du die umbenennst, ist die Datei aber auch nicht bei jedem gleich ;)
Johannes

Reveng
Beiträge: 8
Registriert: Fr 4. Apr 2008, 22:33
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Beitrag von Reveng »

Moment, ich will ja nur das eine oder das andere.
Ich habe aber gerade festgestellt, dass das mit dem Umbenennen auch nicht so richtig klappen will. (Wohlwissend, dass das eh nicht der goldene Weg ist...)

Ich habe die lclstrconsts.de.po in lclstrconsts.po umbenannt. Dennoch hat das Programm dann die englischen Texte drin. Woran liegt das?

ulhau
Beiträge: 65
Registriert: Sa 27. Okt 2007, 13:27
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Seebergen

Beitrag von ulhau »

Weil im Lazarusinstallationsverzeichnis\lcl\ die Dateien lclstrconsts.rst, lclstrconsts.ppu, lclstrconsts.pas, lclstrconsts.o die LCLStrings enthalten. Und im Lazarusinstallationsverzeichnis\lcl\Units\i386-win32\ die Dateien lclstrconsts.rst, lclstrconsts.ppu, lclstrconsts.pas, lclstrconsts.o (in der Windowsversion) benutzt werden. Also müssten diese Dateien eingedeutscht werden wenn alles Deutsch sein soll, insbesondere die lclstrconsts.pas.

Ich denke mal das das der Weg ist. Der andere Weg ist nur gedacht um zur Lafzeit beliebige Sprachversionen bereitzustellen.

Tschüsss!

ulhau
Beiträge: 65
Registriert: Sa 27. Okt 2007, 13:27
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Seebergen

Beitrag von ulhau »

Genau, so isses.

Ich hab's getestet und es hat geklappt. Die Beschriftung war Deutsch, auch ohne TranslateUnitResourceStrings.

Tschüsss!

Reveng
Beiträge: 8
Registriert: Fr 4. Apr 2008, 22:33
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Beitrag von Reveng »

Hhm, na gut. Wenn ich einmalig oder zentral das Programm kompilieren und bereitstellen will, kann ich durch Ersetzung/Übersetzung der Units das Programm fest übersetzen.
Wenn ich aber das Programm samt Quelltext für die weitere Benutzung weitergeben möchte, geht das ja nicht, weil andere Leute die originären LCL-Quelltexte haben.

Daher würde ich es vorziehen, die Funktion TranslateUnitResourceStrings zu benutzen. Ein Übel dabei ist aber, dass dieses auf eine Datei zugreifen muss, dessen Ort je nach Lazarusinstallation variiert.

Ist es möglich, die Sprachdatei ...de.po als Resource in das Programm zu übernehmen?

ulhau
Beiträge: 65
Registriert: Sa 27. Okt 2007, 13:27
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Seebergen

Beitrag von ulhau »

Ja zur Quelltextweitergabe ist das halt weniger geeignet.

Aber die ...de.po Datei kann ja auch im Quelltextverzeichnis mitgegeben und von da aus auch mit TranslateUnitResourceStrings geladen werden. Später bei einer Installation (Ich gehe halt immer von Windows aus) liegt sie dann eben im Installationsverzeichnis.

Oder die ...de.po Datei kann in die Exedatei (wieder Windows) eingebunden und beim Start im Startverzeichnis gespeichert und benutzt werden und beim Programmende wird sie gelöscht (z.B. entsprechende Rechte vorausgesetzt).

Als Resource währe das ähnlich, denn die Datei muss ja lesbar in einem Verzeichnis liegen. (Denk ich mal)

Aber ob es möglich ist die englischen lclstrconsts.pas/lclstrconsts.rst Dateien per Compilerschalter durch die deutschen Dateien zu ersetzen entzieht sich meiner Kenntnis.

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Beitrag von monta »

Genau, man kann doch nicht auf die Lazaruseigene Datei zurückgreifen, sondern wenn gehört sie bspw. ins Programmverzeichnis, sonst gehts ja nicht für User, die bspw. kein Lazarus haben.
Johannes

Antworten