Ελληνικές Μεταφράσεις NLS (Greek NLS translations) Σίμος Ξενιτέλλης, S.Xenitellis@rhbnc.ac.uk v0.9, 21 Αυγούστου 1999 Αυτό το κείμενο περιγράφει την προσπάθεια εξελληνισμού των GNU προγραμμάτων. Τα GNU προγράμματα (δηλαδή τα περισσότερα προγράμματα εφαρμογών που απαντώνται συνήθως σε Unix συστήματα όπως ls, mutt, kde, gnome) έχουν τη δυνατότητα να υποστηρίξουν γλώσσες εκτός των αγγλικών με ένα απλό και διαφανές για το χρήστη τρόπο. Το παρόν ασχολείται με όσα αφορούν τη μετάφραση στα ελληνικά. ______________________________________________________________________ Table of Contents 1. Εισαγωγή 1.1 Ιστορία Αναθεωρήσεων 1.2 Τι είναι το "NLS"; 2. Έκταση του NLS 2.1 Σε τι επίπεδο βρίσκονται οι άλλες γλώσσες; 2.2 Ποια λειτουργικά συστήματα υποστηρίζουν το NLS; 2.3 Επιγραμματικά, πώς λειτουργεί το NLS; 2.4 Ποια προγράμματα υποστηρίζουν NLS; 2.5 Στόχος των μεταφράσεων 3. NLS στην πράξη 3.1 Παράδειγμα χρήσης του NLS 3.2 Το δοκίμασα άλλα δεν δουλεύει! 3.3 Με ποιο(ποιους) τρόπους καθορίζεται η γλώσσα με την οποία εμφανίζονται τα μηνύματα ενός συστήματος; 3.4 Μετάπτωση γλωσσών σε περίπτωση απουσίας μεταφράσεων 3.5 Προγραμματιστικές πληροφορίες 4. Διαδικασία της μετάφρασης 4.1 Είναι επίπονη η εργασία της μετάφρασης των μηνυμάτων; 4.2 Πληροφοριακά, ένα πρόγραμμα που υποστηρίζει NLS πως μοιάζει; 4.3 Ποια είναι τα προγράμματα που βοηθούν τη μετάφραση και πως λειτουργούν; 4.3.1 Πακέτο gettext 4.3.2 Πρόγραμμα 4.3.3 Πρόγραμμα 4.3.4 Λοιπά προγράμματα 5. Επιλογή ελληνικών λέξεων και εκφράσεων 5.1 Πως θα μπορούσε να μεταφραστεί το π.χ. "Broken pipe"; "Σπασμένη σωλήνα"; 5.2 LEXIS 5.3 Ελληνική βιβλιογραφία 6. Οργάνωση μεταφράσεων 6.1 Προσόντα μεταφραστών 6.2 Ανάληψη μεταφράσεων 6.3 Οδηγίες μετάφρασης 6.4 Νομικές λεπτομέρειες 6.5 Ποιοι είναι οι βασικοί λόγοι μετάφρασης των μηνυμάτων στα ελληνικά; 7. Τρέχουσα κατάσταση των μεταφράσεων 8. Εκκρεμότητες 8.1 Λοιπά προγράμματα που περιμένουν ελληνική μετάφραση 9. Διαθέσιμοι αναθεωρητές 10. Ελληνικές μεταφράσεις στις εκδόσεις Linux 11. PO αρχεία 12. Επικοινωνία 12.1 Ποιος είναι ο τρέχον υπεύθυνος των ελληνικών μεταφράσεων; ______________________________________________________________________ 1. Εισαγωγή 1.1. Ιστορία Αναθεωρήσεων · v0.1 - 09 Ιανουαρίου 1999 - Σίμος Ξενιτέλλης - Αρχική Έκδοση · v0.2 - 24 Ιανουαρίου 1999 - Σίμος Ξενιτέλλης - Μικρές αλλαγές · v0.3 - 14 Φεβρουαρίου 1999 - Σίμος Ξενιτέλλης - Μικρές αλλαγές · v0.4 - 24 Φεβρουαρίου 1999 - Σίμος Ξενιτέλλης - Πρώτη δημοσίευση στο Hellug (http://www.hellug.gr) · v0.5 - 15 Ιουνίου 1999 - Σίμος Ξενιτέλλης - Γενική αναθεώρηση, προσθήκη KDE, Gnome · v0.6 - 22 Ιουνίου 1999 - Σίμος Ξενιτέλλης - Διορθώσεις από την ανάδραση, προσθήκη νέων μεταφράσεων · v0.7 - 24 Ιουλίου 1999 - Σίμος Ξενιτέλλης - Προσθήκη νέων μεταφράσεων, προσθήκη λίστας προγραμμάτων διαθέσιμων για μετάφραση, προσθήκη πληροφοριών για το Lyx, προσθήκη λίστας με διαθέσιμους αναθεωρητές, προσθήκη λίστας με εκκρεμότητες, τρέχουσα υποστήριξη ελληνικών από εκδόσεις του Linux, μικρές διορθώσεις · v0.8 - 25 Ιουλίου 1999 - Σίμος Ξενιτέλλης - Μικρές αλλαγές · v0.9 - 21 Αυγούστου 1999 - Σίμος Ξενιτέλλης - Προσθήκη τοποθεσίας shadow utils 1.2. Τι είναι το "NLS"; Το NLS (National Language Support) είναι μια δυνατότητα που μπορεί να προσφέρει ένα πρόγραμμα ούτως ώστε να κάνει δυνατή την εμφάνιση όλων των μηνυμάτων και συμβόλων που βλέπει ο τελικός χρήστης στην τοπική του γλώσσα. Δηλαδή, προσφέρει πολύγλωσση υποστήριξη στα προγράμματα με ένα αρκετά βολικό και διαφανές τρόπο. Εκτός από τα μηνύματα, μπορεί να χρησιμοποιηθεί για την απεικόνιση της τοπικής νομισματικής μονάδας, της τοπικής ώρας, του τοπικού συμβόλου διαχωρισμού του ακέραιου μέρος από το δεκαδικό και άλλα. Στο παρόν εξετάζουμε το τμήμα που αφορά τη μετάφραση των μηνυμάτων στα ελληνικά. 2. Έκταση του NLS 2.1. Σε τι επίπεδο βρίσκονται οι άλλες γλώσσες; Οι περισσότερο διαδεδομένες γλώσσες βρίσκονται σε πολύ καλό επίπεδο όσον αφορά την πληρότητα και την ποιότητα των μεταφράσεων. Ακόμα, υπάρχει υποστήριξη από γλώσσες που δεν είναι αρκετά συνηθισμένες όπως τα σλοβένικα. Ενημερωτικά, πολύ καλή δουλειά υπάρχει για τα γαλλικά, τα γερμανικά, τα φινλανδικά, τα ισπανικά και τα πολωνέζικα. Η τάση αυτή τη στιγμή είναι οι διάφορες γλώσσες μικρής εμβέλειας να προστίθενται στη λίστα, κυρίως λόγω της αναγνώρισης που έχει δεχθεί το Linux που είναι κύριος χρήστης των προγραμμάτων που υποστηρίζουν NLS. 2.2. Ποια λειτουργικά συστήματα υποστηρίζουν το NLS; Το λειτουργικό σύστημα Linux είναι κύριος χρήστης των προγραμμάτων που υποστηρίζουν NLS. Το Linux απαρτίζεται από προγράμματα εφαρμογών που διατίθενται με την άδεια διάθεσης GNU . Το λογισμικό αυτό, υποστηρίζει κατά βάση το NLS. Εκτός από το Linux, τα περισσότερα λειτουργικά συστήματα Unix ή τύπου-Unix μπορούν να υποστηρίξουν NLS. 2.3. Επιγραμματικά, πώς λειτουργεί το NLS; Για τα περισσότερα προγράμματα, η υποστήριξη γίνεται με το πακέτο gettext. Στο πακέτο αυτό περιλαμβάνονται μια βιβλιοθήκη στην οποία συνδέεται (link) το εκάστοτε πρόγραμμα στη φάση της μεταγλώττισης. Στο ίδιο το πρόγραμμα, προστίθενται μερικές εντολές της βιβλιοθήκης. Οι εντολές αυτές ελέγχουν μεταβλητές του περιβάλλοντος που καθορίζουν τη γλώσσα και αντικαθιστούν τα μηνύματα με τα μεταφρασμένα μηνύματα. 2.4. Ποια προγράμματα υποστηρίζουν NLS; Θα χωρίσουμε τα προγράμματα σε κατηγορίες. 1. Επίσημα GNU προγράμματα Η μετάφραση των προγραμμάτων αυτών οργανώνεται από το GNU Translation Project το οποίο έχει στενές σχέσεις με το FSF (Free Software Foundation). Τα πιο βασικά προγράμματα ενός συστήματος Unix καλύπτονται εδώ. Το γεγονός ότι τα προγράμματα είναι επίσημα GNU σημαίνει ότι τα άτομα που αποστέλλουν μεταφράσεις, πρέπει να δηλώνουν εγγράπτως ότι συμφωνούν με την άδεια διάθεσης GNU. Ακόμα, οι μεταφράσεις κάθε γλώσσας πρέπει να έχουν ένα υπεύθυνο που να οργανώνει τη διαδικασία. Αυτές οι νομικές ιδιαιτερότητες, αν και φαίνονται ότι αποθαρρύνουν τις μεταφράσεις, είναι αναγκαίες για την ορθή χρήση της άδειας διάθεσης GNU από νομικής πλευράς. 2. Ανεπίσημα GNU προγράμματα Ένας σημαντικός αριθμός προγραμμάτων, που οι προγραμματιστές τους επιλέγουν να διαθέσουν με την άδεια διάθεσης GNU, υποστηρίζουν NLS. Για αυτά τα προγράμματα, αρκεί η αποστολή της μετάφρασης στους ίδιους τους προγραμματιστές για να τη συμπεριλάβουν. Εδώ ανήκουν και τα γραφικά περιβάλλοντα KDE και Gnome, ωστόσο για αυτά προσθέτουμε δύο νέες κατηγορίες λόγω της μεγάλης σημασίας τους. 3. KDE Το γραφικό περιβάλλον KDE απαρτίζεται από ένα σημαντικό αριθμό προγραμμάτων τα οποία υποστηρίζουν NLS. Το KDE είναι πολύ δημοφιλές και υπάρχει μεγάλη ανάγκη να υπάρχει μια πλήρης, τρέχουσα και ακριβής υποστήριξη ελληνικών. 4. Gnome Το γραφικό περιβάλλον Gnome , απαρτίζεται, όπως το KDE, από ένα σημαντικό αριθμό προγραμμάτων προγραμμάτων που υποστηρίζουν NLS. To Gnome αρχίζει να διαδίδεται και αναμένεται να παίξει ένα σημαντικό ρόλο σαν ένα γραφικό περιβάλλον για συστήματα Unix. 2.5. Στόχος των μεταφράσεων Επιθυμούμε στις μεταφράσεις να πετύχουμε τους παρακάτω στόχους · ακρίβεια στη μετάφραση των μηνυμάτων στη τοπική γλώσσα · πληρότητα της μετάφρασης · ποιότητα της μετάφρασης · ομοιογένεια της μετάφρασης και μεταξύ μεταφράσεων · ενημερότητα των μεταφράσεων μεταξύ εκδόσεων 3. NLS στην πράξη 3.1. Παράδειγμα χρήσης του NLS Κοιτάξτε στο κατάλογο RedHat-6.0: /usr/share/locale (προς εξακρίβωση) RedHat-5.x: /usr/share/locale RedHat-4.x: /usr/share/locale (προς εξακρίβωση) Open Linux 2.2: /usr/share/locale (προς εξακρίβωση) SuSe 6.χ: /usr/share/locale (προς εξακρίβωση) Slackware 4.0: /usr/share/locale (προς εξακρίβωση) Debian 2.x: /usr/share/locale (προς εξακρίβωση) στο σύστημά σας για διαγράμματα που αφορούν τις υποστηριζόμενες χώρες. Θα βρείτε σίγουρα γαλλικά, ισπανικά, γερμανικά, ολλανδικά κλπ. Προχωρήστε στο υποκατάλογο es και μετά LC_MESSAGES, δηλαδή /usr/share/es/LC_MESSAGES/ και έστω ότι βρίσκετε το "fileutils.mo". Τότε, έχετε υποστήριξη για ισπανικά στο ls, mkdir κτλ. (Αν έχετε υποκατάλογο el για ελληνικά και το αντίστοιχο αρχείο στο σύστημά σας, μπορείτε να χρησιμοποιήσετε το λεκτικό αυτό αντί του es). Tρέξτε · setenv LANGUAGE es (για όσους έχουν φλοιό tcsh ή συμβατό με csh) ή · export LANGUAGE es (για όσους έχουν φλοιό bash ή συμβατό με sh) Τώρα τρέξτε "ls --help" και θα δείτε ισπανικά μηνύματα! 3.2. Το δοκίμασα άλλα δεν δουλεύει! Σε αυτή την κατηγορία μπορεί να βρίσκονται οι χρήστες με παλιά έκδοση του Linux. Στο σύστημά σας μπορεί να υπάρχουν περισσότεροι κατάλογοι με πληροφορίες για μεταφράσεις προγραμμάτων (κατάλογοι locale). Το σύνολο των καταλόγων που ελέγχονται, ορίζεται με τη μεταβλητή περιβάλλοντος NLSPATH. Πάντα υπάρχουν κάποιοι κατάλογοι που το σύστημα ερευνά εξ ορισμού, οι οποίοι έχουν προκαθοριστεί στη βασική βιβλιοθήκη του συστήματός σας, τη libc. Δοκιμάστε "strace -o output.log ls --help" και μετά "grep open output.log" για να δείτε που ψάχνει το σύστημα. Μετά καθορίστε ανάλογα το NLSPATH. 3.3. Με ποιο(ποιους) τρόπους καθορίζεται η γλώσσα με την οποία εμφανίζονται τα μηνύματα ενός συστήματος; Μέσω μεταβλητών περιβάλλοντος. Για κάποιο λόγο, υπάρχει ένας αριθμός από μεταβλητές που κάνουν σχεδόν την ίδια δουλειά. Η μεταβλητή που φαίνετε να χρησιμοποιούν οι περισσότεροι χρήστες είναι η LANG, με τη μορφή · setenv LANG el (για όσους έχουν φλοιό tcsh ή συμβατό με csh) ή · export LANG=el (για όσους έχουν φλοιό bash ή συμβατό με sh) Διαφορετικά, υπάρχει η μεταβλητή LANGUAGE, η οποία έχει προτεραιότητα έναντι της LANG. Για τα συστήματα με glibc 2.1 (αυτή τη στιγμή RedHat 6.0), ο χρήστης μπορεί να εκτελέσει (προς εξακρίβωση) · setenv LANG greek (για όσους έχουν φλοιό tcsh ή συμβατό με csh) ή · export LANG=greek (για όσους έχουν φλοιό bash ή συμβατό με sh) 3.4. Μετάπτωση γλωσσών σε περίπτωση απουσίας μεταφράσεων Tρέξτε · setenv LANGUAGE 'it:fr' (για όσους έχουν φλοιό tcsh ή συμβατό με csh) ή · export LANGUAGE='it:fr' (για όσους έχουν φλοιό bash ή συμβατό με sh) Σε όλες τις περιπτώσεις, υπάρχει η τελική μετάπτωση στην αγγλική. 3.5. Προγραμματιστικές πληροφορίες Το παρακάτω υλικό προέρχεται από το Νίκο Μαυρογιαννόπουλο . Μιας και το nls χρησιμοποιείται όλο και περισσότερο στα νέα προγράμματα (ιδιαίτερα αυτά που αποτελούν το GNU σύστημα), είναι αναγκαίο να κάνουμε μια περιγραφή της διαδικασίας που χρειάζεται για να το ενσωματώσουμε και στα δικά μας προγράμματα. Η άδεια του gettext για τα κομμάτια που θα ενσωματώσουμε στο πρόγραμμά μας είναι η GNU LGPL που δεν μας περιορίζει στον καθορισμό της άδειας του προγράμματός μας. Κοιτάξτε την πάντως για να δείτε αν είστε συμβατοί(!). Ας προσπεράσουμε όμως τα "τυπικά" και ας περάσουμε στο ψητό. Τα προγράμματα που θα χρειαστούμε είναι τα GNU autoconf και gettext-0.10, και βρίσκονται στο πιο κοντινό gnu mirror. Εδώ θα προσπαθήσουμε να προσθέσουμε υποστήριξη εθνικής/τοπικής γλώσσας (nls) σε ένα πρόγραμμα γραμμένο σε C. Ας δούμε ένα απλό πρόγραμμα, που τυπώνει την ώρα στην οθόνη: ______________________________________________________________________ #include #include main () { time_t tv; printf( "The time is: " ); time(&tv); printf ( "%s",ctime(&tv) ); } ______________________________________________________________________ Η ώρα όπως και το μήνυμα τυπώνεται στα αγγλικά. Επειδή η μετάφραση πρέπει να γίνει γενικά - δηλαδή το ίδιο πρόγραμμα να τρέχει και στα γερμανικά και στα ελληνικά και σε οποιαδήποτε άλλη γλώσσα - δεν μεταφράζουμε απ'ευθείας το κείμενο. Χρησιμοποιούμε τα localedata και τη βιβλιοθήκη intl της C βιβλιοθήκης. Ας χρησιμοποιήσουμε τα localedata (τοπικά δεδομένα) για την ώρα. Το ίδιο πρόγραμμα τώρα γίνεται: ______________________________________________________________________ #include #include #include main () { struct tm *tp; char buf[80]; time_t date; /* Θέτει το locale σύμφωνα με την μεταβλητή περιβάλλοντος LANG ή LANGUAGE * Για τα ελληνικά πρέπει να είναι el (ISO639) */ setlocale (LC_TIME, ""); /* Για την ώρα και μόνο */ printf( "The time is: " ); time(&date); /* Μετατρέπει την ώρα έκφραση που συνδέεται με την ζώνη ώρας */ tp = localtime(&date); strftime(buf, sizeof buf, "%a %b %e %H:%M:%S %z %Y", tp); /* εκτυπώνει την ώρα */ printf ("%s\n",buf); } ______________________________________________________________________ Η ώρα τώρα θα τυπωθεί στην μορφή: Τετ Νοέ 11 22:44:29 +0200 1998 με ελληνικούς χαρακτήρες όπως βλέπετε(αν LANG=el ή gr για τις παλιές glibc2). Γι'αυτό ξεχάστε το ctime και ασχοληθείτε με το strftime(). Σε περίπτωση που δεν είδατε ελληνικούς χαρακτήρες ελέγξτε αν στο /usr/share/locale/el υπάρχουν τα απαραίτητα αρχεία. Αν δεν υπάρχουν προμηθευτείτε ένα νέο localedata - συμπεριλαμβάνεται συνήθως στην libc ή εγκαταστήστε το tarball που βρίσκεται στο ftp://argeas.cs- net.gr/pub/unix/linux/GREEK/locale.glibc2.el.tar.gz Για την μετάφραση των μηνυμάτων, που είναι και η κυριότερη ιδιότητα του NLS χρησιμοποιείται ο εξής τρόπος: ______________________________________________________________________ #include #include #include #include /* αρχείο της GNU libc */ main () { struct tm *tp; char buf[80]; time_t date; /* πέρα απο το LC_ALL υπάρχουν τα LC_TIME, LC_MESSAGES κλπ, τα οποία * προσδιορίζουν επ'ακριβώς τι μεταφράσεις θα χρησιμοποιήσουμε. */ setlocale (LC_ALL, ""); bindtextdomain ("my_time", "/usr/share/locale"); textdomain ("my_time"); printf( gettext("The time is: ") ); time(&date); tp = localtime(&date); strftime(buf, sizeof buf, "%a %b %e %H:%M:%S %z %Y", tp); printf ("%s\n",buf); } ______________________________________________________________________ Οι εντολές bindtextdomain() και textdomain() αφορούν την nls βιβλιοθήκη (libintl) και την πληροφορούν ότι η μετάφραση του προγράμματος βρίσκεται στο my_time.mo στον κατάλογο /usr/share/locale/XX, όπου ΧΧ η γλώσσα του χρήστη (καθορίζεται απο την μεταβλητή LANG ή LANGUAGE). Επειδή πολλές φορές το να γράφουμε gettext(...) είναι επίπονο για πολλά μηνύματα, χρησιμοποιούμε το: ______________________________________________________________________ #define _(Text) gettext(Text) /* στις επικεφαλίδες */ printf( _("The time is: ") ); ______________________________________________________________________ Το πρόγραμμα δεν θα λειτουργήσει ακόμη με ελληνικά. Χρειάζεται ακόμη τη δημιουργία του .po αρχείου. Αυτό είναι σχετικά απλό αν γίνει με το πρόγραμμα xgettext (από το πακέτο GNU gettext). Για το συγκεκριμένο πρόγραμμα η έξοδος του xgettext είναι: (σύνταξη "xgettext my_time.c") ______________________________________________________________________ # messages.po # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 1998-11-11 22:52+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: ENCODING\n" #: c.c:16 msgid "The time is: " msgstr "" #end of messages.po ______________________________________________________________________ και εδώ μετονομάζουμε το messages.po σε el.po, προσθέτοντας ταυτόχρονα στο msgstr την μετάφραση, πχ: ______________________________________________________________________ msgstr "Η ώρα είναι: " ______________________________________________________________________ Τελευταίο μέλημα του προγραμματιστή είναι να μετατρέψει αυτό το .po αρχείο σε .mo ή .gmo μορφή. Αυτό επιτυγχάνεται με το πρόγραμμα msgfmt (από το GNU gettext πάλι). ______________________________________________________________________ πχ msgfmt el.po -o el.gmo ______________________________________________________________________ και μετά να αντιγραφεί στο /usr/share/locale/el/LC_MESSAGES/ το el.gmo σαν my_time.mo (αυτά τα τελευταία καλό είναι να γίνουν μέσω κάποιου makefile). Το σημαντικότερο τώρα είναι να αυτοματοποιήσουμε αυτή τη διαδικασία. Αυτό επιτυγχάνεται με το GNU autoconf. Ας φτιάξουμε ένα configure.in που θα ελέγχει κατά πόσο υπάρχει υποστήριξη nls από την libc και καθώς και του strftime. (για καλύτερες διαμορφώσεις κοιτάξτε στο: http://teamball.sdsu.edu/doc/texi/gettext_toc.html ) Για να απλοποιήσουμε τα πράγματα θεωρούμε την εξής διαμόρφωση των αρχείων του προγράμματος: (έστω ότι το πρόγραμμα είναι στο /xxx) στον κατάλογο /xxx/ configure.in: Χρειάζεται για το autoconf (δείτε παρακάτω) config.h.in : (δείτε παρακάτω) στον κατάλογο /xxx/src/ my_time.c : Το πρόγραμμα στον κατάλογο /xxx/po/ my_time.pot : Αυτό είναι το messages.po που δημιουργείται απο το xgettext απλώς μετονομασμένο el.po : Το my_time.pot μεταφρασμένο στα ελληνικά POTFILES.in : Εδώ προσθέτετε όλα τα .c αρχεία στο src που χρησιμοποιούν το gettext. πχ: /xxx/src/my_time.c Αρκεί τώρα να αντιγράψετε απο το πακέτο gettext-0.10 τα po/Makefile.in στον κατάλογο του προγράμματός /xxx/po/ , όλο τον κατάλογο intl/ στον /xxx/intl/ και τα ABOUT-NLS, aclocal.m4 στον /xxx . Πάμε τώρα στον πρωταρχικό κατάλογο του προγράμματός μας (/xxx) και ας φτιάξουμε το configure.in απο το οποίο θα προκύψει το γνωστό(;) script configure. ______________________________________________________________________ # configure.in for my_time.c AC_INIT() AC_CONFIG_HEADER(config.h) AC_PROG_CC AC_PATH_PROG(MAKE,make) AC_PROG_INSTALL VERSION=1.0 PROGRAMS="my_time" AC_PREFIX_DEFAULT(/usr/local) AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE") AC_DEFINE_UNQUOTED(VERSION, "$VERSION") AC_SUBST(PACKAGE) AC_SUBST(VERSION) AC_SUBST(PROGRAMS) dnl υποστηρίζουμε ελληνικά (το el είναι απο το iso639 που πρέπει να dnl χρησιμοποιείται για την ένδειξη γλώσσας στις μεταφράσεις σύμφωνα με το dnl εγχειρίδιο το gettext.) ALL_LINGUAS="el" dnl Για το gettext 0.10. ud_GNU_GETTEXT AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl) AC_FUNC_STRFTIME AC_OUTPUT([Makefile src/Makefile intl/Makefile po/Makefile.in [sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile]) #end of configure.in ______________________________________________________________________ και αμέσως μετά δημιουργούμε ένα config.h.in (είναι βάση του αρχείου config.h που θα συμπεριλαμβάνεται στο πρόγραμμά μας. Η δημιουργία του config.h γίνεται απο το script configure.) Το config.h.in θα περιέχει: ______________________________________________________________________ # config.h.in for my_time.c /* Το όνομα του πακέτου (θα χρησιμοποιηθεί για το textdomain) */ #undef PACKAGE #undef VERSION /* strftime */ #undef HAVE_STRFTIME #undef ENABLE_NLS #end of config.h.in ______________________________________________________________________ Το Makefile.in για το πρόγραμμα (το Makefile δημιουργείται επίσης αυτόματα απο το configure), πρέπει να έχει σε γενικές γραμμές τα: ______________________________________________________________________ # Makefile.in CC = @CC@ LIBS = @LIBS@ CCOPTS = @CFLAGS@ -I. -I.. LN = @LN_S@ INSTALL = @INSTALL@ prefix = @prefix@ exec_prefix = @prefix@ datadir = $(prefix)/lib bin = $(prefix)/bin localedir = $(datadir)/locale DEFS = -DLOCALEDIR=\"$(localedir)\" SUBDIRS = @INTLSUB@ src @POSUB@ MAKE = @MAKE@ INSTALL = @INSTALL@ #Εάν ο κώδικας σας δεν είναι στον src/ κατάλογο χρειάζεται ορισμένες αλλαγές all: @for subdir in $(SUBDIRS); do \ echo making all in $$subdir; \ (cd $$subdir && $(MAKE) all) \ || case "$(MFLAGS)" in *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" install: @$(INSTALL) my_time $(bin) @$(MAKE) -C po/ install # end of makefile.in ______________________________________________________________________ ______________________________________________________________________ # src/Makefile.in # Εδώ οι επικεφαλίδες είναι περίπου ίδιες με πριν: CC = @CC@ LIBS = @LIBS@ CCOPTS = @CFLAGS@ -I../intl -I. -I.. LN = @LN_S@ INSTALL = @INSTALL@ prefix = @prefix@ exec_prefix = @prefix@ datadir = $(prefix)/lib localedir = $(datadir)/locale DEFS = -DLOCALEDIR=\"$(localedir)\" all: my_time my_time: my_time.o $(CC) $(OBJECTS) -o ../my_time $(LIBDIRS) $(LIBS) my_time.o: my_time.c $(CC) -c my_time.c $(CCOPTS) $(DEFS) #end of src/Makefile.in ______________________________________________________________________ Το πρόγραμμα τώρα θα γίνει: ______________________________________________________________________ # src/my_time.c #include #include #include /* ή "config.h" αν δεν βάλετε το -I. στο Makefile */ #ifdef ENABLE_NLS #include #endif main () { #ifdef HAVE_STRFTIME struct tm *tp; char buf[80]; time_t date; #else time_t tv; #endif #ifdef ENABLE_NLS setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); # define _(Text) gettext(Text) #else # define _(Text) (Text) #endif printf( _("The time is: ") ); #ifdef HAVE_STRFTIME_H time(&date); tp = localtime(&date); strftime(buf, sizeof buf, "%a %b %e %H:%M:%S %z %Y", tp); printf ("%s\n",buf); #else time(&tv); printf ( "%s",ctime(&tv) ); #endif } #end of src/my_time.c ______________________________________________________________________ Τώρα τρέχουμε το autoconf που δημιουργεί το configure script. Aν όλα πήγαν καλά έχουμε ένα πρόγραμμα που μιλάει ξένες γλώσσες! Το παραπάνω κείμενο είναι μια εισαγωγή μόνο στο θέμα. Δεν είναι σε καμιά περίπτωση πλήρες, αν θέλετε παραπάνω πληροφορίες συμβουλευτείτε τα εγχειρίδια των προγραμμάτων autoconf, gettext. Περισσότερα για το gettext (και την χρήση του με το autoconf) στο: http://teamball.sdsu.edu/doc/texi/gettext_toc.html 4. Διαδικασία της μετάφρασης 4.1. Είναι επίπονη η εργασία της μετάφρασης των μηνυμάτων; Δεν είναι αρκετά επίπονη. Το μόνο επίπονο μέρος είναι η αρχική μετάφραση όλου του όγκου των μηνυμάτων. Έπειτα, με την κυκλοφορία νέων εκδόσεων του ίδιου προγράμματος, αρκεί η μετάφραση των νέων μηνυμάτων, που είναι συνήθως λίγα στον αριθμό. Υπάρχουν ειδικά εργαλεία που βρίσκουν τα μηνύματα που έχουν αλλάξει μεταξύ των εκδόσεων και τα εμφανίζουν για μετάφραση. 4.2. Πληροφοριακά, ένα πρόγραμμα που υποστηρίζει NLS πως μοιάζει; Ο προγραμματιστής γράφει τα μηνύματα ως εξής: ______________________________________________________________________ ... /* Μερικές γραμμές κώδικα για αρχικοποίηση του συστήματος NLS */ ... /* Second: Login with proper USER/PASS sequence. */ printf( _("connected!\n") ); ... ______________________________________________________________________ Δηλαδή περικλείει τα μηνύματα που απαιτούν μετάφραση με _( ). Σε όλο το διάστημα της ανάπτυξης του προγράμματος, ο προγραμματιστής δεν ασχολείται με το σύστημα NLS παρά μόνο να περικλείει με _() το μηνύματα που βλέπει ο χρήστης. Το πρόγραμμα δουλεύει ως έχει. Έπειτα, ο προγραμματιστής τρέχει ένα βοηθητικό πρόγραμμα που συγκεντρώνει τα μηνύματα που περικλείονται σε _() σε ένα αρχείο. Στο αρχείο αυτό είναι που επεμβαίνει για να προσθέσει τη μετάφραση των μηνυμάτων. Έπειτα, με άλλο βοηθητικό πρόγραμμα, το πρώτο αρχείο μετατρέπεται σε μια δυαδική μορφή που μπορεί να χρησιμοποιηθεί από το εκτελέσιμο. Στην εκτέλεση του, το πρόγραμμα αναζητά μια μεταβλητή περιβάλλοντος για την επιλογή της γλώσσας εμφάνισης των μηνυμάτων. Βάση της γλώσσας, χρησιμοποιεί και τα ανάλογα μηνύματα. Αν τα μηνύματα δεν είναι παρόντα, τότε χρησιμοποιεί τα αγγλικά, τα οποία περιέχονται στο ίδιο το εκτελέσιμο πρόγραμμα. 4.3. Ποια είναι τα προγράμματα που βοηθούν τη μετάφραση και πως λειτουργούν; 4.3.1. Πακέτο gettext Τα προγράμματα που βοηθούν την οργάνωση της μετάφρασης είναι από το πακέτο gettext, και θα το βρείτε σε όλα τα καλά GNU mirror sites. Τρέχουσα έκδοση: 0.10.XX και τη στιγμή που γράφεται αυτό ισχύει ΧΧ=35 και gettext-0.10.35.tar.gz Τα περισσότερα προγράμματα υλοποιούν το NLS με το πακέτο gettext. Υπάρχουν κάποια άλλα που υποστηρίζουν μια παλιότερη τεχνική, την catgets. Θα μιλήσουμε μόνο για gettext. 4.3.2. Πρόγραμμα xgettext Είσοδος: αρχεία *.c ή *.h με αλφαριθμητικά της μορφής _("blah blah"). Έξοδος: αρχείο κειμένου *.pot με τα αλφαριθμητικά προς μετάφραση. Το αρχείο *.pot είναι το αρχείο υπόδειγμα, που θα έπαιρνε κάποιος μεταφραστής ελληνικών και θα το αντέγραφε σε el.po. Στο αρχείο el.po γίνεται η μετάφραση. Σε όλα τα πακέτα με υποστήριξη "gettext", υπάρχει ένας υποκατάλογος po/ που περιέχει το αρχείο υπόδειγμα "πρόγραμμα.pot", το οποίο είναι κενό από μεταφρασμένα μηνύματα. Ταυτόχρονα, για τις υποστηριζόμενες γλώσσες υπάρχουν αντίστοιχα αρχεία *.po, όπως de.po, fr.po, nl.po που είναι αντίγραφα του αρχικού αρχείου υποδείγματος .pot με συμπληρωμένες τις μεταφράσεις. 4.3.3. Πρόγραμμα msgfmt Είσοδος: αρχεία *.po (portable object) Έξοδος: αρχεία *.mo (machine object) Το αρχείο .mo είναι εκείνο που θα τοποθετηθεί στο κατάλογο /usr/share/locale/el/LC_MESSAGES για να ολοκληρωθεί η εγκατάσταση. 4.3.4. Λοιπά προγράμματα Άλλα προγράμματα του πακέτου gettext είναι · msgmerge, έξυπνη συνένωση δύο .po αρχείων · msgcomm, εύρεση κοινών μηνυμάτων δύο .po αρχείων · msgcmp, σύγκριση δύο .po αρχείων · msgunfmt, μετατροπή του .mo σε .po 5. Επιλογή ελληνικών λέξεων και εκφράσεων Είναι σημαντικό να υπάρχει μια ομοιογένεια στο αποτέλεσμα των μεταφράσεων. Για αυτό το λόγο, Χρήση όρων που προτείνουν έγκυρες πηγές, όπως ΕΛΟΤ, ΕΠΥ, μεταφρασμένα βιβλία πληροφορικής στα ελληνικά (π.χ. Λειτουργικά συστήματα του A.S.Tanenbaum) και προηγούμενες μεταφράσεις. 5.1. Πως θα μπορούσε να μεταφραστεί το π.χ. "Broken pipe"; "Σπασμένη σωλήνα"; Με έξυπνη επιλογή των όρων, μπορούμε να λύσουμε τέτοια προβλήματα. Η Ελληνική γλώσσα είναι γνωστό ότι είναι αρκετά πλούσια. Ένας καλύτερος όρος για το παραπάνω παράδειγμα θα ήταν "Διακοπείσα σωλήνωση". 5.2. LEXIS Το LEXIS είναι ένα λεξικό με ελληνικές μεταφράσεις αγγλικών εννοιών που χρησιμοποιούνται στη Πληροφορική. 5.3. Ελληνική βιβλιογραφία · Ασφάλεια στις Τεχνολογίες Πληροφοριών & Επικοινωνιών - Εννοιολογική Θεμελίωση (Εκδόσεις Νέων Τεχνολογιών) · Λειτουργικά Συστήματα Ι (μετάφραση του βιβλίου του Α.Tannembaum από το Ε.Κ.Π.Α.;)(προς εξακρίβωση) · Ε.Π.Υ.(προς συμπλήρωση) 6. Οργάνωση μεταφράσεων 6.1. Προσόντα μεταφραστών Τα άτομα που τους ενδιαφέρει η μετάφραση πρέπει να έχουν · ευχέρια στην ελληνική γλώσσα · καλή γνώση όρων της πληροφορικής · εμπειρία με το λογισμικό προς μετάφραση Γίνεται ανάληψη της βασικής μετάφρασης του προγράμματος και ένα δεύτερο άτομο ασχολείται με τη διαδικασία της αναθεώρησης (reviewing). Θεωρούμε τη διαδικασία της αναθεώρησης σημαντική για την υψηλή ποιότητα της μετάφρασης. 6.2. Ανάληψη μεταφράσεων Μόλις επιλέξετε το πακέτο που θέλετε να μεταφράσετε, επικοινωνείτε με τον τρέχοντα υπεύθυνο των μεταφράσεων και σας αποδίδετε ο αναθεωρητής της μετάφρασης. Αφού ολοκληρώσετε τη μετάφραση, ο αναθεωρητής την ελέγχει και σας στέλνει πίσω σχόλια και προτάσεις για αλλαγή. Βάση των στοιχείων αυτών, προκύπτει μια τελική έκδοση η οποία αποστέλλετε προς συμπερίληψη στο πακέτο λογισμικού. Για τις μελλοντικές εκδόσεις του πακέτου μπορείτε να στέλνετε κατευθείαν τις ανανεωμένες μεταφράσεις. 6.3. Οδηγίες μετάφρασης Ο μεταφραστής πρέπει να μεταφράσει τα μηνύματα που βρίσκονται σε ένα αρχείο με όνομα po/πρόγραμμα.pot στο πακέτο του προγράμματος. Το συγκεκριμένο αρχείο έχει τη μορφή msgid "Connecting to %s:%hu... " msgstr "" Oπότε προσθέτουμε στο πεδίο msgstr την ελληνική μετάφραση, δηλαδή: · msgid "Connecting to %s:%hu... " · msgstr "Σύνδεση με %s:%hu... " Περισσότερες οδηγίες μπορείτε να βρείτε στο GNU Translation Project 6.4. Νομικές λεπτομέρειες Στην περίπτωση που μεταφράζετε ένα πρόγραμμα που ανήκει στα Επίσημα GNU Προγράμματα, πρέπει να αποκυρρύξετε όλα τα δικαιώματα εκμετάλλευσης. Αυτό γίνεται με την αποστολή του λεγόμενου DISCLAIMER . Για περισσότερες πληροφορίες, επικοινωνήστε με τoν υπεύθυνο των μεταφράσεων για περισσότερες πληροφορίες. Δείτε ``Υπεύθυνος μεταφράσεων'' Τα άτομα της ελληνικής μεταφραστικής ομάδας, τα οποία έχουν εκτελέσει την προηγούμενη διαδικασία είναι · Χρήστος Αναστασίου · Νίκος Μαυρογιαννόπουλος · Κοσμάς Μπενέκος · Σίμος Ξενιτέλλης · Γιάννης Σπανός 6.5. Ποιοι είναι οι βασικοί λόγοι μετάφρασης των μηνυμάτων στα ελληνικά; 1. Ο εξελληνισμός ενισχύει τα επιχειρήματα για χρήση του Linux στη δευτεροβάθμια και τριτοβάθμια εκπαίδευση. 2. Οι νεώτερες διανομές του Linux θα περιέχουν εξ ορισμού τα ελληνικά μηνύματα και θα υποστηρίζουν εν γένει τα ελληνικά. 3. Καθιερώνονται ντε φάκτο οι ελληνικοί όροι στη πληροφορική. 4. Ενισχύονται οι διάφοροι κλώνοι του Unix που έχουν βασική υποστήριξη Ελληνικών όπως Solaris. 5. Ο εξελληνισμός είναι κάτι που πρέπει να γίνει για να είναι πλήρες το Linux. Για όσους είναι αρνητικά διακείμενοι, σκεφτείτε ότι είναι σαν να δουλεύετε σε ένα οίκο λογισμικού (software house) και και να διαθέτετε το πρόγραμμα χωρίς να βάλετε αρχεία βοήθειας διότι κανείς δεν τα διαβάζει. 6. Για να χρησιμοποιηθεί το Linux στην εκπαίδευση, είναι σημαντικό προσόν να είναι εξελληνισμένο. Και αυτό, είτε για τους διαγωνισμούς πληροφορικής, είτε για τους μαθητές με δυσκολία στα αγγλικά. 7. Τρέχουσα κατάσταση των μεταφράσεων · Επίσημα GNU προγράμματα 1. enscript, μετάφραση Μανώλης Λουράκης , αναθεώρηση Σίμος Ξενιτέλλης 2. fileutils, μετάφραση Σίμος Ξενιτέλλης , αναθεώρηση κενό 3. gettext, μετάφραση Σίμος Ξενιτέλλης , αναθεώρηση κενό 4. grep, μετάφραση Σίμος Ξενιτέλλης , αναθεώρηση κενό 5. hello, μετάφραση Σίμος Ξενιτέλλης , αναθεώρηση κενό 6. libc, μετάφραση Νίκος Μαυρογιαννόπουλος , αναθεώρηση Σίμος Ξενιτέλλης 7. m4, μετάφραση Σίμος Ξενιτέλλης , αναθεώρηση κενό 8. recode, μετάφραση Σίμος Ξενιτέλλης , αναθεώρηση κενό 9. sharutils, μετάφραση Σίμος Ξενιτέλλης , αναθεώρηση κενό 10. sh-utils, μετάφραση Νίκος Μαυρογιαννόπουλος , αναθεώρηση κενό 11. sed, μετάφραση Σίμος Ξενιτέλλης , αναθεώρηση κενό 12. textutils, μετάφραση Σίμος Ξενιτέλλης , αναθεώρηση κενό 13. wget, μετάφραση Σίμος Ξενιτέλλης , αναθεώρηση κενό Περισσότερες πληροφορίες Πίνακας μεταφράσεων #1 , Πίνακας μεταφράσεων #2 · Ανεπίσημα GNU προγράμματα 1. mutt, μετάφραση Φάνης Δοκιανάκης , αναθεώρηση Σίμος Ξενιτέλλης 2. shadow, μετάφραση Νίκος Μαυρογιαννόπουλος , αναθεώρηση κενό 3. windowmaker, μετάφραση Παπαγρηγορίου Νικόλαος , αναθεώρηση κενό 4. lyx, μετάφραση Μενέλαος Μαγκλής , αναθεώρηση κενό, πληροφορίες Ελληνική Σελίδα Lyx · KDE 1. βασικά μηνύματα KDE, μετάφραση Θεόδωρος Σολδάτος , αναθεώρηση κενό Περισσότερες πληροφορίες Πίνακας μεταφράσεων KDE · Gnome Περισσότερες πληροφορίες Πίνακας μεταφράσεων Gnome 8. Εκκρεμότητες 8.1. Λοιπά προγράμματα που περιμένουν ελληνική μετάφραση 1. Μηνύματα εγκατάστασης RedHat, RedHat 2. Μηνύματα εγκατάστασης SuSE, SuSE 3. Fortify, Fortify , χρήση συστήματος διαφορετικού από NLS 4. freetype, FreeType font rendering engine 5. rpm, RPM, package manager 6. Squid, Squid 2 Cache Proxy Server 7. Console tools, Console-tools 9. Διαθέσιμοι αναθεωρητές · Μενέλαος Μαγλής · Νίκος Μαυρογιαννόπουλος · Σίμος Ξενιτέλλης Όποιος είναι διαθέσιμος να συνεισφέρει ως αναθεωρητής μεταφράσεων, να επικοινωνήσει με τον ``υπεύθυνο μεταφράσεων'' για την προσθήκη του/της στη λίστα. 10. Ελληνικές μεταφράσεις στις εκδόσεις Linux · RedHat Linux 5.2 1. WindowMaker · RedHat Linux 6.0 1. WindowMaker 2. fileutils 3. grep 4. KDE, έκδοση 1.1 5. libc · OpenLinux 2.2 1. fileutils, έκδοση 4.0-b6 2. KDE, έκδοση 1.1 · SuSE Linux 6.2 (προς συμπλήρωση) 11. PO αρχεία 1. Επίσημα GNU προγράμματα Επίσημα GNU προγράμματα 2. Ανεπίσημα GNU προγράμματα · Lyx, Lyx · Mutt, mutt, international version · Shadow suite, shadow-suite · WindowMaker, WindowMaker 3. KDE 4. Gnome κενό 12. Επικοινωνία 12.1. Ποιος είναι ο τρέχον υπεύθυνος των ελληνικών μεταφράσεων; Υπεύθυνος για τις μεταφράσεις των Επίσημων GNU Προγραμμάτων στην Ελληνική γλώσσα είναι ο Σίμος Ξενιτέλλης (S.Xenitellis@rhbnc.ac.uk). Για οτιδήποτε πληροφορία, στείλτε e-mail. Για τα Ανεπίσημα GNU Προγράμματα, συντονιστής είναι εκείνος των Επίσημων Μεταφράσεων. Για το γραφικό περιβάλλον KDE, υπεύθυνος είναι ο Θεόδωρος Ι. Σολδάτος . Για το γραφικό περιβάλλον Gnome, συντονιστής είναι ο Σίμος Ξενιτέλλης . Για το Gnome δεν υπάρχουν μέχρι αυτή τη στιγμή ελληνικές μεταφράσεις. Το λογισμικό αυτό βρίσκεται σε ανάπτυξη και τα αντίστοιχα αρχεία μηνυμάτων αλλάζουν αρκετά συχνά. Πιστεύουμε ότι στο άμεσο μέλλον πρέπει να ξεκινήσει η μετάφραση και στην περιοχή αυτή.