dpkg-reconfigure
13.3
locale
13.2
locale-gen
13.3
localedef
13.2
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 alle funzionalità relative alla localizzazione per mezzo di librerie. Nei sistemi GNU si tratta 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 nella sezione 16.11.
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 (tabella 13.4); il territorio viene espresso da una sigla di due sole lettere maiuscole, secondo lo standard ISO 3166 (tabella 13.5); l'insieme di caratteri è una sigla numerica che esprime lo 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. Questa cambia, rispetto al valore predefinito, per poter disporre di un simbolo necessario a 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 |
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]
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 13.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.
|
Se possibile è meglio utilizzare soltanto configurazioni locali che prevedono l'uso dell'insieme di caratteri universale; pertanto, sempre così:
|
Tabella 13.4. Sigle che esprimono un linguaggio, secondo lo standard ISO 639.
|
Tabella 13.5. Sigle che esprimono una nazione, secondo lo standard ISO 3166, a due o a tre lettere. Maggiori dettagli sullo standard ISO 3166 sono accessibili presso http://www.ripe.net/lir-services/member-support/info/list-of-members/list-of-country-codes-and-rirs.
|
Tabella 13.6. Conversione tra le unità britanniche (imperiali) più comuni.
|
1) GNU C Library GNU LGPL e altre licenze in base alla porzione di codice
«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net