Meldungen für Adobe InDesign-Skripte in ein globales Objekt

Funktionen, Klassen, Prototypes, Libraries, Problemlösungen
Antworten
wernerperplies
Beiträge: 250
Registriert: 6. Aug 2011, 17:48
Wohnort: 18374 Zingst
Kontaktdaten:

Meldungen für Adobe InDesign-Skripte in ein globales Objekt

Beitrag von wernerperplies » 16. Apr 2017, 08:50

Für alle meine Skripte verwende ich ein globales Objekt, in dem ich u. a. auch alle verwendeten Meldungen des Skriptes abspeichere.
Diese Meldungen kann ich auch bei Bedarf per Include-Anweisungen individuell zusammen stellen.

Beispiel (auszug):

Code: Alles auswählen

// global object
var /*Object*/gO = {};
// message part of global object -> {N} are placholders for varable inserts
    gO.messages = 
    {
        scriptName: scriptName,
        version: ": Version: {0} ",
        versionN: scriptVersion + " (" + scriptDate + ")",
        winTitleNoFile: scriptName + " {0} eingeschränkte Testversion",
        serialNumber: "Seriennummer: {0}",
        winTitleCsvSettings: " Csv-Einstellungen: {0} Datensätze eingelesen",
        scriptCancelled: "{0} wurde abgebrochen!",
        errorInFunction2: "{0}\ninZeile {1} \nFehlernummer {2} \nin Funktion {3} gerufen von {4}",
        errorInFunction3: "{0}\nin Zeile {1} \nFehlernummer {2} \n*****\n",
        errorInFunction4: "{0}\nin Zeile {1} \nFehlernummer {2} \nStack:\n {3}*****\n",
        bugInErrorHandler: "Fehler im Errorhandler!\nschicken Sie bitte einen Screenshot an den Entwickler\nMeldung: {0}\nin Zeile: {1}",
        cantCreateFile4WriteObject: "Konnte Dateiobjekt für Datei\n{0}\nnicht zum Schreiben einrichten\nSystemmeldung: {1}\n in Zeile: {2}",
        cantOpenFile4Write: "Konnte Datei\n{0}\nnicht zum Schreiben öffnen!\nSystemmeldung: {1}\n in Zeile: {2}",
        cantWriteFileContent: "Konnte Inhalt der Datei\n{0}\nnicht schreiben!\nSystemmeldung: {1}\n in Zeile: {2}",
        cantWriteFileClose: "Konnte Datei\n{0}\nnicht schließen!\nSystemmeldung: {1}\n in Zeile: {2}", 
        cantCreateFile4ReadObject: "Konnte Dateiobjekt für Datei\n{0}\nnicht zum Lesen einrichten\nSystemmeldung: {1}\n in Zeile: {2}",
        cantOpenFile4Read: "Konnte Datei\n{0}\nnicht zum Lesen öffnen!\nSystemmeldung: {1}\n in Zeile: {2}",
        cantReadFileContent: "Konnte Inhalt der Datei\n{0}\nnicht lesen!\nSystemmeldung: {1}\n in Zeile: {2}",
        cantReadFileClose: "Konnte Datei\n{0}\nnicht schließen!\nSystemmeldung: {1}\n in Zeile: {2}", 
        fileNotExist: "Konnte Datei\n{0}\nnicht finden!\n", 
        UnixIsNotSupported: "Unix wird von diesem Skript nicht unterstützt",
        notSupportedOperatingSystem: "Betriebsystem wird nicht unterstützt",
        selectInddFile: "INDD-Datei auswählen:", 
        selectCsvFile: "CSV-Datei auswählen:", 
        selectFiles: "Dateien auswählen:", 
        selectStartFolder: "Startverzeichnis auswählen:", 
        titleInfoBox: "Information von {0}:",
        textFiles: "Textdateien:*.txt",
        csvFiles: "CSV-Dateien:*.csv",
    }
Diese Meldungen werden zur Laufzeit so aufgerufen:

Code: Alles auswählen

alert(gO.messages.UnixIsNotSupported)
Dieses (Teil)Objekt ist bei Bedarf leicht serialisierbar:

Code: Alles auswählen

var messages = gO.messages.toSource()
und kann bei Bedarf in eine Datei geschrieben werden und auch wieder aus einer Datei eingelesen und per eval
in das globale Objekt zurückgeladen werden.

Ich realisiere das so, dass ich vor Öffnen des Skriptfensters prüfe, ob eventuell eine externe Meldungsdatei vorliegt.
Finde ich solche eine Datei, überlade ich die internen Meldungen des Skriptes durch die externen Meldungen mit diesem Skript:

Code: Alles auswählen

{
// DESCRIPTION ReadExternalMessages
// Dateiname: ReadExternalMessages.jsx
//  © 2013 by Werner Perplies, EDV-Anwendungsberatung, 
// https://www.weepee.de, email: werner.perplies@weepee.de 
// created: Thu Jul 25 2013 10:00:56 GMT+0200
// modified: Tue Aug 06 2013 14:27:03 GMT+0200
// [modified]
// [end of header]
    /*void*/function readExternalMessages()
    {
        try
        {
            var file = File(gO.settingPath+$.locale+"/messages/Messages.dat");
            if (file.exists) 
            {
                var msgs = readFile2String (file.fsName).split("\n");
                var c = ""; var name = "";
                for (var i =0; i<msgs.length; i++)
                {
                    if (msgs[i].trim().length==0) continue;
                    if (msgs[i].trim()=="{") continue;
                    if (msgs[i].trim()=="}") continue;
                    if (msgs[i].trim() == "gO.messages =") continue;
                    if (msgs[i].trim().left(2) == "//") continue;
                    var line = msgs[i].trim().replace(/: \"/g,":\"").split(":\"");
                    
                    if (line.length>1)
                    {
                        name = line[0].trim();
                        c = line[1].trim();
                        c = c.left(c.length-1).trim();
                        c = c.replaceStringsInList([["\\n","\n","g"], ["\\s","\s","g"], ["\\t","\t","g"]]);
                        // mSg[name] = c.left(c.length-1).trim().decodeEscapedUnicode();            
                        mSg[name] = c.left(c.length-1).trim().decodeEscapedUnicode();            
                    }                
                }
            }
        }
        catch (error)
        {
            alert(error.message + "\nFheler in Zeile: " + error.line);
        }
        return;
    }
}
Beachten Sie bitte, dass diese Funktion ein Teil meiner Skripte ist und weitere Hilfsfunktionen benötigt.


Zuletzt als neu markiert von wernerperplies am 16. Apr 2017, 08:50.
einen schönen Tag wünscht

Werner Perplies
https://www.weepee.de

Antworten

Zurück zu „Snippets und Libs“