Previous Next Contents

3. National Language Support (NLS)

Di certo vi stupirà sapere che lo standard POSIX, e quindi anche Linux, prevede il supporto delle regole nazionali per la gestione di set di caratteri, modo di scrivere data, ora, numeri in generale e quindi tutto quello che può (informaticamente parlando) distinguere una paese dall'altro.

Dalla versione 5.2.18 delle libc, tutta la localizzazione è supportata (diciamo anche da prima, ma con una caterva di bug ;).

Ma non basta avere installate delle moderne libc, occorre anche che questa sia stata compilata con determinate opzioni e occorre installare tutta una serie di file e directory che descrivono la ``locale'' Italia. Insomma, compito non facile se la vostra distribuzione non lo prevede. In debian, per fortuna, libc è correttamente compilata per supportare la locale, e inoltre esiste il pacchetto wg15-locale che installa automaticamente e correttamente tutto.

Se volete fare le cose a manina, potete prendervi da soli il pacchetto che trovate a ftp://dkuug.dk/i18n/WG15-collection e, ovviamente, leggervi attentamente la documentazione allegata.

Per poter influenzare Linux di modo che reagisca secondo la locale scelta, occorre modificare delle variabili d'ambiente. In ordine:

LANG

È la variabile ``generale'' del gruppo, serve a definire una regola generale (il paese) con cui poi assegnare le variabili che vengono sotto. Una definizione delle variabili sottostanti annulla però quella di default definita da LANG.

Inoltre LANG influenza anche il programma man(1), ci torneremo poi.

LC_COLLATE

Influisce sulle regole di parsing di alcune funzioni C, principalmente il sort.

LC_CTYPE

Definisce il set di caratteri usato dal sistema.

LC_MONETARY

Definisce come devono essere scritte le valute, ovvero quale, tra virgola e punto, è il separatore di decimali e migliaia e viceversa, il simbolo di valuta.

LC_NUMERIC

Separatore di decimali e migliaia, formattazione dei numeri.

LC_MESSAGES

Definisce i valori ``si'' e ``no''.

LC_TIME

Come stampare data e ora (questo influenza date(1) e programmi vari).

LC_ALL

Come LANG, solo che questa ignora i valori definiti per ogni singola variabile (forza tutto al suo valore).

Piú semplicemente di quello che si crede, basta mettere nel proprio ~/.profile o /etc/profile per sh-type shells:


        export LANG=it_IT

Oppure se avete c-type shells:


        setenv LANG it_IT

Perché ``it_IT''?! È solo una convenzione, e il significato è ``lingua_PAESE''.Per fare un esempio potrebbe essere it_CH (Svizzera italiana).

Come sempre la man page di locale(7) è lettura molto consigliata, come un giro per /usr/share/locale per vedere le locali disponibili.

3.1 Il set di caratteri

Tutti finito, direte voi. Beh, quasi...

Ora il problema è far capire alle applicazioni ``cattive'' che vogliamo avere i caratteri accentati. Questi hanno la interessante proprietà che sono lunghi 8 bit, mentre molti programmi ne considerano solo 7, perché è da 7 bit il codice ASCII internazionalmente riconosciuto.

Per prima cosa l'ottavo bit deve sopravvivere nel passaggio da kernel a console virtuale, e quindi è buona cosa dare questo comando (anche se stty(1) di default ha queste impostazioni, controllare con stty -a):


        stty cs8 -istrip -parenb

Ora restano da fare tutta una serie di piccoli aggiustamenti a tutta una serie di programmi per permettere il pieno utlilizzo della locale e dei caratteri ad 8 bit.

Shells

Bash(1)

Se si vogliono usare nomi di file con lettere accentate e usare l'editing (Home, End e Del) in linea di comando è bene aggiungere anche questo nel proprio ~/.inputrc


        set meta-flag on
        set convert-meta off
        set output-meta on
        "\e[1~": beginning-of-line
        "\e[4~": end-of-line
        "\e[3~": delete-char
        "\e[5~": backward-word
        "\e[6~": forward-word   

Editor

Emacs 19

Come sempre emacs è molto particolare. Avvisiamolo che vogliamo i caratteri accentati con :


        (standard-display-european t)
        (set-input-mode nil nil 1)
        (require 'iso-syntax)

        (load-file "iso-insert.el")
        (define-key global-map [?\C-.] 8859-1-map)

Aggiunto al nostro bravo ~/.emacs

Inoltre, se si usa Emacs in un Xterm (NO XEmacs o LEmacs!!!), è anche necessario aggiungere nel proprio ~/.XDefaults:


        XTerm*VT100.Translations:       #override\n\
        Ctrl <KeyPress> . : string("\0308")

joe(1)

Basta editare il file di configurazione /etc/joe/joerc o nel proprio ~/.joerc di modo che comprenda la riga (con il ``-'' sulla colonna 1):


        -asis           Characters 128 - 255 shown as-is

Mail/News

elm(1)

Aggiungere le seguenti righe nel file /var/lib/elm/elm.rc o nel proprio ~/.elm/elmrc:


        displaycharset = iso-8859-1
        charset = iso-8859-1
        textencoding = 8bit
        
        compatcharsets = iso-8859-1 us-ascii

In particolare l'ultima riga serve a evitare di ricorrere a metamail(1) per ogni messaggio in arrivo.

Resta il problema che il ``bultin viewer'' di elm non è 8 bit clean, e quindi si torna al punto di partenza. Si risolve la questione o eliminando l'ultima riga qui sopra, o usando less come ``external viewer''. Basta aggiungere nel solito ~/.elm/elmrc:


        pager = less

Oppure prendere una versione piú aggiornata di elm, come quelle denominate ``ME'', ovvero ``Mime Enabled''. Queste permettono di configurare via menú tutto quello predetto, non lanciano sempre metamail perchè gestiscono internamente molti formati MIME e hanno un viewer 8 bit clean.

metamail(1)

Aggiungere questo nel proprio ~/.profile o /etc/profile per sh-type shells:


        export MM_CHARSET=iso-8859-1

Oppure se avete c-type shells:


        setenv MM_CHARSET iso-8859-1

pine(1)

Aggiungere la seguente riga nel file /usr/local/lib/pine.conf o nel proprio ~/.pinerc:


        # character-set should reflect the capabilities of the display
        # you have. Normal default is US-ASCII.  Typical alternatives
        # include ISO-8859-x, where x is a number between 1 and 9.
        character-set=ISO-8859-1

oppure direttamente da menu di configurazione, seguendo le voci ``Setup'', poi ``Configure'' e infine ``character-set''.

nn(1)

Aggiungere la seguente riga nel file ~/.nn/init:


        set data-bits 8

Programmi di comunicazione

telnet(1)

Basta aggiungere nel proprio ~/.telnetrc la riga:


        set binary true

3.2 Manpage

Le manpage sono quelle pagine testuali che si richiamano con il comando man(1), e che rappresentano la documentazione online di ogni buon sistema UNIX, non solo di Linux.

Il comando man è abbastanza intelligente da reagire se è settata appropriatamente la variabile LANG. In pratica man va a cercare le manpages prima in $MANPATH/$LANG e poi in $MANPATH. Quindi, se traducete la manpage di tin(1), la piazzate in /usr/man/it_IT/man1/tin.1, settate LANG a ``it_IT'' e date man, ottenete la manpage in italiano.

Ovviamente non dovete mettervi a tradurre da soli tutte le pagine, c'è già chi lo sta facendo, e se vi sentite dei traduttori nati non vi resta che saltare al progetto ILDP per saperne di piú e collaborare.

Le pagine già tradotte possono essere tranquillamente prelevate e installate manualmente, prelevando l'ultima versione da ftp://www.pluto.linux.it/ildp/man/ e leggendo attentamente le istruzioni, anche se gli utenti debian possono trovare nella loro distribuzione il pacchetto manpages-it già pronto.

3.3 Catalogue

Oltre tutto questo, c'è una terza e importantissima funzione della NLS: i messaggi dei programi nella lingua locale.

Per farsi un'idea, agli utenti Linux non tocca editare i sorgenti di un programma, modificare a mano tutte le stringhe e poi ricompilare perché questo si presenti in corretto italiano. Esiste una ``prassi'' di programmazione che permette di specificare un linguaggio di default ``compilato'' nell'eseguibile (di solito inglese, per compatibilità) e invece definire delle catalog, ovvero dei cataloghi di messaggi in un formato particolare, detto portable object, o più brevemente po, che messi in una determinata directory consentono di essere ``linkati dinamicamente'' nel programma, ovvero usati semplicemente al suo posto.

I problemi qui sono due:

  1. Fare in modo che il maggior numero possibile di programmi supporti le convenzioni di programmazione che gli permettono di essere immediatamente localizzato.
  2. Costruire i cataloghi di messaggi in italiano, controllarli, aggiornarli, distribuirli.

Il primo problema è praticamente risolto, nel senso che ormai è buona prassi fare i programmi con il supporto NLS. Il secondo problema richiede una grande collaborazione e inoltre più che riguardare Linux riguarda il mondo GNU in generale, visto che queste catalogues prodotte vanno bene su qualsiasi piattaforma in cui sia stata portata la libreria e il compilatore GNU. In teoria anche non solo unix.

Ora come ora sono stati tradotti solo una piccola parte di programmi, e a dire il vero ancora è tutto in via sperimentale...

Per ora l'unico programma grosso che utilizza le catalogues è StarOffice. Se, come consigliato, ponete LANG a it_IT, StarOffice diventa in Italiano. Oddio, a dire il vero 80% in italiano, 15% in tedesco, 5% in inglese, fa quasi tenerezza... ;)))

it@li.org

Non c'è da meravigliarsi che ci abbia pensato mamma GNU stessa a creare una mailing list (o meglio, un sito intero, http://www.li.org/) dedicato a questo, dobbiamo ammetterlo, immane lavoro di traduzione e aggiornamento.

In particolare in questo sito vengono messe a disposizione della cominità UNIX internazionale una serie di liste in cui poter coordinarsi per la traduzione, una per ogni paese piú una serie di liste generiche di ``intracoordinamento''.

Visto che tradurre i messaggi (catalogues) e tradurre manpage e HOWTO sono compiti molto simili, ora come ora i compiti di traduzione sono divisi tra due ambiti, questa lista in cui si definiscono le regole generali di traduzione e si traducono catalogues, e ILDP che invece è piú legata al mondo Linux e maggiormente dedicata alla documentazione (HOWTO e manpage).

Come per ILDP c'è bisogno di una grande collborazione da parte di tutto il mondo Linux italiano.

Vi prego di NON, ripeto NON iniziare nessuna localizzazione senza prima aver sentito i ``colleghi'' di questa mailing list, il vostro lavoro potrebbe venir vanificato in un secondo.

È possibile accedere a questa mailing list iscrivendosi, con il solito subscribe it Nome Cognome nel corpo del messaggio, all'indirizzo it-request@li.org, ovviamente la mailing list si chiama it@li.org.

Tutto il lavoro svolto fino ad ora è reperibile all'url ftp://alpha.gnu.ai.mit.edu/gnu/po/. In particolare:

Tutto questo materiale e anche altro è disponibile anche all'url ftp://svpop.com.dist.unige.it:/pub/Linux/gnu/po.

3.4 Per maggiori informazioni

Ulteriori informazioni possono essere recuperate nei seguenti testi:


Previous Next Contents