Ελληνικές Μεταφράσεις NLS (Greek NLS translations) <author>Σίμος Ξενιτέλλης, <tt/S.Xenitellis@rhbnc.ac.uk/ <date>v0.9, 21 Αυγούστου 1999 <abstract> Αυτό το κείμενο περιγράφει την προσπάθεια εξελληνισμού των GNU προγραμμάτων. Τα GNU προγράμματα (δηλαδή τα περισσότερα προγράμματα εφαρμογών που απαντώνται συνήθως σε Unix συστήματα όπως ls, mutt, kde, gnome) έχουν τη δυνατότητα να υποστηρίξουν γλώσσες εκτός των αγγλικών με ένα απλό και διαφανές για το χρήστη τρόπο. Το παρόν ασχολείται με όσα αφορούν τη μετάφραση στα ελληνικά. </abstract> <!-- Πίνακας Περιεχομένων --> <toc> <!-- Αρχή κειμένου --> <sect>Εισαγωγή <p> <sect1>Ιστορία Αναθεωρήσεων <p> <itemize> <item><tt>v0.1 - 09 Ιανουαρίου 1999 - Σίμος Ξενιτέλλης - Αρχική Έκδοση</tt> <item><tt>v0.2 - 24 Ιανουαρίου 1999 - Σίμος Ξενιτέλλης - Μικρές αλλαγές</tt> <item><tt>v0.3 - 14 Φεβρουαρίου 1999 - Σίμος Ξενιτέλλης - Μικρές αλλαγές</tt> <item><tt>v0.4 - 24 Φεβρουαρίου 1999 - Σίμος Ξενιτέλλης - Πρώτη δημοσίευση στο Hellug (http://www.hellug.gr)</tt> <item><tt>v0.5 - 15 Ιουνίου 1999 - Σίμος Ξενιτέλλης - Γενική αναθεώρηση, προσθήκη KDE, Gnome</tt> <item><tt>v0.6 - 22 Ιουνίου 1999 - Σίμος Ξενιτέλλης - Διορθώσεις από την ανάδραση, προσθήκη νέων μεταφράσεων</tt> <item><tt>v0.7 - 24 Ιουλίου 1999 - Σίμος Ξενιτέλλης - Προσθήκη νέων μεταφράσεων, προσθήκη λίστας προγραμμάτων διαθέσιμων για μετάφραση, προσθήκη πληροφοριών για το Lyx, προσθήκη λίστας με διαθέσιμους αναθεωρητές, προσθήκη λίστας με εκκρεμότητες, τρέχουσα υποστήριξη ελληνικών από εκδόσεις του Linux, μικρές διορθώσεις</tt> <item><tt>v0.8 - 25 Ιουλίου 1999 - Σίμος Ξενιτέλλης - Μικρές αλλαγές</tt> <item><tt>v0.9 - 21 Αυγούστου 1999 - Σίμος Ξενιτέλλης - Προσθήκη τοποθεσίας shadow utils</tt> </itemize> <p> <sect1>Τι είναι το "NLS"; <p> Το <bf/NLS (National Language Support)/ είναι μια δυνατότητα που μπορεί να προσφέρει ένα πρόγραμμα ούτως ώστε να κάνει δυνατή την εμφάνιση όλων των μηνυμάτων και συμβόλων που βλέπει ο τελικός χρήστης στην τοπική του γλώσσα. Δηλαδή, προσφέρει πολύγλωσση υποστήριξη στα προγράμματα με ένα αρκετά βολικό και διαφανές τρόπο. Εκτός από τα μηνύματα, μπορεί να χρησιμοποιηθεί για την απεικόνιση της τοπικής νομισματικής μονάδας, της τοπικής ώρας, του τοπικού συμβόλου διαχωρισμού του ακέραιου μέρος από το δεκαδικό και άλλα. Στο παρόν εξετάζουμε το τμήμα που αφορά τη μετάφραση των μηνυμάτων στα ελληνικά. <sect>Έκταση του NLS <p> <sect1>Σε τι επίπεδο βρίσκονται οι άλλες γλώσσες; <p> Οι περισσότερο διαδεδομένες γλώσσες βρίσκονται σε πολύ καλό επίπεδο όσον αφορά την πληρότητα και την ποιότητα των μεταφράσεων. Ακόμα, υπάρχει υποστήριξη από γλώσσες που δεν είναι αρκετά συνηθισμένες όπως τα σλοβένικα. Ενημερωτικά, πολύ καλή δουλειά υπάρχει για τα γαλλικά, τα γερμανικά, τα φινλανδικά, τα ισπανικά και τα πολωνέζικα. Η τάση αυτή τη στιγμή είναι οι διάφορες γλώσσες μικρής εμβέλειας να προστίθενται στη λίστα, κυρίως λόγω της αναγνώρισης που έχει δεχθεί το Linux που είναι κύριος χρήστης των προγραμμάτων που υποστηρίζουν NLS. <sect1>Ποια λειτουργικά συστήματα υποστηρίζουν το NLS; <p> Το <bf/λειτουργικό σύστημα/ Linux είναι κύριος χρήστης των προγραμμάτων που υποστηρίζουν NLS. Το <url url="http://www.linux.gr" name="Linux"> απαρτίζεται από προγράμματα εφαρμογών που διατίθενται με την άδεια διάθεσης <url url="http://www.gnu.org" name="GNU">. Το λογισμικό αυτό, υποστηρίζει κατά βάση το NLS. Εκτός από το Linux, τα περισσότερα λειτουργικά συστήματα Unix ή τύπου-Unix μπορούν να υποστηρίξουν NLS. <sect1>Επιγραμματικά, πώς λειτουργεί το NLS; <p> Για τα περισσότερα προγράμματα, η υποστήριξη γίνεται με το πακέτο gettext. Στο πακέτο αυτό περιλαμβάνονται μια βιβλιοθήκη στην οποία συνδέεται (link) το εκάστοτε πρόγραμμα στη φάση της μεταγλώττισης. Στο ίδιο το πρόγραμμα, προστίθενται μερικές εντολές της βιβλιοθήκης. Οι εντολές αυτές ελέγχουν μεταβλητές του περιβάλλοντος που καθορίζουν τη γλώσσα και αντικαθιστούν τα μηνύματα με τα μεταφρασμένα μηνύματα. <sect1>Ποια προγράμματα υποστηρίζουν NLS; <p> Θα χωρίσουμε τα προγράμματα σε κατηγορίες. <enum> <item>Επίσημα GNU προγράμματα <p> Η μετάφραση των προγραμμάτων αυτών οργανώνεται από το GNU Translation Project το οποίο έχει στενές σχέσεις με το FSF (Free Software Foundation). Τα πιο βασικά προγράμματα ενός συστήματος Unix καλύπτονται εδώ. Το γεγονός ότι τα προγράμματα είναι επίσημα GNU σημαίνει ότι τα άτομα που αποστέλλουν μεταφράσεις, πρέπει να δηλώνουν εγγράπτως ότι συμφωνούν με την άδεια διάθεσης GNU. Ακόμα, οι μεταφράσεις κάθε γλώσσας πρέπει να έχουν ένα υπεύθυνο που να οργανώνει τη διαδικασία. Αυτές οι νομικές ιδιαιτερότητες, αν και φαίνονται ότι αποθαρρύνουν τις μεταφράσεις, είναι αναγκαίες για την ορθή χρήση της άδειας διάθεσης GNU από νομικής πλευράς. <p> <item>Ανεπίσημα GNU προγράμματα <p> Ένας σημαντικός αριθμός προγραμμάτων, που οι προγραμματιστές τους επιλέγουν να διαθέσουν με την άδεια διάθεσης GNU, υποστηρίζουν NLS. Για αυτά τα προγράμματα, αρκεί η αποστολή της μετάφρασης στους ίδιους τους προγραμματιστές για να τη συμπεριλάβουν. Εδώ ανήκουν και τα γραφικά περιβάλλοντα KDE και Gnome, ωστόσο για αυτά προσθέτουμε δύο νέες κατηγορίες λόγω της μεγάλης σημασίας τους. <p> <item>KDE <p> Το γραφικό περιβάλλον <url url="http://www.kde.org" name="KDE"> απαρτίζεται από ένα σημαντικό αριθμό προγραμμάτων τα οποία υποστηρίζουν NLS. Το KDE είναι πολύ δημοφιλές και υπάρχει μεγάλη ανάγκη να υπάρχει μια πλήρης, τρέχουσα και ακριβής υποστήριξη ελληνικών. <p> <item>Gnome <p> Το γραφικό περιβάλλον <url url="http://www.gnome.org" name="Gnome">, απαρτίζεται, όπως το KDE, από ένα σημαντικό αριθμό προγραμμάτων προγραμμάτων που υποστηρίζουν NLS. To Gnome αρχίζει να διαδίδεται και αναμένεται να παίξει ένα σημαντικό ρόλο σαν ένα γραφικό περιβάλλον για συστήματα Unix. </enum> <sect1>Στόχος των μεταφράσεων <p> Επιθυμούμε στις μεταφράσεις να πετύχουμε τους παρακάτω στόχους <itemize> <item>ακρίβεια στη μετάφραση των μηνυμάτων στη τοπική γλώσσα <item>πληρότητα της μετάφρασης <item>ποιότητα της μετάφρασης <item>ομοιογένεια της μετάφρασης και μεταξύ μεταφράσεων <item>ενημερότητα των μεταφράσεων μεταξύ εκδόσεων </itemize> <sect>NLS στην πράξη <p> <sect1>Παράδειγμα χρήσης του NLS <p> Κοιτάξτε στο κατάλογο <tscreen> RedHat-6.0: /usr/share/locale (προς εξακρίβωση) </tscreen> <tscreen> RedHat-5.x: /usr/share/locale </tscreen> <tscreen> RedHat-4.x: /usr/share/locale (προς εξακρίβωση) </tscreen> <tscreen> Open Linux 2.2: /usr/share/locale (προς εξακρίβωση) </tscreen> <tscreen> SuSe 6.χ: /usr/share/locale (προς εξακρίβωση) </tscreen> <tscreen> Slackware 4.0: /usr/share/locale (προς εξακρίβωση) </tscreen> <tscreen> Debian 2.x: /usr/share/locale (προς εξακρίβωση) </tscreen> στο σύστημά σας για διαγράμματα που αφορούν τις υποστηριζόμενες χώρες. Θα βρείτε σίγουρα γαλλικά, ισπανικά, γερμανικά, ολλανδικά κλπ. Προχωρήστε στο υποκατάλογο <tt/es/ και μετά <tt/LC_MESSAGES/, δηλαδή <tt>/usr/share/es/LC_MESSAGES/</tt> και έστω ότι βρίσκετε το "fileutils.mo". Τότε, έχετε υποστήριξη για ισπανικά στο ls, mkdir κτλ. (Αν έχετε υποκατάλογο <tt/el/ για ελληνικά και το αντίστοιχο αρχείο στο σύστημά σας, μπορείτε να χρησιμοποιήσετε το λεκτικό αυτό αντί του <tt/es/). Tρέξτε <itemize> <item> <tt/setenv LANGUAGE es/ (για όσους έχουν φλοιό tcsh ή συμβατό με csh) ή <item> <tt/export LANGUAGE es/ (για όσους έχουν φλοιό bash ή συμβατό με sh) </itemize> Τώρα τρέξτε "ls --help" και θα δείτε ισπανικά μηνύματα! <sect1>Το δοκίμασα άλλα δεν δουλεύει! <p> Σε αυτή την κατηγορία μπορεί να βρίσκονται οι χρήστες με παλιά έκδοση του Linux. <p> Στο σύστημά σας μπορεί να υπάρχουν περισσότεροι κατάλογοι με πληροφορίες για μεταφράσεις προγραμμάτων (κατάλογοι locale). Το σύνολο των καταλόγων που ελέγχονται, ορίζεται με τη μεταβλητή περιβάλλοντος NLSPATH. Πάντα υπάρχουν κάποιοι κατάλογοι που το σύστημα ερευνά εξ ορισμού, οι οποίοι έχουν προκαθοριστεί στη βασική βιβλιοθήκη του συστήματός σας, τη libc. Δοκιμάστε "strace -o output.log ls --help" και μετά "grep open output.log" για να δείτε που ψάχνει το σύστημα. Μετά καθορίστε ανάλογα το NLSPATH. <sect1>Με ποιο(ποιους) τρόπους καθορίζεται η γλώσσα με την οποία εμφανίζονται τα μηνύματα ενός συστήματος; <p> Μέσω μεταβλητών περιβάλλοντος. Για κάποιο λόγο, υπάρχει ένας αριθμός από μεταβλητές που κάνουν σχεδόν την ίδια δουλειά. Η μεταβλητή που φαίνετε να χρησιμοποιούν οι περισσότεροι χρήστες είναι η <bf/LANG/, με τη μορφή <itemize> <item> <tt/setenv LANG el/ (για όσους έχουν φλοιό tcsh ή συμβατό με csh) ή <item> <tt/export LANG=el/ (για όσους έχουν φλοιό bash ή συμβατό με sh) </itemize> <p> Διαφορετικά, υπάρχει η μεταβλητή <tt/LANGUAGE/, η οποία έχει προτεραιότητα έναντι της <tt/LANG/. <p> Για τα συστήματα με glibc 2.1 (αυτή τη στιγμή RedHat 6.0), ο χρήστης μπορεί να εκτελέσει (προς εξακρίβωση) <itemize> <item> <tt/setenv LANG greek/ (για όσους έχουν φλοιό tcsh ή συμβατό με csh) ή <item> <tt/export LANG=greek/ (για όσους έχουν φλοιό bash ή συμβατό με sh) </itemize> <sect1>Μετάπτωση γλωσσών σε περίπτωση απουσίας μεταφράσεων <p> Tρέξτε <itemize> <item> <tt/setenv LANGUAGE 'it:fr'/ (για όσους έχουν φλοιό tcsh ή συμβατό με csh) ή <item> <tt/export LANGUAGE='it:fr'/ (για όσους έχουν φλοιό bash ή συμβατό με sh) </itemize> Σε όλες τις περιπτώσεις, υπάρχει η τελική μετάπτωση στην αγγλική. <sect1>Προγραμματιστικές πληροφορίες <p> Το παρακάτω υλικό προέρχεται από το <url url="mailto:nmav@hellug.gr" name="Νίκο Μαυρογιαννόπουλο">. <p> Μιας και το nls χρησιμοποιείται όλο και περισσότερο στα νέα προγράμματα (ιδιαίτερα αυτά που αποτελούν το GNU σύστημα), είναι αναγκαίο να κάνουμε μια περιγραφή της διαδικασίας που χρειάζεται για να το ενσωματώσουμε και στα δικά μας προγράμματα. <p> Η άδεια του gettext για τα κομμάτια που θα ενσωματώσουμε στο πρόγραμμά μας είναι η GNU LGPL που δεν μας περιορίζει στον καθορισμό της άδειας του προγράμματός μας. Κοιτάξτε την πάντως για να δείτε αν είστε συμβατοί(!). <p> Ας προσπεράσουμε όμως τα "τυπικά" και ας περάσουμε στο ψητό. Τα προγράμματα που θα χρειαστούμε είναι τα GNU autoconf και gettext-0.10, και βρίσκονται στο πιο κοντινό gnu mirror. <p> Εδώ θα προσπαθήσουμε να προσθέσουμε υποστήριξη εθνικής/τοπικής γλώσσας (nls) σε ένα πρόγραμμα γραμμένο σε C. Ας δούμε ένα απλό πρόγραμμα, που τυπώνει την ώρα στην οθόνη: <code> #include <stdio.h> #include <time.h> main () { time_t tv; printf( "The time is: " ); time(&tv); printf ( "%s",ctime(&tv) ); } </code> <p> Η ώρα όπως και το μήνυμα τυπώνεται στα αγγλικά. Επειδή η μετάφραση πρέπει να γίνει γενικά - δηλαδή το ίδιο πρόγραμμα να τρέχει και στα γερμανικά και στα ελληνικά και σε οποιαδήποτε άλλη γλώσσα - δεν μεταφράζουμε απ'ευθείας το κείμενο. Χρησιμοποιούμε τα localedata και τη βιβλιοθήκη intl της C βιβλιοθήκης. <p> Ας χρησιμοποιήσουμε τα localedata (τοπικά δεδομένα) για την ώρα. <p> Το ίδιο πρόγραμμα τώρα γίνεται: <code> #include <stdio.h> #include <time.h> #include <locale.h> 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); } </code> Η ώρα τώρα θα τυπωθεί στην μορφή: Τετ Νοέ 11 22:44:29 +0200 1998 με ελληνικούς χαρακτήρες όπως βλέπετε(αν LANG=el ή gr για τις παλιές glibc2). Γι'αυτό ξεχάστε το ctime και ασχοληθείτε με το strftime(). <p>Σε περίπτωση που δεν είδατε ελληνικούς χαρακτήρες ελέγξτε αν στο /usr/share/locale/el υπάρχουν τα απαραίτητα αρχεία. Αν δεν υπάρχουν προμηθευτείτε ένα νέο localedata - συμπεριλαμβάνεται συνήθως στην libc ή εγκαταστήστε το tarball που βρίσκεται στο <url url="ftp://argeas.cs-net.gr/pub/unix/linux/GREEK/locale.glibc2.el.tar.gz" name="ftp://argeas.cs-net.gr/pub/unix/linux/GREEK/locale.glibc2.el.tar.gz"> <p>Για την μετάφραση των μηνυμάτων, που είναι και η κυριότερη ιδιότητα του NLS χρησιμοποιείται ο εξής τρόπος: <code> #include <stdio.h> #include <time.h> #include <locale.h> #include <libintl.h> /* αρχείο της 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); } </code> Οι εντολές bindtextdomain() και textdomain() αφορούν την nls βιβλιοθήκη (libintl) και την πληροφορούν ότι η μετάφραση του προγράμματος βρίσκεται στο my_time.mo στον κατάλογο /usr/share/locale/XX, όπου ΧΧ η γλώσσα του χρήστη (καθορίζεται απο την μεταβλητή LANG ή LANGUAGE). <p> Επειδή πολλές φορές το να γράφουμε gettext(...) είναι επίπονο για πολλά μηνύματα, χρησιμοποιούμε το: <code> #define _(Text) gettext(Text) /* στις επικεφαλίδες */ printf( _("The time is: ") ); </code> Το πρόγραμμα δεν θα λειτουργήσει ακόμη με ελληνικά. Χρειάζεται ακόμη τη δημιουργία του .po αρχείου. Αυτό είναι σχετικά απλό αν γίνει με το πρόγραμμα xgettext (από το πακέτο GNU gettext). <p> Για το συγκεκριμένο πρόγραμμα η έξοδος του xgettext είναι: (σύνταξη "xgettext my_time.c") <code> # messages.po # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # FIRST AUTHOR <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\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 </code> και εδώ μετονομάζουμε το messages.po σε el.po, προσθέτοντας ταυτόχρονα στο msgstr την μετάφραση, πχ: <code> msgstr "Η ώρα είναι: " </code> <p>Τελευταίο μέλημα του προγραμματιστή είναι να μετατρέψει αυτό το .po αρχείο σε .mo ή .gmo μορφή. Αυτό επιτυγχάνεται με το πρόγραμμα msgfmt (από το GNU gettext πάλι). <code> πχ msgfmt el.po -o el.gmo </code> και μετά να αντιγραφεί στο /usr/share/locale/el/LC_MESSAGES/ το el.gmo σαν my_time.mo (αυτά τα τελευταία καλό είναι να γίνουν μέσω κάποιου makefile). <p> Το σημαντικότερο τώρα είναι να αυτοματοποιήσουμε αυτή τη διαδικασία. Αυτό επιτυγχάνεται με το GNU autoconf. Ας φτιάξουμε ένα configure.in που θα ελέγχει κατά πόσο υπάρχει υποστήριξη nls από την libc και καθώς και του strftime. (για καλύτερες διαμορφώσεις κοιτάξτε στο: <url url="http://teamball.sdsu.edu/doc/texi/gettext_toc.html" name="http://teamball.sdsu.edu/doc/texi/gettext_toc.html">) <p> Για να απλοποιήσουμε τα πράγματα θεωρούμε την εξής διαμόρφωση των αρχείων του προγράμματος: (έστω ότι το πρόγραμμα είναι στο /xxx) στον κατάλογο /xxx/ <verb> configure.in: Χρειάζεται για το autoconf (δείτε παρακάτω) config.h.in : (δείτε παρακάτω) </verb> στον κατάλογο /xxx/src/ <verb> my_time.c : Το πρόγραμμα </verb> στον κατάλογο /xxx/po/ <verb> my_time.pot : Αυτό είναι το messages.po που δημιουργείται απο το xgettext απλώς μετονομασμένο el.po : Το my_time.pot μεταφρασμένο στα ελληνικά POTFILES.in : Εδώ προσθέτετε όλα τα .c αρχεία στο src που χρησιμοποιούν το gettext. πχ: /xxx/src/my_time.c </verb> Αρκεί τώρα να αντιγράψετε απο το πακέτο gettext-0.10 τα po/Makefile.in στον κατάλογο του προγράμματός /xxx/po/ , όλο τον κατάλογο intl/ στον /xxx/intl/ και τα ABOUT-NLS, aclocal.m4 στον /xxx . <p> Πάμε τώρα στον πρωταρχικό κατάλογο του προγράμματός μας (/xxx) και ας φτιάξουμε το configure.in απο το οποίο θα προκύψει το γνωστό(;) script configure. <code> # 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 </code> και αμέσως μετά δημιουργούμε ένα config.h.in (είναι βάση του αρχείου config.h που θα συμπεριλαμβάνεται στο πρόγραμμά μας. Η δημιουργία του config.h γίνεται απο το script configure.) Το config.h.in θα περιέχει: <code> # config.h.in for my_time.c /* Το όνομα του πακέτου (θα χρησιμοποιηθεί για το textdomain) */ #undef PACKAGE #undef VERSION /* strftime */ #undef HAVE_STRFTIME #undef ENABLE_NLS #end of config.h.in </code> <p> Το Makefile.in για το πρόγραμμα (το Makefile δημιουργείται επίσης αυτόματα απο το configure), πρέπει να έχει σε γενικές γραμμές τα: <code> # 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 </code> <code> # 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 </code> Το πρόγραμμα τώρα θα γίνει: <code> # src/my_time.c #include <stdio.h> #include <time.h> #include <config.h> /* ή "config.h" αν δεν βάλετε το -I. στο Makefile */ #ifdef ENABLE_NLS #include <libintl.h> #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 </code> Τώρα τρέχουμε το autoconf που δημιουργεί το configure script. Aν όλα πήγαν καλά έχουμε ένα πρόγραμμα που μιλάει ξένες γλώσσες! <p> Το παραπάνω κείμενο είναι μια εισαγωγή μόνο στο θέμα. Δεν είναι σε καμιά περίπτωση πλήρες, αν θέλετε παραπάνω πληροφορίες συμβουλευτείτε τα εγχειρίδια των προγραμμάτων autoconf, gettext. Περισσότερα για το gettext (και την χρήση του με το autoconf) στο: <url url="http://teamball.sdsu.edu/doc/texi/gettext_toc.html" name="http://teamball.sdsu.edu/doc/texi/gettext_toc.html"> <sect>Διαδικασία της μετάφρασης <p> <sect1>Είναι επίπονη η εργασία της μετάφρασης των μηνυμάτων; <p> Δεν είναι αρκετά επίπονη. Το μόνο επίπονο μέρος είναι η αρχική μετάφραση όλου του όγκου των μηνυμάτων. Έπειτα, με την κυκλοφορία νέων εκδόσεων του ίδιου προγράμματος, αρκεί η μετάφραση των νέων μηνυμάτων, που είναι συνήθως λίγα στον αριθμό. Υπάρχουν ειδικά εργαλεία που βρίσκουν τα μηνύματα που έχουν αλλάξει μεταξύ των εκδόσεων και τα εμφανίζουν για μετάφραση. <sect1>Πληροφοριακά, ένα πρόγραμμα που υποστηρίζει NLS πως μοιάζει; <p> Ο προγραμματιστής γράφει τα μηνύματα ως εξής: <code> ... /* Μερικές γραμμές κώδικα για αρχικοποίηση του συστήματος NLS */ ... /* Second: Login with proper USER/PASS sequence. */ printf( _("connected!\n") ); ... </code> Δηλαδή περικλείει τα μηνύματα που απαιτούν μετάφραση με _( ). Σε όλο το διάστημα της ανάπτυξης του προγράμματος, ο προγραμματιστής δεν ασχολείται με το σύστημα NLS παρά μόνο να περικλείει με _() το μηνύματα που βλέπει ο χρήστης. Το πρόγραμμα δουλεύει ως έχει. Έπειτα, ο προγραμματιστής τρέχει ένα βοηθητικό πρόγραμμα που συγκεντρώνει τα μηνύματα που περικλείονται σε _() σε ένα αρχείο. Στο αρχείο αυτό είναι που επεμβαίνει για να προσθέσει τη μετάφραση των μηνυμάτων. Έπειτα, με άλλο βοηθητικό πρόγραμμα, το πρώτο αρχείο μετατρέπεται σε μια δυαδική μορφή που μπορεί να χρησιμοποιηθεί από το εκτελέσιμο. Στην εκτέλεση του, το πρόγραμμα αναζητά μια μεταβλητή περιβάλλοντος για την επιλογή της γλώσσας εμφάνισης των μηνυμάτων. Βάση της γλώσσας, χρησιμοποιεί και τα ανάλογα μηνύματα. Αν τα μηνύματα δεν είναι παρόντα, τότε χρησιμοποιεί τα αγγλικά, τα οποία περιέχονται στο ίδιο το εκτελέσιμο πρόγραμμα. <sect1>Ποια είναι τα προγράμματα που βοηθούν τη μετάφραση και πως λειτουργούν; <p> <sect2>Πακέτο gettext <p> Τα προγράμματα που βοηθούν την οργάνωση της μετάφρασης είναι από το πακέτο <bf/gettext/, και θα το βρείτε σε όλα τα καλά GNU mirror sites. Τρέχουσα έκδοση: <bf/0.10.XX/ και τη στιγμή που γράφεται αυτό ισχύει ΧΧ=35 και <url url="http://www.iro.umontreal.ca/contrib/po/gettext-0.10.35.tar.gz" name="gettext-0.10.35.tar.gz"> <p> Τα περισσότερα προγράμματα υλοποιούν το NLS με το πακέτο <bf/gettext/. Υπάρχουν κάποια άλλα που υποστηρίζουν μια παλιότερη τεχνική, την <bf/catgets/. Θα μιλήσουμε μόνο για <bf/gettext/. <sect2>Πρόγραμμα <bf/xgettext/ <p> <bf/Είσοδος:/ αρχεία *.c ή *.h με αλφαριθμητικά της μορφής _("blah blah"). <p> <bf/Έξοδος:/ αρχείο κειμένου *.pot με τα αλφαριθμητικά προς μετάφραση. <p> Το αρχείο *.pot είναι το αρχείο υπόδειγμα, που θα έπαιρνε κάποιος μεταφραστής ελληνικών και θα το αντέγραφε σε el.po. Στο αρχείο el.po γίνεται η μετάφραση. <p> Σε όλα τα πακέτα με υποστήριξη "gettext", υπάρχει ένας υποκατάλογος po/ που περιέχει το αρχείο υπόδειγμα "πρόγραμμα.pot", το οποίο είναι κενό από μεταφρασμένα μηνύματα. Ταυτόχρονα, για τις υποστηριζόμενες γλώσσες υπάρχουν αντίστοιχα αρχεία *.po, όπως de.po, fr.po, nl.po που είναι αντίγραφα του αρχικού αρχείου υποδείγματος .pot με συμπληρωμένες τις μεταφράσεις. <sect2>Πρόγραμμα <bf/msgfmt/ <p> <bf/Είσοδος:/ αρχεία *.po (portable object) <p> <bf/Έξοδος:/ αρχεία *.mo (machine object) <p> Το αρχείο .mo είναι εκείνο που θα τοποθετηθεί στο κατάλογο <tt>/usr/share/locale/el/LC_MESSAGES</tt> για να ολοκληρωθεί η εγκατάσταση. <sect2>Λοιπά προγράμματα <p> Άλλα προγράμματα του πακέτου <bf/gettext/ είναι <p> <itemize> <item>msgmerge, έξυπνη συνένωση δύο .po αρχείων <item>msgcomm, εύρεση κοινών μηνυμάτων δύο .po αρχείων <item>msgcmp, σύγκριση δύο .po αρχείων <item>msgunfmt, μετατροπή του .mo σε .po </itemize> <sect>Επιλογή ελληνικών λέξεων και εκφράσεων <p> Είναι σημαντικό να υπάρχει μια ομοιογένεια στο αποτέλεσμα των μεταφράσεων. Για αυτό το λόγο, Χρήση όρων που προτείνουν έγκυρες πηγές, όπως ΕΛΟΤ, ΕΠΥ, μεταφρασμένα βιβλία πληροφορικής στα ελληνικά (π.χ. Λειτουργικά συστήματα του A.S.Tanenbaum) και προηγούμενες μεταφράσεις. <sect1>Πως θα μπορούσε να μεταφραστεί το π.χ. "Broken pipe"; "Σπασμένη σωλήνα"; <p> Με έξυπνη επιλογή των όρων, μπορούμε να λύσουμε τέτοια προβλήματα. Η Ελληνική γλώσσα είναι γνωστό ότι είναι αρκετά πλούσια. Ένας καλύτερος όρος για το παραπάνω παράδειγμα θα ήταν "Διακοπείσα σωλήνωση". <sect1>LEXIS <p> Το <url url="http://server.hellug.gr/lexis/" name="LEXIS"> είναι ένα λεξικό με ελληνικές μεταφράσεις αγγλικών εννοιών που χρησιμοποιούνται στη Πληροφορική. <sect1>Ελληνική βιβλιογραφία <p> <itemize> <item>Ασφάλεια στις Τεχνολογίες Πληροφοριών & Επικοινωνιών - Εννοιολογική Θεμελίωση (Εκδόσεις Νέων Τεχνολογιών) <item>Λειτουργικά Συστήματα Ι (μετάφραση του βιβλίου του Α.Tannembaum από το Ε.Κ.Π.Α.;)(προς εξακρίβωση) <item>Ε.Π.Υ.(προς συμπλήρωση) </itemize> <sect>Οργάνωση μεταφράσεων <p> <sect1>Προσόντα μεταφραστών <p> Τα άτομα που τους ενδιαφέρει η μετάφραση πρέπει να έχουν <itemize> <item>ευχέρια στην ελληνική γλώσσα <item>καλή γνώση όρων της πληροφορικής <item>εμπειρία με το λογισμικό προς μετάφραση </itemize> <p> Γίνεται ανάληψη της βασικής μετάφρασης του προγράμματος και ένα δεύτερο άτομο ασχολείται με τη διαδικασία της αναθεώρησης (reviewing). Θεωρούμε τη διαδικασία της αναθεώρησης σημαντική για την υψηλή ποιότητα της μετάφρασης. <sect1>Ανάληψη μεταφράσεων <p> Μόλις επιλέξετε το πακέτο που θέλετε να μεταφράσετε, επικοινωνείτε με τον τρέχοντα υπεύθυνο των μεταφράσεων και σας αποδίδετε ο αναθεωρητής της μετάφρασης. Αφού ολοκληρώσετε τη μετάφραση, ο αναθεωρητής την ελέγχει και σας στέλνει πίσω σχόλια και προτάσεις για αλλαγή. Βάση των στοιχείων αυτών, προκύπτει μια τελική έκδοση η οποία αποστέλλετε προς συμπερίληψη στο πακέτο λογισμικού. Για τις μελλοντικές εκδόσεις του πακέτου μπορείτε να στέλνετε κατευθείαν τις ανανεωμένες μεταφράσεις. <sect1>Οδηγίες μετάφρασης <p> Ο μεταφραστής πρέπει να μεταφράσει τα μηνύματα που βρίσκονται σε ένα αρχείο με όνομα <bf>po/</bf>πρόγραμμα<bf/.pot/ στο πακέτο του προγράμματος. Το συγκεκριμένο αρχείο έχει τη μορφή <tscreen><verb> msgid "Connecting to %s:%hu... " msgstr "" </verb></tscreen> Oπότε προσθέτουμε στο πεδίο msgstr την ελληνική μετάφραση, δηλαδή: <itemize> <item>msgid "Connecting to %s:%hu... " <item>msgstr "<bf/Σύνδεση με %s:%hu... /" </itemize> Περισσότερες οδηγίες μπορείτε να βρείτε στο <url url="http://www.iro.umontreal.ca/contrib/po" name="GNU Translation Project"> <sect1>Νομικές λεπτομέρειες <p> Στην περίπτωση που μεταφράζετε ένα πρόγραμμα που ανήκει στα Επίσημα GNU Προγράμματα, πρέπει να αποκυρρύξετε όλα τα δικαιώματα εκμετάλλευσης. Αυτό γίνεται με την αποστολή του λεγόμενου <url url="http://www.iro.umontreal.ca/contrib/po/doc/" name="DISCLAIMER">. Για περισσότερες πληροφορίες, επικοινωνήστε με τoν υπεύθυνο των μεταφράσεων για περισσότερες πληροφορίες. Δείτε <ref id="maint" name="Υπεύθυνος μεταφράσεων"> <p> Τα άτομα της ελληνικής μεταφραστικής ομάδας, τα οποία έχουν εκτελέσει την προηγούμενη διαδικασία είναι <itemize> <item><url url="mailto:chanas@cs.teiath.gr" name="Χρήστος Αναστασίου"> <item><url url="mailto:nmav@i-net.paiko.gr" name="Νίκος Μαυρογιαννόπουλος"> <item><url url="mailto:kosmega@teiath.gr" name="Κοσμάς Μπενέκος"> <item><url url="mailto:S.Xenitellis@rhbnc.ac.uk" name="Σίμος Ξενιτέλλης"> <item><url url="mailto:yspanos@hotmail.com" name="Γιάννης Σπανός"> </itemize> <sect1>Ποιοι είναι οι βασικοί λόγοι μετάφρασης των μηνυμάτων στα ελληνικά; <p> <enum> <item>Ο εξελληνισμός ενισχύει τα επιχειρήματα για χρήση του Linux στη δευτεροβάθμια και τριτοβάθμια εκπαίδευση. <item>Οι νεώτερες διανομές του Linux θα περιέχουν εξ ορισμού τα ελληνικά μηνύματα και θα υποστηρίζουν εν γένει τα ελληνικά. <item>Καθιερώνονται ντε φάκτο οι ελληνικοί όροι στη πληροφορική. <item>Ενισχύονται οι διάφοροι κλώνοι του Unix που έχουν βασική υποστήριξη Ελληνικών όπως Solaris. <item>Ο εξελληνισμός είναι κάτι που πρέπει να γίνει για να είναι πλήρες το Linux. Για όσους είναι αρνητικά διακείμενοι, σκεφτείτε ότι είναι σαν να δουλεύετε σε ένα οίκο λογισμικού (software house) και και να διαθέτετε το πρόγραμμα χωρίς να βάλετε αρχεία βοήθειας διότι κανείς δεν τα διαβάζει. <item>Για να χρησιμοποιηθεί το Linux στην εκπαίδευση, είναι σημαντικό προσόν να είναι εξελληνισμένο. Και αυτό, είτε για τους διαγωνισμούς πληροφορικής, είτε για τους μαθητές με δυσκολία στα αγγλικά. </enum> <sect>Τρέχουσα κατάσταση των μεταφράσεων <p> <itemize> <item>Επίσημα GNU προγράμματα <enum> <item>enscript, μετάφραση <url url="mailto:lourakis@csd.uch.gr" name="Μανώλης Λουράκης">, αναθεώρηση <url url="mailto:S.Xenitellis@rhbnc.ac.uk" name="Σίμος Ξενιτέλλης"> <item>fileutils, μετάφραση <url url="mailto:S.Xenitellis@rhbnc.ac.uk" name="Σίμος Ξενιτέλλης">, αναθεώρηση <em/κενό/ <item>gettext, μετάφραση <url url="mailto:S.Xenitellis@rhbnc.ac.uk" name="Σίμος Ξενιτέλλης">, αναθεώρηση <em/κενό/ <item>grep, μετάφραση <url url="mailto:S.Xenitellis@rhbnc.ac.uk" name="Σίμος Ξενιτέλλης">, αναθεώρηση <em/κενό/ <item>hello, μετάφραση <url url="mailto:S.Xenitellis@rhbnc.ac.uk" name="Σίμος Ξενιτέλλης">, αναθεώρηση <em/κενό/ <item>libc, μετάφραση <url url="mailto:nmav@hellug.gr" name="Νίκος Μαυρογιαννόπουλος">, αναθεώρηση <url url="mailto:S.Xenitellis@rhbnc.ac.uk" name="Σίμος Ξενιτέλλης"> <item>m4, μετάφραση <url url="mailto:S.Xenitellis@rhbnc.ac.uk" name="Σίμος Ξενιτέλλης">, αναθεώρηση <em/κενό/ <item>recode, μετάφραση <url url="mailto:S.Xenitellis@rhbnc.ac.uk" name="Σίμος Ξενιτέλλης">, αναθεώρηση <em/κενό/ <item>sharutils, μετάφραση <url url="mailto:S.Xenitellis@rhbnc.ac.uk" name="Σίμος Ξενιτέλλης">, αναθεώρηση <em/κενό/ <item>sh-utils, μετάφραση <url url="mailto:nmav@hellug.gr" name="Νίκος Μαυρογιαννόπουλος">, αναθεώρηση <em/κενό/ <item>sed, μετάφραση <url url="mailto:S.Xenitellis@rhbnc.ac.uk" name="Σίμος Ξενιτέλλης">, αναθεώρηση <em/κενό/ <item>textutils, μετάφραση <url url="mailto:S.Xenitellis@rhbnc.ac.uk" name="Σίμος Ξενιτέλλης">, αναθεώρηση <em/κενό/ <item>wget, μετάφραση <url url="mailto:S.Xenitellis@rhbnc.ac.uk" name="Σίμος Ξενιτέλλης">, αναθεώρηση <em/κενό/ </enum> Περισσότερες πληροφορίες <url url="http://www.iro.umontreal.ca/contrib/po/doc/matrix.texi" name="Πίνακας μεταφράσεων #1">, <url url="http://www.iro.umontreal.ca/contrib/po/trans/el/" name="Πίνακας μεταφράσεων #2"> <p> <item>Ανεπίσημα GNU προγράμματα <enum> <item>mutt, μετάφραση <url url="mailto:ph04169@cc.uoi.gr" name="Φάνης Δοκιανάκης">, αναθεώρηση <url url="mailto:S.Xenitellis@rhbnc.ac.uk" name="Σίμος Ξενιτέλλης"> <item>shadow, μετάφραση <url url="mailto:nmav@hellug.gr" name="Νίκος Μαυρογιαννόπουλος">, αναθεώρηση <em/κενό/ <item>windowmaker, μετάφραση <url url="mailto:papanikos@usa.net" name="Παπαγρηγορίου Νικόλαος">, αναθεώρηση <em/κενό/ <item>lyx, μετάφραση <url url="mailto:maglis@otenet.gr" name="Μενέλαος Μαγκλής">, αναθεώρηση <em/κενό/, πληροφορίες <url url="http://users.otenet.gr/~maglis/lyx" name="Ελληνική Σελίδα Lyx"> </enum> <p> <item>KDE <enum> <item> βασικά μηνύματα KDE, μετάφραση <url url="mailto:theodore@eexi.gr" name="Θεόδωρος Σολδάτος">, αναθεώρηση <em/κενό/ </enum> Περισσότερες πληροφορίες <url url="http://www.kde.org/i18n.html" name="Πίνακας μεταφράσεων KDE"> <p> <item>Gnome <p> Περισσότερες πληροφορίες <url url="http://www.gnome.org/i18n/status.shtml" name="Πίνακας μεταφράσεων Gnome"> </itemize> <sect>Εκκρεμότητες <p> <sect1>Λοιπά προγράμματα που περιμένουν ελληνική μετάφραση <p> <enum> <item>Μηνύματα εγκατάστασης RedHat, <url url="http://www.redhat.com" name="RedHat"> <item>Μηνύματα εγκατάστασης SuSE, <url url="http://www.suse.com" name="SuSE"> <item>Fortify, <url url="http://www.fortify.net/localization.html" name="Fortify">, χρήση συστήματος διαφορετικού από NLS <item>freetype, <url url="http://www.freetype.org" name="FreeType font rendering engine"> <item>rpm, <url url="http://www.redhat.com" name="RPM, package manager"> <item>Squid, <url url="http://squid.nlanr.net" name="Squid 2 Cache Proxy Server"> <item>Console tools, <url url="http://www.multimania.com/ydirson/en/lct/l10n.html" name="Console-tools"> </enum> <sect>Διαθέσιμοι αναθεωρητές <p> <itemize> <item><url url="mailto:maglis@otenet.gr" name="Μενέλαος Μαγλής"> <item><url url="mailto:nmav@i-net.paiko.gr" name="Νίκος Μαυρογιαννόπουλος"> <item><url url="mailto:S.Xenitellis@rhbnc.ac.uk" name="Σίμος Ξενιτέλλης"> </itemize> Όποιος είναι διαθέσιμος να συνεισφέρει ως αναθεωρητής μεταφράσεων, να επικοινωνήσει με τον <ref id="maint" name="υπεύθυνο μεταφράσεων"> για την προσθήκη του/της στη λίστα. <sect>Ελληνικές μεταφράσεις στις εκδόσεις Linux <p> <itemize> <item>RedHat Linux 5.2 <p> <enum> <item>WindowMaker </enum> <item>RedHat Linux 6.0 <p> <enum> <item>WindowMaker <item>fileutils <item>grep <item>KDE, έκδοση 1.1 <item>libc </enum> <item>OpenLinux 2.2 <p> <enum> <item>fileutils, έκδοση 4.0-b6 <item>KDE, έκδοση 1.1 </enum> <item>SuSE Linux 6.2 (προς συμπλήρωση) </itemize> <p> <sect> PO αρχεία <p> <enum> <item>Επίσημα GNU προγράμματα <p> <url url="http://www.iro.umontreal.ca/contrib/po/trans/el/" name="Επίσημα GNU προγράμματα"> <p> <item>Ανεπίσημα GNU προγράμματα <p> <itemize> <item>Lyx, <url url="http://users.otenet.gr/~maglis/lyx/elpo" name="Lyx"> <item>Mutt, <url url="http://www.mutt.org" name="mutt, international version"> <item>Shadow suite, <url url="http://linux.forthnet.gr/pub/linux/shadow" name="shadow-suite"> <item>WindowMaker, <url url="http://www.windowmaker.org/ftp/pub/beta/srcs/WindowMaker-0.60.0.tar.gz" name="WindowMaker"> </itemize> <p> <item><url url="http://www.kde.org/messages/el.messages" name="KDE"> <p> <item>Gnome <p> <em/κενό/ </enum> <sect>Επικοινωνία <p> <sect1>Ποιος είναι ο τρέχον υπεύθυνος των ελληνικών μεταφράσεων;<label id="maint"> <p> Υπεύθυνος για τις μεταφράσεις των Επίσημων GNU Προγραμμάτων στην Ελληνική γλώσσα είναι ο <url url="mailto:S.Xenitellis@rhbnc.ac.uk" name="Σίμος Ξενιτέλλης"> (S.Xenitellis@rhbnc.ac.uk). Για οτιδήποτε πληροφορία, στείλτε e-mail. <p> Για τα Ανεπίσημα GNU Προγράμματα, συντονιστής είναι εκείνος των Επίσημων Μεταφράσεων. <p> Για το γραφικό περιβάλλον KDE, υπεύθυνος είναι ο <url url="mailto:theodore@eexi.gr" name="Θεόδωρος Ι. Σολδάτος">. <p> Για το γραφικό περιβάλλον Gnome, συντονιστής είναι ο <url url="mailto:S.Xenitellis@rhbnc.ac.uk" name="Σίμος Ξενιτέλλης">. Για το Gnome δεν υπάρχουν μέχρι αυτή τη στιγμή ελληνικές μεταφράσεις. Το λογισμικό αυτό βρίσκεται σε ανάπτυξη και τα αντίστοιχα αρχεία μηνυμάτων αλλάζουν αρκετά συχνά. Πιστεύουμε ότι στο άμεσο μέλλον πρέπει να ξεκινήσει η μετάφραση και στην περιοχή αυτή. </article>