ΛειτουργίεςPluginΤιμολόγησηΠόροι
Αλλαγή γλώσσας
ΠόροιΠώς να μεταφράσετε αρχεία .po του Drupal με τεχνητή νοημοσύνη

Πώς να μεταφράσετε αρχεία .po του Drupal με τεχνητή νοημοσύνη

SimplePoTranslate Team6 Ιουνίου 2026
Πώς να μεταφράσετε αρχεία .po του Drupal με τεχνητή νοημοσύνη

Οι περισσότεροι άνθρωποι συνδέουν τα αρχεία .po με το WordPress, αλλά η μορφή gettext προϋπάρχει του WordPress για δεκαετίες και τροφοδοτεί τη μετάφραση διεπαφής σε ολόκληρο τον κόσμο του ανοιχτού λογισμικού. Το Drupal είναι ένας από τους μεγαλύτερους χρήστες του. Εάν διαχειρίζεστε έναν πολύγλωσσο ιστότοπο Drupal, κάθε ετικέτα μενού, περιγραφή πεδίου, μήνυμα σφάλματος και συμβολοσειρά ενότητας διέρχεται από αρχεία .po ακριβώς όπως και στο WordPress, απλά με διαφορετική διάλεκτο δείκτη θέσης και διαφορετική ροή εργασίας εισαγωγής. Και όπως ακριβώς στο WordPress, τη στιγμή που ο ιστότοπός σας ξεπερνά μια χούφτα συμβολοσειρές, η χειροκίνητη μετάφραση αυτών των αρχείων γίνεται το σημείο συμφόρησης.

Αυτός ο οδηγός αφορά το πώς να μεταφράσετε αρχεία Drupal po με τεχνητή νοημοσύνη χωρίς να αλλοιώσετε τα στοιχεία που κάνουν το Drupal Drupal. Θα εξετάσουμε το σύστημα μετάφρασης του Drupal, από πού προέρχονται στην πραγματικότητα οι συμβολοσειρές, τη σύνταξη των δεικτών θέσης που διαφέρει από το WordPress και πρέπει οπωσδήποτε να διατηρηθεί, καθώς και τον πλήρη κύκλο εξαγωγής, μετάφρασης και επανεισαγωγής, συμπεριλαμβανομένων των εντολών drush που τον καθιστούν επαναλαμβανόμενο.

Πώς λειτουργεί το σύστημα μετάφρασης του Drupal

Το Drupal χειρίζεται τη μετάφραση της διεπαφής μέσω της βασικής ενότητας locale (μερικές φορές ονομάζεται "Μετάφραση Διεπαφής" στο σύγχρονο Drupal). Μόλις ενεργοποιηθεί, διαχειρίζεται έναν πίνακα βάσης δεδομένων με αρχικές συμβολοσειρές και τις μεταφράσεις τους ανά γλώσσα, και μπορεί να εισάγει και να εξάγει αυτές τις μεταφράσεις ως τυπικά αρχεία gettext .po.

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

Σε αντίθεση με το WordPress, όπου κάθε πρόσθετο και θέμα συνοδεύεται από τα δικά του αρχεία .po και .mo σε έναν κατάλογο languages/, το Drupal κεντροποιεί τις συμβολοσειρές διεπαφής στη βάση δεδομένων του και αντιμετωπίζει το .po ως μορφή ανταλλαγής. Εξάγετε, επεξεργάζεστε το αρχείο και το εισάγετε ξανά. Το βήμα του μεταγλωττισμένου .mo που απαιτεί το WordPress χειρίζεται εσωτερικά.

Από πού προέρχονται οι συμβολοσειρές

Οι συμβολοσειρές του Drupal προέρχονται από τρία μέρη, και μια πλήρης μετάφραση πρέπει να τα καλύπτει όλα:

  • Πυρήνας (Core) διαθέτει χιλιάδες μεταφράσιμες συμβολοσειρές για τη διεπαφή διαχείρισης, τις φόρμες και τα μηνύματα συστήματος.
  • Συμβολικές ενότητες (Contrib modules) (Views, Webform, Commerce και οι υπόλοιπες) καταχωρούν η καθεμία τις δικές της συμβολοσειρές μέσω της συνάρτησης t().
  • Τα Θέματα (Themes) συνεισφέρουν συμβολοσειρές προτύπων, ετικέτες περιοχών και περιγραφές ρυθμίσεων θέματος.

Όταν εξάγετε από το /admin/config/regional/translate, μπορείτε να περιορίσετε την εξαγωγή σε μεταφρασμένες, αμετάφραστες ή όλες τις συμβολοσειρές. Για μια νέα μετάφραση, η εξαγωγή μόνο των αμετάφραστων συμβολοσειρών σάς δίνει ένα εστιασμένο αρχείο .po με ακριβώς την εργασία που απομένει.

Μια πρακτική συνέπεια αυτής της τριπλής δομής πηγών: η μεταφραστική σας εργασία δεν είναι ποτέ πραγματικά "τελειωμένη". Κάθε φορά που προσθέτετε μια συμβολική ενότητα, ενεργοποιείτε μια νέα λειτουργία ή ενημερώνετε τον πυρήνα του Drupal, μια νέα παρτίδα αμετάφραστων καταχωρίσεων msgid εμφανίζεται στους πίνακες locale. Γι' αυτό οι ομάδες του Drupal αντιμετωπίζουν τη μετάφραση ως μια επαναλαμβανόμενη διαδικασία αντί για μια εφάπαξ εργασία εκκίνησης. Ο ίδιος κύκλος εξαγωγής, μετάφρασης, επανεισαγωγής εκτελείται σε κάθε ανάπτυξη που αφορά ενότητες, και όσο πιο γρήγορος είναι αυτός ο κύκλος, τόσο λιγότερο μεταφραστικό χρέος συσσωρεύεται μεταξύ των εκδόσεων.

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

Οι δείκτες θέσης του Drupal δεν είναι δείκτες θέσης του WordPress

Εδώ είναι το πιο σημαντικό πράγμα που πρέπει να κατανοήσετε πριν στείλετε οποιοδήποτε αρχείο .po του Drupal σε έναν μεταφραστή τεχνητής νοημοσύνης: Το Drupal δεν χρησιμοποιεί τους δείκτες θέσης τύπου printf %s και %1$s που κυριαρχούν στο WordPress. Η συνάρτηση t() του Drupal χρησιμοποιεί τρία διακριτά προθέματα δείκτη θέσης, το καθένα με διαφορετική συμπεριφορά διαφυγής (escaping):

  • @variable — η τιμή είναι HTML-escaped, η ασφαλής προεπιλογή για κείμενο που παρέχεται από τον χρήστη.
  • %variable — η τιμή είναι escaped και περικλείεται σε σήμανση έμφασης <em>.
  • :placeholder — χρησιμοποιείται για χαρακτηριστικά URL, περνάει από εξυγίανση URL.

Μια τυπική αρχική συμβολοσειρά του Drupal μοιάζει έτσι στο εξαγόμενο αρχείο .po:

#: core/modules/node/node.module
msgid "@count comments"
msgid_plural "@count comments"
msgstr[0] ""
msgstr[1] ""

#: core/modules/user/user.module
msgid "Welcome @name, you last logged in on %date."
msgstr ""

Εάν ένας μεταφραστής αλλάξει το @count σε @cuenta, αντικαταστήσει το @name με τη μεταφρασμένη λέξη για το "όνομα", ή εισάγει ένα κενό μετατρέποντας το @count σε @ count, ο δείκτης θέσης δεν ταιριάζει πλέον με αυτό που περνά η κλήση t(). Το Drupal τότε εκτυπώνει το κυριολεκτικό token @count στη σελίδα αντί για τον πραγματικό αριθμό. Η μετάφραση φαίνεται ολοκληρωμένη, αλλά ο ιστότοπος είναι εμφανώς χαλασμένος.

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

Γιατί οι γενικοί μεταφραστές αποτυγχάνουν εδώ

Επικολλήστε αυτήν τη συμβολοσειρά node.module σε ένα πλαίσιο μηχανικής μετάφρασης για καταναλωτές και συχνά θα δείτε το @count παραμορφωμένο, το %date που δεσμεύεται από <em> να τοπικοποιείται σε ένα διαφορετικό token, ή τις πληθυντικές μορφές να συμπτύσσονται σε μία. Κανένα από αυτά τα εργαλεία δεν δημιουργήθηκε με γνώση της σημασιολογίας του gettext. Μεταφράζουν κείμενο· δεν κατανοούν ότι το @count είναι μια σύμβαση με τον κώδικα της εφαρμογής.

Μια μεταφραστική διαδικασία με γνώση του gettext και Κλείδωμα Σύνταξης αντιμετωπίζει τα @variable, %variable και :placeholder ως αμετάβλητα tokens. Κλειδώνονται πριν τη μετάφραση και αποκαθίστανται μετά, έτσι ώστε η περιβάλλουσα πρόταση να μεταφράζεται ενώ οι δείκτες θέσης παραμένουν ανέγγιχτοι. Το ίδιο κλείδωμα καλύπτει τα %s και %1$s του WordPress, το {{name}} του i18next και το ενσωματωμένο HTML, γι' αυτό ένα μόνο εργαλείο μπορεί να εξυπηρετήσει ένα έργο Drupal, Symfony ή Laravel τόσο εύκολα όσο ένα WordPress. Οι πληθυντικές μορφές του Drupal μέσω του msgid_plural διατηρούνται ως πληθυντικές μορφές αντί να ισοπεδώνονται, κάτι που είναι σημαντικό επειδή οι γλώσσες του Drupal μπορεί να έχουν από μία έως έξι πληθυντικές παραλλαγές.

Υπάρχει επίσης ένας πιο λεπτός τρόπος αποτυχίας που αξίζει να επισημανθεί. Οι συμβολοσειρές του Drupal συχνά ενσωματώνουν inline σήμανση και συνδέσμους μέσα στο μεταφράσιμο κείμενο, όπως Read the <a href=":url">documentation</a> όπου το :url είναι ένας δείκτης θέσης και οι ετικέτες <a> πρέπει να επιβιώσουν. Ένας μεταφραστής που δεν κατανοεί τη δομή μπορεί να μεταφράσει το χαρακτηριστικό href, να αφαιρέσει την ετικέτα κλεισίματος ή να τοπικοποιήσει το όνομα του δείκτη θέσης. Η Τεχνητή Νοημοσύνη με επίγνωση πλαισίου (Context-Aware AI) που διαβάζει ολόκληρη τη συμβολοσειρά ως μονάδα, σε συνδυασμό με το κλείδωμα των tokens, διατηρεί ανέπαφη τόσο τη σήμανση όσο και τη σύμβαση :url, ενώ μεταφράζει μόνο το αναγνώσιμο από τον άνθρωπο κείμενο "documentation" που βρίσκεται ενδιάμεσα.

Ο κύκλος εξαγωγής, μετάφρασης, επανεισαγωγής

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

Βήμα 1: Εξαγωγή του αρχείου PO

Μπορείτε να εξάγετε από το UI στη διεύθυνση /admin/config/regional/translate επιλέγοντας μια γλώσσα και ένα πεδίο εξαγωγής, ή να το κάνετε από τη γραμμή εντολών. Η ενότητα locale εκθέτει την εξαγωγή μέσω των υπηρεσιών μετάφρασης του Drupal, και οι περισσότερες ομάδες την αυτοματοποιούν με scripts. Μια τυπική κλήση drush για την ενεργοποίηση εισαγωγής μετάφρασης (το αντίστροφο, το οποίο χρησιμοποιούμε στο βήμα τρία) μοιάζει με αυτό:

# Re-import a translated PO file for Spanish, overwriting customized strings
drush locale:import es /var/www/translations/es-untranslated.po \
  --type=customized --override=all

# Rebuild caches so the new strings render immediately
drush cache:rebuild

Για την πλευρά της εξαγωγής, η φόρμα εξαγωγής διαχείρισης παράγει το αρχείο .po· πολλές ομάδες ενσωματώνουν την υπηρεσία εξαγωγής locale σε μια μικρή προσαρμοσμένη εντολή Drush για πλήρη αυτοματοποίηση. Είτε έτσι είτε αλλιώς καταλήγετε με ένα τυπικό αρχείο gettext .po που περιέχει τις αμετάφραστες καταχωρίσεις msgid.

Βήμα 2: Μετάφραση του αρχείου

Αυτό είναι το στάδιο όπου η τεχνητή νοημοσύνη αντικαθιστά ώρες χειροκίνητης επεξεργασίας. Ανεβάστε το εξαγόμενο αρχείο .po σε ένα μεταφραστή cloud, επιλέξτε τη γλώσσα-στόχο σας και αφήστε το να επεξεργαστεί. Επειδή τα αρχεία .po του Drupal για έναν μεγάλο ιστότοπο συνήθως ξεπερνούν τα 10MB μόλις συνδυαστούν ο πυρήνας, οι συμβολικές ενότητες και τα θέματα, το Έξυπνο Batching έχει σημασία εδώ: το αρχείο τεμαχίζεται, μεταφράζεται και επανασυναρμολογείται χωρίς να το χωρίσετε χειροκίνητα ή να φτάσετε σε όρια μεγέθους. Η έξοδος είναι ένα πλήρες αρχείο .po με κάθε msgstr συμπληρωμένο και κάθε δείκτη θέσης @count, %date και :url ακριβώς εκεί που ξεκίνησε.

Βήμα 3: Επανεισαγωγή στο Drupal

Εισάγετε το μεταφρασμένο αρχείο πίσω μέσω του /admin/config/regional/translate ή μέσω της εντολής drush locale:import που φαίνεται παραπάνω, και στη συνέχεια αναδομήστε την cache. Το Drupal συγχωνεύει τις μεταφράσεις στους πίνακες locale του, και οι συμβολοσειρές εμφανίζονται στον ιστότοπο αμέσως. Εκτελέστε τον κύκλο ξανά κάθε φορά που προσθέτετε μια ενότητα ή ενημερώνετε τον πυρήνα, καθώς κάθε ένα φέρνει νέες αμετάφραστες συμβολοσειρές.

Μια λεπτομέρεια εισαγωγής που πρέπει να γίνει σωστά: η σημαία --override ελέγχει αν οι εισερχόμενες μεταφράσεις αντικαθιστούν τις υπάρχουσες. Χρησιμοποιήστε --override=all όταν θέλετε το αρχείο που μεταφράστηκε με τεχνητή νοημοσύνη να είναι έγκυρο, ή μια πιο συντηρητική ρύθμιση αν έχετε ρυθμίσει χειροκίνητα ορισμένες συμβολοσειρές στο UI του Drupal που δεν θέλετε να αντικατασταθούν. Για τις περισσότερες αυτοματοποιημένες διαδικασίες, η αντιμετώπιση του αρχείου .po ως της πηγής αλήθειας και η αντικατάσταση των πάντων διατηρεί το σύστημα προβλέψιμο: το αρχείο στον έλεγχο έκδοσης είναι αυτό που δείχνει ο ιστότοπος, τελεία και παύλα.

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

Το Drupal PO είναι μια μορφή μεταξύ πολλών

Αξίζει να σημειωθεί ότι το gettext .po δεν είναι ο μόνος τρόπος με τον οποίο το Drupal χειρίζεται τη μετάφραση. Οι οντότητες διαμόρφωσης και περιεχομένου μπορούν επίσης να ανταλλάσσονται ως XLIFF, το οποίο είναι το πρότυπο στο οποίο βασίζεται η ενότητα Translation Management Tool (TMGMT) για ροές εργασίας επαγγελματιών προμηθευτών μετάφρασης. Εάν η τοπική προσαρμογή του Drupal εκτελείται μέσω XLIFF αντί για αρχεία .po διεπαφής, οι αρχές διατήρησης των δεικτών θέσης είναι πανομοιότυπες, αλλά η δομή του αρχείου διαφέρει, και καλύπτουμε αυτήν την περίπτωση στο μετάφραση αρχείων XLIFF για Drupal, Symfony και Angular.

Για το επίπεδο μετάφρασης διεπαφής, ωστόσο, το .po παραμένει το κύριο εργαλείο. Ο κύκλος εξαγωγής, μετάφρασης με τεχνητή νοημοσύνη, επανεισαγωγής μετατρέπει μια πολύωρη χειροκίνητη αγγαρεία σε λίγα λεπτά επεξεργασίας, και εφόσον το εργαλείο που χρησιμοποιείτε κατανοεί πραγματικά τους δείκτες θέσης gettext, οι συμβάσεις σας @variable επιβιώνουν ανέπαφες και ο ιστότοπός σας στο Drupal παραμένει άθικτος σε κάθε γλώσσα που διαθέτετε.

Έτοιμοι να μεταφράσετε τα αρχεία .po του Drupal χωρίς να χαλάσετε ούτε ένα @variable; Δοκιμάστε το SimplePoTranslate δωρεάν — δεν απαιτείται πιστωτική κάρτα. Η δωρεάν βαθμίδα χειρίζεται τυπικά αρχεία gettext .po και .pot με πλήρες Κλείδωμα Σύνταξης, έτσι ώστε οι δείκτες θέσης του Drupal σας να περνούν ακριβώς όπως αναμένει ο κώδικας.

Μοιραστείτε αυτό το άρθρο