Capitolo 8. I18N e L10N

# Capitolo 8. I18N e L10N

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

- L'internazionalizzazione (I18N): per rendere un software capace di gestire potenzialmente localizzazioni multiple.

- Localizzazione (L10N): per fare gestire dal software una localizzazione specifica.

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

## 8.1. La 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 `locales` né `locales-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`"».

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

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

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

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.

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

    # dpkg-reconfigure locales

Questo processo comprende 2 passi.

1. Selezionare tutti i dati di localizzazione richiesti per la compilazione in formato binario. (Assicurarsi di includere almeno una localizzazione UTF-8.)

2. Impostare il valore della localizzazione predefinita a livello di tutto il sistema creando "`/etc/default/locale`", per l'uso da parte di PAM (vedere Sezione 4.5, «PAM e NSS»).

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
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 pacchetto`locales`.

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

### 8.1.3. Codifica per i nomi di file

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
When auto-mounting a hot-pluggable USB flash drive under modern desktop environment such as GNOME, you may provide such mount option by right clicking the icon on the desktop, click "Drive" tab, click to expand "Setting", and entering "utf8" to "Mount options:". The next time this USB flash drive is mounted, mount with UTF-8 is enabled.

| 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.1.4. 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 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".

### 8.1.5. Effetti della localizzazione

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.

## 8.2. L'input da tastiera

The keyboard system can be configured at different layers of the system.

- Linux kernel: keyboard(5)

- X server: setxkbmap(1), xkeyboard-config(5), environment variable `XMODIFIERS`

- GUI desktop environment: Input Method framework: `ibus`, `fcitx5`

- Application: environment variables to set its input source: `GTK_IM_MODULE`, `QT_IM_MODULE`, `QT_IM_MODULES`, ...

Input method framework (IM) consists of:

- Input method engine (IME): Actual input method

- Configuration: Handles the configuration for IBus and other services such as IME plugins

- Panel: User interface such as language bar and candidate selection table

Multilingual input to the application is processed roughly as:

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

### 8.2.1. L'input da tastiera per la console Linux e X Window

The Debian system can be configured to work with many international keyboard arrangements using the `keyboard-configuration` package.

    # dpkg-reconfigure keyboard-configuration

For the Linux console and the X Window system, this updates configuration parameters in "`/etc/default/keyboard`". Many non-ASCII characters including accented characters used by many European languages can be made available with dead key, AltGr key, and compose key.

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

### 8.2.2. L'input da tastiera per Wayland

Unlike the X Window protocol, the Wayland core protocol doesn't even support the input of accented characters. Popular Wayland Compositors, such as Mutter for GNOME or KWin for KDE, implement extension protocols such as the `text-input-unstable-v3` for the text input (see "current Wayland protocols and their support status").

The `text-input-unstable-v3` protocol works well with Input methods for Wayland (see "Wayland input method project post-mortem").

- Most GUI applications are built with GUI libraries such as GTK or Qt which support this `text-input-unstable-v3`.

- Popular Input Method Engines (IME), such as IBus or Fcitx (version 5), can work with this `text-input-unstable-v3`.

- IMEs support text input for many languages with plugins.

- Recent IMEs integrate "X Keyboard Extension (XKB)" functionalities such as `setxkbmap` previously provided by the X Window to support accented character text input for European languages for Wayland.

### 8.2.3. Il supporto per metodo di input con IBus

For GNOME, "`ibus`" is the default IME which is automatically installed via its package dependency.

- Most multilingualized keyboard input features can be configured from "GNOME Settings" or "GNOME Tweaks".

- Some multilingualized keyboard input features may need to be configured from the ibus-setup(1) command.

- The emoji keyboard input is available by typing "`SUPER-.`" (Simultaneously type Windows and period keys) followed by a keyword for each emoji and SPACE-keys.

The list of IBus and its plugin packages are the following.

Tabella 8.1. List of IBus and its plugin packages

pacchetto | popcon | dimensione | localizzazioni supportate
--- | --- | --- | ---
ibus | V:213, I:252 | 1828 | infrastruttura per metodo di input che usa dbus
ibus-mozc | V:2.1, I:3.8 | 978 | giapponese
ibus-anthy | V:0.5, I:1.2 | 8958 | giapponese
ibus-skk | V:0.04, I:0.14 | 242 | giapponese
ibus-kkc | V:0.03, I:0.18 | 211 | giapponese
ibus-libpinyin | V:1.2, I:5.1 | 2767 | cinese (per zh_CN)
ibus-chewing | V:0.19, I:0.90 | 288 | Chinese (for zh_TW)
ibus-libzhuyin | V:0.00, I:0.11 | 41009 | Chinese (for zh_TW)
ibus-rime | V:0.26, I:0.49 | 78 | Chinese (for zh_CN/zh_TW)
ibus-cangjie | V:0.02, I:0.12 | 235 | Chinese (for zh_HK)
ibus-hangul | V:0.3, I:2.0 | 264 | coreano
ibus-libthai | V:0.00, I:0.05 | 84 | thailandese
ibus-table-thai | I:0.05 | 59 | thailandese
ibus-unikey | V:0.20, I:0.43 | 286 | vietnamita
keyman | I:0.10 | 507 | Multilingual: Keyman plugin for over 2000 languages
ibus-table | V:0.08, I:1.00 | 2271 | table plugin for IBus
ibus-m17n | V:0.3, I:2.0 | 373 | multilingue: indico, arabico e altri

### 8.2.4. The input method support with Fcitx

The Fcitx (version 5) input method framework is popular with Chinese users and compatible with "`ibus`".

The list of "`fcitx5`" and its plugin packages are the following.

Tabella 8.2. List of Fcitx5 and its plugin packages

pacchetto | popcon | dimensione | localizzazioni supportate
--- | --- | --- | ---
fcitx5 | V:7, I:12 | 761 | input method framework compatible with "`ibus`"
fcitx5-mozc | V:1.0, I:1.6 | 1260 | giapponese
fcitx5-anthy | V:0.06, I:0.20 | 808 | giapponese
fcitx5-skk | V:0.05, I:0.14 | 369 | giapponese
fcitx5-kkc | V:0.00, I:0.06 | 416 | giapponese
fcitx5-chinese-addons | I:9.0 | 17 | Chinese (metapackage for zh_*)
fcitx5-pinyin | V:3.8, I:9.4 | 1044 | cinese (per zh_CN)
fcitx5-chewing | V:0.2, I:1.0 | 217 | Chinese (for zh_TW)
fcitx5-zhuyin | I:0.06 | 41051 | Chinese (for zh_TW)
fcitx5-rime | V:0.44, I:0.84 | 371 | Chinese (for zh_CN/zh_TW)
fcitx5-table-cangjie-large | I:0.12 | 1292 | Chinese (for zh_HK)
fcitx5-hangul | V:0.09, I:0.23 | 235 | coreano
fcitx5-libthai | I:0.05 | 119 | thailandese
fcitx5-table-thai | I:0.08 | 34 | thailandese
fcitx5-unikey | V:0.08, I:0.20 | 588 | vietnamita
fcitx5-m17n | V:0.12, I:0.51 | 259 | multilingue: indico, arabico e altri
fcitx5-table | V:0.4, I:9.2 | 520 | table plugin for fcitx5
fcitx5-keyman | V:0.03, I:0.04 | 235 | Multilingual: Keyman plugin for over 2000 languages

### 8.2.5. Un esempio per il giapponese

I find the Japanese input method started under English environment ("`en_US.UTF-8`") very useful. Here is how I did this with IBus:

1. Install the Japanese input tool package `ibus-mozc` (or `ibus-anthy`).

2. - Generic: Execute ibus-setup(1) → select "Input Method" → click "`Add`" → "Japanese" → "Mozc (or Anthy)" → click "Add"

   - GNOME: Select "Settings" → "Keyboard" → "Input Sources" → click "`+`" in "Input Sources" → "Japanese" → "Mozc (or Anthy)" → click "Add"

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

- For Wayland:

  - The `im-config` package does nothing and can be removed safely.

  - You probably don't need to set environment variables except for the backward compatibility etc.

  - If you need to set environment variables, create a file such as "`~/.config/environment.d/50-input-method.conf` "to set them.

- For X Window:

  - Install the `im-config` package.

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

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

### 8.3.1. Configurazione del terminale

The Debian system can be configured to work with many international console arrangements using the `console-setup` package.

    # dpkg-reconfigure console-setup

For the Linux console and the X Window system, this updates configuration parameters in "`/etc/default/console-setup`" to display many non-ASCII characters including accented characters used by many European languages can be made available.

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

- Il file "`/etc/terminfo/*/*`" (terminfo(5))

- La variabile d'ambiente "`$TERM`" (term(7))

- setterm(1), stty(1), tic(1) e toe(1)

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`".

### 8.3.2. Caratteri dell'Asia dell'est con larghezza ambigua

Under the East Asian locale, the box drawing, Greek, and Cyrillic characters may be displayed wider than your desired width to cause the unaligned terminal output (see 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`.

Capitolo 7. Sistema GUI |  | Capitolo 9. Suggerimenti per il sistema