# NAME

App::Greple::xlate - ενότητα υποστήριξης μετάφρασης για το greple

# SYNOPSIS

    greple -Mxlate --xlate-engine gpt5 --xlate pattern target-file

    greple -Mxlate --xlate-engine deepl --xlate pattern target-file

# VERSION

Version 2.01

# DESCRIPTION

**Greple** **xlate** Το module εντοπίζει τα επιθυμητά τμήματα κειμένου και τα αντικαθιστά με το μεταφρασμένο κείμενο. Ο κύριος μηχανισμός είναι ο GPT-5.5 (`llm/gpt5.pm`), ο οποίος καλεί την εντολή [llm](https://llm.datasette.io/)· Περιλαμβάνονται επίσης ο DeepL (`deepl.pm`) και παλαιότεροι μηχανισμοί που βασίζονται στο **gpty**.

Οι μεταφράσεις αποθηκεύονται προσωρινά ανά αρχείο, οπότε η επανεκτέλεση μιας εντολής δεν κοστίζει τίποτα για κείμενο που δεν έχει αλλάξει. Όταν ένα έγγραφο υποστεί επεξεργασία, μόνο οι παραγράφους που έχουν αλλάξει αποστέλλονται εκ νέου στο API· ένας μηχανισμός που λαμβάνει υπόψη το συγκείμενο λαμβάνει επίσης τις γύρω μεταφράσεις, το αρχικό κείμενο γύρω από την αλλαγή και την προηγούμενη έκδοση της επεξεργασμένης παραγράφου, έτσι ώστε η νέα μετάφραση να διατηρεί την καθιερωμένη διατύπωση (βλ. **--xlate-context-window**). Οι ευαίσθητες συμβολοσειρές μπορούν να αποκρύπτονται πριν από τη μετάδοση (βλ. ["ANONYMIZATION AND TEMPLATES"](#anonymization-and-templates)).

Αν θέλετε να μεταφράσετε κανονικά τμήματα κειμένου σε ένα έγγραφο γραμμένο σε στυλ pod της Perl, χρησιμοποιήστε την εντολή **greple** με τα modules `--xlate-engine gpt5` και `perl` ως εξής:

    greple -Mxlate --xlate-engine gpt5 -Mperl --pod --re '^([\w\pP].*\n)+' --all foo.pm

Στην εντολή αυτή, η συμβολοσειρά προτύπων `^([\w\pP].*\n)+` σημαίνει διαδοχικές γραμμές που αρχίζουν με αλφαριθμητικά και γράμματα στίξης. Αυτή η εντολή δείχνει την περιοχή που πρόκειται να μεταφραστεί επισημασμένη. Η επιλογή **--all** χρησιμοποιείται για την παραγωγή ολόκληρου του κειμένου.

<div>
    <p>
    <img width="750" src="https://raw.githubusercontent.com/kaz-utashiro/App-Greple-xlate/main/images/select-area.png">
    </p>
</div>

Στη συνέχεια, προσθέστε την επιλογή `--xlate` για να μεταφράσετε την επιλεγμένη περιοχή. Έτσι, θα εντοπιστούν τα επιθυμητά τμήματα και θα αντικατασταθούν από το αποτέλεσμα της μηχανής μετάφρασης.

Από προεπιλογή, το πρωτότυπο και το μεταφρασμένο κείμενο εκτυπώνονται σε μορφή "conflict marker" συμβατή με το [git(1)](http://man.he.net/man1/git). Χρησιμοποιώντας τη μορφή `ifdef`, μπορείτε να πάρετε εύκολα το επιθυμητό μέρος με την εντολή [unifdef(1)](http://man.he.net/man1/unifdef). Η μορφή εξόδου μπορεί να καθοριστεί με την επιλογή **--xlate-format**.

<div>
    <p>
    <img width="750" src="https://raw.githubusercontent.com/kaz-utashiro/App-Greple-xlate/main/images/format-conflict.png">
    </p>
</div>

Αν θέλετε να μεταφράσετε ολόκληρο το κείμενο, χρησιμοποιήστε την επιλογή **--match-all**. Αυτή είναι μια σύντομη διαδρομή για να καθορίσετε το μοτίβο `(?s).+` που ταιριάζει σε ολόκληρο το κείμενο.

Τα δεδομένα μορφής δείκτη σύγκρουσης μπορούν να προβληθούν σε στυλ side-by-side με την εντολή [sdif](https://metacpan.org/pod/App%3A%3Asdif) με την επιλογή `-V`. Δεδομένου ότι δεν έχει νόημα η σύγκριση ανά συμβολοσειρά, συνιστάται η επιλογή `--no-cdif`. Εάν δεν χρειάζεται να χρωματίσετε το κείμενο, καθορίστε την επιλογή `--no-textcolor` (ή `--no-tc`).

    sdif -V --no-filename --no-tc --no-cdif data_shishin.deepl-EN-US.cm

<div>
    <p>
    <img width="750" src="https://raw.githubusercontent.com/kaz-utashiro/App-Greple-xlate/main/images/sdif-cm-view.png">
    </p>
</div>

# NORMALIZATION

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

- Αφαίρεση του λευκού χώρου στην αρχή και στο τέλος κάθε γραμμής.
- Εάν μια γραμμή τελειώνει με χαρακτήρα στίξης πλήρους πλάτους, συνένωση με την επόμενη γραμμή.
- Εάν μια γραμμή τελειώνει με χαρακτήρα πλήρους πλάτους και η επόμενη γραμμή αρχίζει με χαρακτήρα πλήρους πλάτους, συνενώστε τις γραμμές.
- Εάν είτε το τέλος είτε η αρχή μιας γραμμής δεν είναι χαρακτήρας πλήρους πλάτους, συνδέστε τις με την εισαγωγή ενός χαρακτήρα κενό.

Η διαχείριση των δεδομένων προσωρινής αποθήκευσης γίνεται με βάση το κανονικοποιημένο κείμενο, οπότε ακόμη και αν γίνουν τροποποιήσεις που δεν επηρεάζουν τα αποτελέσματα της κανονικοποίησης, τα δεδομένα μετάφρασης που έχουν αποθηκευτεί στην προσωρινή μνήμη θα εξακολουθήσουν να ισχύουν.

Αυτή η διαδικασία κανονικοποίησης εκτελείται μόνο για το πρώτο (0ο) και το ζυγό πρότυπο. Έτσι, αν καθοριστούν δύο πρότυπα ως εξής, το κείμενο που ταιριάζει στο πρώτο πρότυπο θα υποβληθεί σε επεξεργασία μετά την κανονικοποίηση και δεν θα εκτελεστεί καμία διαδικασία κανονικοποίησης στο κείμενο που ταιριάζει στο δεύτερο πρότυπο.

    greple -Mxlate -E normalized -E not-normalized

Επομένως, χρησιμοποιήστε το πρώτο μοτίβο για κείμενο που πρόκειται να υποστεί επεξεργασία συνδυάζοντας πολλές γραμμές σε μία γραμμή και χρησιμοποιήστε το δεύτερο μοτίβο για προ-διαμορφωμένο κείμενο. Εάν δεν υπάρχει κείμενο προς αντιστοίχιση στο πρώτο μοτίβο, χρησιμοποιήστε ένα μοτίβο που δεν ταιριάζει με τίποτα, όπως `(?!)`.

# MASKING

Περιστασιακά, υπάρχουν τμήματα κειμένου που δεν θέλετε να μεταφραστούν. Για παράδειγμα, ετικέτες σε αρχεία markdown. Το DeepL προτείνει σε τέτοιες περιπτώσεις, το τμήμα του κειμένου που θα εξαιρεθεί να μετατραπεί σε ετικέτες XML, να μεταφραστεί και στη συνέχεια να αποκατασταθεί μετά την ολοκλήρωση της μετάφρασης. Για να υποστηριχθεί αυτό, είναι δυνατό να καθορίσετε τα μέρη που θα αποκρύπτονται από τη μετάφραση.

    --xlate-setopt maskfile=MASKPATTERN

Αυτό θα ερμηνεύσει κάθε γραμμή του αρχείου `MASKPATTERN` ως κανονική έκφραση, θα μεταφράσει τις συμβολοσειρές που ταιριάζουν και θα επαναφέρει μετά την επεξεργασία. Οι γραμμές που ξεκινούν με `#` αγνοούνται.

Τα σύνθετα μοτίβα μπορούν να γραφτούν σε πολλές γραμμές με τη χρήση της νέας γραμμής που διαφεύγει με backslash.

Το πώς μετασχηματίζεται το κείμενο με τη μάσκα μπορεί να φανεί με την επιλογή **--xlate-mask**.

Η απόκρυψη προστατεύει τις σημειώσεις μορφοποίησης από τη μετάφραση. Για να αποκρύψετε ευαίσθητες συμβολοσειρές από την ίδια την υπηρεσία μετάφρασης, ανατρέξτε στο ["ANONYMIZATION AND TEMPLATES"](#anonymization-and-templates)· και οι δύο μέθοδοι μπορούν να χρησιμοποιηθούν μαζί.

Αυτή η διεπαφή είναι πειραματική και μπορεί να αλλάξει στο μέλλον.

# ANONYMIZATION AND TEMPLATES

Οι ευαίσθητες συμβολοσειρές μπορούν να αποκρυφθούν πριν αποσταλούν στο API μετάφρασης και να αποκατασταθούν στην έξοδο. Υπάρχουν τρεις πηγές κανόνων ανωνυμοποίησης: ένα αρχείο λεξικού (**--xlate-anonymize**), ενσωματωμένες σημάνσεις στο ίδιο το έγγραφο (**--xlate-anonymize-mark**) και τιμές YAML στο προλογικό τμήμα (**--xlate-frontmatter**). Κάθε συμβολοσειρά αντικαθίσταται από μια ετικέτα κατηγορίας, όπως `<person id=1 />`, κατά τη διάρκεια της μετάδοσης. Ο στόχος της απόκρυψης είναι αποκλειστικά η μετάδοση μέσω API: τα τοπικά αρχεία προσωρινής αποθήκευσης αποθηκεύουν το αποκατεστημένο απλό κείμενο. Χρησιμοποιήστε το **--xlate-dryrun** για να ελέγξετε ακριβώς τι θα μεταδοθεί.

Για έγγραφα φόρμας (τριμηνιαίες εκθέσεις και παρόμοια), ορίστε εκ των προτέρων τους φορείς και αναφερθείτε σε αυτούς στο κύριο κείμενο:

    ---
    報告者: 山田太郎
    発注会社: アクメ株式会社
    ---
    本件について {{ 報告者 }} が調査を行った。

Μεταφράστε το πρότυπο μία φορά ανά γλώσσα με `--xlate-template` (και `--xlate-frontmatter` όταν οι τιμές διατηρούνται στο αρχείο), και στη συνέχεια αποδώστε κάθε περίπτωση με τη λειτουργία αυτόνομης απόδοσης **pandoc-embedz** — οι τιμές κάτω από το `global:` σε μια εξωτερική διαμόρφωση δεν φτάνουν καθόλου στο API μετάφρασης:

    greple -Mxlate --xlate --xlate-engine=gpt5 --xlate-to=EN-US \
           --xlate-template= --xlate-format=xtxt \
           --match-paragraph --all --need=0 \
           report-template.md > report-template.EN.md
    pandoc-embedz --standalone report-template.EN.md \
                  -c case-123.yaml -o report-123.EN.md < /dev/null

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

    # macros.yaml           # macros-redacted.yaml
    preamble: |             preamble: |
      {% macro person(name) %}{{ name }}{% endmacro %}
                              {% macro person(name) %}(関係者){% endmacro %}

Εξαιρέστε τα μπλοκ embedz από τη μετάφραση όταν ένα έγγραφο τα περιέχει:

    --exclude '^```embedz\n(?s:.*?)^```\n'

# OPTIONS

- **--xlate**
- **--xlate-color**
- **--xlate-fold**
- **--xlate-fold-width**=_n_ (Default: 70)

    Προκαλέστε τη διαδικασία μετάφρασης για κάθε περιοχή που ταιριάζει.

    Χωρίς αυτή την επιλογή, η **greple** συμπεριφέρεται ως κανονική εντολή αναζήτησης. Έτσι, μπορείτε να ελέγξετε ποιο τμήμα του αρχείου θα αποτελέσει αντικείμενο της μετάφρασης πριν από την επίκληση της πραγματικής εργασίας.

    Το αποτέλεσμα της εντολής πηγαίνει στην τυπική έξοδο, οπότε ανακατευθύνετε σε αρχείο αν είναι απαραίτητο, ή σκεφτείτε να χρησιμοποιήσετε την ενότητα [App::Greple::update](https://metacpan.org/pod/App%3A%3AGreple%3A%3Aupdate).

    Η επιλογή **--xlate** καλεί την επιλογή **--xlate-color** με την επιλογή **--color=never**.

    Με την επιλογή **--xlate-fold**, το μετατρεπόμενο κείμενο διπλώνεται κατά το καθορισμένο πλάτος. Το προεπιλεγμένο πλάτος είναι 70 και μπορεί να οριστεί με την επιλογή **--xlate-fold-width**. Τέσσερις στήλες είναι δεσμευμένες για τη λειτουργία run-in, οπότε κάθε γραμμή μπορεί να περιέχει 74 χαρακτήρες το πολύ.

- **--xlate-engine**=_engine_

    Καθορίζει τον μηχανισμό μετάφρασης που θα χρησιμοποιηθεί.

    Αυτή τη στιγμή, οι ακόλουθες μηχανές είναι διαθέσιμες

    - **gpt5**: gpt-5.5 (via the `llm` command)
    - **deepl**: DeepL API (via the `deepl` command)
    - **gpt3**: gpt-3.5-turbo (legacy, via the `gpty` command)
    - **gpt4o**: gpt-4o-mini (legacy, via the `gpty` command)

    Οι ενότητες του κινητήρα αναζητούνται πρώτα στους χώρους ονομάτων του backend (`llm`, μετά `gpty`), και στη συνέχεια απευθείας κάτω από το `App::Greple::xlate`. Έτσι, το `gpt5` φορτώνει το `App::Greple::xlate::llm::gpt5`, το οποίο καλεί την εντολή `llm`, ενώ το `gpt4o` καταφεύγει στο `App::Greple::xlate::gpty::gpt4o`. Χρησιμοποιήστε το `--xlate-setopt backend=gpty` για να επιβάλετε ένα συγκεκριμένο backend.

- **--xlate-labor**
- **--xlabor**

    Αντί να καλείτε τη μηχανή μετάφρασης, αναμένεται να εργαστείτε για. Μετά την προετοιμασία του προς μετάφραση κειμένου, αντιγράφονται στο πρόχειρο. Αναμένεται να τα επικολλήσετε στη φόρμα, να αντιγράψετε το αποτέλεσμα στο πρόχειρο και να πατήσετε return.

- **--xlate-to** (Default: `EN-US`)

    Καθορίστε τη γλώσσα προορισμού. Οι μηχανές LLM δέχονται οποιοδήποτε όνομα ή κωδικό γλώσσας που κατανοεί το μοντέλο· αυτό παρεμβάλλεται στην προτροπή μετάφρασης. Μπορείτε να λάβετε τις διαθέσιμες γλώσσες με την εντολή `deepl languages` όταν χρησιμοποιείτε τη μηχανή **DeepL**.

- **--xlate-from** (Default: `ORIGINAL`)

    Ετικέτα που χρησιμοποιείται για το αρχικό κείμενο στις μορφές εξόδου `conflict`, `colon` και `ifdef`. Με τον κινητήρα **DeepL**, μια μη προεπιλεγμένη τιμή μεταβιβάζεται επίσης ως γλώσσα προέλευσης.

- **--xlate-format**=_format_ (Default: `conflict`)

    Καθορίστε τη μορφή εξόδου για το αρχικό και το μεταφρασμένο κείμενο.

    Οι ακόλουθες μορφές, εκτός του `xtxt`, υποθέτουν ότι το προς μετάφραση τμήμα είναι μια συλλογή γραμμών. Στην πραγματικότητα, είναι δυνατόν να μεταφράσετε μόνο ένα τμήμα μιας γραμμής, αλλά ο προσδιορισμός μιας μορφής εκτός από `xtxt` δεν θα παράγει ουσιαστικά αποτελέσματα.

    - **conflict**, **cm**

        Το αρχικό και το μετατρεπόμενο κείμενο εκτυπώνονται σε μορφή δείκτη σύγκρουσης [git(1)](http://man.he.net/man1/git).

            <<<<<<< ORIGINAL
            original text
            =======
            translated Japanese text
            >>>>>>> JA

        Μπορείτε να ανακτήσετε το αρχικό αρχείο με την επόμενη εντολή [sed(1)](http://man.he.net/man1/sed).

            sed -e '/^<<<<<<< /d' -e '/^=======$/,/^>>>>>>> /d'

    - **colon**, _:::::::_

        Το πρωτότυπο και το μεταφρασμένο κείμενο εξάγονται με το προσαρμοσμένο στυλ δοχείου markdown.

            ::::::: ORIGINAL
            original text
            :::::::
            ::::::: JA
            translated Japanese text
            :::::::

        Το παραπάνω κείμενο θα μεταφραστεί στα ακόλουθα σε HTML.

            <div class="ORIGINAL">
            original text
            </div>
            <div class="JA">
            translated Japanese text
            </div>

        Ο αριθμός των άνω και κάτω τελεία είναι 7 από προεπιλογή. Εάν καθορίσετε ακολουθία άνω και κάτω τελεία όπως `:::::`, χρησιμοποιείται αντί για 7 άνω και κάτω τελεία.

    - **ifdef**

        Το αρχικό και το μετατρεπόμενο κείμενο εκτυπώνονται σε μορφή [cpp(1)](http://man.he.net/man1/cpp) `#ifdef`.

            #ifdef ORIGINAL
            original text
            #endif
            #ifdef JA
            translated Japanese text
            #endif

        Μπορείτε να ανακτήσετε μόνο το ιαπωνικό κείμενο με την εντολή **unifdef**:

            unifdef -UORIGINAL -DJA foo.ja.pm

    - **space**
    - **space+**

        Το πρωτότυπο και το μετατρεπόμενο κείμενο εκτυπώνονται χωριστά με μία κενή γραμμή. Για το `space+`, εκτυπώνεται επίσης μια νέα γραμμή μετά το μετασχηματισμένο κείμενο.

    - **xtxt**

        Εάν η μορφή είναι `xtxt` (μεταφρασμένο κείμενο) ή άγνωστη, εκτυπώνεται μόνο το μεταφρασμένο κείμενο.

- **--xlate-maxlen**=_chars_ (Default: 0)

    Καθορίστε το μέγιστο μήκος του κειμένου που θα αποσταλεί στο API κάθε φορά. Η προεπιλεγμένη τιμή 0 αντιστοιχεί στο όριο του ίδιου του μηχανισμού: για τη δωρεάν υπηρεσία λογαριασμού DeepL, αυτό είναι 128K για το API (**--xlate**) και 5000 για τη διεπαφή του προχείρου (**--xlate-labor**). Μπορείτε να αλλάξετε αυτές τις τιμές αν χρησιμοποιείτε την υπηρεσία Pro.

- **--xlate-maxline**=_n_ (Default: 0)

    Καθορίστε τις μέγιστες γραμμές κειμένου που θα αποστέλλονται ταυτόχρονα στο API.

    Ορίστε αυτή την τιμή σε 1 αν θέλετε να μεταφράζετε μία γραμμή κάθε φορά. Αυτή η επιλογή υπερισχύει της επιλογής `--xlate-maxlen`.

- **--xlate-prompt**=_text_

    Καθορίστε μια προσαρμοσμένη προτροπή που θα σταλεί στον μηχανισμό μετάφρασης. Αυτή η επιλογή είναι διαθέσιμη για τους μηχανισμούς LLM (`gpt3`, `gpt4o`, `gpt5`), αλλά όχι για το DeepL. Μπορείτε να προσαρμόσετε τη συμπεριφορά της μετάφρασης παρέχοντας συγκεκριμένες οδηγίες στο μοντέλο τεχνητής νοημοσύνης. Εάν η προτροπή περιέχει `%s`, θα αντικατασταθεί με το όνομα της γλώσσας προορισμού.

- **--xlate-context**=_text_

    Καθορίστε πρόσθετες πληροφορίες περιβάλλοντος που θα αποστέλλονται στη μηχανή μετάφρασης. Αυτή η επιλογή μπορεί να χρησιμοποιηθεί πολλές φορές για την παροχή πολλαπλών συμβολοσειρών πλαισίου. Οι πληροφορίες πλαισίου βοηθούν τη μηχανή μετάφρασης να κατανοήσει το υπόβαθρο και να παράγει ακριβέστερες μεταφράσεις.

- **--xlate-context-window**=_n_

    (Context-aware engines only, e.g. `gpt5` on the llm backend)
    Αριθμός των περιβάλλοντων μεταφρασμένων τμημάτων που διαβιβάζονται ως πλαίσιο αναφοράς κατά την εκ νέου μετάφραση των τροποποιημένων τμημάτων (προεπιλογή 2). Το πλαίσιο περιλαμβάνει επίσης το αρχικό κείμενο πηγής γύρω από την τροποποιημένη περιοχή (επικεφαλίδες, δομή λίστας, λεζάντες) και, όταν είναι διαθέσιμη, την προηγούμενη έκδοση του τροποποιημένου κειμένου που ανακτάται από την προσωρινή μνήμη, έτσι ώστε να διατηρείται η αμετάβλητη διατύπωση. Ορίστε την τιμή σε 0 για να απενεργοποιήσετε εντελώς τη μετάφραση με βάση το πλαίσιο. Σημειώστε ότι κάθε τροποποιημένη περιοχή μεταφράζεται με τη δική της κλήση API και το πλαίσιο μπορεί να προσθέσει έως και περίπου 8000 χαρακτήρες στην εντολή του συστήματος, οπότε η μετάφραση με βάση το πλαίσιο ανταλλάσσει κάποιο επιπλέον κόστος για τη συνέπεια.

- **--xlate-cache-seed**=_file_

    Αρχικοποιήστε την προσωρινή μνήμη ενός νέου εγγράφου από το αρχείο προσωρινής μνήμης ενός άλλου εγγράφου. Χρήσιμο για περιοδικές αναφορές: αρχικοποιήστε την προσωρινή μνήμη του νέου τεύχους με αυτή του προηγούμενου, έτσι ώστε οι αμετάβλητες παραγράφους να μην μεταφράζονται εκ νέου και οι επεξεργασμένες παραγράφους να διατηρούν τη διατύπωση του προηγούμενου τεύχους. Η αρχική τιμή χρησιμοποιείται μόνο όταν η προσωρινή μνήμη προορισμού είναι κενή· διαφορετικά, αγνοείται με την εμφάνιση προειδοποίησης. Με την προεπιλογή `--xlate-cache=auto`, ο καθορισμός μιας αρχικής τιμής συνεπάγεται επίσης τη δημιουργία του αρχείου προσωρινής μνήμης του νέου εγγράφου.

- **--xlate-anonymize**=_file_

    Ανωνυμοποιήστε ευαίσθητες συμβολοσειρές πριν αποσταλούν στο API μετάφρασης και επαναφέρετέ τις στην έξοδο. Το αρχείο λεξικού παρέχει μία καταχώριση ανά στοιχείο: σε μορφή JSON (κανονική, δημιουργήσιμη από μηχανή)

        [ { "category": "person",  "text": "山田太郎" },
          { "category": "company", "regex": "アクメ(株式会社)?" } ]

    ή σε απλή μορφή γραμμής (`category pattern`, `/.../` για εκφράσεις κανονικών εκφράσεων). Κάθε στοιχείο αντικαθίσταται από μια ετικέτα κατηγορίας όπως `<person id=1 />`· η ίδια συμβολοσειρά λαμβάνει πάντα την ίδια ετικέτα, ώστε το μοντέλο να μπορεί να παρακολουθεί ποιος είναι ποιος. Τα άγνωστα πεδία JSON αγνοούνται, οπότε οι γεννήτριες (π.χ. ένα τοπικό LLM που εξάγει οντότητες) μπορούν να προσθέσουν τις δικές τους σχολιαστικές σημειώσεις. Η κατηγορία `lit` είναι δεσμευμένη. Τα τοπικά αρχεία προσωρινής αποθήκευσης εξακολουθούν να αποθηκεύουν το αποκατεστημένο απλό κείμενο: ο στόχος της απόκρυψης αφορά μόνο τη μετάδοση μέσω API.

    Ένα λεξικό μπορεί να δημιουργηθεί από ένα εξωτερικό εργαλείο — για παράδειγμα, ένα τοπικό μοντέλο που εξάγει ευαίσθητες οντότητες:

        llm -m <local-model> \
            -s 'Extract sensitive entities as a JSON array of objects
                with "category" and "text" fields.' \
            < report.md > report.anon.json
        greple -Mxlate --xlate-anonymize=report.anon.json ...

    Ένα BOM UTF-8 στο αρχείο είναι αποδεκτό. Οι τιμές στη μορφή γραμμής προλογικού υλικού μπορούν να φέρουν ένα σχόλιο στο τέλος μόνο στη δική τους γραμμή, όχι μετά την τιμή.

- **--xlate-anonymize-mark**\[=_regex_\]

    Συλλέξτε καταχωρήσεις ανωνυμοποίησης από ενσωματωμένες επισημάνσεις στο ίδιο το έγγραφο. Σημειώστε την πρώτη εμφάνιση ως `{{ person("山田太郎") }}` και κάθε εμφάνιση της συμβολοσειράς σε ολόκληρο το έγγραφο ανωνυμοποιείται. Η ίδια η σήμανση παραμένει στην πηγή και στη μετάφραση, οπότε ένα έγγραφο μπορεί επίσης να υποβληθεί σε επεξεργασία από έναν επεξεργαστή μακροεντολών τύπου Jinja2 (ορίστε τη μακροεντολή `person` για να εκτυπώσετε ή να αποκρύψετε το όνομα). Μια προσαρμοσμένη _regex_ πρέπει να περιέχει ονομασμένες καταγραφές `(?<category>...)` και `(?<text>...)`.

    Σημειώστε ότι με μια επιλογή προαιρετικής τιμής όπως αυτή, ένα επόμενο όρισμα αρχείου θα θεωρηθεί ως η τιμή: γράψτε `--xlate-anonymize-mark=` (με ένα `=` στο τέλος) όταν χρησιμοποιείτε την προεπιλεγμένη σημειογραφία.

    Μπορούν να διαμορφωθούν εναλλακτικές σημειογραφίες, για παράδειγμα `--xlate-anonymize-mark='@@(?<category>[a-z][a-z0-9_]*):(?<text>[^\n]+?)@@'` για σημάνσεις τύπου `@@person:NAME@@`, ή μια μορφή σχολίου HTML που παραμένει αόρατη στο αποδιδόμενο Markdown. Οι κανόνες σήμανσης συλλέγονται ανά έγγραφο: μια συμβολοσειρά που έχει επισημανθεί σε ένα αρχείο εισόδου δεν αποκρύπτεται σε άλλο αρχείο της ίδιας εκτέλεσης (σε αντίθεση με τις τιμές των προλογικών στοιχείων, οι οποίες συσσωρεύονται σε όλα τα αρχεία).

- **--xlate-template**\[=_regex_\]

    Αντιμετωπίστε τις εκφράσεις προτύπων (προεπιλογή: Jinja2 `{{ ... }}`, `{% ... %}`, `{# ... #}`) ως αδιαφανείς θέσεις κράτησης: δώστε εντολή στο μοντέλο να τις αντιγράψει χωρίς αλλαγές και να επαληθεύσει, ανά μπλοκ, ότι η απόκριση περιέχει ακριβώς τις ίδιες εκφράσεις, η καθεμία τον ίδιο αριθμό φορών. Η σειρά τους ενδέχεται να αλλάξει, καθώς η μετάφραση τις αναδιατάσσει νόμιμα ώστε να ακολουθούν τη σειρά των λέξεων της γλώσσας-στόχου. Μια ελαττωματική έκφραση διακόπτει την εκτέλεση· η προσωρινή μνήμη αποθηκεύεται σε σημείο ελέγχου και παγώνει, οπότε δεν χάνεται τίποτα από ό,τι έχει πληρωθεί.

    Σημειώστε ότι με μια επιλογή προαιρετικής τιμής όπως αυτή, ένα επόμενο όρισμα αρχείου θα θεωρηθεί ως η τιμή: γράψτε `--xlate-template=` (με ένα `=` στο τέλος) όταν χρησιμοποιείτε την προεπιλεγμένη σημειογραφία.

- **--xlate-frontmatter**

    Αντιμετωπίστε ένα αρχικό μπλοκ `---` ... `---` ως «front matter» YAML: να το εξαιρέσετε από τη μετάφραση και από τα τμήματα πλαισίου της φάσης 2, και να προσθέσετε τις επίπεδες `key: value` τιμές του στους κανόνες ανωνυμοποίησης (κατηγορία `var`) ως δίχτυ ασφαλείας. Όταν υπάρχουν πολλά αρχεία εισόδου, οι συλλεγόμενες τιμές αθροίζονται (με προτίμηση στην απόκρυψη).

    Να αφήνετε πάντα μια κενή γραμμή μετά το κλείσιμο `---`. Με ένα πρότυπο αντιστοίχισης τύπου παραγράφου, το front matter που ενώνεται απευθείας με το κύριο κείμενο σχηματίζει ένα ενιαίο μπλοκ που η εξαίρεση δεν μπορεί να καταστείλει (σε αυτή την περίπτωση εμφανίζεται μια προειδοποίηση)· οι τιμές εξακολουθούν να ανωνυμοποιούνται, αλλά τα προλογικά στοιχεία θα αποστέλλονται για μετάφραση.

- **--xlate-glossary**=_glossary_

    Καθορίστε ένα αναγνωριστικό γλωσσαρίου που θα χρησιμοποιηθεί για τη μετάφραση. Αυτή η επιλογή είναι διαθέσιμη μόνο όταν χρησιμοποιείτε τη μηχανή DeepL. Το αναγνωριστικό γλωσσαρίου θα πρέπει να ληφθεί από το λογαριασμό σας DeepL και διασφαλίζει τη συνεπή μετάφραση συγκεκριμένων όρων.

- **--xlate-dryrun**

    Μην καλείτε το API μετάφρασης· αντ’ αυτού, εμφανίστε, μέσω της ένδειξης προόδου, κάθε φορτίο ακριβώς όπως θα μεταδιδόταν (μετά την ανωνυμοποίηση και την απόκρυψη). Χρήσιμο για τον έλεγχο του τι εξέρχεται από το σύστημα και για την εκτίμηση του κόστους μιας εκτέλεσης.

- **--**\[**no-**\]**xlate-progress** (Default: True)

    Δείτε το αποτέλεσμα της μετάφρασης σε πραγματικό χρόνο στην έξοδο STDERR. Το φορτίο `From` εμφανίζεται όπως μεταδίδεται, μετά την ανωνυμοποίηση και την απόκρυψη.

- **--xlate-stripe**

    Χρησιμοποιήστε την ενότητα [App::Greple::stripe](https://metacpan.org/pod/App%3A%3AGreple%3A%3Astripe) για να εμφανίσετε το αντιστοιχισμένο τμήμα με τον τρόπο της λωρίδας ζέβρας. Αυτό είναι χρήσιμο όταν τα αντιστοιχισμένα μέρη συνδέονται πλάτη με πλάτη.

    Η παλέτα χρωμάτων αλλάζει ανάλογα με το χρώμα φόντου του τερματικού. Αν θέλετε να το καθορίσετε ρητά, μπορείτε να χρησιμοποιήσετε **--xlate-stripe-light** ή **--xlate-stripe-dark**.

- **--xlate-mask**

    Εκτελέστε τη λειτουργία μάσκας και εμφανίστε το μετασχηματισμένο κείμενο ως έχει χωρίς αποκατάσταση.

- **--match-all**

    Ορίστε ολόκληρο το κείμενο του αρχείου ως περιοχή-στόχο.

- **--lineify-cm**
- **--lineify-colon**

    Στην περίπτωση των μορφών `cm` και `colon`, η έξοδος χωρίζεται και μορφοποιείται γραμμή προς γραμμή. Επομένως, εάν πρόκειται να μεταφραστεί μόνο ένα τμήμα μιας γραμμής, δεν μπορεί να επιτευχθεί το αναμενόμενο αποτέλεσμα. Αυτά τα φίλτρα διορθώνουν την έξοδο που έχει αλλοιωθεί με τη μετάφραση μέρους μιας γραμμής σε κανονική έξοδο γραμμή προς γραμμή.

    Στην τρέχουσα εφαρμογή, εάν μεταφράζονται πολλά τμήματα μιας γραμμής, η έξοδος γίνεται ως ανεξάρτητες γραμμές.

# CACHE OPTIONS

Η ενότητα **xlate** μπορεί να αποθηκεύσει το αποθηκευμένο κείμενο της μετάφρασης για κάθε αρχείο και να το διαβάσει πριν από την εκτέλεση, ώστε να εξαλειφθεί η επιβάρυνση από την ερώτηση στον διακομιστή. Με την προεπιλεγμένη στρατηγική κρυφής μνήμης `auto`, διατηρεί τα δεδομένα της κρυφής μνήμης μόνο όταν το αρχείο κρυφής μνήμης υπάρχει για το αρχείο-στόχο.

Χρησιμοποιήστε το **--xlate-cache=clear** για να ξεκινήσετε τη διαχείριση της κρυφής μνήμης ή για να καθαρίσετε όλα τα υπάρχοντα δεδομένα της κρυφής μνήμης. Μόλις εκτελεστεί με αυτή την επιλογή, θα δημιουργηθεί ένα νέο αρχείο cache, αν δεν υπάρχει, και στη συνέχεια θα διατηρηθεί αυτόματα.

- --xlate-cache=_strategy_
    - `auto` (Default)

        Διατήρηση του αρχείου κρυφής μνήμης εάν υπάρχει.

    - `create`

        Δημιουργεί κενό αρχείο κρυφής μνήμης και τερματίζει.

    - `always`, `yes`, `1`

        Διατηρεί την κρυφή μνήμη ούτως ή άλλως εφόσον ο στόχος είναι κανονικό αρχείο.

    - `clear`

        Καθαρίστε πρώτα τα δεδομένα της κρυφής μνήμης.

    - `never`, `no`, `0`

        Δεν χρησιμοποιεί ποτέ το αρχείο κρυφής μνήμης ακόμη και αν υπάρχει.

    - `accumulate`

        Σύμφωνα με την προεπιλεγμένη συμπεριφορά, τα αχρησιμοποίητα δεδομένα αφαιρούνται από το αρχείο προσωρινής αποθήκευσης. Αν δεν θέλετε να τα αφαιρέσετε και να τα διατηρήσετε στο αρχείο, χρησιμοποιήστε το `accumulate`.
- **--xlate-update**

    Αυτή η επιλογή επιβάλλει την ενημέρωση του αρχείου cache ακόμη και αν δεν είναι απαραίτητο.

# COMMAND LINE INTERFACE

Μπορείτε εύκολα να χρησιμοποιήσετε αυτήν την ενότητα από τη γραμμή εντολών χρησιμοποιώντας την εντολή `xlate` που περιλαμβάνεται στη διανομή. Ανατρέξτε στη σελίδα man `xlate` για τη χρήση.

Η εντολή `xlate` υποστηρίζει μακρές επιλογές τύπου GNU, όπως `--to-lang`, `--from-lang`, `--engine` και `--file`. Χρησιμοποιήστε την εντολή `xlate -h` για να δείτε όλες τις διαθέσιμες επιλογές.

Η εντολή `xlate` λειτουργεί σε συνεργασία με το περιβάλλον Docker, οπότε ακόμα και αν δεν έχετε τίποτα εγκατεστημένο στο χέρι, μπορείτε να τη χρησιμοποιήσετε εφόσον το Docker είναι διαθέσιμο. Χρησιμοποιήστε την επιλογή `-D` ή `-C`.

Οι λειτουργίες του Docker διεκπεραιώνονται από το [App::dozo](https://metacpan.org/pod/App%3A%3Adozo), το οποίο μπορεί επίσης να χρησιμοποιηθεί ως αυτόνομη εντολή. Η εντολή `dozo` υποστηρίζει το αρχείο ρυθμίσεων `.dozorc` για μόνιμες ρυθμίσεις εμπορευματοκιβωτίων.

Επίσης, δεδομένου ότι παρέχονται makefiles για διάφορα στυλ εγγράφων, η μετάφραση σε άλλες γλώσσες είναι δυνατή χωρίς ειδικές προδιαγραφές. Χρησιμοποιήστε την επιλογή `-M`.

Μπορείτε επίσης να συνδυάσετε τις επιλογές Docker και `make`, ώστε να μπορείτε να εκτελέσετε το `make` σε περιβάλλον Docker.

Η εκτέλεση όπως `xlate -C` θα ξεκινήσει ένα κέλυφος με το τρέχον αποθετήριο git που λειτουργεί συνδεδεμένο.

Διαβάστε το ιαπωνικό άρθρο στην ενότητα ["SEE ALSO"](#see-also) για λεπτομέρειες.

# EMACS

Φορτώστε το αρχείο `xlate.el` που περιλαμβάνεται στο αποθετήριο για να χρησιμοποιήσετε την εντολή `xlate` από τον επεξεργαστή Emacs. Η συνάρτηση `xlate-region` μεταφράζει τη δεδομένη περιοχή. Η προεπιλεγμένη γλώσσα είναι η `EN-US` και μπορείτε να καθορίσετε τη γλώσσα που θα την καλέσετε με το όρισμα prefix.

<div>
    <p>
    <img width="750" src="https://raw.githubusercontent.com/kaz-utashiro/App-Greple-xlate/main/images/emacs.png">
    </p>
</div>

# ENVIRONMENT

- DEEPL\_AUTH\_KEY

    Ορίστε το κλειδί ελέγχου ταυτότητας για την υπηρεσία DeepL.

- OPENAI\_API\_KEY

    Κλειδί πιστοποίησης OpenAI, που χρησιμοποιείται από τους παλαιότερους μηχανισμούς **gpty**. Ο μηχανισμός **gpt5** που βασίζεται στο `llm` διαβάζει επίσης αυτή τη μεταβλητή, αλλά λειτουργούν και τα κλειδιά που αποθηκεύονται με το `llm keys set openai`.

- GREPLE\_XLATE\_CACHE

    Ορίστε την προεπιλεγμένη στρατηγική προσωρινής αποθήκευσης (βλ. ["CACHE OPTIONS"](#cache-options)).

# INSTALL

## CPANMINUS

    $ cpanm App::Greple::xlate

## TOOLS

Εγκαταστήστε το εργαλείο γραμμής εντολών για τον κινητήρα που χρησιμοποιείτε: `llm` για τον κινητήρα **gpt5**, `deepl` για το DeepL, `gpty` για τους παλαιούς κινητήρες GPT.

[https://llm.datasette.io/](https://llm.datasette.io/)

[https://github.com/DeepLcom/deepl-python](https://github.com/DeepLcom/deepl-python)

[https://github.com/tecolicom/App-gpty](https://github.com/tecolicom/App-gpty)

# SEE ALSO

## MODULES

[App::Greple::xlate::llm](https://metacpan.org/pod/App%3A%3AGreple%3A%3Axlate%3A%3Allm), [App::Greple::xlate::deepl](https://metacpan.org/pod/App%3A%3AGreple%3A%3Axlate%3A%3Adeepl)

[App::dozo](https://metacpan.org/pod/App%3A%3Adozo) - Γενικός δρομέας Docker που χρησιμοποιείται από το xlate για λειτουργίες εμπορευματοκιβωτίων

## RELATED MODULES

- [App::Greple](https://metacpan.org/pod/App%3A%3AGreple)

    Ανατρέξτε στο εγχειρίδιο **greple** για λεπτομέρειες σχετικά με το μοτίβο κειμένου-στόχου. Χρησιμοποιήστε τις επιλογές **--inside**, **--outside**, **--include**, **--exclude** για να περιορίσετε την περιοχή αντιστοίχισης.

- [App::Greple::update](https://metacpan.org/pod/App%3A%3AGreple%3A%3Aupdate)

    Μπορείτε να χρησιμοποιήσετε την ενότητα `-Mupdate` για να τροποποιήσετε αρχεία με βάση το αποτέλεσμα της εντολής **greple**.

- [App::sdif](https://metacpan.org/pod/App%3A%3Asdif)

    Χρησιμοποιήστε την εντολή **sdif** για να εμφανίσετε τη μορφή του δείκτη σύγκρουσης δίπλα-δίπλα με την επιλογή **-V**.

- [App::Greple::stripe](https://metacpan.org/pod/App%3A%3AGreple%3A%3Astripe)

    Greple **stripe** χρήση της μονάδας **--xlate-stripe** με την επιλογή **--xlate-stripe**.

## RESOURCES

- [https://hub.docker.com/r/tecolicom/xlate](https://hub.docker.com/r/tecolicom/xlate)

    Εικόνα εμπορευματοκιβωτίου Docker.

- [https://github.com/tecolicom/getoptlong](https://github.com/tecolicom/getoptlong)

    Η βιβλιοθήκη `getoptlong.sh` που χρησιμοποιείται για την ανάλυση των επιλογών στο σενάριο `xlate` και το [App::dozo](https://metacpan.org/pod/App%3A%3Adozo).

- [https://llm.datasette.io/](https://llm.datasette.io/)

    Η εντολή `llm` που χρησιμοποιείται από τον κινητήρα **gpt5** για την πρόσβαση σε μοντέλα LLM.

- [https://github.com/DeepLcom/deepl-python](https://github.com/DeepLcom/deepl-python)

    DeepL βιβλιοθήκη Python και εντολή CLI.

- [https://github.com/openai/openai-python](https://github.com/openai/openai-python)

    Βιβλιοθήκη OpenAI Python

- [https://github.com/tecolicom/App-gpty](https://github.com/tecolicom/App-gpty)

    Διεπαφή γραμμής εντολών OpenAI

## ARTICLES

- [https://qiita.com/kaz-utashiro/items/1c1a51a4591922e18250](https://qiita.com/kaz-utashiro/items/1c1a51a4591922e18250)

    Μονάδα Greple για τη μετάφραση και την αντικατάσταση μόνο των απαραίτητων τμημάτων με το DeepL API (στα ιαπωνικά)

- [https://qiita.com/kaz-utashiro/items/a5e19736416ca183ecf6](https://qiita.com/kaz-utashiro/items/a5e19736416ca183ecf6)

    Δημιουργία εγγράφων σε 15 γλώσσες με την ενότητα DeepL API (στα ιαπωνικά)

- [https://qiita.com/kaz-utashiro/items/1b9e155d6ae0620ab4dd](https://qiita.com/kaz-utashiro/items/1b9e155d6ae0620ab4dd)

    Αυτόματη μετάφραση περιβάλλοντος Docker με DeepL API (στα ιαπωνικά)

# AUTHOR

Kazumasa Utashiro

# LICENSE

Copyright © 2023-2026 Kazumasa Utashiro.

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
