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.
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.
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 :
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
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.
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.
Ulteriori informazioni possono essere recuperate nei seguenti testi:
Linux Danish/International HOWTO
È stato il primo HOWTO che ha trattato il tema della nazionalizzazione
di Linux, ed è tuttora un riferimento. A dispetto del nome è piú
``International'' che ``Danish'' visto che è in inglese...
Un giro per
ftp://sunsite.unc.edu/pub/Linux/utils/nls
è consigliato ai programmatori. In particolare
consiglio la lettura del file locale-tutorial-0.8.txt.gz.
Come già detto, il sito ufficiale GNU dove potete trovare informazioni
sulla localizzazione GNU e le definizioni di locale più aggiornate è
ftp://dkuug.dk/i18n.
In particolare se volete tentare l'installazione manuale delle
definizioni di locale potete prendere il materiale che trovate a
ftp://dkuug.dk/i18n/WG15-collection e, ovviamente,
leggere attentamente la documentazione allegata o i succitati testi.
Maggiori informazioni sul formato dei Portable Object e sullo
stato delle traduzioni possono essere trovate al sito
ftp://alpha.gnu.ai.mit.edu/gnu/po/ oppure
ftp://svpop.com.dist.unige.it:/pub/Linux/gnu/po che ne è
un mirror.
Un URL mitico al riguardo, ottimo punto di partenza per
ricerche sulla internazionalizzazione, è
http://www.vlsivie.tuwien.ac.at/mike/i18n.html. Le
pagine sono curate da Michael Gschwind, e sono una miniera di
link per approfondire.