Παγίδες

Υπάρχουν λίγα συνηθισμένα λάθη που πρέπει να βρείτε τελικά οι ίδιοι. Αλλά αυτή η ενότητα μπορεί να σας βοηθήσει να τα αποφύγετε.

27.4.1. Ίδιες συμβολοσειρές, διαφορετική σημασιολογία

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

Σε αυτές τις περιπτώσεις, θα πρέπει να προσθέσετε πρόσθετους χαρακτήρες στις συμβολοσειρές. Για παράδειγμα, χρησιμοποιήστε "jumps[noun]" και "jumps[verb]" αντί για απλώς "jumps" και αφαιρέστε τα πάλι έξω από την κλήση gettext. Αν προσθέτετε πρόσθετους χαρακτήρες θα πρέπει επίσης να προσθέσετε ένα σχόλιο για τους μεταφραστές πριν την κλήση της gettext. Τέτοια σχόλια θα εμφανιστούν στα αρχεία .po. Για παράδειγμα:

// σημείωση στους μεταφραστές: μην μεταφράζετε το τμήμα "[noun]" είναι
// εδώ απλά για να ξεχωρίσει τη συμβολοσειρά από μια άλλη συμβολοσειρά "jumps"
text = strip(gettext("jumps[noun]"), "[noun]");

27.4.2. Σύνθεση των συμβολοσειρών

Οι προγραμματιστές της C χρησιμοποιούν την sprintf() για τη σύνθεση και συνένωση συμβολοσειρών. Η C++ ευνοεί τις ροές, αλλά δυστυχώς, αυτή η προσέγγιση κάνει δύσκολη τη μετάφραση, επειδή κάθε τμήμα κειμένου μεταφράζεται ξεχωριστά, χωρίς να επιτρέπει στους μεταφραστές να τις αναδιατάξουν σύμφωνα με τη γραμματική της γλώσσας.

Για παράδειγμα, αυτός ο κώδικας μπορεί να είναι προβληματικός:

std::cout << _("Current amount: ") << amount
          << _(" Future: ") << future << std::endl;

label.set_text(_("Really delete ") + filename + _(" now?"));

So you should either avoid this situation or use Glib::ustring::compose() which supports syntax such as:

std::cout << Glib::ustring::compose(
             _("Current amount: %1 Future: %2"), amount, future) << std::endl;

label.set_text(Glib::ustring::compose(_("Really delete %1 now?"), filename));

27.4.3. Υποθέτοντας το εμφανιζόμενο μέγεθος των συμβολοσειρών

Δεν ξέρετε ποτέ πόσο χώρο θα πάρει μια συμβολοσειρά στην οθόνη όταν μεταφραστεί. Μπορεί πιθανόν να είναι διπλάσια από το μέγεθος της αρχικής αγγλικής συμβολοσειράς. Ευτυχώς, τα περισσότερα γραφικά συστατικά της gtkmm θα επεκταθούν στον χρόνο εκτέλεσης στο απαιτούμενο μέγεθος.

27.4.4. Σπάνιες λέξεις

Θα πρέπει να αποφεύγετε κρυπτογραφικές συντομεύσεις, αργκό, ή φρασεολογία. Είναι συνήθως δύσκολο να μεταφραστούν και είναι συχνά δύσκολες ακόμα και για μητρικούς ομιλητές να τις κατανοήσουν. Για παράδειγμα, προτιμήστε "application" από "app"

27.4.5. Χρήση χαρακτήρων μη ASCII στις συμβολοσειρές

Προς το παρόν, η gettext δεν υποστηρίζει χαρακτήρες μη ASCII (δηλαδή οποιονδήποτε χαρακτήρα με κωδικό πάνω από 127) στον πηγαίο κώδικα. Για παράδειγμα, δεν μπορείτε να χρησιμοποιήσετε το σύμβολο πνευματικών δικαιωμάτων (©).

Για την παράκαμψη του, μπορείτε να γράψετε ένα σχόλιο στον πηγαίο κώδικα ακριβώς πριν τη συμβολοσειρά, λέγοντας στους μεταφραστές να χρησιμοποιήσουν τον ειδικό χαρακτήρα, αν είναι διαθέσιμος στις γλώσσες τους. Για τα αγγλικά, μπορείτε τότε να κάνετε μια μετάφραση σε αγγλικά Αμερικής en_US.po που χρησιμοποιεί αυτόν τον ειδικό χαρακτήρα.