ΛειτουργίεςPluginΤιμολόγησηΠόροι
Αλλαγή γλώσσας
Πόροι.po vs .mo vs .pot: Επεξήγηση αρχείων μετάφρασης WordPress

.po vs .mo vs .pot: Επεξήγηση αρχείων μετάφρασης WordPress

SimplePoTranslate Team21 Απριλίου 2026
.po vs .mo vs .pot: Επεξήγηση αρχείων μετάφρασης WordPress

Ανοίγετε τον φάκελο languages ενός θέματος WordPress και βρίσκετε τρία σχεδόν πανομοιότυπα αρχεία: twentytwentyfour.pot, twentytwentyfour-de_DE.po και twentytwentyfour-de_DE.mo. Ίδιο θέμα, ίδια γλώσσα, τρεις διαφορετικές επεκτάσεις. Ποιο από αυτά επεξεργάζεστε; Ποιο φορτώνει στην πραγματικότητα το WordPress; Και γιατί η επεξεργασία του λάθους αρχείου κάνει τις μεταφράσεις σας να εξαφανίζονται σιωπηλά;

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

Αυτός ο οδηγός εξηγεί ακριβώς τι είναι τα αρχεία .pot, .po και .mo, πώς σχετίζονται εντός της ροής εργασίας του GNU Gettext, πού βρίσκονται στο WordPress και γιατί δεν πρέπει ποτέ να ανοίξετε ένα αρχείο .mo σε έναν επεξεργαστή κειμένου. Μέχρι το τέλος θα γνωρίζετε ποιο αρχείο να αγγίξετε και ποιο να αφήσετε στην ησυχία του.

Τι είναι τα αρχεία .pot, .po και .mo;

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

Αυτά τα τρία φορμά προέρχονται όλα από το GNU Gettext, το σύστημα τοπικής προσαρμογής στο οποίο βασίζονται το WordPress, το Drupal και χιλιάδες έργα PHP και C. Το Gettext διαχωρίζει τις αρχικές συμβολοσειρές που γράφει ένας προγραμματιστής από τις μεταφράσεις που παρέχει ένας μεταφραστής, έτσι ώστε η ίδια βάση κώδικα να μπορεί να μιλάει δεκάδες γλώσσες χωρίς να αγγίξει ούτε μία γραμμή PHP.

Σκεφτείτε το σαν μια κάρτα συνταγών. Το .pot είναι η κενή κάρτα με υποδοχές συστατικών αλλά χωρίς ποσότητες. Το .po είναι η κάρτα συμπληρωμένη για ένα συγκεκριμένο πιάτο. Το .mo είναι το πλαστικοποιημένο, αναγνώσιμο από μηχανή αντίγραφο που χρησιμοποιεί η κουζίνα κατά τη διάρκεια του service. Γράφετε στην χάρτινη κάρτα. Ποτέ δεν μουτζουρώνετε την πλαστικοποιημένη.

Το αρχείο .pot: Το κύριο πρότυπο

Ένα αρχείο .pot (Portable Object Template) περιέχει κάθε μεταφράσιμη συμβολοσειρά σε ένα θέμα ή plugin με τις μεταφράσεις να παραμένουν κενές. Είναι η κύρια λίστα που αποστέλλουν οι προγραμματιστές ώστε οι μεταφραστές να γνωρίζουν ακριβώς τι χρειάζεται μετάφραση. Οι γραμμές msgstr είναι κενές επειδή δεν έχει επιλεγεί ακόμη καμία γλώσσα.

#: includes/checkout.php:42
msgid "Add to Cart"
msgstr ""

#: includes/account.php:108
msgid "Your order has been shipped to %s"
msgstr ""

Προσέξτε το κενό msgstr "". Ένα .pot είναι ένα πρότυπο, όχι μια μετάφραση. Το αντιγράφετε μία φορά ανά γλώσσα και συμπληρώνετε τα κενά. Σπάνια επεξεργάζεστε ένα .pot χειροκίνητα. Αναδημιουργείται από τον πηγαίο κώδικα κάθε φορά που αλλάζουν οι συμβολοσειρές.

Το αρχείο .po: Η μεταφράσιμη από τον άνθρωπο μετάφρασή σας

Ένα αρχείο .po (Portable Object) είναι ένα αντίγραφο του .pot με τις γραμμές msgstr συμπληρωμένες για μία γλώσσα. Αυτό είναι το αρχείο που επεξεργάζονται στην πραγματικότητα οι μεταφραστές και οι προγραμματιστές. Είναι απλό κείμενο, αναγνώσιμο από τον άνθρωπο και φιλικό προς τον έλεγχο εκδόσεων.

#: includes/checkout.php:42
msgid "Add to Cart"
msgstr "In den Warenkorb"

#: includes/account.php:108
msgid "Your order has been shipped to %s"
msgstr "Ihre Bestellung wurde an %s versandt"

Το msgid είναι η αρχική αγγλική συμβολοσειρά πηγής και δεν πρέπει ποτέ να αλλάξει. Το msgstr είναι η μετάφρασή σας. Το %s είναι ένας placeholder που πρέπει να παραμείνει ανέπαφος στη μετάφραση — η παράλειψη ή η αναδιάταξή του είναι η πιο συνηθισμένη αιτία προβληματικών διατάξεων, τις οποίες καλύπτουμε λεπτομερώς στον οδηγό μετάφρασης αρχείων PO χωρίς να χαλάσετε τις μεταβλητές κώδικα.

Το αρχείο .mo: Το μεταγλωττισμένο δυαδικό

Ένα αρχείο .mo (Machine Object) είναι η μεταγλωττισμένη, δυαδική έκδοση του .po σας. Το WordPress δεν μπορεί να διαβάσει αρχεία .po αποτελεσματικά κατά την εκτέλεση, επομένως φορτώνει το προ-μεταγλωττισμένο .mo αντ' αυτού. Το άνοιγμα ενός .mo σε έναν επεξεργαστή κειμένου δείχνει μη αναγνώσιμα bytes — προορίζεται για μηχανές, όχι για ανθρώπους.

Όταν το WordPress καλεί τις συναρτήσεις load_textdomain() ή load_theme_textdomain(), αναζητά ένα αρχείο .mo, αναλύει τον δυαδικό του πίνακα κατακερματισμού και ανταλλάσσει κάθε msgid με το αντίστοιχο msgstr εν κινήσει. Αυτή η δυαδική μορφή επιταχύνει τις αναζητήσεις ακόμα και σε ιστοσελίδες με χιλιάδες συμβολοσειρές.

Πώς σχετίζονται τα τρία αρχεία στη ροή εργασίας του Gettext;

Σχηματίζουν μια μονόδρομη διοχέτευση: ο πηγαίος κώδικας γίνεται .pot, το .pot γίνεται ένα .po ανά γλώσσα και κάθε .po μεταγλωττίζεται σε ένα .mo. Οι μεταφράσεις ρέουν πάντα προς τα κάτω.

Ακολουθεί ο πλήρης κύκλος ζωής με τη σειρά:

  1. Ένας προγραμματιστής τυλίγει τις συμβολοσειρές που βλέπει ο χρήστης σε συναρτήσεις Gettext όπως __() και _e() μέσα στον πηγαίο κώδικα PHP.
  2. Ένα εργαλείο σάρωσης διαβάζει την πηγή και δημιουργεί το πρότυπο .pot που περιέχει κάθε τυλιγμένη συμβολοσειρά.
  3. Ένας μεταφραστής αντιγράφει το .pot σε ένα ειδικό για τη γλώσσα .po (για παράδειγμα de_DE.po) και συμπληρώνει κάθε msgstr.
  4. Το ολοκληρωμένο .po μεταγλωττίζεται σε ένα δυαδικό .mo.
  5. Το WordPress φορτώνει το .mo κατά την εκτέλεση και εμφανίζει την μεταφρασμένη ιστοσελίδα.

Όταν ο προγραμματιστής προσθέτει νέες συμβολοσειρές αργότερα, το .pot αναδημιουργείται, οι νέες καταχωρήσεις συγχωνεύονται σε κάθε υπάρχον .po (διατηρώντας παλιές μεταφράσεις), ο μεταφραστής συμπληρώνει τα κενά και το .po μεταγλωττίζεται ξανά σε .mo. Ο κύκλος επαναλαμβάνεται καθ' όλη τη διάρκεια του έργου.

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

Συμβάσεις Ονοματοδοσίας και πού ζουν τα αρχεία

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

Το μοτίβο ονοματοδοσίας για τις μεταφράσεις θεμάτων και plugins είναι:

# Pattern: textdomain-locale.po / .mo
twentytwentyfour-de_DE.po      # German (Germany) translation
twentytwentyfour-de_DE.mo      # compiled binary WordPress loads
twentytwentyfour-fr_FR.po      # French (France)
twentytwentyfour.pot           # template, no locale suffix

Το textdomain ταιριάζει με τη συμβολοσειρά που περνιέται ως δεύτερο όρισμα στις συναρτήσεις Gettext όπως __( 'Add to Cart', 'twentytwentyfour' ). Το locale είναι ένας κωδικός τοπικής προσαρμογής του WordPress, όπως de_DE, fr_FR ή pt_BR. Το πρότυπο .pot δεν φέρει επίθημα τοπικής προσαρμογής επειδή είναι γλωσσικά ουδέτερο.

Η τοποθεσία έχει εξίσου μεγάλη σημασία με την ονομασία. Το WordPress αναζητά σε μερικές προβλέψιμες διαδρομές:

  • Οι μεταφράσεις θέματος αποστέλλονται στον φάκελο wp-content/themes/your-theme/languages/ του ίδιου του θέματος.
  • Οι μεταφράσεις plugin αποστέλλονται στον φάκελο wp-content/plugins/your-plugin/languages/.
  • Οι μεταφράσεις από το translate.wordpress.org και οι παρακάμψεις χρηστών καταλήγουν στους καθολικούς καταλόγους wp-content/languages/themes/ και wp-content/languages/plugins/, οι οποίοι έχουν προτεραιότητα και επιβιώνουν στις ενημερώσεις.

Τοποθετήστε ένα σωστά ονομασμένο αρχείο de_DE.mo στον σωστό φάκελο και οι Γερμανοί επισκέπτες θα βλέπουν Γερμανικά. Τοποθετήστε το ένα φάκελο πιο βαθιά, ή κάντε ορθογραφικό λάθος στο text domain, και το WordPress θα επιστρέψει αθόρυβα στα Αγγλικά χωρίς μήνυμα σφάλματος. Εάν οι μεταφράσεις σας δεν εμφανίζονται, η αναντιστοιχία ονόματος ή διαδρομής είναι η συνήθης αιτία, και ο οδηγός αντιμετώπισης προβλημάτων για χαμένες μεταφράσεις καλύπτει κάθε κοινή αιτία.

Γιατί δεν πρέπει ποτέ να επεξεργάζεστε απευθείας ένα αρχείο .mo

Επειδή ένα αρχείο .mo είναι ένα μεταγλωττισμένο δυαδικό αρχείο, δεν υπάρχει ασφαλής τρόπος να το επεξεργαστείτε χειροκίνητα — και οποιαδήποτε αλλαγή επιβάλλετε θα αντικατασταθεί την επόμενη φορά που το αρχείο .po θα μεταγλωττιστεί ξανά. Το αρχείο .po είναι η πηγή αλήθειας. Το αρχείο .mo είναι ένα αναλώσιμο artifact κατασκευής.

Αυτός ο απλός κανόνας εξηγεί ένα τεράστιο ποσοστό των αιτημάτων υποστήριξης «η μετάφρασή μου άλλαξε αλλά η ιστοσελίδα δεν ενημερώθηκε». Κάποιος αλλάζει μια συμβολοσειρά, αποθηκεύει το .po και ξεχνά να μεταγλωττίσει ξανά το .mo. Το WordPress συνεχίζει να φορτώνει το παλιό δυαδικό αρχείο, οπότε η νέα διατύπωση δεν εμφανίζεται ποτέ. Η λύση είναι πάντα: επεξεργασία του .po, μεταγλώττιση σε .mo, επαναφόρτωση.

Υπάρχει ένας δεύτερος λόγος που ο κανόνας έχει σημασία: τα αρχεία .mo δεν είναι φιλικά προς τη διαφοροποίηση στον έλεγχο εκδόσεων. Επειδή είναι δυαδικά, μια μικρή αλλαγή στη διατύπωση παράγει ένα αδιαφανές blob στην ιστορία του Git σας που κανένας αναθεωρητής δεν μπορεί να διαβάσει. Η διατήρηση του .po ως της παρακολουθούμενης πηγής αλήθειας και η αντιμετώπιση του .mo ως δημιουργημένου artifact διατηρεί το αποθετήριό σας αναθεωρήσιμο και τις μεταφράσεις σας ελέγξιμες.

Η χειροκίνητη εκτέλεση αυτής της διαδικασίας σε δεκάδες γλώσσες είναι κουραστική και επιρρεπής σε σφάλματα. Εδώ είναι που μια ροή εργασίας στο cloud εξοικονομεί πραγματικό χρόνο. Εργαλεία όπως το SimplePoTranslate μεταφράζουν τις συμβολοσειρές του .po σας και επιστρέφουν ένα ενιαίο αρχείο ZIP που περιέχει τα αντίστοιχα .po και .mo μαζί — ήδη μεταγλωττισμένα, σωστά ονομασμένα, έτοιμα να τα τοποθετήσετε στο wp-content/languages/. Δεν υπάρχει τίποτα για να μεταγλωττίσετε χειροκίνητα και καμία πιθανότητα για ένα παλιό .mo.

Εφαρμόζει επίσης το Syntax Locking, το οποίο παγώνει κάθε placeholder όπως %s, %1$s και {name}, συν τις ετικέτες HTML, πριν τη μετάφραση. Οι μεταβλητές σας παραμένουν ανέπαφες, οπότε δεν στέλνετε ποτέ ένα .mo που χαλάει μια διάταξη. Και επειδή λειτουργεί εξ ολοκλήρου στο cloud, δεν υπάρχει επιπλέον plugin που να επιβαρύνει την ιστοσελίδα σας — ανεβάζετε ένα αρχείο και κατεβάζετε ολοκληρωμένες, μεταγλωττισμένες μεταφράσεις.

Συνοψίζοντας

Μόλις ξεκαθαρίσει η διάκριση po vs mo file, όλο το σύστημα μετάφρασης του WordPress σταματά να φαίνεται μυστηριώδες. Το αρχείο .pot είναι το πρότυπο του προγραμματιστή, το αρχείο .po είναι το επεξεργάσιμο αντίγραφο εργασίας του μεταφραστή και το αρχείο .mo είναι το μεταγλωττισμένο δυαδικό που το WordPress στην πραγματικότητα εξυπηρετεί στους επισκέπτες. Οι μεταφράσεις ρέουν προς μία κατεύθυνση — από το πρότυπο στο .po και μετά στο .mo — και εσείς επεξεργάζεστε πάντα μόνο το μεσαίο αρχείο.

Θυμηθείτε τους τρεις κανόνες που αποτρέπουν το ενενήντα τοις εκατό των πονοκεφάλων της μετάφρασης: μην μεταφράζετε ποτέ μέσα σε ένα .pot, να μεταγλωττίζετε πάντα το .mo μετά την επεξεργασία ενός .po, και να αντιστοιχίζετε ακριβώς την ονομασία textdomain-locale. Ακολουθήστε αυτούς τους κανόνες και οι μεταφρασμένες συμβολοσειρές σας θα εμφανίζονται κάθε φορά.

Είστε έτοιμοι να σταματήσετε να παλεύετε με τη χειροκίνητη μεταγλώττιση και ονομασία αρχείων μετάφρασης; Δοκιμάστε το SimplePoTranslate δωρεάν — δεν απαιτείται πιστωτική κάρτα. Ανεβάστε το αρχείο .po ή .pot και λάβετε ένα έτοιμο προς χρήση πακέτο .po + .mo πίσω στη δωρεάν έκδοση μέσα σε λίγα λεπτά.

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