Capitolo 13.   Convenzioni nazionali

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.

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

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

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

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

Tabella 13.4. Sigle che esprimono un linguaggio, secondo lo standard ISO 639.

aa Afar ab Abkhazian af Afrikaans
am Amharic ar Arabic as Assamese
ay Aymara az Azerbaijani ba Bashkir
be Byelorussian bg Bulgarian bh Bihari
bi Bislama bn Bengali; Bangla bo Tibetan
br Breton ca Catalan co Corsican
cs Czech cy Welsh da Danish
de German dz Bhutani el Greek
en English eo Esperanto es Spanish
et Estonian eu Basque fa Persian
fi Finnish fj Fiji fo Faroese
fr French fy Frisian ga Irish
gd Scots Gaelic gl Galician gn Guarani
gu Gujarati ha Hausa he Hebrew (iw)
hi Hindi hr Croatian hu Hungarian
hy Armenian ia Interlingua id Indonesian (in)
ie Interlingue ik Inupiak is Icelandic
it Italian iu Inuktitut ja Japanese
jw Javanese ka Georgian kk Kazakh
kl Greenlandic km Cambodian kn Kannada
ko Korean ks Kashmiri ku Kurdish
ky Kirghiz la Latin ln Lingala
lo Laothian lt Lithuanian lv Latvian, Lettish
mg Malagasy mi Maori mk Macedonian
ml Malayalam mn Mongolian mo Moldavian
mr Marathi ms Malay mt Maltese
my Burmese na Nauru ne Nepali
nl Dutch no Norwegian oc Occitan
om (Afan) Oromo or Oriya pa Punjabi
pl Polish ps Pashto, Pushto pt Portuguese
qu Quechua rm Rhaeto-Romance rn Kirundi
ro Romanian ru Russian rw Kinyarwanda
sa Sanskrit sd Sindhi sg Sangro
sh Serbo-Croatian si Sinhalese sk Slovak
sl Slovenian sm Samoan sn Shona
so Somali sq Albanian sr Serbian
ss Siswati st Sesotho su Sundanese
sv Swedish sw Swahili ta Tamil
te Telugu tg Tajik th Thai
ti Tigrinya tk Turkmen tl Tagalog
tn Setswana to Tonga tr Turkish
ts Tsonga tt Tatar tw Twi
ug Uighur uk Ukrainian ur Urdu
uz Uzbek vi Vietnamese vo Volapuk
wo Wolof xh Xhosa yi Yiddish (ji)
yo Yoruba za Zhuang zh Chinese
zu Zulu

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.

Territorio Sigla Sigla Territorio Sigla Sigla
AFGHANISTAN AF AFG ÅLAND ISLANDS AX ALA
ALBANIA AL ALB ALGERIA DZ DZA
AMERICAN SAMOA AS ASM ANDORRA AD AND
ANGOLA AO AGO ANGUILLA AI AIA
ANTARCTICA AQ ATA ANTIGUA AND BARBUDA AG ATG
ARGENTINA AR ARG ARMENIA AM ARM
ARUBA AW ABW AUSTRALIA AU AUS
AUSTRIA AT AUT AZERBAIJAN AZ AZE
BAHAMAS BS BHS BAHRAIN BH BHR
BANGLADESH BD BGD BARBADOS BB BRB
BELARUS BY BLR BELGIUM BE BEL
BELIZE BZ BLZ BENIN BJ BEN
BERMUDA BM BMU BHUTAN BT BTN
BOLIVIA BO BOL BOSNIA AND HERZEGOWINA BA BIH
BOTSWANA BW BWA BOUVET ISLAND BV BVT
BRAZIL BR BRA BRITISH INDIAN OCEAN TERRITORY IO IOT
BRUNEI DARUSSALAM BN BRN BULGARIA BG BGR
BURKINA FASO BF BFA BURUNDI BI BDI
CAMBODIA KH KHM CAMEROON CM CMR
CANADA CA CAN CAPE VERDE CV CPV
CAYMAN ISLANDS KY CYM CENTRAL AFRICAN REPUBLIC CF CAF
CHAD TD TCD CHILE CL CHL
CHINA CN CHN CHRISTMAS ISLAND CX CXR
COCOS (KEELING) ISLANDS CC CCK COLOMBIA CO COL
COMOROS KM COM CONGO CG COG
CONGO, THE DEMOCRATIC REPUBLIC OF THE CD COD COOK ISLANDS CK COK
COSTA RICA CR CRI COTE D'IVOIRE CI CIV
CROATIA (Hrvatska) HR HRV CUBA CU CUB
CYPRUS CY CYP CZECH REPUBLIC CZ CZE
DENMARK DK DNK DJIBOUTI DJ DJI
DOMINICA DM DMA DOMINICAN REPUBLIC DO DOM
EAST TIMOR TL TLS ECUADOR EC ECU
EGYPT EG EGY EL SALVADOR SV SLV
EQUATORIAL GUINEA GQ GNQ ERITREA ER ERI
ESTONIA EE EST ETHIOPIA ET ETH
FALKLAND ISLANDS (MALVINAS) FK FLK FAROE ISLANDS FO FRO
FIJI FJ FJI FINLAND FI FIN
FRANCE FR FRA FRENCH GUIANA GF GUF
FRENCH POLYNESIA PF PYF FRENCH SOUTHERN TERRITORIES TF ATF
GABON GA GAB GAMBIA GM GMB
GEORGIA GE GEO GERMANY DE DEU
GHANA GH GHA GIBRALTAR GI GIB
GREECE GR GRC GREENLAND GL GRL
GRENADA GD GRD GUADELOUPE GP GLP
GUAM GU GUM GUATEMALA GT GTM
GUINEA GN GIN GUINEA-BISSAU GW GNB
GUYANA GY GUY HAITI HT HTI
HEARD AND MC DONALD ISLANDS HM HMD HOLY SEE (VATICAN CITY STATE) VA VAT
HONDURAS HN HND HONG KONG HK HKG
HUNGARY HU HUN ICELAND IS ISL
INDIA IN IND INDONESIA ID IDN
IRAN (ISLAMIC REPUBLIC OF) IR IRN IRAQ IQ IRQ
IRELAND IE IRL ISRAEL IL ISR
ITALY IT ITA JAMAICA JM JAM
JAPAN JP JPN JORDAN JO JOR
KAZAKHSTAN KZ KAZ KENYA KE KEN
KIRIBATI KI KIR KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF KP PRK
KOREA, REPUBLIC OF KR KOR KUWAIT KW KWT
KYRGYZSTAN KG KGZ LAO PEOPLE'S DEMOCRATIC REPUBLIC LA LAO
LATVIA LV LVA LEBANON LB LBN
LESOTHO LS LSO LIBERIA LR LBR
LIBYAN ARAB JAMAHIRIYA LY LBY LIECHTENSTEIN LI LIE
LITHUANIA LT LTU LUXEMBOURG LU LUX
MACAO MO MAC MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF MK MKD
MADAGASCAR MG MDG MALAWI MW MWI
MALAYSIA MY MYS MALDIVES MV MDV
MALI ML MLI MALTA MT MLT
MARSHALL ISLANDS MH MHL MARTINIQUE MQ MTQ
MAURITANIA MR MRT MAURITIUS MU MUS
MAYOTTE YT MYT MEXICO MX MEX
MICRONESIA, FEDERATED STATES OF FM FSM MOLDOVA, REPUBLIC OF MD MDA
MONACO MC MCO MONGOLIA MN MNG
MONTSERRAT MS MSR MOROCCO MA MAR
MOZAMBIQUE MZ MOZ MYANMAR MM MMR
NAMIBIA NA NAM NAURU NR NRU
NEPAL NP NPL NETHERLANDS NL NLD
NETHERLANDS ANTILLES AN ANT NEW CALEDONIA NC NCL
NEW ZEALAND NZ NZL NICARAGUA NI NIC
NIGER NE NER NIGERIA NG NGA
NIUE NU NIU NORFOLK ISLAND NF NFK
NORTHERN MARIANA ISLANDS MP MNP NORWAY NO NOR
OMAN OM OMN PAKISTAN PK PAK
PALAU PW PLW PALESTINIAN TERRITORY, OCCUPIED PS PSE
PANAMA PA PAN PAPUA NEW GUINEA PG PNG
PARAGUAY PY PRY PERU PE PER
PHILIPPINES PH PHL PITCAIRN PN PCN
POLAND PL POL PORTUGAL PT PRT
PUERTO RICO PR PRI QATAR QA QAT
REUNION RE REU ROMANIA RO ROU
RUSSIAN FEDERATION RU RUS RWANDA RW RWA
SAINT KITTS AND NEVIS KN KNA SAINT LUCIA LC LCA
SAINT VINCENT AND THE GRENADINES VC VCT SAMOA WS WSM
SAN MARINO SM SMR SAO TOME AND PRINCIPE ST STP
SAUDI ARABIA SA SAU SENEGAL SN SEN
SERBIA AND MONTENEGRO CS SCG SEYCHELLES SC SYC
SIERRA LEONE SL SLE SINGAPORE SG SGP
SLOVAKIA (Slovak Republic) SK SVK SLOVENIA SI SVN
SOLOMON ISLANDS SB SLB SOMALIA SO SOM
SOUTH AFRICA ZA ZAF SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS GS SGS
SPAIN ES ESP SRI LANKA LK LKA
ST. HELENA SH SHN ST. PIERRE AND MIQUELON PM SPM
SUDAN SD SDN SURINAME SR SUR
SVALBARD AND JAN MAYEN ISLANDS SJ SJM SWAZILAND SZ SWZ
SWEDEN SE SWE SWITZERLAND CH CHE
SYRIAN ARAB REPUBLIC SY SYR TAIWAN, PROVINCE OF CHINA TW TWN
TAJIKISTAN TJ TJK TANZANIA, UNITED REPUBLIC OF TZ TZA
THAILAND TH THA TOGO TG TGO
TOKELAU TK TKL TONGA TO TON
TRINIDAD AND TOBAGO TT TTO TUNISIA TN TUN
TURKEY TR TUR TURKMENISTAN TM TKM
TURKS AND CAICOS ISLANDS TC TCA TUVALU TV TUV
UGANDA UG UGA UKRAINE UA UKR
UNITED ARAB EMIRATES AE ARE UNITED KINGDOM GB GBR
UNITED STATES US USA UNITED STATES MINOR OUTLYING ISLANDS UM UMI
URUGUAY UY URY UZBEKISTAN UZ UZB
VANUATU VU VUT VENEZUELA VE VEN
VIET NAM VN VNM VIRGIN ISLANDS (BRITISH) VG VGB
VIRGIN ISLANDS (U.S.) VI VIR WALLIS AND FUTUNA ISLANDS WF WLF
WESTERN SAHARA EH ESH YEMEN YE YEM
ZAMBIA ZM ZMB ZIMBABWE ZW ZWE

Tabella 13.6. Conversione tra le unità britanniche (imperiali) più comuni.

Grandezza Unità di misura Equivalenza
Lunghezza pollice (inch) 1 in = 25,4 mm
piede (foot) 1 ft = 12 in = 304,8 mm
iarda (yard) 1 yd = 3 ft = 914,4 mm
Massa libbra (pound) 1 lb = 453,592 37 g
oncia (ounce) 1 oz = 1/16 lb = 28,349 523 1 g
Volume gallone (gallon)
USA
1 galUSA = 3,785 412 dm3
gallone (gallon) UK 1 galUK = 4,546 09 dm3

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