Σημειώνοντας συμβολοσειρές για μετάφραση

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

Το πακέτο GNU gettext επιτρέπει να σημειώσετε συμβολοσειρές στον πηγαίο κώδικα, να εξάγετε αυτές τις συμβολοσειρές για μετάφραση και να χρησιμοποιήσετε τις μεταφρασμένες συμβολοσειρές στην εφαρμογή σας.

However, Glib defines gettext() support macros which are shorter wrappers in an easy-to-use form. To use these macros, include <glibmm/i18n.h>, and then, for example, substitute:

display_message("Getting ready for i18n.");
with:
display_message(_("Getting ready for i18n."));

For reference, it is possible to generate a file which contains all strings which appear in your code, even if they are not marked for translation, together with file name and line number references. To generate such a file named my-strings, execute the following command, within the source code directory:

xgettext -a -o my-strings --omit-header *.cc *.h

Finally, to let your program use the translation for the current locale, add this code to the beginning of your main.cc file, to initialize gettext.

bindtextdomain(GETTEXT_PACKAGE, PROGRAMNAME_LOCALEDIR);
bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
textdomain(GETTEXT_PACKAGE);

27.2.1. Πώς δουλεύει το gettext

Το σενάριο intltool / xgettext εξάγει τις συμβολοσειρές και τις βάζει σε ένα αρχείο mypackage.pot. Οι μεταφραστές της εφαρμογής σας δημιουργούν τις μεταφράσεις τους αντιγράφοντας πρώτα αυτό το αρχείο .pot σε ένα localename.po. Η τοπική ρύθμιση αναγνωρίζει μια γλώσσα και μια κωδικοποίηση για αυτήν τη γλώσσα, συμπεριλαμβανόμενων των μορφών ημερομηνίας και αριθμών. Αργότερα, το κείμενο στον πηγαίο κώδικα έχει αλλάξει, το σενάριο msmerge χρησιμοποιείται για ενημέρωση των αρχείων localename.po από το αναγεννημένο αρχείο .pot.

Την ώρα εγκατάστασης τα αρχεία .po μετατρέπονται σε δυαδική μορφή (με την επέκταση .mo) και τοποθετούνται σε ένα έναν κατάλογο όλου του συστήματος για αρχεία τοπικών ρυθμίσεων, για παράδειγμα /usr/share/locale/.

Όταν η εφαρμογή εκτελείται, η βιβλιοθήκη gettext ελέγχει τον κατάλογο όλου του συστήματος για να δει αν υπάρχει ένα αρχείο .mo για το περιβάλλον τοπικών ρυθμίσεων του χρήστη (μπορείτε να ορίσετε τις τοπικές ρυθμίσεις με, για παράδειγμα, "export LANG=de_DE.UTF-8" από μια κονσόλα bash). Αργότερα, όταν το πρόγραμμα φτάσει μια κλήση gettext, αναζητά μια μετάφραση της συγκεκριμένης συμβολοσειράς. Αν δεν βρεθεί καμιά, χρησιμοποιείται η αρχική συμβολοσειρά.

27.2.2. Δοκιμή και προσθήκη μεταφράσεων

To convince yourself that you've done well, you may wish to add a translation for a new locale. In order to do that, go to the po subdirectory of your project and execute the following command:

intltool-update --pot

Αυτό θα δημιουργήσει ένα αρχείο με όνομα programname.pot. Τώρα, αντιγράψτε αυτό το αρχείο στο languagecode.po, όπως de.po ή hu.po. Προσθέστε επίσης αυτόν τον κώδικα γλώσσας στο LINGUAS. Το αρχείο .po περιέχει μια κεφαλίδα και έναν κατάλογο αγγλικών συμβολοσειρών, με χώρο για τις μεταφρασμένες συμβολοσειρές που θα εισαχθούν. Βεβαιωθείτε ότι ορίσατε την κωδικοποίηση του αρχείου .po (καθορισμένη στην κεφαλίδα, αλλά επίσης ως περιεχόμενο) στο UTF-8.

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

27.2.3. Πόροι

More information about what lies behind the internationalization and localization process is presented and demonstrated in: