[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Frage zu #include

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Frage zu #include

JuMayr
Beiträge gesamt: 96

6. Dez 2012, 09:10
Beitrag # 1 von 10
Bewertung:
(16342 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

ich kämpfe nun schon seit ein paar Stunden mit eine #include Anweisung rum.

Konkret möchte ich eine Datei mit Sprachvariablen in meine Scripte einbinden.

Code
#include File(Folder(Folder.userData.fullName+'/Sprachfiles/Sprachdaten.jsx')); 


Wenn ich in der Konsole
File(Folder(Folder.userData.fullName+'/Sprachfiles/Sprachdaten.jsx')).length eingebe, dann wird mir die korrekte Größe der Datei angezeigt.

Die #include Anweisung sagt mir aber "Datei oder Ordner existiert nicht".

Hat evtl. jemand einen Tipp für mich wo mein Problem liegt?

Viele Grüße
Jürgen
X

Frage zu #include

WernerPerplies
Beiträge gesamt: 2762

6. Dez 2012, 09:44
Beitrag # 2 von 10
Beitrag ID: #505183
Bewertung:
(16280 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jürgen,

Include-Anweisungen können relativ oder absolut sein.

Einige Beispiele gibt es hier in Screenshots der Beiträge:
WpsIncludesInCludes

HTH


als Antwort auf: [#505177]

Frage zu #include

JuMayr
Beiträge gesamt: 96

6. Dez 2012, 09:59
Beitrag # 3 von 10
Beitrag ID: #505186
Bewertung:
(16265 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

vielen Dank für den Link.
Noch eine Frage: Wenn ich nur #include "Sprachdaten.jsx" angebe, in welchem Ordner wird dann gesucht?
Gibt es einen Betriebssystem- und InDesignversion unabhängigen Ordner der dann als Basis genommen wird?

Schade eigentlich, dass man nicht mit den definierten Pfaden wie Folder.userData.fullName o.ä. arbeiten kann:(

Gruß
Jürgen


als Antwort auf: [#505183]

Frage zu #include

WernerPerplies
Beiträge gesamt: 2762

6. Dez 2012, 10:06
Beitrag # 4 von 10
Beitrag ID: #505188
Bewertung:
(16252 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jürgen,

wenn Du keinen Basispfad angibst, gilt der Pfad des aufrufenden Skripts.

Hast Du eigentlich gesehen, das mein Beispielskript unter anderem auch bereits die Behandlung unterschiedlicher Sprachdateien behandelt?


als Antwort auf: [#505186]

Frage zu #include

JuMayr
Beiträge gesamt: 96

6. Dez 2012, 10:19
Beitrag # 5 von 10
Beitrag ID: #505189
Bewertung:
(16243 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Werner,

ja, das hatte ich gesehen.
Ich verwende in meinen Scripten bisher die YALT 2 Engine.

http://www.indiscripts.com/...-localization-engine

Gruß
Jürgen


als Antwort auf: [#505188]

Frage zu #include

WernerPerplies
Beiträge gesamt: 2762

6. Dez 2012, 10:30
Beitrag # 6 von 10
Beitrag ID: #505190
Bewertung:
(16223 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jürgen,

ich habe da mal kurz reingesehen, ich denke, da widerspricht sich nichts, dass müsste auch direkt in meinem Framework einsetzbar sein, außer dass ich alle Meldungen in einer globalen Variable verwalte und bei Meldungen zwischen dem individuellen Teil und dem globalen Teil des gesamten Skripts unterscheide.

Insgesamt ist das Beispiel ein Framework für fast beliebige Skripts, die je nach Bedarf mit separaten Indcludedateien oder durch Einsatz meines IncludesIncludes-Skript als Gesamtdatei ausgeliefert werden können.


als Antwort auf: [#505189]

Frage zu #include

Martin Braun
Beiträge gesamt: 78

6. Dez 2012, 20:19
Beitrag # 7 von 10
Beitrag ID: #505233
Bewertung: ||
(16125 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Jürgen,

versuch's mal so:

Code
eval("#include " + Folder.userData + '/Sprachfiles/Sprachdaten.jsx'); 


#include ist keine gewöhnliche Javascript-Funktion sondern eine "Präprozessoranweisung" und kann nicht Variablen oder Ausdrücke als Argument annehmen. Der einzuschließende Dateipfad muss buchstäblich hinter include stehen. Mit eval() kann man das quasi simulieren.

Sauberer wäre es in diesem Fall aber, die Sprachdatei mit app.doScript() auszuführen:

Code
app.doScript(File(Folder.userData + '/Sprachfiles/Sprachdaten.jsx')); 


LG
Martin


als Antwort auf: [#505177]

Frage zu #include

Dirk Becker
Beiträge gesamt: 193

12. Dez 2012, 00:11
Beitrag # 8 von 10
Beitrag ID: #505485
Bewertung:
(16023 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Noch einige Ansätze:

- #include arbeitet relativ zur aktuellen Quelle
- es gibt da eine Variable $.includePath ...
- $.evalFile() schluckt auch File-Objekte
- app.doScript hat einige Problemchen beim Debuggen und bei verschachtelten Aufrufen

Grüße,
Dirk


als Antwort auf: [#505233]

Frage zu #include

Martin Braun
Beiträge gesamt: 78

12. Dez 2012, 07:49
Beitrag # 9 von 10
Beitrag ID: #505488
Bewertung:
(16006 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
und:

- mit #includepath lassen sich weitere Pfade hinzufügen

LG
Martin


als Antwort auf: [#505485]

Frage zu #include

WernerPerplies
Beiträge gesamt: 2762

12. Dez 2012, 07:58
Beitrag # 10 von 10
Beitrag ID: #505489
Bewertung:
(16005 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich denke, der beste Ansatz für Sprachanpassungen ist nicht der Include-Weg, sondern das Einlesen der Meldungen beim Start des Skriptes.
Die Meldungen können dann in einer einfachen Testdatei gespeichert sein und damit zu jeder Zeit angepasst werden.

Damit entfallen dann auch die Verzeichnisprobleme.

Ich persönlich würde die Sprachdateien so speichern:
Code
Folder.userData+"/"+companyName + "/" + scriptName+"/"+$.locale+"/"+ groupName + ".msg" 


Code
Folder.userData:    Systemvariable, 
companyName: Scriptvariable mit der Entwicklerfirma,
scriptName: Scriptvariable
$.locale: Systemvaiable
groupName Scriptvariable mit Meldungsgruppe


Zur Laufzeit würde ich die Existenz der Datei prüfen, und ggf., wenn nicht vorhanden, eine Standardsprache verwenden.

Die Meldungsdatei könnte z. B. so aussehen:

Code
fileNotFound;Die Datei {0} wurde nicht gefunden 
selectFirstDir;Bitte zuerst ein Verszeichnis auswählen
...


Solche eine Datei kann zeilenweise eingelesen, bei ";" gesplittet und in ein Meldungsobjekt gespeichert werden.

Ein Vorteil des Verfahrens wäre es, dass Anwender oder Vertreiber des Skriptes die Meldungen leicht in der gewünschten Sprache ergänzen können.


als Antwort auf: [#505485]
X