Next Previous Contents

5. National Language Support

To National Language Support (συντομογραφία NLS) είναι μία δυνατότητα που έχουν τα πιο πολλά UNIX, ώστε να ενημερώνονται οι εφαρμογές για τις γλωσσικές ρυθμίσεις του χρήστη και να παρουσιάζουν τα μυνήματά τους στην αντίστοιχη γλώσσα.

Το NLS χρησιμοποιείται από πολλά GNU tools, ειδικά αυτά που τρέχουν σε περιβάλλον γραμμής εντολών (Command Line Interface - CLI, δηλαδή το γνωστό prompt), και υποστηρίζεται πρόσφατα και στο γραφικό περιβάλλον (πχ KDE). Η ενημέρωση των εφαρμογών γίνεται μέσα από μεταβλητές περιβάλλοντος, με εντολές του τύπου LANG="el_GR". Από Νοέμβρη 1998 τα ελληνικά θα ρυθμίζονται ως el_GR (με βάση τα αντίστοιχα ISO πρότυπα), και ελπίζουμε ότι η αλλαγή αυτή θα περάσει σύντομα στις διανομές.

Εργασία γύρω από το NLS έχει κάνει και ο Σίμος Ξενιτέλλης, δείτε το Greek-nls-HOWTO και αυτό το άρθρο στο περιοδικό magaz: http://magaz.hellug.gr/09/04_nls.html.

ΠΡΟΣΟΧΗ: Το παρόν κεφάλαιο είχε γραφτεί από τον Τάσο Κάπιο, σε μια εποχή που το NLS δεν υπήρχε πάντα στημένο στο linux, και το πρότυπο ήταν αρκετά ασταθές (πχ, μπορεί να βρείτε να λέει για gr_GR, αντί el_GR).

5.1 Προετοιμασία

ΠΡΩΤΑ βλέπε πόσες και ποίες είναι οι βιβλιοθήκες της C που υπάρχουν στο σύστημα σου. π.χ.

 ttyp3:~#ldconfig -v | grep libc.so
 libc.so.4 => libc.so.4.7.2
 libc.so.6 => libc-2.0.4.so
 libc.so.5 => libc.so.5.4.33
Υπάρχουν 5 κατηγορίες libc και δεν είναι συμβατές μεταξύ τους, όσον αφορά τα locale πάντα. (Αυτή την στιγμή οι πιο πολλοί έχουν τις εκδόσεις 4 και 5)
  1. libc 4 ??? (a.out)
  2. libc 5.0.9-5.3.12
  3. libc 5.4.x
  4. glibc 1.x ??? (σαν libc 5 για μερικές αρχιτεκτονικές Linux)
  5. glibc 2.x.x (libc 6)

5.2 Εγκατάσταση Ελληνικών Locale

Χρειάζεστε τις τοπικές ρυθμίσεις (localedata), τον compiler localedef και το διαγνωστικό εργαλείο locale.

Πρώτα πηγαίνετε στον υποκατάλογο όπου βρίσκετε gr_GR και τρέχετε την εντολή

   >sed -e 's/am_pm "";""/am_pm   "<P*><M*>";"<M*><M*>"/' gr_GR > el_GR
(Για δυνατότητα ελληνικού ΠΜ και ΜΜ και η αλλαγή ονόματος για συμβατότητα με τα X) Και για έλεγχο
          > tail -n 5 el_GR | grep am_pm
          am_pm  "<P*><M*>";"<M*><M*>"
          t_fmt_ampm ""
          END LC_TIME
Τώρα σαν root δημιουργήστε τους εξής υποκαταλόγους
   # mkdir -m 755 -p /usr/share/locale/el_GR/LC_MESSAGES
   # mkdir -m 755 -p /usr/share/i18n/charmaps
   # mkdir -m 755 -p /usr/share/i18n/locales
   # ln -sf /usr/share/i18n/charmaps /usr/share/i18n/charmap
Εγκαταστήστε στα σωστά μέρη τα el_GR, en_DK, ISO-8859-7 (ή ISO_8859-7:1987 ή ISO_8859-7,1987)
# cd (εκεί που είναι τα localedata)
# cp e?_??  /usr/share/i18n/locales
# cd ../charmaps
# cp ISO[-_]8859-7* /usr/share/i18n/charmaps
# cd /usr/share/i18n/charmaps
# ln -s ISO_8859-7,1987 ISO-8859-7
Μεταγλωττίστε, αν δεν τα έχετε ήδη σε binary μορφή, τα locale και localedef. Αυτό γίνεται περίπου έτσι:
 > cd ~/src
 > gzip -dc libc-x.y.z.tar.gz | tar xvf -
 > cd libc-x.y.z
 > ./configure
 > make clean; make depend
 > cd locale
 > make programs
 > su -f root -c 'install -m 755 locale localedef /usr/bin'
Και τώρα είστε έτοιμοι για την μεταγλώττιση των τοπικών ρυθμίσεων. Σαν root:
# cd /usr/share
Σε περίπτωση που έχετε μια libc
# localedef -ci locale/el_GR -f i18n/charmap/ISO-8859-7 el_GR
Σε περίπτωση που έχετε δύο π.χ. libc-5.4.33 και libc-2.0.4
# localedef-2.04   -ci el_GR -f ISO-8859-7 el_GR
# localedef-5.4.33 -ci el_GR -f ISO-8859-7 el
# chmod -cR a+r locale
Τώρα πρέπει να υπάρχουν αυτά κάτω από το /usr/share/locale/el_GR (και το el)
# ls locale/el_GR
LC_COLLATE    LC_CTYPE      LC_MESSAGES/  LC_MONETARY   LC_NUMERIC     LC_TIME

Μια δοκιμή. Για κέλυφος τύπου csh π.χ. tcsh:

> setenv LANG el_GR
Για κέλυφος τύπου sh π.χ. bash, ksh:
> LANG=el_GR ; export LANG
Δοκιμάστε:
> locale
LANG=el_GR
LC_CTYPE="el_GR"
LC_NUMERIC="el_GR"
LC_TIME="el_GR"
LC_COLLATE="el_GR"
LC_MONETARY="el_GR"
LC_MESSAGES="el_GR"
LC_ALL=
> locale -c LC_TIME | head
LC_TIME
Κυρ;Δευ;Τρι;Τετ;Πεμ;Παρ;Σαβ
Κυριακή;Δευτέρα;Τρίτη;Τετάρτη;Πέμπτη;Παρασκευή;Σαββάτο
Ιαν;Φεβ;Μάρ;Απρ;Μάι;Ιούν;Ιούλ;Αύγ;Σεπ;Οκτ;Νοέ;Δεκ 
Ιανουάριος;Φεβρουάριος;Μάρτιος;Απρίλιος;Μάιος;Ιούνιος;Ιούλιος;Αύγουστος;Σεπτέμβριος;Οκτώβριος;Νοέμβριος;Δεκέμβριος
ΠΜ;ΜΜ
%a %d %b %Y %T %Z
%d/%m/%Y
%T
(Η διαμόρφωση αλλάζει από libc σε libc)

Τώρα μπορείτε να δοκιμάστε μερικές εφαρμογές (αρκεί να έχουν γίνει compile με μια συμβατή libc)

> unsetenv LESSCHARSET ή unset LESSCHARSET
> less καποιο-κειμενο-με-ελληνικα
> cal
   Αύγουστος 1997
Κυ Δε Τρ Τε Πε Πα Σα 
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Και στο Netscape 4 (με libc 5.4.x x > 4 ) ανοίξτε το Mail & Discussions και θα δείτε στο Date τους μήνες στην μέση πχ 31/08/1997 και τις ημέρες στα ελληνικά. Τέλος :-)

Εγκατάσταση Ελληνικών μηνυμάτων διάφορων εφαρμογών

Εδώ υπάρχουν δυο ανεξάρτητα πακέτα το gencat και το gettext

α)Το gencat έρχεται μαζί με τον πηγαίο κώδικα της κάθε libc (κάτω από το nls/) ή σε binary π.χ. gencat-x.y.z και είναι εξαρτημένο από αυτήν όπως και το localedef. Μεταγλωττίζει αρχεία τύπου International language text (.m) σε καταλόγους.

β)Το gettext, είναι ανεξάρτητο από την libc, και υπάρχει συνήθως σε mirrors της gnu π.χ.ftp.kernel.org/pub/mirrors/gnu/gettext-0.10.tar.gz και στα debian,redhat. (Για να βρείτε μια πρόσφατη έκδοση πάτε στο http://las.ml.org ψαξτε για gettext) Το χρησιμοποιούν σχεδόν όλα τα πακέτα της GNU {file,sh,text,net}-utils και πολλά άλλα πακέτα π.χ. (WindowMaker). Για πληροφορίες δείτε το ftp.kernel.org/pub/mirrors/gnu/ABOUT-NLS, στείλτε μήνυμα στην ελληνική ομάδα στο el@li.org ή για να βοηθήστε μπείτε στην λίστα el-request@li.org με την λέξη "subscribe" στο σώμα του μηνύματος.

Αυτή την στιγμή, από ό,τι γνωρίζω, πλήρως ελληνικά μηνύματα έχει μόνο το tcsh 6.07.02 (με patches του debian) και χρησιμοποιεί, δυστυχώς, το gencat.

5.3 Εγκατάσταση του tcsh

Κατεβάστε το tcsh >= 6.07.02. Βρείτε το gencat (πηγαίος κώδικας libc,σε binary απο redhat,debian) Προτού μεταγλωττίστε το tcsh. ή

Μεταγλωττίστε, εγκαταστήστε, δοκιμάστε το tcsh

 >make
 >make catalogs
 >su -f root -c 'make install'
 >su -f root -c 'install -m 644 tcsh.greek.cat /usr/share/locale/el_GR/tcsh'
 >/bin/tcsh
 >setenv LANG el_GR
 >unsetenv NOREBIND (για να αφήνει γράφετε στα ελλήνικα)
 >fkjg
 fkjg: Η εντολή δε βρέθηκε.
Αν δεν σας βγάλει ελληνικό μήνυμα τότε

Αν το μήνυμα είναι κάπως έτσι

 fkjg: ^Η ^ε^ν^τ^ο^λ^ή ^δ^ε ^β^ρ^έ^θ^η^κ^ε.
  1. Ελέγξτε τα permissions στην /usr/share/locale/el_GR
     > ls -l /usr/share/locale/el_GR
     total 96
     drwxr-xr-x   3 root     root         1024 Ιούν 25 20:40 ./
     drwxr-xr-x  68 root     root         2048 Αύγ   6 10:41 ../
     -rw-r--r--   1 root     root        29156 Ιούν 25 20:36 LC_COLLATE
     -rw-r--r--   1 root     root        10428 Ιούν 25 20:36 LC_CTYPE
     drwxr-xr-x   2 root     root         1024 Ιούν 25 20:34 LC_MESSAGES/
     -rw-r--r--   1 root     root           95 Ιούν 25 20:36 LC_MONETARY
     -rw-r--r--   1 root     root           27 Ιούν 25 20:36 LC_NUMERIC
     -rw-r--r--   1 root     root          536 Ιούν 25 20:36 LC_TIME
     -rw-r--r--   1 root     root        47443 Ιούν 12 21:27 tcsh
    
  2. Ξανακάνετε compile τις τοπικές ρυθμίσεις με το localedef
  3. Ελέγξτε την έκδοση του localedef και της libc ώστε να είναι ίδιες
     > localedef -V
     localedef (GNU libc) 2.0.4
     Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
     This is free software; see the source for copying conditions.  There is NO
     warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     Written by Ulrich Drepper.
     > ldd /bin/tcsh
            libnsl.so.1 => /lib/libnsl.so.1 (0x40003000)
            libncurses.so.4 => /usr/lib/libncurses.so.4 (0x4000a000)
            libcrypt.so.1 => /lib/libcrypt.so.1 (0x4004a000)
            libc.so.6 => /lib/libc.so.6 (0x40078000)
            /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00000000)
    
  4. Κατεβάστε μια πιο πρόσφατη έκδοση των τοπικών ρυθμίσεων
  5. Αναβαθμίστε την libc

5.4 Ρυθμίσεις διάφορων εφαρμογών

Οι πιο πολλές εφαρμογές το μόνο που χρειάζονται είναι το LANG σε el_GR.

5.5 Προβλήματα

Πολλά ;-).

Προβλήματα με την C Library (libc)

Η ΜΕΤΑΓΛΩΤΤΙΣΜΕΝΗ ΜΟΡΦΗ ΑΠΟ ΤΑ LOCALEDEF ΚΑΙ GENCAT ΣΥΝΗΘΩΣ AΛΛΑΖΕΙ ΑΠΟ LIBC ΣΕ LIBC ΚΑΙ ΕΝΑ ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΓΛΩΤΤΙΣΜΕΝΟ ΜΕ ΤΟΥΣ HEADERS ΜΙΑΣ LIBC ΜΠΟΡΕΙ ΝΑ ΜΗΝ ΜΠΟΡΕΙ ΝΑ ΔΙΑΒΑΣΕΙ ΤΗΣ ΤΟΠΙΚΕΣ ΡΥΘΜΙΣΕΙΣ ΦΤΙΑΓΜΕΝΕΣ ΑΠΟ ΑΛΛΗ ΒΙΒΛΙΟΘΗΚΗ.

Προβλήματα με τα X

Locale not supported from X library.(ή κάτι παρόμοιο) Ελέγξτε τα δικαιώματα στους υποκαταλόγους

      # chmod -cR a+r /usr/share/locale /usr/X11R6/lib/locale
Ελέγξτε τα Xresources και ψάξτε για τίποτα ύποπτο
      >xrdb -query
Βλέπε προβλήματα με την βιβλιοθήκη της C.

Προβλήματα που δημιουργούνται όταν όλα είναι σωστά ;-)

Ο δαίμονας syslogd αποθηκεύει τα δεδομένα στα 7-bit και πολλές εφαρμογές θα του στέλνουν τις ημερομηνίες στα ελληνικά π.χ.το PAM με αποτέλεσμα μερικές φορές να μην μπορείς δείς τον μήνα.

Μερικά προγράμματα θα περιμένουν για απάντηση σε ερώτηση "yes/no" αντί για "y" ή "n"τα "ν" και "ο" αντίστοιχα.

Στην κονσόλα καλό είναι να έχετε μια γραμματοσειρά iso-8859-7(ELOT-928). Ειδικά με ελληνικό tcsh.

5.6 Επιπλέον πληροφορίες

Υπάρχουν τα man pages: locale.5 locale.7 setlocale.2


Next Previous Contents