OmegaT 2.9.9 - Εγχειρίδιο χρήστη

# Παράρτημα F. Πρόσθετο για Δημιουργία σεναρίων

## Εισαγωγή

Το πρόσθετο OmegaT-Scripting μας επιτρέπει να τρέχουμε σενάρια που γράφτηκαν σε διάφορες γλώσσες σεναρίων στο OmegaT.

## Εγκατάσταση και Χρήση

Μπορείτε να κατεβάσετε το πρόσθετο για τη δημιουργία σεναρίων του OmegaT από την Ιστοσελίδα μεταφόρτωσης προσθέτων για το OmegaT. Αποσυμπιέστε τα αρχεία και βάλτετα όλα στον κατάλογο "Πρόσθετα" που βρίσκεται στον κατάλογο εγκατάστασης του OmegaT. Αυτός είναι ο κατάλογος που περιέχει το OmegaT.jar. Δημιουργείστε πρώτα τον κατάλογο "Πρόσθετα", αν αυτός δεν υπάρχει ήδη.

Αυτό θα προσθέσει ένα νέο υπομενού Εργαλεία > Δημιουργία σεναρίων. κάτω από το υπομενού Δημιουργία σεναρίων, υπάρχουν στη διάθεση πέντε place holders για τα σενάρια. Αν κάνετε κλικ στη Δημιουργία σεναρίων θα ανοίξει ο Διάλογος δημιουργίας σεναρίων:

Ο Διάλογος δημιουργίας σεναρίων σας επιτρέπει να προσθέσετε ένα προύπάρχον σενάριο στην περιοχή κειμένου και να το τρέξετε πάνω στο ήδη ανοικτό έργο. Για να παραμετροποιήσετε τα χαρακτηριστικά του σεναρίου, κάντε τα εξής:

- Φορτώστε ένα σενάριο στον editor κάνοντας κλικ στο όνομά του, από τον κατάλογο που βλέπετε στο αριστερό παράθυρο.

- Κάντε δεξί κλικ σε ένα κουμπί από το "<1>" ως το "<5>" στο κάτω panel και επιλέξτε "Προσθήκη". Στο παραπάνω παράδειγμα, έχουν προστεθεί ήδη δύο σενάρια (στις θέσεις 1 και 2).

- Όταν κάνετε αριστερό κλικ στον αριθμό, θα τρέξει το επιλεγμένο σενάριο. Μπορείτε να εκκινήσετε τις επιλεγμένες μακροεντολές από το κύριο μενού, αλλά και χρησιμοποιώντας τις καταχωρήσεις τους στο μενού Εργαλεία ή πατώντας Ctrl+Alt+F# (# 1 to 5).

Οι παρακάτω γλώσσες δημιουργίας σεναρίων υλοποιήθηκαν:

- NetRexx (http://www.netrexx.org/): υποστηρίζει την κλασική σύνταξη REXX, χωρίς reserved λεξεις-κλειδιά, με σημαντικές προσθήκες για υποστήριξη αντικειμενοστραφούς προγραμματισμού, με τρόπο συμβατό με το μοντέλο των αντικειμένων της Java. Όλες οι υπάρχουσες βιβλιοθήκες κλάσης Java μπορούν να χρησιμοποιούνται χωρίς τροποποίηση και χωρίς ιδιαίτερη ρύθμιση; συγχρόνως, ένας προγραμαμτιστής Java μπορεί να επιλέξει να χρησιμοποιεί μόνο την κλάση Rexx, από το πακέτο runtime, για μια βελτιωμένη διαχείριση κωδικοσειράς (string) όταν θα γράφει κώδικα προγραμμάτων Java.

- XSLT (Extensible Stylesheet Language Transformations): είναι μια declarative γλώσσα, βασισμένη στην XML και που χρησιμοποιείται για την μετατροπή των εγγράφων XML. Το αρχικό έγγραφο δεν άλλαξε: απλώς δημιουργήθηκε ένα νέο έγγραφο, βασισμένο στο περιεχόμενο ενός προϋπάρχοντος εγγράφου. Το νέο έγγραφο μπορεί να σειριοποιηθεί (έξοδος) από τον επεξεργαστή σε πρότυπη σύνταξη XML ή σε μια άλλη μορφή, σαν την HTML, ή σε απλό κείμενο. Το XSLT χρησιμοποιείται συνήθως για τη μετατροπή δεδομένων μεταξύ διαφορετικών σχημάτων XML ή για την μετατροπή των δεδομένων XML σε ιστοσελίδες ή σε έγγραφα PDF.

- Groovy (http://groovy.codehaus.org): είναι μια δυναμική γλώσσα για την Εικονική Μηχανή Java Virtual machine. Χτίζει πάνω στα δυνατά σημεία της Java αλλά διαθέτει πρόσθετα ισχυρά χαρακτηρισιτκά που εμπνέονται από γλώσσες σαν την Python, τη Ruby και την Smalltalk.

- JavaScript (μερικές φορές, εν συντομία, JS, Να μην συγχέεται με τη Java): είναι μια γλώσσα δημιουργίας σεναρίων βασισμένη σε πρωτότυπα (prototype-based scripting language) που είναι δυναμική, με ασθενή σύνταξη (weakly typed) και διαθέτει συναρτήσεις πρώτης τάξεως (first-class functions). Εϊναι μια γλώσσα multi-paradigm, που υποστηρίζει τα πρότυπα αντικειμενοστραφούς, imperative και λειτουργικού προγραμματισμού. Επειδή είναι η γλώσσα που βρίσκεται πίσω από δημοφιλή λογισμικά, σαν το Firefox, αποτελεί ένα γνωστό και προτιμώμενο εργαλείο προγραμματισμού στο χώρο του Ανοικτού Κώδικα.

Όλες οι γλώσσες έχουν πρόσβαση στο μοντέλο αντικειμώνων του OmegaT, με το ίδιο το έργο να απποτελεί το κορυφαίο αντικείμενο. Το παρακάτω κομματάκι κώδικα σε groovy, π.χ, θα σαρώσει όλα τα τμήματα κειμένου, σε όλα αρχεία του τρέχοντος έργου και, αν η μετάφραση υπάρχει, θα εκτυπώσει το αρχείο προέλευσης και το αρχείο-στόχο του τμήματος:

        files = project.projectFiles;
        for (i in 0 ..< files.size())
        {
            for (j in 0 ..< files[i].entries.size())
            {
                currSegment = files[i].entries[j];
                if (project.getTranslationInfo(currSegment))
                {
                    source = currSegment.getSrcText();
                    target = project.getTranslationInfo(currSegment).translation;
                    console.println(source + " >>>> " + target);
                }
            }
        }