Capitolo 8. I18N e L10N

Indice

8.1. L'input da tastiera
8.1.1. Il supporto per metodo di input con IBus
8.1.2. Un esempio per il giapponese
8.1.3. Disabilitare il metodo di input
8.2. L'output sul display
8.3. Caratteri dell'Asia dell'est con larghezza ambigua
8.4. La localizzazione
8.4.1. Nozioni base sulla codifica
8.4.2. Logica alla base dell'uso della localizzazione UTF-8
8.4.3. La (ri)configurazione della localizzazione
8.4.4. Il valore della variabile di ambiente "$LANG"
8.4.5. Localizzazione specifica solamente in X Window
8.4.6. Codifica per i nomi di file
8.4.7. Messaggi localizzati e documentazione tradotta
8.4.8. Effetti della localizzazione

Il supporto per le lingue native o M17N (Multilingualization) per un software applicativo è ottenuto in 2 passi.

[Suggerimento] Suggerimento

Ci sono 17, 18 o 10 lettere tra le lettere "m" e "n", "i" e "n" o "l" e "n" in, rispettivamente, "multilingualization", "internazionalization" e "localization" che sono i termini inglesi corrispondenti a M17N, I18N e L10N.

Il software moderno, come GNOME e KDE ha il supporto per le lingue native. È internazionalizzato rendendolo capace di gestire dati UTF-8 e localizzato fornendo i messaggi tradotti attraverso l'infrastruttura gettext(1). I messaggi tradotti possono essere forniti in pacchetti separati di localizzazione e possono essere selezionati semplicemente impostando al valore di localizzazione appropriato le variabili d'ambiente pertinenti.

La più semplice rappresentazione di dati testuali è ASCII che è sufficiente per l'inglese ed usa meno di 127 caratteri (rappresentabili con 7 bit). Al fine di supportare molti più caratteri per il supporto internazionale, sono stati inventati molti sistemi di codifica dei caratteri. Il sistema di codifica moderno e intelligente è UTF-8 che può in pratica gestire tutti i caratteri conosciuti (vedere Sezione 8.4.1, «Nozioni base sulla codifica»).

Vedere Introduzione all'i18n per i dettagli.

Il supporto internazionale per l'hardware viene abilitato con dati di configurazione dell'hardware localizzati.

[Avvertimento] Avvertimento

Questo capito sta diventando non aggiornato dato che è basato su Debian 7.0 (Wheezy), rilasciata nel 2013.

Il sistema Debian può essere configurato per funzionare con molte disposizioni di tastiera internazionali usando i pacchetti keyboard-configuration e console-setup.

# dpkg-reconfigure keyboard-configuration
# dpkg-reconfigure console-setup

Ciò configura la tastiera per la console Linux e i parametri di configurazione di X Windows in "/etc/default/keyboard" e "/etc/default/console-setup". Configura anche il tipo di carattere per la console Linux.

Molti caratteri non ASCII, inclusi quelli accentati usati da molte lingue europee, possono essere resi disponibili con il "tasto morto" (dead key), il tasto AltGr e il tasto di composizione (compose).

Per le lingue asiatiche è necessario il supporto per metodi di input più complessi, come IBus che sarà trattato in seguito.

La console Linux può mostrare solamente un numero limitato di caratteri. (È necessario usare speciali programmi per terminale come jfbterm(1) per mostrare lingue non Europee nella console non-X.)

X Window può mostrare qualsiasi carattere in UTF-8 purché esistano i tipi di carattere richiesti. (La codifica dei dati dei tipi di carattere originali viene gestita dal sistema X Window in modo trasparente per l'utente.)

Nella localizzazione dell'Asia dell'est i caratteri di disegno di riquadri, i caratteri greci e cirillici possono essere visualizzati più larghi della larghezza desiderata e causare un output su terminale non allineato (vedere Unicode Standard Annex #11).

Questo problema può essere aggirato:

  • gnome-terminal: Modifica → Preferenze → Profili → Modifica → Compatibilità → Caratteri a larghezza ambigua → Stretto

  • ncurses: impostare l'ambiente export NCURSES_NO_UTF8_ACS=0.

Questa sezione si concentra sulla localizzazione per applicazioni eseguite nell'ambiente X Window avviato da gdm3(1).

La variabile d'ambiente "LANG=xx_YY.ZZZZ" imposta la localizzazione al codice di lingua "xx", alla codice di nazione "yy" e alla codifica "ZZZZ" (vedere Sezione 1.5.2, «La variabile "$LANG).

Il sistema Debian attuale normalmente imposta la localizzazione come "LANG=xx_YY.UTF-8" che fa uso della codifica UTF-8 con l'insieme di caratteri Unicode. Il sistema di codifica UTF-8 è un sistema multibyte e usa i punti del codice in modo intelligente. I dati ASCII, che consistono solamente di codici a 7 bit, sono comunque dati UTF-8 validi che usano 1 solo byte per carattere.

I sistemi Debian precedenti impostavano la localizzazione come "LANG=C" o "LANG=xx_YY" (senza ".UTF-8").

  • Per "LANG=C" o "LANG=POSIX" viene usato l'insieme di carattteri ASCII.

  • Il sistema di codifica tradizionale in Unix è usato per "LANG=xx_YY".

I sistemi di codifica tradizionale di fatto usati per "LANG=xx_YY" possono essere identificati controllando "/usr/share/i18n/SUPPORTED". Per esempio, "en_US" usa la codifica ISO-8859-1" e "it_IT@euro" usa la codifica "ISO-8859-15".

[Suggerimento] Suggerimento

Per il significato dei valori delle codifiche vedere Tabella 11.2, «Elenco dei valori delle codifiche e loro uso».

L'insieme di caratteri Unicode può rappresentare praticamente tutti i caratteri conosciuti con un intervallo di codici da 0 a10FFFF in notazione esadecimale. La sua memorizzazione richiede almeno 21 bit.

Il sistema di codifica UTF-8 fa rientrare i codici Unicode in un flusso di dati ragionevole a 8 bit compatibile con il sistema di elaborazione dei dati ASCII. UTF sta per Unicode Transformation Format (formato di trasformazione di Unicode).

È raccomandato l'uso della localizzazione UTF-8 per il desktop, per esempio "LANG=en_US.UTF-8". La prima parte della localizzazione determina i messaggi presentati dalle applicazioni. Per esempio, gedit(1) (un editor di testi per il desktop GNOME) nella localizzazione "LANG=it_IT.UTF-8" può mostrare e modificare testi in caratteri cinesi e allo stesso tempo presentare i menu in italiano, a patto che siano installati i necessari tipi di carattere e metodi di input.

È raccomandabile anche impostare la localizzazione usando solamente la variabile d'ambiente "$LANG". Non vedo la convenienza nell'impostare nella localizzazione UTF-8 una complessa combinazione di variabili "LC_*" (vedere locale(1)).

Anche un testo in semplice inglese può contenere caratteri non ASCII; le virgolette singole ricurve destra e sinistra per esempio non sono disponibili in ASCII.

“citazione tra virgolette doppie” non è uguale a "citazione tra virgolette doppie ASCII"
‘citazione tra virgolette singole’ non è uguale a 'citazione tra virgolette singole ASCII'

Quando dati di testo in puro ASCII sono convertiti in UTF-8 hanno contenuto e dimensioni esattamente identici a quelli dei dati ASCII originali. Perciò non si può perdere nulla usando la localizzazione UTF-8.

Alcuni programmi usano più memoria dopo l'inclusione del supporto per l'internazionalizzazione. Questo avviene perché il loro codice è programmato per usare internamente UTF-32(UCS4) per supportare Unicode al fine di ottimizzare la velocità e consumano 4 byte per ogni dato di carattere ASCII, indipendentemente dalla localizzazione selezionata. Ancora una volta usando la localizzazione UTF-8 non si perde nulla.

I vecchi sistemi di codifica non UTF-8 specifici di produttori, tendono ad avere piccolissime, ma noiose, differenze per molte nazioni in alcuni caratteri come quelli grafici. L'uso del sistema UTF-8 da parte dei sistemi operativi moderni ha praticamente risolto questi problemi di conflitti tra le codifiche.

Per far sì che un sistema abbia accesso ad una localizzazione particolare, è necessario che i dati della localizzazione siano stati compilati a partire dal database della localizzazione. (Il sistema Debian non viene fornito con tutte le localizzazioni disponibili già compilate a meno che non sia stato installato il pacchetto locales-all.) L'elenco completo delle localizzazioni supportate disponibili per la compilazione è disponibile in "/usr/share/i18n/SUPPORTED" che elenca tutti i nomi esatti delle localizzazioni. Il comando seguente elenca tutte le localizzazioni UTF-8 già compilate in forma binaria.

$ locale -a | grep utf8

Si può riconfigurare il pacchetto locales eseguendo il comando seguente.

# dpkg-reconfigure locales

Questo processo comprende 3 passi successivi.

L'elenco delle localizzazioni disponibili dovrebbe includere "en_US.UTF-8" e tutte le lingue desiderate con "UTF-8".

La localizzazione predefinita raccomandata è "en_US.UTF-8" per l'inglese statunitense. Per le altre lingue, assicurasi di scegliere la localizzazione con "UTF-8"; ognuna di queste può gestire qualsiasi carattere internazionale.

[Nota] Nota

Benché l'impostazione della localizzazione a "C" usi i messaggi in inglese statunitense, gestisce solo i caratteri ASCII.

Si può scegliere una localizzazione specifica solo sotto X Window, indipendentemente dalla localizzazione predefinita di sistema, usando la personalizzazione di PAM (vedere Sezione 4.5, «PAM e NSS») nel modo descritto in seguito.

Questo ambiente dovrebbe fornire la migliore esperienza desktop possibile mantenendo la stabilità. Si ha accesso ad un terminale a caratteri funzionante con messaggi leggibili, anche quando il sistema X Window non funziona. Ciò diventa essenziale per le lingue che usano caratteri non romani, come cinese, giapponese e coreano.

[Nota] Nota

Potrebbe essere disponibile un modo alternativo per ottenere lo stesso risulato, visti i miglioramenti che avvengono nei pacchetti dei gestori delle sessioni X, ma la lettura di quanto segue fornisce un metodo generico di base per l'impostazione della localizzazione. Per gdm3(1), è possibile selezionare la localizzazione della sessione X dal suo menu.

La riga seguente definisce la posizione del file dell'ambiente della lingua, nel file di configurazione di PAM, come "/etc/pam.d/gdm3".

auth    required        pam_env.so read_env=1 envfile=/etc/default/locale

Cambiare tale riga nel modo seguente

auth    required        pam_env.so read_env=1 envfile=/etc/default/locale-x

Per il giapponese, creare un file "/etc/default/locale-x" permessi "-rw-r--r-- 1 root root" contenente quanto segue.

LANG="ja_JP.UTF-8"

Mantenere il file predefinito "/etc/default/locale" per l'uso da parte di altri programmi nel modo seguente.

LANG="en_US.UTF-8"

Questa è la tecnica più generica per personalizzare la localizzazione e rende localizzato il dialogo di selezione stesso del menu di gdm3(1).

In alternativa in questo caso, si può semplicemente cambiare la localizzazione usando il file "~/.xsessionrc".

Per lo scambia di dati interpiattaforma (vedere Sezione 10.1.7, «Supporti di archiviazione removibili»), può essere necessario montare alcuni file system con codifiche particolari. Per esempio, mount(8), se usato senza opzioni, assume che venga usata la codifica CP437 per il file system vfat. È necessario fornire esplicitamente opzioni di montaggio per usare nomi di file UTF-8 o CP932.

[Nota] Nota

Quando una chiavetta USB inseribile a caldo viene automaticamente montata in un ambiente desktop moderno come GNOME, si può fornire una informazione di montaggio di questo tipo cliccando con il tasto destro sull'icona del dispositivo sul desktop, cliccare sulla scheda "Drive", cliccare per espandere "Impostazioni" ed inserire "utf8" in "Opzioni di mount:". La prossima volta che questa chiavetta di memoria verrà montata, sarà abilitato il montaggio con UTF-8.

[Nota] Nota

Se si sta facendo l'aggiornamento di un sistema o spostando dischi da un sistema non UTF-8, i nomi di file con caratteri non ASCII potranno essere codificati con codifiche usate una volta e ora deprecate, come ISO-8859-1 o eucJP. Cercare aiuto sugli strumenti di conversione dei testi per convrtirli in UTF-8. Vedere Sezione 11.1, «Strumenti di conversione di dati testuali».

Samba usa in modo predefinito Unicode per i client più moderni (Windows NT, 200x, XP), ma usa CP850 per client più vecchi (DOS e Windows 9x/Me). Questo comportamento predefinito per i client più vecchi può essere modificato usando "dos charset" nel file "/etc/samba/smb.conf", per esempio usando "CP932" per il giapponese.

Esistono le traduzioni di molti dei messaggi di testo e dei documenti che sono mostrati nel sistema Debian, come messaggi di errore, output standard dei programmi, menu e pagine di manuale. L'insieme di strumenti GNU gettext(1) è usato come strumento di backend per la maggior parte delle attività di traduzione.

aptitude(8) fornisce in "Task" → "Localizzazione" un ampio elenco di utili pacchetti binari che aggiungono alle applicazioni messaggi localizzati e che forniscono documentazione nella versione tradotta.

Per esempio, si possono ottenere i messaggi localizzati per le pagine man installando il pacchetto manpages-<LINGUA>. Per leggere le pagine man di <nomeprogramma> in italiano contenute in "/usr/share/man/it/", eseguire il comando seguente.

LANG=it_IT.UTF-8 man <nomeprogramma>

La disposizione dell'ordinamento dei caratteri con sort(1) è influenzata dalla lingua scelta dalla localizzazione. Le localizzazioni spagnola e inglese ordinano in modo diverso.

Il formato della data mostrato da ls(1) è influenzato dalla localizzazione. Il formato della data di "LANG=C ls -l" è differente da quello con "LANG=en_US.UTF-8" (vedere Sezione 9.2.5, «Visualizzazione personalizzata di date e orari»).

I caratteri di punteggiatura usati per i numeri sono diversi nelle varie localizzazioni. Per esempio, nella localizzazione inglese mille virgola uno è rappresentato come "1,000.1", mentre nella localizzazione in italiano è mostrato come "1.000,1". Si può vedere questa differenza nei programmi per fogli di calcolo.