Capitolo 8. I18N e L10N

Indice

8.1. La localizzazione
8.1.1. Logica alla base dell'uso della localizzazione UTF-8
8.1.2. La (ri)configurazione della localizzazione
8.1.3. Codifica per i nomi di file
8.1.4. Messaggi localizzati e documentazione tradotta
8.1.5. Effetti della localizzazione
8.2. L'input da tastiera
8.2.1. L'input da tastiera per la console Linux e X Window
8.2.2. L'input da tastiera per Wayland
8.2.3. Il supporto per metodo di input con IBus
8.2.4. Un esempio per il giapponese
8.3. L'output sul display
8.4. Caratteri dell'Asia dell'est con larghezza ambigua

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. Per i dettagli vedere Internationalizzazione e localizzazione.

Il comportamento dei programmi che supportano l'internazionalizzazione è configurato dalla variabile d'ambiente "$LANG" per supportare la localizzazione. L'effettivo supporto delle funzionalità dipendenti dalla localizzazione da parte della libreria libc richiede l'installazione dei pacchetti locales o locales-all. Il pacchetto locales deve essere inizializzato correttamente.

Se non è installato né il pacchetto localeslocales-all, il supporto delle funzionalità di localizzazione è perso e il sistema usa i messaggi in inglese US e gestisce i dati come ASCII. Questo comportamento è uguale a quando "$LANG" è impostato a "LANG=", "LANG=C" o "LANG=POSIX".

Il software moderno, come GNOME e KDE ha il supporto per più lingue. È 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.

L'attuale sistema GUI del desktop Debian normalmente imposta la localizzazione nell'ambiente GUI come "LANG=xx_YY.UTF-8". Qui "xx" è il codice ISO 639 di lingua e "YY" è il codice ISO 3166 di paese. Questi valori sono impostati dal dialogo GUI di configurazione del desktop e cambiano il comportamento del programma. Vedere Sezione 1.5.2, «La variabile "$LANG.

La più semplice rappresentazione di dati testuali è ASCII che è sufficiente per l'inglese e usa meno di 127 caratteri (rappresentabili con 7 bit).

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.

“double quoted text” is not "double quoted ASCII"
‘single quoted text’ is not 'single quoted ASCII'

Per poter gestire più caratteri, molti insiemi di caratteri e sistemi di codifica sono stati usati per supportare molte lingue (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 a 21 bit (cioè da 0 a10FFFF in notazione esadecimale).

Il sistema di codifica UTF-8 fa rientrare i codici Unicode in un flusso di dati ragionevole a 8 bit per la maggior parte compatibile con il sistema di elaborazione dei dati ASCII. Questo fa di UTF-8 la scelta moderna preferita. UTF sta per Unicode Transformation Format (formato di trasformazione di Unicode). Quando i dati in testo semplice ASCII sono convertiti in dati UTF-8, questi hanno esattamente lo stesso contenuto e dimensione di quelli ASCII originali. Perciò non si perde nulla utilizzando la localizzazione UTF-8.

Nella localizzazione UTF-8, se si usa un programma applicativo compatibile, si possono visualizzare e modificare dati di testo in qualsiasi lingua straniera, purché siano installati e abilitati i tipi di carattere e i metodi di input richiesti. Per esempio, nella localizzazione "LANG=it_IT.UTF-8", gedit(1) (editor di testo per il desktop GNOME) può visualizzare e modificare dati testuali in caratteri cinesi continuando a presentare i menu in italiano.

[Suggerimento] Suggerimento

Sia la nuova localizzazione standard "en_US.UTF-8", sia la vecchia localizzazione standard "C"/"POSIX" usano i messaggi in inglese americano standard, ma hanno sottili differenze negli ordinamenti, ecc. Se si desidera gestire in maniera corretta non solo caratteri ASCII, ma anche tutti i caratteri codificati UTF-8 pur mantenendo il vecchio comportamento locale "C", usare in Debian la localizzazione non standard "C.UTF-8".

[Nota] Nota

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.

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 pacchetto locales non viene fornito con dati di localizzazione pre-compilati. È necessario configurarlo.

# dpkg-reconfigure locales

Questo processo comprende 2 passi.

Il valore della localizzazione predefinita a livello di sistema impostato in "/etc/default/locale" può essere scavalcato dalla configurazione con GUI delle applicazioni GUI.

[Nota] Nota

I sistemi di codifica tradizionali possono essere identificati da "/usr/share/i18n/SUPPORTED". Perciò "LANG=en_US" è "LANG=en_US.ISO-8859-1".

Il pacchetto locales-all viene fornito con tutti i dati di localizzazione pre-compilati. Dato che non crea "/etc/default/locale" può essere sempre necessario installare anche il pacchettolocales.

[Suggerimento] Suggerimento

Il pacchetto locales di alcune distribuzioni derivate da Debian viene fornito con dati di localizzazione precompilati per tutte le localizzazioni. Per emulare un tale ambiente di sistema in Debian è necessario installare entrambi i pacchetti locales e locales-all.

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 programname

GNU gettext può gestire liste di priorità delle lingue di traduzione con la variabile d'ambiente $LANGUAGE. Per esempio:

 $ export LANGUAGE="pt:pt_BR:es:it:fr"

Per ulteriori informazioni vedere info gettext e leggere la sezione "The LANGUAGE variable".

Il criterio di ordinamento dei caratteri con sort(1) e ls(1) è influenzato dalla localizzazione. Esportando LANG=en_US.UTF-8 l'ordinamento avviene nell'ordine A->a->B->b...->Z->z, mentre se si esporta LANG=C.UTF-8 l'ordinamento avviene come in ASCII binario A->B->...->Z->a->b....

Il formato della data di ls(1) è influenzato dalla localizzazione (vedere Sezione 9.3.4, «Visualizzazione personalizzata di date e orari»).

Il formato della data di date(1) è influenzato dalla localizzazione. Ad esempio:

 $ unset LC_ALL
 $ LANG=en_US.UTF-8 date
Thu Dec 24 08:30:00 PM JST 2023
 $ LANG=en_GB.UTF-8 date
Thu 24 Dec 20:30:10 JST 2023
 $ LANG=es_ES.UTF-8 date
jue 24 dic 2023 20:30:20 JST
 $ LC_TIME=en_DK.UTF-8 date
2023-12-24T20:30:30 JST

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.

Ogni caratteristica specifica della variabile d'ambiente "$LANG" può essere scavalcata impostando le variabili "$LC_*". Queste variabili d'ambiente a loro volta possono essere scavalcate impostando la variabile "$LC_ALL". Vedere la pagina di manuale locale(7) per i dettagli. A meno di non avere forti motivi per creare configurazioni complesse, stare lontani da esse e usare solo la variabile "$LANG" impostata ad una delle localizzazioni UTF-8.

Per GNOME nei sistemi desktop Wayland, Sezione 8.2.1, «L'input da tastiera per la console Linux e X Window» non può gestire le lingue europee diverse dall'inglese. IBus è stato creato per supportare non solo le lingue asiatiche, ma anche quelle europee. Le dipendenze dai pacchetti dell'ambiente desktop GNOME raccomandano "ibus" attraverso "gnome-shell". Il codice di "ibus" è stato aggiornato per integrare tutte le fuzionalità delle opzioni di setxkbmap e XKB. È necessario configurare ibus dalle "Impostazioni di GNOME" o con "GNOME Tweaks" per l'input da tastiera multilingua.

[Nota] Nota

Se ibus è attivo, la configurazione classica della tastiera X tramite setxkbmap può essere scavalcata da ibus anche neli ambienti desktop classici basati su X. Si può disabilitare un ibus installato usando im-config per impostare il metodo di input a "None" (Nessuno). Per ulteriori informazioni, vedere le inforzioni del Debian Wiki sulla tastiera.

Dato che l'ambiente desktop GNOME raccomanda "ibus" attraverso "gnome-shell", "ibus" è una buona scelta come metodo di input.

L'input multilingua verso l'applicazione è elaborato così:

Keyboard                                       Application
   |                                                 ^
   |                                                 |
   +-> Linux kernel ->  Input method (ibus)  -> Gtk, Qt, X, Wayland
                          +-- Engine--+

Ecco l'elenco dei pacchetti di IBus e del suo motore.


[Nota] Nota

Per il cinese, "fcitx" può essere un'infrastruttura per metodo di input alternativa. Per chi è abituato ad Emacs, "uim" può essere un'alternativa. In entrambi i casi, può essere necessario fare una configurazione manuale aggiuntiva con im-config. Alcuni vecchi metodi di input classici, come "kinput2" possono ancora esistere nei repository Debian, ma non sono raccomandati per gli ambienti moderni.

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 per GNOME in Wayland:

  1. Installare il pacchetto con gli strumenti di input per il giapponese ibus-mozc (o ibus-anthy) insieme ai pacchetti che raccomanda, come im-config.

  2. Selezionare "Impstazioni" → "Tastiera" → "Input Sources" → fare clic su "+" in "Input Sources" → "Japanese" → "Japanese mozc (o anthy)" e fare clic su "Aggiungi" se non è stato attivato.

  3. Si possono scegliere più sorgenti di input.

  4. Rieseguire il login nell'account utente

  5. Impostare ciascuna fonte di input cliccando con il pulsante destro sull'icona della barra degli strumenti GUI.

  6. Passare da una all'altra delle fonti di input installate con SUPER-SPAZIO. (SUPER è solitamente il tasto Windows.)

[Suggerimento] Suggerimento

Se si desidera avere accesso ad un ambiente tastiera con solo alfabeto con la tastiera fisica giapponese in cui Maiusc-2 ha stampato " (virgolette doppie), selezionare "Japanese" nella procedura descritta sopra. Si può inserire giapponese usando "Japanese mozc (o anthy)" con una tastiera fisica "US" in cui Maiusc-2 ha stampato @ (la chiocciolina).

  • La voce di menu GUI per im-config(8) è "Input method".

  • In alternativa eseguire "im-config" dalla shell dell'utente.

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

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

L'ambiente GUI (Capitolo 7, Sistema GUI) può mostrare qualsiasi carattere in UTF-8 purché siano installati e abilitati i tipi di carattere richiesti. (La codifica dei dati dei tipi di carattere originali viene gestita 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 → Nome del profilo → Compatibilità → Caratteri a larghezza ambigua → Stretto

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