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. Il supporto per metodo di input con Fcitx
8.2.5. Un esempio per il giapponese
8.3. L'output sul display
8.3.1. Configurazione del terminale
8.3.2. 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 unità flash USB inseribile a caldo viene automaticamente montata in un ambiente desktop moderno come GNOME, si può fornire una opzione di montaggio di questo tipo cliccando con il tasto destro sull'icona nel desktop, cliccando 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.

La tastiera di sistema può essere configurata a diversi livelli del sistema

  • Kernel Linux: keyboard(5)

  • Server X: setxkbmap(1), xkeyboard-config(5), variabile d'ambiente XMODIFIERS

  • Ambiente desktop grafico: Infrastruttura per metodo di input (IM): ibus, fcitx5

  • Applicazioni: variabili d'ambiente per impostare la fonte di input: GTK_IM_MODULE, QT_IM_MODULE, QT_IM_MODULES, ...

Una infrastruttura per metodo di input è costituita da:

  • Motore di metodo di input (IME): l'effettivo metodo di input

  • Configurazione: gestisce la configurazione per IBus e altri servizi come i plugin per IME

  • Pannello: interfaccia utente come barra della lingua e tabella per selezione lingue candidate

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

Keyboard        UI panel    Configuration          Application
|                  ^ |           |                        ^  ^
v                  | v           v                        |  |
Linux kernel -> Input method engine (IME) -+-> Gtk, Qt ---+  |
                   | ^                     |                 |
                   | |                     +-> X11, Wayland -+
                   v |
                IME plugin (ibus-mozc, ...)

A differenza del protocollo X Window, il protocollo centrale di Wayland non supporta nemmeno l'inserimento di caratteri accentati. I compositori Wayland di comune utilizzo, come Mutter per GNOME o KWin per KDE, implementano protocolli di estensione come il text-input-unstable-v3 per l'input di testo (vedere "protocolli Wayland attuali e stato del loro supporto").

Il protocollo text-input-unstable-v3 funziona bene con metodi di input per Wayland (vedere il "progetto per metodo di input per Wayland post-mortem").

  • La maggior parte delle applicazioni con GUI sono create con librerie GUI come GTK o Qt che supportano text-input-unstable-v3.

  • I motori per metodo di input (IME) di uso comune, come IBus o Fcitx (version 5), possono funzionare con text-input-unstable-v3.

  • Gli IME supportano l'input di testo per molte lingue tramite plugin.

  • Gli IME recenti integrano funzionalità "X Keyboard Extension (XKB)" come setxkbmap, in passato fornite da X Window per supportare l'input di caratteri accentati per le lingue europee per Wayland.

Per GNOME, "ibus" è l'IME predefinito che viene automaticamente installato attraverso le dipendenze dei pacchetti.

Ecco l'elenco dei pacchetti di IBus e dei suoi plugin.


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. Installare il pacchetto con gli strumenti di input per il giapponese ibus-mozc (o ibus-anthy).

    • Generico: eseguire ibus-setup(1) → selezionare "Metodo di Input" → cliccare su "Aggiungi" → "Giapponese" → "Mozc (o Anthy)" → cliccare "Aggiungi"

    • GNOME: selezionare "Impostazioni" → "Tastiera" → "Sorgenti input" → cliccare su"+" in "Sorgenti input" → "Giapponese" → "Mozc (o Anthy)" → cliccare "Aggiungi"

  2. Si possono scegliere più sorgenti di input.

  3. Rieseguire il login nell'account utente

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

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

  • Per Wayland:

    • Il pacchetto im-config non fa nulla e può essere rimosso senza problemi.

    • Probabilmente non è necessario impostare variabili d'ambiente eccetto che per compatibilità all'indietro, ecc.

    • Se è necessario impostare variabili d'ambiente, creare un file del tipo "~/.config/environment.d/50-input-method.conf" per impostarle.

  • Per X Window:

    • Installare il pacchetto im-config.

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

Il sistema Debian può essere configurato per funzionare con molte disposizioni per la console udando il pacchetto console-setup.

# dpkg-reconfigure console-setup

Per la console Linux e il sistema X Window, questo aggiorna i parametri di configurazione in "/etc/default/console-setup" per visualizzare molti caratteri non ASCII, inclusi quelli accentati usati da molte lingue europee che vengono resi disponibili.

Ci sono diversi componenti per configurare le funzionalità della console a caratteri e il sistema ncurses(3).

Se, con un xterm non Debian, la voce terminfo per xterm non funziona, cambiare il tipo di terminale "$TERM" da "xterm" ad una delle versioni con funzionalità limitate come "xterm-r6" quando si fa il login ad un sistema Debian da remoto. Per ulteriori informazioni vedere "/usr/share/doc/libncurses5/FAQ" . "dumb" è il minimo denominatore comune per "$TERM".

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, 4.2 Ambiguous Characters).

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.