Capitolo 22. Localizzazione - Uso e Impostazione dell'I18N/L10N

22.1. Sinossi

FreeBSD è un progetto di larga diffusione con utenti e collaboratori in ogni parte del mondo. Questo capitolo affronta quegli aspetti tipici di FreeBSD relativi all’internazionalizzazione e localizzazione del sistema che permettono agli utenti non di lingua inglese di operare in maniera più confortevole. Ci sono molti aspetti da considerare dell’implementazione I18N sia a livello utente che di sistema, perciò, ove necessario, si rinvierà il lettore a fonti di informazione più specifiche.

Dopo aver letto questo capitolo, saprai:

  • Come i vari linguaggi e nazioni sono codificati nei moderni sistemi operativi.

  • Come impostare la localizzazione per la tua shell di login.

  • Come configurare la tua console per una lingua che non sia l’inglese.

  • Come usare concretamente X Window System con differenti lingue.

  • Dove reperire ulteriori informazioni su come scrivere applicazioni I18N compatibili.

Prima di leggere questo capitolo, dovresti:

22.2. Principi di Base

22.2.1. Cosa significano le sigle I18N/L10N?

Gli sviluppatori hanno abbreviato la parola "internationalization" in I18N, contando il numero di lettere che costituiscono la parola "internationalization", escludendo la prima e l’ultima. Lo stesso è stato fatto per l’acronimo L10N, che deriva appunto da "localization". Combinando insieme i metodi, i protocolli e le applicazioni che rispettano gli standard I18N/L10N si permette agli utenti di utilizzare una qualsiasi lingua di propria scelta.

Le applicazioni I18N sono realizzate mediante appositi kit, disponibili tramite specifiche librerie. Questo permette agli sviluppatori di scrivere in un normale file di testo i menù e i messaggi da visualizzare nel programma e di tradurlo poi nelle varie lingue. Si raccomandano vivamente i programmatori di seguire questa convenzione.

22.2.2. Perché Dovrei Usare I18N/L10N?

I18N/L10N è usato ogni qualvolta desideri visualizzare, immettere o processare dati in lingue diverse da quella inglese.

22.2.3. Quali Lingue sono Disponibili nel Lavoro I18N?

I18N e L10N non sono caratteristiche specifiche di FreeBSD. Al momento, è possibile scegliere fra la maggior parte delle lingue più diffuse nel mondo, tra le quali: cinese, tedesco, giapponese, francese, russo, italiano e altre ancora.

22.3. Come Utilizzare la Localizzazione

Vista la sua importanza, I18N non è specifico del sistema FreeBSD ed è una convenzione. Siete invitati ad aiutare il progetto FreeBSD per sostenere questa convenzione.

Le impostazioni per la localizzazione o nazionalizzazione sono basate su tre termini principali: Codice Lingua, Codice Nazione e Codifica. I nomi che contraddistinguono una localizzazione sono formati utilizzando questi termini nel modo seguente:

CodiceLingua_CodiceNazione.Codifica

22.3.1. I Codici per la Lingua e la Nazione

Al fine di localizzare un sistema FreeBSD (o qualsiasi altro sistema UNIX® che gestisca I18N) in una specifica lingua, l’utente deve innanzitutto conoscere i codici della nazione e della lingua desiderati (i codici delle nazioni segnalano alle applicazioni quali convenzioni adottare all’interno di un dato linguaggio). Inoltre, i browser web, i server SMTP/POP, i server web, ecc. possono operare in base ad essi. I seguenti sono esempi di codici lingua/nazione:

Codice Lingua/NazioneDescrizione

en_US

inglese - Stati Uniti d’America

ru_RU

russo - Russia

zh_TW

cinese tradizionale - Taiwan

22.3.2. Codifiche

Alcune lingue utilizzano codifiche non ASCII, cioè caratteri a 8 bit, estesi o multibyte, vedere multibyte(3) per maggiori dettagli. Le applicazioni più vecchie, non riconoscendoli, li interpretano come caratteri di controllo. Quelle più recenti invece riconoscono di solito i caratteri a 8 bit. A seconda dell’implementazione, è possibile che gli utenti debbano ricompilare un’applicazione con il supporto ai caratteri estesi o multibyte, o debbano configurare l’applicazione in modo corretto. Per essere in grado di immettere e di elaborare caratteri estesi o multibyte, la FreeBSD Ports Collection fornisce vari programmi in differenti linguaggi. Si faccia riferimento alla relativa documentazione I18N del port di FreeBSD.

Precisamente, l’utente deve consultare la documentazione propria dell’applicazione per conoscere come configurarla correttamente o come passare i giusti valori al configuratore/Makefile/compilatore.

Alcune cose da tener presente sono:

  • Gli insiemi di caratteri rappresentabili dal tipo char del linguaggio C, specifici della lingua (vedere multibyte(3)), cioè ISO8859-1, ISO8859-15, KOI8-R, CP437.

  • Codifiche estese o multibyte, cioè EUC, Big5.

Puoi consultare l’elenco corrente degli insiemi di caratteri nel Registro IANA.

FreeBSD usa le codifiche per la localizzazione compatibili con X11.

22.3.3. Applicazioni I18N

Nel sistema dei port e dei pacchetti precompilati di FreeBSD, le applicazioni I18N sono facilmente riconoscibili, perché il loro nome include la sigla I18N. Tuttavia, non sempre queste potrebbero supportare la lingua desiderata.

22.3.4. Impostazione del Locale

Di solito è sufficiente esportare il valore del nome del locale posto nella variabile LANG all’interno della shell di login. Questo può essere fatto utilizzando il file dell’utente ~/.login_conf oppure il file di configurazione della shell di login dell’utente (~/.profile, ~/.bashrc, ~/.cshrc). Non c’è bisogno di impostare le altre variabili del locale, come LC_CTYPE, LC_CTIME. Per maggiori informazioni si faccia riferimento alla documentazione di FreeBSD specifica per la data lingua.

Puoi settare le due variabili d’ambiente seguenti nei tuoi file di configurazione:

  • LANG per le funzioni appartenenti alla famiglia POSIX®, setlocale(3)

  • MM_CHARSET per l’insieme dei caratteri che dovranno usare le applicazioni che supportano lo standard MIME

Ciò va fatto per la configurazione della shell dell’utente, di un’applicazione specifica e per quella di X11.

22.3.4.1. Metodi di Localizzazione

Ci sono due metodi per impostare il locale, entrambi descritti qui di seguito. Il primo (raccomandato) consiste nell’impostare le variabili d’ambiente in una classe di login, mentre il secondo consiste nell’aggiungere i valori delle variabili d’ambiente al file d’avvio della shell di sistema.

22.3.4.1.1. Metodo delle Classi di Login

Questo metodo fa sì che le variabili d’ambiente necessarie per il nome del locale e per gli insiemi dei caratteri MIME vengano inizializzate una volta sola per ogni possibile shell di sistema invece di aggiungere specifici assegnamenti per ogni file d’avvio di shell. Il Setup a Livello Utente può essere fatto dall’utente stesso e il Setup a Livello Amministratore richiede i privilegi del superuser.

22.3.4.1.1.1. Setup a Livello Utente

Ecco un breve esempio di un file .login_conf posto nella directory home di un utente che ha entrambe le variabili impostate alla codifica Latin-1:

me:\
:charset=ISO-8859-1:\
:lang=de_DE.ISO8859-1:

Ecco invece un esempio di un file .login_conf che imposta le variabili per il cinese tradizionale con codifica BIG-5. Si noti che sono state impostate molte variabili perchè alcuni programmi non rispettano come dovrebbero le variabili di localizzazione per il cinese, giapponese e il coreano.

#Gli utenti che non vogliono usare l'unità monetaria o i formati temporali
#di Taiwan possono modificare manualmente ogni variabile
me:\
        :lang=zh_TW.Big5:\
        :setenv=LC_ALL=zh_TW.Big:\
        :setenv=LC_COLLATE=zh_TW.Big5:\
        :setenv=LC_CTYPE=zh_TW.Big5:\
        :setenv=LC_MESSAGES=zh_TW.Big5:\
        :setenv=LC_MONETARY=zh_TW.Big5:\
        :setenv=LC_NUMERIC=zh_TW.Big5:\
        :setenv=LC_TIME=zh_TW.Big5:\
        :charset=big5:\
        :xmodifiers="@im=gcin": #Set gcin as the XIM Input Server

Vedere il paragrafo Setup a Livello Amministratore e login.conf(5) per maggiori dettagli.

22.3.4.1.2. Setup a Livello Amministratore

Controlla che la classe di login dell’utente in /etc/login.conf selezioni la lingua corretta. Assicurati che queste impostazioni appaiano in /etc/login.conf:

nome_lingua:titolo_account:\
:charset=MIME_charset:\
:lang=nome_locale:\
:tc=default:

Ritornando quindi all’esempio di prima che utilizzava Latin-1, si dovrebbe avere una cosa simile a questa:

tedesco:Account Utenti Tedeschi:\
:charset=ISO-8859-1:\
:lang=de_DE.ISO8859-1:\
:tc=default:

Dopo aver modificato le Classi di Login degli utenti esegui il comando seguente:

# cap_mkdb /etc/login.conf

per creare una nuova configurazione in /etc/login.conf visibile al sistema.

22.3.4.1.3. Modifica delle Classi di Login con vipw(8)

Usa vipw per aggiungere nuovi utenti, e crea qualcosa di simile a quanto segue:

utente:password:1111:11:lingua:0:0:Nome Utente:/home/user:/bin/sh
22.3.4.1.4. Modifica delle Classi di Login con adduser(8)

Usa adduser per aggiungere nuovi utenti, in questo modo:

  • Imposta defaultclass = lingua in /etc/adduser.conf. Tieni presente che in questo modo dovrai inserire una classe default per tutti gli utenti di altre lingue.

  • In alternativa si può specificare la lingua desiderata ogni volta che appare il prompt

    Enter login class: default []:

durante l’esecuzione di adduser(8)

  • Un’altra alternativa è utilizzare il comando nel modo seguente per ogni utente di una diversa lingua che si desidera aggiungere:

    # adduser -class lingua
22.3.4.1.5. Cambiare le Classi di Login con pw(8)

Se utilizzi il comando pw(8) per aggiungere nuovi utenti, invocalo in questo modo:

# pw useradd nome_utente -L  lingua
22.3.4.1.6. Metodo del File di Avvio della Shell

Questo metodo è sconsigliato perché richiede una inizializzazione diversa per ogni possibile shell. Usa invece il Metodo delle Classi di Login.

Per aggiungere il nome del locale e l’insieme dei caratteri per lo standard MIME, bisogna semplicemente settare le due variabili d’ambiente mostrate di seguito nei file d’avvio della shell /etc/profile e/o /etc/csh.login. Nell’esempio che segue viene utilizzata la lingua tedesca:

In /etc/profile:

LANG=de_DE.ISO8859-1; export LANG
MM_CHARSET=ISO8859-1; export MM_CHARSET

Oppure in /etc/csh.login:

setenv LANG de_DE.ISO8859-1
setenv MM_CHARSET ISO8859-1

Lo stesso risultato si ottiene aggiungendo i precedenti comandi al file /usr/shared/skel/dot.profile (per i comandi usati in /etc/profile), oppure al file /usr/shared/skel/dot.login (per quelli in /etc/csh.login).

Per l’ambiente X11:

Nel file $HOME/.xinitrc:

LANG=de_DE.ISO8859-1; export LANG

Oppure:

setenv LANG de_DE.ISO8859-1

a seconda della shell utilizzata (vedi sopra).

22.3.5. Settaggio della Console

Per tutti gli insiemi di caratteri che sono rappresentabili con il tipo char in C, imposta i font della console adatti alla lingua prescelta in /etc/rc.conf:

font8x16=nome_font
font8x14=nome_font
font8x8=nome_font

nome_font è il nome di uno dei file di font presenti nella directory /usr/shared/syscons/fonts, privato del suffisso .fnt.

Assicurati anche di impostare la giusta mappatura della tastiera e del video per il proprio set di caratteri usando sysinstall (/stand/sysinstall nelle versioni di FreeBSD precedenti alla 5.2). Una volta all’interno di sysinstall, seleziona Configure, quindi Console. In alternativa, aggiungi le seguenti righe in /etc/rc.conf:

scrnmap=nome_screenmap
keymap=nome_keymap
keychange="numero_tasto_funzione sequenza"

nome_screenmap viene preso dalla directory /usr/shared/syscons/scrnmaps, privato del suffisso .scm. Una screenmap assieme ad una corrispondente mappa dei font è solitamente necessaria nel caso la scheda grafica non gestisca i font via software, ma li abbia codificati internamente; la screenmap serve appunto a rimappare tali font interni nel font prescelto.

Se hai abilitato il demone moused inserendo la seguente riga in /etc/rc.conf:

moused_enable="YES"

allora leggi quanto riportato nel prossimo paragrafo sul cursore del mouse.

Di default il cursore del mouse del driver syscons(4) occupa l’intervallo da 0xd0 a 0xd3 nel set di caratteri in uso. Se la tua lingua utilizza tali caratteri, devi spostare l’intervallo occupato dal cursore. Per far questo con FreeBSD, inserisci la seguente riga in /etc/rc.conf:

mousechar_start=3

nome_keymap deve invece corrispondere a uno dei file presenti nella directory /usr/shared/syscons/keymaps, privato del suffisso .kbd. Se sei indeciso su quale keymap scegliere, puoi usare il comando kbdmap(1) per testare le varie mappature senza dover riavviare il sistema.

La variabile keychange è di solito richiesta per programmare i tasti funzione in relazione al tipo di terminale in uso, poiché le sequenze generate da un tasto funzione non possono essere definite in una mappa di tasti.

Assicurati inoltre di impostare il corretto tipo di terminale in /etc/ttys per tutte le voci del tipo ttyv*. Attualmente, le corrispondenze predefinite sono:

Insieme di CaratteriTipo di Terminale

ISO8859-1 o ISO8859-15

cons25l1

ISO8859-2

cons25l2

ISO8859-7

cons25l7

KOI8-R

cons25r

KOI8-U

cons25u

CP437 (di default per VGA)

cons25

US-ASCII

cons25w

Per i linguaggi che usano caratteri estesi o multibyte, è bene servirsi del corretto port di FreeBSD nella directory /usr/ports/linguaggio. Poichè alcuni port che si presentano come console sono riconosciuti dal sistema come terminali seriali virtuali (vtty), devi riservare abbastanza vtty sia per X11 che per la console pseudo-seriale. Ecco una lista parziale di applicazioni con cui si possono utilizzare altri linguaggi in console:

LinguaggioUbicazione

cinese tradizionale (BIG-5)

/usr/ports/chinese/big5con

giapponese

japanese/kon2-16dot oppure japanese/mule-freewnn

coreano

korean/han

22.3.6. Impostazione di X11

Sebbene X11 non faccia parte del progetto FreeBSD, vengono qui fornite alcune informazioni per gli utenti di FreeBSD. Per maggiori dettagli, si faccia riferimento al sito web Xorg o a quello del Server X11 utilizzato.

Nel file ~/.Xresources, puoi mettere a punto le impostazioni per I18N specifiche di un’applicazione (ad esempio, i font, i menu, ecc.).

22.3.6.1. Visualizzazione dei Font

Installa il server Xorg (x11-servers/xorg-server) o XFree86™ (x11-servers/XFree86-4-Server), quindi installa i font TrueType® propri della lingua prescelta. L’impostazione del corretto locale dovrebbe permetterti di visualizzare tale lingua nei vari menu, ecc.

22.3.6.2. Immissione di Caratteri Non Inglesi

Il protocollo X11 Input Method (XIM) è un nuovo standard per tutti i client X11. Tutte le applicazioni X11 dovrebbero essere scritte come client XIM che ricevono l’input dai server XIM. Vi sono parecchi server XIM disponibili per le differenti lingue.

22.3.7. Configurazione della Stampante

Alcuni set di caratteri del tipo char del C sono solitamente codificati a livello hardware all’interno delle stampanti stesse. Gli insiemi di caratteri estesi o multibyte richiedono invece una speciale configurazione e si raccomanda l’utilizzo di apsfilter. Puoi anche convertire documenti nei formati PostScript® o PDF utilizzando convertitori specifici per una data lingua.

22.3.8. Il Kernel e i File System

Il file system di FreeBSD FFS (Fast File System) è completamente a 8-bit, perciò può essere utilizzato con qualsiasi insieme di caratteri del tipo char del C (vedere multibyte(3)), ma non vi è un nome particolare di un insieme di caratteri memorizzato nel file system; cioè, il file system è a 8 bit senza alcuna codifica interna e ignora un’eventuale codifica. Ufficialmente, FFS non supporta ancora alcuna forma degli insiemi di caratteri estesi o multibyte. Tuttavia, esistono per alcuni di questi delle patch indipendenti per il FFS che abilitano tale supporto. Sono solo soluzioni temporanee, non portabili ed si è deciso di non includerle nell’albero dei sorgenti. Si faccia riferimento ai rispettivi siti web della lingua desiderata per ulteriori informazioni e per i file di patch.

Il supporto per il file system di MS-DOS® in FreeBSD offre la possibilità di configurare la modalità di conversione tra gli insiemi di caratteri MS-DOS®, Unicode e quelli scelti per il file system di FreeBSD. Consultare mount_msdosfs(8) per i dettagli.

22.4. Compilazione dei Programmi con Supporto I18N

Molti dei port di FreeBSD includono il supporto I18N. Alcuni di essi sono contrassegnati dal suffisso -I18N nel loro nome. Questi e molti altri programmi hanno il supporto per I18N già incluso e non necessitano perciò di speciali considerazioni.

Tuttavia, alcune applicazioni come ad esempio MySQL richiedono che venga specificato nel Makefile l’insieme dei caratteri che si utilizzeranno. Questa operazione viene fatta o modificando direttamente il suddetto file oppure passando un opportuno valore al programma configure nella directory dei sorgenti.

22.5. Localizzazione di FreeBSD con Lingue Particolari

22.5.1. Lingua Russa (Codifica KOI8-R)

Per maggiori informazioni sulla codifica KOI8-R, si veda la fonte di riferimento per il KOI8-R (Russian Net Character Set).

22.5.1.1. Impostazione del Locale

Metti le seguenti righe nel tuo file ~/.login_conf:

me:My Account:\
:charset=KOI8-R:\
:lang=ru_RU.KOI8-R:

Si veda quanto esposto precedentemente in questo capitolo per degli esempi di impostazione del locale.

22.5.1.2. Configurazione della Console

  • Aggiungi la riga seguente al tuo file /etc/rc.conf:

    mousechar_start=3
  • Utilizza inoltre le seguenti impostazioni nel file /etc/rc.conf:

    keymap="ru.utf-8"
    scrnmap="utf-82cp866"
    font8x16="cp866b-8x16"
    font8x14="cp866-8x14"
    font8x8="cp866-8x8"
  • Per ogni voce ttyv* nel file /etc/ttys, usa cons25r come tipo di terminale.

Si veda quanto esposto in precedenza in questo capitolo per degli esempi su come impostare la console.

22.5.1.3. Configurazione della Stampante

Dal momento che la maggior parte delle stampanti con caratteri russi hanno a livello hardware la codifica codepage CP866, è necessario utilizzare uno speciale filtro di conversione da KOI8-R a CP866. Tale filtro viene installato di default come /usr/libexec/lpr/ru/koi2alt. La voce per una stampante russa dovrebbe apparire perciò così in /etc/printcap:

lp|Russian local line printer:\
:sh:of=/usr/libexec/lpr/ru/koi2alt:\
:lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs:

Si veda printcap(5) per una spiegazione dettagliata del significato dei vari campi.

22.5.1.4. Nomi di File Russo e File System MS-DOS®

La seguente voce d’esempio di fstab(5) abilita il supporto per i nomi di file in russo su file system MS-DOS®:

/dev/ad0s2      /dos/c  msdos   rw,-W=koi2dos,-L=ru_RU.KOI8-R 0 0

L’opzione -L seleziona il nome locale usato, e -W imposta la tabella di conversione dei caratteri. Per usare l’opzione -W, assicurati di montare /usr prima della partizione MS-DOS® perché le tabelle di conversione sono posizionate in /usr/libdata/msdosfs. Per maggiori informazioni, guarda la pagina man di mount_msdosfs(8).

22.5.1.5. Configurazione di X11

  1. Segui innanzitutto la configurazione del locale in console come descritto in precedenza.

  2. Se usi Xorg, installa il package x11-fonts/xorg-fonts-cyrillic.

    Controlla la sezione "Files" nel tuo file /etc/X11/xorg.conf. Le seguenti righe devono essere aggiunte prima di qualsiasi altra voce FontPath:

    FontPath   "/usr/X11R6/lib/X11/fonts/cyrillic/misc"
    FontPath   "/usr/X11R6/lib/X11/fonts/cyrillic/75dpi"
    FontPath   "/usr/X11R6/lib/X11/fonts/cyrillic/100dpi"

    Se utilizzi una modalità video ad alta risoluzione, scambia le righe 75 dpi e 100 dpi.

    Cerca nei port per altri font cirillici.

  3. Per attivare la tastiera russa, aggiungi alla sezione "Keyboard" del tuo file xorg.conf queste cose:

    Option "XkbLayout"   "us,ru"
    Option "XkbOptions"  "grp:toggle"

    Verifica inoltre che la riga XkbDisable sia commentata.

    Per grp:caps_toggle il cambio RUS/LAT si usa Right Alt, per grp:ctrl_shift_toggle si usa Ctrl+Shift. La vecchia funzione di CapsLock à ancora disponibile via Shift+CapsLock (solamente in modalità LAT). Per grp:toggle il cambio RUS/LAT si usa Right Alt. grp:caps_toggle non funziona in Xorg per ragioni sconosciute.

    Se hai i tasti "Windows®" sulla tua tastiera, e noti che alcuni tasti non alfabetici sono mappati non correttamente in modalità RUS, aggiungi in xorg.conf la seguente riga:

    Option "XkbVariant" ",winkeys"

    La tastiera russa XKB potrebbe non lavorare con applicazioni non localizzate.

Di base le applicazioni localizzate dovrebbe chiamare la funzione XtSetLanguageProc (NULL, NULL, NULL); all’inizio del programma.

Guarda KOI8-R per X Window per maggiori istruzioni sulle applicazioni di X11 localizzate.

22.5.2. Localizzazione del Cinese Tradizionale per Taiwan

Il FreeBSD-Taiwan Project fornisce un Chinese HOWTO per FreeBSD all’indirizzo http://freebsd.sinica.edu.tw/~statue/freebsd/zh-tut/ per l’utilizzo di gran parte delle applicazioni in cinese. L’attuale autore del FreeBSD Chinese HOWTO è Shen Chuan-Hsing statue@freebsd.sinica.edu.tw.

Chuan-Hsing Shen statue@freebsd.sinica.edu.tw ha creato la Chinese FreeBSD Collection (CFC) utilizzando zh-l10n-tut del FreeBSD-Taiwan Project. I pacchetti e i file di script sono disponibili all’url ftp://freebsd.csie.nctu.edu.tw/pub/taiwan/CFC/.

22.5.3. Localizzazione della Lingua Tedesca (per Tutte le Lingue ISO 8859-1)

Slaven Rezic eserte@cs.tu-berlin.de ha scritto un tutorial su come utilizzare le lettere con l'umlaut su una macchina FreeBSD. Il tutorial è scritto in tedesco e disponibile all’indirizzo http://user.cs.tu-berlin.de/~eserte/FreeBSD/doc/umlaute/umlaute.html.

22.5.4. Localizzazione della Lingua Giapponese e Coreana

Per il giapponese, vedere l’url http://www.jp.FreeBSD.org/, per il coreano, l’url http://www.kr.FreeBSD.org/.

22.5.5. Documentazione Non Inglese per FreeBSD

Alcuni volontari hanno tradotto parte della documentazione di FreeBSD in altre lingue. Questo materiale è raggiungibile seguendo i link segnalati sul sito ufficiale di FreeBSD oppure sotto la directory /usr/shared/doc.


Questo, ed altri documenti, possono essere scaricati da https://download.freebsd.org/ftp/doc/

Per domande su FreeBSD, leggi la documentazione prima di contattare <freebsd-questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <freebsd-doc@FreeBSD.org>.