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. La localizzazione
8.3.1. Nozioni base sulla codifica
8.3.2. Logica alla base dell'uso della localizzazione UTF-8
8.3.3. La (ri)configurazione della localizzazione
8.3.4. Il valore della variabile di ambiente "$LANG"
8.3.5. Localizzazione specifica solamente in X Window
8.3.6. Codifica per i nomi di file
8.3.7. Messaggi localizzati e documentazione tradotta
8.3.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.3.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.

8.1. L'input da tastiera

Il sistema Debian può essere configurato per funzionare con molte disposizioni di tastiera internazionali.

Tabella 8.1. Elenco di metodi di riconfigurazione della tastiera

ambiente comando
Console Linux dpkg-reconfigure --priority=low console-data
X Window dpkg-reconfigure --priority=low xserver-xorg

Ciò supporta l'input da tastiera per i caratteri accentati di molte lingue Europee tramite la funzione dead-key. Per le lingue asiatiche, è necessario il supporto per metodi di input più complessi, come IBus che sarà trattato in seguito.

8.1.1. Il supporto per metodo di input con IBus

La configurazione dell'input per più lingue per il sistema Debian è semplificato dall'uso della famiglia di pacchetti IBus con il pacchetto im-config. Quello che segue è un elenco dei pacchetti IBus.

Tabella 8.2. Elenco dei metodi di input supportati da IBus

pacchetto popcon dimensione localizzazioni supportate
ibus * V:0.5, I:0.6 1564 infrastruttura per metodo di input che usa dbus
ibus-mozc * V:0.04, I:0.08 881 giapponese
ibus-anthy * V:0.12, I:0.2 626 " "
ibus-skk * V:0.02, I:0.04 420 " "
ibus-pinyin * V:0.14, I:0.2 792 cinese (per zh_CN)
ibus-chewing * V:0.01, I:0.05 196 " " (per zh_TW)
ibus-hangul * V:0.02, I:0.05 172 coreano
ibus-table * V:0.07, I:0.16 696 motore di tabelle per IBus
ibus-table-thai * I:0.00 143 thailandese
ibus-unikey * V:0.01, I:0.01 279 vietnamita
ibus-m17n * V:0.04, I:0.08 159 multilingue: indico, arabico e altri

Il metodo kinput2 e altri classici metodi di input dipendenti dalla localizzazione per le lingue asiatiche esistono sempre, ma non sono raccomandati per i moderni ambienti X UTF-8. Gli insiemi di strumenti SCIM e uim costituiscono un approccio un po' più datato al metodo di input internazionale per gli ambienti X UTF-8 moderni.

8.1.2. Un esempio per il giapponese

Trovo che il metodo di input per il giapponese avviato dall'ambiente inglese ("en_US.UTF-8") sia molto utile. Ecco come farlo con Ibus.

  1. Install the Japanese input tool package ibus-mozc with its recommended packages such as im-config.

  2. Eseguire "im-config" da una shell utente e selezionare "ibus".

  3. Select "System" → "Preferences" → "IBus Preferences" → "Input Method" → "Select an input method" → "Japanese" → "MOZC" and click "Add".

  4. Rieseguire il login nell'account utente

  5. Verificare le impostazioni con "im-config".

  6. Impostare il metodo di input e la modalità cliccando con il pulsante destro sulla barra degli strumenti GUI. (Si può ridurre la scelta di menu dei metodi di input.)

  7. Avviare il metodo di input IBus con CTRL-SPAZIO.

Notare quanto segue.

  • im-config(8) si comporta in modo diverso a seconda se è eseguito da root o no.

  • im-config(8) abilita il miglior metodo di input sul sistema come impostazione predefinita senza alcuna azione dell'utente.

  • The GUI menu entry for im-config(8) is disabled as default to prevent cluttering.

8.1.3. disabilitare il metodo di input

Se si desidera inserire dell'input senza passare da XIM, impostare il valore di "$XMODIFIERS" a "none" quando si avvia un programma. Una situazione di questo tipo potrebbe verificarsi quando si usa l'infrastruttura di input in giapponese egg in emacs(1). Dalla shell usare il comando seguente.

$ XMODIFIERS=none emacs

Per modificare il comando eseguito dal menu Debian, posizionare una configurazione personalizzata in "/etc/menu/" seguendo il metodo descritto in "/usr/share/doc/menu/html".

8.2. L'output sul display

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.)

8.3. La localizzazione

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

8.3.1. Nozioni base sulla codifica

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, «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».

8.3.2. Logica alla base dell'uso della localizzazione UTF-8

La codifica UTF-8 è il sistema di codifica moderno e razionale per l'internazionalizzazione e permette di rappresentare i caratteri Unicode, cioè praticamente tutti i caratteri conosciuti. UTF sta per schemi 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 destra e sinistra per esempio non sono disponibili in ASCII.

“citazione tra virgolette doppie”
‘citazione tra virgolette singole’

Quando dati di testo in puro ASCII sono convertiti in UTF-8 hanno esattamente gli stessi contenuto e dimensioni 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.

8.3.3. La (ri)configurazione della localizzazione

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 si sia installato il pachetto locales-all.) L'elenco completo delle localizzazioni supportate disponibili per la compilazione è contenuto 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.

  1. Aggiornare l'elenco delle localizzazioni disponibili

  2. Compilarle in forma binaria

  3. Impostare, per l'uso da parte di PAM (vedere Sezione 4.5, «PAM e NSS») il valore della localizzazione di sistema nel file "/etc/defaults/locale".

L'elenco delle localizzazioni disponibili dobrebbe 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.

8.3.4. Il valore della variabile di ambiente "$LANG"

Il valore della variabile d'ambiente "$LANG" viene impostato e modificato da molte applicazioni.

  • È impostato inizialmente dal meccanismo PAM di login(1) per i programmi nelle console Linux locali

  • È impostato inizialmente dal meccanismo PAM del display manager per tutti i programmi X

  • È impostato inizialmente dal meccanismo PAM per ssh(1) per i programmi nelle console remote

  • È modificato da alcuni display manager come gdm(1) per tutti i programmi X

  • È modificato dal codice di avvio della sessione X tramite "~/.xsessionrc" per tutti i programmi X (funzionalità di lenny)

  • È modificato dal codice di avvio della shell, ad esempio "~/.bashrc" per tutti i programmi in console

[Suggerimento] Suggerimento

È una buona installare la localizzazione predefinita per tutto il sistema come "en_US.UTF-8" per avere la massima compatibilità.

8.3.5. Localizzazione specifica solamente in X Window

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 gdm(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/gdm".

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/defaults/locale-gdm" permessi "-rw-r--r-- 1 root root" contenente quanto segue.

LANG="ja_JP.UTF-8"

Mantenere il file predefinito "/etc/defaults/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 gdm(1).

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

8.3.6. Codifica per i nomi di file

Per lo scambia di dati interpiattaforma (vedere Sezione 10.1.10, «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.

8.3.7. Messaggi localizzati e documentazione tradotta

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>

8.3.8. Effetti della localizzazione

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 tedesco è mostrato come "1.000,1". Si può vedere questa differenza nei programmi per fogli di calcolo.