Μορφή των αρχείων PO
Ένα αρχείο PO αποτελείται από μια σειρά εγγραφών, κάθε μία από τις οποίες περιγράφει τη σχέση μεταξύ της αρχικής αμετάφραστης γραμματοσειράς (στο εξής αμετάφραστο μήνυμα) και της αντίστοιχης μετάφρασης (στο εξής μεταφρασμένο μήνυμα). Όλες οι εγγραφές ενός δεδομένου αρχείου PO αναφέρονται σε ένα project, και όλες οι μεταφρασμένες γραμματοσειρές ανήκουν σε μία γλώσσα (για εμάς την Ελληνική). Μία εγγραφή ενός αρχείου PO έχει τη ακόλουθη σχηματική δομή:
ΚΕΝΗ ΓΡΑΜΜΗ
_: ΣΧΟΛΙΑ ΜΕΤΑΦΡΑΣΤΗ
#: ΑΝΑΦΟΡΑ ΣΤΟΝ ΚΩΔΙΚΑ
#, ΣΗΜΑΙΑ ΚΑΤΑΣΤΑΣΗΣ
msgid "ΑΜΕΤΑΦΡΑΣΤΟ ΜΗΝΥΜΑ"
msgstr "ΜΕΤΑΦΡΑΣΜΕΝΟ ΜΗΝΥΜΑ"
Μια απλή εγγραφή θα μπορούσε να είναι η ακόλουθη:
#: lib/error.c:116
msgid "Unknown system error"
msgstr "Άγνωστο σφάλμα συστήματος"
Κάθε εγγραφή αρχίζει με μία κενή γραμμή. Μετά ακολουθούν τα σχόλια, στις γραμμές που αρχίζουν με το χαρακτήρα '#'. Υπάρχουν δύο ειδών σχόλια: αυτά που έχουν έναν ή περισσότερους κενούς χαρακτήρες αμέσως μετά το '#', τα οποία δημιουργούνται και τροποποιούνται αποκλειστικά και μόνο από το μεταφραστή, και εκείνα που έχουν ένα μη κενό χαρακτήρα αμέσως μετά το '#', τα οποία δημιουργούνται και τροποποιούνται αυτομάτως από τα εργαλεία του GNU 'gettext'. Η χρήση σχολίων, και των δύο ειδών, είναι προαιρετική.
Μετά από την κενή γραμμή και τα σχόλια, η εγγραφή περιέχει τις δύο γραμματοσειρές, πρώτα το αμετάφραστο μήνυμα όπως αυτό εμφανίζεται στον κώδικα του προγράμματος, και μετά τη μετάφραση του μηνύματος. Του αρχικού μηνύματος προηγείται το keyword 'msgid', και του μεταφρασμένου, το 'msgstr'.
Η γραμματοσειρά 'msgid', καθώς και τα αυτόματα σχόλια, δημιουργούνται και τροποποιούνται από άλλα εργαλεία του πακέτου GNU 'gettext', και το kbabel δεν παρέχει την δυνατότητα αλλαγής τους. Από την άλλη πλευρά, η γραμματοσειρά 'msgstr', όπως και τα σχόλια, υπάρχουν για τη διευκόλυνση του μεταφραστή, και η λειτουργία PO του δίνει τον απόλυτο έλεγχο που χρειάζεται.
Τα σχόλια που αρχίζουν με '#,' αποτελούν ειδική περίπτωση καθώς δεν αγνοούνται από τα προγράμματα όπως συνήθως συμβαίνει με τα σχόλια. Η λίστα των ΣΗΜΑΙΩΝ ΚΑΤΑΣΤΑΣΗΣ (που είναι χωρισμένες με κόμα) χρησιμοποιείται από το πρόγραμμα 'msgfmt' για να δώσει στο χρήστη αναλυτικότερα διαγνωστικά μηνύματα. Υποστηρίζονται οι ακόλουθες δύο ΣΗΜΑΙΕΣ ΚΑΤΑΣΤΑΣΗΣ:
'fuzzy'
Αυτή η ΣΗΜΑΙΑ ΚΑΤΑΣΤΑΣΗΣ μπορεί να παραχθεί από το πρόγραμμα
'msgmerge' ή μπορεί να εισαχθεί από το
μεταφραστή.
Δείχνει οτι η γραμματοσειρά 'msgstr' μπορεί
να μην είναι σωστή.
Μόνο ο μεταφραστής μπορεί να κρίνει εάν η μετάφραση χρειάζεται
αλλαγή, ή είναι αποδεκτή ως έχει. Όταν είναι ικανοποιημένος με
τη μετάφραση, αφειρεί την ΣΗΜΑΙΑ ΚΑΤΑΣΤΑΣΗΣ 'fuzzy'.
'c-format'
'no-c-format'
Αυτές οι ΣΗΜΑΙΕΣ ΚΑΤΑΣΤΑΣΗΣ δεν πρέπει να εισάγονται από τον
μεταφραστή. Αντ' αυτού εισάγονται μόνο από το πρόγραμμα 'xgettext'.
Σε ένα σύστημα αυτόματης επεξεργασίας αρχείων PO σαν αυτό που
προτείνεται εδώ, το πρόγραμμα 'xgettext'
δημιουργεί ένα νέο αρχείο
template στο οποίο δεν θα περιέχονται οι αλλαγές του χρήστη.
Όποτε η ΣΗΜΑΙΑ 'c-format'
δίνεται σε μία γραμματοσειρά,
το πρόγραμμα 'msgfmt' εκτελεί περισσότερους
ελέγχους
για να διαπιστώσει την ορθότητα της μετάφρασης.
Για περισσότερες πληροφορίες ανατρέξτε εδώ: msgfmt Invocation.
Μια διαφορετικού είδους εγγραφή χρησιμοποιείται για μεταφράσεις που έχουν να κάνουν με τον πληθηντικό αριθμό.
ΚΕΝΗ ΓΡΑΜΜΗ
_: ΣΧΟΛΙΑ ΜΕΤΑΦΡΑΣΤΗ
#: ΑΝΑΦΟΡΑ...
#, ΣΗΜΑΙΑ...
msgid ""
"_n: ΑΜΕΤΑΦΡΑΣΤΟ ΜΗΝΥΜΑ ΕΝΙΚΟΥ\n"
"ΑΜΕΤΑΦΡΑΣΤΟ ΜΗΝΥΜΑ ΠΛΗΘΗΝΤΙΚΟΥ"
msgstr "ΜΕΤΑΦΡΑΣΜΕΝΟ ΜΗΝΥΜΑ ΕΝΙΚΟΥ\n"
"ΜΕΤΑΦΡΑΣΜΕΝΟ ΜΗΝΥΜΑ ΠΛΗΘΗΝΤΙΚΟΥ"
Μια τέτοια εγγραφή μπορεί να είναι η ακόλουθη:
#: projects/datacd/k3bdatajob.cpp:850
projects/datadvd/k3bdvdjob.cpp:754
msgid ""
"_n: ISO9660 Filesystem (Size: %1) - 1 copy\n"
"ISO9660 Filesystem (Size: %1) - %n copies"
msgstr ""
"ISO-9660 Σύστημα Αρχείων (Μέγεθος: %1) - 1 αντιγραφή\n"
"ISO-9660 Σύστημα Αρχείων (Μέγεθος: %1) - %n αντιγραφές"
Πολλές φορές μερικές κενές γραμμές ή γραμμές σχολίων υπάρχουν μετά την τελευταία εγγραφή ενός αρχείου PO file. Αυτές οι γραμμές δεν αποτελούν μέρος της εγγραφής και η λειτουργία PO δεν μπορεί να εκτελέσει κάποια ενέργεια σ' αυτές. Με τη χρήση του function 'M-x po-normalize' της λειτουργίας PO, ο μεταφραστής μπορεί να απαλλαγεί από αυτές τις γραμμές. Για περισσότερες πληροφορίες ανατρέξτε εδώ: Normalizing.
Τα αμετάφραστα και τα μεταφρασμένα μηνύματα ακολουθούν το συντακτικό της C για τις γραμματοσειρές, όπως τα ομοιοματικά και τα escape sequences. Όταν χρειατεί να χρησιμοποιηθεί μια γραμματοσειρά που θα καταλαμβάνει παραπάνω της μίας γραμμής, οι γραμμές θα γραγτούν η μία κάτω από την άλλη και θα μπουν σε ομοιοματικά. Για παράδειγμα:
msgid ""
"Here is an example of how one might continue a very long string\n"
"for the common case the string represents multi-line output.\n"
Σε αυτό το παράδειγμα, η κενή γραμματοσειρά στην πρώτη γραμμή, χρησιμοποιείται για την καλύτερη ευθυγράμμιση του γράμματος 'H' της λέξης 'Here' με το γράμμα 'f' της λέξης 'for'. Το keyword 'msgid' ακολουθούν τρεις γραμματοσειρές, οι οποίες τελικά θα ενωθούν σε μία. Η ένωση με την κενή γραμματοσειρά δεν αλλάζει το τελικό αποτέλεσμα, αλλά είναι ένας τρόπος να έχουμε μία γραμματοσειρά να ακολουθεί το keyword 'msgid' στην ίδια γραμμή (απαίτηση του 'xgettext'), ενώ διατηρούμε την αριστερή στοίχιση της γραμματοσειράς. Δεν είναι απαραίτητο να χωριστούν οι δύο γραμμές αμέσως μετά το χαρακτήρα νέας γραμμής '\n', η αλλαγή θα μπορούσε να γίνει μετά από οποιοδήποτε χαρακτήρα, αλλά έτσι είναι πιο ευπαρουσίαστο.
Σημείωση: Το παραπάνω κείμενο προέρχεται από την σελίδα info του πακέτου GNU
gettext.
Παρότι καταβλήθηκε προσπάθεια πιστής μετάφρασης του αρχικού κειμένου,
έχουν γίνει κάποιες προσαρμογές σε σχέση με τη χρήση του kbabel
και των ιδιαιτεροτήτων του KDE.
Ειδικά αρχεία po - Αρχεία desktop
Σε κάθε πακέτο (module) του KDE υπάρχει ένα τουλάχιστον αρχείο με όνομα desktop_[όνομα εφαρμογής].po. Αυτά τα αρχεία είναι ειδικού τύπου, που κυρίως χρησιμοποιούνται για τη μετάφραση των καταχωρήσεων των αρχείων ρυθμίσεων (με επέκταση desktop) του KDE.
Παράδειγμα των εγγραφών ενός τέτοιου αρχείου είναι το ακόλουθο (από
το αρχείο desktop_kdebase.po):
#: kdesktop/init/directory.trash:7
kicker/applets/trash/trashapplet.desktop:36
#: kioslave/system/entries/trash.desktop:7
msgid "Name=Trash"
msgstr "Name=Κάδος απορριμμάτων"
#: kdesktop/init/directory.trash:81
msgid "Comment=Contains removed files"
msgstr "Comment=Περιέχει σβησμένα αρχεία"
Βλέπουμε ότι οι εγγραφές που περιέχει είναι της μορφής XXX=YYY,
όπου
XXX «δεσμευμένη» συμβολοσειρά,
που παραμένει αμετάφραστη
YYY συμβολοσειρά προς
μετάφραση
Τα περιεχόμενα του παραγόμενου αρχείου trash.desktop είναι τα
ακόλουθα:
[Desktop Entry]
Comment=Contains removed files
Comment[el]=Περιέχει σβησμένα αρχεία
EmptyIcon=trashcan_empty
Encoding=UTF-8
Icon=trashcan_full
Name=Trash
Name[el]=Κάδος απορριμμάτων
OnlyShowIn=KDE
Type=Link
URL=trash:/
Όπως βλέπουμε, οι «δεσμευμένες» συμβολοσειρές Comment και Name εμφανίζονται στο τελικό αρχείο, τόσο με το αρχικό - αγγλικό κείμενο, όσο και με την ένδειξη [el] και το ελληνικό κείμενο. Έτσι το πρόγραμμα που θα εμφανίσει το αρχείο desktop (το συγκεκριμένο είναι ο Κάδος απορριμμάτων που εμφανίζεται στην επιφάνεια εργασίας) θα εντοπίσει την ελληνική μετάφραση και θα εμφανίσει αυτό το κείμενο αντί του αγγλικού.