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:
È 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.
Influisce sulle regole di parsing di alcune funzioni C, principalmente il sort.
Definisce il set di caratteri usato dal sistema.
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.
Separatore di decimali e migliaia, formattazione dei numeri.
Definisce i valori ``si'' e ``no''.
Come stampare data e ora (questo influenza date(1) e programmi vari).
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.
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.
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
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")
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
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.
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
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''.
Aggiungere la seguente riga nel file ~/.nn/init
:
set data-bits 8
Basta aggiungere nel proprio ~/.telnetrc
la riga:
set binary true
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.
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:
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... ;)))
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:
ABOUT-NLS
spiega in dettaglio il progetto, che cosa si intende
per NLS, come si installa il supporto per la internazionalizzazione.
conf96-i18n.ps.gz
è il testo della relazione di Ulrich Drepper
all'ultima conferenza della FSF per la presentazione di NLS,
disquisendo sull'implementazione GNU e altre facezie.
gettext-N.M.O.tar.gz
ovvero le beta release del pacchetto gettext
che serve per l'internazionalizzazione. Le versioni ufficiali si
trovano comunque su
ftp://prep.ai.mit.edu/pub/gnu.
maint/PACKAGE/it.po
, ovvero le ultime versioni dei file .po
originali in inglese da cui partire con le traduzioni.
trans/it/PACKAGE-VERSION.po
, ovvero le versioni già tradotte
dei file .po.
Tutto questo materiale e anche altro è disponibile anche all'url ftp://svpop.com.dist.unige.it:/pub/Linux/gnu/po.
Ulteriori informazioni possono essere recuperate nei seguenti testi:
locale-tutorial-0.8.txt.gz
o
successivi, versione ``smanettona'' del precedente mini-HOWTO.