Next Previous 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 GNU libc, tutta la localizzazione � supportata anche da Linux. 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 ha gi� il supporto per la localizzazione...

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 ordinamento alfabetico.

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; definisce inoltre 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). Come spiegher� in seguito, questa variabile non va usata a meno di non sapere perfettamente quello che si sta facendo.

3.1 La localizzazione in una riga...

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.

Bug delle localizzazioni

Solitamente si manifestano con errate definizioni degli alias di locale, quindi definizioni che dovrebbero essere equivalenti danno risultati completamente diversi; per rimediare a questo occorre prelevare le definizioni di locale aggiornate, o installarle (molte distribuzioni non le installano proprio).

Pu� anche essere che alcune distribuzioni non abbiano proprio il supporto per la locale, al che conviene cambiare distribuzione (l'alternativa � ricompilare a mano la libreria di sistema libc).

Bug delle applicazioni

Anche qui, come per il problema BS/DEL, se qualcosa non funziona � colpa, quasi certamente, della applicazione.

C'� qui una specie di ``caverna degli orrori''... ;)))

Netscape

Netscape, se vengono definite le variabili LC_NUMERIC e LC_MONETARY, si mette a stampare e salvare PostScript con punti al posto delle virgole e viceversa, con il risultato che gs(1) va in palla...

Se capita, ricontrollate la vostra definizione di locale, e se avete fretta di stampare basta che definiate le variabili seguenti:


        LC_NUMERIC=posix
        LC_MONETARY=posix

che forzano i valori di default (e permettono di stampare).

Notare che se si � definita LC_ALL, queste due righe qui sopra vengono ignorate: per questo � bene NON definire la variabile LC_ALL.

� probabile che questo problema non sia solo di Netscape: se vi capita un problema simile, sapete ora come ``mettere una pezza'', ma avvisate l'autore del programma in questione della presenza di questo bug.

perl(1)

Spesso perl(1) si lamenta della mancanza della locale; questo � dovuto sia a una non completa implementazione da parte della distribuzione, sia in parte a perl stesso che non riesce a gestire gli alias delle varie locali, e quindi riesce a ``seguire'' la variabile LANG solo se punta a una locale con una reale directory sul disco.

Io sulla mia Debian non sono riuscito a riprodurre il problema (se non settando LANG a una locale inesistente ;) e quindi sospetto che tutto nasca da una difficile interazione tra localizzazione e perl stesso, che verr� risolta sicuramente dalle prossime versioni di perl.

RedHat 5.0 soffre di questo problema, che � stato corretto nella 5.1.

3.2 ...o quasi!

Resta il problema di far capire alle applicazioni ``cattive'' che vogliamo avere i caratteri accentati. Questi hanno l'interessante propriet� di essere lunghi 8 bit, mentre molti programmi ne considerano solo 7, perch� � da 7 bit il codice ASCII internazionalmente riconosciuto.

Queste note che scrivo dovrebbero presto finire in soffitta, visto che ormai le applicazioni che non gestiscono bene gli 8 bit o che non sano reagire alla variabile LANG sono in via di estinzione.

Editor

Emacs 19

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


        (standard-display-european t)
        (set-input-mode (car(current-input-mode))
        (nth 1 (current-input-mode)) 0)

Aggiunto al nostro bravo ~/.emacs

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

pine(1)

Basta scegliere il set di caratteri ISO-8859-1 dal menu di configurazione, seguendo le voci ``Setup'', poi ``Configure'' e infine ``character-set''; questo fa uscire le mail in codifica ``quoted-printable'' se contengono caratteri accentati (il che � bene ;).

tin(1)

Tin � perfettamente localizzato, occorre solo scegliere il charset ISO-8859-1 per la visualizzazione nel men� di configurazione (attraverso [M]).

nn(1)

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


        set data-bits 8

readline(3)

Readline, che � una libreria standard GNU per la gestione dell'input, nonostante sia giovane, pimpante e ben mantenuta, non arriva per definizione con il supporto per i caratteri accentati. Questa libreria � usata dalla shell di default di linux bash(1), per citare una applicazione di larghissimo uso. Non � da considerare un bug (questo comportamento forse � voluto per garantire il funzionamento anche sui vecchi terminali a 7 bit...) ma � chiaro che l'uso dei caratteri accentati deve essere forzato, ad esempio, se si vogliono usare nomi di file con lettere accentate.

Per fortuna basta solo aggiungere nel proprio ~/.inputrc


        set meta-flag on
        set convert-meta off
        set output-meta on

3.3 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 � definita la variabile LANG. In pratica man va a cercare le manpages prima in $MANPATH/$LANG e poi in $MANPATH se configurato correttamente, permettendo di leggere le pagine nella lingua preferita.

Chiaramente c'� gi� chi sta traducendo le pagine; 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 installate manualmente, prelevando l'ultima versione da ftp://ftp.pluto.linux.it/pub/pluto/ildp/man e leggendo attentamente le istruzioni allegate. Gli utenti Debian possono trovare nella loro distribuzione il pacchetto manpages-it gi� pronto.

3.4 Catalogue

Oltre tutto questo, c'� una terza e importantissima funzione della NLS: i messaggi dei programmi 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 vengono usati semplicemente al posto dei messaggi presenti nel programma.

Linux International

Non c'� da meravigliarsi che ci abbia pensato mamma GNU stessa a creare una organizzazione nonprofit, Linux International appunto, dedicata a questo, dobbiamo ammetterlo, immane lavoro di traduzione e aggiornamento.

In particolare in questo sito vengono messe a disposizione della comunit� 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, per non creare fastidiose sovrapposizioni i compiti sono stati divisi tra due ambiti. Linux International in cui si definiscono le regole generali di traduzione e si traducono catalogues e programmi GNU ``ufficiali'', e ILDP che invece � pi� legata al mondo Linux e maggiormente dedicata alla traduzione di documentazione (HOWTO e manpage) e anche alla sua produzione direttamente in Italiano.

Pi� avanti elenco le liste a cui ti puoi iscrivere per collaborare.

Ti prego di NON, ripeto NON iniziare nessuna localizzazione senza prima aver sentito i ``colleghi'' di queste mailing list, il tuo lavoro potrebbe venir vanificato in un secondo per un banale doppione.

3.5 Per maggiori informazioni

Ulteriori informazioni possono essere recuperate nei seguenti testi:


Next Previous Contents