[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 48.   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 58.

48.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 543); il territorio viene espresso da una sigla di due sole lettere maiuscole, secondo lo standard ISO 3166 (sezione 544); 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

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

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 che poi 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.ISO-8859-1, occorre fare riferimento ai file /usr/share/i18n/locales/it_IT e /usr/share/i18n/charmaps/ISO-8859-1 (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/ISO-8859-1 <-'
`->/usr/lib/locale/it_IT[Invio]

48.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 questo file 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 48.1. Aspetto del programma di configurazione delle definizioni locali che si intendono gestire nel sistema.

Debian Configuration

  .------------------------- 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 diventa indifferente usare la sigla italian oppure it_IT.ISO-8859-1.

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org

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


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

[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]