NLS+GNU - Τι-πώς-πού-πότε-γιατί;

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

Η άδεια του gettext για τα κομμάτια που θα ενσωματώσουμε στο προγραμμά μας είναι η GNU LGPL που δεν μας περιορίζει στον καθορισμό της άδειας του προγράμματός μας. Κοιτάξτε την πάντως για να δείτε αν είστε συμβατοί(!).

Ας προσπεράσουμε όμως τα "τυπικά" και ας περάσουμε στο ψητό. Τα προγράμματα που θα χρειαστούμε είναι τα GNU autoconf και gettext-0.10, και βρίσκονται στο πιο κοντινό gnu mirror.

Το ίδιο πρόγραμμα τώρα γίνεται:

Η ώρα τώρα θα τυπωθεί στην μορφή: Τετ Νοέ 11 22:44:29 +0200 1998 με ελληνικούς χαρακτήρες όπως βλέπετε (αν LANG=el ή gr για τις παλιές glibc2). Γι'αυτό ξεχάστε το ctime και ασχοληθείτε με το strftime().

1: ftp://argeas.cs-net.gr/pub/unix/linux/GREEK/locale.glibc2.el.tar.gz

Οι εντολές bindtextdomain() και textdomain() αφορούν την nls βιβλιοθήκη (libintl) και την πληροφορούν ότι η μετάφραση του προγράμματος βρίσκεται στο my_time.mo στον κατάλογο /usr/share/locale/XX, όπου ΧΧ η γλώσσα του χρήστη (καθορίζεται απο την μεταβλητή LANG ή LANGUAGE).

Επειδή πολλές φορές το να γράφουμε gettext(...) είναι επίπονο για πολλά μηνύματα, χρησιμοποιούμε το:

Το πρόγραμμα δεν θα λειτουργήσει ακομη με ελληνικά. Χρειάζεται ακόμη την δημιουργία του .po αρχείου. Αυτό είναι σχετικά απλό αν γίνει με το πρόγραμμα xgettext (από το πακέτο GNU gettext). Για το συγκεκριμένο πρόγραμμα η έξοδος του xgettext είναι: (σύνταξη "xgettext my_time.c")

και εδώ μετονομάζουμε το messages.po σε el.po, προσθέτοντας ταυτόχρονα στο msgstr την μετάφραση, πχ: msgstr "Η ώρα είναι: "

2: http://teamball.sdsu.edu/doc/texi/gettext_toc.html

Για να απλοποιήσουμε τα πράγματα θεωρούμε την εξής διαμόρφωση των αρχείων του προγράμματος: (έστω ότι το πρόγραμμα είναι στο /xxx) στον κατάλογο /xxx/ configure.in: Χρειάζεται για το autoconf (δείτε παρακάτω) config.h.in : (δείτε παρακάτω)

Αρκεί τώρα να αντιγράψετε απο το πακέτο gettext-0.10 τα po/Makefile.in στον κατάλογο του προγραμματός /xxx/po/ , όλο τον κατάλογο intl/ στον /xxx/intl/ και τα ABOUT-NLS, aclocal.m4 στον /xxx .

Πάμε τώρα στον πρωταρχικό κατάλογο του προγράμματός μας (/xxx) και ας φτιάξουμε το configure.in απο το οποίο θα προκύψει το γνωστό(;) script configure.

και αμέσως μετά δημιουργούμε ένα config.h.in (είναι βάση του αρχείου config.h που θα συμπεριλαμβάνεται στο πρόγραμμά μας. Η δημιουργία του config.h γίνεται απο το script configure.) Το config.h.in θα περιέχει:

Το Makefile.in για το πρόγραμμα (το Makefile δημιουργείται επίσης αυτόματα απο το configure), πρέπει να έχει σε γενικές γραμμές τα:

Εάν ο κώδικας σας δεν είναι στον src/ κατάλογο χρειάζεται ορισμένες αλλαγές

Το πρόγραμμα τώρα θα γίνει:

Τώρα τρέχουμε το autoconf που δημιουργεί το configure script. Aν όλα πήγαν καλά έχουμε ένα πρόγραμμα που μιλάει ξένες γλώσσες!

* Το παραπάνω κείμενο είναι μια εισαγωγή μόνο στο θέμα. Δεν έιναι σε καμιά περίπτωση πλήρες, αν θέλετε παραπάνω πληροφορίες συμβουλευτείτε τα εγχειρίδια των προγραμμάτων autoconf, gettext. Περισσότερα για το gettext (και την χρήση του με το autoconf) στο: http://teamball.sdsu.edu/doc/texi/gettext_toc.html

Αρχική Σελίδα