Πώς μεταφράζω τον ιστότοπό μου με πράκτορα ΤΝ και TranslatePress και πού έκανε λάθη

03.10.2026

Γιατί ξεκίνησα

Το fixops.pro έχει τέσσερις γλώσσες: τα αγγλικά ως κύρια, καθώς και γερμανικά, ελληνικά και ουκρανικά. Η χειροκίνητη μετάφραση κάθε σελίδας, κάθε ετικέτας φόρμας και κάθε ονόματος κατηγορίας παίρνει πολύ χρόνο, ενώ η αυτόματη μετάφραση του ίδιου του προσθέτου συχνά βγαίνει στεγνή και ανακριβής. Αποφάσισα να δοκιμάσω μια διαφορετική προσέγγιση: να αναθέσω τη ρουτίνα σε έναν πράκτορα ΤΝ και να κρατήσω εγώ τον έλεγχο.

Αυτή η ερευνητική σημείωση περιγράφει πώς λειτουργεί, τι βγήκε και ποια λάθη εντόπισα στην πορεία.

Ένα πείραμα με το Claude

Χρησιμοποιώ την ΤΝ στη δουλειά μου εδώ και καιρό και ήθελα να δω πόσο μακριά μπορώ να φτάσω με το Claude της Anthropic σε μία συγκεκριμένη εργασία: έναν πολύγλωσσο ιστότοπο WordPress. Δεν με ενδιέφερε να «ζητήσω από ένα μοντέλο να μεταφράσει μια παράγραφο», αλλά να το ενσωματώσω σε μια πραγματική διαδικασία: να βρίσκει μόνο του τις αμετάφραστες συμβολοσειρές, να γράφει το αποτέλεσμα εκεί που το περιμένει το πρόσθετο και να μην χαλάει τον ιστότοπο στην πορεία.

Πώς λειτουργεί τεχνικά

Το ίδιο το TranslatePress καταχωρίζει στο WordPress μόνο μερικές ενέργειες ρυθμίσεων (για παράδειγμα τη λίστα γλωσσών) και από προεπιλογή δεν είναι ανοιχτές στους πράκτορες μέσω MCP. Δεν έχει ενέργειες για ανάγνωση και εγγραφή των ίδιων των μεταφράσεων. Αυτό το κομμάτι που έλειπε το έγραψα ως ένα μικρό πρόσθετο, TranslatePress AI Bridge. Προσθέτει στον ιστότοπο «δυνατότητες» (abilities) για εργασία με το λεξικό, και από εκεί συνδέονται οι πράκτορες.

Επίπεδο ιστότοπου: WordPress Abilities

Από το WordPress 6.9 ο πυρήνας διαθέτει Abilities API: ένα πρόσθετο δηλώνει μικρές λειτουργίες με περιγραφή των εισόδων και των εξόδων τους. Το δικό μου πρόσθετο δηλώνει επτά τέτοιες:

AbilityΤι κάνει
get-stringsΕπιστρέφει συμβολοσειρές λεξικού της επιλεγμένης γλώσσας, σελίδα προς σελίδα. Από προεπιλογή μόνο τις αμετάφραστες.
register-page-stringsΦορτώνει μια σελίδα στη γλώσσα-στόχο ώστε το TranslatePress να προσθέσει τις συμβολοσειρές της στο λεξικό.
save-translationsΓράφει ζεύγη «αναγνωριστικό και μετάφραση» μέσω του δικού του επιπέδου ερωτημάτων του TranslatePress.
get-excluded-selectors και update-excluded-selectorsΔιαβάζει και αλλάζει τη λίστα «Να μη μεταφράζονται αυτοί οι επιλογείς».
purge-stringsΔιαγράφει άχρηστες αμετάφραστες συμβολοσειρές με αναγνωριστικό ή κανονική έκφραση.
translate-via-apiΜεταφράζει αμετάφραστες συμβολοσειρές με το Claude, μέσω του κλειδιού API που έχει οριστεί στο πρόσθετο.

Επίπεδο σύνδεσης: MCP

Το Model Context Protocol συνδέει τέτοιες δυνατότητες με έναν πράκτορα ΤΝ ως εργαλεία. Ο ιστότοπος τρέχει το MCP Adapter, που δημοσιεύει τις σημειωμένες δυνατότητες. Ο πράκτορας ρωτά πρώτα τον ιστότοπο τι μπορεί να κάνει και ποιες παραμέτρους έχει κάθε ενέργεια, και μόνο μετά τις καλεί.

Έτσι στη συνομιλία λέω στο Claude «μετάφρασε τις συμβολοσειρές στα ελληνικά» και εκείνο διαβάζει το λεξικό, μεταφράζει και γράφει το αποτέλεσμα μόνο του. Δεν χρειάζεται να ανοίξω τον οπτικό επεξεργαστή του TranslatePress και να περιμένω την admin-ajax ουρά αιτημάτων.

Αυτόνομο επίπεδο: το δικό μου κλειδί Anthropic API

Η εργασία μέσω συνομιλίας σημαίνει ότι πρέπει να κάθομαι και να παρακολουθώ. Για να μπορεί ο ιστότοπος να μεταφράζει μόνος του, χωρίς πελάτη και χωρίς ανοιχτή συνεδρία MCP, πρόσθεσα στο πρόσθετο υποστήριξη του Anthropic API, με το δικό μου κλειδί (τη χρέωση την κάνει η Anthropic στον κάτοχο του κλειδιού). Υπάρχουν τρεις τρόποι να ξεκινήσει μια εκτέλεση:

  • ένα κουμπί στις ρυθμίσεις του προσθέτου,
  • μια εντολή WP-CLI: wp trpab translate --lang=de_DE --dry-run, και μετά η ίδια χωρίς --dry-run;
  • η δυνατότητα translate-via-api ή η ενσωματωμένη μηχανή «Claude (Anthropic API)» στην αυτόματη μετάφραση του TranslatePress.

Από προεπιλογή το πρόσθετο χρησιμοποιεί το μοντέλο claude-haiku-4-5 στέλνει 40 συμβολοσειρές ανά αίτημα και το πολύ 200 συμβολοσειρές ανά εκτέλεση. Στις ρυθμίσεις μπορούν να οριστούν γλωσσάριο και σημειώσεις ύφους, για παράδειγμα «γράφε Website και όχι Webseite». Το κλειδί μπορεί να βρίσκεται στο wp-config.php, σε μεταβλητή περιβάλλοντος ή κρυπτογραφημένο στη βάση δεδομένων. Η τελευταία επιλογή δεν εμφανίζει ποτέ ξανά το κλειδί.

Μοντέλο εμπιστοσύνης

Έστησα την εμπιστοσύνη έτσι ώστε ο πράκτορας να μπορεί να κάνει λάθη χωρίς μεγάλες συνέπειες:

  • Δικαιώματα. Τα ίδια με του επεξεργαστή του TranslatePress (manage_options από προεπιλογή).
  • Κατάσταση «μηχανική». save-translations αποθηκεύει μεταφράσεις με κατάσταση «μηχανική» και από προεπιλογή δεν αντικαθιστά ποτέ συμβολοσειρές που έχει ελέγξει άνθρωπος.
  • Δοκιμαστική εκτέλεση. Η εγγραφή, η διαγραφή και η μετάφραση μέσω API εκτελούνται από προεπιλογή ως δοκιμαστικές, δηλαδή δείχνουν τι θα γινόταν χωρίς να αλλάξουν τίποτα.
  • Μόνο ο ίδιος ο ιστότοπος. register-page-strings ζητά μόνο διευθύνσεις URL του δικού του τομέα.
  • Αντίγραφο ασφαλείας. Πριν από μαζικές λειτουργίες χρειάζεστε ένα αντίγραφο των wp_trp_dictionary_* πινάκων.

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

Τι πήγε στραβά

Σκουπίδια στο λεξικό

Μόλις ο πράκτορας κατέγραψε την πρώτη σελίδα, το λεξικό γέμισε με πολύ περιττό υλικό:

  • ονόματα εικονιδίων (check_circle, gpp_bad, volunteer_activism). Πρόκειται για τη γραμματοσειρά Material Symbols, όπου ένα εικονίδιο ορίζεται ως κείμενο, και το πρόσθετο το πήρε τίμια για λέξεις,
  • κείμενο προτύπου του Divi όπως lorem ipsum και «Your content goes here»,
  • δοκιμαστικές αναρτήσεις όπως «Hello world!»,
  • η γραμμή που πληκτρολογείται στην κεφαλίδα: εμφανίζεται γράμμα προς γράμμα και κάθε ενδιάμεση έκδοση (checking client-c.io … res, … resp, … respo) έγινε ξεχωριστή συμβολοσειρά,
  • αριθμοί και ζώνη ώρας όπως 18ms και GMT+2.

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

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

  • πρόσθεσα στις εξαιρέσεις του προσθέτου τα στοιχεία που περιέχουν δυναμικό περιεχόμενο (#tickerText, [data-count-to], .notranslate);
  • μετέφερα τα εικονίδια από το κείμενο στο CSS: αντί για μια λέξη στον κώδικα, το εικονίδιο σχεδιάζεται πλέον με content στο φύλλο στυλ. Το πρόσθετο δεν βλέπει αυτό το κείμενο, οπότε οι συμβολοσειρές δεν εμφανίζονται πια.

Τα αναγνωριστικά δεν είναι κοινά

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

Η προσωρινή μνήμη δείχνει την παλιά σελίδα

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

Οι σελίδες χωρίς αναρτήσεις δεν μεταφράζονται

Η κατηγορία «Off the Grid» είχε δημιουργηθεί αλλά δεν είχε ακόμη αναρτήσεις και η σελίδα της επέστρεφε σφάλμα 404. Οι συμβολοσειρές με το όνομά της εμφανίστηκαν στο λεξικό μόνο όταν η κατηγορία άρχισε να εμφανίζεται σε άλλες σελίδες.

Πού έκανε λάθη η ΤΝ

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

Στα ελληνικά:

  • μια ανύπαρκτη λέξη αντί για «ξεκίνησα» (στο κείμενο υπήρχε «Ύργισα» αντί για «Ξεκίνησα»),
  • μια διατύπωση που σημαίνει «ιστότοποι που χάνονται εξαιτίας χάκερ» αντί για «ιστότοποι που παραβιάζονται»,
  • τα στοιχεία λίστας τελείωναν με το σύμβολο «;». Στα ελληνικά αυτό είναι ερωτηματικό, οπότε η λίστα διαβαζόταν σαν αλυσίδα ερωτήσεων,
  • η λέξη «πρόγραμμα» αντί για «εταιρεία» εκεί που εννοούνταν ένα πρακτορείο,
  • αρκετά τυπογραφικά λάθη και λάθη συμφωνίας.

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

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

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

Πώς ελέγχω την ποιότητα

  • Κατάσταση συμβολοσειράς. Κάθε μετάφραση αποθηκεύεται με κατάσταση «μηχανική». Οι συμβολοσειρές που έχει ελέγξει άνθρωπος παίρνουν την κατάσταση «ελεγμένη» και ο πράκτορας τις αφήνει από προεπιλογή ήσυχες.
  • Δοκιμαστική εκτέλεση. Κάθε μαζική ενέργεια, ιδίως η διαγραφή, εκτελείται πρώτα σε λειτουργία που δεν αλλάζει τίποτα και δείχνει μόνο μια λίστα.
  • Φυσικός ομιλητής. Για γλώσσες που δεν ξέρετε χρειάζεστε τουλάχιστον έναν αναγνώστη. Για τα ελληνικά αυτό είναι το βήμα που θα έκανα νωρίτερα την επόμενη φορά.
  • Έλεγχος της ζωντανής σελίδας. Δεν εμπιστεύομαι μια εγγραφή στο λεξικό μέχρι να δω τη μετάφραση στη ζωντανή σελίδα, με παρακαμμένη την προσωρινή μνήμη.

Τι να ελέγξετε πριν το επαναλάβετε

  1. Άδεια και όροι. Το πρόσθετό μου είναι φτιαγμένο για το δωρεάν TranslatePress και λειτουργεί μέσω του δικού του επιπέδου ερωτημάτων. Οι επί πληρωμή εκδόσεις και τα πρόσθετα μπορεί να έχουν δικούς τους όρους χρήσης, γι' αυτό διαβάστε τους πριν συνδέσετε πράκτορα ΤΝ σε αυτά και ρωτήστε την υποστήριξη αν έχετε αμφιβολίες.
  2. Σε ποιον ανήκουν τα κείμενα. Οι συμβολοσειρές πάνε σε ένα μοντέλο. Για τον δικό σας ιστότοπο αυτό είναι εντάξει, αλλά δεν πρέπει να στέλνετε κείμενα πελατών με αυτόν τον τρόπο χωρίς συγκατάθεση.
  3. Ποιος πληρώνει. Με το API κάθε εκτέλεση χρεώνεται στο κλειδί σας. Ξεκινήστε με δοκιμαστική εκτέλεση: δείχνει πόσες συμβολοσειρές και πόσα tokens θα χρειαστούν.
  4. Αντίγραφο ασφαλείας. Πριν από μαζικές λειτουργίες κάντε αντίγραφο των πινάκων του λεξικού.

Σύνοψη

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

Το κύριο αποτέλεσμα όμως είναι άλλο. Ο πράκτορας επιταχύνει τη ρουτίνα, ενώ η ευθύνη για την ακρίβεια μένει στον άνθρωπο. Χωρίς έλεγχο, μια λέξη που δεν υπάρχει θα είχε μείνει στο ελληνικό κείμενο.

Ας συνεργαστούμε

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

Σε αυτή τη σελίδα

Χρειάζεστε βοήθεια;

Αντιμετωπίζετε αυτό στον
δικό σας ιστότοπο;

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

01

gpp_bad

Ο ιστότοπός σας έχει χαλάσει

Παραβιάστηκε, έπεσε ή συμπεριφέρεται περίεργα μετά από ενημέρωση; Πείτε μου τι συμβαίνει με δικά σας λόγια. Συνήθως απαντώ μέσα σε 30 λεπτά.

02

groups

Διαχειρίζεσαι πρακτορείο

Διορθώσεις white-label, αόρατες στον πελάτη σας. Μου στέλνετε το πρόβλημα, το διορθώνω εγώ, εσείς προωθείτε την αναφορά μου.

03

volunteer_activism

Είστε μη κερδοσκοπική οργάνωση που βοηθά την Ουκρανία

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

Περισσότερα ευρήματα

Εκτός δικτύου

03.10.2026

Γεια σας, είμαι ο Alex και αυτό είναι το FixOps.pro