Blog literacki, portal erotyczny - seks i humor nie z tej ziemi
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_COLLATEInfluisce sulle regole di parsing di alcune funzioni C, principalmente il sort.LC_CTYPEDefinisce il set di caratteri usato dal sistema.LC_MONETARYDefinisce 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_NUMERICSeparatore di decimali e migliaia, formattazione dei numeri.LC_MESSAGESDefinisce i valori ``si'' e ``no''.LC_TIMECome stampare data e ora (questo influenza date(1) e programmi vari).LC_ALLCome 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_ITOppure se avete c-type shells: setenv LANG it_ITPerché ``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 caratteriTutti 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 -parenbOra 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 19Come 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 ~/.emacsInoltre, 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-isMail/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-asciiIn 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 = lessOppure 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-1Oppure se avete c-type shells: setenv MM_CHARSET iso-8859-1pine(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-1oppure 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 8Programmi di comunicazione telnet(1)Basta aggiungere nel proprio ~/.telnetrc la riga: set binary true3.2 ManpageLe 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 CatalogueOltre 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:Fare in modo che il maggior numero possibile di programmi supporti le convenzioni di programmazione che gli permettono di essere immediatamente localizzato.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.orgNon 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.3.4 Per maggiori informazioniUlteriori informazioni possono essere recuperate nei seguenti testi:The 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...Locales mini-HOWTO È un mini howto che guida, passo passo, nell'installazione di un set locale funzionante e completo, per chi vuole fare da se.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 o successivi, versione ``smanettona'' del precedente mini-HOWTO.Come già detto, il sito ufficiale GNU dove potete trovare informazioni sula localizzazione GNU e le definizioni di locale più aggiornate è ftp://dkuug.dk/i18n.