Ένα αρχείο εισόδου, πέντε μορφές εξόδου: Πώς να κάνετε τις μεταφράσεις σας στο WordPress ανθεκτικές στο μέλλον

Ξοδέψατε τρεις εβδομάδες μεταφράζοντας το θέμα σας στο WordPress στα Ισπανικά. Το αρχείο .po είναι τέλειο — κάθε συμβολοσειρά ελεγμένη, κάθε μεταβλητή άθικτη, κάθε πληθυντικός τύπος σωστός. Στη συνέχεια, ο πελάτης σας αποφασίζει να μεταβεί από ένα κλασικό θέμα PHP σε μια headless εγκατάσταση με React στο frontend.
Ξαφνικά το αρχείο σας .po είναι άχρηστο. Η εφαρμογή React χρειάζεται .json. Τα legacy PHP widgets εξακολουθούν να χρειάζονται .mo. Ο freelancer που χειρίζεται την εφαρμογή για κινητά θέλει .xliff. Και κανείς δεν έχει χρόνο να μεταφράσει ξανά 4.000 συμβολοσειρές σε τρεις διαφορετικές μορφές.
Αυτό δεν είναι μια ακραία περίπτωση. Είναι η πραγματικότητα της σύγχρονης ανάπτυξης WordPress, όπου τα θέματα αποστέλλονται με στοιχεία PHP και JavaScript, τα πρόσθετα χρησιμοποιούν ένα μείγμα Gettext και i18next και οι πελάτες αλλάζουν γνώμη για την αρχιτεκτονική πιο συχνά από ό,τι αλλάζουν τους κωδικούς πρόσβασής τους.
Γιατί οι μορφές αρχείων μετάφρασης έχουν μεγαλύτερη σημασία από ποτέ
Πριν από πέντε χρόνια, η μετάφραση στο WordPress ήταν απλή. Είχατε ένα αρχείο .po (αναγνώσιμη από τον άνθρωπο πηγή) και ένα αρχείο .mo (μεταγλωττισμένο δυαδικό). Αυτό ήταν. Κάθε θέμα, κάθε πρόσθετο, κάθε εργαλείο μετάφρασης μιλούσε την ίδια γλώσσα.
Σήμερα, το οικοσύστημα του WordPress χρησιμοποιεί τουλάχιστον πέντε μορφές αρχείων μετάφρασης σε παραγωγή:
Οι πέντε μορφές που πρέπει να γνωρίζετε
.po (Portable Object) — Η αναγνώσιμη από τον άνθρωπο μορφή πηγαίου κώδικα που χρησιμοποιείται από το GNU Gettext. Περιέχει τις αρχικές συμβολοσειρές (msgid) και τις μεταφράσεις τους (msgstr). Αυτό είναι που επεξεργάζονται οι μεταφραστές.
msgid "Add to Cart"
msgstr "Anadir al carrito"
msgid "Your order has been shipped to %s"
msgstr "Su pedido ha sido enviado a %s"
.mo (Machine Object) — Η μεταγλωττισμένη δυαδική έκδοση ενός αρχείου .po. Το WordPress διαβάζει αρχεία .mo κατά το χρόνο εκτέλεσης χρησιμοποιώντας το load_textdomain(). Πιο γρήγορο από την ανάλυση .po κατά το χρόνο εκτέλεσης, αλλά μη επεξεργάσιμο από τον άνθρωπο.
.json (JavaScript Object Notation) — Χρησιμοποιείται από το wp_set_script_translations() για μεταφράσεις που βασίζονται σε JavaScript σε μπλοκ Gutenberg, στοιχεία React και σύγχρονα θέματα. Το WordPress αναμένει μια συγκεκριμένη δομή JSON με κλειδιά locale_data.
{
"locale_data": {
"flavor-starter": {
"Add to Cart": ["Anadir al carrito"],
"Your order has been shipped to %s": ["Su pedido ha sido enviado a %s"]
}
}
}
.php (PHP Array) — Μια ολοένα και πιο δημοφιλής μορφή για θέματα και πρόσθετα που χρησιμοποιούν φόρτωση μετάφρασης σε στυλ Laravel. Ορισμένα σύγχρονα θέματα WordPress παρακάμπτουν εντελώς το Gettext και φορτώνουν μεταφράσεις από πίνακες PHP για απόδοση.
<?php
return [
'Add to Cart' => 'Anadir al carrito',
'Your order has been shipped to %s' => 'Su pedido ha sido enviado a %s',
];
.xliff (XML Localization Interchange File Format) — Το βιομηχανικό πρότυπο για την ανταλλαγή μεταφράσεων μεταξύ διαφορετικών εργαλείων και πλατφορμών. Χρησιμοποιείται από εργαλεία CAT (Computer-Assisted Translation) όπως το memoQ, το Trados και το Memsource. Απαραίτητο όταν εργάζεστε με επαγγελματίες μεταφραστές.
<trans-unit id="1">
<source>Add to Cart</source>
<target>Anadir al carrito</target>
</trans-unit>
Το πρόβλημα: Εξάρτηση από τη μορφή
Τα περισσότερα εργαλεία μετάφρασης παράγουν μία μορφή εξόδου. Το Poedit σας δίνει .po και .mo. Το WPML αποθηκεύει τις μεταφράσεις στη βάση δεδομένων (όχι καθόλου σε αρχεία). Το Weglot διατηρεί τις μεταφράσεις στους διακομιστές του σε μια ιδιόκτητη μορφή. Ακόμη και πλατφόρμες TMS όπως το Crowdin και το Lokalise απαιτούν να διαμορφώσετε χειροκίνητα τις μορφές εξαγωγής για κάθε έργο.
Αυτό δημιουργεί εξάρτηση από τη μορφή — οι μεταφράσεις σας είναι παγιδευμένες σε όποια μορφή παράγει το τρέχον εργαλείο σας. Όταν αλλάζουν οι απαιτήσεις σας, αντιμετωπίζετε δύο επιλογές:
- Μεταφράστε ξανά τα πάντα στη νέα μορφή (ακριβό, χρονοβόρο και χάνετε τυχόν χειροκίνητες διορθώσεις)
- Γράψτε προσαρμοσμένα σενάρια μετατροπής (επιρρεπή σε σφάλματα, ειδικά για σύνθετους πληθυντικούς τύπους και μεταβλητές)
Καμία επιλογή δεν είναι καλή. Και οι δύο σπαταλούν χρόνο και χρήμα. Και οι δύο εισάγουν κινδύνους.
Πραγματικά σενάρια όπου η εξάρτηση από τη μορφή πονάει
Σενάριο 1: Εκσυγχρονισμός θέματος. Το θέμα του πελάτη σας ξαναχτίζεται με μπλοκ Gutenberg. Τα παλιά πρότυπα PHP χρησιμοποιούσαν αρχεία .mo. Τα νέα μπλοκ χρειάζονται .json για το wp_set_script_translations(). Οι 3.000 μεταφρασμένες συμβολοσειρές σας πρέπει να υπάρχουν και στις δύο μορφές κατά τη διάρκεια της μετάβασης.
Σενάριο 2: Ροή εργασίας πρακτορείου. Διαχειρίζεστε 20 τοποθεσίες πελατών. Ορισμένες χρησιμοποιούν κλασικά θέματα (.mo). Ορισμένες χρησιμοποιούν headless εγκαταστάσεις (.json). Μία χρησιμοποιεί ένα προσαρμοσμένο πλαίσιο που διαβάζει πίνακες PHP. Χρειάζεστε τις ίδιες μεταφράσεις σε διαφορετικές μορφές για διαφορετικούς πελάτες.
Σενάριο 3: Επαγγελματική αναθεώρηση. Οι μεταφράσεις σας με τεχνητή νοημοσύνη είναι 95% ακριβείς, αλλά θέλετε ένας φυσικός ομιλητής να αναθεωρήσει το υπόλοιπο 5%. Οι επαγγελματίες μεταφραστές χρησιμοποιούν εργαλεία CAT που εισάγουν .xliff. Πρέπει να εξαγάγετε τις μεταφράσεις σας σε .xliff, να τις στείλετε για αναθεώρηση και να συγχωνεύσετε τις διορθώσεις πίσω.
Σενάριο 4: Μετάβαση πλατφόρμας. Ο πελάτης σας μετακινείται από το WordPress σε μια προσαρμοσμένη εφαρμογή Node.js. Η νέα εφαρμογή χρησιμοποιεί i18next και χρειάζεται αρχεία .json. Οι 5.000 μεταφρασμένες συμβολοσειρές σας σε μορφή .po πρέπει να μετατραπούν — χωρίς να χάσετε ούτε μία μεταβλητή ή πληθυντικό τύπο.
Η λύση: Μεταφράστε μία φορά, λάβετε κάθε μορφή
Το SimplePoTranslate υιοθετεί μια διαφορετική προσέγγιση. Όταν ανεβάζετε ένα αρχείο .po, .pot, .json ή .xliff και εκτελείτε μια μετάφραση, λαμβάνετε πίσω ένα ZIP που περιέχει και τις πέντε μορφές:
translations-es_ES.zip
├── flavor-starter-es_ES.po
├── flavor-starter-es_ES.mo
├── flavor-starter-es_ES.json
├── flavor-starter-es_ES.php
└── flavor-starter-es_ES.xliff
Αυτό δεν είναι μια "premium λειτουργία" κλειδωμένη πίσω από ένα enterprise tier. Κάθε πρόγραμμα επί πληρωμή — Pro (19$/μήνα) και Lifetime (399$ εφάπαξ) — περιλαμβάνει και τις πέντε μορφές εξόδου σε κάθε εργασία μετάφρασης.
Γιατί αυτό έχει σημασία για την προστασία από το μέλλον
Όταν έχετε και τις πέντε μορφές από την αρχή, δεν χρειάζεται ποτέ να μεταφράσετε ξανά. Οι μεταφράσεις σας είναι ένα περιουσιακό στοιχείο που προσαρμόζεται σε οποιαδήποτε τεχνική απαίτηση:
- Ο πελάτης μεταβαίνει από κλασικό σε Gutenberg; Αναπτύξτε το αρχείο
.json. - Ο νέος προγραμματιστής προτιμά πίνακες PHP; Δώστε τους το αρχείο
.php. - Ο επαγγελματίας μεταφραστής θέλει να αναθεωρήσει; Στείλτε το αρχείο
.xliff. - Μετακίνηση σε διαφορετικό CMS; Τα αρχεία
.jsonκαι.xliffείναι ανεξάρτητα από την πλατφόρμα.
Μεταφράζετε μία φορά. Οι μορφές είναι έτοιμες όταν τις χρειάζεστε.
Πώς λειτουργεί κάθε μορφή στο WordPress
Το να γνωρίζετε ποιο αρχείο πηγαίνει πού είναι απαραίτητο για μια καθαρή ανάπτυξη.
Ανάπτυξη αρχείων .mo (Κλασικά θέματα και πρόσθετα PHP)
wp-content/languages/plugins/woocommerce-es_ES.mo
wp-content/languages/themes/flavor-starter-es_ES.mo
Το WordPress τα φορτώνει αυτόματα όταν η γλώσσα του ιστότοπου ταιριάζει. Δεν απαιτείται πρόσθετο. Μηδενική επιβάρυνση στη βάση δεδομένων. Αυτή είναι η προσέγγιση που προσφέρει την καλύτερη απόδοση.
Ανάπτυξη αρχείων .json (Μπλοκ Gutenberg και στοιχεία JS)
wp-content/languages/plugins/woocommerce-es_ES-{handle}-{md5}.json
Το όνομα αρχείου περιλαμβάνει το handle του script και ένα MD5 hash. Το WordPress τα ταιριάζει όταν καλείτε το wp_set_script_translations() στο πρόσθετο ή το θέμα σας. Εάν δημιουργείτε μπλοκ Gutenberg, αυτό είναι το αρχείο που κάνει τις μεταφρασμένες ετικέτες και περιγραφές μπλοκ να εμφανίζονται σωστά.
Χρήση αρχείων .xliff (Επαγγελματική ροή εργασίας αναθεώρησης)
Τα αρχεία .xliff δεν αναπτύσσονται στο WordPress. Χρησιμοποιούνται ως μια μορφή ανταλλαγής όταν πρέπει να στείλετε μεταφράσεις σε έναν επαγγελματία αναθεωρητή ή να τις εισαγάγετε σε ένα εργαλείο CAT. Η ροή εργασίας μοιάζει με αυτό:
- Ανεβάστε
.poστο SimplePoTranslate και λάβετε.xliffστο ZIP - Στείλτε το
.xliffστον μεταφραστή ή τον αναθεωρητή σας - Λάβετε πίσω διορθωμένο
.xliff - Ανεβάστε το διορθωμένο
.xliffστο SimplePoTranslate και λάβετε ενημερωμένο.moκαι.json
Αυτή η ροή εργασίας μετ' επιστροφής διατηρεί κάθε μεταβλητή και πληθυντικό τύπο επειδή το Syntax Locking του SimplePoTranslate τα προστατεύει σε κάθε στάδιο.
Το τεστ εξάρτησης από τον προμηθευτή
Ακολουθεί ένα απλό τεστ για να προσδιορίσετε εάν η τρέχουσα ροή εργασίας μετάφρασής σας έχει πρόβλημα εξάρτησης:
- Μπορείτε να εξαγάγετε τις μεταφράσεις σας ως τυπικά αρχεία
.poαυτή τη στιγμή; - Εάν ακυρώσετε τη συνδρομή σας στο εργαλείο μετάφρασης σήμερα, διατηρείτε κάθε μεταφρασμένη συμβολοσειρά;
- Μπορείτε να εισαγάγετε τις μεταφράσεις σας σε ένα εντελώς διαφορετικό εργαλείο ή πλατφόρμα χωρίς να μεταφράσετε ξανά;
Εάν η απάντηση σε οποιαδήποτε από αυτές είναι "όχι", είστε κλειδωμένοι. Υπηρεσίες όπως το Weglot και το GTranslate αποτυγχάνουν και στις τρεις ερωτήσεις — ακυρώστε τη συνδρομή και οι μεταφράσεις σας εξαφανίζονται. Το WPML αποθηκεύει τις μεταφράσεις στη βάση δεδομένων, καθιστώντας την εξαγωγή δυνατή αλλά επώδυνη. Ακόμη και εργαλεία επιτραπέζιου υπολογιστή όπως το Poedit περνούν το τεστ στα χαρτιά, αλλά σας περιορίζουν μόνο σε .po και .mo.
Με το SimplePoTranslate, η απάντηση και στις τρεις ερωτήσεις είναι "ναι". Κάνετε λήψη τυπικών αρχείων σε πέντε μορφές. Είναι δικά σας. Διαγράψτε τον λογαριασμό σας αύριο και κάθε μετάφραση που κάνατε ποτέ εξακολουθεί να λειτουργεί.
Δημιουργία μιας βιβλιοθήκης μετάφρασης ανεξάρτητης από τη μορφή
Για πρακτορεία και προγραμματιστές που διαχειρίζονται πολλά έργα, η πιο έξυπνη προσέγγιση είναι να δημιουργήσετε μια βιβλιοθήκη μετάφρασης — ένα αποθετήριο Git ή έναν κοινόχρηστο φάκελο όπου αποθηκεύετε μεταφρασμένα αρχεία για κάθε έργο πελάτη.
translations/
├── client-acme/
│ ├── es_ES/
│ │ ├── flavor-starter-es_ES.po
│ │ ├── flavor-starter-es_ES.mo
│ │ ├── flavor-starter-es_ES.json
│ │ ├── flavor-starter-es_ES.php
│ │ └── flavor-starter-es_ES.xliff
│ └── de_DE/
│ └── ...
├── client-globex/
│ └── ...
Όταν ένας πελάτης χρειάζεται μια νέα μορφή, την έχετε ήδη. Όταν ένας πελάτης αλλάζει πλατφόρμα, οι μεταφράσεις σας μεταναστεύουν χωρίς καμία προσπάθεια. Όταν ένας νέος προγραμματιστής συμμετέχει στην ομάδα, μπορεί να δει ακριβώς τι έχει μεταφραστεί και σε ποιες μορφές.
Αυτό είναι που σημαίνει πραγματικά "ανθεκτικό στο μέλλον" — όχι να προβλέψετε ποια τεχνολογία θα χρησιμοποιήσουν οι πελάτες σας τον επόμενο χρόνο, αλλά να βεβαιωθείτε ότι οι μεταφράσεις σας λειτουργούν με ό,τι κι αν επιλέξουν.
Είστε έτοιμοι να σταματήσετε να ανησυχείτε για τις μορφές αρχείων; Δοκιμάστε το SimplePoTranslate δωρεάν — ανεβάστε ένα αρχείο, λάβετε πίσω πέντε μορφές. Χωρίς σενάρια μετατροπής, χωρίς επανμετάφραση, χωρίς εξάρτηση.