[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home] [volume] [parte]


Capitolo 105.   Internazionalizzazione

L'internazionalizzazione è l'azione con cui si realizza o si modifica un programma, in modo che sia in grado di funzionare utilizzando convenzioni nazionali diverse (principalmente la lingua dei messaggi che emette e il tipo di codifica usata). Il termine inglese a cui si fa riferimento è internationalization e si abbrevia convenzionalmente con la sigla «i18n», perché tra la lettera «i» e la lettera «n» di questa parola ci sono 18 lettere.

La localizzazione è la configurazione attraverso la quale si fa in modo che un programma determinato si adatti a funzionare secondo le particolarità linguistico-nazionali locali. Il termine inglese a cui si fa riferimento è localization e si abbrevia convenzionalmente con la sigla «l10n», perché tra la lettera «l» e la lettera «n» di questa parola ci sono 10 lettere.

I programmi accedono generalmente alle funzionalità relative alla localizzazione per mezzo di librerie. Nei sistemi GNU si tratta generalmente delle librerie C (GNU C Library). (1)

Questo capitolo mostra solo come abilitare la gestione delle impostazioni locali desiderate nel proprio sistema; per la selezione dell'adattamento locale preferito di ogni utente, si interviene all'interno di variabili di ambiente: LANG e LC_*, come descritto nel capitolo 137.

105.1   Sigle identificative delle caratteristiche locali

Per consentire ai programmi di identificare la richiesta di adattarsi a delle caratteristiche locali, si usa una definizione in forma di stringa, con una sintassi particolare, che generalmente corrisponde a quella seguente:

linguaggio[_territorio[.insieme_di_caratteri]]

Il linguaggio viene espresso da una sigla di due sole lettere minuscole, secondo lo standard ISO 639 (sezione 106); il territorio viene espresso da una sigla di due sole lettere maiuscole, secondo lo standard ISO 3166 (sezione 107); l'insieme di caratteri è una sigla numerica che esprime standard ISO corrispondente.

Per esempio, it_CH.ISO-8859-1 identifica la lingua italiana riferita al territorio svizzero, con un insieme di caratteri ISO 8859-1.

Come si vede dal modello sintattico, le informazioni sulla destra possono essere omesse, ma in tal caso vengono determinate in modo predefinito.

Una variante molto comune di questa definizione è quella che riguarda i paesi che utilizzano l'Euro come valuta. In questi casi, può succedere di vedere notazioni del tipo:

it_IT@euro

Questa notazione è praticamente equivalente alla dichiarazione esplicita dell'insieme di caratteri, che cambia per la necessità di avere un simbolo per rappresentare la valuta:

it_IT.ISO-8859-15

Con l'introduzione dell'insieme di caratteri universale (ISO 10646) e della codifica UTF-8, l'utilizzo di codifiche del tipo ISO 8859-n è superato. L'esempio seguente si riferisce alla configurazione ottimale per la lingua italiana, per l'utilizzo dell'insieme di caratteri universale:

it_IT.UTF-8

105.2   Preparazione delle localizzazioni disponibili

Per poter configurare i programmi in modo da adeguarsi alle caratteristiche locali, è necessario che le definizioni necessarie siano disponibili. Si può verificare con il comando locale la disponibilità effettiva:

locale -a[Invio]

Se quello che si ottiene è solo l'elenco seguente, significa che in pratica non sono disponibili delle varianti locali diverse dalla lingua inglese pura e semplice:

C
POSIX

I programmi che sfruttano il meccanismo di localizzazione, si avvalgono della funzione locale(), descritta dalla pagina di manuale locale(7).

Le informazioni relative alla localizzazione sono divise in due parti: un file principale e una mappa per la traduzione di nomi simbolici di caratteri nella codifica effettiva da utilizzare. Questi file si trovano generalmente nelle directory /usr/share/i18n/, ma per poter utilizzare le informazioni che contengono, si devono compilare i file in un formato binario; poi, questi file si collocano presumibilmente a partire dalla directory /usr/lib/locales/. Pertanto, se anche sono disponibili le definizioni locali, possono mancare i file che poi servono alla funzione locale(); l'elenco che si ottiene da locale -a serve a comprendere cosa la funzione locale() è in grado di gestire.

Supponendo di voler compilare le definizioni riferite al modello di localizzazione corrispondente a it_IT.UTF-8, occorre fare riferimento ai file /usr/share/i18n/locales/it_IT e /usr/share/i18n/charmaps/UTF-8 (se questi file sono compressi, appare probabilmente l'estensione .gz, ma per usarli con localedef vanno prima ripristinati alle loro condizioni normali). I file che vengono generati dalla compilazione si inseriscono presumibilmente nella directory /usr/lib/locale/it_IT/, che deve essere creata per l'occasione. In pratica si procede come nell'esempio seguente, attraverso il programma localedef:

mkdir /usr/lib/locale/it_IT[Invio]

localedef -i /usr/share/i18n/locales/it_IT \
  \-f /usr/share/i18n/locales/charmaps/UTF-8 \
  \/usr/lib/locale/it_IT
[Invio]

105.3   Configurazione delle localizzazioni nelle distribuzioni Debian

Le distribuzioni GNU Debian offrono la gestione della localizzazione attraverso un pacchetto apposito, con cui è possibile configurare quali definizioni locali gestire nel file /etc/locale.gen.

Una volta aggiornato questo file, è sufficiente avviare il programma locale-gen per ottenere la ricompilazione delle definizioni locali desiderate:

locale-gen[Invio]

Generalmente, il file /etc/locale.gen viene creato da un altro programma interattivo, senza bisogno di interventi manuali, che poi si occupa anche di avviare locale-gen; precisamente si tratta del comando: dpkg-reconfigure locales.

dpkg-reconfigure locales[Invio]

Figura 105.2. Aspetto del programma di configurazione delle definizioni locali che si intendono gestire nel sistema.

.------------------------- Configuring Locales ---------------------------.
| You can choose locales to be generated by selecting locales you want.   |
| Selected locales will be saved to `/etc/locale.gen' file. You can also  |
| manually edit this file. You need to run `locale-gen' after edit the    |
| file.                                                                   |
|                                                                         |
| Select locales to be generated.                                         |
|                                                                         |
|    [*] id_ID ISO-8859-1                                             *   |
|    [*] is_IS ISO-8859-1                                             *   |
|    [*] it_CH ISO-8859-1                                             *   |
|    [*] it_IT ISO-8859-1                                             *   |
|    [*] it_IT.ISO-8859-1 ISO-8859-1                                  #   |
|    [*] it_IT.UTF-8 UTF-8                                            *   |
|    [*] it_IT@euro ISO-8859-15                                       *   |
|    [*] iw_IL ISO-8859-8                                             *   |
|                                                                         |
|                                                                         |
|                                 <Ok>                                    |
|                                                                         |
`-------------------------------------------------------------------------'

A fianco del file /etc/locale.gen è possibile trovare anche /etc/locale.alias, che associa delle denominazioni più semplici, o comunque alternative, a quelle formali standard. Per esempio, osservando la direttiva seguente, si comprende che sarebbe indifferente usare la sigla italian oppure it_IT.ISO-8859-1.

...
italian         it_IT.ISO-8859-1
...

Se possibile è meglio utilizzare soltanto configurazioni locali che prevedono l'uso dell'insieme di caratteri universale; pertanto, sempre così:

linguaggio_territorio.UTF-8

1) GNU C Library   GNU LGPL e altre licenze in base alla porzione di codice


Appunti di informatica libera 2008 --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome internazionalizzazione.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home]

Valid ISO-HTML!

CSS validator!

Gjlg Metamotore e Web Directory