ΛειτουργίεςPluginΤιμολόγησηΠόροι
Αλλαγή γλώσσας
ΠόροιΠώς να μεταγλωττίσετε αρχεία .po σε .mo (4 Μέθοδοι)

Πώς να μεταγλωττίσετε αρχεία .po σε .mo (4 Μέθοδοι)

SimplePoTranslate Team3 Μαΐου 2026
Πώς να μεταγλωττίσετε αρχεία .po σε .mo (4 Μέθοδοι)

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

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

Αυτός ο οδηγός εξηγεί γιατί υπάρχει αυτό το βήμα μεταγλώττισης και στη συνέχεια παρουσιάζει τέσσερις αξιόπιστους τρόπους για να το κάνετε: WP-CLI, η κλασική εντολή msgfmt, το Poedit, και ένα εργαλείο cloud που παράγει το .mo για εσάς αυτόματα. Θα καλύψουμε επίσης την πιο κοινή παγίδα — την παράλειψη επαναμεταγλώττισης — και τη νεότερη μορφή .l10n.php που προτιμά πλέον το WordPress για ταχύτητα.

Γιατί το WordPress φορτώνει .mo και όχι .po;

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

Ένα αρχείο .po βασίζεται σε γραμμές και είναι φιλικό προς τον άνθρωπο. Κάθε καταχώριση συνδυάζει ένα αρχικό msgid με ένα μεταφρασμένο msgstr, συν σχόλια που σημειώνουν από πού προήλθε η συμβολοσειρά. Αυτό είναι εξαιρετικό για επεξεργασία αλλά απαίσιο για την απόδοση — ο διακομιστής θα έπρεπε να αναλύει ξανά ολόκληρο το αρχείο κειμένου σε κάθε αίτημα.

#: includes/cart.php:88
msgid "Your cart is empty"
msgstr "Ihr Warenkorb ist leer"

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

Τέσσερις τρόποι για να μεταγλωττίσετε po σε mo

Δεν υπάρχει ένα μοναδικό "σωστό" εργαλείο — η καλύτερη επιλογή εξαρτάται από τον τρόπο που ήδη εργάζεστε. Παρακάτω παρουσιάζονται τέσσερις αξιόπιστες μέθοδοι, από μια εντολή μιας γραμμής έως μια πλήρως αυτοματοποιημένη ροή εργασίας cloud. Και οι τέσσερις παράγουν το πανομοιότυπο δυαδικό αρχείο .mo που φορτώνει το WordPress κατά την εκτέλεση.

Μέθοδος 1: WP-CLI

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

# Compile every .po file in the languages folder to .mo
wp i18n make-mo languages/

# Compile into a specific destination directory
wp i18n make-mo languages/ build/languages/

Η εντολή make-mo σαρώνει τον φάκελο προορισμού, μεταγλωττίζει κάθε .po που βρίσκει και γράφει ένα αντίστοιχο .mo δίπλα του (ή στον προορισμό που καθορίζετε). Χειρίζεται τις παρτίδες με χάρη, γεγονός που το καθιστά ιδανικό όταν διατηρείτε πολλές γλώσσες ταυτόχρονα. Είναι το προτεινόμενο εργαλείο για οποιοδήποτε έργο που χρησιμοποιεί ήδη το WP-CLI.

Μέθοδος 2: msgfmt

Το αρχικό βοηθητικό πρόγραμμα Gettext για αυτή τη δουλειά είναι το msgfmt, μέρος του πακέτου GNU gettext. Μεταγλωττίζει ένα μόνο .po σε ένα μόνο .mo και είναι διαθέσιμο σε σχεδόν κάθε σύστημα Linux και macOS.

# Compile one file
msgfmt my-plugin-de_DE.po -o my-plugin-de_DE.mo

# Add statistics about translated, fuzzy, and untranslated strings
msgfmt --statistics my-plugin-de_DE.po -o my-plugin-de_DE.mo

# Install it first if missing
#   macOS:  brew install gettext
#   Debian: sudo apt-get install gettext

Η σημαία -o ονομάζει το αρχείο εξόδου. Η σημαία --statistics είναι πραγματικά χρήσιμη — σας λέει πόσες συμβολοσειρές έχουν μεταφραστεί, είναι ασαφείς (fuzzy) ή είναι ακόμα κενές, ώστε να εντοπίσετε μια ατελή μετάφραση πριν την κυκλοφορήσετε. Για τη δημιουργία σεναρίων ενός αρχείου τη φορά, το msgfmt είναι η αξιόπιστη, χωρίς περιττά στοιχεία επιλογή.

Επειδή το msgfmt είναι ένα απλό εργαλείο γραμμής εντολών, εντάσσεται άψογα στην αυτοματοποίηση. Μπορείτε να το τυλίξετε σε ένα shell loop για να μεταγλωττίσετε έναν ολόκληρο φάκελο, ή να το συνδέσετε σε μια CI pipeline έτσι ώστε κάθε commit που αγγίζει ένα .po να παράγει ένα φρέσκο .mo αυτόματα. Ένα κοινό μοτίβο είναι το for f in languages/*.po; do msgfmt "$f" -o "${f%.po}.mo"; done, το οποίο μεταγλωττίζει κάθε γλώσσα με μία μόνο διέλευση. Η σημαία --check προσθέτει επικύρωση, επισημαίνοντας τις αναντιστοιχίες συμβολοσειράς μορφής μεταξύ msgid και msgstr πριν φτάσουν στην παραγωγή — μια φθηνή διασφάλιση έναντι των σφαλμάτων με σπασμένους placeholders που καταστρέφουν σιωπηλά τις μεταφρασμένες διατάξεις.

Μέθοδος 3: Poedit (Μεταγλωττίζει κατά την αποθήκευση)

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

Αυτός είναι ένας λόγος που το Poedit παραμένει δημοφιλές στους μεταφραστές που δεν είναι εξοικειωμένοι με τη γραμμή εντολών. Ανοίγετε το .po, πληκτρολογείτε τις μεταφράσεις σας, πατάτε αποθήκευση και και τα δύο αρχεία ενημερώνονται μαζί. Μπορείτε να επιβεβαιώσετε τη συμπεριφορά στις προτιμήσεις του Poedit, όπου η αυτόματη μεταγλώττιση .mo κατά την αποθήκευση είναι ενεργοποιημένη από προεπιλογή. Το Poedit και παρόμοια εργαλεία επιφάνειας εργασίας εξετάζονται στο κορυφαία 5 δωρεάν εργαλεία για επεξεργασία και μετάφραση αρχείων PO σε Mac και Windows.

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

Μέθοδος 4: Ένα εργαλείο Cloud που δημιουργεί το .mo για εσάς

Η τέταρτη επιλογή αφαιρεί εντελώς το βήμα μεταγλώττισης: χρησιμοποιήστε μια υπηρεσία cloud που επιστρέφει το μεταγλωττισμένο .mo μαζί με το μεταφρασμένο .po. Δεν εκτελείτε ποτέ μια εντολή ή αποθηκεύετε ένα αρχείο δύο φορές — ανεβάζετε, και επιστρέφουν ολοκληρωμένα, σωστά ονομασμένα αρχεία.

Το SimplePoTranslate λειτουργεί ακριβώς με αυτόν τον τρόπο. Ανεβάζετε ένα .po ή .pot, μεταφράζει τις συμβολοσειρές με Context-Aware AI, και επιστρέφει ένα ενιαίο ZIP που περιέχει τα .po και .mo που δημιουργήθηκαν παράλληλα — ήδη μεταγλωττισμένα, ήδη ονομασμένα για να ταιριάζουν με το text domain και το locale σας. Δεν υπάρχει ξεχωριστή διέλευση μεταγλώττισης και καμία πιθανότητα να ξεχάσετε ένα.

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

Η πιο κοινή παγίδα: Ξεχάσατε να επαναμεταγλωττίσετε

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

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

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

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

Μια σημείωση για τη νεότερη μορφή .l10n.php

Οι πρόσφατες εκδόσεις του WordPress εισήγαγαν μια τρίτη μορφή χρόνου εκτέλεσης: .l10n.php. Αντί για ένα δυαδικό αρχείο .mo, οι μεταφράσεις αποθηκεύονται ως ένας απλός πίνακας PHP που η κρυφή μνήμη opcode της PHP μπορεί να κρατήσει στη μνήμη, κάνοντας τις αναζητήσεις ακόμα πιο γρήγορες από ό,τι με τα .mo σε πολυσύχναστους ιστότοπους.

<?php
return [
	'domain'  => 'my-plugin',
	'messages' => [ 'Your cart is empty' => 'Ihr Warenkorb ist leer' ],
];

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

Επίλογος

Για να μεταγλωττίσετε po σε mo αξιόπιστα, επιλέξτε τη μέθοδο που ταιριάζει στον τρόπο εργασίας σας: WP-CLI για παρτίδες γραμμής εντολών, msgfmt για μεμονωμένα αρχεία με στατιστικά, Poedit για αυτόματη μεταγλώττιση κατά την αποθήκευση, ή ένα εργαλείο cloud που δημιουργεί το .mo για εσάς, ώστε το βήμα να μην παραλείπεται ποτέ. Και οι τέσσερις παράγουν το ίδιο δυαδικό αρχείο που χρειάζεται το WordPress κατά την εκτέλεση.

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

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

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