=encoding utf-8

=head1 NAME

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

=head1 SYNOPSIS

    greple -Mxlate -e ENGINE --xlate pattern target-file

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

=head1 VERSION

Version 0.9908

=head1 DESCRIPTION

Το μοντούλο B<xlate> του Greple εντοπίζει τα επιθυμητά τμήματα κειμένου και τα αντικαθιστά με το μεταφρασμένο κείμενο. Αυτή τη στιγμή, έχουν ενσωματωθεί ως μηχανή πίσω από το σύστημα οι DeepL (F<deepl.pm>) και ChatGPT (F<gpt3.pm>). Πειραματική υποστήριξη για τα gpt-4 και gpt-4o περιλαμβάνεται επίσης.

Εάν θέλετε να μεταφράσετε κανονικά τμήματα κειμένου σε ένα έγγραφο που έχει γραφεί στο στυλ pod της Perl, χρησιμοποιήστε την εντολή B<greple> με το C<xlate::deepl> και το πρόσθετο C<perl> όπως εξής:

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

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

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

Στη συνέχεια, προσθέστε την επιλογή C<--xlate> για να μεταφράσετε την επιλεγμένη περιοχή. Στη συνέχεια, θα εντοπίσει τα επιθυμητά τμήματα και θα τα αντικαταστήσει με την έξοδο της εντολής B<deepl>.

Από προεπιλογή, το αρχικό και το μεταφρασμένο κείμενο εκτυπώνονται στη μορφή "conflict marker" που είναι συμβατή με το L<git(1)>. Χρησιμοποιώντας τη μορφή C<ifdef>, μπορείτε να πάρετε το επιθυμητό τμήμα με την εντολή L<unifdef(1)> εύκολα. Η μορφή εξόδου μπορεί να καθοριστεί με την επιλογή B<--xlate-format>.

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

Εάν θέλετε να μεταφράσετε ολόκληρο το κείμενο, χρησιμοποιήστε την επιλογή B<--match-all>. Αυτό είναι ένας συντομευμένος τρόπος για να καθορίσετε το πρότυπο C<(?s).+> που ταιριάζει με ολόκληρο το κείμενο.

Τα δεδομένα μορφής δείκτη σύγκρουσης μπορούν να προβληθούν σε στυλ δίπλα-δίπλα με την εντολή C<sdif> με την επιλογή C<-V>. Δεδομένου ότι δεν έχει νόημα η σύγκριση με βάση την κάθε συμβολοσειρά, συνιστάται η επιλογή C<--no-cdif>. Αν δεν χρειάζεστε να χρωματίσετε το κείμενο, καθορίστε το C<--no-textcolor> (ή C<--no-tc>).

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

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

=head1 NORMALIZATION

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

=over 2

=item *

Αφαιρέστε τα κενά στην αρχή και στο τέλος κάθε γραμμής.

=item *

Εάν μια γραμμή τελειώνει με έναν χαρακτήρα στίξης πλήρους πλάτους, ενώστε τη με την επόμενη γραμμή.

=item *

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

=item *

Αν είτε η αρχή είτε το τέλος μιας γραμμής δεν είναι πλήρες χαρακτήρας πλάτους, ενώστε τις εισάγοντας έναν χαρακτήρα κενού.

=back

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

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

    greple -Mxlate -E normalized -E not-normalized

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

=head1 MASKING

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

    --xlate-setopt maskfile=MASKPATTERN

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

Ένα πολύπλοκο πρότυπο μπορεί να γραφτεί σε πολλαπλές γραμμές με αναδρομή με backslash.

Πώς η μετατροπή του κειμένου με τη χρήση μάσκας μπορεί να δει κανείς μέσω της επιλογής B<--xlate-mask>.

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

=head1 OPTIONS

=over 7

=item B<--xlate>

=item B<--xlate-color>

=item B<--xlate-fold>

=item B<--xlate-fold-width>=I<n> (Default: 70)

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

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

Το αποτέλεσμα της εντολής πηγαίνει στην τυπική έξοδο, οπότε αν χρειάζεται ανακατεύθυνση σε αρχείο, ή σκεφτείτε να χρησιμοποιήσετε το πρόσθετο L<App::Greple::update>.

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

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

=item B<--xlate-engine>=I<engine>

Καθορίζει τη μηχανή μετάφρασης που θα χρησιμοποιηθεί. Εάν καθορίσετε απευθείας το μοντούλο της μηχανής, όπως C<-Mxlate::deepl>, δεν χρειάζεται να χρησιμοποιήσετε αυτήν την επιλογή.

Προς το παρόν, διατίθενται οι ακόλουθες μηχανές:

=over 2

=item * B<deepl>: DeepL API

=item * B<gpt3>: gpt-3.5-turbo

=item * B<gpt4>: gpt-4-turbo

=item * B<gpt4o>: gpt-4o-mini

Η διεπαφή του B<gpt-4o> είναι ασταθής και δεν μπορεί να εγγυηθεί ότι λειτουργεί σωστά αυτή τη στιγμή.

=back

=item B<--xlate-labor>

=item B<--xlabor>

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

=item B<--xlate-to> (Default: C<EN-US>)

Καθορίστε τη γλώσσα προορισμού. Μπορείτε να λάβετε τις διαθέσιμες γλώσσες με την εντολή C<deepl languages> όταν χρησιμοποιείτε τη μηχανή B<DeepL>.

=item B<--xlate-format>=I<format> (Default: C<conflict>)

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

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

=over 4

=item B<conflict>, B<cm>

Ο αρχικός και μετατραπέντας κείμενος εκτυπώνονται σε μορφή δείκτη σύγκρουσης L<git(1)>.

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

Μπορείτε να ανακτήσετε το αρχικό αρχείο με την επόμενη εντολή L<sed(1)>.

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

=item B<colon>, I<:::::::>

```html

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

<div class="original">

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

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

=item B<ifdef>

Ο αρχικός και μετατραπέντας κείμενος εκτυπώνονται σε μορφή L<cpp(1)> C<#ifdef>.

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

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

    unifdef -UORIGINAL -DJA foo.ja.pm

=item B<space>

=item B<space+>

Original:

=item B<xtxt>

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

=back

=item B<--xlate-maxlen>=I<chars> (Default: 0)

Μεταφράστε το παρακάτω κείμενο στα ελληνικά, γραμμή-προς-γραμμή.

=item B<--xlate-maxline>=I<n> (Default: 0)

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

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

=item B<-->[B<no->]B<xlate-progress> (Default: True)

Δείτε το αποτέλεσμα της μετάφρασης σε πραγματικό χρόνο στην έξοδο STDERR.

=item B<--xlate-stripe>

Χρησιμοποιήστε το πρόσθετο L<App::Greple::stripe> για να εμφανίσετε το ταιριασμένο τμήμα με τρόπο ζέβρα. Αυτό είναι χρήσιμο όταν τα ταιριασμένα τμήματα είναι συνδεδεμένα πίσω-μπροστά.

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

=item B<--xlate-mask>

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

=item B<--match-all>

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

=back

=head1 CACHE OPTIONS

Το πρόσθετο B<xlate> μπορεί να αποθηκεύει το μεταφρασμένο κείμενο για κάθε αρχείο και να το διαβάζει πριν από την εκτέλεση για να εξαλείψει τον χρόνο που απαιτείται για την επικοινωνία με τον διακομιστή. Με την προεπιλεγμένη στρατηγική προσωρινής αποθήκευσης C<auto>, διατηρεί τα δεδομένα προσωρινής αποθήκευσης μόνο όταν το αρχείο προσωρινής αποθήκευσης υπάρχει για το συγκεκριμένο αρχείο στόχο.

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

=over 7

=item --xlate-cache=I<strategy>

=over 4

=item C<auto> (Default)

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

=item C<create>

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

=item C<always>, C<yes>, C<1>

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

=item C<clear>

Καθαρίστε πρώτα τα δεδομένα της προσωρινής μνήμης.

=item C<never>, C<no>, C<0>

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

=item C<accumulate>

Από προεπιλογή, τα αχρησιμοποίητα δεδομένα αφαιρούνται από το αρχείο της προσωρινής μνήμης. Εάν δεν θέλετε να τα αφαιρέσετε και να τα κρατήσετε στο αρχείο, χρησιμοποιήστε την επιλογή C<accumulate>.

=back

=item B<--xlate-update>

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

=back

=head1 COMMAND LINE INTERFACE

Μπορείτε εύκολα να χρησιμοποιήσετε αυτό το πρόσθετο από τη γραμμή εντολών χρησιμοποιώντας την εντολή C<xlate> που περιλαμβάνεται στη διανομή. Δείτε τη σελίδα εγχειριδίου C<xlate> για τη χρήση.

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

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

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

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

Διαβάστε το ιαπωνικό άρθρο στην ενότητα L</ΔΕΙΤΕ ΕΠΙΣΗΣ> για λεπτομέρειες.

=head1 EMACS

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

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

=head1 ENVIRONMENT

=over 7

=item DEEPL_AUTH_KEY

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

=item OPENAI_API_KEY

Κλειδί επαλήθευσης OpenAI.

=back

=head1 INSTALL

=head2 CPANMINUS

    $ cpanm App::Greple::xlate

=head2 TOOLS

Πρέπει να εγκαταστήσετε τα εργαλεία γραμμής εντολών για το DeepL και το ChatGPT.

L<https://github.com/DeepLcom/deepl-python>

L<https://github.com/tecolicom/App-gpty>

=head1 SEE ALSO

L<App::Greple::xlate>

L<App::Greple::xlate::deepl>

L<App::Greple::xlate::gpt3>

=over 2

=item * L<https://hub.docker.com/r/tecolicom/xlate>

Εικόνα εμφιάλωσης Docker.

=item * L<https://github.com/DeepLcom/deepl-python>

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

=item * L<https://github.com/openai/openai-python>

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

=item * L<https://github.com/tecolicom/App-gpty>

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

=item * L<App::Greple>

Δείτε το εγχειρίδιο B<greple> για λεπτομέρειες σχετικά με το πρότυπο κειμένου προορισμού. Χρησιμοποιήστε τις επιλογές B<--inside>, B<--outside>, B<--include>, B<--exclude> για να περιορίσετε την περιοχή της αντιστοίχισης.

=item * L<App::Greple::update>

Μπορείτε να χρησιμοποιήσετε τον μονάδα C<-Mupdate> για να τροποποιήσετε αρχεία με βάση το αποτέλεσμα της εντολής B<greple>.

=item * L<App::sdif>

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

=item * L<App::Greple::stripe>

Χρήση του μοντέλου Greple B<stripe> με την επιλογή B<--xlate-stripe>.

=back

=head2 ARTICLES

=over 2

=item * L<https://qiita.com/kaz-utashiro/items/1c1a51a4591922e18250>

Μεταφράστε το παρακάτω κείμενο στα Ελληνικά, γραμμή προς γραμμή.

=item * L<https://qiita.com/kaz-utashiro/items/a5e19736416ca183ecf6>

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

=item * L<https://qiita.com/kaz-utashiro/items/1b9e155d6ae0620ab4dd>

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

=back

=head1 AUTHOR

Kazumasa Utashiro

=head1 LICENSE

Copyright © 2023-2025 Kazumasa Utashiro.

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

=cut
