καταρχήν πολλά ευχαριστώ για το ενδιαφέρον που δείχνετε.
Σίμο, στην έκδοση 1.00 δεν έχει internationalization, για αυτό έχει 2 ξεχωριστά glade files. Η δοκιμαστική έκδοση 1.03a είναι αυτή που χρησιμοποιεί gettext και άρα έχει μονάχα ένα glade αρχείο (εχω βάλει link στο αρχικό πόστ).
Σάββα, είσαι αρχηγός... χίλια ευχαριστώ για το makefile!
Κώστα, μιλάμε για την δοκιμαστική έκδοση 1.03a και όχι την 1.00 (η 1.00 όντως δεν έχει φάκελο lang/).
sokoban4ever, αν σου πω ότι έχω καταλάβει ακριβώς τις προτεραιότητες των environment variables αλλά και του gettext, θα πω ψέμματα!

Μέσα στον κώδικα δεν χρησιμοποιώ καμιά μεταβλητή περιβάλλοντος, το μόνο που κάνω είναι να καλώ...
- Κώδικας: Επιλογή όλων
setlocale( LC_ALL, "" );
ώστε να τεθεί το πρόγραμμα στην τρέχουσα εντοπιότητα του περιβάλλοντος στο οποίο τρέχει (και τώρα που το κοιτάω, βλέπω πως έχω παραλείψει να ελέγχω περίπτωση αποτυχίας της setlocale() ). Την κλήση αυτή την κάνω στην συνάρτηση: util_locale_init_gettext() μαζί με τις υπόλοιπες ρουτίνες αρχικοποίησης του gettetxt()... Δεν ξέρω μήπως πρέπει να γίνονται αυτά σε επίπεδο main() και όχι μέσα σε συνάρτηση.
Όσο για την διαδικασία διεθνοποίησης των κειμένων του προγράμματος, ακολούθησα την εξής διαδικασία:
1. Προσθήκη των ρουτινών αρχικοποίησης του gettext, στη συνάρτηση util_init_gettext() καθώς και κλήση της setlocale() που εξηγώ παραπάνω...
- Κώδικας: Επιλογή όλων
...
#include <locale.h>
...
#define GETTEXT_PACKAGE "gtk_tic"
#define LOCALEDIR "lang"
#include <glib/gi18n.h>
...
void util_locale_init_gettext( void )
{
setlocale( LC_ALL, "" );
bindtextdomain( GETTEXT_PACKAGE, LOCALEDIR );
bind_textdomain_codeset( GETTEXT_PACKAGE, "UTF-8" );
textdomain( GETTEXT_PACKAGE );
return;
}
2. Τοποθέτηση όλων των συμβολοσειρών του κώδικα που θέλω να μεταφραστούν στην gettext(), βασικά στο macro _() που είναι το ίδιο πράγμα. Οπότε για παράδειγμα, όπου υπάρχει...
- Κώδικας: Επιλογή όλων
"this is a string"
αλλάζει σε...
- Κώδικας: Επιλογή όλων
_("this is a string")
3. Χρήση της xgettext για δημιουργία αρχείου gtk_tic.pot που περιέχει τις προς μετάφραση συμβολοσειρές, με την εντολή...
- Κώδικας: Επιλογή όλων
xgettext -d gtk_tic -k_ --copyright-holder=migf1 --package-name=gtk_tic --msgid-bugs-address=mig_f1@hotmail.com -s -o gtk_tic.pot gtk_tic.c gui/gtk_tic.glade
4. Αρχικοποίηση του αρχείου gtk_tic.pot και αποθήκευσή του ως el.pot, με την εντολή...
- Κώδικας: Επιλογή όλων
msginit -l el -o el.po -i gtk_tic.pot
5. Μετάφραση των συμβολοσειρών και δημιουργία binary αρχείου el.mo με το πρόγραμμα poedit.
6. Δημιουργία φακέλου: lang/el/LC_MESSAGES/ και μεταφορά του el.mo μετονομασμένο σε gtk_tic.mo.
Θεωρητικά αυτά είναι τα βήματα που χρειάζονται. Ίσως να μου έχει ξεφύγει κάτι και να μην το γνωρίζω. Από εκεί και πέρα, το πως ακριβώς επηρεάζεται η εντοπιότητα από τις μεταβλητές περιβάλλοντος, το εξηγεί κάπου καθώς και τις προτεραιότητές τους (δεν θυμάμαι που) αλλά θεωρητικά πάλι αυτά δεν χρειάζεται να τα γνωρίζει το πρόγραμμα... αυτά (στη θεωρία πάντα) είναι ευθύνη του χρήστη του προγράμματος. Η αλήθεια είναι πως τα έχω διαβάσει 2-3 φορές όταν χρειάστηκε να κάνω ρυθμίσει, αλλά μετά γίνονται delete από τη μνήμη μου... ακούσια εννοώ, δεν τα ξεχνάω επίτηδες

Αν βρείτε λάθη στην παραπάνω διαδικασία, παρακαλώ ενημερώστε με να τα φτιάξω.
Σε ότι αφορά το git, κάντε λίγη υπομονή αν θέλετε να τελειώσω την Doxygen τεκμηρίωση & σχόλια, και να ανεβάσουμε εκείνη.