"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