"setenv LANG greek" και βελτιστοποίηση (optimisation)
simos at pc96.ma.rhbnc.ac.uk
simos at pc96.ma.rhbnc.ac.uk
Sat Jan 20 22:08:25 EET 2001
Όταν εκτελείται μια εφαρμογή και έχει τεθεί η μεταβλητή LANG σε κάποια
τιμή, τότε συμβαίνουν τα παρακάτω (εκ της strace):
α. Ανάγνωση του /usr/share/locale/locale.alias για λήψη πληροφοριών για
τυχόν ψευδόνυμα.
β. Άνοιγμα του /usr/lib/locale/ψευδώνυμο_1/LC_IDENTIFICATION
Αν παρουσιαστεί σφάλμα (π.χ. δεν υπάρχει)
επανέλαβε με άλλα πιθανά ψευδώνυμα
διαφορετικά
κάνε χρήση του εξ ορισμού (αγγλικά)
γ. Επανέλαβε το βήμα β για
LC_ADDRESS LC_MONETARY LC_PAPER LC_MESSAGES
LC_COLLATE LC_MEASUREMENT LC_NAME LC_TELEPHONE
LC_CTYPE LC_NUMERIC LC_TIME LC_MESSAGES/SYS_LC_MESSAGES
δ. Αν υπάρχει αναφορά σε κάποιο μήνυμα της libc από το πρόγραμμα που
τρέχει, αναζήτησε το αρχείο με τους μεταφρασμένους όρους της libc
(libc.mo), με τον αλγόριθμο του βήματος β.
ε. Αν υπάρχει αναφορά σε κάποιο μήνυμα του προγράμματος που εκτελείτε ΚΑΙ
το πρόγραμμα έχει υποστήριξη NLS (gettext), τότε αναζήτησε το αρχείο με
τους μεταφρασμένους όρους του προγράμματος (παράδειγμα.mo), με τον
αλγόριθμο του β.
Κάθε αναζήτηση που περιγράφετε παραπάνω είναι μια εντολή συστήματος
"open". Όταν είναι επιτυχής, μοιάζει με:
open("/usr/share/locale/locale.alias", O_RDONLY) = 4
διαφορετικά μοιάζει με:
open("/usr/share/locale/el_GR/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT
(No such file or directory)
Δοκιμάσαμε με την εντολή "strace -o output ls -z".
Στα αγγλικά εμφανίζει:
ls: invalid option -- z (από libc.mo)
Try `ls --help' for more information. (από fileutils.mo)
Σε libc-2.2 (rh7) παρατηρήθηκαν τα επόμενα
α. setenv LANG el
Δεν αναγνωρίζετε και δεν εμφανίζει ελληνικά.
Γίνετε μια αποτυχημένη απόπειρα ανοίγματος του
/usr/lib/locale/el/LC_IDENTIFICATION
και παραιτείται (κάνει χρήση αγγλικών).
β. setenv LANG el_GR
Αναγνωρίζεται.
Η ανάγνωση των αρχείων LC_* γίνετε με την πρώτη προσπάθεια.
Η ανάγνωση των αρχείων .mo έχουν μια αποτυχημένη προσπάθεια
(γίνετε έλεγχος για el_GR με αποτυχία και έπειτα el με επιτυχία).
Συνολικά, κάθε φορά που τρέχει μια εφαρμογή όπως η ls με
τυπικά ορίσματα, συμβαίνουν 2 περίπου αποτυχημένες και μη
αναγκαίες προσπάθειες ανοίγματος αρχείων.
γ. setenv LANG greek
Αναγνωρίζεται.
Η ανάγνωση των αρχείων LC_* γίνετε με την τρίτη προσπάθεια, δηλαδή
γίνονται 24 αποτυχημένες προσπάθειες ανοίγματος αρχείων.
Η ανάγνωση των αρχείων .mo έχουν τρις αποτυχημένες προσπάθειες,
δηλαδή τέσσερις αποτυχημένες προσπάθειες.
Συνολικά, κάθε φορά που τρέχει μια εφαρμογή όπως η ls με
τυπικά ορίσματα, συμβαίνουν 28 περίπου αποτυχημένες και μη
αναγκαίες προσπάθειες ανοίγματος αρχείων.
Συμπέρασμα
Η σωστή τιμή για την μεταβλητή LANG είναι το greek.
Για την βέλτιστη απόδοση ενός συστήματος με glibc 2.2
προτείνεται η παρακάτω προσωρινή ρύθμιση:
# cd /usr/share/locale
# ln -s el el_GR.ISO-8859-7
# cd /usr/lib/locale
# ln -s el_GR el_GR.ISO-8859-7
Η βέλτιση λύση του παραπάνω προβλήματος είναι η επικοινωνία με
τους προγραμματιστές της glibc (το αναλαμβάνω).
Ευχαριστώ,
σίμος
More information about the I18ngr
mailing list